Archives des fiches de déconnexion

This commit is contained in:
Pierre-Elliott Bécue 2015-08-05 01:50:42 +02:00
parent b72cc11447
commit f53e64a14d
7 changed files with 0 additions and 9 deletions

View file

@ -1,183 +0,0 @@
\documentclass[11pt,a4paper,oneside]{article}
\usepackage{aeguill}
\usepackage{fancyhdr}
\usepackage{url}
\usepackage{vmargin}
\usepackage{ifthen}
\usepackage{pstricks}
\usepackage{multicol}
\usepackage{alltt}
\usepackage[dvips]{eso-pic,graphicx}
\usepackage{color}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\newboolean{mailcrans}
\newcommand{\prenom}{~prenom~}
\newcommand{\nom}{~nom~}
\newcommand{\chambre}{~chambre~}
\newcommand{\email}{\url{~mail~}}
\newcommand{\nbadherents}{~nbadher~}
\setboolean{mailcrans}{false}
\newcommand{\duree}{15 jours}
\newcommand{\depuis}{~debut~}
\newcommand{\jusquau}{~fin~}
\newcommand{\historique}{~historique~}
\setpapersize{A4}
\setmarginsrb{18mm}{14mm}{18mm}{14mm}{\headheight}{12pt}{\footheight}{20pt}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0.8pt}
\renewcommand{\footrulewidth}{0.2pt}
\lhead{\textbf{Notification de déconnexion}}
\rhead{\textbf{CR@NS}}
\cfoot{\textbf{CR@NS}}
%Define snow flakes
\newcommand{\flakepart}{%
\pspolygon(0,0)(0.5,1)(0.5,3)(1.9,4.4)(1.2,5.1)(0.5,4.4)(0.5,5.7)(-0.5,5.7)(-0.5,4.4)(-1.2,5.1)(-1.9,4.4)(-0.5,3)(-0.5,1)}
\newcommand{\snowflake}[1]{%
\psset{unit=#1}%
\multips{0}(0,0){1}{\flakepart}%
\multips{60}(0,0){1}{\flakepart}%
\multips{120}(0,0){1}{\flakepart}%
\multips{180}(0,0){1}{\flakepart}%
\multips{240}(0,0){1}{\flakepart}%
\multips{300}(0,0){1}{\flakepart}%
}
\newcommand{\multiflake}{%
\rput(0.0 ,1.6){\snowflake{0.06}}%
\rput(0.2 ,0.0){\snowflake{0.06}}%
\rput(0.5 ,0.6){\snowflake{0.04}}%
\rput(0.1 ,1 ){\snowflake{0.04}}%
\rput(0.8 ,1.4){\snowflake{0.06}}%
}
\begin{document}
{\setlength{\unitlength}{1in}
\begin{picture}(0,0)
\put(-0.3,-2){\includegraphics[width=3cm]{logo.eps}}
\psset{linecolor=lightgray}
\put(-0.4,-0.6){\multiflake}
\end{picture}}
\begin{center}
\begin{minipage}[c]{0.9\textwidth}
\begin{center}
\begin{tabular}[c]{c}
\hline
\vspace{0.1cm} \\
\Huge{\textbf{Notification de déconnexion}}\\
\vspace{0.1cm} \\
\hline
\end{tabular}
\end{center}
\end{minipage}
\end{center}
\vspace{0.2cm}
\begin{center}
\begin{minipage}{0.5\textwidth}
\textbf{Nom} \dotfill{} \nom \\
\textbf{Prénom} \dotfill{} \prenom \\
\textbf{Chambre} \dotfill{} \chambre \\
\textbf{Email} \dotfill{} \texttt{\email}
\end{minipage}
\end{center}
\noindent\begin{center}
\noindent\fcolorbox[gray]{0}{0.85}{%
\begin{minipage}[t]{0.7\textwidth}%
\begin{center}
\large Tes machines ont été déconnectées pour environ \textbf{\duree{}}, du
\textbf{\depuis{}} jusqu'au \textbf{\jusquau{}} (inclus) pour usage de logiciels de pair à pair (P2P).
\end{center}
\end{minipage}}
\end{center}
\vspace{0.3cm}
\begin{multicols}{2}
{\small En effet, tes machines ont communiquées avec l'extérieur en utilisant
des protocoles de P2P, ce qui est interdit par la charte que tu as signée
(\url{http://www.crans.org/CransAdministratif/CharteDuCrans}). Ce point est
d'ailleurs rappelé sur l'exemplaire du formulaire d'adhésion que tu as
conservé. Les causes les plus communes sont l'utilisation d'un service
de \emph{peer to peer} type Kazaa, Morpheus, eDonkey.
Il n'existe pour ce genre d'actions qu'une très faible tolérance que
tu as dépassé à plusieurs reprises malgré plusieurs alertes par
mail\footnote{Si tu n'as pas reçu les
mails en question, c'est que tu ne consultes pas ton mail ; tu
\emph{dois} consulter régulièrement ton adresse \email. Si tu veux
utiliser une autre adresse mail, adresse-toi à ton câbleur pour le
changement.} accompagnés à chaque fois d'une déconnexion de 24h.
Voici l'historique de tes déconnexions :
\begin{center}
\begin{tabular}[c]{p{5cm}}
\historique
\end{tabular}
\end{center}
Tous les services te sont retirés durant la durée de la déconnexion,
\textbf{notamment l'accès à Internet}, à l'exception
\ifthenelse{\boolean{mailcrans}}{du mail (sur le serveur de
l'association uniquement) et }{}de l'accès au serveur Web de
l'association (désactive le proxy si tu ne parviens pas à y accéder).
Note également que tu es responsable de l'utilisation qui est faite de
tes machines. Le fait que tu ne saches pas que certains programmes
utilisent des protocoles de P2P ne te dispense pas de ta responsabilité.
Si tu as des questions supplémentaires, envoie les à \url{disconnect@crans.org}.
Il est inutile d'aller déranger ton câbleur qui ne gère pas ce problème.}
\vspace{0.3cm}
\noindent\fcolorbox[gray]{0}{0.98}{\begin{minipage}{0.5\textwidth}
{\Large\sffamily Foire Aux Questions}\vspace{0.1cm}
\newcommand{\qa}[2]{$\mathcal{Q}:$ \textbf{#1}
$\mathcal{R}:$ \emph{#2}}
{\small
\qa{Pourquoi n'ai-je pas été prévenu plus tôt ?}%
{Trois mails au minimum ont été envoyés en moins d'un an à ce sujet
sur l'adresse email indiquée sur cette fiche. Il nous faut nécessairement une
adresse valide pour te contacter dans les cas similaires. Tu dois donc
lire le mail arrivant à cette adresse ou en indiquer une autre à ton
câbleur.\\
Ces mails étaient de plus accompagnés chacun d'une déconnexion de 24h.
}
\qa{J'ai prêté ma chambre à un ami.}%
{La connexion est personnelle, à ton nom et tu en es responsable.}
\qa{Je ne savais pas que tel programme utilisait un protocole de P2P.}%
{Dans le doute, mieux vaut éviter d'utiliser des programmes dont
on ne connaît pas le fonctionnement et nous demander, notamment
lors des premiers mails de sanctions. Outre les programmes
comme Kazaa ou eMule, l'utilisation de certaines fonctionnalités d'un
programme peut entraîner l'usage des réseaux de P2P.}
\qa{J'ai beaucoup de travail et j'ai besoin du net.}%
{C'est le cas des \nbadherents{} adhérents du CRANS et c'est la raison principale
de la déconnexion. Nous avons des contraintes extérieures nous
obligeant à réguler certains usages afin de conserver la connexion
au réseau.}
\qa{Je dois rendre un projet demain !}%
{Pas d'exception, ton école fournit sans doute une connexion à Internet, c'est
moins confortable que depuis chez soi, mais ça marche quand même. Nous ne pouvons faire
absolument \textbf{aucune} exception !}
\qa{J'ai payé !}%
{Il s'agit de l'adhésion à une association et nous avons des contraintes
supplémentaires par rapport à un fournisseur d'accès classique. Les
statuts nous autorisent à suspendre la connexion en cas de manquement
à la charte que tu as signée.}}
\end{minipage}}
\end{multicols}
\end{document}

View file

@ -1,180 +0,0 @@
\documentclass[11pt,a4paper,oneside]{article}
\usepackage{aeguill}
\usepackage{fancyhdr}
\usepackage{url}
\usepackage{vmargin}
\usepackage{ifthen}
\usepackage{pstricks}
\usepackage{multicol}
\usepackage{alltt}
\usepackage[dvips]{eso-pic,graphicx}
\usepackage{color}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\newboolean{mailcrans}
\newcommand{\prenom}{~prenom~}
\newcommand{\nom}{~nom~}
\newcommand{\chambre}{~chambre~}
\newcommand{\email}{\url{~mail~}}
\newcommand{\nbadherents}{~nbadher~}
\setboolean{mailcrans}{false}
\newcommand{\duree}{15 jours}
\newcommand{\depuis}{~debut~}
\newcommand{\jusquau}{~fin~}
\newcommand{\historique}{~historique~}
\newcommand{\limitehard}{~limitehard~}
\setpapersize{A4}
\setmarginsrb{18mm}{14mm}{18mm}{14mm}{\headheight}{12pt}{\footheight}{20pt}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0.8pt}
\renewcommand{\footrulewidth}{0.2pt}
\lhead{\textbf{Notification de déconnexion}}
\rhead{\textbf{Cr@ns}}
\cfoot{\textbf{Cr@ns}}
%Define snow flakes
\newcommand{\flakepart}{%
\pspolygon(0,0)(0.5,1)(0.5,3)(1.9,4.4)(1.2,5.1)(0.5,4.4)(0.5,5.7)(-0.5,5.7)(-0.5,4.4)(-1.2,5.1)(-1.9,4.4)(-0.5,3)(-0.5,1)}
\newcommand{\snowflake}[1]{%
\psset{unit=#1}%
\multips{0}(0,0){1}{\flakepart}%
\multips{60}(0,0){1}{\flakepart}%
\multips{120}(0,0){1}{\flakepart}%
\multips{180}(0,0){1}{\flakepart}%
\multips{240}(0,0){1}{\flakepart}%
\multips{300}(0,0){1}{\flakepart}%
}
\newcommand{\multiflake}{%
\rput(0.0 ,1.6){\snowflake{0.06}}%
\rput(0.2 ,0.0){\snowflake{0.06}}%
\rput(0.5 ,0.6){\snowflake{0.04}}%
\rput(0.1 ,1 ){\snowflake{0.04}}%
\rput(0.8 ,1.4){\snowflake{0.06}}%
}
\begin{document}
{\setlength{\unitlength}{1in}
\begin{picture}(0,0)
\put(-0.3,-2){\includegraphics[width=3cm]{logo.eps}}
% \put(6,-3){\resizebox{1cm}{7cm}{\rotatebox{90}{\includegraphics[width=7cm]{barcode.eps}}}}
\psset{linecolor=lightgray}
\put(-0.4,-0.6){\multiflake}
\end{picture}}
\begin{center}
\begin{minipage}[c]{0.9\textwidth}
\begin{center}
\begin{tabular}[c]{c}
\hline
\vspace{0.1cm} \\
\Huge{\textbf{Notification de déconnexion}}\\
\vspace{0.1cm} \\
\hline
\end{tabular}
\end{center}
\end{minipage}
\end{center}
\vspace{0.2cm}
\begin{center}
\begin{minipage}{0.5\textwidth}
\textbf{Nom} \dotfill{} \nom \\
\textbf{Prénom} \dotfill{} \prenom \\
\textbf{Chambre} \dotfill{} \chambre \\
\textbf{Email} \dotfill{} \texttt{\email}
\end{minipage}
\end{center}
\noindent\begin{center}
\noindent\fcolorbox[gray]{0}{0.85}{%
\begin{minipage}[t]{0.7\textwidth}%
\begin{center}
\large Tes machines ont été limitées en débit pour environ \textbf{\duree{}}, du
\textbf{\depuis{}} jusqu'au \textbf{\jusquau{}} (inclus) pour upload.
\end{center}
\end{minipage}}
\end{center}
\vspace{0.3cm}
\begin{multicols}{2}
{\small En effet, tes machines ont envoyé une quantité importante de données vers
l'extérieur, ce qui est interdit par la charte que tu as signée
(\url{http://www.crans.org/CransAdministratif/CharteDuCrans}). Ce point est
d'ailleurs rappelé sur l'exemplaire du formulaire d'adhésion que tu as
conservé. Les causes les plus communes sont l'utilisation d'un service
de \emph{peer to peer} type Kazaa, Morpheus, eDonkey.
La limite est de \limitehard{} Mo par jour, et tu as dépassé plusieurs fois cette limite
malgré plusieurs rappels par mail\footnote{Si tu n'as pas reçu les
mails en question, c'est que tu ne consultes pas ton mail ; tu
\emph{dois} consulter régulièrement ton adresse \email. Si tu veux
utiliser une autre adresse mail, adresse-toi à un câbleur pour le
changement.}. Voici l'historique :
\begin{center}
\begin{tabular}[c]{p{5cm}ll}
\historique
\end{tabular}
\end{center}
Ton débit sortant vers l'extérieur est fortement limité pendant la durée de cette sanction.
Note également que tu es responsable de l'utilisation qui est faite de
tes machines. Le fait que tu ne saches pas que certains programmes
envoient des quantités importantes de données ne te dispense pas de ta
responsabilité.
Si tu as des questions supplémentaires, envoie les à \url{disconnect@crans.org}.
Il est inutile d'aller déranger les câbleurs qui ne gèrent pas ce problème.}
\vspace{0.3cm}
\noindent\fcolorbox[gray]{0}{0.98}{\begin{minipage}{0.5\textwidth}
{\Large\sffamily Foire Aux Questions}\vspace{0.1cm}
\newcommand{\qa}[2]{$\mathcal{Q}:$ \textbf{#1}
$\mathcal{R}:$ \emph{#2}}
{\small
\qa{Pourquoi n'ai-je pas été prévenu plus tôt ?}%
{Douze mails au minimum ont été envoyés en moins d'un mois à ce sujet
sur l'adresse email indiquée sur cette fiche. Il nous faut nécessairement une
adresse valide pour te contacter dans les cas similaires. Tu dois donc
lire le mail arrivant à cette adresse ou en indiquer une autre à un
câbleur.}
\qa{J'ai prêté ma chambre à un ami.}%
{La connexion est personnelle, à ton nom et tu en es responsable.}
\qa{Je ne savais pas que tel programme uploadait.}%
{Dans le doute, mieux vaut éviter d'utiliser des programmes dont
on ne connaît pas le fonctionnement et nous demander, notamment
lors des premiers mails d'avertissement. Outre les programmes
comme Kazaa ou eMule qui de toute façon sont strictement interdits
d'utilisation sur le réseau Crans, l'utilisation d'une webcam peut
entraîner un upload important, de même que certains logiciels de
visionnement de vidéos (sport, etc), qui utilisent des protocoles
de partage de données entre les personnes qui les visionnent.}
\qa{J'ai beaucoup de travail et j'ai besoin du net.}%
{C'est le cas des \nbadherents{} adhérents du Crans et c'est la raison principale
de la limitation. Nous avons des contraintes extérieures nous
obligeant à réguler certains usages afin de conserver la connexion
au réseau.}
\qa{Je dois rendre un projet demain !}%
{Pas d'exception, ton école fournit sans doute une connexion à Internet, c'est
moins confortable que depuis chez soi, mais ça marche quand même. Nous ne pouvons faire
absolument \textbf{aucune} exception !}
\qa{J'ai payé !}%
{Il s'agit de l'adhésion à une association. D'autre part nous avons des
contraintes supplémentaires par rapport à un fournisseur d'accès
classique. Les statuts nous autorisent à suspendre la connexion en cas
de manquement à la charte que tu as signée.}}
\end{minipage}}
\end{multicols}
\end{document}

View file

@ -1,168 +0,0 @@
#! /usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Script de génération de feuille de déconnexion pour :
- upload
- p2p
Copyright (C) Xavier Pessoles, Étienne Chové, Vincent Bernat, Nicolas Salles
Licence : GPL v2
"""
encoding = "UTF-8"
import sys
sys.path.append('/usr/scripts/gestion')
sys.path.append('/usr/scripts')
from ldap_crans import crans_ldap
from config import upload
import time
from unicodedata import normalize
import commands
# logging tools
import syslog
def log(x):
syslog.openlog('GENERATE_DECONNEXION_NOTICE')
syslog.syslog(x)
syslog.closelog()
from cranslib.utils import exceptions
import locale
locale.setlocale(locale.LC_TIME, 'fr_FR.utf8')
sanctions = ['upload', 'p2p']
help = """Script de génération d'une feuille de déconnexion.
Les sanctions disponibles sont :
\t--%s
usage: generate.py --sanction recherche_ldap
Le motif de recherche dans la base ldap doit donner un résultat unique""" % "\n\t--".join(map(lambda x: x,sanctions))
def decode(s):
u"""
Retourne un unicode à partir de s
s doit être en utf-8
"""
if type(s) is unicode:
# Si s est déjà un unicode, on ne décode pas
return s
else:
return s.decode('utf-8', 'ignore') # On ignore les erreurs
def strip_accents(a):
u""" Supression des accents de la chaîne fournie """
res = normalize('NFKD', decode(a)).encode('ASCII', 'ignore')
return res.replace(' ', '_').replace("'", '')
def generate_ps(sanction, proprio, db):
"""En fonction de la sanction à appliquer au propriétaire,
on génère la feuille de déconnexion et on retourne son nom et
emplacement."""
try:
log('Generate deconnexion notice for %s' % proprio.Nom())
# Dossier de génération du ps
dossier = '/usr/scripts/surveillance/fiche_deconnexion'
# Base pour le nom du fichier
fichier = time.strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction,
strip_accents(proprio.Nom().lower().replace(' ', '-')))
# Création du fichier tex
format_date = '%A %d %B %Y'
template = file('%s/deconnexion_%s.tex' % (dossier, sanction)).read()
template = template.replace('~prenom~', proprio.prenom().encode(encoding))
template = template.replace('~nom~', proprio.nom().encode(encoding))
template = template.replace('~chambre~', proprio.chbre().encode(encoding))
template = template.replace('~mail~', proprio.email().encode(encoding))
template = template.replace('~debut~', time.strftime(format_date, time.localtime()))
template = template.replace('~fin~', time.strftime(format_date, time.localtime(time.time()+14*86400)))
# filtrage des autodisc
historique = [ bl.encode(encoding, 'ignore').split('$') for bl in proprio.blacklist() if bl.split('$')[2] == 'autodisc_%s' % sanction ]
# transfomation en tuple (date, sanction)
historique = [ (time.strftime('%A %d %B %Y', time.localtime(int(bl[0]))), bl[-1]) for bl in historique ]
# On ne prend au maximum que les 5 dernières occurences
historique = historique[-7:]
# tranformation en ligne
if sanction == 'upload' :
# On donne la valeur de l'upload
historique = [ '%s & %s & Mo'%(bl[0], bl[1].split(' ')[-2]) for bl in historique ]
else :
# On donne juste la date
historique = [ '%s' % bl[0] for bl in historique ]
# assemblage des lignes
historique = r"""\\
""".join(historique)
template = template.replace('~historique~', historique)
if sanction == 'upload' :
template = template.replace('~limitehard~', str(upload.hard))
template = template.replace('~nbadher~', str(len(db.search('paiement=ok')['adherent'])))
file('%s/%s.tex' % (dossier, fichier), 'w').write(template)
# Compilation du fichier latex
# Paquets nécessaires : texlive-latex-base, texlive-latex-recommended,
# texlive-latex-extra, texlive-lang-french, texlive-luatex,
# texlive-pstricks
commande = 'PATH="/bin:/usr/bin" cd %(dossier)s && latex %(base)s.tex && dvips %(base)s.dvi && rm -f %(base)s.dvi %(base)s.aux %(base)s.log %(base)s.tex'%{'dossier': dossier, 'base': fichier}
status, output = commands.getstatusoutput(commande)
if status != 0:
log('Erreur lors de la génération du ps : ')
log(output)
return '%s/%s.ps' % (dossier, fichier)
except Exception, e:
log('Erreur lors de la génération du ps : ')
log(str(e))
log("Values : sanction:%s adherent:%s" % (sanction,
strip_accents(proprio.Nom())))
log(exceptions.formatExc())
raise e
if __name__ == "__main__":
def log(x):
print x
def aide():
print help
sys.exit(0)
if '--help' in sys.argv or '-h' in sys.argv:
aide()
db = crans_ldap()
sanction = ''
for s in sanctions :
if '--%s' % s in sys.argv:
sanction = s
if not sanction :
print "Erreur : aucune sanction définie.\n"
aide()
if len(sys.argv) <= 2 :
print "Erreur : aucun motif de recherche défini.\n"
aide()
else :
motif = sys.argv[-1]
recherche = db.search(motif)['adherent']
if len(recherche) == 0:
print "Erreur : aucun résultat pour %s.\n" % motif
aide()
elif len(recherche) != 1:
print "Erreur : plusieurs résultats pour %s.\n" % motif
aide()
else :
adherent = recherche[0]
# On génére alors le postscript
fichier = generate_ps(sanction, adherent, db)
print u'Le fichier %s a été généré.' % fichier

View file

@ -1,267 +0,0 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.8.10 (http://cairographics.org)
%%CreationDate: Wed Jul 7 17:55:25 2010
%%Pages: 1
%%BoundingBox: 0 0 306 245
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog
/cairo_eps_state save def
/dict_count countdictstack def
/op_count count 1 sub def
userdict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/B { fill stroke } bind def
/B* { eofill stroke } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: 0 0 306 245
%%EndPageSetup
q
1 0.4 0 rg
139.852 233.294 m 141.949 247.645 126.051 248.848 127.938 231.829 c
133.297 172.126 133.328 172.18 139.852 233.294 c h
139.852 233.294 m f*
0.215686 0.670588 0.784314 rg
230.434 183.239 m 241.59 192.513 250.902 179.567 235.395 172.309 c
181.645 145.77 181.676 145.825 230.434 183.239 c h
230.434 183.239 m f*
0.129412 0.266667 0.470588 rg
188.285 223.149 m 193.965 236.497 208.164 229.243 197.695 215.696 c
162.031 167.516 162.031 167.579 188.285 223.149 c h
188.285 223.149 m f*
0.215686 0.670588 0.784314 rg
44.199 60.911 m 32.59 52.212 23.941 65.61 39.793 72.079 c 94.812 95.872
94.781 95.817 44.199 60.911 c h
44.199 60.911 m f*
0.129412 0.266667 0.470588 rg
127.648 11.055 m 125.492 -3.288 141.391 -4.554 139.566 12.473 c 134.434
72.196 134.398 72.141 127.648 11.055 c h
127.648 11.055 m f*
1 g
150.051 110.251 m 157.992 110.251 l 157.992 101.302 l 150.051 101.302 l
150.051 110.251 l h
150.051 110.251 m f
0.129412 0.266667 0.470588 rg
16 w
2 J
1 j
[] 0.0 d
4 M q 1 0 0 -1 0 244.325027 cm
190.078 172.227 m 190.078 131.102 l 190.203 117.391 200.367 108.328
213.18 108.473 c 226.23 108.625 236.137 116.598 236.281 130.719 c
236.281 172.227 l S Q
q 1 0 0 -1 0 244.325027 cm
49.395 127.879 m 62.426 127.879 l 62.426 90.977 l 62.855 76.906 77.496
65.77 92.695 66.453 c S Q
16.180318 w
q 1 0 0 -1 0 244.325027 cm
39.918 127.777 m 22.781 128.195 8.527 114.879 8.102 98.055 c 7.672
81.227 21.234 67.23 38.371 66.809 c 38.812 66.797 39.184 66.797 39.625
66.805 c S Q
15.776468 w
q 1 0 0 -1 0 244.325027 cm
237.375 172.34 m 275.98 172.34 l 293.254 171.672 298.996 163.398
298.871 154.387 c 298.723 143.609 286.262 139.039 275.98 138.828 c
265.703 138.617 255.98 131.285 255.711 124.031 c 255.426 116.426
257.848 108.156 275.98 108.344 c 297.508 108.344 l S Q
1 g
152.078 109.891 m 160.016 109.891 l 160.016 100.942 l 152.078 100.942 l
152.078 109.891 l h
152.078 109.891 m f
0.215686 0.670588 0.784314 rg
94.066 91.153 m 93.043 92.544 92.082 93.989 91.184 95.501 c 76.352
120.438 84.406 153.833 109.703 168.548 c 133.645 182.477 174.383
178.993 178.199 152.509 c 178.258 133.798 178.965 98.208 176.945 94.72
c 172.469 90.083 166.938 89.251 159.441 89.028 c 159.121 99.805 l 164
99.95 165.977 100.036 168.727 102.884 c 168.969 107.368 168.922 133.989
169.391 148.317 c 166.977 168.138 133.895 170.153 115.117 159.231 c
95.117 147.595 88.656 120.817 100.438 101.009 c 111.914 81.712 137.254
74.391 157.43 84.157 c 162.109 74.47 l 138.461 63.024 109.465 70.255
94.066 91.153 c h
94.066 91.153 m f*
125.219 148.04 m 123.777 147.891 122.676 146.587 122.684 145.028 c
122.684 136.77 l 117.477 136.77 l 115.93 136.77 114.68 135.423 114.676
133.763 c 114.676 132.563 l 111.945 132.563 l 110.398 132.563 109.145
131.216 109.145 129.552 c 109.145 109.087 l 109.145 107.427 110.398
106.079 111.945 106.079 c 114.676 106.079 l 114.676 105.278 l 114.68
103.614 115.93 102.266 117.477 102.266 c 122.684 102.266 l 122.684
95.657 l 122.684 93.997 123.934 92.649 125.48 92.649 c 152.82 92.649 l
154.363 92.649 155.617 93.997 155.617 95.657 c 155.617 102.575 l
155.625 102.7 155.625 102.825 155.617 102.95 c 155.621 103.044 155.621
103.138 155.617 103.231 c 155.617 109.583 l 155.625 109.708 155.625
109.833 155.617 109.958 c 155.621 110.052 155.621 110.145 155.617
110.239 c 155.617 116.591 l 155.625 116.716 155.625 116.841 155.617
116.97 c 155.621 117.055 155.621 117.141 155.617 117.227 c 155.617
123.602 l 155.625 123.727 155.625 123.852 155.617 123.977 c 155.621
124.063 155.621 124.149 155.617 124.235 c 155.617 130.61 l 155.625
130.727 155.625 130.845 155.617 130.962 c 155.621 131.055 155.621
131.149 155.617 131.243 c 155.617 137.618 l 155.621 137.712 155.621
137.805 155.617 137.903 c 155.617 137.911 155.617 137.919 155.617
137.927 c 155.625 138.036 155.625 138.145 155.617 138.255 c 155.617
145.028 l 155.617 146.692 154.363 148.04 152.82 148.04 c 125.48 148.04
l 125.395 148.044 125.305 148.044 125.219 148.04 c h
128.281 142.016 m 150.02 142.016 l 150.02 141.075 l 145.363 140.77 l
143.816 140.731 142.59 139.352 142.629 137.688 c 142.664 136.028
143.945 134.712 145.492 134.751 c 145.711 134.751 l 150.02 134.657 l
150.02 134.208 l 145.492 134.114 l 143.945 134.153 142.664 132.837
142.629 131.173 c 142.59 129.513 143.816 128.134 145.363 128.095 c
150.02 127.786 l 150.02 127.2 l 145.711 127.106 l 145.492 127.106 l
143.945 127.145 142.664 125.829 142.629 124.165 c 142.59 122.501
143.816 121.122 145.363 121.083 c 150.02 120.778 l 150.02 120.188 l
145.711 120.095 l 145.492 120.095 l 143.945 120.134 142.664 118.817
142.629 117.157 c 142.59 115.493 143.816 114.114 145.363 114.075 c
150.02 113.77 l 150.02 113.18 l 145.711 113.087 l 145.492 113.087 l
143.945 113.126 142.664 111.809 142.629 110.145 c 142.59 108.485
143.816 107.106 145.363 107.067 c 150.02 106.759 l 150.02 106.173 l
145.711 106.079 l 145.492 106.079 l 144.043 105.981 142.902 104.704
142.871 103.145 c 142.836 101.583 143.918 100.251 145.363 100.079 c
145.602 100.055 l 145.691 100.055 l 150.02 99.774 l 150.02 98.669 l
128.281 98.669 l 128.281 105.278 l 128.281 106.942 127.027 108.29
125.48 108.29 c 120.277 108.29 l 120.277 109.087 l 120.277 110.751
119.023 112.098 117.477 112.098 c 114.742 112.098 l 114.742 126.54 l
117.477 126.54 l 119.023 126.54 120.277 127.888 120.277 129.552 c
120.277 130.751 l 125.48 130.751 l 127.027 130.751 128.281 132.098
128.281 133.763 c 128.281 142.016 l h
128.281 142.016 m f*
8.965992 w
q 1 0 0 -0.664466 0 244.325027 cm
155.133 214.523 m 144.348 230.242 127.234 229.678 116.91 213.253 c
106.586 196.833 106.957 170.779 117.742 155.059 c 128.145 139.897
144.523 139.809 154.996 154.859 c S Q
154.488 152.376 m 156.055 152.376 l 158.793 152.376 160.996 150.173
160.996 147.434 c 160.996 93.606 l 160.996 90.872 158.793 88.669
156.055 88.669 c 154.488 88.669 l 151.754 88.669 149.547 90.872 149.547
93.606 c 149.547 147.434 l 149.547 150.173 151.754 152.376 154.488
152.376 c h
154.488 152.376 m f
5.605844 w
q 1 0 0 -1 0 244.325027 cm
120.039 103.41 m 121.395 103.41 122.48 104.496 122.48 105.852 c 122.48
107.203 121.395 108.293 120.039 108.293 c 118.688 108.293 117.598
107.203 117.598 105.852 c 117.598 104.496 118.688 103.41 120.039 103.41
c h
120.039 103.41 m S Q
4.522964 w
q 1 0 0 -1 0 244.325027 cm
121.098 142.934 m 121.367 142.934 l 122.422 142.934 123.273 143.781
123.273 144.836 c 123.273 145.891 122.422 146.742 121.367 146.742 c
121.098 146.742 l 120.043 146.742 119.195 145.891 119.195 144.836 c
119.195 143.781 120.043 142.934 121.098 142.934 c h
121.098 142.934 m S Q
Q q
q 0 0 307 245 rectclip
% Fallback Image: x=72, y=177, w=32, h=52 res=300dpi size=87234
[ 0.24 0 0 0.24 72 15.245027 ] concat
/DeviceRGB setcolorspace
8 dict dup begin
/ImageType 1 def
/Width 134 def
/Height 217 def
/BitsPerComponent 8 def
/Decode [ 0 1 0 1 0 1 ] def
/DataSource currentfile /ASCII85Decode filter /LZWDecode filter def
/ImageMatrix [ 1 0 0 -1 0 217 ] def
end
image
J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H>q_R=Al
C^cenm@9:1mM9jS"!SDD>M_ZHWf^s*[&noX\TlSNM?bTBd0Vr9+rHSANgFgKA_rYZP^B3<^
`.SLrGF<NB%Y>@b6KDHAeBh;nT/'J4I>AbN`C\mTJZ3Qp+8s%!a*Ge<SGf\jVWE`kCal0SF
@Oti<Ijf%r#b%Pm#35%f,>g;PNM.2L/?*DmH+4'-HPgcYXj)']R*li]DafLR#N[:s?`8GZ]
<^nQgMn/%9cXJj4S!Van:E)tDq:%4Hi[;qJT-oq<k\S#[JklU:U;p,V^0`lfdFeIdNW$O1C
!\P`S`_Nf!PjNO9M1/fgV?DfYUge"U;]sh"[1+%L/#MrbVY#;&>T$a^W600F@1%!2K0OHq!
8I-cN<\O7M'k+FJ%V*?P^M_X.'sHO-<7/M35_?`K%a]rct&Sm$-k%UV)9a/J;<ajV]@$T,b
paH!r/FNHr`_TB!^O/')OB5(B2;`4In4B>N_[OWi5r"VkOCffQK.(sP(a%8"9F:D=0!*RD)
Db9;uK_>`-7<,09iRP@W!5#CTKG"5EZb*p3ij=k@A5u@sFE`5sfG=E8K%7*?9EfEdpV^<!5
<RS+NWa+*ib%>U\YuFk,=;@kt6&#lKpK^o.@I/31j</#;7A\*@AD2l/(etH>Kn?]oa8+Zp>
.4i.?BR4sKiY<7("A;6VE;BXgNSY&[T<-.m#9$uW*OI5[O$o[i!>JAINRXlX+"AJ<Mb6)Ll
$4C@2GCpDVOr(/;5$T*T)[lUug'`j9QpmG+[h$>E3,B@B<aF3=QiSjZ&P&@c2NL5[b<d7V'
NtH+#:q=4u)-MHh%lmX-(>K]STb=S@`/PiHA0VI`nBT6hHPAuD3+U_[ZrCA/%eDkH(:7BO]
(^;FosbYHQ_7;)O2[G%IF"1RTS;+`]`QD(HfWli>\]]k1PRD.97R/duj&q8ZT<V0l4`pdX:
Q;mDiH$W&&S0GC+"VX;SbgFHCSY5Pe:1RQ?]d4Z1+64hacH5W.!E+'i&P+_OS?5`Fcr.&oc
Rha"JMnMqdJc7]*ZUb?#G+'/INKs5)BjC]WK'gO;X%LNHTi_$UjKCQlDsh<H!ig`Z<$*P"[
>bM&=mG-gDFrt\)lT_C-V-F7L5B2C!:@Na8Uoc.+D-k%Ak54(-c1f&1l-o#!>EY"AmII%a\
3'LS-sua0>&c#W_Ld-]%&Q!36TKN<5h/rqmo!PoTs9(*>L,$sk,2L8WC+M0O!0`fRQ_B:*_
!3#;oG6mjKo$lH2CL3:_Es+6@[!K6Iu'@.pBL[J1R63p!q%T(Xk%L+Mt8&#lN<%`n;;DpX-
d.1[4^4u0d!K!JQ*)6W"N2hDE$g@(r+tKUK;#UeMaSokILku@VmM$ht%V[-:FHTFUcot#BA
KqnJOCbY!L^>\F,?(;!E"1PO3BgjkP6[=mXh9NFb:1Z"HBjS2DiC)l@&+0MQ?)A6Lu=%?bR
B>jEq07AH%90GN1650$'QB-V(p.<.u]Z)C+3361^b/k*CKeEaebZcB%5Ha$XC'`=9d8f&Rn
S#/os@1a>Bed:6#X<Db!?@4A&bR&`FLOcGM\#"haUZK%*+_ebKk&FTNq/)/daQr1)cS$7Cp
hAuthL!93A[U."3C#)Wj<j#n>/-+]/ao%<dD:u.p8fQRf]e7^8D0h?<<Q'56`Ms6HGO0mE*
/kSaV,Up*uKY2;a#mF,bTZ@gi%%#0fO\))?Te+_JQHYeh^BM-&We@fp5)OD_cAQ[reSLIF)
7runi2I1YO_Yn*SQ[OpSUCa;[M!l;<TP5XY,%A/VE3a4U\/sZ1[9Ejq[?Nj%>#i^'"h3H(K
.>3+JF_1a&mFekR'UJZ6X=F/F+5$Wm."Xe990]3lHk,&K.C1>1OG!d:u4k/Z&0,b*gr?C^@
.%035Lk:O@%L.J:?_PQKa)3f?l''t$>(3.F4%MF4Cdab,CUkE-T]D&Yk&BfB"G8XlPp,jjA
1O1k>Eqins//%E5[)+G<5YrSY'lQJV(:1!hCFBg]o+P"h$!UK++"HZ3i6kn*5HiH*hecR%S
gB6>ReNsN#a1u=-Wuq5`&*T#U*ih$!@+N^p@f?-;;SNUq.RSZ>@&h,nR;TcDj?&,/dQ3b^#
;jWaHJ,;,`H]nXhj`1M"F`FP\-Da=+eNd0jrV>t<.'a(rZVBg6Cc[q$!dA2N@+?:\bCFrjb
B1Z/hQ/,=`ge*HXV7n/mcbX[JE+'Isj*lZkL9%inqrXR\o\r[5\ofB8eJsXtC./fr_,FCK#
p!%YKg`2!\8F2N:`iMSeskd:,5u:2f@rA9Ml*l$WhM78S$2Gf(D5k@n2I9mao/2b@`U>@+C
35h+>YS_(N6Ou8h&Yr.^ljSYdRBJkmTH!aWh"qtSuSQj:+jl]ecaXD=D3OJHW3UC%Qm4E`j
Q<R^+1FLO0L:(!8E?B(9<mdutif"MD5A9J%CJaZkh5C,;Q-i4M\[RaVfMr>]LRm/qG"%jrA
j$kSD=bIX50g*9TJpfcdBr/@/p?"kK5I'&3]O!][e/+-nNIPaXn=P[HtSM?bDAr4MD[m$P&
FUKSP$nh[c,u0l;Z!jbhdKrViaJCo#rb3C1f9a)bCf;C7/8:*j4MQ11p.G93d@p)lRRSVan
GJ;^)`DG+64G3mP,nZil,aFhaj8.5P<&#?A(O!mQMi<S-_ZhAI(8l?<GcX/o3hm9>ti^md:
>].Xjn[_on)BW9aArf=H9]>IJ8RO[ado^?ZS9EdN=U3p]Odj(f/?R&_9>%0S/@`1KW#%c'K
;$%X[bL7L8D;n'0W?=_:eu.'1KftP&^tqg9.kbp07JN,@VKOP<neB&VDh6X:\XNG*(uG23N
sLht_u/L63_%jCpPN""pm%9?LmY.O*9"A(YJ<R@ir8gdW(DZWWVOWffba6UjXLSah1'tt(n
u?f/^](]cgi@i(u@jr)aT/X,$Ge6+T@6,r'C=*&.g03TGAd%4c?*JJ:Ja#Z5=,s-UHZ1_>Z
Pf#(aof\Ze+DVi44t]X^JB'>V1$l\OXV:+f=%+7Ksdmb%=\>+;WFHY'i0n7FR(dN@kl+7?F
%Y`M%#3poB9BX!*qn=^1CUg6:g~>Q
Q
showpage
%%Trailer
count op_count sub {pop} repeat
countdictstack dict_count sub {end} repeat
cairo_eps_state restore
%%EOF

File diff suppressed because it is too large Load diff