From 3bb814fe836cd59db56f2f5d07f69cb531ed25e0 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 30 Apr 2024 03:01:32 +0000 Subject: CTAN sync 202404300301 --- .../themes/beamertheme-tcolorbox/DEPENDS.txt | 4 + .../themes/beamertheme-tcolorbox/README.md | 31 +- .../beamerinnerthemetcolorbox.sty | 2 +- .../beamertheme-tcolorbox-doc-settings.sty | 199 + .../beamertheme-tcolorbox-doc.pdf | Bin 177469 -> 178055 bytes .../beamertheme-tcolorbox-doc.tex | 198 +- macros/latex/contrib/easybook/easybook.dtx | 71 +- macros/latex/contrib/easybook/easybook.pdf | Bin 641249 -> 640970 bytes macros/latex/contrib/easybook/easybook.tex | 16 +- macros/latex/contrib/fontscale/CHANGELOG.md | 12 + .../latex/contrib/fontscale/fontscale-manual.pdf | Bin 117119 -> 117113 bytes .../latex/contrib/fontscale/fontscale-manual.tex | 11 +- macros/latex/contrib/fontscale/fontscale.sty | 217 +- macros/latex/contrib/jsonparse/README.md | 9 +- macros/latex/contrib/jsonparse/jason/jason.pdf | 1662 ++ macros/latex/contrib/jsonparse/jason/jason.svg | 67 + macros/latex/contrib/jsonparse/jsonparse-doc.pdf | Bin 414511 -> 578489 bytes macros/latex/contrib/jsonparse/jsonparse-doc.tex | 30 +- macros/latex/contrib/jsonparse/jsonparse.sty | 95 +- .../contrib/profmaquette/doc/ProfMaquette-doc.pdf | Bin 288571 -> 299331 bytes .../contrib/profmaquette/latex/ProfMaquette.sty | 240 +- macros/latex/contrib/rpgicons/LICENSE | 415 + macros/latex/contrib/rpgicons/README.md | 30 + macros/latex/contrib/rpgicons/rpgicons-doc.pdf | Bin 0 -> 490866 bytes macros/latex/contrib/rpgicons/rpgicons-doc.tex | 831 + macros/latex/contrib/rpgicons/rpgicons-l3.sty | 2025 ++ macros/latex/contrib/rpgicons/rpgicons-pgf.sty | 2596 ++ macros/latex/contrib/rpgicons/rpgicons.sty | 33 + macros/latex/contrib/tkz/tkz-elements/README.md | 136 +- .../doc/latex/TKZdoc-elements-classes-circle.tex | 8 +- .../doc/latex/TKZdoc-elements-classes-ellipse.tex | 133 +- .../doc/latex/TKZdoc-elements-classes-line.tex | 70 +- .../doc/latex/TKZdoc-elements-classes-point.tex | 1 + .../doc/latex/TKZdoc-elements-classes-regular.tex | 2 +- .../doc/latex/TKZdoc-elements-classes-triangle.tex | 225 +- .../doc/latex/TKZdoc-elements-examples.tex | 308 +- .../doc/latex/TKZdoc-elements-main.tex | 30 +- .../doc/latex/TKZdoc-elements-organization.tex | 3 +- .../doc/latex/TKZdoc-elements-presentation.tex | 3 +- .../doc/latex/TKZdoc-elements-structure.tex | 2 +- .../doc/latex/TKZdoc-elements-transfers.tex | 2 +- .../doc/latex/TKZdoc-elements-transferts.tex | 150 - .../contrib/tkz/tkz-elements/doc/tkz-elements.pdf | Bin 696762 -> 704147 bytes .../tkz-elements/examples/tkz-elements-demo_1.pdf | Bin 20611 -> 20614 bytes .../tkz-elements/examples/tkz-elements-demo_1.tex | 2 +- .../tkz-elements/examples/tkz-elements-demo_2.pdf | Bin 16392 -> 16396 bytes .../tkz-elements/examples/tkz-elements-demo_2.tex | 2 +- .../tkz-elements/examples/tkz-elements-demo_3.pdf | Bin 17158 -> 17162 bytes .../tkz-elements/examples/tkz-elements-demo_3.tex | 2 +- .../tkz-elements/examples/tkz-elements-demo_4.pdf | Bin 11343 -> 11341 bytes .../tkz-elements/examples/tkz-elements-demo_4.tex | 2 +- .../tkz/tkz-elements/latex/tkz-elements.sty | 4 +- .../tkz/tkz-elements/latex/tkz_elements_circle.lua | 4 +- .../tkz/tkz-elements/latex/tkz_elements_class.lua | 4 +- .../tkz-elements/latex/tkz_elements_ellipse.lua | 4 +- .../latex/tkz_elements_functions_circles.lua | 4 +- .../latex/tkz_elements_functions_intersections.lua | 4 +- .../latex/tkz_elements_functions_lines.lua | 15 +- .../latex/tkz_elements_functions_maths.lua | 4 +- .../latex/tkz_elements_functions_matrices.lua | 4 +- .../latex/tkz_elements_functions_points.lua | 4 +- .../latex/tkz_elements_functions_regular.lua | 4 +- .../latex/tkz_elements_functions_triangles.lua | 4 +- .../tkz/tkz-elements/latex/tkz_elements_line.lua | 13 +- .../tkz/tkz-elements/latex/tkz_elements_main.lua | 4 +- .../tkz-elements/latex/tkz_elements_matrices.lua | 4 +- .../tkz/tkz-elements/latex/tkz_elements_misc.lua | 4 +- .../latex/tkz_elements_parallelogram.lua | 4 +- .../tkz/tkz-elements/latex/tkz_elements_point.lua | 4 +- .../latex/tkz_elements_quadrilateral.lua | 4 +- .../tkz-elements/latex/tkz_elements_rectangle.lua | 4 +- .../tkz-elements/latex/tkz_elements_regular.lua | 4 +- .../tkz/tkz-elements/latex/tkz_elements_square.lua | 4 +- .../tkz-elements/latex/tkz_elements_triangle.lua | 48 +- .../tkz/tkz-elements/latex/tkz_elements_vector.lua | 4 +- macros/latex/contrib/tkz/tkz-euclide/README.md | 16 +- .../tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex | 4 +- .../doc/latex/TKZdoc-euclide-angles.tex | 3 +- .../doc/latex/TKZdoc-euclide-circleby.tex | 4 +- .../doc/latex/TKZdoc-euclide-circles.tex | 35 +- .../doc/latex/TKZdoc-euclide-clipping.tex | 19 +- .../doc/latex/TKZdoc-euclide-compass.tex | 2 +- .../doc/latex/TKZdoc-euclide-documentation.tex | 3 +- .../doc/latex/TKZdoc-euclide-drawing.tex | 26 +- .../doc/latex/TKZdoc-euclide-elements.tex | 4 +- .../doc/latex/TKZdoc-euclide-examples.tex | 25 +- .../doc/latex/TKZdoc-euclide-filling.tex | 3 +- .../doc/latex/TKZdoc-euclide-intersection.tex | 70 +- .../doc/latex/TKZdoc-euclide-labelling.tex | 2 +- .../tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex | 36 +- .../tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex | 20 +- .../tkz-euclide/doc/latex/TKZdoc-euclide-main.tex | 24 +- .../tkz-euclide/doc/latex/TKZdoc-euclide-news.tex | 427 +- .../doc/latex/TKZdoc-euclide-pointby.tex | 15 +- .../doc/latex/TKZdoc-euclide-points.tex | 12 +- .../doc/latex/TKZdoc-euclide-pointsSpc.tex | 122 +- .../doc/latex/TKZdoc-euclide-polygons.tex | 4 +- .../doc/latex/TKZdoc-euclide-presentation.tex | 72 +- .../tkz-euclide/doc/latex/TKZdoc-euclide-show.tex | 10 +- .../doc/latex/TKZdoc-euclide-styles.tex | 16 +- .../tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex | 17 +- .../contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf | Bin 1116500 -> 1103289 bytes .../latex/drawings/tkz-draw-eu-angles.tex | 268 +- .../latex/drawings/tkz-draw-eu-arcs.tex | 262 + .../latex/drawings/tkz-draw-eu-circles.tex | 6 +- .../latex/drawings/tkz-draw-eu-compass.tex | 6 +- .../latex/drawings/tkz-draw-eu-ellipses.tex | 6 +- .../latex/drawings/tkz-draw-eu-lines.tex | 11 +- .../latex/drawings/tkz-draw-eu-points.tex | 6 +- .../latex/drawings/tkz-draw-eu-polygons.tex | 6 +- .../latex/drawings/tkz-draw-eu-protractor.tex | 6 +- .../latex/drawings/tkz-draw-eu-sectors.tex | 6 +- .../latex/drawings/tkz-draw-eu-show.tex | 6 +- .../tkz-euclide/latex/libs/tkz-lib-eu-marks.tex | 6 +- .../tkz-euclide/latex/libs/tkz-lib-eu-shape.tex | 6 +- .../latex/obj-lua/tkz-obj-eu-lua-circles-by.tex | 4 +- .../latex/obj-lua/tkz-obj-eu-lua-circles.tex | 6 +- .../latex/obj-lua/tkz-obj-eu-lua-points-by.tex | 6 +- .../latex/obj-lua/tkz-obj-eu-lua-points-spc.tex | 4 +- .../latex/obj-lua/tkz-obj-eu-lua-points-with.tex | 6 +- .../latex/obj-lua/tkz-obj-eu-lua-points.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex | 6 +- .../latex/obj/tkz-obj-eu-circles-by.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-circles.tex | 6 +- .../tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex | 6 +- .../tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex | 6 +- .../latex/obj/tkz-obj-eu-points-rnd.tex | 6 +- .../latex/obj/tkz-obj-eu-points-spc.tex | 6 +- .../latex/obj/tkz-obj-eu-points-with.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-points.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex | 6 +- .../tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex | 6 +- .../contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg | 24 +- .../contrib/tkz/tkz-euclide/latex/tkz-euclide.sty | 47 +- .../latex/tools-lua/tkz-tools-eu-lua-angles.tex | 23 +- .../latex/tools-lua/tkz-tools-eu-lua-base.tex | 6 +- .../tools-lua/tkz-tools-eu-lua-intersections.tex | 6 +- .../latex/tools-lua/tkz-tools-eu-lua-math.tex | 6 +- .../tkz-euclide/latex/tools/tkz-tools-eu-BB.tex | 6 +- .../latex/tools/tkz-tools-eu-angles.tex | 11 +- .../tkz-euclide/latex/tools/tkz-tools-eu-base.tex | 6 +- .../latex/tools/tkz-tools-eu-colors.tex | 6 +- .../latex/tools/tkz-tools-eu-intersections.tex | 6 +- .../tkz-euclide/latex/tools/tkz-tools-eu-math.tex | 6 +- .../latex/tools/tkz-tools-eu-modules.tex | 6 +- .../tkz-euclide/latex/tools/tkz-tools-eu-text.tex | 6 +- .../latex/tools/tkz-tools-eu-utilities.tex | 6 +- macros/luatex/latex/piton/README.md | 2 +- macros/luatex/latex/piton/piton-french.pdf | 5503 ++--- macros/luatex/latex/piton/piton-french.tex | 276 +- macros/luatex/latex/piton/piton.dtx | 553 +- macros/luatex/latex/piton/piton.pdf | 23585 ++++++++++--------- macros/unicodetex/latex/bithesis/bithesis.dtx | 6 +- macros/unicodetex/latex/bithesis/bithesis.pdf | Bin 750977 -> 751202 bytes 155 files changed, 25534 insertions(+), 16293 deletions(-) create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt create mode 100644 macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty create mode 100644 macros/latex/contrib/jsonparse/jason/jason.pdf create mode 100644 macros/latex/contrib/jsonparse/jason/jason.svg create mode 100644 macros/latex/contrib/rpgicons/LICENSE create mode 100644 macros/latex/contrib/rpgicons/README.md create mode 100644 macros/latex/contrib/rpgicons/rpgicons-doc.pdf create mode 100644 macros/latex/contrib/rpgicons/rpgicons-doc.tex create mode 100644 macros/latex/contrib/rpgicons/rpgicons-l3.sty create mode 100644 macros/latex/contrib/rpgicons/rpgicons-pgf.sty create mode 100644 macros/latex/contrib/rpgicons/rpgicons.sty delete mode 100644 macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex create mode 100644 macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex (limited to 'macros') diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt new file mode 100644 index 0000000000..09e806e193 --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt @@ -0,0 +1,4 @@ +hard beamer +hard tools +hard tcolorbox +hard tikzfill diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md index 91f07c7663..b8501189d6 100644 --- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md +++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md @@ -1,9 +1,32 @@ # beamertheme-tcolorbox -A beamer inner theme which reproduces standard beamer blocks using tcolorboxes +[![GitHub](https://img.shields.io/github/license/samcarter/beamertheme-tcolorbox.svg?color=blue)](http://www.latex-project.org/lppl.txt) +[![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/samcarter/beamertheme-tcolorbox.svg?label=current%20version)](https://github.com/samcarter/beamertheme-tcolorbox/releases/latest) +[![CTAN](https://img.shields.io/ctan/v/beamertheme-tcolorbox.svg)](https://ctan.org/pkg/beamertheme-tcolorbox) -Current version: 2023/05/03 version v0.6 +A beamer inner theme which reproduces standard beamer blocks using tcolorboxes. -This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt +This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt . -The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-tcolorbox/issues +The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-tcolorbox . + +### Usage + +```latex +\documentclass{beamer} + +\usecolortheme{orchid} +\useinnertheme{tcolorbox} + +\begin{document} + +\begin{frame} + \begin{block}{Title} + Content + \end{block} +\end{frame} + +\end{document} +``` + +For more details, please consult the [package documentation](https://github.com/samcarter/beamertheme-tcolorbox/blob/main/DOCUMENTATION.pdf). diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty index 770a00d0b5..9469f0591e 100644 --- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty +++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty @@ -12,7 +12,7 @@ % See http://www.latex-project.org/lppl.txt % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\ProvidesPackage{beamerinnerthemetcolorbox}[2023/05/03 version v0.6 Beamer blocks with tcolorboxes] +\ProvidesPackage{beamerinnerthemetcolorbox}[2024/04/29 version v0.7 Beamer blocks with tcolorboxes] \RequirePackage{tcolorbox} \tcbuselibrary{skins,hooks} diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty new file mode 100644 index 0000000000..777cedba6e --- /dev/null +++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty @@ -0,0 +1,199 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Personal helper theme for package documentations +% Copyright samcarter +% +% This file may be distributed and/or modified +% under the LaTeX Project Public License 1.3c or later +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Usage: +% ln ~/Life/latex/beamertheme-sam/themesam.sty package-doc-settings.sty +% \usepackage[ +% themecolor=samdblue +% ]{\jobname-settings} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Colours +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage{xcolor} +\definecolor{samyellow}{RGB}{246,193,65} +\definecolor{samorange}{RGB}{241,147,45} +\definecolor{samred}{RGB}{191,26,46}% TikZbricks +\definecolor{sammagenta}{RGB}{170,42,104}% TikZmarmots +\definecolor{samviolet}{RGB}{136,46,114}% TikZlings +\definecolor{samlila}{RGB}{101,67,159}% Rainbow beamer theme +\definecolor{samdblue}{RGB}{0,51,134}% beamer theme +\definecolor{samlblue}{RGB}{22,89,155}% TikZducks +\definecolor{samteal}{RGB}{25,143,157}% Tcolorbox beamer theme +\definecolor{samlgreen}{RGB}{68,170,153}% Jigsaw +\definecolor{samdgreen}{RGB}{78,178,125} +\definecolor{samlgray}{RGB}{160,160,185} +\definecolor{samdgray}{RGB}{60,60,85} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Package options +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage{xkeyval} +\DeclareOptionX{themecolor}[samdblue]{\colorlet{themecolor}{#1}} +\DeclareOptionX{listingcolor}[samlblue]{\colorlet{listingcolor}{#1}} +\ExecuteOptionsX{themecolor,listingcolor} +\ProcessOptionsX + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Packages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\@ifclassloaded{beamer}{}{% + \RequirePackage[english]{babel} + \RequirePackage[paper=a4paper,margin=2.9cm]{geometry} + \RequirePackage{scrlayer-scrpage} + \let\hrulefillx\hrulefill + \RequirePackage[bitstream-charter]{mathdesign} + \let\hrulefill\hrulefillx + \RequirePackage[hang,flushmargin,bottom]{footmisc} + \RequirePackage{footnotehyper} + \makesavenoteenv{tcolorbox} + \RequirePackage[all]{nowidow} + \RequirePackage[colorlinks=true,breaklinks=true,allcolors=themecolor,hyperfootnotes=false]{hyperref} +} +\RequirePackage[T1]{fontenc} +\RequirePackage{xspace} +\RequirePackage{inconsolata}% mono font with bold, but italic is missing +% \RequirePackage[scale=0.85]{cascadia-code} +% \AddToHook{cmd/ttfamily/before}{\fontseries{sl}} +\RequirePackage{iexec} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Listings +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage[ + cachedir=$TMPDIR/minted/ +]{minted} + +% smuggling custom pygmentize style in cache folder +% (a real pygmentise style would need installtion in some python folder) +\begin{filecontents*}[noheader]{./sam.pygstyle} +\makeatletter +\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax% + \let\PYG@ul=\relax \let\PYG@tc=\relax% + \let\PYG@bc=\relax \let\PYG@ff=\relax} +\def\PYG@tok#1{\csname PYG@tok@#1\endcsname} +\def\PYG@toks#1+{\ifx\relax#1\empty\else% + \PYG@tok{#1}\expandafter\PYG@toks\fi} +\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{% + \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}} +\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}} + +% optional arguments +\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor{black}{##1}}} + +% macros +\expandafter\def\csname PYG@tok@k\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}} +% curly brakets +\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}} + +% comments (italics won't work with the inconsolata font) +\expandafter\def\csname PYG@tok@c\endcsname{\def\PYG@tc##1{\textcolor{gray}{##1}}} + +\def\PYGZbs{\char`\\} +\def\PYGZus{\char`\_} +\def\PYGZob{\char`\{} +\def\PYGZcb{\char`\}} +\def\PYGZca{\char`\^} +\def\PYGZam{\char`\&} +\def\PYGZlt{\char`\<} +\def\PYGZgt{\char`\>} +\def\PYGZsh{\char`\#} +\def\PYGZpc{\char`\%} +\def\PYGZdl{\char`\$} +\def\PYGZhy{\char`\-} +\def\PYGZsq{\char`\'} +\def\PYGZdq{\char`\"} +\def\PYGZti{\char`\~} +% for compatibility with earlier versions +\def\PYGZat{@} +\def\PYGZlb{[} +\def\PYGZrb{]} +\makeatother +\end{filecontents*} + +\iexec{mkdir -p $TMPDIR/minted && mv sam.pygstyle $TMPDIR/minted/.} + +\usemintedstyle{sam} +\setminted{ + breaksymbolleft={}, + tabsize=2, + breaklines=true, +} +\newminted[samcode]{latex}{} +\newmintinline[saminline]{latex}{} + +% use non-bold and all coloured for inline code in articles +\ifdefined\insertaspectratio\else + \patchcmd{\minted@inputpyg@inline}{\minted@input}{\color{listingcolor}\renewcommand\textcolor[3][]{##3}\renewcommand\bfseries{}\minted@input}{}{} +\fi + +\RequirePackage[most]{tcolorbox} +\tcbuselibrary{minted} +\tcbset{% + colframe=themecolor, + fonttitle=\bfseries, + sidebyside, + center lower, + righthand width=5.7cm, + bottom=2pt, + top=2pt, + left=3pt, + right=3pt, + sidebyside gap=10pt, + lower separated=false, + listing engine=minted, + minted language=latex, + colback=themecolor!10, + sharp corners, + boxrule=0pt, + before title={\strut} +} + +% avoid page breaks right in front of the tcolorbox +\@ifclassloaded{beamer}{}{ + \tcbuselibrary{hooks} + \tcbset{before pre={\nopagebreak[4]}} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% document settings +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\@ifclassloaded{scrartcl}{% + \KOMAoptions{parskip=half} + \addtokomafont{sectioning}{\color{themecolor}} + \addtokomafont{date}{\normalsize} + \addtokomafont{author}{\normalsize} + \setlength{\footnotemargin}{0.7em} +}{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Custom macros +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\providecommand*{\CTAN}{\textsc{CTAN}\xspace} +\providecommand*{\TikZ}{Ti\emph{k}Z\xspace} +\providecommand*{\miktex}{MiK\TeX\xspace} +\providecommand*{\texlive}{\TeX{}Live\xspace} +\providecommand*{\tikzbrick}{Ti\emph{k}Zbrick\xspace} +\providecommand*{\tikzducks}{Ti\emph{k}Zducks\xspace} +\providecommand*{\tikzlings}{Ti\emph{k}Zlings\xspace} +\providecommand*{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace} +\providecommand*{\ConTeXt}{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt} \ No newline at end of file diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf index db3b354834..fe64e72639 100644 Binary files a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf and b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf differ diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex index 8bd7fc2fa4..c17e7fc17e 100644 --- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex +++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex @@ -1,5 +1,3 @@ -% !TeX TS-program = latexmk -time -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %%O %%S" % | txs:///view-log | txs:///view-pdf - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Documentation for the tcolorbox inner theme @@ -13,80 +11,37 @@ % See http://www.latex-project.org/lppl.txt % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\documentclass[parskip=half]{scrartcl} - -% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage[T1]{fontenc} -\usepackage[utf8]{inputenc} -\usepackage[english]{babel} -\usepackage[bitstream-charter]{mathdesign} -\usepackage[most]{tcolorbox} -\usepackage[paper=a4paper,hmargin=2.9cm,vmargin=2.5cm]{geometry} -\usepackage{scrlayer-scrpage} -\usepackage[colorlinks=true,breaklinks=true,urlcolor=blendedblue,linkcolor=blendedblue,citecolor=blendedblue,filecolor=blendedblue]{hyperref} - -% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\definecolor{blendedblue}{rgb}{0.2,0.2,0.7} -\addtokomafont{sectioning}{\color{blendedblue}} -\addtokomafont{date}{\normalsize} -\addtokomafont{author}{\normalsize} - -\lstdefinestyle{tcolorboxstyle}{% - language={[latex]TeX}, - tabsize=2, - breaklines, - basicstyle=\ttfamily, - columns=fullflexible, -% texcsstyle=*\color{blendedblue}\bfseries, -% moretexcs={usetheme,useinnertheme}, -} - -\tcbset{% - toptitle=1mm, - left=2mm, - title={Example}, - fonttitle=\large\sffamily, - colbacktitle=blendedblue!75!black, - colframe=blendedblue!75!black, - colback=blendedblue!75!black!10!white, - boxrule=0cm, - frame hidden, - arc=1.3mm, - arc=2mm, - sidebyside, - listing options={style=tcolorboxstyle}, - bottom=0pt, - top=0pt, - lower separated=false, - comment style={scale=2}, - enhanced, - drop fuzzy shadow=black!90, - title code app={ - \shade[top color=blendedblue!75!black,bottom color=blendedblue!75!black!10!white] (title.south west) rectangle ([yshift=-1mm]title.south east); - } -} +% !TeX program = txs:///arara +% arara: latexmk: { +% arara: --> engine: pdflatex, +% arara: --> options: [ +% arara: --> '-shell-escape', +% arara: --> '-synctex=1', +% arara: --> '-interaction=nonstopmode', +% arara: --> ] +% arara: --> } +\documentclass{scrartcl} -\lstset{style=tcolorboxstyle} - -%\makeatletter -\newcommand{\prefix}{./build} +% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\title{The tcolorbox beamer inner theme} +\subtitle{A beamer inner theme to replicate standard beamer blocks with tcolorboxes} +\author{% + \texorpdfstring{ + \texttt{samcarter}\\ + \url{https://github.com/samcarter/beamertheme-tcolorbox}\\ + \url{https://www.ctan.org/pkg/beamertheme-tcolorbox} + }{samcarter}} +\date{Version v0.7 \textendash{} 2024/04/29} + +\usepackage[ + themecolor=samteal +]{\jobname-settings} + +\newcommand{\prefix}{./include} \tcbset{ compilable listing/.style={listing file={\prefix/\jobname-listing-\thetcblistingcount.tex}}, run pdflatex/.style={run@system@command={cd\space \prefix;\space pdflatex}{\jobname-listing-\thetcblistingcount.tex}},% } -%\makeatother - - -% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\title{The tcolorbox beamer inner theme} -\subtitle{A beamer inner theme to reproduce standard beamer blocks using tcolorboxes} -\author{% - \texorpdfstring{ - \texttt{samcarter}\\ - \url{https://github.com/samcarter/beamertheme-tcolorbox}\\ - \url{https://www.ctan.org/pkg/beamertheme-tcolorbox} - }{samcarter}} -\date{Version v0.6 \textendash{} 2023/05/03} \begin{document} \maketitle @@ -94,77 +49,81 @@ \section{Introduction} \label{intro} -Over the last decade of answering beamer problems and more recently also being one of the maintainers of the beamer class, I saw countless of requests about beamer blocks. There were users who were looking for sometimes smaller, sometimes larger tweaks to the blocks in their document, for example "How to use the rectangular blocks with sharp corners, but with the shadows from the rounded beamer blocks". Other users encountered various tiny or something bigger problems with the default beamer blocks, like issues with some pdf viewers in which the seams of the underlying colorboxes would become visible. +Over the last decade of answering beamer problems and more recently also being one of the maintainers of the beamer class, I saw countless of requests about beamer blocks. There were users who were looking for sometimes smaller, sometimes larger tweaks to the blocks in their document, for example "How to use the rectangular blocks with sharp corners, but with the shadows from the rounded beamer blocks". Other users encountered various tiny or something bigger problems with the default beamer blocks, like issues with some pdf viewers in which the seams of the underlying colorboxes would become visible. For all these cases, there is now an alternative to the default beamer blocks: The tcolorbox inner beamer theme will replace the usual beamer mechanism to draw blocks with tcolorboxes. The tcolorboxes will automatically adopt the look and feel (round vs.\ sharp corners and shadows) as well as the colours of the normal beamer blocks. -The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}). +The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}). The development version of this package is located at \url{https://github.com/samcarter/beamertheme-tcolorbox}. If you have any problems, ideas or other feedback, please make constructive use of the issue tracker. Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright} \texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}. \section{Usage} -The basic usage is fairly simple. One just needs to load the theme via -\begin{tcolorbox}[title={}] -\begin{lstlisting} +The basic usage is fairly simple. One just needs to load the theme via +\begin{tcolorbox}[lower separated=false,title={Usage}] +\begin{samcode} \useinnertheme{tcolorbox} -\end{lstlisting} +\end{samcode} \end{tcolorbox} -and after that, one can use the normal beamer \lstinline|block| environment as usual. +and after that, one can use the normal beamer \saminline|block| environment as usual. -Behind the scenes, this will replace the default mechanism of puzzling together the block from two separate \lstinline|beamercolorboxes|, with one tcolorbox. +Behind the scenes, this will replace the default mechanism of puzzling together the block from two separate \saminline|beamercolorboxes|, with one tcolorbox. In this simple configuration, the look and feel of the new blocks will be taken from other themes loaded in the presentation. For example if the Madrid theme is loaded, the resulting tcolorbox will have the usual colours, rounded corners and a shadow: \begin{tcblisting}{ + title={Example}, listing and comment, pdf comment, freeze pdf, compilable listing, run pdflatex, + comment style={scale=2} } \documentclass{beamer} \usetheme{Madrid} \useinnertheme{tcolorbox} \begin{document} \begin{frame} -\begin{block}{Title} - Body -\end{block} -\begin{alertblock}{Title} - Body -\end{alertblock} -\begin{exampleblock}{Title} - Body -\end{exampleblock} + \begin{block}{Title} + Body + \end{block} + \begin{alertblock}{Title} + Body + \end{alertblock} + \begin{exampleblock}{Title} + Body + \end{exampleblock} \end{frame} \end{document} \end{tcblisting} -Additional settings done by user, like e.g. \lstinline|\setbeamertemplate{blocks}[rounded]|, won't be taken into account and the \lstinline|tcolorbox| inner theme should be loaded after such modifications. +Additional settings done by user, like e.g. \saminline|\setbeamertemplate{blocks}[rounded]|, won't be taken into account and the \saminline|tcolorbox| inner theme should be loaded after such modifications. \section{Options} In addition to automatically adopting settings from other themes, one can also explicitly influence the look and feel via these options: \begin{description} -\item[blocks] controls if tcolorboxes should be used for beamer blocks (default: \lstinline|true|) -\item[inmargin] controls if the block titles are placed in the left sidebar instead of the top of the block, e.g. for themes like \lstinline|Bergen| (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|inmargin| inner theme is detected) -\item[rounded] controls if corners are rounded or sharp (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|rounded| inner theme is detected) -\item[shaded] controls if there is a short colour gradient between the title and the body (default: \lstinline|false|, but set to \lstinline|true| if the block corners are rounded) -\item[shadow] controls if the block has a shadow (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|shadow| outer theme is detected) -\item[showtitle] controls if a small coloured stripe is shown for blocks with empty title (default: \lstinline|true|, but set to \lstinline|false| if the block has rounded corners) -\item[titlepage] controls if tcolorboxes should be used for the title page, section page etc. (default: \lstinline|true|) +\item[blocks] controls if tcolorboxes should be used for beamer blocks (default: \saminline|true|) +\item[inmargin] controls if the block titles are placed in the left sidebar instead of the top of the block, e.g. for themes like \saminline|Bergen| (default: \saminline|false|, but set to \saminline|true| if the \saminline|inmargin| inner theme is detected) +\item[rounded] controls if corners are rounded or sharp (default: \saminline|false|, but set to \saminline|true| if the \saminline|rounded| inner theme is detected) +\item[shaded] controls if there is a short colour gradient between the title and the body (default: \saminline|false|, but set to \saminline|true| if the block corners are rounded) +\item[shadow] controls if the block has a shadow (default: \saminline|false|, but set to \saminline|true| if the \saminline|shadow| outer theme is detected) +\item[showtitle] controls if a small coloured stripe is shown for blocks with empty title (default: \saminline|true|, but set to \saminline|false| if the block has rounded corners) +\item[titlepage] controls if tcolorboxes should be used for the title page, section page etc. (default: \saminline|true|) \end{description} -These options can be set to \lstinline|true| or \lstinline|false| (calling either option without explicit \lstinline|true| or \lstinline|false| will set it to \lstinline|true|). +These options can be set to \saminline|true| or \saminline|false| (calling either option without explicit \saminline|true| or \saminline|false| will set it to \saminline|true|). -If one for example likes the Antibes theme, but prefers the blocks to have shadows, they can now easily be added: \nopagebreak +If one, for example, likes the Antibes theme, but prefers the blocks to have shadows, they can now easily be added: \nopagebreak \begin{tcblisting}{ + title={Example}, listing and comment, pdf comment, freeze pdf, compilable listing, run pdflatex, + comment style={scale=2} } \documentclass{beamer} \usetheme{Antibes} @@ -173,46 +132,47 @@ If one for example likes the Antibes theme, but prefers the blocks to have shado ]{tcolorbox} \begin{document} \begin{frame} -\begin{block}{Title} - Body -\end{block} -\begin{alertblock}{Title} - Body -\end{alertblock} -\begin{exampleblock}{Title} - Body -\end{exampleblock} + \begin{block}{Title} + Body + \end{block} + \begin{alertblock}{Title} + Body + \end{alertblock} + \begin{exampleblock}{Title} + Body + \end{exampleblock} \end{frame} \end{document} \end{tcblisting} -Beyond these two options, the users also has the myriads of options of the tcolobox package to their disposal, e.g.\ via \lstinline|\tcbset{...}| or \lstinline|\tcbsetforeverylayer{...}|: +Beyond these two options, the users also has the myriads of options of the tcolobox package to their disposal, e.g.\ via \saminline|\tcbset{...}| or \saminline|\tcbsetforeverylayer{...}|: \begin{tcblisting}{ + title={Example}, listing and comment, pdf comment, freeze pdf, compilable listing, run pdflatex, + comment style={scale=2} } \documentclass{beamer} \usetheme{Ilmenau} \useinnertheme{tcolorbox} \tcbsetforeverylayer{ - borderline={1pt}{0pt}{ - black,dashed} + borderline={1pt}{0pt}{black,dashed} } \begin{document} \begin{frame} -\begin{block}{Title} - Body -\end{block} -\begin{alertblock}{Title} - Body -\end{alertblock} -\begin{exampleblock}{Title} - Body -\end{exampleblock} + \begin{block}{Title} + Body + \end{block} + \begin{alertblock}{Title} + Body + \end{alertblock} + \begin{exampleblock}{Title} + Body + \end{exampleblock} \end{frame} \end{document} \end{tcblisting} diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx index 2a60d8894f..14f666ba70 100644 --- a/macros/latex/contrib/easybook/easybook.dtx +++ b/macros/latex/contrib/easybook/easybook.dtx @@ -15,7 +15,7 @@ %<*class> \NeedsTeXFormat{LaTeX2e}[2021/11/15] \RequirePackage{l3keys2e} -\ProvidesExplClass{easybook}{2024/04/26}{2024bb} +\ProvidesExplClass{easybook}{2024/04/28}{2024bc} {Easily typesetting Chinese theses or books} \bool_new:N \l__eb_compile_draft_bool @@ -297,7 +297,7 @@ %<*package> \NeedsTeXFormat{LaTeX2e}[2021/11/15] \RequirePackage{l3keys2e,etoolbox} -\ProvidesExplPackage{easybase}{2024/04/26}{2024bb} +\ProvidesExplPackage{easybase}{2024/04/28}{2024bc} {Easily typesetting Chinese theses or books} \cs_generate_variant:Nn \dim_set:Nn { NV } @@ -1309,25 +1309,43 @@ \skip_if_eq:nnF { \eb@toc@lol@skip } { \c_zero_skip } { \addtocontents{lol}{\protect\addvspace{\skip_use:N \eb@toc@lol@skip}} } } -\cs_new_protected:Npn \NewTitleCommand #1#2 - { - \newcounter{#1} - \cs_set_eq:cN { #1mark } \use_none:n +\cs_new_protected:Npn \eb_title_base_set_eq:nn #1#2 + { + \tl_set_eq:cc { CTEX@#2@beforeskip } { CTEX@#1@beforeskip } + \tl_set_eq:cc { CTEX@#2@afterskip } { CTEX@#1@afterskip } + \bool_set_eq:cc { CTEX@#2@numbering } { CTEX@#1@numbering } + \bool_set_eq:cc { CTEX@#2@fixskip } { CTEX@#1@fixskip } + \bool_set_eq:cc { CTEX@#2@hang } { CTEX@#1@hang } + \bool_set_eq:cc { CTEX@#2@runin } { CTEX@#1@runin } + \cs_set_eq:cc { CTEX@#2@tocline } { CTEX@#1@tocline } + \tl_set_eq:cc { CTEX@#2@break } { CTEX@#1@break } + \tl_set_eq:cc { CTEX@#2@format } { CTEX@#1@format } + \tl_set_eq:cc { CTEX@#2@nameformat } { CTEX@#1@nameformat } + \tl_set_eq:cc { CTEX@#2@numberformat } { CTEX@#1@numberformat } + \tl_set_eq:cc { CTEX@#2@titleformat } { CTEX@#1@titleformat } + \tl_set_eq:cc { CTEX@#2@aftername } { CTEX@#1@aftername } + \tl_set_eq:cc { CTEX@#2@aftertitle } { CTEX@#1@aftertitle } + } +\NewDocumentCommand{\NewTitleCommand}{omm} + { + \newcounter{#2} + \cs_set_eq:cN { #2mark } \use_none:n \tl_clear:N \l__ctex_tmp_tl - \__ctex_initial_heading:n {#1} - \__ctex_def_heading_keys:n {#1} + \__ctex_initial_heading:n {#2} + \__ctex_def_heading_keys:n {#2} \exp_args:No \ctex_define:n { \l__ctex_tmp_tl } - \cs_gset_protected:cpx {#1} + \cs_gset_protected:cpx {#2} { - \exp_not:N \@startsection{#1}{#2} - {\exp_not:c { CTEX@#1@indent }} - {\exp_not:c { CTEX@#1@beforeskip }} - {\exp_not:c { CTEX@#1@afterskip }} - {\exp_not:N \normalfont\exp_not:c { CTEX@#1@format }} + \exp_not:N \@startsection{#2}{#3} + {\exp_not:c { CTEX@#2@indent }} + {\exp_not:c { CTEX@#2@beforeskip }} + {\exp_not:c { CTEX@#2@afterskip }} + {\exp_not:N \normalfont\exp_not:c { CTEX@#2@format }} } - \cs_new:cpn { CTEX@#1@tocline } ##1##2 + \cs_new:cpn { CTEX@#2@tocline } ##1##2 { \CTEXnumberline{##1}##2 } - \exp_args:Nc \providecommand { toclevel@#1 }{#2} + \exp_args:Nc \providecommand { toclevel@#2 }{#3} + \IfValueT{#1}{\eb_title_base_set_eq:nn {#1} {#2}} } \NewDocumentCommand{\NewTitleEntryCommand}{O{toc}m} { @@ -1419,14 +1437,14 @@ \tl_gset:Nn \g__eb_bilist_permute_value_tl {#1} \str_if_eq:nnTF {#1} { mix } { - \eb_preto_cmd:nn { CTEX@addtocline } - { \addtocontents{toc}{\boolfalse{bitoc}} } - \eb_preto_cmd:nn { CTEX@addbitocline } - { \addtocontents{toc}{\booltrue{bitoc}} } + \AddToHook{cmd/CTEX@addtocline/before}[bitoc] + {\addtocontents{toc}{\boolfalse{bitoc}}} + \AddToHook{cmd/CTEX@addbitocline/before}[bitoc] + {\addtocontents{toc}{\booltrue{bitoc}}} } { - \RemoveFromHook{cmd/CTEX@addtocline/before} - \RemoveFromHook{cmd/CTEX@addbitocline/before} + \RemoveFromHook{cmd/CTEX@addtocline/before}[bitoc] + \RemoveFromHook{cmd/CTEX@addbitocline/before}[bitoc] } }, name .tl_set:N = \l__eb_print_index_name_tl, @@ -1716,12 +1734,17 @@ \cs_set:Npn \@starttoc #1 { \group_begin: + \makeatletter \file_if_exist_input:n { \jobname.#1 } \UseHookWithArguments{starttoc/after}{1}{#1} \boolfalse{@nobreak} \group_end: } -\AtEndDocument{\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }} +\AddToHook{enddocument/afterlastpage} + { + \IfHookEmptyTF{starttoc/after}{} + {\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }} + } \cs_set_eq:NN \eb@ctexsetii \ctex_set:nn \cs_new_protected:Npn \SetTocStyle #1#2#3 @@ -2504,7 +2527,7 @@ } % %<*tcolorbox> -\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/26}{2024bb} +\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/28}{2024bc} {Customization of tcolorbox for easybook} \cs_set_protected:Npn \addtotcbstyle #1#2 diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf index b2ead2bd49..e2270fd55d 100644 Binary files a/macros/latex/contrib/easybook/easybook.pdf and b/macros/latex/contrib/easybook/easybook.pdf differ diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex index 5bb0355843..20a5a1233a 100644 --- a/macros/latex/contrib/easybook/easybook.tex +++ b/macros/latex/contrib/easybook/easybook.tex @@ -23,8 +23,8 @@ name = easybook, color-scheme = blue, title = EASYBOOK使用手册, - version = v2024bb, - date = 2024/04/26, + version = v2024bc, + date = 2024/04/28, authors = 瞿毅, info = 简便地排版中文学位论文或书籍, email = toquyi@163.com, @@ -1090,16 +1090,20 @@ \end{commands} \begin{commands} - \command{NewTitleCommand}[\marg{条目名}\marg{章节层次}]\newtagv{2024aw}% - 创建一个命令名为 \meta{条目名} 新章节标题,并且支持 \CTeX 中的标题样式选项机制,默认的标题格式为空。同时创建一个名为 \meta{条目名} 的计数器和标记命令 \code{\textbackslash}\meta{条目名}\code{\textcolor{cs}{mark}}。同时还需指定标题的 \meta{章节层次},例如标准文档类中 \code{chapter} 级别为 \code{0}。 + \command{NewTitleCommand}[\oarg{基础标题}\marg{条目名}\marg{章节层次}]\newtagv{2024aw}% + 创建一个命令名为 \meta{条目名} 新章节标题,并且支持 \CTeX 中的标题样式选项机制。指定可选参数后标题格式除了编号/名字会与 \meta{基础标题} 相同,否则默认为空。同时创建一个名为 \meta{条目名} 的计数器和标记命令 \code{\textbackslash}\meta{条目名}\code{\textcolor{cs}{mark}}。同时还需指定标题的 \meta{章节层次},例如标准文档类中 \code{chapter} 级别为 \code{0}。 \command{NewTitleEntryCommand}[\oarg{扩展名}\marg{条目名}]\newtagv{2024aw}% 创建一个命令 \code{\textbackslash}\meta{条目名}\code{\textcolor{cs}{entry}}\marg{标题},仅将 \meta{标题} 加入文件扩展名为 \meta{扩展名} 的目录中,而不在正文中输出标题,默认扩展名为 \code{toc}。 \begin{ctexexam} - \NewTitleCommand{lchapter}{0} + \NewTitleCommand[chapter]{lchapter}{0} \NewTitleEntryCommand{lchapter} \contentsuse{lchapter}{toc} \RegisterTocName{lchapter} - \ctexset{lchapter/number = \thechapter} + \ctexset + { + lchapter/runin = true, + lchapter/number = \thelchapter + } \lchapter{正常标题} \lchapterentry{加入目录的标题} \end{ctexexam} diff --git a/macros/latex/contrib/fontscale/CHANGELOG.md b/macros/latex/contrib/fontscale/CHANGELOG.md index 304749e825..615f5ef448 100644 --- a/macros/latex/contrib/fontscale/CHANGELOG.md +++ b/macros/latex/contrib/fontscale/CHANGELOG.md @@ -7,6 +7,18 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to ## [Unreleased] +## [v1.2.2] - 2024-04-29 + +### Changed +- Improved package messages when issuing errors and warnings. +- Code improvements. + +### Fixed +- The documentation no longer incorrectly compares `\ScaleFont` with + `\scalefont` from the `scalefnt` package. +- The internal function for the key `reset=preamble` now correctly initializes + to `\prg_do_nothing:`. + ## [v1.2.1] - 2024-04-21 ### Changed diff --git a/macros/latex/contrib/fontscale/fontscale-manual.pdf b/macros/latex/contrib/fontscale/fontscale-manual.pdf index c21ffd29a9..8739ca48ae 100644 Binary files a/macros/latex/contrib/fontscale/fontscale-manual.pdf and b/macros/latex/contrib/fontscale/fontscale-manual.pdf differ diff --git a/macros/latex/contrib/fontscale/fontscale-manual.tex b/macros/latex/contrib/fontscale/fontscale-manual.tex index db839a0fd2..04493d50c2 100644 --- a/macros/latex/contrib/fontscale/fontscale-manual.tex +++ b/macros/latex/contrib/fontscale/fontscale-manual.tex @@ -13,7 +13,7 @@ A user interface for setting document font sizes Oliver Beery -Version 1.2.1\quad{}21 April 2024 +Version 1.2.2\quad{}29 April 2024 \section{Introduction} @@ -285,7 +285,6 @@ For example, \cs{SetFontSize*}\marg{1} and \cs{SetFontSize*}\marg{-1pt} increase \KeepNextPar* Scales the current font size and the current font baselineskip by a factor of \meta{fp expr}. -\cs{ScaleFont} resembles the \cs{scalefont} command provided by the \pkg{scalefnt} package, except that it uses floating point calculations and clears the stretch and shrink components of the font baselineskip. For example, if the current font size and font baselineskip are \qty{10}{pt} and \qty{12}{pt}, using \cs{ScaleFont}\marg{0.8} will reduce them proportionally to \qty{8}{pt} and \qty{9.6}{pt}. \cs{SetFontSizeBaselineskip}\marg{\meta{dim expr}}\marg{\meta{skip expr}} @@ -321,11 +320,12 @@ The default \meta{text} is \enquote{The \texttt{fontscale} package: A user inter \cs{PrintFontSizeCommand} \KeepNextPar* -\cs{PrintFontSizeCommand} tests whether the current font size and font baselineskip match that of any font size command. +\cs{PrintFontSizeCommand} tests whether the current font size and the current font baselineskip match that of any font size command from \cs{tiny} to \cs{Huge}. If so, it prints the name of that font size command. If not, it instead prints \enquote{UNDEFINED\@}. One useful way of printing example text is by using \cs{PrintSampleText}\oarg{\cs{PrintFontSizeCommand}:\textvisiblespace{}\cs{PrintFontParameters}}. +\vfill%manual \subsection {% @@ -336,7 +336,8 @@ One useful way of printing example text is by using \label{subsec:fontscalesetup} \cs{fontscalesetup}\marg{\meta{keyval list}} -\KeepNextPar* +\nopagebreak\newline +\Key{reset}[initial, preamble] Sets and processes the \pkg{fontscale} package keys and uses \cs{normalsize}. \cs{fontscalesetup} can be applied mid\-/document or locally within the current \TeX{} group. @@ -351,7 +352,7 @@ The key \Key{reset}[preamble] sets all the keys to their values at the end of th This section is relevant to \LaTeX3 programmers. -The user commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} are set up to work with \cs{text_purify:n}. +The document commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} are set up to work with \cs{text_purify:n}. \cs{text_purify:n} will correctly remove these commands and their arguments. This includes the starred versions \cs{SetFontStep*}, \cs{SetFontScale*}, and \cs{SetFontSize*}. diff --git a/macros/latex/contrib/fontscale/fontscale.sty b/macros/latex/contrib/fontscale/fontscale.sty index 7aa22fdd73..afeeefa966 100644 --- a/macros/latex/contrib/fontscale/fontscale.sty +++ b/macros/latex/contrib/fontscale/fontscale.sty @@ -8,8 +8,8 @@ \NeedsTeXFormat{LaTeX2e}[2022-06-01] \ProvidesExplPackage {fontscale} - {2024-04-21} - {1.2.1} + {2024-04-29} + {1.2.2} {A user interface for setting document font sizes} % The 2023-10-10 l3kernel update added many 'e'-variants. @@ -25,7 +25,7 @@ \msg_critical:nn { fontscale } { expl3-out-of-date } } -% SOME VARIABLES +% DECLARE FONT PARAMETERS \fp_const:Nn \c_fontscale_tiny_step_fp { -4 } \fp_const:Nn \c_fontscale_scriptsize_step_fp { -3 } @@ -40,41 +40,6 @@ \fp_const:Nn \c_fontscale_normalsize_scale_fp { 1 } -\tl_const:Nn \c__fontscale_names_tl - { - {tiny} {scriptsize} {footnotesize} {small} {normalsize} - {large} {Large} {LARGE} {huge} {Huge} - } -\tl_const:Nn \c__fontscale_names_other_tl - { - {tiny} {scriptsize} {footnotesize} {small} - {large} {Large} {LARGE} {huge} {Huge} - } - -\prop_new:N \l_fontscale_tiny_prop -\prop_new:N \l_fontscale_scriptsize_prop -\prop_new:N \l_fontscale_footnotesize_prop -\prop_new:N \l_fontscale_small_prop -\prop_new:N \l_fontscale_normalsize_prop -\prop_new:N \l_fontscale_large_prop -\prop_new:N \l_fontscale_Large_prop -\prop_new:N \l_fontscale_LARGE_prop -\prop_new:N \l_fontscale_huge_prop -\prop_new:N \l_fontscale_Huge_prop - -\prop_put:Nnn \l_fontscale_tiny_prop { step } { -4 } -\prop_put:Nnn \l_fontscale_scriptsize_prop { step } { -3 } -\prop_put:Nnn \l_fontscale_footnotesize_prop { step } { -2 } -\prop_put:Nnn \l_fontscale_small_prop { step } { -1 } -\prop_put:Nnn \l_fontscale_normalsize_prop { step } { 0 } -\prop_put:Nnn \l_fontscale_large_prop { step } { 1 } -\prop_put:Nnn \l_fontscale_Large_prop { step } { 2 } -\prop_put:Nnn \l_fontscale_LARGE_prop { step } { 3 } -\prop_put:Nnn \l_fontscale_huge_prop { step } { 4 } -\prop_put:Nnn \l_fontscale_Huge_prop { step } { 5 } - -\prop_put:Nnn \l_fontscale_normalsize_prop { scale } { 1 } - \fp_new:N \l_fontscale_tiny_scale_fp \fp_new:N \l_fontscale_scriptsize_scale_fp \fp_new:N \l_fontscale_footnotesize_scale_fp @@ -107,21 +72,41 @@ \skip_new:N \l_fontscale_huge_baselineskip_skip \skip_new:N \l_fontscale_Huge_baselineskip_skip -\str_new:N \l__fontscale_typographic_scale_str +\prop_new:N \l_fontscale_tiny_prop +\prop_new:N \l_fontscale_scriptsize_prop +\prop_new:N \l_fontscale_footnotesize_prop +\prop_new:N \l_fontscale_small_prop +\prop_new:N \l_fontscale_normalsize_prop +\prop_new:N \l_fontscale_large_prop +\prop_new:N \l_fontscale_Large_prop +\prop_new:N \l_fontscale_LARGE_prop +\prop_new:N \l_fontscale_huge_prop +\prop_new:N \l_fontscale_Huge_prop -% Used in floating point expressions for speed. -\fp_new:N \l__fontscale_normalsize_size_fp -\fp_new:N \l__fontscale_musical_notes_fp +\prop_put:Nnn \l_fontscale_tiny_prop { step } { -4 } +\prop_put:Nnn \l_fontscale_scriptsize_prop { step } { -3 } +\prop_put:Nnn \l_fontscale_footnotesize_prop { step } { -2 } +\prop_put:Nnn \l_fontscale_small_prop { step } { -1 } +\prop_put:Nnn \l_fontscale_normalsize_prop { step } { 0 } +\prop_put:Nnn \l_fontscale_large_prop { step } { 1 } +\prop_put:Nnn \l_fontscale_Large_prop { step } { 2 } +\prop_put:Nnn \l_fontscale_LARGE_prop { step } { 3 } +\prop_put:Nnn \l_fontscale_huge_prop { step } { 4 } +\prop_put:Nnn \l_fontscale_Huge_prop { step } { 5 } -% Temporary variables -\tl_new:N \l__fontscale_step_tl -\tl_new:N \l__fontscale_scale_tl -\dim_new:N \l__fontscale_size_dim -\skip_new:N \l__fontscale_baselineskip_skip +\prop_put:Nnn \l_fontscale_normalsize_prop { scale } { 1 } -% INITIAL FONT PARAMETERS +% INITIALIZE FONT PARAMETERS -\fp_set:Nn \l__fontscale_normalsize_size_fp { 10 } +\fp_set:Nn \l_fontscale_tiny_scale_fp { 0.6 } +\fp_set:Nn \l_fontscale_scriptsize_scale_fp { 0.7 } +\fp_set:Nn \l_fontscale_footnotesize_scale_fp { 0.8 } +\fp_set:Nn \l_fontscale_small_scale_fp { 0.9 } +\fp_set:Nn \l_fontscale_large_scale_fp { 1.1 } +\fp_set:Nn \l_fontscale_Large_scale_fp { 1.2 } +\fp_set:Nn \l_fontscale_LARGE_scale_fp { 1.4 } +\fp_set:Nn \l_fontscale_huge_scale_fp { 1.6 } +\fp_set:Nn \l_fontscale_Huge_scale_fp { 1.8 } \dim_set:Nn \l_fontscale_tiny_size_dim { 6pt } \dim_set:Nn \l_fontscale_scriptsize_size_dim { 7pt } @@ -134,16 +119,6 @@ \dim_set:Nn \l_fontscale_huge_size_dim { 16pt } \dim_set:Nn \l_fontscale_Huge_size_dim { 18pt } -\fp_set:Nn \l_fontscale_tiny_scale_fp { 0.6 } -\fp_set:Nn \l_fontscale_scriptsize_scale_fp { 0.7 } -\fp_set:Nn \l_fontscale_footnotesize_scale_fp { 0.8 } -\fp_set:Nn \l_fontscale_small_scale_fp { 0.9 } -\fp_set:Nn \l_fontscale_large_scale_fp { 1.1 } -\fp_set:Nn \l_fontscale_Large_scale_fp { 1.2 } -\fp_set:Nn \l_fontscale_LARGE_scale_fp { 1.4 } -\fp_set:Nn \l_fontscale_huge_scale_fp { 1.6 } -\fp_set:Nn \l_fontscale_Huge_scale_fp { 1.8 } - \skip_set:Nn \l_fontscale_tiny_baselineskip_skip { 7.2pt } \skip_set:Nn \l_fontscale_scriptsize_baselineskip_skip { 8.4pt } \skip_set:Nn \l_fontscale_footnotesize_baselineskip_skip { 9.6pt } @@ -187,21 +162,48 @@ \prop_put:Nnn \l_fontscale_huge_prop { baselineskip } { 19.2pt } \prop_put:Nnn \l_fontscale_Huge_prop { baselineskip } { 21.6pt } +% SOME VARIABLES + +% Used for mapping. +\tl_const:Nn \c__fontscale_names_tl + { + {tiny} {scriptsize} {footnotesize} {small} {normalsize} + {large} {Large} {LARGE} {huge} {Huge} + } +\tl_const:Nn \c__fontscale_names_other_tl + { + {tiny} {scriptsize} {footnotesize} {small} + {large} {Large} {LARGE} {huge} {Huge} + } + +% Used to speed up floating point calculations. +\fp_new:N \l__fontscale_normalsize_size_fp +\fp_set:Nn \l__fontscale_normalsize_size_fp + { \l_fontscale_normalsize_size_dim } +\fp_new:N \l__fontscale_musical_notes_fp + +% Temporary variables +\tl_new:N \l__fontscale_step_tl +\tl_new:N \l__fontscale_scale_tl +\dim_new:N \l__fontscale_size_dim +\skip_new:N \l__fontscale_baselineskip_skip + % SOME HELPER FUNCTIONS -% Sets a dimen or skip variable, supplying a default unit of pt. -\cs_new_protected:Npn \__fontscale_dim_set_with_default_unit:Nn #1#2 +% Sets a dimen/skip variable from a dimen/skip expression, supplying a default +% unit of pt. +\cs_new_protected:Npn \__fontscale_dim_set_with_default_pt:Nn #1#2 { \@defaultunits #1 = \dimexpr #2 pt \relax \relax \@nnil } -\cs_generate_variant:Nn \__fontscale_dim_set_with_default_unit:Nn { c } -\cs_new_protected:Npn \__fontscale_skip_set_with_default_unit:Nn #1#2 +\cs_generate_variant:Nn \__fontscale_dim_set_with_default_pt:Nn { c } +\cs_new_protected:Npn \__fontscale_skip_set_with_default_pt:Nn #1#2 { \@defaultunits #1 = \glueexpr #2 pt \relax \@nnil } -\cs_generate_variant:Nn \__fontscale_skip_set_with_default_unit:Nn { c } +\cs_generate_variant:Nn \__fontscale_skip_set_with_default_pt:Nn { c } % MESSAGES \msg_new:nnn { fontscale } { key-font-scale-ignored } { - Key~ #1 / scale~ + Key~ '#1 / scale'~ \msg_line_context: \c_space_tl ignored.~ Setting~ the~ scale~ and~ size~ keys~ for~ the~ same~ @@ -213,7 +215,8 @@ \msg_line_context: \c_space_tl are~ not~ in~ the~ correct~ order.~ The~ magnitude~ of~ the~ font~ sizes~ should~ be~ ordered~ from~ - \iow_char:N \\tiny~ to~ \iow_char:N \\normalsize~ to~ \iow_char:N \\Huge . + '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~ + '\iow_char:N \\Huge' . } \msg_new:nnn { fontscale } { font-baselineskips-out-of-order } { @@ -221,18 +224,20 @@ \msg_line_context: \c_space_tl are~ not~ in~ the~ correct~ order.~ The~ magnitude~ of~ the~ font~ baselineskips~ should~ be~ ordered~ from~ - \iow_char:N \\tiny~ to~ \iow_char:N \\normalsize~ to~ \iow_char:N \\Huge . + '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~ + '\iow_char:N \\Huge' . } \msg_new:nnn { fontscale } { font-step-out-of-bounds } { The~ font~ step~ \msg_line_context: \c_space_tl must~ be~ an~ integer~ from~ -4~ to~ 5,~ - unless~ the~ choice~ of~ typographic~ scale~ is~ modular~ or~ musical. + unless~ the~ choice~ key~ 'typographic-scale'~ + is~ set~ to~ 'modular'~ or~ 'musical'. } \msg_new:nnn { fontscale } { current-font-step-out-of-bounds } { - \iow_char:N \\SetFontStep*~ + '\iow_char:N \\SetFontStep*'~ \msg_line_context: \c_space_tl could~ not~ calculate~ the~ new~ font~ step~ because~ the~ current~ font~ step~ is~ undefined. @@ -240,6 +245,8 @@ % DEFINE KEYS +\str_new:N \l__fontscale_typographic_scale_str + \keys_define:nn { fontscale } { reset .choices:nn = { initial , preamble } @@ -484,7 +491,7 @@ % Pre-compiles the keys with their values at the end of the preamble. The keys % are pre-compiled by hand for speed. -\cs_new_eq:NN \__fontscale_keys_precompile_preamble: \prg_do_nothing +\cs_new_eq:NN \__fontscale_keys_precompile_preamble: \prg_do_nothing: \AddToHook { begindocument / before } { \__fontscale_keys_precompile_preamble_set: } \cs_new_protected:Npn \__fontscale_keys_precompile_preamble_set: @@ -579,11 +586,12 @@ \cs_new_protected:Npn \__fontscale_keys_process: { \__fontscale_keys_process_normalsize: + \normalsize \__fontscale_keys_process_other: \__fontscale_keys_process_props: \__fontscale_keys_process_check_order: } -% Sets the size and baselineskip of \normalsize and uses \normalsize. +% Sets the size and baselineskip of \normalsize. \cs_new_protected:Npn \__fontscale_keys_process_normalsize: { \quark_if_no_value:NTF \l__fontscale_normalsize_size_tl @@ -601,7 +609,7 @@ } } { - \__fontscale_dim_set_with_default_unit:Nn + \__fontscale_dim_set_with_default_pt:Nn \l_fontscale_normalsize_size_dim { \l__fontscale_normalsize_size_tl } } \fp_set:Nn \l__fontscale_normalsize_size_fp @@ -618,11 +626,10 @@ } } { - \__fontscale_skip_set_with_default_unit:Nn + \__fontscale_skip_set_with_default_pt:Nn \l_fontscale_normalsize_baselineskip_skip { \l__fontscale_normalsize_baselineskip_tl } } - \normalsize } % Sets the size, scale, and baselineskip of the other font size commands. % Issues a warning if the user sets both the scale and size keys for the same @@ -728,7 +735,7 @@ { \quark_if_no_value:cF { l__fontscale_#1_size_tl } { - \__fontscale_dim_set_with_default_unit:cn { l_fontscale_#1_size_dim } + \__fontscale_dim_set_with_default_pt:cn { l_fontscale_#1_size_dim } { \use:c { l__fontscale_#1_size_tl } } \quark_if_no_value:cF { l__fontscale_#1_scale_tl } { \msg_warning:nnn { fontscale } { key-font-scale-ignored } {#1} } @@ -764,7 +771,7 @@ } } { - \__fontscale_skip_set_with_default_unit:cn + \__fontscale_skip_set_with_default_pt:cn { l_fontscale_#1_baselineskip_skip } { \use:c { l__fontscale_#1_baselineskip_tl } } } @@ -834,8 +841,8 @@ \prop_put:Nno \l_fontscale_Huge_prop { baselineskip } { \skip_use:N \l_fontscale_Huge_baselineskip_skip } } -% Issues a warning if the font sizes or font baselineskips are not in the -% correct order. +% Issues a warning if the font sizes or font baselineskips (ignoring the +% stretch and shrink components) are not in the correct order. \cs_new_protected:Npn \__fontscale_keys_process_check_order: { \bool_if:NF \l__fontscale_ignore_order_bool @@ -1094,14 +1101,14 @@ } \cs_new_protected:Npn \__fontscale_set_font_size:n #1 { - \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1} + \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1} \fontsize \l__fontscale_size_dim { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } } \selectfont } \cs_new_protected:Npn \__fontscale_add_font_size:n #1 { - \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1} + \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1} \dim_add:Nn \l__fontscale_size_dim { \f@size pt } \fontsize \l__fontscale_size_dim { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } } @@ -1121,8 +1128,8 @@ { \__fontscale_set_font_size_baselineskip:nn {#1} {#2} } \cs_new_protected:Npn \__fontscale_set_font_size_baselineskip:nn #1#2 { - \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1} - \__fontscale_skip_set_with_default_unit:Nn \l__fontscale_baselineskip_skip + \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1} + \__fontscale_skip_set_with_default_pt:Nn \l__fontscale_baselineskip_skip {#2} \fontsize \l__fontscale_size_dim \l__fontscale_baselineskip_skip \selectfont @@ -1197,70 +1204,72 @@ \NewDocumentCommand \PrintFontSizeCommand { } { \__fontscale_print_name: } \cs_new_protected:Npn \__fontscale_print_name: { - \dim_case:nnF { \f@size pt } + \dim_case:nn { \f@size pt } { { \l_fontscale_tiny_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_tiny_baselineskip_skip } - { \token_to_str:N \tiny } { UNDEFINED \@ } + { \token_to_str:N \tiny \prg_break: } } { \l_fontscale_scriptsize_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_scriptsize_baselineskip_skip } - { \token_to_str:N \scriptsize } { UNDEFINED \@ } + { \token_to_str:N \scriptsize \prg_break: } } { \l_fontscale_footnotesize_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_footnotesize_baselineskip_skip } - { \token_to_str:N \footnotesize } { UNDEFINED \@ } + { \token_to_str:N \footnotesize \prg_break: } } { \l_fontscale_small_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_small_baselineskip_skip } - { \token_to_str:N \small } { UNDEFINED \@ } + { \token_to_str:N \small \prg_break: } } { \l_fontscale_normalsize_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_normalsize_baselineskip_skip } - { \token_to_str:N \normalsize } { UNDEFINED \@ } + { \token_to_str:N \normalsize \prg_break: } } { \l_fontscale_large_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_large_baselineskip_skip } - { \token_to_str:N \large } { UNDEFINED \@ } + { \token_to_str:N \large \prg_break: } } { \l_fontscale_Large_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_Large_baselineskip_skip } - { \token_to_str:N \Large } { UNDEFINED \@ } + { \token_to_str:N \Large \prg_break: } } { \l_fontscale_LARGE_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_LARGE_baselineskip_skip } - { \token_to_str:N \LARGE \@ } { UNDEFINED \@ } + { \token_to_str:N \LARGE \@ \prg_break: } } { \l_fontscale_huge_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_huge_baselineskip_skip } - { \token_to_str:N \huge } { UNDEFINED \@ } + { \token_to_str:N \huge \prg_break: } } { \l_fontscale_Huge_size_dim } { - \skip_if_eq:nnTF { \f@baselineskip } + \skip_if_eq:nnT { \f@baselineskip } { \l_fontscale_Huge_baselineskip_skip } - { \token_to_str:N \Huge } { UNDEFINED \@ } + { \token_to_str:N \Huge \prg_break: } } } - { UNDEFINED \@ } + UNDEFINED \@ + \prg_break: + \prg_break_point: } % TEXT PURIFY diff --git a/macros/latex/contrib/jsonparse/README.md b/macros/latex/contrib/jsonparse/README.md index b8750b8a8f..69258570db 100644 --- a/macros/latex/contrib/jsonparse/README.md +++ b/macros/latex/contrib/jsonparse/README.md @@ -1,4 +1,6 @@ -![Version 0.8.2](https://img.shields.io/badge/version-0.8.2-blue) +![Version 0.8.3](https://img.shields.io/badge/version-0.8.3-blue) + +![Jason, the JSON parsing horse](https://github.com/jasperhabicht/jsonparse/assets/6378801/d6abde3a-fa12-4b63-a213-ad8332e32199) # The `jsonparse` package @@ -42,6 +44,7 @@ Let's assume a file with the name `example.json` is stored in the working direct We can store it in the token variable `\myJSONdata` using the command `\JSONParseFromFile{\myJSONdata}{example.json}`. Calling the command `\JSONParseValue{\myJSONdata}{contactPoint[0].telephone}` would then result in the output `+1 (555) 555-1234` (indices are zero-based per default). -This package including all files is subject to the LPPL 1.3c license. -Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de). +This package including all files is subject to the LPPL 1.3c license. Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de). + +Jason, the JSON parseing horse: Copyright 2024 Hannah Klöber. diff --git a/macros/latex/contrib/jsonparse/jason/jason.pdf b/macros/latex/contrib/jsonparse/jason/jason.pdf new file mode 100644 index 0000000000..324458e684 --- /dev/null +++ b/macros/latex/contrib/jsonparse/jason/jason.pdf @@ -0,0 +1,1662 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + jason + + + + + Adobe Illustrator CS6 (Windows) + 2024-04-28T16:34:40+02:00 + 2024-04-28T16:34:40+02:00 + 2024-04-28T16:34:40+02:00 + + + + 256 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXlf5z+Y7yZ7XyZpU7W9xqCG51a5jNHis1NFUEftSvt8h75hazNwig5elxWbKaflX5 8n1m2k0DW3C+ZdLUCZjsLqAbJcp416P4H50yzTZ+MUebDUYeE2OT0DMlx3Yq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVsssUUbSSuscairOxAAHuThAJ 2CCQBZfO1jqDa3q+s+ZnJb9K3bi1J7WlufSgX/gV3zQ558UiXc4ocMQF+oWNy9xbajptwbLWrBvU sb1eqk7Mjj9pHGzA5CEzE2GcoiQoplb/AJzebrudrC7EOmapEPjgSMFXH88RkMnJT+Gdp2R+V1Ma P953X93L9jxva8tVpzYI8M9QOXv5/tbl88ebJa8tTlFf5OKf8RAzfx7PwD+EOgl2jnP8ZUv8XeZ/ +rpc/wDIxv65P8lh/mR+TD89n/ny+ba+b/NCkEapcVHjISPuOA6HD/MCjX5/58vmioPzC83wkUvy 48JEjb8StfxyuXZmA/w/e2x7U1A/i+5NrT82tejIFzb29wvcgNG33gkf8LmLPsXEeRIcqHbmUcwC n9h+bejSkLe2s1qT1ZSJUHz+y3/C5hZexMg+kg/Y5+LtzGfqBj9rKdM8xaHqYH1G9imcivpg8ZP+ Aajfhmty6XJj+qJDs8OrxZPpkD+O5Mcx3IdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVQmp6tp2mW5uL+4S3i7FjuT4Ko3Y/LLcWGeQ1EWWrNnhjFzNBgGufm0x5RaNb0HT6zcCp+axg/ rP0ZvNP2L1yH4D9bodT250xj4n9TzrzX5i1e8029ub67knaOGRkDNRQ3E04qPhXfwGZ+oxwwYJmA AqJ+51+nyZM+eAmTK5D70LoWr6DZ6LY2z6jaxyRQRh0aaMEMVBaoLeOeWkPp6dW93a3K8reZJl/m jYMPvBOBWLfmT6cWk2t2D6dzFdIIZ1HxqCrFqH/Y9Mtw5JQkJRNEMMkIziYyFgrtE1Z7tWtroBb+ BVMgX7MiMKpNH4q439s9G7I7UGqhR/vI8/1/jk+ddr9lnSzsf3cuX6vxzTXNw6d2KuxV2KuxVsEg gg0I3BGKWR6N+YPmTTOKev8AW7cf7puKvt7P9sffTNfn7Mw5OnCfJ2Gn7UzY+vEPN6DoP5kaFqZS G4JsLptuEpHpk/5Mmw/4KmaLU9lZce49UfL9Tv8ATdrYsmx9MvPl82WAgio6ZrHaOxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuJCgsxoBuSegGKsC80fmfa2he00YLc3AqGujvEp/yR+38+nzzd6Ps iUvVk2Hd1/Y6PWdsxj6ce57+n7Xmmoajfahctc3s7zzN1dzWg8AOgHsM6HFijjFRFB5vLllkNyNl j2v+YU01RFDGbi9cVSIAkKDtzfjU0/Xmt7T7TGnFRHHkPT9Jdl2Z2YdQbkeDGOv6AgtNHla+kB1v Uzd3p39Cf1LaBD4IjBAfmTvnlna/aPaGWXrEgO79nT8bvp3Zeg0OKPoonv8A2srXy75fCgLptrxA 2/cxn8aZzJ1WX+dL5l34wY/5o+SDu/JehysZrWNtOux9i4tGMRU/6o+Gn0Zfi7Ryw68Q82nJoscu le5Jbi31281jTtC1eMXMFvL9bN8ook0MakAOvQNybifn9J2uTXRlgM47S5V5uBDSSGURO45pfqFt PotylqTS4sS0uj3DdJ7UkmS1c/zLX4fw6jNn2R2mYyjlj9UeY/HQuv7U7OjOJxy+mXI/juZXaXMN 1bRXMJ5RSqHQ+xGet4csckBOPKQt8mzYpY5mEucTSrlrU7FXYq7FXYq7FXYqyPy3561nRCsQf61Y jrayk0A/yG3Kfq9swNX2djzb8pd/63Y6TtLJh25x7v1dz1fy/wCaNI12DnZy0mUVltn2kT5juPcZ zGp0eTCakNu/o9Rpdbjzi4nfu6pvmK5bsVdirsVdirsVdirsVdirsVdirsVQ+oajZ6faSXd5KsNv GKs7fgAO5PYZZixSyS4Yiy15csccTKRoB5D5u8+32tu1tbcrbTK0EVfjk95CP+I9PnnU6Hs2OHc7 z+73PJ67tOWb0x2h9/vYpmzdW7FXYql/mC1iuNGvEdFcrDI0fIA0YKSCK9N8we0sUZ6eYIv0mvfT ndm5ZQ1ECDXqF+60Dot3c+X7bT3nlafQNQiiKyyGrWs0ig8Sf99k/d+vxrX6IZAZRHrH2/tfYNHq jA8Mvp+5muc47p2KoTVdJsNVs2tL2P1Ijup6MrDoynsRluHNLHLiid2vJijMUUgtvKetafD9W0/V V+qqSYop4AzKCa05qwr18M6zRe2WowQEABQeZ1nspp88zMk8RXSQecLUcmgtdQjHVYGaGSnykqv4 5u9L7e2ayQ/R+v7nTan2HFfu5H7/ANTen61aXkrW5V7a9T+8tJ14SD3APUe4ztuzu18GrF4zv3PG 9odkZ9IfWNu/omGbR1jsVQF/rVnZyrb/ABXF4/8Ad2kC85T9A6D55rtd2ph031n1dw5/s+LstD2X m1P0D0955ft+CyO08231GpBpMJ6c/wDSJ6eNBxQfKuctqfajLLbGBEfM/q+x6jTezGGP94TI/Ifr +1XHlKeTe61m9du/oskC/cqnNTk7Z1Uuc5fDb7qdrj7I0seWOPx3+9d/g237anqQPj9Zb+Iyr+U9 T/qk/wDTH9bb/J2n/wBTh/pR+pKrN9asvMwi0PWLsR2BBu7uUxyFXP8AupDxFTT7Wb3sier1UiDM +GPquj8N+v3Ok7WjpNLEEQHiH6asfHbp973vyZ+YVvqvCx1IrBqJ2jk+zHMfb+V/bv28Mz9f2Ycf qhvD7v2OF2f2qMvpntP7/wBrNM1DuHYq7FXYq7FXYq7FXYq7FXYqhNV1Wx0uxkvb2QRwRj6WPZVH cnLcOGWSQjEbtWbNHFEykdninmnzVfa/emSUmO0jP+j2wPwqPE+LHuc6/R6OOCND6upeN1utlnlZ +noEkzMcJ2KqdzcwW0DzzuI4YxV3bYDK8uWOOJlI1ENmLFLJIRiLkUtgl13WRy06MWFg3S/uF5SO PGKLw92zge1/baOMmGAb9/45fb7g912V7GmQEs5+H45/Z70YnkjSpBXUZbjUZDuTPK4Wv+SiFQB7 Zwmq7f1WY3KR/Hve103Y2mwioxCjffl5oM1q8VmJLGRx9uOR2U+AdHZgRX5ZRi7VyxPq9Qciegxk bbJr5bhv4NEtYL//AHqgDROetRG5VDXvVADmLqpROQmP0lvwCQgBLmEyzHbnYq7FXYqlut6DaarA A9YrqPe2u02kjbsQfDxGZej1uTTzEoFxtVpYZoGMxaU6LfXE8c1teALqFk/o3QHRiPsyD2cb57l2 H2oNZgE/4hz/AF/jrb4z232YdHnMf4Ty/V+OlKd9eX13ffojSSBc0DXd0RVbeM9D7uewzE7b7a8D 93j/ALzqe79rl9idjeP+8yf3fQfzv2J3o+hafpURW3QtM+89zJ8Usjdyzfw6ZwU5mRsmy93GIiKA oJjkUuxVCatfLYaZdXjdIImcA92A+EfSdsIVIvL9m1rpMCybzyj1rhj1MknxMT770z1HsrTDDp4x 61Z95fMO1dSc2olLpdD3BMQSDUbEdDmxde9Q8hef/rJj0rV5P9I+za3bn7fgjn+bwPf59ec7S7N4 fXjG3UPSdmdp8X7vId+h/W9BzRO/dirsVdirsVdirsVdiqld3VvaW0tzcOI4IVLyOegAyUIGRAHM sZzEYmR2AeI+b/NVzr+oF947GEkWsHgO7N/lN+HTOw0OjGCFfxHmXjNfrTnnf8I5BIcznAdirsVS q2tV1rX5FnHPTdKK/uj9mS5YV+Idwg7eOeYe2vbEuPwIHYc/x9nzfSvY/sqIx+NIby+78b/Jlmec PfOxV2KuxV2KuxV2KuxV2KsM803L6Rr6XkKF5NStjDHCN+dxG6iM/dIBnbeyXap08cnu29/T9LyP tP2WNSYf1t/d1/QyDy9o40vT1jc+peTEy3k/d5W3Y18B0GOTIZyMpGyWzHjEIiMRQCZ5Bk7FXYqx vzfJ9ZksNGXf65KJbkf8UQfGwP8ArNQDNj2VpfH1EY9L39w5uB2pqvA08p9a2955I3PUny52KuxV 61+XvnU6lGNK1CSuoRL+5lY7zIOx/wAtR9438c5jtPs/wzxw+k/Z+x6rsrtDxBwT+scvP9rN80zu nYq7FXYq7FXYq7FXk/5lebTf3Z0izf8A0O2b/SGHSSUdv9VP1/RnT9k6Lgj4kvqPLyH7Xlu19dxy 8OP0jn5n9jBs3LpHYq7FXYqhPJskEPlw6hO6xpdTT3U0jkACshFST/kqM+f+2cpzauRG5J+/f9L7 t2XiGLTRHKh92yHufNl9dI8mkQRxWMYJfUr3ksZA6mNBRm+Zzb9m+yeXNDxMh4Mfefx93zdX2h7T YsM/DgOPJ3D8fjuS/TR551pjNHqZttNY/u7gwJGzjxjT7XHwLMMwdZHR4JGMB4hHw/T+O4OdpZar NESn6L+P6GV6TplxYpIJ76e+kkIJaYii0FPhAG1e+abNlE+URH3OzxYzHmSUflLa7FXYq7FXYq4k KCSaAbknpTFWNaaP09rf6YcV02w5RaZXpJIdpJvltRf650+h03hQ3+qXP9TodXn8SW3IMlzMcV2K uxVpmVVLMQFAqSdgAMVYFaazJe6ze6rFYXd4slLeyaKL92IEO55sVHxtvTN32T2vpdFxSyH1nbps Pn1dN2t2VqdZwxx0IDfe9z8uiaC/19h+70KY9/jlhTb6Tmyl7c6Ucgfx8HWR9itQech+Pi02ranF vPol4B/xUEl/BWy7H7a6OXOx8v0005PY3VDkYn5/tWf4p0lGC3Rls3O3G4ikj3+ZFPxza4PaLR5O U/x8NnWZvZ7WY+cL+P4KZ6drNs08dxp94jTRMHjeJ1LKy7g7HNlDPhzCoyjIHzdbPBmwm5RlEjye 8+UPMsWvaStxst3FRLuIdnp9of5LdR93bOU12kOGdfwnk9doNWM+O/4hzTzMNzXYq7FXYq7FWMef /Mv6F0cpA1L+8rHBTqo/bk+gdPfNj2bpPFyWfpjz/U63tPWeDjofVLl+t4rnXvGuxV2KuxV2KsP8 tRXGr6ba21yCuk6fVTAf93z8i1X/AMlOXTxzzz2e7Bhlyyz5BYvb8ff8u99C9oO3JYsccOM1Ijn3 D8cvn3JzLbLrGtx6Uf8AjnWKrPfIOjsf7qI07bciMl7a9rnFEYIGu/8AHl+kNfsf2WMhOeYvu/Hn +gsuVVVQqgBQKADYADPKn0p2KuxV2KuxV2KrJpoYImlmdY4kFXkchVA8SThjEk0OaCQBZY3Pc3Hm d2tLIvDoYNLu++y09OscNf2f5m/zO+0PZ/B65/V0Hc6nV6zi9MeTI4IIbeFIIUEcUahY0XYBRsAM 2jrlTFXYq7FWL+YdQm1W6PlvS3/eSf8AHTuh0hhr8S7dWbpT6PlVnzjFDiPwbcOE5JUGR2lrBaWs VrbrwhhUJGvgFFM5OczImR5l6GMREUFXIsnYq5lVgVYAqeoO4xBVher6bpl/5lhtLe0hjjsAJ76a NFVmkbeOIkAf6xzvfY7s+eoyccyTjj+B9v3F4v2s7Qjp8fBChOW36/x5s48oeYpNC1mO5JJtZP3d 2g7xnvTxXqM9N12lGbGR/F0fONBqzhyCX8PV7pHIkkayRsGRwGRhuCCKgjOMIINF7YEEWF2BLsVd irTMqqWYgKBUk7AAYgKS8J83682t65PdAk2yH0rVfCNTsf8AZfa+nO00Om8HGI9evveI1+p8bKZd OnuSXMxwnYq7FXYq7FUlndtMt4NJ0xBLqFyX+rp0C8mLNK/+Stc0Gv1kNBgEI/Wbr4nm7/Q6Oevz mc/oFX8ByRPkKx+r22pSO5mmkvZUec9XEXw8vpbkfpzx/trNKebc2av4l9X7LxRhioCh+gMivL6z soGuLuZIIV6u5oPl7nNXjxymaiLLsJzERZNJH/iDWNRFdFsONuRUahfExREeKxj42Hvm2w9k9Zn4 B12XtH+aPmluka9NHZQ6prF5Lc3V2W+oaXbLQlQSoPppQtWn7Rp9ODLpeKZx4o7DnI/j7mWPUVHj yHnyCai585XnxQ2trp0R6C5ZppafKOij6Tl+PsmA+ok+7Zpn2jI8gAu+qec16ahZvXqGgYU+VGyw 9mYfP5tf5/J5NGw84y7PqtvbjxhtuZ/5KNko9m4R0J+KDrsp7nR+UbSWRZtVuZ9UlU1VbhqQg/5M S0X765l48UIfSAHHnllP6jaeqqooVQFVRRVGwAHhk2tvFXYq4kAVOwHU4qxDVfNUl/fxaLokyxNc MY31R/sDiKssPZ33/p4iGbJ4cDIi6bMWPjkI8mQaLoljpFp9XtVJLHlNM27yP3ZjnLajUSyyuTv8 OGOMUEflDa7FXYqoaheRWVjPeS/3cEbSMPHiK0+nJ4sZnIRHVjOYjEk9GN+XbaWPTxcXG93fMbq5 J68pNwP9itBTPe+wtCNNpYxrc7n8e58R7d1p1GplLoNh+Pemmbh071r8rdfN7pb6ZM1Z7GnpE9Wh bp/wB2+VM5ftjTcE+Mcpfe9V2NquOHAecfu/YzfNO7p2KuxVi35j60dN8uyRRtS4vj6CU6hSKyH/ AIHb6c2XZWn8TKCeUd/1Os7W1Hh4SBzlt+t4vnXPHOxV2KuxV2KqF9ewWVnLdTmkUSlm8T4Ae5O2 U6jPHDjM5cot+nwSzZBCPOTvK+lTxpJqt+tNSv6Myn/dUXVIh/HPLdbq5ajIZy6/in1DR6WODGIR 5D7fNC6JqVtpmkavPcmiWd/cqwHVmLgqFHi3IUzmNfhlPOIjqA9Bo8ojhJPQq+maJNfSpq2uqJbt vitrJt4rZT0AU7F/EnNtgwRxRqPz73W5s0shssgdQ6Mh6MCD9OXNSQ+VPLEWj2avPSXUXULLMdyq jpGh7KPbrhPkqf4FdirsVdirsVdirTEhSQCxAqFHU+2+KscOm61rrctWJsNM7abE37yQf8XyDt/k rkrpUyv9A0670waeIxBFHQ2zRDiYnH2XSnQg5FVHy5qdzcRTWF/Qapp7CK58HBFUlHs4zmtfpfCn t9J5fqd7pM/iR3+oJxmC5bsVdiqQediX0iK1/Zvbq3t3/wBVnBP/ABHNx2BgGXVwie/79v0ur7Zz HHpZyHQH7BaIz358MdihN/KmsnR9etbwmkIb07geMT7N93X6Mxdbg8XEY9envcvRajwsol06+570 CCKjpnEvcuxV2KvH/wA0dV+t+YhaKaxWMYSnb1H+Nz93EfRnVdj4eHFxdZPJds5uLNw9Ihh2bZ1D sVdirsVdiqU3MP6T8wWmmkVtbRfrl4OzEHjEh/2W9M472o1n04R7z+j8e57H2X0e0sx/qj9LLc41 69hc2lzyeePqbiumysuqFOxkiX0t/wDZkEjBwC+LrVMuM1w9ObNMLF2KuxV2KuxV2KuxV2KuxV2K uxV2Kse18fo3VrDXE+GLkLPUO1YpT8Dn/UfMbWYfExEdRuHI0uXgmD0ZDnKvQOxV2KpZ5j0uXUtM aG3YJdROk9qzdBLGeS1+fTM3s/VnT5o5B0Li63TDPilA9QlOna3bXTG3mH1XUI/hms5fhcN/k1+0 PAjPc+ze2MGrgDEji7v1d74v2l2Pm0syJAmPf+vuTLNs6l2KvcfIeqnUvLFpIxrNADbyn3j2H3px Ocb2jh8PMR0O/wA3tezc3iYYnqNvkyDMFz1ssiRRvI5oiKWY+AAqcIFmggmhZfPGoXkl7f3F5J9u 4keVvYuxNPxzu8UBCIiOgeAy5DORkeptD5Y1uxV2KuxVD6hf2thavdXL8I0+8nsqjuTlGp1MMMDO ZoByNNpp5piEBZK7yrp1zFDcajep6d9qLiR4j1jjUUjjPuB1zy7W6o58ssh6vp+j0scGKOMdE9zE clYYYjMs5UGZFZFfuFcgsPpKjFV+KuxV2KoG71J47yDTrK1l1HVrr/eewtxVyP52J2RB3Y5OEDI0 ESkALKdRfl7+bE0Pr/V9Ita7/VZridpR7Fo42jr9OZY0MnGOrik09xq2lalHpXmPTn0q+m/3lcsJ baen++pl2Lf5J3GY2TDKHNvhkjLkjcqZuxV2KuxV2KuxVCatp8eo6bc2Un2Z42QE9iR8LfQd8IVC +V9QkvtFgeaouoa290p6iWI8Wr7mlc5XW4fDykdOYeg0uTjxgprmK5DsVdiqC1PRdL1OMJfWyTgb KxFGX/VYUYfQcuxaieM3E015MMZ/ULSo+TvS/wB4NUvLYdo2cTRj5K4/jm+03tVrMWwlf4+IdLqP ZvSZdzAfj3btf4f8yJ9jWkk9pLVR+KsP1Zs4e3WqHMA/L9TrZ+xmkPKx8/1vSvyYfV7S41DTdQu4 7pJUW5gEcfp8ChCSd2ry5r92Z2j7fnr5kTFGIcfP2JDRRHATUi9TzYuGknna8Np5V1KUGhaIxA/8 ZSI/+NszOz4cWeI87+W7hdo5OHBI+VfPZ4TnaPEOxV2KuxVAanq8FkUiVGuL2ba3tI93c/wX3Oa7 tDtPFpY3LeXQdf7HY9n9mZdVKo7R6np/aqaV5cuJLlNS1tlmu03t7Rd4YK+H8z/5Wee6/tHJqZXM 7dB0D6DoOz8emjwwG/U9SyLNe5zsVdirsVdirsVZL+TVtp1l5Z1rzle0Nzdz3Lzz05NFaWRKrEPY cCxp128M2+jgBC3XaqRMqeff9Dd336br+gIv0HzoU9Vvrfp1pz5f3fKm/Hj7cu+S/Mb8l/Lbc93t HnjTNL82/l5dv1ins/r+nXDCjRyLF6sMg7qfGnaoy3LESgWnHIxk8m0S7kvNHsrqT+8mhjd/9YqK /jmiLt0bgV2KuxV2KuxV2KsfsP8Acf5rvbLpBqUYvYB29VfglA9zs2antbFcRPu2dl2dkomLIM0T tnYq7FXYq7FXYqt8kao8v5r2MMbkWtjDJFcEdDNcoeKnxoFBzt/Zfs+Rx5M3cP0/2vJe0WujHJjx dSf0f2PfM37qGG/mtcen5YWMH+/uY0I9grP/AMa5tuxo3mvuiXUdtyrDXfIPIM6p5J2KuxVK9Q1S c3I0zS4xcam4qQf7uFD/ALslP8O+aPtbtmOmHDHfJ93v/U7zsnsaWpPFLbH9/u/Wm2ieX7fTQ8zu bnUZt7i8cfE3so/ZX2Gee5s88sjKZsl9Aw4YY4iMBUQmuVNjsVdirsVdirsVdiqp5P8ANll5RuNR 0fX4y/lPWZHmjugpkS3lnHGaKcCp9KTsR0++mfpdQIjhlycTUYTLcc0vg/5xv/LC7vzqlt5q9TQS /qC1jkgYBCa8PrPI7dqla+9d8yhiid72aDmkNq3ZR5+/MLSbvR5PJnkuRLl5ohZ3V9b/ABWlpace Dqsg+F3KfCoX79sr1GpiI8IZYMBJssetbeK2toraEUihRY4x4KooP1ZqnYKuKuxV2KuxV2KuxVIP Noa3istYQHlpk6vJTr6En7uUfcRlebF4kDHvDZiycExLuT9WVlDKaqRUEdCDnIEPSOxV2KuxV2Kp JrXmWK0kNjYr9b1ZxRLdN1j/AMuVv2VGbbsvsjNq5iMRt+Pxbre0e08WlgZTP4/HRV8lWp0nUrCR 39W5N3HcXc3d5GkBc/LtntOk7NjptIcUf5pv30+QartKWp1Yyn+cK91vpDOWetYD+b7kaXYJXZp2 NPklP45vOwx65e50Xbp9ER5vLM6R5h2KpTeX95dXZ0vRwHu/+Pq6O8dup7t4v4LnOds9tjAPDx75 P9z+16PsbsQ5/wB5k2x/7r9ie6NotnpNsYYKvI55z3D7ySOerMc4GczI2dy95GIiKGwTDIpdirsV dirsVdirsVdirTKrKVYAqRQg7gg4qlcnlXy3JJ6jabb8vZAB9woMNlUxgt7e3iEVvEkMS/ZjjUKo +QFBgVUxV2KuxV2KuxV2KuxVRvLWK7tJrWXeOdGjf5MKHFUr8oXUs2ix285/0qwZrO4H+VCeI+9a HOZ7QxcGU9x3d9o8nFjHlsnWYTlOxVSu5Zord5IYWuJVFVhUqpY+FWIAyUIgmiaDGRIGwtg175g1 W8umttWmfy/ak0WJUYPIP+YgjiPozsuw+ytDkleXJ+PuHxeW7Z7S1mONYsf4+8/BOtKsdMtbYDT1 T0n3MqHmXPiX35Z6totNhxQrEBw943v4vl2t1ObLO8pPF3Havgj0co6uOqkEV9t8yyLDiA0X0fnA Pobzz84VP1XTGpsJJQT7kL/TN92H9Uvg6Dt4emHxeY50TzSUXN5d6jePpOktxkTa9vuqQKeoXxkP Yf5jmO2u3BivHiPr6nu/b93ven7G7DOWsuUejoO/9n3+5kOk6RZaVZra2ikKDyd23d2PVnPcnOEJ JNl7kCuSNwK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWP2/8AoHnC4g6QatCJ 4/D1oPhcD5oQxzV9q4rgJd36XY9n5KkY97IM0Dt3Yq7FVssUUqGOVFkRtmRgCD8wcIJBsIIB5pHc eTNJMhmsWl02c7l7Vyin5xmqU+jNro+3NTpzcZH8fjq67Vdk6fOKnEIR7HzbY7qYdWhH/RvP/GM5 2Og9u5DbNG/x5fqeT1vsTA74jw/jz/W+o8z2l5Z+fWtJY6XpdtBxl1S6ncWtsT1UJ8cjU34ptXMj D2l+VEiBciNnG1HZv5oxBNRB3eOfou+mHO71S6Mp+0IH9GMfJVGajL2tqZmzOXwNfc7TF2TpoChC PxF/eifLEsmjanHoxb1LK9DyWzlQJFlQcmV2UDlVe5zXS33dgNmZ5BLsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdiqQ+b0aGzt9WiBM2lzrOadTEx4Sr9Kn8Mhlx8cDHvDZjnwSEu 5PUdHRXQhkYBlYdCDuDnIEVs9IDbeBXYq7FXYqlmq64lpcQWFtGbrVbtgtvaKd/iNObn9lRmy7N7 MyaqfDEbODr9fj00OKRfRueiPEvmjzbrTeYvPWr6sW52tnIdN00VqoitzSR1/wCMklWrmn1OTimX a6eHDFBZjt6Bv3EN/pNzWgjvI0Y+CygoT+OKs4yCpfqGv6Lp1ReXkcTj/ddeT/8AALVvwwgKlT+d Y5NrDTbq6HaRlEMZ+TOa/hh4VUv8U+YftfoeML/Ibkcvv4Ux4VTDR/NFtf3H1KeF7K/pyFvKQQ4H UxuNmpgIVOsCuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSubeK5tpbeUVimRo3HirChxVKf J9xK2kCznNbrTZGs5v8AnkaIfkUpnNdo4uDKe6W7vdFk4sY8tk7zBct2KuxVLfMGsjS7H1ET1buZ hFZwd3kbp9A6nMzQaKepyjHHq4us1UcGMzkdgs8haCV8xWL3DfWNRu7mJ724PcBgzKvgqgbDPa9H 2Xj0OlkIj1cO5/HT73yDVdp5Ndqok/RxbD9Pve7+ctaGh+VNW1atHs7WWWL3kCn0x9L0Gc3klwxJ eohG5APmfSLY2+mW0R+2EDOT15t8Tfic0RdyjMVUbu0gu7d7edeUbihHQ7bgj3BxVDNp17KgiutV u5oVFBHzCAgdnKgFsVVLTStOtN7e3RG/npVv+CNTjarrrUbC0oLmdIidwrMAT9HXFV9td2t0nO3l SVRsShBofemKqOqWH1u3+AmO6hPqWsw2ZJF3BB/XirJtA1JtT0a0vmHGSZP3gHQOpKvT/ZKciQqY YFdirsVdirsVdirsVdirsVSW4uZ5PNtpaRyOsMFpLcTxgkKxkYRpyA2NKEiuHoqdYFdirsVdirsV dirH4/8AQPOMidINYgEi+Hr2+zAfOM1zWdq4uLGJfzT97sOz8lTMe9kGc+7h2KuxVicb/pXzFc3z b22nE2lkOxk/3dJ9/wAOeq+xHZYjA55Dfp+Pd95fNfbPtMmQwRO3X8e/7g9B/LGyNx5qilpVbWKS U/SPTH4vnW9r5OHAR/OIH6Xlux8fFnB/mgn9H6U2/P3WY4vK9r5fRgbnXLqNHj/a+rW7CaV/kCqD 6c4jWTqFd73Glhcr7nlWap2bsVdirsVSLzN5h/R0Yt7cg3kgrXqEXxPv4YQEMFJuLmepLTTyH3Zm J/HJIZ55W0aXTrR2n2nuCpdP5QtaD5775ElKd4Eqvki6SOyl0eT4bqwkclT+3HK5dZF9vipgkoZL kVdirsVdirsVdirsVdirsVY/5ZP1291PWjvHdSiC0PYw2/w8h7M1ThKsgwK7FXYq7FXYq7FUi84R OmnRalCKz6XMl0oHUoppIvyKHfI5MYnExPUM8c+GQPcncUscsSSxnlHIoZGHQhhUHOPIINF6QGxa 7AlxBIIBofHFWLQ+U9X0+L09M1UGIFmEFzCrAljU1kWjZ1+g9sNRp4iAA4B0/G/2vL672W0+okZm +M9fxt9j1j8lNP1aO01K81SGFJWkSCGSByysqDkxAYBl+2OudTDts6/EJcPDRPxeeHY0dDkIEuKw Pg8r1rXp/NPme/8AMUzcrcu1rpMf7MdpE5UEe8jAs2aPPk45O8w4+GNKWUtrsVdirsVSabypplxc vcXDSzSSHk3JwB8vhA2HTDaKR1jpOnWI/wBFgWNj1fcsf9kanBaUXiqgl7bPdPapIGnjXk6jegrT c9K+2KoXUZTp95aazGeJtnEdzT9qCQhWB+VajFWd5BXYq7FXYq7FXYq7FXYqx/zBqE93KNB0x/8A TLgUu5l3FvAftMxHRmGyjJDvVOrO0gs7SK1gXjDCgRB7AU3yKq2KuxV2KuxV2KuxVZNDHNDJDKvK ORSjqehVhQjFUl8nTSDTH06Y1uNLme0cnqVQ1jb5FCKZznaeLhyk9Jbu80OTix13bJ7mvcx2KuxA V7P5Z0w6bodpasKShOc21Dzf4mB+VafRnpeh0/g4Yw7hv7+v2vB6vN4uWU+8/Z0fMWn2cumPd6Lc KUutKuJbaZD1orko3yZdwe+a3JGiQ7KErFozIMnYqhrvUbK04ieUK7UCRirOxOwoq1Y4gKmen+W/ PWqIJNN8s3jxNusl0Y7NSPEeuykj6Mvjp5no0yzwHVHv+Xn5nojO+gwIiglna/gCgDqT7DJflJsf zUGPWen+ctV1VtM0KyttTnibhcXFrK01rEf8u4okP/AuciMBJobszmAFnZDeadF1O0vxoqa3Hean GaamthGVtbU/yG4Y85H/AMkKKdz1AGTGIbXZXHMy3qgrabplrp9uIYF3O8kh+07eLHKW1Q8yEDRL uu9VAA9ywA/HCFZzCpWJFb7SqAfmBlar8VdirsVdiqBu9c0e0r9ZvYImXYq0i8q/6ta4aVLj5xs5 9tMtLrUmOwaGJljr7yScQMeFbWtD5u1McZXi0a2bqsR9e5I7jnsi/MYdlTTStHsdLtzDaIQXPKWV zykkb+Z2O5OAlUbgV2KuxV2KuxV2KuxV2Ksfb/cf5xVukGswcD/zEW+4r84zTNd2pi4sfF/N+4ud oMlTrvZBnOu6diqe+TNI/SWuwq4rBb/v5vAhD8I38WoPlm47E0ni5wT9MN/1fa6ztbU+HhIHOW36 3rud88cwXz7+U+l+aLoapa3L6TrqqEN7EodJVX7KzxEjnQbA1BHvQZj5tOJ79W/FnMNujwHUpfMG l32q2c0dtdDSZ5beaeNmjDNCKswVq5qpw4TTsoS4hadeSfLmo+bL/wDR+oatB5dnKpKti8b/AF6a GRQ6SQiUJGVdTsVJI8MuxafiO5pqy5+EbC3t/l7yH5E8j2rXsccUMyitxrN/IrTHxLTSUCV8FoM2 MMUIBwJ5JTQNx+aialM9n5I0ufzJdqeL3aD6vp8Td/UuZAASOtEBr2OA5r2iL+5Iw19RpSl/L/VN cQ3v5h619ZtY/wB62iWLNa6ZGq7/AL1iRLNx68nYUweEZbzPw6J8QD6B+thPm/8AM5by3by15BRd N0OCsVxq9ugiDDo0dmoAoPGT7vE42bUgemDkYtOT6pMNs7O2s4Fgt0CRr95Pck9zmA5qtiqBuIv0 hq9hpafEPUF1d+AhiNaH/XagxVnGQVK9R8z6Jp7+lPchrjoLeIGSSvhxWtPpyUYGRoCyiUhEWTQS 9/Mus3H/ABz9IdEPSa8cRf8AJMcmzb4OwdVk/h4R57ft+x1Oft3S4/4uI+W/7PtUmHm25/vtRhsx 3S1h5f8ADykn8M2+H2UP8cx8Bf6vudTm9qo/wQPxNfr+9Sfy5FP/AL3Xt3eg9UlmYJ9CpxzZ4vZv TR58Uvef1U6zL7SamXLhj7h+u1Py9pel2HmO7sTaxFZolubJ3QMyhTwkQMwJ60NM5bt3RDT56jtC QsPUdia06jBcjc4mizIAAUHTNK7h2KuxV2KuxV2KuxV2KuxV2KuxVJPN1tK+kG7gFbrTnW8g+cRq w+lK4JQEgYnkWUZGJBHRNrS5iurWG5iNYp0WRD7MKjOPnAxkQeYekjISAI6quRZPWPI+hnTNHEkq 8bq8pLKDsVWnwIfkDX5nPQeyNF4GEX9Utz+r4PF9parxspr6RsP1/FkWbV17sVfL3mW2L+avN9o+ zS6lc1/1ZlUqfuOaXUfWXb4foD0r8v38l+fvKNloXmCyhuNa0GBLW4t5arOqxKEWaKVSsnGRQCSr dfozPwmOSIB5hwsoljkSORZHa/k7+X8NwlxNp738kX90t9cT3SL8o5XZPvGWjBDuajnkj/M/nfyj 5MsUS+nSFwtLTTLZQ07+AjhWlB7mi++SnkjAbohjlM7PEfN3nTzJ51kKX4Om6ArVi0eJvilp0a6k FOX+oNh881mbUme3R2GLTiHvSxESNAiKFRRRVAoAB4DMZyF2Koe/vYbK1e4l6L9lR1Zj0Ue5xVdp lza6BbtPqPKbXtSIkayiHOUL+xEB+yqjqTkoY5ZJCMRZYZMkYRMpGgF8kfmDVzyv5zp1meljat+8 Yf8AFkv8FzqtB7ME+rMa/oj9JeV13tMB6cIv+keXwCMsNK0+wThaQJEO7AVY/Nj8R+k51en0eLCK xxEfx383ldRrMuY3kkZfju5IrMlxnYq7FUp1pvql5pmqDYWtwI5j29Gf925Py2zmvafT8WAT6xP2 H9tPS+zGo4cxh0mPtH7LZbnAvduxV2KuxV2KuxV2KuxV2KuxV2KtMqspVhVSKEHoQcVSHymzWq3u iyH4tNmIhr1NvL8cR/EjNB2rh4cnF/O+93PZ+S4cPc9E8keXjqmpCeda2VoQ0lRs79VTf7z7fPMn sLQeLk8SX0Q+0/jdx+19Z4cOAfVL7nqudy8k7FXYq8D/ADj0KXQ/OR17j/uJ15Y45pv2YryFeADe AkjUEHxBzWazFR4u92OkyWK7mHy2aPcRXcUstrewbwXls7RTJ/quu+YYkRycogHmmUnmPz3ND9Xl 806h6AFP3bJFJ/yNRQ/45cdRPvavAh3JZb6dawSvOFMlzJvJcysZJWPiXYk5SSS2gUicCXYqtkkS NGeRgqKKsxNAAPHFWPQfpbXdTW4swILC2Y/V7mRagMNjIqH7T/y/y/PNv2d2Pl1O49MP536u91Pa Pa+LTCj6p/zf19zKNN0ezsAzRgyXEm811KeUrnuWY53ei7OxaaNQG/f1Lwmu7Ry6mVzO3QdAjszn AdirsVdirsVQGv2v1rRb2DqWiYqP8pRyX8RmF2jh8TTzj/RP2bhzezs3h6iEv6Q+3Yp1o939c0mz uiamaGN2/wBYqK/jnlRfU0ZgV2KuxV2KuxV2KuxV2KuxV2KuxVL4NA1O8856ZLpsRkN4r2l9T7KR gGRJX8ApBqfoG+2VZ9GdRHgHO/7W3FqhhPEeT37SNKttL0+Kztx8KD4npu7H7TH3OdDptPHDAQjy Do8+aWWZlLmUZl7U7FXYqhdV0rTtW0+fTtSt0urK5XhNBIKqw/WCDuCNwcEogiikEg2HifmT8l/M +iu83leQaxpYqV024cR3UQ/ljlb4JFH+VQ9t812XRnnFz8erH8TBrrURYT/VtWt7jSrrp6N7E8J2 8CRxI965hygRzDlRkDyVY72zlFYp43Hirqf1HIsm3urZBV5kUeLMAPxxVAvrsEjmHTo31C4/lhHw D/WkPwgZkafSZcxqETIuPqNVjwi5yEQrweX7m8dZtakEig8o7CKoiX/XPVz+Gdd2d7Nxh6s3qP8A N6fHv+73vI9o+0kp+nD6R/O6/Du+/wByfIiIioihUUUVQKAAdAAM6mMQBQ5PLykSbO5bwsXYq7FX Yq7FXYq0QCCDuDsRgItINKXkdifLNojGrRGWJv8AYSso/DPIcseGRHc+u45cUQe9PcrZOxV2KuxV 2KuxV2KuxV2KuxVUtrae5nSCBDJNIeKIu5JOShAyNDmiUhEWXrPlTyzDotnV6PfTAG4l8P8AIX2H 4/dTd4MIxxrq6nLlMzae5c1OxV2KuxV2KuxVSubW1uoTDdQpPC32o5VDqfmGBGAi0g0x28/LD8vL ti03l2w5E1JjgSIk+/pha9cgcMD0DMZZDqpwflR+W8EnqJ5dsiw7SRCRf+BfkMAww7lOafew3zn+ Xf6HDXujw/7i+skCDeD6B1T37d86vszXxkBjlUZdOgP7Xk+1OzpRJyRuUevUj9jC83To3Yq7FXYq 7FXYq7FXYq7FUN5LNNOu4v8AfN9cp7bPXb788n18eHPMd0pfe+raGXFgge+MfuZBmI5TsVdirsVd irsVdirsVdiqraWlzd3EdtbRmWeU8URepOThAyNBjOYiLL1Tyn5Tg0aD1ZaSahIP3knUID+wn8T3 zc4MAxjzdXmzGZ8mQ5e0uxV2KuxV2KuxV2KuxV2KuxVxAIodweoxV535w/LRZS99oSBJDVpbHop9 4uw/1enh4ZvtD2tXpy/P9bz+v7Iv1Yvl+r9TzWWGWGVopUaOVDxdGBDAjsQc6GMgRY5POyiQaPNZ hYuxV2KuxV2KuxV2KoXyeaDV4+66jK1PAMiH8c8t7WjWqyf1i+o9lG9Nj/qhkOa5z3Yq7FXYq7FX Yq7FXYqmOi6DqOsXHpWkdVX+9mbZEB8T/Ab5fhwSyHbk1Zc0Ye96l5f8s6fosFIR6ly4pNcsPibv Qfyr7frzb4sMYCg6zJlMzZTfLWt2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVI/Mfk/R9djrcJ6V0BRL uOgceAb+YexzM0uuyYTtvHucLV6DHnG+0u95X5h8ja5opaR4/rNmNxdQglQP8teq/Tt750ul7Rx5 trqXcXmNV2blw71ce8MezPde7FXYq7FXYq7FUJ5V+G+1uPwulev+vEpzzHtsVq5+99M7FN6WHu/S yLNU7R2KuxV2KuxV2Kr4YZp5VihRpZXNEjQFmJ9gMlGJkaCJSAFlmmgflzNLxn1hjFHsRaoRzP8A rsNl+Q3+WbDDoes/k4OXV9Is+tLS2tLdLe2iWGFBRUUUH+375sAANg4RNquFXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYqxjXPy88vaoWlWM2V02/rQUAJ/yk+yfooffNjp+1MuPa+Ief63W6nsr Dl3rhl5fqYHq/wCWPmKyLPahb+EdDF8L090b+BObrB2vin9XpPn+t0efsfND6fUPL9TFri1ubaQx XMTwyjrHIpRh9Boc2cZiQsGw6ycJRNEUVLJMHYq7FUH5a+HWteQfZElu30tCCc817fFaufw/3IfS ewTekh8f90WR5pnbuxV2KuxVG6fomraiQLK1kmBNOYFEB93NFH35dDBOXINU80I8yyzSvyymaj6p cCNevowbt07uwoKewOZuPQD+IuLPWH+EM00zRdL0yMpY26xV+0/V2+bGrHM6EBEUBTiSkZGyjckx dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqldWdpdx+ldQRzxH9iVQ6/cwOThkl E3E0WE8cZCpAEMevfy58p3RJFqbdz+1A7L/wp5L+GZ2PtXPHrfvcDJ2Tgl0r3JJc/k/YMT9W1GWI dvURZP8AiJjzMh25LrEH7P1uHPsGH8MiPhf6kvl/KDUh/dahC/8Aroy/q5ZeO3IdYlx5dhT6SCX6 X+TnmWy1bU7pruzeC99AxAPKGBjQo3IenTwpvnLdqYzqM5yR2Brn7gHqOzJfl8EcctyL5eZtNh+W Wu97i19/ik/5ozAGgl1LnHWDoETB+V10w/0i/jjP/FcZf9ZTJjs/+l9jD86e5MbX8stIQD6xczzM Dvx4xqfoox/HLY6LGO8tZ1cz5J3Z+U/Ltmaw2MZb+aWsp27j1C1PozIhhhHkGmWSUuZTYCmw6ZYw dirsVdirsVdirsVdirsVdirsVf/Z + + + + + + proof:pdf + uuid:65E6390686CF11DBA6E2D887CEACB407 + xmp.did:AAFD4D716C05EF11A916FAD4CB59D3F6 + uuid:a8cd6e00-15a5-43a6-9809-50c4d7e4d80f + + uuid:02dc5f24-85b4-40be-bdfc-38989c0de5dd + xmp.did:27205CC46305EF1186B9D67BF1058F23 + uuid:65E6390686CF11DBA6E2D887CEACB407 + proof:pdf + + + + + saved + xmp.iid:27205CC46305EF1186B9D67BF1058F23 + 2024-04-28T15:32:32+02:00 + Adobe Illustrator CS6 (Windows) + / + + + saved + xmp.iid:AAFD4D716C05EF11A916FAD4CB59D3F6 + 2024-04-28T16:34:38+02:00 + Adobe Illustrator CS6 (Windows) + / + + + + + + Web + + + 1 + False + False + + 450.000000 + 450.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Standard-Farbfeldgruppe + 0 + + + + Weiß + RGB + PROCESS + 255 + 255 + 255 + + + Schwarz + RGB + PROCESS + 0 + 0 + 0 + + + RGB Rot + RGB + PROCESS + 255 + 0 + 0 + + + RGB Gelb + RGB + PROCESS + 255 + 255 + 0 + + + RGB Grün + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blau + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 193 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 237 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 241 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 247 + 147 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 251 + 176 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 252 + 238 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 217 + 224 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 140 + 198 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 181 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 146 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 181 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 169 + 157 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 171 + 226 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 188 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 146 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 145 + + + R=147 G=39 B=143 + RGB + PROCESS + 147 + 39 + 143 + + + R=158 G=0 B=93 + RGB + PROCESS + 158 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 212 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 237 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 199 + 178 + 153 + + + R=153 G=134 B=117 + RGB + PROCESS + 153 + 134 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 198 + 156 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 166 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 140 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Graustufen + 1 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 153 + 153 + 153 + + + R=179 G=179 B=179 + RGB + PROCESS + 179 + 179 + 179 + + + R=204 G=204 B=204 + RGB + PROCESS + 204 + 204 + 204 + + + R=230 G=230 B=230 + RGB + PROCESS + 230 + 230 + 230 + + + R=242 G=242 B=242 + RGB + PROCESS + 242 + 242 + 242 + + + + + + Webfarben + 1 + + + + R=63 G=169 B=245 + RGB + PROCESS + 63 + 169 + 245 + + + R=122 G=201 B=67 + RGB + PROCESS + 122 + 201 + 67 + + + R=255 G=147 B=30 + RGB + PROCESS + 255 + 147 + 30 + + + R=255 G=29 B=37 + RGB + PROCESS + 255 + 29 + 37 + + + R=255 G=123 B=172 + RGB + PROCESS + 255 + 123 + 172 + + + R=189 G=204 B=212 + RGB + PROCESS + 189 + 204 + 212 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/Properties<>>>/Thumb 11 0 R/TrimBox[0.0 0.0 450.0 450.0]/Type/Page>> endobj 8 0 obj <>stream +HM u@[Ƭа GfVwI=/n4"3GovtK[m㧿㖎\ǖ w}H}lKVk;-=xC}fW>J;tKNGj+兠Iҁkq{IYC*דt?\nӭcx-VYenϿ?J.6֗N\}J]W^Kɩ]ԳQOg|芯e>k?_8+ݒ?„e}Nɶ}TߛSͳΜB tL#kά籖PQGZ9Zq̬z -Hh?Dt3wr11zlGC' 0hLd}A[iju길~‖i,_G=vԆG C[(t'fth GfÀW& i @,*\\7\$m(X6*  m{7lO@Ƌ":2ZѶ?w+ۿ7!P#8 tc2j{I\Dz+h+VN {IsYкM_jNns\-d-@fټY:}"uޟ[tazOEgL.B*5w (HUdYtBϓ/fW,96s%.3ÑߵO\*&٥Ƀ`3[ZNŨr y ׫L I-iT3+o'5LSKIrx^6H.7! .SfX}$ގ'k,NZEu6. D-@3֪!gWstK׍ -LrVjt}Ҝjû&4-z%? W!N^].ŧo#vh<$BBGj"C='ꆊ%|o,nqk2D')&|Ѐ k*GW"9{hk| RMIDc$9N/U]N<+4cPޣGP>3jX4ʳ*X:^͑ߖ_FVZ'5TPCB9iKs5!b-@6{;`ZxO $Vg 2DMZĆwOD%ގ̀xu] E~6c󡓕Ѱ_~Y-^gN7foJOY5GQx :~kp v0[{lmmeUbzLɏl{'kN)I+֫~9([ +%VO1|͗4=+|u?H-ph@ޗIiFI=u׉~!c_֍%߿ +endstream endobj 11 0 obj <>stream +8;YQVZ$#@d$q6LSV%LYg$TqB,_*^bY#5M7/;gFFC"Kh7r&0sPu[W>?c4G^)knC-J$ +805gDGigf"nr)H.C]rT-gUeA*%8 +H%%arT3fs)!D>1"MhPg<_0HP"h5hkqQ@)@?ZQ<]SZWa6$9]Zs[]_$YrH,ZO-0jUf$ +*0nh3[.CPKZm:7$99lYB"*ku(-(9%;/nV\Om!n)seQ$&m6:)PEdktU24O`g33[$5X +U/kuVV7IS(llRsA;<>S<3kFH^la%OS!Q@gW_L.(+7o.1_0YdHt'jEh;F:h55]Q/n4 +@[Z(SB"50NV:(F[IIoC]o[?.9GJF/4I2m]:]rq^Emim$$d"I$@K]6o`I!\)=>)h@. +2@kojb\Tr=4M(ei5F0#"\qkoMV_CGdNqm;;)*=!/6*2MW4te0W_Y'bf/Xo_t)`gK& +raFVajJm^)9:^QgCYZ;KjEdYCT!f])@Tk]f>^,ZP=/mdEqT!]Z_]_+YJCOJ-'Kql/ +IFTK_L%MpIXZApaK\M"g*GlrNF;CTq,!8l-q,d5)T`a1h?-hJ/[AG=XM-Y5AO"%h& +SQ!:IK\Gk":cHn_dmJC[#dYXh+\#MV7h^bIAq!m7%6O:X9Ph9NO*3DVN+(-\m-Z=.J=I +Rf/(:p;2C;+AMSVIj,iu'Z7:q+4S!nV"Q',?6/"((LNt\HXX]oZBM-t\dEkXAZC&S +1UY%8rXT!nDI2l~> +endstream endobj 12 0 obj [/Indexed/DeviceRGB 255 13 0 R] endobj 13 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 5 0 obj <> endobj 14 0 obj [/View/Design] endobj 15 0 obj <>>> endobj 10 0 obj <> endobj 9 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 16.0 +%%AI8_CreatorVersion: 16.0.3 +%%For: (DCW Laptop 1) () +%%Title: (jason.ai) +%%CreationDate: 4/28/2024 4:34 PM +%%Canvassize: 16383 +%%BoundingBox: 230 -502 665 -73 +%%HiResBoundingBox: 230.7476 -501.166 664.166 -73.1621 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 12.0 +%AI12_BuildNumber: 691 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Passermarken]) +%AI3_Cropmarks: 219 -504 669 -54 +%AI3_TemplateBox: 480.5 -280.5 480.5 -280.5 +%AI3_TileBox: 158.3999 -687.8398 729.5996 129.8398 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI9_OpenToView: -382 173 1 1588 914 18 0 0 50 117 0 0 0 1 1 0 1 1 0 1 +%AI5_OpenViewLayers: 7 +%%PageOrigin:80 -580 +%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 18 0 obj <>stream +%%BoundingBox: 230 -502 665 -73 +%%HiResBoundingBox: 230.7476 -501.166 664.166 -73.1621 +%AI7_Thumbnail: 128 128 8 +%%BeginData: 27768 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FD33FF76FD7EFF7D4A51FD7CFFA8757C7576FD7BFF7D4AA17C4A7D +%FD7AFF4BA0A0A77C51A8FD05FFA9AFA9AF85AF85AF85AFA9AFAFFD66FF7D +%51FD04A0754B7D855A6137373637373736373737363737373661618585AF +%FD60FF7C75A1A0A1A0A1754B2F3D3761373D3761373D3761373D3761373D +%373D373737616185A9FD5BFFA94AA0A0A07CA0A0A0754B2E373637363736 +%37363736373637363736373637363736373637368585FD56FF85613075A0 +%A1A0A7A0A0A0A7A0752E6137613761376137613761376137613761376137 +%6137613761373D3785AFFD50FFA9613637372F6FA1A0A07CA0A0A07CA775 +%4A2E3D3737363D3737363D3737363D3737363D3737363D3737363D373736 +%375BA9AFFD4BFFAF5B3D373D37612E99A0A7A0A1A0A1A0A0A07C4A752F61 +%373D3761373D3761373D3761373D3761373D3761373D3761373D373D3761 +%85FD48FF846136373637373D37524A754B75517C76A0A0A0514A754B2F3D +%363736373637363736373637363736373637363736373637363736373637 +%3685FD44FFAF613D3761376137612F524A75749974754A7551A0A0764A75 +%755137613761376137613761376137613761376137613761376137613761 +%37613761376185FD40FFA9853737363D3737375A4B7498C1C0C1C0C1C0C1 +%98754A7C4B996E7575523737363D3737363D3737363D3737363D3737363D +%3737363D3737363D3737363D37375AFD3EFF85613761373D376137594A98 +%C0C1C0C1C1C1C0C1C1C1C09F4A4B9EC14A7C4B5A373D3761373D3761373D +%3761373D3761373D3761373D3761373D3761373D37613737378BFD3BFF5A +%373637363736373759275227514A9898C19EC198C19EC1C0996EC1C0994A +%75283D373736373637363736373637363736373637363736373637363736 +%3D373D373D37371561A9FD37FFAF373D376137613761376136613761375A +%277598C1C0C1C1C1C0C1C1C1C0C1C19F4A4B363D37613761376137613761 +%3761376137613761376137613761375B35592E592E532E592F5B84FD35FF +%853737363D3737363D3737363D3737363D37534A4B98C198C1C0C198C1C0 +%C198C1C09F4A51275228532F37373D3737363D3737363D3737363D373D36 +%362E514AFD09754A2E61FD33FF853761373D3761373D3761373D3761373D +%37612F99764B9EC1C0C1C1C1C0C1C1C1C0C1C1C198C1989874754B533661 +%373D3761373D3761373D375B2E514A9FA0A0A0A7A0A1A0A7A0C975523737 +%5BFD30FFA961363736373637363736373637363736FD04372F4BA05175C0 +%C198C19EC198C19EC198C1C0C1BAC1C0C1BAC16E4B2F3D37373637363736 +%3D372F267575FD05A07CA0A0A07CA0754B363D363736AFFD2DFFAF613761 +%3761376137613761376137613761375A2E524B754A752699C0C1C1C1C0C1 +%C1C1C0C1C1C1C0C1C1C1C0C1C1C198752E6137613761376136524AA0A0A1 +%A0A7A0A0A0A7A0A0A0A7A0752F613761373D37AFFD2BFFA95B363D373736 +%3D3737363D3737363D37372E516E9898C19EC174754AC1C0C1C0C198C1C0 +%C198C1C0C198C1C0C198C1C0C1C0742E3D363D373D365175FD05A07CA0A0 +%A07CFD05A02737363D3737363737AFFD29FFAF6137613761373D3761373D +%3761373D375A4B7498C1C1C1C0C1C1C1C0759EC1C0C1C1C1C0C1C1C1C0C1 +%C1C1C0C1C1C1C0C1C1C1C0742F3D3761364B75A7A0A0A0A1A0A0A0A1A0A0 +%A0A1A0A77553373D3761373D373D37AFFD27FFA95B363736373637363736 +%373637363D372E4AC0C0C198C19EC198C19EC198C1C0C198C19EC198C19E +%C198C19EC198C19EC198C19EC198513737365175A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0752F3D363736373637363736A9FD26FF6137613761376137 +%6137613761376137526EC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0 +%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C16E5A375375A7A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A04B613761376137613761373D37FD25FF613737363D +%3737363D3737363D373737354AC1C0C1C0C198C1C0C198C1C0C198C1C0C1 +%98C1C0C198C1C0C198C1C0C198C1C0C198C1C0C1C0982F364AA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA17552373D3737363D3737363D373736FD23FF +%853761373D3761373D3761373D3761373D27C1C1C1C0C1C1C1C0C1C1C1C0 +%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1985227 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A075363D3761373D3761373D37 +%61373737FD21FF853637363736373637363736373637363D2F74BAC19EC1 +%98C1C0C198C1C0C198C19EC198C19EC198C19EC198C19EC198C19EC198C1 +%9EC198C1C0C12675A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A027373737 +%3637363736373637363736375AFD1FFFAF37613761376137613761376137 +%613761375374C7C1C1C0C1C1C1C0C1989F74C1C1C1C0C1C1C1C0C1C1C1C0 +%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C19E517CA7A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A775593761376137613761376137613761373D85FD1EFF363737 +%37363D3737363D3737363D3737363D2798C0C1C0C198744B4B264B4A7598 +%C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C07451A1A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA07C51373D373736FD04373D3737373D +%3737363785FD1CFF61373761373D3761373D3761373D3761373D3651C0C1 +%C0C16E522F594B9998C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1 +%C1C1C0C1C1C1C09F4BA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0752759 +%2E5252524B5252522E5A36373761373D3761FD1BFF843736373637363736 +%37363736373637363737374AC1C0982635372F4AC1C0C198C19EC198C19E +%C198C19EC198C19EC198C19EC198C19EC198C1C0C14A7CA0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A02675749898C098C0FD04986E754A51282F2F37 +%1485FD19FFAF613761376137613761376137613761376137613675C09827 +%613D5A4AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1 +%C1C0C1C1C14A7CA0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A74B75C1C1C0 +%C1C1C1C0C1C1C1C0C1C0C1989F74742E6137AFFD18FF61363D3737363D37 +%37363D3737363D3737363D37374A98273737372798C0C1C0C198C1C0C198 +%C1C0C198C1C0C198C1C0C198C1C0C198C1C0C1C0C14A75FD04A07CA0A0A0 +%7CA0A0A07CA0A0A07CA1754A98C1C0C198C1C0C198C1C0C198C1C0C1C0C1 +%4A36373737FD17FFAF373D3761373D3761373D3761373D3761373D376136 +%4B4A5B373D2F98C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0 +%C1C1C1C0C1C1C14A76A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A1764B98 +%C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C17452373D373D85FD16FF363736 +%373637363736373637363736373637363736372653373D364B98C19EC198 +%C19EC198C1C0C1C0C19EC198C1C0C198C1C0C198C1C0C198994A75FD04A0 +%7CA0A0A07CA0A0A07CA0A0A07CA0764B6EC1C0C198C19EC198C19EC198C1 +%9EC198C1984B363D36373637A9FD14FF853D376137613761376137613761 +%37613761376137613752366137524AC1C1C1C0C1C1C1C0C1C1C1989FC1C1 +%C0C1C1C1C0C1C1C1C0C1C0C1747551A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7 +%A0A0A0C97C4B74C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1982E613761 +%37613785FD13FFAF37363D3737363D3737363D3737363D3737363D373736 +%372F3737534A75C0C1C0C198C1C0C198754A4A98C1C0986E754A756E756E +%744A754B7575A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0754B74C1C0 +%C1C0C198C1C0C198C1C0C198C1C0C1C0C14A36373D3737363D37AFFD12FF +%85373D3761373D3761373D3761373D3761373D3761373D376137594A7574 +%C1C0C1C1C1C09F6E7551519EC174754B7675A07C7C757C76A07CA1A0A0A0 +%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7754B98C1C1C1C0C1C1C1C0C1C1 +%C1C0C1C1C1C0C1C1C19852373D3761373D373D61FD12FF36373637363736 +%373637363736373637363736373637363737364AA04B99C0C198C198744A +%76A0A04AC14A5175A0A0A07CFD07A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A04A4B4AC1C0C19EC198C19EC198C19EC198C19EC198C1C0742F +%3D3637363736373637A9FD10FF853D376137613761376137613761376137 +%6137613761376137614BA0A07598C1C0C1985175A7A0A776754A7CA0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04A +%76A07C4AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C14B613761376137 +%6137613785FD10FF61363D3737363D3737363D3737363D3737363D373736 +%3D373D2875A0A04B99C0C174517CFD05A0267CA0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C754A7CA0A0A0754AC1C0 +%C198C1C0C198C1C0C198C1C0C198C19852373D3737363D3737363D37AFFD +%0EFFAF373D3761373D3761373D3761373D3761373D3761373D37613575A0 +%A7A07574C798517CA7A0A0A0A1A07CA0A1A0A0A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A05151FD04A0A1A05174C1C1C1C0C1 +%C1C1C0C1C1C1C0C1C1C1C0982E3D3761373D3761373D373D85FD0EFF5A37 +%36373637363736373637363736373637363736373637365175A07CA05174 +%984B75A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA075A07CA0A0A07CA0764A98C19EC198C19EC1 +%98C19EC198C19EC16E2F373736373637363736373661AFFD0CFFAF613761 +%3761376137613761376137613761376137613761375975A7A0A7A07C7499 +%51A7A0A7A0A0A0A7A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0 +%A0A7A0A0A0A7A0A0A0A7A0A1A0A7A0A0A0A7A0A75199C1C1C0C1C1C1C0C1 +%C1C1C0C1C1C1C09F2E3D3761376137613761376137AFFD0CFF85143D3737 +%363D3737363D3737363D3737363D3737363D373727A0A0A07CA07C4B4AA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04AC1C0C198C1C0C198C1 +%C0C198C1C0C19851363D363D3737363D373736375BFD0CFF61373761373D +%3761373D3761373D3761373D3761373D37612F75A0A1A0A0A0A74B51A0A1 +%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0 +%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A07574C1C1C1C0C1C1C1C0C1 +%C1C1C0C1C1C17452363D3761373D3761373D3761AFFD0AFFA83736373637 +%363736373637363736373637363736373637375275A07CFD04A0754BA07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0756E98C19EC198C19EC198 +%C19EC198C1C0C1744B2E36373D37373637373714AFFD0AFFAF3761376137 +%613761376137613761376137613761376137614BA0A0A7A0A0A0A7A0A0A0 +%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A7A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A14BC1C1C1C0C1C1C1C0 +%C1C1C1C0C1C1C1C0C1C0984A522F5A3661373D373D61FD0AFF5A37373736 +%3D3737363D3737363D3737363D3737363D373D2E75A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07575517575A0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0756EC1C0C198C1C0 +%C198C1C0C198C1C0C198C1C0C198986E754A514B522752A9FD09FF613761 +%373D3761373D3761373D3761373D3761373D37613651A0A7A0A0A0A1A0A0 +%A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD04A04B767CA17C754AFD04A0A1A0A0 +%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A77C759EC1C1C1C0C1 +%C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C0C1BAC198C098CFFD08FFAF3637 +%363736373637363736373637363736373637363D304B75A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0754AA8FD05FFA14AA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA04B98C0C19EC1 +%98C19EC198C19EC198C19EC198C19EC198C1C0C198C1C0C0A0FD08FF8537 +%37613761376137613761376137613761376137612F5175A7A0A7A0A0A0A7 +%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04AFD08FFA84AA0A0A7A0A0A0 +%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A07C6EC1C1C1C0C1C1 +%C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1BAA0FD08FF85373736 +%3D3737363D3737363D3737363D3737373D2E4A75A1A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA14B7DFFFFFFA77DFD04FF7C75A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07C4B98C1C0C1 +%98C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0984BFD08FF5B3D +%373D3761373D3761373D3761373D376137372775A0A1A0A1A0A0A0A1A0A0 +%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A075A8FFCA5220264BFFFFFFA175 +%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A75199 +%C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C17459AFFD +%06FFAF373637363736373637363736373637363737362675FD04A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04ACAFFA1F82620207D +%FFFFA84AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD04 +%A07C4AC198C19EC198C19EC198C19EC198C19EC198C19EC198C19EC1984B +%36AFFD07FF37613761376137613761376137613761375A4AA0A0A7A0A0A0 +%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A075A1FFA82620 +%2620A8FFFF7C75A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0 +%A7A0A0A0A7A07598C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1 +%C1C0982F3D85FD06FF8537363D3737363D3737363D3737363D372F4AA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A075 +%75FFFF7D4B4B7DFFFFA85175A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA15198C0C1C0C198C1C0C198C1C0C198C1C0C198 +%C1C0C198C1C09827373785FD06FFAF373D3761373D3761373D3761373D37 +%534AA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A1A0A15176FD06FFA87675A1A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0 +%A0A1A0A0A0A1A0A0A0A1FD04A06EC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1 +%C1C0C1C1C1C0994B36373D61FD06FF603736373637363736373637363D37 +%524AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A04A517CA8A8A8764B51A0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C5198C198C19EC198C19EC198 +%C19EC198C19EC198C19874273637373661FD06FF85376137613761376137 +%613761375275A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0 +%A7A0A0A0A7A0A0A0A7A0A0A0C97C75517551757CC9A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0C97599C0C1C1C1C0 +%C1C1C1C0C1C1C1C0C1C1C1C0C174512F61376137615BFD06FF5A37373736 +%3D3737363D373D365175FD05A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD04A07C4AC19EC1 +%C0C198C1C0C198C1C0C19EC198754A53363D373D37373661FD06FF853761 +%373D3761373D3761365175A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0 +%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1 +%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0 +%A07598C1C0C1C1C1C0C1C1C1C0C1C1C1744B27363761373D3761373D37FD +%06FF5A37363736373637363D304B75A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A04B74C0C198C19EC198C19EC198C19EC174754A522F37373D +%36373637FD06FF613761376137613761365175A7A0A7A0A0A0A7A0A0A0A7 +%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0 +%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7 +%A0A0A0A7A0A0A0A7FD04A04AC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C198 +%994B522F61376137FD06FF5B37363D3737363D364B75A1A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07C7598C198C1C0C198C1C0C198C1C0 +%C198C1C0C1C0C198744A522F37FD06FF61373D3761373D2F5175A7A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0 +%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A15199C1C1C0C1C1C1C0 +%C1C1C1C0C1C1C1C0C1C1C1C0C1C0C198754BFD06FF5A37373D373D2F4A75 +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A07C4AC1C0 +%C198C19EC198C19EC198C19EC198C19EC198C1C0C1C0C1FD06FF85375B2F +%592E4B75C9A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0 +%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0 +%A1A07598C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1FD06 +%FF61364B754A754A5175A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A05175C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0 +%C1C0C1FD06FF844A7C76A075A05175A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0 +%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A04AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0 +%C1C1C1C0C1C19F4BFD06FF4A75757C7576757C4AA07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A05198C19EC198C19EC198C19E +%C198C19EC198C19EC1C098265AFD05FF7D7576A076A075A0767576A7A0A0 +%A0A7A0A0A0A7A0A1A0A7A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7 +%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0 +%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A77599C1C1C0C1 +%C1C1C0C1C1C1C0C1C1C1C0C1C1C1C09F4B3661FD04FFA851757C757C757C +%75A04B76FD04A07CFD04A0A1A0A07CA075A07CA1A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0 +%4AC1C0C198C1C0C198C1C0C198C1C0C198C1C09E26363785FD04FFA74AA0 +%76A075A076A0757575A7A0A1A0A0A0A7A0A075754B514A754B7575A1A0A0 +%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1 +%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0 +%A0A1A0A0A0A1A07598C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C14A36373D +%85FD04FF5175757C7576757C757C4B75FD04A07C754B514A514B76757675 +%7C754B4AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CFD07A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA05174C0C19EC198C19EC198C19EC198C19EC16E2F37 +%3736AFFD04FF7575A076A075A076A075A04B7C767C51754B7575A076A076 +%A075A076A0767575A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0 +%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A1A0A0A0A1A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04AC1C1C1C0C1C1C1C0C1C1C1C0 +%C1C1C1985137613761FD04FFA84A7C757C757C757C757C75764A514A7575 +%7C75A0757C757C757C757C757C754B75A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04AA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A05198C1C0C198 +%C1C0C198C1C0C198C1C0742F3D373736FD04FF7C7576A075A076A075A076 +%A075A076A075A076A075A076A075A076A075A076A07575A0A0A0A1A0A0A0 +%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A77575A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0 +%A77575C0C1C1C1C0C1C1C1C0C1C1C1C0C14B3D37613785FD04FF764B7C75 +%76757C7576757C7576757C7576757C757C75754B4B4A757576757C75764A +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CFD04A07551A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07CA04AC198C19EC198C19EC198C19EC16E2F3737363785FD +%04FF4BA076A075A076A075A076A075A076A075A076A075754A4B4A4B4AA0 +%75A076A07575A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7 +%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A74BA0A0A7A0A0A0A7A0A0A0A7A0A0 +%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A07598C1C1C1C0C1C1C1C0C1C1C1C075 +%363D376137AFFFFFFFA84B757C757C757C757C757C757C757C757C75A075 +%4B264B4A4A2675757C757C75764AA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07551A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA17574C0C1C0C198 +%C1C0C198C1C0C16E754B522F5BFD04FFA14BA075A076A075A076A075A076 +%A075A076A075754A4B4A4B4A5175A076A075A0767575A7A0A0A0A1A0A0A0 +%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0 +%7551A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD04A0 +%4AC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1987476FD04FF4A757576757C7576 +%757C7576757C7576757C7575204B264A2651757C757C7576757C754B75A0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA04A7C7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07C7574C198C19EC198C19EC198C1C0C198C1BAC9FFFFFF7C +%757CA075A076A075A076A075A076A075A076764A4B4A4B4B7C76A075A076 +%A075A076A07575A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0 +%A7A0A0A0A7A0A0A0A7A0A0A0C97575A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0C97575C0C1C1C1C0C1C1C1C0C1C1C1C0 +%C1C0C1CFFFFFA84B75A0757C757C757C757C757C757C757C75A051755176 +%757C757C757C757C757C757C757C4A7CA0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0754B76A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD05A04AC1C0C1C0C198C1 +%C0C198C1C0C198C0A0FFFFFF7C51A075A076A075A076A075A076A075A076 +%A075A076A075A076A075A076A075A0757C75A076754BA7A0A0A0A1A0A0A0 +%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A05175A7A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0 +%7598C1C0C1C1C1C0C1C1C1C0C1C1C1BACAFFFFFF4A767576757C7576757C +%7576757C7576757C7576757C7576757C7576757C757C7551517C757C754B +%76A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07C514BA07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA0A0A07574C0C198C19EC198C19EC198C1BAC1A8FFFFFF7576 +%A075A076A075A076A075A076A075A076A075A076A075A076A076A0757651 +%5151A075A076A04BFD04A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0 +%A0A7A0A0A0A7A0A1757575A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7 +%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A14BC1C0C1C1C1C0C1C1C1C0C1C1C1 +%A0FD04FF4A7C757C757C757C757C757C757C757C75A07575757675755175 +%75754A754B4A4BA0757C757C755175A0A0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CFD07A076764A4B75A1A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CFD04A07574C198C1C0C198C1C0C198 +%C198CFFD04FF7651A076A075A076A075A076A075A075754A754B75517675 +%7C4B4A4BA8A77575A075A076A075A04BA0A0A1A0A0A0A1A0A0A0A1A0A0A0 +%A1A0A0A0A1A0A0A0A7A0A0757651514BA0A0A1A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A17575C1C1C0 +%C1C1C1C0C1C1C1C0C8FD05FF7D4A757C7576757C7576757C75754A5176A7 +%A8FD04FFCF76517DFFA84B4BA07576757C757C75517CA07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA075754B754A514B7C7CFD05A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04A +%C1C0C198C19EC198C1C0C0A7FD06FF765175A076A076A076A075514BA8FD +%06FFA87C4BA1FFFFA14B75A076A075A076A0767651A1A0A7A0A0A0A7A0A0 +%A0A7A0A7FD04A075754B514A7C76A0A0C9A0A1A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0 +%7674C1C0C1C1C1C0C1C1C19FFD08FF7C514A75517675754A757DFD06FFCA +%765176FFFFFF764B757C757C757C757C757C4A75A0A07CFD07A0759F7575 +%4A522E2F2F373651A0A1A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07575C0C1 +%98C1C0C198C198CAFD0AFF7D4A754A4A51CAFD06FFA8764BA1FD04FF764B +%75A076A075A076A075A0755176A7A0A0A0A7A0A075754B512E5935373761 +%373D37612EA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0 +%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A04AC1C1C1C0C1 +%C1C1C0C8FD0BFF7D757575517676FFFFFFA8A14B757DFD04FFA84B51757C +%757C7576757C757675754BA07CA0A0A075754A512E363637373D37373637 +%3637372F4AA07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0756EC19EC198C1 +%C0C0A7FD0BFFA84BA04AA8FF7C517C757676CAFD05FFA74A757CA075A076 +%A075A076A0767C4AA0A0A7A0A06F512E5A37613761376137613761376137 +%613651A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A17C75C1C1C0C1C1C1A0 +%FD0CFF7D75767576FFFFFFA8CACAFD05FFA87C4A75757C757C757C757C75 +%7C757C4A76A0A07575272F363D3737363D3737363D3737363D3737363D27 +%75FD04A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04A99C0C198C19FFD0DFFA74A +%A07551A8FD09FFA7514AA076A075A076A075A076A075A05175A0A075512F +%61373D3761373D3761373D3761373D3761373D375975A1A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0 +%A1A0A0A0A1A0A0A0A1A0766EC1C1C1BACAFD0DFFA15175A0514BA7FD06FF +%A8514B517C757C7576757C7576757C757C514B7C754A52363D3637363736 +%3736373637363736373637363736373051A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA07C4B98C1BAC2AFFD0EFF4BA076A075517CA8A8CA7D764A7576 +%A075A076A075A076A075A076A0FD0475275A376137613761376137613761 +%3761376137613761376137614BA0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0 +%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7 +%A0A75199C0C1CAFD0FFF764BA0757C75754A514A755176757C757C757C75 +%7C757C757C757C75514A512E37373D3737363D3737363D3737363D373736 +%3D3737363D3737375275A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A07C4A +%C1A7FD10FFA74B75A076A075A075A075A076A075A076A075A076A075A076 +%A076754A523661373D3761373D3761373D3761373D3761373D3761373D37 +%61373D2E75A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A075A0FD12FF76 +%4A757C7576757C7576757C7576757C7576757C7576757C75752653373736 +%3736373637363736373637363736373637363736373637363737354AA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CFD14FF765175A075A076A075 +%A076A075A076A075A076A075A075754B5A37613761376137613761376137 +%61376137613761376137613761376137613675A0A1A0A7A0A0A0A7A0A0A0 +%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7FD05A0FD16FF7C4B4A7575A0757C757C757C757C757C75A075764A +%4B2E37373D3737363D3737363D3737363D3737363D3737363D3737363D37 +%37363D37374AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C +%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD18FFA87C4B +%5175A076A075A076A075A076A075754A523661373D3761373D3761373D37 +%61373D3761373D3761373D3761373D3761373D37613751A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0 +%A1A0A0A0A1FD05A0CFFD1BFF7C764A514A754B7551754A754A4B27363737 +%363736373637363736373637363736373637363736373637363736373637 +%3637363727A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A076A8FD1FFFA8A17C7C76 +%7C757C7C5A36613761376137613761376137613761376137613761376137 +%61376137613761376137613761375275A7A0A0A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0 +%CFFD29FFAF61363D3737363D3737363D3737363D3737363D3737363D3737 +%363D3737363D3737363D3737363D2E75FD04A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8FD +%2BFFAF613761373D3761373D3761373D3761373D3761373D3761373D3761 +%373D3761373D3761373D375375A1A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0 +%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A07CCFFD2DFFAF +%611437363736373637363736373637363736373637363736373637363736 +%3736373637363D2E75A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8FD30FF85373D376137 +%613761376137613761376137613761376137613761376137613761376137 +%5975A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0 +%A0A0A7A0A0A0A7FD04A0A1FD33FF853737363D3737363D3737363D373736 +%3D3737363D3737363D3737363D3737363D373D2F75A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0A1 +%FD35FFAF37373761373D3761373D3761373D3761373D3761373D3761373D +%3761373D3761375975A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1 +%A0A0A0A1A0A0A0A1A0A0A0A1FD04A0A8FD38FF5B37363736373637363736 +%37363736373637363736373637363736373637363D2F75FD04A07CA0A0A0 +%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07BA1A8FD +%3AFF85613761376137613761376137613761376137613761376137613761 +%3761375A75A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7 +%A0A0A0A7FD05A0A8FD3DFFA9853737363D3737363D3737363D3737363D37 +%37363D3737363D3737363D2F75FD04A07CA0A0A07CA0A0A07CA0A0A07CA0 +%A0A07CA0A0A07CA0A0A07CA0A0A07CFD41FFAF61373761373D3761373D37 +%61373D3761373D3761373D3761373D375A51A0A0A1A0A0A0A1A0A0A0A1A0 +%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A8FD44FF85611437363736 +%373637363736373637363736373637363736372F75A0A07CA0A0A07CA0A0 +%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8A8FD47FFAF613D3761 +%376137613761376137613761376137613761375A51A0A0A7A0A0A0A7A0A0 +%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A7FD4CFFA96136373737363D +%3737363D3737363D3737363D37373651A0A07CA0A0A07CA0A0A07CA0A0A0 +%7CA0A0A07CA0A0A07BA0A0A8A8FD50FF856137373761373D3761373D3761 +%373D376137374BFD04A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD05A0A7A8FD54 +%FFA9AF6161363736373637363736373637363D36517CA0A0A07CA0A0A07C +%A0A0A07CA0A0A075A07CA7A8FD5CFF8585376137373761373D376137374B +%FD04A0A7A0A0A0A1FD05A0A1A1CAA8FD62FFA9AF8561366137373637364B +%75A07CA076A07CA07CA17DA7A7FD6EFFAFAF85AF7DCAA7CAA8CAA8FFA8FD +%B5FFFF +%%EndData + +endstream endobj 19 0 obj <>stream +Hj^Gxi$hEqllN*WWpTnyG 4ˋ'߱oPR7jiؖߤWS(#Xꖭ9d_](2ʖK =bS(ގ<^d#V0 eD3?6BCNպ=.Ob."kr+6RCrUaL#=%بk(͹+cviZ̺KB7Q0%#IG +6e $Hӷ1Hu\:KG6zfRM:մzsyaCJJCzK<*y?ljia?w)YCOy‹DVRtK:'s(nOPraL~ŐD26G*.W'P!Sem fs?/+`sFл 创' {R#o3{JZ cz4+ 4yvXRBЕ!Z-2N`x q^Ej=‹XBR#" _T>K lUC2) 1V MEKJuH"Hl}{V~x'bKţ\guzN8*Opaʽ{LpX:D"tEkɋNO +싁ɓZC>9>r./7NjG_í?ZhٟOk%@a&ԘU"pN7Aus0c5ȯfqAĤ +%)`ր1ژS_AVI}ʳ & )iH7\7@N+צEjL.8\mIvhhI k~ȹfg̜Ip i'`Z8q| .X%2 "8zDJT:,%}|u62ƄgfS16}=4_-=v![nL]zٮ>n፤}AH M"੝,[fmmIcs7%J i]y.e0W;WP8&z$BDS(@Z'oڹƮ>5hזV^ ӴjK,|=kasiSKػd:79ARYBJr2X2UQ/.I#U±œ0,d@S+cwӼ %ѻes.[=E&tx VQ<ۣ—`fo d@k+8F/+tZňס-@͹z7{Щ/xrwuɏ7~ˋn>m7o߾x=?m>||w}gItxɓ/WKɪ +endstream endobj 20 0 obj <>stream +HW]oܸ}7><+DERYqb,ma(֮, 4d_+JCa[[I%y%᳿\^u:e+;>z,r3^{My͉+R|WۺkۊiFqSM{uudk֨| HG_0qٵ+^OW95= +Z-(GD@:M9PxsF'{B H,}2wi}`q|ioߖy gfirNh. b[&>(Ⱥ5.%`b~,3L t*` +p 0E\Ą0`JsTy7 +X,(!N/0r9[%w)A!(bi@.$y93~#?q9j̢5#3(c!c , R2R << \rSj(HD2R2FbbX%bXiB%L9k"Jt%yR l8 ."B +%HE&rQHX -LrX +2e@3$\E*VJ*JU +_2u1$ R+us]`S2ԇ)K14J4I14<-(p8ep&gI!f2S\jYY&:my`9cȹu?a1*ؓ9X='Nӕ;ʁ9-8>R;PA vkg_9)|!3Fcpԁt!K֖L-#]F&_zzUKzråe! " '0 %Irr`r4e! "I#cȂŘXpxSD.|~FVۄ{y+'h2 ?Y4fh Ө0ME +9I*BbYHR9")5#qG!ENTȍB&Ȓ%C +DgiU)0Fdٖ#Ⱦ>3q)rBnI,![3dr@epFN 2|sycDH ;P"J"(@R h(E#h @p Tiq0FEC{>GIIJR1imFjFil}jrNjݶKRbch%vԆ4gD4ۨƍ)v豱cN4xVc3>-3[ID{BBjDY5!αړ*5Ѥ$bX"*54i!RB٬kfHƤ~G 5*4u(t:jȜe Đs5+j^5d|3AiaDid!B19mӌi2sޱ'f5d,bZlm8~МYxLu75:PSrOdڴ;~}rgf?=.w3P N9㓘= .ЙpAxyKPweҬ%ZsGf.+nl7[l4<|L:KN^?}Xj*3YWY)Uό얶N/5mfMb@S̓w=I6u@7q32#mf02;nڙ5獵\(,w/Sm?;3$_2_-xq]H fVG܇;Ix-Bx5=>p SΣ%ٚZ(0g?IjF P2@΁5 Rj4DdBIgBI )NPaZ!)')-R^ )1RfL? +4qrxK/-s I)Rr$%IL ,YN|9G/$Hp-ASCĀ`{J_q:=88\a_7cͲZq*&Fxtɜ̓ yxˮ-? L'4;]dz%nDn#,mO?SI+;yi&U #]7+ X6 -Cq6]LJU;0ہp&;(Xp'F*wtPR TWnA[j6"-p*bEEm*j,Q`̱'8ǝ|E+Ҍ\Qf ; Uz>;ugkltz-9+<޹1;MA6Lk|5St'dK1շ7N5X!& RQAJ1bg,rHZ+s1|gNiuA$L +'yFS zù!#)7ȑ3%Bx2t +)Bc("S"Jf)@F\K[B-{G< Ӕ3Á%P02PL g*RD _H 00x$'eASR+x-82Dz'^jL +w(EZzQ~ҭ => Ga`$rAmL8qocƶ´c]Vmlž k.lscNJ+6\8pz[3^ la5mk]Sy}5ٸxEe{> ~?4(::!#?>><}G+:$} r1;our.egz`jq8ԋ!5*u^U*XG9q^D_LC{մGc{łyLyLLVP1sAT W*!>lM; +'.^զ__EuS:=ח?׷v7z~ЎP̳ *q%`3Sn-4/->edx}r:w29?Q@?ytEwѦΜ)Gt^Lƴr<kǺ{tEkl~LDlL4 +1I3`QC*^6rϯ߲|S/Љl۷v. l/WBv|ޮfQE4fնhlɾ"'/6>ne3yj-=zkoj7Zf?b'6XW c?We?G,?M ?Y~c{ӿYfO`15?9&f{z>ngߢ.}<}GSX:_mxY>'Ϸc_>IS̴lx?-PxcbXk>5<mXV 8>%{4mpoaFp"U4O`*NP\mzUU;TMN0wo.FgK'ͥ-t&z\_X{\XCkU7:gƓ{ +<7PV }ڸA o@T({ 6+lT4 +ק a{4#wH+D,O`cvp.頎:y:mKYlsЇpс⏏O>;]";OS)Qct^<#VKD0 z +YGɁRu +{iK#s-;%8k|Dj?Yf\>~~}y^~}}k;|ϿLJeҗpÂ9ւ{H꣋誋 i?ޜ9t?ܛ&$,Rԙ936v{[=w,*Y1]&|Y[N||){GT qߗ/_erǞ8=sdaee$.1ja*`٤#$% H_S*/d&iI"3IO )Svuz $* E舞O4E%kg`dXZ:7Kht%>)RdM{CcH_Z0dSƜQwۡЭŌеhT~A )[ΰ^v} P_fHh0cH|eɚ#+y#wќXe` +v +/ZR`xU \o0唲ɓGg$c+`Ykgj֒FE+ƀ -*F&{u=iIL_-}7B"~08Rr@O.va{haͺN{OK/CL}qv] +dEAAh* `2##0h@B2du;ID ԐIsfK g@fL#Z +l$N)Zl;((ָkcxqsӾ7s \8 I`!I#//XE2B(\h9~Yb*Q*J*'?cѥĕPַ/-YkYZUZaH}:&>VU)#VZ<43/G]}i4SoH% +/K18CUSA Њe }FinjPM;.Rvt>`:xKzFU=Wo |3h*1 nMF/Hwdo o=yGabM.;Qǁlk0e#VH331œaakݣQݬrVVsՊ6{A:0gUZL=wt_tY g!'@O *{N<NJ|:ќbOW)> f7Ч¹B EDfRx1P9pÛφA{:FF_tYʖ(25YYh9djeb40 wyʩ2`HƼ$T%33z=I[DcIJؚZ|5 ^Pj qp3w2vsծP=|])[5=N>\`w?FWqӳRɁsrd7F>=7Ok<痿K:s//8.\RڀcYv>=[q*BFY +RHqĖ/FH/.r/b/B[;5ؘP ǸAl9C9MWo`sfBT(4j&LUqTV0ՊT-խ\ +U/E S$%s{=SDӴjI2zIƬu{Sc+iP=Uń]@B^F8A,o@:0\C 0M׍í7_#x(=deEM#Ӗ$HEL}l઱5׿UՔHwsYUUӕ*}PeedCW}YLc2)J#@Qg=9|[fv.>ѨSIg3+hr}vxo18ޘ8 +x?Ҍ;Em8Cc -AB>8ҼYwj:S-JHZ܊lXFSUu ՚rnlO^+U + Dz(j萇퓗(*ܨ!jE/LOV~ +bUda.A<@y'Ф$hT'g1N0 x,h^oR߂ۮ[ܭ7_#͘e۶50q[uY'~-۲YyûPI=A@:rPSx'7`2N`ED8f`ԂBѓzy#Wt =}W;7!`􊂞@L9"܇7Y 3a5T:)KD2#G(،##55O.̠֒Mf5 mLg5“hBd=QrtO $|Cx4QGPX0ĤKAv6#vW>ۮ`}Po(`ƛCk]Q]QnwEyWwEyWzϥc Uض>Nv ձ Fg;XkX Z 4{4r}b0prmu%p4b=1Ӄ.L$(Ī81:,~֭?WL3U],T~^3qeIQǶ*DFֈ(b'H $h[`a2^&H$'o9!wsw cBIҥ2G!f@sKI2< oy ++:h5C[;d]#/ 9K$r㏃gv:E^VVI]yd*h-@sRp +NzN@O +`*ig&4 L+-o[lqzBsWZ~a &j`!DłqBU]!6.( #Bc@?zQ}%&mxNԅH@թc]Ê7[nqy1sb"Ŏy9Zxn|Jy&ȊpQq2&N ٙMI \o-q*mbl]ɪi i?ջޥ ǎCL*J?C*[)¦ +RϩK &FE+<Iy%]ǫHy3o}y +&pCKZLZ( 38/aihmi)ZimW7{Ьm&FHjsY[v|Yi"3hBO +Øsl`{JXB +r1 qK9`6i]=2'("Snb^ 傧BLo h| ofM0J^LmҮNډho00/!32ݲt::H6'uӵͮچC(/T+&K]kVI^ige:r]I8q~(YcEywzc1:GU[@F}&ʬs%?ApBr:SiUԺRcodۙnT҂ beաOѝjB'*1E?.7/$a1 bevfF"ۙY*lgf,2k؝h꾸xrr(8 xɍ~jY? z0L'ִMNNxITnJŻ.nnF祾5!cUOA2brHeInGN'05[֬afkC-z^htsskޓ!z BQnS@ <eʨ49HEJUiRd=N01oYP`x^#h#K#M@[EA|"㛯ءܴ˚`jvKWۈVXMCMC6A(r0" 0H"Pd`V Ш* 4JzG$0J,&h+hXT8T +p#tEA?2Fޗ㾌Eﳸߤ?0~B2J!A뿎} aƝ5t?m?7܈aW41!6(CхET %(:PT gsA )2`2ǁ73-ŴK,!#'Np([QTjw]z`@l$$<@Du;KG@&-a; X&D;1+ ) bXٜ&n< /e|a9^ă>Zgs5Agy\iۭFcniU;K 91tb IB2b.jW@Ul"-i6z dT+9` bE^ԼӬ!dEmU"Ve"yFʬȚȒ3h=%- ;Rvw5\g+0hሇk+'dlvm #rnF΍H_W $H nA!MƅH_<#[r{!poo9,FtuiՒu$I (f%pR~{PDpSɦFnU@kAn.F54Gӄߤg.>%FmEHLM(mF:`ԉ&4z5'wQfUƸP53xr2!YuvW_^^\'˛Kɟw_鑉{Wzބ{IU%YEqCt/ &[:5_#xH4mGҘxsYߓ}=rLwcz*L+[\V^Z+Э֞֜TmRgj +%X{}G$]k*Ը9O$F%yh lW1%2հEŢ8YФJ,Zި{V͟U]{Uv/TbZ3힡Fؿz2uŰ5R`JAĀZye5j7"*MA_AL}ux0y+KpfA=x7+NO'j=٨ JFc\d8-;ۏ2X31a4*NبΪԶ*)bZdl ^2Jb>Ĝ]S?'5/*iO< 4qilO1>T=C5RJ9X~SIiffF^t %H2V)zYƶG{CL~l:ʩ|(qoԼe )=` @#ెCh6ǁ2Я-Zhl($e=D'竽KoFj~5{DD=Q@#F+2;ExVyO)Ͽ\ߟ/_{OCI`/r,5\knU?ý +/T?Z,*} D I|_!i&eU2b_X$FF M{I8yᔰ?b/7jaJ,k@KjN͖pT&l5JVLoE"/+&`8tlz$Nw'wۨ_K. bzW[2C&yvjYZWuL[`$fpӲrƚdbmD???{vkƝz-_>i6u_NjawnWoovw7>=_ߜ}OΗ﾿}i>~O;ӶU\k\q!T5cMx2㮼F-촎+<}V?Zsm`i"O|{x׷.><`'n7/n^.o3_3k_zڗEşn~ݧ3i{w^e,8he7pT04R}nBkߚ/K;譭jiX#*aN Abúm0.s€eBX!ooRfWlB l[UYТ۵Uxg<6}ù\ErNb+훊`fMPKƘ`_weRg8O-5ḳT!š|x5:y|jzuTEcsl V,I1*,l ]2yeT[cc lnCIrE9aBҎE}n+"UMg[I3I,x[`l3-&rZ8'~[NO΋dk*lTv[U~>7o+>\b-k=eP2)pIɶI &G\Au4 B*ҭ$NҌ4ꩯ t9E[{k@xkD +3pcbU X - 0摭t7Ko, t'+ -  {GEBNc6*Ni}+.Fג<.ʯ{m~䪶X?RgPQi~`p{Tk$n-ɇ}΃VF%Wi8JV9W,GW:}h=sk)O<BYO{Zɇi}.!I#ITaֲy}?7| ~qw>?-?=>ݽki۫ ¹xDUDRPD.^'ă &z)>z'7T¶Eg۾nrw mA2,$~IPl!u,vYwN+@d}^]m{@  +nE<ټ )([NauDܬV50wjFkռsθEyբT +L!:Tg-AKx]^`jqi"V), ;?QE#a~ +Oy@}H<8UlF44  &aeSyC6شgX_ (CO}XSt2yM[SӾd#5Ύ[p8ɊMeDb}]fT<!igmJ ö +r*i0+杗]^?qG7]đp*QE݅*ΞK\ec1-G4ƾiݩXPᙊ8oj^~^wz,VOރq@A 4+3H&99} 5:8zS.5!Ds\EG8al0,Nk2#0[Ԕ#/}CbFB甌'm<:Y4" {ﴚp]J+6̜U$к5/p]/]UQGY'0f?,VRUj  ̱s Gdd;Bt谌vkzrv#Yas*ipgs +Z~fAհR굚3Oǩ2KIz8[.rpSQ"̕[]IBN3|D4,Jj൬Ԟhyoguk^rGaj7 ֲy}#$ZD(h՟6ꐳ4:rGO!c؁J9L + ъL`&eCڵd\(B$AЇ5lQQOSBĕ68G *r{ 5ʙ{6T㊨ +4qI=i$ݪN%$[=ZaBlQ6{"F +\$IwR"#iZ{@ꤌn-aI[ C0$5 J%8h -e4=bh>Z"fi|L$`Rר^4R]8lE\Ku/InSEj"CM3iȪ)$z &] l#Q(NuY$pj/|mvf-}D\QULwg!KR5f[Naj[ bdн߫\FǪiaϽ$sk% Ct T0JS\?3 %ߺSaj^~^w ׯ?=}Ӈlz柷OOw>޼oyxr><}W۟{wwOwn8d,.^}~~J*@ ̴zŠ mS[|,ҶB& +N*4-qesfz|C8~niȞx$_ vXt(eU{B}@R4L{jrX +c~-\!TWlA}!aW.QOu}OdBtjB ,C`H Qή!]N`vMa3f:ؠ-*eAH`Q+>ҡ nV4O:Zq)8]LNdH(s*1՜]2ϦD`bhehPAJ3" 4 +|GYY&exTߕDHYnⳟ9՝=82ȵw9¦00YTgމ +gEp`Eڡ+04 +fY t7E}g Bjʗt`P_qHc#H?&0V0.bf )JODiߊn62@viIkj"6} -62W9*"Bdɲ-6RzZH7=N\}aF*>׶-7^\>[uuG t\k/EzNЋ0hb_!i9xZ'O2;XHX4Ǒ06Λe+Ow(TYKwMQ- mP@K,kr)J6{0樢3tXw6-c$lZd'L 4 @Y:Zv*[8*7ՒP¶DwXP,G\sp)Z}ԑMSk!FZ8bfu{#{>j5=yZxAdT>vs%BJ崱Q /4N m\ǫUU4j`IO F]3ޛ7:Oc}ghÏ2Nэ'iRem>stream +H s~N6qCK_388Wt/w%b1^޷G_˿|LOMا;ʓB|[f&6ΦpO)y`+Z2 1k!7hѕF֩cze'vS2O]f]O8ܬ=jT=I_NI%*V Cex-`5GBEp[3s7x$7b xNۦT~;FO zPȄ?̙v OsS G΍ !oN^߶ޯNjwz =)Tt1TtEI{r2DWo#yW };8E@[g3 ?.@;ZZ%F}BF3'О[;] 6#h5u;>X@bGOF D"Loj8dfS9n؃E1 *ޖC[/Ue"nMm%W;l*db\ϧ FD &` g{UdԵ6rFN1CJ\ X( (xAJ֝ Ÿ8f"U )Xr.Z P] H3Et%zz)$wNTɽZ0GGVK3׆``fݤ3Ăо{5RmS[&AL Gc^E=UoSIzoG5ĺFFq;)H/iQ΄4E\!v5zu?a8f!RQWG[A]׎:õPÑBpl-d 7©h/[uB~){'꟢% cvޮpir#O2t[L#nEE$"q/Lejȹs⨌cK)wܺ=/C$@J35#,Vjl.L +feY-N*ZHyZ:s3[ZT.KJ#2Um/ocrQl#"z=+U)GDBJފ(G? +He˽ +IRg5Ґ +Gb{kFAe#&l+iK31ސRUkڣ^[U (5΀lab pxO]0rRgT*&g(_P|SS QfJf8/DccKkh), KK)+S_Ίb(%\ZL^ZͻMi!ӂ-{P՝+$btO3ީԉewDSRm +>cTԱ9Xc 5>lɎzAs$at|IM4Qmi#ȹsÚsz[>s!s,ocfnq`D% +`2VMŻD9^@2I1G +d=9a"ZQ `!D2|NI::bI:|KRR4xsC4 &* YÔ+Ϩp!Li<l;G v`AA'EĮd- SZ^9@OA g+]-v#_-7g3'Ƹ^uuF@>&AasIONN40@Q|֒ Ys8j6 3sUUxN鞗<PqI rj&Ca^7|:o*[-<[h)} 2BK.m C @bWI7D u#tqe&^Bp>1 ׁ\8RnP)6Y2cĬ/ V&G\3D 414T7>[ƢMNjf.QR rS(/]`rI Z bMMk m:["Mc׋s BwW6mC4h}As[a Sgj1AdNOCU&N- ;Il%`~7 +nU'Pab L2|k=BeRE~ߚHcyE`L+P_m(DMfv +ZKo +giw6s|W(̭^W2#a|ImY*ĐO  ͟²e#ah߇>_!0 *+qAOLB&߶> +*NښZd ֥"F<46[h}x4P 2 s YWS%/ +KGB3(ax9[Fn- dԝNBWn|DBKˌ4RFJ>)VzR;<;TF JjU֖!ӔxKeclW +N ֍.͏NCq]C<.w0Fap'mlODsC Ԓq3DVi HF&BKsУ%"G.ZфaDfQD ri INcS:` L1 e:7j.ynn>^o._˻;=\=zuoϮ<{x/?[~-?-~tk_Lxs}?>xf8կI()zˉp|v{o!hGG{}/p~U_+[S1E.VK'R5VJ&@ճҙh I#wFk;a E:"j=*x'|o6WTTFc$$xo͖Vog,aq0XXϳDLꚌ +!Al_@lS=͕env';(Nw~xWG>5m#=}q]w: -N}?Q&_-Wi ߦUs\R+{WiEqR{j>QABY˯RFBe5(`5,t)޽,7?;b&GiOa$['m3J| +Ph M;FCK5}20ꠁ*I9_7j/)γPd): +]K5OMUXJlqUS:} +OrËRd򼕞"ktzǂ %ZnH$P. bNI#="tB[i49cQ +((*o@c8fIb!fҩ/rDDRYP钫?e"j,hYY0} X[ָu7ztȨK:GFU[/ +^?wHoEDcF3:|1Gai}$M< e{(QmvS'P}-(1'^U_?{(f NE_޷ q3-Jc v?P4VkgԗDB1QB& ܦעNL;EmV;]#ud{=K 2pu?{I'EhpG:nLm0y`:u┷5w{HЊiF'%ZM5]pOsOj?wǝ4UU㌣&NJ=ZH߳NGp=O9BiA}4Y|o :A@yeEa<6~ ++u(VP(vd3&:T +PI)waFT x*&#ё1NZdȨH~"w , + Z (T= ^[K7iįޥeMj"%wF5@~hF2SaB"K3$mZ>| ZRVѻRvBjg-n +n85E=!ϱ5d+VZ<W}#Ҁ]ެ\*պS iACG߸$:82\Ib!FHZl'%^-LXz.4 ,v9Q3ɿ+. ǫ_ ڳG~sZ慸5ҙ#|!a>cz.Ev.w5 rGCZK} /#tZ}05߉ηzvvz-畴mh/# 7s[4<[8>8L`"& uJT( Hj~vnVfi\+a]"`3Ϛü.4و*CaF!H2QRvvb%E"\xuV(X7,:6,M(aŁ`'Q˪iCOgW;SG %٣qQ<5z¨NۉFTHV^Bwaa1Bҗd>x= +Y<;2a?#jkd(\vY }Dj"-Wf&Gm[I c_~28!8mA/ůQ* + {I3"(}jst.lEP&^eڰ425b˓IY;Q?T9 tm"zOk@(eQ +@ʱ= ҽ吽0Ȅ'pb ٮEozʱQ2c#>GnR`ɩ1`3zZ[?L kYգz;ZﵠjjRt -_{tOAwW^jAx)\9${9B/T^Sa< +Z{׬Jg&.98ijP.ég7'BXg^tuj6Yd CG[rb"$NHe87A,)A1w7Mng`TRO?]65"`ZTS63z_ٮܟoh%znWYE sk1WWJ )q'DE +nPQFkW .#8stydyꆭS)[&VAst_y?nJY"9TOڪ$nיgg h ?D'?yP+$@"S< iꎅ6uo٣S|TG롡٪T ĕ{EФCT5ުM֍#Zu3}Z)XOCpd&zt5tGRtsw*E"k:BqMF*~Ʃ.@p4._N7[l 'i\dk}²PER5'Z̊Z *S_w34]gXd.7Oh%t6?xi0T6>TqQZxwikBf6e[L|G8>0:*azH-nDM$p%+O3{p{Nx}iHUݢr/ Jl,5NNK9,Ό~Hd%j%ôVhMƎahs <_Crx9W&61i)LnYQ X'Ҁ-6z/GY du*vlA9PɀUrQG@3w5^B_g=j3OFdĭ4'QzI 5:fCǤuw1eG >̰>cdm4 V"yi`cPV0sy-Ґƭq>=Y%x)4 /j+:s46(u/{V2Nxկ{w'~iMr=vkG\R׷.[뵵2&s4;'Ldq+ F-zP aU>Dh hOa9]5C0e+ @ ")c(!*Lۋc1wJ4`ND;اF$ ;<]B/٩ +#Ϣ㢨r@B0oq-g(TJ@qmxOmÕT> ;-IhqfO:"S7Eqc\%խ2Az Jv&~oO/?߲o巟~W}Ͽ__;`mI>]#*^kF.5R\+ v *hNƂ2˦Y WiLe9C'5qLY]2Zxy"Dg5BdKIjѮl°v ?L!%Ou3n1cݸAY j֜gga% +^WFuhnS7!G=xY.xbNcNlkY*ґws\YGy1oվhhCHZӿtA]t:ŏZD^.b6ޭsFIG㴁@N6E≆t9=M%DG{?7&iJ 3PwlTMk7sZ\YX3R81 +f:|E,0a:o)@l_ZMod=ϳ BJOz) jÈө~RAƍA}mBe_tMR{?c54~|ClflNWq4K[Sc&QX3,V`&dhH\o\Y*5@lݍSLT8gHgPғSή’-T(_i"K7)o2TJq$a)i _auVճflTNhY[83η k3s6*0C)t?R}u@$(Vu1*xQ* #gI1z8FYZu䆌kmZ"rJYXhP_ -` KI' N4ƭVs ۴Eoݹ4ʲ"L9 ->{IPQ%FE 7 2| ѳʿaqw.oGdb w=;p_!Fj5o,mlgkұM$5O{]`iqw'4Q\o" ^ʺGYx Q"i)V~93.65VWTou*:s1>AXBU jӳXFxGKaCH|KFq.ïAeq{#_J=/@9MF'U^ª9Kn#8HwT}:kJ(ǒrDɚԤS@x5$#'ެ#z#~ Ұl}"lvUC}yk8՗/'hR#zuEJ\RI7(X.̢MK-֪߸|N~aޕp|Y%7.ؠ[v\t)U84-ET ْlR2 wJuZTi@@ܑ o]0gTU ֏6._I/Epb 17 ))r-N "yXۣzNʕ741L>ֺ}v`=S\>Jz3 ;֛8Uӂqr8}v]%ggԥ ;p]*s"@h\JfV;:9]7 p^BT&6:x(9 #=[x9Rb'@ C]]Cꌇяr HI|"Иǎ[[S@V>eŪ0~Xq6[ ׫_(lTdUB:N3,QĈR#+c<%1kiX{lz |}Y~ۏO~ݏ?ח??_>%ûG~|/>ۗxϟ/H&.ͥ$1 &E&T߾cYzd~տ%YU"l!d^M85N@"];{nǗ (Y%mMn(}QWHƱ2)=9=н%fg$ET0MIT@ĨNu'HP}k)S{0n[H['@_PTm5`!r:dP-?e=P$RḮM)0xV\#EC~m2_&p3jbNJ[o>lF;IKJDmt4$]Os˞-%5N4 y/Af~` R7#wXW^HУ2W9G1C/&S$,"K!^l dx;G݆QPwm% :QݾIXes_?ئ_N1m.K?JwMC|h T:_G]vXQz]c dz5|= jC{)^8Nxų_h IPk.rAUeM~(X^̡>DhՃ$i*hZquRTmk(0EZʽu +GQEơ}K#A]˔*VʯgQ߳@%Kh\+)8'fQY=Iv/t`?j|s*(;WSZ wz0aΧD)i٠h5 +~0KdЊzXەʔ*U +5hKRRP*Im]qR 4*%=p'mXfYlӋF~Iͺ~2j RE CM6@ -5ԿBSY}x݌ǥQhlX#ОhUchsoh;g@ u +S'hĘ7G/*! UNYn O79{sm(lE 7q;R2fLKsہwMUnbp PV<"T +IqN_ZaI6̢]F` t%`7#K=[[ 2+gT+ .)P-JuW&U] F`WZBߢdPD}h,D"²LfapD.7:v26Oh|.e׍rJZdЊj-}|x\kRg^9e݅Q ΎkXb;ˆFd*al1cQkNRXRRŵ>UI9fAyTKg,-߫d.d'\=au0˃KHW54}257U4QS0bu jb*FNҍفr)f! \˚д2nP gI]^eE7SJK0dVUL*DWĠE=eĊj%FI=L׃FmE}0^5;o_n\ +{sQ?)GD@E4DZ9N +C8ƵLs{9zo:ZuZUA,鄵?Q2.qy׹q ˆ{Zxn#QDq$<#,{%|ŁtfL?b[N4^2+2y{neSgtT):H2LE%IdWXQ~Vwe(܀UT]f[CnL*i^dUG&a6I%%X4e|p r<# S~YdDQWU/N*Ԭ yΫWη`VCДf1%̊SϚ#G+e]1nIk#{^Ino67rdǑ诔=@}wk9dfV_4UE#wiK=ӟxpUѭ(s!R`#_8¼; nJ,',k5R Mi+6N H$}  Q'f +2a_]^1*Ҏ`jRZ>zvz cAنs&E1y,o0Z|-?ry*)끄"r,e*H)$1>){f >ڊwQw迎5]=gbjH& WE 0qL&V/;_.|(hvPoD9}3Z7c߷mJC 3߇"]KH6+nx5ߋIjv4J("UWG$y}_N%bZIN@+]1j LvH~Dk-5@ܰL A#, 羝h> \~!,^;%ܸy|Ŭ~oD>)4[VЇ¦vM`Θq~}<\?q9SSJ8N6yn[Vwd]mlMQz ]{N҃XjC4W`\jo-Nf4F}2"KPkAңjp65~Q)̫km9@6H&LaZ^4ĉ|9!@AKv:J=[:H+PQkbFȴG\6#a_#+:A=#j[pl] >/vWG-/:!w RO ^<)/G畵ZQ}U.RZK[IW}->G5Pq:J#Y3%P@{xx]14.r5%ly=DnEyfAcƬ +y(B + +׀d/2T T Wu:f=eG.L^O%Y:Z@?ib]%R֧,;hZרfU4e(dy8™4oI%9P;OIwR XJ$>ȃܯQʰ*2ַ"d=@qgC ?x0Ac-Dv^CaJ$ig;zafAz3N+D &;Πü7Iy+yǰ tb%,fƢƢ{))8;QysTwzrMʤO"OXڴn@ZjaGt -ĸLeEFv G%)3⯕K&;{\s9doC +D.k)IJhfCk.$ _kdRD1~DH0&j"DZBtDڍ?6asLZlhi,UwyrMCJLi!ЌrN.zK}Yp_w  ^g ``CNNk ݟh~kouTE7qj-)I 0m4ֹ"}VԮ-yӷ+l6:.g[Þ? [ZN3JVQ.Wx  7?d*PrBݼ\|E㉾MUqB,̊ +}6Bw׋1fF Z k{:}3*eʄk6В(P)Uuh;_[au:VJ > /6?엥XߪE$LD]ât^O5H"=?t(& +,[ <;:Q=iIxH1_[hh vVȺ)ڏǪT?VtMS P^lW|+Zp+Y"mn4L;Z7.Ӫ𪶒~vTGobVEHb8*K s@re-K!O"wAzY7? lMT +u3yMڅʦ{Ӝ,|]9 qѥ⯴S>9ww*Sy+i%Vhiɢ]Y\@N-r~.3'x>'3 ^Au(ۖaU L-ޱ=$\#u[i=G63Fo"?נs3 D<$ϙ:h%vCS5Kp|mK{sNEqPre\ӌ#ܨxMys{Mwv; >ډE]F,fz:$-Ui[%%h+df9FUBbv5ō̲l&O+NNj?@zgPs4z_BƞI%Vʐlh6ThJ%s>{%ڲA`|a7=nTKΪ2jSa"]c$| e%Fce$g&|0 =1a?u c Nh0s$9>o[ܳOR3M]k7HyvWlla6 +RT~i:%$69E\/vR<3J>\:v=$Ǯ㈢[XR=+j`p` w{nd_=',f]dm>.ٶj]ZXV-m$%/qFtZMOx 4NJNRE?5ΨSjC؛J!{ǙN#6l6b cB9ePTԱnQYe )5 aӗE[:ƶ˟톿T RN:zME(c3 QZ0o M5dyH[D)u>Nqmd0MTXG4IYv˩!%i¶Ju2ѼH7Ñm8~ e4ūN&ʔ>v VB1> Htt'V@(7yIְDmL{)VJuPp*y^yg^$E ㆎ4PbU{/ /6.BQZ%v۠E^IIyu>3h35HL !g'ZаV"a7SD0Kg`c'>=n- ZyfmLi/@[YHRX PBJHnBvST` ,:7T`@%4|SxNZՁ:,w<̯^c52ا2p vi`dղXz{D&P) +(>I!R^9hT@Cvڻ۟ +X3zlsJH//z:Pv9vz %a㏼JG>P.-J-;g +P"qTzR75Ät X=m`DkGԽQ@Ӛ"G?M3iYߌ4()p< z )-&lbx's-<wʜJk!uh[̊桹@&z+cT0#fR_ +$Id X}h +uJbAo+Nۃ$PS}QkOcR&K3qk$½5iP+ *H~Wl+dMqH\TI跧k`m<,A_n9 UvKUB8Iϖ-@@)t+v5O=W#έ"-}{ Uo_jKFzh ց'/ @{iOT݈|ظu~.@)i*ZQٖ}uvk`S!D1Yf/k낀[ +BMՅTnOGŮi֪ϤQ9j {\bQ c[{^uCphB +Z+*$xJ뚄̑KMԣqOA4`? lܠJY0ޝ5J^B\xEpGPgtӄNVޟ @Kh]%Ҁ(Z&X|жL/m4!NWy؊ l%BFm樝Jk P\G|]j@"{})ݕj.ʩ7Ly֍*=Yȵr +T>u7ZLSQk[C jo4[~mZ/Gj\4:6@$Ѫe4~@38ǃ0?K; GeZ~iؚC2iûj^c{ V=œ)g,k8!I8E38*:6GJ8R:Mt+fKtoTۣ<j ]:%VF)ha)5m8nDô Y><>D9Ǥ毑BhKrHPq6h:* W.#c[ +()h?`_4TY⩙mN"R%j(h*RUG#SBit= -T7ƕ`MW˩&T nf*FgGJǾ@ha\3/܀(mJK:Mۄ!%;YiLܹޙf!"3R7Vob;R^vxZzD̻Y pndԮ]WQfqHJ],Tjv˩X !,`| `-C0YW%y^hd]ɨuRG/}t +ơ]0nw^^şۻO>7~?=yO_/}ݳ?<'}}Z*!h{R9ũ%0EjOoY>e~o .%) 4FxÍ6ke3ā +ơLFe7A5Ht%>bw}J +r$. ]_s>ćTj:Jl|MD#Bz%?G] !ٕjWFNsӆTS5Aʘ+ +Tֹin%n~K;_ C# & ǡ/P 1o)6Knx,R6MJJ7|*IJ4HH (d$jpRdPMx +Q2,=iP3YR4W28T =+`r3wQ +Ilļփx^Vy+ñHPDHnKyl;=zTbѳDÔ˹ RU|㏝\z6ivI4\.*1čDlm:Č$T5B|OYV $K؜АCC)k*dXھ~l7hI$lU42zD+D4OT'̰R D-iIV7#c`vZ+m0UI[Xy(9]BeP8ٺK"'msQ).T/dƭ/U*3*yZz4$Q@p$`҄^#KoGCjwq0"r +?`kOReUv!h\Qh57W!Gimgs/kŔLA i9C_.p%UuM8]"ˑN6aRҵI(T$+҅ Tkb{7y +LdKu#$K:+bCb]BцYuSQ}"}$Uz?k^* +endstream endobj 22 0 obj <>stream +HTW;6 ];LK$bdr@z6-A$ϿdzG[,cџȶ?[ָ֟Y<|>-SY3x~Ewqˎ',[Z{γ I b暵-NO!}f+ pOg⺳= [?zjOzӵ¡{Ccԉ=p:pJxiaB3b}  s{eQg\|ur~ェ[\$~{axϴ8!QŘo,3rC˙,@@ DOk>ܘ!GM8h*ӸމdOU@q@o9_^7v`.4&&28Q <_qՑ[pT#ЈOf8Ji?"7߁~  :HDuf5GrT!BPtvXuaϑtM'w9@_NtIpp0C%_hBӫ(5y[⩠zou nVyEl-T ^.${nvux.ZOeJ|}!&@}-?{ +Mf}uM'J\6@Ggg蓀f,QZ9 LC0q?-\5hOkVXRY. -2Ņ^< !ŗPNB"&o-Ɣ R]>bD6蚆$Em%/!D$UN!%bYY} j\s%@h+Jc +Mh_aWէ[)̛J6rxeD(*7CZz)yE"jiSX)~{ ޒyDjoD6󝺟4"fsϹPF=ۛ*_ ؈SY bC v0F_Zz\wAc' +E[mlj?3E)Wёj\!}>\?\VoGT^!7b*e-zTN'??=0?]za\1p9^#c&4QayBiɯI#EHM3Yi`sPd +Z6#o Bsd̤|aGVn@AV_4 ȸkN[fi#0YKTSQgfgs:n5xp+S +(ās11 + l9#QUF-.;qv/^LuD^>׷CǕDtA-5?DKNx]F0}Coy7g:$ ;- NQm۱C)_Q Wn¾ya?m*6Hz.yxp +ƈ3ů4r bӼډL WFI6ݾDA4o~`z[(VUN~PT)sDA8!|Z>ݡL6h'V(aT*kWF*ĎXkELz}r宙c`g +13_⠡Gf5[eC*lPuK)$R0էQOuS}M7u)`E ; U ܲR;z {2y-Ȣ$}< Q:^!^˨xUGh+JvQv+FkIV5O +#piFn~$+OU=ZeSz*'S + +NUvɞDM=zR^QvIvl%s򤺑Ea*mB!^ {G!?o|?~_O_|;wMo?_~w?߿~boe?+^Z*>r>Y{>NO+ dW(q v;-ANFF +˧RY`D^H,^:A`k·ą^ 9Fl㶺dPSfUե/,5Fq4dI=[;g=l7(wӈioPjWm阙ݟ+P&{p7^ Dƅ8yR w9VN5yTZ.dy`%½$b*NVDFt$'sPeL0F*b>.3O.iKKA;/kT,VubIwūq>nI%&3+پaw@W-\zq^SWS"mo&Xa)σ +^p̸ՈXHN0ʥ/+NsX k-yrKDf h0 + .iIqNJ-v>pg3Q?{JŽ=x9bEnHٿT2yK6dէ32U GV+y?,9z }Q$VNqՊPZ{!cX.0s9Nui-;t+ߌX+(1ϰ?yӅPDV>WdΦiFecO2:q? a^V/V,}I +'qr}H5 +%Z(؊ܩi6z{S+k`%ۥȑe/DV(qtP3/ \{'}}u +6Ie&>ԇxg)#r۹yIlP})`1\}Bbҿn5 +~-Rcd޳@yz[4c+S= N2ut2}fuщm@W0['( _'UHNJ +NsDn^=hBB9 jKUjoh圧(~{Պ[,$KVy8>t)I\.U* X{y1kpw= +w!FZ +c7oȸO~G/\ӌ"h+H83uTa).]X'5}CGOj%'8vKirDNM~2N9<](i$ +_NnfyEj ; _srdK;'D;"-(zamިaKu,IK{hrTQUji4 B^ !$wn$K2 =;72̰3Ș=Qs;uH!6L.y#QSi7"cYUuvApDՙ:s'|o1EvLY#0:BwG +E/g̽We츎P !D%f +  WϢ3Y6٫W/D5<4Y.c4 6ojWiz% `)>>EHlZ{Ч r-$H$qnt)<\3әk*o!lh2Ot|3X ar̆ %x9UDܹYOD.^L,Z]o60MiJUuW{Peo@t׼ :NI.k Mn}`̼ߴ1Po%k1G Ւ l9D*OnfW1;S ^ +lni+}?kj^SGd%qSЙkEcVx{܄.Ifÿ:K9նLUԯgogY >UD\=P'Y ޸rMD\{y$4> % ӂ+&x3PUg~* ˸pNGw})m]BXd](q\lv8FRfE"VW~@j1>Ҧ}˥Av 29L(цE:[bOKui=rH' 7tL=Nme ]Hog NS GIFI_c]S,gzIꉥkM%(TV]WJ?]m ލy-Z¶*m@ W !ug1Lu_/3Yu2c]/JsR^E\==Pw~{~$$#:eu~(,!bPɐc0!,d!p=j^>=h/kr!`\5̔Vz~!f[/-p9Bbi[eG}k&%??_~ۏ~?׏wÏ|:SӇ?|E}կ^+}.gQ*$aTI/$ /iĢo3-dɴ8u_MipBgFi6æOw#/aGEw.ɽ`h"Ò*90rS])Mjt0;¯%sMm[v4 ̳}@}8Kh#ɈMvrD#{[5tiȴvKPۉKT[/4 @9nk7m:+&S@6W$ZcFVXC<DHׂd SI#|z+d_*%r;.uF-E%m8KL$fl.]·uz^nbNAy%TqvHciITFϱlR)m(%%<잗ϼALj1L_r2S@''TŠ$ͧ% +w1#9ߪkBMWN3_'S0 jm;.+e_'(---Q8ţ4F+Ȟe$%*O|SZxؔ>}WkFGU ?'U T8Dr7SĎƶºR;qu>FܻGpn:}syѿ Ԇqj|ߪ%u- +iqOE 0|t +osktI^4Ժ~GhڙO'%paV(? w.+2CPw\4ķr]dubI !s=J\Q$z;XR/gJL{}Z{넮i' 0 ΋ǺY\kLQܩn IIu؟TmU `Ji1(Ido"ԺR0n cC92! \^@ #jܬyT!UUOZڍRwiPl3ڕ`b xM..ц<@nNh7[;:wT\f; +5֍Z6pOئ@8_;: +`q;TôsQW=.10#Q>D{\\)(WaV;<ۍHANFQjоU#BIZ` YTTh=P[YHx^ ::E΢ +͡/SU=mXJ{N167mbCxϴ9Bj΂NⴝD_KP/ЕQ>}mVG%|YibOUTu,{Z֬VOY:?Fd#O  mUP!)^2`_{ͫ=@"g+h jmH'CDLQy8nP=J3 MnL>[еƝ!ew|q+F&-{f5߳7JPpXnB:v/ę5ixYkt5c3h8ڮ3cf +ff#1WGT7gE"!T}2W(*Wh~Y`J~r(mUS",-bC_L/';511yQ}?VC dqJզIp@߽E}Uۊ/l1'#J6 o]&,3?eGR kL.|4AU[Pۆ͛= o׿~_)1U+5h# pcd3ŵ(AxRǦj궂ڵl.LejN `Hmn6Kw=h>c$%t!1WgttJp2ZэK+^uyCW&[zJ͂9fÅB5 =R29c]!jzr E?h֌͓#0} Ҋ;7<R%(O1*ǣp3e6X W"UW-؏*;êjNqQhgUZxxύ{ԡ9c@K$I LoQw*TOϞwQ. nG@9c֔*UO<`Q|Rkl{r +X(X-nIf,B(a$ʝԯPYX4s?>Iˉ0isXx2| :F[Tb85`J}@җ[7g W"1e=/d1ZC\Xs9` |s_/a'7kOc~+Lj +>ei0+@N=>JYxjQY0ބ@RsMPM'HeuΗv=Ab12]o(wiP!9jdf~^Rb ]Xj A3^:Sm#G{[[ sYrj3>e-S?ۋ9=Ria\@`?+C暱{AtIy{:<>]U O!*!0bQ=e', ~2*zQo +AߠC UCNas rnΰ9#JQfRdx/ J27z n(YW:bQ[5TM`bl6r6uLA +VqyG7xY#=܏*X>m*;P@FkGZ}fa}n Zro>機ATcMIm'"qtzX]3.V$ћ=J$4bރ\ߑ~fibV~q|a8z}EqsήЮfe +.0J 0alt dNwY;zÜ2 +Lҩ~e>7r&3mf:4%>GܢDZ9kr/@s尮N$rѩ0ECKsKҡWXr鹎62dTɕUXm(0eXu)r.0o Hݷ[zb:~_y-+tO 0: CT +O'f).׍.Ioì #;H&w@q\ MVbmC +i:=Mwq(MK'ˆ"fhV>>BWkvZ8/j𸦖oXT +@(iE56>GWm:p5yAoPtS Gv3m嘞:S9L8g}'azq4mc%\Xt|O$$x:ix;Ѽ,lwktgK|ǃY+<Ɵ'J;X'%ndjCFm !{5[a'"E$ ,J52˳ ;VD -7c{ +7P'"/{8O(IpyU'PqXM+jR~ų4꿟Ĩv *<1N+^!xeE?9kgQWz-5m1W!jG +䤓1DZdU?Q'E,뽍ܐay¿ &To P4BF8X19혰xXIQަJ:@CΞ>:fXH5]!BC>SkKSOo*8EBMVFꝝ})qf*Hd+[4w^PU=O%R.܌Rmr|Շ Jv0x tsDOBYd>QBexf,Z07yIDzLp~Y7.9$-ڑU}{~d&wJI>o\Y'm|Zş4;!i®Sd93D|Y0 U]j׬톿TS)t'S +yL-$af`%Z2@˥Pljf(P9Xǔ67J)`ӕ"z;:1uhWt\yu`'tfb W˴,d;.`r|ẓ.(湭@ԫ>Dܚp~T=k5De(4U ]E@dz8v?Yny@{tu>\mp(1ޟBS_DXn:%y)/wd%wh:b&T];/wjkE&02Kˏ۲Uc{p\頵imzSsQ{ rRz=# 2 0ˋ]yE"y/@ѓytDх&AN/ՓJ5P5f(Ma~|婗;DJEJ?yROtЁkDZ;]}:rיZ *x9iF#XEimGЃȂhLRNvRsk"_7E偅k$,^OTܝa~thiŚdBHE79 \/-feh%׊tƅ)1b! IYbCuɧ$@TG!)(O$buI-| crR#r=!v@3'npF _B9ᣙ*o6ňYȴOʢ#-X]1bf `Fߕuo2&m8)D0 dRvŃĪk.@T*&JZ]CaMÚ,-ޒ٪Up4,$# .eT +!cp`reG +¯ˁK0,@@k4/Nf2+9qfR0z$rm;\|"7zybKDzcydY鉺˔(8+\%a>R(px0z9YiU۳0]LRş!WSgkndMݖ6ǫfRos\I~6R.߯څ[ޙw-Ү)GbeL@H-(u`&U.ER|A5(~/ƍǕ1$i[4stZ F7mz.`{J|F=ٚ#\3\B}E :M@TMYbz ;%dq6TCRJRqv\I:ՇO-kIH)XuZmeȀkp:?c !'+kzbgbu +q%Yeb ϷΚ05f!$WNroqqd՞ um!7E +U!N,2f I6o&ĥ}BJ,+BL% ̚C[pzSu;^"nH\ϥpB+}:Ͼ[?^;@ʳ[D \@̻pbh&?I{?"ȝ8oYETx<ⵧ-B[tĈsUKT[J +kK6ZװaH@kk}B[j1RӲWUsv4~eZϪ|';ȜlcV2ש)ZzԖ1@N\b ߴ~ ۴ xB uSqI$饨n{+GYNJs:)@"6ET31KAf>u1m1hR]&VCa2q3hQ +/ h*O^7G&5@({y `JJfʌ&S#U! +jd4dm MeN#!K*P(gf޴|a +OiX;s6q{. ;֖$Զj>yK^iF Z=!Pw628H8KR]앙*Pq'j&Z?Ph ./f|ϭ1̒ վNiB#IC*&~<,l;v)VYTܲ +{j.fYnR̓ E)5Wwrᄶa,v38cHrO; +IWA;Յ!#BtPb[9 "jU_ tL@rRB 1Vk%zGasv%|c&`7a 2h)~Rr%/d>ΐ [5-Gm{Eh3bġyȘض'd*h9iG^'AsӐebgλ^GDt)8YIl! AHVm恳8JÐh)e7Z/ fGCN͡`ҩc'BG % +sjѧi;653hXɚm;P(YA $$qnc25|Z4!Hс/ftˌڳ맧wt[JTE7U?˕ Lb@*fr؝Y/4X.vHF6<xՍBQtnƬ|uЎetM%Z8+S9m%t긺WcI.\*`q)uQm.񟄸YNjijpanX1y;ʘC,уTHB/4VMǫ`\ (& M)lYlQԂY%8N@1U60× 2f$kN,a.pn. N#tv!U'6S*avDA0_FT+#;nbB;dY\OeI~OVԮY\ 5I#Fý9rr)f !8ζwC;-K܇fVW7KØ>JD9{e*1t&)hr N)FۧoB=^}ۇ/'|+_|<}{3hsvǿyOاfVH軠^̪>J 6c4`YB7'YS}:ԉȪ|Ⳬ?njr o( :迿\~>O'ϗ+ e-%'?D7WYKӛ;ףWWS4;3t~;;'zAO_ rzLwGOPIuDSC?g>ů?*4&Q=ŏh n*S^0fuyOD¶ϙ/6ךm&R'l2784vQ)`1 2I\yV4=eO3 I4w*B"(fr d/W%fpi gsWyÄ)mdY&_hkϞL\fG=zhhK `˺H 4J: #!ޝ@J@bf\m\@+ Vl?/tʿ1Ҙ\\V $(s<ʼn9j ^a6.*{#W"KwEDy]ոXj&PDj_FZQ]Bhp +?gs1 +?F~u\ +5 b qXLkPoధVƇddvKK-@-h!pqK E+ j@ =6jPO=#0=HV@MÞJro|؎*vvR>qR&5NӻYO*gzLh8>| Z Xh%фQih-L]A vPZ .c +5V"M8 ( Z+󄈐B\|Vq ({e}@ZAJd \9P\X:'Ak qα,dr&NNMZChB m|8 F[,tȉbxw/b9jq;V@Ap,Ƈa{9F ģZUh@+eo?jq;V@Ap,Ƈ99oGMz~&/A= .H(\ + +MEDq5D@}g\.8BvsЊηN7w?>x{{uէ/{?zuu?Oxg:,g=O/+a^Nޛ~q)64g~_mٳZ3VK-eYk3 #4)aI+t㰘nPIX +)= /Z6]0b$펡7fFZEBX_ɛ]Au-.*søTZ~ aXLbJVH!ܸVenuuispbst/q+8skﴥ۵au '^sJȁV@Ԁx,>֖[f(-kv`E*-D-Eg:,BPoధVƇpkz*8dZܓX2 Vu5>̉b4U˰ +f7UʡtZ'Ք֨WSH¤**SĻ`,2=|Vm[Z JԠAYQmT Ƈô{i>γ48${ +.>-8&[mRG0#H CPwZ,]#W/H]ͭꦰN +`kEvg}hcVPZUiB+&-q [(EB{-T5iB+&&#W."Bn +@c@+7\ܯ +H+ 8Zl4+!vS:'Ak4}Bf%-ӤP`a;P@vABPDhs9A VP+So +)q0G; 좆~Q-*4m~0[Xη"P]p*Ɓbo'Ӈgӛ|Wӗ?^_]NL'5ng&A? zJ䦗ӻfN)D~2nBiSG_³:_95-H ω>~l}YJT1gX4lXbN7zqu[67AWepp\?.`X(I{cn_LЫ/t+FsT˫@@Hig~ ֡Z7/u)U\!Tߍ'|u:ZT0/wK_c%Mx'p'WLdvChFc۵R +E}&cgf_۩bROQm [AnjO;A}q]SNk-hS(B$C;%@ ̾xF`.6ŹzD`,iMnzP(R VjV<,m׍q5i1+rB!.փWފR-.B#έ5 u0SVr}m+pކ0=BaL)IuǍ Z ٖ`H$Qk5=޾J(S;ElCG.ntcV13b\Kia"vl|[Ey0 +% +ɒRc=:rˆZK+#lp~Kx+Wvð_:ŎDRz[י:@]_OJü<E)pZ|3%$k-/`I_OMn(Lb PWs@ 1q!Wf$A2x<2(i]hE,h +^֟C~7+YBMD9wÎ(T=Gz`Y )Pu28Zt1 x +JdRQ1 >{Tط6;(9k}͜0 no'q: go`K;`LN;.2XiTsΗYy`L_ミ+lǠ:7+|I H\:%]Pfl$)VlI˶ƜVڧY⠅l{y{sWntxH$pjj [9xms0V}s(_=2ݡ։AVgڣmZJFQWπHx @4PLgǍm%xt6L\v^n *3t|o7;VXh"UA,B ۼćZFzfޜQ^uq>g`>PJ>ƫ)4"5m*[3,}qБLm󰛃”MzVgNuc"&<5|s%~ r|cTbm? [q$-g<%Ȫ[?јk*̀eޝ*Sź8>Zny78'zͭ~¶P'MX:MT5w6x[D׍< 㑍d;,3%Պ?ꖏEF"BRvos0gڢB YJ9Ŵs,&⼾BQeX *@SOMre@q]3+VZ6U>6rQuXR K[ FK}Lr&-qcW(GfR +$$ +6B@|Wch{g͋ ϟΕ: XYsd^:Ͱ҅z ,egFxRD^sp8'X20ƁR@ZqF0C )@A`]+n!H i +endstream endobj 23 0 obj <>stream +HlW;%7 s?GRwpŢzw j)~5af_?/>=x7qa7uħ~mp~h~@A%a!_Mҍ53pK &4tk"j.3à0;OE a@p[^"_֗ 'i δ5%慙we*iX>h h<8BijӾt<\@eMd,q _ed?Wd@3<. M5meyGuuB?ԬىK\ uOUA:J.M H VϒO7,?OҩTŵO WP=t[!Q zf$xxXdv[iA'*`´S_>>PӤ{`qϷmŸ[KMۖAW0b?gp6>SG@02Fpl(8³tXSBE/eȧmyAZ'N`"胎(?Š1;24 Kc|0E AE2>T;D} BN{bFah'DZC{NV> BSF2fpJK2T`Y!AY} {l9YJ͡f\ي>1TCȅ~{`5(V>Ekyv69J6qMf],E͑Q x*D=KblVB+USmCڲ:Zn[@ +3ƹ7DΖ>NFNE&Er3ּkv'SJ#י;5llk8L㥋'?e\KZv?9 `G廚ܯ E/.XI 5:=,IN*i `l9G~-؀֥Vq4 :_s(30mT,"NSlU6 Z"|5IͲr6VkDjǙz== +@Jg{m{%hkڠ9?XL'8@)Ϋ[7cunm^kH<բܕ7eCC4=\b~5Ō 6˃e|{Nڡ?X73L& 0 F{zq#Cw`xMNƱLΒw?end>E)]y_Dap:^Zg`qZiBݫk1C E v nGpcSţC)v\c U!/y%tb{?=yrSba. +c 6' FgAm!z*vMwn$6}`v" .jK}\rG7 pL^oIV|dn/jiY`ͬumv nYf`嗁hc2cCWK`E;@H`Y[Y#"[5]o3!bŮQQ"8 JfA.ݲ mX w{D<g'r2Do–K0ա}m4$g6l'ؕ0RA젣j#&Z咺~y3AV7+{[%xsO& Gxt<êdhW.IBwGg^$\MŪ_C+u._hRy<7]0A9~r=O1`z/u9>|p@[EvΖS"i,JG43 桵N9-S3\1]S3ON =|^6ɳDn0^p)Fhg\ٔ^ C_~ܰl^P}71(LTmitn<;(V2=%x ^L#}O3L}GT^OJl1qjC,?|jgSJ[꠻IVo7'N^yPyT\)+ q:bT9(e(33YF{FAjgVrB[R#Uj[ymr38n[VyzOzXq|iM)cP0N߭qRdX +Td23 -*o.-i2I:ěؿ[CyIsC'sp ?V.Fӑ*POޕCuo ;֮OIhUtQD15 WIqbj_NYeOBz"F_18 /%['jR$-5]1Uټd'n^q}T&iYӣ6.޸Q,Y{Pt < +JP7ôZr8p*3'=,umRu(7v9P*zw2&zks؄j1;.f\H}F4l[<וYR]sF(88x?OtP'@gw ] :ѵ1"rV*;di<#vrhyRkykt:Sw-H_G:.gk%R&Ĕk0[VEn>Vëk9<]:=\:prd$DtM"CQ7ptּ]+ +jcg_:mY c76aSVƒm]E⮹ӗF+4nxu$~h:Hҍ?3uɣrlpX:a6p^[YX 9B{ ytp.)k5΢cA@&.#?R(w%+).25@vCqp~y뫂4bۄʣQA;Ť[c˝PA:yjl?l%{LI`gd +38?krvg$^/4Whz&+3P-;PFB\v'stuAYi 5:uE?֓S,KΚLd ZحT-C)եjI{tKȣA8T"p}/Z\8y zОh S;-NgG$$bCF=;fAVl^ uAU9 l2U NX6X;O +OUr +ڛ7{jCrhnbT)ImŅsxxx$MBuV>&bȓp ﶇ,|xL脟qWVLICJM9+,(nsX1%dO pjRߟu bT˘:WǷ;~$mB]Jzu&E\G^MFdEog|+Rێ )Ms]CX5{뷊-v3&wo )lEPZ}ù_ee5tViG͒qRec +;z.R2<,Dz[r{YyaD_;[aJsGgpQ@g̡ۡ4`ߜ-Alkl3^2yͲe^l#@ +\Y7H4li:qy7LxIWO(gLLN/?Y 0NOA7{]YyR/x Ҳ:o1~r +Mˀ6O{݆&#sB$;)бx`xE_mm#GUNb`0v$V\/U[T9l?ɏ&H[[fLӡAb⍅50!ŝ 5&kIMr5, c:6}r +5GlFI 6F/266$r "11o XSxF]VʔYmbLy\ʕPIv-qVLKD@-d|QRFK"yv"Pʡl0mbL72*1lڷjCWN70"oIqhz +7\1FfKLe#a0+|O`$%t R̸zbz/Zvj$8!1*{/ y @GP6GnT.ݤƈ0ƝEzXt(1\;,Ȏ3[(^('fr.}%7X6 h4{;5Y*_j| m԰5ھ!11^kB*}?$ +PI8Ļݖ"j#(Ýѳt@~uɤVa1:l> j }5>UӪ?fpA__~yZ.ꊘ]nI8#@i P9s `c(^r@:3Mh4A>Ƿ[ +M 6o 8(QCKkN"F{rYF(.aѷ2Z'mlCEjhmAMvj[‡a^Cj1n^Y#cF(B~#l;ob#ms(#lj 3401M(sWi:A2O`j*(HTS>\ݸ4F=4= gd;Dq Q'+e8eԜhoDck&m0 PT>#`R/ N"e2\sc2cKj`Zs);OYL#ԫSUT{%GyX7 +ǟ&y.ҀXvSwًx + '픣#CÎ1qJw~} V?QĈ=i~­q6&iu+ :ٙPD +S̻}nqiQ#Xhۚ8vRͅʪ6]ٍ[q\!Vrnc+5x3n{d ʛXhY\2eE3zҤkݥt\ i`n!O9Mm>q[d36m"צ-e-ÚLj`׾d_C\Fy Y|ݢkgNtMRܺC)$Q$o;9Xc'(CH ڙ`_(Eˠ@3Xzǥ=$fIߏ$+n +FbmL[=S($ʡDuJ rͦ$os*{,7?O٢Nݱ<y2OkśSYť ;[>i('#޹?ݑ@utkؗuu8D~3_ WyS9ĺ{-nV6\4q'OKv`'kq4ug{߱mуP2jD=tq;z-vČы*ީ;fp땘7yR(u JX`UY?r(mS]'s1't㫡Pr|G(rW.6opבCU @{ Ghsn Cԣz<:]:?0γ}2ZK]T*QLvrh#^,o0QyǬzH_5H$k>🟋OX_/^Oo|{\ĩnSS}}u͸C볲)YyS1kw iJK $[<|p=t/;; +@{j y"Mu䢘`{^=jx{6YGуv V3ȫd-^U  +lKgX7y݃W}SrURQbV5 kV6\\T*=7x(rrz۸!,t\NH**[fos=uo]Oq;q;ӡ qN;NA񟋴eU$1 +JE?e,6~cӍM|=q.Td7i^L?SSwl}(hb^M4[gl|4f+d-*3a`'~:u( ).ۣw<ʫ&1O(p嶜6 W $CHҋ 7i y!˱a:4ЧmN&.SC<܀GiW[S6DDKMBvhI2^>y4 +&hz4FB$YAIF$:_J8Ѕ2;RH};?/IE(&kÄflU]dј]|hbخ^еy980J$lb +绔N.4]9@F4Q'וDrۇTd+`݇E>x<4g'M7B@뒷TL}s1NS6 x9ao֡1ȳO'wra U@| -<7~Nk*H7:=sn->stream +HWQo~/KJ'˪'+r(mn[.e~[Ǻ$pHLY3~|ILVB*BQ**:kԋuU.z=W?OoG;iїtP._K DkmyJ;/>s xxR>G-M(c‡~ ޢ)\2cjfqXBr@f10tע, +)ϐlf(rU^IbV\nӴMhQ !FۅpM| /Mo!nɵ.bNg)km9ېZd";JXkS[~N^I +3Ck;1'\.{-‚l𸶷q '1U!wQ/*;YoMǔB|LvwV;Րp"3S[̗2&xŖUiIvJV +㧃r2 zvdVUl :L"#X ȓ5x}Uvo{AbIhC< exlp.hfb76N1fƹ+ckD# O +VM^~o747uF #!QK - IQD~óu@@#\.֠f v=Bv}4Ǚcm"\2n*g[&ǭOrwEc_=C<=aH C<[F;EHM +L`%X}V B"xI4֥ťI*]4h<0eV*Be8D:|¨Ѳ BS'~_=C<=aH C<[F;EHM +L`%X}V B"xkQzJYiP,'S g3aBO/yt R9ϊ ȓ5x}UvQhPwWRL؍MԱixąTKPEkn!31i"1(:TóppF!8.R[cpDL$ɶn|XJORu"lqH$#ԽY(".氠,3pzA/g{߈ИG<ijnqBˌ2wh +L`%XxY\5:WmBԖRѤ73BK_Br j‚/Xϣ)\(VݖZ69X |mk+ 6t؀_l~-[D/`]9u@`"G<;X6ÏGmZl 3.xD9Qͅn#p28%L>x|kj)lB~O F* O?5">8N%~kn!31i"1(:TX97) fT(J%߳1gH'J! DK BS'epADN:T@l6Ӹ{x EwN^l*ꄥ.氠,3p.` zѠ7y`񬛛2iaa%XI=fW]U5T49LicPRB"ڦKhG +ע, +)c% 2M.XZQ"W=n@)sb|Yl!د%Q4g~ FgOҦ~I$lfqwAڠdQI{صc!3+R)좹:TjٶT4:5&QOCq\fZ.~<$NvCF%5)OdAĻ:SThД6ج߰z$#ԽyWㄥ٠]#ݼF GJ04 +B22V^nǖ!ig)yhQ|P"PPxj)lMf[! SH/uj|TҏarS{k/L>Auc~ +4^:/jKei>-7`lȦ,ZV\>cwwM-df7T +/h.Tjf5jmK97]F)`WD*~})? uo58ݙY~DYk%\@M|ZKr&5| xR*ZOF DHoOx/|qWhД62C#񑜲#x EA .xp3XP83MIAkpɃ|}b ax]}ly l#cӿp^ytҦ*F-)F:_,T^)U³T+aKi zCds$mbS,F&+?}oZ[FDž3:,Q/O&@-2mnsfO6R?Cےjp;sJa+h$AP%F[0 +endstream endobj 25 0 obj <>stream +HW[o۸~/IQ]>Md7"nz,,щ +]Ŀ漜 )R[tMMǹp&\ Sr>;r6X'ޣihGha6-O<'Ўcl' m&d1 ^q<ߍI(d48rfIF~{%1Y~ +@yiͥmA3rZn-o͏ߘ/I|O;18Jcs*Y* +42CXogL>IFQf5kɢkWzMqb'yhqTmf$yP+]JapkXa\e<DZc 9&$tau4Ɖ Fwi+jGOZEi >,1 O +Nߝ%3jb2'vr/#,ݥ۰=Dq [)c,tٷpxM]AstBb7^ ceCX +M٘B+El]aPwvtl^LbǻU?CwѾӊv賢т(g-MK۔G$z.ڇȌ|MiCIV6U%ќv퐼 +aCޡi 6Zݻ|F>E9,L(c`)\Rhg75їlTnLU:fN 0f ݔ5,n@ HWb1HG!,6xcfEYN<=Lb,e 12,,T(eRN[v2d2+Flo]TyU=fťN%:t31*,]Ҡ0&-F+w'I֪`R1,Y樝LT- wtC!SnaY]52"aKLN~hlJ +RH,L{t.&2[!۔XSRtiUq8G,>Շ#<.ޅh8ip%6%fypBSkFŊc:mV+.Yj[mo7RCM7/mLE(HZcsر}8,_Ȓ& _$f*}OE_!= ORD^x<$#}E N`j6YZb8VL]W6d2%%Kj&YT㾹p^WdO/%Xh(.1@CKG'ČBդ={{!ːe1uρFJ &Z1n}vhժyV`YՓdUʨA +$JBgȂT:Q9VO'[՛1fz3f9PJC'DOmuCg@VMT#:˨6eI0!F NObqgDRBYAflGj*CU|zB ᕒJI8RWW Y+NQHdsb|Y o216 8"#vK n1)pcef2;\/~بK]0Q Q-:9"gPp/y+PF]$@1hA|xA[R IM YeYRYFWbdpD{S7Edu]Z0Ŵ̷̛1E-hePxˍtlR>ĐdؗH @H= (1H+EI4(T:{A8)eN5^Ġ]]XԴ,d Yy +$Z/+'P: 7[$MN Gȯ'g'>ϣ8)HJ{xre0lA@P,܍IHcp!'ݤcdTr6~wX{D{?F)V߲,MB`#UzE*̾醊̾iʼntA!>QϦNREytZ!XKbI׭k4qʼnrH[ Q,KrWz><~cFCI(aX, Mdf\dFdu/4f-)+L4Lmr%rQSl[*?նqDl /;AH*ldÎACH$^H?GffW"#CN˖vtuՙf!%A +XٔR+[)-\leqΪ+[pS\h"ĦUJYw8+=9ϕ_@]-Ah'5DziBBM|ɋ~=M"Ҥf8꼢D6Yh;C7YK:шwY-=EUUZY)- +]!-x[<gE&|ͽ*\Rു@D>GqHE#7*4 + ޤ׽JmV'-]Φ/U_Wm^lT[K.pqCi㳨~/7S/(rN0uVô'̸~kN+M5\Tqhk&Vmz0:hBԸ!ءUIz8m^EdRXV 1WvX=S&9BvVM(ZNYNƑ% ,%sK*vn\X~,\&ZPC`b; lkX0uݟp1>I8ѽ;@~˘޴1 +Gyв[r>wh!`"'K$*/>o;څAyLlH zlojڒT&W;eVWw6;:e94NʳKz?AK Lx]-&Y.^߾^YۼZ(DJiZpR~iv$ B|r!uo@@a )Ү)-12*A(bKiSkl[ 򐠕Ϙ6SBmDt.AـT q$1BOzζ$s_=aU@ fF6xj,;0-.  +@MB+F5=KCPJK[΅`^]siX!H cJJ +WF٭a$_ZJ%y~6ppSrwRw[fiCB\.R:(LI3m閌 iCSP2!M̬K/ScN9ǴsbB J_]r mHcR! +$B'4nq +AHA~NBV vgx|$xad|*/n{\\ Bi h +OY 聵t}}H)^`g֡r`[ ؘkh{abvQ9Ar>Xt52 Nxqq|9Y^mx! $1* ,ڗ ":xDtJC~lq:8_c8}1*a<~Bw&zfǹ ){¼ $hhA0@*mrBx.L. ! L#L;_֯\+O.ln6':|u5xvE$j`5J}|| 5G+7o_]=Eog!T'Wŧ㯡L͗GO~矟?y~ ?V_Lv +} ޼>]vţw.ώ޺t.(Go*=ʆVg/^Mf~\H 91":dDk_V_)m8-\쭷iJ%-lGG^T3s"PG\tPȔ5 +R.V֟"W֟"X֟ YvѲ~T3 ׏\[ +`{s%y6qq f՛.|}_\^,5NtW(dT0:|qV{_2!2p&GK lلc[JTRzdWpodpUA[, (>4c 4rtbV X|TV5Tqy/qFw|}Fxa}^;EcI$σ1Za^"}#f_{!_9+8[{ͺ8.<s)8.OY*`R* +QLSɘ`R`%T6lHU2!v3/frXc 4fR-Za#Mj +kIm H 6H*%\vP).gF؋Q'"GꝈCN$މU6`ȔXGp=Ї`MmG9c(BL +391n^&]A$DXږkbqV%y%V`K<¸K:BRVPh@u ;Ȗ>^n +8zղ\y3*y z!#a]piD^v] 9FÐ|p[qױΝ0BL:vRPǑc嚨qf5&v#$V-^ 4rc|+%:N]:w2qˢ%7y ohe&f,i>Oq3ԔDWyedTI5-7rBE׽f>]lCOIl-,5HHIC1 MhIHIH>vlIc<4@K򚛒< +1dYLޔ!lbH\IHIH&r[KuGf:[2G>J(i0uS&oT t/$u$$u$x#I_nmHεCv7`/$;3 V@q4%CqgdlxŖ,fljeY.ikl0~ m]0>m >m;jOSFP; t\c t\AZ YIǦA H )}` ;A CAQ4 j4_P*KL\-DvVE\zNЂj~QظQ' ZPpABA X,yXB2a*v +VpNQo$}R 8 +B" +Փ +g +Œ%$"n,,й'h!aAzn?js}$:,t]a]ϦuW?ލ/g<~Wyooߧbt>ޠwv(K'Uj9~?i=}?rU* Ғh?kD9qd?*=?'/ٰwv_|/zǎP!҇;^k&fw_'ZP6t61uo4:1qe7k]]aש*qՔu !e-4qJH&2@v[-O} w 7 =&Yc 5\ʖGNt^dYN>R˼pϜ\'I%)M=%AP 6؏7{xGFp;p\|;2Du::MV *R@倹 ^/wBBƀP(R +] T :#Ӻt_M8*Wk&|i<}PY-N@,0Kxs|P=k_=5z[Y5R5$ +Zh /'x'YꌢN2A:˼q%٫T5LDs\P}ֺ{kԶ2 SE=)UӲ0bUYqSIJ`(([GUX[%fwT5.핉Πa@WAH\wb39"e8@,ثT5LDxR1œ9rg]=5jUE7kWRrĪ}~XmC m?޺DXjk κj/o^wBPfC l?8غmgr0d )dN,  (:1cZ +0ϜE92FX{?j5]ˇӖc>F":߭[{]u,Oڌ\޵/dc08vy 74O.n.3+A{=C:qN=O^ =ם<o#9Mt>jDk% >īT4cm ՃA~/}%$ =En6Mo +tJLm޿gR@ؠkhô 96N؅ŷbD:K8Ђ% }Ki7AuoAK@h϶ uOYSfl8޵~P OMY4-J3cNa\V've6y;S9M+Jys1^W%׫tBRN`9ej9˽}mHZbX̂/Y~:ij_o˕07imYK,+*$z&j(N +s ByfvZmє>K񤩨 HͲ&Y97KT5|&P@r\GًC'h,Mfk)vUJco7PμR _iDm̞1Oo%,ɍ4uTtqgwI*(¼=(H khZ6'I}w{qi<[}WKܔc>Zy'vWIDke|':Ri&u]Sضwl 2oR3]6Vq켰h^`ƙX M T ھ]qj41צ(TeNJb@Q jKL6s]mTEŭSTL.uqؕ +щ<>qdUjKS)7$^'Ӗ ;4[mh7">8i;tC tVeYk }3 ͫhpv5;c0:q%rK JY'$xԼN<܄CǏ?#3J̯OcY3qNЃo*g_#?158b.DXT$ce5,T e dJń*kTZv'/ +9CCtKŶ0C޺X= +W@͠n[f& ̫ +5u:yUR@]plQ@4$@/}y(f;3>fc+OsOkҼW|[k eJ+ Ha\5Ɏ!oT1+W ke2BHu$N@SJ쒮ZUд hKYEύKβzwy4M |9iyeH/ɰ.ocTq|]G>nߑ o^SS[UrӬ2*;:W>oV&שR].v؏kx:'컛۷s 0qq`h"H0M.eSNj^n2qRQ,[VUf6qnG(]g#ǿmsbsxB>oY=0aJ/ &<ʐ/=$7qseE7jĸah8X ($hN. ۬ʲ:Ӻm.ldeu^WuYW˼&AH'WQxջ.7uP0f' +X֢q G>F-H/ʓq`"%c/NGY"rzDjZ QBEN"Q x%XRH@(l"Ŭ_Eq/U5q4v +f0ݳ6$8}tf!۬TY̦g^ sƷ_(KHGYV$Qaoa\"ɼxkxge51yx4Y>&9q\TMRcW dȖYg#>r\&$qM5ƨ cb c2Ǩ 匠P3dP~MpmʂT_d@V&51~h +bs8bi1eY#|A,7lD(TLtjrTB?ga :/#t!`Ea,lIc$1B󙫛,|=Cr*j2q"n{ #g1ppĶ"b!&ZF֙ڝ*06 >A(>egiT=qiɺN֟0[n;aHw:\~zS.iIujnNvubXA6KkJQ'(o|\^;}zZ7O;Uۓ8_49iKOz|)\b )tjmI_T7[JʉG5R^v;3s6ac&)ڃ2L2l@+J1:sM"#D¿#g29"!B7 \:I]|&,V>9K҇\ 8I+Sbxaq8Ixd&綸& $O$xJk2U8Qz7h +綖N=SA"b"WibQ8 S>TLV|h,{3i=(&CʫTԎ|?eU#A FL)$I`N݃ш⹗14dC%8j^<) +Q7pyoW5VRuU0%ؿiV`5-cmkX[lbHeHXҐUVH)Lu0UZf-'Y9t^hQQ$W" +endstream endobj 26 0 obj <>stream +HWNK}?H4u$$XDDQ.pn%?s~dc`%R(Vjյ_6C`/'QCT{EuQzbdži6tuwlV qv^!Zy +[y0N +KS8<`/zfg܋m2X\]w&r:<S>06IO*Hq=jQ:pl5W0Yo[۰%%F"pFsArn0s0d>Hg]}8ײzȂ":^( ._6 + ;]2w~},lie:HSɖnt` i#-mFʧ4er, %U\@ j8wG/wOa + r#Jb('@pbE %rQ%5iIL˫(FqO+XTƍfE;ϓ'H_:pl1jNU'g:yA W0V +l)* f"iY7p_LX%1++$1 +o5k)#TjC@7eCs'7nP| +b)%ɵg}xFE}qp#$q'6~Ii"[{|_BIA8DH~iq]+(У^~L0(9p88+l_Br.hZKw2_u;GŸ/{4,OSz{ >B?Hp}'# SiܵD*,8%C=~n  M" 4S{:Y#gI}DUuy)QwR(dsTuIϬZejdZn~'^:{ޞ+$-  q)Ŏnށ޻RD*"Z5$nB/^?h#sB=6`ʇ&IRzphYw ?ĕ$vCwkv-ơ-N6=ecu1ˍ4f >B_ cwꪡd!t15OOIjƹًuv1reD+I $1դc%NqkuhQffnwЏƔ AQx-xiՈ_gxxQj;YQAv8hfw0Svwt03:(>wwU~3ߙG%s*_o̷d>O 7}3%|BYB y͎l9ݑ7`E?_6Oxrq@)7%'7TFE~VE&l#M#f+D';0Y)Vyd"nv6΂q]؊ %:'YߋqccqTfb&E R}jєIXj)@ 135E u֘A5.9ԝO@6g@(7 VL kšƂ5/b L G C$x"? 0& FAK0qIA>000sք9CsL+0֩0EVr؀Q `2F+ܒ1\gl +KP^׃㇂LKGXF$Kc))ugjYВ +Lxzk7X(J 1 J%a`JD8PAS\!;y~gn?(1LNVpss"v q.FB+H}M+$ƛl x1o]J:Pk/%]m%X`ZP(`[T$#}\> PlaùE8uln c$$I3}Ч/kV0$SswLtA*)_m^=mi/_{ b`aڰ P(|S#$pYvɵvyܚ +b1J_`/iJv3mG`Ch!EO#@QdtQ 4b{ս +Iv,De̅k7aҶo1תbHskLK5@V\U CcU )N^3ƶpBm>fL>oﱍ`pLsa"(P0M= Rlx +^<<&g:% p]D]jq߮8X`<ъ͠e`@ @4U`ĂS,#0w,,6Ł6몒 D_P~O۩e8M?Bx@RE(Ř+\u}BNnx Ϊfy=c{9݌CLrA\A ( +6"y:ӫ)5@]8;F}% +CF1>!IA3c&9ԡ0Ab xx`FBAc.nb"m1l1civ[ʩK㱥݁Z%;(i*x+)|zBe ^P젪ܪ,K"X;jE3{ɭdsj<\#kY!벪*=.[fkhMHy>7\2efxBPehm p9$ ~ $A|vйvYwaJ끏CBco +,h.B{Tµ?HXBpM!l -n}8:z;⚇Ӈ,K?eR-?=؃9P ઻>V3U(4K}sOk9)<>퍱b.T8JGhpʞU.QԞ> 5AVwp>xw^<\MhzFvN}VĐ?g4'E=K0 \_}S<'ټ,W`?7/ ϫ8Keۋ,R[|\')ATy@QQ_UWzKO!p1 (Er<>KZˢy94ˤnr`*V͇jMvtKꋿ g,f$vrҊ~͢ _n,Q;u.'«aAGk?6f=i*:O4W7`оjra7e?0+1H]+|mضz B%:!N5{ޑ >{ֿ|{(s}{Ϻq7, Y%fYTB-"v'Vp9bYFA+`kUW0&9Z|OoUljRzƺE +%GxZ|ԓ~\=aO8С:QŠ[N2O[YY~T|E'4[νvZLF- #*ɮƢIVx|L-$}g$`q^j":Q Y'Suae06d-2eyy̳jLb#E(mnͳ +ft*seY"6 qlU9wi6YYY6.DVbFҡ\Nkl +?k?fׂ fEA9 +9kYe~VP6Ll%}pgXZѓ&Gez/ TN +U^97c弉J$l!{W"&wYw:չs + T +ǷTNE[ڭ\e\+(W1C^tY˥r&Yޖ/9KLU^'epךqomMd6LTQ + +VÓRaD.Gn:MS׺BlC 3Uw$U"{r} _M_N,+ vK |s>"ʹ.%Tk怄 8!el5+ cW~}# -!(iBf3v߃/v56[I#i\>`s ?ւ1>p_)Su*@~׺Q9#8<]-nV@Z$.eDKQf{H&ᓽɆH-U"Y5=A!#,\ДT}k; ;#$%~"3у}Y9cC.av8kb7/CVd4uў{@9d-XN9YWe?ED` ~1ǢDFo.K,Wz"'pD8cjXR'gM4DŪ:H@ +dM k7M("4B+>;QDv e ^TʽM?,kdnI DMw=ש۪ÐY^$H'U1;L3,CH͍O>858=xeijƳoŲ}z{(F ck&&@ +MNVN"[.f|qA)S3_pgxHE.[@H+{.@5qnH/+sR]Ll7=vIRL_.y8 d#I\V26+q۷7r.Yإ2>RCy')aQpY Z=<^ +kX[!xsU RO65=Xz$|ik}'h/`$a R6K1AP͹;*aẞ sU\uRFKKƣ0O = ֤yQx3褾]la2!>/v`.aU2(U`N!w.@j- +++^.@**8B+Loz _ݔ 8HI$”A[=vNq8E 7u17Y=@ n.ѕ3);rJb)>8jBp0(ǵe^͟QC**qTEcéao&if̭5!=40oUx4df SQ@JZRBc=Sa!D +ha 7} ]mLC;Nǥ + uUK~ `rhQ0V"X-Fr?Ҡ IPOt@m_t4g1@+gYSWĽ9A%Qa^W rC~7Ѩ@c˂lnO3ZWS `KٯHsŔ$ϫ@NI.:0xI#(8AUbE(",bT9 q0rdh:o!fm o;^͸}84\pbsr%?n0zl[8%L.`det㏔r؛ǒC4Ekv*f'x%qA;@y\bE54A܊t5H-8%tqmW +v&KК}SA_%;{g4޼Lt cZT% +% M~aaˍ 2Ls҄AG*pi 2NC4WxE@HGV]גnav +?אW8Uf~mЩ0.3lkrvS?XV,)V/ΠԞ^f[+(N/y%}F nP =QjvVY_TwgsWN]}+ޠok\-@S?2pHx?]n tڳ֐H)]LR}u2]%l_K)S} ^m^.*5jV +~e7S..6nZs3;`S՚(چ:m#N5}w*NUKb, FqF5` { Ɯ>PE_M>N=t(] VJW[ XbE Zg4\1%Ornw+iWSF5k"vCI,l f +'*3*3vMlu]&᧽|K/~./C|o:T\hځD 1:^@OjPϳՎWԆ +BZ\W7'"G9~hJ(_(yiBW PsM*3|y,&ڰjn:aid)'-!ѐdSH(,@Aiw+ <7GX-丶d@ P⯁Dqn/n6tY4V$ *f[Z +*J‘K/RdRo b,E4 q@R15ޏXyDEu>Bt<,#Bpvx  g<6H+دk bq7!_@܄"QpxY-W.Xi +Y. iW } mjwPj/$׉>!s Λ+ +te N`vn'JExyqqp$C TokJ!UEs @ bolcu]9x_ DG8hH?Rc@5KX;MQh9Xm}^wo6^:c)<$ 8{m_mtFM/VT={%[&*RVCoE*Iԯ;vyb<ɥZ-fkX/ ntYlۜ!4/GM"-5Cc[oB-f%`I1Yz -í8JSKiXabp~4`GĀh~Sm1َUFrtmNWxW 7|&|u<">/(TWKtdh^pt9x=oemh|4e9ӫY^r0\5^ܤVoegܑqIE2zDZ[Zr#<'QCߊԛR N-jAQ1:UoXPgאV/RJpƧ 83K#ȫ 0q<6R!}S۶,1v;098qads]wyɌ@;r,J7#E\apFe +JFտhH2xjFx1>$*H2,Ow۬XX^K-Ǧv ¯f.մoU LR@adh! lm#p個X #ROw5H%~_ s_ ·:Ia3 cuk[O{8{ځL}ܩ]ׅ/dҏ@ZP*H͕^/+FB0l9#-opV駠QB¨ѳ"k<-lWյ8_EM"HH"&%+>>^b[-pst +_}:{.D㻷M=} k naV:9 ⱲQ͖CߡYg{-1VI9-ey4W~"{rm2JGefq%TZ5RX*Gu#t4Fh$fQJ Eaii2d~jڏAC )4>.ggQ<=_䠃SNjOo>_zHz` rѶF:12 3wH®)v PQAU%S/`pӣg ?7[pI gc)ُ؉G/ɇǒ s9l#QC}ԥE/_~jٯWi{ UUm\pr0j>7CqfKn %P? LARIysN& .K +!4*Uۺg0Y2 3]q4|4(796+L{%;xj̑W+͛|M(z}j>Ŵ5ņ9FkJrӫP{VЫֆ+2K~ 劑ٙJ~][9>|7fi;@k'/f4{HR| x'V xڇV &ta)`)(>)-Z8M*گ3mi0hI~˷4AG~^=fܮp%A|3SԲ~pNԬ}YDz2A/9 WZ~GA!,`VGy N9&j*V^2Ar2|M>$]7MC'˯}ݎngƠK`/i 0Y +,`7qIA<5T͸7-Y0sVO.`3l>gvSw\ +l bBjfzG&^ٮֻ3|VL\IZEͮZd?r2`ɧj?m9ƥX40Ht +*䚶|P)؍\^Z#darw1.JUFއε\Gzjh\NrW^HM#Ӷ4`/ +\w=BϝLabN=ܮDg4䂤5h]!~QT /ko\(Iw0L0y泼%o7!er ?:37'e5eloe ?]z o)>ʻ`gZK|sM=k-:{ˌqFմ QX*˅N#p$;Lɇ{ ]+ζlC9z'q'uoރQ#A 2p3kM'&DjgsDǘ=Q &bnIQD`U"}m8C$yXcXɑ#W4] Ke"ӢS{-hhm)CHP%l&<$]|aٍ;_zjyKѮki dy,m8~'04BMY~ y2 + [%BR +RtAt]F:1CFL d"RA 0d!It T@9U'8ߞ+=Ͽ~#ԙ6»:eȖio'E)Wd`X:6^CH\z+W\}Wl'soJ̋u۹C[> ݫQ_2M/jX`Gr~LI?{P"a8ۇ"F/K8+)!LQmg~z˕24u[L m/%2\p R/@1( +ԥ1@2把0 UiH.4&-\@aea88N(tHvAu߄82@$t?[~(/d_nt"ljJ7 %t7!@~j3]PCzQMB6?HO+M Fʟm~#wf#3tgs{Hė2c<ǵ0uSLtB tJ +3 3 ;lpA"m~J[R,'ӏG$/`9<B]ʐlO\`ZjzK>$q1?V.gj\D5J}$mǬ{iss|0?-4p3|ˌoV4~\t$;>\ QtRE䵥_,$lP%<l>,j?%&jЭRGC;`\,N)#Cf[=|ˤy},.Rk yQ<=BY,ݵGe4rQc +r++OC-R 2|<A?[YjQ2 +#I";jWRo^_Kh|ǧs֓TL6FEy!K҃_ J"8z&f4OڸҘS`ٛ)S4J]Y.pa -E#u$6ZM"$N5xjrI2gvrIF ,;}M?Y~ O G>W+? #;M' ju5*F.S)M{Xj +sLo"%㺾3 v.~n@ 7`*4Q#Qux}hX$;됨\#|)j,BOmܙ/z> +XP O `ZX-f'`~< FmݡY QL7{SL)b}D'/R~Il+V.v:H1T +0"ph.p0'PnOH"*͔n+Z, ubpTt~;u[qzEh nW#b4y:3rt=85n_qmxY]<Y>WJEV+WwsXkVE{8^ѻ7"Hb2} 1ىX!Fw\EoĒ9S!Bָphâ }NStu!FKB Fk\-GqvwTRs:z0EU@f{Vz'þG+0K簠Z GeŅR2zw.@k>B=xW xNq 8/.(Y9gٯ;背-_hVH3 3Y+ h n 70*kI:~JV"P6 p@3e˚itQ+D3D]`tx+Q4mӨ7RC&aop͵iJDNsD* T2`Qa6tD*Y7 Rk|)*pp袡Q 3,_b 'MFm_ӷEjYr3 +ԹYR}>~pcKGZ A{LNCDžE$"0y CMLɡ>|MQ%:@~e Z(:6 `rbgrI<_hx={.)z՜u9Vzp\ +o}h.uIB! !O"QUkxACZq!|٨"f+*{SD'ng\5_(k~'wNÙw3)zMy5]^sVKSK*RJX:w/{/wdvgMfkÐM_G_Ћ4pC!ZMsO7OϹ|wAmP鯖t `RP4XUrjmJ"B1@RhRQ"&浏3 ss93$ 2$=amfo{ynQ*[ +G<ڲtBϩ$gqn}MCm@?T1U&UhXГo9|_Ed=?3ӆt# $Loh_RsT~Sh R5`t 6/9:^~>v n~T#/crFc@G˺Lnvo 2M7{<}l@) F@?}kVЁLмXVMPxSָ h〒ȟ㉷@f$z :"*dz ̧^Vq [r!@Gͅ>~% !'oX%pe("(Q +(鄳KbV!fP@J +Dc; ͕ j]³Fkg34 ~.*KۈRvZQ/a'J=>"' nC;{N8ygH% 68=^iPg@iC GB TLG$ړ J90bF8Sseenfd6+a<{Q.x6ArӮ8O\.0r`Da٪FhLD6? P+B҆Htց/iAG%qG┌gMO e.3M{R_NNw!Etwi#])H6\6E +i+2bC:_Hb.r>/17 f~0v/7Fp'ttT(7,j RKpHTMc + pL˚lrb @S+D.z;adDU)oAU=u2j$F9jdSx&֏FmڨP R=fh<*֬+[#Neu&L[hu֕y몾+.|WݦHݒW'g,pBuQ74lu/R7}-](*EnMJ{qlt%<"4icpX'vg42p)~G㡯./>stream +HWV"}kݏ`*ƂV)PT.4MRST_\}s9;]&ˇEh^eϱc_; NG;Joed,t4?3(-36Ћ +0%PIÀ wDH' `DP ofCϺK0$D7Q +?N?G1{У=de. ǝ[FnZurkcR{_ji>1t=%,g׊STgЌGV`B)(i>Zug=,MNB~(zP;"[GfVA?/6?<`y ߊf(OwGr8R@،1v_#ŭ+,_) 0_3k"˛ &@%mBB5,O=wn s/ (aLR.m|_#vsB׭R G'}Χ=q<9Z;B`5—\x |}r[F~Tc'PP4Our0$ةCӦ'la AS,V9 1j:z!hE{vp:+84l6/mKGy*㝩 kp\1;.F +Opz}F7JUJ >:an+5J·rfVhxϹ_Y8K*]'}GctP{cWu>عRބ9c |8/] +i*HI;Vh}#~~:+2"3 $R!S%V)u`bIdqK9 *̦M\3Y4Eg'i?U3MoT>m|".;|"Y-*"r2\lF.9giEip˛dy nDuZU21\jxOE#O@<Gp*+8[ 8 +z kp\1;.Z b.!ə- weA\x*1$s3\&̓$x ;x ZҤWn>nBڛi9!&#yC6GC@A)uG>d(0ݔv?IJh;O\4(Z JGh}U[lsCxIs~Ooc evJ wd_ra4.pt&08im(ej=,HY@` 4@Z *ww.;^du+c ~{?N?o5o$cm萱fE3Z#9JpixN(# ELBB +l<~hqc\BIWz7/=AA3'1]j?S'-3tgP1H1b42dmxW߁H1C.op^B@ I4#p7m6F00i]) +˔^c{4#v4^AͫWY4Qkbfd`HH[ֺˠSXʗ3_o4E&z=}jܔڧAmPk z%"ŖM(8"".#Ew\$M$$irokg=ۨT*T3N}*iY|HunGjHF{l!myHk0(W!ky|]M9?WmiH)1^CIJ5]-_3^ ymHu(j^'^B|ڕ?is֩~'"MX $9.g]׼k +ƒN7] +׉3/.{b-D8=}yv`tqnw0-%hVCQ/=U;ы wHs6[OrV?TXo>vx4o>W MpXA^ )8Zsĭܸ>l+pc^LUĄj#*7@emT>w ¢iPa凢P SS0#KOՕjFK? ר?-b)>i|_Pu}9(rS:Bw@{)!gM}ՑO|=^`|\&wn6[b L@SPNRX@w/*PxZ@8% ̴}c7uԛܮ0PjjslցË6txN#z6|l86ϣ;yq)R(27;V)poA2p :@ 7GZ<)m!D׈h/iPR .XgdWf󀱧MEL&Ѡǯ} Hq^(Q5FP82ʁ61ᝦRp,|K|4vVFUqUnn?Y%ӹX2)>Q\h&Ҟ해s'6t + vdgG-/iyẍֆΏ)QM ƊeA^vS&7ϘչAhk` Ć^6g :.bn|cc2˦p'3+1|&I)q~g ;3;2r~9O1w,bTKI-&T݌H]J9ndC\[L ݼ"GN!@47`inlך򪀿E>Y7 +|P^M:jJ\]3Qh- VApNݠl;b, g[C(dhQDVhNƐݖMd19N$d|2-p'>n&)G`mc'R(^F3!<4!ŦYDcI=ss7DLtC)?gH^ObPHL/MVJP Ԡ7l;oN <Wñ|%oEC/ƼQ8H{ |paq(1x~wWGy#36EA77ͣ5g'(x CSu[&PZǍ%.2 "@G6 +IZ_wIOs/vRwTKZ zPy jTZ,r^2z9y]Дt-k Q7(lBYVn~ 修Wzl@{I;D58,59xyn ȏdPmzMךg׼W ?Iث}ynPC_AbǗ{W˺!ޑtSt V-z +?L /? ~/64yO+Z_N+ZU\p^̦ʞkVk`8#E(tza j-_e4&* &,:&ZG3!KFQ,' Jb6b?*+e6TX7oj_yC""hOiLN炙di=.m,CFxz[/|\pDxuYR ./[tuYEZQKe.ENc!arq&즎+GEL5s'$6nJ4NɄ)_y/PsEuR ID 60iS5К)1)F'C6(j2'ȒⲩKo':< ,|E%֖)gFCOŅA HLzuDg +(EzUD@"xFI'_ɚ]^EX s:z|+͢_C [ N,2\EzNYX.d9)ԶkHPMl$M/_M^7[V|rcX Yh,`n 3(5-TΙnG\@A;dN\HLvg%xd4pfp +I 2ڴ%Lq!7@9$þffTqq1nӏfԶ5~7/EJLjBAXAZi1.ǚ#GǪ~lwF_`MռJ{&_VMM!=uqi3xU38/#n0h6OplSFٳ%܇8 ŧ IZHvo:!PzַS260>i|R?Wg>G#.1jGxPkFۏir& c0ќl14&OTݖvF4 +a8GAJ^@@ lhO A''H(aWҁ `E#he6~b,YS# NO +ڀ|a"p#@ +"-8*ǡh,Yh@pNLfxb^8Dh 'ۿ3Rt&dsk}؀ɲ;N9_6jX 8|^.n`Ukn;mi.5x||A0%6V,shsrx厣@E(*{3Ȇ 6ށ'EZT|; pkl+T^"w]ܦX&{DB^P.7c8G&c-f1Ũ_x?MQo}.c-rՖg> k/cU7i>cd?;oh%@a!'9v! _l U"0N!,HV!%&!%A@A: hnuHX`ڏY 7ˌZZ`c "h~M9`U)`O +KH>`#JV+W/2ڣ!*y㵌 )hSc),QTr\![ srx{yLP1!W"(琑?ǬrƩkeesąo9F$8n'{#~'P ^?D$52[9~!+]Z|H%sxc*݌S]3vbN0Aӆ%0mR0?_j8 hȒ*WYS2K}_Jo 4 +"(  +1O'«:/]]y%7͑ґFc2RL2Mk oRr#{k "!P6YWHS)AᎷbs m虇PIM3"ZW#kltR 'RbUN-eL_ObWx#fF!t &lLjqH߲X+Jd\E{SPZ]|psVN*d6MeD8p&![t7 ϋ:ك&eTܗi  f KkXW!Q;b1L .QSy=5yjsm0ɀPef1wuWO:SV&ۥ<@6=ߵL=Ns vlR^ZGy(>]Jzಧ",k݇ȷ~:pzo.O!n wpRFUAݓY]K9>lŖlslGMz | NaeȠS|_2V; =tŕ7l'plC?:e4I͈|NmFdh~sEή@~Y#~V6é@lĆۖt6?;]N1?%,<5/i['NM=]vM vR&OlmZcq7=19,fW k-౓ |)N0>d6qNjPOWŗ6ȝ ͉ȣe.h'#'o +SB$% /ainaȲM%:KCWU^Y*+;&Uʄe }nhL-moBx }TM=PbSoQomvlF7fታ:]:.UӗUpTS*؏0F=Ce""<FE$*|O tT cLC`g8eҭ1:[c|L]Nka~Q1o bh2IW ֮"~Ho۔6=tLE;(ځ[C[yy1nQxMT]LVf00FE/yUłxX6R;3v 6fRQm#m6 aQ2Q2R~wƾ tܹEJ0`?P:[$CO5OM_<_ 07-ܹx0ƫ&3pQ~H(o~AO<_"FW 2s$?B"0R"G'(TaDeQ9qHm` uPn^wYdUAA/ +(o2W #:j:u u{2neR.ۼ':ӗג[RhT tuŵWXLD<1sh}<D3 +.Q^RFYnV!#R'Pg3Zpr\x@RgA@LP*.z%瘸H8vNؑ힝 +8:Y7r+=PY(&-K[$K@[jaO:b}Lbc IY󆝔Q@S1GDrXC fؘ[9< nx܇>z?4 ZKMC+Rj-x-i\&oyh6y46l45^jAFWŧõxh0 c_;쎃Y>pKC +-tWW64Iŷ `}F}ۀh|vb(&:|D@z~z?rlR;i7mʗ^#TTm'2" >U:逍a{OGC?>pbCWN,ڏIP R'OSІ^x9gj#:yKHF5nMɇ'j1ˍzJ08I4 +"LNٓhd #Q-}MnY_y+u{U,L^4i&(г +bY҉% nK0 i п cPaVa_OP-X.uV%M1}.3c|jFl#ix\M>14f^jMa@8Ńm|vթ!М 9 (I͊$gVJ3c~KƎ,mpUw"gr5ʲ4iv1J%N#i56$ru<ʽC}ƾP Ό@o!7AZGFz^TS0C`k`4ۭ)&s@toማ2>=]c3k(u-*RC.Q87ܗӱ8EF Ж^AQvcs]onycpz9HH1DopmcM(&5޾!ħQ Tm9ScϤ*CH |hy&m$PTܧ3e qX DCMؑg;uK#KfI`ßᬍr'Z1'e/Hծ{;7c"P tI<;kd&YQIH}]4YBx*ٌ*BX)96ѨKphL5Ќ֥Kϭn24[$@5I愮t$O \ځHGȽ#h[q}G_Z⿛_^ׄaށpRMZ'F2׾7^0__0!!eAFeL:&duLce9q#$#_'o}/(}֠6?('FKq9㒘+"`MZ7>YDZ~r}[;F* QDÛwxa) +aL8CzY|'F?ԌQ앞% bTGVJ1Xη="u X\ ]$v32ž5n$gc;s6mdG5c8a kTeͥDž崽 @'?Vﵕ-|ڌ?]bޣ\5y~:ҪXhE v  %<(-4%N2-GkC_z.pQܭ/_ b…KhfwޱbVj|rfv9-s46}Îodc=\<,yL#iӕ6L\m +W`0+ +endstream endobj 6 0 obj [5 0 R] endobj 28 0 obj <> endobj xref +0 29 +0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000053800 00000 n +0000000000 00000 f +0000058408 00000 n +0000213771 00000 n +0000053851 00000 n +0000054179 00000 n +0000058707 00000 n +0000058594 00000 n +0000056830 00000 n +0000057846 00000 n +0000057894 00000 n +0000058478 00000 n +0000058509 00000 n +0000058780 00000 n +0000059140 00000 n +0000060197 00000 n +0000088175 00000 n +0000089840 00000 n +0000107678 00000 n +0000133579 00000 n +0000156625 00000 n +0000165724 00000 n +0000169520 00000 n +0000182158 00000 n +0000198404 00000 n +0000213794 00000 n +trailer +<]>> +startxref +213976 +%%EOF diff --git a/macros/latex/contrib/jsonparse/jason/jason.svg b/macros/latex/contrib/jsonparse/jason/jason.svg new file mode 100644 index 0000000000..fe8793dfa8 --- /dev/null +++ b/macros/latex/contrib/jsonparse/jason/jason.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf index 07bb66590c..ed7a1dded6 100644 Binary files a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf and b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf differ diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.tex b/macros/latex/contrib/jsonparse/jsonparse-doc.tex index 485bec0cbf..1cfcde1e18 100644 --- a/macros/latex/contrib/jsonparse/jsonparse-doc.tex +++ b/macros/latex/contrib/jsonparse/jsonparse-doc.tex @@ -11,8 +11,8 @@ % This work has the LPPL maintenance status `maintained'. % \documentclass[a4paper]{article} -\def\jsonparsefileversion{0.8.2} -\def\jsonparsefiledate{26 April 2024} +\def\jsonparsefileversion{0.8.3} +\def\jsonparsefiledate{28 April 2024} \usepackage[T1]{fontenc} \usepackage{Alegreya} @@ -182,8 +182,8 @@ \makedoctitle [The jsonparse package] {The \titlemacro{jsonparse} package} - {An easy way to parse, store and access JSON data from files or strings in LaTeX documents} - {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}] + {A handy way to parse, store and access JSON data from files or strings in LaTeX documents} + {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}. I am grateful to Joseph Wright, Jonathan P. Spratte and David Carlisle who helped me navigating the peculiarities of TeX and optimizing the code. Jason, the JSON parsing horse: Copyright 2024 Hannah Klöber.] {Version \jsonparsefileversion, released on \jsonparsefiledate} \changes{v0.3.0}{2024/04/08}{First public beta release.} @@ -196,8 +196,11 @@ \changes{v0.7.1}{2024/04/20}{Access to first-level keys of object added.} \changes{v0.8.0}{2024/04/24}{Internal rewrite, escaping procedures changed.} \changes{v0.8.2}{2024/04/26}{Bug fixes, externalizing parsed data.} +\changes{v0.8.3}{2024/04/28}{Escaping of characters with special meaning in TeX.} \begin{document} +\vspace*{-1cm} +\noindent\hspace*{-3.5mm}\includegraphics[width=5cm]{jason/jason.pdf} \printdoctitle @@ -205,6 +208,8 @@ \section{Introduction} +Hello guys, I am Jason, the JSON parsing horse. JSON data is my favorite thing to parse! But I found that converting JSON to TeX can be a bit tricky. Therefore, I created this package which I am happy to introduce to you. + The \macro{jsonparse} package provides a handy way to read in JSON data from files or strings in LaTeX documents, parse the data and store it in a user-defined token variable. The package allows accessing the stored data via a JavaScript-flavored syntax. This package is still in a beta stage and not thoroughly tested. Bugs or improvements can be issued via GitHub at \url{https://github.com/jasperhabicht/jsonparse/issues}. @@ -247,6 +252,21 @@ Using the control sequence \macro{\x}, it is possible to nest JSON strings into \JSONParseValue{\myJSONdataB}{d.b} \end{codeexamplecolumns} +\begin{macrodef} +|escape|={} +|escape|={} +|escape|={} +|escape|={} +|escape|={} +|escape|={} +|escape|={} +|escape|={} +|escape|={} +\end{macrodef} +The key \macro{escape} can be used to convert characters that don't require escaping in JSON but in TeX into their relevant TeX escape sequences. Apart from the backslash and curly braces that need to be escaped anyways, these are the number sign, the dollar sign, the percent sign, the ampersand, the circumflex accent, the low line and the tilde. The characters can be selected individually separated by a comma (for example \macro{escape={dollar sign, circumflex accent, low line}}. With \macro{escape={all}}, all escaping sequences are selected, with \macro{escape={none}}, none is selected. + +The naming of the relevant characters follows their Unicode names. However, \macro{hash} exists as alias for \macro{number sign}, \macro{dollar} as alias for \macro{dollar sign}, \macro{percent} for \macro{percent sign}, \macro{circumflex} for \macro{circumflex accent} and \macro{underscore} for \macro{low line}. + \begin{macrodef} replacement/|backspace|={} replacement/|formfeed|={} @@ -356,7 +376,7 @@ Parsing large JSON files can take quite a while. In order to speed up follow-up \begin{macrodef} |\JSONParsePut|{}{}[] \end{macrodef} -The commannd \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It essentially just adds a key-value pair to a property list (where the value part is read as string). Hence, it can also be used to append more entries to an already existing property list containing parsed JSON data. +The command \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It just adds a key-value pair to the property list (where the value part is read as string). Hence, it can also be used to append more entries to an already existing property list containing parsed JSON data. \subsection{Changing separators, output and other settings}\label{sec:settings} diff --git a/macros/latex/contrib/jsonparse/jsonparse.sty b/macros/latex/contrib/jsonparse/jsonparse.sty index 404e769ba7..680e89bfca 100644 --- a/macros/latex/contrib/jsonparse/jsonparse.sty +++ b/macros/latex/contrib/jsonparse/jsonparse.sty @@ -10,7 +10,7 @@ % % This work has the LPPL maintenance status `maintained'. % -\ProvidesExplPackage {jsonparse} {2024-04-26} {0.8.2} +\ProvidesExplPackage {jsonparse} {2024-04-28} {0.8.3} {JSON Parse} \bool_new:N \l__jsonparse_debug_mode_bool @@ -51,6 +51,11 @@ Invalid ~ escape ~ sequence ~ #1 ~ in ~ key. } +\msg_new:nnn { jsonparse } { escape-char-not-found } { + \msg_error_text:n { jsonparse } \iow_newline: + Escape ~ character ~ #1 ~ not ~ found. +} + \msg_new:nnn { jsonparse } { saving-external } { \msg_info_text:n { jsonparse } \iow_newline: Saving ~ external ~ file: ~ #1. @@ -77,6 +82,22 @@ \str_new:N \l__jsonparse_carriage_return_str \str_new:N \l__jsonparse_horizontal_tab_str +\clist_new:N \l__jsonparse_escape_tex_chars_clist +\clist_set:Nn \l__jsonparse_escape_tex_chars_clist { + number_sign , + dollar_sign , + percent_sign , + ampersand , + circumflex_accent , + low_line , + tilde +} + +\str_new:N \l__jsonparse_escape_temp_str +\clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist { + \bool_new:c { l__jsonparse_escape_ #1 _bool } +} + \keys_define:nn { jsonparse } { array ~ index ~ zero-based .bool_set:N = \l__jsonparse_array_index_zero_based_bool , array ~ index ~ zero-based .default:n = { true } , @@ -104,7 +125,50 @@ replacement / carriage ~ return .str_set:N = \l__jsonparse_carriage_return_str , replacement / carriage ~ return .initial:n = { ~ } , replacement / horizontal ~ tab .str_set:N = \l__jsonparse_horizontal_tab_str , - replacement / horizontal ~ tab .initial:n = { ~ } + replacement / horizontal ~ tab .initial:n = { ~ } , + escape .code:n = { + \str_case:nnF {#1} { + { all } { + \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist { + \bool_set_true:c { l__jsonparse_escape_ ##1 _bool } + } + } + { none } { + \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist { + \bool_set_false:c { l__jsonparse_escape_ ##1 _bool } + } + } + } { + \clist_map_inline:nn {#1} { + \str_set:Nn \l__jsonparse_escape_temp_str {##1} + \str_replace_all:Nnn \l__jsonparse_escape_temp_str { ~ } { _ } + \bool_if_exist:cTF { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool } { + \bool_set_true:c { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool } + } { + \str_case:nnF {##1} { + { hash } { + \bool_set_true:c { l__jsonparse_escape_number_sign_bool } + } + { dollar } { + \bool_set_true:c { l__jsonparse_escape_dollar_sign_bool } + } + { percent } { + \bool_set_true:c { l__jsonparse_escape_percent_sign_bool } + } + { circumflex } { + \bool_set_true:c { l__jsonparse_escape_circumflex_accent_bool } + } + { underscore } { + \bool_set_true:c { l__jsonparse_escape_low_line_bool } + } + } { + \msg_error:nno { jsonparse } { escape-char-not-found } + {##1} + } + } + } + } + } } \NewDocumentCommand { \JSONParseSet } { m } { @@ -121,6 +185,7 @@ \cs_generate_variant:Nn \tl_range:nnn { nne , nen } \cs_generate_variant:Nn \tl_range:Nnn { Nne , Nen } \cs_generate_variant:Nn \tl_remove_once:Nn { NV } +\cs_generate_variant:Nn \tl_replace_all:Nnn { Non , Noe } \cs_generate_variant:Nn \tl_replace_once:Nnn { Non } \cs_generate_variant:Nn \tl_rescan:nn { no , ne } \cs_generate_variant:Nn \tl_set:Nn { Ne } @@ -132,6 +197,7 @@ \cs_generate_variant:Nn \prop_item:Nn { Ne , ce } \cs_generate_variant:Nn \prop_put:Nnn { Nen , Nee } \cs_generate_variant:Nn \iow_now:Nn { Ne } +\cs_generate_variant:Nn \msg_error:nnn { nno } \cs_generate_variant:Nn \msg_error:nnnn { nnoo } \cs_generate_variant:Nn \msg_log:nnn { nne } @@ -591,6 +657,27 @@ \tl_set:Ne \l__jsonparse_temp_tl {#1} \cs_set_eq:NN \" \__jsonparse_tex_quote \cs_set_eq:NN \\ \__jsonparse_tex_backslash + \bool_if:NT \l__jsonparse_escape_number_sign_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_hash_str } { \c_backslash_str \c_hash_str } + } + \bool_if:NT \l__jsonparse_escape_dollar_sign_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_dollar_str } { \c_backslash_str \c_dollar_str } + } + \bool_if:NT \l__jsonparse_escape_percent_sign_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_percent_str } { \c_backslash_str \c_percent_str } + } + \bool_if:NT \l__jsonparse_escape_ampersand_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_ampersand_str } { \c_backslash_str \c_ampersand_str } + } + \bool_if:NT \l__jsonparse_escape_circumflex_accent_bool { + \tl_replace_all:Non \l__jsonparse_temp_tl { \c_circumflex_str } { \textasciicircum } + } + \bool_if:NT \l__jsonparse_escape_low_line_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_underscore_str } { \c_backslash_str \c_underscore_str } + } + \bool_if:NT \l__jsonparse_escape_tilde_bool { + \tl_replace_all:Non \l__jsonparse_temp_tl { \c_tilde_str } { \textasciitilde } + } \tl_rescan:no { } { \l__jsonparse_temp_tl } \group_end: } @@ -670,6 +757,10 @@ \group_end: } +\tl_new:N \JSONParseArrayIndex +\tl_new:N \JSONParseArrayKey +\tl_new:N \JSONParseArrayValue + \NewDocumentCommand { \JSONParseArrayValuesMap } { s m m O{} m } { \group_begin: \jsonparse_filter:Nn #2 {#3} diff --git a/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf b/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf index 552ebfe62c..b6afbc2fbb 100644 Binary files a/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf and b/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf differ diff --git a/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty b/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty index 9d2e501a04..9564aec94c 100644 --- a/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty +++ b/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty @@ -2,9 +2,9 @@ % licence : Released under the LaTeX Project Public License v1.3c % or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e}% -\def\filedate{2024/04/25}% +\def\filedate{2024/04/28}% \let\PfMfiledate\filedate% -\def\fileversion{0.92}% +\def\fileversion{0.93}% \let\PfMfileversion\fileversion% \ProvidesPackage{ProfMaquette}[\filedate\space v\fileversion\space Maquettage de documents]% @@ -40,12 +40,12 @@ \makeatother %définition des clés \RequirePackage{simplekv}% -\setKVdefault[Boulot]{Dys=false,Taille=14,Cours=false,Base=false,BaseHTML=false,CAN=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,OlympiadesAPMEP=false,CorrigeInverse=false,CorrigeSeul=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,Epaisseur=0pt,VersSolution=false,Small=false,Footnotesize=false,Scriptsize=false,AllDirect=false,AllPouce=false}%Les deux derniers pour essayer de mettre tous les exercices d'un même fichier en mode Reponse, en mode Indice. Pas implanté, pas testé +\setKVdefault[Boulot]{Dys=false,Taille=14,Cours=false,Base=false,BaseHTML=false,CAN=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,OlympiadesAPMEP=false,CorrigeInverse=false,CorrigeSeul=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,Epaisseur=0pt,VersSolution=false,AvecEntrainement=false,Small=false,Footnotesize=false,Scriptsize=false,AllDirect=false,AllPouce=false}%Les deux derniers pour essayer de mettre tous les exercices d'un même fichier en mode Reponse, en mode Indice. Pas implanté, pas testé \defKV[Boulot]{Colonnes=\setKV[Boulot]{CorrectionColonnes}}% \setKVdefault[Cours]{Couleur=Crimson,Theme=Trace écrite,NomExercice=Exercice}% \setKVdefault[DM]{Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname}% \setKVdefault[DS]{Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname,Calculatrice=false,Sujet=A}% -\setKVdefault[Fiche]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}% +\setKVdefault[Fiche]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice,}% \setKVdefault[PdT]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}% \setKVdefault[FdR]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}% \setKVdefault[Parcours]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice,Vertical=false}% @@ -57,7 +57,7 @@ \setKVdefault[Kholle]{Sujet=1,Numero=1,Date=15,Niveau=TSI-1,Code=\jobname,Lieu=Lycée du Hainaut (Valenciennes),NomEleve=Albert Einstein,CR=false}% \setKVdefault[CAN]{Date=\today,Niveau=6,Duree=9,CoefQ=0.4,CoefR=0.35,CoefJ=0.1}% -\setKVdefault[ClesExercices]{NbQuestions=1,PasTitre=false,AffichageSource=false,BaremeTotal,BaremeDetaille=false,MotPoint=point,AffichageTitre=false,Calculatrice=true,Oral=false,Difficulte=0,AffichageCompetence=false,PasCorrige=false,Direct=false,Pouce=false,Parcours=false,Contrat=false,FdR=false,Routes=false,Stops=false,Background=white,Cadre=gray!50,Numerote,Ligne=false,Doublespacing=false,Onehalfspacing=false,Cadres=false,TitreSol=false,NonUtilise=false,Profile=false}% +\setKVdefault[ClesExercices]{NbQuestions=1,PasTitre=false,AffichageSource=false,BaremeTotal,BaremeDetaille=false,MotPoint=point,AffichageTitre=false,Calculatrice=true,Oral=false,Difficulte=0,AffichageCompetence=false,PasCorrige=false,Direct=false,Pouce=false,Parcours=false,Contrat=false,FdR=false,Routes=false,Stops=false,Background=white,Cadre=gray!50,Numerote,Ligne=false,Doublespacing=false,Onehalfspacing=false,Cadres=false,TitreSol=false,NonUtilise=false,Profile=false,PasEntrainement=false}% \defKV[ClesExercices]{TitreSolution=\setKV[ClesExercices]{TitreSol}}% \defKV[ClesExercices]{Source=\setKV[ClesExercices]{AffichageSource}}% \defKV[ClesExercices]{Titre=\setKV[ClesExercices]{AffichageTitre}}% @@ -140,6 +140,8 @@ \setcounter{PfMExo}{0}% \newcounter{PfMExoSol}%Pour repérer les valeurs aléatoires construites automatiquement dans la solution \setcounter{PfMExoSol}{0}% +\newcounter{PfMExoEntrai}%Pour repérer les entrainements +\setcounter{PfMExoEntrai}{0}% \newcounter{PfMCorrigeParcoursPerso}%affichage des solutions ou pas dans le cadre d'un parcours perso \setcounter{PfMCorrigeParcoursPerso}{0}% \newcounter{PfMSOS}%Numéro des SOS dans les parcours fléchés @@ -894,7 +896,7 @@ \]% }% % -%%%% +% %%% Définitions des environnements pour la correction \makeatletter \newwrite\verbatim@out @@ -1039,6 +1041,7 @@ }% \def\PfMTexteDuCorrige{Corrigé de l'exercice} +\def\PfMTexteDeLEntrainement{Automatisme(s) lié(s) à l'exercice} \NewDocumentCommand\PfMAffichageCorrige{}{% \ifboolKV[Boulot]{CAN}{% @@ -1061,6 +1064,43 @@ }% }% }% + +\NewDocumentEnvironment{Entrainement}{}{}{}% + +\makeatletter +\def\EntrainementWrite{% + \@bsphack% + \immediate\openout \verbatim@out "\jobname-Ex\thePfMExo.qrc"% + \let\do\@makeother\dospecials% + \catcode`\^^M\active% + \def\verbatim@processline{% + \immediate\write\verbatim@out{\the\verbatim@line}}% + \verbatim@start}% +\def\endEntrainementWrite{\immediate\closeout\verbatim@out\@esphack}% + +\let\Entrainement\EntrainementWrite\let\endEntrainement\endEntrainementWrite% +\makeatother + +\NewDocumentCommand\PfMAffichageEntrainement{}{% + \clearpage + \TikzAutomatismes + \setcounter{PfMExoEntrai}{0}% + \xintFor* ##1 in{\xintSeq{1}{\thePfMExo}}\do{% + \refstepcounter{PfMExoEntrai}% + \IfFileExists{\jobname-Ex##1.qrc}{% + \begin{center} + \label{pageentrai-\thePfMMaquette-\thePfMExoEntrai}% + \textbf{\PfMTexteDeLEntrainement\ifnum\thePfMExo=1\relax\else~\ref{page-\thePfMMaquette-##1}\fi}\par\nopagebreak\input{\jobname-Ex##1.qrc}\end{center}}{}% + }% +}% + +\NewDocumentCommand\TikzAutomatismes{}{% + \begin{tcolorbox} + \begin{center} + \Large\sffamily Automatismes% + \end{center} + \end{tcolorbox}% +}% %%%%%%%% BAREME %%%%%%%%%%% %% Bareme \newlength{\brouillon} @@ -1194,7 +1234,18 @@ \node[% fill=tcbcolback,% anchor=center,% - ] at (frame.east){\hyperref[pagesol-\thePfMMaquette-\thePfMExo]{\faKey}};% + ] at ($(frame.north east)!0.25!(frame.south east)$){\hyperref[pagesol-\thePfMMaquette-\thePfMExo]{\faKey}};% + }% + }{}% +}% + +\NewDocumentCommand{\PfMLienVersEntrainement}{}{% + \ifboolKV[Boulot]{AvecEntrainement}{% + \ifboolKV[ClesExercices]{PasEntrainement}{}{% + \node[% + fill=tcbcolback,% + anchor=center,rotate=45% + ] at ($(frame.north east)!0.75!(frame.south east)$){\hyperref[pageentrai-\thePfMMaquette-\thePfMExo]{\faDumbbell}};% }% }{}% }% @@ -1553,6 +1604,8 @@ \PfMAffichageSource% % \PfMLienVersSolution% + % + \PfMLienVersEntrainement% }% }% }% @@ -2025,6 +2078,8 @@ \PfMAffichageSource% % \PfMLienVersSolution% + % + \PfMLienVersEntrainement% }% }% }% @@ -2318,8 +2373,6 @@ \refstepcounter{PfMSection}% \PfMChoixCorrection% \refstepcounter{PfMExo}% - % \setbox\PfMBoxSauvegarde{#3\unskip\unpenalty\unpenalty} -% \setbox\PfMBoxSauvegarde=\vbox{#3} \ifboolKV[Boulot]{CorrigeSeul}{}{% \PfMChoixTitreSolution% \PfMChoixHideItemSolution% @@ -3001,6 +3054,8 @@ \PfMAffichageSource% % Lien vers la solution \PfMLienVersSolution + % Lien vers les entrainements + \PfMLienVersEntrainement }% }% }% @@ -3092,6 +3147,8 @@ \PfMAffichageSource% % \PfMLienVersSolution% + % + \PfMLienVersEntrainement% }% }% }% @@ -3343,6 +3400,12 @@ \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% }% +\NewDocumentCommand\PfMAffichageEntrainementColonnes{}{% + \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% + \PfMAffichageEntrainement% + \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% +}% + %%%%%%%%%%%%%%% Debut Maquette %%%%%%% % Environnement englobant le tout. \makeatletter @@ -3377,18 +3440,6 @@ \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \clearpage -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% -% \TikzOlympiadesAPMEPCor{#2}% -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes% }% }{}% @@ -3436,56 +3487,39 @@ }{} } }% -% \ifboolKV[Boulot]{CorrigeFin}{% -% \AddToHook{env/Maquette/after}[Correction]{% -% \PfMPrepareCorrection{#1}% -% \TikzCANCor{#2}% -% \PfMAffichageCorrectionColonnes% -% }% -% }{}% }{% \ifboolKV[Boulot]{FdR}{% - \ifboolKV[Boulot]{CorrigeSeul}{}{% - \setKV[FdR]{#2}\TikzFdR% - } - \let\exercice\exerciceFdR\let\endexercice\endexerciceFdR% + \ifboolKV[Boulot]{CorrigeSeul}{}{% + \setKV[FdR]{#2}\TikzFdR% + } + \let\exercice\exerciceFdR\let\endexercice\endexerciceFdR% + \ifboolKV[Boulot]{AvecEntrainement}{% + \AddToHook{env/Maquette/end}[Haltere]{% + \PfMAffichageEntrainementColonnes% + }% + }{}% \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzFdRCor{#2}% -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes }% }{}% }{% \ifboolKV[Boulot]{Contrat}{% - \ifboolKV[Boulot]{CorrigeSeul}{}{% - \setKV[Contrat]{#2}\TikzContrat% - } - \let\exercice\exerciceContrat\let\endexercice\endexerciceContrat% + \ifboolKV[Boulot]{CorrigeSeul}{}{% + \setKV[Contrat]{#2}\TikzContrat% + } + \let\exercice\exerciceContrat\let\endexercice\endexerciceContrat% + \ifboolKV[Boulot]{AvecEntrainement}{% + \AddToHook{env/Maquette/end}[Haltere]{% + \PfMAffichageEntrainementColonnes% + }% + }{}% \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzContratCor{#2}% -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes% }% }{}% @@ -3497,17 +3531,7 @@ \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzFicheCor{#2}% -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes }% }{}% @@ -3519,17 +3543,7 @@ \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzRecapBrevetCor{#2}% -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes% }% }{}% @@ -3545,24 +3559,19 @@ }% }{% \ifboolKV[Boulot]{Parcours}{% - \ifboolKV[Boulot]{CorrigeSeul}{}{% - \setKV[Parcours]{#2}\TikzParcours% - } - \let\exercice\exerciceParcours\let\endexercice\endexerciceParcours% + \ifboolKV[Boulot]{CorrigeSeul}{}{% + \setKV[Parcours]{#2}\TikzParcours% + } + \let\exercice\exerciceParcours\let\endexercice\endexerciceParcours% + \ifboolKV[Boulot]{AvecEntrainement}{% + \AddToHook{env/Maquette/end}[Haltere]{% + \PfMAffichageEntrainementColonnes% + }% + }{}% \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzParcoursCor{#2} -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes }% }{}% @@ -3575,17 +3584,7 @@ \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzPdTCor{#2}% -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes% }% }{}% @@ -3595,17 +3594,9 @@ \setKV[DM]{#2}\TikzDM% } \let\exercice\exerciceDM\let\endexercice\endexerciceDM% -% \let\Exercice\exercice\let\endExercice\endexercice% \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzDMCor{#2}% \PfMAffichageCorrectionColonnes% }% @@ -3617,18 +3608,15 @@ \TikzFiche% }% \let\exercice\exerciceFiche\let\endexercice\endexerciceFiche% - %\let\Exercice\exercice\let\endExercice\endexercice + \ifboolKV[Boulot]{AvecEntrainement}{% + \AddToHook{env/Maquette/end}[Haltere]{% + \PfMAffichageEntrainementColonnes% + }% + }{}% \ifboolKV[Boulot]{CorrigeFin}{% \ifboolKV[Boulot]{CorrigeAll}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1}% -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzFicheCor{#2}% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% \xintFor* ##1 in{\xintSeq{1}{\thePfMExo}}\do{% @@ -3680,17 +3668,7 @@ \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1} -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzDSCor{#2}% -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes% }% }{}% @@ -3703,17 +3681,7 @@ \ifboolKV[Boulot]{CorrigeFin}{% \AddToHook{env/Maquette/after}[Correction]{% \PfMPrepareCorrection{#1} -% \useKVdefault[Boulot]% -% \setKV[Boulot]{#1}% -% \if@Dyslexie -% \setKV[Boulot]{Dys} -% \fi -% \PfMBasculeDys% -% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}% \TikzIECor{#2}% -% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}% -% \PfMAffichageCorrige% -% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}% \PfMAffichageCorrectionColonnes }% }{}% diff --git a/macros/latex/contrib/rpgicons/LICENSE b/macros/latex/contrib/rpgicons/LICENSE new file mode 100644 index 0000000000..4db9b5af29 --- /dev/null +++ b/macros/latex/contrib/rpgicons/LICENSE @@ -0,0 +1,415 @@ +The LaTeX Project Public License +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +LPPL Version 1.3c 2008-05-04 + +Copyright 1999 2002-2008 LaTeX3 Project + Everyone is allowed to distribute verbatim copies of this + license document, but modification of it is not allowed. + + +PREAMBLE +======== + +The LaTeX Project Public License (LPPL) is the primary license under +which the LaTeX kernel and the base LaTeX packages are distributed. + +You may use this license for any work of which you hold the copyright +and which you wish to distribute. This license may be particularly +suitable if your work is TeX-related (such as a LaTeX package), but +it is written in such a way that you can use it even if your work is +unrelated to TeX. + +The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', +below, gives instructions, examples, and recommendations for authors +who are considering distributing their works under this license. + +This license gives conditions under which a work may be distributed +and modified, as well as conditions under which modified versions of +that work may be distributed. + +We, the LaTeX3 Project, believe that the conditions below give you +the freedom to make and distribute modified versions of your work +that conform with whatever technical specifications you wish while +maintaining the availability, integrity, and reliability of +that work. If you do not see how to achieve your goal while +meeting these conditions, then read the document `cfgguide.tex' +and `modguide.tex' in the base LaTeX distribution for suggestions. + + +DEFINITIONS +=========== + +In this license document the following terms are used: + + `Work' + Any work being distributed under this License. + + `Derived Work' + Any work that under any applicable law is derived from the Work. + + `Modification' + Any procedure that produces a Derived Work under any applicable + law -- for example, the production of a file containing an + original file associated with the Work or a significant portion of + such a file, either verbatim or with modifications and/or + translated into another language. + + `Modify' + To apply any procedure that produces a Derived Work under any + applicable law. + + `Distribution' + Making copies of the Work available from one person to another, in + whole or in part. Distribution includes (but is not limited to) + making any electronic components of the Work accessible by + file transfer protocols such as FTP or HTTP or by shared file + systems such as Sun's Network File System (NFS). + + `Compiled Work' + A version of the Work that has been processed into a form where it + is directly usable on a computer system. This processing may + include using installation facilities provided by the Work, + transformations of the Work, copying of components of the Work, or + other activities. Note that modification of any installation + facilities provided by the Work constitutes modification of the Work. + + `Current Maintainer' + A person or persons nominated as such within the Work. If there is + no such explicit nomination then it is the `Copyright Holder' under + any applicable law. + + `Base Interpreter' + A program or process that is normally needed for running or + interpreting a part or the whole of the Work. + + A Base Interpreter may depend on external components but these + are not considered part of the Base Interpreter provided that each + external component clearly identifies itself whenever it is used + interactively. Unless explicitly specified when applying the + license to the Work, the only applicable Base Interpreter is a + `LaTeX-Format' or in the case of files belonging to the + `LaTeX-format' a program implementing the `TeX language'. + + + +CONDITIONS ON DISTRIBUTION AND MODIFICATION +=========================================== + +1. Activities other than distribution and/or modification of the Work +are not covered by this license; they are outside its scope. In +particular, the act of running the Work is not restricted and no +requirements are made concerning any offers of support for the Work. + +2. You may distribute a complete, unmodified copy of the Work as you +received it. Distribution of only part of the Work is considered +modification of the Work, and no right to distribute such a Derived +Work may be assumed under the terms of this clause. + +3. You may distribute a Compiled Work that has been generated from a +complete, unmodified copy of the Work as distributed under Clause 2 +above, as long as that Compiled Work is distributed in such a way that +the recipients may install the Compiled Work on their system exactly +as it would have been installed if they generated a Compiled Work +directly from the Work. + +4. If you are the Current Maintainer of the Work, you may, without +restriction, modify the Work, thus creating a Derived Work. You may +also distribute the Derived Work without restriction, including +Compiled Works generated from the Derived Work. Derived Works +distributed in this manner by the Current Maintainer are considered to +be updated versions of the Work. + +5. If you are not the Current Maintainer of the Work, you may modify +your copy of the Work, thus creating a Derived Work based on the Work, +and compile this Derived Work, thus creating a Compiled Work based on +the Derived Work. + +6. If you are not the Current Maintainer of the Work, you may +distribute a Derived Work provided the following conditions are met +for every component of the Work unless that component clearly states +in the copyright notice that it is exempt from that condition. Only +the Current Maintainer is allowed to add such statements of exemption +to a component of the Work. + + a. If a component of this Derived Work can be a direct replacement + for a component of the Work when that component is used with the + Base Interpreter, then, wherever this component of the Work + identifies itself to the user when used interactively with that + Base Interpreter, the replacement component of this Derived Work + clearly and unambiguously identifies itself as a modified version + of this component to the user when used interactively with that + Base Interpreter. + + b. Every component of the Derived Work contains prominent notices + detailing the nature of the changes to that component, or a + prominent reference to another file that is distributed as part + of the Derived Work and that contains a complete and accurate log + of the changes. + + c. No information in the Derived Work implies that any persons, + including (but not limited to) the authors of the original version + of the Work, provide any support, including (but not limited to) + the reporting and handling of errors, to recipients of the + Derived Work unless those persons have stated explicitly that + they do provide such support for the Derived Work. + + d. You distribute at least one of the following with the Derived Work: + + 1. A complete, unmodified copy of the Work; + if your distribution of a modified component is made by + offering access to copy the modified component from a + designated place, then offering equivalent access to copy + the Work from the same or some similar place meets this + condition, even though third parties are not compelled to + copy the Work along with the modified component; + + 2. Information that is sufficient to obtain a complete, + unmodified copy of the Work. + +7. If you are not the Current Maintainer of the Work, you may +distribute a Compiled Work generated from a Derived Work, as long as +the Derived Work is distributed to all recipients of the Compiled +Work, and as long as the conditions of Clause 6, above, are met with +regard to the Derived Work. + +8. The conditions above are not intended to prohibit, and hence do not +apply to, the modification, by any method, of any component so that it +becomes identical to an updated version of that component of the Work as +it is distributed by the Current Maintainer under Clause 4, above. + +9. Distribution of the Work or any Derived Work in an alternative +format, where the Work or that Derived Work (in whole or in part) is +then produced by applying some process to that format, does not relax or +nullify any sections of this license as they pertain to the results of +applying that process. + +10. a. A Derived Work may be distributed under a different license + provided that license itself honors the conditions listed in + Clause 6 above, in regard to the Work, though it does not have + to honor the rest of the conditions in this license. + + b. If a Derived Work is distributed under a different license, that + Derived Work must provide sufficient documentation as part of + itself to allow each recipient of that Derived Work to honor the + restrictions in Clause 6 above, concerning changes from the Work. + +11. This license places no restrictions on works that are unrelated to +the Work, nor does this license place any restrictions on aggregating +such works with the Work by any means. + +12. Nothing in this license is intended to, or may be used to, prevent +complete compliance by all parties with all applicable laws. + + +NO WARRANTY +=========== + +There is no warranty for the Work. Except when otherwise stated in +writing, the Copyright Holder provides the Work `as is', without +warranty of any kind, either expressed or implied, including, but not +limited to, the implied warranties of merchantability and fitness for a +particular purpose. The entire risk as to the quality and performance +of the Work is with you. Should the Work prove defective, you assume +the cost of all necessary servicing, repair, or correction. + +In no event unless required by applicable law or agreed to in writing +will The Copyright Holder, or any author named in the components of the +Work, or any other party who may distribute and/or modify the Work as +permitted above, be liable to you for damages, including any general, +special, incidental or consequential damages arising out of any use of +the Work or out of inability to use the Work (including, but not limited +to, loss of data, data being rendered inaccurate, or losses sustained by +anyone as a result of any failure of the Work to operate with any other +programs), even if the Copyright Holder or said author or said other +party has been advised of the possibility of such damages. + + +MAINTENANCE OF THE WORK +======================= + +The Work has the status `author-maintained' if the Copyright Holder +explicitly and prominently states near the primary copyright notice in +the Work that the Work can only be maintained by the Copyright Holder +or simply that it is `author-maintained'. + +The Work has the status `maintained' if there is a Current Maintainer +who has indicated in the Work that they are willing to receive error +reports for the Work (for example, by supplying a valid e-mail +address). It is not required for the Current Maintainer to acknowledge +or act upon these error reports. + +The Work changes from status `maintained' to `unmaintained' if there +is no Current Maintainer, or the person stated to be Current +Maintainer of the work cannot be reached through the indicated means +of communication for a period of six months, and there are no other +significant signs of active maintenance. + +You can become the Current Maintainer of the Work by agreement with +any existing Current Maintainer to take over this role. + +If the Work is unmaintained, you can become the Current Maintainer of +the Work through the following steps: + + 1. Make a reasonable attempt to trace the Current Maintainer (and + the Copyright Holder, if the two differ) through the means of + an Internet or similar search. + + 2. If this search is successful, then enquire whether the Work + is still maintained. + + a. If it is being maintained, then ask the Current Maintainer + to update their communication data within one month. + + b. If the search is unsuccessful or no action to resume active + maintenance is taken by the Current Maintainer, then announce + within the pertinent community your intention to take over + maintenance. (If the Work is a LaTeX work, this could be + done, for example, by posting to comp.text.tex.) + + 3a. If the Current Maintainer is reachable and agrees to pass + maintenance of the Work to you, then this takes effect + immediately upon announcement. + + b. If the Current Maintainer is not reachable and the Copyright + Holder agrees that maintenance of the Work be passed to you, + then this takes effect immediately upon announcement. + + 4. If you make an `intention announcement' as described in 2b. above + and after three months your intention is challenged neither by + the Current Maintainer nor by the Copyright Holder nor by other + people, then you may arrange for the Work to be changed so as + to name you as the (new) Current Maintainer. + + 5. If the previously unreachable Current Maintainer becomes + reachable once more within three months of a change completed + under the terms of 3b) or 4), then that Current Maintainer must + become or remain the Current Maintainer upon request provided + they then update their communication data within one month. + +A change in the Current Maintainer does not, of itself, alter the fact +that the Work is distributed under the LPPL license. + +If you become the Current Maintainer of the Work, you should +immediately provide, within the Work, a prominent and unambiguous +statement of your status as Current Maintainer. You should also +announce your new status to the same pertinent community as +in 2b) above. + + +WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE +====================================================== + +This section contains important instructions, examples, and +recommendations for authors who are considering distributing their +works under this license. These authors are addressed as `you' in +this section. + +Choosing This License or Another License +---------------------------------------- + +If for any part of your work you want or need to use *distribution* +conditions that differ significantly from those in this license, then +do not refer to this license anywhere in your work but, instead, +distribute your work under a different license. You may use the text +of this license as a model for your own license, but your license +should not refer to the LPPL or otherwise give the impression that +your work is distributed under the LPPL. + +The document `modguide.tex' in the base LaTeX distribution explains +the motivation behind the conditions of this license. It explains, +for example, why distributing LaTeX under the GNU General Public +License (GPL) was considered inappropriate. Even if your work is +unrelated to LaTeX, the discussion in `modguide.tex' may still be +relevant, and authors intending to distribute their works under any +license are encouraged to read it. + +A Recommendation on Modification Without Distribution +----------------------------------------------------- + +It is wise never to modify a component of the Work, even for your own +personal use, without also meeting the above conditions for +distributing the modified component. While you might intend that such +modifications will never be distributed, often this will happen by +accident -- you may forget that you have modified that component; or +it may not occur to you when allowing others to access the modified +version that you are thus distributing it and violating the conditions +of this license in ways that could have legal implications and, worse, +cause problems for the community. It is therefore usually in your +best interest to keep your copy of the Work identical with the public +one. Many works provide ways to control the behavior of that work +without altering any of its licensed components. + +How to Use This License +----------------------- + +To use this license, place in each of the components of your work both +an explicit copyright notice including your name and the year the work +was authored and/or last substantially modified. Include also a +statement that the distribution and/or modification of that +component is constrained by the conditions in this license. + +Here is an example of such a notice and statement: + + %% pig.dtx + %% Copyright 2005 M. Y. Name + % + % This work may be distributed and/or modified under the + % conditions of the LaTeX Project Public License, either version 1.3 + % 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.3 or later is part of all distributions of LaTeX + % version 2005/12/01 or later. + % + % This work has the LPPL maintenance status `maintained'. + % + % The Current Maintainer of this work is M. Y. Name. + % + % This work consists of the files pig.dtx and pig.ins + % and the derived file pig.sty. + +Given such a notice and statement in a file, the conditions +given in this license document would apply, with the `Work' referring +to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being +generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' +referring to any `LaTeX-Format', and both `Copyright Holder' and +`Current Maintainer' referring to the person `M. Y. Name'. + +If you do not want the Maintenance section of LPPL to apply to your +Work, change `maintained' above into `author-maintained'. +However, we recommend that you use `maintained', as the Maintenance +section was added in order to ensure that your Work remains useful to +the community even when you can no longer maintain and support it +yourself. + +Derived Works That Are Not Replacements +--------------------------------------- + +Several clauses of the LPPL specify means to provide reliability and +stability for the user community. They therefore concern themselves +with the case that a Derived Work is intended to be used as a +(compatible or incompatible) replacement of the original Work. If +this is not the case (e.g., if a few lines of code are reused for a +completely different task), then clauses 6b and 6d shall not apply. + + +Important Recommendations +------------------------- + + Defining What Constitutes the Work + + The LPPL requires that distributions of the Work contain all the + files of the Work. It is therefore important that you provide a + way for the licensee to determine which files constitute the Work. + This could, for example, be achieved by explicitly listing all the + files of the Work near the copyright notice of each file or by + using a line such as: + + % This work consists of all files listed in manifest.txt. + + in that place. In the absence of an unequivocal list it might be + impossible for the licensee to determine what is considered by you + to comprise the Work and, in such a case, the licensee would be + entitled to make reasonable conjectures as to which files comprise + the Work. diff --git a/macros/latex/contrib/rpgicons/README.md b/macros/latex/contrib/rpgicons/README.md new file mode 100644 index 0000000000..febd990253 --- /dev/null +++ b/macros/latex/contrib/rpgicons/README.md @@ -0,0 +1,30 @@ +![Version 1.8.2](https://img.shields.io/badge/version-1.8.2-blue) + +rpgicons-example + +# The `rpgicons` package + +This package provides a set of high-quality icons for use in notes for tabletop role-playing games. +The icons are meant to be used in the body text, but they can also be used in other contexts such +as graphics or diagrams. The package comes in two variants, one based on the `l3draw` package and one +based on PGF/Ti*k*Z. + +As of version 1.4.0, an `l3draw` variant of the `rpgicons` package exists which is loaded by default. +The `l3draw` package does not provide the same variety of styles as Ti*k*Z does. + +The PGF veriant of the `rpgicons` package provides the icons as Ti*k*Z shapes. Since the commands to +typeset the icons use `tikzpicture` environments, these commands should not be used inside another +`tikzpicture`. However, because the package defines the icons as Ti*k*Z shapes, it is possible to +use the icons in `tikzpicture` environments directly. Apart from that, as of version 1.1.0, the +package provides a way to define custom commands to typeset the icons as boxed material which is +safe to use in a tikzpicture context. As of version 1.3.1, the package provides an additional way +to use the icons as Ti*k*Z pics. + +The `rpgicons` package is installed by copying the relevant `.sty` file into the working or `texmf` +directory. The package is loaded by calling `\usepackage{rpgicons}` in the preamble of the document. +To load the PGF variant, the package can be loaded with the option `pgf`. The `l3draw` variant is +loaded per default. The PGF or `l3draw` variants can be loaded directly via +`\usepackage{rpgicons-pgf}` or`\usepackage{rpgicons-l3}`. + +This package including all files is subject to the LPPL 1.3c license. +Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de). diff --git a/macros/latex/contrib/rpgicons/rpgicons-doc.pdf b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf new file mode 100644 index 0000000000..7eab416244 Binary files /dev/null and b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf differ diff --git a/macros/latex/contrib/rpgicons/rpgicons-doc.tex b/macros/latex/contrib/rpgicons/rpgicons-doc.tex new file mode 100644 index 0000000000..72aad456a7 --- /dev/null +++ b/macros/latex/contrib/rpgicons/rpgicons-doc.tex @@ -0,0 +1,831 @@ +% File: rpgicons-doc.tex +% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de). +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. +% +% This file is part of the `rpgicons' package (The Work in LPPL) +% and all files in that bundle must be distributed together. +% +% This work has the LPPL maintenance status `maintained'. +% +\documentclass[a4paper]{article} +\def\rpgiconsfileversion{1.8.2} +\def\rpgiconsfiledate{28 April 2024} + +\usepackage[T1]{fontenc} +\usepackage{Alegreya} +\usepackage{AlegreyaSans} +\usepackage{FiraMono} + +\usepackage{geometry, longtable, booktabs, tcolorbox, hyperref} +\geometry{margin=25mm, left=45mm} + +\usepackage{fancyhdr} +\pagestyle{fancy} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +\fancyfoot[R]{\thepage} + +\linespread{1.1}\selectfont +\addtolength{\skip\footins}{1em plus 5pt} +\makeatletter +\renewcommand*{\thefootnote}{\fnsymbol{footnote}} +\renewcommand{\@makefntext}[1]{% + \noindent\hbox to 0.75em{\normalfont\@thefnmark\hss}~#1% +} +\makeatother + +\tcbuselibrary{listings} +\lstdefinestyle{rpgiconsdocmacro}{ + basicstyle=\small\ttfamily, + literate=*{<}{{{\color{black!50}\guilsinglleft}}}1 + {>}{{{\color{black!50}\guilsinglright}}}1, + keywords={}, + moredelim=[is][\bfseries]{|}{|}, + moredelim=[is][\color{black!50}]{!}{!}, +} +\lstdefinestyle{rpgiconsdoccodeexample}{ + basicstyle=\small\ttfamily, + keywords={}, +} + +\hypersetup{colorlinks} + +\ExplSyntaxOn +\int_new:N \l_rpgicons_doc_change_int +\NewDocumentCommand{\changes}{ m m m }{ + \int_incr:N \l_rpgicons_doc_change_int + \prop_new:c { l_rpgicons_doc_change_ + \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } + \prop_put:cnn { l_rpgicons_doc_change_ + \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { version } {#1} + \prop_put:cnn { l_rpgicons_doc_change_ + \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { date } {#2} + \prop_put:cnn { l_rpgicons_doc_change_ + \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { changes } {#3} +} +\NewDocumentCommand{\printchanges}{ }{ + \section{Changes} + \begin{description} + \int_step_inline:nn { \l_rpgicons_doc_change_int } { + \item[ + \prop_item:cn { l_rpgicons_doc_change_ + \int_to_roman:n { ##1 } _prop } { version } ] + ( \prop_item:cn { l_rpgicons_doc_change_ + \int_to_roman:n { ##1 } _prop } { date } ) \\ + \prop_item:cn { l_rpgicons_doc_change_ + \int_to_roman:n { ##1 } _prop } { changes } + } + \end{description} +} + +\tl_new:N \l_rpgicons_doc_doctitle_tl +\NewExpandableDocumentCommand{\makedoctitle}{ o m o m m o m }{ + \hypersetup{ + pdfauthor={#5}, + pdftitle={\IfValueTF{#1}{#1}{#2}}, + pdfsubject={\IfValueTF{#3}{#3}{#4}} + } + \tl_set:Nn \l_rpgicons_doc_doctitle_tl { + \group_begin: + \tcbset{ + title ~ style ~ hook/.style={ + boxrule=2pt, + fontupper=\huge\ttfamily + } + } + \setlength{\parindent}{0pt}\sffamily + \Huge{\bfseries #2}\par\bigskip + \Large #4\par\bigskip + \large #5 + \IfValueT{#6}{ + \,\footnote{#6}\par\bigskip + } + #7\par\bigskip + \rule{\textwidth}{.08em} + \group_end: + } +} + +\NewExpandableDocumentCommand{\printdoctitle}{ }{ + \tl_use:N \l_rpgicons_doc_doctitle_tl +} +\ExplSyntaxOff + +\tcbset{ + size=small, + arc=2.5pt, + outer arc=2.5pt, + colframe=black!10, + colback=black!10, + title style hook/.style={} +} + +\NewTCBListing{macrodef}{ }{ + listing only, + listing style={rpgiconsdocmacro}, + grow to left by=2cm, + boxrule=0pt, + after={\par\smallskip\noindent} +} + +\NewTCBListing{codeexample}{ }{ + text side listing, + lefthand width=4.5cm, + listing style={rpgiconsdoccodeexample}, + after={\par\smallskip\noindent} +} + +\NewTotalTCBox{\macro}{ O{} v }{ + verbatim, + size=tight, + arc=1pt, + outer arc=1pt, + top=0.5pt, + bottom=0.5pt, + left=2pt, + right=2pt, + boxrule=0pt, + colframe=black!10, + colback=black!10, + fontupper=\small\ttfamily, + #1 +}{\vphantom{/g}\lstinline^#2^} + +\NewTotalTCBox{\titlemacro}{ s O{} m }{ + verbatim, + size=tight, + arc=1pt, + outer arc=1pt, + top=0.5pt, + bottom=0.5pt, + left=2pt, + right=2pt, + boxrule=0pt, + colframe=black!10, + colback=black!10, + fontupper=\small\ttfamily, + title style hook, + #2 +}{\vphantom{/g}\IfBooleanT{#1}{\textbackslash}#3} + +\usepackage{rpgicons-l3} +\usepackage[pics]{rpgicons-pgf} + +\ExplSyntaxOn +\clist_new:N \l_rpgicons_doc_logo_icons_clist +\clist_new:N \l_rpgicons_doc_logo_colors_clist +\cs_generate_variant:Nn { \color_set:nnn } { nne } + +\clist_set:Nn \l_rpgicons_doc_logo_colors_clist { + 264653 , 287271 , 2a9d8f , e9c46a , f4a261 , e76f51 +} +\int_step_inline:nn { \clist_count:N \l_rpgicons_doc_logo_colors_clist } { + \color_set:nne { rpgiconslogo \int_to_roman:n { #1 } } { HTML } { + \clist_item:Nn \l_rpgicons_doc_logo_colors_clist { #1 } + } +} +\clist_set:Nn \l_rpgicons_doc_logo_icons_clist { + twentyside , charisma , armor , buff , ranged , proficiency +} + +\NewDocumentCommand{\rpgiconslogo}{ O{1} }{ + \draw_begin: + \draw_transform_scale:n { #1 } + \int_step_inline:nn { \clist_count:N \l_rpgicons_doc_logo_icons_clist } { + \hcoffin_set:Nn \l_tmpa_coffin { + \draw_suspend_begin: + \RPGIconsAbility[negative]{ + \clist_item:Nn \l_rpgicons_doc_logo_icons_clist { ##1 } + }[color=rpgiconslogo \int_to_roman:n { ##1 } ] + \draw_suspend_end: + } + \draw_scope_begin: + \draw_transform_shift:n { + % fix bug in older l3draw version + \cs_if_exist:NTF \__draw_transform_shift:nnnn { + \draw_point_polar:nn { 0.33cm } { 60 * ##1 + 10 } + } { + \draw_point_transform:n { \draw_point_polar:nn { 0.33cm } { 60 * ##1 + 10 } } + } + } + \draw_coffin_use:Nnn \l_tmpa_coffin { hc } { vc } + \draw_scope_end: + } + \draw_end: +} +\ExplSyntaxOff + +\NewDocumentEnvironment{rpgiconsiconlist}{ }{ + \begin{longtable}{ @{} p{20em} p{5em} p{\dimexpr\linewidth-25em-4\tabcolsep} @{} } + \toprule + \textbf{Command} & \textbf{Icon} & \textbf{Shape} \\ + \midrule\endhead +}{ + \bottomrule + \end{longtable} +} + +\makedoctitle + [The rpgicons package] + {The \titlemacro{rpgicons} package} + {A set of high-quality icons for use in notes for tabletop role-playing games} + {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}] + {Version \rpgiconsfileversion, released on \rpgiconsfiledate} + +\changes{v1.1.0}{2023/08/15}{First public release.} +\changes{v1.1.1}{2023/11/15}{Fudge dice icon added.} +\changes{v1.1.2}{2023/11/16}{Bug fixed that caused wrong spacing when using dice icons without quantifier.} +\changes{v1.2.0}{2023/11/20}{Corrections in the manual. Icons for six-sided dice with one to nine pips, plus sign and minus sign added.} +%\changes{v1.2.1}{2023/11/20}{Documentation of lengths for spacing added.} +%\changes{v1.2.2}{2023/11/21}{Corrections in the manual.} +\changes{v1.3.0}{2023/11/21}{Option to set background color added. Renamed global option.} +\changes{v1.3.1}{2024/02/18}{Correction of initializing code. Correction of default value of after sep. Addition of pics.} +%\changes{v1.3.2}{2024/02/19}{Reformatting of the manual.} +%\changes{v1.3.4}{2024/02/20}{Minor corrections of some shapes.} +\changes{v1.4.0}{2024/02/21}{L3 variant added.} +\changes{v1.4.1}{2024/02/21}{Corrections in L3 variant.} +\changes{v1.4.2}{2024/02/21}{Alternative set of commands in L3 variant defined.} +\changes{v1.4.3}{2024/02/22}{Added option to L3 variant to enable upward compatibility.} +\changes{v1.4.4}{2024/02/24}{Added styles for every instance of command or shape, correction of recent \titlemacro{l3draw} code.} +\changes{v1.5.0}{2024/02/25}{Alternative set of commands defined, added support of styles in pics.} +\changes{v1.5.1}{2024/02/28}{Addition of opacity to L3 variant.} +\changes{v1.5.2}{2024/02/29}{Unification of scaling, minor corrections.} +\changes{v1.5.3}{2024/03/03}{Optimisation of code in L3 variant.} +\changes{v1.5.4}{2024/03/06}{Correction of baseline settings in L3 variant, added accessibililty support for L3 variant.} +%\changes{v1.5.5}{2024/03/07}{Optimsation of accessibililty support for L3 variant.} +\changes{v1.6.0}{2024/03/15}{Four attribute icons added, minor correction of styles.} +\changes{v1.6.1}{2024/03/16}{Unified size of negative attribute icon.} +\changes{v1.7.0}{2024/03/16}{Macro for easy typesetting using roll dice syntax added in L3 variant, compatibility mode updated.} +\changes{v1.8.0}{2024/03/24}{Unified wrapper to load either package variant.} +\changes{v1.8.2}{2024/04/28}{Roll dice syntax for PGF variant.} + +\begin{document} + +\vspace*{-1cm} +\noindent\rpgiconslogo[4] + +\bigskip + +\printdoctitle + +\bigskip + +\section{Introduction} + +The \macro{rpgicons} package provides a set of high-quality icons for use in notes for tabletop role-playing games. The icons are meant to be used in the body text, but they can also be used in other contexts such as graphics or diagrams. + +The package comes in two variants, a L3 variant based on the \macro{l3draw} package which is loaded per default and a PGF veriant based on PGF/Ti\emph{k}Z. + +\section{Loading the package} + +To install the package, copy the relevant package files \macro{rpgicons.sty}, \macro{rpgicons-l3.sty} and \macro{rpgicons-pgf.sty} into the working directory or into the \macro{texmf} directory. After the package has been installted, the \macro{rpgicons} package is loaded by calling \macro{\usepackage{rpgicons}} in the preamble of the document. + +\begin{macrodef}l3\end{macrodef} +The L3 variant of the package is loaded by default. To load it explicitly, the package can be loaded using the option \macro{l3}. Alternatively, \macro{\usepackage{rpgicons-l3}} can be called instead. + +\begin{macrodef}pgf\end{macrodef} +To load the PGF variant of the package the package needs to be loaded with the option \macro{pgf}. Alternatively, \macro{\usepackage{rpgicons-pgf}} can be called instead. + +\subsection{Dependencies} + +The L3 variant of the package loads the \macro{l3draw} package. If the package is loaded with the \macro{opacity} option to enable transparency, the \macro{l3opacity} package is also loaded. + +The PGF variant of the package loads the \macro{tikz} package which in turn loads the \macro{xcolor} package. To make use of specific options these packages provide, you need to load the packages with the relevant options beforehand or use, such as \macro{\PassOptionsToPackage{svgnames}{xcolor}}. + +\section{Main user commands} + +Regardless of the variant of the package, a set of user commands is always available. These are described in the following. Depending on the use of the L3 or the PGF veriant, certain specific commands or options are available that are explained in the following sections in further detail. + +Because of the way the package defines the icons, every of the below described user commands can actually be used together with every shape. However, the combinations of shapes and commands as described in the following subsections are preferable. + +\subsection[Command \textbackslash die]{Command \titlemacro*{die}} + +\begin{macrodef} +|\die|[