% \iffalse meta-comment, etc. %% %% Package `pst-lens.dtx' %% %% Denis Girou (CNRS/IDRIS - France) and %% Manuel Luque (France) %% %% February 19, 2001 %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: %% `pst-lens' is a PSTricks package to define a generic lens, which can be %% used on texts and graphics. %% % \fi % % \changes{v1.0}{2001/02/16}{First public release.} % % \CheckSum{369} % % \DoNotIndex{\!,\",\#,\$,\%,\&,\',\(,\+,\*,\,,\-,\.,\/,\:,\;,\<,\=,\>,\?} % \DoNotIndex{\@,\@B,\@K,\@cTq,\@f,\@fPl,\@ifnextchar,\@nameuse,\@oVk} % \DoNotIndex{\[,\\,\],\^,\_,\ } % \DoNotIndex{\^,\\^,\\\^,$\^$,$\\^$,$\\^$} % \DoNotIndex{\0,\2,\4,\5,\6,\7,\8,} % \DoNotIndex{\A,\a} % \DoNotIndex{\B,\b,\Bc,\begin,\Bq,\Bqc} % \DoNotIndex{\C,\c,\catcode,\cJA,\CodelineIndex,\csname} % \DoNotIndex{\D,\def,\define@key,\Df,\divide,\DocInput,\documentclass} % \DoNotIndex{\eCN,\edef,\else,\eHd,\eMcj,\EnableCrossrefs,\end,\endcsname} % \DoNotIndex{\endCenterExample,\endExample,\endinput,\endpsclip} % \DoNotIndex{\endpspicture,\endSideBySideExample,\Example} % \DoNotIndex{\F,\f,\FdUrr,\fi,\filedate,\fileversion,\FV@Environment} % \DoNotIndex{\FV@UseKeyValues,\FV@XRightMargin,\FVB@Example,\fvset} % \DoNotIndex{\G,\g,\GetFileInfo,\gr,\GradientLoaded,\gsFKrbK@o,\gsj,\gsOX} % \DoNotIndex{\hbadness,\hfuzz,\HLEmphasize,\HLMacro,\HLMacro@i} % \DoNotIndex{\HLReverse,\HLReverse@i,\hqcu,\HqY} % \DoNotIndex{\I,\i,\ifx,\input,\Ir,\IU} % \DoNotIndex{\j,\jl,\JT,\JVodH} % \DoNotIndex{\K,\k,\kfSlL} % \DoNotIndex{\L,\let} % \DoNotIndex{\message,\mHNa,\mIU} % \DoNotIndex{\N,\nB,\newcmykcolor,\newdimen,\newif,\nW} % \DoNotIndex{\O,\oCDJDo,\ocQhVI,\OnlyDescription,\oRKJ} % \DoNotIndex{\P,\p,\ProvidesPackage,\psframe,\pslinewidth,\psset} % \DoNotIndex{\PstAtCode,\PSTricksLoaded} % \DoNotIndex{\q,\Qr,\qssRXq,\qu,\qXjFQp,\qYL} % \DoNotIndex{\R,\r,\RecordChanges,\relax,\RlaYI,\rN,\Rp,\rp,\RPDXNn,\rput} % \DoNotIndex{\S,\scalebox,\SgY,\SideBySide@Example,\SideBySideExample} % \DoNotIndex{\SgY,\sk,\Sp,\space,\sZb} % \DoNotIndex{\T,\the,\tw@} % \DoNotIndex{\u,\UiSWGEf@,\uJi,\usepackage,\uVQdMM,\UYj} % \DoNotIndex{\VerbatimEnvironment,\VerbatimInput,\VrC@} % \DoNotIndex{\WhZ,\WjKCYb,\WNs} % \DoNotIndex{\XkN,\XW} % \DoNotIndex{\Z,\ZCM,\Ze} % % \setcounter{IndexColumns}{2} % % \newcommand{\PstLensPackage}{`\textsf{pst-lens}'} % \newcommand{\PstBlurPackage}{`\textsf{pst-blur}'} % \newcommand{\PstLensMacro}{\cs{PstLens}} % % ^^A From ltugboat.cls % % ^^A Typeset the name of an environment % \providecommand\env[1]{\textsf{#1}} % \providecommand\clsname[1]{\textsf{#1}} % \providecommand\pkgname[1]{\textsf{#1}} % \providecommand\optname[1]{\textsf{#1}} % \providecommand\progname[1]{\textsf{#1}} % % ^^A A list of options for a package/class % \newenvironment{optlist}{\begin{description}% % \renewcommand\makelabel[1]{% % \descriptionlabel{\mdseries\optname{##1}}}% % \itemsep0.25\itemsep}% % {\end{description}} % % \makeatletter % % ^^A Utility macros % % ^^A Example macros - adapted from the `fvrb-ex' package % ^^A --------------------------------------------------- % % ^^A Take care that we use here the four /?_Z characters as escape % ^^A characters, so we can't use these characters in the examples! % % ^^A To highlight some verbatim sequences (comments, macro names, etc.) % \def\HLEmphasize#1{\textit{#1}} % \newcommand{\BS}{\texttt{\symbol{`\\}}} % \def\HLMacro#1{\BS{}def\HLMacro@i#1\@nil} % \def\HLMacro@i#1def#2\@nil{\HLReverse{#2}} % \def\HLReverse#1{{\setlength{\fboxsep}{1pt}\HLReverse@i{#1}}} % \def\HLReverse@i#1{\colorbox{black}{\textcolor{white}{\textbf{#1}}}} % % \def\Example{\FV@Environment{}{Example}} % \def\endExample{% % \end{VerbatimOut} % \Below@Example{\input{\jobname.tmp}} % \endgroup} % % \def\CenterExample{\FV@Environment{}{Example}} % \def\endCenterExample{% % \end{VerbatimOut} % \begin{center} % \Below@Example{\input{\jobname.tmp}} % \end{center} % \endgroup} % % \def\SideBySideExample{\FV@Environment{}{Example}} % \def\endSideBySideExample{% % \end{VerbatimOut} % \SideBySide@Example{\input{\jobname.tmp}} % \endgroup} % % \def\FVB@Example{% % \begingroup % \FV@UseKeyValues % \parindent=0pt % \multiply\topsep by 2 % \VerbatimEnvironment % \begin{VerbatimOut}[gobble=4,codes={\catcode`\Z=12}]{\jobname.tmp}} % % \def\Below@Example#1{% % \VerbatimInput[gobble=0,commentchar=Z,commandchars=/?_,frame=single, % numbers=left,numbersep=3pt]{\jobname.tmp} % \catcode`\%=14\relax % \catcode`\Z=9\relax % ^^A We suppress the effect of the highlighting macros % \catcode`/=0\relax % \catcode`?=1\relax % \catcode`_=2\relax % \def\HLEmphasize##1{##1}% % \def\HLMacro##1{##1}% % \def\HLReverse##1{##1}% % #1 % \par} % % \def\SideBySide@Example#1{% % \vskip 1mm % \@tempdimb=\FV@XRightMargin % \advance\@tempdimb -5mm % \begin{minipage}[c]{\@tempdimb} % \fvset{xrightmargin=0pt} % \catcode`\%=14\relax % \catcode`\Z=9\relax % ^^A We suppress the effect of the highlighting macros % \catcode`/=0\relax % \catcode`?=1\relax % \catcode`_=2\relax % \def\HLEmphasize##1{##1}% % \def\HLMacro##1{##1}% % \def\HLReverse##1{##1}% % #1 % \end{minipage}% % \@tempdimb=\textwidth % \advance\@tempdimb -\FV@XRightMargin % \advance\@tempdimb 5mm % \begin{minipage}[c]{\@tempdimb} % \VerbatimInput[gobble=0,commentchar=Z,commandchars=/?_, % frame=single,numbers=left,numbersep=3pt, % xleftmargin=5mm,xrightmargin=0pt]{\jobname.tmp} % \end{minipage} % \vskip 1mm} % % ^^A End of example macros from `fvrb-ex' % % ^^A Customizations of the "Verbatim" environment % \RecustomVerbatimEnvironment{Verbatim}{Verbatim}% % {gobble=4,frame=single,numbers=left,numbersep=3pt,commandchars=/?_} % % ^^A For the possible index and changes log % \setlength{\columnseprule}{0.6pt} % % ^^A The basic text used for demonstration purposes. % % \def\Wishes{{% % \rput[lb](0,0){% % \Large % \begin{minipage}{3cm} % \centering % \textbf{Best wishes}\\ % Caroline,\\ % for this new year\\ % \Huge 2001 ! % \end{minipage}}}} % % ^^A The second text used for demonstration purposes (poem from the French % ^^A poet Arthur Rimbaud.) % % \def\TheEternity{{% % \rput[lb](0,0){% % \scriptsize % \begin{minipage}{3.5cm} % \centerline{\normalsize\textbf{L'\'Eternit\'e}} % \vspace{5mm} % \begin{raggedright} % Elle est retrouv\'ee.\\ % Quoi ? --- L'\'Eternit\'e.\\ % C'est la mer all\'ee\\ % Avec le soleil.\\[3mm] % % \^Ame sentinelle\\ % Murmurons l'aveu\\ % De la nuit si nulle\\ % Et du jour en feu.\\[3mm] % % Des humains suffrages\\ % Des communs \'elans\\ % L\`a tu te d\'egages\\ % Et voles selon.\\[3mm] % % Puisque de vous seules,\\ % Braises de satin,\\ % Le devoir s'exhale\\ % Sans qu'on dise : enfin.\\[3mm] % % L\`a pas d'esp\'erance,\\ % Nul orietur.\\ % Science avec patience,\\ % Le supplice est s\^ur.\\[3mm] % % Elle est retrouv\'ee.\\ % Quoi ? --- L'\'Eternit\'e.\\ % C'est la mer all\'ee\\ % Avec le soleil.\\[3mm] % \end{raggedright} % \flushright{\normalsize\textbf{Arthur Rimbaud}} % \end{minipage}}}} % % ^^A One of the Truchet's tilings, for demonstration purposes % % ^^A The four elementary tiles for it % % \def\TruchetTileA{\pspolygon*(0,0)(0,1)(1,0)} % \def\TruchetTileB{\pspolygon*(0,0)(0,1)(1,1)} % \def\TruchetTileC{\pspolygon*(0,1)(1,1)(1,0)} % \def\TruchetTileD{\pspolygon*(0,0)(1,0)(1,1)} % % \def\TruchetTilingA#1#2{{% % \psset{dimen=middle} % \pst@cntb=#2 % \psframe(#1,#2) % \whiledo{\pst@cntb>\z@}{% % \advance\pst@cntb\m@ne % \pst@cnta=\z@ % \whiledo{\pst@cnta<#1}{% % \rput(\pst@cnta,\pst@cntb){\TruchetTileB}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileA}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileD}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileC}\advance\pst@cnta\@ne} % \advance\pst@cntb\m@ne % \pst@cnta=\z@ % \whiledo{\pst@cnta<#1}{% % \rput(\pst@cnta,\pst@cntb){\TruchetTileC}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileD}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileA}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileB}\advance\pst@cnta\@ne} % \advance\pst@cntb\m@ne % \pst@cnta=\z@ % \whiledo{\pst@cnta<#1}{% % \rput(\pst@cnta,\pst@cntb){\TruchetTileD}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileC}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileB}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileA}\advance\pst@cnta\@ne} % \advance\pst@cntb\m@ne % \pst@cnta=\z@ % \whiledo{\pst@cnta<#1}{% % \rput(\pst@cnta,\pst@cntb){\TruchetTileA}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileB}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileC}\advance\pst@cnta\@ne % \rput(\pst@cnta,\pst@cntb){\TruchetTileD}\advance\pst@cnta\@ne}}}} % % \def\TruchetTiling{{% % \rput[lb](0,0){\psset{unit=0.5}\TruchetTilingA{12}{12}}}} % % ^^A Van Koch curve and Siepinski triangle fractals, for demonstration % ^^A purposes % % ^^A The recursion macro used (from David Carlisle) % % \newcount\DeepRecursion % % \def\Recursion #1{% % #1\relax % \expandafter\@firstoftwo % \else % \expandafter\@secondoftwo % \fi} % % ^^A General definition of a fractal % % \def\PstFractal#1{% % \ifx\PstFractalBegin\@undefined % \else % \PstFractalBegin % \fi % \Recursion % {\ifnum#1>1\relax} % {\DeepRecursion=#1% % \advance\DeepRecursion by -1% % \PstFractalRepeat{\DeepRecursion}} % {\PstFractalDefinition}} % % ^^A Sierpinski triangle % % \def\PstSierpinskiTriangle#1{{% % \rput[lb](0,0){% % \psset{unit=3} % \def\PstFractalDefinition{% % \pspolygon*[linecolor=\PstSierpinskiExternalColor](1;0)(1;1)(1;2) % \rput{-2}(0,0){\pspolygon*[linecolor=\PstSierpinskiInternalColor]% % (0.5;0.5)(0.5;1.5)(0.5;2.5)}}% % \def\PstFractalBegin{\PstFractalDefinition}% % \def\PstFractalRepeat##1{% % \rput(0.5;0){\psset{unit=0.5}\PstFractal{##1}} % \rput(0.5;1){\psset{unit=0.5}\PstFractal{##1}} % \rput(0.5;2){\psset{unit=0.5}\PstFractal{##1}}}% % \rput{90}(0,0){% % \SpecialCoor % \degrees[3] % \PstFractal{#1}}}}} % % ^^A Von Koch curve % % \def\PstVonKochCurve#1{{% % \rput[lb](0,0){% % \psset{unit=3} % \def\PstFractalDefinition{\psline(0,0)(1,0)(1.5,0.8660254)(2,0)(3,0)}% % \def\PstFractalRepeat##1{% % \rput(0,0){\psset{unit=0.3333}\PstFractal{##1}} % \rput{60}(1,0){\psset{unit=0.3333}\PstFractal{##1}} % \rput{-60}(1.5,0.866){\psset{unit=0.3333}\PstFractal{##1}} % \rput(2,0){\psset{unit=0.3333}\PstFractal{##1}}}% % \PstFractal{#1}}}} % % \makeatother % % % ^^A Beginning of the documentation itself % % \title{The \PstLensPackage{} package\\A PSTricks package for lens} % \author{Denis \textsc{Girou}\thanks{CNRS/IDRIS --- % Centre National de la Recherche Scientifique / % Institut du D\'eveloppement et des Ressources en Informatique % Scientifique --- Orsay --- France --- % \mbox{\texttt{}}.}\\ % and\\ % Manuel \textsc{Luque}\thanks{\mbox{\texttt{}}. % The original idea and the first version of the lens were from % Manuel \textsc{Luque}.}} % \date{Version 1.0\\February 19, 2001\\ % {\small Documentation revised February 19, 2001}} % % \maketitle % % \begin{abstract} % This package define a lens which can be used in various contexts % to simulate the effect of a lens, using the unique macro \PstLensMacro, % with some customization parameters. % % It is also a good example of the great power and flexibility of % PSTricks, as in fact it is a very short program (it body, without % considering the various customizations, is only 7~lines long!) % but nevertheless powerful. % % And last, it is also a good pedagogical example of how to design and % program \emph{high level graphic objects} above PSTricks own ones. % \end{abstract} % % \tableofcontents % % \section{Introduction} % % \PstLensPackage{} offer a unique macro with some parameters to interact % on it. % % \vspace{1mm} % \def\ParamObject{\textbraceleft Object\textbraceright} % The syntax is simply: % \fbox{\PstLensMacro\texttt{[optional\_parameters]\textit{(x,y)}\ParamObject}} % % \vspace{1mm} % \texttt{\textit{(x,y)}} is a PSTricks coordinate, which as usual is taken % as \texttt{(0,0)} if it is not defined. % % To use the lens, we must define a \texttt{pspicture} environment, % optionally draw the object and then call the \PstLensMacro{} macro on it. % % \section{Usage} % % We will use the following textual object to illustrate our examples % (note that we must define the reference point at the left bottom corner, % as it is the normal behavior of PSTricks): % % \begin{SideBySideExample}[xrightmargin=3.8cm] % Z\begin{pspicture}(3,4) % Z \psgrid[subgriddiv=0,griddots=5] % /HLMacro?\def\Wishes_{{% % \rput[lb](0,0){% % \Large % \begin{minipage}{3cm} % \centering % \textbf{Best wishes}\\ % Caroline,\\ % for this new year\\ % \Huge 2001 ! % \end{minipage}}}} % % \Wishes % Z\end{pspicture} % \end{SideBySideExample} % % \subsection{Parameters} % % There are \textbf{9} specific parameters defined to change the way the % lens works: % % \begin{optlist} % \item [LensMagnification (real)]: magnification to apply for the lens % (\emph{Default:~1} --- no~magnification). % \end{optlist} % % \begin{CenterExample} % \begin{pspicture}(0,-1.5)(3,4) % \Wishes % \PstLens[LensMagnification=2](2,2){\Wishes} % \end{pspicture} % \hfill % \begin{pspicture}(0,-1.5)(3,4) % \Wishes % \PstLens[LensMagnification=4](1,2.4){\Wishes} % \end{pspicture} % \hfill % \begin{pspicture}(0,-1.5)(3.5,4) % \Wishes % \PstLens[LensMagnification=0.5](1,1){\Wishes} % \PstLens[LensMagnification=-0.5](2.5,3){\Wishes} % \end{pspicture} % \end{CenterExample} % % \begin{optlist} % \item [LensSize (real or length)]: value of the radius of the glass of the % lens (\emph{Default:~1}). % \end{optlist} % % \noindent Note that the size of the handle will change accordingly. % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(0,-4)(3,3.5) % \Wishes % \PstLens[LensSize=2](1,1){\Wishes} % \PstLens[LensSize=0.5](3,3){\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \begin{optlist} % \item [LensRotation (real)]: rotation angle applied to the lens % (\emph{Default:~0} --- no rotation). % \end{optlist} % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(0,-1)(3,3.8) % \Wishes % \PstLens[LensRotation=80]{\Wishes} % \PstLens[LensRotation=-108.5](2,2){\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \begin{optlist} % \item [LensHandle (boolean)]: boolean value to choose between to draw % a handle for the lens or not. % (\emph{Default:~true} --- handle). % \end{optlist} % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(3,3.5) % \Wishes % \PstLens[LensHandle=false](2,2){\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \begin{optlist} % \item [LensHandleWidth (real or length)]: width of the handle % (\emph{Default:~0.2 for \texttt{LensSize=1}}). % \end{optlist} % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(0,-2.5)(3,3.5) % \Wishes % \PstLens[LensHandleWidth=0.1]{\Wishes} % \PstLens[LensHandleWidth=4mm](2,2){\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \begin{optlist} % \item [LensHandleHeight (real or length)]: height of the handle % (\emph{Default:~2.5 for \texttt{LensSize=1}}). % \end{optlist} % % Take care that this length is between the \emph{center} of the glass and % the bottom of the handle. % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(0,-2)(3,3.5) % \Wishes % \PstLens[LensHandleHeight=15mm]{\Wishes} % \PstLens[LensHandleHeight=4](2,2){\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \begin{optlist} % \item [LensStyleHandle (style)]: name of the PSTricks style for the % handle. % (\emph{Default: LensStyleHandle}). % \end{optlist} % % \noindent Its default value is: % % \begin{Verbatim} % \newpsstyle{/HLReverse?LensStyleHandle_}{% % fillstyle=gradient,framearc=0.6,linewidth=0.5\pslinewidth, % gradmidpoint=0.5,gradangle=\PstLens@Rotation, % gradbegin=Brown,gradend=Salmon} % \end{Verbatim} % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(0,-2.5)(3,3.5) % \Wishes % \newpsstyle{/HLReverse?HandleYellow_}{% % linecolor=red,framearc=1, % fillstyle=solid,fillcolor=yellow} % \PstLens[LensHandleWidth=0.5, % LensStyleHandle=HandleYellow] % {\Wishes} % \newpsstyle{/HLReverse?HandleCrosshatch_}{% % fillstyle=crosshatch*,fillcolor=white} % \PstLens[LensStyleHandle=HandleCrosshatch] % (2,2){\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \begin{optlist} % \item [LensShadow (boolean)]: boolean value to choose between to draw % a shadow for the glass of the lens or not. % (\emph{Default:~true} --- shadow). % \end{optlist} % % Note that if we redefine the \texttt{LensStyleGlass} parameter without % explicitely require a shadow, there will be none even if \texttt{LensShadow} % will have the \texttt{true} value. % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(0,-0.5)(3,3.5) % \Wishes % \PstLens[LensShadow=false](2,2){\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \begin{optlist} % \item [LensStyleGlass (style)]: name of the PSTricks style for the glass. % (\emph{Default: LensStyleGlass}). % \end{optlist} % % It allow to change the appearance of the glass, but its main utility is % probably to be able to define the style of the shadow of the glass. % Default definition is: % % \begin{Verbatim} % \newpsstyle{/HLReverse?LensStyleGlass_}{% % fillstyle=solid,fillcolor=white, % shadow=true,shadowcolor=lightgray,shadowsize=0.15, % shadowangle=\PstLens@Rotation} % \end{Verbatim} % % Take care that if we will use later the \texttt{LensRotation} parameter % with \texttt{LensShadow} positioned, we must set the value of the % \texttt{shadowangle} parameter to \cs{PstLens@Rotation} to have the shadow % rotate accordingly. % % And for better shadow effects, you must look at the \PstBlurPackage{} % package from Martin \textsc{Giese}. % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(3,4) % \Wishes % \makeatletter % \newpsstyle{/HLReverse?DarkShadow_}{% % fillstyle=solid,fillcolor=white, % shadow=true,shadowcolor=darkgray, % shadowsize=0.2, % shadowangle=\PstLens@Rotation} % \makeatother % \PstLens[LensRotation=230, % LensStyleGlass=DarkShadow](2,2) % {\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \begin{SideBySideExample}[xrightmargin=3.8cm] % \begin{pspicture}(0,-0.5)(3,3.5) % \Wishes % \newpsstyle{/HLReverse?YellowGlass_}{% % linecolor=red,linewidth=0.1, % fillstyle=solid,fillcolor=yellow} % \PstLens[LensStyleGlass=YellowGlass](2,2) % {\Wishes} % \end{pspicture} % \end{SideBySideExample} % % \subsection{Shape of the glass} % % The \cs{PstLensShape} macro define the shape of the glass. It default % value is a circle, as in real life, but we can redefine it for various % effects... % % \begin{CenterExample} % \psset{LensMagnification=1.5} % \begin{pspicture}(0,-1.8)(4,3.8) % \Wishes % \renewcommand{\PstLensShape}{\psellipse(2,1)} % \PstLens(2,2){\Wishes} % \end{pspicture} % \hfill % \begin{pspicture}(-0.5,-1.8)(4,3.8) % \Wishes % \renewcommand{\PstLensShape}{\pstriangle(3,1)} % \PstLens[LensSize=1.5](2,2){\Wishes} % \end{pspicture} % \hfill % \begin{pspicture}(0,-1.8)(3.5,3.8) % \Wishes % \renewcommand{\PstLensShape}{% % \rput{18}{\pspolygon(1;0)(1;144)(1;288)(1;72)(1;216)}} % \PstLens[LensSize=1.5](2,2){\Wishes} % \end{pspicture} % % \begin{pspicture}(0,-0.5)(4,3.5) % \renewcommand{\PstLensShape}{% % \parabola[fillstyle=solid,fillcolor=white](-1,-1.5)(1,2)} % \Wishes % \PstLens[LensShadow=false,LensHandle=false](1,1){\Wishes} % \end{pspicture} % \hfill % \begin{pspicture}(-1.5,-1)(3.5,3.5) % \renewcommand{\PstLensShape}{% % \psccurve(-1,-1)(0,1.2)(0.5,-1)(1,0.8)} % \Wishes % \PstLens[LensSize=2,LensHandle=false](1,1){\Wishes} % \end{pspicture} % \end{CenterExample} % % \subsection{Examples} % % We can use the lens for all textual objects and for all PSTricks graphic % objects (we use here some versions of tilings and fractals, but only basic % ones to avoid requiring too much memory from old \TeX{} systems, to compile % the file). % % And specially take care to explicitely position the reference point % at the left bottom corner and to compute the correct dimensions for the % \texttt{pspicture} environment (in our examples, we choose most of the time % to include the lens inside the bounding boxes, but we can choose to define % them just for the objects). % % \begin{Verbatim} % /HLMacro?\def\TheEternity_{{% % \rput[lb](0,0){% % \scriptsize % \begin{minipage}{3.5cm} % \centerline{\normalsize\textbf{L'\'Eternit\'e}} % ... % /HLMacro?\def\TruchetTiling_#1#2{{% % \rput[lb](0,0){% % ... % /HLMacro?\def\PstSierpinskiTriangle_#1{{% % \rput[lb](0,0){% % ... % /HLMacro?\def\PstVonKochCurve_#1{{% % \rput[lb](0,0){% % ... % \end{Verbatim} % % \begin{CenterExample} % \newpsstyle{/HLReverse?SimpleGlass_}{fillstyle=solid,fillcolor=white} % \newpsstyle{/HLReverse?SimpleHandle_}{fillstyle=solid,fillcolor=white, % framearc=0.5} % \psset{LensStyleGlass=SimpleGlass,LensStyleHandle=SimpleHandle} % % \begin{pspicture}(-1,-2.5)(5,10.5) % \TheEternity % \PstLens[LensSize=2,LensMagnification=4,LensRotation=40] % (1.5,6){\TheEternity} % \PstLens[LensSize=1.5,LensMagnification=2,LensRotation=-20] % (0.5,2){\TheEternity} % \end{pspicture} % \hfill % \begin{pspicture}(-2,-2.5)(4,10.5) % \TheEternity % \PstLens[LensMagnification=0.5,LensRotation=140] % (1,8.5){\TheEternity} % \PstLens[LensSize=2.5,LensMagnification=3,LensRotation=-100] % (2.4,0){\TheEternity} % \end{pspicture} % \end{CenterExample} % % \begin{CenterExample} % \begin{pspicture}(0,-6)(6,6) % \TruchetTiling % \PstLens[LensSize=2.5,LensMagnification=2.5](3.5,1) % {\TruchetTiling} % \end{pspicture} % \end{CenterExample} % % \begin{CenterExample} % \newcommand{\PstSierpinskiInternalColor}{red} % \newcommand{\PstSierpinskiExternalColor}{yellow} % % % /HLEmphasize?The Sierpinski triangle is in a unit circle of radius 1,_ % % /HLEmphasize?so we must define the "pspicture" accordingly: (-3,-2)(3,3)_ % \begin{pspicture}(-3,-2)(3,3) % \PstSierpinskiTriangle{3} % \end{pspicture} % \hfill % \begin{pspicture}(-3,-2)(3,3) % \PstSierpinskiTriangle{3} % \psset{LensShadow=false} % \PstLens[LensMagnification=2,LensRotation=-80](-1,0) % {\PstSierpinskiTriangle{3}} % \PstLens[LensSize=2,LensMagnification=5,LensRotation=100, % LensHandle=false](1,1){\PstSierpinskiTriangle{3}} % \end{pspicture} % % \begin{pspicture}(-1,-2)(11,5) % \PstVonKochCurve{3} % \PstLens[LensSize=1.2,LensMagnification=2,LensRotation=-50] % (1.5,0.6){\PstVonKochCurve{3}} % \PstLens[LensSize=2.5,LensMagnification=5,LensRotation=160, % LensHandleHeight=2](6.2,0.2){\PstVonKochCurve{3}} % \end{pspicture} % \end{CenterExample} % % Of course, as for all PSTricks objects, we can apply to them some % transformations. For instance, we can project them in the 3~dimensional % space, with the general \cs{ThreeDput} macro or the simple \cs{pstilt} one. % % \begin{CenterExample} % \psset{LensMagnification=1.5} % \begin{pspicture}(0.8,-1.5)(5.3,3) % \renewcommand{\PstLensShape}{\psdiamond(1.5,1)} % \pstilt{60}{% % \Wishes % \PstLens[LensSize=1.5](2,2){\Wishes}} % \end{pspicture} % \hfill % \begin{pspicture}(-3,-0.5)(3.5,8) % \psset{viewpoint=0.5 -2 5,LensHandleHeight=3.5} % \multido{\nPosX=0+-0.8,\nPosY=8+-1.5,\nMag=3+-0.5}{5}{% % \ThreeDput(\nPosX,\nPosY,0){% % \PstLens[LensMagnification=\nMag](0.6,0.2) % {\rput[lb](0,0){Danger!}}}} % \end{pspicture} % \end{CenterExample} % % \noindent And we can also use the lens on non PSTricks graphics, % as external images. % % \begin{CenterExample} % \newcommand{\LouiseBrooks}{% % \rput[lb](0,0){% % \includegraphics[width=4cm,height=5cm]{LouiseBrooks}}} % \newpsstyle{/HLReverse?SimpleGlass_}{linestyle=none} % \psset{LensStyleGlass=SimpleGlass} % % \begin{pspicture}(0,-1)(4,5) % \LouiseBrooks % \end{pspicture} % \hfill % \begin{pspicture}(-0.5,-1)(3,5) % \PstLens[LensHandle=false,LensSize=1.8,LensMagnification=2] % (1.2,2.3){\LouiseBrooks} % \end{pspicture} % \hfill % \newpsstyle{/HLReverse?SimpleHandle_}{fillstyle=solid,fillcolor=white, % framearc=0.5} % \psset{LensStyleHandle=SimpleHandle} % \begin{pspicture}(0,-1)(4,5) % \LouiseBrooks % \PstLens[LensSize=1.5,LensMagnification=4] % (1.5,2.5){\LouiseBrooks} % \end{pspicture} % \end{CenterExample} % % % \StopEventually{} % % ^^A .................... End of the documentation part .................... % % \section{Driver file} % % The next bit of code contains the documentation driver file for \TeX{}, % i.e., the file that will produce the documentation you are currently % reading. It will be extracted from this file by the \texttt{docstrip} % program. % % \begin{macrocode} %<*driver> \documentclass{ltxdoc} \GetFileInfo{pst-lens.dtx} \usepackage{fancyvrb} \usepackage{graphicx} \usepackage{ifthen} \usepackage{multido} \usepackage{pstcol} \usepackage{pst-lens} \usepackage{pst-3d} \EnableCrossrefs \CodelineIndex \RecordChanges \OnlyDescription % Comment it for implementation details \hbadness=7000 % Over and under full box warnings \hfuzz=3pt \begin{document} \DocInput{pst-lens.dtx} \end{document} % % \end{macrocode} % % \section{\PstLensPackage{} \LaTeX{} wrapper} % % \begin{macrocode} %<*latex-wrapper> \ProvidesPackage{pst-lens}[2001/01/29 package wrapper for PSTricks pst-lens.tex] \input pst-lens.tex % % \end{macrocode} % % \section{\PstLensPackage{} code} % % \begin{macrocode} %<*pst-lens> % \end{macrocode} % % \subsection{Preambule} % % Who we are. % % \begin{macrocode} \def\fileversion{1.0} \def\filedate{2001/02/19} \message{`PST-Lens' v\fileversion, \filedate\space (Denis Girou and Manuel Luque)} \csname PSTLensLoaded\endcsname \let\PSTLensLoaded\endinput % \end{macrocode} % % Require the PSTricks and `\textsf{pst-grad}' packages. % % \begin{macrocode} \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi \ifx\GradientLoaded\endinput\else\input pst-grad.tex\fi % \end{macrocode} % % David \textsc{Carlisle} interface to the `\textsf{keyval}' package. % % \begin{macrocode} \input pst-key.tex % \end{macrocode} % % Catcodes changes. % % \begin{macrocode} \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax % \end{macrocode} % % \subsection{Definition of the parameters} % % \texttt{LensHandle} will define if we will draw an handle to the lens % or not. It is a \emph{boolean} value. % % \begin{macrocode} \newif\ifPstLens@Handle \define@key{psset}{LensHandle}[true]{\@nameuse{PstLens@Handle#1}} % \end{macrocode} % % \texttt{LensStyleHandle} is the name of the PSTricks style to draw % the handle of the lens. % % \begin{macrocode} \define@key{psset}{LensStyleHandle}{\edef\PstLens@StyleHandle{#1}} % \end{macrocode} % % \texttt{LensHandleWidth} will be the size of the lens. % This is a \emph{real} or \emph{length} value, as all PSTrisks dimensions, % but as we will have to make computations with it, we store it in a dimension % register. % % \begin{macrocode} \newdimen\PstLens@HandleWidth \define@key{psset}{LensHandleWidth}{\pssetlength{\PstLens@HandleWidth}{#1}} % \end{macrocode} % % \texttt{LensHandleHeight} will be the size of the lens. % This is a \emph{real} or \emph{length} value, as all PSTrisks dimensions, % but as we will have not to make computations with it, we store it in a % simple macro. % % \begin{macrocode} \define@key{psset}{LensHandleHeight}{\edef\PstLens@HandleHeight{#1}} % \end{macrocode} % % \texttt{LensShadow} will define if we will draw a shadow to the glass % of the lens or not. It is a \emph{boolean} value. % % \begin{macrocode} \newif\ifPstLens@Shadow \define@key{psset}{LensShadow}[true]{\@nameuse{PstLens@Shadow#1}} % \end{macrocode} % % \texttt{LensStyleGlass} is the name of the PSTricks style to draw % the glass. % % \begin{macrocode} \define@key{psset}{LensStyleGlass}{\edef\PstLens@StyleGlass{#1}} % \end{macrocode} % % \texttt{LensSize} will be the size of the lens. % This is a \emph{real} or \emph{length} value, as all PSTrisks dimensions, % but as we will have not to make computations with it, we store it in a % simple macro. % % \begin{macrocode} \define@key{psset}{LensSize}{\edef\PstLens@Size{#1}} % \end{macrocode} % % \texttt{LensMagnification} will be the magnification to apply to the lens. % This is a \emph{real} or \emph{length} value, but as we will have not % to make computations with it, we strore it in a simple macro. % % \begin{macrocode} \define@key{psset}{LensMagnification}{\edef\PstLens@Magnification{#1}} % \end{macrocode} % % \texttt{LensRotation} will be the rotation angle to apply to the lens. % It is a \emph{real} value used as an \emph{angle}. % % \begin{macrocode} \define@key{psset}{LensRotation}{\edef\PstLens@Rotation{#1}} % \end{macrocode} % % Next, we set the default values for all these new parameters. % We choose to have an handle of width 0.2 unit and height of 2.5 unit, % LensStyleHandle as style for the handle, a shadow to the glass, % LensStyleGlass as style for it, no rotation, a size equal to 1 unit % and no magnification (so of value 1). % % \begin{macrocode} \setkeys{psset}{% LensHandle=true,LensHandleWidth=0.2,LensHandleHeight=2.5, LensStyleHandle=LensStyleHandle, LensShadow=true,LensStyleGlass=LensStyleGlass, LensRotation=0,LensSize=1,LensMagnification=1} % \end{macrocode} % % We define also the default style for the handle. % % \begin{macrocode} \newcmykcolor{Brown}{0 0.81 1 0.6} \newcmykcolor{Salmon}{0 0.53 0.38 0} \newpsstyle{LensStyleHandle}{% fillstyle=gradient,framearc=0.6,linewidth=0.5\pslinewidth, gradmidpoint=0.5,gradangle=\PstLens@Rotation,gradbegin=Brown,gradend=Salmon} % \end{macrocode} % % And the default style for the glass (we only define a shaow for it). % % \begin{macrocode} \newpsstyle{LensStyleGlass}{% fillstyle=solid,fillcolor=white, shadow=true,shadowcolor=lightgray,shadowsize=0.15, shadowangle=\PstLens@Rotation} % \end{macrocode} % % Then we define the default shape for the lens (a circle of radius 1 and % center (0,0)). % % \begin{macrocode} \def\PstLensShape{\pscircle{1}} % \end{macrocode} % % \subsection{Main macro} % % The general \cs{PstLens} macro to draw lens. % % \begin{macro}{\PstLens} % \begin{macrocode} \def\PstLens{\@ifnextchar[{\PstLens@i}{\PstLens@i[]}} % \end{macrocode} % \end{macro} % % We first check if the coordinate is given, and if not we choose as usual % (0,0) as default one. % % \begin{macro}{\PstLens@i} % \begin{macrocode} \def\PstLens@i[#1]{\@ifnextchar({\PstLens@ii[#1]}{\PstLens@ii[#1](0,0)}} % \end{macrocode} % \end{macro} % % Then we define the auxiliary macro which will handle the parameters if % some are used. Note also the usage of the double \verb+{{+ to have only % changes of parameter values for this specific object, as redefinitions % of them must be local. % % \begin{macro}{\PstLens@ii} % \begin{macrocode} \def\PstLens@ii[#1](#2,#3)#4{{% % \end{macrocode} % % After that, we can set the values of local parameters if defined. % % \begin{macrocode} \setkeys{psset}{#1}% % \end{macrocode} % % Now, we can start the \emph{real} code. First, we must be able to use % PostScript expressions as coordinates. % % \begin{macrocode} \SpecialCoor % \end{macrocode} % % Then, if the handle is not suppressed, we position it at the required % coordinate, with it specified rotation. % % \begin{macrocode} \rput{\PstLens@Rotation}(#2,#3){% \ifPstLens@Handle \scalebox{\PstLens@Size}{% \divide\PstLens@HandleWidth\tw@ \psframe[style=\PstLens@StyleHandle] (-\PstLens@HandleWidth,0) (\PstLens@HandleWidth,-\PstLens@HandleHeight)}% \fi} % \end{macrocode} % % Now, we can draw the object at the specified position, but surimposing on % it a shape which will represent the glass of the lens, and we use the % powerful clipping mechanism to eliminate the parts of the object not inside % this shape. % % \begin{macrocode} \psclip{{\psset{style=\PstLens@StyleGlass} \ifPstLens@Shadow \else \psset{shadow=false} \fi \rput(#2,#3){\psset{unit=\PstLens@Size}\PstLensShape}}} % \end{macrocode} % % Then we draw again the object, but with the specified magnification. % It require also to recompute the coordinates where to put the object, % according to the magnification. % % \begin{macrocode} \rput(! 1 \PstLens@Magnification\space sub #2\space mul 1 \PstLens@Magnification\space sub #3\space mul){% \scalebox{\PstLens@Magnification}{#4}} % \end{macrocode} % % To finish we close the clipping mechanism and the \cs{PstLens@ii} macro. % % \begin{macrocode} \endpsclip}} % \end{macrocode} % \end{macro} % % \subsection{Closing} % % Catcodes restoration. % % \begin{macrocode} \catcode`\@=\PstAtCode\relax % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \section{Picture of the actress Louise Brooks (in EPS format)} % % \begin{macrocode} %<*LouiseBrooks> %!PS-Adobe-3.0 EPSF-3.0 %%Creator: (ImageMagick) %%Title: (LB.eps) %%CreationDate: (Sat Feb 3 22:58:25 2001) %%BoundingBox: 0 0 188 216 %%LanguageLevel: 2 %%Pages: 0 %%EndComments %%BeginDefaults %%PageOrientation: Portrait %%EndDefaults %%BeginProlog % % Display a color image. The image is displayed in color on % Postscript viewers or printers that support color, otherwise % it is displayed as grayscale. % /buffer 512 string def /pixel_stream currentfile /ASCII85Decode filter def /DirectClassImage { % % Display a DirectClass image. % /DeviceRGB setcolorspace << /ImageType 1 /Width columns /Height rows /BitsPerComponent 8 /Decode [0 1 0 1 0 1] /ImageMatrix [columns 0 0 rows neg 0 rows] compression 0 gt { /DataSource pixel_stream } { /DataSource pixel_stream /RunLengthDecode filter } ifelse >> image } bind def /PseudoClassImage { % % Display a PseudoClass image. % % Parameters: % colors: number of colors in the colormap. % currentfile buffer readline pop token pop /colors exch def pop colors 0 eq { % % Image is grayscale. % /DeviceGray setcolorspace << /ImageType 1 /Width columns /Height rows /BitsPerComponent 1 /Decode [0 1] /ImageMatrix [columns 0 0 rows neg 0 rows] compression 0 gt { /DataSource pixel_stream } { /DataSource pixel_stream << /K -1 /Columns columns /Rows rows >> /CCITTFaxDecode filter } ifelse >> image } { % % Parameters: % colormap: red, green, blue color packets. % /colormap colors 3 mul string def currentfile colormap readhexstring pop pop [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace << /ImageType 1 /Width columns /Height rows /BitsPerComponent 8 /Decode [0 255] /ImageMatrix [columns 0 0 rows neg 0 rows] compression 0 gt { /DataSource pixel_stream } { /DataSource pixel_stream /RunLengthDecode filter } ifelse >> image } ifelse } bind def /DisplayImage { % % Display a DirectClass or PseudoClass image. % % Parameters: % x & y translation. % x & y scale. % label pointsize. % image label. % image columns & rows. % class: 0-DirectClass or 1-PseudoClass. % compression: 0-RunlengthEncodedCompression or 1-NoCompression. % hex color packets. % gsave currentfile buffer readline pop token pop /x exch def token pop /y exch def pop x y translate currentfile buffer readline pop token pop /x exch def token pop /y exch def pop currentfile buffer readline pop token pop /pointsize exch def pop /Helvetica findfont pointsize scalefont setfont x y scale currentfile buffer readline pop token pop /columns exch def token pop /rows exch def pop currentfile buffer readline pop token pop /class exch def pop currentfile buffer readline pop token pop /compression exch def pop class 0 gt { PseudoClassImage } { DirectClassImage } ifelse pixel_stream flushfile grestore } bind def %%EndProlog %%Page: 1 1 %%PageBoundingBox: 0 0 188 216 userdict begin %%BeginData: DisplayImage 0 0 188.640000 217.440000 12 131 151 1 0 256 000000 010101 020202 030303 040404 050505 060606 070707 080808 090909 0a0a0a 0b0b0b 0c0c0c 0d0d0d 0e0e0e 0f0f0f 101010 111111 121212 131313 141414 151515 161616 171717 181818 191919 1a1a1a 1b1b1b 1c1c1c 1d1d1d 1e1e1e 1f1f1f 202020 212121 222222 232323 242424 252525 262626 272727 282828 292929 2a2a2a 2b2b2b 2c2c2c 2d2d2d 2e2e2e 2f2f2f 303030 313131 323232 333333 343434 353535 363636 373737 383838 393939 3a3a3a 3b3b3b 3c3c3c 3d3d3d 3e3e3e 3f3f3f 404040 414141 424242 434343 444444 454545 464646 474747 484848 494949 4a4a4a 4b4b4b 4c4c4c 4d4d4d 4e4e4e 4f4f4f 505050 515151 525252 535353 545454 555555 565656 575757 585858 595959 5a5a5a 5b5b5b 5c5c5c 5d5d5d 5e5e5e 5f5f5f 606060 616161 626262 636363 646464 656565 666666 676767 686868 696969 6a6a6a 6b6b6b 6c6c6c 6d6d6d 6e6e6e 6f6f6f 707070 717171 727272 737373 747474 757575 767676 777777 787878 797979 7a7a7a 7b7b7b 7c7c7c 7d7d7d 7e7e7e 7f7f7f 808080 818181 828282 838383 848484 858585 868686 878787 888888 898989 8a8a8a 8b8b8b 8c8c8c 8d8d8d 8e8e8e 8f8f8f 909090 919191 929292 939393 949494 959595 969696 979797 989898 999999 9a9a9a 9b9b9b 9c9c9c 9d9d9d 9e9e9e 9f9f9f a0a0a0 a1a1a1 a2a2a2 a3a3a3 a4a4a4 a5a5a5 a6a6a6 a7a7a7 a8a8a8 a9a9a9 aaaaaa ababab acacac adadad aeaeae afafaf b0b0b0 b1b1b1 b2b2b2 b3b3b3 b4b4b4 b5b5b5 b6b6b6 b7b7b7 b8b8b8 b9b9b9 bababa bbbbbb bcbcbc bdbdbd bebebe bfbfbf c0c0c0 c1c1c1 c2c2c2 c3c3c3 c4c4c4 c5c5c5 c6c6c6 c7c7c7 c8c8c8 c9c9c9 cacaca cbcbcb cccccc cdcdcd cecece cfcfcf d0d0d0 d1d1d1 d2d2d2 d3d3d3 d4d4d4 d5d5d5 d6d6d6 d7d7d7 d8d8d8 d9d9d9 dadada dbdbdb dcdcdc dddddd dedede dfdfdf e0e0e0 e1e1e1 e2e2e2 e3e3e3 e4e4e4 e5e5e5 e6e6e6 e7e7e7 e8e8e8 e9e9e9 eaeaea ebebeb ececec ededed eeeeee efefef f0f0f0 f1f1f1 f2f2f2 f3f3f3 f4f4f4 f5f5f5 f6f6f6 f7f7f7 f8f8f8 f9f9f9 fafafa fbfbfb fcfcfc fdfdfd fefefe ffffff )Ya%%p[dh;k2k[bkNV9rkiLjaiSrhShV[2Frn@J0hYuJ&i7uu6dG*UAlKda"l0%3kjlGCUf\ +ct_nWq$_SX+$\$E-8VjN[-LOsntFD,H0G_;3VZ,bP^lK7C#o'Z&AqYU*]o(i:["8Vfjr;$48 q>'g\q>'maqu$Eep\=LTnE];uio9%]kN1dai83;Hh:pW9f`'Gif@em3gY:H6eBuUgdb!72j5o IZg=FWk\uVQdMM-D'H$XgfIscK_E,BE(A7/\I>$"^,=]ea-?"RqpOKc^NgZ.Gip&=Rcp\b'cr UpUdj5JnNgY:E5e^MsodF-Rsg"=p-e^Dghbg=k oiT0%WhUKih\>u-ZKlqERCAhcKA7K%T>[%,/,?@cB<)cdo=&r9t:f14q>&ob(]$9*qj65q$nF ,i9p%7kIo)A7Vq#L3gpIb5VqYL*ep%A%Pp%%V?lKIHrlK[TqjPetNgY(0,dEp4bd+$\$e^W$m b/V?9\%]u3dE0&-Obe=#ARJeK=BAO&;c6Ii=BAR)hYpo^VD=o^hYDrUBXWr:W;Jq"X[\qXjFQp%7hFnEoQ-m-X3+l0%-ch:pT3dE]tZb0/,[f $DXcaMbj*\@B/d_n`XUR$+s6?i=%.<`W4"q+Uoe9hYIX!D,f\8-):Sr_!o';,9qdB7lV gb1Pb>md]o?o'u5Kmf;kOoa(3^p%J.Sq"X[`o.KV(nF,].lKdj)m-@da-(V`59F3b0 A/Sb/_B2[Bcg,QA^<:Bjk1H<;oeu;G^"ZrCd5b9))1*9hS/S:/4MX9M8#P9h\/K7nQKM:Kh=d R^UZ,md9<0naQPH!V#USo+L]foCMVHp%J+Rq"++JnaQ#9mf)K&lgF3.lgF'"iSE2:dDs2@]tD (r`5fp:^UC5r9OLPn*g)B!;$0[%J05bp%J.MnaQ#9md9E@l6#?YmI0Q5n*B)pin`2* `PT]c LXki;0rmdT<*pAXL]nF6GI#Oq6Qo()DEo`"OhnF5o7md9B-rTYHimI'H.mHj#tjP\eHd`B8>^ V.7JPD=I$A6iA?;bmU9?sX7f>aX6psI4rC.;f9i+PX=`T;&f\kfSlL=!8n,De^ naQ&ZXj#91_YP7K> mJ7fZ*R8,bsY77I2Fr^HfSr^HfU&k>2U8Ou?H>\JVodH'TRmd]`5rpTdS"nD0SoCV\Sp'UE_o ()>?n*fT.lMg#blK[^&lf@$aj5JY<`O2CrEFN3[?!CB-9E%Hb7n6$;7e&tK7e]FP7fGgW7RmA Gr^6`Tr^QlW&4f8[77Kg?9hnrHVUb%nlLOrBrpTgT"7bsQoD/"aoCDGAnEoT.lMg#jlK[^!jl GRah9NX(Jo>4/?tj4\=]8*j9LhWF84H$;8,5XQ8+B(J70#aS7K,[T6iBIg7n6*@9LqWE:Jt%b =(QZbk321#mJcPPmfi4Mnac8BqXb*co()>?nF,f4li$)jkND!gjl4k5Z^cGV?XdSY?!'rr779 R67S$-C7RT[8q*k9Q!CfQP7K,dU70,eEr^HfS"[bXF6q'QC7M.mL5!_Y29heYo@#i1Xkj.X'r pKdS#Oq6Qo()DEo`"OmoCMPCnaQ#9nF,c2li-/_k2k[`iRu2TJT"dn>$bB2:ej\VrC@/^84lH B6UXE>7K,dX7Rm)?r^HoW7K,^S70,eEqa1BP7/fUc8OuBA7S$6M93YM;RCV,:rp9aSmf)Y[nF 5u=o(2MGrqIl6p%7kIo'u8;mdT`4kND*qj5JqNe$bo:rUDK1oCVbNq"==PoCMPCnb;YClg4' +lK@?jaI7Hk>u=R'=B/-i84lKG8Ou?A7fGm\84Q-=7JT@I7K>mV7/]LK7/91m6:+%-6q'R77n ,s:7S$-E:Jjqe>@iSre`cPloCVJ;o)8(^o(2MIp\=a[!V>p]nf7;oo'l,4j6"n-RqbYf6rR/k >#e?l9M%fH84Q2K7fGmZ7RfiB7/9:N7/fOS6:1K8pHfog6psI57Ros<7Rp!@8ki2];cd4HR^_ 8FlLOT7nFHPJ#P.KYp@n@So_nA!o())8o'Yi0ki;3TSpOX8:f1+j<`2X`84rhNrC.#\77Kd;7 RfiB7/97P6q%#Ar^-EJpHf$N6psI57f,^h8P2WO:Jk4sAUL'!na5l:mI]uJnHJLTo_/%Sq=>E koC;,1md0&`RV>Yi85E&];c$.Y7Rp#F7KPtG7K#[U7I`eE6iKCP62A8r0lL=60nFQ5LnHJLTo_/%Sq=>Bop$qD;nDVX2NF5[[9hnA_;bftW84WGD!^f@E r'p3Er^6ZO!C9$I6MWnR6:+%-6q'R792#7Xr_!et<)Zh'>?YTZT@E5mme$#>rUC'^oCVbNq"a LtnF>r6o'=GqMd8V<92/8\;bp"V84Q$3q*b?P6U^iAnO3@D!CB-P62%V/n^>n>Dq!R_OnKRPqo_/%SoCMPCnaQ#9p$hD@j6E[mAl_Jo9MA/X9h\, J7J9.F6iKIS6UUi>q*XsE!^K":r^$WO62j4P6:1Z;.R$'`6q'R677p3H9hnDU8kr5^;c6Oq>$ l0CaP?:Qn+#r=naQ)@p@\.RrUC]nn*f]8lL+5k^jo`m9LVKI:f(%`8k2>K6hs.G6NKSCr^6ZO q*XsE!^K%;r^$WO5lO(N5sbK8"$Sq86iKIk6V0mD9he;S8ki)Z;c6Op=B]*eV8VQ`md^;I#k@ HWp@\.Rn*g8F!:TpT(?b8T\rp8h91;3>:Jjn_8k;E>6:!q)q*b$G!(?fRrBg8PMrR8P2NC7/fOJ6hs(J6iKCQ5sb$.#=:aE6UF+*5kmYE63'CP63BeO9MYR_4& /CA:Jk"f;c?n*AS6h1eaW/$o^q_Fo_/"Qq!IMsKG;-RO8E0e#tn+$#AoCM VJp@n@Ilg=--lKIBme&$H/84l9?84Q*?:/FYW84NPG!(H]Mq*FsGr]pNLq*XgC"%,C@5lO.M6 if_Fr'VPo7Rp$C9i+_d;c6@b9MJA_<)cRrA6`hsS(d5snc&,*p%J.Spugl*lKI?ghpecr?;![ X6UO=57S$\Ir%^Zb"Po()DFp\4IYjQ5Rfjl,%L[Y&Ql8O,^35t=L:8PMlK7R][2 5s[h)q*OmCr^$WO62j.F6hs.L70H"G6:!m95lj;=r^.)[5sR_&6q9d97S-9Lr_POP:J4>V<** .,=]JI4?=T\jl0e*4oC_kPq"a"?=j.>$Yf`]\D];p\++O p@n@DmcB:m6)lgj]=p@n=Vk 3_?lki9UK=@ktS7R]d46q0dD:JOPR7n,rF6jZ:M6pj:-5s[b$r]gBGrBUUG6iB>F77B^<92/2Z:ejYU928;]$YNEL9o\$nFZDHp\=RIl076lijFJ<7R fm65XR_'7nZTP9M%cF7R]a66q'O677BU36:!n&5lO"I4p+&85sbK:!(6QN!CK6Q630G@q*FgD !(HlT5XRk(5t".27nQKP;,9nZ8P)QM;,pRn;cd75@X+NllL=H@p%S7WlK.5=% b*6q9mE91_ZE7n3GGrC-lX6pj5sn4477^'E84H' =7n3JH!CfQX7g;FO6UF()6N0:M5R9S@6:4.07RfoC7LDRQ6psI47RBF/6iKIR7JT=P6::`?!^ f:?r^7Yn85)iY9MA)M7Rp*I;-$ar;-.".CilQ0m-t#L)u9@#i9TO`_g#'G5t=F05t4+.84lHC 6q'U87fGg`7Ros>7n,p76:!p:6N07W5X7\(6q'R87nEGG#=qBU7Rfm=8H(sZ6psI47eoG<5sd t.779I/6pj@285)iY9MA)M77KmF:KL_!:fCFtBP*U]l0\6@q"adNiT]ObZ=6j(77BU477B[87 n6*@7n<>Dr^R/^779L06UUi>r]plY6UX@584cEF84WVJ#Y.HV779O47nNJE"\(sL6:+':71Va P5t"+07S-9L;,0hZ91o1T.8NiA<)QXr>%22t`oQmbrqQ9akMPC\g87tG7R]a66q'O67Ros>84 Q2E7Ku@Q7R]^46N0@O63feB6UO717nEVN!D#`Z7L2LT7R][377KiD6j?(K7RTR06iKOQ6jQ.I 6pj@17nHDR:'"$]rCS&*;H6[o;c[(0A9k`>oC;eVqu#a?jl4j];b0>GrBp`V77KcF8+T1R779 L06q%#Ar^$cU6UX@48,YsY8,Ga[779L16q'T@6S:bq779I.6UaF36UF..77KX36:4.184lWP9 h\5R91hrV<)can%=KhOm'7/]IQ7/fUY7Ros<77I#A!C]HV7KQ"H6iBIQ7/fOZ 6psI57Rp!>7f>aU7fGdV6UUi@"%GaK7K,[n6UO706U1!djm(X[aaHiP6q$u@"%5OG7K#[V77I#A#=M!L7Rfg77/f[T70 Q(I6UO70r^@/`7n6$;6psI46q$uB<(',E7n,s:6psC06psC.5XIh,6pj:.6q'R97n,p877Tm? 8k_rR91hcJ:/b(h;,UCo?=8Gcjn/?Gr;GjJh;cS"9LhK<6UF+,6UX=277Ka877?r@#t.3N7Rf g86q9cH7fGgW6UUi@r^?u\7R]a67/]RQ7MA3Z7n,s:6pj:-6UX=/5X7V&77I/C4@;J+7R]^57 7Tm=8P2ZM91_ZG9i=ne:f11l?s\&Fg[Y%8qu#RCg#'Y`76j7.6UF+,6UX=277Ka877?r@!^oF Fr^HoW7K,gV7KZ(J6UUf?"@YaL7Rd8D#=V'N7Ros<7fGgc6pj:-5sRe)6pa.(5stQ=/OMij7R ]^46q'R87Rp'D91h`F852u\;,C+gu_#=$$q"j(6hUKDW84r^$$ Au=qapA"LCi7?5kD+R%m630G@r^?QNr^6cS6iKCV6UX@36UO9?7K,[U6UUf=!CK9R70l:L6UF ()6UO9?70#aL6N07O5X>*3!(?cS"@PUF77R8H"\(sP8P;bU:(gB%9i5>jl14NAq;U>_cG=?i6 iKCQ6UUi@q*bBR6pj??64#qE6UO.*6:411r^?ZO"@>C@6U^oB#t.-I6:!n(6:40?70#aM6N0: M5kdVO6q'O46UO717JoUn7n6-C92&&S92A2V>En(5p%S:BiRQ/dC.^tp630G@r^6cV7f>dR6i fYBr^$iT5smt(5X@a87/fOY6:=1-5s[h)rBpoY6:!n&5s[k+r^?fTq*P$Gr]gHJq*G*L6iBCR 6UUiAr^Ikt7n,s<84cEH9M/&R:KNP1m.C#Iio/G0\7A-#r^$WQ6iKLQ7KGqHr^6`Tr^?]P#=1 [D6U"%,CA62j+O5sdq,r^HWLr]pQM5lO"C64ZFN6psC06:XO87Ros>8O WPH*_/an92/2T92:,jn+?>Ki8;i"[;nN-7Rfd46:F=1q*kES6ppo>!(6QMp-JdG62j+W5!_Co 4@;M$69d\#r^6`Tr^-]Q6M<\R6:=:46pj=05X@_(7/TLP7KH"Lr'_Aj84Z?J91`'&g%"b0q;1 &Wah)sk83m,?!^oIFq*kES6ppo>pd=dBr^$KJ$pm6C5!q\%5sIS#6q$r?!CB-P628kDp!dcgE"qVU)[da6(>Q8Ou?@r^@bq7R]m?85aBUlhC5Phq6Q2d*'/)DHB1l770B96ioeF6iB@H6hs.L 7K,[e6UO.)6:OC49itk3;*I!*69Y<8!CB-P62<_G4[8m3'LP8W6pa1*6:=706UX@584cBD7n3 GG)b*7f84QNrfC/J0qqfoUf[%[W[tJ?d7Rog2621:\?r6 %A5,?U5!M=35la.E55dbG5la7I6O?(H6q'R87Rfm7/]IW7n#g56UXB?7K>mV6mbH!<*NgECP7_1!dg=F]ubfI]:Z*0g98P)6:77I)A#t@ ?O6UO727n#oH7k-ts77KjDDVV294g5<_7o4oRS=55meF5l!\P6: 4.07Rop;77I/E-V$Zu8Oup!]^kjpqu#$occjJI]XP#BVL`,Q6qKg97Rp!A8kVlR:]+&g;(GI< 91ME=6UO=89he;Y=^u5fH%Lj1Ng#s.XL#C=XLY=2RYkNA69m^s4[&L&r]gBIq*>6P6UX@47n, uI70,kIrC:!]:1o./q"=O^rQrj5a2>QtYG.SZJR_SE8jYm577Tm?8lASf<``=%<*37(^::>CSXbde@oQ&h6U^lA2+C)5:KLh)>[LZ;>?Os);+ j;F779I-6V1$LK_Rm:aY,.\RPDXNn<_PtMr^8h86q'RB;-[[AAnb a^@9uu29h7T<6ps@-6:X^J=^l)bIZBkpXKf+=[_'>a\[oDc\Z;9IAPY]]6:!p54TR`1r]gBIr ^$NM"[bXC6:40>7K#[`7n6$;7S7TsddR,/rqoR,]!JN=Un*j5O,%pk>#%OV779L06UX@9:0hR JDfp#:DeWHQ8k2686UO1+6:FF=;-."3Dh*h6SuAj![CNue`5BF,^U^V1F]Uso3B0"o4TI\F5P dYE5m9SA5X@_(qa:l^7Rp!@8P33JbNeg"rVl^B\?i<:VP9WMQ'@8XEFVs=9M%Z?6UX=285*?, E-d1iJqA;]ac7n?-=7S-6lO3-tdoDJXfrD0`)Z*:C5XK/1pURd^.F^nQP8O Z';7R]a>A9`WeUoC,`Q[rpV:e4&D5sR_&6:!e,=(#E=;GKta=Cl]7SZ&a%_8O@6`PB7!Y*s`D 84*,:rBU?Jr^-TOrBpZT7K,dU71Mj[7n#j<9mibnrVHVf]"#2WY-4t-UmHUI>Z4 3^6q0U56r7`SO.`eeZEU0fHtleX8k)*25lO(l5$)iSE*Q14<)ct/F,-3\WNs.Pa3)K?^q6tQO DR`Uq*4jDr]pWQ6:!p:6N0=Q6q%#C&k#,T6UjU:77KsJOhC/^p\b'crr,^2`Q-!:_7mUl\$`K AS:YN^;b05B779I9>C;d4ZGOSo]!%Z]G%"9B7mT=(6:4(8FIJhT@oH9+=^Z#kMNs[4Zb+)sd* B_S_S*LYLLEdM5Q3nK5sbK:r]gKM62j1O6UUi@&jnuP5X\+377U*PW6tD:n,*.Zrr-!Dbfe2P a25R"[^*$7SVD,k;b'/@6q'O8>)]8\_Sa=0^:gb*$jq=spgrVldtda6=cc ,ml<\@&QAVk/ciC0F8!77Ka:sa4&Jcda$4`];h!7>Z"$_8kDTI:/k=t>%W,?V5LH(\[]8e ^r4CAdF-Oqe^Daeb.jd5=%5GA4[).or]^EK5lO(>6OuLN84?-?975CXqu$9erVQTn/(N+qc,m l9\$E05St)73L4a8?9MA&N9PoKqcHb%lf@\O#d`/hlKPXd`8cDC3:Jt>*Cit;iR]`j%]thD"a 2lHNe'uq!f[eQubf[f+S7bS_5s7@q48qGF5X><7q*OmE%m`EM85)NQP2u02qt^*dr;Q[se^Dd e`kT!gX/DSWQ^1$frr-!K dETeN]X4i;U7@O6Q&piTC0"2-92JiRU!MNIinr\SgY19*bJ1'@G$S0M;cd=;C2nTTPG"na\@f _u`Q6?PeC`L/g"G*/eBuL^`k8U7@73@D4[(q+564#7p-JLA%RNHO77p1!erVdh`b fI`:\$)d(TU_=5Q&piMB3/&09iYc$Z.S$lkPjL"hV[,:cc[D)ZFF]:5S"lpj[_'D q`lcZWfA,9@h;$c4e'Q7X_n<@EC.LZV5_/OGS3n=BAEr=_tFWh;dGWjQ#1SiSN)2agndHKRS,]CNY&VL5CqYVQmP:]>Ve6 d+?e#hr=)aViq"OR]rr2lqr`@7]^V% +`WM6#VR[9D/OG8-i<`N:$e CWR8j5f:\hqcu9ccaGM^q6:e<(',A6:1K5q*>$K6iKCb6UX=391hoSOL=-Eq"X[\qu$Elr`@. W]t1\XW1flVS=,h7PDXiu=&iI-@Z\UYj6Q!mjQ5C]iS2r2aM59eSsGLsM2I4OP*hijQ5L`i83)6c,n#E^:C1m=%#>=4[&U+pd#BV6:4+.77BO68lfoGi;W]N"8_onrVldt a2>X&\?`-1U8+ERStDF4KP"=d?"7rPdG!aKl/h!fjQ5FWf@%dV]We9,Ssl"5Pa@i1Uo^r7^;. \0d+-k*iT'%^k2bIWe^2IZ`PT9tXb9eE5Wq1kq*=aA"@,7?6q.)E#>%K]?&$\_kPb5Xqu$Bk$ H^<)^:UhXX/;hnrhN,XR#5Z_<+'Qp[FsL%lfmQokiV'hhV$B#_7R"PVl$/[T:DIFUStB+^;Iq 3cICP'hr<_Zki_$chpg#qa2Pp/\?:Ke6pX(&5l!_@630GAr^I2_786E`K=LFFqYg9nr;HWprr +LlaMbp.\[A`EY-+h)WMQ5ME*QFUHB>quioo^nl07NskiUdUeB5V?Z`C+*V>d5:V5UDs[(F/p air/`gY^uMjlbjjjPf"Hd*'MN`4rmcKNU`15s[m662]Ygpal)7Dlg*j%m-*]rhq?N%^qI+WXK8D!W3!/,[(!Z`` Q?s7?$\qssRXq "aa_r;HWoF\gsOX!aMc*9]nL#g6UjI0r^-TM)F?eY5sdt-6:!h#7mo^;:e =W-R`k:0j?dmEKc-4;K_SX.)]t1YXYcF+@LT88_5YmI0K/l0@U"k2Ft7]=+c9 VlH\sZb*oe`5g$HdaHUof%Jj9i8Wn^jl>F\gsFKrbK@o?Z?KPC6:O@06UX:/6:+%-7/fOf6q' O46pa7.85WZF[+"FBrV6?kqYC$fr`Rk'da?Ccai;9;_SEjr\$`N:O-R)odG3gFlL"!)kN2!ol0 %3cbIXsTSti6_XL#XW`Q66Jdacq#f@ep7i8N\XkN([`i7lf1c-4GQ[%_,1779X76q0U6rBp`V 77TiH6kVjQ5=nF:;.b6Qe+3;4qtp?lrqZHjrYsMAeC2jmbfRlD`59:&]=PVVR$k4rc.h:>kNW !2.d?9blKdcscb$6LQ^sqMXgPjX`Q66JdaZq%g"P3:hr*GRjl>@[hqH].rlGV]T8$HD84cED7 nH0>7K#UV77BU4r^@De6;(6fMRqL.s75aSr;HKfqYC'gr\rN^e^W'qcHF8J`5BF+^:qFjSX$" W`S95)gtglIjQ>RdkN_Erd_;]LOHuQ:Y-u!Y`Q??LdFA0I(>.C6k$ej7ae^W$nbfIiE`;RS# `4Mh0QCkS5f@/$d`504'e(sp%n^arVle#gY(31f$r*nb K@oH`l?'?`l#!HMM@P.aMks*Z)OLj\\Q>7f@\Bc\"SkCQ(4\S]tqb4cHt"hdaHUof%A^2g"kN ?g=t9/cc)>-bg+S`dF-Imf %Aa4f\G<:g"Fs)age((EE5Or8Ol097S?HK:eseZrC[qn852l^F.Bkro)/@_rV?Bgs8W)us8M` frVlfqg,.I6eC2gnd*Bn]cd'ea_RH=kCNP*$V6I;2\\>J`^W"@?c-+5EZ_NqRR%^Um^W"C@cd C2?cl:B]e^rI/hq?f:f%IjERXSsS9gh6;7n,s<8kf4Z!_c3XrC@;g<*jC(^!Q6iNUTD#?`QZ ZVe^j]I'@YL_f@Sg0gXOEaTlFL;8Ol-662j+h6:ORB;,U=k;,9tb<*s0XJWI.klLFK?qY^7n,s<84u`VMqu -Kkr;$9<(.^tf8l]&$?!CZNF,uWbZ+/3Jo_J @]rqulqr;$_T0mGdF?e#f@JO'rmhe#:fpt0B6Jj*Xgu3 _fC8S5r;HQpr;?BhrqlfqrVQTmi\ocQhVI&DgY1B5e'QCT[%rY-E+*6bCijfUWkQj.e_&R.f[ nQp`PB*mZF.Qgair&Wdact$f)F28f%/U3eC;LCRrDM-91_ZD7S,j7:K_*)A.N0bF*iM!S>WNo ]"Pi+m.C5S!;uTirqlfqrVQTmjCI<1iS`VLgt^Z9e'H@V\#P[IG\(DsEdDn\T!?MbdF6XreC; pja2Gd*]"Q&&bK\A\eCN4$e^W."f%8U1f%8*WYD[7,=&;R_9iFbd@W$=4G'%tWK8Ph]V5q/=` 5]gMo(r=_r:g0hquQcpqu.l'k3(mhjlGIZhVHuAf@%sh_7?b?OF_4R?uUI:J=E[`bg4_erm_S .bfIiC^qdk,aNVrVe(34&rRKa \:[RQ9m-Ep!k2k[`iSWGCeCDOIXJMb\IU68dB5;6rCNY)cT!#W>_nNt"]"Yehb/MKKe_&X6in rVJgY1B9gt^lJhqQc0ah50jXfSh?_Z%XkaMu-5^;7Oq\@B/d_op*Fcct56q"amVrr2:Em-Ep" kNCseio&YFeC2@FY,A7nO()-b:fL=f9M%oT=CZ5nIYEoMR@g.JZG4?%dam..hr*DJg]#nSLlKIEojl>@Ygt1'%_ Rd"NX0&1>?qj0c:/"8W:esnd>%(uMDg-M[MNX^E^W=dQgu.5Ohqd&@g=tE=hr!/>f$_ga`l#U +^r4@Be(*!tccX8I_na%&`5p0Ga3;iPf^8=nrr2@(md9?*l0.9jio&VDeBPhA[&gOD\<1u=:J h$g7n6*B9i+ei=CH,hF+&n1Up@JGb0nu#jPo+Th;$iBhV[;NgtC?1ccjSR`59F3b0/)Xda?=\ `Q#j6_SjL;bfn2Rcck,3pA+aVrr2J!naPu6m-hVI,Kh:pZ8d`p"X`P]X7bL"Ybe'cRebJqN?`5Ta:a NMWJcHOu1pA+aVr`&R`o^qbFn*]Q-kiUsag=Olk[^N`cd*C4LMf<*+:eakb:/G#%E-R22YIV] taN;<f@&!ibK%WCbg4DPa2Z's_u@dZaiXP'#KOa(bK8B&o_ JOTrr2RLo^hVBn*TK,kiL^Sda,hA]Yr"@eCW-?JS7YO:/Xqd;H-tBK:&XL`6$\"%hD9he,J8lAo2LRkHS_oKmDdJVDse(*(&f[naSeg]5&f\,!5g =Om(dE]kSa2l?B`l,a0^V@S#aN;WLbfe/N`lH*lfmNgf[J*`^rFa Qh;RP]d_MDc;,C"^:fq4NOJ]7mrkSZVc-Q=@!SH$'f)F2&f%/I(fDaGIf@86pbJqH;`5T^3^q RIo^;.S,b0/#Pb/q`Ea2Z'%sh;7&FgY(63rRVq>g"4m0g"=j'd*'PM_S<^l['mHT]u%h6cMl,ucHODN`Pfa6_Ssp_nE0` LqE=ZLp@RtIna>c,iRu](bL##)kN_L'k31sf_1,uo;cmIBEI9?hVHu@g= b-1f@\a-rn&1@da-1[`koI%\$Nam^')-bbhqgMrr2aKq=s^Wo^hYB m-*E]eBcLnip#drnFGl3jQP0[G?e^pgM=SXPt:UTLo>`5p3Ndf.]1d*'JJ_ 7mOn\[f>eaP,tVs8W&qs8VTfrr;omC&.Pup%7hCl/UURhW4"lo(2JFp%J"Hna+oFK5,LZSu'6 @`lQUEmr;Zfdrr2rqq@<>rq"==NmHEs9aND`N c-Okig=tKCro5utgt^T5d)j2@_7[4\WhZ)NS"HOY[(XK'cdC7nf@JI#d*9\O_n`st]XkYb]Yi 4Yp\k-jrVuornc𝔒.!#q=sXUoBk]!i8EYZn+6PO=SD=VnF#]1k2;bSFaKFG\@]f'bK\>Ze CW@-hVmMTio/PAe^;RX]XYMXVk0=mcii4JpDR#QEn$;`Q?BMd* pOqfA#3@i83;Df[\MgKJrL81fX]>;J,aN; TJcI1:rf@ABtc,[T,X.l0aO=ZT`U91f>`llZTeCWF5ioB(XhqZr:d`feN^q@4aZa@3Q_9h-3q YpKms8W#err2otrr)jDrr)cgp@R_4i8Wndnb2bOo^_PFna>o:m,d0=OF1keG*AGrYI;(A]K*j Jaj&/Wbf[W0Z)3tNKn+`0OIE#M]"l>-cI14ogYUuNjQ5F[h:pT2cH*r>]=>5S[(!T\cJA*frr *!!s8;Edq#=k'rVQE^mHE`umHsQAq=saXnFQ#2m-Wofd]A^]Df'TKOe&>PZEUL8Z+R``_8F1, ^9k&=QA9m5G'AP$TrbZ9_p6WWeCN=/i8WeXjQ#1SgXX]p`koL'\[8`O[_'K(f'WJ9rsJc&s8D rrs8W)trV?Hfs!7UCqtTgOl07R'oD&7\qYL!Yn*0$"k1@P^NIlCpD/=UBn!WE#qs&f:!qtK[Lmd]r;o(2A>nF#T,jl57O_Q',SIXZWcFF]C@R[KM-PE M&sS=lUMRZN>LEG/]`?Y=7uJZ'h:9igXdG'&M26_2MlF V6^U:&3Ob\L*E-->LFDPPt?sd/D?=[_hJ!-V4]>M_7cdL@qg>:iJioK1\i8*/?eBZ1U`5'+"] Xthj`6Hcjp&4jhrVHQmrr2rtrr2llrr2qArVc`qs8N#rqYBjTm-F$+naZ#1kNM$bf#k\4VjWR &NfT'KK:g?TlJKjrU5XD:Ci+'1FEDM??XI,F>[ClOE.*hAY.29eair)ZeCWL5i8N\UiSWGEf@ /!d`l#X,]">Pc]u%qUBnr;La8r;6Hip[[\8l0@ElhqHc:eBGS0 TpUq!M2[FTMh?nef(ARsd^P]uEG/lm@Us+cBkVC"Amo%UBl7m:N1?iP]>2M2cI(+mgu$uGiSi _Ng=Xs'bK%Q<^V..f\[oGiaN`K/qu6Wqr;Z`prr<#trr)ZlqYpm#r;-6`p$h5*h>Z2Ag==Npc ,RGlR?!,YKntbMO,8FFVomr\gr61KFD>Ds@:<\ZCM[d&C1h$a@V0@oHAIl\WjKCYb0A;]f%]' ;hV[5IgXt**cH4&B^qI@h\@K2`_8smPm.pV[s82iprr2rtrr2llrqcX0rVQEckiLaUd*'MO^: ^nZYcjpoPE#Qs>)%oqOH"j:J=O0mfZ^^eG@b/k?=.,QCN"02DK0c?Ec5f3EI!;%S>NO"`5g'G d+$b(gYCZBh:gK2dET_L_8!Xo\%&u[]u%n9e*?])s8MlprVlfrs8N#rq>U?m(B+.,q=O"7gtg Q(_nW[_X/2MaV5'H?resd8Nf8dINJiL=I>k&8ah+7"EG8ul@Uiq\C2S'7Fa&+WH?XIOEdNV*R \R$o^r+7;cdLCtg"Y?>h:gK2d`f\G^V@Io]",>]]YMM-bhDRds8Mrks7uWms'PWro'Yf'f[7[ V]WnK7Tp_+-Ocu#mMhQqBMiX!^Mhct@LP157R&6sYN-/fF@pibUAS>n!F*;t]JqSf/IslTmM3 +$oVm!eM`llZTe_&R/gtg`;e^Mmg`5'.%]t=9V$ba?oaND`Xl2(GZrV6EgrVlgno^D&*hU]oh ]=4o9R?itnMN!UXNerLCK8,;HQ'@>fLl74JK7o5MQB-T;C2%);+bg=kkg&B\Df[\Bqc,mo>^:h1k]Y2(r`5g!Bbg>27qu6Tis7uWms)72ahqQc2a ht`tW1/s0LkUeMQ'@;bL5(M@N00BjP)kikNJ)\,KoM(NL4"/cCh.!cBPhd5H$b4"MiX!`OH5? \P*MN3XL#OR`6$9Ne_&O-f[n[$cHFAN_na""]Y(ki^r+15aiVcMdcC*!rr2`nq>UBnDr]^,e^ Mjd`4)qGS<].nM3!gbQ'%&bN0KKfOcu#nP+.i$L4"8qKSGABLOskk@q0(aDKL/QJ;B/HQC=;4 R[9D/R\-I[[(X;qbKePeg"=p-e^DadaiDE>_7mUq]tM1ua3)TLbg+;Qh!b+d*pS!f@JL$d*9bU`l?!7^V.@r_SjO=cHstdd)jD^lLt,Rmf.4nki1I TgtC5k\[fGh]!o2PVP0ll\@/Z>U7I^=Q'7?-W2ZS]NeN%9MNF!aNe2IgBPMF-IYEZER@pI[Z* L[E[Bm3J]"Pkq`QHHPdad"$e^Mplc-+8K`lH$5^;%M'a2uTPdaQ^obKAH#oD/@Qs*t~> %%EndData end %%EOF % % \end{macrocode} % % % \Finale % \PrintIndex % \PrintChanges % \endinput %% %% End of file `pst-lens.dtx'