Mercurial > hg > Papers > 2011 > kazz-jssst
changeset 7:b083ed384b67
add fedlinda
author | kazz <kazz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Aug 2011 17:58:40 +0900 |
parents | 86f7239450ef |
children | 2c6b70bd780f |
files | paper/kazz-jssst.tex paper/pic/fedlinda.eps |
diffstat | 2 files changed, 1253 insertions(+), 260 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/kazz-jssst.tex Mon Aug 08 17:51:37 2011 +0900 +++ b/paper/kazz-jssst.tex Mon Aug 08 17:58:40 2011 +0900 @@ -77,285 +77,69 @@ % \section{FederatedLinda} -これまでに本研究室では、分散フレームワーク FederatedLinda を提案し、実装してきた。その実装には、以下の通り3段階のレベルがあった。 -\subsection{Level. 1}\label{"level1"} - - - -\section{並列更新アルゴリズム}\label{section:update} - -本節では,後続の操作をブロックしない${\it update\/}$操作を与える.基本的な -アイデアは,zig-zigとzig-zagの両方について,目標節点をその深さの -半分までしか浮上させない半扁平化(semi-splaying)を用いることである(文献 -\cite{ST85}の半扁平化は,zig-zigのみが扁平化と異なっていた).$x$を更新対 -象の節点とすると,アルゴリズムは以下のようになる. -% -% ここでも左右対称な操作の片方のみを述べる. - -\begin{itemize} -% \medskip\noindent (a) -\item[(a)] -空の木に対する挿入は図\ref{figure:update} -(a1)の操作,(空でない)木の根に対する更新は -図\ref{figure:update}(a2)の操作を行なう. - -% \begin{adjustvboxheight} -\begin{figure*}[t] -\begin{center} -\scalebox{1.00}{\includegraphics{fig3.eps}} -\end{center} -\caption{後続操作をブロックしない更新アルゴリズムの1ステップ} -\label{figure:update} -\end{figure*} -% \end{adjustvboxheight} - -% \medskip\noindent (b) -\item[(b)] -zig: -$x$が左部分木の根である場合は図\ref{figure:update}(b1) -の操作,$x$が存在すべき左部分木が空の -場合は図\ref{figure:update}(b2)の操作を行なう. - -% \medskip\noindent (c) -\item[(c)] -zig-zig: 図\ref{figure:update}(c)左の木における$x (<b)$の探索では, -枝$ba$の右回転を行なってアクセスしたパスの長さを1短縮する.次は1レベル -(短縮前の長さでは2レベル)下降して,部分木$A$に対して再帰的に探索を行なう. +\subsection{Linda とは}\label{subsection:linda} +Linda は、タプルスペースという ID で区画されたデータストアに、以下の API +(表\ref{tab:lindaapi}) +を用いてデータを出し入れすることによって、外部との通信を行う分散プログラ +ミングモデルである。 -% \medskip\noindent (d) -\item[(d)] -zig-zag: 図\ref{figure:update}(d)左の木における節点$x$ ($b<x<a$) の -探索では, -枝$cb$の左回転と,できた枝$ca$の右回転を行ない, -アクセスしたパスを1短縮する. -% -% 二つの中側の部分木の適当な方に対して再帰的に探索を行なう. -% -% \noindent -$x=c$ならばこれで探索終了である.$x<c$ならば2レベル(短縮前の長さでは3レ -ベル)下降して$B$の中から$x$を再帰的に -探索する.$x>c$ならば同様に$C$の中から再帰的に探索する.$x\ge c$の場合には -枝$ca$の回転操作を省略することも考えられる. -% -$b$の右部分木が空の場合は,そこに節点$x$を挿入 -したあと,上に述べた回転操作を行なう. - -\end{itemize} -% \medskip -以上の操作で,アクセスしたパスの長さは最悪でも約$2/3$になる. -% -半分でなくて$2/3$なのは,上記zig-zag操作の性質によるものである. +\begin{table}[htbp] +\begin{center} +\caption{Linda API} +\label{tab:lindaapi} +\begin{tabular}[t]{|l|l|} +\hline +in(id)&タプル空間から取り出す。\\&タプル空間にタプルは残らない。\\ +\hline +rd(id)&タプル空間から取り出す。\\&タプル空間にタプルが残る。\\ +\hline +out(id,data)&タプル空間にタプルを入れる。 \\ +\hline +\end{tabular} +\end{center} +\end{table} - -\section{並列削除アルゴリズム}\label{section:delete} - -並列削除のための基本的な着想は,扁平化操作を,削除すべき節点を下降さ -せるために利用することである.これまでは,扁平化操作はもっぱら,再度アク -セスしそう -な節点を浮上させるために用いられてきた.ここで重要なことは,削除対象の -節点以外は高々${\rm O}(1)$レベルしか下降させないようにすることである. -以下では,$z$を削除対象の節点とする. +\subsection{Federated Linda とは}\label{subsection:fedlinda} +Federated Linda は Linda サーバーを複数台、相互に接続することによって、 +分散プログラミングを実現する。各サーバーは、接続した Linda サーバー内の +タプルスペースへデータのin/out を行うことによって、データを伝搬する。 -まず,根節点が削除対象節点$z$である場合を考える.この場合,zippingと呼ぶ -操作によって -それを``容易に''削除できる場所まで下降させる.節点が``容易に''削除でき -るとは,その左部分木,右部分木,左部分木の右部分木,右部分木の左部分木の -いずれかが空であることである.根節点の下降によって,その左部分木と -右部分木の縫い合せが起きる. -% -% これが言葉の由来である. - -\begin{enumerate} -% \medskip\noindent (a) -\item[(a)] -``容易に''削除できる場合:図\ref{figure:delete}(a1)または(a2) -のように変形する. +\begin{figure}[htbp] +\begin{center} +\scalebox{0.50}{\includegraphics{./pic/fedlinda.eps}} +\end{center} +\caption{Federate Linda の接続モデル。組み込まれた Meta Engine がタプルスペースを操作し、外部のサーバーへデー +タを伝搬する} +\label{fig:fedlinda} +\end{figure} -% \begin{adjustvboxheight} -\begin{figure*}[t] -\begin{center} -\scalebox{1.00}{\includegraphics{fig4.eps}} -\end{center} -\caption{後続操作をブロックしない削除アルゴリズムの1ステップ} -\label{figure:delete} -\end{figure*} -% \end{adjustvboxheight} - -% \medskip\noindent (b) -\item[(b)] -``容易に''削除できない場合:図\ref{figure:delete}(b)のように -zig-zagを施し,そ -の結果できる$b$の右部分木に,(一つめとは左右対称な) zig-zagを施す. - -\noindent -4回の回転で$z$は2レベル下降する.$z$の新たな部分木$C$と$F$ -は,同じレベルにとどまる.それ以外の節点も高々1レベルしか下降 -しない.$z$を根とする新たな部分木に対して再帰的に削除操作を行なうが,$z$の子孫 -でない節点がそれによってさらに下降することはない. -\end{enumerate} - -% \medskip -図\ref{figure:zipping}に,根節点$z$の削除による木の形状の変化を示す. -\begin{figure*}[t] -\begin{center} -\scalebox{1.00}{\includegraphics{fig5.eps}} -\end{center} -\caption{Zippingによる節点$z$の削除} -\label{figure:zipping} -\end{figure*} - -削除対象節点$z$が根であるとは限らない場合は,まず第\ref{section:update}節の -方法で$z$を探索する.これは根から$z$に至るパスを短縮する効果をもつ.つぎ -に,$z$をzippingによって下降させて削除する. - -Zipping操作はパスの短縮を行なわないが,アクセスした節点は浮上させ -るという原則にしたがうならば,zippingに先だって,左部分木の最大要素に至 -るパスと右部分木の最小要素に至るパスをそれぞれトップダウンの半扁平化 -(zig-zig (図\ref{figure:update}(c)) の繰返し)によっ -て短縮すればよい.この短縮化はzippingと並行して行なうことができる. - -Zippingは更新操作と異なり,各節点のキー値を読むことなく木を下降する. -またzippingは,木$T_1$と木$T_2$ ($T_1$のど -のキーも,$T_2$のどのキーよりも小さいものとする)とのトップダウン併合操作 -にも応用できる.すなわち,新たな節点(キーは任意)を調達し,その左部分木 -を$T_1$,右部分木を$T_2$として一つの木を構成した -のち,調達した根節点を消去すればよい. - -\section{計算量に関する結果と考察} - -効率の二つの尺度のうち,スループットにつ -いては容易に議論ができる.すなわち,二つの操作は,レベル$l$ (根をレ -ベル$0$として)の節点を${\rm O}(l)$回 --- ${\it update\/}$は高々$(l+2)$回, -zippingは高々$(2l+2)$回 --- -の回転操作ののちに確定させる. -さらにどちらの操作も,連続する高々$3$ -レベルの節点を同時に施錠するだけでよい.これらのことから,木の大きさや深 -さによらないスループットで,操作系列をパイプライン的に並列処理するこ -とができる. +\subsection{Meta Engine とは}\label{subsection:metaengine} -レスポンスは,${\it update\/}$については,通常のスプレー -木と同等の償却計算量をもつことが証明できる.具体的には, -節点$x$の{\bf 大きさ}$s(x)$を$x$を根とする部分木の節点数と定義し, -{\bf ランク}$r(x)$を$\log_2(s(x))$とする. -そして -% -木の{\bf ポテンシャル}を,すべての節点のランクの和と定義する. -すると,${\it update\/}$の償却時間,つまり回転操作の回数で測った所 -要時間に操作前後のポテンシャルの変化を加えたものは,$n$を木の節点数とし -て,${\rm O}(\log n)$であることを示すことができる. -このことから,十分長い操作系列の平均レスポンスは,最悪でも対数的であるこ -とがわかる. -文献\Cite{ST85}のよう -に,節点に異なる重みをつけて$s$や$r$を定義することにより,より強い性質 -を示すこともできるが,本論文では省く. - -一方,${\it delete\/}$については,文献\Cite{ST85}の解析方法では,対 -数的償却計 -算量を導くことはできない.そのことを示すために,図\ref{figure:delete} -(b)の4回の回転によるポテンシャル変化を考える. - -図\ref{figure:delete}(b)の一番右側 -の木のランク関数を$r'$とする.一番左側の木からのポテンシャルの変化を, -$k$をある正定数として$k(r'(b)-r'(z))$以内に押さえることができることを示すのが, -文献\Cite{ST85}における償却計算量の証明技法の基本であった.しかし, -これらの木に -ついて$s(A)= s(B) = s(C) = h\gg t = s(D) = s(E) = s(F)$ -を仮定すると,ポテンシャル変化が$h/t$に関して${\rm O}(\log -(h/t))$となる.一方$r'(b)-r'(z)$は$h/t$に関して${\rm O}(1)$であるので, -上記の要請を満たす -$k$は存在しないことがわかる.Zippingに先立ってパス短縮化を行なっ -た場合についても,同様のことが示せる. +Federated Linda は、サーバー間に設置された、 Protocol Engine と呼ばれる +プログラムによって、タプルスペースの操作や、他サーバーへのタプルの伝搬などを行っており、 +タプルスペースとは別のプロセスとして、サーバー上に存在していた。しかし、 +別のプロセスであるため、タプルスペースへのアクセスには同一サーバー上であっ +ても、ソケット通信を用いていた。 -しかし,第\ref{section:delete}節の削除操作は, -% -アクセスしたパス上の節点の深さが約半分になり(事前にパス -短縮化を施した場合),それ以外の節点も高々定数レベルしか沈まない -% -という,節点の浮き沈みについてのスプレー木一般の性質は満たしている. -% -では一般に,この二つの性質を満たす自己調整的な木アルゴリズムで,平均レス -ポンスが対数時間で押さえられないような,十分長い操作系列は存在す -るのだろうか? これは未解決であるが,本論文で提案した二操作に -ついては,平均レスポンスは少なくとも${\rm O}(\sqrt n)$ (更新のみならば -${\rm O}(\log n)$)と予想される. +そこで、本研究室では、 Meta Engine と呼ばれるプログラムを提案し実装して +きた。 Meta Engine は、 タプルスペースと同一プロセス上に組み込まれた +Protocol Engine である。(図\ref{fig:fedlinda})すなわち、タプルスペースと +同じメモリ空間にあるため、ソケット通信を用いることなく直接 Linda の API +を使用して、タプルスペースにアクセスすることが出来る。 -その根拠 -として,各節点の削除しやすさの変化を考える. -節点$x$の{\bf 削除困難度}$d(x)$を,$x$からその直前のキー$x_-$をもつ節 -点へ至るパス長($x_-$が存在しない場合や,$x_-$が$x$の子孫で -ない場合は$0$と定める)と直後のキー$x_+$をもつ節に至るパス長の最小値 -と定めると,第\ref{section:delete}節の -${\it delete\/}$は,$d$の大きな節点の消去には時間がかかるも -のの,残った各節点の$d$を高々${\rm O}(1)$ -しか大きくしない.また第\ref{section:update}節の -${\it update\/}$で新たに挿入した節点の$d$ -は$0$であり,${\it update\/}$はすでに存在していた各節点の$d$も高々${\rm -O}(1)$しか大きくしない.(ボトムアップ扁平化における節点の$d$の増加は,定数で -押えることができない.)これらのことから -% -\begin{enumerate} -\item[1.] -新たな節点の$d$の値が$k$まで成長するには,他の節点の$\Omega(k)$ -回の挿入削除が必要 -\end{enumerate} -% -であることがわかる.さらに -% -\begin{enumerate} -\item[2.] -二分木における各節点の$d$の総和は, -木をトラバースしたときに通る枝の延べ本数を上回ることはないから -${\rm O}(n)$ -\end{enumerate} -% -である.1.と2.から, -新たな節点の挿入と,$d$の大きな節点の消去が繰り返されるという最悪の操作 -系列を考えても,操作の平均の手間は${\rm O}(\sqrt n)$であり,実用上の効率 -は更新操作のみの場合とほとんど変わらないと予想される. \section{まとめと今後の課題} -節点の浮き沈みに関する望ましい性質を保ち,かつ計算量の意味で最適なスルー -プットをもつ自 -己調整二分木の並列操作(更新,挿入,削除,併合)アルゴリズムを提案した.節点の -更新や挿入に関して -は対数的償却計算量を持つことが証明できており,さらにアクセスパターンの偏 -りや変化に対する追従性など,スプレー木の持つ強力かつ頑健な性質 -の多くを引き継いでいる.削除の償却計算量のより良い理論的限界を導く(また -はその不存在を示す)ことは今 -後の課題である.また,アルゴリズムの実際的効率,並列分散環境での実装,応 -用の検討も今後の課題である. - {\bf 謝辞}\ -本論文の初期の版について議論していただいたRobert Tarjan氏(Princeton大), -毛受哲氏(NEC),中谷祐介氏(早稲田大)に感謝する. % \begin{adjustvboxheight} % needed only when Appendix follows \begin{thebibliography}{99} -\bibitem{LS86} Lanin, V. and Shasha, D.:A Symmetric Concurrent B-Tree -Algorithm, -Proc.\ 1986 Fall Joint Computer Conference, IEEE, 1986, pp.~380--389. - -\bibitem{ST85} Sleator, D. D. and Tarjan, R. E.:Self-Adjusting Binary Search -Trees, {\it J. ACM}, Vol.~32, No.~3 (1985), pp.~652--686. - -\bibitem{S89} Shapiro E.:The Family of Concurrent Logic Programming Languages. -{\it ACM Computing Surveys}, Vol.~21, No.~3 (1989), pp.~413--510. - -\bibitem{T85} Tarjan, R. E.:Amortized Computational Complexity, {\it -SIAM J.\ Alg.\ Disc.\ Math.}, Vol.~6, No.~2 (1985), pp.~306--318. - -\bibitem{W90} 和田久美子:スプレイ木の並列データ探索, Proc.\ KL1 -Programming Workshop '90, Tokyo, ICOT, 1990, pp.~42--49. +\bibitem{test} test \end{thebibliography} \end{adjustvboxheight} % needed only when Appendix follows \appendix -\section{付録: \LaTeX による論文作成のガイド} - -ここに,以前の \verb|sample.tex| では,論文作成のガイドがあったが, -その内容は \verb|guide.tex| に移動した. \end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/pic/fedlinda.eps Mon Aug 08 17:58:40 2011 +0900 @@ -0,0 +1,1209 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 343.000000 355.000000 +%APL_DSC_Encoding: UTF8 +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 343 355 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +{ld}repeat pop +/SC{ + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd +/cm {cmmtx astore CM concat}bd +/W{clip newpath}bd +/W*{eoclip newpath}bd +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop + true +}{ + pop + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse +{ + { + { + pop pop + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add +dict begin +{def} repeat +pop +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end +}bd +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def +/cp_proc/x_proc ld +/base_charpath +{ + /t_array xs + /t_i 0 def + { + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ +findfont dup length dict copy definefont pop +}bd +L3? dup dup{save exch}if +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def +/setupFunEval +{ + begin + /nRange Range length 2 idiv store + /mulRange + + [ + 0 1 nRange 1 sub + { + 2 mul/nDim2 xd + Range nDim2 get + Range nDim2 1 add get + 1 index sub + + 255 div + exch + }for + ]store + end +}bd +/FunEval +{ + begin + + nRange mul /val xd + + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd + val + add DataSource exch get + mulRange nDim2 get mul + mulRange nDim2 1 add get + add + }for + end +}bd +/max +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd +/sh2 +{ + /Coords load aload pop + 3 index 3 index translate + + 3 -1 roll sub + 3 1 roll exch + sub + 2 copy + dup mul exch dup mul add sqrt + dup + scale + atan + + rotate + + /Function load setupFunEval + + + clippath {pathbbox}stopped {0 0 0 0}if newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop + grestore + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd +/shp +{ + 4 copy + + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd +/calcmaxs +{ + + xmin dup mul ymin dup mul add sqrt + xmax dup mul ymin dup mul add sqrt + xmin dup mul ymax dup mul add sqrt + xmax dup mul ymax dup mul add sqrt + max max max +}bd +/sh3 +{ + /Coords load aload pop + 5 index 5 index translate + 3 -1 roll 6 -1 roll sub + 3 -1 roll 5 -1 roll sub + 2 copy dup mul exch dup mul add sqrt + /dx xs + 2 copy 0 ne exch 0 ne or + { + + exch atan rotate + }{ + pop pop + }ifelse + + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub + /Nsteps xs + setupFunEval + + + + + + dx r2 add r1 lt{ + + 0 + }{ + dx r1 add r2 le + { + 1 + }{ + r1 r2 eq + { + 2 + }{ + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs + clippath {pathbbox}stopped {0 0 0 0}if + newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and + { + 0/Function load FunEval sc + + + + + { + { + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { + + + + + 0 r1 xmin abs r1 add neg r1 shp + } + { + + + r2 r1 gt{ + + 0 r1 + r1 neg r2 r1 sub div dx mul + 0 + shp + }{ + + + + 0 r1 calcmaxs + dup + + r2 add dx mul dx r1 r2 sub sub div + neg + exch 1 index + abs exch sub + shp + }ifelse + } + }sh3tp get exec + }if + }if + + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + + /d0 d0 di add store + /r0 r0 ri add store + }for + pop + + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and + { + Nsteps/Function load FunEval sc + + + + + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + + + xmax abs r1 add r1 dx r1 shp + } + { + + r2 r1 gt{ + + + + calcmaxs dup + + r1 add dx mul dx r2 r1 sub sub div + exch 1 index + exch sub + dx r2 + shp + }{ + + r1 neg r2 r1 sub div dx mul + 0 + dx + r2 + shp + }ifelse + } + } + sh3tp get exec + }if + }if +}bd +/sh +{ + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop + 2 index sub + 3 index + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd +{restore}if not dup{save exch}if + L3?{ + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if +end +setpacking +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 343 355 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: Helvetica +%!FontType1-1.0: Helvetica 1.0000.0.0000 + 14 dict begin/FontName /Helvetica def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /L put + dup 34 /i put + dup 35 /n put + dup 36 /d put + dup 37 /a put + dup 38 /S put + dup 39 /e put + dup 40 /r put + dup 41 /v put + dup 42 /T put + dup 43 /u put + dup 44 /p put + dup 45 /l put + dup 46 /s put + dup 47 /c put + dup 48 /M put + dup 49 /t put + dup 50 /E put + dup 51 /g put + dup 52 /C put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -1947 1 index div -985 2 index div 2961 3 index div 2297 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000036C6670676D000000000000040800000A0C676C79660000000000000E14000012C86865616400000000000020DC0000003868686561000000000000211400000024686D74780000000000002138000000546C6F6361000000000000218C0000002C6D61787000000000000021B8000000207072657000000000000021D8000003CF05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D00820030002A + 002A002A002A002A40292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442DB8002B2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8002C2C2020456944B001602DB8002D2CB8002C2A212DB8002E2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8002F2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800302C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800312C2020456944B0016020 + 20457D691844B001602DB800322CB800312A2DB800332C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800342C4B535845441B2121592DB800352C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800362C2020456944B001602DB800372CB800362A212DB800382C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800392C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8003A2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8003B2C2020456944B001602020457D691844B001602DB8003C2CB8003B2A2DB8003D2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003E2C4B535845441B2121592DB8003F2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800402C2020456944B001602DB800412CB800402A212DB800422C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800432C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800442C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800452C2020456944B001602020457D691844B001602DB800462CB800452A2DB800472C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800482C4B535845441B2121592DB800492C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8004A2C2020456944B001602DB8004B2CB8004A2A212DB8004C2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004D2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004E2C4B20B0032650585158 + B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004F2C2020456944B001602020457D691844B001602DB800502CB8004F2A2DB800512C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800522C4B535845441B2121592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592D00020042000004D005BD00030007003FB800532BB800082FB800092FB8000810B80000D0B800002FB8000910B80003DCB80004DCB8000010B80007DC00BA0007000000562BBA0002000500562B3031331121112711211142048EB8FCE205BDFA43B8044DFBB300000002005AFFDA057105E5001D001E00B1403B1B0597019605031F011F0482018705891305530803861D111115063A1D030C3A15091E021E1E190331023B1031111A20093119191F20A1216A66182B2B4EF44DED4E10F64DEDF4ED12392F003F3FED3FED12392F10ED31304379403A001C172513260E251B260B160932000D1410320112110F10071C0932000500033201010204030A180C32000F120C3200081A06320104010632012B2B2B2B01103C103C2B2B103C103C2B2B2B2B2B2B815D015D080117232E0123220011101233323736373306070621202726111037362123041E013411C221C5B2D9FEF5F1EFDC733D1EC21A92AFFED7FF00AEE5ACBA01472805E5FEDABB8EA6FECFFEC5FEFEFEBFA95991E89DBD9BCD01AC0145D0E20000000200AF000004ED05BD000B000C004E4024071E04040B031E01000209081E0A0B080C020C0C02000669023B091A0E03082500190D0EB8010BB3219589182B2B4EF44DFD3C4E10F64DF4E41112392F003F3F3CFD3C3F3CED12392FFD3130132115211121 + 15211121152101AF042FFC93032BFCD5037CFBC2021F05BDB4FE42AAFE0EAF05BD0000000001009C0000044B05BD000500314013000203021E040508031A070102250500190607B80153B321765E182B2B4EF43C4DFD3C4E10E6003F3C4DFD3C3F31301333112115219CC702E8FC5105BDFAF2AF000100970000061705BD001300CB405944014B03020601090316011903D7010513011C03140B1B0C57015803D401DB03D40BDB0C0A040A040D45028602045102970202290A280D380A380D4702570276020725640D0A0203120301020B0C120306081517171A040405B8019B400D0A1F030B06FD0C0102FD0D1F12B8019BB6130019147670182B4E10F43C4DFDE419F43939F4393918E4FD3C4E10456544E6003F173C3F3C1217394B5279B10D0CB801AAB40201020A0BB801AAB202020387054D2E7AFD047DC487052E7AFD047DC43130005D727101725D71132109012111231134363501230115141615112397011D01A601A3011ABD04FE5DC5FE5A05BE05BDFB2604DAFA4303632DD077FB2904D72D36DD34FC9D000000020060FFD504F605E5002F003000FE405E290F27232626360E3521472662267A0E7724096B08180E172502590E680EAA22030A0E3A2224220A03041C1886142F2F2B1C3A1403043A2B0930020A0E081124221F28303011182517490825281A321F25114900252F193132A0216A89182B2B4EF44DEDF4ED4E10F64DEDF4ED12392F1211393912113939003F3FED3FED12392F10ED111217392EFD335D7131304379404D282E111F0008022602262D2506251A26032C002B002D2E032C002B00052A082B011D131F2B001B15182B011918012D042B0009270B2B01250B012E042B000729042B001E121C2B0119161C2B01002B2B2B2B10102B2B01103C2B2B2B2B103C2B2B2B2B2B2B818181005D0116171633323736353427262F012627263534243332041523262726232206151417161F01161716151404232027263701011E073463FA705CB24B4CA2C7C3518C0112FBE70143BB0F315BDAB09A5A3BD0CE95518CFE9DEBFEEE9B9B03024D01DA7D4E92203EA0783332252D2C355CB7C6FEDFF5763F7394626C3220302F223B67C4F4D28C8BEE040B0000010021000004C905BD00070034401A01061E00070204080917171A00FB0203250504FB0619088C5E182B4E10F44DF43CFD3CF44E456544E6003F3F3C4DFD3C3130011521112311213504C9FE11CAFE1105BDAFFAF2050EAF00000000030052FFDC04470449000F003B003C00DD40382A30010A100B1B0C1C2733481069096A10073908120C09031B320724091D100C1D3B2B022E293BB73B023B322A2512100705081C2722171CB8018A4023171D1F07271D2E0B021D350B3C073C3C1C1407292AA8241A3E1B291C4A0F2738193D3EBC0197002100B9019600182B + 2B4EF44DEDF4ED4E10F64DE4FDC412392F003F3FED3FED3FEDED1239111217395D1112392EED2EED01111239111739313043794028363715220001192501360F2100181E1B21001620142101212200370221001A1D1721011521172101002B2B2B01103C2B2B2B2B818181005D015D2416333237363D010E010F0106070615013637363534262322070607233E01333217161511141633323637150E0123222726270E012322263534363713010E724E5F59962168326D62315301B43E150C837A8D3B210AA805F7A3BD767517250C1E112A2C265D2A160937CE7C95BDBA978ACF5A2C49A691151C060E0D1C2F67016C082C182D5C534C2A53C69B484898FD971C220303850C06422340486AB58895A41301E4000002003BFFE103D0044E001A001B00A7402FA719019818A808AA18034A08119B14030314061D1A070D1D140B1B071B1B1710271201032702111A1D0A2717191C1DB80107B321727D182B2B4EF44DED4E10F63C4DED3939ED12392F003F3FED3FED12392F10ED313043794034001908250C150A26000E1310260112110F1007190A26000500032101010204030B160D26000F120D2600091806260104010621012B2B2B2B01103C103C2B2B103C103C2B2B2B81005D015D001617232E012322070615141633323637330E01232202351000330702D6E317AF10727EAC4A308892708319AF1EF0BBD2FA0112D41C044EB0D76383A86DA0A1DC8977D5C50133E6011A013A0500020038FFDA03ED05C2000B001D00774032370E470E570EA704A91B05250814020F1D1000081D1D07130A021D170B052E132E102911121A1F0B271A191E1F87217242182B2B4EF44DED4E10F63C4DFDE4E4003FED3F3FED3F1139113931304379401A181C090A000101180B2600091C0B260000190226000A1B0826012B2B012B2B818181005D1216333236353426232206150017161711331123350E0123220035341233F692A17DA1A67A88A9018A53303DADA23FAC6FB3FEFAEFDE015FE8D7C9CBC3D0CA0237341E4B021DFA3E956358012DFAEA015700030048FFDA041A0449001C00240025010C40799708991AA71F03050E020F0514150E120F1514400C401408291A014B0BB603C701C603C71BD808D909D61FD823E817E8230BC711C712025C080521240F9A161D243906070716211D1C070A1D160B2507971CA71CB71CD71C0425160F251C05190A0C07110E270F1D27051A27242E072719192627D421A65D182B2B4EF44DFDE44E10F64DEDD4FD391239391112393912392F5D003F3FED3FED12392F3CFD3C10ED1112393130437940460023040503050205010504061F26111012101310141004060C25221B24260020001D26011E1D09170726000B150E26010D0E231A2126011E0521260108180A26000D100A2600002B2B2B2B01103C2B2B103C + 2B2B2B2A2B2A8101715D00715D5D00161716171615211E013332373637330E01070607062322001110003301262726232206070102B4D638361210FCEF0590978D543014B1074F3152794152C8FEEA0118E2011F0B284AAD7CA805012304476B55516C4AA2A3C55D36473B912E501C100123010601020142FE26754682B38A01DC0000000003003DFE3B03E80449001F002D002E00B7404D36144908490958085909880CA91BA81DA927A62BB91B0B4008031622290EC40A221D1F070406291D190A121D0A0F2E072E2E051C032E162E2D29051A300C0E270D3E26271C192F3087217242182B2B4EF44DEDF4ED394E10F64DFDE4F51112392F003F3FED3FED3F3FED10ED1112393931304379402C23281A1E0B1124251026231E262600281A262600110B0E21000F0E0C0D251D222601271B2926000F0C122100002B2B2B01103C103C2B2B2B2B2B818181005D00171617353311140706212226273316171633323736270E0123222411100033002623220706151416333237363501027C5E3335A63C70FEC9ADEC0EB70D273D83CF40260336987DAEFEFB0107BA0144A47FBE4625937CC24F2CFED104423E234387FC32CC76DA9BA548273C9256DD5250F7011D010D012EFEA1C0B25F9AB5BDAF6384022D0000000200840000013B05BD000300070036401C07E50400010006030A0917171A06010229070300190809AA216242182B2B4EF43C4DC4FD3CC44E456544E6003F3F3C3F4DED3130133311231133152384B7B7B7B7042AFBD605BDCC0000000100890000013D05BD0003002940150000030A0517171A0102290003190405AA216242182B2B4EF43C4DFD3C4E456544E6003F3F31301333112389B4B405BDFA43000000020084000003ED04490019001A005E4031B706C706020406140627147606740705140C021418101D05070006180B0A1A071A1A000C29091A1C012E18291900191B1CB80106B3216242182B2B4EF43C4DFDE44E10F64DED12392F003F3F3C3F3FED1139390112393130005D015D1333153E01333217161511231134272623220706070E011511230184AB4CAA68E4502CB71D307E40294A382D1BB401A7042F985E529F57A2FD5102A3623C640D1642357169FDCF04490000020076FE5504250449000E00220074402CA908A717022808201C110E061D15070F060E1D1C0B220E0227181A240A2E102E2129220F1923248721BD5D182B2B4EF43C4DFDE4E44E10F64DED003F3FED3F3FED1139123931304379401C161B00051A260426001B022601051602260101190E260003170626012B2B012B2B2B2B8181005D243635342726232207061514171633013315363736333212111007062322272627112302C6A72546BABB45252546BAFE2EAF36405B7BB6FEB7749A7952303BB479D3D2805CB1BB649A7C57A603B18E49 + 283CFEE9FEFDFEA2965F351E49FDDD00000100890000029204470011004F40262703260D37034704040E0810020E0911090C270805070006110A081A13012E10291100191213B80145B321627E182B2B4EF43C4DFDE44E10E6003F3F4D3FC4FDC411123939011112393130005D1333153E0133321617152E0123220615112389AB15A46B05181D101B108892B4042FB9369B0203BE0302AF72FD980000020042FFD703B6044B002E002F012E408F38099805961299149815982A062824252736214621472447275624572766246726790C790D790E7623742474257426A61EA82C1303000B15052D042E13001A151B171C18152D142E280F0B6908262536250225220D0A042B1318C61C1D1307041D2E9A2B0B2F07090E100207002F212F1A1F18161827173E28260727281A310E1F27103E00272E193031B221A65D182B2B4EF44DEDF4FD394E10F64DFD3910F4FD3911123939392F111239113939003F3FEDED3FEDED111217397131304379404C012D022615251A26210E1F21000926072101032C002100052A0721011D121F21001B14182101200F22210021220E0D08270A21012625090A012D04210006290421001E111C210119161C2101002B2B2B2B103C103C2B103C103C2B012B2B2B2B2B2B2B2B2B81005D5D015D13161716333236353427262F01262726353436333217160723262726232206151417161F011617161514062322262701EF082544A864983D27738F894174DBB9F26B4302AA05263E99666945284E77C24269D9DEEFC70701B701505A3057575B4524161D24222A498198BC8E5A683D32474E40462A19131D2F2C45948FD0D9A002F900010017FFEF0209055A00180052B50D2E0AC00E01B8013F40250416391703060E0A111A17171A0301062900150E150F031F030203FC1619191AFC21677D182B2B4EF44DFD5D39C42F3CFD3C104E456544E6002F3F3F3C4DFD3CED10FDE431301333113315231114171633323637150E012322263511233533A8B6ABAB2615310D1E141F43277E5A9191055AFED593FD4538130B01028E0908816702C593000000020080FFE303DE044900170018005E403AB814C81402091308141913191428067703D707070800050E0A00060D0A051D120B180718180B160D2E0A290C0B1A1A01291619191AD2216242182B2B4EF44DED4E10F63C4DFDE41112392F003F3FED3F3F3C391112393130005D015D0111141716333237363511331123370607062322272635112501381A3083BC4425B4AA0223346793E5532D01AF042FFD39523460A85A9D020EFBD19E3D2A5499528902D81A000001000B000003EA042F00060102402E4201C5010200670068026803670687048805A700A802084700480245044A0586048905C704C80508492873280708B80109B321677E182B2B4B5279B8FF70B401 + 05042004B80183B703036D1202010205B80183401E06066D120000010506040301010502030603000605040A0817171A03AF02BA018400000184B301AF0619194EF4184DFDE0E0FD194E456544E618003F3C3F173C1239011112391239074D2E2B104EE44D072E2B104EE44D2B4B51794025022912030304002912060605010502030603000605040A0817171A020403AF050001AF0619194EF4184DFD3939FD3939194E456544E618003F3C3F173C12390507102B07102B313001715D005D7113090133012301DC011E012BC5FE6CC0FE75042FFC980368FBD1042F0001000000000000032DBC1E5F0F3CF500110800000000005F4D8F0000000000C321F6B6F865FC270B9108F9000000090001000000000000000100000629FE2900000C01F865FCED0B910001000000000000000000000000000000150512004205C7005A055600AF0473009C06AA00970556006004E30021047300520400003B04730038047300480473003D01C7008401C70089047300840473007602AA00890400004202390017047300800400000B0000003400C40108013001BC028802B603800402046E053805E0060E0630068C06FE07440824087408CE0964000100000015006F0009006B0007000200100010005D000007E80A0C00040001B800532BB800492BB8003F2BB800352BB8002B2B4118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F040000010004100000010010020000010002000000 + 01000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166406544B27640764523614459B36242725D456523456023456560234560B089766818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500 + 00>] def + /CharStrings 21 dict dup begin + /.notdef 0 def +/C 1 def +/E 2 def +/L 3 def +/M 4 def +/S 5 def +/T 6 def +/a 7 def +/c 8 def +/d 9 def +/e 10 def +/g 11 def +/i 12 def +/l 13 def +/n 14 def +/p 15 def +/r 16 def +/s 17 def +/t 18 def +/u 19 def +/v 20 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-1947 -985 2961 2297}def + /UniqueID 4375838 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C92633B2598E0B1EDFA3C2732C9D3498122A5E23C1999619F9F2A05B057FF2148EC959C8A2C02A2A019957BFFE16C5880F5564968C1625987940DE6BD70F90A24E5C1472AC5B757411251CCBEBE4DFC7671C4AF15535CAEA09C978A0642FCD0F828DF628173790B6892630610745D40E036077EC46B4942F72556A8EF85D6803A9B1EB4504FAE1DDFEDD983ABE4A9C340191DB1B945E5EE1B41A5F9D363707F1BA87A0F478666AD85CAB6BDC877A23CE1BC531732AC876C1BB4A16C45991CC538715A58E094D55DB3E85EB2F5DEE5EB9401141ED6FA35D43F5B166AD1456D341C0D0BCA08E8A47350D97BF3B5C65CDE328C06D4A100CEDED86316E14E2F49E93965D61327D4EFBFC43F0CDC9C35660C90406363615A85865E6C2FB9BF22598589228B05186DE9C92B68BA963367CB6C12D6177FBB7D194FA929BFBC5EF168553A3F5A428BAD6152CF1A425CD0F666BC090C1A896FB049AFF9ED34E9FFB1337447EE50945EECD5178A3B9E463C1311282033B5ECD80B6289CA5CACA23D9ADB5DC62975AFBD896AD5BA3BBAD606900EF187845CF5CBB21436F3CEA61AC85DF3C04836F84F6A1BB26C77B4FD0B758945215217D2A79A3DED3D0AA3CA9A801FD29498473A745C123BB23AE35AEC79563CDFA95A4B18BF0A5ECF6E253B71A0019D96A697DE391361C52F5D2BF73BBB8ABB80AE031DCADB5ABCBCDF0076811B3E09ADA681587BA77334BB052A6C9BC2467F294495212CBECA3E2FE1966EBA3A4429494F4A + 38228B8F2CEF4852E9D9E3869DE8F9920C091A1657BE64F63C97D491185F2DBF74681EDD2D0C5F6FC0D8EFB944EDC8D1F3628516A029E0D05479B9BE678E741D1335CCC2177D9769579EC9D9F5661275F075864862413C0927F7EA40A3452A33A2C3A1F2E5B92554756FDA67C88C4F0A901EC99AAB0C2FCA8433F0E902B978AF49C34383AEF10ECEE954F3A08D96FF4924FBEB1F7307F1E8637B94A837F87981909FE147AF66032402C28E4F7B7D797875B054D2E122FF5D64EBB0F3964A1A81589012182AC00C24F39DC49DEF5E5419CC79E420FCF55A823B697B2F71C61B72AF5F3A3891802A7F5293B2D79F7232ADECB3515173485A77A8EA170206B598DCDB0171483B4191B5C901F6E00221B48543AEA49E4E4CF8E3520469978367595DEC9C35180432F0767372CDAE410A606F9491E73D2A21C35208A4C55D4F3F7FC001891129E79EF8E06CD014C5F09672792AF822FC18D63F7C349CC6FBA49DDF94F1C890EE48DF24118AEEF89A525BF541AFFE397E6582C8F13D2095745C02BA7A40066AC68C6BC2AF537C0338A0EE6DAC49167A819311730B6D554B9AA1CEA737ACCA728C9897D35BD062CD83BDCE7CC14AE2FAB8544ED5D63BEB227A523F1382CF31C16C73DC36A1C54A1AD3DCDF400F12BFEDD8F33A28B375D32C09ADBF9B87410116C833ACDDC5A88E5109E93695EAF63E833A273B539A2172987623C5D454C641A3795F4C152DDD1636C6F6BD6DD8C3EC18096098579FB8E7D25B43BED59422270A283BA784A28CB6D4D40F80D45C03A8B886345BA77D3DDEA4F0BEC7A0D53400545E784770F58CBFD61EA72DB5391438DA2E1487DDED6DD3496AB0317F9C24D946E2AB0D3F67A2E396ED3A95C68E937974190BA9B79FBCB99793A9B6F6FC303D280DF89B129CA39AF18FFEC37A31514B0237A2CB78B96939C231C87C73893D8C059EF4D79F98922BAA8AE4485D56F5FD29509A951F0CD23B578C97FABD733386CFBB0C0A8787DBC7C7CDA6787DA59495DFA1BB1A003755E5CE4DF21E5AAC4FD7DE86A03100879DB0B44249783A3CE464600E6775AA6697C0CA08C2879650416DD7FD0B5137FA38B3DB444142801BBC382281AF1691DEA40928686DC82DF8AE7A54063D7C24AB0BDA696ED923042B5615A0CB5490F38BF48B7613C559DA9C96F537E11EC36DCC921BE3AAD313FDEEFF682C48C02EC5F11FEB797480591A9CDEBCB9E8F0071DCB7C61CB4EE4B24F171E001488BABDF1D47D87DEFECD6EDDDC2FDFA7A2D2800C6C65093A8BF534B3BBC66820490EE304FEEC1B64DD6624D0E569186A4BB46C4A34B14D09D6036F3135D7A6088CF7FF87AAC6A482DE253018604AC819C9261A337B942A26B4E84AABF304CE604C399513B53EFC012269B7DA188BD19B613904305FFB725FF2F46954BC1DE5FC08E457E011C0CD1E244FB7D211 + 83B4A89281BDB5956A0059848DCB271F6FC14D8EB0673EC20C27D3D4B50F01BC7F618AAB46FD5E8BEA16B2E552486E37440581652CE2D136A4534325D818DA48A25D0936BE0D2E8AA2AB7BE7C26B5C1E314289BF387604CAE7F95309012EE9300DE6D64C87DBD30D41AD2E4992CEC9E3073409B1A9FEF09A72F74A0E243CEC3D08F2C73BA4DE2778E3D01CFC3FE9D6AC3871CE53B6E2C9CFD544E837A3153B9CA54CAB8EC0D864C8FD000815D39D5BF50F2486C57511D274C4D9B32D784013504003EF6611202E6E570B0B49A45E98F0A4EFF07E932B50290CF89978CB9C979D82AFB4903F5F8B050964D34BFEE5B8F574D20A4B0FC6821D8B1CE00BFBAD67B84AF451DA4478629C035ABC59F9D95CD93B68D024ACB077F96AFB5642D198B41669E1B607B45E9B5F677F4D6C6865F19BC2ECC2BC6C6E607244CAF9D399653B5F65E5AC34F65A76306F20A0CEB33CE4566EDB1065BE1275676C3EAEC027EAE66A81723BB6DFFB0FF8BBC2CD1353BC758D8DD782D3E1EAF79BB4446739B59223893360FDFC30D2263D906127611556259C56CB2EB1DF95A22377364A53274443FA9E126C7D117F659DBE0AB234FEEBD2D556E8FFB82503B22433DAB1BC4DF9437494EBD4C888017CCC4A3BA5CA711EF3899C3F303ED5B7C7CB20E195E6B330D93DDC0165224FDA12BCD51FBD88193A813E6598079E4F336A87B769BDA9E6DE28FBB99484CDD6B45614C373722E802F3BF482852D3BBFAEE1C9B60FEF0D81D67A09569FC978968D3200F59AD0AB63CF3DCAC008921D3B463637051E4AFB439222C872B73150C34DC43DC6B0534B74DAB3D7270E37B776C5CDB77866B2F73D05DF8C1AB662D8BAB87A2CDA7F40D6CB9B040742CFC49FFEC9A861DB7C45E7ABCF2C9D0006D1917DDCF544CCFD02E03610A6FE220D3F09316E714C41078A08D71402294806A49C72A4A56321DDD514DAB4E539C8AA7CDB844137C30BC1778ADEC7257AC0E7318692D0F3DA1C0F75E1B64F81604828B66B53188A9FAEA646E8861815A63400DAAFA31B4AD2315C6DFB9D370287B116D1ABD090BBEFEF03C96695732F019EF79F10121CDFA9E08A80A87F0C83A5DBFCFD4D9F193C1A3F9249F1A9F2FF593FA64AAD350E0178D44E6D7C2ED3BD459EDCFA76D3AE6DC81F59CFA54686EF6B9EEB1CDE279B3042AFE065C6BAFEBDC60DB4472D645935740A5B73C84A22DD6A2A8A32E501C03C2ED34F76E328AD12D5469352C097C428B406B7AC0FDBB09545D5317C8BE46ABC3F5A8EF9AA49CA988C8F405EFA630EB311D58FFC1F7A7019932BBD4D34901521EC65DE323ADA2B29D5ECD98DE014D17543D05FED322D175F9F67F9A971E2B567C50EDDECEB616F182FEFAB25D104747650389A954A01C658D2B7EBAB60BD04A9481D0640D6A478270D2FD65805D9CF70820BBDCD25A8342F37 + 13DF4B8DDDE10AA6C99BA2FC7DEB03AA4914DCDC3900A1CC3DD753952E899350DFEAEC6FFFCC42CC477D66FEFBDB28D50E91DC9E72BA93B1FF021CEFA9CB60426311C4DA45ADB6778281DCC3E7B2A6C0A804605BD8208E50EFD863ACE21AC2BD09A1A90F3117EFA7C220F08DE0FD13D5FF64806B5AED9D38565451DA0D860802C2C1EFBBB52EF3CE6EC31C614C967BBE2418EF613BD225CAC0DBB361C037E4467F87063D3D9348D290C7F805A3A47B61C0071D233DA3CAA5FB6EA7D75C5432A62CB879F3CCFD0783F57E7E78778ADE17674302007CEE3192EAEDA94E2A406C902BB62E98ADBF22498826288D1E66E82A2096723367B831AA38BFF6E7B1E8CC48DD70D3D59CBD5C578122F801994D8BCA1B2094D2792E5460FC248BCD051F823635AFAB3942D926EE2F6B2455F71EFC6B683A764DED939A856A025CC2AD75FEEA9554E36686E97467C66C17E4213CEB17B14A0F3B51B50D89729E566A899A43B3BC3EAD + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + +%RBIEndFontSubset +/Helvetica cguidfix +/F1.1/Helvetica renmfont +[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeA { { 1.8008 exp } bind exec} bind +def +/MatrixA [ 0.9642 1.0000 0.8249 ] def +/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def +/DecodeLMN [ { 0.9857 mul} bind { 1.0000 mul} bind { 1.3202 mul} bind ] def +end ] /Cs1 exch/ColorSpace dr pop +[ /CIEBasedABC 4 dict dup begin +/WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeABC [ { 1.8008 exp } bind { 1.8008 exp } bind { 1.8008 exp } bind ] def +/MatrixABC [ 0.4294 0.2332 0.0202 0.3278 0.6737 0.1105 0.1933 0.0938 0.9580 ] def +/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def +end ] /Cs2 exch/ColorSpace dr pop +%%EndPageSetup +/Cs1 SC +1 sc +q +0 0 343 355 rc +0 355 m +343 355 l +343 0 l +0 0 l +h +f +0.60000002 i +/Cs2 SC +1 1 1 sc +58.999992 186 m +140.21008 186 l +140.21008 75.5 l +58.999992 75.5 l +h +58.999992 186 m +f +1 J +1 j +0 0 0 sc +1 0 0 -1 -35 565 cm +93.999992 379 m +175.21008 379 l +175.21008 489.5 l +93.999992 489.5 l +h +93.999992 379 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 99.605042 130.75 cm +/F1.1[ 12 0 0 -12 0 0]sf +-32.352539 46 m +(!"#$%&'\(\)'\()[ 6.673828 2.666016 6.673828 6.673828 6.673828 8.003906 6.673828 3.996094 6.000000 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +81.651535 150.5 m +81.651962 131.8949 l +63.69931 131.8949 l +63.69931 100 l +135.5108 100 l +135.5108 131.89465 l +118.23914 131.89465 l +118.23935 150.5 l +h +81.651535 150.5 m +f +0 0 0 sc +1 0 0 -1 -35 565 cm +116.65154 414.5 m +116.65196 433.1051 l +98.69931 433.1051 l +98.69931 465 l +170.5108 465 l +170.5108 433.10535 l +153.23914 433.10535 l +153.23935 414.5 l +h +116.65154 414.5 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 99.605057 125.25 cm +-30.705551 13.75 m +(*)s +-23.814926 13.75 m +(+,-'.,%/')[ 6.673828 6.673828 2.666016 6.673828 6.000000 6.673828 6.673828 6.000000 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +81.651558 150.49997 m +81.652206 131.89563 l +63.699303 131.89563 l +63.699303 180.99921 l +135.51089 181 l +135.51047 131.89474 l +118.23914 131.89465 l +118.239 150.49997 l +h +81.651558 150.49997 m +f +0 0 0 sc +1 0 0 -1 -35 565 cm +116.65156 414.50003 m +116.65221 433.10437 l +98.699303 433.10437 l +98.699303 384.00079 l +170.51089 384 l +170.51047 433.10526 l +153.23914 433.10535 l +153.239 414.50003 l +h +116.65156 414.50003 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 99.605103 156.44736 cm +-31.427277 0.44734955 m +(0'1%2#3"#')[ 9.996094 6.673828 3.333984 6.673828 8.003906 6.673828 6.673828 2.666016 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +188 290 m +269.21008 290 l +269.21008 179.5 l +188 179.5 l +h +188 290 m +f +0 0 0 sc +1 0 0 -1 -35 565 cm +223 275 m +304.21008 275 l +304.21008 385.5 l +223 385.5 l +h +223 275 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 228.60504 234.75 cm +-32.352539 46 m +(!"#$%&'\(\)'\()[ 6.673828 2.666016 6.673828 6.673828 6.673828 8.003906 6.673828 3.996094 6.000000 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +210.65125 254.5 m +210.65167 235.8949 l +192.69902 235.8949 l +192.69902 204 l +264.51053 204 l +264.51053 235.89465 l +247.23883 235.89465 l +247.23907 254.5 l +h +210.65125 254.5 m +f +0 0 0 sc +1 0 0 -1 -35 565 cm +245.65125 310.5 m +245.65167 329.1051 l +227.69902 329.1051 l +227.69902 361 l +299.51053 361 l +299.51053 329.10535 l +282.23883 329.10535 l +282.23907 310.5 l +h +245.65125 310.5 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 228.60477 229.25 cm +-30.705566 13.75 m +(*)s +-23.814941 13.75 m +(+,-'.,%/')[ 6.673828 6.673828 2.666016 6.673828 6.000000 6.673828 6.673828 6.000000 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +210.65125 254.49997 m +210.6519 235.89563 l +192.69901 235.89563 l +192.69901 284.99921 l +264.51059 285 l +264.51016 235.89474 l +247.23883 235.89465 l +247.23868 254.49997 l +h +210.65125 254.49997 m +f +0 0 0 sc +1 0 0 -1 -35 565 cm +245.65125 310.50003 m +245.6519 329.10437 l +227.69901 329.10437 l +227.69901 280.00079 l +299.51059 280 l +299.51016 329.10526 l +282.23883 329.10535 l +282.23868 310.50003 l +h +245.65125 310.50003 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 228.6048 260.44736 cm +-31.427277 0.44734955 m +(0'1%2#3"#')[ 9.996094 6.673828 3.333984 6.673828 8.003906 6.673828 6.673828 2.666016 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +48.5 344.5 m +129.7101 344.5 l +129.7101 234 l +48.5 234 l +h +48.5 344.5 m +f +0 0 0 sc +1 0 0 -1 -35 565 cm +83.5 220.5 m +164.7101 220.5 l +164.7101 331 l +83.5 331 l +h +83.5 220.5 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 89.105049 289.25 cm +-32.352539 46 m +(!"#$%&'\(\)'\()[ 6.673828 2.666016 6.673828 6.673828 6.673828 8.003906 6.673828 3.996094 6.000000 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +71.15123 309 m +71.151657 290.3949 l +53.199005 290.3949 l +53.199005 258.5 l +125.0105 258.5 l +125.0105 290.39465 l +107.73883 290.39465 l +107.73904 309 l +h +71.15123 309 m +f +0 0 0 sc +1 0 0 -1 -35 565 cm +106.15123 256 m +106.15166 274.6051 l +88.199005 274.6051 l +88.199005 306.5 l +160.0105 306.5 l +160.0105 274.60535 l +142.73883 274.60535 l +142.73904 256 l +h +106.15123 256 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 89.104752 283.75 cm +-30.705559 13.75 m +(*)s +-23.814934 13.75 m +(+,-'.,%/')[ 6.673828 6.673828 2.666016 6.673828 6.000000 6.673828 6.673828 6.000000 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +71.151253 308.99997 m +71.151901 290.39563 l +53.198997 290.39563 l +53.198997 339.49921 l +125.01059 339.5 l +125.01016 290.39474 l +107.73883 290.39465 l +107.73869 308.99997 l +h +71.151253 308.99997 m +f +0 0 0 sc +1 0 0 -1 -35 565 cm +106.15125 256.00003 m +106.1519 274.60437 l +88.198997 274.60437 l +88.198997 225.50079 l +160.01059 225.5 l +160.01016 274.60526 l +142.73883 274.60535 l +142.73869 256.00003 l +h +106.15125 256.00003 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 89.104797 314.94736 cm +-31.427284 0.44734955 m +(0'1%2#3"#')[ 9.996094 6.673828 3.333984 6.673828 8.003906 6.673828 6.673828 2.666016 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +0 0 0 sc +1 0 0 -1 -35 565 cm +165.17583 291.79556 m +222.53429 314.20444 l +S +130.9119 378.5011 m +127.79819 331.4989 l +S +222.61075 363.29965 m +175.59933 401.20035 l +S +1 1 1 sc +CM +121.77118 36.533386 m +132.35641 30.577881 132.35641 20.922119 121.77118 14.966614 c +111.186 9.0111084 94.024078 9.0111084 83.438896 14.966614 c +72.853668 20.922119 72.853668 30.577881 83.438896 36.533386 c +94.024078 42.488892 111.186 42.488892 121.77118 36.533386 c +f +0 0 0 sc +1 0 0 -1 -35 565 cm +156.77118 528.46661 m +167.35641 534.42212 167.35641 544.07788 156.77118 550.03339 c +146.186 555.98889 129.02408 555.98889 118.4389 550.03339 c +107.85367 544.07788 107.85367 534.42212 118.4389 528.46661 c +129.02408 522.51111 146.186 522.51111 156.77118 528.46661 c +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 102.60504 25.75 cm +-15.339828 4 m +(4-"'#1)[ 8.666016 2.666016 2.666016 6.673828 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +192.27118 43.033386 m +202.85641 37.077881 202.85641 27.422119 192.27118 21.466614 c +181.686 15.511108 164.52408 15.511108 153.9389 21.466614 c +143.35367 27.422119 143.35367 37.077881 153.9389 43.033386 c +164.52408 48.988892 181.686 48.988892 192.27118 43.033386 c +f +0 0 0 sc +1 0 0 -1 -35 565 cm +227.27118 521.96661 m +237.85641 527.92212 237.85641 537.57788 227.27118 543.53339 c +216.686 549.48889 199.52408 549.48889 188.9389 543.53339 c +178.35367 537.57788 178.35367 527.92212 188.9389 521.96661 c +199.52408 516.01111 216.686 516.01111 227.27118 521.96661 c +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 173.10504 32.25 cm +-15.339844 4 m +(4-"'#1)[ 8.666016 2.666016 2.666016 6.673828 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +231.27118 148.53336 m +241.85641 142.57788 241.85641 132.92212 231.27118 126.96664 c +220.686 121.01111 203.52408 121.01111 192.9389 126.96664 c +182.35367 132.92212 182.35367 142.57788 192.9389 148.53336 c +203.52408 154.48889 220.686 154.48889 231.27118 148.53336 c +f +0 0 0 sc +1 0 0 -1 -35 565 cm +266.27118 416.46664 m +276.85641 422.42212 276.85641 432.07788 266.27118 438.03336 c +255.686 443.98889 238.52408 443.98889 227.9389 438.03336 c +217.35367 432.07788 217.35367 422.42212 227.9389 416.46664 c +238.52408 410.51111 255.686 410.51111 266.27118 416.46664 c +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 212.10504 137.75 cm +-15.339844 4 m +(4-"'#1)[ 8.666016 2.666016 2.666016 6.673828 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +323.77118 164.53336 m +334.35641 158.57788 334.35641 148.92212 323.77118 142.96664 c +313.186 137.01111 296.02408 137.01111 285.4389 142.96664 c +274.85367 148.92212 274.85367 158.57788 285.4389 164.53336 c +296.02408 170.48889 313.186 170.48889 323.77118 164.53336 c +f +0 0 0 sc +1 0 0 -1 -35 565 cm +358.77118 400.46664 m +369.35641 406.42212 369.35641 416.07788 358.77118 422.03336 c +348.186 427.98889 331.02408 427.98889 320.4389 422.03336 c +309.85367 416.07788 309.85367 406.42212 320.4389 400.46664 c +331.02408 394.51111 348.186 394.51111 358.77118 400.46664 c +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 304.60504 153.75 cm +-15.339813 4 m +(4-"'#1)[ 8.666016 2.666016 2.666016 6.673828 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +57.271194 45.533386 m +67.856422 39.577881 67.856422 29.922119 57.271194 23.966614 c +46.68602 18.011108 29.524078 18.011108 18.938904 23.966614 c +8.3536758 29.922119 8.3536758 39.577881 18.938904 45.533386 c +29.524078 51.488892 46.68602 51.488892 57.271194 45.533386 c +f +0 0 0 sc +1 0 0 -1 -35 565 cm +92.271194 519.46661 m +102.85642 525.42212 102.85642 535.07788 92.271194 541.03339 c +81.68602 546.98889 64.524078 546.98889 53.938904 541.03339 c +43.353676 535.07788 43.353676 525.42212 53.938904 519.46661 c +64.524078 513.51111 81.68602 513.51111 92.271194 519.46661 c +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 38.105049 34.75 cm +-15.339844 4 m +(4-"'#1)[ 8.666016 2.666016 2.666016 6.673828 6.673828 0.000000 ] xS +0.60000002 i +/Cs2 SC +0 0 0 sc +1 0 0 -1 -35 565 cm +73.105049 515 m +93.697044 487.96252 l +S +137.60504 524 m +136.46855 489.99976 l +S +208.10504 517.5 m +175.541 480.61624 l +S +247.10504 412 m +252.35475 385.99011 l +S +339.60504 396 m +304.58826 365.70587 l +S +ep +end +%%Trailer +%%EOF