From: couturie Date: Sat, 1 Dec 2012 08:13:15 +0000 (+0100) Subject: ch8 X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/book_gpu.git/commitdiff_plain/ab6faec96e0c06da1a3dc2eb8eeb3cdfc1a4528f?ds=inline ch8 --- diff --git a/BookGPU/BookGPU.tex b/BookGPU/BookGPU.tex index a06c9c9..e2a1c03 100755 --- a/BookGPU/BookGPU.tex +++ b/BookGPU/BookGPU.tex @@ -13,6 +13,11 @@ \usepackage[sectionbib]{bibunits} \usepackage{multicol} \usepackage{cite} +\usepackage{algorithm} +\usepackage{algorithmicx} +\usepackage[lined,boxed,commentsnumbered]{algorithm2e} +\usepackage{epstopdf} + \frenchspacing \tolerance=5000 @@ -106,6 +111,7 @@ \part{This is a Part} \include{Chapters/chapter1/ch1} \include{Chapters/chapter2/ch2} +\include{Chapters/chapter8/ch8} \include{Chapters/chapter11/ch11} \include{Chapters/chapter14/ch14} diff --git a/BookGPU/Chapters/chapter14/ch14.tex b/BookGPU/Chapters/chapter14/ch14.tex index 38f7f6f..916717d 100755 --- a/BookGPU/Chapters/chapter14/ch14.tex +++ b/BookGPU/Chapters/chapter14/ch14.tex @@ -1161,8 +1161,6 @@ dispersions, -% that's all folks -\end{document} diff --git a/BookGPU/Chapters/chapter8/biblio8.bib b/BookGPU/Chapters/chapter8/biblio8.bib new file mode 100644 index 0000000..78424f2 --- /dev/null +++ b/BookGPU/Chapters/chapter8/biblio8.bib @@ -0,0 +1,158 @@ +@ARTICLE{ch8:Allen_1997, + author = "R. Allen and L. Cinque and S. Tanimoto and L. Shapiro and D. Yasuda.", + title = "A parallel algorithm for graph matching and its MasPar implementation", + journal = "IEEE Transactions on Parallel and Distributed Systems", + volume = "8", + year = "1997" + } + +@InProceedings{ch8:Carneiro_2011, + author = {T. Carneiro and A. Einstein Muritibab and M. Negreirosc and G. Augusto Lima de Campos}, + title = {A New Parallel Schema for Branch-and-Bound Algorithms Using GPGPU}, + booktitle = {23rd International Symposium on Computer Architecture and High Performance Computing (SBAC-PAD)}, + year = {2011} +} + +@ARTICLE{ch8:Casadoa_2008, + author = "L.G. Casadoa and J.A. Martíneza and I. Garcíaa and E.M.T. Hendrixb.", + title = "Branch-and-Bound interval global optimization on shared memory multiprocessors", + journal = "Optimization Methods and Software", + volume = "23, No.5", + pages = "689-701", + year = "2008" + } + +@InProceedings{ch8:Fung, + author = {W. Fung and I. Sham and G. Yuan and T. Aamodt}, + title = {Dynamic warp formation and scheduling for efficient gpu control flow}, + booktitle = {{In MICRO '07: Proceedings of the 40th Annual IEEE/ACM International Symposium on Micro-architecture}}, + year = {2007}, + pages = {407-420}, + publisher = {Washington, DC, USA} +} + +@Article{ch8:Garey_1976, + author = {M.R. Garey and D.S. Johnson and R. Sethi}, + title = {{The complexity of flow-shop and job-shop scheduling}}, + journal = {Mathematics of Operations Research}, + year = {1976}, + volume = {1}, + number = {}, + pages = {117--129} +} + +@Article{ch8:Gendron_1994, + author = {B. Gendron and T.G. Crainic}, + title = {Parallel {B}ranch and {B}ound {A}lgorithms: {S}urvey and {S}ynthesis}, + journal = {Operations Research}, + year = {1994}, + volume = {42}, + number = {}, + pages = {1042--1066} +} + +@InProceedings{ch8:Han, + author = {T. Han and T.S. Abdelrahman}, + title = {Reducing branch divergence in GPU programs}, + booktitle = {{In Proceedings of the Fourth Workshop on General Purpose Processing on Graphics Processing Units (GPGPU-4), ACM}}, + year = {2011}, + publisher = {New York, USA} +} + +@Article{ch8:Johnson_1954, + author = {S.M. Johnson}, + title = {{Optimal two and three-stage production schedules with setup times included}}, + journal = {Naval Research Logistis Quarterly}, + year = {1954}, + volume = {1}, + number = {}, + pages = {61--68} +} + +@ARTICLE{ch8:Kurzak_2010, + author = "J. Kurzak and D. A. Bader and J. Dongarra.", + title = "Scientific Computing with Multicore and Accelerators", + journal = "Chapman \& Hall / CRC Press", + year = "2010" + } + +@Article{ch8:Lenstra_1978, + author = {J.K. Lenstra and B.J. Lageweg and A.H.G. Rinnooy Kan}, + title = {{A General bounding scheme for the permutation flow-shop problem}}, + journal = {Operations Research}, + year = {1978}, + volume = {26}, + number = {1}, + pages = {53--67} +} + +@MISC{ch8:MelabHDR_2005, +AUTHOR = "N. Melab", +TITLE = "Contributions \`a la r\'esolution de probl\`emes d'optimisation combinatoire sur grilles de calcul", +HOWPUBLISHED = "LIFL, USTL", +MONTH = "Novembre", +year = "2005", +NOTE = "Th\`ese HDR" +} + +@ARTICLE{ch8:Taillard_1993, + AUTHOR ="E. Taillard", + TITLE ="Benchmarks for basic scheduling problems", + JOURNAL ="Journal of Operational Research", + YEAR ="1993", + VOLUME ="64", + NUMBER ="", + PAGES ="278--285", + MONTH ="", + NOTE ="" +} + +@ARTICLE{ch8:JRJackson_1956, + AUTHOR ="J.R.Jackson", + TITLE ="An Extension of Johnson's results on Job-Lot Scheduling", + JOURNAL ="Naval Research Logistis Quarterly", + YEAR ="1956", + NOTE ="3:3" +} + +@ARTICLE{ch8:LGMitten_1959, + AUTHOR ="L.G.Mitten", + TITLE ="Sequencing n jobs on two machines with arbitrary time lags", + JOURNAL ="Management Science", + YEAR ="1959" +} + +@InProceedings{ch8:Mezmaz_2007, + author = {M. Mezmaz and N. Melab and E-G. Talbi.}, + title = {A grid-enabled branch and bound algorithm for solving challenging combinatorial optimization problems}, + booktitle = {{In Proc. of 21th IEEE Intl. Parallel and Distributed Processing Symp. (IPDPS)}}, + year = {2007}, + month = {March}, + publisher = {Long Beach, California} +} + +@ARTICLE{ch8:Quinn_1990, + author = "M. J. Quinn.", + title = "Analysis and implementation of branch-and-bound algorithms on a hypercube multicomputer", + journal = "IEEE transactions on computers", + volume = "39, No3", + pages = "384-387", + year = "1990" + } + +@InProceedings{ch8:Zhang, + author = {E.Z. Zhang and Y. Jiang and Z. Guo and X. Shen}, + title = {Streamlining GPU applications on the fly: thread divergence elimination through runtime thread-data remapping}, + booktitle = {{In Proceedings of the 24th ACM International Conference on Supercomputing (ICS'10), ACM.}}, + year = {2010}, + pages = {115-126}, + publisher = {New York, NY, USA} +} + +@misc{ch8:cuda, + author = {{NVIDIA Corporation}}, + keywords = {CUDA}, + note = {Version 4.0}, + title = {{NVIDIA CUDA C} Programming Guide}, + year = 2011 +} diff --git a/BookGPU/Chapters/chapter8/ch8.tex b/BookGPU/Chapters/chapter8/ch8.tex new file mode 100644 index 0000000..a4aaac3 --- /dev/null +++ b/BookGPU/Chapters/chapter8/ch8.tex @@ -0,0 +1,862 @@ + +\chapterauthor{Imen Chakroun}{Universit\'e Lille 1 CNRS/LIFL, INRIA Lille Nord Europe, Cit\'e scientifique - 59655, Villeneuve d'Ascq cedex, France\\} +\chapterauthor{Nouredine Melab}{Universit\'e Lille 1 CNRS/LIFL, INRIA Lille Nord Europe, Cit\'e scientifique - 59655, Villeneuve d'Ascq cedex, France\\} + +\chapter{GPU-accelerated Tree-based Exact Optimization Methods} + +\section{Introduction} +\label{ch8:introduction} + +In practice, a wide range of problems can be modeled as NP-hard combinatorial optimization problems (COPs). Those problems consist in choosing the best combination out of a large finite set of possible combinations and are known to be large in size and difficult to solve to optimality. One of the most popular methods for solving exactly a COP (finding a solution having the optimal cost), is the Branch-and-Bound (B\&B) algorithm. This algorithm is based on an implicit enumeration of all the feasible solutions of the tackled problem. Enumerating the solutions of a problem consists in building a dynamically generated search tree whose nodes are subsets of solutions of the considered problem. The construction of such tree and its exploration is performed using four operators: branching, bounding, selection and pruning. Due to the exponentially increasing number of potential solutions, the B\&B algorithm explores only promising nodes of the search tree using an estimated optimal solution called ``lower bound'' of the associated sub-problem. + +\vspace{0.3cm} + +Although this bounding mechanism allows to considerably reduce the exploration time, often only small or moderately-sized instances of COPs can be practically solved. For this reason, over the last decades, parallel computing has been revealed as an attractive way to deal with larger instances of COPs. However, while many contributions have been proposed for parallel B\&B methods using Massively Parallel Processors \cite{ch8:Allen_1997}, Networks or Clusters of Workstations \cite{ch8:Quinn_1990} and SMP machines \cite{ch8:Casadoa_2008}, very few contributions have been proposed for redesigning B\&B algorithms on Graphical Processing Units (GPUs) \cite{ch8:Carneiro_2011}. For years, the use of GPU accelerators was limited to graphics and video applications. Driven by the demand for high-definition 3D graphics on personal computers, GPUs have evolved into a highly parallel, multi-threaded and many-core environment. Their utilization has recently been extended to other application domains such as scientific computing \cite{ch8:Kurzak_2010}. + +\vspace{0.3cm} + +In this work, we rethink the design and implementation of irregular tree-based algorithms such as B\&B algorithm on top of GPUs. During the execution of the B\&B algorithm, the number of new generated nodes and the number of not yet explored but promising nodes are variable and depend on the level of the tree being explored and on the best solution found so far. Therefore, due to such unstructured and unpredictable nature of its search tree, designing efficient B\&B on top of GPUs is not straightforward. We investigate two different approaches for designing GPU-based B\&B starting from the parallel models for B\&B identified in \cite{ch8:MelabHDR_2005}. The first one is based on the ``parallel tree exploration'' paradigm. This approach consists in exploring in parallel different sub-spaces of the tree. The second approach is based on the ``parallel evaluation of bounds'' approach. The two approaches have been applied to the permutation \index{Flowshop Scheduling Problem} (FSP)(see Section~\ref{ch8:BB-FSP}) which is an NP-hard combinatorial optimization problem. The lower bound function used in this work for FSP is the one proposed in~\cite{ch8:Johnson_1954} for two machines and generalized in~\cite{ch8:Lenstra_1978} to more than two machines. + +\vspace{0.3cm} + +When rethinking those two parallel model for GPU's architectures, our main focus was on the lower bound function. Indeed, preliminary experiments we carried out on some Taillard's problem instances \cite{ch8:Taillard_1993} show that computing the lower bounds takes on average between 98\% and 99\% of the total execution time of the B\&B. The GPU-based lower bound's implementation raises mainly two challenges. On the one hand, having in mind that the execution model of GPUs is SIMD, irregular computations (containing loops and conditional instructions) contained in the lower bound function may lead to a very challenging issue: the thread or branch divergence. This problem drops down the performance and arises when threads of a same warp (the smallest executable unit of parallelism on the GPU) execute different data-dependent instructions. On the other hand, the lower bound computation usually uses large in size and frequently accessed data structures. Since GPU is a many-core co-processor device that provides a hierarchy of memories having different sizes and access latencies, the placement and sharing of these data sets become challenging. + +\vspace{0.3cm} + +The scope of this chapter is to design parallel B\&B algorithms on GPU accelerators to allow highly efficient solving of permutation-based COPs. To do so, our contributions consist in: (1) rethinking two approaches for parallel B\&B on top of GPUs, discussing the performances of each and identifying which best suits the GPU accelerators. (2) proposing a new approach for thread/branch divergence reduction through a thorough analysis of the different loops and conditional instructions of the bounding function. (2) defining an optimal mapping of the data structures of the bounding function on the hierarchy of memories provided in the GPU device through a careful analysis of both the data structures (size and access frequency) and the GPU memories (size and access latency). + +\vspace{0.3cm} + +The chapter is organized in seven main sections. Section \ref{ch8:BB} presents the B\&B algorithm. Section \ref{ch8:Parallel-BB} introduces the different models used to parallelize B\&B algorithms. Section \ref{ch8:BB-FSP} briefly describes the Flowshop Scheduling permutation Problem. In Section~\ref{ch8:approach1}, we describe the GPU-accelerated B\&B based on the parallel tree exploration. In Section~\ref{ch8:approach2}, details about the second approach, the GPU-accelerated B\&B based on the parallel evaluation of lower bounds, are given. In Section \ref{ch8:ThreadDivergence}, the thread divergence issue related to the location of nodes in the B\&B tree and to the control flow instructions within the bounding operator is described. In Section \ref{ch8:DataAccessOpt}, the memory access optimization challenge is addressed and an overview of the GPU memory hierarchy and the used memory access pattern is given. In Section~\ref{ch8:Experiments}, we report experimental results showing the performances of each of two studied approaches compared to a sequential CPU-based execution of the B\&B and demonstrating the efficiency of the proposed optimizations. + +\section{\index{Branch-and-Bound} algorithm} +\label{ch8:BB} + +Branch-and-bound algorithms are by far the most widely used methods for exactly solving large scale NP-hard combinatorial optimization problems. Indeed, they allow to find the optimal solution of a problem with proof of optimality. + +\vspace{0.3cm} + +The basic idea of the B\&B algorithm consists in implicitly enumerating all the solutions of the original problem by only examining a subset of feasible solutions and eliminating the others when they are not likely to lead to a feasible or an optimal solution. Enumerating the solutions of a problem consists in building a dynamically generated search tree whose nodes are subsets of solutions of the considered problem. The construction of such tree and its exploration are performed using four operators: branching, bounding, selection and pruning. + +\vspace{0.3cm} + +The algorithm proceeds in several iterations during which the best solution found so far is progressively improved. During the exploration process, the search space is described by a pool of unexplored nodes and the best solution found so far. The generated and not yet examined (pending) nodes are kept into a list initialized with the original problem. At each iteration of the algorithm, the following steps are performed: + +\begin{itemize} + \item The {\it selection operator} chooses one node to process among the pending nodes according to a defined strategy. If the selection is based on the depth of the sub-problem in the B\&B tree, we speak about a depth-first exploration strategy. A selection based on the breadth of the sub-problem is called a breadth-first exploration. A best-first selection strategy could also be used. It is based on the presumed capacity of the node to yield good solutions. + \item The {\it branching operator} subdivides a solution space into two or more disjointed sub-spaces to be investigated in a subsequent iteration. + \item The {\it bounding operator} computes a bound value of the optimal solution of each generated sub-problem. + \item Each sub-problem having a greater bound than the upper-bound, i.e. the cost of the best solution found so far, is eliminated using the {\it pruning operator}. +\end{itemize} + +Algorithm \ref{ch8:algoBB} gives the general template of the Branch-and-Bound method. + +\begin{algorithm}[H] + +\SetAlgoLined + +\vspace{0.2cm} + +Create the initial problem; \\ +Inset the initial problem into the tree; \\ +Set the Upper\_Bound to $\propto$; \\ +Set the Best\_Solution to $\emptyset$; \\ + +\While{ not\_empty\_tree() } +{ + \vspace{0.2cm} + + Sub\_Problem = Take\_sub\_problem(); + + \If{ Is\_leaf ( Sub\_Problem ) } + { + Upper\_Bound = Cost\_Of( Sub\_Problem );\\ + Best\_Solution = Sub\_Problem; + } + \Else + { + Lower\_Bound = compute\_lower\_bound(Sub\_Problem); + + \If{ Lower\_Bound $\leq$ Upper\_Bound } + { + Branch(Sub\_Problem); \\ + Insert child sub problems into the tree; + } + \Else + { + Prune (Sub\_Problem); + } + } +} + +\caption{General template of the Branch-and-Bound Algorithm.} +\label{ch8:algoBB} +\end{algorithm} + +\section{Parallel Branch-and-Bound algorithms} +\label{ch8:Parallel-BB} + +Thanks to the bounding operator, B\&B allows to significantly reduce the computing time needed to explore the whole solution space. However, finding an optimal solution for large instances remains unpractical using a sequential B\&B. Therefore, parallel processing of these algorithms has been widely studied in the literature. In \cite{ch8:MelabHDR_2005}, a taxonomy of the various existing parallel paradigm used to parallelize the B\&B algorithm is presented. + +\vspace{0.2cm} + +This taxonomy based on the classification proposed in \cite{ch8:Gendron_1994} identified several models to accelerate the B\&B search. The first model we consider in this chapter is called ``parallel tree exploration model'' and belongs to the ``Tree-based'' strategies that aim to build and explore the B\&B tree in parallel. The second model called ``parallel evaluation of bounds model'' (evaluation of bounds in parallel) belong to the parallelization approach called ``Node-based''. This strategy aims to accelerate the execution of a particular operation at the node level. + +\vspace{0.2cm} + +\subsection{The parallel tree exploration model} +\label{ch8:para_tree} + +Tree-based strategies consist in building and/or exploring the solution tree in parallel by performing operations on several sub-problems simultaneously. This coarse-grained type of parallelism affects the general structure of the B\&B algorithm and makes it highly irregular.\\ + +The \index{parallel tree exploration} model, illustrated in Figure \ref{ch8:parallel_tree}, consists in visiting in parallel different paths of the same tree. The search tree is explored in parallel by performing the branching, selection, bounding and elimination operators on several sub-problems simultaneously.\\ + +\begin{figure} + \begin{center} +\includegraphics[scale=0.5]{Chapters/chapter8/figures/parallel_exploration.eps}% + +\caption{Illustration of the parallel tree exploration model} +\label{ch8:parallel_tree} + \end{center} +\end{figure} + +\subsection{The parallel evaluation of bounds model} +\label{ch8:Node_parallel} + +Node-based strategies introduce parallelism when performing the operations on a single problem. For instance, they consist in executing the bounding operation in parallel for each sub-problem to accelerate the execution. This type of parallelism has no influence on the general structure of the B\&B algorithm and is particular to the problem being solved.\\ + +The \index{parallel evaluation of bounds} model, as shown in Figure \ref{ch8:bounds_parallel}, allows the parallelization of the bounding of sub-problems generated by the branching operator. This model is used in the case where the bounding operator is performed several times after the branching operator. The model does not change the order and the number of explored sub-problems in the parallel B\&B algorithm compared to the sequential B\&B. + +\begin{figure} + \begin{center} +\includegraphics[scale=0.5]{Chapters/chapter8/figures/parallel_bounding.eps}% + +\caption{Illustration of the parallel evaluation of bounds model} +\label{ch8:bounds_parallel} + \end{center} +\end{figure} + +\section{The Flowshop Scheduling Problem} +\label{ch8:BB-FSP} + +\subsection{Definition of the Flowshop Scheduling Problem} +\label{ch8:LB-FSP} + +As a case study for our GPU-based Branch-and-Bound, we considered the NP-hard and well-known problem in the scheduling theory: the "Permutation Flow-shop Scheduling Problem" (FSP). +In this work, the mono-objective case is considered. The FSP aims to find the optimal schedule of n jobs on m machines so that the overall completion time of all jobs, called {\it makespan}, is minimized. + +\vspace{0.3cm} + +Let us suppose the set of jobs is represented by J = {$j_1$, $j_2$, . . . $j_n$} and the set of machines is represented by M = {$m_1$,$m_2$, . . .$m_m$} organized +in the line. Each job $j_i$ is a sequence of operations ji = { $oi_1$, $oi_2$, . . . $oi_m$ } where oim is the duration required for the job ji on the machine m. +A feasible solution of the flowshop permutation should satisfy these constraints: + +\begin{itemize} + \item A machine can not start processing a job if all the machines, which are located upstream, did not finish their treatment. Thus, the operation $oi_j$ cannot be processed by the machine $m_j$ if it is not completed on $m_j$ - 1. +\item An operation can not be interrupted, and the machines are critical resources, because a machine processes one job at a time. +\item The sequence of jobs should be the same on every machine, e.g. if j3 is treated in position 2 on the first machine, j3 is also executed in position 2 on all machines. +\end{itemize} + +Figure~\ref{flow-shop} illustrates a solution of a flow-shop problem instance defined by 6 jobs and 3 machines. + +\begin{figure}[h!] +\centering +\includegraphics[height=1.7cm,width=6.8cm]{Chapters/chapter8/figures/FlowShop.eps} +\caption{Flow-shop problem instance with 3 jobs and 6 machines.} +\label{flow-shop} +\end{figure} + +\vspace{0.3cm} + +\subsection{\index{Lower Bound} for the Flowshop Scheduling Problem} +\label{ch8:LB-FSP} + +The lower bounding technique provides a lower bound (LB) for each sub-problem generated by the branching operator. The more the bound is accurate, the more it allows to eliminate not promising nodes from the search tree. Therefore, the efficiency of a B\&B algorithm depends strongly on the quality of its lower bound function. In this chapter, we use the lower bound proposed by Lenstra {\it et al.}~\cite{ch8:Lenstra_1978} for FSP, based on the Johnson's algorithm~\cite{ch8:Johnson_1954}. + +\vspace{0.2cm} + +The Johnson's algorithm allows to solve optimally FSP with two machines ($m=2$) using the following transitive rule $\preceq$: + +$$J_i \preceq J_j \Leftrightarrow \min(p_{i,1}\ ;\ p_{j,2}) \leq +\min(p_{i,2}\ ;\ p_{j,1})$$ + +We recall that $p_{k,l}$ designates the processing time of the job $J_k$ on the machine $M_l$. From the above rule, it follows the Johnson's theorem: \\ + +\textbf{Jonhson's theorem} \emph{Given $P$ an FSP with $m=2$, if $J_i\preceq J_j$ there exists an optimal schedule for $P$ in which the job $J_i$ precedes the job $J_j$.}\\ + +According to Johnson's theorem, FSP with $m=2$ is solved with a time complexity of $O(n.log n)$. The optimal solution is obtained by first sorting in increasing order the jobs having a +processing time shorter on the first machine than on the second one~; Second, sorting in decreasing order the jobs having a shorter processing time on the second machine. + +\vspace{0.2cm} + +In~\cite{ch8:JRJackson_1956} and~\cite{ch8:LGMitten_1959}, the Johnson's rule has been extended by Jackson and Mitten with lags which allowed further Lenstra {\it et al.} to propose a lower bound for FSP with $m \geq 3$. A lag~$l_j$ designates the minimum duration between the starting time of the job $J_j$ on the second machine and its finishing time on the first machine. Jackson and Mitten demonstrated that the optimal solution for FSP with $m=2$ can be obtained using the following transitive rule $\preceq$: + +$$J_i \preceq J_j \Leftrightarrow \min(p_{i,1}+l_i\ ;\ l_j+p_{j,2}) +\leq \min(l_i+p_{i,2}\ ;\ p_{j,1}+l_j)$$ + +Based on this rule, Lenstra {\it et al.}~\cite{ch8:Lenstra_1978} have proposed the following lower bound for a sub-problem associated to a partial schedule where a set {\Large $\jmath$} of jobs have to be scheduled on $m$ machines. $P_{Ja}^*(\jmath,M_k,M_l)$ represents the Jackson-Mitten optimal solution for the sub-problem that consists in scheduling the set {\Large $\jmath$} of jobs on the two machines $M_k$ and~$M_l$. The term $r_{i,k} = \sum_{ll} p_{j,k}$ refers to the latency between the finishing time of $J_j$ on $M_l$ and the finishing time of the schedule. + +$$LB(\jmath)=\max\limits_{1 \leq k < l \leq m}\{P_{Ja}^*(\jmath,M_k,M_l)+\min\limits_{(i,j)\in \jmath^2, i \neq +j}(r_{i,k}+q_{j,l}) \}$$ + +According to this $LB$ expression, the lower bound for the scheduling of a subset {\Large $\jmath$} of jobs is calculated by applying the Johnson's rule with lags considering all the couples +$(k,l)$ for $1 \leq k,l \leq m$ and $k y) a = b[1];~~~ \Rightarrow if (x - y \geq 1) a = b[1];}\\\\ + \Rightarrow &\multicolumn{6}{l}{if (x - y - 1 \geq 0)}& a = b[1];~~~~~ (x, y) \in N\\\\ + \Rightarrow &\multicolumn{4}{l}{a = f(x, y) \times b[1] + g(x,y) \times a;}\\\\ + &\multicolumn{6}{l}{\emph{where:}}\\ + &&\multicolumn{6}{l}{ f(x,y)=\left\{ + \begin{array}{lll} + 1 & if &x - y - 1 \geq 0\\ + 0 &if&x - y - 1 < 0\\ + \end{array} + \right.}\\ + &\multicolumn{6}{l}{\emph{and}}\\ + &&\multicolumn{6}{l}{g(x,y)=\left\{ + \begin{array}{llll} + 0 & if &x - y - 1 \geq 0\\ + 1 &if&x - y - 1 < 0 & \\ + \end{array} + \right.}\\\\ +\end{array} +\label{ch8:Eq2} +\end{equation} + +\vspace{0.3cm} + +For instance, the following example extracted from the pseudo-code of the lower bound $LB$ illustrates such scenario. + +\vspace{0.3cm} + +\footnotesize +\begin{tabular}{ll} +\\ +\multicolumn{2}{l}{\textsf{if(RM[1]] $>$ MIN )}\{} \textsf{Best\_idx = Current\_idx;} \textsf{\}}\\\\ +\end{tabular} +\normalsize + +\vspace{0.3cm} + +The same transformations as those applied for the first scenario are applied here using the exponential function. Recall that the exponential is a positive function which is equal to $1$ when applied to $0$. Thus, if $x$ is greater than $y$ then $expf(x-y-1)$ returns a value between $0$ and $1$. If the result is rounded to an integer value $0$ will be obtained. Now, if $x$ is less than $y$ then $expf(x-y-1)$ returns a value greater than $1$ and since the minimum between $1$ and the exponential is get, the returned result would be $1$. Such behavior satisfies exactly our prerequisites. The above ``if" instruction pseudo-code is now equivalent to: + +\vspace{0.3cm} + +\small +\begin{tabular}{l} +\\ +\textsf{int coeff = min(1, \_\_expf(RM[1] - MIN - 1)); }\\ +\textsf{Best\_idx = coeff $\times$ Current\_idx + ( 1 - coeff ) $\times$ Best\_idx ;}\\ +\end{tabular} +\normalsize + +\section{Memory access optimization} +\label{ch8:DataAccessOpt} + +\index{Memory access optimizations} are by far the most studied area for improving GPU-based application performances. Indeed, adjusting the pattern of accesses to the GPU device memory grants programmers to further improve the throughput of many high-performance CUDA applications. The goal of memory access optimizations is generally to use as much fast memory and as little slow-access memory as possible. This section discusses how best to set up data LB items on the various kinds of memory on the device. + +\vspace{0.2cm} + +CUDA enabled devices use several memory spaces, which have different characteristics in term of sizes and access latencies. These memory spaces include global memory, local memory , shared memory, texture memory , and registers. Devices of compute capability 2.0 have also an L1 $/$ L2 cache hierarchy that is used to cache local and global memory accesses. + +\begin{itemize} +\item At the thread-level, each thread has its own allocated registers and a private local memory. CUDA uses this local memory for thread-private variables that do not fit in the threads registers, as well as for stack frames and register spilling. \item At the thread block-level, each thread block has a shared memory visible to all its associated threads. \item At the grid-level, all threads have access to the same global memory. Texture and constant cached memories are two other memories accessible by all threads. +\end{itemize} + +The data access optimization challenge is to find the best mapping of the data structures of the application at hand (different sizes and access frequencies) and the GPU hierarchy of memories (different sizes and access latencies). For instance, of these different memory spaces, global memory is the most plentiful but the one with the highest access latency. On the contrary, shared memory is smaller in size but has much higher bandwidth and lower latency than the global memory. + +\subsection{Complexity analysis of the memory usage of the Lower Bound } +\label{ch8:MemComplex} + +In this section, the characteristics of the data structures used by the lower bound function are studied in terms of sizes and access frequencies. For an efficient implementation of the LB, six data structures are required: the matrix $PTM$ of the processing times of the jobs, the matrix of lags $LM$, the Johnson's matrix $JM$, the matrix $RM$ of the earliest starting times of jobs, the matrix $QM$ of their lowest latency times and the matrix $MM$ containing the couples of machines. The complexities of the different data structures are summarized in Table~\ref{ch8:tabMemComplex} where the columns represent respectively the name of the data structure, its size and the number of times it is accessed. + +\vspace{0.2cm} + +In the $LB$ expression, the computation of the term $P_{Ja}^*(\jmath,M_k,M_l)$ requires the calculation of the lag of each remaining job to be scheduled on the couple $(M_k,M_l)$ of machines using its processing times on these machines (Johnson's rule with lags). Such computation is repeated for each couple $(M_k,M_l)$ of machines with $1 \leq k,l \leq m$ and $k} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P5 exch def + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +% +% Fig objects follow +% +% +% here starts figure with depth 50 +/Times-Italic ff 240.00 scf sf +4534 5502 m +gs 1 -1 sc (l = p) col0 sh gr +/Times-Italic ff 195.00 scf sf +4648 5559 m +gs 1 -1 sc (j) col0 sh gr +/Symbol ff 360.00 scf sf +5084 5532 m +gs 1 -1 sc (S) col0 sh gr +/Times-Italic ff 195.00 scf sf +4896 5720 m +gs 1 -1 sc (k < < l) col0 sh gr +/Symbol ff 180.00 scf sf +5195 5685 m +gs 1 -1 sc (m) col0 sh gr +/Times-Italic ff 195.00 scf sf +5639 5592 m +gs 1 -1 sc (j,) col0 sh gr +/Symbol ff 180.00 scf sf +5750 5583 m +gs 1 -1 sc (m) col0 sh gr +% Polyline +7.500 slw +n 2127 4725 m 3077 4725 l 3077 5200 l 2127 5200 l + cp gs col0 s gr +% Polyline + [15 60] 60 sd +n 3077 4250 m 4490 4250 l 4490 4725 l 3077 4725 l + cp gs col0 s gr [] 0 sd +% Polyline + [15 60] 60 sd +n 4490 3775 m 4965 3775 l 4965 4250 l 4490 4250 l + cp gs col0 s gr [] 0 sd +% Polyline + [15 60] 60 sd +n 4965 3313 m 5915 3313 l 5915 3775 l 4965 3775 l + cp gs col0 s gr [] 0 sd +% Polyline +n 7563 2355 m 8975 2355 l 8975 2830 l 7563 2830 l + cp gs col0 s gr +% Polyline + [15 60] 60 sd +n 5909 2830 m 7568 2830 l 7568 3307 l 5909 3307 l + cp gs col0 s gr [] 0 sd +% Polyline +n 1420 2125 m 1420 6136 l + 9216 6136 l gs col0 s gr +% Polyline +n 1420 4966 m + 1182 4966 l gs col0 s gr +% Polyline +n 1408 2602 m + 1170 2602 l gs col0 s gr +% Polyline +n 1409 5909 m + 1171 5909 l gs col0 s gr +% Polyline +45.000 slw + [15 150] 150 sd +n 818 2909 m + 818 4545 l gs col0 s gr [] 0 sd +% Polyline + [15 150] 150 sd +n 830 5193 m + 830 5670 l gs col0 s gr [] 0 sd +% Polyline +7.500 slw + [60] 0 sd +n 3077 4727 m 7568 4727 l 7568 5200 l 3077 5200 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P5 [16 0 0 -16 205.13 315.13] PATmp PATsp ef gr PATusp gs col0 s gr [] 0 sd +/Times-Italic ff 240.00 scf sf +80 2614 m +gs 1 -1 sc (M = M) col0 sh gr +/Times-Italic ff 240.00 scf sf +91 4966 m +gs 1 -1 sc (M = M) col0 sh gr +/Times-Italic ff 240.00 scf sf +739 5943 m +gs 1 -1 sc (M) col0 sh gr +/Times-Italic ff 240.00 scf sf +2125 5432 m +gs 1 -1 sc (p = p) col0 sh gr +/Times-Italic ff 240.00 scf sf +7784 3068 m +gs 1 -1 sc (p = p) col0 sh gr +/Times-Italic ff 195.00 scf sf +261 2773 m +gs 1 -1 sc (2) col0 sh gr +/Times-Italic ff 195.00 scf sf +284 5068 m +gs 1 -1 sc (1) col0 sh gr +/Times-Italic ff 195.00 scf sf +920 6091 m +gs 1 -1 sc (0) col0 sh gr +/Times-Italic ff 195.00 scf sf +2170 5557 m +gs 1 -1 sc (j,1) col0 sh gr +/Times-Italic ff 195.00 scf sf +7841 3182 m +gs 1 -1 sc (j,2) col0 sh gr +/Times-Italic ff 195.00 scf sf +1000 2773 m +gs 1 -1 sc (l) col0 sh gr +/Times-Italic ff 195.00 scf sf +977 5102 m +gs 1 -1 sc (k) col0 sh gr +/Times-Italic ff 195.00 scf sf +2920 5534 m +gs 1 -1 sc (j,k) col0 sh gr +/Times-Italic ff 195.00 scf sf +8614 3205 m +gs 1 -1 sc (j,l) col0 sh gr +% here ends figure; +$F2psEnd +rs +end +showpage diff --git a/BookGPU/Chapters/chapter8/figures/parallel_bounding-eps-converted-to.pdf b/BookGPU/Chapters/chapter8/figures/parallel_bounding-eps-converted-to.pdf new file mode 100644 index 0000000..e7dae85 Binary files /dev/null and b/BookGPU/Chapters/chapter8/figures/parallel_bounding-eps-converted-to.pdf differ diff --git a/BookGPU/Chapters/chapter8/figures/parallel_bounding.eps b/BookGPU/Chapters/chapter8/figures/parallel_bounding.eps new file mode 100644 index 0000000..3625c89 --- /dev/null +++ b/BookGPU/Chapters/chapter8/figures/parallel_bounding.eps @@ -0,0 +1,1160 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner +%%Title: parallel bounding.eps +%%CreationDate: Tue Aug 21 13:36:11 2012 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 537 268 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 252.96837895263093 translate +521.93475815523061 -252.96837895263093 scale +% Image geometry +522 253 8 +% Transformation matrix +[ 522 0 0 253 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 522 string def +/gstr 522 string def +/bstr 522 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 58678 ASCII Bytes +colorimage +JcC<$JcC<$p]#a~> +JcC<$JcC<$p]#a~> +JcC<$JcC<$p]#a~> +JcC<$JcC<$p]#a~> +JcC<$JcC<$p]#a~> +JcC<$JcC<$p]#a~> +JcC<$JcC<$p]#a~> +JcC<$JcC<$p]#a~> +JcC<$JcC<$p]#a~> +JcCT,!;? +JcCT,!;? +JcCT,!;? +JcCf2"RX.$F\h]2"EfF#g%L!sJcG`LJ,~> +JcCf2"RX.$F\h]2"EfF#g%L!sJcG`LJ,~> +JcCf2"RX.$F\h]2"EfF#g%L!sJcG`LJ,~> +JcCr6"8:'):](4mFTA-5XTF3!AGcE/A?FmCs+13#~> +JcCr6"8:'):](4mFTA-5XTF3!AGcE/A?FmCs+13#~> +JcCr6"8:'):](4mFTA-5XTF3!AGcE/A?FmCs+13#~> +JcD#8!SN\8!!@AGg%P(<"67=nAGuQ1:V#kDs+LE&~> +JcD#8!SN\8!!@AGg%P(<"67=nAGuQ1:V#kDs+LE&~> +JcD#8!SN\8!!@AGg%P(<"67=nAGuQ1:V#kDs+LE&~> +JcD,;#PQ)3!!"m?cg1T4mC@B=!!/;:JcCK)J,~> +JcD,;#PQ)3!!"m?cg1T4mC@B=!!/;:JcCK)J,~> +JcD,;#PQ)3!!"m?cg1T4mC@B=!!/;:JcCK)J,~> +JcD/<"g'W^!-QWLrs%km:B1B;fn'0Zs*t~> +JcD/<"g'W^!-QWLrs%km:B1B;fn'0Zs*t~> +JcD/<"g'W^!-QWLrs%km:B1B;fn'0Zs*t~> +JcD5>"j]sE!0cg.rrp>:!!&5MJcCW-J,~> +JcD5>"j]sE!0cg.rrp>:!!&5MJcCW-J,~> +JcD5>"j]sE!0cg.rrp>:!!&5MJcCW-J,~> +JcEai!42S'![F]DpAY,*qu?ajeb&kFm<&C/PO70*"N4(927\; +JcEai!,)30!DCu:rrMBnqu?bAoCW%dm<&C/PO70*"N4(927\; +JcEdj!Tba.!!3RTnFlk^Zhse).'!4;rrqe4!!&5Mh#@Mq:B38_JcCZ.J,~> +JcE^h#Nd9.s8Uk*h>[EXo6h$5UAOri#H`pas8JuorV$6o\MX@tg"?<-XT/?3m=G:ss*t~> +JcE^h#H`pas8JuorVlg"ePuT^a8Q#B?HiHLo5CArrrfki!+ad8rrfG(!+bJJs,I&/~> +JcEai#Q&/Xs8VV/UAk/rr2V\$L#r=6#NADJs8U_;g@bIK\MX@tg"?<-XT/?3m=G:ss*t~> +JcE^h!p1a)rr3"PZi9t.QZhuZV>C2k!Nh:ZrrVs?lM1A^p4WJHXk!FSm<&Cd`.@rKs*t~> +JcE^h!Nh:ZrsJNGlMpn^4Knb*^&@s3?HiEK!QSjIrri%L!!'.Orrh_3!&_]Gs,R,0~> +JcEai!rHWSrr3>GD>aG6dm_s][,1f^#NADJs8W(PZhOJ&p4WJHXk!FSm<&Cd`.@rKs*t~> +JcE^h!p1a)rr3"B\GlL/Xc*&U!Nh:ZrrV^5mJ6bbj%fYcj3mr0XT/?pJcCf2J,~> +JcE^h!Nh:Zrs/':mJm4c@EeTJ!FF"LrrKfOq#:KW:B4qcdf0EO!!&^Ds,[21~> +JcEai!rHWSrr35:F8Z( +JcE^h#Nd9.s8/o9jo58]ko%M +JcE^h#H`pas6G)Arr2p!ZU+$VrrufRs8US7Xnhu"feibnp<`gBfeibPp4<7+s*t~> +JcEai#Q&/Xs8LD;XoA>&qeqAir;R#]9Cr2YXY\r3rrh"4!0d-'rrh"4!-S!ds,m>3~> +JcE^h!9X1Z%VYJ6s79Zg3pHDm!7:bJqu?bnrql]t_uKeJc2Rq?A,p06JcCo5J,~> +JcE^h!3Q/!%]'+(s3si+EW4/^1&V&Xr;ZjHf_YUM_uKeJc2Rq?A,p06JcCo5J,~> +JcEai!W-O.!"Us:s8W"iG\=MbMZAn>iZnC%!Gq9%rr^1>!4gAS"SQ@+AG1TSP5g%~> +JcE^h($6b5eK'OoMOse40E:s/h4YrrVJ!W;QYt_uKeUbPq_=FT>tGJcCr6J,~> +JcE^h!Nh:ZrsS+*W;lj)d/.LYSXoc[!FF"LrrUM"iV`]X_uKeUbPq_=FT>tGJcCr6J,~> +JcEai*;aBms8W)B7G\"&=7b9AeQUT)s5H]Cs8VkeAbc3'"2k0>`68/`p2p@Gp4<7-s*t~> +JcE^h!p1a)rr3?#+Qi]^W;lj:1RJ+@!Nh:YrrL/HrVlu +JcE^h!Nh:YrsHeQs8+&#s620iec,RL?HiBJ!JITRrr^1>2:'AD"-W^qp4<7.s*t~> +JcEai!rHWSrr3Q/KrtC!@J^#50idlGs5H]Crr3&h8E0UJ"2k0sccH+gP5o.eJcCu7J,~> +JcE^h&EY57s8W)%3r/f^=7c +JcE^h!Nh:ZrsSFAOoPDoR/ZAP3r/dT!FF"LrrV"6d/O%IcN!su`r?.)!+beSs- +JcEai!rHWSrr3be7F2"p4OF)J-'J9-s5H]Cs8W##:\4Sc"4$rIfuF$oP5o.eJcD#8J,~> +JcEai!42P&%857Os8.KM!-b+:!0Lpk!!d`>s8V+:!5uhU!d+KsJcD#8J,~> +JcEai!,)0/% +JcEdj!Tba-!"C?Vr;Zc/-id&H3<2UHqZ$Xme,K@Lj#$hT`;]m]!/6"(Q2c@~> +JcD\K"84SP`8gmsf`:'orr_t*!24uDQN)I~> +JcD\K"84SP`8gmsf`:'orr_t*!24uDQN)I~> +JcD\K"84SP`8gmsf`:'orr_t*!24uDQN)I~> +JcD\K!d+L,jo5DLP;E.;!]-PDkPkYO2#tsRs-Nb9~> +JcD\K!d+L,jo5DLP;E.;!]-PDkPkYO2#tsRs-Nb9~> +JcD\K!d+L,jo5DLP;E.;!]-PDkPkYO2#tsRs-Nb9~> +JcD_L!j)H5jo5_,1B8h@Jq@kg!&N +JcD_L!j)H5jo5_,1B8h@Jq@kg!&N +JcD_L!j)H5jo5_,1B8h@Jq@kg!&N +JcDbM"5*Z3mH4EN_uKdhr4`BEGQ7`skPkUc!-NkmR/_[~> +JcDbM"5*Z3mH4EN_uKdhr4`BEGQ7`skPkUc!-NkmR/_[~> +JcDbM"5*Z3mH4EN_uKdhr4`BEGQ7`skPkUc!-NkmR/_[~> +JcDbM!`&gBk5PPN1B=HN^B9Z"1\U#3!d+LRJcD/ +JcDbM!`&gBk5PPN1B=HN^B9Z"1\U#3!d+LRJcD/ +JcDbM!`&gBk5PPN1B=HN^B9Z"1\U#3!d+LRJcD/ +JcDeN!j)HVjo5CG!/pTd!dF^IkPkYO2)XcPs-it<~> +JcDeN!j)HVjo5CG!/pTd!dF^IkPkYO2)XcPs-it<~> +JcDeN!j)HVjo5CG!/pTd!dF^IkPkYO2)XcPs-it<~> +JcDhO"76(Gp?)AVp&I2J^B1nF:$2HWXT4Q9s-it<~> +JcDhO"76(Gp?)AVp&I2J^B1nF:$2HWXT4Q9s-it<~> +JcDhO"76(Gp?)AVp&I2J^B1nF:$2HWXT4Q9s-it<~> +JcDhO!g +JcDhO!g +JcDhO!g +JcDkP!ndQLjSo;7!.smY!eLF*k5PM/!-NkmS,\!~> +JcDkP!ndQLjSo;7!.smY!eLF*k5PM/!-NkmS,\!~> +JcDkP!ndQLjSo;7!.smY!eLF*k5PM/!-NkmS,\!~> +JcDkP!d+L]jSo;7!.smY!eLF*jo5C)!82r'SH"*~> +JcDkP!d+L]jSo;7!.smY!eLF*jo5C)!82r'SH"*~> +JcDkP!d+L]jSo;7!.smY!eLF*jo5C)!82r'SH"*~> +JcDnQ!pot`j8T26!-n1O!b;;ujo5D8!-NkmSH"*~> +JcDnQ!pot`j8T26!-n1O!b;;ujo5D8!-NkmSH"*~> +JcDnQ!pot`j8T26!-n1O!b;;ujo5D8!-NkmSH"*~> +JcDnQ!g +JcDnQ!g +JcDnQ!g +JcDqR!qlUiiVrtC!.ss[!dF^Ij8T2!!0`!6Sc=3~> +JcDqR!qlUiiVrtC!.ss[!dF^Ij8T2!!0`!6Sc=3~> +JcDqR!qlUiiVrtC!.ss[!dF^Ij8T2!!0`!6Sc=3~> +JcDqR!kA<5iVs#I0*%43^B9Z"0D=E*s"sfMJcD>AJ,~> +JcDqR!kA<5iVs#I0*%43^B9Z"0D=E*s"sfMJcD>AJ,~> +JcDqR!kA<5iVs#I0*%43^B9Z"0D=E*s"sfMJcD>AJ,~> +JcDqR!b;;uir9&HPPtO_K"1co!P!CR!!/;Wj8T1S!5sHgT)X<~> +JcDqR!b;;uir9&HPPtO_K"1co!P!CR!!/;Wj8T1S!5sHgT)X<~> +JcDqR!b;;uir9&HPPtO_K"1co!P!CR!!/;Wj8T1S!5sHgT)X<~> +JcDtS!pouAj8TkfP5kSYQSSUiDM!IN-ic&l2#oM9p>u;UirFdas.97@~> +JcDtS!pouAj8TkfP5kSYQSSUiDM!IN-ic&l2#oM9p>u;UirFdas.97@~> +JcDtS!pouAj8TkfP5kSYQSSUiDM!IN-ic&l2#oM9p>u;UirFdas.97@~> +JcDtS!kA +JcDtS!kA +JcDtS!kA +JcDtS!b;<)kPkb[XYg)9XnMYl"60Alj88i[p8n;p28n\X!hfV4JcDABJ,~> +JcDtS!b;<)kPkb[XYg)9XnMYl"60Alj88i[p8n;p28n\X!hfV4JcDABJ,~> +JcDtS!b;<)kPkb[XYg)9XnMYl"60Alj88i[p8n;p28n\X!hfV4JcDABJ,~> +JcE"T!qlV)kPk_(:B1BspA+^if`762rrqeR!!#g5l2Lh +JcE"T!qlV)kPk_(:B1BspA+^if`762rrqeR!!#g5l2Lh +JcE"T!qlV)kPk_(:B1BspA+^if`762rrqeR!!#g5l2Lh +JcE"T!m^kKl2Lq*:B1BYmJ$V^f`8/JrrqeR!!#gJlMglB:P&P +JcE"T!m^kKl2Lq*:B1BYmJ$V^f`8/JrrqeR!!#gJlMglB:P&P +JcE"T!m^kKl2Lq*:B1BYmJ$V^f`8/JrrqeR!!#gJlMglB:P&P +JcE"T!hfVIli..A:B1BYmIgJ\_uQq3rrqG*!!%/pm/I-0!:>@;T`9N~> +JcE"T!hfVIli..A:B1BYmIgJ\_uQq3rrqG*!!%/pm/I-0!:>@;T`9N~> +JcE"T!hfVIli..A:B1BYmIgJ\_uQq3rrqG*!!%/pm/I-0!:>@;T`9N~> +JcE"T!d+M:mJd@CFT;Dag%54FXT7&Frrq(u!!%/pmf*?j!719:!:Bd=!4h^'!4i*^!:>@;`rCP~> +JcE"T!d+M:mJd@CFT;Dag%54FXT7&Frrq(u!!%/pmf*?j!719:!:Bd=!4h^'!4i*^!:>@;`rCP~> +JcE"T!d+M:mJd@CFT;Dag%54FXT7&Frrq(u!!%/pmf*?j!719:!:Bd=!4h^'!4i*^!:>@;`rCP~> +JcE"T!rrUjRXo/2'p=[BdPBCEt!<70EPHE0ap4<7i +s*t~> +JcE"T!rrUjRXo/2'p=[BdPBCEt!<70EPHE0ap4<7i +s*t~> +JcE"T!rrUjRXo/2'p=[BdPBCEt!<70EPHE0ap4<7i +s*t~> +JcE%U!pouAqYq)ZKei]/@_)44s6Z!M!)Lr0rrQ^2jR3$O`(p@5PO88I!qt=-qu6lf!--]&PBGFV +">t=q\_2Q6eGk%~> +JcE%U!pouAqYq)ZKei]/@_)44s6Z!M!)Lr0rrQ^2jR3$O`(p@5PO88I!qt=-qu6lf!--]&PBGFV +">t=q\_2Q6eGk%~> +JcE%U!pouAqYq)ZKei]/@_)44s6Z!M!)Lr0rrQ^2jR3$O`(p@5PO88I!qt=-qu6lf!--]&PBGFV +">t=q\_2Q6eGk%~> +JcE%U!ndRUqu7.i!!"EL9)nrddusb3:W2c&!SN2*!!-QTmf*U3:B1BgpAb02@f691PN2\r\V80+ +"([V+j+76`s*t~> +JcE%U!ndRUqu7.i!!"EL9)nrddusb3:W2c&!SN2*!!-QTmf*U3:B1BgpAb02@f691PN2\r\V80+ +"([V+j+76`s*t~> +JcE%U!ndRUqu7.i!!"EL9)nrddusb3:W2c&!SN2*!!-QTmf*U3:B1BgpAb02@f691PN2\r\V80+ +"([V+j+76`s*t~> +JcE%U!kA_DKneS!0cjN%/-e\!&^Zo!!#ZDDEI:e"]'8p +Xf]P@f`:F4rrD*Yf`epgXbCmnnGiW5XkA:*h>`!~> +JcE%U!kA_DKneS!0cjN%/-e\!&^Zo!!#ZDDEI:e"]'8p +Xf]P@f`:F4rrD*Yf`epgXbCmnnGiW5XkA:*h>`!~> +JcE%U!kA_DKneS!0cjN%/-e\!&^Zo!!#ZDDEI:e"]'8p +Xf]P@f`:F4rrD*Yf`epgXbCmnnGiW5XkA:*h>`!~> +JcE%U!j)IUrVlu1!)'j!^B9Z"2>6M="1\C[PPr5uUItTNmJdCaXYg(Y9<.s*!K/B$!!Q/@Xi/o[ +hu +JcE%U!j)IUrVlu1!)'j!^B9Z"2>6M="1\C[PPr5uUItTNmJdCaXYg(Y9<.s*!K/B$!!Q/@Xi/o[ +hu +JcE%U!j)IUrVlu1!)'j!^B9Z"2>6M="1\C[PPr5uUItTNmJdCaXYg(Y9<.s*!K/B$!!Q/@Xi/o[ +hu +JcE%U!g +JcE%U!g +JcE%U!g +JcE%U!HeD@rrU+=DYUsJYlJ8&rrSAaMtt*hWW5c\rr_sN.'`T_#(ci's/c:SbPqXsX`a@ +JcE%U!HeD@rrU+=DYUsJYlJ8&rrSAaMtt*hWW5c\rr_sN.'`T_#(ci's/c:SbPqXsX`a@ +JcE%U!HeD@rrU+=DYUsJYlJ8&rrSAaMtt*hWW5c\rr_sN.'`T_#(ci's/c:SbPqXsX`a@ +JcE%U!HeDArr_tO!2K;'!D +JcE%U!HeDArr_tO!2K;'!D +JcE%U!HeDArr_tO!2K;'!D +JcE%U"Ea_<`.e0jp:gZR!86rC!ndQupV-cn!3P\h!j)HtpV-lB!9:0]fu3mmp +JcE%U"Ea_<`.e0jp:gZR!86rC!ndQupV-cn!3P\h!j)HtpV-lB!9:0]fu3mmp +JcE%U"Ea_<`.e0jp:gZR!86rC!ndQupV-cn!3P\h!j)HtpV-lB!9:0]fu3mmp +JcE%U!+5R&p:gZ\!86rC!ndR*pV-d)!3P\h!d+LQpV-l`!84ISftdUhj.T9E!!.f"JcG3=J,~> +JcE%U!+5R&p:gZ\!86rC!ndR*pV-d)!3P\h!d+LQpV-l`!84ISftdUhj.T9E!!.f"JcG3=J,~> +JcE%U!+5R&p:gZ\!86rC!ndR*pV-d)!3P\h!d+LQpV-l`!84ISftdUhj.T9E!!.f"JcG3=J,~> +JcE.X!pu[Wq#CE"pV-c?!:B@W!ndR*pV-d)!3P\h!HeD9^BK2hfrY8-^&J/oThkLb!`-B#JcG<@ +J,~> +JcE.X!pu[Wq#CE"pV-c?!:B@W!ndR*pV-d)!3P\h!HeD9^BK2hfrY8-^&J/oThkLb!`-B#JcG<@ +J,~> +JcE.X!pu[Wq#CE"pV-c?!:B@W!ndR*pV-d)!3P\h!HeD9^BK2hfrY8-^&J/oThkLb!`-B#JcG<@ +J,~> +JcE4Z!Q9-V!!?bc!0d/l!BW+-rrUjRK(m"]RfKSYrrSkoU\DM,D?/@l!84s`!RHu+!!5$Am=G<0 +s*t~> +JcE4Z!Q9-V!!?bc!0d/l!BW+-rrUjRK(m"]RfKSYrrSkoU\DM,D?/@l!84s`!RHu+!!5$Am=G<0 +s*t~> +JcE4Z!Q9-V!!?bc!0d/l!BW+-rrUjRK(m"]RfKSYrrSkoU\DM,D?/@l!84s`!RHu+!!5$Am=G<0 +s*t~> +JcE=]!pu[=q>^^q\aBFW!*K$2!g +JcE=]!pu[=q>^^q\aBFW!*K$2!g +JcE=]!pu[=q>^^q\aBFW!*K$2!g +JcEC_!SN2'!!>)Q!:Bab!d+L$qS*-B3rmt'rrRj~> +JcEC_!SN2'!!>)Q!:Bab!d+L$qS*-B3rmt'rrRj~> +JcEC_!SN2'!!>)Q!:Bab!d+L$qS*-B3rmt'rrRj~> +JcEIa!Q7e1!!RM`s/c:SrVlu[1B +JcEIa!Q7e1!!RM`s/c:SrVlu[1B +JcEIa!Q7e1!!RM`s/c:SrVlu[1B +JcERd!qr`RqZ$[TU$_jZ!j)IUr;R/C!!$,jUSE&^!!#garrA8^!!,`trP&KFA,p*4m/I4^:&o1A +rP&T;3rkuSs)e=GrrVo4:\t+mFmXb[r;V9~> +JcERd!qr`RqZ$[TU$_jZ!j)IUr;R/C!!$,jUSE&^!!#garrA8^!!,`trP&KFA,p*4m/I4^:&o1A +rP&T;3rkuSs)e=GrrVo4:\t+mFmXb[r;V9~> +JcERd!qr`RqZ$[TU$_jZ!j)IUr;R/C!!$,jUSE&^!!#garrA8^!!,`trP&KFA,p*4m/I4^:&o1A +rP&T;3rkuSs)e=GrrVo4:\t+mFmXb[r;V9~> +JcEXf!pu[=qZ$[n`:j-/!m^kKqu6]W@f-3.&c_pMo)AaaL&1iTDNgQ7-id`MlMh4O1]TU^Ru;.a +!0dE^s#$qY!Q7e2!!/;NJcG`LJ,~> +JcEXf!pu[=qZ$[n`:j-/!m^kKqu6]W@f-3.&c_pMo)AaaL&1iTDNgQ7-id`MlMh4O1]TU^Ru;.a +!0dE^s#$qY!Q7e2!!/;NJcG`LJ,~> +JcEXf!pu[=qZ$[n`:j-/!m^kKqu6]W@f-3.&c_pMo)AaaL&1iTDNgQ7-id`MlMh4O1]TU^Ru;.a +!0dE^s#$qY!Q7e2!!/;NJcG`LJ,~> +JcE^h!UZ*I!!.f,q>UNL!295g"66MI*<#p<2Y-kKp14+%!gBoGqu?bkp?;MWp65CS!DUN2rrE+B +X8`4=:](1o26HS'rrE(L~> +JcE^h!UZ*I!!.f,q>UNL!295g"66MI*<#p<2Y-kKp14+%!gBoGqu?bkp?;MWp65CS!DUN2rrE+B +X8`4=:](1o26HS'rrE(L~> +JcE^h!UZ*I!!.f,q>UNL!295g"66MI*<#p<2Y-kKp14+%!gBoGqu?bkp?;MWp65CS!DUN2rrE+B +X8`4=:](1o26HS'rrE(L~> +JcEdj!UZ*I!!/;NpAY-nFnu% +JcEdj!UZ*I!!/;NpAY-nFnu% +JcEdj!UZ*I!!/;NpAY-nFnu% +JcEjl!UZ*J!!5$[p@S@c:B:7k!TQuQ!!(^ErrM.;r;Zi9rVuis!/9D3!;?Bl#*&?Vs1&-?VuHe. +2>dFTFlS,SJ,~> +JcEjl!UZ*J!!5$[p@S@c:B:7k!TQuQ!!(^ErrM.;r;Zi9rVuis!/9D3!;?Bl#*&?Vs1&-?VuHe. +2>dFTFlS,SJ,~> +JcEjl!UZ*J!!5$[p@S@c:B:7k!TQuQ!!(^ErrM.;r;Zi9rVuis!/9D3!;?Bl#*&?Vs1&-?VuHe. +2>dFTFlS,SJ,~> +JcEpn!VW5a!!5$[p@A4bP5sY@rrB1s!!(^FrrC"9!!+t;rVllYrVuqPiVro(r;[!W`;c#$j/2hW +p9"2l!Nl'Ls*t~> +JcEpn!VW5a!!5$[p@A4bP5sY@rrB1s!!(^FrrC"9!!+t;rVllYrVuqPiVro(r;[!W`;c#$j/2hW +p9"2l!Nl'Ls*t~> +JcEpn!VW5a!!5$[p@A4bP5sY@rrB1s!!(^FrrC"9!!+t;rVllYrVuqPiVro(r;[!W`;c#$j/2hW +p9"2l!Nl'Ls*t~> +JcF!p!qr`Rqu?dUXnM8a!kA +JcF!p!qr`Rqu?dUXnM8a!kA +JcF!p!qr`Rqu?dUXnM8a!kA +JcF$q!Q6kn!!5$[p?qqbirFf5s1(#]!!(^HrrC"9!!-X(r;QcCqu?`jiVrmtq>^Oam@sU]fh_MG +!MT4Cs*t~> +JcF$q!Q6kn!!5$[p?qqbirFf5s1(#]!!(^HrrC"9!!-X(r;QcCqu?`jiVrmtq>^Oam@sU]fh_MG +!MT4Cs*t~> +JcF$q!Q6kn!!5$[p?qqbirFf5s1(#]!!(^HrrC"9!!-X(r;QcCqu?`jiVrmtq>^Oam@sU]fh_MG +!MT4Cs*t~> +JcF*s!SL9H!!5$[p?V_\:GqN^o`,!Fq#:>fr;Zk/pAFpkp,2aJ!6!jr!0d3Y!]@+RU]1AgXo&/" +:YCU)J,~> +JcF*s!SL9H!!5$[p?V_\:GqN^o`,!Fq#:>fr;Zk/pAFpkp,2aJ!6!jr!0d3Y!]@+RU]1AgXo&/" +:YCU)J,~> +JcF*s!SL9H!!5$[p?V_\:GqN^o`,!Fq#:>fr;Zk/pAFpkp,2aJ!6!jr!0d3Y!]@+RU]1AgXo&/" +:YCU)J,~> +JcF0u!UY%,!!/eel2LgK!%[[A!872J!0d?]!Hn,5rr@cM!!$QgrrB1q!!,m6UAk8SFo24?U%XEE +J,~> +JcF0u!UY%,!!/eel2LgK!%[[A!872J!0d?]!Hn,5rr@cM!!$QgrrB1q!!,m6UAk8SFo24?U%XEE +J,~> +JcF0u!UY%,!!/eel2LgK!%[[A!872J!0d?]!Hn,5rr@cM!!$QgrrB1q!!,m6UAk8SFo24?U%XEE +J,~> +JcF7"!VWYm!!/;NkPkV0!$:b4!;?9h!0d?]!0d9Z!71H@!:AeG!6"O1!Hm(irrKYfr;Zk/j,F"g~> +JcF7"!VWYm!!/;NkPkV0!$:b4!;?9h!0d?]!0d9Z!71H@!:AeG!6"O1!Hm(irrKYfr;Zk/j,F"g~> +JcF7"!VWYm!!/;NkPkV0!$:b4!;?9h!0d?]!0d9Z!71H@!:AeG!6"O1!Hm(irrKYfr;Zk/j,F"g~> +JcF:#!RFR>!!.5qjSo<>1T`P.!;c]qPPkI]PPY:[p,2XG!4h+h!86rD!0a/W!UXFr!!+sfNW4M~> +JcF:#!RFR>!!.5qjSo<>1T`P.!;c]qPPkI]PPY:[p,2XG!4h+h!86rD!0a/W!UXFr!!+sfNW4M~> +JcF:#!RFR>!!.5qjSo<>1T`P.!;c]qPPkI]PPY:[p,2XG!4h+h!86rD!0a/W!UXFr!!+sfNW4M~> +JcF@%!UY%-!!,m6ir9.F!6"SppAk*j!0d?]!0d6Y!/:1J!)MVS!:BCY!G(5`rrB2!!!.fIO8j_~> +JcF@%!UY%-!!,m6ir9.F!6"SppAk*j!0d?]!0d6Y!/:1J!)MVS!:BCY!G(5`rrB2!!!.fIO8j_~> +JcF@%!UY%-!!,m6ir9.F!6"SppAk*j!0d?]!0d6Y!/:1J!)MVS!:BCY!G(5`rrB2!!!.fIO8j_~> +JcFC&!Ne6W!!04qiVs,B!-S>Aj?<;=r;Qb\r;Zh]q>UH@p&G*QirAZO!3Mgl!TQuS!!-WjOT0h~> +JcFC&!Ne6W!!04qiVs,B!-S>Aj?<;=r;Qb\r;Zh]q>UH@p&G*QirAZO!3Mgl!TQuS!!-WjOT0h~> +JcFC&!Ne6W!!04qiVs,B!-S>Aj?<;=r;Qb\r;Zh]q>UH@p&G*QirAZO!3Mgl!TQuS!!-WjOT0h~> +JcFI(!TR_g!!.60hZ!Xf!:Bdc!P(Vq!<)ot\buL.PPP4Zp,2OD!28EP!)N@i!G(5[rrMhWr;ZjU +`0((M~> +JcFI(!TR_g!!.60hZ!Xf!:Bdc!P(Vq!<)ot\buL.PPP4Zp,2OD!28EP!)N@i!G(5[rrMhWr;ZjU +`0((M~> +JcFI(!TR_g!!.60hZ!Xf!:Bdc!P(Vq!<)ot\buL.PPP4Zp,2OD!28EP!)N@i!G(5[rrMhWr;ZjU +`0((M~> +JcFO*!VWYn!!,mAh#@Go!0d?\!Q7e4!<2uu`;KZ9PPG.XL%PEG:ZDBSFnbq:PF2@M`;BT8Tp#G+~> +JcFO*!VWYn!!,mAh#@Go!0d?\!Q7e4!<2uu`;KZ9PPG.XL%PEG:ZDBSFnbq:PF2@M`;BT8Tp#G+~> +JcFO*!VWYn!!,mAh#@Go!0d?\!Q7e4!<2uu`;KZ9PPG.XL%PEG:ZDBSFnbq:PF2@M`;BT8Tp#G+~> +JcFR+!SL9H!!/eegA_4M!:B[`#.ZSk2?3]pr;Zh]q#:??o)Jd:j8T+CpAb3RR/[3I:]17oL%^c2 +J,~> +JcFR+!SL9H!!/eegA_4M!:B[`#.ZSk2?3]pr;Zh]q#:??o)Jd:j8T+CpAb3RR/[3I:]17oL%^c2 +J,~> +JcFR+!SL9H!!/eegA_4M!:B[`#.ZSk2?3]pr;Zh]q#:??o)Jd:j8T+CpAb3RR/[3I:]17oL%^c2 +J,~> +JcFU,!3Q/!!G'm9rrU+=PPY:^p8rK;ci!hDPPG.Yp,2FA!0cIC!3Q/!"Kf3728kg\!VU[7!!-Wt +Q2c@~> +JcFU,!3Q/!!G'm9rrU+=PPY:^p8rK;ci!hDPPG.Yp,2FA!0cIC!3Q/!"Kf3728kg\!VU[7!!-Wt +Q2c@~> +JcFU,!3Q/!!G'm9rrU+=PPY:^p8rK;ci!hDPPG.Yp,2FA!0cIC!3Q/!"Kf3728kg\!VU[7!!-Wt +Q2c@~> +JcF[.!TR_g!!'.OrrPsrg%bRJj#-f9!+bg'#34CIXbCU6q#CCPj8T+trW!+4j8].Qj-0KCU&=rl +2<1#&J,~> +JcF[.!TR_g!!'.OrrPsrg%bRJj#-f9!+bg'#34CIXbCU6q#CCPj8T+trW!+4j8].Qj-0KCU&=rl +2<1#&J,~> +JcF[.!TR_g!!'.OrrPsrg%bRJj#-f9!+bg'#34CIXbCU6q#CCPj8T+trW!+4j8].Qj-0KCU&=rl +2<1#&J,~> +JcF^/!4i"-!G(6?rrULHFnu% +JcF^/!4i"-!G(6?rrULHFnu% +JcF^/!4i"-!G(6?rrULHFnu% +JcFd1!VU[6!!'.KrrR +JcFd1!VU[6!!'.KrrR +JcFd1!VU[6!!'.KrrR +JcFg2!SK@/!!,mUd/O48!&a0BrrMh(rVusVj2_0$XT4'2rrM.jr;Zi9RK%d~> +JcFg2!SK@/!!,mUd/O48!&a0BrrMh(rVusVj2_0$XT4'2rrM.jr;Zi9RK%d~> +JcFg2!SK@/!!,mUd/O48!&a0BrrMh(rVusVj2_0$XT4'2rrM.jr;Zi9RK%d~> +JcFj3!29;j!L*6&rrT;&FoD=?PPtO_2<2aW"60A=p4rYKp14+%!3M^iJ,~> +JcFj3!29;j!L*6&rrT;&FoD=?PPtO_2<2aW"60A=p4rYKp14+%!3M^iJ,~> +JcFj3!29;j!L*6&rrT;&FoD=?PPtO_2<2aW"60A=p4rYKp14+%!3M^iJ,~> +JcFp5!VU(&!!+t'bPq`V!3Q;$Xo/5"cc?%fp.k\7L&V2IAGlK.PFMT&~> +JcFp5!VU(&!!+t'bPq`V!3Q;$Xo/5"cc?%fp.k\7L&V2IAGlK.PFMT&~> +JcFp5!VU(&!!+t'bPq`V!3Q;$Xo/5"cc?%fp.k\7L&V2IAGlK.PFMT&~> +JcFs6!SK@/!!-Wtb5VV32#u=Jr;Zi9`r?*o!0`$7!0d?]!0`rQJ,~> +JcFs6!SK@/!!-Wtb5VV32#u=Jr;Zi9`r?*o!0`$7!0d?]!0`rQJ,~> +JcFs6!SK@/!!-Wtb5VV32#u=Jr;Zi9`r?*o!0`$7!0d?]!0`rQJ,~> +JcG!7!3Q/!!3O_6r;Zh]Sc=3~> +JcG!7!3Q/!!3O_6r;Zh]Sc=3~> +JcG!7!3Q/!!3O_6r;Zh]Sc=3~> +JcG'9!VV6G!!+t'dJj6@p@nReVu6SqFiOF`_uM[^JcGcM!0d?]!0a#SJ,~> +JcG'9!VV6G!!+t'dJj6@p@nReVu6SqFiOF`_uM[^JcGcM!0d?]!0a#SJ,~> +JcG'9!VV6G!!+t'dJj6@p@nReVu6SqFiOF`_uM[^JcGcM!0d?]!0a#SJ,~> +JcG*:!TR_h!!-WtdJj +JcG*:!TR_h!!-WtdJj +JcG*:!TR_h!!-WtdJj +JcG-;!SK@/!!&50rrCaN!!)E_rrB2"!!-6raSu@\!!'t%rrMi>Q2^iJr;Zi9T`9N~> +JcG-;!SK@/!!&50rrCaN!!)E_rrB2"!!-6raSu@\!!'t%rrMi>Q2^iJr;Zi9T`9N~> +JcG-;!SK@/!!&50rrCaN!!)E_rrB2"!!-6raSu@\!!'t%rrMi>Q2^iJr;Zi9T`9N~> +JcG0pqAG41G"2k0>`9I:(p1+0AQ2^iJr;Zi9U&TW~> +JcG0pqAG41G"2k0>`9I:(p1+0AQ2^iJr;Zi9U&TW~> +JcG0pqAG41G"2k0>`9I:(p1+0AQ2^iJr;Zi9U&TW~> +JcG3=!0d?]!B&o`rr@3@!!$R+rrMLErW!+qp2p@Gj37N*\GuWJl2LeXAGuQ/`0L?&PPkI]chdYB +\V7*aJ,~> +JcG3=!0d?]!B&o`rr@3@!!$R+rrMLErW!+qp2p@Gj37N*\GuWJl2LeXAGuQ/`0L?&PPkI]chdYB +\V7*aJ,~> +JcG3=!0d?]!B&o`rr@3@!!$R+rrMLErW!+qp2p@Gj37N*\GuWJl2LeXAGuQ/`0L?&PPkI]chdYB +\V7*aJ,~> +JcG9?!VV6G!!-X(ci4!IrVusVmJ?h_AGuQ/AH)T2P5mJncMn!1!&`HnrrMhIr;ZhkQ2^i,rVusV +j8Ju[j(&-IX8d\~> +JcG9?!VV6G!!-X(ci4!IrVusVmJ?h_AGuQ/AH)T2P5mJncMn!1!&`HnrrMhIr;ZhkQ2^i,rVusV +j8Ju[j(&-IX8d\~> +JcG9?!VV6G!!-X(ci4!IrVusVmJ?h_AGuQ/AH)T2P5mJncMn!1!&`HnrrMhIr;ZhkQ2^i,rVusV +j8Ju[j(&-IX8d\~> +JcG<@!VU(&!!/;Wci4!kr;ZiDqYpPtrVusVmJ[%eXT/@'dJj@:A,oEcjo5=Er;Zh]QN%!ZAGuQ3 +2=:GDXo/7#s*t~> +JcG<@!VU(&!!/;Wci4!kr;ZiDqYpPtrVusVmJ[%eXT/@'dJj@:A,oEcjo5=Er;Zh]QN%!ZAGuQ3 +2=:GDXo/7#s*t~> +JcG<@!VU(&!!/;Wci4!kr;ZiDqYpPtrVusVmJ[%eXT/@'dJj@:A,oEcjo5=Er;Zh]QN%!ZAGuQ3 +2=:GDXo/7#s*t~> +JcG?A!TQ'9!!'.HrrMLErVuqlqYpQKr;ZiNqu6fF2#qddeGfZ^2#qdmj8T+Cr;Zh]QN%!ZAGuQ1 +AD:Ym!!)Dfs*t~> +JcG?A!TQ'9!!'.HrrMLErVuqlqYpQKr;ZiNqu6fF2#qddeGfZ^2#qdmj8T+Cr;Zh]QN%!ZAGuQ1 +AD:Ym!!)Dfs*t~> +JcG?A!TQ'9!!'.HrrMLErVuqlqYpQKr;ZiNqu6fF2#qddeGfZ^2#qdmj8T+Cr;Zh]QN%!ZAGuQ1 +AD:Ym!!)Dfs*t~> +JcGBB!TQ'9!!'s_rrMh(rVuq/qYpTi:]:=oU&"]km:62S\b,n'`6\/?rrh_3!!'.ZrrA8]!!.fI +Qi@*H2>7(NfrY4(~> +JcGBB!TQ'9!!'s_rrMh(rVuq/qYpTi:]:=oU&"]km:62S\b,n'`6\/?rrh_3!!'.ZrrA8]!!.fI +Qi@*H2>7(NfrY4(~> +JcGBB!TQ'9!!'s_rrMh(rVuq/qYpTi:]:=oU&"]km:62S\b,n'`6\/?rrh_3!!'.ZrrA8]!!.fI +Qi@*H2>7(NfrY4(~> +JcGEC!Q6kp!!+t1c2Rd-rVusVpA4dhL&M&PAG6$+XT/?3g%PIF!!&_Xrrr+u2#q1IhZ!S>r;Zk/ +p6YdZj7`NRc`I.s~> +JcGEC!Q6kp!!+t1c2Rd-rVusVpA4dhL&M&PAG6$+XT/?3g%PIF!!&_Xrrr+u2#q1IhZ!S>r;Zk/ +p6YdZj7`NRc`I.s~> +JcGEC!Q6kp!!+t1c2Rd-rVusVpA4dhL&M&PAG6$+XT/?3g%PIF!!&_Xrrr+u2#q1IhZ!S>r;Zk/ +p6YdZj7`NRc`I.s~> +JcGHD!6"g9!B&o^rrC"9!!(^KrrCCE!!+tEp&>3_FT;Dag%kXJg&:sOXmH&kp8p1P26GX5!4i%. +!DhaDrrMhepAb2qXT*e~> +JcGHD!6"g9!B&o^rrC"9!!(^KrrCCE!!+tEp&>3_FT;Dag%kXJg&:sOXmH&kp8p1P26GX5!4i%. +!DhaDrrMhepAb2qXT*e~> +JcGHD!6"g9!B&o^rrC"9!!(^KrrCCE!!+tEp&>3_FT;Dag%kXJg&:sOXmH&kp8p1P26GX5!4i%. +!DhaDrrMhepAb2qXT*e~> +JcGKE!6"g9!G(TBrrD*X!!'S+rrMLErVur/o)Am>:B1B;chm_BXo8;#j6lpOmB&5G!0cg'rrC"9 +!!+t;S,WNB:\FbgU$DXXpANYE\c/]2`;SB:s*t~> +JcGKE!6"g9!G(TBrrD*X!!'S+rrMLErVur/o)Am>:B1B;chm_BXo8;#j6lpOmB&5G!0cg'rrC"9 +!!+t;S,WNB:\FbgU$DXXpANYE\c/]2`;SB:s*t~> +JcGKE!6"g9!G(TBrrD*X!!'S+rrMLErVur/o)Am>:B1B;chm_BXo8;#j6lpOmB&5G!0cg'rrC"9 +!!+t;S,WNB:\FbgU$DXXpANYE\c/]2`;SB:s*t~> +JcGNF!4i%.!G(oKrrMLErVuq^q>UG;rVuqPn,EU1A,lU*U#Z.P"(VB32=UVIp;D[a!!/;Nf)Gcs +2>mLT`1Hu0p4`,=!-Ri3"lmq2Klo9B!!Q/@PHEO*g&HR~> +JcGNF!4i%.!G(oKrrMLErVuq^q>UG;rVuqPn,EU1A,lU*U#Z.P"(VB32=UVIp;D[a!!/;Nf)Gcs +2>mLT`1Hu0p4`,=!-Ri3"lmq2Klo9B!!Q/@PHEO*g&HR~> +JcGNF!4i%.!G(oKrrMLErVuq^q>UG;rVuqPn,EU1A,lU*U#Z.P"(VB32=UVIp;D[a!!/;Nf)Gcs +2>mLT`1Hu0p4`,=!-Ri3"lmq2Klo9B!!Q/@PHEO*g&HR~> +JcGQG!0d?]!G(oJrrA8^!!-X(qYpQ+rVusVp?hk\fouC8!`,N2rVuqPoD\mP\V:"_!`,rle,KI/ +2>mLTc_(4FZ''s"#Y5'g"l[Y~> +JcGQG!0d?]!G(oJrrA8^!!-X(qYpQ+rVusVp?hk\fouC8!`,N2rVuqPoD\mP\V:"_!`,rle,KI/ +2>mLTc_(4FZ''s"#Y5'g"l[Y~> +JcGQG!0d?]!G(oJrrA8^!!-X(qYpQ+rVusVp?hk\fouC8!`,N2rVuqPoD\mP\V:"_!`,rle,KI/ +2>mLTc_(4FZ''s"#Y5'g"l[Y~> +JcGTH!0d?]!0bP)"-W^BmJ?h`m5=kC!70s1!qsQdqZ$YN\c1:^rs%lDg!?doFo;:A:QsJXrrqe# +!!$R'Sc8`D:\=_`rrV5kFo;:C:PGq(j88i[mDQ-/\` +JcGTH!0d?]!0bP)"-W^BmJ?h`m5=kC!70s1!qsQdqZ$YN\c1:^rs%lDg!?doFo;:A:QsJXrrqe# +!!$R'Sc8`D:\=_`rrV5kFo;:C:PGq(j88i[mDQ-/\` +JcGTH!0d?]!0bP)"-W^BmJ?h`m5=kC!70s1!qsQdqZ$YN\c1:^rs%lDg!?doFo;:A:QsJXrrqe# +!!$R'Sc8`D:\=_`rrV5kFo;:C:PGq(j88i[mDQ-/\` +JcGWI!0d?]!0bJ'!P-nZrr@cP!!%`8rrVo??17gr:PH@>bPq\g%G@ImDP2arW!"1\b>+aJ,~> +JcGWI!0d?]!0bJ'!P-nZrr@cP!!%`8rrVo??17gr:PH@>bPq\g%G@ImDP2arW!"1\b>+aJ,~> +JcGWI!0d?]!0bJ'!P-nZrr@cP!!%`8rrVo??17gr:PH@>bPq\g%G@ImDP2arW!"1\b>+aJ,~> +JcGZJ!0d?]!0b+r!71WE!B'T3rsL[a!+"9gXf\:>FbTgs!RKH;rrDGRrrMhWp](HWs8U#[rW!"R +\aB(i$cE#FA@^CH\TIlPXn)JnmC?d,!!.f,k5Tr~> +JcGZJ!0d?]!0b+r!71WE!B'T3rsL[a!+"9gXf\:>FbTgs!RKH;rrDGRrrMhWp](HWs8U#[rW!"R +\aB(i$cE#FA@^CH\TIlPXn)JnmC?d,!!.f,k5Tr~> +JcGZJ!0d?]!0b+r!71WE!B'T3rsL[a!+"9gXf\:>FbTgs!RKH;rrDGRrrMhWp](HWs8U#[rW!"R +\aB(i$cE#FA@^CH\TIlPXn)JnmC?d,!!.f,k5Tr~> +JcG]K!0d?]!0b+r!VSDM!!(@+rrD*Y!!&^Ds3(ECfld,k#L^.Y!!#g*mIU>[_uM[@qu6cE2#scJ +rs%km:B1Aj`9@5O~> +JcG]K!0d?]!0b+r!VSDM!!(@+rrD*Y!!&^Ds3(ECfld,k#L^.Y!!#g*mIU>[_uM[@qu6cE2#scJ +rs%km:B1Aj`9@5O~> +JcG]K!0d?]!0b+r!VSDM!!(@+rrD*Y!!&^Ds3(ECfld,k#L^.Y!!#g*mIU>[_uM[@qu6cE2#scJ +rs%km:B1Aj`9@5O~> +JcG`L!0d?]!0b(q!29Al!-R?%!29Al!82r'ao;C[2>dFW+TMM+g%#(Em/T$(q>UQW2#u\)rrp_k +!!#g5lMlA~> +JcG`L!0d?]!0b(q!29Al!-R?%!29Al!82r'ao;C[2>dFW+TMM+g%#(Em/T$(q>UQW2#u\)rrp_k +!!#g5lMlA~> +JcG`L!0d?]!0b(q!29Al!-R?%!29Al!82r'ao;C[2>dFW+TMM+g%#(Em/T$(q>UQW2#u\)rrp_k +!!#g5lMlA~> +JcGcM!6"g9!0b(q!9=%Y!B'9)rrZd3!&]?-a8Z26Xo&/"NpZ<8!g"lkdH!+adL +s*t~> +JcGcM!6"g9!0b(q!9=%Y!B'9)rrZd3!&]?-a8Z26Xo&/"NpZ<8!g"lkdH!+adL +s*t~> +JcGcM!6"g9!0b(q!9=%Y!B'9)rrZd3!&]?-a8Z26Xo&/"NpZ<8!g"lkdH!+adL +s*t~> +Jc>cN`;KZ9PIphpAGuQ/XlKE]mJ[(cPC`bRrrMM(r;ZhOmf*:f:\F_h:B:+Srrq(u!!&_dmf.e~> +Jc>cN`;KZ9PIphpAGuQ/XlKE]mJ[(cPC`bRrrMM(r;ZhOmf*:f:\F_h:B:+Srrq(u!!&_dmf.e~> +Jc>cN`;KZ9PIphpAGuQ/XlKE]mJ[(cPC`bRrrMM(r;ZhOmf*:f:\F_h:B:+Srrq(u!!&_dmf.e~> +Jc>_gr;Zh]]DhlLrVupoir9"hrVur:JcEdj#gY@.>p]OO2=9o5!ndR;p&>)e!86W:"OBjD:YG4: +J,~> +Jc>_gr;Zh]]DhlLrVupoir9"hrVur:JcEdj#gY@.>p]OO2=9o5!ndR;p&>)e!86W:"OBjD:YG4: +J,~> +Jc>_gr;Zh]]DhlLrVupoir9"hrVur:JcEdj#gY@.>p]OO2=9o5!ndR;p&>)e!86W:"OBjD:YG4: +J,~> +K)Yhsr;Zh]]Dhp*2?!RUg#E#3AGuQ/p4<7brs4eg!3Q:3!+5-^rrUjRXnD\qXT7& +K)Yhsr;Zh]]Dhp*2?!RUg#E#3AGuQ/p4<7brs4eg!3Q:3!+5-^rrUjRXnD\qXT7& +K)Yhsr;Zh]]Dhp*2?!RUg#E#3AGuQ/p4<7brs4eg!3Q:3!+5-^rrUjRXnD\qXT7& +KDtu42?!RVAG3Y8!29Al!/9G4!:Bac!/7rrUjRXnD\qXT7&:rrgY* +!0d-Is*t~> +KDtu42?!RVAG3Y8!29Al!/9G4!:Bac!/7rrUjRXnD\qXT7&:rrgY* +!0d-Is*t~> +KDtu42?!RVAG3Y8!29Al!/9G4!:Bac!/7rrUjRXnD\qXT7&:rrgY* +!0d-Is*t~> +K`;)52?!RVAG3Y8!:Bac!B'9(rrh_C!!'s8rr]A'!3N4""SQ@+AG56e!pou1p&>)I!9<2@"QO"m +AG5WpJ,~> +K`;)52?!RVAG3Y8!:Bac!B'9(rrh_C!!'s8rr]A'!3N4""SQ@+AG56e!pou1p&>)I!9<2@"QO"m +AG5WpJ,~> +K`;)52?!RVAG3Y8!:Bac!B'9(rrh_C!!'s8rr]A'!3N4""SQ@+AG56e!pou1p&>)I!9<2@"QO"m +AG5WpJ,~> +L&V2I:]:=pAG44H!9 +L&V2I:]:=pAG44H!9 +L&V2I:]:=pAG44H!9 +LAq;JAGuQ02<2m[!lP)&oD\gDrVuspp4NAGj%oRQ!MT4irr_t*!0cLD!j)HVp\t;K!3P8\"867* +FnG]a~> +LAq;JAGuQ02<2m[!lP)&oD\gDrVuspp4NAGj%oRQ!MT4irr_t*!0cLD!j)HVp\t;K!3P8\"867* +FnG]a~> +LAq;JAGuQ02<2m[!lP)&oD\gDrVuspp4NAGj%oRQ!MT4irr_t*!0cLD!j)HVp\t;K!3P8\"867* +FnG]a~> +LAq7;rVusVj3.H&g&:sOPP"kTFoD@@`.@php7_Ba!Dh%FrrR +LAq7;rVusVj3.H&g&:sOPP"kTFoD@@`.@php7_Ba!Dh%FrrR +LAq7;rVusVj3.H&g&:sOPP"kTFoD@@`.@php7_Ba!Dh%FrrR +L]7@Jr;ZiDbPqV'2?!RUAG,s&ci*nEA:ad[rrLe`qu?b?mBZ`oXT2o*jSo86FoD@AFlWH#!UYU? +!!-W`iVs#R:B8`7s*t~> +L]7@Jr;ZiDbPqV'2?!RUAG,s&ci*nEA:ad[rrLe`qu?b?mBZ`oXT2o*jSo86FoD@AFlWH#!UYU? +!!-W`iVs#R:B8`7s*t~> +L]7@Jr;ZiDbPqV'2?!RUAG,s&ci*nEA:ad[rrLe`qu?b?mBZ`oXT2o*jSo86FoD@AFlWH#!UYU? +!!-W`iVs#R:B8`7s*t~> +M#RInr;Zi9bPqV'2?!RVAG5]r!)NRo!82r'r;Qf"2>dFTXnK1&"60A=mH+?_fl[8pFhqSg!)I`[ +A,lU?_0#_XFkPdS"60A=p@nT;~> +M#RInr;Zi9bPqV'2?!RVAG5]r!)NRo!82r'r;Qf"2>dFTXnK1&"60A=mH+?_fl[8pFhqSg!)I`[ +A,lU?_0#_XFkPdS"60A=p@nT;~> +M#RInr;Zi9bPqV'2?!RVAG5]r!)NRo!82r'r;Qf"2>dFTXnK1&"60A=mH+?_fl[8pFhqSg!)I`[ +A,lU?_0#_XFkPdS"60A=p@nT;~> +M>mS9r;Zh]bPqV'2?!RVAG5]r!6"j:!-NkmqYpT`Fo24?28ls'!d+L]k5PVPP5kSng&D!P`.e-i +!Hl?[rrq(u!!%0%j8T1_!0d0WJ,~> +M>mS9r;Zh]bPqV'2?!RVAG5]r!6"j:!-NkmqYpT`Fo24?28ls'!d+L]k5PVPP5kSng&D!P`.e-i +!Hl?[rrq(u!!%0%j8T1_!0d0WJ,~> +M>mS9r;Zh]bPqV'2?!RVAG5]r!6"j:!-NkmqYpT`Fo24?28ls'!d+L]k5PVPP5kSng&D!P`.e-i +!Hl?[rrq(u!!%0%j8T1_!0d0WJ,~> +MZ3_E2?!RUL!0Jsj#-f9!G(orrr>jo!!(]'s7lTpcVOH=!DhadrrUjRFm&c.m?7MM:W3)/!<@9< +rrp_E!!&5Mjo5GV:B9eWs*t~> +MZ3_E2?!RUL!0Jsj#-f9!G(orrr>jo!!(]'s7lTpcVOH=!DhadrrUjRFm&c.m?7MM:W3)/!<@9< +rrp_E!!&5Mjo5GV:B9eWs*t~> +MZ3_E2?!RUL!0Jsj#-f9!G(orrr>jo!!(]'s7lTpcVOH=!DhadrrUjRFm&c.m?7MM:W3)/!<@9< +rrp_E!!&5Mjo5GV:B9eWs*t~> +MuNhOAGuQ0AG47I!TQ':!!+t;o`"p0rVuq@JcGHD!qr`Rr;ZiN\c2_R!86W:"no%u!)LQ.rrVlo +Fnbn>`(p@5PO7N4!lP)&q#>j~> +MuNhOAGuQ0AG47I!TQ':!!+t;o`"p0rVuq@JcGHD!qr`Rr;ZiN\c2_R!86W:"no%u!)LQ.rrVlo +Fnbn>`(p@5PO7N4!lP)&q#>j~> +MuNhOAGuQ0AG47I!TQ':!!+t;o`"p0rVuq@JcGHD!qr`Rr;ZiN\c2_R!86W:"no%u!)LQ.rrVlo +Fnbn>`(p@5PO7N4!lP)&q#>j~> +MuNd@rVusVmEGS2j#-f9!B&p/rr>jo!!)&1s7H +MuNd@rVusVmEGS2j#-f9!B&p/rr>jo!!)&1s7H +MuNd@rVusVmEGS2j#-f9!B&p/rr>jo!!)&1s7H +N;imrr;ZiNbl7_(2?!RV2<4<.!6"j:!0`!6nc&[DFlU%4!j)I@li..!2#oM9p@\Fef`8/Hrs&2! +2#oM9p?DSYT`E%,s*t~> +N;imrr;ZiNbl7_(2?!RV2<4<.!6"j:!0`!6nc&[DFlU%4!j)I@li..!2#oM9p@\Fef`8/Hrs&2! +2#oM9p?DSYT`E%,s*t~> +N;imrr;ZiNbl7_(2?!RV2<4<.!6"j:!0`!6nc&[DFlU%4!j)I@li..!2#oM9p@\Fef`8/Hrs&2! +2#oM9p?DSYT`E%,s*t~> +NW0"=r;Zi.bl7_(2?!RV2<49-!)NRo!98Y1VZ-^?!;>g["iO1:!0d-JrrT_2\aob(p8p1P27`#P +!oj9Eq>Ys~> +NW0"=r;Zi.bl7_(2?!RV2<49-!)NRo!98Y1VZ-^?!;>g["iO1:!0d-JrrT_2\aob(p8p1P27`#P +!oj9Eq>Ys~> +NW0"=r;Zi.bl7_(2?!RV2<49-!)NRo!98Y1VZ-^?!;>g["iO1:!0d-JrrT_2\aob(p8p1P27`#P +!oj9Eq>Ys~> +NrK.R:]:=oPKa%-j#-f9!B&p.rrC":!!%.ms/#_r!+bm)!qt=#qYp`F:B1BYmIC2XXT7&DrrqeR +!!#g5li-tcAGQ7U~> +NrK.R:]:=oPKa%-j#-f9!B&p.rrC":!!%.ms/#_r!+bm)!qt=#qYp`F:B1BYmIC2XXT7&DrrqeR +!!#g5li-tcAGQ7U~> +NrK.R:]:=oPKa%-j#-f9!B&p.rrC":!!%.ms/#_r!+bm)!qt=#qYp`F:B1BYmIC2XXT7&DrrqeR +!!#g5li-tcAGQ7U~> +NrK*5rVut0p<s8Ubp!!%0/nG`XOJcN@T +n,ERYP5kSY`;BQ:fu24sp\t8:!;ZYF~> +NrK*5rVut0p<s8Ubp!!%0/nG`XOJcN@T +n,ERYP5kSY`;BQ:fu24sp\t8:!;ZYF~> +NrK*5rVut0p<s8Ubp!!%0/nG`XOJcN@T +n,ERYP5kSY`;BQ:fu24sp\t8:!;ZYF~> +O8f3jrVusVj3.H*cN!rUp@8._g&:sOFb0RhrrUjRXo/20p2p?8Ffh?5!!&p>!!%/pnG`O8:](1n +U%[sT$12j8!-Qupp8p.L!!,g4q>UM=!;?9hJ,~> +O8f3jrVusVj3.H*cN!rUp@8._g&:sOFb0RhrrUjRXo/20p2p?8Ffh?5!!&p>!!%/pnG`O8:](1n +U%[sT$12j8!-Qupp8p.L!!,g4q>UM=!;?9hJ,~> +O8f3jrVusVj3.H*cN!rUp@8._g&:sOFb0RhrrUjRXo/20p2p?8Ffh?5!!&p>!!%/pnG`O8:](1n +U%[sT$12j8!-Qupp8p.L!!,g4q>UM=!;?9hJ,~> +OT,=@r;Zi9ao;F\AG5Nm!/:CP!8690!7-5r"5,PqmEGS3f`8/PrrZd3AF9?q"h?Jj!+adOrsFqi +!/7PnTeugGj6lpWfl[8pEDlicDMsE`!!&5ZrrSkog%t`!~> +OT,=@r;Zi9ao;F\AG5Nm!/:CP!8690!7-5r"5,PqmEGS3f`8/PrrZd3AF9?q"h?Jj!+adOrsFqi +!/7PnTeugGj6lpWfl[8pEDlicDMsE`!!&5ZrrSkog%t`!~> +OT,=@r;Zi9ao;F\AG5Nm!/:CP!8690!7-5r"5,PqmEGS3f`8/PrrZd3AF9?q"h?Jj!+adOrsFqi +!/7PnTeugGj6lpWfl[8pEDlicDMsE`!!&5ZrrSkog%t`!~> +OoGIU:]:=oPI:DjmJ[(c:Z)0TcN$bCp4WGGPPtO_Fi;T*!ndRUrVlu%!+bg#rr_:3.IHU("0DQ! +j8Ju\p6,Jep?hk`fl[8pA@VTQ"0+uoPPb@]K`LN:s*t~> +OoGIU:]:=oPI:DjmJ[(c:Z)0TcN$bCp4WGGPPtO_Fi;T*!ndRUrVlu%!+bg#rr_:3.IHU("0DQ! +j8Ju\p6,Jep?hk`fl[8pA@VTQ"0+uoPPb@]K`LN:s*t~> +OoGIU:]:=oPI:DjmJ[(c:Z)0TcN$bCp4WGGPPtO_Fi;T*!ndRUrVlu%!+bg#rr_:3.IHU("0DQ! +j8Ju\p6,Jep?hk`fl[8pA@VTQ"0+uoPPb@]K`LN:s*t~> +OoGE8rVut0p9jo#PPtO^`8CRpL&M&Pj+[L5mJ?kb250'XrrUjRU&G#k2$!%>rrT;&POSSSirCt( +qYpV\!28cZ!j)H&qS*-B3rmt3rrI6Bq>Ys~> +OoGE8rVut0p9jo#PPtO^`8CRpL&M&Pj+[L5mJ?kb250'XrrUjRU&G#k2$!%>rrT;&POSSSirCt( +qYpV\!28cZ!j)H&qS*-B3rmt3rrI6Bq>Ys~> +OoGE8rVut0p9jo#PPtO^`8CRpL&M&Pj+[L5mJ?kb250'XrrUjRU&G#k2$!%>rrT;&POSSSirCt( +qYpV\!28cZ!j)H&qS*-B3rmt3rrI6Bq>Ys~> +P5bO.rVusVj0emip,)gM2;eE6mJ[(cA;'sap8p4K!!6]AmF;.;p&K77rrULHPP>+W2=UVIP5rPs +rr_sP!;>g[!])77q7d!+!-S5>!DbTKs*t~> +P5bO.rVusVj0emip,)gM2;eE6mJ[(cA;'sap8p4K!!6]AmF;.;p&K77rrULHPP>+W2=UVIP5rPs +rr_sP!;>g[!])77q7d!+!-S5>!DbTKs*t~> +P5bO.rVusVj0emip,)gM2;eE6mJ[(cA;'sap8p4K!!6]AmF;.;p&K77rrULHPP>+W2=UVIP5rPs +rr_sP!;>g[!])77q7d!+!-S5>!DbTKs*t~> +PQ([N2?!RU\[;A:\c)R/Xl'-YU&G#l`.@ph`-(kU!enSdf)GbH2?*UWXT7&KrrSAaj73-M!)N@h +!hfV4mf*@7!,hPG!_WOerr3&e!-S,;J,~> +PQ([N2?!RU\[;A:\c)R/Xl'-YU&G#l`.@ph`-(kU!enSdf)GbH2?*UWXT7&KrrSAaj73-M!)N@h +!hfV4mf*@7!,hPG!_WOerr3&e!-S,;J,~> +PQ([N2?!RU\[;A:\c)R/Xl'-YU&G#l`.@ph`-(kU!enSdf)GbH2?*UWXT7&KrrSAaj73-M!)N@h +!hfV4mf*@7!,hPG!_WOerr3&e!-S,;J,~> +PQ(W*rVuqPZi:#$rVurchu8p\t;s!86rC!ndR; +p\tYs~> +PQ(W*rVuqPZi:#$rVurchu8p\t;s!86rC!ndR; +p\tYs~> +PQ(W*rVuqPZi:#$rVurchu8p\t;s!86rC!ndR; +p\tYs~> +PlC`orVusVp9ai"g&:sOPMcB?`;T`:Tn37@rrLH"q>^N6f`)3&!0dH_FTD.0rrT;&g%,.Ef`8/K +rrVloFmf82XT5-j^B/ueg&D!QFTCIts*t~> +PlC`orVusVp9ai"g&:sOPMcB?`;T`:Tn37@rrLH"q>^N6f`)3&!0dH_FTD.0rrT;&g%,.Ef`8/K +rrVloFmf82XT5-j^B/ueg&D!QFTCIts*t~> +PlC`orVusVp9ai"g&:sOPMcB?`;T`:Tn37@rrLH"q>^N6f`)3&!0dH_FTD.0rrT;&g%,.Ef`8/K +rrVloFmf82XT5-j^B/ueg&D!QFTCIts*t~> +Q2^mP2?!RUca3WOL&M&Pg#)f0:]:=om=G<5rrVo4AGlK.p=K?E2$EXQXT7&KrrSAag%,.Ef`8/K +rrVloFmf82XT5-j^B]>jg&M*>!+bm)J,~> +Q2^mP2?!RUca3WOL&M&Pg#)f0:]:=om=G<5rrVo4AGlK.p=K?E2$EXQXT7&KrrSAag%,.Ef`8/K +rrVloFmf82XT5-j^B]>jg&M*>!+bm)J,~> +Q2^mP2?!RUca3WOL&M&Pg#)f0:]:=om=G<5rrVo4AGlK.p=K?E2$EXQXT7&KrrSAag%,.Ef`8/K +rrVloFmf82XT5-j^B]>jg&M*>!+bm)J,~> +Q2^i,rVuqlZi:%!rVupohu<]0rVuqPJcGEC"7 +Q2^i,rVuqlZi:%!rVupohu<]0rVuqPJcGEC"7 +Q2^i,rVuqlZi:%!rVupohu<]0rVuqPJcGEC"7 +QN$rqrVusppUN7!/9qBs#'QN!hfV? +mf*@A!,hPG#!2hbs4IBJp]#a~> +QN$rqrVusppUN7!/9qBs#'QN!hfV? +mf*@A!,hPG#!2hbs4IBJp]#a~> +QN$rqrVusppUN7!/9qBs#'QN!hfV? +mf*@A!,hPG#!2hbs4IBJp]#a~> +Qi@*R2?!RUg!]m'p1+/6p?)AT:]:=op>GrNmJ[(c:P&Q(rr`=4PI]B3rs#S*FoS-8PPY:]p,)j' +nG`QR!4hq*"77s'p?hk]9`VHo^B]r&PQ1>e!71E>J,~> +Qi@*R2?!RUg!]m'p1+/6p?)AT:]:=op>GrNmJ[(c:P&Q(rr`=4PI]B3rs#S*FoS-8PPY:]p,)j' +nG`QR!4hq*"77s'p?hk]9`VHo^B]r&PQ1>e!71E>J,~> +Qi@*R2?!RUg!]m'p1+/6p?)AT:]:=op>GrNmJ[(c:P&Q(rr`=4PI]B3rs#S*FoS-8PPY:]p,)j' +nG`QR!4hq*"77s'p?hk]9`VHo^B]r&PQ1>e!71E>J,~> +Qi@&.rVuqldf0@.2?!RUFm&c)j8K#YPMcB?PPtO^`.@sIrrCaL!!H)OXj?%rrs*'7\b8f!PP4tT +"63/WU$r!`m56c]qu6clA,raurr^1>9=Xl6#HB0Pj8Y;CL%bOs~> +Qi@&.rVuqldf0@.2?!RUFm&c)j8K#YPMcB?PPtO^`.@sIrrCaL!!H)OXj?%rrs*'7\b8f!PP4tT +"63/WU$r!`m56c]qu6clA,raurr^1>9=Xl6#HB0Pj8Y;CL%bOs~> +Qi@&.rVuqldf0@.2?!RUFm&c)j8K#YPMcB?PPtO^`.@sIrrCaL!!H)OXj?%rrs*'7\b8f!PP4tT +"63/WU$r!`m56c]qu6clA,raurr^1>9=Xl6#HB0Pj8Y;CL%bOs~> +R/[0)rVusVp='$A`;BT8\``tmPPtO^cf"g'mJ[(c:P&Q(rrBV&!!H)?TrmAJrsn'H!70\$!&^Ig +\V1"`PO8AP_uM[5rVlueA,p0*rr[rT9<.s*#b*4BXoH<>:\OM^J,~> +R/[0)rVusVp='$A`;BT8\``tmPPtO^cf"g'mJ[(c:P&Q(rrBV&!!H)?TrmAJrsn'H!70\$!&^Ig +\V1"`PO8AP_uM[5rVlueA,p0*rr[rT9<.s*#b*4BXoH<>:\OM^J,~> +R/[0)rVusVp='$A`;BT8\``tmPPtO^cf"g'mJ[(c:P&Q(rrBV&!!H)?TrmAJrsn'H!70\$!&^Ig +\V1"`PO8AP_uM[5rVlueA,p0*rr[rT9<.s*#b*4BXoH<>:\OM^J,~> +RK!<]2?!RUcdVmoPPkI^2:(Fb"#U&Y:Z)0PXo8;#XdT1hrlP0AgQQ1>!!'.nrrp^K2<4Coqu?an +^&6OaXmP]Z$H)oE:SFn5!!$R'lMhCgK`D*GJp9og!29G2!&`g0s*t~> +RK!<]2?!RUcdVmoPPkI^2:(Fb"#U&Y:Z)0PXo8;#XdT1hr5ns?gQQ1>!!'.nrrp^K2<4Coqu?an +^&6OaXmP]Z$H)oE:SFn5!!$R'lMhCgK`D*GJp9og!29G2!&`g0s*t~> +RK!<]2?!RUcdVmoPPkI^2:(Fb"#U&Y:Z)0PXo8;#Xd]7jrqab:!o&oLo)Jcmo`#*@!&`g1PPbC] +:VH\Z!Nkb[rsH[E!)K;jFT;DPp?MYgp4WJH97hC]!!&_m_uM[Tp&BO~> +RK!8NrVuqPeGfRCAGlK/AE2hP!71WE!28?N"njeR!&aJ$s4mVVft!;hp]( +RK!8NrVuqPeGfRCAGlK/AE2hP!71WE!28?N"njeR!&aJ$s4mVVft!;hp]( +RK!8NrVuqPeGfRCAGlK/AE2hP!71WE!28?N"njeR!&aJ$s4mVVft!;hp]( +Rf +Rf +Rf +Rf<@urVur/ec,W[qu?`!jSoAV2#mVehZ!\r:B:*>s3L]Fj73-LXmlAk`5qr]p6,J6cgq*d~> +Rf<@urVur/ec,W[qu?`!jSoAV2#mVehZ!\r:B:*>s3L]Fj73-LXmlAk`5qr]p6,J6cgq*d~> +Rf<@urVur/ec,W[qu?`!jSoAV2#mVehZ!\r:B:*>s3L]Fj73-LXmlAk`5qr]p6,J6cgq*d~> +S,WK!rVuq/f)GdEL&CuP2:(=_!6"j:!4gnb!98Y1gA_0Ojo5P +S,WK!rVuq/f)GdEL&CuP2:(=_!6"j:!4gnb!98Y1^&J;iXck"1:SI]g!6"ih!;=P7"QO"m:ZM!F +J,~> +S,WK!rVuq/f)GdEL&CuP2:(=_!6"j:!4gnb!98Y1^&J;iXck"1:SI]g!6"ih!;=P7"QO"m:ZM!F +J,~> +SGrW`2?!RUg"66)j%oUR!G(TWrrA8^!!)D;s0Ve,rqtgV"RT_"27^O&"K_Y(L%b$9J,~> +SGrW`2?!RUg"66)j%oUR!G(TWrrA8^!!)D;s0Ve+ro3q\m:62S\\S4JXT/?Tp@/*4~> +SGrW`2?!RUg"66)j%oUR!G(TWrrA8^!!)D;s-3Ndm:62S\\S4JXT/?Tp@/*4~> +SGrS_rVuq^fDbj +SGrS_rVuq^fDbj +SGrS_rVuq^fDbj +Sc8]WrVusVmFM:?K`D*1`8LXqci*nE\UjdBrrqG*!!&5MaSuFsFT;DqmHsq(~> +Sc8]WrVusVmFM:?K`D*1`8LXqci*nE\UjdBrrqG*!!&5MaSuFsFT;DqmHsq(~> +Sc8]WrVusVmFM:?K`D*1`8LXqci*nE\UjdBrrqG*!!&5MaSuFsFT;DqmHsq(~> +Sc8\4rVur#ec,aF:LrMCrrA8^!!)&1s,R*_`(p@5PM+1["ke"u!+adKs*t~> +Sc8\4rVur#ec,aF:LrMCrrA8^!!)&1s,R*_`(p@5PM+1["ke"u!+adKs*t~> +Sc8\4rVur#ec,aF:LrMCrrA8^!!)&1s,R*_`(p@5PM+1["ke"u!+adKs*t~> +T)SfDrVupoe,KI9p>5fO2#mVPJcCZ.#/j:;!+a%Adf0OF\PE2*:W2MtJ,~> +T)SfDrVupoe,KI9p>5fO2#mVPJcCZ.#/j:;!+a%Adf0OF\PE2*:W2MtJ,~> +T)SfDrVupoe,KI9p>5fO2#mVPJcCZ.#/j:;!+a%Adf0OF\PE2*:W2MtJ,~> +T)Se$rVur:YQ"U_rVuqlJcCT,#/k$P!&]tdfDbpG`.e0j!Hm)Ys*t~> +T)Se$rVur:YQ"U_rVuqlJcCT,#/k$P!&]tdfDbpG`.e0j!Hm)Ys*t~> +T)Se$rVur:YQ"U_rVuqlJcCT,#/k$P!&]tdfDbpG`.e0j!Hm)Ys*t~> +TDno0rVuq@Y5\L(rVurOV#LGoJcFj3#ih++!!"m1`9lF]!q!OPrW!!qU$^tAJ,~> +TDno0rVuq@Y5\L(rVurOV#LGnJcFj3#ih++!!"m1`9lF]!q!OPrW!!qU$^tAJ,~> +TDno0rVuq@Y5\L(rVurOV>gSqr.4n0rs7YK2#mV6KuEB8rrVSuL&M&R:SI1;s*t~> +VuHg@L!T\s!)NRo!84OT"(VB321bd[rrUN12?!RX:Qr?Bk5PP:\V3iY!!5rij5U)h~> +VuHg@L!T\s!)NRo!84OT"(VB321bd[rrUN12?!RX:Qr?Bk5PP:\V3iY!!5rij5U)h~> +VuHg@L!T\s!)NRo!84OT"(VB321bd[rrUN12?!RX:Qr?Bk5PP:\V3iY!!5rij5U)h~> +VuI!E!!#g*pA`)1!!%/ErrDcl!!%_(s+11Ps5U5(qu?q3Ffhe!g$SM5#34CiXeBl5r;ZpWKt67$ +s*t~> +VuI!E!!#g*pA`)1!!%/ErrDcl!!%_(s+11Ps5U5(qu?q3Ffhe!g$SM5#34CiXeBl5r;ZpWKt67$ +s*t~> +VuI!E!!#g*pA`)1!!%/ErrDcl!!%_(s+11Ps5U5(qu?q3Ffhe!g$SM5#34CiXeBl5r;ZpWKt67$ +s*t~> +VuHb!qu?bX0E(qOmB6Hh`;T`:`.@r>s8;m!ft!;hkl:iDFeQb6g])d~> +VuHb!qu?bX0E(qOmB6Hh`;T`:`.@r>s8;m!ft!;hkl:iDFeQb6g])d~> +VuHb!qu?bX0E(qOmB6Hh`;T`:`.@r>s8;m!ft!;hkl:iDFeQb6g])d~> +VuHb!p](;Xi;WiOmEkk5PPtO^m=G;*rrSm)p>Z)Up=[coXbHIk"d?'jce8$Cs*t~> +VuHb!p](;Xi;WiOmEkk5PPtO^m=G;*rrSm)p>Z)Up=[coXbHIk"d?'jce8$Cs*t~> +VuHb!p](;Xi;WiOmEkk5PPtO^m=G;*rrSm)p>Z)Up=[coXbHIk"d?'jce8$Cs*t~> +VuHb!p](@MXmP0K"5-I-p +VuHb!p](@MXmP0K"5-I-p +VuHb!p](@MXmP0K"5-I-p +VuHb8o`,#Hg#rA9p65IU!27j@!:Bac!28HQ!md)(JcE@^"4$s)j.H@%~> +VuHb8o`,#Hg#rA9p65IU!27j@!:Bac!28HQ!md)(JcE@^"4$s)j.H@%~> +VuHb8o`,#Hg#rA9p65IU!27j@!:Bac!28HQ!md)(JcE@^"4$s)j.H@%~> +VuHbMo)Jcml2Ldp2>dFSmF2(8`;T`:cf>$-:B38SJcEF`"626=`1I!Z~> +VuHbMo)Jcml2Ldp2>dFSmF2(8`;T`:cf>$-:B38SJcEF`"626=`1I!Z~> +VuHbMo)Jcml2Ldp2>dFSmF2(8`;T`:cf>$-:B38SJcEF`"626=`1I!Z~> +VuHbMoDelTlMgnFFo24?FlUpM!0dB^!;>LR!3Q5#!-Nkm^Ae;q2#tRcs*t~> +VuHbMoDelTlMgnFFo24?FlUpM!0dB^!;>LR!3Q5#!-Nkm^Ae;q2#tRcs*t~> +VuHbMoDelTlMgnFFo24?FlUpM!0dB^!;>LR!3Q5#!-Nkm^Ae;q2#tRcs*t~> +VuHbMo`,!1li."ZU&4lk27_*6"&AmsAE +VuHbMo`,!1li."ZU&4lk27_*6"&AmsAE +VuHbMo`,!1li."ZU&4lk27_*6"&AmsAE +VuHbjpAb4Ocg1T3`&7Gm!JU6orrDHc!!&5DrrA8^!!&^Ds1eR9p1+/eS,\!~> +VuHbjpAb4Ocg1T3`&7Gm!JU6orrDHc!!&5DrrA8^!!&^Ds1eR9p1+/eS,\!~> +VuHbjpAb4Ocg1T3`&7Gm!JU6orrDHc!!&5DrrA8^!!&^Ds1eR9p1+/eS,\!~> +VZ6Dk!B&p(rrLe`qu?ang!9Ttci*nE`9%"!g&:sP2>2V$_#FN1A,qg^s*t~> +VZ6Dk!B&p(rrLe`qu?ang!9Ttci*nE`9%"!g&:sP2>2V$_#FN1A,qg^s*t~> +VZ6Dk!B&p(rrLe`qu?ang!9Ttci*nE`9%"!g&:sP2>2V$_#FN1A,qg^s*t~> +VZ6Gl!G(okrrMM@qu?aTXj$eFU&G#lmH+?JAGuQ/\Ujdrrr_t*!0`iNJ,~> +VZ6Gl!G(okrrMM@qu?aTXj$eFU&G#lmH+?JAGuQ/\Ujdrrr_t*!0`iNJ,~> +VZ6Gl!G(okrrMM@qu?aTXj$eFU&G#lmH+?JAGuQ/\Ujdrrr_t*!0`iNJ,~> +VZ6Jm!Hn,&rr?U-!!/;NbPqZe!!"n +VZ6Jm!Hn,&rr?U-!!/;NbPqZe!!"n +VZ6Jm!Hn,&rr?U-!!/;NbPqZe!!"n +_>a]!fu1"pU%rg7PHCstg"H6%!+c!-!0c^J!87>O!G'm*s8DuuFlr])m5=kC!82r'_>aZ3A,p06 +R/_[~> +_>a]!fu1"pU%rg7PHCstg"H6%!+c!-!0c^J!87>O!G'm*s8DuuFlr])m5=kC!82r'_>aZ3A,p06 +R/_[~> +_>a]!fu1"pU%rg7PHCstg"H6%!+c!-!0c^J!87>O!G'm*s8DuuFlr])m5=kC!82r'_>aZ3A,p06 +R/_[~> +a8Z;&`3"/XlMq,HFeQA!s$Zec!4h=n!d.;WaSu8#rVur#k5PF8rVuq^JcERd"SQ@+AG2AiJ,~> +a8Z;&`3"/XlMq,HFeQA!s$Zec!4h=n!d.;WaSu8#rVur#k5PF8rVuq^JcERd"SQ@+AG2AiJ,~> +a8Z;&`3"/XlMq,HFeQA!s$Zec!4h=n!d.;WaSu8#rVur#k5PF8rVuq^JcERd"SQ@+AG2AiJ,~> +bPq\)\V2p>!!G0%PHDCpg%kXQj4W,(XeBl5q#CF,`971#p;d15`;T`:g#rA8g&:sP2>2V$_>aW) +2.ZEHs*t~> +bPq\)\V2p>!!G0%PHDCpg%kXQj4W,(XeBl5q#CF,`971#p;d15`;T`:g#rA8g&:sP2>2V$_>aW) +2.ZEHs*t~> +bPq\)\V2p>!!G0%PHDCpg%kXQj4W,(XeBl5q#CF,`971#p;d15`;T`:g#rA8g&:sP2>2V$_>aW) +2.ZEHs*t~> +cMmslP>D/X">tn8g%P:B!SO1GFTR98p@nRhft!;BrW!$KKuE\errAbl!!)EMrrMghrVur:JcELb +!U]TGs*t~> +cMmslP>D/X">tn8g%P:B!SO1GFTR98p@nRhft!;BrW!$KKuE\errAbl!!)EMrrMghrVur:JcELb +!U]TGs*t~> +cMmslP>D/X">tn8g%P:B!SO1GFTR98p@nRhft!;BrW!$KKuE\errAbl!!)EMrrMghrVur:JcELb +!U]TGs*t~> +dJj:.Tf)fL!en2Pp\t9]Fnu(=28o.e"89Zs2?!RVPL$H4"*FSD2U&G#lFb0RDs3Udr~> +dJj:.Tf)fL!en2Pp\t9]Fnu(=28o.e"89Zs2?!RVPL$H4"*FSD2U&G#lFb0RDs3Udr~> +dJj:.Tf)fL!en2Pp\t9]Fnu(=28o.e"89Zs2?!RVPL$H4"*FSD2U&G#lFb0RDs3Udr~> +e,KWjA,lTePL&n$%-'2FFjKd]s5T:C!0csQ#NMLR!!#fsp9O]#2#mW!kl1Y9r;ZibJcC<$d/SU~> +e,KWjA,lTePL&n$%-'2FFjKd]s5T:C!0csQ#NMLR!!#fsp9O]#2#mW!kl1Y9r;ZibJcC<$d/SU~> +e,KWjA,lTePL&n$%-'2FFjKd]s5T:C!0csQ#NMLR!!#fsp9O]#2#mW!kl1Y9r;ZibJcC<$d/SU~> +f)H!K\PE2*Fi="Frr_sP!3Q+t"626=\aTP&c]\>/250EFrrDcl!!'.brrBV/!!'-Ps+13rs*t~> +f)H!K\PE2*Fi="Frr_sP!3Q+t"626=\aTP&c]\>/250EFrrDcl!!'.brrBV/!!'-Ps+13rs*t~> +f)H!K\PE2*Fi="Frr_sP!3Q+t"626=\aTP&c]\>/250EFrrDcl!!'.brrBV/!!'-Ps+13rs*t~> +fDc#m:B1BYj7*'MP5q +fDc#m:B1BYj7*'MP5q +fDc#m:B1BYj7*'MP5q +g&D6/A,lUnmI1&Wm/TrUp\t;s!28cZ"no&U!&_^)rrBV/!!(^6rrDG;s+13qs*t~> +g&D6/A,lUnmI1&Wm/TrUp\t;s!28cZ"no&U!&_^)rrBV/!!(^6rrDG;s+13qs*t~> +g&D6/A,lUnmI1&Wm/TrUp\t;s!28cZ"no&U!&_^)rrBV/!!(^6rrDG;s+13qs*t~> +g]%HNT`>(8mHsoT_uQM)rrVloAEs0up7VHdFmZd?!29AlJcC<$YlB4~> +g]%HNT`>(8mHsoT_uQM)rrVloAEs0up7VHdFmZd?!29AlJcC<$YlB4~> +g]%HNT`>(8mHsoT_uQM)rrVloAEs0up7VHdFmZd?!29AlJcC<$YlB4~> +h#@N;:B38uli.$g!87&F!Fu2orrh@m!&_^,rr[BD!&]?-JcDtSJ,~> +h#@N;:B38uli.$g!87&F!Fu2orrh@m!&_^,rr[BD!&]?-JcDtSJ,~> +h#@N;:B38uli.$g!87&F!Fu2orrh@m!&_^,rr[BD!&]?-JcDtSJ,~> +h>[Vr!!%`HlMgpf!87&F!HeD)rr]A'!0b(q"&AmsFb0RDs02NR~> +h>[Vr!!%`HlMgpf!87&F!HeD)rr]A'!0b(q"&AmsFb0RDs02NR~> +h>[Vr!!%`HlMgpf!87&F!HeD)rr]A'!0b(q"&AmsFb0RDs02NR~> +hZ!\O!!'t$rrT;&g%G@GA,t`k"QM?>FnWQLrVuqlJcC<$YlB4~> +hZ!\O!!'t$rrT;&g%G@GA,t`k"QM?>FnWQLrVuqlJcC<$YlB4~> +hZ!\O!!'t$rrT;&g%G@GA,t`k"QM?>FnWQLrVuqlJcC<$YlB4~> +hu +hu +hu +i;WnC!)MY;rr_rp2>6eE!j)I)j8T8UFT>tG_>aMgrVurEJcDkP"867*Ko#bZ~> +i;WnC!)MY;rr_rp2>6eE!j)I)j8T8UFT>tG_>aMgrVurEJcDkP"867*Ko#bZ~> +i;WnC!)MY;rr_rp2>6eE!j)I)j8T8UFT>tG_>aMgrVurEJcDkP"867*Ko#bZ~> +iVs"^!)N=LrrSkoPPG.[irCt1iVrt%!-Q-X!4i(/!82r'Y5\Xb2#r@(M#Vu~> +iVs"^!)N=LrrSkoPPG.[irCt1iVrt%!-Q-X!4i(/!82r'Y5\Xb2#r@(M#Vu~> +iVs"^!)N=LrrSkoPPG.[irCt1iVrt%!-Q-X!4i(/!82r'Y5\Xb2#r@(M#Vu~> +ir9,,!&`fsrr^[k!0d9Z"PGL0L%aL*"867*Tu-g0Xo8;#p4<7Irr^1>!25/IJ,~> +ir9,,!&`fsrr^[k!0d9Z"PGL0L%aL*"867*Tu-g0Xo8;#p4<7Irr^1>!25/IJ,~> +ir9,,!&`fsrr^[k!0d9Z"PGL0L%aL*"867*Tu-g0Xo8;#p4<7Irr^1>!25/IJ,~> +j8T5K2#u=jrtF(.!!!u=:W2Z#s3Hl/!%%\'XnLcS"84SPfu*giPPtQ5s0)G)T`>)2L&ZZ~> +j8T5K2#u=jrtF(.!!!u=:W2Z#s3Hl/!%%\'XnLcS"84SPfu*giPPtQ5s0)G)T`>)2L&ZZ~> +j8T5K2#u=jrtF(.!!!u=:W2Z#s3Hl/!%%\'XnLcS"84SPfu*giPPtQ5s0)G)T`>)2L&ZZ~> +j8T17!3PA_#OQX6!-QugPPP7a:XAa:!!#g5ir9,6!)N=,rr[BD!)J1GZ2Xt#FT=;ZK`?Q~> +j8T17!3PA_#OQX6!-QugPPP7a:XAa:!!#g5ir9,6!)N=,rr[BD!)J1GZ2Xt#FT=;ZK`?Q~> +j8T17!3PA_#OQX6!-QugPPP7a:XAa:!!#g5ir9,6!)N=,rr[BD!)J1GZ2Xt#FT=;ZK`?Q~> +jSo;7!)MbW"mqKR!)LQ3rs%kmA,oE!ci*kIm?7MM:W2;n!g +jSo;7!)MbW"mqKR!)LQ3rs%kmA,oE!ci*kIm?7MM:W2;n!g +jSo;7!)MbW"mqKR!)LQ3rs%kmA,oE!ci*kIm?7MM:W2;n!g +jSo:(!86T9"nn,[!)LQ/rrUjRXnhu#m?7MM:YFk0"84T0p;R(2!!%02rrR=#`.@s/rr^1>!0`!6 +J,~> +jSo:(!86T9"nn,[!)LQ/rrUjRXnhu#m?7MM:YFk0"84T0p;R(2!!%02rrR=#`.@s/rr^1>!0`!6 +J,~> +jSo:(!86T9"nn,[!)LQ/rrUjRXnhu#m?7MM:YFk0"84T0p;R(2!!%02rrR=#`.@s/rr^1>!0`!6 +J,~> +jo5DB!-RQ+"no&U!&_=]rrT;&chIGCj)k>%FkPpW!j)I5`W,o;!3Pek!3Q5#!24uDb5VV`MJ,~> +jo5DB!-RQ+"no&U!&_=]rrT;&chIGCj)k>%FkPpW!j)I5`W,o;!3Pek!3Q5#!24uDb5VV`MJ,~> +jo5DB!-RQ+"no&U!&_=]rrT;&chIGCj)k>%FkPpW!j)I5`W,o;!3Pek!3Q5#!24uDb5VV`MJ,~> +jo5CG!6"4'#55/V!&^nPpAY2r!87&F"ke"u!-QuYrrVQf:WED7pAP$lXn)Jlg&1mNc[l,>rrh@m +!)MX+s8W+L~> +jo5CG!6"4'#55/V!&^nPpAY2r!87&F"ke"u!-QuYrrVQf:WED7pAP$lXn)Jlg&1mNc[l,>rrh@m +!)MX+s8W+L~> +jo5CG!6"4'#55/V!&^nPpAY2r!87&F"ke"u!-QuYrrVQf:WED7pAP$lXn)Jlg&1mNc[l,>rrh@m +!)MX+s8W+L~> +jo>?UK_2?!RU +Tn36errh^H!/:,ts8N%K~> +jo>?UK_2?!RU +Tn36errh^H!/:,ts8N%K~> +jo>?UK_2?!RU +Tn36errh^H!/:,ts8N%K~> +k5PMC!/9h?"iO1:!0cg@rrI6BnG`[1:B1BYmHacR\H'1crrCaC!!#gjrrMh(rVuq/JcEjl!L('F +s8;nI~> +k5PMC!/9h?"iO1:!0cg@rrI6BnG`[1:B1BYmHacR\H'1crrCaC!!#gjrrMh(rVuq/JcEjl!L('F +s8;nI~> +k5PMC!/9h?"iO1:!0cg@rrI6BnG`[1:B1BYmHacR\H'1crrCaC!!#gjrrMh(rVuq/JcEjl!L('F +s8;nI~> +k5PM/!3Q(s!71YH!71TC"kdDd!0cg>rrI6Bmf*I/:B1Bgp?hk]f`7_jrr@35!!'t5rrA8^!!+tN +JcC<$_Z,,~> +k5PM/!3Q(s!71YH!71TC"kdDd!0cg>rrI6Bmf*I/:B1Bgp?hk]f`7_jrr@35!!'t5rrA8^!!+tN +JcC<$_Z,,~> +k5PM/!3Q(s!71YH!71TC"kdDd!0cg>rrI6Bmf*I/:B1Bgp?hk]f`7_jrr@35!!'t5rrA8^!!+tN +JcC<$_Z,,~> +k5PLb!878L!RFO=!!l +k5PLb!878L!RFO=!!l +k5PLb!878L!RFO=!!l +k5PLb!87;M%`A>IDO[DjD?'Z:!!%/pnG`OL:\t+mFm\Yt#kkAX!&^nP\Ma6a!295g!<@8drr@37 +!!'t6rrCaN!!'Q\s+13cs*t~> +k5PLb!87;M%`A>IDO[DjD?'Z:!!%/pnG`OL:\t+mFm\Yt#kkAX!&^nP\Ma6a!295g!<@8drr@37 +!!'t6rrCaN!!'Q\s+13cs*t~> +k5PLb!87;M%`A>IDO[DjD?'Z:!!%/pnG`OL:\t+mFm\Yt#kkAX!&^nP\Ma6a!295g!<@8drr@37 +!!'t6rrCaN!!'Q\s+13cs*t~> +k5PLb!87>N"4$rqU\qk0UF-%,cgUlAcN!s!ci<^WA,nLImf*djT`>'F!&^n=s6ZpG!0d9Z!<@8d +rrDH[!!#gkrrM.;rVuq^JcC<$^]/f~> +k5PLb!87>N"4$rqU\qk0UF-%,cgUlAcN!s!ci<^WA,nLImf*djT`>'F!&^n=s6ZpG!0d9Z!<@8d +rrDH[!!#gkrrM.;rVuq^JcC<$^]/f~> +k5PLb!87>N"4$rqU\qk0UF-%,cgUlAcN!s!ci<^WA,nLImf*djT`>'F!&^n=s6ZpG!0d9Z!<@8d +rrDH[!!#gkrrM.;rVuq^JcC<$^]/f~> +k5PLb!87AO"84MNU\__-WW4jKnG`UX2#tSlrrSAaAF0=!m;W+^j8AoZp1+/squ6ZsFj'dbPP5%W +\blC-p14.&!G(nTs+13bs*t~> +k5PLb!87AO"84MNU\__-WW4jKnG`UX2#tSlrrSAaAF0=!m;W+^j8AoZp1+/squ6ZsFj'dbPP5%W +\blC-p14.&!G(nTs+13bs*t~> +k5PLb!87AO"84MNU\__-WW4jKnG`UX2#tSlrrSAaAF0=!m;W+^j8AoZp1+/squ6ZsFj'dbPP5%W +\blC-p14.&!G(nTs+13bs*t~> +k5PLb!71ZE!lP(VpqHlJ!4hV!!gUMM!3PYg"84SPj8/cXp,)j;rVlrm!-QKb!:BO]!B'TJ +rr@3@!!+tNJcC<$^Ai]~> +k5PLb!71ZE!lP(VpqHlJ!4hV!!gUMM!3PYg"84SPj8/cXp,)j;rVlrm!-QKb!:BO]!B'TJ +rr@3@!!+tNJcC<$^Ai]~> +k5PLb!71ZE!lP(VpqHlJ!4hV!!gUMM!3PYg"84SPj8/cXp,)j;rVlrm!-QKb!:BO]!B'TJ +rr@3@!!+tNJcC<$^Ai]~> +k5PM/!3Q8#!egWZpqHm8!-Ri3!pot`q#:E_!)N"^!lP)&q#:E6!29Ak!ndRIb5VI*q#CDsqu6Y[ +r;ZiXJcC<$^&NT~> +k5PM/!3Q8#!egWZpqHm8!-Ri3!pot`q#:E_!)N"^!lP)&q#:E6!29Ak!ndRIb5VI*q#CDsqu6Y[ +r;ZiXJcC<$^&NT~> +k5PM/!3Q8#!egWZpqHm8!-Ri3!pot`q#:E_!)N"^!lP)&q#:E6!29Ak!ndRIb5VI*q#CDsqu6Y[ +r;ZiXJcC<$^&NT~> +k5PMM!-S;@!Ac.t^B$DPnc&[/!3Q"q!egX7mf*?B!9 +k5PMM!-S;@!Ac.t^B$DPnc&[/!3Q"q!egX7mf*?B!9 +k5PMM!-S;@!Ac.t^B$DPnc&[/!3Q"q!egX7mf*?B!9 +jo5N\!;?Hm!*Js0!E]?lrrT;&g%YLJXT7&BrrHX1pAY/9!<)p!A,u>FrrAbi!!'.trr^1>!3LhP +df0F&:J^\8s6fo;~> +jo5N\!;?Hm!*Js0!E]?lrrT;&g%YLJXT7&BrrHX1pAY/9!<)p!A,u>FrrAbi!!'.trr^1>!3LhP +df0F&:J^\8s6fo;~> +jo5N\!;?Hm!*Js0!E]?lrrT;&g%YLJXT7&BrrHX1pAY/9!<)p!A,u>FrrAbi!!'.trr^1>!3LhP +df0F&:J^\8s6fo;~> +jo5Oe!6"p;!)*%#!E]?lrrT;&g%YLJ\H'S9rrE+BpAY/9!<3!"m/V:MrrMgNr;ZjUpA+^hc_5pi +e,KU=K`D+,p4<83s*t~> +jo5Oe!6"p;!)*%#!E]?lrrT;&g%YLJ\H'S9rrE+BpAY/9!<3!"m/V:MrrMgNr;ZjUpA+^hc_5pi +e,KU=K`D+,p4<83s*t~> +jo5Oe!6"p;!)*%#!E]?lrrT;&g%YLJ\H'S9rrE+BpAY/9!<3!"m/V:MrrMgNr;ZjUpA+^hc_5pi +e,KU=K`D+,p4<83s*t~> +jo5PP!)NXp@K?,:! +jo5PP!)NXp@K?,:! +jo5PP!)NXp@K?,:! +jSoFJ!6"o2!0d2m!g +jSoFJ!6"o2!0d2m!g +jSoFJ!6"o2!0d2m!g +jSoGO!&aK1!'Btj!]pD8nc&[X!+bm)!qnK/mJd6u!3Q%r#K-V+s8R3A`81Fqp=\-;pT4P.g"Gci +rrZ$s!'5]2bl7k6FT;Dqm=G<%s*t~> +jSoGO!&aK1!'Btj!]pD8nc&[X!+bm)!qnK/mJd6u!3Q%r#K-V+s8R3A`81Fqp=\-;pT4P.g"Gci +rrZ$s!'5]2bl7k6FT;Dqm=G<%s*t~> +jSoGO!&aK1!'Btj!]pD8nc&[X!+bm)!qnK/mJd6u!3Q%r#K-V+s8R3A`81Fqp=\-;pT4P.g"Gci +rrZ$s!'5]2bl7k6FT;Dqm=G<%s*t~> +j8T=W!/:H,!,hYJ!cA!\n,EH3!71K@!hfUrmJd:^2)Xdtrs/6n!87C_!-R<$"QRG&F_'k>"Z:Fr +\_2!%!.k0qrrr+i!!#gJJcFp5J,~> +j8T=W!/:H,!,hYJ!cA!\n,EH3!71K@!hfUrmJd:^2)Xdtrs/6n!87C_!-R<$"QRG&F_'k>"Z:Fr +\_2!%!.k0qrrr+i!!#gJJcFp5J,~> +j8T=W!/:H,!,hYJ!cA!\n,EH3!71K@!hfUrmJd:^2)Xdtrs/6n!87C_!-R<$"QRG&F_'k>"Z:Fr +\_2!%!.k0qrrr+i!!#gJJcFp5J,~> +j8TDYA,s16@K9N8rkAT@=9)+in,ELM!&`g6rr^1>2>6D:"0DQ6pAFprp6,K1s5O):j6$@Cc`M?e +!<73AXT5p+f`f +j8TDYA,s16@K9N8rkAT@=9)+in,ELM!&`g6rr^1>2>6D:"0DQ6pAFprp6,K1s5O):j6$@Cc`M?e +!<73AXT5p+f`f +j8TDYA,s16@K9N8rkAT@=9)+in,ELM!&`g6rr^1>2>6D:"0DQ6pAFprp6,K1s5O):j6$@Cc`M?e +!<73AXT5p+f`f +ir9MK2#ttr@K6C$=A&Vo@dWR_$cE#FXmQ/gm=bNtj6HXHP5nCsrr38MA,p06m54m^l2LhP\V9t^ +"Ab5lg%P=C#56!/FbQsXp\t?K`1_>P!!6])j+76\rrp>:!!'.pJcFg2J,~> +ir9MK2#ttr@K6C$=A&Vo@dWR_$cE#FXmQ/gm=bNtj6HXHP5nCsrr38MA,p06m54m^l2LhP\V9t^ +"Ab5lg%P=C#56!/FbQsXp\t?K`1_>P!!6])j+76\rrp>:!!'.pJcFg2J,~> +ir9MK2#ttr@K6C$=A&Vo@dWR_$cE#FXmQ/gm=bNtj6HXHP5nCsrr38MA,p06m54m^l2LhP\V9t^ +"Ab5lg%P=C#56!/FbQsXp\t?K`1_>P!!6])j+76\rrp>:!!'.pJcFg2J,~> +iVs,#!&`g:`+8iI!Fj"4rs?V$!!#eP!!#gTkl1XVrVuporW!+Ep@`"sPO&5Mp;CM@!!?#jch@/6 +!VW5`!!,mKo`#!GX^qD2!`,NWJcFC&"&Ao\m=G;ss*t~> +iVs,#!&`g:`+8iI!Fj"4rs?V$!!#eP!!#gTkl1XVrVuporW!+Ep@`"sPO&5Mp;CM@!!?#jch@/6 +!VW5`!!,mKo`#!GX^qD2!`,NWJcFC&"&Ao\m=G;ss*t~> +iVs,#!&`g:`+8iI!Fj"4rs?V$!!#eP!!#gTkl1XVrVuporW!+Ep@`"sPO&5Mp;CM@!!?#jch@/6 +!VW5`!!,mKo`#!GX^qD2!`,NWJcFC&"&Ao\m=G;ss*t~> +i;Wnt!&`*^rs/8.FYus;`:i?n$fdFn!+_;Hs5RViPO/;Sj-)>#!+`Y-p&>HoA,nKhg&LHcFT;E[ +o)Adb`.e0j!Hl>3s4[JRg#IY`i;\<~> +i;Wnt!&`*^rs/8.FYus;`:i?n$fdFn!+_;Hs5RViPO/;Sj-)>#!+`Y-p&>HoA,nKhg&LHcFT;E[ +o)Adb`.e0j!Hl>3s4[JRg#IY`i;\<~> +i;Wnt!&`*^rs/8.FYus;`:i?n$fdFn!+_;Hs5RViPO/;Sj-)>#!+`Y-p&>HoA,nKhg&LHcFT;E[ +o)Adb`.e0j!Hl>3s4[JRg#IY`i;\<~> +huWqu6cE2#ttlrs&2-:B1Aj`.@r>s1//[~> +huWqu6cE2#ttlrs&2-:B1Aj`.@r>s1//[~> +huWqu6cE2#ttlrs&2-:B1Aj`.@r>s1//[~> +hZ!_s2#rj6]`/)E!!&_\rrq(u!!#g5nG`Ql!/:4J"60A=p?qqafnBD+:W.haJcE@^J,~> +hZ!_s2#rj6]`/)E!!&_\rrq(u!!#g5nG`Ql!/:4J"60A=p?qqafnBD+:W.haJcE@^J,~> +hZ!_s2#rj6]`/)E!!&_\rrq(u!!#g5nG`Ql!/:4J"60A=p?qqafnBD+:W.haJcE@^J,~> +h>[W<:B4qc^]+H1K`F!Kn,ERYP5kT*g$eqCp,+`$p\t;s!4hIr"mqKR!+ac6s+13`s*t~> +h>[W<:B4qc^]+H1K`F!Kn,ERYP5kT*g$eqCp,+`$p\t;s!4hIr"mqKR!+ac6s+13`s*t~> +h>[W<:B4qc^]+H1K`F!Kn,ERYP5kT*g$eqCp,+`$p\t;s!4hIr"mqKR!+ac6s+13`s*t~> +h#@QOK`D+Tp;6h4\MX@tj7!!N\MX@_`9mR+cN'[4rrVQfAEs0uj)k>%U%X';JcELbJ,~> +h#@QOK`D+Tp;6h4\MX@tj7!!N\MX@_`9mR+cN'[4rrVQfAEs0uj)k>%U%X';JcELbJ,~> +h#@QOK`D+Tp;6h4\MX@tj7!!N\MX@_`9mR+cN'[4rrVQfAEs0uj)k>%U%X';JcELbJ,~> +gA_<%2#pFj`W$(oFT;EDn,ERbFT;EDp?_e\XT6]?rrHX1kl1e3:B42DJcC<$_#Jo~> +gA_<%2#pFj`W$(oFT;EDn,ERbFT;EDp?_e\XT6]?rrHX1kl1e3:B42DJcC<$_#Jo~> +gA_<%2#pFj`W$(oFT;EDn,ERbFT;EDp?_e\XT6]?rrHX1kl1e3:B42DJcC<$_#Jo~> +g&D6LP5kSY`6&#_fl[8pFlVrj"QM?>AE2tT!j)IUp&>&8!9a@bp6,IV\UjeRrrV5EXb$N!s*t~> +g&D6LP5kSY`6&#_fl[8pFlVrj"QM?>AE2tT!j)IUp&>&8!9a@bp6,IV\UjeRrrV5EXb$N!s*t~> +g&D6LP5kSY`6&#_fl[8pFlVrj"QM?>AE2tT!j)IUp&>&8!9a@bp6,IV\UjeRrrV5EXb$N!s*t~> +fDc'8FT;D;`:hLV"j_;k!)Lr/rr^1>!28WV!j)IUp&>&8!9O4_`&.OYJcGNF"N5E_!)J1Gd/SU~> +fDc'8FT;D;`:hLV"j_;k!)Lr/rr^1>!28WV!j)IUp&>&8!9O4_`&.OYJcGNF"N5E_!)J1Gd/SU~> +fDc'8FT;D;`:hLV"j_;k!)Lr/rr^1>!28WV!j)IUp&>&8!9O4_`&.OYJcGNF"N5E_!)J1Gd/SU~> +ec,j,K`D*1PN1-l#48Ng!!$QJmJd:,!!'t#rrU+=XnMbrp&InLrr_:W!0`!6r;QugXYg(YAAj'! +ci8L~> +ec,j,K`D*1PN1-l#48Ng!!$QJmJd:,!!'t#rrU+=XnMbrp&InLrr_:W!0`!6r;QugXYg(YAAj'! +ci8L~> +ec,j,K`D*1PN1-l#48Ng!!$QJmJd:,!!'t#rrU+=XnMbrp&InLrr_:W!0`!6r;QugXYg(YAAj'! +ci8L~> +e,K[?P;N=?:SHh%rrVSuAGuQ0PM,=&"2k0sg#i;9m/TrUrrU+=U#Z.Tp1+/eJcGcM!Q9]k!!/;D +JcF!pJ,~> +e,K[?P;N=?:SHh%rrVSuAGuQ0PM,=&"2k0sg#i;9m/TrUrrU+=U#Z.Tp1+/eJcGcM!Q9]k!!/;D +JcF!pJ,~> +e,K[?P;N=?:SHh%rrVSuAGuQ0PM,=&"2k0sg#i;9m/TrUrrU+=U#Z.Tp1+/eJcGcM!Q9]k!!/;D +JcF!pJ,~> +d/O-bL&M&S23YuGiVs#Rc_4/6!!6]Ap?V_\_uM[TjSo:F!3Q%r"77rGmGe-Jp1+/eKDu2:TeufM +:V$1Ms3(Fm~> +d/O-bL&M&S23YuGiVs#Rc_4/6!!6]Ap?V_\_uM[TjSo:F!3Q%r"77rGmGe-Jp1+/eKDu2:TeufM +:V$1Ms3(Fm~> +d/O-bL&M&S23YuGiVs#Rc_4/6!!6]Ap?V_\_uM[TjSo:F!3Q%r"77rGmGe-Jp1+/eKDu2:TeufM +:V$1Ms3(Fm~> +cMn"?`.^)J!!H)OXj?D#rri&KXcm;o!!7;RmHOWQj#$hij8T5:*rrkJrr_Xr!/9A2"867*\VL1i +mC?a-!&]tnJcEgkJ,~> +cMn"?`.^)J!!H)OXj?D#rri&KXcm;o!!7;RmHOWQj#$hij8T5:*rrkJrr_Xr!/9A2"867*\VL1i +mC?a-!&]tnJcEgkJ,~> +cMn"?`.^)J!!H)OXj?D#rri&KXcm;o!!7;RmHOWQj#$hij8T5:*rrkJrr_Xr!/9A2"867*\VL1i +mC?a-!&]tnJcEgkJ,~> +b5VRsX`ZN!!!QnUPHCt*q:PqtXf\:>Fo).@FeR.TkPkYX:B8>ors/7]!!!`6FkQco!q!*IrVusp +cf+m+j#$hsM>mSLrW!"B`:ec^`rCP~> +b5VRsX`ZN!!!QnUPHCt*q:PqtXf\:>Fo).@FeR.TkPkYX:B8>ors/7]!!!`6FkQco!q!*IrVusp +cf+m+j#$hsM>mSLrW!"B`:ec^`rCP~> +b5VRsX`ZN!!!QnUPHCt*q:PqtXf\:>Fo).@FeR.TkPkYX:B8>ors/7]!!!`6FkQco!q!*IrVusp +cf+m+j#$hsM>mSLrW!"B`:ec^`rCP~> +`r?2/c`MnDm/R9"FfiUBir9(R!/9P7#PP8W!&^n=AGuQ0EDQQ6#-Hp.!!%/pir9(u!+^oc!gC1^ +JcEXfJ,~> +`r?2/c`MnDm/R9"FfiUBir9(R!/9P7#PP8W!&^n=AGuQ0EDQQ6#-Hp.!!%/pir9(u!+^oc!gC1^ +JcEXfJ,~> +`r?2/c`MnDm/R9"FfiUBir9(R!/9P7#PP8W!&^n=AGuQ0EDQQ6#-Hp.!!%/pir9(u!+^oc!gC1^ +JcEXfJ,~> +^]+Drg"Eq2Xo@#/rr_Wg2>655#55/V!&^nPrr35LP>qT.Fh-o=rrq(u!!%/pj8T17!3LhPJcEgk +J,~> +^]+Drg"Eq2Xo@#/rr_Wg2>655#55/V!&^nPrr35LP>qT.Fh-o=rrq(u!!%/pj8T17!3LhPJcEgk +J,~> +^]+Drg"Eq2Xo@#/rr_Wg2>655#55/V!&^nPrr35LP>qT.Fh-o=rrq(u!!%/pj8T17!3LhPJcEgk +J,~> +MZ3aA!6"(#"iO1:!29,_rrUjRXnhu#fjk'_L$e"%"76(Gp4<6ps2k:k~> +MZ3aA!6"(#"iO1:!29,_rrUjRXnhu#fjk'_L$e"%"76(Gp4<6ps2k:k~> +MZ3aA!6"(#"iO1:!29,_rrUjRXnhu#fjk'_L$e"%"76(Gp4<6ps2k:k~> +MuNkG!)MhY"iO1:!0cgFrrT_2\bH+-`(p@5PO7N4!g +MuNkG!)MhY"iO1:!0cgFrrT_2\bH+-`(p@5PO7N4!g +MuNkG!)MhY"iO1:!0cgFrrT_2\bH+-`(p@5PO7N4!g +MuNj\!6"1&"kdDd!0cgDrrT;&g%G@K`(p@5U%[^M!potuSc8fFX`_1*s0;TS~> +MuNj\!6"1&"kdDd!0cgDrrT;&g%G@K`(p@5U%[^M!potuSc8fFX`_1*s0;TS~> +MuNj\!6"1&"kdDd!0cgDrrT;&g%G@K`(p@5U%[^M!potuSc8fFX`_1*s0;TS~> +MuNih!;>dZ"ke"u!-QuerrSkog%54IXYg)9XnM#Z!b;;uUAk;JX`aRB!0`!6Z2]=~> +MuNih!;>dZ"ke"u!-QuerrSkog%54IXYg)9XnM#Z!b;;uUAk;JX`aRB!0`!6Z2]=~> +MuNih!;>dZ"ke"u!-QuerrSkog%54IXYg)9XnM#Z!b;;uUAk;JX`aRB!0`!6Z2]=~> +N;itH!-R]/"mpF4!-QucrrRs02NR~> +N;itH!-R]/"mpF4!-QucrrRs02NR~> +N;itH!-R]/"mpF4!-QucrrRs02NR~> +N;it4!3Q(s"RXmEg$S_;"mqKR!)Lr1rrI6Bn,ERbXT/>s`9dL,f`5m8mB-Bjfr]s(r;ZpqPJlj> +s/c6N~> +N;it4!3Q(s"RXmEg$S_;"mqKR!)Lr1rrI6Bn,ERbXT/>s`9dL,f`5m8mB-Bjfr]s(r;ZpqPJlj> +s/c6N~> +N;it4!3Q(s"RXmEg$S_;"mqKR!)Lr1rrI6Bn,ERbXT/>s`9dL,f`5m8mB-Bjfr]s(r;ZpqPJlj> +s/c6N~> +N;is]!71QB!TS>#!!m`-s7VWV!)LQ&rrqf#,UC=qn,ERYP5kSY`;KW8g&A)RchIJ +N;is]!71QB!TS>#!!m`-s7VWV!)LQ&rrqf#,UC=qn,ERYP5kSY`;KW8g&A)RchIJ +N;is]!71QB!TS>#!!m`-s7VWV!)LQ&rrqf#,UC=qn,ERYP5kSY`;KW8g&A)RchIJ +N;is]!87;M%`C4):T_10A,lU`2#oMEnG`O_L&1iNU%[sT#jmfU!)M;Jfh_MG!B%F`rrrI1X`[D> +`3B:A_uShKs.fUE~> +N;is]!87;M%`C4):T_10A,lU`2#oMEnG`O_L&1iNU%[sT#jmfU!)M;Jfh_MG!B%F`rrrI1X`[D> +`3B:A_uShKs.fUE~> +N;is]!87;M%`C4):T_10A,lU`2#oMEnG`O_L&1iNU%[sT#jmfU!)M;Jfh_MG!B%F`rrrI1X`[D> +`3B:A_uShKs.fUE~> +N;is]!87>N"60@]\buI2\GuU]XnM8a$fa#C4,]l/Jg^V.p?qqjfl[8p=o\PF`7`J#!!&5ZrrE+B +rr<#lo)AdYg%O%ts4ILmXeGH>s,m>3~> +N;is]!87>N"60@]\buI2\GuU]XnM8a$fa#C4,]l/Jg^V.p?qqjfl[8p=o\PF`7`J#!!&5ZrrE+B +rr<#lo)AdYg%O%ts4ILmXeGH>s,m>3~> +N;is]!87>N"60@]\buI2\GuU]XnM8a$fa#C4,]l/Jg^V.p?qqjfl[8p=o\PF`7`J#!!&5ZrrE+B +rr<#lo)AdYg%O%ts4ILmXeGH>s,m>3~> +N;is]!87>N!b;;LqYpW8!)2k]"85IiDZ%6O\7>S^m/I4AA,n@1r;QlZ2#t2arrE+BmJd0gr;ch> +!29Co!71Vs!;?!`!U\S=XoR:Qfn'0cs*t~> +N;is]!87>N!b;;LqYpW8!)2k]"85IiDZ%6O\7>S^m/I4AA,n@1r;QlZ2#t2arrE+BmJd0gr;ch> +!29Co!71Vs!;?!`!U\S=XoR:Qfn'0cs*t~> +N;is]!87>N!b;;LqYpW8!)2k]"85IiDZ%6O\7>S^m/I4AA,n@1r;QlZ2#t2arrE+BmJd0gr;ch> +!29Co!71Vs!;?!`!U\S=XoR:Qfn'0cs*t~> +N;is]!71ZE!m^jhq#:DZ!6"C,!j)H?q7cu(!6"7(!`&gBqYpZX2)Xe!rrE+BmJd=BX`\bso`,!F +o)A]lq#CXqF`inM\_5Yes,d82~> +N;is]!71ZE!m^jhq#:DZ!6"C,!j)H?q7cu(!6"7(!`&gBqYpZX2)Xe!rrE+BmJd=BX`\bso`,!F +o)A]lq#CXqF`inM\_5Yes,d82~> +N;is]!71ZE!m^jhq#:DZ!6"C,!j)H?q7cu(!6"7(!`&gBqYpZX2)Xe!rrE+BmJd=BX`\bso`,!F +o)A]lq#CXqF`inM\_5Yes,d82~> +N;it*!3Q8#!g +N;it*!3Q8#!g +N;it*!3Q8#!g +N;itH!/:FP!Fu3(rrGnQnc&[:!-n7Q!b;;umf*?P!71H?!qlV)rVlr0!4d[\JcEmmJ,~> +N;itH!/:FP!Fu3(rrGnQnc&[:!-n7Q!b;;umf*?P!71H?!qlV)rVlr0!4d[\JcEmmJ,~> +N;itH!/:FP!Fu3(rrGnQnc&[:!-n7Q!b;;umf*?P!71H?!qlV)rVlr0!4d[\JcEmmJ,~> +MuNuW!;?Hm!-S#8!HeD4rrT;&S+jZ!JcOKlrrI6BpAY/9!<)p!K`LLks+13ms*t~> +MuNuW!;?Hm!-S#8!HeD4rrT;&S+jZ!JcOKlrrI6BpAY/9!<)p!K`LLks+13ms*t~> +MuNuW!;?Hm!-S#8!HeD4rrT;&S+jZ!JcOKlrrI6BpAY/9!<)p!K`LLks+13ms*t~> +MuO!T!6"p;!+bg'!HeD4rrT;&U\DM)RfKSYrrI6BpAY/9!<3!"m/Tq5s+13ls*t~> +MuO!T!6"p;!+bg'!HeD4rrT;&U\DM)RfKSYrrI6BpAY/9!<3!"m/Tq5s+13ls*t~> +MuO!T!6"p;!+bg'!HeD4rrT;&U\DM)RfKSYrrI6BpAY/9!<3!"m/Tq5s+13ls*t~> +MuO"K!)NXpA,u?'s#'?H!j)HtpV-cf!6"=*!HeD9rrI6Brr3&%!4d[\JcEjlJ,~> +MuO"K!)NXpA,u?'s#'?H!j)HtpV-cf!6"=*!HeD9rrI6Brr3&%!4d[\JcEjlJ,~> +MuO"K!)NXpA,u?'s#'?H!j)HtpV-cf!6"=*!HeD9rrI6Brr3&%!4d[\JcEjlJ,~> +MZ3m'!6"o$!71H?!ndR-nc&[$!/pTd!dF^umf*?2!:BO\#>[5Ws7S<-p4<6ps2k:k~> +MZ3m'!6"o$!71H?!ndR-nc&[$!/pTd!dF^umf*?2!:BO\#>[5Ws7S<-p4<6ps2k:k~> +MZ3m'!6"o$!71H?!ndR-nc&[$!/pTd!dF^umf*?2!:BO\#>[5Ws7S<-p4<6ps2k:k~> +MZ3n6!)N=A!-S):!d+L]nc&[N!*K!1!BU;KrrT_2\bQ10f`6a+s-!GbJcC<$aT$b~> +MZ3n6!)N=A!-S):!d+L]nc&[N!*K!1!BU;KrrT_2\bQ10f`6a+s-!GbJcC<$aT$b~> +MZ3n6!)N=A!-S):!d+L]nc&[N!*K!1!BU;KrrT_2\bQ10f`6a+s-!GbJcC<$aT$b~> +M>mdD!29F8!3Q+t!kA;An,EH1!2KA)!fI&BmJd:U!&aKGrs*ZH`;eKj:\KA>JcEgkJ,~> +M>mdD!29F8!3Q+t!kA;An,EH1!2KA)!fI&BmJd:U!&aKGrs*ZH`;eKj:\KA>JcEgkJ,~> +M>mdD!29F8!3Q+t!kA;An,EH1!2KA)!fI&BmJd:U!&aKGrs*ZH`;eKj:\KA>JcEgkJ,~> +M>mkT2#tti2#rj6rr3,pT`?t1n,ELC!%=lE^B:J91[XQ/!hfUJqYpea!-S>82#u<\s+13js*t~> +M>mkT2#tti2#rj6rr3,pT`?t1n,ELC!%=lE^B:J91[XQ/!hfUJqYpea!-S>82#u<\s+13js*t~> +M>mkT2#tti2#rj6rr3,pT`?t1n,ELC!%=lE^B:J91[XQ/!hfUJqYpea!-S>82#u<\s+13js*t~> +M#Rt +M#Rt +M#Rt +L]7Rs!&`g1XYp(X!]?28li.9n!!"EL===/*`9I:3p2p?8:N^1J!)MYKA,q=7s+13hs*t~> +L]7Rs!&`g1XYp(X!]?28li.9n!!"EL===/*`9I:3p2p?8:N^1J!)MYKA,q=7s+13hs*t~> +L]7Rs!&`g1XYp(X!]?28li.9n!!"EL===/*`9I:3p2p?8:N^1J!)MYKA,q=7s+13hs*t~> +LAqOC!&`g:s5VemkPkeIP;<1=9p=u,rrL&\rW!16\b>`-!+beSs+13hs*t~> +LAqOC!&`g:s5VemkPkeIP;<1=9p=u,rrL&\rW!16\b>`-!+beSs+13hs*t~> +LAqOC!&`g:s5VemkPkeIP;<1=9p=u,rrL&\rW!16\b>`-!+beSs+13hs*t~> +L&V7=!&`H?rri%+!+beSs+13gs*t~> +L&V7=!&`H?rri%+!+beSs+13gs*t~> +L&V7=!&`H?rri%+!+beSs+13gs*t~> +K`;.b!!'RArrh"4!-S!ds+13fs*t~> +K`;.b!!'RArrh"4!-S!ds+13fs*t~> +K`;.b!!'RArrh"4!-S!ds+13fs*t~> +KDu)#2#qdm^Ae;;!!&^Ds+13ds*t~> +KDu)#2#qdm^Ae;;!!&^Ds+13ds*t~> +KDu)#2#qdm^Ae;;!!&^Ds+13ds*t~> +K)Yu6A,nKt_>aYkA,nL5JcC<$_#Jo~> +K)Yu6A,nKt_>aYkA,nL5JcC<$_#Jo~> +K)Yu6A,nKt_>aYkA,nL5JcC<$_#Jo~> +Jc>oRXT/?Dfu +Jc>oRXT/?Dfu +Jc>oRXT/?Dfu +JcGcM"lj_*!/9g^rrr+u2#pFuJcC<$^&NT~> +JcGcM"lj_*!/9g^rrr+u2#pFuJcC<$^&NT~> +JcGcM"lj_*!/9g^rrr+u2#pFuJcC<$^&NT~> +JcG]K"iO1:!-Qu>rs%kS2#oM9p4<6ps1JA^~> +JcG]K"iO1:!-Qu>rs%kS2#oM9p4<6ps1JA^~> +JcG]K"iO1:!-Qu>rs%kS2#oM9p4<6ps1JA^~> +JcGWI#/j:;!)L0!df0NtK`D*1XnI>GJcE=]J,~> +JcGWI#/j:;!)L0!df0NtK`D*1XnI>GJcE=]J,~> +JcGWI#/j:;!)L0!df0NtK`D*1XnI>GJcE=]J,~> +JcGQG!RGof!!7kmp=TBMc]^3d!)L0!JcC<$\Gq'~> +JcGQG!RGof!!7kmp=TBMc]^3d!)L0!JcC<$\Gq'~> +JcGQG!RGof!!7kmp=TBMc]^3d!)L0!JcC<$\Gq'~> +JcGKE!q!*crW!"B\`;TI#joQa2#mV6PM(NeJcE.XJ,~> +JcGKE!q!*crW!"B\`;TI#joQa2#mV6PM(NeJcE.XJ,~> +JcGKE!q!*crW!"B\`;TI#joQa2#mV6PM(NeJcE.XJ,~> +JcGBB!ootMr;ZqBXj?D!rri&KXbBRM!!5$Ac[l+Is0DZT~> +JcGBB!ootMr;ZqBXj?D!rri&KXbBRM!!5$Ac[l+Is0DZT~> +JcGBB!ootMr;ZqBXj?D!rri&KXbBRM!!5$Ac[l+Is0DZT~> +JcG9?"7=$j:](1qA9G#Vci2StpAFshg&J/TKm!:n"#YeCj+75]s0)HQ~> +JcG9?"7=$j:](1qA9G#Vci2StpAFshg&J/TKm!:n"#YeCj+75]s0)HQ~> +JcG9?"7=$j:](1qA9G#Vci2StpAFshg&J/TKm!:n"#YeCj+75]s0)HQ~> +JcG-;"SUNNKk0KL"Aa0B`8cFKJcDeNJ,~> +JcG-;"SUNNKk0KL"Aa0B`8cFKJcDeNJ,~> +JcG-;"SUNNKk0KL"Aa0B`8cFKJcDeNJ,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/BookGPU/Chapters/chapter8/figures/parallel_exploration-eps-converted-to.pdf b/BookGPU/Chapters/chapter8/figures/parallel_exploration-eps-converted-to.pdf new file mode 100644 index 0000000..690f727 Binary files /dev/null and b/BookGPU/Chapters/chapter8/figures/parallel_exploration-eps-converted-to.pdf differ diff --git a/BookGPU/Chapters/chapter8/figures/parallel_exploration.eps b/BookGPU/Chapters/chapter8/figures/parallel_exploration.eps new file mode 100644 index 0000000..560b25e --- /dev/null +++ b/BookGPU/Chapters/chapter8/figures/parallel_exploration.eps @@ -0,0 +1,1583 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner +%%Title: parallel_exploration.eps +%%CreationDate: Tue Aug 21 13:36:30 2012 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 433 353 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 337.95161059413027 translate +417.94015748031495 -337.95161059413027 scale +% Image geometry +418 338 8 +% Transformation matrix +[ 418 0 0 338 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 418 string def +/gstr 418 string def +/bstr 418 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 81269 ASCII Bytes +colorimage +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$jSo5?rRlc%J,~> +JcC<$jSo5?rRlc%J,~> +JcC<$jSo5?rRlc%J,~> +JcC<$mJd@C`3"`92>."S20F&D\_6\7s*t~> +JcC<$mJd@C`3"`92>."S20F&D\_6\7s*t~> +JcC<$mJd@C`3"`92>."S20F&D\_6\7s*t~> +JcC<$o)B'a`04^3!&\n_Xi14l!:Bdc!;?EF$H0'?F\_u;:PH@>O8j_~> +JcC<$o)B'a`04^3!&\n_Xi14l!:Bdc!;?EF$H0'?F\_u;:PH@>O8j_~> +JcC<$o)B'a`04^3!&\n_Xi14l!:Bdc!;?EF$H0'?F\_u;:PH@>O8j_~> +JcC<$p&>;09Krs&%li.7D\W]eh23YuPPQ-.~> +JcC<$p&>;09Krs&%li.7D\W]eh23YuPPQ-.~> +JcC<$p&>;09Krs&%li.7D\W]eh23YuPPQ-.~> +JcC<$q#:QOP;N>_\`;]L#49?_!!%_kQ2c@~> +JcC<$q#:QOP;N>_\`;]L#49?_!!%_kQ2c@~> +JcC<$q#:QOP;N>_\`;]L#49?_!!%_kQ2c@~> +JcC<$qu6lo\PE39`:i!d#55uh!&^J;R/_[~> +JcC<$qu6lo\PE39`:i!d#55uh!&^J;R/_[~> +JcC<$qu6lo\PE39`:i!d#55uh!&^J;R/_[~> +JcC<$rVm&gP;P4kmFM:@p:3s!PM)E)J,~> +JcC<$rVm&gP;P4kmFM:@p:3s!PM)E)J,~> +JcC<$rVm&gP;P4kmFM:@p:3s!PM)E)J,~> +JcC<$s8N8iP5nCsp +JcC<$s8N8iP5nCsp +JcC<$s8N8iP5nCsp +JcC<$"SSrT:W2Pu"mrj]DQV7Lrrh"t!0d,Js*t~> +JcC<$"SSrT:W2Pu"mrj]DQV7Lrrh"t!0d,Js*t~> +JcC<$"SSrT:W2Pu"mrj]DQV7Lrrh"t!0d,Js*t~> +JcC?%"4'b#Xm,ikScCl`GZXr;g$/M=`(r8$TDsE~> +JcC?%"4'b#Xm,ikScCl`GZXr;g$/M=`(r8$TDsE~> +JcC?%"4'b#Xm,ikScCl`GZXr;g$/M=`(r8$TDsE~> +JcCE'"SRNLL%ad2!adC7rP&H>A,ss?rri%t!+b,`s*t~> +JcCE'"SRNLL%ad2!adC7rP&H>A,ss?rri%t!+b,`s*t~> +JcCE'"SRNLL%ad2!adC7rP&H>A,ss?rri%t!+b,`s*t~> +JcCH("5,OhcfkB1W[XtE^B/:+p?;MYj(($XUAo`~> +JcCH("5,OhcfkB1W[XtE^B/:+p?;MYj(($XUAo`~> +JcCH("5,OhcfkB1W[XtE^B/:+p?;MYj(($XUAo`~> +JcCK)"0DQWp?;MXp+M$n^B1o-T'$%TT`C;MV#Pr~> +JcCK)"0DQWp?;MXp+M$n^B1o-T'$%TT`C;MV#Pr~> +JcCK)"0DQWp?;MXp+M$n^B1o-T'$%TT`C;MV#Pr~> +JcCQ+"87oY\`WnncN(KM^B&RNjo5G/2.ZEWs*t~> +JcCQ+"87oY\`WnncN(KM^B&RNjo5G/2.ZEWs*t~> +JcCQ+"87oY\`WnncN(KM^B&RNjo5G/2.ZEWs*t~> +JcCT,"867_g#`57X]Y>4!M]YUrr_:l2<1S6J,~> +JcCT,"867_g#`57X]Y>4!M]YUrr_:l2<1S6J,~> +JcCT,"867_g#`57X]Y>4!M]YUrr_:l2<1S6J,~> +JcCW-"867_j5g4@X]Y>4!M]YTrr_t*2<1V7J,~> +JcCW-"867_j5g4@X]Y>4!M]YTrr_t*2<1V7J,~> +JcCW-"867_j5g4@X]Y>4!M]YTrr_t*2<1V7J,~> +JcCZ."8689mGn3I`$tGq!K/Ykrr_t*2<1Y8J,~> +JcCZ."8689mGn3I`$tGq!K/Ykrr_t*2<1Y8J,~> +JcCZ."8689mGn3I`$tGq!K/Ykrr_t*2<1Y8J,~> +JcC]/"868$p>Z)Rm/W@F^B$EWiVs#RA2WDHs*t~> +JcC]/"868$p>Z)Rm/W@F^B$EWiVs#RA2WDHs*t~> +JcC]/"868$p>Z)Rm/W@F^B$EWiVs#RA2WDHs*t~> +JcC]/!b=1Ki;Wk>.(K,g!fI'Gi;WoQA5Dp!s*t~> +JcC]/!b=1Ki;Wk>.(K,g!fI'Gi;WoQA5Dp!s*t~> +JcC]/!b=1Ki;Wk>.(K,g!fI'Gi;WoQA5Dp!s*t~> +JcC`0!g>M%i;WrINW;PKr4`>c!(Y`"rrVmiA?,Z[~> +JcC`0!g>M%i;WrINW;PKr4`>c!(Y`"rrVmiA?,Z[~> +JcC`0!g>M%i;WrINW;PKr4`>c!(Y`"rrVmiA?,Z[~> +JcCc1!lP)WiVsMWP5nClDuaF#Jp9BX[WMS(mGS!Gj#*O2s*t~> +JcCc1!lP)WiVsMWP5nClDuaF#Jp9BX[WMS(mGS!Gj#*O2s*t~> +JcCc1!lP)WiVsMWP5nClDuaF#Jp9BX[WMS(mGS!Gj#*O2s*t~> +JcCf2!pqk=ir9/KP5nCsrr3GGJP/"@U$_m[fhVUMp>Q#Q_uS,bs*t~> +JcCf2!pqk=ir9/KP5nCsrr3GGJP/"@U$_m[fhVUMp>Q#Q_uS,bs*t~> +JcCf2!pqk=ir9/KP5nCsrr3GGJP/"@U$_m[fhVUMp>Q#Q_uS,bs*t~> +JcCf2!d.<4jSoAMP5nCsqYpS,U&+ck\MZ7TiVrt52>40PJ,~> +JcCf2!d.<4jSoAMP5nCsqYpS,U&+ck\MZ7TiVrt52>40PJ,~> +JcCf2!d.<4jSoAMP5nCsqYpS,U&+ck\MZ7TiVrt52>40PJ,~> +JcD8?!4hh'!lP)ljo5JNP5nCsq>UN`!71K@"SSMh:YFe.!qnLFXoEn~> +JcD8?!4hh'!lP)ljo5JNP5nCsq>UN`!71K@"SSMh:YFe.!qnLFXoEn~> +JcD8?!4hh'!lP)ljo5JNP5nCsq>UN`!71K@"SSMh:YFe.!qnLFXoEn~> +JcD;@!ndR;q#:Eh23[2&"RVBQ:W3#-!Q6khrrh_C!-R\irrU+=j0&E4~> +JcD;@!ndR;q#:Eh23[2&"RVBQ:W3#-!Q6khrrh_C!-R\irrU+=j0&E4~> +JcD;@!ndR;q#:Eh23[2&"RVBQ:W3#-!Q6khrrh_C!-R\irrU+=j0&E4~> +JcD;@"K_Y(FnY\3!j+?Rkl1e=P5nCsp&G&Go`#'IA,r=sjo5?lFftap~> +JcD;@"K_Y(FnY\3!j+?Rkl1e=P5nCsp&G&Go`#'IA,r=sjo5?lFftap~> +JcD;@"K_Y(FnY\3!j+?Rkl1e=P5nCsp&G&Go`#'IA,r=sjo5?lFftap~> +JcD;@!-S8@!G(6grrVmOXmuGkf`:F;rrh"t!-QudrrE, +JcD;@!-S8@!G(6grrVmOXmuGkf`:F;rrh"t!-QudrrE, +JcD;@!-S8@!G(6grrVmOXmuGkf`:F;rrh"t!-QudrrE, +JcD;@qu?aTj8JuZXYohErrVno0E(qV?J5A3FT?R;oD\s>Mu^0No)AjdXT2/Crr3,p\ZN![n,EE! +PHY":~> +JcD;@qu?aTj8JuZXYohErrVno0E(qV?J5A3FT?R;oD\s>Mu^0No)AjdXT2/Crr3,p\ZN![n,EE! +PHY":~> +JcD;@qu?aTj8JuZXYohErrVno0E(qV?J5A3FT?R;oD\s>Mu^0No)AjdXT2/Crr3,p\ZN![n,EE! +PHY":~> +JcE(V!oqterN5g:!/:ES!2oYn!6"m:!DfE]rs\U.."\_=Wal*5!-Qudrs.R[!-)O,!28r_%.05Y +FlTS(20F$A:XAS2!lP*+YlB4~> +JcE(V!oqterN5g:!/:ES!2oYn!6"m:!DfE]rs\U.."\_=Wal*5!-Qudrs.R[!-)O,!28r_%.05Y +FlTS(20F$A:XAS2!lP*+YlB4~> +JcE(V!oqterN5g:!/:ES!2oYn!6"m:!DfE]rs\U.."\_=Wal*5!-Qudrs.R[!-)O,!28r_%.05Y +FlTS(20F$A:XAS2!lP*+YlB4~> +JcE@^"npW[X`\dO!!#gj!!KG(cN*A)rrRa"Wr0U5GQ>;Frr_:=L$em>!kA;pnG`XEFT;EDrr3)o +K`KHhrrG!fYlB4~> +JcE@^"npW[X`\dO!!#gj!!KG(cN*A)rrRa"Wr0U5GQ>;Frr_:=L$em>!kA;pnG`XEFT;EDrr3)o +K`KHhrrG!fYlB4~> +JcE@^"npW[X`\dO!!#gj!!KG(cN*A)rrRa"Wr0U5GQ>;Frr_:=L$em>!kA;pnG`XEFT;EDrr3)o +K`KHhrrG!fYlB4~> +JcEOc"RXO;FZ&4[!(?S^!gAXTo`#!Q!1Wi"!Ea72rrVmiL&:lOcN);\rrUjR`;BQ9P;W()rrJ +JcEOc"RXO;FZ&4[!(?S^!gAXTo`#!Q!1Wi"!Ea72rrVmiL&:lOcN);\rrUjR`;BQ9P;W()rrJ +JcEOc"RXO;FZ&4[!(?S^!gAXTo`#!Q!1Wi"!Ea72rrVmiL&:lOcN);\rrUjR`;BQ9P;W()rrJ +JcE[g"66qG2=pkMA9E%nXnLHIXnD_q'sdK3!M2s[^B0l)mI^D[_uTN-rrJp,0DO +rrULHmBQ\A~> +JcE[g"66qG2=pkMA9E%nXnLHIXnD_q'sdK3!M2s[^B0l)mI^D[_uTN-rrJp,0DO +rrULHmBQ\A~> +JcE[g"66qG2=pkMA9E%nXnLHIXnD_q'sdK3!M2s[^B0l)mI^D[_uTN-rrJp,0DO +rrULHmBQ\A~> +JcEgk"77(SFd&rRg%Oe4!9<_P!Cl,BrrI"^pqHh0g%>:FKp2?4!oj:Jnc&Uich[SATloo* +!B%g#s*t~> +JcEgk"77(SFd&rRg%Oe4!9<_P!Cl,BrrI"^pqHh0g%>:FKp2?4!oj:Jnc&Uich[SATloo* +!B%g#s*t~> +JcEgk"77(SFd&rRg%Oe4!9<_P!Cl,BrrI"^pqHh0g%>:FKp2?4!oj:Jnc&Uich[SATloo* +!B%g#s*t~> +JcEpn!ootMp](D=Xj?%hrrBV&!!-W4p&>&1K)!(]!87#E!HkO>rrE,Qo)AdE!;?6g!RCc9rrIh; +Z2]=~> +JcEpn!ootMp](D=Xj?%hrrBV&!!-W4p&>&1K)!(]!87#E!HkO>rrE,Qo)AdE!;?6g!RCc9rrIh; +Z2]=~> +JcEpn!ootMp](D=Xj?%hrrBV&!!-W4p&>&1K)!(]!87#E!HkO>rrE,Qo)AdE!;?6g!RCc9rrIh; +Z2]=~> +JcF$q!ooJ?q>^UTKt67%rr@cL!!G05XaPoprrI"hpqHh0g%>:FFfkH=! +JcF$q!ooJ?q>^UTKt67%rr@cL!!G05XaPoprrI"hpqHh0g%>:FFfkH=! +JcF$q!ooJ?q>^UTKt67%rr@cL!!G05XaPoprrI"hpqHh0g%>:FFfkH=! +JcF-t!pu[Wq>^S>\`;KF!&a`U"([V6j8T&ZFfk98!M2s[^B1/1mI^DZFeSX2!pp!@o)AdY!9 +JcF-t!pu[Wq>^S>\`;KF!&a`U"([V6j8T&ZFfk98!M2s[^B1/1mI^DZFeSX2!pp!@o)AdY!9 +JcF-t!pu[Wq>^S>\`;KF!&a`U"([V6j8T&ZFfk98!M2s[^B1/1mI^DZFeSX2!pp!@o)AdY!9 +JcF7"!qsQCqZ$^UPL&sVrrh_3Xj?_;rrE,GoD\mP!2KD*!Ea72rrJfhq>UK+2=UVH:TaHm!G%Da +rrV3\j0J]8~> +JcF7"!qsQCqZ$^UPL&sVrrh_3Xj?_;rrE,GoD\mP!2KD*!Ea72rrJfhq>UK+2=UVH:TaHm!G%Da +rrV3\j0J]8~> +JcF7"!qsQCqZ$^UPL&sVrrh_3Xj?_;rrE,GoD\mP!2KD*!Ea72rrJfhq>UK+2=UVH:TaHm!G%Da +rrV3\j0J]8~> +JcF=$!pu1/qu?dUPL%DO! +JcF=$!pu1/qu?dUPL%DO! +JcF=$!pu1/qu?dUPL%DO! +JcFC&!SMVm!!.elaSu>/!9 +JcFC&!SMVm!!.elaSu>/!9 +JcFC&!SMVm!!.elaSu>/!9 +JcFI(!Q7e3!!5rumDf/,f`:OA!VW,`!!,X:n,EZW!0b+DTf#X+mf*RQA2U(.aHHUfmf*:ffs:X.~> +JcFI(!Q7e3!!5rumDf/,f`:OA!VW,`!!,X:n,EZW!0b+DTf#X+mf*RQA2U(.aHHUfmf*:ffs:X.~> +JcFI(!Q7e3!!5rumDf/,f`:OA!VW,`!!,X:n,EZW!0b+DTf#X+mf*RQA2U(.aHHUfmf*:ffs:X.~> +JcFO*!Q7e3!!.5g_uBbj!:KjhNW:nLm/I:9HN4%/XnM,]#55/n!!$]NmJd2E\[)6c~> +JcFO*!Q7e3!!.5g_uBbj!:KjhNW:nLm/I:9HN4%/XnM,]#55/n!!$]NmJd2E\[)6c~> +JcFO*!Q7e3!!.5g_uBbj!:KjhNW:nLm/I:9HN4%/XnM,]#55/n!!$]NmJd2E\[)6c~> +JcFU,!Q7e3!!/;N_>aPh!:TpkP5rPS!4hLs"lhINVZ;qGrrp=@Ncb??mJd1efs:X.~> +JcFU,!Q7e3!!/;N_>aPh!:TpkP5rPS!4hLs"lhINVZ;qGrrp=@Ncb??mJd1efs:X.~> +JcFU,!Q7e3!!/;N_>aPh!:TpkP5rPS!4hLs"lhINVZ;qGrrp=@Ncb??mJd1efs:X.~> +JcF[.!RFR?!!5$OmD&Z&p&Ne9rs+_f`;fk>!9 +JcF[.!RFR?!!5$OmD&Z&p&Ne9rs+_f`;fk>!9 +JcF[.!RFR?!!5$OmD&Z&p&Ne9rs+_f`;fk>!9 +JcFa0!SMVo!!5$[p:UD+!86rC!gY"2k2'pAY'ofem=6n,EHQ!6"j9"2k1^p@/(_ +!84[XJ,~> +JcFa0!SMVo!!5$[p:UD+!86rC!gY"2k2'pAY'ofem=6n,EHQ!6"j9"2k1^p@/(_ +!84[XJ,~> +JcFa0!SMVo!!5$[p:UD+!86rC!gY"2k2'pAY'ofem=6n,EHQ!6"j9"2k1^p@/(_ +!84[XJ,~> +JcFg2!VV`T!!04q])Mdg`:O!1P5rQ!rrVRFPOe_T_uQ"urr_:WAE37\"87F+`;BQ:j#(B-o)AdE +!:@)lJ,~> +JcFg2!VV`T!!04q])Mdg`:O!1P5rQ!rrVRFPOe_T_uQ"urr_:WAE37\"87F+`;BQ:j#(B-o)AdE +!:@)lJ,~> +JcFg2!VV`T!!04q])Mdg`:O!1P5rQ!rrVRFPOe_T_uQ"urr_:WAE37\"87F+`;BQ:j#(B-o)AdE +!:@)lJ,~> +JcFj3!P()d!!/;N\GlSPXn;VpP5rPtrrULH`:X'2NrZ +JcFj3!P()d!!/;N\GlSPXn;VpP5rPtrrULH`:X'2NrZ +JcFj3!P()d!!/;N\GlSPXn;VpP5rPtrrULH`:X'2NrZ +JcFp5!TR_h!!.6&[f6B%Fnbn=p +JcFp5!TR_h!!.6&[f6B%Fnbn=p +JcFp5!TR_h!!.6&[f6B%Fnbn=p +JcG!7!VW5c!!,m6[/U0F!;QR!\MXA#4TKWbr;R#(2#pWP!-R],rs4egPM,!BFTBAWrs-k-!'aik +27`Yb$2.meXkDaQ:Gq21rs4egPM,!BFTBASrrHZ(Z2]=~> +JcG!7!VW5c!!,m6[/U0F!;QR!\MXA#4TKWbr;R#(2#pWP!-R],rs4egPM,!BFTBAWrs-k-!'aik +27`Yb$2.meXkDaQ:Gq21rs4egPM,!BFTBASrrHZ(Z2]=~> +JcG!7!VW5c!!,m6[/U0F!;QR!\MXA#4TKWbr;R#(2#pWP!-R],rs4egPM,!BFTBAWrs-k-!'aik +27`Yb$2.meXkDaQ:Gq21rs4egPM,!BFTBASrrHZ(Z2]=~> +JcG$8!SL9I!!/eeZi:*o!875K$'P@kpAb0GA2WEHrs=khXnMepfjlu#rr3&%!6"g8!hfVIrVm1t +!28f[s7WPpPPtO]A,u?%rr_t*:\Oef!j)I@r;Qh^!872J!qlW?Z2]=~> +JcG$8!SL9I!!/eeZi:*o!875K$'P@kpAb0GA2WEHrs=khXnMepfjlu#rr3&%!6"g8!hfVIrVm1t +!28f[s7WPpPPtO]A,u?%rr_t*:\Oef!j)I@r;Qh^!872J!qlW?Z2]=~> +JcG$8!SL9I!!/eeZi:*o!875K$'P@kpAb0GA2WEHrs=khXnMepfjlu#rr3&%!6"g8!hfVIrVm1t +!28f[s7WPpPPtO]A,u?%rr_t*:\Oef!j)I@r;Qh^!872J!qlW?Z2]=~> +JcG'9!3Q2"!G(5prrGohqu6`D!6"g8#PM\=s8UCF`;KW?p1._6s7S=PqYpSM:]C@qcN(o\rs-IB +\c;]J!9 +JcG'9!3Q2"!G(5prrGohqu6`D!6"g8#PM\=s8UCF`;KW?p1._6s7S=PqYpSM:]C@qcN(o\rs-IB +\c;]J!9 +JcG'9!3Q2"!G(5prrGohqu6`D!6"g8#PM\=s8UCF`;KW?p1._6s7S=PqYpSM:]C@qcN(o\rs-IB +\c;]J!9 +ZMt*gft"5eU&0!3XTHGomEY_4j(/)g!3NF(!MN +ZMt*gft"5eU&0!3XTHGomEY_4j(/)g!3NF(!MN +ZMt*gft"5eU&0!3XTHGomEY_4j(/)g!3NF(!MN +\Gl^!c`M=crVuporcS.@!29C7!&a`U"D!4gg%Ntr!Q6kp!!-WjXoAIi!71WD!pp!6q>^JK!pp!J +q>USOPQ-i#q#:LT\c;$sj8&]Ym/Yi>!71K@"k`nUs-&03rrG!qqu6`k!5u,AJ,~> +\Gl^!c`M=crVuporcS.@!29C7!&a`U"D!4gg%Ntr!Q6kp!!-WjXoAIi!71WD!pp!6q>^JK!pp!J +q>USOPQ-i#q#:LT\c;$sj8&]Ym/Yi>!71K@"k`nUs-&03rrG!qqu6`k!5u,AJ,~> +\Gl^!c`M=crVuporcS.@!29C7!&a`U"D!4gg%Ntr!Q6kp!!-WjXoAIi!71WD!pp!6q>^JK!pp!J +q>USOPQ-i#q#:LT\c;$sj8&]Ym/Yi>!71K@"k`nUs-&03rrG!qqu6`k!5u,AJ,~> +]`/?4c]_-)!-P!Gg$S>0$00^@P@OXnA>.]1rrMhWr;Zi"WrE*BL&M#Pf`:gI"0H_!!;QQsX`aYd +Xn_o!Ffk\s!;HKrA?Gk3g%kXOirJ->FfkH=!HkOArrK5ZYQ'+~> +]`/?4c]_-)!-P!Gg$S>0$00^@P@OXnA>.]1rrMhWr;Zi"WrE*BL&M#Pf`:gI"0H_!!;QQsX`aYd +Xn_o!Ffk\s!;HKrA?Gk3g%kXOirJ->FfkH=!HkOArrK5ZYQ'+~> +]`/?4c]_-)!-P!Gg$S>0$00^@P@OXnA>.]1rrMhWr;Zi"WrE*BL&M#Pf`:gI"0H_!!;QQsX`aYd +Xn_o!Ffk\s!;HKrA?Gk3g%kXOirJ->FfkH=!HkOArrK5ZYQ'+~> +^]+Q4`.\0kFh-2frs/8NTk"-\PL&+c!TR_i!!+t1WW*% +^]+Q4`.\0kFh-2frs/8NTk"-\PL&+c!TR_i!!+t1WW*% +^]+Q4`.\0kFh-2frs/8NTk"-\PL&+c!TR_i!!+t1WW*% +_>a\bK`Euocee[+p;DXb23[([rrLG'rVutQp8@ok:QteX!ndSIq>UT"FkHcgq>USkFoSR>q>UZd +!87D*!;?3f"?!aiA>/i!"h?Mjs/f)mrrVQfg&1jOXT7als*t~> +_>a\bK`Euocee[+p;DXb23[([rrLG'rVutQp8@ok:QteX!ndSIq>UT"FkHcgq>USkFoSR>q>UZd +!87D*!;?3f"?!aiA>/i!"h?Mjs/f)mrrVQfg&1jOXT7als*t~> +_>a\bK`Euocee[+p;DXb23[([rrLG'rVutQp8@ok:QteX!ndSIq>UT"FkHcgq>USkFoSR>q>UZd +!87D*!;?3f"?!aiA>/i!"h?Mjs/f)mrrVQfg&1jOXT7als*t~> +`;^#7\PE3Z`7Y(np:4]6Fi/\s`;0E::SIgU!71NA#-Bc_ +s7QH2q>UZP!9=*]2>6nH##CH_s6Tg>qYpSu2>mIUp,/PHs*t~> +`;^#7\PE3Z`7Y(np:4]6Fi/\s`;0E::SIgU!71NA#-Bc_ +s7QH2q>UZP!9=*]2>6nH##CH_s6Tg>qYpSu2>mIUp,/PHs*t~> +`;^#7\PE3Z`7Y(np:4]6Fi/\s`;0E::SIgU!71NA#-Bc_ +s7QH2q>UZP!9=*]2>6nH##CH_s6Tg>qYpSu2>mIUp,/PHs*t~> +`r?59XYhu0mF2(D&T#Isj%s8S9?j8AoY +f`8S^rrSB[pA4ghFoVICp,/'2rrSBAmJd+eKf/T%rrUjR\buI/Tf)PHs*t~> +`r?59XYhu0mF2(D&T#Isj%s8S9?j8AoY +f`8S^rrSB[pA4ghFoVICp,/'2rrSBAmJd+eKf/T%rrUjR\buI/Tf)PHs*t~> +`r?59XYhu0mF2(D&T#Isj%s8S9?j8AoY +f`8S^rrSB[pA4ghFoVICp,/'2rrSBAmJd+eKf/T%rrUjR\buI/Tf)PHs*t~> +a8Z:E2)VN0lMgqQg$S&("RVBQ:XAD-!VU('!!-WtUAkMP!4i.0m5:+$rVm,_251'Mm5:+*rrUk2 +U&P&up1-&!s8Vep!0dB]"77sVpAFplP5sYBrs@?YFlWN%m=bPYrVm2tA2V=*s7WPpPPkF^irHWl +s*t~> +a8Z:E2)VN0lMgqQg$S&("RVBQ:XAD-!VU('!!-WtUAkMP!4i.0m5:+$rVm,_251'Mm5:+*rrUk2 +U&P&up1-&!s8Vep!0dB]"77sVpAFplP5sYBrs@?YFlWN%m=bPYrVm2tA2V=*s7WPpPPkF^irHWl +s*t~> +a8Z:E2)VN0lMgqQg$S&("RVBQ:XAD-!VU('!!-WtUAkMP!4i.0m5:+$rVm,_251'Mm5:+*rrUk2 +U&P&up1-&!s8Vep!0dB]"77sVpAFplP5sYBrs@?YFlWN%m=bPYrVm2tA2V=*s7WPpPPkF^irHWl +s*t~> +ao;Ls:Go9Jli.%[X\\or!]@+RlMh"SP5oamn,EF^AGuQ0L%_2>%\YcIs8V+::W1r>P5ob!rr38a +2,D0DfolE"r;R#qP5kSn!&^nUrs@^C:V#03\PG*/r;R#^:B37J!)M;Frs/7]!!$O026HfV!qp/I +XT*e~> +ao;Ls:Go9Jli.%[X\\or!]@+RlMh"SP5oamn,EF^AGuQ0L%_2>%\YcIs8V+::W1r>P5ob!rr38a +2,D0DfolE"r;R#qP5kSn!&^nUrs@^C:V#03\PG*/r;R#^:B37J!)M;Frs/7]!!$O026HfV!qp/I +XT*e~> +ao;Ls:Go9Jli.%[X\\or!]@+RlMh"SP5oamn,EF^AGuQ0L%_2>%\YcIs8V+::W1r>P5ob!rr38a +2,D0DfolE"r;R#qP5kSn!&^nUrs@^C:V#03\PG*/r;R#^:B37J!)M;Frs/7]!!$O026HfV!qp/I +XT*e~> +bPq_=K`HholMh4OA2ULLs5U4=2<3s$"5.2bXmuDlj#-f9!0a#S!qp/8rr32iP;N=?:W3/1#47U3 +!!$QJq>UTbc`Pmoq>U]nTeufM23[G'rr_<"\_6`W"RXO;g%P=C!g>M/XT*e~> +bPq_=K`HholMh4OA2ULLs5U4=2<3s$"5.2bXmuDlj#-f9!0a#S!qp/8rr32iP;N=?:W3/1#47U3 +!!$QJq>UTbc`Pmoq>U]nTeufM23[G'rr_<"\_6`W"RXO;g%P=C!g>M/XT*e~> +bPq_=K`HholMh4OA2ULLs5U4=2<3s$"5.2bXmuDlj#-f9!0a#S!qp/8rr32iP;N=?:W3/1#47U3 +!!$QJq>UTbc`Pmoq>U]nTeufM23[G'rr_<"\_6`W"RXO;g%P=C!g>M/XT*e~> +bl7dk2,Doirr_sjAG5s$"867_p?;MY\M[pXo`"sP2?!RU`16i/j#*%'rrU+=`2iog~> +bl7dk2,Doirr_sjAG5s$"867_p?;MY\M[pXo`"sP2?!RU`16i/j#*%'rrU+=`2iog~> +bl7dk2,Doirr_sjAG5s$"867_p?;MY\M[pXo`"sP2?!RU`16i/j#*%'rrU+=`2iog~> +c2Rm>!/:.1rrT;[pA4djp.pn8rr_Y!28o4g!TQ':!!'s+rrU+=`3B7CirGdQs*t~> +c2Rm>!/:.1rrT;[pA4djp.pn8rr_Y!28o4g!TQ':!!'s+rrU+=`3B7CirGdQs*t~> +c2Rm>!/:.1rrT;[pA4djp.pn8rr_Y!28o4g!TQ':!!'s+rrU+=`3B7CirGdQs*t~> +ci4+@A2V +ci4+@A2V +ci4+@A2V +d/O4.2,E8prrV3\mJ-\_p&Ne-rr^1sAG5p#"lhH?!&`f&rrSAa`3fOHj#(B@WW.J~> +d/O4.2,E8prrV3\mJ-\_p&Ne-rr^1sAG5p#"lhH?!&`f&rrSAa`3fOHj#(B@WW.J~> +d/O4.2,E8prrV3\mJ-\_p&Ne-rr^1sAG5p#"lhH?!&`f&rrSAa`3fOHj#(B@WW.J~> +dJj=/2.ZFBrrLdQpAY-ng#W/8j#(B@rVm&]2#mV6j-9QFP5rP0rr_:=AG2u%J,~> +dJj=/2.ZFBrrLdQpAY-ng#W/8j#(B@rVm&]2#mV6j-9QFP5rP0rr_:=AG2u%J,~> +dJj=/2.ZFBrrLdQpAY-ng#W/8j#(B@rVm&]2#mV6j-9QFP5rP0rr_:=AG2u%J,~> +df0F020JWRrrUjRmJ-\_p&Ne+rsRjtAG6''j#$f:2<0l"!g +df0F020JWRrrUjRmJ-\_p&Ne+rsRjtAG6''j#$f:2<0l"!g +df0F020JWRrrUjRmJ-\_p&Ne+rsRjtAG6''j#$f:2<0l"!g +e,KL023[#!!B%gjrrU+=p>Z)Yp1._-j#$f:2<0eu!hfUf])MlN!/:-Ds*t~> +e,KL023[#!!B%gjrrU+=p>Z)Yp1._-j#$f:2<0eu!hfUf])MlN!/:-Ds*t~> +e,KL023[#!!B%gjrrU+=p>Z)Yp1._-j#$f:2<0eu!hfUf])MlN!/:-Ds*t~> +eGfU12.YYF!g?FRq>UJ+L#Dt9p,-5O!!"n:NrK4"!-S"KrrSAaTqq^=~> +eGfU12.YYF!g?FRq>UJ+L#Dt9p,-5O!!"n:NrK4"!-S"KrrSAaTqq^=~> +eGfU12.YYF!g?FRq>UJ+L#Dt9p,-5O!!"n:NrK4"!-S"KrrSAaTqq^=~> +ec,aF:Ls1Wrr_X6HhR@:!f/,`hu<`3(&e15`/O]uj%hPc_#FMsA2V<#s*t~> +ec,aF:Ls1Wrr_X6HhR@:!f/,`hu<`3(&e15`/O]uj%hPc_#FMsA2V<#s*t~> +ec,aF:Ls1Wrr_X6HhR@:!f/,`hu<`3(&e15`/O]uj%hPc_#FMsA2V<#s*t~> +ec,\n2>6#/#55/V0.Ti:rr3/JA1K6-`8LXqFoD@@`/=Qtp4WL?p;?n4\M[pXUAo`~> +ec,\n2>6#/#55/V0.Ti:rr3/JA1K6-`8LXqFoD@@`/=Qtp4WL?p;?n4\M[pXUAo`~> +ec,\n2>6#/#55/V0.Ti:rr3/JA1K6-`8LXqFoD@@`/=Qtp4WL?p;?n4\M[pXUAo`~> +f)GfR!86B3#PP8W26HT>PPbCbL$eSt!-QuTrrMLErVurOM#RS'2,DQ +f)GfR!86B3#PP8W26HT>PPbCbL$eSt!-QuTrrMLErVurOM#RS'2,DQ +f)GfR!86B3#PP8W26HT>PPbCbL$eSt!-QuTrrMLErVurOM#RS'2,DQ +fDbp4!3P;]"no&U26HTNrri%n!87)ErrhA)!/9h$rrqF?PBB[pM#RVOP5oaYb5VV3P5oacTDsE~> +fDbp4!3P;]"no&U26HTNrri%n!87)ErrhA)!/9h$rrqF?PBB[pM#RVOP5oaYb5VV3P5oacTDsE~> +fDbp4!3P;]"no&U26HTNrri%n!87)ErrhA)!/9h$rrqF?PBB[pM#RVOP5oaYb5VV3P5oacTDsE~> +fDkk]jSoDWXYhuu;WpAaM;Tn`RMfl[:YmEY_7m?7NGc^k)d~> +fDkk]jSoDWXYhuu;WpAaM;Tn`RMfl[:YmEY_7m?7NGc^k)d~> +fDkk]jSoDWXYhuu;WpAaM;Tn`RMfl[:YmEY_7m?7NGc^k)d~> +f`)#`!9<5A"mrEL26HTIrrG!qp\t?+2)W>4rrT_2j+[L9fjk)*g!]m'm?7NG`1-dW~> +f`)#`!9<5A"mrEL26HTIrrG!qp\t?+2)W>4rrT_2j+[L9fjk)*g!]m'm?7NG`1-dW~> +f`)#`!9<5A"mrEL26HTIrrG!qp\t?+2)W>4rrT_2j+[L9fjk)*g!]m'm?7NG`1-dW~> +g&D-I25045"mqKR:V$2nrrULHmIpP_p7VI^g#W/6A9EP)"ke"u:V$2Orrr,7FT>4URK%d~> +g&D-I25045"mqKR:V$2nrrULHmIpP_p7VI^g#W/6A9EP)"ke"u:V$2Orrr,7FT>4URK%d~> +g&D-I25045"mqKR:V$2nrrULHmIpP_p7VI^g#W/6A9EP)"ke"u:V$2Orrr,7FT>4URK%d~> +g&D,U2>6;7"RVBQ:W2o*!MO&qrrh_3!-R\krrUjRfn05.m?9C-KuE]@rrp`42#rinQiDR~> +g&D,U2>6;7"RVBQ:W2o*!MO&qrrh_3!-R\krrUjRfn05.m?9C-KuE]@rrp`42#rinQiDR~> +g&D,U2>6;7"RVBQ:W2o*!MO&qrrh_3!-R\krrUjRfn05.m?9C-KuE]@rrp`42#rinQiDR~> +gA_6J26HHL%)djBFh.5Gs6Z!M:W2i(!Dfifrrh"c!29,Ls8R4ms8W*'c\2?!Ffj?Xrs.SpK`D+, +`:fJrJ,~> +gA_6J26HHL%)djBFh.5Gs6Z!M:W2i(!Dfifrrh"c!29,Ls8R4ms8W*'c\2?!Ffj?Xrs.SpK`D+, +`:fJrJ,~> +gA_6J26HHL%)djBFh.5Gs6Z!M:W2i(!Dfifrrh"c!29,Ls8R4ms8W*'c\2?!Ffj?Xrs.SpK`D+, +`:fJrJ,~> +gA_5m!;?'b%-(+`PHC$+2:I`h:W2l)!SN2+!!.f,nc'$92)VrEs/f&s!&]u6nc&[:!98Y1rVm/L +ThbXgFeQb,mf*URc`M=I!&]tYp6,H+~> +gA_5m!;?'b%-(+`PHC$+2:I`h:W2l)!SN2+!!.f,nc'$92)VrEs/f&s!&]u6nc&[:!98Y1rVm/L +ThbXgFeQb,mf*URc`M=I!&]tYp6,H+~> +gA_5m!;?'b%-(+`PHC$+2:I`h:W2l)!SN2+!!.f,nc'$92)VrEs/f&s!&]u6nc&[:!98Y1rVm/L +ThbXgFeQb,mf*URc`M=I!&]tYp6,H+~> +gA_1aPP"kWm58GArr3,pKb-_lo)B!6!-QW@cZK6+nc'$kXT2$l!28*!\PG*Cnc&VcTn37?rsA)= +Tli3m!&\nArN-*SVu3XuKlp2j!!@A;`8cmXJ,~> +gA_1aPP"kWm58GArr3,pKb-_lo)B!6!-QW@cZK6+nc'$kXT2$l!28*!\PG*Cnc&VcTn37?rsA)= +Tli3m!&\nArN-*SVu3XuKlp2j!!@A;`8cmXJ,~> +gA_1aPP"kWm58GArr3,pKb-_lo)B!6!-QW@cZK6+nc'$kXT2$l!28*!\PG*Cnc&VcTn37?rsA)= +Tli3m!&\nArN-*SVu3XuKlp2j!!@A;`8cmXJ,~> +g]%?8!87#E!d.<4qu6\6AFfa%cN(o]rrT_2cg^r:m6rJarVlunA2X)OrrKYfJcGEC"SUNeXeG]9 +!]DZNrH/7:Xh!-PM>r)~> +g]%?8!87#E!d.<4qu6\6AFfa%cN(o]rrT_2cg^r:m6rJarVlunA2X)OrrKYfJcGEC"SUNeXeG]9 +!]DZNrH/7:Xh!-PM>r)~> +g]%?8!87#E!d.<4qu6\6AFfa%cN(o]rrT_2cg^r:m6rJarVlunA2X)OrrKYfJcGEC"SUNeXeG]9 +!]DZNrH/7:Xh!-PM>r)~> +g]%;V:\=Ygm/YK/rrVQfj7E9O:QtYT!JO>=rrUjRg&(dNp,/uCrrVQfc[l,`rrP%XPC``6s*t~> +g]%;V:\=Ygm/YK/rrVQfj7E9O:QtYT!JO>=rrUjRg&(dNp,/uCrrVQfc[l,`rrP%XPC``6s*t~> +g]%;V:\=Ygm/YK/rrVQfj7E9O:QtYT!JO>=rrUjRg&(dNp,/uCrrVQfc[l,`rrP%XPC``6s*t~> +g]%:bU%J?c`&7>i!G&>)rrULHmJ?ham/YK&rrJ=+q>UK+2=^\IA>+SSmf*:\rVuq^JcC6~> +g]%:bU%J?c`&7>i!G&>)rrULHmJ?ham/YK&rrJ=+q>UK+2=^\IA>+SSmf*:\rVuq^JcC6~> +g]%:bU%J?c`&7>i!G&>)rrULHmJ?ham/YK&rrJ=+q>UK+2=^\IA>+SSmf*:\rVuq^JcC6~> +h#@HL!71<;!NgM>rrJ=;o`"roAGH0*A?GD%!G&>.rrV3\j7<3NTk&`Smf*:?r;Zh]K)^?~> +h#@HL!71<;!NgM>rrJ=;o`"roAGH0*A?GD%!G&>.rrV3\j7<3NTk&`Smf*:?r;Zh]K)^?~> +h#@HL!71<;!NgM>rrJ=;o`"roAGH0*A?GD%!G&>.rrV3\j7<3NTk&`Smf*:?r;Zh]K)^?~> +h#@H/!;?'b!NgM>rrJ=;o`"roFnkt;Ffk36! +h#@H/!;?'b!NgM>rrJ=;o`"roFnkt;Ffk36! +h#@H/!;?'b!NgM>rrJ=;o`"roFnkt;Ffk36! +h#@DW:\4Se`&7>i!G&>)rrK6Eq#:A;XmuDl28o=j!qlWIo)AdY!82r'n,EBOqZ$W7K`?Q~> +h#@DW:\4Se`&7>i!G&>)rrK6Eq#:A;XmuDl28o=j!qlWIo)AdY!82r'n,EBOqZ$W7K`?Q~> +h#@DW:\4Se`&7>i!G&>)rrK6Eq#:A;XmuDl28o=j!qlWIo)AdY!82r'n,EBOqZ$W7K`?Q~> +h#@D=Fn>V7m/YK/rrVQfj7N?P`&7>i!B%gcrrI8+q>UKA!:^!h!5sHgn,EB1q>^N6L&ZZ~> +h#@D=Fn>V7m/YK/rrVQfj7N?P`&7>i!B%gcrrI8+q>UKA!:^!h!5sHgn,EB1q>^N6L&ZZ~> +h#@D=Fn>V7m/YK/rrVQfj7N?P`&7>i!B%gcrrI8+q>UKA!:^!h!5sHgn,EB1q>^N6L&ZZ~> +h#@CtXn)JnKhqF>rrI7QoD\mZ!6"a6!kA=)nc&[/2>6nH!Hj+crrI8EJcG3=p](<4LAuc~> +h#@CtXn)JnKhqF>rrI7QoD\mZ!6"a6!kA=)nc&[/2>6nH!Hj+crrI8EJcG3=p](<4LAuc~> +h#@CtXn)JnKhqF>rrI7QoD\mZ!6"a6!kA=)nc&[/2>6nH!Hj+crrI8EJcG3=p](<4LAuc~> +h#@CtXn)Jom58GArr3)oKf.o]rrSlOj8AoYj#*P"rrVmiFo21?\H(=PrrI8EJcG6>!:BL\!5sZm +J,~> +h#@CtXn)Jom58GArr3)oKf.o]rrSlOj8AoYj#*P"rrVmiFo21?\H(=PrrI8EJcG6>!:BL\!5sZm +J,~> +h#@CtXn)Jom58GArr3)oKf.o]rrSlOj8AoYj#*P"rrVmiFo21?\H(=PrrI8EJcG6>!:BL\!5sZm +J,~> +h#@CN\af\*j%fZ8RuT?`j73-Op1-&!rr3)=2.ZFLrs@^CFlWN%p7VK)n,NEAJcG6>!87&G!98n8 +J,~> +h#@CN\af\*j%fZ8RuT?`j73-Op1-&!rr3)=2.ZFLrs@^CFlWN%p7VK)n,NEAJcG6>!87&G!98n8 +J,~> +h#@CN\af\*j%fZ8RuT?`j73-Op1-&!rr3)=2.ZFLrs@^CFlWN%p7VK)n,NEAJcG6>!87&G!98n8 +J,~> +h#@BTg$eqE]eg*[\b>Ll#kjG^01@MoU%[mR#NK=p2DY=j`:!X+X`]3pnG`Kjp&G+hp5/g"~> +h#@BTg$eqE]eg*[\b>Ll#kjG^01@MoU%[mR#NK=p2DY=j`:!X+X`]3pnG`Kjp&G+hp5/g"~> +h#@BTg$eqE]eg*[\b>Ll#kjG^01@MoU%[mR#NK=p2DY=j`:!X+X`]3pnG`Kjp&G+hp5/g"~> +h#@BTcg^r/%=s*t~> +h#@BTcg^r/%=s*t~> +h#@BTcg^r/%=s*t~> +h#@CcXmuDrp1-&@s.M=1mf*L0!0dGH!4hIr#PO>]`:d_!cgLf6FeOBdnG`K!qu?dtJ,~> +h#@CcXmuDrp1-&@s.M=1mf*L0!0dGH!4hIr#PO>]`:d_!cgLf6FeOBdnG`K!qu?dtJ,~> +h#@CcXmuDrp1-&@s.M=1mf*L0!0dGH!4hIr#PO>]`:d_!cgLf6FeOBdnG`K!qu?dtJ,~> +h#@CtXn)Jop1-&@rr<"/n,EHk!29Dl!kA;pmf*C_A2WEHrrSAaXmc8jFfg5pnGiLg"uVUj9E5(G +K`?Q~> +h#@CtXn)Jop1-&@rr<"/n,EHk!29Dl!kA;pmf*C_A2WEHrrSAaXmc8jFfg5pnGiLg"uVUj9E5(G +K`?Q~> +h#@CtXn)Jop1-&@rr<"/n,EHk!29Dl!kA;pmf*C_A2WEHrrSAaXmc8jFfg5pnGiLg"uVUj9E5(G +K`?Q~> +h#@CtU%A9dp1-&@rVlrd250R?!g +h#@CtU%A9dp1-&@rVlrd250R?!g +h#@CtU%A9dp1-&@rVlrd250R?!g +h#@DWFnG\9p1-&@qu6`9!71<;"87oY`;9K9j#(B@oD\pQ2.Z+Nrr^q3AF8sf! +h#@DWFnG\9p1-&@qu6`9!71<;"87oY`;9K9j#(B@oD\pQ2.Z+Nrr^q3AF8sf! +h#@DWFnG\9p1-&@qu6`9!71<;"87oY`;9K9j#(B@oD\pQ2.Z+Nrr^q3AF8sf! +h#@Dn2>-tOp1-&@q>UM[2>6eE"kg"@*j>;5rr_:l:ZM3L"nolp(dudHrrp5,(mDo3pAY3S!98Y1 +li.(?!!%.ps*t~> +h#@Dn2>-tOp1-&@q>UM[2>6eE"kg"@*j>;5rr_:l:ZM3L"nolp(dudHrrp5,(mDo3pAY3S!98Y1 +li.(?!!%.ps*t~> +h#@Dn2>-tOp1-&@q>UM[2>6eE"kg"@*j>;5rr_:l:ZM3L"nolp(dudHrrp5,(mDo3pAY3S!98Y1 +li.(?!!%.ps*t~> +h#@H9!:BR]"iO^I!)gB(rrp>D!!$97qu6rqFT>s5BE1igqYpc +h#@H9!:BR]"iO^I!)gB(rrp>D!!$97qu6rqFT>s5BE1igqYpc +h#@H9!:BR]"iO^I!)gB(rrp>D!!$97qu6rqFT>s5BE1igqYpc +g]%:3`;9K?p2C"LS""XO?hXL!$2.^+DO[,5!+5I!rr_t*2;/!/"87F+j8Juap4WL1^!XAd!6"j9 +"627mpAY'ofem=6rr3)oA2W'>rr_tK2<4K3!L%YWs69R_!!)_Hs*t~> +g]%:3`;9K?p2C"LS""XO?hXL!$2.^+DO[,5!+5I!rr_t*2;/!/"87F+j8Juap4WL1^!XAd!6"j9 +"627mpAY'ofem=6rr3)oA2W'>rr_tK2<4K3!L%YWs69R_!!)_Hs*t~> +g]%:3`;9K?p2C"LS""XO?hXL!$2.^+DO[,5!+5I!rr_t*2;/!/"87F+j8Juap4WL1^!XAd!6"j9 +"627mpAY'ofem=6rr3)oA2W'>rr_tK2<4K3!L%YWs69R_!!)_Hs*t~> +g].;-qYpV;.'!6\!ieq$rr3%=.'!6\!idYfrr3&%2<4T6!Hh3:rrRm3g&1jOXT6<=rrGo:\aqj27\; +g].;-qYpV;.'!6\!ieq$rr3%=.'!6\!idYfrr3&%2<4T6!Hh3:rrRm3g&1jOXT6<=rrGo:\aqj27\; +g].;-qYpV;.'!6\!ieq$rr3%=.'!6\!idYfrr3&%2<4T6!Hh3:rrRm3g&1jOXT6<=rrGo:\aqj27\; +g]%>n!;??j!ndRKqnE?8!6"oU!35q2#-%[As8OsYqYpff!71]FcN)Yprs#/SpA`G=mJ?h`XYp+X +!B%"UrrVQfchdYCf`:Djs69OcK`D+kL&ZZ~> +g]%>n!;??j!ndRKqnE?8!6"oU!35q2#-%[As8OsYqYpff!71]FcN)Yprs#/SpA`G=mJ?h`XYp+X +!B%"UrrVQfchdYCf`:Djs69OcK`D+kL&ZZ~> +g]%>n!;??j!ndRKqnE?8!6"oU!35q2#-%[As8OsYqYpff!71]FcN)Yprs#/SpA`G=mJ?h`XYp+X +!B%"UrrVQfchdYCf`:Djs69OcK`D+kL&ZZ~> +g]%?K!6"g8!InYU^BAFZs*nq^^BJL^s4IDGq>UV@PQ1Z:PPP4^p,0D\PBH^$#5/&Ms4IDGq>UJ< +U&+ciP@T7Ekl1ae!!'-Ts*t~> +g]%?K!6"g8!InYU^BAFZs*nq^^BJL^s4IDGq>UV@PQ1Z:PPP4^p,0D\PBH^$#5/&Ms4IDGq>UJ< +U&+ciP@T7Ekl1ae!!'-Ts*t~> +g]%?K!6"g8!InYU^BAFZs*nq^^BJL^s4IDGq>UV@PQ1Z:PPP4^p,0D\PBH^$#5/&Ms4IDGq>UJ< +U&+ciP@T7Ekl1ae!!'-Ts*t~> +gA_2-Fo;7?09c4H"JYts!1Wf!"IfDk\PN##"g)qIrrCC?s8RcSs)kI=rrc-.s/fi,rrK6Equ6`k +27\; +gA_2-Fo;7?09c4H"JYts!1Wf!"IfDk\PN##"g)qIrrCC?s8RcSs)kI=rrc-.s/fi,rrK6Equ6`k +27\; +gA_2-Fo;7?09c4H"JYts!1Wf!"IfDk\PN##"g)qIrrCC?s8RcSs)kI=rrc-.s/fi,rrK6Equ6`k +27\; +gA_6-!87>N! +gA_6-!87>N! +gA_6-!87>N! +g&D(KFoD=@!2KA)"KDIq!2KA)"JYtsf`:gI"bi0?rrCaIrrfHHs+Q1&rrr)rg&K@uq#:AKPPb@\ +:QpA0kPkPUrW%ZPJ,~> +g&D(KFoD=@!2KA)"KDIq!2KA)"JYtsf`:gI"bi0?rrCaIrrfHHs+Q1&rrr)rg&K@uq#:AKPPb@\ +:QpA0kPkPUrW%ZPJ,~> +g&D(KFoD=@!2KA)"KDIq!2KA)"JYtsf`:gI"bi0?rrCaIrrfHHs+Q1&rrr)rg&K@uq#:AKPPb@\ +:QpA0kPkPUrW%ZPJ,~> +g&D,l!87AO!D.n=^BB`Rs%&(D^BKNKs7QH2qYpcn28oOp27`M^"_=>,`&78brs$CApAagd`;9K8 +p&N&/rrT;&m=G<"s8E"Ps*t~> +g&D,l!87AO!D.n=^BB`Rs%&(D^BKNKs7QH2qYpcn28oOp27`M^"_=>,`&78brs$CApAagd`;9K8 +p&N&/rrT;&m=G<"s8E"Ps*t~> +g&D,l!87AO!D.n=^BB`Rs%&(D^BKNKs7QH2qYpcn28oOp27`M^"_=>,`&78brs$CApAagd`;9K8 +p&N&/rrT;&m=G<"s8E"Ps*t~> +f`1torr3"j4Sc_p=HEKE48HVq4-0FAP>CoLrs"ZEpAb/V:\k"pf`9_*p,/Q@rrVmiPQ(R`P>CoL +rrSBApAP!mp,/t's5j7_A,lV_LAuc~> +f`1torr3"j4Sc_p=HEKE48HVq4-0FAP>CoLrs"ZEpAb/V:\k"pf`9_*p,/Q@rrVmiPQ(R`P>CoL +rrSBApAP!mp,/t's5j7_A,lV_LAuc~> +f`1torr3"j4Sc_p=HEKE48HVq4-0FAP>CoLrs"ZEpAb/V:\k"pf`9_*p,/Q@rrVmiPQ(R`P>CoL +rrSBApAP!mp,/t's5j7_A,lV_LAuc~> +f`)30!6"p;m4WAS^BTSrj8\KHK)<:gJcP3 +f`)30!6"p;m4WAS^BTSrj8\KHK)<:gJcP3 +f`)30!6"p;m4WAS^BTSrj8\KHK)<:gJcP3 +fDc>S2>7(M_uO\b^V@:1!36%u$,cgg\A,egGQ>\\rs7X\25..S:B8?2rr^1>L$em>"5-I-mJ[%j +_uNT8Xe@UJj8Ao_j%hP+XfYA!`;KW:f`9?Ls5a1^P5kU$LAuc~> +fDc>S2>7(M_uO\b^V@:1!36%u$,cgg\A,egGQ>\\rs7X\25..S:B8?2rr^1>L$em>"5-I-mJ[%j +_uNT8Xe@UJj8Ao_j%hP+XfYA!`;KW:f`9?Ls5a1^P5kU$LAuc~> +fDc>S2>7(M_uO\b^V@:1!36%u$,cgg\A,egGQ>\\rs7X\25..S:B8?2rr^1>L$em>"5-I-mJ[%j +_uNT8Xe@UJj8Ao_j%hP+XfYA!`;KW:f`9?Ls5a1^P5kU$LAuc~> +fDbpG:Nc[:#L>((=BI"*`;KW?`%V0n=9("mqu6]j\c-^PPO85H#h_uRA9CZJFnY_4!UZ*MFTK&H +qYpTi\c-^PPO8;J!qnL*JcFd1"0DP'XbQk+~> +fDbpG:Nc[:#L>((=BI"*`;KW?`%V0n=9("mqu6]j\c-^PPO85H#h_uRA9CZJFnY_4!UZ*MFTK&H +qYpTi\c-^PPO8;J!qnL*JcFd1"0DP'XbQk+~> +fDbpG:Nc[:#L>((=BI"*`;KW?`%V0n=9("mqu6]j\c-^PPO85H#h_uRA9CZJFnY_4!UZ*MFTK&H +qYpTi\c-^PPO8;J!qnL*JcFd1"0DP'XbQk+~> +f)Gg)!3Q8#"nom:Xi0r0rrr,7Xf]P8lMgk1riH1\hu2V$j8T4`!!'-Us*t~> +f)Gg)!3Q8#"nom:Xi0r0rrr,7Xf]P8lMgk1riH1\hu2V$j8T4`!!'-Us*t~> +f)Gg)!3Q8#"nom:Xi0r0rrr,7Xf]P8lMgk1riH1\hu2V$j8T4`!!'-Us*t~> +ec,]]!7.kK!hfVSJcFa0"4$rIFb]pH~> +ec,]]!7.kK!hfVSJcFa0"4$rIFb]pH~> +ec,]]!7.kK!hfVSJcFa0"4$rIFb]pH~> +eGfT62<1tA!lP)WJcF^/"5*YSFb]pH~> +eGfT62<1tA!lP)WJcF^/"5*YSFb]pH~> +eGfT62<1tA!lP)WJcF^/"5*YSFb]pH~> +e,KJ[2<2%C!lP)4JcF[."5*YSFb]pH~> +e,KJ[2<2%C!lP)4JcF[."5*YSFb]pH~> +e,KJ[2<2%C!lP)4JcF[."5*YSFb]pH~> +e,KODA2WDTrrU+=PC`bkrr_rp!&]N2J,~> +e,KODA2WDTrrU+=PC`bkrr_rp!&]N2J,~> +e,KODA2WDTrrU+=PC`bkrr_rp!&]N2J,~> +df0FCA2WDVrrU+=PC`bis8E"Qs*t~> +df0FCA2WDVrrU+=PC`bis8E"Qs*t~> +df0FCA2WDVrrU+=PC`bis8E"Qs*t~> +dJj=BFZ%+JrrT;&PC`bhs8E"Qs*t~> +dJj=BFZ%+JrrT;&PC`bhs8E"Qs*t~> +dJj=BFZ%+JrrT;&PC`bhs8E"Qs*t~> +ci4'1!3Np6"87EK`.@sCs8E"Qs*t~> +ci4'1!3Np6"87EK`.@sCs8E"Qs*t~> +ci4'1!3Np6"87EK`.@sCs8E"Qs*t~> +cMn!W!-S"Mrr_:l2;*Q\gA_7N!!)_Js*t~> +cMn!W!-S"Mrr_:l2;*Q\gA_7N!!)_Js*t~> +cMn!W!-S"Mrr_:l2;*Q\gA_7N!!)_Js*t~> +c2Rn!:GpJ7rr]A'FmXb[g&D.s!!(]-s*t~> +c2Rn!:GpJ7rr]A'FmXb[g&D.s!!(]-s*t~> +c2Rn!:GpJ7rr]A'FmXb[g&D.s!!(]-s*t~> +bl7h>K`Hi#`W$&#A,raLrrDc_f`:E;rr[BD!83/-J,~> +bl7h>K`Hi#`W$&#A,raLrrDc_f`:E;rr[BD!83/-J,~> +bl7h>K`Hi#`W$&#A,raLrrDc_f`:E;rr[BD!83/-J,~> +b5VRi:Go]+rs/7]\b;]sFlUdI#jp +b5VRi:Go]+rs/7]\b;]sFlUdI#jp +b5VRi:Go]+rs/7]\b;]sFlUdI#jp +ao;M;XT2/8cMn+92#nmV28muD"lmq2PBB[O!!P6&PHE0a])MkT!!(]-s*t~> +ao;M;XT2/8cMn+92#nmV28muD"lmq2PBB[O!!P6&PHE0a])MkT!!(]-s*t~> +ao;M;XT2/8cMn+92#nmV28muD"lmq2PBB[O!!P6&PHE0a])MkT!!(]-s*t~> +a8Z;0P5nCsd/O::2?3_Rp=TBJmFeUqAF0?s:[rQ-:[J,b:N`ecj1tZsFT;EpL];l~> +a8Z;0P5nCsd/O::2?3_Rp=TBJmFeUqAF0?s:[rQ-:[J,b:N`ecj1tZsFT;EpL];l~> +a8Z;0P5nCsd/O::2?3_Rp=TBJmFeUqAF0?s:[rQ-:[J,b:N`ecj1tZsFT;EpL];l~> +`W$,/P5nC\mFD4=m?9CZrVur/h>[WOfr]BSoDf.SF`jgg`7`i2l2M%_g"F]RXbCmno)Jl8U!N,F +rr[BD!83/-J,~> +`W$,/P5nC\mFD4=m?9CZrVur/h>[WOfr]BSoDf.SF`jgg`7`i2l2M%_g"F]RXbCmno)Jl8U!N,F +rr[BD!83/-J,~> +`W$,/P5nC\mFD4=m?9CZrVur/h>[WOfr]BSoDf.SF`jgg`7`i2l2M%_g"F]RXbCmno)Jl8U!N,F +rr[BD!83/-J,~> +_uBo-XYg*4`7k5!p;CJA:W2t#!!"nDir9,J`04a*!!Q/@Trm#.ec,g?ft"5-AG-!*:PH@>ao;Hc +!!(]-s*t~> +_uBo-XYg*4`7k5!p;CJA:W2t#!!"nDir9,J`04a*!!Q/@Trm#.ec,g?ft"5-AG-!*:PH@>ao;Hc +!!(]-s*t~> +_uBo-XYg*4`7k5!p;CJA:W2t#!!"nDir9,J`04a*!!Q/@Trm#.ec,g?ft"5-AG-!*:PH@>ao;Hc +!!(]-s*t~> +_#FVWK`Eua`:i0i#48sD!&]tnrr3,p:B1B;k5PPW`04!k!!@A;\_5%'"QRG&FZ&po"#YeCmEPY5 +FT;EpL];l~> +_#FVWK`Eua`:i0i#48sD!&]tnrr3,p:B1B;k5PPW`04!k!!@A;\_5%'"QRG&FZ&po"#YeCmEPY5 +FT;EpL];l~> +_#FVWK`Eua`:i0i#48sD!&]tnrr3,p:B1B;k5PPW`04!k!!@A;\_5%'"QRG&FZ&po"#YeCmEPY5 +FT;EpL];l~> +^AeK4`.^&KA>-s/l2M"K\W]eh23ZA_rrCaO!!'.drrV5SAG?-,A>-s%^&J3%c`M?b!!5ricd;[o +FT;EpL];l~> +^AeK4`.^&KA>-s/l2M"K\W]eh23ZA_rrCaO!!'.drrV5SAG?-,A>-s%^&J3%c`M?b!!5ricd;[o +FT;EpL];l~> +^AeK4`.^&KA>-s/l2M"K\W]eh23ZA_rrCaO!!'.drrV5SAG?-,A>-s%^&J3%c`M?b!!5ricd;[o +FT;EpL];l~> +])MibX`aUC"a-$2ce7@Qs8UaY`3"`(!!"m1\`I4RFfj?'rr^rbKf/Z+ +!enSdeGfVn!!(]-s*t~> +])MibX`aUC"a-$2ce7@Qs8UaY`3"`(!!"m1\`I4RFfj?'rr^rbKf/Z+ +!enSdeGfVn!!(]-s*t~> +])MibX`aUC"a-$2ce7@Qs8UaY`3"`(!!"m1\`I4RFfj?'rr^rbKf/Z+ +!enSdeGfVn!!(]-s*t~> +[f6Kj`3"`9nc/hNFd&rRmIL8\p.kYgAG5Wp!qsQdq#CJ,XkBcT!oph6q#CJ,\aA#K"*FSDfn]TX~> +[f6Kj`3"`9nc/hNFd&rRmIL8\p.kYgAG5Wp!qsQdq#CJ,XkBcT!oph6q#CJ,\aA#K"*FSDfn]TX~> +[f6Kj`3"`9nc/hNFd&rRmIL8\p.kYgAG5Wp!qsQdq#CJ,XkBcT!oph6q#CJ,\aA#K"*FSDfn]TX~> +YQ"UipXoQ?lMgkErVuqlp&>'2L&(cO23YuPV#LMBThkLb!bB7CgA_7t!!(]-s*t~> +YQ"UipXoQ?lMgkErVuqlp&>'2L&(cO23YuPV#LMBThkLb!bB7CgA_7t!!(]-s*t~> +YQ"UipXoQ?lMgkErVuqlp&>'2L&(cO23YuPV#LMBThkLb!bB7CgA_7t!!(]-s*t~> +MuNdZrVurEq>UNLP;W4;!`,NMSc8cO\RbO:!JSJIrr[BD!83/-J,~> +MuNdZrVurEq>UNLP;W4;!`,NMSc8cO\RbO:!JSJIrr[BD!83/-J,~> +MuNdZrVurEq>UNLP;W4;!`,NMSc8cO\RbO:!JSJIrr[BD!83/-J,~> +MZ3g%!!"nDrVlrdX\\fo!`,NMQi@-S\RbR;!]?2%hu +MZ3g%!!"nDrVlrdX\\fo!`,NMQi@-S\RbR;!]?2%hu +MZ3g%!!"nDrVlrdX\\fo!`,NMQi@-S\RbR;!]?2%hu +MZ3tU2#mVes8UE!qZ$[nU#V:8!q!O/qZ$\.`:i3j"*FSDfn]TX~> +MZ3tU2#mVes8UE!qZ$[nU#V:8!q!O/qZ$\.`:i3j"*FSDfn]TX~> +MZ3tU2#mVes8UE!qZ$[nU#V:8!q!O/qZ$\.`:i3j"*FSDfn]TX~> +M>mS/rVut9:](1o23Z^OrrV5S:](1o250EurrZ$s!;;3JJ,~> +M>mS/rVut9:](1o23Z^OrrV5S:](1o250EurrZ$s!;;3JJ,~> +M>mS/rVut9:](1o23Z^OrrV5S:](1o250EurrZ$s!;;3JJ,~> +M#RIDq>^S-`:erc!RHJs!!.5qk5YD\LAuc~> +M#RIDq>^S-`:erc!RHJs!!.5qk5YD\LAuc~> +M#RIDq>^S-`:erc!RHJs!!.5qk5YD\LAuc~> +MZ3_1Fo24@09bFIrrVSi:](1n:W2JsrW%]QJ,~> +MZ3_1Fo24@09bFIrrVSi:](1n:W2JsrW%]QJ,~> +MZ3_1Fo24@09bFIrrVSi:](1n:W2JsrW%]QJ,~> +N;ips:\k%l@.o0OrVlo:Fo24@:Ta?Vs8E"Qs*t~> +N;ips:\k%l@.o0OrVlo:Fo24@:Ta?Vs8E"Qs*t~> +N;ips:\k%l@.o0OrVlo:Fo24@:Ta?Vs8E"Qs*t~> +NrK-u:](1nFi"%W!/6"(qu6]WPPbC^26HT?rr_rp!&]N2J,~> +NrK-u:](1nFi"%W!/6"(qu6]WPPbC^26HT?rr_rp!&]N2J,~> +NrK-u:](1nFi"%W!/6"(qu6]WPPbC^26HT?rr_rp!&]N2J,~> +OT,@":](1qPO8DM\c)R/Tn37?rrVSi2>mLV26HTArr^pS!-O%rJ,~> +OT,@":](1qPO8DM\c)R/Tn37?rrVSi2>mLV26HTArr^pS!-O%rJ,~> +OT,@":](1qPO8DM\c)R/Tn37?rrVSi2>mLV26HTArr^pS!-O%rJ,~> +P5bR$:]17p23[G*rrA8^!!'rgs7uZrp8p4N!!5$[p@A4cf`2"pLAuc~> +P5bR$:]17p23[G*rrA8^!!'rgs7uZrp8p4N!!5$[p@A4cf`2"pLAuc~> +P5bR$:]17p23[G*rrA8^!!'rgs7uZrp8p4N!!5$[p@A4cf`2"pLAuc~> +PlCd;:]17p26HTJrrcj4!&`efs7cNo`)$=3!B%FZrr^RI!-O%rJ,~> +PlCd;:]17p26HTJrrcj4!&`efs7cNo`)$=3!B%FZrr^RI!-O%rJ,~> +PlCd;:]17p26HTJrrcj4!&`efs7cNo`)$=3!B%FZrr^RI!-O%rJ,~> +QN%!=Fo;:A26HTHrrr*R!!"nDJcGHD!Q7e4!!,m6p&>,r!!'-Us*t~> +QN%!=Fo;:A26HTHrrr*R!!"nDJcGHD!Q7e4!!,m6p&>,r!!'-Us*t~> +QN%!=Fo;:A26HTHrrr*R!!"nDJcGHD!Q7e4!!,m6p&>,r!!'-Us*t~> +R/[3SPPbC]PP4YK"lhH?!+beSs7ZHop8p4N!!.5qp\t>t!!'-Us*t~> +R/[3SPPbC]PP4YK"lhH?!+beSs7ZHop8p4N!!.5qp\t>t!!'-Us*t~> +R/[3SPPbC]PP4YK"lhH?!+beSs7ZHop8p4N!!.5qp\t>t!!'-Us*t~> +RfUP\!!'R\rrh`B\ZM(pFT>tO!!$R/FTdo1 +\_6Ais*t~> +RfUP\!!'R\rrh`B\ZM(pFT>tO!!$R/FTdo1 +\_6Ais*t~> +RfUP\!!'R\rrh`B\ZM(pFT>tO!!$R/FTdo1 +\_6Ais*t~> +S,WN8:]17oFlVoi!4i(/!0`!6oD\jYPPkI^26H`T"*FSDg"ZN/mDP]@rW!!qFbTdrrn.:^riH6U +F\hu:"*KgGj3.IQ~> +S,WN8:]17oFlVoi!4i(/!0`!6oD\jYPPkI^26H`T"*FSDg"ZN/mDP]@rW!!qFbTdrrn.:^riH6U +F\hu:"*KgGj3.IQ~> +S,WN8:]17oFlVoi!4i(/!0`!6oD\jYPPkI^26H`T"*FSDg"ZN/mDP]@rW!!qFbTdrrn.:^riH6U +F\hu:"*KgGj3.IQ~> +Sc8`XFo;:@:XAA,!0dB^!24uDo)AaNFo;:@:YG[G"(VB3g#)f9p;E.j!&\o$cf=Hn$00@6FYs.V +PJm1@s*t~> +Sc8`XFo;:@:XAA,!0dB^!24uDo)AaNFo;:@:YG[G"(VB3g#)f9p;E.j!&\o$cf=Hn$00@6FYs.V +PJm1@s*t~> +Sc8`XFo;:@:XAA,!0dB^!24uDo)AaNFo;:@:YG[G"(VB3g#)f9p;E.j!&\o$cf=Hn$00@6FYs.V +PJm1@s*t~> +T)Semr;ZjUXm#cbL&M&P`.@sYrrLGAr;Zk^pAY*k!9*q_p;DXb!/7uDjSoJF\V2m@KuE]5s*t~> +T)Semr;ZjUXm#cbL&M&P`.@sYrrLGAr;Zk^pAY*k!9*q_p;DXb!/7uDjSoJF\V2m@KuE]5s*t~> +T)Semr;ZjUXm#cbL&M&P`.@sYrrLGAr;Zk^pAY*k!9*q_p;DXb!/7uDjSoJF\V2m@KuE]5s*t~> +T`5&G:]17oPP42>!VU('!!'rgs7-*ip9"8n"#\$spAP'Prrq)>2#ridh#@Q(P;N?(g!p%P~> +T`5&G:]17oPP42>!VU('!!'rgs7-*ip9"8n"#\$spAP'Prrq)>2#ridh#@Q(P;N?(g!p%P~> +T`5&G:]17oPP42>!VU('!!'rgs7-*ip9"8n"#\$spAP'Prrq)>2#ridh#@Q(P;N?(g!p%P~> +UAk8fU&=rl:YFh/!VU('!!(>rs7$$hm4Uf)L7~> +UAk8fU&=rl:YFh/!VU('!!(>rs7$$hm4Uf)L7~> +UAk8fU&=rl:YFh/!VU('!!(>rs7$$hm4Uf)L7~> +U]1AJ:]17nXl99`m54kD2<08fn,EF72?!RX.f]Qlr;Qfb\aKJ#`(pAsj3mr1m?7NG`7Y*?~> +U]1AJ:]17nXl99`m54kD2<08fn,EF72?!RX.f]Qlr;Qfb\aKJ#`(pAsj3mr1m?7NG`7Y*?~> +U]1AJ:]17nXl99`m54kD2<08fn,EF72?!RX.f]Qlr;Qfb\aKJ#`(pAsj3mr1m?7NG`7Y*?~> +V>gSiU&=rlFlVBZ"lhH?!&`efs6osgp4`DE!29Ak"867_p@8.cfhVU3mHX]Sj2AL]p?MY\m?7NG +ceADL~> +V>gSiU&=rlFlVBZ"lhH?!&`efs6osgp4`DE!29Ak"867_p@8.cfhVU3mHX]Sj2AL]p?MY\m?7NG +ceADL~> +V>gSiU&=rlFlVBZ"lhH?!&`efs6osgp4`DE!29Ak"867_p@8.cfhVU3mHX]Sj2AL]p?MY\m?7NG +ceADL~> +VZ-\W:]:=p27_NB"lhH?!&`efs6fmffh_SI!@H.lrrZd3!6"L/"RU=3L$e1*#gZ9H!)ERpU%[dO +"RVBQFm[uaJ,~> +VZ-\W:]:=p27_NB"lhH?!&`efs6fmffh_SI!@H.lrrZd3!6"L/"RU=3L$e1*#gZ9H!)ERpU%[dO +"RVBQFm[uaJ,~> +VZ-\W:]:=p27_NB"lhH?!&`efs6fmffh_SI!@H.lrrZd3!6"L/"RU=3L$e1*#gZ9H!)ERpU%[dO +"RVBQFm[uaJ,~> +VuHb!r;Zk@mFqRDj#$f:2<08fmf*=]7/[)eL%^`0!!$R%rr]eh:YG"4$BkIRmJm4[`&2*!l2Lk= +A,rafs*t~> +VuHb!r;Zk@mFqRDj#$f:2<08fmf*=]7/[)eL%^`0!!$R%rr]eh:YG"4$BkIRmJm4[`&2*!l2Lk= +A,rafs*t~> +VuHb!r;Zk@mFqRDj#$f:2<08fmf*=]7/[)eL%^`0!!$R%rr]eh:YG"4$BkIRmJm4[`&2*!l2Lk= +A,rafs*t~> +WW*"dFo;:?Xk3RVj#$f:2<08fmf3.a!+#L&!9 +WW*"dFo;:?Xk3RVj#$f:2<08fmf3.a!+#L&!9 +WW*"dFo;:?Xk3RVj#$f:2<08fmf3.a!+#L&!9 +WrE+G2?!RVAE25?!6"j:!B&ngs7$$mm/R,BK`ES!!!&5Xrr^S):ZL[=!qnLFq>UNV!6"(#"63oL +cf"hR~> +WrE+G2?!RVAE25?!6"j:!B&ngs7$$mm/R,BK`ES!!!&5Xrr^S):ZL[=!qnLFq>UNV!6"(#"63oL +cf"hR~> +WrE+G2?!RVAE25?!6"j:!B&ngs7$$mm/R,BK`ES!!!&5Xrr^S):ZL[=!qnLFq>UNV!6"(#"63oL +cf"hR~> +X8`0nr;Zklp='$A`;T`;2<08fnc&dG!!%0AQMLR^2>6nH"1\Dcp?2GWcN*\6rrJ=;k5PPWP5q<8 +s*t~> +X8`0nr;Zklp='$A`;T`;2<08fnc&dG!!%0AQMLR^2>6nH"1\Dcp?2GWcN*\6rrJ=;k5PPWP5q<8 +s*t~> +X8`0nr;Zklp='$A`;T`;2<08fnc&dG!!%0AQMLR^2>6nH"1\Dcp?2GWcN*\6rrJ=;k5PPWP5q<8 +s*t~> +XoAFqFoD@A2:'YL!6"j:!B&ngs760nXT/?pj#-W4!6"d7!g +XoAFqFoD@A2:'YL!6"j:!B&ngs760nXT/?pj#-W4!6"d7!g +XoAFqFoD@A2:'YL!6"j:!B&ngs760nXT/?pj#-W4!6"d7!g +Y5\O_2?!RVAF7\B"kba5!&`efs7?6nK`D+S2>@.OAGuN1p6.APjSo7_Fnbn:f`:(4"5,PBp>l7(~> +Y5\O_2?!RVAF7\B"kba5!&`efs7?6nK`D+S2>@.OAGuN1p6.APjSo7_Fnbn:f`:(4"5,PBp>l7(~> +Y5\O_2?!RVAF7\B"kba5!&`efs7?6nK`D+S2>@.OAGuN1p6.APjSo7_Fnbn:f`:(4"5,PBp>l7(~> +YQ"U@r;ZhkbPqV'2?!RU`.@s\rrZd3!*/^m#20%Vp1-&@j8T.^AG?*)\PM5b"627Lp>u=)~> +YQ"U@r;ZhkbPqV'2?!RU`.@s\rrZd3!*/^m#20%Vp1-&@j8T.^AG?*)\PM5b"627Lp>u=)~> +YQ"U@r;ZhkbPqV'2?!RU`.@s\rrZd3!*/^m#20%Vp1-&@j8T.^AG?*)\PM5b"627Lp>u=)~> +Yl=]erVusV`6&#[j#-f9!5sHgp&FR_"dAudP;VC[rrULHmJ-\^Fd(ea"627Lp?)C*~> +Yl=]erVusV`6&#[j#-f9!5sHgp&FR_"dAudP;VC[rrULHmJ-\^Fd(ea"627Lp?)C*~> +Yl=]erVusV`6&#[j#-f9!5sHgp&FR_"dAudP;VC[rrULHmJ-\^Fd(ea"627Lp?)C*~> +ZMst!AGuQ0AE1`1!TQ':!!'Q\s7cNuf`2"_p;E.jp](EiP5sY$rrGoUNB!86<1!ol/%k5Tr~> +ZMst!AGuQ0AE1`1!TQ':!!'Q\s7cNuf`2"_p;E.jp](EiP5sY$rrGoUNB!86<1!ol/%k5Tr~> +ZMst!AGuQ0AE1`1!TQ':!!'Q\s7cNuf`2"_p;E.jp](EiP5sY$rrGoUNB!86<1!ol/%k5Tr~> +Zi:'d:]:=pFnWfS!TQuT!!&46s7lTr\GuVnrVlue`.^)H!!7lT`8CRrVZ;qXrr^RoAG4p\!m^kK +kPp&~> +Zi:'d:]:=pFnWfS!TQuT!!&46s7lTr\GuVnrVlue`.^)H!!7lT`8CRrVZ;qXrr^RoAG4p\!m^kK +kPp&~> +Zi:'d:]:=pFnWfS!TQuT!!&46s7lTr\GuVnrVlue`.^)H!!7lT`8CRrVZ;qXrr^RoAG4p\!m^kK +kPp&~> +[/U0[2?!RUTu-g1p14.&!L*5.s8)`tK`D+`q>UNV\V:"_!3P2Z&&_6DEALD/g$R+L!,FGf`8CRr +\H't>s*t~> +[/U0[2?!RUTu-g1p14.&!L*5.s8)`tK`D+`q>UNV\V:"_!3P2Z&&_6DEALD/g$R+L!,FGf`8CRr +\H't>s*t~> +[/U0[2?!RUTu-g1p14.&!L*5.s8)`tK`D+`q>UNV\V:"_!3P2Z&&_6DEALD/g$R+L!,FGf`8CRr +\H't>s*t~> +[Jp6Fr;Zi9_#FH/AGuQ0AG1TSqu6ao!!(^Grr_sH:\NfJ#fKL=PO8D;P;W=>#@u0\p6,Jeg#2l3 +Kf/8^s*t~> +[Jp6Fr;Zi9_#FH/AGuQ0AG1TSqu6ao!!(^Grr_sH:\NfJ#fKL=PO8D;P;W=>#@u0\p6,Jeg#2l3 +Kf/8^s*t~> +[Jp6Fr;Zi9_#FH/AGuQ0AG1TSqu6ao!!(^Grr_sH:\NfJ#fKL=PO8D;P;W=>#@u0\p6,Jeg#2l3 +Kf/8^s*t~> +[f6?0rVusVftICcPPtO_:ZI$+rVllbrW)Wk!eiN*j8T8#:B6UGqu6\)O8Jq[j)k?UmGe-Ip.ohq +s*t~> +[f6?0rVusVftICcPPtO_:ZI$+rVllbrW)Wk!eiN*j8T8#:B6UGqu6\)O8Jq[j)k?UmGe-Ip.ohq +s*t~> +[f6?0rVusVftICcPPtO_:ZI$+rVllbrW)Wk!eiN*j8T8#:B6UGqu6\)O8Jq[j)k?UmGe-Ip.ohq +s*t~> +\,QGlrVuspj1G +\,QGlrVuspj1G +\,QGlrVuspj1G +\GlPmrVut0p::2'`;KZ9\Uje\rr\qp!3Ptp!DeF3rrr,7:B6UGq#:B52>7%P\MZ7_j8T1E2>6A9 +J,~> +\GlPmrVut0p::2'`;KZ9\Uje\rr\qp!3Ptp!DeF3rrr,7:B6UGq#:B52>7%P\MZ7_j8T1E2>6A9 +J,~> +\GlPmrVut0p::2'`;KZ9\Uje\rr\qp!3Ptp!DeF3rrr,7:B6UGq#:B52>7%P\MZ7_j8T1E2>6A9 +J,~> +])Mg)FoD@AFnWrrT;&mHFQRp8p20XmPi^s+U.G"SSMh:YFk0!qnLR +li2J~> +])Mg)FoD@AFnWrrT;&mHFQRp8p20XmPi^s+U.G"SSMh:YFk0!qnLR +li2J~> +])Mg)FoD@AFnWrrT;&mHFQRp8p20XmPi^s+U.G"SSMh:YFk0!qnLR +li2J~> +]Dhp*AGuQ/PI1>jj(/,h!G(nVrrDcl!!)`frrVmOPNi)Np8p20XnMDe! +]Dhp*AGuQ/PI1>jj(/,h!G(nVrrDcl!!)`frrVmOPNi)Np8p20XnMDe! +]Dhp*AGuQ/PI1>jj(/,h!G(nVrrDcl!!)`frrVmOPNi)Np8p20XnMDe! +]`/$+AGuQ/PHt2hp4`JG!B&P`rr^RI!+bj(!lP*+oD]9QK`D*`XnMegXYhu +]`/$+AGuQ/PHt2hp4`JG!B&P`rr^RI!+bj(!lP*+oD]9QK`D*`XnMegXYhu +]`/$+AGuQ/PHt2hp4`JG!B&P`rr^RI!+bj(!lP*+oD]9QK`D*`XnMegXYhu +^&J-,AGuQ/PHXudU&=rk\V:%cP5kTVp\t7iPOne_P5oaDfqC8sRPct)p@S@cp65FT!Hm)crs$D! +26Ho39)S_jO7r,D!MN +^&J-,AGuQ/PHXudU&=rk\V:%cP5kTVp\t7iPOne_P5oaDfqC8sRPct)p@S@cp65FT!Hm)crs$D! +26Ho39)S_jO7r,D!MN +^&J-,AGuQ/PHXudU&=rk\V:%cP5kTVp\t7iPOne_P5oaDfqC8sRPct)p@S@cp65FT!Hm)crs$D! +26Ho39)S_jO7r,D!MN +^Ae6-AGuQ/Trn=qcSb\%!JU6&rrZ$s!87/I!ndS6o`"ud!6"j9"SQ+/VtT`^$0*m=`;fkjFTBAM +rs\V'!'L +^Ae6-AGuQ/Trn=qcSb\%!JU6&rrZ$s!87/I!ndS6o`"ud!6"j9"SQ+/VtT`^$0*m=`;fkjFTBAM +rs\V'!'L +^Ae6-AGuQ/Trn=qcSb\%!JU6&rrZ$s!87/I!ndS6o`"ud!6"j9"SQ+/VtT`^$0*m=`;fkjFTBAM +rs\V'!'L +^]+?.AGuQ/`2in=j(/,h!Dha4rrDHc!;HKoP@X=c!pouuqu6`k23[V2s'u-'r;Qh^2=9o5!n.-a +r4` +^]+?.AGuQ/`2in=j(/,h!Dha4rrDHc!;HKoP@X=c!pouuqu6`k23[V2s'u-'r;Qh^2=9o5!n.-a +r4` +^]+?.AGuQ/`2in=j(/,h!Dha4rrDHc!;HKoP@X=c!pouuqu6`k23[V2s'u-'r;Qh^2=9o5!n.-a +r4` +_#FH/AGuQ/`2Wb;p65FT!4e!e"1\C3L%kTJ:V$,t!MN +_#FH/AGuQ/`2Wb;p65FT!4e!e"1\C3L%kTJ:V$,t!MN +_#FH/AGuQ/`2Wb;p65FT!4e!e"1\C3L%kTJ:V$,t!MN +_>aQ0AGuQ/`2UN`!87#Es+U:K!Q5!.rrVloS,'f" +A<6<]!pp!@mf.e~> +_>aQ0AGuQ/`2UN`!87#Es+U:K!Q5!.rrVloS,'f" +A<6<]!pp!@mf.e~> +_>aQ0AGuQ/`2UN`!87#Es+U:K!Q5!.rrVloS,'f" +A<6<]!pp!@mf.e~> +_>aLXrVuqlV#LJUAGuQ02:%<_!;?Bl!:BR]!P()ZrrI8Eq#:?pg%>:F:V$<$!pp!@o)AdE!4_j> +!J54ZrrHZ4mf.e~> +_>aLXrVuqlV#LJUAGuQ02:%<_!;?Bl!:BR]!P()ZrrI8Eq#:?pg%>:F:V$<$!pp!@o)AdE!4_j> +!J54ZrrHZ4mf.e~> +_>aLXrVuqlV#LJUAGuQ02:%<_!;?Bl!:BR]!P()ZrrI8Eq#:?pg%>:F:V$<$!pp!@o)AdE!4_j> +!J54ZrrHZ4mf.e~> +_Z'V"rVuq^UAk8fPPkI^U%XTJ"4$rI:\XnhL%G +_Z'V"rVuq^UAk8fPPkI^U%XTJ"4$rI:\XnhL%G +_Z'V"rVuq^UAk8fPPkI^U%XTJ"4$rI:\XnhL%G +_uB_#rVuq^TDnr<2?!RV:YCm1"-W]bU%eQfA?GJ'!JQa5rrV3\mI^DZ:V$<$!pp!Jo)AdE!4_j> +!J54ZrrKYfmf.e~> +_uB_#rVuq^TDnr<2?!RV:YCm1"-W]bU%eQfA?GJ'!JQa5rrV3\mI^DZ:V$<$!pp!Jo)AdE!4_j> +!J54ZrrKYfmf.e~> +_uB_#rVuq^TDnr<2?!RV:YCm1"-W]bU%eQfA?GJ'!JQa5rrV3\mI^DZ:V$<$!pp!Jo)AdE!4_j> +!J54ZrrKYfmf.e~> +`;]h>rVuq^Sc8`XFo;:@U%X]M"#U&Yg%YLI!86uD!lP*4qYpS[:\4VdL&(`L`&7)b!qlVXq7cr4 +O7E5Nf`:I?J,~> +`;]h>rVuq^Sc8`XFo;:@U%X]M"#U&Yg%YLI!86uD!lP*4qYpS[:\4VdL&(`L`&7)b!qlVXq7cr4 +O7E5Nf`:I?J,~> +`;]h>rVuq^Sc8`XFo;:@U%X]M"#U&Yg%YLI!86uD!lP*4qYpS[:\4VdL&(`L`&7)b!qlVXq7cr4 +O7E5Nf`:I?J,~> +`W#qVrVuq@Rf@+Pp&Ne;rrVmiL&:lOcN(oTrrU+=j8/cV:Qt;J!J*o? +^B1/1g%#(Dm/Z28s*t~> +`W#qVrVuq@Rf@+Pp&Ne;rrVmiL&:lOcN(oTrrU+=j8/cV:Qt;J!J*o? +^B1/1g%#(Dm/Z28s*t~> +`W#qVrVuq@Rf@+Pp&Ne;rrVmiL&:lOcN(oTrrU+=j8/cV:Qt;J!J*o? +^B1/1g%#(Dm/Z28s*t~> +`r?502#mVep6kp]j(/)g!MT4Rrr\Gb!0d0W!ndSIo)AgP221GsrrT_2PO\\QA,u?$rrSBAmI:,W +m/V&%^B1o-E: +`r?502#mVep6kp]j(/)g!MT4Rrr\Gb!0d0W!ndSIo)AgP221GsrrT_2PO\\QA,u?$rrSBAmI:,W +m/V&%^B1o-E: +`r?502#mVep6kp]j(/)g!MT4Rrr\Gb!0d0W!ndSIo)AgP221GsrrT_2PO\\QA,u?$rrSBAmI:,W +m/V&%^B1o-E: +`W$,Eq3rrK5ZrVusVc^=_72#mX&p\t9I!:^!nj%fY^:c/6HnG`gg:Gp)as3Gff`:!X3_uNo/ +^UTIU?hWsg! +`W$,Eq3rrK5ZrVusVc^=_72#mX&p\t9I!:^!nj%fY^:c/6HnG`gg:Gp)as3Gff`:!X3_uNo/ +^UTIU?hWsg! +`W$,Eq3rrK5ZrVusVc^=_72#mX&p\t9I!:^!nj%fY^:c/6HnG`gg:Gp)as3Gff`:!X3_uNo/ +^UTIU?hWsg! +`W$2:afhh1F`fS +`W$2:afhh1F`fS +`W$2:afhh1F`fS +ao;b%X`ZK$!&\nQXf]P +ao;b%X`ZK$!&\nQXf]P +ao;b%X`ZK$!&\nQXf]P +c2S(:\TIlPAXoAFqL&CuP:X>X4"#U&Ych@A>f`:OA#K-V+s8R4;p@&"d +p1-&@p6,Kpm/I=/!0d-DA2WE8rrE,Qn,In~> +c2S(:\TIlPAXoAFqL&CuP:X>X4"#U&Ych@A>f`:OA#K-V+s8R4;p@&"d +p1-&@p6,Kpm/I=/!0d-DA2WE8rrE,Qn,In~> +c2S(:\TIlPAXoAFqL&CuP:X>X4"#U&Ych@A>f`:OA#K-V+s8R4;p@&"d +p1-&@p6,Kpm/I=/!0d-DA2WE8rrE,Qn,In~> +d/O@;0SXmN:k!SL9I!!.60U&P55!!#gfrrVQfg%,.E_uQ##rrVmOPOSSS +j#(B@rr3%`!3P\h!lP)&rr3)oK`K'\rrVlog$erk~> +d/O@;0SXmN:k!SL9I!!.60U&P55!!#gfrrVQfg%,.E_uQ##rrVmOPOSSS +j#(B@rr3%`!3P\h!lP)&rr3)oK`K'\rrVlog$erk~> +d/O@;0SXmN:k!SL9I!!.60U&P55!!#gfrrVQfg%,.E_uQ##rrVmOPOSSS +j#(B@rr3%`!3P\h!lP)&rr3)oK`K'\rrVlog$erk~> +df0KhFT>42j4sY +df0KhFT>42j4sY +df0KhFT>42j4sY +ec,gHX\Sq\cdr+"folD3XnK"!!UYU>!!5$[p87iimJ[(cj7N?P:Ta9h!lP)&qYpVj2=:&9"2m'\ +pA4dk`&2]2oD\lU!6"^5"2m'-p@J:b_uT6*J,~> +ec,gHX\Sq\cdr+"folD3XnK"!!UYU>!!5$[p87iimJ[(cj7N?P:Ta9h!lP)&qYpVj2=:&9"2m'\ +pA4dk`&2]2oD\lU!6"^5"2m'-p@J:b_uT6*J,~> +ec,gHX\Sq\cdr+"folD3XnK"!!UYU>!!5$[p87iimJ[(cj7N?P:Ta9h!lP)&qYpVj2=:&9"2m'\ +pA4dk`&2]2oD\lU!6"^5"2m'-p@J:b_uT6*J,~> +fDc$JXYhu +fDc$JXYhu +fDc$JXYhu +f`))m2)VN0li..^c`O=fmHX]Sp8p20`391A`)$=3!DgY5rrZ$s!6"L/!Nf/mrrLeqrVuspXo&,! +fld8o!Dfiprs6OC:T^=S2,E90rrM/2r;ZkLj8Ao_p4WL#XeBk;PPb@c_uNT2Viru6j7iQSFeS7' +J,~> +f`))m2)VN0li..^c`O=fmHX]Sp8p20`391A`)$=3!DgY5rrZ$s!6"L/!Nf/mrrLeqrVuspXo&,! +fld8o!Dfiprs6OC:T^=S2,E90rrM/2r;ZkLj8Ao_p4WL#XeBk;PPb@c_uNT2Viru6j7iQSFeS7' +J,~> +f`))m2)VN0li..^c`O=fmHX]Sp8p20`391A`)$=3!DgY5rrZ$s!6"L/!Nf/mrrLeqrVuspXo&,! +fld8o!Dfiprs6OC:T^=S2,E90rrM/2r;ZkLj8Ao_p4WL#XeBk;PPb@c_uNT2Viru6j7iQSFeS7' +J,~> +gA_`84AG6$&#fH^cch?D$!-S8?!lP)@rVlunA2X)Zrs?UD99ZWcP=mRIrVlqQ2;.s.!nfGprVlr; +!3Q5""79VVpA+^ip&NG,s*t~> +gA_`84AG6$&#fH^cch?D$!-S8?!lP)@rVlunA2X)Zrs?UD99ZWcP=mRIrVlqQ2;.s.!nfGprVlr; +!3Q5""79VVpA+^ip&NG,s*t~> +gA_`84AG6$&#fH^cch?D$!-S8?!lP)@rVlunA2X)Zrs?UD99ZWcP=mRIrVlqQ2;.s.!nfGprVlr; +!3Q5""79VVpA+^ip&NG,s*t~> +h#@NNT`B6&l2LjL!3Ptorr^282=9Z."RU=3U%Y_j!VWYn!!,m6Y5\Tf!!&5QrrG!qqu6`X!0d?\ +#NI\8s8UaPPPkFcj#*P1s7S=Dqu6`k:QteX!oj8uqnEAR!9=+ZcN)Yqrs.3Wg&M*G250pI!qoER +q>UN7!;>j\J,~> +h#@NNT`B6&l2LjL!3Ptorr^282=9Z."RU=3U%Y_j!VWYn!!,m6Y5\Tf!!&5QrrG!qqu6`X!0d?\ +#NI\8s8UaPPPkFcj#*P1s7S=Dqu6`k:QteX!oj8uqnEAR!9=+ZcN)Yqrs.3Wg&M*G250pI!qoER +q>UN7!;>j\J,~> +h#@NNT`B6&l2LjL!3Ptorr^282=9Z."RU=3U%Y_j!VWYn!!,m6Y5\Tf!!&5QrrG!qqu6`X!0d?\ +#NI\8s8UaPPPkFcj#*P1s7S=Dqu6`k:QteX!oj8uqnEAR!9=+ZcN)Yqrs.3Wg&M*G250pI!qoER +q>UN7!;>j\J,~> +h>[T;A2Up]rrT;&j88iXp1.^srr]ehAE0ln!UZ*K!!,m6Z2XgtrVurOnc/WCqu?\=qYp`;!:Bf/ +Fo)+B\H)$s`&78brs$CApAb/1=S]]8=Dn0=Kp2?4#'GY"s26egqYpW8!;?9h!L&6)s*t~> +h>[T;A2Up]rrT;&j88iXp1.^srr]ehAE0ln!UZ*K!!,m6Z2XgtrVurOnc/WCqu?\=qYp`;!:Bf/ +Fo)+B\H)$s`&78brs$CApAb/1=S]]8=Dn0=Kp2?4#'GY"s26egqYpW8!;?9h!L&6)s*t~> +h>[T;A2Up]rrT;&j88iXp1.^srr]ehAE0ln!UZ*K!!,m6Z2XgtrVurOnc/WCqu?\=qYp`;!:Bf/ +Fo)+B\H)$s`&78brs$CApAb/1=S]]8=Dn0=Kp2?4#'GY"s26egqYpW8!;?9h!L&6)s*t~> +hZ!\r!-R\mrrVloXnhtum/Y)frr_Y2!5u&?!UZ*K!!5s7p9ai%XT/?3nG`R9!:Bab!pp!6q>URn +XmH,Aq>URnXoF*/q>UZm!87D>!2KA)"eu(brrCC@rrp=@s8Re,q>UNi!878L!qlW4mJh\~> +hZ!\r!-R\mrrVloXnhtum/Y)frr_Y2!5u&?!UZ*K!!5s7p9ai%XT/?3nG`R9!:Bab!pp!6q>URn +XmH,Aq>URnXoF*/q>UZm!87D>!2KA)"eu(brrCC@rrp=@s8Re,q>UNi!878L!qlW4mJh\~> +hZ!\r!-R\mrrVloXnhtum/Y)frr_Y2!5u&?!UZ*K!!5s7p9ai%XT/?3nG`R9!:Bab!pp!6q>URn +XmH,Aq>URnXoF*/q>UZm!87D>!2KA)"eu(brrCC@rrp=@s8Re,q>UNi!878L!qlW4mJh\~> +hu +hu +hu +iVs#RFZ%,!rrK6Ep\t9)2<=c>`&2]2XoAIiTf)`J!L)QSrrg7?!&aK=rrT;[pAY'mf`:gI"0H^J +Fnkt>X`aYdXn_o!:V$M-=SKQ5=KVT'g%kXOf`;'PFfkH=!B%gmrrGoZm/MS~> +iVs#RFZ%,!rrK6Ep\t9)2<=c>`&2]2XoAIiTf)`J!L)QSrrg7?!&aK=rrT;[pAY'mf`:gI"0H^J +Fnkt>X`aYdXn_o!:V$M-=SKQ5=KVT'g%kXOf`;'PFfkH=!B%gmrrGoZm/MS~> +iVs#RFZ%,!rrK6Ep\t9)2<=c>`&2]2XoAIiTf)`J!L)QSrrg7?!&aK=rrT;[pAY'mf`:gI"0H^J +Fnkt>X`aYdXn_o!:V$M-=SKQ5=KVT'g%kXOf`;'PFfkH=!B%gmrrGoZm/MS~> +ir9,SA2WE.rrK6Ep\t9I!9=(]j#(B@XT&@qXYp"V!Hl>mrr[BD!28i\!pouirr3#P!;QQrX`_P^ +q#:JjFoRYJq>UWl!87C_.JLR[.E)6D`;0E:\MaEePD/i4!pp!@r;Qi:!:B.QJ,~> +ir9,SA2WE.rrK6Ep\t9I!9=(]j#(B@XT&@qXYp"V!Hl>mrr[BD!28i\!pouirr3#P!;QQrX`_P^ +q#:JjFoRYJq>UWl!87C_.JLR[.E)6D`;0E:\MaEePD/i4!pp!@r;Qi:!:B.QJ,~> +ir9,SA2WE.rrK6Ep\t9I!9=(]j#(B@XT&@qXYp"V!Hl>mrr[BD!28i\!pouirr3#P!;QQrX`_P^ +q#:JjFoRYJq>UWl!87C_.JLR[.E)6D`;0E:\MaEePD/i4!pp!@r;Qi:!:B.QJ,~> +j8T5TA2WE-rrK64p\t8rAE*Ukj#(B@WrE+<:](1o:Ta$!rrCaO!!)ERrs,5TpAb0[!9dCS:Qt,EJ,~> +j8T5TA2WE-rrK64p\t8rAE*Ukj#(B@WrE+<:](1o:Ta$!rrCaO!!)ERrs,5TpAb0[!9dCS:Qt,EJ,~> +j8T5TA2WE-rrK64p\t8rAE*Ukj#(B@WrE+<:](1o:Ta$!rrCaO!!)ERrs,5TpAb0[!9dCS:Qt,EJ,~> +jSo>UA2WE,rrULHmJ-\^:Qsc;"627Lp8S&mfld/l!JSk9rr[rT!0cdL!qnLRrr3"0L&1fQf`9_* +:QtYT#2'":s8Pl;qu6`X26HlX!D6nu^BS4@s8UaP`;BQ9\H)$rrrGoLqu6`X26HfV!j)Iili2J~> +jSo>UA2WE,rrULHmJ-\^:Qsc;"627Lp8S&mfld/l!JSk9rr[rT!0cdL!qnLRrr3"0L&1fQf`9_* +:QtYT#2'":s8Pl;qu6`X26HlX!D6nu^BS4@s8UaP`;BQ9\H)$rrrGoLqu6`X26HfV!j)Iili2J~> +jSo>UA2WE,rrULHmJ-\^:Qsc;"627Lp8S&mfld/l!JSk9rr[rT!0cdL!qnLRrr3"0L&1fQf`9_* +:QtYT#2'":s8Pl;qu6`X26HlX!D6nu^BS4@s8UaP`;BQ9\H)$rrrGoLqu6`X26HfV!j)Iili2J~> +jSo:(2<3Wp!G$?KrrT_2mGS!Gj#(tWrrVS]2>dFU250'LrrDHc!!(^ +jSo:(2<3Wp!G$?KrrT_2mGS!Gj#(tWrrVS]2>dFU250'LrrDHc!!(^ +jSo:(2<3Wp!G$?KrrT_2mGS!Gj#(tWrrVS]2>dFU250'LrrDHc!!(^ +jo5CU!9<#;"SS8qNqWDN"1\DBp>>lOirGdMrrVo4AGZ?.A@_*Krr\Gb!-RQ+s()-/$)%?mmJm4) +2.ZF[rs=khU$_m[`&2*!rVm/`2)U)]A,pcGr;R)>!+`+E^T(fE_>O<;1\qu6rT2)U)] +A,pcGr;Qe?:[.n0~> +jo5CU!9<#;"SS8qNqWDN"1\DBp>>lOirGdMrrVo4AGZ?.A@_*Krr\Gb!-RQ+s()-/$)%?mmJm4) +2.ZF[rs=khU$_m[`&2*!rVm/`2)U)]A,pcGr;R)>!+`+E^T(fE_>O<;1\qu6rT2)U)] +A,pcGr;Qe?:[.n0~> +jo5CU!9<#;"SS8qNqWDN"1\DBp>>lOirGdMrrVo4AGZ?.A@_*Krr\Gb!-RQ+s()-/$)%?mmJm4) +2.ZF[rs=khU$_m[`&2*!rVm/`2)U)]A,pcGr;R)>!+`+E^T(fE_>O<;1\qu6rT2)U)] +A,pcGr;Qe?:[.n0~> +k5PM$!6!jr&GE4`24?mLUPP4nR"noluFeRLarrLG;r;ZjjchdYFmB)(r\aB4m"noluFeRLcrrT;& +j6?So~> +k5PM$!6!jr&GE4`24?mLUPP4nR"noluFeRLarrLG;r;ZjjchdYFmB)(r\aB4m"noluFeRLcrrT;& +j6?So~> +k5PM$!6!jr&GE4`24?mLUPP4nR"noluFeRLarrLG;r;ZjjchdYFmB)(r\aB4m"noluFeRLcrrT;& +j6?So~> +kPkVN23[&"'_\Xd26HTPp8q*j!&]tns7WQP:X@u!!g>M/UAk8?L&(cNA@_*Rrr\Gb!+b9m!kA +kPkVN23[&"'_\Xd26HTPp8q*j!&]tns7WQP:X@u!!g>M/UAk8?L&(cNA@_*Rrr\Gb!+b9m!kA +kPkVN23[&"'_\Xd26HTPp8q*j!&]tns7WQP:X@u!!g>M/UAk8?L&(cNA@_*Rrr\Gb!+b9m!kA +kPkU+:\NlL"no&U26HTLrrGohqu6fdP5oaYir9)R:N`?1!qsQCq>^S-XlIn1!:Bac!6"%"!g>M% +Yl=db2215nJ,~> +kPkU+:\NlL"no&U26HTLrrGohqu6fdP5oaYir9)R:N`?1!qsQCq>^S-XlIn1!:Bac!6"%"!g>M% +Yl=db2215nJ,~> +kPkU+:\NlL"no&U26HTLrrGohqu6fdP5oaYir9)R:N`?1!qsQCq>^S-XlIn1!:Bac!6"%"!g>M% +Yl=db2215nJ,~> +kl1_&!86K6"no&U26HTKrrVQfj8&]Xfl[:YmGn3Jf`8s^rrVSuAGQ9.:Qs,ufDbr:!!#gVrr_t* +2>4?U"8689p?2I+~> +kl1_&!86K6"no&U26HTKrrVQfj8&]Xfl[:YmGn3Jf`8s^rrVSuAGQ9.:Qs,ufDbr:!!#gVrr_t* +2>4?U"8689p?2I+~> +kl1_&!86K6"no&U26HTKrrVQfj8&]Xfl[:YmGn3Jf`8s^rrVSuAGQ9.:Qs,ufDbr:!!#gVrr_t* +2>4?U"8689p?2I+~> +l2LhY25014"mrEL26HTIrrKYfpAY96:Go9JjSo:T2>3R?!q!O/q#CJ=XkDJ/!:Bac!6!su"8689 +p9ai%p1-&Sk5Tr~> +l2LhY25014"mrEL26HTIrrKYfpAY96:Go9JjSo:T2>3R?!q!O/q#CJ=XkDJ/!:Bac!6!su"8689 +p9ai%p1-&Sk5Tr~> +l2LhY25014"mrEL26HTIrrKYfpAY96:Go9JjSo:T2>3R?!q!O/q#CJ=XkDJ/!:Bac!6!su"8689 +p9ai%p1-&Sk5Tr~> +l2Lge2>686"mqKR:V$2mrrI8+o`##q2,D0PrrVmOXdT1kp;DYBq#CJ=XkDV3"-W]b:[7r^`.bbh +rVlun2.ZEhrr_t*2<3fuJ,~> +l2Lge2>686"mqKR:V$2mrrI8+o`##q2,D0PrrVmOXdT1kp;DYBq#CJ=XkDV3"-W]b:[7r^`.bbh +rVlun2.ZEhrr_t*2<3fuJ,~> +l2Lge2>686"mqKR:V$2mrrI8+o`##q2,D0PrrVmOXdT1kp;DYBq#CJ=XkDV3"-W]b:[7r^`.bbh +rVlun2.ZEhrr_t*2<3fuJ,~> +lMgqZ26H-C"RVBQ:W2o*!qlW?oD\seP5oaYk5PLb2>3@9!mdQNp](D=U!N,frrDHc!!(@1rrCaO +!!m,;j8]/HA5D6qrr_t*2<3ctJ,~> +lMgqZ26H-C"RVBQ:W2o*!qlW?oD\seP5oaYk5PLb2>3@9!mdQNp](D=U!N,frrDHc!!(@1rrCaO +!!m,;j8]/HA5D6qrr_t*2<3ctJ,~> +lMgqZ26H-C"RVBQ:W2o*!qlW?oD\seP5oaYk5PLb2>3@9!mdQNp](D=U!N,frrDHc!!(@1rrCaO +!!m,;j8]/HA5D6qrr_t*2<3ctJ,~> +lMgpf2>6YA%)bpA!&]u-s6Z!M:W2l)"65^JdII5>j)k?UmJ[%eft#GrnG`R`26E)B"7=$j:\Xnm +20H%ImHX]RK`D*qkl:M[##CH/p1-&@])Mlm2.Z+7s*t~> +lMgpf2>6YA%)bpA!&]u-s6Z!M:W2l)"65^JdII5>j)k?UmJ[%eft#GrnG`R`26E)B"7=$j:\Xnm +20H%ImHX]RK`D*qkl:M[##CH/p1-&@])Mlm2.Z+7s*t~> +lMgpf2>6YA%)bpA!&]u-s6Z!M:W2l)"65^JdII5>j)k?UmJ[%eft#GrnG`R`26E)B"7=$j:\Xnm +20H%ImHX]RK`D*qkl:M[##CH/p1-&@])Mlm2.Z+7s*t~> +lMgl\U%J?np2pA!g"Eo31P5['`:O!6j)+hs/c\Ggnc'$N:B7Nj`&.Nj!!%0/nc&Wl237b>mDP2a +p&G5 +lMgl\U%J?np2pA!g"Eo31P5['`:O!6j)+hs/c\Ggnc'$N:B7Nj`&.Nj!!%0/nc&Wl237b>mDP2a +p&G5 +lMgl\U%J?np2pA!g"Eo31P5['`:O!6j)+hs/c\Ggnc'$N:B7Nj`&.Nj!!%0/nc&Wl237b>mDP2a +p&G5 +li.%4!:BFY!eiMlrVlun>nF^?rs@^>9;B8:Z"*jQnG`m,2'DsnmJm4>A2WE +li.%4!:BFY!eiMlrVlun>nF^?rs@^>9;B8:Z"*jQnG`m,2'DsnmJm4>A2WE +li.%4!:BFY!eiMlrVlun>nF^?rs@^>9;B8:Z"*jQnG`m,2'DsnmJm4>A2WE +li.!LFnG\8f`9@qrrVmiPOneUp.8B`^B/9QmI:,Wd/_,_rrVn)AF][#Fd%U\"QRFoFZ&^i!b?Fr +riH0urVurcmJd1Rrn.@`Xa]pC"._;Ffu!akfhXKOhuA3~> +li.!LFnG\8f`9@qrrVmiPOneUp.8B`^B/9QmI:,Wd/_,_rrVn)AF][#Fd%U\"QRFoFZ&^i!b?Fr +riH0urVurcmJd1Rrn.@`Xa]pC"._;Ffu!akfhXKOhuA3~> +li.!LFnG\8f`9@qrrVmiPOneUp.8B`^B/9QmI:,Wd/_,_rrVn)AF][#Fd%U\"QRFoFZ&^i!b?Fr +riH0urVurcmJd1Rrn.@`Xa]pC"._;Ffu!akfhXKOhuA3~> +li-uC`:X'1P@XLh!Q6kerrT_[\GEr@998TBs)n2aC[p4WL1p;[+8p7VJ/mG@kn~> +li-uC`:X'1P@XLh!Q6kerrT_[\GEr@998TBs)n2aC[p4WL1p;[+8p7VJ/mG@kn~> +li-uC`:X'1P@XLh!Q6kerrT_[\GEr@998TBs)n2aC[p4WL1p;[+8p7VJ/mG@kn~> +m/I.?!:BFY!HkO?rrVQfg%>=EDY_$JP5t.Q!pp!6q>UJLPOe_Tm/Ygjs8;m#g!?doF_&i!!L*6U +rr^SC27^g."2m&S`8(BC~> +m/I.?!:BFY!HkO?rrVQfg%>=EDY_$JP5t.Q!pp!6q>UJLPOe_Tm/Ygjs8;m#g!?doF_&i!!L*6U +rr^SC27^g."2m&S`8(BC~> +m/I.?!:BFY!HkO?rrVQfg%>=EDY_$JP5t.Q!pp!6q>UJLPOe_Tm/Ygjs8;m#g!?doF_&i!!L*6U +rr^SC27^g."2m&S`8(BC~> +m/I*g:\4Se!71H?! +m/I*g:\4Se!71H?! +m/I*g:\4Se!71H?! +m/I*/POneT:TaEl!",-^T:\aqimJGT.rr>jm +!!-Wjp\tEaP5nCsp +m/I*/POneT:TaEl!",-^T:\aqimJGT.rr>jm +!!-Wjp\tEaP5nCsp +m/I*/POneT:TaEl!",-^T:\aqimJGT.rr>jm +!!-Wjp\tEaP5nCsp +m/I)^\b#h%Kp2?4!m^l?o`"qFMtt*hWW;GWrrUjRpA+^hX`a16!P)!Ws7-*hg&:sOcf>$*Fo;:? +U%A9fm?9CbU$^G2"mrEL!0cg%s*t~> +m/I)^\b#h%Kp2?4!m^l?o`"qFMtt*hWW;GWrrUjRpA+^hX`a16!P)!Ws7-*hg&:sOcf>$*Fo;:? +U%A9fm?9CbU$^G2"mrEL!0cg%s*t~> +m/I)^\b#h%Kp2?4!m^l?o`"qFMtt*hWW;GWrrUjRpA+^hX`a16!P)!Ws7-*hg&:sOcf>$*Fo;:? +U%A9fm?9CbU$^G2"mrEL!0cg%s*t~> +m/I(dg%54F_uT3$s8R65rrIU[q7crg0_,/Ep&N&,rrHZ(nc&XC!.k1@rri$k!!%0$rrfG(!&`*l +rs&2-:B4qDp>#ZPp;D(R:Ta?@s*t~> +m/I(dg%54F_uT3$s8R65rrIU[q7crg0_,/Ep&N&,rrHZ(nc&XC!.k1@rri$k!!%0$rrfG(!&`*l +rs&2-:B4qDp>#ZPp;D(R:Ta?@s*t~> +m/I(dg%54F_uT3$s8R65rrIU[q7crg0_,/Ep&N&,rrHZ(nc&XC!.k1@rri$k!!%0$rrfG(!&`*l +rs&2-:B4qDp>#ZPp;D(R:Ta?@s*t~> +mJd7J!9D&T!m^l,nc&[N!98Y1oD\rq!!"nDir9,! +!-S#%rs%/?2#q0tj5U(Cj10:423ZA7s*t~> +mJd7J!9D&T!m^l,nc&[N!98Y1oD\rq!!"nDir9,! +!-S#%rs%/?2#q0tj5U(Cj10:423ZA7s*t~> +mJd7J!9D&T!m^l,nc&[N!98Y1oD\rq!!"nDir9,! +!-S#%rs%/?2#q0tj5U(Cj10:423ZA7s*t~> +mJd4?!:g'qj#(B#s8Vep!28r_!cU9,rP&HE9/-)/rrVRFPPkF^j#)PZrrE,QJcGBB!9=%Y!3P5[ +!TUOXbAV4:Qs,Ns*t~> +mJd4?!:g'qj#(B#s8Vep!28r_!cU9,rP&HE9/-)/rrVRFPPkF^j#)PZrrE,QJcGBB!9=%Y!3P5[ +!TUOXbAV4:Qs,Ns*t~> +mJd4?!:g'qj#(B#s8Vep!28r_!cU9,rP&HE9/-)/rrVRFPPkF^j#)PZrrE,QJcGBB!9=%Y!3P5[ +!TUOXbAV4:Qs,Ns*t~> +mJd4?!:^!nj(&-O:]NA`nG`gg?RUN+WfoLuj6lpRcS]7OmFeU!AG5Kl!al0 +`04^3!&\n_Xh"D`!quZfrRhOgXcmlb!!#fY\`:p6J,~> +mJd4?!:^!nj(&-O:]NA`nG`gg?RUN+WfoLuj6lpRcS]7OmFeU!AG5Kl!al0 +`04^3!&\n_Xh"D`!quZfrRhOgXcmlb!!#fY\`:p6J,~> +mJd4?!:^!nj(&-O:]NA`nG`gg?RUN+WfoLuj6lpRcS]7OmFeU!AG5Kl!al0 +`04^3!&\n_Xh"D`!quZfrRhOgXcmlb!!#fY\`:p6J,~> +mJd4?!:KjiY5eQ^p?qq^p8TbE!!//Jm/I+HL&M&Q9Wd^^! +mJd4?!:KjiY5eQ^p?qq^p8TbE!!//Jm/I+HL&M&Q9Wd^^! +mJd4?!:KjiY5eQ^p?qq^p8TbE!!//Jm/I+HL&M&Q9Wd^^! +mJd4?!:Tpk_uR`d!86c>"lj,`>rBRcrrp=@FYchRmJd1efn'1srrh^H!!&^ts8L]bs*t~> +mJd4?!:Tpk_uR`d!86c>"lj,`>rBRcrrp=@FYchRmJd1efn'1srrh^H!!&^ts8L]bs*t~> +mJd4?!:Tpk_uR`d!86c>"lj,`>rBRcrrp=@FYchRmJd1efn'1srrh^H!!&^ts8L]bs*t~> +mJd4?!:^!n_uRaUs+O8Bn,EXQ2.ZF\P5rPfrs-IBPQ1>e2:(^j! +mJd4?!:^!n_uRaUs+O8Bn,EXQ2.ZF\P5rPfrs-IBPQ1>e2:(^j! +mJd4?!:^!n_uRaUs+O8Bn,EXQ2.ZF\P5rPfrs-IBPQ1>e2:(^j! +mJd7J!9 +mJd7J!9 +mJd7J!9 +m/I(dg%54F_uRaRrrUjR\aob%_uQ"urr^1>PP4PH!g +m/I(dg%54F_uRaRrrUjR\aob%_uQ"urr^1>PP4PH!g +m/I(dg%54F_uRaRrrUjR\aob%_uQ"urr^1>PP4PH!g +m/I)^\b,n'_uRaPrrT;[j7N?Q_uQ"srr_:=AG5Zq"86jpch[SCfem=-oD\j%21bf&rrr+,!!#gg +JcFs6J,~> +m/I)^\b,n'_uRaPrrT;[j7N?Q_uQ"srr_:=AG5Zq"86jpch[SCfem=-oD\j%21bf&rrr+,!!#gg +JcFs6J,~> +m/I)^\b,n'_uRaPrrT;[j7N?Q_uQ"srr_:=AG5Zq"86jpch[SCfem=-oD\j%21bf&rrr+,!!#gg +JcFs6J,~> +m/I*/PP5"Yj/2mqq#:CuUTX8jgG^q#:N.A,lUC`;0E;fle)1:Ta?arrJ=+ +JcGNF!29Al!98Y1kPp&~> +m/I*/PP5"Yj/2mqq#:CuUTX8jgG^q#:N.A,lUC`;0E;fle)1:Ta?arrJ=+ +JcGNF!29Al!98Y1kPp&~> +m/I*/PP5"Yj/2mqq#:CuUTX8jgG^q#:N.A,lUC`;0E;fle)1:Ta?arrJ=+ +JcGNF!29Al!98Y1kPp&~> +m/I*gAGH0*cVON?!]?\Fr;QfD:]:=q26HTMrs51r=Hf;#-ns]YrrLe`r;Zk@g&1jVp1-%EccD:M +FnYb5#b_6@^"K):2<4H2!G&<`s7uZpci*nEXb$N7s*t~> +m/I*gAGH0*cVON?!]?\Fr;QfD:]:=q26HTMrs51r=Hf;#-ns]YrrLe`r;Zk@g&1jVp1-%EccD:M +FnYb5#b_6@^"K):2<4H2!G&<`s7uZpci*nEXb$N7s*t~> +m/I*gAGH0*cVON?!]?\Fr;QfD:]:=q26HTMrs51r=Hf;#-ns]YrrLe`r;Zk@g&1jVp1-%EccD:M +FnYb5#b_6@^"K):2<4H2!G&<`s7uZpci*nEXb$N7s*t~> +m/I.?!:BX_$+U&"j8\h`2.ZF[rs=khPO8DDXYjY_rr3&"!0dAr"1UuXmJ[%k_uPMOs8UDf!6"j9 +!b>*erVlrZ222#/!j)I@rVlunA2X)VrrVQffn'2"rrh^H!!%.ms5j92~> +m/I.?!:BX_$+U&"j8\h`2.ZF[rs=khPO8DDXYjY_rr3&"!0dAr"1UuXmJ[%k_uPMOs8UDf!6"j9 +!b>*erVlrZ222#/!j)I@rVlunA2X)VrrVQffn'2"rrh^H!!%.ms5j92~> +m/I.?!:BX_$+U&"j8\h`2.ZF[rs=khPO8DDXYjY_rr3&"!0dAr"1UuXmJ[%k_uPMOs8UDf!6"j9 +!b>*erVlrZ222#/!j)I@rVlunA2X)VrrVQffn'2"rrh^H!!%.ms5j92~> +li-uC`;BQ9cN(o]rs.RAL&_2!!6"g8#NI\8s8VI>K)<:a\3,iOrrULH`;BQ>P5s;9s24otqu6oS +!87DPm/X9crrVmiPPP4Z_uPAgq>US.!!"nDJcFj3J,~> +li-uC`;BQ9cN(o]rs.RAL&_2!!6"g8#NI\8s8VI>K)<:a\3,iOrrULH`;BQ>P5s;9s24otqu6oS +!87DPm/X9crrVmiPPP4Z_uPAgq>US.!!"nDJcFj3J,~> +li-uC`;BQ9cN(o]rs.RAL&_2!!6"g8#NI\8s8VI>K)<:a\3,iOrrULH`;BQ>P5s;9s24otqu6oS +!87DPm/X9crrVmiPPP4Z_uPAgq>US.!!"nDJcFj3J,~> +li7!=qu6[mL&1fQcN*#*:QtYT"iLE.s1'QR^BTl%pAb.gL&(cKFoVIBArs5a31~> +li7!=qu6[mL&1fQcN*#*:QtYT"iLE.s1'QR^BTl%pAb.gL&(cKFoVIBArs5a31~> +li7!=qu6[mL&1fQcN*#*:QtYT"iLE.s1'QR^BTl%pAb.gL&(cKFoVIBArs5a31~> +li.%4!:Bab!oj:@q>URnXlBEAq>URnXoE?Xq7d-D!87D4!:BU^"k`nCrrCaJrrp=us8R5*q>UNi +!878L!pp!6JcGWI!71WE!24uDj8XW~> +li.%4!:Bab!oj:@q>URnXlBEAq>URnXoE?Xq7d-D!87D4!:BU^"k`nCrrCaJrrp=us8R5*q>UNi +!878L!pp!6JcGWI!71WE!24uDj8XW~> +li.%4!:Bab!oj:@q>URnXlBEAq>URnXoE?Xq7d-D!87D4!:BU^"k`nCrrCaJrrp=us8R5*q>UNi +!878L!pp!6JcGWI!71WE!24uDj8XW~> +lMglBXo88#cN*b?"/0kU2>I1SPBHnCK)!(`!6"oJ:\Xkl!86B4mJ6bcf`;'PFfkH=!!+^Z\ir=N~> +lMglBXo88#cN*b?"/0kU2>I1SPBHnCK)!(`!6"oJ:\Xkl!86B4mJ6bcf`;'PFfkH=!!+^Z\ir=N~> +lMglBXo88#cN*b?"/0kU2>I1SPBHnCK)!(`!6"oJ:\Xkl!86B4mJ6bcf`;'PFfkH=!!+^Z\ir=N~> +lMgpf2>7%L!NgM>rr]BGX`aF="KchHDM%Yu"9@-TX`aC<"Ac/e!872J"k`nUs)kI=rrE,Qr;Qil +26DH0r;QroA,lTem=G;ss*t~> +lMgpf2>7%L!NgM>rr]BGX`aF="KchHDM%Yu"9@-TX`aC<"Ac/e!872J"k`nUs)kI=rrE,Qr;Qil +26DH0r;QroA,lTem=G;ss*t~> +lMgpf2>7%L!NgM>rr]BGX`aF="KchHDM%Yu"9@-TX`aC<"Ac/e!872J"k`nUs)kI=rrE,Qr;Qil +26DH0r;QroA,lTem=G;ss*t~> +lMgqZ26HlX!RCc@rr\s;`&7>i"I"Q>O')4m"gJ'fs1(r"rr`>Ts#%ajrroN#s8S::q>UN`!9="W +!j+?RJcGZJ!/:CP!82r'iW"E~> +lMgqZ26HlX!RCc@rr\s;`&7>i"I"Q>O')4m"gJ'fs1(r"rr`>Ts#%ajrroN#s8S::q>UN`!9="W +!j+?RJcGZJ!/:CP!82r'iW"E~> +lMgqZ26HlX!RCc@rr\s;`&7>i"I"Q>O')4m"gJ'fs1(r"rr`>Ts#%ajrroN#s8S::q>UN`!9="W +!j+?RJcGZJ!/:CP!82r'iW"E~> +l2M!j2>7(Mm/Z2Brrc-"irJ-8rrl3/s3C\MqS*5d8H8_M!9 +l2M!j2>7(Mm/Z2Brrc-"irJ-8rrl3/s3C\MqS*5d8H8_M!9 +l2M!j2>7(Mm/Z2Brrc-"irJ-8rrl3/s3C\MqS*5d8H8_M!9 +l2LhY251$L!G$o\rrp=@mJft9qYpc2V$rVll9rVuq^JcFX-J,~> +l2LhY251$L!G$o\rrp=@mJft9qYpc2V$rVll9rVuq^JcFX-J,~> +l2LhY251$L!G$o\rrp=@mJft9qYpc2V$rVll9rVuq^JcFX-J,~> +kl1mu!9=+Zf`8tgrs.RAU&Y/=!6"g8!ol/3rr3)\0MA\M^B0TIJ,TBKf`765rrSAaj8T&bXT5Ks +s8VeV!6"j9"627]mJd+e`&3bVrrV3\\UjeZrrqF?!!$R'JcFX-J,~> +kl1mu!9=+Zf`8tgrs.RAU&Y/=!6"g8!ol/3rr3)\0MA\M^B0TIJ,TBKf`765rrSAaj8T&bXT5Ks +s8VeV!6"j9"627]mJd+e`&3bVrrV3\\UjeZrrqF?!!$R'JcFX-J,~> +kl1mu!9=+Zf`8tgrs.RAU&Y/=!6"g8!ol/3rr3)\0MA\M^B0TIJ,TBKf`765rrSAaj8T&bXT5Ks +s8VeV!6"j9"627]mJd+e`&3bVrrV3\\UjeZrrqF?!!$R'JcFX-J,~> +kPl$7AG6''_uPMOs6ZpGAG6$&$+U%ij8\MK2.ZFZrs.RV!)$EV!1s)f$,cgdci=$kFTBAXrs-(l +20F$A28oCl#NJS[A9CZJU&=olp1/;ss8Ds$m54kD2>2V$hZ&*~> +kPl$7AG6''_uPMOs6ZpGAG6$&$+U%ij8\MK2.ZFZrs.RV!)$EV!1s)f$,cgdci=$kFTBAXrs-(l +20F$A28oCl#NJS[A9CZJU&=olp1/;ss8Ds$m54kD2>2V$hZ&*~> +kPl$7AG6''_uPMOs6ZpGAG6$&$+U%ij8\MK2.ZFZrs.RV!)$EV!1s)f$,cgdci=$kFTBAXrs-(l +20F$A28oCl#NJS[A9CZJU&=olp1/;ss8Ds$m54kD2>2V$hZ&*~> +kPkVN23\%>!RFR@!!+sZqu6]C:]:=p26H]S"OF3P\aB4m!SMVo!!.6&qYp`m`3$/[pA"Xjc`O=[ +mJHnbTf)4gs8N$%p1+.'2<08fh>`!~> +kPkVN23\%>!RFR@!!+sZqu6]C:]:=p26H]S"OF3P\aB4m!SMVo!!.6&qYp`m`3$/[pA"Xjc`O=[ +mJHnbTf)4gs8N$%p1+.'2<08fh>`!~> +kPkVN23\%>!RFR@!!+sZqu6]C:]:=p26H]S"OF3P\aB4m!SMVo!!.6&qYp`m`3$/[pA"Xjc`O=[ +mJHnbTf)4gs8N$%p1+.'2<08fh>`!~> +k5PM$!6"j9!q"[op\t<^g"GTh"8:F$p>>lO_uR`,s8DrtAGuQ/`.@sDs*t~> +k5PM$!6"j9!q"[op\t<^g"GTh"8:F$p>>lO_uR`,s8DrtAGuQ/`.@sDs*t~> +k5PM$!6"j9!q"[op\t<^g"GTh"8:F$p>>lO_uR`,s8DrtAGuQ/`.@sDs*t~> +jo5CG2<1q@!ol/%JcG]K!0dB^!5sHgg])d~> +jo5CG2<1q@!ol/%JcG]K!0dB^!5sHgg])d~> +jo5CG2<1q@!ol/%JcG]K!0dB^!5sHgg])d~> +jSo:(2<2"B!ol.\JcG]K!0dB^!0`!6gAc[~> +jSo:(2<2"B!ol.\JcG]K!0dB^!0`!6gAc[~> +jSo:(2<2"B!ol.\JcG]K!0dB^!0`!6gAc[~> +jSo>UA2WDSrr_:=AG1TSrr2u#rVuq^JcFF'J,~> +jSo>UA2WDSrr_:=AG1TSrr2u#rVuq^JcFF'J,~> +jSo>UA2WDSrr_:=AG1TSrr2u#rVuq^JcFF'J,~> +j8T5TA2WDUrr_:=AG1TSrr2u:rVuq/JcFC&J,~> +j8T5TA2WDUrr_:=AG1TSrr2u:rVuq/JcFC&J,~> +j8T5TA2WDUrr_:=AG1TSrr2u:rVuq/JcFC&J,~> +ir9,SA2WDWrr_:=AG2Ai!9=%2!9 +ir9,SA2WDWrr_:=AG2Ai!9=%2!9 +ir9,SA2WDWrr_:=AG2Ai!9=%2!9 +iVs#RA2V]Err^S)AG2Yq"lmq2Klp2a!!QnUPHE0kq#:?4rVut0p4<7qs*t~> +iVs#RA2V]Err^S)AG2Yq"lmq2Klp2a!!QnUPHE0kq#:?4rVut0p4<7qs*t~> +iVs#RA2V]Err^S)AG2Yq"lmq2Klp2a!!QnUPHE0kq#:?4rVut0p4<7qs*t~> +huhc_5L\!!@A-Xh"Ga!;?Bk!:Bd=s/c +huhc_5L\!!@A-Xh"Ga!;?Bk!:Bd=s/c +huhc_5L\!!@A-Xh"Ga!;?Bk!:Bd=s/c +hZ!\g!-S"Nrr_t;!4ep*#ihUh!!%/DcgC&u#jos3FT;Da\[MJ;!B'S%s4.."~> +hZ!\g!-S"Nrr_t;!4ep*#ihUh!!%/DcgC&u#jos3FT;Da\[MJ;!B'S%s4.."~> +hZ!\g!-S"Nrr_t;!4ep*#ihUh!!%/DcgC&u#jos3FT;Da\[MJ;!B'S%s4.."~> +h>[T;:GpJ8rr^S):ZJ>P#48*[!)K +h>[T;:GpJ8rr^S):ZJ>P#48*[!)K +h>[T;:GpJ8rr^S):ZJ>P#48*[!)K +h#@NNT`B6&`r?2/FTA-/VuHq=FT>42j5'_8`;T`=$NPn6JcF:#J,~> +h#@NNT`B6&`r?2/FTA-/VuHq=FT>42j5'_8`;T`=$NPn6JcF:#J,~> +h#@NNT`B6&`r?2/FTA-/VuHq=FT>42j5'_8`;T`=$NPn6JcF:#J,~> +gA_ +gA_ +gA_ +f`))b2)VN0cMn%@XYhuHVuHn%2)V)pgA_/TrVut0pAY'pm?7NG`.@sAs*t~> +f`))b2)VN0cMn%@XYhuHVuHn%2)V)pgA_/TrVut0pAY'pm?7NG`.@sAs*t~> +f`))b2)VN0cMn%@XYhuHVuHn%2)V)pgA_/TrVut0pAY'pm?7NG`.@sAs*t~> +fDc$JXYhu +fDc$JXYhu +fDc$JXYhu +ec,gHXYg*Bg"-0,folCnXnJ^n"RU=3PO7Z8#gY@.Ffg?T!3Q%r!0dB^!G(p!rrh_3!/:,ts5!^*~> +ec,gHXYg*Bg"-0,folCnXnJ^n"RU=3PO7Z8#gY@.Ffg?T!3Q%r!0dB^!G(p!rrh_3!/:,ts5!^*~> +ec,gHXYg*Bg"-0,folCnXnJ^n"RU=3PO7Z8#gY@.Ffg?T!3Q%r!0dB^!G(p!rrh_3!/:,ts5!^*~> +df0KhA,oE!j4sY-?:GpILs5*d+~> +df0KhA,oE!j4sY-?:GpILs5*d+~> +df0KhA,oE!j4sY-?:GpILs5*d+~> +d/O@ +d/O@ +d/O@ +c2S(0X^hD3A>-s%r;Ql0!!'S&rs7Z'Tk"-'A?Fmfrr^q3:ZLX +c2S(0X^hD3A>-s%r;Ql0!!'S&rs7Z'Tk"-'A?Fmfrr^q3:ZLX +c2S(0X^hD3A>-s%r;Ql0!!'S&rs7Z'Tk"-'A?Fmfrr^q3:ZLX +b5W"Gc`M=I!!#f;PHAs-!%lUsfaQ3/XeBl5!!"m!Xj?^8rr^1>L%a[/! +b5W"Gc`M=I!!#f;PHAs-!%lUsfaQ3/XeBl5!!"m!Xj?^8rr^1>L%a[/! +b5W"Gc`M=I!!#f;PHAs-!%lUsfaQ3/XeBl5!!"m!Xj?^8rr^1>L%a[/! +`W$/0ft"5=F`I0Vs)eHuXh!-PT)SkU!3PA_!oj:Jp\t6og#W/7P5rOPs5X-0~> +`W$/0ft"5=F`I0Vs)eHuXh!-PT)SkU!3PA_!oj:Jp\t6og#W/7P5rOPs5X-0~> +`W$/0ft"5=F`I0Vs)eHuXh!-PT)SkU!3PA_!oj:Jp\t6og#W/7P5rOPs5X-0~> +^Ae2DrVurcPlCfK!6!su!ndSIp\t6og#N)6XT5JSs5a31~> +^Ae2DrVurcPlCfK!6!su!ndSIp\t6og#N)6XT5JSs5a31~> +^Ae2DrVurcPlCfK!6!su!ndSIp\t6og#N)6XT5JSs5a31~> +^&J11!!%_ +^&J11!!%_ +^&J11!!%_ +^&J)crVurOQi@,N!6!jr!Hj+krrK5Zi;Wks!5sHgk5Tr~> +^&J)crVurOQi@,N!6!jr!Hj+krrK5Zi;Wks!5sHgk5Tr~> +^&J)crVurOQi@,N!6!jr!Hj+krrK5Zi;Wks!5sHgk5Tr~> +]`/(V!!#f^rrT_2`8LXsf`8_^rrV4:Xl'-[XT6:js6'E4~> +]`/(V!!#f^rrT_2`8LXsf`8_^rrV4:Xl'-[XT6:js6'E4~> +]`/(V!!#f^rrT_2`8LXsf`8_^rrV4:Xl'-[XT6:js6'E4~> +]`/!!rVur#Rf +]`/!!rVur#Rf +]`/!!rVur#Rf +]Dhl5rVurYSGrZX221#h&b`=a26E>J:SFnmA,q.X!)LqurrQ_,p4<8.s*t~> +]Dhl5rVurYSGrZX221#h&b`=a26E>J:SFnmA,q.X!)LqurrQ_,p4<8.s*t~> +]Dhl5rVurYSGrZX221#h&b`=a26E>J:SFnmA,q.X!)LqurrQ_,p4<8.s*t~> +])MkC!!$Q"rrR==p>c/fp8p20XnMepm@e21D3NZQs6Z!MFlVH\!pqk!JcG!7J,~> +])MkC!!$Q"rrR==p>c/fp8p20XnMepm@e21D3NZQs6Z!MFlVH\!pqk!JcG!7J,~> +])MkC!!$Q"rrR==p>c/fp8p20XnMepm@e21D3NZQs6Z!MFlVH\!pqk!JcG!7J,~> +])Mc`rVur#T)Sl&!9 +])Mc`rVur#T)Sl&!9 +])Mc`rVur#T)Sl&!9 +\c2Z'rVurYT`5)\26H!?"no&U26HTJrrHYoq#:K8:Go9Jj8T17:\KA>li2J~> +\c2Z'rVurYT`5)\26H!?"no&U26HTJrrHYoq#:K8:Go9Jj8T17:\KA>li2J~> +\c2Z'rVurYT`5)\26H!?"no&U26HTJrrHYoq#:K8:Go9Jj8T17:\KA>li2J~> +\Gl\B!!#ggU&P1X:\NuO"no&U26HTIrrVlochIGBp8p2J`8pq"m5;"ss6K]8~> +\Gl\B!!#ggU&P1X:\NuO"no&U26HTIrrVlochIGBp8p2J`8pq"m5;"ss6K]8~> +\Gl\B!!#ggU&P1X:\NuO"no&U26HTIrrVlochIGBp8p2J`8pq"m5;"ss6K]8~> +\GlQhrVuq^UAk;T!6"+$"no&U26HTGrrL%2V$m/MS~> +\GlQhrVuq^UAk;T!6"+$"no&U26HTGrrL%2V$m/MS~> +\GlQhrVuq^UAk;T!6"+$"no&U26HTGrrL%2V$m/MS~> +\,QH=rVur:U]1@K:\"Gdj4W,`rrr+u2)VN0o`+rFo)AjQFT@WmkPkVW26DH0m/MS~> +\,QH=rVur:U]1@K:\"Gdj4W,`rrr+u2)VN0o`+rFo)AjQFT@WmkPkVW26DH0m/MS~> +\,QH=rVur:U]1@K:\"Gdj4W,`rrr+u2)VN0o`+rFo)AjQFT@WmkPkVW26DH0m/MS~> +[f6Ja!!"n:V>gVa!6"L/!RFR@!!kHas6Z!M:Ta?_rrhAa,_b:KrrgYD!3PtorrgZMXh!igrrT;[ +p4<82s*t~> +[f6Ja!!"n:V>gVa!6"L/!RFR@!!kHas6Z!M:Ta?_rrhAa,_b:KrrgYD!3PtorrgZMXh!igrrT;[ +p4<82s*t~> +[f6Ja!!"n:V>gVa!6"L/!RFR@!!kHas6Z!M:Ta?_rrhAa,_b:KrrgYD!3PtorrgZMXh!igrrT;[ +p4<82s*t~> +[f6O):B1Ajp87ijThk:[$^1RSj8\MK2+.F?`:O!7p2p@2BOCg_mIC2aXYhuSfhVTjFYs/mnc&[a +27\; +[f6O):B1Ajp87ijThk:[$^1RSj8\MK2+.F?`:O!7p2p@2BOCg_mIC2aXYhuSfhVTjFYs/mnc&[a +27\; +[f6O):B1Ajp87ijThk:[$^1RSj8\MK2+.F?`:O!7p2p@2BOCg_mIC2aXYhuSfhVTjFYs/mnc&[a +27\; +[Jp6erVuq@VZ-ZSXn;VpcN(o]rrV4-I.I:>p1-&6rr3)RA2X)Nrrr+i!!%`?rr3&1!0csQ!L%&F +s6]i:~> +[Jp6erVuq@VZ-ZSXn;VpcN(o]rrV4-I.I:>p1-&6rr3)RA2X)Nrrr+i!!%`?rr3&1!0csQ!L%&F +s6]i:~> +[Jp6erVuq@VZ-ZSXn;VpcN(o]rrV4-I.I:>p1-&6rr3)RA2X)Nrrr+i!!%`?rr3&1!0csQ!L%&F +s6]i:~> +[/U-ErVuq^W;cqF!:BFY!DepUrrT_2mIU>ZP;Vb*rrVmiL%,*Dp.9H)rrULHcgq);f`:Djs6fo;~> +[/U-ErVuq^W;cqF!:BFY!DepUrrT_2mIU>ZP;Vb*rrVmiL%,*Dp.9H)rrULHcgq);f`:Djs6fo;~> +[/U-ErVuq^W;cqF!:BFY!DepUrrT_2mIU>ZP;Vb*rrVmiL%,*Dp.9H)rrULHcgq);f`:Djs6fo;~> +Zi:#hrVur:WW*!_AG#m'irJKBrrG!fo`#!d!6"a6!ndS@nc&[/2>6nH!L%'arrG!fJcG0 +Zi:#hrVur:WW*!_AG#m'irJKBrrG!fo`#!d!6"a6!ndS@nc&[/2>6nH!L%'arrG!fJcG0 +Zi:#hrVur:WW*!_AG#m'irJKBrrG!fo`#!d!6"a6!ndS@nc&[/2>6nH!L%'arrG!fJcG0 +ZMsoIrVur:WrE)qXn;Vo\PN##s+U+F!Q5!5rrGp+nc&WDPPP4[f`:F1rrJ=+JcG0 +ZMsoIrVur:WrE)qXn;Vo\PN##s+U+F!Q5!5rrGp+nc&WDPPP4[f`:F1rrJ=+JcG0 +ZMsoIrVur:WrE)qXn;Vo\PN##s+U+F!Q5!5rrGp+nc&WDPPP4[f`:F1rrJ=+JcG0 +ZMst!AGuQ/j/i7^m/Yi3rrK6Eq#:AsFnG\7X`aF=!Hk++rrI8Eq#:?pg%,.D_uPAgmf.e~> +ZMst!AGuQ/j/i7^m/Yi3rrK6Eq#:AsFnG\7X`aF=!Hk++rrI8Eq#:?pg%,.D_uPAgmf.e~> +ZMst!AGuQ/j/i7^m/Yi3rrK6Eq#:AsFnG\7X`aF=!Hk++rrI8Eq#:?pg%,.D_uPAgmf.e~> +Z2Y!p2#mV6j/r=^cN*S:!P)#$rrJ=;o`"roFnkt;Kp2',!B%F_rrE,Qo)AdY!98Y1n,In~> +Z2Y!p2#mV6j/r=^cN*S:!P)#$rrJ=;o`"roFnkt;Kp2',!B%F_rrE,Qo)AdY!98Y1n,In~> +Z2Y!p2#mV6j/r=^cN*S:!P)#$rrJ=;o`"roFnkt;Kp2',!B%F_rrE,Qo)AdY!98Y1n,In~> +Yl=me2#mV6j0&C_X^q&'!oj:Jq>UIk\b,n&X\\`l!G&>&rrI89q>UN`!9 +Yl=me2#mV6j0&C_X^q&'!oj:Jq>UIk\b,n&X\\`l!G&>&rrI89q>UN`!9 +Yl=me2#mV6j0&C_X^q&'!oj:Jq>UIk\b,n&X\\`l!G&>&rrI89q>UN`!9 +YQ"dd2#mV6j0/I`PBHHr!DepUrrU+=mI^D[irJ-9rrVQfcgh#9ThkLa!P()WrrI8EJcG3=J,~> +YQ"dd2#mV6j0/I`PBHHr!DepUrrU+=mI^D[irJ-9rrVQfcgh#9ThkLa!P()WrrI8EJcG3=J,~> +YQ"dd2#mV6j0/I`PBHHr!DepUrrU+=mI^D[irJ-9rrVQfcgh#9ThkLa!P()WrrI8EJcG3=J,~> +Y5\LJrVusVj08OaFfk67!m^kbr;QiY250U@s)n2=rrVQf\blC.p,/uArrI8EJcG3=J,~> +Y5\LJrVusVj08OaFfk67!m^kbr;QiY250U@s)n2=rrVQf\blC.p,/uArrI8EJcG3=J,~> +Y5\LJrVusVj08OaFfk67!m^kbr;QiY250U@s)n2=rrVQf\blC.p,/uArrI8EJcG3=J,~> +XoAC>rVusVj0AUbFfk36$'P@QmJlm^2.ZFOrrV3\PPkF^P5rqtrrSko`;T] +XoAC>rVusVj0AUbFfk36$'P@QmJlm^2.ZFOrrV3\PPkF^P5rqtrrSko`;T] +XoAC>rVusVj0AUbFfk36$'P@QmJlm^2.ZFOrrV3\PPkF^P5rqtrrSko`;T] +XT&:=rVusVj0J[cFfk05!RFR@!!+sZn,E[32,Cd*\PE4DmJdHU!-PusTf#X+n,EEjFb0S]s*t~> +XT&:=rVusVj0J[cFfk05!RFR@!!+sZn,E[32,Cd*\PE4DmJdHU!-PusTf#X+n,EEjFb0S]s*t~> +XT&:=rVusVj0J[cFfk05!RFR@!!+sZn,E[32,Cd*\PE4DmJdHU!-PusTf#X+n,EEjFb0S]s*t~> +X8`@A2#mV6ca3WPFfk-4"QM.2/a_s*#47U,!$%$dli.1BFqXjIXnM2_!NgKqs6ou<~> +X8`@A2#mV6ca3WPFfk-4"QM.2/a_s*#47U,!$%$dli.1BFqXjIXnM2_!NgKqs6ou<~> +X8`@A2#mV6ca3WPFfk-4"QM.2/a_s*#47U,!$%$dli.1BFqXjIXnM2_!NgKqs6ou<~> +WrE+[2?!RU`3fOFFfk05"lhJ(p1._$rs&1N26SlJp?V__j#(AQ!0d-ErrK6EJcG3=J,~> +WrE+[2?!RU`3fOFFfk05"lhJ(p1._$rs&1N26SlJp?V__j#(AQ!0d-ErrK6EJcG3=J,~> +WrE+[2?!RU`3fOFFfk05"lhJ(p1._$rs&1N26SlJp?V__j#(AQ!0d-ErrK6EJcG3=J,~> +WW*"Z2?!RUTsan$Ffk36#NI\*s8V+:Xmc8qp1-&@s5RWIj6cjPj#(B@s4K8?mI1&UPD+Sfn,In~> +WW*"Z2?!RUTsan$Ffk36#NI\*s8V+:Xmc8qp1-&@s5RWIj6cjPj#(B@s4K8?mI1&UPD+Sfn,In~> +WW*"Z2?!RUTsan$Ffk36#NI\*s8V+:Xmc8qp1-&@s5RWIj6cjPj#(B@s4K8?mI1&UPD+Sfn,In~> +W;cnYAGuQ0L%`"U!Hk+,rrV4 +W;cnYAGuQ0L%`"U!Hk+,rrV4 +W;cnYAGuQ0L%`"U!Hk+,rrV4 +VuHekAGuQ0AF6o,!NgM9rrV4 +VuHekAGuQ0AF6o,!NgM9rrV4 +VuHekAGuQ0AF6o,!NgM9rrV4 +VZ-\jPPtO_2:&i5!P)"urrV4 +VZ-\jPPtO_2:&i5!P)"urrV4 +VZ-\jPPtO_2:&i5!P)"urrV4 +V#LG*r;Zhk])Mib!;?0e"50@nGkh:@\H%?0q>UKUL&M&Q9We*i"KqfB`9mC#!Q7S/!!.&lqYpTV +Jc5WM8?MUc!ndS@JcG3=J,~> +V#LG*r;Zhk])Mib!;?0e"50@nGkh:@\H%?0q>UKUL&M&Q9We*i"KqfB`9mC#!Q7S/!!.&lqYpTV +Jc5WM8?MUc!ndS@JcG3=J,~> +V#LG*r;Zhk])Mib!;?0e"50@nGkh:@\H%?0q>UKUL&M&Q9We*i"KqfB`9mC#!Q7S/!!.&lqYpTV +Jc5WM8?MUc!ndS@JcG3=J,~> +U]1AJ2?!RVAF7#/! +U]1AJ2?!RVAF7#/! +U]1AJ2?!RVAF7#/! +UAk8]AGuQ028m0-!G%o#rs@]cFm]5/p7VK)rr3;N!/9h?s7VWV`;]c +UAk8]AGuQ028m0-!G%o#rs@]cFm]5/p7VK)rr3;N!/9h?s7VWV`;]c +UAk8]AGuQ028m0-!G%o#rs@]cFm]5/p7VK)rr3;N!/9h?s7VWV`;]c +T`5"cr;ZkPp:gP-X\\io!qnL*qu6l2!9=+Q23[q;#-@mms8R4PqYpf=!:Bgdp,.R$rs/7.FoVL8 +!.t'^!G"h%rrI.BqS*)q!:BX_!qlW4JcG0 +T`5"cr;ZkPp:gP-X\\io!qnL*qu6l2!9=+Q23[q;#-@mms8R4PqYpf=!:Bgdp,.R$rs/7.FoVL8 +!.t'^!G"h%rrI.BqS*)q!:BX_!qlW4JcG0 +T`5"cr;ZkPp:gP-X\\io!qnL*qu6l2!9=+Q23[q;#-@mms8R4PqYpf=!:Bgdp,.R$rs/7.FoVL8 +!.t'^!G"h%rrI.BqS*)q!:BX_!qlW4JcG0 +TDnrF2?!RV2:'&;!oj:@r;Qi/2>6nH"a,P!XYohKrrl2^s7QH=q>UXpU&Y.p2>6nH"k`n/s1'TS +^BU\ +TDnrF2?!RV2:'&;!oj:@r;Qi/2>6nH"a,P!XYohKrrl2^s7QH=q>UXpU&Y.p2>6nH"k`n/s1'TS +^BU\ +TDnrF2?!RV2:'&;!oj:@r;Qi/2>6nH"a,P!XYohKrrl2^s7QH=q>UXpU&Y.p2>6nH"k`n/s1'TS +^BU\ +T)SibL&CuPFm[!E!G%DlrrI89q>UT9!<6T'q>UT92?2>0q#:MkFoVJPU%nWjA<[%SAGEnB.(TB2 +!;O;0G]*BX!Hj*Is6]i:~> +T)SibL&CuPFm[!E!G%DlrrI89q>UT9!<6T'q>UT92?2>0q#:MkFoVJPU%nWjA<[%SAGEnB.(TB2 +!;O;0G]*BX!Hj*Is6]i:~> +T)SibL&CuPFm[!E!G%DlrrI89q>UT9!<6T'q>UT92?2>0q#:MkFoVJPU%nWjA<[%SAGEnB.(TB2 +!;O;0G]*BX!Hj*Is6]i:~> +SGrW92>mLUXnKX3!kC2^rVlluch[SDm/Z/Hg%kXNirJK"!;QQtX`a[D!87/I"KchHDM%Yu"B_f+ +f`:f^!J54drrVQfc[l,`s*t~> +SGrW92>mLUXnKX3!kC2^rVlluch[SDm/Z/Hg%kXNirJK"!;QQtX`a[D!87/I"KchHDM%Yu"B_f+ +f`:f^!J54drrVQfc[l,`s*t~> +SGrW92>mLUXnKX3!kC2^rVlluch[SDm/Z/Hg%kXNirJK"!;QQtX`a[D!87/I"KchHDM%Yu"B_f+ +f`:f^!J54drrVQfc[l,`s*t~> +S,WN_L&CuP:W10N!qnLRrVllug%bRL!8.A*q>UTk!86$*q#:N"FoVIAg%bRMX`aYnDYUsL4K\Y: +!;O;0Jo:Jc!L$<1s6Tc9~> +S,WN_L&CuP:W10N!qnLRrVllug%bRL!8.A*q>UTk!86$*q#:N"FoVIAg%bRMX`aYnDYUsL4K\Y: +!;O;0Jo:Jc!L$<1s6Tc9~> +S,WN_L&CuP:W10N!qnLRrVllug%bRL!8.A*q>UTk!86$*q#:N"FoVIAg%bRMX`aYnDYUsL4K\Y: +!;O;0Jo:Jc!L$<1s6Tc9~> +RK!<@:]17oFkO_5!j+?Rrr3!V\bZ7.irJI(`;0E:f`:a5!9,rrC"4rrf$ +RK!<@:]17oFkO_5!j+?Rrr3!V\bZ7.irJI(`;0E:f`:a5!9,rrC"4rrf$ +RK!<@:]17oFkO_5!j+?Rrr3!V\bZ7.irJI(`;0E:f`:a5!9,rrC"4rrf$ +Qi@)g2>mLUFkOe7!qnLRrr3"QFnu%?X\\tNL&(`PThk^gA;0m[#2'"0s8Re,q#:Ln\c;$sS,0l# +Jk5n@!D78+^B1/1g&1jNKhm:"li2J~> +Qi@)g2>mLUFkOe7!qnLRrr3"QFnu%?X\\tNL&(`PThk^gA;0m[#2'"0s8Re,q#:Ln\c;$sS,0l# +Jk5n@!D78+^B1/1g&1jNKhm:"li2J~> +Qi@)g2>mLUFkOe7!qnLRrr3"QFnu%?X\\tNL&(`PThk^gA;0m[#2'"0s8Re,q#:Ln\c;$sS,0l# +Jk5n@!D78+^B1/1g&1jNKhm:"li2J~> +QN%!QPPbC]L"XNH#H\!ns8UaPg&(dRp,/uP_uSiprs.pKXoJFI!6"g8!qp/Irr3&Q!875K#Isj% +s8S-.Wr0U5RfL"urrULHPPi/s\4gl>rrUjRc[l,^s*t~> +QN%!QPPbC]L"XNH#H\!ns8UaPg&(dRp,/uP_uSiprs.pKXoJFI!6"g8!qp/Irr3&Q!875K#Isj% +s8S-.Wr0U5RfL"urrULHPPi/s\4gl>rrUjRc[l,^s*t~> +QN%!QPPbC]L"XNH#H\!ns8UaPg&(dRp,/uP_uSiprs.pKXoJFI!6"g8!qp/Irr3&Q!875K#Isj% +s8S-.Wr0U5RfL"urrULHPPi/s\4gl>rrUjRc[l,^s*t~> +PlCdOFo24?FkOk9!Ddk;rrRm3j8Ju`p1-tms8R4!j8Ju[p1._-rr3:g!3Ptps3FIupAP!mKf.og +rrU+=XoA>,p0T53^V@:1!0R3Z$'>4>\A,eJ4@o2ErrVmiFb0SXs*t~> +PlCdOFo24?FkOk9!Ddk;rrRm3j8Ju`p1-tms8R4!j8Ju[p1._-rr3:g!3Ptps3FIupAP!mKf.og +rrU+=XoA>,p0T53^V@:1!0R3Z$'>4>\A,eJ4@o2ErrVmiFb0SXs*t~> +PlCdOFo24?FkOk9!Ddk;rrRm3j8Ju`p1-tms8R4!j8Ju[p1._-rr3:g!3Ptps3FIupAP!mKf.og +rrU+=XoA>,p0T53^V@:1!0R3Z$'>4>\A,eJ4@o2ErrVmiFb0SXs*t~> +P5bR9Fo24?AAlXj%bUims8Ve'25/^V\MZ8)rr3;uA2U(6fr[,-j8Ao^\MX@_!!%`Hr;R)sFT@WO +g!=d@U&=oqp5o=T-ibp#qYpf20E=38!.jkArrSlOm=G<&s*t~> +P5bR9Fo24?AAlXj%bUims8Ve'25/^V\MZ8)rr3;uA2U(6fr[,-j8Ao^\MX@_!!%`Hr;R)sFT@WO +g!=d@U&=oqp5o=T-ibp#qYpf20E=38!.jkArrSlOm=G<&s*t~> +P5bR9Fo24?AAlXj%bUims8Ve'25/^V\MZ8)rr3;uA2U(6fr[,-j8Ao^\MX@_!!%`Hr;R)sFT@WO +g!=d@U&=oqp5o=T-ibp#qYpf20E=38!.jkArrSlOm=G<&s*t~> +OT,@7Fo24@250E]rrSkoj8T&_X\Sos23[b2rs#T$!!"mYpA+^jft#Grq#:B5AGuQ0L"Z;%"RXmQ +g%P1?"5162mJHnbcN(M,s69Q6~> +OT,@7Fo24@250E]rrSkoj8T&_X\Sos23[b2rs#T$!!"mYpA+^jft#Grq#:B5AGuQ0L"Z;%"RXmQ +g%P1?"5162mJHnbcN(M,s69Q6~> +OT,@7Fo24@250E]rrSkoj8T&_X\Sos23[b2rs#T$!!"mYpA+^jft#Grq#:B5AGuQ0L"Z;%"RXmQ +g%P1?"5162mJHnbcN(M,s69Q6~> +NrK.?PPY=]Fi="!rrQ_,p94Jtm59TKs60K5~> +NrK.?PPY=]Fi="!rrQ_,p94Jtm59TKs60K5~> +NrK.?PPY=]Fi="!rrQ_,p94Jtm59TKs60K5~> +N;itHXYotU!L(j`rr^TLcgCW0!qnK^Yl=h!A7YCbs60K5~> +N;itHXYotU!L(j`rr^TLcgCW0!qnK^Yl=h!A7YCbs60K5~> +N;itHXYotU!L(j`rr^TLcgCW0!qnK^Yl=h!A7YCbs60K5~> +M>mUpFo).@220!BhZ!T9rW!6^FeQb6s8V+:PHt2jp1-&JJcFp5J,~> +M>mUpFo).@220!BhZ!T9rW!6^FeQb6s8V+:PHt2jp1-&JJcFp5J,~> +M>mUpFo).@220!BhZ!T9rW!6^FeQb6s8V+:PHt2jp1-&JJcFp5J,~> +L]7GCX\\cn!bAFdi;Wd7q#CP?Tq;=K[/U7%FZ&31s5s?3~> +L]7GCX\\cn!bAFdi;Wd7q#CP?Tq;=K[/U7%FZ&31s5s?3~> +L]7GCX\\cn!bAFdi;Wd7q#CP?Tq;=K[/U7%FZ&31s5s?3~> +K`;,6ThkIa"*L`lmH+?JPOnhTA@DL?p1-&@JcFj3J,~> +K`;,6ThkIa"*L`lmH+?JPOnhTA@DL?p1-&@JcFj3J,~> +K`;,6ThkIa"*L`lmH+?JPOnhTA@DL?p1-&@JcFj3J,~> +Jc>f3X^q2,">t>(`7aGU!6"O1"*" +Jc>f3X^q2,">t>(`7aGU!6"O1"*" +Jc>f3X^q2,">t>(`7aGU!6"O1"*" +JcG`L"89Zs:\Fbl20F&DXi14l!:BU^!9=(3!3Gko"dAuH2.ZEmrr_:W2<08fj8XW~> +JcG`L"89Zs:\Fbl20F&DXi14l!:BU^!9=(3!3Gko"dAuH2.ZEmrr_:W2<08fj8XW~> +JcG`L"89Zs:\Fbl20F&DXi14l!:BU^!9=(3!3Gko"dAuH2.ZEmrr_:W2<08fj8XW~> +JcGTH"7=%#FlNH%7/-`^\c2U2j((%#^&J2Q2.ZE3s5O'/~> +JcGTH"7=%#FlNH%7/-`^\c2U2j((%#^&J2Q2.ZE3s5O'/~> +JcGTH"7=%#FlNH%7/-`^\c2U2j((%#^&J2Q2.ZE3s5O'/~> +JcGEC"QRG&F_'_:!)!%e!6"g8"87EKXhar=p6,K?JcF[.J,~> +JcGEC"QRG&F_'_:!)!%e!6"g8"87EKXhar=p6,K?JcF[.J,~> +JcGEC"QRG&F_'_:!)!%e!6"g8"87EKXhar=p6,K?JcF[.J,~> +JcG3="mt!hXf[fdFT>tJ!<%$@Tr7bf!B&R+rr]ehAE1T-"5-I-c[l,Rs*t~> +JcG3="mt!hXf[fdFT>tJ!<%$@Tr7bf!B&R+rr]ehAE1T-"5-I-c[l,Rs*t~> +JcG3="mt!hXf[fdFT>tJ!<%$@Tr7bf!B&R+rr]ehAE1T-"5-I-c[l,Rs*t~> +JcF@%qu?aTj7iQVj)k@(p;d19p6,K1m=G;os*t~> +JcF@%qu?aTj7iQVj)k@(p;d19p6,K1m=G;os*t~> +JcF@%qu?aTj7iQVj)k@(p;d19p6,K1m=G;os*t~> +JcF@%!/:CP!G(6_rr]eh28mZ;"SSrT:X=Ulh#Dm~> +JcF@%!/:CP!G(6_rr]eh28mZ;"SSrT:X=Ulh#Dm~> +JcF@%!/:CP!G(6_rr]eh28mZ;"SSrT:X=Ulh#Dm~> +JcF@%"M"L4AG5To"SSMh:W1NX"N4(nXnI>Gg])d~> +JcF@%"M"L4AG5To"SSMh:W1NX"N4(nXnI>Gg])d~> +JcF@%"M"L4AG5To"SSMh:W1NX"N4(nXnI>Gg])d~> +JcF@%"60B(p@&"bm?7NG`:h[["no&U23[`bs4RF&~> +JcF@%"60B(p@&"bm?7NG`:h[["no&U23[`bs4RF&~> +JcF@%"60B(p@&"bm?7NG`:h[["no&U23[`bs4RF&~> +JcF=$!3PSe"mqL223[(Prrq)>!&^nPJcF@%J,~> +JcF=$!3PSe"mqL223[(Prrq)>!&^nPJcF@%J,~> +JcF=$!3PSe"mqL223[(Prrq)>!&^nPJcF@%J,~> +JcEF`#55T[Z=ThbZ!`.@s +JcEF`#55T[Z=ThbZ!`.@s +JcEF`#55T[Z=ThbZ!`.@s +JcE=]#NMLR!)K<7p>u;ZmDP2a!)K`aJcF0uJ,~> +JcE=]#NMLR!)K<7p>u;ZmDP2a!)K`aJcF0uJ,~> +JcE=]#NMLR!)K<7p>u;ZmDP2a!)K`aJcF0uJ,~> +JcE4Z$0/R=!!$Pn\_6]FrsA)GXbBON!/7uNJcF'rJ,~> +JcE4Z$0/R=!!$Pn\_6]FrsA)GXbBON!/7uNJcF'rJ,~> +JcE4Z$0/R=!!$Pn\_6]FrsA)GXbBON!/7uNJcF'rJ,~> +JcE(V"50f1:]:=qA9F+1XTF3!AGuQ2A +JcE(V"50f1:]:=qA9F+1XTF3!AGuQ2A +JcE(V"50f1:]:=qA9F+1XTF3!AGuQ2A +JcDnQ"QS1;XbHLl"I#sig#IY``rCP~> +JcDnQ"QS1;XbHLl"I#sig#IY``rCP~> +JcDnQ"QS1;XbHLl"I#sig#IY``rCP~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +JcC<$JcFX-J,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/BookGPU/Makefile b/BookGPU/Makefile index 66929c8..011ff95 100644 --- a/BookGPU/Makefile +++ b/BookGPU/Makefile @@ -7,7 +7,7 @@ all: bibtex bu1 bibtex bu2 bibtex bu3 - bibtex bu4 +# bibtex bu4 makeindex ${BOOK}.idx pdflatex ${BOOK} pdflatex ${BOOK} diff --git a/BookGPU/algorithm.sty b/BookGPU/algorithm.sty new file mode 100644 index 0000000..843e3d5 --- /dev/null +++ b/BookGPU/algorithm.sty @@ -0,0 +1,79 @@ +% ALGORITHM STYLE -- Released 8 April 1996 +% for LaTeX-2e +% Copyright -- 1994 Peter Williams +% E-mail Peter.Williams@dsto.defence.gov.au +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{algorithm} +\typeout{Document Style `algorithm' - floating environment} + +\RequirePackage{float} +\RequirePackage{ifthen} +\newcommand{\ALG@within}{nothing} +\newboolean{ALG@within} +\setboolean{ALG@within}{false} +\newcommand{\ALG@floatstyle}{ruled} +\newcommand{\ALG@name}{Algorithm} +\newcommand{\listalgorithmname}{List of \ALG@name s} + +% Declare Options +% first appearance +\DeclareOption{plain}{ + \renewcommand{\ALG@floatstyle}{plain} +} +\DeclareOption{ruled}{ + \renewcommand{\ALG@floatstyle}{ruled} +} +\DeclareOption{boxed}{ + \renewcommand{\ALG@floatstyle}{boxed} +} +% then numbering convention +\DeclareOption{part}{ + \renewcommand{\ALG@within}{part} + \setboolean{ALG@within}{true} +} +\DeclareOption{chapter}{ + \renewcommand{\ALG@within}{chapter} + \setboolean{ALG@within}{true} +} +\DeclareOption{section}{ + \renewcommand{\ALG@within}{section} + \setboolean{ALG@within}{true} +} +\DeclareOption{subsection}{ + \renewcommand{\ALG@within}{subsection} + \setboolean{ALG@within}{true} +} +\DeclareOption{subsubsection}{ + \renewcommand{\ALG@within}{subsubsection} + \setboolean{ALG@within}{true} +} +\DeclareOption{nothing}{ + \renewcommand{\ALG@within}{nothing} + \setboolean{ALG@within}{true} +} +\DeclareOption*{\edef\ALG@name{\CurrentOption}} + +% ALGORITHM +% +\ProcessOptions +\floatstyle{\ALG@floatstyle} +\ifthenelse{\boolean{ALG@within}}{ + \ifthenelse{\equal{\ALG@within}{part}} + {\newfloat{algorithm}{htbp}{loa}[part]}{} + \ifthenelse{\equal{\ALG@within}{chapter}} + {\newfloat{algorithm}{htbp}{loa}[chapter]}{} + \ifthenelse{\equal{\ALG@within}{section}} + {\newfloat{algorithm}{htbp}{loa}[section]}{} + \ifthenelse{\equal{\ALG@within}{subsection}} + {\newfloat{algorithm}{htbp}{loa}[subsection]}{} + \ifthenelse{\equal{\ALG@within}{subsubsection}} + {\newfloat{algorithm}{htbp}{loa}[subsubsection]}{} + \ifthenelse{\equal{\ALG@within}{nothing}} + {\newfloat{algorithm}{htbp}{loa}}{} +}{ + \newfloat{algorithm}{htbp}{loa} +} +\floatname{algorithm}{\ALG@name} + +\newcommand{\listofalgorithms}{\listof{algorithm}{\listalgorithmname}} + diff --git a/BookGPU/algorithm2e.sty b/BookGPU/algorithm2e.sty new file mode 100644 index 0000000..8c5f4b7 --- /dev/null +++ b/BookGPU/algorithm2e.sty @@ -0,0 +1,2637 @@ +% algorithm2e.sty --- style file for algorithms +% almost everything can be customized by users. See the document for more explanations +%% Copyright 1996-2008 Christophe Fiorio +% +% This program may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.2 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.2 or later is part of all distributions of LaTeX +% version 1999/12/01 or later. +% +% This program consists of the files algorithm2e.sty and algorithm2e.tex and algorithm2e-compatibility.sty +% +% Report bugs and comments to: +% - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% +% - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% +% subscribe by emailing sympa@lirmm.fr with 'subscribe '^^J% +% +% $Id: algorithm2e.sty,v 4.1 2009/12/15 08:54:08 cfiorio Exp $ +% +% PACKAGES REQUIRED: +% +% - float (in contrib/supported/float) +% - ifthen (in base) +% - xspace (in packages/tools) +% - relsize (in contrib/misc/relsize.sty) +% +%%%%%%%%%%%%%%% Release 4.01 +% +% Package options: +% --------------- +% - oldcommands : to use old command names +% - french, english, german, +% portuguese, czech, italiano, +% slovak : for the name of the algorithm and some keyword code +% - onelanguage : to simply switch keyword from one language to another without changing +% keyword commands +% - boxed, boxruled, ruled, tworuled, +% algoruled, plain : layout of the algorithm +% - algo2e : environment is algorithm2e instead of algorithms and \listofalgorithmes +% instead of \listofalgorithms +% - slide : to use when making slides +% - noline,lined,vlined : how block are designed. +% - shortend, longend, noend : short or long end keyword as endif for e.g. +% - linesnumbered : auto numbering of the algorithm's lines +% - linesnumberedhidden : to hide autonumbered lines (show number on a line with \ShowLn +% - commentsnumbered, inoutnumbered : to autonumber comments and inout keywords (by defaut not numbered) +% - rightnl : to have line number on the right instead of on the left as default +% - algonl : line numbers preceded by algo number +% - scright, scleft : right or left justified side comments +% - fillcomment, nofillcomment : end mark of comment is flushed to the right so comments fill the line +% - dotocloa : add an entry in the toc for list of algorithms (require tocbibind package) +% - endfloat : add algoendfloat environment pushing algorithm so written to the end of document +% - resetcount, noresetcount : start value of line numbers. +% - algopart,algochapter,algosection : algo numbering within part, chapter or section +% - titlenumbered,titlenotnumbered : numbering of title set by \Titleofalgo +% - figure : algorithms are figures, numbered as figures, and put in the list of figures. +% - procnumbered : procedure or function are numbered as algorithm +% - nokwfunc : procedure or function name doens't become a command +% - norelsize : don't use relsize package (useful if it breaks the compatibily) +% +% defaults are; english,plain,resetcount,titlenotnumbered +% +%%%%%%%%%%%%%% +% +% Short summary +% ------------- +% +% algorithm is an environment for writing algorithm in LaTeX2e. +% Almost all is customizable. You can add keywords, change style, change the layout, ... +% It provide macros that allow you to create differents sorts of key words, therefore a set of predefined key +% word is gived. +% +% IT should be used as follows +% +% \begin{algorithm} +% ... +% ... +% \end{algorithm} +% +% +% IMPORTANT : each line MUST end with \; +% +% Note that if you define macros outside algorithm environment they +% are avaible in all the document and particulary you can use then +% inside all algorithms without re-define them. +% +% an example: +% +% \begin{algorithm} +% \SetAlgoLined +% \KwIn{this text} +% \KwOut{how to write algorithm with \LaTeX2e } +% +% initialization\; +% \While{not at end of this document}{ +% read current section\; +% \eIf{understand}{ +% go to next section\; +% current section becomes this one\; +% }{ +% go back to the beginning of current section\; +% } +% } +% \caption{How to write algorithm} +% \end{algorithm} +% +% +%%%%%%%%%%%%%% predefined keywords +% +% \KwIn{input} +% \KwOut{output} +% \KwData{input} +% \KwResult{output} +% \KwTo % a simple keyword +% \KwFrom % a simple keyword +% \KwRet{[value]} +% \Return{[value]} +% \Begin{block inside} +% \eIf{condition}{Then Block}{Else block} % in blocks +% \If{condition}{Then block} % in a block +% \uIf{condition}{Then block} % in a block unended +% \lIf{condition}{Else text} % on the same line +% \Else{inside Else} % in a block +% \lElse{Else text} % on the same line +% \uElse{Else text} % in a block unended +% \ElseIf{inside Elseif} % in a block +% \lElseIf{Elseif text} % on the same line +% \uElseIf{Elseif text} % in a block unended +% \Switch{Condition}{Switch block} +% \Case{a case}{case block} % in a block +% \lCase{a case}{case text} % on the same line +% \Other{otherwise block} % in a block +% \lOther{otherwise block} % on the same line +% \For{condition}{text loop} % in a block +% \lFor{condition}{text} % on the same line +% \ForEach{condition}{text loop} % in a block +% \lForEach{condition}{text} % on the same line +% \ForPar{condition}{text loop} % in a block +% \lForPar{condition}{text} % on the same line +% \While{condition}{text loop} % in a block +% \lWhile{condition}{text loop} % on the same line +% \Repeat{End condition}{text loop} % in a block +% \lRepeat{condition}{text} % on the same line +% +%%%%%%%%%%%%%% +% +% History: +% +% - december 14 2009 - revision 4.01 +% * ADD : new command \SetKwHangingKw{Name}{text} (hanging indent with keyword): This creates a +% hanging indent much like \texttt{SetKwInput}, except that it removes the trailing `:' +% and does not reset numbering. +% +% - november 17 2009 - revision 4.00 - +% +% * CHANGE : IMPORTANT : some commands have been renamed to have consistent naming (CamlCase +% syntax) and old commands are no more available. If you doesn't want to change +% your mind or use old latex files, you can use oldcommands option to enable old +% commands back. +% text. Here are these commands: +% - \SetNoLine becomes \SetAlgoNoLine +% - \SetVline becomes \SetAlgoVlined +% - \Setvlineskip becomes \SetVlineSkip +% - \SetLine becomes \SetAlgoLined +% - \dontprintsemicolon becomes \DontPrintSemicolon +% - \printsemicolon becomes \PrintSemicolon +% - \incmargin becomes \IncMargin +% - \decmargin becomes \DecMargin +% - \setnlskip becomes \SetNlSkip +% - \Setnlskip becomes \SetNlSkip +% - \setalcapskip becomes \SetAlCapSkip +% - \setalcaphskip becomes \SetAlCapHSkip +% - \nlSty becomes \NlSty +% - \Setnlsty becomes \SetNlSty +% - \linesnumbered becomes \LinesNumbered +% - \linesnotnumbered becomes \LinesNotNumbered +% - \linesnumberedhidden becomes \LinesNumberedHidden +% - \showln becomes \ShowLn +% - \showlnlabel becomes \ShowLnLabel +% - \nocaptionofalgo becomes \NoCaptionOfAlgo +% - \restorecaptionofalgo becomes \RestoreCaptionOfAlgo +% - \restylealgo becomes \RestyleAlgo +% - gIf macros and so on do no more exist +% * NEW: - Compatibily with other packages improven by changing name of internal +% macros. Algorithm2e can now be used with arabtex for example, if this last is +% loaded after algorithm2e package. +% * ADD: - OPTION endfloat: endfloat packages doesn't allow float environment inside other +% environment. So using it with figure option of algorithm2e makes error. This +% option enables a new environment algoendfloat to be used instead of algorithm +% environment that put algorithm at the end. algoendfloat environment make +% algorithm acting as endfloat figures. This option requires endfloat packages. +% * ADD: - OPTION norelsize: starting from this release (v4.00), algorithm2e package uses +% relsize package in order to get relative size for lines numbers; but it seems +% that some rare classes (such as inform1.cls) are not compatible with relsize; to +% have algorithm2e working, this option makes algorithm2e not to load relsize +% package and go back to previous definition by using \scriptsize font for lines +% numbers. +% * ADD: - OPTION onelanguage: allow, if using standard keywords listed below, to switch +% from one language to another without changing keywords by using appropriate +% language option : +% . KwIn, KwOut, KwData, KwResult +% . KwTo KwFrom +% . KwRet, Return +% . Begin +% . Repeat +% . If, ElseIf, Else +% . Switch, Case, Other +% . For, ForPar, ForEach, ForAll, While +% . +% * ADD: - OPTION rightnl: put lines numbers to the right of the algorithm instead of left. +% * ADD: new commands \setRightLinesNumbers and \setLeftLinesNumbers which sets the lines +% numbers to the right or to the left of the algorithm. +% * ADD: - new kind of keywords : KwArray used to define arrays: +% \SetKwArray{Kw}{array} defines an array keywords Kw called array and printed in +% DataSty style when call with \Kw. It can be used with one argument which +% denotes the element index: \Kw{n} prints array[n] with array in DataSty and n in +% ArgSty. +% * ADD/FIX: rules of ruled, algoruled, tworuled styles used rules of different sizes! This +% is now fixed. Moreover size of the rules is now controlled by a length and so +% can be customized by the user. +% \algoheightrule is the height of the rules and can be changed via \setlength +% \algoheightruledefault is the default height of he rules (0.8pt) +% \algotitleheightrule is the height of the rule that comes just after the +% caption in ruled and algoruled style; it can be changed via \setlength +% \algotitleheightruledefault is the default height of this rules (0.8pt) +% Thanks to Philippe Dumas who reports the bug and make the suggestion. +% * ADD: - \SetAlgoCaptionSeparator which sets the separator between Algorithm 1 and the +% title. By default it's ':' and caption looks like "Algorithm 2: title" but now +% you can change it by using for example \SetAlgoCaptionSeparator{.} which will +% give "Algorithm 3. title" +% * ADD: - \SetAlgoLongEnd and \SetAlgoShortEnd and \SetAlgoNoEnd commands which act as +% corresponding package options +% * ADD: - OPTIONS italiano and slovak as new language (thanks to Roberto Posenato and +% Miroslav Binas) +% * CHANGE: - Fnt and Sty macro to have consistent use and naming (see below) +% * ADD: - \AlCapSty, \AlCapNameSty, \AlCapFnt, \AlCapNameFnt, \ProcSty, \ProcFnt, +% \ProcNameSty, \ProcNameFnt, \ProcArgSty, ProcArgFnt and corresponding "set macro" +% \SetAlCapSty, \SetAlCapNameSty, \SetAlCapFnt, \SetAlCapNameFnt, \SetProcSty, +% \SetProcFnt, \SetProcNameSty, \SetProcNameFnt, \SetProcArgSty, \SetProcArgFnt which +% control the way caption is printed. Sty macro use command taking one parameter as +% argument, Fnt macros use directly command. In Fact caption is printed as follow : +% \AlCapSty{\AlCapFnt Algorithm 1:}\AlCapNameSty{\AlCapNameFnt my algorithm} +% By default, \AlCapSty is textbf and \AlCapFnt is nothing. \AlCapNameSty keep text +% as it is, and \AlCapNameFnt do nothing also. +% You can redefine \AlCapFnt and \AlCapNameFnt by giving macro to \Set commands. For +% example, you can do \SetAlCapFnt{\large} to see Algorithm printed in \large font. +% You can redefine \AlCapSty, \AlCapFnt, \AlCapNameSty and \AlCapNameFnt with the +% corresponding \Set command. For the Sty commands, you have to give in parameter +% name of a macro (whithout \) which takes one argument. For example, +% \SetAlCapFnt{textbf} defines the default behaviour. If you want to do more +% complicated thing, you should define your own macro and give it to \SetAlCapFnt or +% \SetAlCapNameFnt. Here are two examples: +% - \newcommand{\mycapsty}[1]{\tiny #1}\SetAlCapNameSty{mycapsty} +% - \newcommand{\mycapsty}[1]{\textsl{\small #1}}\SetAlCapNameSty{mycapsty} +% Or you can combine the two, for the last example you can also do: +% \SetAlCapNameSty{textsl}\SetAlCapNameFnt{\small} +% Thanks to Jan Stilhammer who gives me the idea of \AlCapNameFnt. +% * CHANGE \AlTitleFnt to match definition of all other Fnt macros and add a \AlTitleSty +% macro (see below) . Now you set \AlTitleFnt by calling \SetAlTitleFnt with +% directly a macro without parameter in argument: +% Example: \SetAlTitleFnt{\small} to set title in small font. +% * ADD: - \AlTitleSty and \SetAlTitleSty commands to set a style for title. These commands +% are defined from a macro taking the text in argument, as \textbf for example. +% To set the TitleSty you have to give name of the macro (without the '\') +% to \SetAlTitleSty. For example \SetAlTitleSty{textbf} to set \textbf style. +% * ADD: - new command \SetAlgorithmName{algorithmname}{list of algorithms name} which +% redefines name of the algorithms and the sentence list of algorithms. Second +% argument is the name that \autoref, from hyperref package, will use. Example: +% \SetAlgorithmName{Protocol}{List of protocols} if you prefer protocol than +% algorithm. +% * ADD: - new \SetAlgoRefName{QXY} which change the default ref (number of the algorithm) by +% the name given in parameter (QXY in the example). +% * ADD: - new command \SetAlgoRefRelativeSize{-2} which sets the output size of refs, defined +% by \SetAlgoRefName, used in list of algorithms. +% * ADD: - two dimensions to control the layout of caption in ruled, algoruled and boxruled +% algorithms: +% - interspacetitleruled (2pt by defaut) which controls the vertical space between +% rules and title in ruled and algoruled algorithms. +% - interspaceboxruled (2\lineskip by default) which controls the vertical space +% between rules and title in boxruled algorithms. +% These two dimensions can be changed by using \setlength command. +% * ADD: - With the fix (see below) of procedure and function environments, a new feature has +% been added: the name of the procedure or function set in caption is automatically +% defined as a KwFunction and so can be used as a macro. For example, if inside a +% procedure environment you set \caption{myproc()}, you can use \myproc macro in you +% main text. Beware that the macro is only defined after the \caption! +% * ADD: - OPTION nokwfunc to unable the new feature described above in function and +% procedure environment. Useful if you use name of procedure or function that cannot +% be a command name as a math display for example. +% * ADD: - \SetAlgoNlRelativeSize{number} command which sets the relative size of line +% numbers. By default, line numbers are two size smaller than algorithm text. Use +% this macro to change this behavior. For example, \SetAlgoNlRelativeSize{0} sets it +% to the same size, \SetAlgoNlRelativeSize{-1} to one size smaller and +% \SetAlgoNlRelativeSize{1} to one size bigger +% * ADD: - \SetAlgoProcName{aname} command which sets the name of Procedure printed by +% procedure environment (the environment prints Procedure by default). Second +% argument is the name that \autoref, from hyperref package, will use. +% * ADD: - \SetAlgoFuncName{aname} command which sets the name of Function printed by +% procedure environment (the environment prints Function by default). Second +% argument is the name that \autoref, from hyperref package, will use. +% * ADD: - \SetAlgoCaptionLayout{style} command which sets style of the caption; style must +% be the name of a macro taking one argument (the text of the caption). Examples +% below show how to use it: +% . \SetAlgoCaptionLayout{centerline} to have centered caption +% . \SetAlgoCaptionLayout{textbf} to have bold caption +% If you want to apply two styles in the same time, such as centered bold, you have +% to define you own macro and then use \SetAlgoCaptionLayout with its name. +% * ADD: - OPTION procnumbered: which makes the procedure and function to be numbered as +% algorithm +% * ADD: - OPTIONS tworuled and boxruled +% these are two new layouts: tworuled acts like ruled but doesn't put a line after +% caption ; boxruled surround algorithm by a box, puts caption above and add a line +% after caption. +% * REMOVE: - SetKwInParam has been deleted since not useful itself because of different +% macros which can do the same in a better and a more consistent way as +% SetKwFunction or SetKw. +% * FIX: - line number is now correctly vertically aligned with math display. +% * FIX: - references with hyperref. No more same identifier or missing name error. BUT now +% you must NOT use naturalnames option of hyperref packages if you do PdfLaTeX +% * FIX: - autoref with hyperref package (thanks to Jörg Sommer who notices the problem). +% * FIX: - titlenumbered was not working! fixed. +% * FIX: - Else(){} acted like uElse. Corrected. +% * FIX: - noend management: when a block was inside another and end of block was following +% each other, a blank line was added: it's now corrected. +% * FIX: - Function and Procedure environment was no more working as defined originally: the +% label was no more name of the procedure, it acts always as if procumbered option +% has been used. +% * FIX: - line numbers had a fixed size which can be bigger than algorithm text accordingly +% to \AlFnt set (see also new command \SetAlgoNlRelativeSize above) +% * FIX: - semicolon in comments when dontprintsemicolon is used. +% * FIX: - listofalgorithms adds a vertical space before first algo of a chapter as for +% listoffigures or listoftables +% * FIX: - listofalgorithms with twocolumns mode and some classes which don't allow onecolumn +% and so don't define \if@restonecol as prescribed in LaTeX (sig-alternate for +% example) +% * FIX: - algorithm2e now works with elsart cls and some more classes. +% * FIX: - blocks defined by SetKwBlock act now as other blocks (if for instance) and don't +% write end in vlined mode, instead they print a small horizontal line as required +% by the option. +% * FIX: - underfull hbox warning at each end of algorithm environment removed. +% +% * INTERNAL CHANGE: - short end keyword are deduce from long end keyword by keeping the +% first one. Allows to avoid double definition. +% * INTERNAL CHANGE: - procedure, function and algorithm are now resolved by the same +% environment to avoid code duplication. +% +% - October 04 2005 - revision 3.9 - +% * ADD: - \setalcaphskip command which sets the horizontal skip before Algorithm: in caption +% when used in ruled algorithm. +% * ADD: - \SetAlgoInsideSkip command which allows to add an extra vertical space before and +% after the core of the algorithm (ie: \SetAlgoInsideSkip{bigskip}) +% * CHANGE: - caption, when used with figure option, is no more controlled by algorithm2e +% package and so follows the exact behaviour of figures. The drawback is that you +% cannot change the typo with AlTitleFnt or CapFnt. The avantage is that if you +% use caption package, it works. +% * FIX: - problem with numbering line and pdflatex +% * FIX: - error when algorithm2e package was used with beamer and listings together +% - February 12 2005 - revision 3.8 - +% * FIX: - extra line with noend option. +% - February 10 2005 - revision 3.7 - +% * ADD: - sidecomment: different macros allowing to put text right after code on the same +% line. They are defined in the same time comment macros are defined with a star +% after the macro name. By default comments are right justified but this can be +% change with appropriate option in the macro. Ex: +% . default: \tcc*{side comment} +% . same as previous: \tcc*[r]{side comment} +% . left justify: \tcc*[l]{side comment} +% . here: \tcc*[h]{side comment} don't put the end of line mark before +% comment (; by default) and don't end the line. +% . flushed: \tcc*[f]{side comment} same as the precedent but right +% justified +% * ADD: - OPTION scright (default): right justified side comments (side comments +% are flushed to the righr) +% * ADD: - OPTION scleft: left justified side comments (side comments are put right after the +% code line) +% * ADD: - \SetSideCommentLeft acts as scleft option +% * ADD: - \SetSideCommentRight acts as scright option +% * ADD: - block like macro side text: all macro defining a block allows now to put text right +% after key words by putting text into (). Done to be used with sidecomment macros, +% but all text can be used. +% Ex: \eIf(\tcc*[f]{then comment}){test}{then text}(else side text){else text} +% * ADD: - OPTION fillcomment (default): end mark of comment is flushed to the right so +% comments fill all the width of text. +% * ADD: - OPTION nofillcomment: end mark of comment is put right after the comment. +% * ADD: - \SetNoFillComment acts as nofillcomment option. +% * ADD: - \SetFillComment acts as fillcomment option. +% * ADD: - OPTION dotocloa: which adds an entry in the toc for the list of algorithms. This +% option load package tocbibind if not already done and so list of figures and list +% of tables are also added in the toc. If you want to control which ones of the lists +% will be added in the toc, please load package tocbibind before package algorithm +% and give it the options you want. +% * FIX: - vertical spacing for uif macro with noend option +% * FIX: - all the compatibility problems between caption and other packages +% * FIX: - typographical differences between list of algorithms and other lists when in +% report or book +% +% - January 24 2005 - revision 3.6 - +% * FIX: - vertical spacing and space characters at the beginning or end of comments. +% line numbers of comments not in the NlSty. +% Thanks to Arnaud Giersch for his comments and suggestions. +% * FIX: - Set*Sty macro: the styles defined was not protected and was modified by surrounding +% context. For example KwTo in a \For{}{} was in bold AND italic instead of just in +% bold. +% * FIX: - line number misplacement after \Indp +% +% - January 21 2005 - revision 3.5 - +% * ADD: - hidden numbering of the lines. Lines are auto-numbered but numbers are shown only +% on lines you specify: +% * linesnumberedhidden option or \LinesNumberedHidden macro activate this +% functionnality. +% * \ShowLn and \ShowLnLabel{lab} macros make the number visible on the +% line. \ShowLnLabel{lab} allows to set a label for this line. +% Thanks to Samson de Jager who makes this suggestion and provides the macros. +% * ADD: - \AlCapFnt and \SetAlCapFnt which allow to have a different font for +% caption. Works like \AlFnt and \SetAlFnt and by default is the same. +% * ADD: - \AlCapSkip skip length. This vertical space is added before caption in plain ou +% boxed mode. It allows to change distance between text and caption. +% * FIX: - caption compatible with IEEEtran class. +% * FIX: - some vertical spacing error with \uIf macros (Thanks to Arnaud Giersch) +% * FIX: - Procedure and Function: lines are also numbered like algorithms +% * FIX: - CommentSty was not used for Comments +% +% - January 10 2005 - revision 3.4 - +% * FIX: - caption compatible with new release of Beamer class. +% +% - June 16 2004 - revision 3.3 - +% * FIX: - Hyperlink references of Hyperref package works now if compiled with pdflatex +% and [naturalnames] option of hyperref package is used. +% * FIX: - algorithm[H] had problem in an list environment - corrected +% * FIX: - interline was not so regular in nested blocks - corrected +% * ADD - \SetVlineSkip macro which sets the vertical skip after the little horizontal +% rule which closes a block in Vlined mode. By default 0.8ex +% +% - June 11 2004 - revision 3.2 - AUTO NUMBERING LINES !!! +% * ADD: auto numbering of the lines (the so asked and so long awaiting feature) +% this feature is managed by 3 options and 3 commands: +% - linesnumbered option: lines of the algo are numbered except for comments and +% input/output (KwInput and KwInOut) +% - commentsnumbered option: makes comments be numbered +% - inoutnumbered option: makes data input/output be numbered +% - \nllabel{lab} labels the line so you can cite with \ref{lab} +% - \LinesNumbered make the following algorithms having auto-numbered lines +% - \linesnotnumbered make the following algorithms having no auto-numbered lines +% * Change: algo2e option renames listofalgorithms in listofalgorithmes +% * FIX: new solution for compatibility with color package, more robust and not tricky. +% Many thanks to David Carlisle for his advices +% +% - June 09 2004 - revision 3.1 - +% * Change: \SetKwSwitch command defines an additionnal macro \uCase and \Case prints end +% * Change: now macros SetKw* do a renewcommand if the keyword is already defined. So you can +% redefine default definition at your own convenience or change your definition +% without introducing a new macro and changing your text. +% * ADD: new macro \SetKwIF which do \SetKwIf and +% \SetKwIfElseIf.The following default definition has been added: +% \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif} +% and so you get the macros; +% \If \eIf \lIf \uIf \ElseIf \uElseIf \lElseIf \Else \uElse \lElse +% * ADD: new macro \SetAlgoSkip which allow to fix the vertical skip before and after the +% algorithms. Default is smallskip, do \SetAlgoSkip{} if you don't want an extra space +% or \SetAlgoSkip{medskip} or \SetAlgoSkip{bigskip} if you want bigger space. +% * ADD: macro \SetKwIf defines in addition a new macro \uElse (depending on wat name you +% have given in #2 arg). +% * ADD: macro \SetKwIfElseIf defines in addition a new macro \uElse and \ugElseIf (depending +% on what name you have given in #2 and #3 arg). +% * Change: baseline of algorithm is now top, so two algorithms can be put side by side. +% * FIX: Compatibility with color package solved. The problem was due to a redefinition of +% standard macros by color package. This solves compatibility problem with other +% packages as pstcol or colortbl. (notified by Dirk Fressmann, Antti Tarvainen and Koby +% Crammer) +% * Fix: extra little shift to the right with boxed style algorithm removed (notified by +% P. Tanovski) +% * Fix: algoln option was buggy (notified bye Jiaying Shen) +% * Fix: german and portuges option didn't work due to bad typo (notified by Martin Sievers, +% Thorsten Vitt and Jeronimo Pellegrini) +% +% - February 13 2004 - revision 3.0 - +% * Major revision which makes the package independent from float.sty, so now +% - algorithm* works better, in particular can be used in multicols environments +% - (known bug corrected) +% [H] works now for all sort of environment but is handled differently for classic +% environment and star environment (algorithm, figure, procedure and function). For star +% environment, H acts like for classical figure environment, so it doesn't stay here +% absolutely. +% - (known bug corrected) +% you can use now floatflt package with algorithm package and even with figure +% option. Beware that if you want to put an algorithm inside a floatingfigure, it cannot +% be floating, so [H] is required and then figure option should not be used, since +% standard figure[H] are still floating with LaTeX. +% * boxruled: a new style added. Possible now since no style no more defined by the float +% package. +% * nocaptionofalgo: dosen't print Algorithm #: in the caption for algorithm in ruled or +% algoruled style. +% note: this is just documentation of a macro which was already in the package. +% - December 14 2003 - revision 2.52 - +% * output message shorter +% * french keyword macro \PourTous was missing for longend option, it has been added. +% * TitleofAlgo prints Function or Procedure in corresponding environments. +% +% - October 27 2003 - revision 2.51 - Revision submitted to CTAN archive +% * correction of a minor which make caption in procedure +% and function to be blanck with pdfscreen package +% (thanks to Joel Gossens for the notification) +% * add two internal definition to avoid some errors when +% used with Hyperref package (Hyperref package need to +% define new counter macro from existing ones, and +% don't do it for algorithm2e package, so we do it) +% +% - October 17 2003 - revision 2.50 - first revision for CTAN archive +% * add \AlFnt and \SetAlFnt{font} macros: \AlFnt is used at the beginning of the caption and +% the body of algorithm in order to define the fonts used for typesetting algorithms. You +% can use it elsewhere you want to typeset text as algorithm. For example you can do +% \SetAlFnt{\small\sf} to have algorithms typeset in small sf font. Default is nothing so +% algorithm is typeset as the text of the document. +% * add \AlTitleFnt{text} and \SetAlTitleFnt{font} macros: The {Algorithm: } in the caption is +% typeset with \AlTitleFnt{Algorithm:}. You can use it to have text typeset as {Algorithm:} +% of captions. Default is textbf. Default can be redefined by \SetAlTitleFnt{font}, for +% example you can do \SetAlTitleFnt{emph} +% * add CommentSty typo for text comment. +% * add some compatibility with hyperref package (still an error on multiply defined refs but +% pdf correctly generated) +% * flush text to left in order to have correct indentation even with class as amsart which +% center all figures +% * add german, portugues and czech options for title of algorithms and typo. +% * add portuguese translation of predefined keywords * add czech translation of some +% predefined keywords +% +% - December 23 2002 - revision 2.40 +% * add some french keyword missing +% * add function* and procedure* environment like algorithme* environment: print in one column +% even if twocolumn option is specified for the document. +% * add a new macro \SetKwComment to define macro which writes comments in the text. First +% argument is the name of the macro, second is the text put before the comment, third is the +% text put at the end of the comment.Default are \tcc and \tcp +% * add new options to change the way algo are numbered: +% [algopart] algo are numbered within part (counter must exist) +% [algochapter] algo are numbered within chapter +% [algosection] algo are numbered within section +% +% - March 27 2002 - revision 2.39 +% * Gilles Geeraerts: added the \SetKwIfElseIf to manage +% if (c) +% i; +% else if (c) +% i; +% ... +% else +% i; +% end +% * Also added \gIf \gElseIf \gElse. +% +% - January 02 2001 - revision 2.38 +% * bugs related to the caption in procedure and function +% environment are corrected. +% * bug related to option noend (extra vertical space added +% after block command as If or For) is corrected. +% * czech option language added (thanks to Libor Bus: l.bus@sh.cvut.cz). +% +% - October 16 2000 - revision 2.37 +% * option algo2e added: change the name of environment +% algorithm into algorithm2e. So allow to use the package +% with some journal style which already define an algorithm +% environment. +% +% - September 13 2000 - revision 2.36 +% * option slide added: require package color +% * Hack for slide class in order to have correct +% margins +% +% - November 25 1999 - revision 2.35 +% * revision number match RCS number +% * Thanks to David A. Bader, a new option is added: +% noend: no end keywords are printed. +% +% - November 19 1999 - revision 2.32 +% * minor bug on longend option corrected. +% +% - August 26 1999 - revision 2.31 +% * add an option : figure +% this option makes algorithms be figure and so are numbered +% as figures, have Figure as caption and are put in +% the \listoffigures +% +% - January 21 1999 - revision 2.3 beta +% add 2 new environments: procedure and function. +% These environments works like algorithm environment but: +% - the ruled (or algoruled) style is imperative. +% - the caption now writes Procedure name.... +% - the syntax of the \caption command is restricted as +% follow: you MUST put a name followed by 2 braces like +% this ``()''. You can put arguments inside the braces and +% text after. If no argument is given, the braces will be +% removed in the title. +% - label now puts the name (the text before the braces in the +% caption) of the procedure or function as reference (not +% the number like a classic algorithm environment). +% There are also two new styles : ProcNameSty and +% ProcArgSty. These style are by default the same as FuncSty +% and ArgSty but are used in the caption of a procedure or a +% function. +% +% - November 28 1996 - revision 2.22 +% add a new macro \SetKwInParam{arg1}{arg2}{arg3}: +% it defines a macro \arg1{name}{arg} which prints name in keyword +% style followed byt arg surrounded by arg2 and arg3. The main +% application is to a function working as \SetKwInput to be used +% in the head of the algorithm. For example +% \SetKwInParam{Func}{(}{)} allows +% \Func{functionname}{list of arguments} which prints: +% \KwSty{functioname(}list of arguments\KwSty{)} +% +% +% - November 27 1996 - revision 2.21 : +% minor bug in length of InOut boxes fixed. +% add algorithm* environment. +% +% - July 12 1996 - revision 2.2 : \SetArg and \SetKwArg macros removed. +% +% \SetArg has been removed since it never has been +% documented. +% \SetKwArg has been removed since \SetKw can now +% take an argument in order to be consistent with +% \SetKwData and \SetKwFunction macros. +% +% - July 04 1996 - revision 2.1 : still more LaTeX2e! Minor compatibility break +% +% Macros use now \newcommand instead of \def, use of \setlength, +% \newsavebox, ... and other LaTeX2e specific stuff. +% The compatibility break: +% - \SetData becomes \SetKwData to be more consistent. So the old +% \SetKwData becomes \SetKwInput +% - old macros \titleofalgo, \Freetitleofalgo and \freetitleofalgo +% from LaTeX209 version which did print a warning message and call +% \Titleofalgo in version 2.0 are now removed! +% +% - March 13 1996 - revision 2.0: first official major revision. +% +% +%%%%%%%%%%%%%% +% +% Known bugs: +% ----------- +% - no more known bugs... all are corrected! +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% for more complete informations you can see algorithm2e.tex +% +% +%%%%%%%%%%%%%%%%%%%%%%%% Identification Part %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\NeedsTeXFormat{LaTeX2e}[1994/12/01] +% +\ProvidesPackage{algorithm2e}[2008/00/00 v3.10 algorithms environments] +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% Initial Code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\@makeother\*% some package redefined it as a letter (as color.sty) +\def\@firstword#1 #2\@nil{#1}% an useful fonction +% +% definition of commands which can be redefined in options of the package. +% +\newcounter{AlgoLine}% +\setcounter{AlgoLine}{0}% +% +\newcommand{\algocf@algocfref}{\relax}% +\newcommand{\listalgorithmcfname}{}% +\newcommand{\algorithmcfname}{}% +\@ifundefined{algorithmautorefname}{\newcommand{\algorithmautorefname}{algorithm}}{\renewcommand{\algorithmautorefname}{algorithm}}% +\newcommand{\algorithmcflinename}{}% +\newcommand{\algocf@typo}{}% +\newcommand{\@algocf@procname}{}\newcommand{\procedureautorefname}{}% +\newcommand{\SetAlgoProcName}[2]{\renewcommand{\@algocf@procname}{#1}\renewcommand{\procedureautorefname}{#2}}% +\newcommand{\@algocf@funcname}{}\newcommand{\functionautorefname}{}% +\newcommand{\SetAlgoFuncName}[2]{\renewcommand{\@algocf@funcname}{#1}\renewcommand{\functionautorefname}{#2}}% +\newcommand{\@algocf@titleofalgoname}{\algorithmcfname}% +\newcommand{\@algocf@algotitleofalgo}{% + \renewcommand{\@algocf@titleofalgoname}{\algorithmcfname}}% +\newcommand{\@algocf@proctitleofalgo}{% + \renewcommand{\@algocf@titleofalgoname}{\algocf@procname}}% +% +\newcommand{\algocf@style}{plain}% +\newcommand{\@ResetCounterIfNeeded}{}% +\newcommand{\@titleprefix}{}% +% +\newcommand{\algocf@numbering}[1]{\newcommand{\algocf@within}{#1}}% +% +\newcommand{\defaultsmacros@algo}{\algocf@defaults@shortend}% +% +\newcommand{\algocf@list}{loa}% +\newcommand{\algocf@float}{algocf}% +% +\newcommand{\algocf@envname}{algorithm}% +\newcommand{\algocf@listofalgorithms}{listofalgorithms}% +% +% +%% redefine chapter so that it adds a vspace in the loa as the original does for lof and lot +\let\algocf@original@chapter=\chapter% +\def\chapter{\expandafter\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% +% +%% if@restonecol is defined in article and book but some other classes don't define it and we need it, so we do +\ifx\if@restonecol\relax\else\newif\if@restonecol\fi% +% +% +%%%%%%%%%%%%%%%%%%%%%% Declaration of Options %%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\RequirePackage{ifthen}% +% +\newboolean{algocf@nokwfunc}\setboolean{algocf@nokwfunc}{false}% +\DeclareOption{nokwfunc}{% + \setboolean{algocf@nokwfunc}{true}% +}% +% +\newboolean{algocf@oldcommands}\setboolean{algocf@oldcommands}{false}% +\DeclareOption{oldcommands}{% + \setboolean{algocf@oldcommands}{true}% +}% +% +\newboolean{algocf@leftlinenumber}\setboolean{algocf@leftlinenumber}{true}% +\newcommand{\setLeftLinesNumbers}{\setboolean{algocf@leftlinenumber}{true}}% +\newcommand{\setRightLinesNumbers}{\setboolean{algocf@leftlinenumber}{false}}% +\DeclareOption{rightnl}{% + \setRightLinesNumbers% +}% +% +\newboolean{algocf@endfloat}\setboolean{algocf@endfloat}{false}% +\DeclareOption{endfloat}{% + \setboolean{algocf@endfloat}{true}% + \newcounter{postalgo}\setcounter{postalgo}{0}% +}% +% +\newboolean{algocf@procnumbered}\setboolean{algocf@procnumbered}{false}% +\DeclareOption{procnumbered}{% + \setboolean{algocf@procnumbered}{true}% +}% +% +\DeclareOption{algo2e}{% + \renewcommand{\algocf@envname}{algorithm2e}% + \renewcommand{\algocf@listofalgorithms}{listofalgorithmes}% +}% +% +\newboolean{algocf@slide}\setboolean{algocf@slide}{false}% +\DeclareOption{slide}{% + \setboolean{algocf@slide}{true}% +}% +% +\DeclareOption{figure}{% +\renewcommand{\algocf@list}{lof}% +\renewcommand{\algocf@float}{figure}% +}% +% +\newboolean{algocf@optonelanguage}\setboolean{algocf@optonelanguage}{false}% +\DeclareOption{onelanguage}{\setboolean{algocf@optonelanguage}{true}}% +% +\newcommand{\algocf@languagechoosen}{english}% +% +\DeclareOption{english}{% +\renewcommand{\listalgorithmcfname}{List of Algorithms}% +\renewcommand{\algorithmcfname}{Algorithm}% +\renewcommand{\algorithmautorefname}{algorithm}% +\renewcommand{\algorithmcflinename}{line}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Procedure}% +\renewcommand{\@algocf@funcname}{Function}% +\renewcommand{\procedureautorefname}{procedure}% +\renewcommand{\functionautorefname}{function}% +\renewcommand{\algocf@languagechoosen}{english}% +}% +% +\DeclareOption{french}{% +\renewcommand{\listalgorithmcfname}{Liste des Algorithmes}% +\renewcommand{\algorithmcfname}{Algorithme}% +\renewcommand{\algorithmautorefname}{algorithme}% +\renewcommand{\algorithmcflinename}{ligne}% +\renewcommand{\algocf@typo}{\ }% +\renewcommand{\@algocf@procname}{Procédure}% +\renewcommand{\@algocf@funcname}{Fonction}% +\renewcommand{\procedureautorefname}{procédure}% +\renewcommand{\functionautorefname}{fonction}% +\renewcommand{\algocf@languagechoosen}{french}% +}% +% +\DeclareOption{czech}{% +\renewcommand{\listalgorithmcfname}{Seznam algoritm\v{u}}% +\renewcommand{\algorithmcfname}{Algoritmus}% +\renewcommand{\algorithmautorefname}{\algorithmcfname}% +\renewcommand{\algorithmcflinename}{Radek}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Procedura}% +\renewcommand{\@algocf@funcname}{Funkce}% +\renewcommand{\procedureautorefname}{\@algocf@procname}% +\renewcommand{\functionautorefname}{\@algocf@funcname}% +\renewcommand{\algocf@languagechoosen}{czech}% +}% +% +\DeclareOption{german}{% +\renewcommand{\listalgorithmcfname}{Liste der Algorithmen}% +\renewcommand{\algorithmcfname}{Algorithmus}% +\renewcommand{\algorithmautorefname}{\algorithmcfname}% +\renewcommand{\algorithmcflinename}{Zeile}% +\renewcommand{\algocf@typo}{\ }% +\renewcommand{\@algocf@procname}{Prozedur}% +\renewcommand{\@algocf@funcname}{Funktion}% +\renewcommand{\procedureautorefname}{\@algocf@procname}% +\renewcommand{\functionautorefname}{\@algocf@funcname}% +\renewcommand{\algocf@languagechoosen}{german}% +}% +% +\DeclareOption{portuguese}{% +\renewcommand{\listalgorithmcfname}{Lista de Algoritmos}% +\renewcommand{\algorithmcfname}{Algoritmo}% +\renewcommand{\algorithmautorefname}{algoritmo}% +\renewcommand{\algorithmcflinename}{linha}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Procedimento}% +\renewcommand{\@algocf@funcname}{Fun\c{c}\~{a}o}% +\renewcommand{\procedureautorefname}{procedimento}% +\renewcommand{\functionautorefname}{fun\c{c}\~{a}o}% +\renewcommand{\algocf@languagechoosen}{portuguese}% +}% +% +\DeclareOption{italiano}{% +\renewcommand{\listalgorithmcfname}{Elenco degli algoritmi}% +\renewcommand{\algorithmcfname}{Algoritmo}% +\renewcommand{\algorithmautorefname}{algoritmo}% +\renewcommand{\algorithmcflinename}{riga}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Procedura}% +\renewcommand{\@algocf@funcname}{Funzione}% +\renewcommand{\procedureautorefname}{procedura}% +\renewcommand{\functionautorefname}{funzione}% +\renewcommand{\algocf@languagechoosen}{italiano}% +}% +\DeclareOption{slovak}{% +\renewcommand{\listalgorithmcfname}{Zoznam algoritmov}% +\renewcommand{\algorithmcfname}{Algoritmus}% +\renewcommand{\algorithmautorefname}{\algorithmcfname}% +\renewcommand{\algorithmcflinename}{Radek}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Proced\'{u}ra}% +\renewcommand{\@algocf@funcname}{Funkcia}% +\renewcommand{\procedureautorefname}{\@algocf@procname}% +\renewcommand{\functionautorefname}{\@algocf@funcname}% +\renewcommand{\algocf@languagechoosen}{slovak}% +}% +% +% OPTIONs plain, boxed, ruled, algoruled & boxruled +% +\newcommand{\algocf@style@plain}{\renewcommand{\algocf@style}{plain}}% +\newcommand{\algocf@style@boxed}{\renewcommand{\algocf@style}{boxed}}% +\newcommand{\algocf@style@ruled}{\renewcommand{\algocf@style}{ruled}}% +\newcommand{\algocf@style@algoruled}{\renewcommand{\algocf@style}{algoruled}}% +\newcommand{\algocf@style@boxruled}{\renewcommand{\algocf@style}{boxruled}}% +\newcommand{\algocf@style@tworuled}{\renewcommand{\algocf@style}{tworuled}}% +\newcommand{\RestyleAlgo}[1]{\csname algocf@style@#1\endcsname}% +\DeclareOption{plain}{\algocf@style@plain}% +\DeclareOption{boxed}{\algocf@style@boxed}% +\DeclareOption{ruled}{\algocf@style@ruled}% +\DeclareOption{algoruled}{\algocf@style@algoruled}% +\DeclareOption{boxruled}{\algocf@style@boxruled}% +\DeclareOption{tworuled}{\algocf@style@tworuled}% +% +% OPTIONs algopart,algochapter & algosection +% +\DeclareOption{algopart}{\algocf@numbering{part}}% %algo part numbered +\DeclareOption{algochapter}{\algocf@numbering{chapter}}% %algo chapter numbered +\DeclareOption{algosection}{\algocf@numbering{section}}% %algo section numbered +% +% OPTIONs resetcount & noresetcount +% +\DeclareOption{resetcount}{\renewcommand{\@ResetCounterIfNeeded}{\setcounter{AlgoLine}{0}}}% +\DeclareOption{noresetcount}{\renewcommand{\@ResetCounterIfNeeded}{}}% +% +% OPTION linesnumbered +% +\newboolean{algocf@linesnumbered}\setboolean{algocf@linesnumbered}{false}% +\newcommand{\algocf@linesnumbered}{\relax}% +\DeclareOption{linesnumbered}{% + \setboolean{algocf@linesnumbered}{true}% + \renewcommand{\algocf@linesnumbered}{\everypar={\nl}}% +}% +% +% OPTION linesnumberedhidden +% +\DeclareOption{linesnumberedhidden}{% + \setboolean{algocf@linesnumbered}{true}% + \renewcommand{\algocf@linesnumbered}{\everypar{\stepcounter{AlgoLine}}}% +}% +% +% OPTION commentsnumbered inoutnumbered +% +\newboolean{algocf@commentsnumbered}\setboolean{algocf@commentsnumbered}{false}% +\DeclareOption{commentsnumbered}{\setboolean{algocf@commentsnumbered}{true}}% +\newboolean{algocf@inoutnumbered}\setboolean{algocf@inoutnumbered}{false}% +\DeclareOption{inoutnumbered}{\setboolean{algocf@inoutnumbered}{true}}% +% +% OPTIONs titlenumbered & titlenotnumbered +% +\DeclareOption{titlenumbered}{% + \renewcommand{\@titleprefix}{% + \refstepcounter{\algocf@float}% + \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\ \expandafter\csname the\algocf@float\endcsname\algocf@typo: }% + }% +}% +% +\DeclareOption{titlenotnumbered}{\renewcommand{\@titleprefix}{% + \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\algocf@typo: }}% +}% +% +% OPTIONs algonl +% line numbered with the counter of the algorithm +% +\DeclareOption{algonl}{\renewcommand{\theAlgoLine}{\expandafter\csname the\algocf@float\endcsname.\arabic{AlgoLine}}}% +% +% OPTIONs lined, vlined & noline +% +\DeclareOption{lined}{\AtBeginDocument{\SetAlgoLined}}% \SetAlgoLined +\DeclareOption{vlined}{\AtBeginDocument{\SetAlgoVlined}}% \SetAlgoVlined +\DeclareOption{noline}{\AtBeginDocument{\SetAlgoNoLine}}%\SetAlgoNoLine (default) +% +% OPTIONs longend, shotend & noend +% +\DeclareOption{longend}{\AtBeginDocument{\SetAlgoLongEnd}}% \SetAlgoLongEnd +\DeclareOption{shortend}{\AtBeginDocument{\SetAlgoShortEnd}}%\SetAlgoShortEnd +\DeclareOption{noend}{\AtBeginDocument{\SetAlgoNoEnd}}% \SetAlgoNoEnd +% +% OPTION dotoc +% +\newboolean{algocf@dotocloa}\setboolean{algocf@dotocloa}{false}% +\DeclareOption{dotocloa}{% + \setboolean{algocf@dotocloa}{true}% +} +% +% OPTION comments +% +\newboolean{algocf@optfillcomment}\setboolean{algocf@optfillcomment}{true}% +\DeclareOption{nofillcomment}{% + \setboolean{algocf@optfillcomment}{false}% +}% +\DeclareOption{fillcomment}{% + \setboolean{algocf@optfillcomment}{true}% +}% +% +% OPTION sidecommments +% +\newboolean{algocf@scleft}\setboolean{algocf@scleft}{false}% +\DeclareOption{scleft}{% + \setboolean{algocf@scleft}{true}% +}% +\DeclareOption{sright}{% default + \setboolean{algocf@scleft}{false}% +}% +% +% OPTION norelsize +% +\newboolean{algocf@norelsize}\setboolean{algocf@norelsize}{false}% +\DeclareOption{norelsize}{% + \setboolean{algocf@norelsize}{true}% +}% +% +% +%%%%%%%%%%%%%%%%%%%%%%% Execution of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\ExecuteOptions{english,plain,resetcount,titlenotnumbered,lined,shortend}% +% +\ProcessOptions% +% +\@algocf@algotitleofalgo% fix name for \TitleOfAlgo to \algorithmcfname by default +% +%%%%%%%%%%%%%%%%%%%%%%%%%% Package Loading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +\RequirePackage{xspace}% +% +\ifthenelse{\boolean{algocf@endfloat}}{% + \RequirePackage{endfloat}% +}{\relax}% +% +\ifthenelse{\boolean{algocf@norelsize}}{% + \newcommand{\relsize}[1]{\scriptsize}% +}{% + \RequirePackage{relsize}% +}% +% +\ifthenelse{\boolean{algocf@slide}}{\RequirePackage{color}}{}% +% + +\AtEndOfPackage{% + \ifthenelse{\boolean{algocf@dotocloa}}{% + \renewcommand{\listofalgorithmes}{\tocfile{\listalgorithmcfname}{loa}}% + }{\relax}% +}% +% +% if loa in toc required, load tocbibind package if not already done. +\ifthenelse{\boolean{algocf@dotocloa}}{% + \ifx\@tocextra\undefined% + \RequirePackage{tocbibind}% + \fi% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Main Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\newcommand{\algocf@name}{algorithm2e}% +\newcommand{\algocf@date}{december 14 2009}% +\newcommand{\algocf@version}{Release 4.01}% +\newcommand{\algocf@id}{\algocf@version\space -- \algocf@date\space --}% +\typeout{********************************************************^^JPackage `\algocf@name'\space\algocf@id^^J% + - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% + - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% + subscribe by emailing sympa@lirmm.fr with 'subscribe '^^J% + - Author: Christophe Fiorio (fiorio@lirmm.fr)^^J********************************************************}% +%% +%% +%% +%% +%% +%% +%%%% hyperref compatibility tricks: Hyperref package defines H counters from + % standard counters (i.e \theHpage from \thepage) and check some particular + % counters of some packages, unfortunately it doesn't do the same for + % algorithm2e package but act as Hcounter was defined. To avoid errors we + % defined \theHalgocf ourself +%%%% +% +\@ifundefined{theHalgocf}{\def\theHalgocf{\thealgocf}}{}% +\@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\theAlgoLine}}{}% +\@ifundefined{theHalgocfproc}{\def\theHalgocfproc{0}}{}% +\@ifundefined{theHalgocffunc}{\def\theHalgocffunc{0}}{}% +\@ifundefined{toclevel@algocf}{\def\toclevel@algocf{0}}{}% +% +% autoref from hyperref needs an autorefname, so we give it. +\def\AlgoLineautorefname{\algorithmcflinename}% +\def\algocfautorefname{\algorithmautorefname}% +\def\algocfprocautorefname{\procedureautorefname}% +\def\algocffuncautorefname{\functionautorefname}% +%% +%% +%% +\newcommand{\@defaultskiptotal}{0.5em}% +\newskip\skiptotal\skiptotal=0.5em% +\newskip\skiplinenumber\skiplinenumber=\hsize\advance\skiplinenumber by-\skiptotal% +\newskip\skiprule% +\newskip\skiphlne% +\newskip\skiptext% +\newskip\skiplength% +\newskip\algomargin% +\newskip\skipalgocfslide\skipalgocfslide=1em% +\newdimen\algowidth% +\newdimen\inoutsize% +\newdimen\inoutline% +\newdimen\interspacetitleruled\setlength{\interspacetitleruled}{2pt}% +\newdimen\interspacealgoruled\setlength{\interspacealgoruled}{2pt}% +\newdimen\interspacetitleboxruled\setlength{\interspacetitleboxruled}{2\lineskip}% +% +\newcommand{\@algoskip}{\smallskip}% +\newcommand{\SetAlgoSkip}[1]{\renewcommand{\@algoskip}{\csname#1\endcsname}}% +\newcommand{\@algoinsideskip}{\relax}% +\newcommand{\SetAlgoInsideSkip}[1]{\renewcommand{\@algoinsideskip}{\csname#1\endcsname}}% +% +\newsavebox{\algocf@inoutbox}% +\newsavebox{\algocf@inputbox}% +%% +%% +\newcommand{\arg@e}{}% +\newcommand{\arg@space}{\ }% +\newcommand{\BlankLine}{\vskip 1ex}% +%% +\newcommand{\vespace}{1ex}% +\newcommand{\SetInd}[2]{% +\skiprule=#1% +\skiptext=#2% +\skiplength=\skiptext\advance\skiplength by \skiprule\advance\skiplength by 0.4pt}% +\SetInd{0.5em}{1em} +\algomargin=\leftskip\advance\algomargin by \parindent% +\newcommand{\IncMargin}[1]{\advance\algomargin by #1}% +\newcommand{\DecMargin}[1]{\advance\algomargin by -#1}% +\newcommand{\SetNlSkip}[1]{% + \renewcommand{\@defaultskiptotal}{#1}% + \setlength{\skiptotal}{#1}}% +%% +\newskip\AlCapSkip\AlCapSkip=0ex% +\newskip\AlCapHSkip\AlCapSkip=0ex% +\newcommand{\SetAlCapSkip}[1]{\setlength{\AlCapSkip}{#1}}% +\newcommand{\SetAlCapHSkip}[1]{\setlength{\AlCapHSkip}{#1}}% +\SetAlCapHSkip{.5\algomargin}% +%% +%% +\newcommand{\Indentp}[1]{\advance\leftskip by #1}% +\newcommand{\Indp}{\advance\leftskip by 1em}% +\newcommand{\Indpp}{\advance\leftskip by 0.5em}% +\newcommand{\Indm}{\advance\leftskip by -1em}% +\newcommand{\Indmm}{\advance\leftskip by -0.5em}% +%% +%% +%% Line Numbering +%% +%% +% number line style +\newcommand{\algocf@nlrelsize}{-2}\newcommand{\SetAlgoNlRelativeSize}[1]{\renewcommand{\algocf@nlrelsize}{#1}}% +\newcommand{\NlSty}[1]{\textnormal{\textbf{\relsize{\algocf@nlrelsize}#1}}}% default definition +\newcommand{\SetNlSty}[3]{\renewcommand{\NlSty}[1]{\textnormal{\csname#1\endcsname{\relsize{\algocf@nlrelsize}#2##1#3}}}}% +% +% nl definitions +% +\newsavebox{\algocf@nlbox}% +\newcommand{\algocf@printnl}[1]{% + \ifthenelse{\boolean{algocf@leftlinenumber}}{% + \skiplinenumber=\skiptotal\advance\skiplinenumber by\leftskip% + \strut\raisebox{0pt}{\llap{\NlSty{#1}\kern\skiplinenumber}}\ignorespaces% + }{% + \sbox\algocf@nlbox{\NlSty{#1}}% + \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip\advance\skiplinenumber by-\skiptext% + \advance\skiplinenumber by\algomargin\advance\skiplinenumber by.3em\advance\skiplinenumber by-\wd\algocf@nlbox% + \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\NlSty{#1\ignorespaces}}}\ignorespaces% + }% +}% +\newcommand{\algocf@nl@sethref}[1]{% + \renewcommand{\theHAlgoLine}{\thealgocfproc.#1}% + \hyper@refstepcounter{AlgoLine}\gdef\@currentlabel{#1}% +}% +\newcommand{\nl}{% + \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter + \refstepcounter{AlgoLine}% + }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href + \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% + }% now we can do the line numbering + \algocf@printnl{\theAlgoLine}% +}% +% +\newcommand{\nllabel}[1]{\label{#1}}% +% +\newcommand{\enl}{% + \@ifundefined{hyper@refstepcounte}{% if not hyperref then do a simple refstepcounter + \refstepcounter{AlgoLine}% + }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href + \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% + }% now we can do the line numbering + \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip% + \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\strut\NlSty{\theAlgoLine}}}\ignorespaces% +} +%% nlset +\newcommand{\nlset}[1]{% + \@ifundefined{hyper@refstepcounter}{\protected@edef\@currentlabel{#1}}{\algocf@nl@sethref{#1}}\algocf@printnl{#1}% +}% +% +%% lnl definitions +\newcommand{\lnl}[1]{\nl\label{#1}}% +% +%% lnlset +\newcommand{\lnlset}[2]{\nlset{#2}\label{#1}}% +% +% set char put at end of each line +% +\newcommand{\algocf@endline}{\string;} +\newcommand{\SetEndCharOfAlgoLine}[1]{\renewcommand{\algocf@endline}{#1}} +% +% end of line definition +% +\newcommand{\@endalgocfline}{\algocf@endline}% default definition: printsemicolon +\newcommand{\DontPrintSemicolon}{\renewcommand{\@endalgocfline}{\relax}}% +\newcommand{\PrintSemicolon}{\renewcommand{\@endalgocfline}{\algocf@endline}}% +\newcommand{\@endalgoln}{\@endalgocfline\hfill\strut\par}% +% +% line numbering +% +\newcommand{\LinesNumbered}{\setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\everypar={\nl}}}% +\newcommand{\LinesNotNumbered}{% + \setboolean{algocf@linesnumbered}{false}% + \renewcommand{\algocf@linesnumbered}{\relax}% +}% +% +\newcommand{\LinesNumberedHidden}{% + \setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\everypar{\stepcounter{AlgoLine}}}}% +\newcommand{\ShowLn}{\nlset{\theAlgoLine}\ignorespaces}% display the line number on this line (without labelling) +\newcommand{\ShowLnLabel}[1]{\lnlset{#1}{\theAlgoLine}\ignorespaces}% display the line number and label this line +% +%% +% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Styling text commands +% +\newcommand{\AlFnt}{\relax}% default definition +\newcommand{\SetAlFnt}[1]{\renewcommand{\AlFnt}{#1}}% +\newcommand{\AlTitleFnt}{\relax}% default definition +\newcommand{\SetAlTitleFnt}[1]{\renewcommand{\AlTitleFnt}{#1}}% +% +\newcommand{\AlCapFnt}{\relax}% default definition +\newcommand{\SetAlCapFnt}[1]{\renewcommand{\AlCapFnt}{#1}}% +\newcommand{\AlCapNameFnt}{\relax}% default definition +\newcommand{\SetAlCapNameFnt}[1]{\renewcommand{\AlCapNameFnt}{#1}}% +% +\newcommand{\ProcFnt}{\relax}% default definition +\newcommand{\SetProcFnt}[1]{\renewcommand{\ProcFnt}{#1}}% +\newcommand{\ProcNameFnt}{\relax}% default definition +\newcommand{\SetProcNameFnt}[1]{\renewcommand{\ProcNameFnt}{#1}}% +\newcommand{\ProcArgFnt}{\relax}% default definition +\newcommand{\SetProcArgFnt}[1]{\renewcommand{\ProcArgFnt}{#1}}% +% +\newcommand{\AlTitleSty}[1]{\textbf{#1}\unskip}% default definition +\newcommand{\SetAlTitleSty}[1]{\renewcommand{\AlTitleSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\AlCapSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition +\newcommand{\SetAlCapSty}[1]{\renewcommand{\AlCapSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\AlCapNameSty}[1]{\textnormal{#1}\unskip}% default definition +\newcommand{\SetAlCapNameSty}[1]{\renewcommand{\AlCapNameSty}[1]{\textnormal{\csname #1\endcsname{##1}}\unskip}}% +% +\newcommand{\ProcSty}[1]{\AlCapSty{#1}}% +\newcommand{\SetProcSty}[1]{\renewcommand{\ProcSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\ProcNameSty}[1]{\AlCapNameSty{#1}}% +\newcommand{\SetProcNameSty}[1]{\renewcommand{\ProcNameSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\ProcArgSty}[1]{\AlCapNameSty{#1}}% +\newcommand{\SetProcArgSty}[1]{\renewcommand{\ProcArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +% +\newcommand{\KwSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition +\newcommand{\SetKwSty}[1]{\renewcommand{\KwSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\ArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetArgSty{emph} +\newcommand{\SetArgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\FuncSty}[1]{\textnormal{\texttt{#1}}\unskip}%\SetFuncSty{texttt} +\newcommand{\SetFuncSty}[1]{\renewcommand{\FuncSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\DataSty}[1]{\textnormal{\textsf{#1}}\unskip}%%\SetDataSty{textsf} +\newcommand{\SetDataSty}[1]{\renewcommand{\DataSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\CommentSty}[1]{\textnormal{\texttt{#1}}\unskip}%%\SetDataSty{texttt} +\newcommand{\SetCommentSty}[1]{\renewcommand{\CommentSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\TitleSty}[1]{#1\unskip}%\SetTitleSty{}{} +\newcommand{\SetTitleSty}[2]{\renewcommand{\TitleSty}[1]{% +\csname#1\endcsname{\csname#2\endcsname##1}}\unskip}% +% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Block basic commands +% +\newcommand{\algocf@push}[1]{\advance\skiptotal by #1\moveright #1}% +\newcommand{\algocf@pop}[1]{\advance\skiptotal by -#1}% +\newcommand{\algocf@addskiptotal}{\advance\skiptotal by 0.4pt\advance\hsize by -0.4pt}% 0.4 pt=width of \vrule +\newcommand{\algocf@subskiptotal}{\advance\skiptotal by -0.4pt\advance\hsize by 0.4pt}% 0.4 pt=width of \vrule +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% group of instructions definition +% +\skiphlne=.8ex% +\newcommand{\SetVlineSkip}[1]{\skiphlne=#1}% +% +%% block with a vertical line end by a little horizontal line +\newcommand{\algocf@Vline}[1]{% no vskip in between boxes but a strut to separate them, + \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it + \algocf@push{\skiprule}% move to the right before the vertical rule + \hbox{\vrule% + \vtop{\algocf@push{\skiptext}%move the right after the rule + \vtop{\algocf@addskiptotal\advance\hsize by -\skiplength #1}\Hlne}}\vskip\skiphlne% inside the block + \algocf@pop{\skiprule}%\algocf@subskiptotal% restore indentation + \nointerlineskip}% no vskip after +% +%% block with a vertical line +\newcommand{\algocf@Vsline}[1]{% no vskip in between boxes but a strut to separate them, + \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it + \algocf@push{\skiprule}% move to the right before the vertical rule + \hbox{\vrule% the vertical rule + \vtop{\algocf@push{\skiptext}%move the right after the rule + \vtop{\algocf@addskiptotal\advance\hsize by -\skiplength #1}}}% inside the block + \algocf@pop{\skiprule}}% restore indentation +% +\newcommand{\algocf@Hlne}{\hrule height 0.4pt depth 0pt width .5em}% +% +%% block without line +\newcommand{\algocf@Noline}[1]{% no vskip in between boxes but a strut to separate them, + \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it + \algocf@push{\skiprule}% + \hbox{% + \vtop{\algocf@push{\skiptext}% + \vtop{\advance\hsize by -\skiplength #1}}}% inside the block + \algocf@pop{\skiprule}% + % \nointerlineskip% no vskip after +}% +% +%% default=NoLine +% +\newcommand{\algocf@group}[1]{\algocf@Noline{##1}}% group: set of instruction depending from another (ex: then part of the If) +\newcommand{\algocf@@block}[2]{\algocf@Noline{##1}\KwSty{##2}\par}% block: group with a end keyword. +\newcommand{\algocf@block}[2]{\algocf@@block{#1}{#2}}% command that will be used and redefined accordingly to noend option +\newcommand{\algocf@setBlock}{% + \ifthenelse{\boolean{algocf@optnoend}}{% if no end option + \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% block will be a group + }{% else + \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% block stays a block + }% +}% +% +\newcommand{\Hlne}{}% little hrizontal line ending a block in vline mode +% +\newcommand{\@algocf@endoption}[1]{#1}% +\newboolean{algocf@optnoend}\setboolean{algocf@optnoend}{false}% +% +\newcommand{\SetAlgoLongEnd}{%%%%%%%%%%%%%%%%%%%%%%%%% Long End + \setboolean{algocf@optnoend}{false}% + \renewcommand{\@algocf@endoption}[1]{##1}% + \algocf@setBlock}% +% +\newcommand{\SetAlgoShortEnd}{%%%%%%%%%%%%%%%%%%%%%%%% ShortEnd + \setboolean{algocf@optnoend}{false}% + \renewcommand{\@algocf@endoption}[1]{\@firstword##1 \@nil}% + \algocf@setBlock}% +% +\newcommand{\SetAlgoNoEnd}{%%%%%%%%%%%%%%%%%%%%%%%%%%% NoEnd + \setboolean{algocf@optnoend}{true}% + \renewcommand{\@algocf@endoption}[1]{}% + \algocf@setBlock}% +% +\newcommand{\SetAlgoNoLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline +\renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\KwSty{##2}\strut\par}% +\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% +\renewcommand{\Hlne}{}}% +% +\newcommand{\SetAlgoVlined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline +\renewcommand{\algocf@@block}[2]{\algocf@Vline{##1}}% +\renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% +\renewcommand{\Hlne}{\algocf@Hlne}}% +% +\newcommand{\SetAlgoLined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Line +\renewcommand{\algocf@@block}[2]{\strut\algocf@Vsline{##1}\KwSty{##2}\strut\par}% no skip after a block so garantie at least a line +\renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% +\renewcommand{\Hlne}{}}% +% +\newcommand{\SetNothing}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline +\renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\par}% +%\long +\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% +\renewcommand{\Hlne}{}}% +% +%% +%% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ``Input :'''s like command +% +%%% +% text staying at the right of the longer keyword of KwInOut commands +% (text of KwInOut commands are all vertically aligned) +% +\newcommand{\algocf@newinout}{\par\parindent=\wd\algocf@inoutbox}% to put right indentation after a \\ in the KwInOut +\newcommand{\SetKwInOut}[2]{% + \sbox\algocf@inoutbox{\KwSty{#2}\algocf@typo:}% + \expandafter\ifx\csname InOutSizeDefined\endcsname\relax% if first time used + \newcommand\InOutSizeDefined{}\setlength{\inoutsize}{\wd\algocf@inoutbox}% + \else% else keep the larger dimension + \ifdim\wd\algocf@inoutbox>\inoutsize\setlength{\inoutsize}{\wd\algocf@inoutbox}\fi% + \fi% the dimension of the box is now defined. + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% + \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\everypar={\relax}}% + {\let\\\algocf@newinout\hangindent=\wd\algocf@inoutbox\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2}\algocf@typo\hfill:}~##1\par}% + \algocf@linesnumbered% reset the numbering of the lines + }}% +% +%% allow to ajust the skip size of InOut +%% +\newcommand{\ResetInOut}[1]{% + \sbox\algocf@inoutbox{\hbox{\KwSty{#1}\algocf@typo:\ }}% + \setlength{\inoutsize}{\wd\algocf@inoutbox}% + }% +% +% +%%% +% text staying at the right of the keyword. +% +\newcommand{\algocf@newinput}{\par\parindent=\wd\algocf@inputbox}% to put right indentation after a \\ in the KwInput +\newcommand{\SetKwInput}[2]{% + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% + \sbox\algocf@inputbox{\hbox{\KwSty{#2}\algocf@typo: }}% + \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\everypar={\relax}}% + {\let\\\algocf@newinput\hangindent=\wd\algocf@inputbox\hangafter=1\unhbox\algocf@inputbox##1\par}% + \algocf@linesnumbered% reset the numbering of the lines + }}% +\newcommand{\SetKwData}[2]{% + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\DataSty{#2(}\ArgSty{##1}\DataSty{)}}% + \expandafter\algocf@mkcmd\csname#1\endcsname{% + \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% + }% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% tallent: +% +% Add following macros: +% \SetKwHangingKw: [kw] ------------ <= hanging determined by [kw] +% ------------ +% Should act like a combination of \SetKwInput and \SetKw. +% Based on \SetKwInput: +% - remove ':' at end of keyword +% - do not reset numbering +% - use separate savebox +\newsavebox{\algocf@hangingbox} +\newcommand{\algocf@newhanging}{\par\parindent=\wd\algocf@hangingbox}% to put right indentation after a \\ in the KwInput +\newcommand{\SetKwHangingKw}[2]{% + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% + \sbox\algocf@hangingbox{\hbox{\KwSty{#2}\algocf@typo\ }}% + {\let\\\algocf@newhanging\hangindent=\wd\algocf@hangingbox\hangafter=1\unhbox\algocf@hangingbox##1\;}% + }% +}% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Comments macros +% +%%%% +% comment in the text, first argument is the name of the macro, second is +% the text put before the comment, third is the text put at the end of the +% comment. +% +% first side comment justification +\newcommand{\SetSideCommentLeft}{\setboolean{algocf@scleft}{true}}% +\newcommand{\SetSideCommentRight}{\setboolean{algocf@scleft}{false}}% +\newcommand{\SetNoFillComment}{\setboolean{algocf@optfillcomment}{false}}% +\newcommand{\SetFillComment}{\setboolean{algocf@optfillcomment}{true}}% +% +% next comment and side comment +% +\newcommand{\algocf@endmarkcomment}{\relax}% +\newcommand{\algocf@fillcomment}{% + \ifthenelse{\boolean{algocf@optfillcomment}}{\hfill}{\relax}}% +% +\newcommand{\algocf@startcomment}{% + \hangindent=\wd\algocf@inputbox\hangafter=1\usebox\algocf@inputbox}% +\newcommand{\algocf@endcomment}{\algocf@fillcomment\algocf@endmarkcomment\ignorespaces\par}% +\newcommand{\algocf@endstartcomment}{\algocf@endcomment\algocf@startcomment\ignorespaces}% +% +\newboolean{algocf@sidecomment}% +\newboolean{algocf@altsidecomment}\setboolean{algocf@altsidecomment}{false}% +\newcommand{\algocf@scpar}{\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\par}}% +\newcommand{\algocf@sclfill}{\ifthenelse{\boolean{algocf@scleft}}{\algocf@fillcomment}{\relax}}% +\newcommand{\algocf@scrfill}{\ifthenelse{\boolean{algocf@scleft}}{\relax}{\hfill}}% +\newcommand{\algocf@startsidecomment}{\usebox\algocf@inputbox}% +\newcommand{\algocf@endsidecomment}{\algocf@endmarkcomment\algocf@scpar}% +\newcommand{\algocf@endstartsidecomment}{% + \algocf@sclfill\algocf@endsidecomment% + \algocf@scrfill\algocf@startsidecomment\ignorespaces}% +% +\newcommand{\SetKwComment}[3]{% + % newcommand or renewcommand ? + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + %%% comment definition + \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% + \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% + \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\everypar={\relax}}% + {\renewcommand{\algocf@endmarkcomment}{#3}% + \let\\\algocf@endstartcomment% + \algocf@startcomment\CommentSty{% + \strut\ignorespaces##1\strut\algocf@fillcomment#3}\par}% + \algocf@linesnumbered% reset the numbering of the lines + }% + %%% side comment definitions + % option or not? + \expandafter\algocf@mkcmd\csname algocf@#1@star\endcsname{% + \@ifnextchar [{\csname algocf@#1@staropt\endcsname}{\csname algocf@#1@sidecomment\endcsname}% + }% + % manage option + \expandafter\def\csname algocf@#1@staropt\endcsname[##1]##2{% + \ifthenelse{\boolean{algocf@scleft}}{\setboolean{algocf@sidecomment}{true}}{\setboolean{algocf@sidecomment}{false}}% + \ifx##1h\setboolean{algocf@altsidecomment}{true}\SetSideCommentLeft\fi% + \ifx##1f\setboolean{algocf@altsidecomment}{true}\SetSideCommentRight\fi% + \ifx##1l\setboolean{algocf@altsidecomment}{false}\SetSideCommentLeft\fi% + \ifx##1r\setboolean{algocf@altsidecomment}{false}\SetSideCommentRight\fi% + \csname algocf@#1@sidecomment\endcsname{##2}% call sidecomment + \ifthenelse{\boolean{algocf@sidecomment}}{\setboolean{algocf@scleft}{true}}{\setboolean{algocf@scleft}{false}}% + \setboolean{algocf@altsidecomment}{false}% + }% + % side comment + \expandafter\algocf@mkcmd\csname algocf@#1@sidecomment\endcsname[1]{% + \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% + \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\everypar={\relax}}% + {% + \renewcommand{\algocf@endmarkcomment}{#3}% + \let\\\algocf@endstartsidecomment% + % here is the comment + %\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\algocf@endline\ }% + \ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\@endalgocfline\ }% + \algocf@scrfill\algocf@startsidecomment\CommentSty{% + \strut\ignorespaces##1\strut\algocf@sclfill#3}\algocf@scpar% + }% + \algocf@linesnumbered% reset the numbering of the lines + } + \expandafter\algocf@mkcmd\csname#1\endcsname{\@ifstar{\csname algocf@#1@star\endcsname}{\csname algocf@#1\endcsname}}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Kw +% +\newcommand{\SetKw}[2]{% + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\KwSty{#2} \ArgSty{##1}}% + \expandafter\algocf@mkcmd\csname#1\endcsname{% + \@ifnextchar\bgroup{\csname @#1\endcsname}{\KwSty{#2}\xspace}}% + }% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% KwFunction +% +\newcommand{\SetKwFunction}[2]{% +%%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc + \expandafter\gdef\csname @#1\endcsname##1{\FuncSty{#2(}\ArgSty{##1}\FuncSty{)}}% + \expandafter\gdef\csname#1\endcsname{% + \@ifnextchar\bgroup{\csname @#1\endcsname}{\FuncSty{#2}\xspace}}% +}% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% KwTab +% +\newcommand{\SetKwArray}[2]{% +%%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc + \expandafter\gdef\csname @#1\endcsname##1{\DataSty{#2[}\ArgSty{##1}\DataSty{]}}% + \expandafter\gdef\csname#1\endcsname{% + \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% KwBlock +% +\newcommand{\SetKwBlock}[3]{% +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{%Begin + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2{% \Begin(){} + \KwSty{#2} ##1\algocf@block{##2}{\@algocf@endoption{#3}}% + \@ifnextchar({\csname algocf@#1end\endcsname}{\par}}% +% without side text at the beginning +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% \Begin{} + \KwSty{#2}\algocf@block{##1}{\@algocf@endoption{#3}}\@ifnextchar({\csname algocf@#1end\endcsname}{\par}}% +% side text at the end +\expandafter\def\csname algocf@#1end\endcsname(##1){% \Begin{} + \ ##1\par}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% For Switch +% +\newcommand{\SetKwSwitch}[8]{% #1=\Switch #2=\Case #3=\Other #4=swicth #5=case #6=do #7=otherwise #8=endsw +%%%% Switch +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{%Switch + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \Switch(){}{} + \KwSty{#4} \ArgSty{##2} \KwSty{#5} ##1\algocf@block{##3}{\@algocf@endoption{#8}}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Switch{}{} + \KwSty{#4} \ArgSty{##1} \KwSty{#5}\algocf@block{##2}{\@algocf@endoption{#8}}}% +% side text at the end +\expandafter\def\csname algocf@#1end\endcsname(##1){% \Switch{}{}() +}% +% +%%%% Case +\@ifundefined{algocf@#2}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#2\endcsname{%Case + \@ifnextchar({\csname algocf@#2opt\endcsname}{\csname algocf@#2\endcsname}}% +\expandafter\def\csname u#2\endcsname{%uCase + \@ifnextchar({\csname algocf@u#2opt\endcsname}{\csname algocf@u#2\endcsname}}% +\expandafter\def\csname l#2\endcsname{%lCase + \@ifnextchar({\csname algocf@l#2opt\endcsname}{\csname algocf@l#2\endcsname}}% +% with side text +\expandafter\def\csname algocf@#2opt\endcsname(##1)##2##3{% \Case(){}{} + \KwSty{#6} \ArgSty{##2} ##1\algocf@block{##3}{\@algocf@endoption{#8}}}% +\expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uCase(){}{} + \KwSty{#6} \ArgSty{##2} ##1\algocf@group{##3}}% +\expandafter\def\csname algocf@l#2opt\endcsname(##1)##2##3{% \lCase(){}{} + \KwSty{#6} \ArgSty{##2} ##3\algocf@endline\ ##1\par}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#2\endcsname[2]{% \Case{}{} + \KwSty{#6} \ArgSty{##1}\algocf@block{##2}{\@algocf@endoption{#8}}}% +\expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uCase{}{} + \KwSty{#6} \ArgSty{##1}\algocf@group{##2}}% +\expandafter\algocf@mkcmd\csname algocf@l#2\endcsname[2]{% \lCase{}{} + \KwSty{#6} \ArgSty{##1} ##2}% +%%%% Other +\@ifundefined{algocf@#3}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#3\endcsname{%Other + \@ifnextchar({\csname algocf@#3opt\endcsname}{\csname algocf@#3\endcsname}}% +\expandafter\def\csname l#3\endcsname{%Other + \@ifnextchar({\csname algocf@l#3opt\endcsname}{\csname algocf@l#3\endcsname}}% +% with side text +\expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \Other(){}{} + \KwSty{#7} ##1\algocf@block{##2}{\@algocf@endoption{#8}}}% +\expandafter\def\csname algocf@l#3opt\endcsname(##1)##2{% \Other(){}{} + \KwSty{#7} ##2\algocf@endline\ ##1\par}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#3\endcsname[1]{% default + \KwSty{#7}\algocf@block{##1}{\@algocf@endoption{#8}}}% +\expandafter\algocf@mkcmd\csname algocf@l#3\endcsname[1]{% ldefault + \KwSty{#7} ##1}% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% If macros +% +\newcommand{\SetKwIF}[8]{% #1=\If #2=\ElseIf #3=\Else #4=if #5=then #6=elseif si #7=else #8=endif +% +% common text +\@ifundefined{#1@ifthen}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +\expandafter\algocf@mkcmd\csname #1@ifthen\endcsname[1]{% + \KwSty{#4} \ArgSty{##1} \KwSty{#5}}% +\expandafter\algocf@mkcmd\csname #1@endif\endcsname[1]{\algocf@block{##1}{\@algocf@endoption{#8}}}% +\expandafter\algocf@mkcmd\csname #1@noend\endcsname[1]{\algocf@group{##1}}% +\expandafter\algocf@mkcmd\csname #1@else\endcsname[1]{\algocf@group{##1}\KwSty{#7}}% +\@ifundefined{#2@elseif}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +\expandafter\algocf@mkcmd\csname #2@elseif\endcsname[1]{% + \KwSty{#6} \ArgSty{##1} \KwSty{#5}}% +\@ifundefined{#3@else}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +\expandafter\algocf@mkcmd\csname #3@else\endcsname{\KwSty{#7}}% +%%%% If then { } endif +% +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{% + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \If(){}{} + \csname #1@ifthen\endcsname{##2} ##1\csname #1@endif\endcsname{##3}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \If{}{} + \csname #1@ifthen\endcsname{##1}\csname #1@endif\endcsname{##2}}% +% +%%%% If then {} else {} endif +% +% side text or not? +\expandafter\def\csname e#1\endcsname{% + \@ifnextchar({\csname algocf@e#1thenopt\endcsname}{\csname algocf@e#1then\endcsname}}% +% with side text after if +\expandafter\def\csname algocf@e#1thenopt\endcsname(##1)##2##3{% \eIf() + \csname #1@ifthen\endcsname{##2} ##1\csname #1@else\endcsname{##3}% + \csname algocf@e#1thenelse\endcsname}% +% without side text after if +\expandafter\def\csname algocf@e#1then\endcsname##1##2{% \eIf() + \csname #1@ifthen\endcsname{##1}\csname #1@else\endcsname{##2}% + \csname algocf@e#1thenelse\endcsname}% +% side text after else or not ? +\expandafter\def\csname algocf@e#1thenelse\endcsname{% + \@ifnextchar({\csname algocf@e#1elseopt\endcsname}{\csname algocf@e#1else\endcsname}}% +% else with a side text +\expandafter\def\csname algocf@e#1elseopt\endcsname(##1)##2{% + ##1\csname #1@endif\endcsname{##2}}% +% else without side text +\expandafter\algocf@mkcmd\csname algocf@e#1else\endcsname[1]{% + \csname #1@endif\endcsname{##1}}% +% +%%%% If then +% +% side text or not? +\expandafter\def\csname l#1\endcsname{% lif + \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% +\expandafter\def\csname u#1\endcsname{% uif + \@ifnextchar({\csname algocf@u#1opt\endcsname}{\csname algocf@u#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lIf(){}{} + \csname #1@ifthen\endcsname{##2} ##3\algocf@endline\ ##1\par}% +\expandafter\def\csname algocf@u#1opt\endcsname(##1)##2##3{% \uIf(){}{} + \csname #1@ifthen\endcsname{##2} ##1\csname#1@noend\endcsname{##3}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lIf{}{} + \csname #1@ifthen\endcsname{##1} ##2}% +\expandafter\algocf@mkcmd\csname algocf@u#1\endcsname[2]{% \uIf{}{} + \csname #1@ifthen\endcsname{##1}\csname#1@noend\endcsname{##2}}% +% +%%%% ElseIf {} endif +% +\@ifundefined{algocf@#2}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#2\endcsname{% ElseIf + \@ifnextchar({\csname algocf@#2opt\endcsname}{\csname algocf@#2\endcsname}}% +% with side text +\expandafter\def\csname algocf@#2opt\endcsname(##1)##2##3{% \ElseIf(){}{} + \csname #2@elseif\endcsname{##2} ##1\csname #1@endif\endcsname{##3}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#2\endcsname[2]{% \ElseIf{}{} + \csname #2@elseif\endcsname{##1}\csname #1@endif\endcsname{##2}}% +% +%%%% ElseIf +% +% side text or not? +\expandafter\def\csname l#2\endcsname{% lElseIf + \@ifnextchar({\csname algocf@l#2opt\endcsname}{\csname algocf@l#2\endcsname}}% +\expandafter\def\csname u#2\endcsname{% uElseIf + \@ifnextchar({\csname algocf@u#2opt\endcsname}{\csname algocf@u#2\endcsname}}% +% with side text +\expandafter\def\csname algocf@l#2opt\endcsname(##1)##2##3{% \lElseIf(){}{} + \csname #2@elseif\endcsname{##2} ##3\algocf@endline\ ##1\par}% +\expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uElseIf(){}{} + \csname #2@elseif\endcsname{##2} ##1\csname #1@noend\endcsname{##3}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@l#2\endcsname[2]{% \lElseIf{}{} + \csname #2@elseif\endcsname{##1} ##2}% +\expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uElseIf{}{} + \csname #2@elseif\endcsname{##1}\csname #1@noend\endcsname{##2}}% +% +%%%% Else {} endif +% +\@ifundefined{algocf@#3}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#3\endcsname{% Else + \@ifnextchar({\csname algocf@#3opt\endcsname}{\csname algocf@#3\endcsname}}% +% with side text +\expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \Else(){} + \csname #3@else\endcsname\ ##1\csname #1@endif\endcsname{##2}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#3\endcsname[1]{% \Else{} + \csname #3@else\endcsname\csname #1@endif\endcsname{##1}}% +% +%%%% Else +% +% side text or not? +\expandafter\def\csname l#3\endcsname{% lElse + \@ifnextchar({\csname algocf@l#3opt\endcsname}{\csname algocf@l#3\endcsname}}% +\expandafter\def\csname u#3\endcsname{% uElse + \@ifnextchar({\csname algocf@u#3opt\endcsname}{\csname algocf@u#3\endcsname}}% +% with side text +\expandafter\def\csname algocf@l#3opt\endcsname(##1)##2{% \lElse(){} + \csname #3@else\endcsname\ ##2\algocf@endline\ ##1\par}% +\expandafter\def\csname algocf@u#3opt\endcsname(##1)##2{% \uElse(){} + \csname #3@else\endcsname\ ##1\csname #1@noend\endcsname{##2}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@l#3\endcsname[1]{% \lElse{} + \csname #3@else\endcsname\ ##1}% +\expandafter\algocf@mkcmd\csname algocf@u#3\endcsname[1]{% \uElse{} + \csname #3@else\endcsname\csname #1@noend\endcsname{##1}}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% For macros +% +\newcommand{\SetKwFor}[4]{% +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{%For + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +\expandafter\def\csname l#1\endcsname{%For + \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \For(){}{} + \KwSty{#2} \ArgSty{##2} \KwSty{#3} ##1\algocf@block{##3}{\@algocf@endoption{#4}}}% +\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lFor(){}{} + \KwSty{#2} \ArgSty{##2} \KwSty{#3} ##3\algocf@endline\ ##1\par}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \For{}{} + \KwSty{#2} \ArgSty{##1} \KwSty{#3}\algocf@block{##2}{\@algocf@endoption{#4}}}% +\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lFor{}{} + \KwSty{#2} \ArgSty{##1} \KwSty{#3} ##2}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Repeat macros +% +\newcommand{\SetKwRepeat}[3]{% +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{% Repeat + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +\expandafter\def\csname l#1\endcsname{% lRepeat + \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \Repeat(){}{} + \KwSty{#2} ##1\algocf@group{##3}\KwSty{#3} \ArgSty{##2}% + \@ifnextchar({\csname algocf@#1optopt\endcsname}{\@endalgoln}% +}% +\expandafter\def\csname algocf@#1optopt\endcsname(##1){% \Repeat(){}{}() + ##1\@endalgoln}% +\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lRepeat(){}{} + \KwSty{#2} ##3 \KwSty{#3} \ArgSty{##2}\algocf@endline\ ##1\par}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Repeat{}{} + \KwSty{#2}\algocf@group{##2}\KwSty{#3} \ArgSty{##1}% + \@ifnextchar({\csname algocf@#1optopt\endcsname}{\@endalgoln}% +}% +\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lRepeat{}{} + \KwSty{#2} ##2 \KwSty{#3} \ArgSty{##1}}% +}% +% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%% Environments definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%% +%% Caption management +%% +% for the following macros: +% #1 is given by caption and is equal to fnum@algocf +% #2 is the text given in argument by the user in the \caption macro +% +%%%%% text of caption +\newcommand{\algocf@captionlayout}[1]{#1}% +\newcommand{\SetAlgoCaptionLayout}[1]{% + \renewcommand{\algocf@captionlayout}[1]{\csname #1\endcsname{##1}}}% +\newcommand{\algocf@capseparator}{:}% +\newcommand{\SetAlgoCaptionSeparator}[1]{\renewcommand{\algocf@capseparator}{#1}}% +\newcommand{\algocf@captiontext}[2]{% + \algocf@captionlayout{\AlCapSty{\AlCapFnt #1\algocf@typo\algocf@capseparator}\nobreakspace% + \AlCapNameSty{\AlCapNameFnt{}#2}}}% text of caption +% +%%%%% default caption of algorithm: used if no specific style caption is defined +\newcommand{\algocf@makecaption}[2]{% + \addtolength{\hsize}{\algomargin}% + \sbox\@tempboxa{\algocf@captiontext{#1}{#2}}% + \ifdim\wd\@tempboxa >\hsize% % if caption is longer than a line + \hskip .5\algomargin% + \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}% then caption is not centered + \else% + \global\@minipagefalse% + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% else caption is centered + \fi% + \addtolength{\hsize}{-\algomargin}% +}% +% +\newsavebox\algocf@capbox% +\newcommand{\algocf@makecaption@plain}[2]{% + \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}}% +\newcommand{\algocf@makecaption@boxed}[2]{% + \addtolength{\hsize}{-\algomargin}% + \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}% + \addtolength{\hsize}{\algomargin}% + }% +% +\newcommand{\algocf@makecaption@tworuled}[2]{\algocf@makecaption@ruled{#1}{#2}}% +\newcommand{\algocf@makecaption@algoruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% +\newcommand{\algocf@makecaption@boxruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% +\newcommand{\algocf@makecaption@ruled}[2]{% + \global\sbox\algocf@capbox{\hskip\AlCapHSkip% .5\algomargin% + \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}}% then caption is not centered +}% +% +\newlength{\algoheightruledefault}\setlength{\algoheightruledefault}{0.8pt}% +\newlength{\algoheightrule}\setlength{\algoheightrule}{\algoheightruledefault}% +\newlength{\algotitleheightruledefault}\setlength{\algotitleheightruledefault}{0.8pt}% +\newlength{\algotitleheightrule}\setlength{\algotitleheightrule}{\algotitleheightruledefault}% +\newcommand{\algocf@caption@plain}{\vskip\AlCapSkip\box\algocf@capbox}% +\newcommand{\algocf@caption@boxed}{\vskip\AlCapSkip\box\algocf@capbox}% +\newcommand{\algocf@caption@ruled}{\box\algocf@capbox\kern\interspacetitleruled\hrule height\algotitleheightrule depth0pt\kern\interspacealgoruled}% +\newcommand{\algocf@caption@tworuled}{\box\algocf@capbox\kern\interspacetitleruled}% +\newcommand{\algocf@caption@algoruled}{\algocf@caption@ruled}% +\newcommand{\algocf@caption@boxruled}{% + \addtolength{\hsize}{-0.8pt}% + \hbox to\hsize{% + \vrule%\hskip-0.35pt% + \vbox{% + \hrule\vskip\interspacetitleboxruled% + \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip\interspacetitleboxruled% + }% + %\hskip-0.35pt% + \vrule% + }\nointerlineskip% + \addtolength{\hsize}{0.8pt}% +}% +% +% +%%%% set caption for the environment +\newcommand{\algocf@captionref}{% + \renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\algocf@algocfref}}% + \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value + \let\old@thealgocf=\thealgocf\renewcommand{\thealgocf}{{\relsize{\algocf@refrelsize}\algocf@algocfref}}% + \gdef\@currentlabel{\algocf@algocfref}% let the label use the new ref +}% +% +% Unfortunatly, we also need our own caption to set some specific stuff for special references. But after these +% settings, we call the original caption. +% +\long\def\algocf@caption@algo#1[#2]#3{% + \ifthenelse{\equal{\algocf@algocfref}{\relax}}{}{\algocf@captionref}% + \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... + \ifthenelse{\equal{\algocf@algocfref}{\relax}}{\renewcommand{\theHalgocf}{\thealgocf}}{% take algocf as Href + \renewcommand{\theHalgocf}{\algocf@algocfref}}%else if SetAlgoRefName done, take this name as ref. + \hyper@refstepcounter{algocf}%set algocf as category of ref + }% + \algocf@latexcaption{#1}[#2]{#3}% call original caption +}% +% +% beamer define is own caption overrinding latex caption! +% as we need it, we have put here the original definition +% to handle manual ref, unfortunately we have to add one line to handle algocf@algocfref +\long\def\algocf@latexcaption#1[#2]#3{% original definition of caption + \par% + \addcontentsline{\csname ext@#1\endcsname}{#1}% + {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% + \begingroup% + \@parboxrestore% + \if@minipage% + \@setminipage% + \fi% + \normalsize% + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par% + \endgroup% +}% +% +% \ifx\beamer@makecaption\undefined% +% \else% beamer detected +\ifx\@makecaption\undefined% +\newcommand{\@makecaption}[2]{\relax}% +\fi% +%% + +% +% more and more packages redefine \@caption instead of just \@makecaption which makes algorithm2e +% caption not works since based on standard \@caption. So we force the definition of \@caption to be +% the standard one (the one from LaTeX) inside algorithm environment. +% +% unfortunately, makecaption is called with \ignorespace #3 so +% we can't do the @currentlabel definition inside \algocf@captionproctext +\long\def\algocf@caption@proc#1[#2]#3{% + \ifthenelse{\boolean{algocf@nokwfunc}}{\relax}{% + \SetKwFunction{\algocf@captname#3@}{\algocf@captname#3@}% + }% + % we tell hyperref to use algocfproc as category and to take the appropriate ref. + \ifthenelse{\boolean{algocf@func}}{\def\@proc@func{algocffunc}}{\def\@proc@func{algocfproc}}% + \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... + \ifthenelse{\boolean{algocf@procnumbered}}{% + \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%if procnumbered, take \thealgocf as ref + }{% + \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%else take procedure or function name + }% + \hyper@refstepcounter{\@proc@func}% + }% + \ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% + \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value + \gdef\@currentlabel{\algocf@captname#3@}% let the label be the name of the function, not the counter + }% + \ifthenelse{\equal{\algocf@captparam#2@}{\arg@e}}{% if no paramater, we remove the () + \algocf@latexcaption{#1}[\algocf@procname\nobreakspace\algocf@captname#2@]{#3}% + }{% else we give the complete name + \algocf@latexcaption{#1}[\algocf@procname\nobreakspace#2]{#3}% + }% +}% +%% +%%% setcaption +\newcommand{\algocf@setcaption}{% + \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment, caption text must be changed + \let\algocf@oldcaptiontext=\algocf@captiontext% + \renewcommand{\algocf@captiontext}[2]{% + \algocf@captionproctext{##1}{##2}% + }% + }{}% + \let\algocf@savecaption=\@caption% + \ifthenelse{\boolean{algocf@procenvironment}}{\let\@caption=\algocf@caption@proc}{\let\@caption=\algocf@caption@algo}% + \let\algocf@oldmakecaption=\@makecaption% + \renewcommand{\@makecaption}[2]{% + \expandafter\csname algocf@makecaption@\algocf@style\endcsname{##1}{##2}% + }% +}% +% +%%%%% reset caption +% +% since we have force the LaTeX caption for algorithm environment, we must go back to the caption +% used in the text. +\newcommand{\algocf@resetcaption}{% + \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment + \let\thealgocf=\old@thealgocf% restore normal counter printing + \let\algocf@captiontext=\algocf@oldcaptiontext% restore normal caption text + }{}% + \let\@caption=\algocf@savecaption% now restore caption outside algo/proc/func environment + \let\@makecaption=\algocf@oldmakecaption% and restore makecaption outside outside algo/proc/func environment + \algocf@resetfnum% +}% +% +%%%%% nocaptionofalgo and restorecaptionofalgo -- +\newcommand{\NoCaptionOfAlgo}{% + \let\@old@algocf@captiontext=\algocf@captiontext% + \renewcommand{\algocf@captiontext}[2]{\AlCapNameSty{\AlCapNameFnt{}##2}}% +}% +\newcommand{\RestoreCaptionOfAlgo}{% + \let\algocf@captiontext=\@old@algocf@captiontext% +}% +% +% ---------------------- algocf environment +% +\newcounter{algocfline}% % new counter to make lines numbers be internally +\setcounter{algocfline}{0}% % different in different algorithms +\newcounter{algocfproc}% counter to count all algo environment (proc, func), just used by hyperref to avoir "same +\setcounter{algocfproc}{0}% identifier" error caused by algocf being set to '-' for procedure or function or not + % changed if no caption is given. +% +\expandafter\ifx\csname algocf@within\endcsname\relax% if \algocf@within doesn't exist +\newcounter{algocf}% % just define a new counter +\renewcommand{\thealgocf}{\@arabic\c@algocf}% and the way it is printed +\else% else +\newcounter{algocf}[\algocf@within]% % counter is numbered within \algocf@within +\renewcommand\thealgocf{\csname the\algocf@within\endcsname.\@arabic\c@algocf}% +\fi% +% +\def\fps@algocf{htbp}% % default +\def\ftype@algocf{10}% % float type +\def\ext@algocf{\algocf@list} % loa by default, lof if figure option used +\newcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}% +\newcommand{\algocf@resetfnum}{\renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}}% +\newenvironment{algocf}% % float environment for algorithms + {\@float{algocf}}% + {\end@float}% +\newenvironment{algocf*}% % float* environment for algorithms + {\@dblfloat{algocf}}% + {\end@dblfloat}% +% +\def\algocf@seclistalgo{}% +\ifx\l@chapter\undefined\let\algocf@seclistalgo=\section\else\let\algocf@seclistalgo=\chapter\fi% +\@ifundefined{if@restonecol}{\newif\if@restonecol}\relax% +\newcommand\listofalgocfs{% + \ifx\algocf@seclistalgo\chapter% + \if@twocolumn\@restonecoltrue\onecolumn\else\@restonecolfalse\fi% + \fi% + \algocf@seclistalgo*{\listalgorithmcfname}% + \@mkboth{\MakeUppercase\listalgorithmcfname}% + {\MakeUppercase\listalgorithmcfname}% + \@starttoc{loa}% + \ifx\algocf@seclistalgo\chapter% + \if@restonecol\twocolumn\fi% + \fi% +} +% +\newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}% line of the list +% +% ---------------------- algorithm environment +% +%%%%%%% +%% +%% Algorithm environment definition +%% +%%%%%%% +%% +% +\newsavebox\algocf@algoframe% +\def\@algocf@pre@plain{\relax}% action to be done before printing the algo. +\def\@algocf@post@plain{\relax}% action to be done after printing the algo. +\def\@algocf@capt@plain{bottom}% where the caption should be localized. +\def\@algocf@pre@boxed{\noindent\begin{lrbox}{\algocf@algoframe}} +\def\@algocf@post@boxed{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% +\def\@algocf@capt@boxed{under}% +\def\@algocf@pre@ruled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% +\def\@algocf@post@ruled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}% +\def\@algocf@capt@ruled{top}% +\def\@algocf@pre@algoruled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% +\def\@algocf@post@algoruled{\kern\interspacealgoruled\hrule height\algoheightrule \relax}% +\def\@algocf@capt@algoruled{top}% +\def\@algocf@pre@tworuled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% +\def\@algocf@post@tworuled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}% +\def\@algocf@capt@tworuled{top}% +\def\@algocf@pre@boxruled{\noindent\begin{lrbox}{\algocf@algoframe}}% +\def\@algocf@post@boxruled{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% +\def\@algocf@capt@boxruled{above}% +% +\newcommand{\noalgocaption}{\def\@algocf@capt@ruled{none}} +% +%% before algocf or figure environment +\newcommand{\@algocf@init@caption}{% + \ifthenelse{\boolean{algocf@procenvironment}}{% if we are inside a procedure/function environment + \@algocf@proctitleofalgo% set Titleofalgo to Procedure: or Function: + % accordingly to the environment + \let\old@thealgocf=\thealgocf\ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% + \renewcommand{\thealgocf}{-}}% + }{% else inside environment algorithm + \@algocf@algotitleofalgo% fix name for \Titleofalgo to \algorithmcfname + }% + \algocf@setcaption% set caption to our caption style +}% +% +\newcommand{\@algofloatboxreset}{\@setminipage} +\newcommand{\@algocf@init}{% + \refstepcounter{algocfline}% + \stepcounter{algocfproc}%to have a different counter for each environment and being abble to make the difference + %between href of algoline in different algorithms. + \ifthenelse{\boolean{algocf@optnoend}}{% + \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% + }{% + \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% + }% +}% +%% after the end of algocf or figure environment +\newcommand{\@algocf@term@caption}{% + \algocf@resetcaption% restore original caption +}% +% +\newcommand{\@algocf@term}{% + \setboolean{algocf@algoH}{false}% no H by default + \ifthenelse{\boolean{algocf@optnoend}}{% + \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% + }{% + \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% + }% + \SetAlgoRefName{\relax}% +}% +% +%%%%%%%%%%%%%%%%% +%% makethealgo: macro which print effectively the algo in its box +%% +\newsavebox\algocf@algobox% +\newcommand{\algocf@makethealgo}{% + \vtop{% + % place caption above if needed bye the style + \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{above}}% + {\csname algocf@caption@\algocf@style\endcsname}{}% + % + % precommand according to the style + \csname @algocf@pre@\algocf@style\endcsname% + % place caption at top if needed bye the style + \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{top}}% + {\csname algocf@caption@\algocf@style\endcsname}{}% + % + \box\algocf@algobox% the algo + % place caption at bottom if needed bye the style + \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{bottom}}% + {\csname algocf@caption@\algocf@style\endcsname}{}% + % postcommand according to the style + \csname @algocf@post@\algocf@style\endcsname% + % place caption under if needed bye the style + \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{under}}% + {\csname algocf@caption@\algocf@style\endcsname}{}% + }% +}% +%%%%%%%%%%%%%%%%%%% +% +%% at the beginning of algocf or figure environment +\newcommand{\@algocf@start}{% + \@algoskip% + \begin{lrbox}{\algocf@algobox}% + \setlength{\algowidth}{\hsize}% + \vbox\bgroup% save all the algo in a box + \hbox to\algowidth\bgroup\hbox to \algomargin{\hfill}\vtop\bgroup% + \ifthenelse{\boolean{algocf@slide}}{\parskip 0.5ex\color{black}}{}% + % initialization + \addtolength{\hsize}{-1.5\algomargin}% + \let\@mathsemicolon=\;\def\;{\ifmmode\@mathsemicolon\else\@endalgoln\fi}% + \raggedright\AlFnt{}% + \ifthenelse{\boolean{algocf@slide}}{\IncMargin{\skipalgocfslide}}{}% + \@algoinsideskip% +}% +% +%% at the end of algocf or figure environment +\newcommand{\@algocf@finish}{% + \@algoinsideskip% + \egroup%end of vtop which contain all the text + \hfill\egroup%end of hbox wich contains [margin][vtop] + \ifthenelse{\boolean{algocf@slide}}{\DecMargin{\skipalgocfslide}}{}% + % + \egroup%end of main vbox + \end{lrbox}% + \algocf@makethealgo% print the algo + \@algoskip% + % restore dimension and macros + \setlength{\hsize}{\algowidth}% + \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}% + \let\;=\@mathsemicolon% +}% +% +%%%%%%%%%%%%%%%%%%%% +%% basic definition of the environment algorithm +%% +% +\newboolean{algocf@procenvironment}\setboolean{algocf@procenvironment}{false}% +\newboolean{algocf@func}\setboolean{algocf@func}{false}% +\newboolean{algocf@algoH}\setboolean{algocf@algoH}{false}% +\newboolean{algocf@algostar}\setboolean{algocf@algostar}{false}% +% +%%% environment for {algorithm}[H] +\newenvironment{algocf@Here}{\noindent% + \def\@captype{algocf}% if not defined, caption exit with an error + \begin{minipage}{\hsize}% +}{% + \end{minipage}%\par% +}% +%%% real algorithm environment which manages H and * option +% \let\algocf@originalfloatboxreset=\@floatboxreset% +% \let\@floatboxreset=\@algofloatboxreset% +\newenvironment{algocf@algorithm}[1][htbp]{ + \@algocf@init% + \ifthenelse{\equal{\algocf@float}{figure}}{% if option figure set + \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option + \begin{figure*}[#1]% call figure* + }{% else algorithm environment with figure option + \begin{figure}[#1]% call figure + }% + }{% else normal algorithm environment + \@algocf@init@caption% + \ifthenelse{\equal{#1}{H}}{% if [H] algorithm + \if@twocolumn\@latex@error{[H] in two columns mode is not allowed for algorithms}\fi% TODO: SCREAM if H in two colums! + \setboolean{algocf@algoH}{true}\begin{algocf@Here}% call corresponding environment + }{% else floating algorithm environment + \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* + \begin{algocf*}[#1]% call algocf* + }{% else algorithm environment + \begin{algocf}[#1]% call algcf + }% + }% + }% fin test option figure ou pas + \@algocf@start% + \@ResetCounterIfNeeded% + \algocf@linesnumbered\ignorespaces% +}{% + \@algocf@finish% + \ifthenelse{\equal{\algocf@float}{figure}}{% + \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option + \end{figure*}% call figure* + }{% else algorithm environment with figure option + \end{figure}% call figure + }% + }{% + \@algocf@term@caption% + \ifthenelse{\boolean{algocf@algoH}}{% if [H] algorithm + \end{algocf@Here}\par% call corresponding environment + }{% else floating algorithm environment + \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* + \end{algocf*}% call algocf* + }{% else algorithm environment + \end{algocf}% call algocf + }% + }% + }% + \@algocf@term\ignorespacesafterend% +}% +% +%%% user algorithm environment +% \newenvironment{\algocf@envname}[1][htbp]{% +% \setboolean{algocf@algostar}{false}% +% \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% +% \begin{algocf@algorithm}[#1]\ignorespaces% +% }{% +% \end{algocf@algorithm}\ignorespacesafterend% +% }% + +% %%% user algorithm* environment +% \newenvironment{\algocf@envname*}[1][htbp]{% +% \setboolean{algocf@algostar}{true}% +% \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% +% \begin{algocf@algorithm}[#1]\ignorespaces% +% }{% +% \end{algocf@algorithm}\ignorespacesafterend% +% }% +% +%%%%%%%%%%%%%%%%%%%%%%% +%%% +% +% \expandafter\newcommand\csname\algocf@listofalgorithms\endcsname{% +% \ifthenelse{\equal{\algocf@float}{figure}}{\listoffigures}{\listofalgocfs}% +% }% +%%% +%%% +% +% ---------------------- procedure and function environments +% +% +% -- new style (used in particular in the caption of function and procedure environments) +% +% three macros to extract parts of the caption +\gdef\algocf@captname#1(#2)#3@{#1} % keep characters before the first brace +\gdef\algocf@captparam#1(#2)#3@{#2} % keep character in between the braces +\gdef\algocf@captother#1(#2)#3@{#3} % keep character after the braces +% +%%% Text of caption for Procedure or Function +\newcommand{\algocf@captionproctext}[2]{% + {% + \ProcSty{\ProcFnt\algocf@procname\ifthenelse{\boolean{algocf@procnumbered}}{\nobreakspace\thealgocf\algocf@typo\algocf@capseparator}{\relax}}% + \nobreakspace\ProcNameSty{\ProcNameFnt\algocf@captname #2@}% Name of the procedure in ProcName Style. + \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}{% if no argument, write nothing + \ProcNameSty{\ProcNameFnt(}\ProcArgSty{\ProcArgFnt\algocf@captparam #2@}\ProcNameSty{\ProcNameFnt)}%else put arguments in ProcArgSty: + }% endif + \algocf@captother #2@% + }% +}% +% +% +% -- procedure and function environments are defined from algocf@algorithm environment +% +\newenvironment{procedure}[1][htbp]{% + \setboolean{algocf@algostar}{false}% + \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% + \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +\newenvironment{function}[1][htbp]{% + \setboolean{algocf@algostar}{false}% + \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% + \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +% +\newenvironment{procedure*}[1][htbp]{% + \setboolean{algocf@algostar}{true}% + \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% + \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +\newenvironment{function*}[1][htbp]{% + \setboolean{algocf@algostar}{true}% + \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% + \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +% +% +%%%%%%%%%%%%%%%%%%%% +%% definition of algondfloat environment +%% +\ifthenelse{\boolean{algocf@endfloat}}{% if endfloat option then +\newcommand{\algoplace}{% macro which is used to writhe algorithm about there + \begin{center}% + [\algorithmcfname~\thepostfig\ about here.]% + \end{center}% +}% +\newcommand{\algoendfloat}{% use as a \begin{algoendfloat} environment to start scanning of line +% \immediate\openout\@mainfff\jobname.fff% + \efloat@condopen{fff} + \efloat@iwrite{fff}{\string\begin{\algocf@envname}}% + \if@domarkers% + \ifthenelse{\equal{\algocf@list}{lof}}{% + \addtocounter{postfig}{1}% + }{% + \addtocounter{postalgo}{1}% + }% + \algoplace% + \fi% + \bgroup% + \let\do\ef@makeinnocent\dospecials% + \ef@makeinnocent\^^L% and whatever other special cases + \endlinechar`\^^M \catcode`\^^M=12 \ef@xalgocfendfloat}% +}{\relax}%%%% end of endfloat option ifthenelse +%% some macros useful for endfloat option that cannot be defined inside the ifthenelse +%scan algoendfloat algorithm and write the text into .fff file +{\catcode`\^^M=12 \endlinechar=-1 % + \gdef\ef@xalgocfendfloat#1^^M{% scan the lines inside algoendfloat environment being read by latex + \def\test{#1}% test is the line being currently scan by latex + \ifx\test\ef@endalgocftest% if it is \end{algoendfloat} + \def\next{% define next as to not continue the scan and write \end{algorithm} into .fff file + \egroup\end{algoendfloat}% + \efloat@iwrite{fff}{\string\end{\algocf@envname}}% + \efloat@iwrite{fff}{\string\efloatseparator}% + \efloat@iwrite{fff}{ }% + }% + \else% else write the current line being scanned by latex and set next to continue the scan + \efloat@iwrite{fff}{#1}% + \let\next\ef@xalgocfendfloat% + \fi% endif + \next}% next is continue if it was else condition, else it does not continue the scan and write end to file +}% +% test if the scan is finish by looking at the string \end{algoendfloat} +{\escapechar=-1% + \xdef\ef@endalgocftest{\string\\end\string\{algoendfloat\string\}}% +}% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +\newcommand{\TitleOfAlgo}[1]{\@titleprefix\ + \TitleSty{#1}\par\smallskip}% +% +\newcommand{\SetAlgorithmName}[3]{% + \renewcommand{\listalgorithmcfname}{#3}% + \renewcommand{\algorithmcfname}{#1}% + \renewcommand{\algorithmautorefname}{#2}% +}% +% +\newcommand{\algocf@refrelsize}{-2}\newcommand{\SetAlgoRefRelativeSize}[1]{\renewcommand{\algocf@refrelsize}{#1}}% +\newcommand{\SetAlgoRefName}[1]{% + \renewcommand{\algocf@algocfref}{#1}% +}% +% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% ------------------------- Default Definitions +% +%% +%% +% +\SetKwComment{tcc}{/* }{ */}% +\SetKwComment{tcp}{// }{}% +% +%\newcommand{\algocf@defaults@common}{ +% +% +% french keywords +% +%\SetKwInOut{AlgDonnees}{Donn\'ees}\SetKwInOut{AlgRes}{R\'esultat} +\SetKwInput{Donnees}{Donn\'ees}% +\SetKwInput{Res}{R\'esultat}% +\SetKwInput{Entree}{Entr\'ees}% +\SetKwInput{Sortie}{Sorties}% +\SetKw{KwA}{\`a}% +\SetKw{Retour}{retourner}% +\SetKwBlock{Deb}{d\'ebut}{fin}% +\SetKwRepeat{Repeter}{r\'ep\'eter}{jusqu'\`a}% +% +\SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fin si}% +\SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}% +\SetKwFor{Pour}{pour}{faire}{fin pour}% +\SetKwFor{PourPar}{pour}{faire en parallèle}{fin pour}% +\SetKwFor{PourCh}{pour chaque}{faire}{fin pour chaque}% +\SetKwFor{PourTous}{pour tous les}{faire}{fin pour tous}% +\SetKwFor{Tq}{tant que}{faire}{fin tq}% +% +% english keywords +% +\SetKwInput{KwIn}{Input}% +\SetKwInput{KwOut}{Output}% +\SetKwInput{KwData}{Data}% +\SetKwInput{KwResult}{Result}% +\SetKw{KwTo}{to} +\SetKw{KwRet}{return}% +\SetKw{Return}{return}% +\SetKwBlock{Begin}{begin}{end}% +\SetKwRepeat{Repeat}{repeat}{until}% +% +\SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% +\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end switch}% +\SetKwFor{For}{for}{do}{end for}% +\SetKwFor{ForPar}{for}{do in parallel}{end forpar} +\SetKwFor{ForEach}{foreach}{do}{end foreach}% +\SetKwFor{ForAll}{forall the}{do}{end forall}% +\SetKwFor{While}{while}{do}{end while}% +% +% --- German keywords +% +\SetKwInput{Ein}{Eingabe}%KwIn +\SetKwInput{Aus}{Ausgabe}%KwOut +\SetKwInput{Daten}{Daten}%KwData +\SetKwInput{Ergebnis}{Ergebnis}%KwResult +\SetKw{Bis}{bis}%KwTo +\SetKw{KwZurueck}{zur\"uck}%KwRet +\SetKw{Zurueck}{zur\"uck}%Return +\SetKwBlock{Beginn}{Beginn}{Ende}%Begin +\SetKwRepeat{Wiederh}{wiederhole}{bis}%Repeat +% +\SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf +\SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{Ende Unt.}%Switch +\SetKwFor{Fuer}{f\"ur}{tue}{Ende f\"ur}%For +\SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar +\SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach +\SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende f\"ur}%ForAll +\SetKwFor{Solange}{solange}{tue}{Ende solange}%While +% +% --- Czech keywords +% +\SetKwInput{Vst}{Vstup}% +\SetKwInput{Vyst}{V\'{y}stup}% +\SetKwInput{Vysl}{V\'{y}sledek}% +% +% --- Portuguese keywords +% +\SetKwInput{Entrada}{Entrada}% +\SetKwInput{Saida}{Sa\'{i}da}% +\SetKwInput{Dados}{Dados}% +\SetKwInput{Resultado}{Resultado}% +\SetKw{Ate}{at\'{e}} +\SetKw{KwRetorna}{retorna}% +\SetKw{Retorna}{retorna}% +\SetKwBlock{Inicio}{in\'{i}cio}{fim}% +\SetKwRepeat{Repita}{repita}{at\'{e}}% +% +\SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% +\SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim selec}% +\SetKwFor{Para}{para}{fa\c{c}a}{fim para}% +\SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim para} +\SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim para cada}% +\SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim para todo}% +\SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim enqto}% +% +% --- Italian keywords +% +\SetKwInput{KwIng}{Ingresso}% +\SetKwInput{KwUsc}{Uscita}% +\SetKwInput{KwDati}{Dati}% +\SetKwInput{KwRisult}{Risultato}% +\SetKw{KwA}{a}% +\SetKw{KwRitorna}{ritorna}% +\SetKw{Ritorna}{ritorna}% +\SetKwBlock{Inizio}{inizio}{fine}% +\SetKwRepeat{Ripeti}{ripeti}{finché}% +% +\SetKwIF{Sea}{AltSe}{Altrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% +\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endsw}% +\SetKwFor{Per}{per}{fai}{fine per}% +\SetKwFor{PerPar}{per}{fai in parallelo}{fine per}% +\SetKwFor{PerCiascun}{per ciascun}{fai}{fine per ciascun}% +\SetKwFor{PerTutti}{per tutti i}{fai}{fine per tutti}% +\SetKwFor{Finche}{finché}{fai}{fine finché}% +% +% --- End +%} +% +%\algocf@defaults@common +% +% option onelanguage redefinition +% +\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{french}}{% +\SetKwInput{KwIn}{Entr\'ees}% +\SetKwInput{KwOutSortie}{Sorties}% +\SetKwInput{KwData}{Donn\'ees}% +\SetKwInput{KwResult}{R\'esultat}% +\SetKw{KwTo}{\`a}% +\SetKw{KwRet}{retourner}% +\SetKw{Return}{retourner}% +\SetKwBlock{Begin}{d\'ebut}{fin}% +\SetKwRepeat{Repeat}{r\'ep\'eter}{jusqu'\`a}% +% +\SetKwIF{If}{ElseIf}{Else}{si}{alors}{sinon si}{sinon}{fin si}% +\SetKwSwitch{Switch}{Case}{Other}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}% +\SetKwFor{For}{pour}{faire}{fin pour}% +\SetKwFor{ForPar}{pour}{faire en parallèle}{fin pour}% +\SetKwFor{ForEach}{pour chaque}{faire}{fin pour chaque}% +\SetKwFor{ForAll}{pour tous les}{faire}{fin pour tous}% +\SetKwFor{While}{tant que}{faire}{fin tq}% +}{}% +\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{german}}{% +\SetKwInput{KwIn}{Eingabe}%KwIn +\SetKwInput{KwOut}{Ausgabe}%KwOut +\SetKwInput{KwData}{Daten}%KwData +\SetKwInput{KwResult}{Ergebnis}%KwResult +\SetKw{KwTo}{bis}%KwTo +\SetKw{KwRet}{zur\"uck}%KwRet +\SetKw{Return}{zur\"uck}%Return +\SetKwBlock{Begin}{Beginn}{Ende}%Begin +\SetKwRepeat{Repeat}{wiederhole}{bis}%Repeat +% +\SetKwIF{If}{ElseIf}{Else}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf +\SetKwSwitch{Switch}{Case}{Other}{unterscheide}{tue}{Fall}{sonst}{Ende Unt.}%Switch +\SetKwFor{For}{f\"ur}{tue}{Ende f\"ur}%For +\SetKwFor{ForPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar +\SetKwFor{ForEach}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach +\SetKwFor{ForAll}{f\"ur alle}{tue}{Ende f\"ur}%ForAll +\SetKwFor{While}{solange}{tue}{Ende solange}%While +}{}% +\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{portugues}}{% +\SetKwInput{KwIn}{Entrada}% +\SetKwInput{KwOut}{Sa\'{i}da}% +\SetKwInput{KwData}{Dados}% +\SetKwInput{KwResult}{Resultado}% +\SetKw{KwTo}{at\'{e}} +\SetKw{KwRet}{retorna}% +\SetKw{Return}{retorna}% +\SetKwBlock{Begin}{in\'{i}cio}{fim}% +\SetKwRepeat{Repeat}{repita}{at\'{e}}% +% +\SetKwIF{If}{ElseIf}{Else}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% +\SetKwSwitch{Switch}{Case}{Other}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim selec}% +\SetKwFor{For}{para}{fa\c{c}a}{fim para}% +\SetKwFor{ForPar}{para}{fa\c{c}a em paralelo}{fim para} +\SetKwFor{ForEach}{para cada}{fa\c{c}a}{fim para cada}% +\SetKwFor{ForAll}{para todo}{fa\c{c}a}{fim para todo}% +\SetKwFor{While}{enquanto}{fa\c{c}a}{fim enqto}% +}{}% +\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{italiano}}{% +\SetKwInput{KwIn}{Ingresso}% +\SetKwInput{KwOut}{Uscita}% +\SetKwInput{KwData}{Dati}% +\SetKwInput{KwResult}{Risultato}% +\SetKw{KwTo}{a}% +\SetKw{KwRet}{ritorna}% +\SetKw{Return}{ritorna}% +\SetKwBlock{Begin}{inizio}{fine}% +\SetKwRepeat{Repeat}{ripeti}{finché}% +% +\SetKwIF{If}{ElseIf}{Else}{se}{allora}{altrimenti se}{allora}{fine se}% +\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endsw}% +\SetKwFor{For}{per}{fai}{fine per}% +\SetKwFor{ForPar}{per}{fai in parallelo}{fine per}% +\SetKwFor{ForEach}{per ciascun}{fai}{fine per ciascun}% +\SetKwFor{ForAll}{per tutti i}{fai}{fine per tutti}% +\SetKwFor{While}{finché}{fai}{fine finché}% +}{}% +% +%%%% old commands compatibility +% +\ifthenelse{\boolean{algocf@oldcommands}}{% +\newcommand{\SetNoLine}{\SetAlgoNoLine}% +\newcommand{\SetVline}{\SetAlgoVlined}% +\newcommand{\SetLine}{\SetAlgoLined}% +% +\newcommand{\dontprintsemicolon}{\DontPrintSemicolon}% +\newcommand{\printsemicolon}{\PrintSemicolon}% +\newcommand{\incmargin}[1]{\IncMargin{#1}}% +\newcommand{\decmargin}[1]{\DecMargin{-#1}}% +\newcommand{\setnlskip}[1]{\SetNlSkip{#1}}% +\newcommand{\Setnlskip}[1]{\SetNlSkip{#1}}% +\newcommand{\setalcapskip}[1]{\SetAlCapSkip{#1}}% +\newcommand{\setalcaphskip}[1]{\SetAlCapHSkip{#1}}% +\newcommand{\nlSty}[1]{\NlSty{#1}}% +\newcommand{\Setnlsty}[3]{\SetNlSty{#1}{#2}{#3}}% +\newcommand{\linesnumbered}{\LinesNumbered}% +\newcommand{\linesnotnumbered}{\LinesNotNumbered}% +\newcommand{\linesnumberedhidden}{\LinesNumberedHidden}% +\newcommand{\showln}{\ShowLn}% +\newcommand{\showlnlabel}[1]{\ShowLnLabel{#1}}% +\newcommand{\nocaptionofalgo}{\NoCaptionOfAlgo}% +\newcommand{\restorecaptionofalgo}{\RestoreCaptionOfAlgo}% +\newcommand{\restylealgo}[1]{\RestyleAlgo{#1}}% +% +\newcommand{\Titleofalgo}[1]{\TitleOfAlgo{#1}}% +\SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{fin si}% +\SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{end if}% +\SetKwIF{gIf}{gElseIf}{gElse}{if}{then}{else if}{else}{end if}% +\SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf +\SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% +\SetKwIF{gSea}{gAltSe}{gAltrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% +}{% + \relax% +}% +% +% +% +%% +%%% +%%%% END \ No newline at end of file diff --git a/BookGPU/algorithmicx.sty b/BookGPU/algorithmicx.sty new file mode 100644 index 0000000..bfb7dab --- /dev/null +++ b/BookGPU/algorithmicx.sty @@ -0,0 +1,786 @@ +% ALGORITHMIC STYLE -- Released 27 APR 2005 +% for LaTeX version 2e +% +% Copyright Szasz Janos +% E-mail szaszjanos@users.sourceforge.net +% +% +% *** INITIALISING *** +% +% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{algorithmicx}[2005/04/27 v1.2 Algorithmicx] +\RequirePackage{ifthen} +\typeout{Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style} +% +\newcounter{ALG@line} +\newcounter{ALG@rem} +\newcounter{ALG@nested} +\newlength{\ALG@tlm} +\newlength{\ALG@thistlm} +\newcounter{ALG@Lnr}% the number of defined languages +\setcounter{ALG@Lnr}{0} +\newcounter{ALG@blocknr}% the number of defined blocks +\setcounter{ALG@blocknr}{0} +\newcounter{ALG@storecount}% number of stored but not restored algorithmic environments +\setcounter{ALG@storecount}{0} +\newcounter{ALG@tmpcounter}% only to decrement things +\newlength\ALG@tmplength% +%\def\algorithmicnoindent{-\ALG@tlm} +% \def\algbackskipbegin{\hskip\ALG@ctlm} +%\def\algbackskip{\hskip-\ALG@thistlm} +%\def\algbackskipend{\hskip-\ALG@tlm} +\def\ALG@defaultindent{\algorithmicindent} +% +% conditional states +% +\def\ALG@newcondstate#1% + {% + \expandafter\edef\csname ALG@x@#1\endcsname% + {\expandafter\noexpand\csname @@ALG@x@#1\endcsname}% + }% +\ALG@newcondstate{notext}% +\ALG@newcondstate{default}% +% +% +% *** ALGORITHMIC *** +% +% +\newcommand\ALG@beginblock[1]% #1 - indentation + {% + \ALG@thistlm\ALG@tlm% + \addtolength\ALG@tlm{#1}% + \addtocounter{ALG@nested}{1}% + \setlength\ALG@tmplength{#1}% + \expandafter\edef\csname ALG@ind@\theALG@nested\endcsname{\the\ALG@tmplength}% + }% +\newcommand\ALG@endblock% + {% + \addtolength\ALG@tlm{-\csname ALG@ind@\theALG@nested\endcsname}% + \addtocounter{ALG@nested}{-1}% + \ALG@thistlm\ALG@tlm% + }% +% +% algorithmic environment +% +\def\ALG@step% + {% + \addtocounter{ALG@line}{1}% + \addtocounter{ALG@rem}{1}% + \ifthenelse{\equal{\arabic{ALG@rem}}{\ALG@numberfreq}}% + {\setcounter{ALG@rem}{0}\alglinenumber{\arabic{ALG@line}}}% + {}% + }% +\newenvironment{algorithmic}[1][0]% + {% + \edef\ALG@numberfreq{#1}% + \def\@currentlabel{\theALG@line}% + % + \setcounter{ALG@line}{0}% + \setcounter{ALG@rem}{0}% + % + \let\\\algbreak% + % + \expandafter\edef\csname ALG@currentblock@\theALG@nested\endcsname{0}% + \expandafter\let\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% + % + \begin{list}% + {\ALG@step}% + {% + \rightmargin\z@% + \itemsep\z@ \itemindent\z@ \listparindent2em% + \partopsep\z@ \parskip\z@ \parsep\z@% + \labelsep 0.5em \topsep 0.2em%\skip 1.2em + \ifthenelse{\equal{#1}{0}}% + {\labelwidth 0.5em}% + {\labelwidth 1.2em}% + \leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}% Ok. the perfect leftmargin :-)) + \ALG@tlm\z@% + }% + \setcounter{ALG@nested}{0}% + \ALG@beginalgorithmic% + }% + {% end{algorithmic} + % check if all blocks are closed + \ALG@closeloops% + \expandafter\ifnum\csname ALG@currentblock@\theALG@nested\endcsname=0\relax% + \else% + \PackageError{algorithmicx}{Some blocks are not closed!!!}{}% + \fi% + \ALG@endalgorithmic% + \end{list}% + }% +% +% +% *** Functional core *** +% +% +\def\ALG@makeentity#1% execute the entity (#1) + {% + \def\ALG@thisentity{#1}% + \expandafter\ifx\csname ALG@b@\ALG@L @#1@0\endcsname\relax% + \let\ALG@makenobeginrepeat\ALG@makenobegin\ALG@makenobeginrepeat% this entitie ends or continues blocks + \else% + \let\ALG@makebeginrepeat\ALG@makebegin\ALG@makebeginrepeat% this entitie can open blocks + \fi% + \ALG@entitiecommand% + }% +% +\def\ALG@makebegin% executes an entitie that can open blocks + {% + \expandafter\let\expandafter\ALG@thislifetime\csname ALG@currentlifetime@\theALG@nested\endcsname% + \ifx\ALG@thislifetime\relax% + \let\ALG@makebeginrepeat\ALG@doentity% in infinite block I can open my block + \else% + \ifnum\ALG@thislifetime>0\relax% + \ifnum\ALG@thislifetime>65534\else% + \setcounter{ALG@tmpcounter}{\ALG@thislifetime}% the block has 'space' for another included block + \addtocounter{ALG@tmpcounter}{-1}% + \expandafter\edef\csname ALG@currentlifetime@\theALG@nested\endcsname{\arabic{ALG@tmpcounter}}% + \fi% + \let\ALG@makebeginrepeat\ALG@doentity% + \else% the block needs to be closed + \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\csname ALG@currentblock@\theALG@nested\endcsname\endcsname\relax% + \ALG@closebyforce% I can not close this block, continue after it is closed by force +% \ALG@makebegin% + \else% + % the block would be closed automatically, but this entitie can close it, so let's do it with the entity + \let\ALG@makebeginrepeat\ALG@doentity% + \fi% + \fi% + \fi% + \ALG@makebeginrepeat% + }% +% +\def\ALG@makenobegin% executes an entitie that can not open blocks + {% + \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% + \let\ALG@makenobeginrepeat\ALG@doentity% an infinite block must be broken + \else% + \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\csname ALG@currentblock@\theALG@nested\endcsname\endcsname\relax% + \ALG@closebyforce% the block must be ended by force, + \else% + \let\ALG@makenobeginrepeat\ALG@doentity% I can continue / end this block, let's do it + \fi% + \fi% + \ALG@makenobeginrepeat% + }% +% +\def\ALG@dobegin% + {% + \ALG@beginblock{\csname ALG@i@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}% + \expandafter\edef\csname ALG@currentblock@\theALG@nested\endcsname{\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}% + \expandafter\ifx\csname ALG@c@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\relax% + \expandafter\let\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% + \else% + \expandafter\edef\csname ALG@currentlifetime@\theALG@nested\endcsname{\csname ALG@c@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}% + \fi% + }% +% +\def\ALG@doend% + {% + \ALG@endblock% + }% +% +\def\ALG@doentity% the number of the closed block, the entitie + {% + \edef\ALG@thisblock{\csname ALG@currentblock@\theALG@nested\endcsname}% + \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\relax% + \def\ALG@thisblock{0}% + \fi% + \ALG@getentitytext% + \ifnum\ALG@thisblock=0\else\ALG@doend\fi% + \ifx\ALG@text\ALG@x@notext% + \item[]\nointerlineskip%\vskip-\prevdepth\nointerlineskip% bug: if there are no text and no lines, then this is wrong + \else% + \item% + \fi% + \noindent\hskip\ALG@tlm% + \expandafter\ifnum0=\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\else% + \ALG@dobegin% + \fi% + \def\ALG@entitiecommand{\ALG@displayentity}% + }% +% +\def\ALG@getentitytext% + {% + \expandafter\let\expandafter\ALG@text\csname ALG@t@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname% + \ifx\ALG@text\ALG@x@default% + % block specific - default + \expandafter\let\expandafter\ALG@text\csname ALG@t@\ALG@L @\ALG@thisentity\endcsname% + \ifx\ALG@text\ALG@x@default% + % block specific - default, language specific - default + \def\ALG@text{\ALG@deftext{\ALG@thisentity}}% + \fi% + \fi% + }% +% +\def\ALG@deftext{\csname ALG@deftext@\ALG@L\endcsname}% +% +\def\ALG@displayentity% + {% + \ifx\ALG@text\ALG@x@notext% + \let\ALG@text\relax% + \fi + \ALG@text% + }% +% +\def\ALG@closebyforce% + {% + \ALG@endblock% + }% +% +\def\ALG@closeloops% closes all finite blocks + {% + \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% + \else% only if it is finite + \ALG@closebyforce% the block must be ended by force, + \ALG@closeloops% the command still runs + \fi% + }% +% +% +% *** Low level block/entitie defining commands *** +% +% +\def\ALG@bl@{0}% the BIG block +\let\ALG@bl@@\ALG@bl@% the BIG block +% +% Create a block +% +\def\ALG@createblock#1% create the block #1, if it does not exists + {% + \@ifundefined{ALG@bl@\ALG@Ld @#1}% needs to be created? + {% + \addtocounter{ALG@blocknr}{1}% increment the block counter + \expandafter\edef\csname ALG@bl@\ALG@Ld @#1\endcsname{\arabic{ALG@blocknr}}% set the block number + }% + {}% + }% +% +% Get the block number +% +\def\ALG@getblocknumber#1{\csname ALG@bl@\ALG@Ld @#1\endcsname}% +% +% Create an entitie +% +\def\ALG@createentitie#1% create the entitie #1, if it does not exists + {% + \expandafter\ALG@edefcmd\csname #1\endcsname{\noexpand\ALG@makeentity{#1}}% + \@ifundefined{ALG@t@\ALG@Ld @#1}% the entity text is defined in this language? + {% + \expandafter\let\csname ALG@t@\ALG@Ld @#1\endcsname\ALG@x@default% + }% + {}% + }% +% +\def\ALG@createtext#1#2% #1 = closed block; #2 = entitie; creates \ALG@t@#2@#1 + {% + \expandafter\let\csname ALG@t@\ALG@Ld @#2@#1\endcsname\ALG@x@default% + }% +% +% End and Continue block +% +\def\ALG@endandcontinueblock#1#2#3#4#5% #1 = new block; #2 = old block; #3 = entitie; #4 = credits; #5 = indent + {% + \ifthenelse{\equal{#3}{}}{}% execute only if the entity is not empty + {% + \ALG@createentitie{#3}% create the entitie + \ALG@createblock{#2}% create the old block, if needed + \ifthenelse{\equal{#1}{}}% whe need to open a new block? + {\expandafter\edef\csname ALG@b@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{0}}% no, just close the old one + {% yes, + \ALG@createblock{#1}% create the block + \expandafter\edef\csname ALG@b@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{\ALG@getblocknumber{#1}}% ending the old block opens a new one + \ifthenelse{\equal{#4}{}}% infinite or finite credits? + {\expandafter\let\csname ALG@c@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname\relax}% infinite credits + {\expandafter\edef\csname ALG@c@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{#4}}% finite credits + \ifthenelse{\equal{#5}{}}% default or specified indentation + {\expandafter\let\csname ALG@i@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname\ALG@defaultindent}% default indentation + {\expandafter\edef\csname ALG@i@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{#5}}% indentation is specified + }% + \ALG@createtext{\ALG@getblocknumber{#2}}{#3}% + }% + }% +% +% macros used in declarations +% +\def\ALG@p@endtext@E{\algrenewtext{\ALG@v@end}}% +\def\ALG@p@endtext@xE{\algrenewtext[\ALG@v@newblock]{\ALG@v@end}}% +\def\ALG@p@endtext@nE{\algnotext{\ALG@v@end}}% +\def\ALG@p@endtext@xnE{\algnotext[\ALG@v@newblock]{\ALG@v@end}}% +\def\ALG@p@endtext@{}% +% starttext defines are more compex -- care must be taken for the optional parameters +\def\ALG@p@starttext@S{\ALG@p@s@process{\algrenewtext}}% +\def\ALG@p@starttext@C{\ALG@p@s@process{\algrenewtext}}% +\def\ALG@p@starttext@xC{\ALG@p@s@process{\algrenewtext[\ALG@v@oldblock]}}% +\def\ALG@p@s@process#1% + {% + \ifthenelse{\equal{\ALG@v@start}{}}% + {\ALG@p@endtext}% + {\@ifnextchar{[}{\ALG@p@s@getparamcount{#1}}{\ALG@p@s@simple{#1}}}% + }% +\def\ALG@p@s@getparamcount#1[#2]% + {% + \@ifnextchar{[}{\ALG@p@s@getdefparam{#1}{#2}}{\ALG@p@s@param{#1}{#2}}% + }% +\def\ALG@p@s@getdefparam#1#2[#3]% + {% + \ALG@p@s@defparam{#1}{#2}{#3}% + }% +\def\ALG@p@s@simple#1#2{#1{\ALG@v@start}{#2}\ALG@p@endtext}% +\def\ALG@p@s@param#1#2#3{#1{\ALG@v@start}[#2]{#3}\ALG@p@endtext}% +\def\ALG@p@s@defparam#1#2#3#4{#1{\ALG@v@start}[#2][#3]{#4}\ALG@p@endtext}% +% the rest of the crew +\def\ALG@p@starttext@nS{\algnotext{\ALG@v@start}\ALG@p@endtext}% +\def\ALG@p@starttext@nC{\algnotext{\ALG@v@start}\ALG@p@endtext}% +\def\ALG@p@starttext@xnC{\algnotext[\ALG@v@oldblock]{\ALG@v@start}\ALG@p@endtext}% +\def\ALG@p@starttext@{\ALG@p@endtext}% +\def\ALG@p@indent@def#1{\def\ALG@v@indent{#1}\ALG@p@setup}% +\def\ALG@p@indent@{\def\ALG@v@indent{}\ALG@p@setup}% +\def\ALG@p@credits@def#1{\def\ALG@v@credits{#1}\ALG@p@indent}% +\def\ALG@p@credits@{\ALG@p@indent}% +\def\ALG@p@end@def#1{\def\ALG@v@end{#1}\ALG@p@credits}% +\def\ALG@p@end@{\def\ALG@v@end{}\ALG@p@credits}% +\def\ALG@p@start@def#1{\def\ALG@v@start{#1}\ALG@p@end}% +\def\ALG@p@start@{\def\ALG@v@start{}\ALG@p@end}% +\def\ALG@p@oldblock@def#1{\def\ALG@v@oldblock{#1}\ALG@p@start}% +\def\ALG@p@oldblock@{\def\ALG@v@oldblock{}\ALG@p@start}% +\newcommand\ALG@p@newblock[1][]{\def\ALG@v@newblock{#1}\ALG@p@oldblock}% +\def\ALG@p@setup% + {% + \ifthenelse{\equal{\ALG@v@newblock}{}}% + {% + \ifthenelse{\equal{\ALG@v@start}{}}% + {% + \PackageError{algorithmicx}{Block or starting entitie must be specified!!!}{}% + }% + {% + \let\ALG@v@newblock\ALG@v@start% + }% + }% + {% + }% + \ALG@endandcontinueblock% + {\ALG@v@newblock}{\ALG@v@oldblock}{\ALG@v@start}% + {\ALG@v@credits}{\ALG@v@indent}% + \ALG@endandcontinueblock% + {}{\ALG@v@newblock}{\ALG@v@end}% + {}{}% + \ALG@p@starttext% + }% +% +% param handling +% +\newcommand\ALG@p@def[2][def]% + {% + \expandafter\let\csname ALG@p@#2\expandafter\endcsname\csname ALG@p@#2@#1\endcsname% + }% +\def\ALG@p@undef{\ALG@p@def[]}% +% +\def\ALG@p@ons{\ALG@p@def{start}}% +\def\ALG@p@onS{\ALG@p@def{start}\ALG@p@def[S]{starttext}}% +\def\ALG@p@onc{\ALG@p@def{oldblock}\ALG@p@def{start}}% +\def\ALG@p@onC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[C]{starttext}}% +\def\ALG@p@one{\ALG@p@def{end}}% +\def\ALG@p@onE{\ALG@p@def{end}\ALG@p@def[E]{endtext}}% +\def\ALG@p@onxC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[xC]{starttext}}% +\def\ALG@p@onxE{\ALG@p@def{end}\ALG@p@def[xE]{endtext}}% +\def\ALG@p@onnS{\ALG@p@def{start}\ALG@p@def[nS]{starttext}}% +\def\ALG@p@onnC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[nC]{starttext}}% +\def\ALG@p@onnE{\ALG@p@def{end}\ALG@p@def[nE]{endtext}}% +\def\ALG@p@onxnC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[xnC]{starttext}}% +\def\ALG@p@onxnE{\ALG@p@def{end}\ALG@p@def[xnE]{endtext}}% +\def\ALG@p@onb{\def\ALG@v@credits{}}% +\def\ALG@p@onl{\def\ALG@v@credits{1}}% +\def\ALG@p@onL{\ALG@p@def{credits}}% +\def\ALG@p@oni{\ALG@p@def{indent}}% +% +\def\ALG@p@main#1% + {% + \@ifundefined{ALG@ps@\ALG@p@state @#1}% + {% + \csname ALG@ps@\ALG@p@state @other\endcsname{#1}% + }% + {% + \csname ALG@ps@\ALG@p@state @#1\endcsname% + }% + \ALG@p@rec% + }% +% STATE : <> +\expandafter\def\csname ALG@ps@@]\endcsname{\let\ALG@p@rec\relax}% +\def\ALG@ps@@s{\ALG@p@ons}% +\def\ALG@ps@@S{\ALG@p@onS}% +\def\ALG@ps@@c{\ALG@p@onc}% +\def\ALG@ps@@C{\ALG@p@onC}% +\def\ALG@ps@@e{\ALG@p@one}% +\def\ALG@ps@@E{\ALG@p@onE}% +\def\ALG@ps@@N{\typeout{algdef: 'N' obsoloted, use 'nE'.}\ALG@p@onnE}% +\def\ALG@ps@@b{\ALG@p@onb}% +\def\ALG@ps@@l{\ALG@p@onl}% +\def\ALG@ps@@L{\ALG@p@onL}% +\def\ALG@ps@@i{\ALG@p@oni}% +\def\ALG@ps@@x{\def\ALG@p@state{x}}% +\def\ALG@ps@@n{\def\ALG@p@state{n}}% +\def\ALG@ps@@other#1{\typeout{algdef: Ignoring unknown token #1}}% +% STATE : x +\def\ALG@ps@x@C{\def\ALG@p@state{}\ALG@p@onxC}% +\def\ALG@ps@x@E{\def\ALG@p@state{}\ALG@p@onxE}% +\def\ALG@ps@x@N{\def\ALG@p@state{}\typeout{algdef: 'xN' obsoloted, use 'xnE'.}\ALG@p@onxnE}% +\def\ALG@ps@x@n{\def\ALG@p@state{xn}}% +\def\ALG@ps@x@other#1% + {% + \typeout{algdef: Ignoring 'x' before '#1'.}% + \def\ALG@p@state{}% + \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}% + }% +% STATE : n +\def\ALG@ps@n@S{\def\ALG@p@state{}\ALG@p@onnS}% +\def\ALG@ps@n@C{\def\ALG@p@state{}\ALG@p@onnC}% +\def\ALG@ps@n@E{\def\ALG@p@state{}\ALG@p@onnE}% +\def\ALG@ps@n@x{\def\ALG@p@state{nx}}% +\def\ALG@ps@n@other#1% + {% + \typeout{algdef: Ignoring 'n' before '#1'.}% + \def\ALG@p@state{}% + \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}% + }% +% STATE : xn +\def\ALG@ps@xn@C{\def\ALG@p@state{}\ALG@p@onxnC}% +\def\ALG@ps@xn@E{\def\ALG@p@state{}\ALG@p@onxnE}% +\def\ALG@ps@xn@x{\typeout{algdef: Ignoring 'x' after 'xn'.}}% +\def\ALG@ps@xn@n{\typeout{algdef: Ignoring 'n' after 'xn'.}}% +\def\ALG@ps@xn@other#1% + {% + \typeout{algdef: Ignoring 'xn' before '#1'.}% + \def\ALG@p@state{}% + \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}% + }% +% STATE : nx +\def\ALG@ps@nx@C{\def\ALG@p@state{}\ALG@p@onxnC}% +\def\ALG@ps@nx@E{\def\ALG@p@state{}\ALG@p@onxnE}% +\def\ALG@ps@nx@x{\typeout{algdef: Ignoring 'x' after 'nx'.}}% +\def\ALG@ps@nx@n{\typeout{algdef: Ignoring 'n' after 'nx'.}}% +\def\ALG@ps@nx@other#1% + {% + \typeout{algdef: Ignoring 'nx' before '#1'.}% + \def\ALG@p@state{}% + \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}% + }% +% +% +% *** User level block/entitie commands *** +% +% +% +% algdef{switches}... -- the king of all definitions in the algorithmicx package +% +\newcommand\algdef[1]% + {% + \ALG@p@undef{oldblock}% + \ALG@p@undef{start}% + \ALG@p@undef{end}% + \def\ALG@v@credits{}% + \ALG@p@undef{credits}% + \ALG@p@undef{indent}% + \ALG@p@undef{starttext}% + \ALG@p@undef{endtext}% + \def\ALG@p@state{}% + \let\ALG@p@rec\ALG@p@main% + \ALG@p@rec#1]% + \ALG@p@newblock% + }% +% +% a lot of other macros are provided for convenience +% +\def\algblock{\algdef{se}}% +\def\algcblock{\algdef{ce}}% +\def\algloop{\algdef{sl}}% +\def\algcloop{\algdef{cl}}% +\def\algsetblock{\algdef{seLi}}% +\def\algsetcblock{\algdef{ceLi}}% +\def\algblockx{\algdef{SxE}}% +\def\algblockdefx{\algdef{SE}}% +\def\algcblockx{\algdef{CxE}}% +\def\algcblockdefx{\algdef{CE}}% +\def\algsetblockx{\algdef{SxELi}}% +\def\algsetblockdefx{\algdef{SELi}}% +\def\algsetcblockx{\algdef{CxELi}}% +\def\algsetcblockdefx{\algdef{CELi}}% +\def\algloopdefx{\algdef{Sl}}% +\def\algcloopx{\algdef{xCl}}% +\def\algcloopdefx{\algdef{Cl}}% +% algloopx is not correct, use algloopdefx +% +% Text output commands +% +\newcommand\algrenewtext[2][]% [block]{entity} + {% + \ifthenelse{\equal{#2}{}}{}% + {% + \ifthenelse{\equal{#1}{}}% + {% + \expandafter\let\csname ALG@t@\ALG@Ld @#2\endcsname\relax% + \expandafter\newcommand\csname ALG@t@\ALG@Ld @#2\endcsname% + }% + {% + \expandafter\let\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname\relax% + \expandafter\newcommand\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname% + }% + }% + }% +% +\def\ALG@letentitytext#1#2% [block]{entity} + {% + \ifthenelse{\equal{#2}{}}{}% + {% + \ifthenelse{\equal{#1}{}}% + {% + \expandafter\let\csname ALG@t@\ALG@Ld @#2\endcsname% + }% + {% + \expandafter\let\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname% + }% + }% + }% +% +\newcommand\algnotext[2][]% [block]{entity} + {% + \ALG@letentitytext{#1}{#2}\ALG@x@notext% + }% +% +\newcommand\algdefaulttext[2][]% [block]{entity} + {% + \ALG@letentitytext{#1}{#2}\ALG@x@default% + }% +% +\def\ALG@notext*{\algnotext}% +\def\algtext{\@ifnextchar{*}{\ALG@notext}{\algrenewtext}}% +% +% +% *** LANGUAGE SWITCHING *** +% +% +% +\newcommand\algnewlanguage[1]% + {% + \@ifundefined{ALG@L@#1}% needs to be created? + {}% + {% + \PackageError{algorithmicx}{Language '#1' already defined!}{}% + }% + \addtocounter{ALG@Lnr}{1}% increment the language counter + \expandafter\edef\csname ALG@L@#1\endcsname{\arabic{ALG@Lnr}}% set the language number + \edef\ALG@Ld{\csname ALG@L@#1\endcsname}% + \expandafter\let\csname ALG@bl@\ALG@Ld @\endcsname\ALG@bl@% the BIG block + \expandafter\let\csname ALG@bl@\ALG@Ld @@\endcsname\ALG@bl@% the BIG block + \algdef{SL}[STATE]{State}{0}{}% + \expandafter\def\csname ALG@deftext@\ALG@Ld\endcsname{\textbf}% + \algnewcommand\algorithmiccomment[1]{\hfill\(\triangleright\) ##1}% + \algnewcommand\algorithmicindent{1.5em}% + \algnewcommand\alglinenumber[1]{\footnotesize ##1:}% + \algnewcommand\ALG@beginalgorithmic\relax% for user overrides + \algnewcommand\ALG@endalgorithmic\relax% for user overrides + }% +% +\newcommand\algsetlanguage[1]% + {% + \@ifundefined{ALG@L@#1}% needs to be created? + {% + \PackageError{algorithmicx}{Language '#1' is not yet defined!}{}% + }{}% + \edef\ALG@L{\csname ALG@L@#1\endcsname}% + }% +% +\newcommand\algdeflanguage[1]% + {% + \@ifundefined{ALG@L@#1}% needs to be created? + {% + \PackageError{algorithmicx}{Language '#1' is not yet defined!}{}% + }{}% + \edef\ALG@Ld{\csname ALG@L@#1\endcsname}% + }% +% +\newcommand\alglanguage[1]% + {% + \algdeflanguage{#1}% + \algsetlanguage{#1}% + }% +% +% +% *** Defining language dependent stuff *** +% +% +\def\ALG@eatoneparam#1{}% +\def\ALG@defbasecmd#1#2% + {% + \edef\ALG@tmp{\expandafter\ALG@eatoneparam\string #2}% + \@ifundefined\ALG@tmp{\edef #2{\noexpand\csname ALG@cmd@\noexpand\ALG@L @\ALG@tmp\endcsname}}{}% + \expandafter#1\csname ALG@cmd@\ALG@Ld @\ALG@tmp\endcsname% + }% +\newcommand\algnewcommand{\ALG@defbasecmd\newcommand}% +\newcommand\algrenewcommand{\ALG@defbasecmd\renewcommand}% +\def\ALG@letcmd{\ALG@defbasecmd\let}% +\def\ALG@defcmd{\ALG@defbasecmd\def}% +\def\ALG@edefcmd{\ALG@defbasecmd\edef}% +% +% +% *** OTHERS *** +% +% +\def\BState{\State \algbackskip}% +\def\Statex{\item[]}% an empty line +\newcommand\algrenewcomment{\algrenewcommand\algorithmiccomment}% +\def\Comment{\algorithmiccomment}% +\def\algref#1#2{\ref{#1}.\ref{#2}}% +\algnewlanguage{default}% +\algsetlanguage{default}% +% +% +% *** Line breaks *** +% +% +\newcommand\algbreak% for multiline parameters !!! needs fix + {% + \item% +% \hskip\ALG@parindent%!!! not yet implemented +% \hskip-\algorithmicindent% + }% +% +\def\ALG@noputindents% + {% + \hskip\ALG@tlm% + }% +% +% +% *** algorithm store / restore *** +% +% +% store +% +\ALG@newcondstate{mustrestore}% +\def\algstore% + {% + \renewcommand\ALG@beginblock% + {% + \PackageError{algorithmicx}{The environment must be closed after store!}{}% + }% + \@ifstar{\ALG@starstore}{\ALG@nostarstore}% + }% +\def\ALG@nostarstore#1% save all infos into #1 and terminate the algorithmic block + {% + \addtocounter{ALG@storecount}{1}% + \expandafter\global\expandafter\let\csname ALG@save@mustrestore@#1\endcsname\ALG@x@mustrestore% + \ALG@starstore{#1}% + }% +\def\ALG@starstore#1% + {% + \@ifundefined{ALG@save@line@#1}{}% + {\PackageError{algorithmicx}{This save name '#1' is already used!}{}}% + \def\ALG@savename{#1}% + \expandafter\xdef\csname ALG@save@totalnr@\ALG@savename\endcsname{\theALG@nested}% + \expandafter\xdef\csname ALG@save@line@\ALG@savename\endcsname{\theALG@line}% + \expandafter\xdef\csname ALG@save@numberfreq@\ALG@savename\endcsname{\ALG@numberfreq}% + \expandafter\xdef\csname ALG@save@rem@\ALG@savename\endcsname{\theALG@rem}% + \let\ALG@storerepeat\ALG@store% + \ALG@storerepeat% + }% +\def\ALG@store% simply terminate all open blocks + {% + \ifnum\theALG@nested=0\let\ALG@storerepeat\relax% + \else% + \expandafter\xdef\csname ALG@save@currentblock@\ALG@savename @\theALG@nested\endcsname% + {\csname ALG@currentblock@\theALG@nested\endcsname}% + \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% + \else% + \expandafter\xdef\csname ALG@save@currentlifetime@\ALG@savename @\theALG@nested\endcsname% + {\csname ALG@currentlifetime@\theALG@nested\endcsname}% + \fi% + \expandafter\xdef\csname ALG@save@ind@\ALG@savename @\theALG@nested\endcsname% + {\csname ALG@ind@\theALG@nested\endcsname}% + \ALG@closebyforce% + \fi% + \ALG@storerepeat% + }% +% +% restore +% +\def\algrestore% + {% + \@ifstar{\ALG@starrestore}{\ALG@nostarrestore}% + }% +\def\ALG@starrestore% + {% + \let\ALG@restorerem\relax% + \let\ALG@restorereprem\relax% + \ALG@restoremain% + }% +\def\ALG@nostarrestore% + {% + \let\ALG@restorerem\ALG@restoreremovesave% + \let\ALG@restorereprem\ALG@restorerepremovesave% + \ALG@restoremain% + }% +\def\ALG@restoreremovesave% + {% + \expandafter\global\expandafter\let\csname ALG@save@totalnr@\ALG@savename\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@line@\ALG@savename\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@rem@\ALG@savename\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@totalnr@\ALG@savename\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@numberfreq@\ALG@savename\endcsname\relax% + }% +\def\ALG@restorerepremovesave% + {% + \expandafter\global\expandafter\let\csname ALG@save@currentblock@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@ind@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + }% +\def\ALG@restoremain#1% restore all infos from #1 in an open algorithmic block + {% + \ifnum\theALG@line=0% + \else\PackageError{algorithmicx}{Restore might be used only at the beginning of the environment!}{}% + \fi% + \def\ALG@savename{#1}% + \expandafter\ifx\csname ALG@save@totalnr@\ALG@savename\endcsname\relax% + \PackageError{algorithmicx}{Save '\ALG@savename'\space not defined!!!}{}% + \fi% + \@ifundefined{ALG@save@mustrestore@\ALG@savename}{}% + {% + \addtocounter{ALG@storecount}{-1}% + \expandafter\global\expandafter\let\csname ALG@save@mustrestore@\ALG@savename\endcsname\relax% + }% + \setcounter{ALG@line}{\csname ALG@save@line@\ALG@savename\endcsname}% + \edef\ALG@numberfreq{\csname ALG@save@numberfreq@\ALG@savename\endcsname}% + \setcounter{ALG@rem}{\csname ALG@save@rem@\ALG@savename\endcsname}% + \setcounter{ALG@tmpcounter}{\csname ALG@save@totalnr@\ALG@savename\endcsname}% + \setcounter{ALG@nested}{0}% + \ALG@restorerem% + \let\ALG@restorerepeat\ALG@restore% + \ALG@restorerepeat% + }% +\def\ALG@restore% + {% + \ifnum\theALG@tmpcounter>0% + \expandafter\edef\csname ALG@currentblock@\theALG@tmpcounter\endcsname% + {\csname ALG@save@currentblock@\ALG@savename @\theALG@tmpcounter\endcsname}% + \expandafter\ifx\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + \expandafter\let\csname ALG@currentlifetime@\theALG@tmpcounter\endcsname\relax% + \else% + \expandafter\edef\csname ALG@currentlifetime@\theALG@tmpcounter\endcsname% + {\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname}% + \fi% + % + \ALG@beginblock{\csname ALG@save@ind@\ALG@savename @\theALG@tmpcounter\endcsname}% + \ALG@restorereprem% + \addtocounter{ALG@tmpcounter}{-1}% + \else\let\ALG@restorerepeat\relax% + \fi% + \ALG@restorerepeat% + }% +\AtEndDocument% + {% + \ifnum\theALG@storecount>0\relax% + \PackageError{algorithmicx}{Some stored algorithms are not restored!}{}% + \fi% + }%