diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/IPC7/README | 8 | ||||
-rwxr-xr-x | doc/IPC7/ipc7.doc.gz | bin | 0 -> 87676 bytes | |||
-rwxr-xr-x | doc/IPC7/ipc7.ppt.gz | bin | 0 -> 147911 bytes | |||
-rw-r--r-- | doc/LISA-98/README | 13 | ||||
-rw-r--r-- | doc/LISA-98/published.ps.gz | bin | 0 -> 351185 bytes | |||
-rw-r--r-- | doc/mailman-admin.tex | 1352 | ||||
-rw-r--r-- | doc/posting-flow-chart.ps | 735 |
7 files changed, 2108 insertions, 0 deletions
diff --git a/doc/IPC7/README b/doc/IPC7/README new file mode 100644 index 00000000..835ff71a --- /dev/null +++ b/doc/IPC7/README @@ -0,0 +1,8 @@ +The file ipc7.doc contains the MS Word version of the Mailman paper +presented by Ken Manheimer at the 7th International Python Conference, +held in Houston TX, November 10-13, 1998. + +The file ipc7.ppt contains the MS PowerPoint slides Ken used in his +presentation. + +[ipc7.doc.gz and ipc7.ppt.gz are compressed with GNU gzip] diff --git a/doc/IPC7/ipc7.doc.gz b/doc/IPC7/ipc7.doc.gz Binary files differnew file mode 100755 index 00000000..e13bb4aa --- /dev/null +++ b/doc/IPC7/ipc7.doc.gz diff --git a/doc/IPC7/ipc7.ppt.gz b/doc/IPC7/ipc7.ppt.gz Binary files differnew file mode 100755 index 00000000..7fe2cd14 --- /dev/null +++ b/doc/IPC7/ipc7.ppt.gz diff --git a/doc/LISA-98/README b/doc/LISA-98/README new file mode 100644 index 00000000..9809cf05 --- /dev/null +++ b/doc/LISA-98/README @@ -0,0 +1,13 @@ +The file published.ps is (nearly) the PostScript of the paper +published in Usenix LISA 98, Dec 6-11 1998, Boston MA. John Viega +presented this paper on Dec 11, 1998. + +I say "nearly" because there was one minor typo in this file that was +corrected in the final published version. Footnote 3 (page 312) +should read: + + This file may in fact reside in other locations, depending on the + system. For example, on many Solaris machines this file is + located in /etc/mail/aliases. + +[published.ps.gz is compressed with GNU gzip] diff --git a/doc/LISA-98/published.ps.gz b/doc/LISA-98/published.ps.gz Binary files differnew file mode 100644 index 00000000..4ab84dfe --- /dev/null +++ b/doc/LISA-98/published.ps.gz diff --git a/doc/mailman-admin.tex b/doc/mailman-admin.tex new file mode 100644 index 00000000..8cdc7a61 --- /dev/null +++ b/doc/mailman-admin.tex @@ -0,0 +1,1352 @@ +\documentclass{howto} + +\title{GNU Mailman - List Administration Manual} + +% Increment the release number whenever significant changes are made. +% The author and/or editor can define 'significant' however they like. +\release{1.0} + +% At minimum, give your name and an email address. You can include a +% snail-mail address if you like. +\author{Barry A. Warsaw} +%\authoraddress{barry@zope.com} + +\date{\today} % XXX update before tagging release! +\release{2.1} % software release, not documentation +\setreleaseinfo{} % empty for final release +\setshortversion{2.1} % major.minor only for software + +\begin{document} +\maketitle + +% This makes the Abstract go on a separate page in the HTML version; +% if a copyright notice is used, it should go immediately after this. +% +\ifhtml +\chapter*{Front Matter\label{front}} +\fi + +% Copyright statement should go here, if needed. +% ... + +% The abstract should be a paragraph or two long, and describe the +% scope of the document. +\begin{abstract} +\noindent +This document describes the list administrator's interface for GNU +Mailman 2.1. It contains information a list owner would need to +configure their list, either through the web interface or through +email. It also covers the moderator's interface for approving held +messages and subscription notices, and the web interface for creating +new mailing lists. In general, it does not cover the command line +interface to Mailman, installing Mailman, or interacting with Mailman +from the point of view of the user. That information is covered in +other manuals. +\end{abstract} + +\tableofcontents + +\section{Introduction to GNU Mailman} + +GNU Mailman is software that lets you manage electronic mailing lists. +It supports a wide range of mailing list types, such as general +discussion lists and announce-only lists. Mailman has extensive +features for controlling the privacy of your lists, distributing your +list as personalized postings or digests, gatewaying postings to and +from Usenet, and providing automatic bounce detection. Mailman +provides a built-in archiver, multiple natural languages, as well as +advanced content and topic filtering. + +Mailman provides several interfaces to its functionality. Most list +administrators will primarily use the web interface to customize their +lists. There is also a limited email command interface to the +administrative functions, as well as a command line interface if you +have shell access on the Mailman server. This document does not cover +the command line interface; see the GNU Mailman site administrator's +manual for more details. + +\subsection{A List's Email Addresses} + +Every mailing list has a set of email addresses that messages can be +sent to. There's always one address for posting messages to the list, +one address that bounces will be sent to, and addresses for processing +email commands. For example, for a mailing list called +\var{mylist@example.com}, you'd find these addresses: + +\begin{itemize} +\item mylist@example.com -- this is the email address people should + use for new postings to the list. + +\item mylist-join@example.com -- by sending a message to this address, + a new member can request subscription to the list. Both the + \mailheader{Subject} header and body of such a message are + ignored. Note that mylist-subscribe@example.com is an alias for + the -join address. + +\item mylist-leave@example.com -- by sending a message to this address, + a member can request unsubscription from the list. As with the + -join address, the \mailheader{Subject} header and body of the + message is ignored. Note that mylist-unsubscribe@example.com is + an alias for the -leave address. + +\item mylist-owner@example.com -- This address reaches the list owner + and list moderators directly. + +\item mylist-request@example.com -- This address reaches a mail robot + which processes email commands that can be used to set member + subscription options, as well as process other commands. + +\item mylist-bounces@example.com -- This address receives bounces from + members who's addresses have become either temporarily or + permanently inactive. The -bounces address is also a mail robot + that processes bounces and automatically disables or removes + members as configured in the bounce processing settings. Any + bounce messages that are either unrecognized, or do not seem to + contain member addresses, are forwarded to the list + administrators. + +\item mylist-confirm@example.com -- This address is another email + robot, which processes confirmation messages for subscription + and unsubscription requests. +\end{itemize} + +There's also an -admin address which also reaches the list +administrators, but this address only exists for compatibility with +older versions of Mailman. + +\subsection{Administrative Roles} + +There are two primary administrative roles for each mailing list, a +list owner and a list moderator. A list owner is allowed to change +various settings of the list, such as the privacy and archiving +policies, the content filtering settings, etc. The list owner is also +allowed to subscribe or invite members, unsubscribe members, and +change any member's subscription options. + +The list moderator on the other hand, is only allowed to approve or +reject postings and subscription requests. The list moderator can +also do things like clear a member's moderation flag, or add an +address to a list of approved non-member posters. + +Normally, the list owner and list moderator are the same person. In +fact, the list owner can always do all the tasks a list moderator can +do. Access to both the owner's configuration pages, and the +moderation pages are protected by the same password. However, if the +list owner wants to delegate posting and subscription approval +authority to other people, a separate list moderator password can be +set, giving moderators access to the approval pages, but not the +configuration pages. In this setup, list owners can still moderate +the list, of course. + +In the sections that follow, we'll often use the terms list owner and +list administrator interchangably, meaning both roles. When +necessary, we'll distinguish the list moderator explicitly. + +\subsection{A List's Web Pages} + +Every mailing list is also accessible by a number of web pages. Note +that the exact urls is configurable by the site administrator, so they +may be different than what's described below. We'll describe the most +common default configuration, but check with your site administrator +or hosting service for details. + +Mailman provides a set of web pages that list members use to get +information about the list, or manage their membership options. There +are also list archive pages, for browsing an online web-based archive +of the list traffic. These are described in more detail in the GNU +Mailman user's manual. + +Mailman also provides a set of pages for configuring an individual +list, as well as a set of pages for disposing of posting and +subscription requests. + +For a mailing list called \var{mylist} hosted at the domain +\var{lists.example.com}, you would typically access the administrative +pages by going to \code{http://lists.example.com/mailman/admin/mylist}. +The first time you visit this page, you will be presented with a login +page, asking for the list owner's password. When you enter the +password, Mailman will store a session cookie in your browser, so you +don't have to re-authenticate for every action you want to take. This +cookie is stored only until you exit your browser. + +To access the administrative requests page, you'd visit +\code{http://lists.example.com/mailman/admindb/mylist} (note the +\emph{admindb} url as opposed to the \emph{admin} url). Again, the +first time you visit this page, you'll be presented with a login page, +on which you can enter either the list moderator password or the list +owner password. Again, a session cookie is dropped in your browser. +Note also that if you've previously logged in as the list owner, you +do not need to re-login to access the administrative requests page. + +\subsection{Basic Architectural Overview} + +This section will outline the basic architecture of GNU Mailman, such +as how messages are processed by the sytem. Without going into lots +of detail, this information will help you understand how the +configuration options control Mailman's functionality. + +When mail enters the system from your mail server, it is dropped into +one of several Mailman \emph{queues} depending on the address the +message was sent to. For example, if your system has a mailing list +named \var{mylist} and your domain is \var{example.com}, people can +post messages to your list by sending them to +\var{mylist@example.com}. These messages will be dropped into the +\emph{incoming} queue, which is also colloquially called the +\emph{moderate-and-munge} queue. The incoming queue is where most of +the approval process occurs, and it's also where the message is +prepared for sending out to the list membership. + +There are separate queues for the built-in archiver, the bounce +processor, the email command processor, as well as the outgoing email +and news queues. There's also a queue for messages generated by the +Mailman system. Each of these queues typically has one \emph{queue +runner} (or ``qrunner'') that processes messages in the queue. The +qrunners are idle when there are no messages to process. + +Every message in the queues are represented by two files, a message +file and a metadata file. Both of these files share the same base +name, which is a combination of a unique hash and the Unix time that +the message was received. The metadata file has a suffix of +\file{.db} and the message file has a suffix of either \file{.msg} if +stored in plain text, or \file{.pck} if stored in a more efficient +internal representation\footnote{Specifically, a Python pickle}. + +As a message moves through the incoming queue, it performs various +checks on the message, such as whether it matches one of the +moderation criteria, or contains disallowed MIME types. Once a +message is approved for sending to the list membership, the message is +prepared for sending by deleting, adding, or changing message headers, +adding footers, etc. Messages in the incoming queue may also be +stored for appending to digests. + +\section{The List Configuration Pages} + +After logging into the list configuration pages, you'll see the +configuration options for the list, grouped in categories. All the +administrative pages have some common elements. In the upper section, +you'll see two columns labeled ``Configuration Categories''. Some +categories have sub-categories which are only visible when you click +on the category link. The first page you see after logging in will be +the ``General Options'' category. The specific option settings for +each category are described below. + +On the right side of the top section, you'll see a column labeled +``Other Administrative Activities''. Here you'll find some other +things you can do to your list, as well as convenient links to the +list information page and the list archives. Note the big ``Logout'' +link; use this if you're finished configuring your list and don't want +to leave the session cookie active in your browser. + +Below this common header, you'll find a list of this category's +configuration variables, arranged in two columns. In the left column +is a brief description of the option, which also contains a +``details'' link. For many of the variables, more details are +available describing the semantics of the various available settings, +or information on the interaction between this setting and other list +options. Clicking on the details link brings up a page which contains +only the information for that option, as well as a button for +submitting your setting, and a link back to the category page. + +On the right side of the two-column section, you'll see the variable's +current value. Some variables may present a limited set of values, +via radio button or check box arrays. Other variables may present +text entry boxes of one or multiple lines. Most variables control +settings for the operation of the list, but others perform immediate +actions (these are clearly labeled). + +At the bottom of the page, you'll find a ``Submit'' button and a +footer with some more useful links and a few logos. Hitting the +submit button commits your list settings, after they've been +validated. Any invalid values will be ignored and an error message +will be displayed at the top of the resulting page. The results page +will always be the category page that you submitted. + +\subsection{The General Options Category} + +The General Options category is where you can set a variety of +variables that affect basic behavior and public information. In the +descriptions that follow, the variable name is given first, along with +an overview and a description of what that variable controls. + +\subsubsection{General list personality} + +These variables, grouped under the general list personality section, +control some public information about the mailing list. + +\begin{description} +\item[real_name] + Every mailing list has both a \emph{posting name} and a \emph{real + name}. The posting name shows up in urls and in email addresses, + e.g. the \code{mylist} in \code{mylist@example.com}. The posting + name is always presented in lower case, with alphanumeric + characters and no spaces. The list's real name is used in some + public information and email responses, such as in the general + list overview. The real name can differ from the posting name by + case only. For example, if the posting name is \code{mylist}, the + real name can be \code{Posting}. + +\item[owner] + This variable contains a list of email addresses, one address per + line, of the list owners. These addresses are used whenever the + list owners need to be contacted, either by the system or by end + users. Often, these addresses are used in combination with the + \code{moderator} addresses (see below). + +\item[moderator] + This variable contains a list of email addresses, one address per + line, of the list moderators. These addresses are often used in + combination with the \code{owner} addresses. For example, when + you email \code{mylist-owner@example.com}, both the owner and + moderator addresses will receive a copy of the message. + +\item[description] + In the general list overview page, which shows you every available + mailing list, each list is displayed with a short description. + The contents of this variable is that description. Note that in + emails from the mailing list, this description is also used in the + comment section of the \mailheader{To} address. This text should + be relatively short and no longer than one line. + +\item[info] + This variable contains a longer description of the mailing list. + It is included at the top of the list's information page, and it + can contain HTML. However, blank lines will be automatically + converted into paragraph breaks. Preview your HTML though, + because unclosed or invalid HTML can prevent display of parts of + the list information page. + +\item[subject_prefix] + This is a string that will be prepended to the + \mailheader{Subject} header of any message posted to the list. + For example, if a message is posted to the list with a + \mailheader{Subject} like: + + \begin{verbatim} + Subject: This is a message + \end{verbatim} + + and the \code{subject_prefix} is \code{[My List] } (note the + trailing space!), then the message will be received like so: + + \begin{verbatim} + Subject: [My List] This is a message + \end{verbatim} + + If you leave \code{subject_prefix} empty, no prefix will be added + to the \mailheader{Subject}. Mailman is careful not to add a + prefix when the header already has one, as is the case in replies + for example. The prefix can also contain characters in the list's + preferred language. In this case, because of vagarities of the + email standards, you may or may not want to add a trailing space. + +\item[anonymous_list] + This variable allows you to turn on some simple anonymizing + features of Mailman. When you set this option to \emph{Yes}, + Mailman will remove or replace the \mailheader{From}, + \mailheader{Sender}, and \mailheader{Reply-To} fields of any + message posted to the list. + + Note that this option is simply an aid for anonymization, it + doesn't guarantee it. For example, a poster's identity could be + evident in their signature, or in other mail headers, or even in + the style of the content of the message. There's little Mailman + can do about this kind of identity leakage. +\end{description} + +\subsubsection{Reply-To header munging} + +This section controls what happens to the \mailheader{Reply-To} +headers of messages posted through your list. + +Beware! \mailheader{Reply-To} munging is considered a religious issue +and the policies you set here can ignite some of the most heated +off-topic flame wars on your mailing lists. We'll try to stay as +agnostic as possible, but our biases may still peak through. + +\mailheader{Reply-To} is a header that is commonly used to redirect +replies to messages. Exactly what happens when your uses reply to +such a message depends on the mail readers your users use, and what +functions they provide. Usually, there is both a ``reply to sender'' +button and a ``reply to all'' button. If people use these buttons +correctly, you will probably never need to munge +\mailheader{Reply-To}, so the default values should be fine. + +Since an informed decision is always best, here are links to two +articles that discuss the opposing viewpoints in great detail: + +\begin{itemize} + +\item \ulink{Reply-To Munging Considered + Harmful}{http://www.unicom.com/pw/reply-to-harmful.html} +\item \ulink{Reply-To Munging Considered + Useful}{http://www.metasystema.org/essays/reply-to-useful.mhtml} + +\end{itemize} + +The three options in this section work together to provide enough +flexibility to do whatever \mailheader{Reply-To} munging you might +(misguidingly :) feel you need to do. + +\begin{description} + +\item[first_strip_reply_to] + This variable controls whether any \mailheader{Reply-To} header + already present in the posted message should get removed before + any other munging occurs. Stripping this header will be done + regardless of whether or not Mailman will add its own + \mailheader{Reply-To} header to the message. + + If this option is set to \emph{No}, then any existing + \mailheader{Reply-To} header will be retained in the posted + message. If Mailman adds its own header, it will contain + addresses which are the union of the original header and the + Mailman added addresses. The mail standards specify that a + message may only have one \mailheader{Reply-To} header, but that + that header may contain multiple addresses. + +\item[reply_goes_to_list] + This variable controls whether Mailman will add its own + \mailheader{Reply-To} header, and if so, what the value of that + header will be (not counting original header stripping -- see + above). + + When you set this variable to \emph{Poster}, no additional + \mailheader{Reply-To} header will be added by Mailman. This + setting is strongly recommended. + + When you set this variable to \emph{This list}, a + \mailheader{Reply-To} header pointing back to your list's posting + address will be added. + + When you set this variable to \emph{Explicit address}, the value + of the variable \code{reply_to_address} (see below) will be + added. Note that this is one situation where + \mailheader{Reply-To} munging may have a legitimate purpose. Say + you have two lists at your site, an announce list and a discussion + list. The announce list might allow postings only from a small + number of approved users; the general list membership probably + can't post to this list. But you want to allow comments on + announcements to be posted to the general discussion list by any + list member. In this case, you can set the \mailheader{Reply-To} + header for the announce list to point to the discussion list's + posting address. + +\item[reply_to_address] + This is the address that will be added in the + \mailheader{Reply-To} header if \code{reply_goes_to_list} is set + to \emph{Explicit address}. + +\end{description} + +\subsubsection{Umbrella list settings} + +TBD. Note that umbrella lists are deprecated and will be replace with +a better mechanism for Mailman 3.0. + +\subsubsection{Notifications} + +Mailman sends notifications to the list administrators or list members +under a number of different circumstances. Most of these +notifications can be configured in this section, but see the Bounce +Processing and Auto-responder categories for other notifications that +Mailman can send. + +\begin{description} +\item[send_reminders] + By default Mailman sends all list members a monthly password + reminder. This notice serves two purposes. First, it reminds + people about all the lists they may be subscribed to on this + domain, including the lists where their subscription may be + disabled. Second, it reminds people about their passwords for + these lists, as well as the url for their personal options pages, + so that they can more easily configure their subscription options. + + Some people get annoyed with these monthly reminders, and they can + disable the reminders via their subscription options page. For + some lists, the monthly reminders aren't appropriate for any of + the members, so you can disable them list-wide by setting the + \code{send_reminders} variable to \emph{No}. + +\item[welcome_msg] + When new members are subscribed to the list, either by their own + action, or the action of a list administrator, a welcome message + can be sent to them. The welcome message contains some common + boilerplate information, such as the name of the list, + instructions for posting to the list, and the member's + subscription password. You can add additional information to the + welcome message by typing the text into the \code{welcome_msg} + text box. Note that because this text is sent as part of an + email, it should \strong{not} contain HTML. + +\item[send_welcome_msg] + This flag controls whether or not the welcome message is sent to + new subscribers. + +\item[goodbye_msg] + Like the \code{welcome_msg}, a ``goodbye'' message can be sent to + members when they unsubscribe from the list. Unlike the welcome + message, there's no boilerplate for the goodbye message. Enter + the entire goodbye message you'd like unsubscribing members to + receive into the \code{goodbye_msg} text box. + +\item[send_goodbye_msg] + This flag controls whether or not the goodbye message is sent to + unsubscribing members. + +\item[admin_immed_notify] + List moderators get notifications of pending administrative + actions, such as subscription or unsubscription requests that + require moderator approval, or posted messages that are being held + for moderator approval. List moderators will always get a daily + summary of such pending requests, but they can also get immediate + notifications when such a request is made. The + \code{admin_immed_notify} variable controls whether these + immediate notifications are sent or not. It's generally a good + idea to leave this set to \emph{Yes}. + +\item[admin_notify_mchanges] + This variable controls whether the list administrators should get + notifications when members join or leave the list. + +\item[respond_to_post_requests] + This variable controls whether the original sender of a posting + gets a notice when their message is held for moderator approval. + +\end{description} + +\subsubsection{Additional settings} + +This section contains some miscellaneous settings for your mailing +list. + +\begin{description} +\item[emergency] + When this option is enabled, all list traffic is emergency + moderated, i.e. held for moderation. Turn this option on when + your list is experiencing a flamewar and you want a cooling off + period. + +\item[new_member_options] + Each member has a set of subscription options which they can use + to control how they receive messages and otherwise interact with + the list. While the members can change these settings by logging + into their personal options page, you might want to set the + default for a number of the member options. You can do that with + this variable, but see also the other categories for other member + defaults you can set. + + This variable presents a set of checkboxes which control the + defaults for some of the member options. \emph{Conceal the + member's address} specifies whether or not the address is + displayed in the list roster. \emph{Acknowledge the member's + posting} controls whether or not Mailman sends an acknowledgement + to a member when they post a message to the list. \emph{Do not + send a copy of a member's own post} specifies whether a member + posting to the list will get a copy of their own posting. + \emph{Filter out duplicate messages to list members (if possible)} + specifies whether members who are explicitly listed as a recipient + of a message (e.g. via the \mailheader{Cc} header) will also get a + copy from Mailman. + + Of course, members can always override these defaults by making + changes on their membership options page. + +\item[administrivia] + This option specifies whether Mailman will search posted messages + for \emph{admimistrivia}, in other words, email commands which + usually should be posted to the \code{-request} address for the + list. Setting this to \emph{Yes} helps prevent such things as + unsubscribe messages getting erroneously posted to the list. + + If a message seems to contain administrivia, it is held for + moderator approval. + +\item[max_message_size] + This option specifies a maximum message size, in kilobytes, over + which the message will be held for moderator approval. + +\item[host_name] + This option specifies the host name part of email addresses used + by this list. For example, this is the \code{example.com} part of + the posting address \code{mylist@example.com}. + + It's generally not a good idea to change this value, since its + default value is specified when the mailing list is created. + Changing this to an incorrect value could make it difficult to + contact your mailing list. Also not that the url used to visit + the list's pages is not configurable through the web interface. + This is because if you messed it up, you'd have to have the site + administrator fix it. + +\item[include_rfc2369_headers] + \rfc{2369} is an internet standard that describes a bunch of + headers that mailing list managers should add to messages to make + it easier for people to interact with the list. Mail reading + programs which support this standard may provide buttons for easy + access to the list's archives, or for subscribing and + unsubscribing to the list. It's generally a good idea to enable + these headers as it provides for an improved user experience. + These headers are often called the \code{List-*} headers. + + However, not all mail readers are standards compliant yet, and if + you have a large number of members who are using non-compliant + mail readers, they may be annoyed at these headers. You should + first try to educate your members as to why these headers exist, + and how to hide them in their mail clients. As a last resort you + can disable these headers, but this is not recommended. + +\item[include_list_post_header] + The \mailheader{List-Post} header is one of the headers + recommended by \rfc{2369}. However for some announce-only mailing + lists, only a very select group of people are allowed to post to + the list; the general membership is usually not allowed to post to + such lists. For lists of this nature, the \mailheader{List-Post} + header is misleading. Select \emph{No} to disable the inclusion + of this header. (This does not affect the inclusion of the other + \code{List-*} headers.) +\end{description} + +\subsection{The Passwords Category} +As mentioned above, there are two primary administrative roles for +mailing lists. In this category you can specify the password for +these roles. + +The list owner has total control over the configuration of their +mailing list (within some bounds as specified by the site +administrator). Note that on this page, for historical reasons, the +list owner role is described here as the \emph{list administrator}. +You can set the list owner's password by entering it in the password +field on the left. You must type it twice for confirmation. Note +that if you forget this password, the only way for you to get back +into your list's administrative pages is to ask the site administrator +to reset it for you (there's no password reminders for list owners). + +If you want to delegate list moderation to someone else, you can enter +a different moderator password in the field on the right (typed twice +for confirmation). Note that if you aren't going to delegate +moderation, and the same people are going to both configure the list +and moderate postings to the list, don't enter anything into the +moderator password fields. If you do enter a separate moderator +password, be sure to fill in the \code{moderator} variable in the +\emph{General options} category page. + +\subsection{The Language Options Category} +Mailman is multilingual and internationalized, meaning you can set up +your list so that members can interact with it in any of a number of +natural languages. Of course, Mailman won't translate list +postings. :) + +However, if your site administrator has enabled its support, you can +set your list up to support any of about two dozen languages, such as +German, Italian, Japanese, or Spanish. Your list members can then +choose any of your supported languages as their \emph{preferred +language} for interacting with the list. Such things as their member +options page will be displayed in this language. Each mailing list +also has its own \emph{preferred language} which is the language the +list supports if no other language context is known. + +These variables control the language settings for your mailing list: + +\begin{description} +\item[preferred_language] + This is the list's preferred language, which is the language that + the list administrative pages will be displayed in. Also any + messages sent to the list owners by Mailman will be sent in this + language. This option is presented as a drop-down list containing + the language enabled in the \code{available_languages} variable. + +\item[available_languages] + This set of checkboxes contains all the natural languages that + your site administrator has made available to your mailing lists. + Select any language that you'd either like your members to be able + to view the list in, or that you'd like to be able to use in your + list's \code{preferred_language} variable. + +\item[encode_ascii_prefixes] + If your mailing list's preferred language uses a non-ASCII + character set and the \code{subject_prefix} contains non-ASCII + characters, the prefix will always be encoded according to the + relevant standards. However, if your subject prefix contains only + ASCII characters, you may want to set this option to \emph{Never} + to disable prefix encoding. This can make the subject headers + slightly more readable for users with mail readers that don't + properly handle non-ASCII encodings. + + Note however, that if your mailing list receives both encoded and + unencoded subject headers, you might want to choose \emph{As + needed}. Using this setting, Mailman will not encode ASCII + prefixes when the rest of the header contains only ASCII + characters, but if the original header contains non-ASCII + characters, it will encode the prefix. This avoids an ambiguity + in the standards which could cause some mail readers to display + extra, or missing spaces between the prefix and the original + header. +\end{description} + +\subsection{The Membership Management Category} + +The \emph{Membership Management} category is unlike the other +administrative categories. It doesn't contain configuration variables +or list settings. Instead, it presents a number of pages that allow +you to manage the membership of you list. This includes pages for +subscribing and unsubscribing members, and for searching for members, +and for changing various member-specific settings. + +More details on membership management are described in the Membership +Management section. + +\subsection{The Non-digest Options Category} + +Mailman delivers messages to users via two modes. List members can +elect to receive postings in bundles call \emph{digests} one or a few +times a day, or they can receive messages immediately whenever the +message is posted to the list. This latter delivery mode is also +called \emph{non-digest delivery}. There are two administrative +categories available for separately controlling digest and non-digest +delivery. You can even disable one or the other forms of delivery +(but not both). + +Both kinds of delivery can have list-specific headers and footers +added to them which can contain other useful information you want your +list members to see. For example, you can include instructions for +unsubscribing, or a url to the lists digest, or any other information. + +Non-digest deliveries can also be \emph{personalized} which means +certain parts of the message can contain information tailored to the +member receiving the message. For example, the \mailheader{To} header +will contain the address of the member when deliveries are +personalized. Footers and headers can contain personalized +information as well, such as a link to the individual user's options +page. + +In addition, personalized messages will contain extra information that +Mailman can use to unambiguously track bounces from members. +Ordinarily, Mailman does some pattern recognition on bounce messages +to determine list members whose addresses are no longer valid, but +because of the vagaries of mail systems, and the countless forwards +people can put in place, it's often the case that bounce messages +don't contain any useful information in them. Personalized messages +avoid this problem by encoding information in certain headers that +unambiguously identify the recipient of a message. If that message +bounces, Mailman will know exactly which member it was intended for. + +Note that because personalization requires extra system resources, it +must be enabled by the site administrator before you can choose it. + +Here are the variables which control non-digest delivery: + +\begin{description} +\item[nondigestable] + This option controls whether members can receive immediate + delivery or not. If not, they will be forced to receive messages + in digests. You can't disable non-digest delivery if digests are + already disabled. + +\item[personalize] + This option turns on message personalization. + +\item[msg_header] + This text box lets you enter information that will be included in + the header of every non-digest message sent through the + list. + + See below for more information on what can go in the headers and + footers. If you leave this text box empty, no header will be + added. + +\item[msg_footer] + Just like with the header, you can add a footer to every message. + The same rules apply to footers as apply to headers. +\end{description} + +Headers and footers can contain any text you want. For non-English +lists, the headers and footers can contain any character in the +character set of the list's preferred language. The headers and +footers can also contain \emph{substitution variables} which Mailman +will fill in with information taken from the mailing list. These +substitutions are in Python string interpolation format, where +something like \code{\%(list_name)s} is substituted with he name of +the mailing list. Note that the trailing \samp{s} is +required\footnote{The site administrator can configure lists to use a +simpler interpolation format, where \code{\$list_name} or +\code{\$\{list_name\}} would be substituted with the mailing list's +name. Ask your site administrator if the've configured your list this +way.}. + +For example, a footer containing the following text: + +\begin{verbatim} +This is the \%(list_name)s mailing list +Description: \%(description)s +\end{verbatim} + +might get attached to postings like so: + +\begin{verbatim} +This is the Example mailing list +Description: An example of Mailman mailing lists +\end{verbatim} + +Here is the list of substitution variables available for your headers +and footers: + +\begin{description} +\item[real_name] + This is the value of the \code{real_name} configuration variable + in the General options category. + +\item[list_name] + This is the canonical name of the mailing list. In other words + it's the posting address of the list\footnote{For backward + compatibility, the variable \code{_internal_name} is + equivalent.}. + +\item[host_name] + This is the domain name part of the email address for this list. + +\item[web_page_url] + This is the base url for contacting the list via the web. It can + be appended with \code{listinfo/\%(list_name)s} to yield the + general list information page for the mailing list. + +\item[description] + The brief description of the mailing list. + +\item[info] + This is the full description of the mailing list. + +\item[cgiext] + This is the extension added to CGI scripts. It might be the empty + string, \code{.cgi}, or something else depending on how your site + is configured. +\end{description} + +Note that \code{real_name}, \code{host_name}, \code{description}, and +\code{info} substitution variables take their values from the list +configuration variables of the same name. + +When personalization is enabled, the following substitution variables +are also available: + +\begin{description} +\item[user_address] + The address of the recipient of the message, coerced to lower case. + +\item[user_delivered_to] + The case-preserved address that the user subscribed to the mailing + list with\footnote{Usually it makes no difference which of + \code{user_address} and \code{user_delivered_to} is used, but it's + important to remember that they can be different. When they're + different, Mailman always uses the lower case address as the key + to the member's subscription information, but it always delivers + messages to the case-preserved version.}. + +\item[user_password] + The user's password, in clear text. + +\item[user_name] + The user's full name. + +\item[user_optionsurl] + The url to the user's personal options page. +\end{description} + +\subsection{The Digest Options Category} + +Digest delivery is a way to bundle many articles together into one +package, which can be delivered once per day (if there were any posted +articles), or whenever the package is bigger than a specified limit. +Some users may prefer this style of delivery for higher traffic lists +since they will receive fewer messages. + +Mailman supports two standard digest formats, and if digests are +enabled, users can select which of the two formats they receive. One +is MIME digests, where each message is an attachment inside a +\mimetype{multipart/digest}. This format also contains a summary +table of contents, and of course the an optional header and footer, +and it retains most of the headers of the original messages. + +The second type is called ``plaintext'' digests because they are +readable in mail readers that don't support MIME. Actually, they +adhere to the \rfc{1153} digest standard. The retain some, but not +all of the original messages, but can also include a summary and +headers and footers. + +Like non-digest delivery, you can enable or disable digest delivery, +but you cannot disable both types of delivery. You can specify +different headers and footers for digest and non-digest deliveries. +You cannot personalize digest deliveries. + +As list administrator, you may want to send an urgent message to all +list members, bypassing the normal digest bundling. To do this, send +the message with a \mailheader{Urgent} header, where the value of the +header is the list administrator's password. Non-digest members will +receive the message like normal, but digest members will receive the +message immediately\footnote{They'll also receive the message in the +digest.}. + +Here are the variables which control digest delivery: + +\begin{description} +\item[digestable] + The option controls whether members can receive digest deliveries + or not. If not, they will be forced to receive immediate + deliveries. You can't disable digests if non-digests are already + disabled. + +\item[digest_is_default] + Controls which style of delivery is the default for new members. + You can choose \emph{Regular} (non-digest) or \emph{Digest} + delivery. + +\item[mime_is_default_digest] + If a member is allowed to choose digests, this variable controls + which is the default digest style they will receive. \emph{Plain} + digests are \rfc{1153} format as described above. + +\item[digest_size_threshold] + Normally, digest members get at least one message per day, if + there have been any messages posted to the list. However, for + high volume lists, you may want to send out digests when the size + has reached a certain threshold, otherwise, the one digest they + receive could be huge. This variable controls the size threshold + by specifying the maximum digest size in kilobytes. Note that + this threshold isn't exact. Set this variable to zero to specify + that there is no size threshold, in which case no more than one + digest will be sent out per day. + +\item[digest_send_periodic] + This variable actually controls whether or not a digest is sent + daily when the size threshold has not yet been met. If set to + \emph{No}, then digests will only be sent when they are bigger + than \code{digest_size_threshold}. + +\item[digest_header] + This text box lets you enter information that will be included in + the header of every digest message sent through the list. The + same information can go in this header as can go in the + \code{msg_header}, except for the personalization variables. + +\item[digest_footer] + Just like with the header, you can add a footer to every message. + The same rules apply to digest footers as apply to digest headers. + +\item[digest_volume_frequency] + Each digest is numbered with a volume and an issue. This variable + controls how often a new digest volume is sent. When the digest + volume number is incremented, the issue number is reset to 1. + +\item[_new_volume] + This is an action variable, which forces an increment of the + volume number as soon as you submit the form. + +\item[_send_digest_now] + This is another action variable. Select \emph{Yes}, submit the + form, and the current digest is packaged up and sent to digest + members, regardless of size (well, there has to be at least one + message in the digest). +\end{description} + +\subsection{The Privacy Options Category} + +The Privacy category lets you control how much of the list's +information is public, as well as who can send messages to your list. +It also contains some spam detection filters. Note that this section +is not used to control whether your list's archives are public or +private; for that, use the \ref{Archiving options} category. + +There are four sub-categories: +\begin{itemize} +\item Subscription rules -- i.e. the rules for joining and leaving + your mailing list + +\item Sender filters -- the rules for who may post messages to your + list + +\item Recipient filters -- moderation rules based on the recipient of + the message + +\item Spam filters -- some regular expression based rules for header + matching +\end{itemize} + +The sender, recipient, and spam filtering rules are part of the +general list moderation features of Mailman. When a message is posted +to the list, it is matched against a number of criteria, the outcome +of which determines whether the message is reflected to the membership +or not. In general, the outcome is one of four states: + +\begin{itemize} +\item Approved or Accepted -- the message may be sent on to the + members of the mailing list. + +\item Hold -- the message will be held for moderator approval. The + list owners and moderators will then have to explicitly approve + the message before the list members will see it. + +\item Reject -- the message is bounced back to the original sender, + often with a notice containing the reason the message was + rejected. The list members never see rejected messages. + +\item Discard -- the message is simply thrown away without further + processing. +\end{itemize} + +Many of the fields in this section are text boxes accepting addresses, +one per line. Unless otherwise noted, these also accept regular +expressions which will be matched against an address, if the line +begins with a \^ (caret) character. + +\subsubsection{Subscription rules} + +This subcategory controls the rules for exposing the existance of this +list, and for what new members must do in order to subscribe to the +list. + +\begin{description} +\item[advertised] + This option controls whether this list will show up in the list + overview for the site. Normally, an overview contains the name + and short description of every mailing list in the virtual + domain. By setting this variable to \emph{No}, it will not show + up in this overview, nor will it show up in the administrative + overview. The only way then to find the list is to guess (or + know!) its name. + +\item[subscribe_policy] + This option controls the steps that a new member must take to join + the list. The available options may differ based on some defaults + that the site administrator chooses. They are: + + \begin{itemize} + \item None -- No verification is done on the subscribing + member. This is also called \emph{open subscriptions} and is + generally disabled by default. The site administrator must + allow list admins to choose this option; if not, this option + will not be presented to you. + + \item Confirm -- An email confirmation step is required before the + address is added to the list. When a member requests + subscription, either via the web page or by sending a + message to \var{yourlist}\code{-join@example.com}, Mailman + will send a confirmation message to the requesting address. + This mail-back confirmation contains a unique identifier, + which the requester can present to Mailman in order to + confirm their subscription. This can be done either by + replying to the mail-back, or by visiting the url in the + mail-back message. The url points to a page that lets the + user either discard or confirm their request. + + \item Require approval -- All subscription requests are held for + approval of the list moderator. No mail-back confirmation + is sent, but the list admins will recieve a message + indicating that approval is pending. + + \item Confirm and approve -- Here, a mail-back notice must first + be confirmed by the requester. Once confirmed, the list + moderator must then approve the request. This is the most + secure method for users to subscribe since it both verifies + the requesting address, and forces the list moderators to + approve the request. + + \end{itemize} + +\item[unsubscribe_policy] + Specifies whether the list moderator's approval is required for + unsubscription requests. \emph{No} is highly recommended, since + it is exceedingly impolite to not allow people to leave a mailing + list whenever they want (i.e. opt-out). \emph{Yes} is useful in + some specialized contexts; e.g. you may not want to allow + employees to unsubscribe from the company newsletter. + +\item[ban_list] + This contains a list of addresses (or regular expressiosn), one + per line, that are banned from ever subscribing to your mailing + list. If a match occurs during the subscription process, the + request will be automatically rejected, and the requester will get + a rejection notice. You can use this to permanently ban + troublesome posters to a members-only list. + +\item[private_roster] + This specifies who is allowed to view the roster of member + addresses. If you choose \emph{Anyone}, then the list membership + is completely public. You can limit exposure of the roster to + just list members, or just to the list administrators. In the + former case, a user must enter a valid member's address and + password before they can view the roster. In the latter case, a + list administrator's password must be enter; if a matching admin + password is entered, address field is ignored. + +\item[obscure_addresses] + Controls whether some simple obfuscation of addresses is used when + member addresses are included on web pages. This should reduce + the opportunity for email address harvesting by spammers, although + it probably doesn't eliminate it. +\end{description} + +\subsubsection{Sender filters} + +When a message is posted to the list, a series of moderation criteria are +applied to determine the disposition of the message. This section +contains the modeation controls for postings from both members and +non-members. + +\begin{description} +\item[default_member_moderation] + Member postings are held for moderation if their \emph{moderation + flag} is turned on. Note that only the list administrators can + change the value of a member's moderation flag. + + You can control whether new members get their moderation flag + turned on or off by default when they subscribe to the list. By + turning this flag off by default, postings by members will be + allowed without further intervention (barring other restrictions + such as size or implicit recipient lists -- see below). By + turning the flag on, you can quarantine new member postings to + make sure that they meet your criteria for netiquette, topicality, + etc. Once you determine that the new member understands the + community's posting rules, you can turn off their moderation flag + and let their postings go through unstopped. + + E-newsletter style lists can also be set up by using the + moderation flag. By setting the \code{member_moderation_action} + to \emph{Reject}, and by turning off the moderation flag for just + the few approved senders, your list will operate in essentially a + one-way direction. Note that you'd also need to reject or discard + postings from non-members. + +\item[member_moderation_action] + This is the action to take for postings from a member who's + moderation flag is set. For typical discussion lists, you'll + likely set this to \emph{Hold} so that the list moderator will get + a chance to manually approve, reject, or discard the message. For + e-newsletter and announcement lists, you might want to set this to + \emph{Reject} or \emph{Discard}. + + Note that when a moderated member posts to your list, and the + \code{member_moderation_action} is set to \emph{Hold}, the message + will appear on the administrative requests page. When you dispose + of the message, you will be given an opportunity to clear the + moderation flag at the same time. If you're quarantining new + posts, this makes it very convenient to both approve a new + member's post and de-moderate them at the same time. + +\item[member_moderation_notice] + When a member's moderation flag is turned on and + \code{member_moderation_action} is \emph{Reject}, this variable + contains the text sent in the rejection notice. +\end{description} + +The next batch of variables controls what happens when non-members +post messages to the list. Each of these accepts one email address +per line; regular expressions are allowed if the line starts with the +\^ (caret) character. These address lists are always consulted in the +order in which they're presented on this page (i.e. accepts first, +followed by holds, rejections, and discards). + +\begin{description} +\item[accept_these_nonmembers] + Postings from non-members whose addresses match this list are + accepted, barring other list restrictions due to size, implicit + recipients, etc. You might want to add alternative addresses of + approved posters to this list. + +\item[hold_these_nonmembers] + Postings from non-members whose addresses match this list are + held for moderator approval. + +\item[reject_these_nonmembers] + Postings from non-members whose addresses match this list are + rejected, i.e. bounced back to the original sender. There + currently is no way to add additional text to the rejection + message. + +\item[discard_these_nonmembers] + Postings from non-members whose addresses match this list are + discarded, with no bounce back message. You might want to add the + addresses of known spammers to this list. + +\item[generic_nonmember_action] + This variable controls what happens to non-member posts when the + address of the sender doesn't match any of the above four lists. + If you set this to \emph{Hold}, the posting will appear on the + administrative requests page, and you will be given an opportunity + to add the non-member to one of the above four lists at the same + time you dispose of the held message. + +\item[forward_auto_discards] + When messages from non-members are discarded, either because the + sender address matched \code{discard_these_nonmembers}, or because + \code{generic_nonmember_action} is \emph{Discard}, you can choose + whether such messages are forwarded to the lsit administrators or + not. +\end{description} + +\subsubsection{Recipient Filters} + +The variables in this section control various filters based on the +recipient of the message. + +\begin{description} +\item[require_explicit_destination] + This controls whether the mailing list posting address must be + explicitly named in the \mailheader{To} or \mailheader{Cc} + recipient lists. The main reason why it wouldn't is if the + message was blind-carbon-copied (i.e. \mailheader{Bcc}'d) to the + list. Spammers like to do this, but sometimes legitimate messages + are forwarded to the list this way. + + If the list is not explicitly addressed and this setting is turned + on, the message will be held for moderator approval. + +\item[acceptable_aliases] + This is the list of alternative addresses that are acceptable as a + list posting address when \code{require_explicit_destination} is + enabled. This is useful for when there aliases for the main + posting address (e.g. \code{help@example.com} may be an alias for + \code{help-list@example.com}). + +\item[max_num_recipients] + This is the maximum number of explicit recipients that are allowed + on the posted message. Spammers sometimes send messages with lots + of explicit recipients, so setting this number to a reasonable + value may cut down on spam. +\end{description} + +\subsubsection{Spam Filters} + +This section provides some adjuncts to spam fighting tools; it +doesn't replace dedicated anti-spam tools such as SpamAssassin or +Spambayes. + +\begin{description} +\item[bounce_matching_headers] + This variable contains header regular expressions, one per line, + and if any of a message's headers matches one of these patterns, + it will be held for moderation. The format is a colon separated + header and value, where the header is case insensitive and the + value is any valid Python regular expression. Lines that start + with \# are ignored. + + This variable can be used to catch known spammers by writing + regexps that match against \mailheader{To} or \mailheader{Cc} + lines, or known-bad \mailheader{Message-ID}s. Perhaps more useful + though are patterns that match headers added by spam detection + tools higher up in the tool chain. For example, you might + configure SpamAssassin to add an \mailheader{X-Spam-Score} header + with between zero and 5 stars depending on the spam score. Then + you can add a line to this variable like: + + \begin{verbatim} + X-Spam-Score: [*]{3,5} + \end{verbatim} + + This line will match from 3 to 5 stars in the value of this + field. +\end{description} + +\subsection{The Bounce Processing Category} + +These policies control the automatic bounce processing system in +Mailman. Here's an overview of how it works: + +When a bounce is received, Mailman tries to extract two pieces of +information from the message: the address of the member the message +was intended for, and the severity of the problem causing the bounce. +The severity can be either \emph{hard} for fatal errors, or +\emph{soft} for transient errors. When in doubt, a hard severity is +used. + +If no member address can be extracted from the bounce, then the bounce +message is usually discarded. Every member has a \emph{bounce score}, +initialized at zero, and every time we encounter a bounce from a +member we increment that member's score. Hard bounces increment by 1 +while soft bounces increment by 0.5. We only increment the bounce +score once per day, so even if we receive ten hard bounces from a +member per day, their score will increase by only 1 for that day. + +When a member's bounce score is greater than the \emph{bounce score +threshold} (see below), the member's subscription is disabled. Once +disabled, the member will not receive any postings from the list until +their membership is explicitly re-enabled, either by the list +administrator or the user. However, they will receive occasional +reminders that their membership has been disabled, and these reminders +will include information about how to re-enable their membership. You +can control both the number of reminders the member will receive and +the frequency with which these reminders are sent. + +There is one other important configuration variable; after a certain +period of time -- during which no bounces from the member are received +-- the bounce information is considered stale and discarded. Thus by +adjusting this value, and the score threshold, you can control how +quickly bouncing members are disabled. You should tune both of these +to the frequency and traffic volume of your list. + +\begin{description} + +\item[bounce_processing] + Specifies whether or not this list should do automatic bounce + processing. + +\item[bounce_score_threshold] + This is the bounce score above which a member's subscription will + be automatically disabled. When the subscription is re-enabled, + their bounce score will be reset to zero. This value can be a + floating point number. + +\item[bounce_info_stale_after] + Thenumber of days after which a member's bounce information is + considered stale. If no new bounces have been received in the + interrim, the bounce score is reset to zero. This value must be + an integer. + +\item[bounce_you_are_disabled_warnings] + The number of notices a disabled member will receive before their + address is removed from the mailing list's roster. Set this to 0 + to immediately remove an address from the list once their bounce + score exceeds the threshold. This value must be an integer. + +\item[bounce_you_are_disabled_warnings_interval] + The number of days between each disabled notification. + +\item[bounce_unrecognized_goes_to_list_owner] + This variable controls whether unrecognized bounces are discarded, + or forwarded on the list administrator. The bounce detector isn't + perfect, although personalization can make it much more accurate. + The list owner may want to receive unrecognized bounces so that + they can manually disable or remove such members. +\end{description} + +\subsection{The Archiving Options Category} +\subsection{The Mail/News Gateway Category} +\subsection{The Auto-responder Category} +\subsection{The Content Filtering Category} +\subsection{The Topics Category} + +\section{Membership Management} +\section{Tending to Pending Moderator Requests} +\section{Editing the Public HTML Pages} +\section{Deleting the Mailing List} + +\appendix + +\section{This is an Appendix} + +To create an appendix in a Python HOWTO document, use markup like +this: + +\begin{verbatim} +\appendix + +\section{This is an Appendix} + +To create an appendix in a Python HOWTO document, .... + + +\section{This is another} + +Just add another \section{}, but don't say \appendix again. +\end{verbatim} + + +\end{document} diff --git a/doc/posting-flow-chart.ps b/doc/posting-flow-chart.ps new file mode 100644 index 00000000..e8d47e27 --- /dev/null +++ b/doc/posting-flow-chart.ps @@ -0,0 +1,735 @@ +%!PS-Adobe-2.0 +%%Title: posting-flow-chart +%%Creator: Dia v0.86 +%%CreationDate: Mon Oct 15 13:46:55 2001 +%%For: a user +%%DocumentPaperSizes: A4 +%%Orientation: Landscape +%%BeginSetup +%%EndSetup +%%EndComments +%%BeginProlog +[ /.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 /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 +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def +/Times-Roman-latin1 + /Times-Roman findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Times-Italic-latin1 + /Times-Italic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Times-Bold-latin1 + /Times-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Times-BoldItalic-latin1 + /Times-BoldItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/AvantGarde-Book-latin1 + /AvantGarde-Book findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/AvantGarde-BookOblique-latin1 + /AvantGarde-BookOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/AvantGarde-Demi-latin1 + /AvantGarde-Demi findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/AvantGarde-DemiOblique-latin1 + /AvantGarde-DemiOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Bookman-Light-latin1 + /Bookman-Light findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Bookman-LightItalic-latin1 + /Bookman-LightItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Bookman-Demi-latin1 + /Bookman-Demi findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Bookman-DemiItalic-latin1 + /Bookman-DemiItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Courier-latin1 + /Courier findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Courier-Oblique-latin1 + /Courier-Oblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Courier-Bold-latin1 + /Courier-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Courier-BoldOblique-latin1 + /Courier-BoldOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-latin1 + /Helvetica findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Oblique-latin1 + /Helvetica-Oblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Bold-latin1 + /Helvetica-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-BoldOblique-latin1 + /Helvetica-BoldOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Narrow-latin1 + /Helvetica-Narrow findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Narrow-Oblique-latin1 + /Helvetica-Narrow-Oblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Narrow-Bold-latin1 + /Helvetica-Narrow-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Narrow-BoldOblique-latin1 + /Helvetica-Narrow-BoldOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchoolbook-Roman-latin1 + /NewCenturySchoolbook-Roman findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchoolbook-Italic-latin1 + /NewCenturySchoolbook-Italic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchoolbook-Bold-latin1 + /NewCenturySchoolbook-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchoolbook-BoldItalic-latin1 + /NewCenturySchoolbook-BoldItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Palatino-Roman-latin1 + /Palatino-Roman findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Palatino-Italic-latin1 + /Palatino-Italic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Palatino-Bold-latin1 + /Palatino-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Palatino-BoldItalic-latin1 + /Palatino-BoldItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Symbol-latin1 + /Symbol findfont +definefont pop +/ZapfChancery-MediumItalic-latin1 + /ZapfChancery-MediumItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/ZapfDingbats-latin1 + /ZapfDingbats findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/cp {closepath} bind def +/c {curveto} bind def +/f {fill} bind def +/a {arc} bind def +/ef {eofill} bind def +/ex {exch} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth pop} bind def +/tr {translate} bind def + +/ellipsedict 8 dict def +ellipsedict /mtrx matrix put +/ellipse +{ ellipsedict begin + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def /savematrix mtrx currentmatrix def + x y tr xrad yrad sc + 0 0 1 startangle endangle arc + savematrix setmatrix + end +} def + +/mergeprocs { +dup length +3 -1 roll +dup +length +dup +5 1 roll +3 -1 roll +add +array cvx +dup +3 -1 roll +0 exch +putinterval +dup +4 2 roll +putinterval +} bind def +%%EndProlog + + +%%Page: 1 1 +gs +90 rotate +10.504277 -10.504277 scale +-7.390052 13.596868 translate +n 15.000000 -5.986920 m 79.927437 -5.986920 l 79.927437 35.463012 l 15.000000 35.463012 l 15.000000 -5.986920 l clip +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 28.288577 -5.936920 m 34.143683 -5.936920 l 34.952105 -5.936920 35.607460 -5.489205 35.607460 -4.936920 c 35.607460 -4.384635 34.952105 -3.936920 34.143683 -3.936920 c 28.288577 -3.936920 l 27.480155 -3.936920 26.824800 -4.384635 26.824800 -4.936920 c 26.824800 -5.489205 27.480155 -5.936920 28.288577 -5.936920 c f +0.000000 0.000000 0.000000 srgb +n 28.288577 -5.936920 m 34.143683 -5.936920 l 34.952105 -5.936920 35.607460 -5.489205 35.607460 -4.936920 c 35.607460 -4.384635 34.952105 -3.936920 34.143683 -3.936920 c 28.288577 -3.936920 l 27.480155 -3.936920 26.824800 -4.384635 26.824800 -4.936920 c 26.824800 -5.489205 27.480155 -5.936920 28.288577 -5.936920 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(post a msg) dup sw 2 div 31.216130 ex sub -4.742230 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 31.228705 0.448229 m 34.632611 3.852135 l 31.228705 7.256041 l 27.824799 3.852135 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 31.228705 0.448229 m 34.632611 3.852135 l 31.228705 7.256041 l 27.824799 3.852135 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(is a) dup sw 2 div 31.228705 ex sub 3.646825 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(member?) dup sw 2 div 31.228705 ex sub 4.446825 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 31.228700 0.448231 m 31.216100 -3.936920 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 30.826403 -0.350616 m 31.228700 0.448231 l 31.626400 -0.352915 l f +1.000000 1.000000 1.000000 srgb +n 22.333205 8.807639 m 25.737111 12.211545 l 22.333205 15.615451 l 18.929299 12.211545 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 22.333205 8.807639 m 25.737111 12.211545 l 22.333205 15.615451 l 18.929299 12.211545 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(mod bit) dup sw 2 div 22.333205 ex sub 12.006235 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(set?) dup sw 2 div 22.333205 ex sub 12.806235 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 22.333200 8.807640 m 27.824800 3.852140 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 22.659157 7.974722 m 22.333200 8.807640 l 23.195108 8.568655 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +() dup sw 2 div 15.000000 ex sub 5.000000 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 28.675700 ex sub 3.001160 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 19.780300 ex sub 11.360600 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 23.184200 ex sub 14.764500 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 34.632600 3.852140 m 40.261205 8.139600 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 39.382424 7.973037 m 40.261205 8.139600 l 39.867187 7.336637 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 33.781600 ex sub 3.001160 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 40.261205 8.139600 m 43.907510 11.959285 l 40.261205 15.778970 l 36.614900 11.959285 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 40.261205 8.139600 m 43.907510 11.959285 l 40.261205 15.778970 l 36.614900 11.959285 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(explicit) dup sw 2 div 40.261205 ex sub 11.753975 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(accept?) dup sw 2 div 40.261205 ex sub 12.553975 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 39.349629 ex sub 14.824049 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 59.913105 8.346249 m 63.559411 11.992555 l 59.913105 15.638861 l 56.266799 11.992555 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 59.913105 8.346249 m 63.559411 11.992555 l 59.913105 15.638861 l 56.266799 11.992555 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(explicit) dup sw 2 div 59.913105 ex sub 11.787245 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(reject?) dup sw 2 div 59.913105 ex sub 12.587245 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 59.001528 ex sub 14.727284 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 54.324011 11.922575 m 56.266799 11.992555 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 55.452919 12.363498 m 56.266799 11.992555 l 55.481716 11.564017 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 42.995934 ex sub 11.004364 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 71.066405 8.389389 m 74.712711 12.035695 l 71.066405 15.682001 l 67.420099 12.035695 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 71.066405 8.389389 m 74.712711 12.035695 l 71.066405 15.682001 l 67.420099 12.035695 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(explicit) dup sw 2 div 71.066405 ex sub 11.830385 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(discard?) dup sw 2 div 71.066405 ex sub 12.630385 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 63.559411 11.992555 m 67.420100 12.035700 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 66.615680 12.426735 m 67.420100 12.035700 l 66.624620 11.626785 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 62.647834 ex sub 11.080979 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 71.066400 15.682000 m 71.055000 19.434500 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 70.657432 18.633289 m 71.055000 19.434500 l 71.457429 18.635719 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 70.154800 ex sub 14.770400 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 73.801100 ex sub 11.124100 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 59.913105 15.638861 m 59.907500 19.455400 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 59.508675 18.654813 m 59.907500 19.455400 l 60.308674 18.655988 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 22.333200 15.615400 m 22.362400 21.044900 l 27.166900 21.015055 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 26.369400 21.420017 m 27.166900 21.015055 l 26.364431 20.620032 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 28.954977 29.425200 m 34.810083 29.425200 l 35.618505 29.425200 36.273860 29.964050 36.273860 30.628755 c 36.273860 31.293460 35.618505 31.832310 34.810083 31.832310 c 28.954977 31.832310 l 28.146555 31.832310 27.491200 31.293460 27.491200 30.628755 c 27.491200 29.964050 28.146555 29.425200 28.954977 29.425200 c f +0.000000 0.000000 0.000000 srgb +n 28.954977 29.425200 m 34.810083 29.425200 l 35.618505 29.425200 36.273860 29.964050 36.273860 30.628755 c 36.273860 31.293460 35.618505 31.832310 34.810083 31.832310 c 28.954977 31.832310 l 28.146555 31.832310 27.491200 31.293460 27.491200 30.628755 c 27.491200 29.964050 28.146555 29.425200 28.954977 29.425200 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(hold for) dup sw 2 div 31.882530 ex sub 30.423445 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(moderation) dup sw 2 div 31.882530 ex sub 31.223445 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 28.666900 19.811500 m 34.666900 19.811500 l 35.495328 19.811500 36.166900 20.350350 36.166900 21.015055 c 36.166900 21.679760 35.495328 22.218610 34.666900 22.218610 c 28.666900 22.218610 l 27.838472 22.218610 27.166900 21.679760 27.166900 21.015055 c 27.166900 20.350350 27.838472 19.811500 28.666900 19.811500 c f +0.000000 0.000000 0.000000 srgb +n 28.666900 19.811500 m 34.666900 19.811500 l 35.495328 19.811500 36.166900 20.350350 36.166900 21.015055 c 36.166900 21.679760 35.495328 22.218610 34.666900 22.218610 c 28.666900 22.218610 l 27.838472 22.218610 27.166900 21.679760 27.166900 21.015055 c 27.166900 20.350350 27.838472 19.811500 28.666900 19.811500 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(pass thru) dup sw 2 div 31.666900 ex sub 21.209745 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 57.222377 19.455400 m 62.592683 19.455400 l 63.334168 19.455400 63.935260 19.903115 63.935260 20.455400 c 63.935260 21.007685 63.334168 21.455400 62.592683 21.455400 c 57.222377 21.455400 l 56.480892 21.455400 55.879800 21.007685 55.879800 20.455400 c 55.879800 19.903115 56.480892 19.455400 57.222377 19.455400 c f +0.000000 0.000000 0.000000 srgb +n 57.222377 19.455400 m 62.592683 19.455400 l 63.334168 19.455400 63.935260 19.903115 63.935260 20.455400 c 63.935260 21.007685 63.334168 21.455400 62.592683 21.455400 c 57.222377 21.455400 l 56.480892 21.455400 55.879800 21.007685 55.879800 20.455400 c 55.879800 19.903115 56.480892 19.455400 57.222377 19.455400 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(bounce it) dup sw 2 div 59.907530 ex sub 20.650090 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 67.885077 19.434500 m 74.224983 19.434500 l 75.100342 19.434500 75.809960 19.882215 75.809960 20.434500 c 75.809960 20.986785 75.100342 21.434500 74.224983 21.434500 c 67.885077 21.434500 l 67.009718 21.434500 66.300100 20.986785 66.300100 20.434500 c 66.300100 19.882215 67.009718 19.434500 67.885077 19.434500 c f +0.000000 0.000000 0.000000 srgb +n 67.885077 19.434500 m 74.224983 19.434500 l 75.100342 19.434500 75.809960 19.882215 75.809960 20.434500 c 75.809960 20.986785 75.100342 21.434500 74.224983 21.434500 c 67.885077 21.434500 l 67.009718 21.434500 66.300100 20.986785 66.300100 20.434500 c 66.300100 19.882215 67.009718 19.434500 67.885077 19.434500 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(discard it) dup sw 2 div 71.055030 ex sub 20.629190 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 40.261205 15.778970 m 40.184200 21.044900 l 36.166900 21.015055 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 36.969849 20.621009 m 36.166900 21.015055 l 36.963906 21.420987 l f +1.000000 1.000000 1.000000 srgb +n 65.017305 25.865999 m 69.790811 30.639505 l 65.017305 35.413011 l 60.243799 30.639505 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 65.017305 25.865999 m 69.790811 30.639505 l 65.017305 35.413011 l 60.243799 30.639505 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(generic) dup sw 2 div 65.017305 ex sub 30.034195 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(non-member) dup sw 2 div 65.017305 ex sub 30.834195 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(disposition) dup sw 2 div 65.017305 ex sub 31.634195 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 74.712700 12.035700 m 77.310000 12.068400 l 77.310000 30.668100 l 69.790800 30.639500 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 70.592316 30.242546 m 69.790800 30.639500 l 70.589273 31.042540 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(discard) dup sw 2 div 68.632800 ex sub 24.246900 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 66.210600 27.059400 m 71.055000 21.434500 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 70.836024 22.301708 m 71.055000 21.434500 l 70.229848 21.779644 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 63.823900 27.059400 m 59.907500 21.455400 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 60.693636 21.882004 m 59.907500 21.455400 l 60.037899 22.340271 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(reject) dup sw 2 div 61.865700 ex sub 24.257400 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 60.243800 30.639500 m 36.273860 30.628755 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 37.074039 30.229114 m 36.273860 30.628755 l 37.073681 31.029114 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(hold) dup sw 2 div 48.258830 ex sub 30.634128 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 18.929299 12.211545 m 17.707519 12.274592 l 17.707519 30.574592 l 27.491200 30.628755 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 26.688998 31.024320 m 27.491200 30.628755 l 26.693427 30.224332 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 61.437100 29.446100 m 35.727550 21.866089 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 36.608013 21.708655 m 35.727550 21.866089 l 36.381775 22.475998 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(accept) dup sw 2 div 48.582325 ex sub 25.656094 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 50.677705 8.276269 m 54.324011 11.922575 l 50.677705 15.568881 l 47.031399 11.922575 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 50.677705 8.276269 m 54.324011 11.922575 l 50.677705 15.568881 l 47.031399 11.922575 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(explicit) dup sw 2 div 50.677705 ex sub 11.717265 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(hold?) dup sw 2 div 50.677705 ex sub 12.517265 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 49.766128 ex sub 14.657304 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 53.412434 ex sub 11.010998 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 50.677705 15.568881 m 50.723859 19.674592 l 35.845120 29.777721 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 36.282254 28.997392 m 35.845120 29.777721 l 36.731664 29.659231 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 43.907510 11.959285 m 47.031399 11.922575 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 46.236154 12.331948 m 47.031399 11.922575 l 46.226754 11.532003 l f +/Courier-latin1 ff 2.000000 scf sf +0.000000 0.000000 0.000000 srgb +(Sender Moderation Flowchart) dup sw 2 div 57.443403 ex sub 1.624592 m gs 1 -1 sc sh gr +gr +showpage + |