aboutsummaryrefslogtreecommitdiffstats
path: root/buch/papers
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--buch/papers/clifford/3d/Makefile38
-rw-r--r--buch/papers/clifford/3d/common.inc271
-rw-r--r--buch/papers/clifford/3d/dq.jpgbin0 -> 135088 bytes
-rw-r--r--buch/papers/clifford/3d/dq.pdfbin0 -> 156514 bytes
-rw-r--r--buch/papers/clifford/3d/dq.pov30
-rw-r--r--buch/papers/clifford/3d/dq.tex51
-rw-r--r--buch/papers/clifford/3d/drehung.jpgbin0 -> 203830 bytes
-rw-r--r--buch/papers/clifford/3d/drehung.pdfbin0 -> 224538 bytes
-rw-r--r--buch/papers/clifford/3d/drehung.pov87
-rw-r--r--buch/papers/clifford/3d/drehung.tex56
-rw-r--r--buch/papers/clifford/3d/q23.jpgbin0 -> 85740 bytes
-rw-r--r--buch/papers/clifford/3d/q23.pov14
-rw-r--r--buch/papers/clifford/3d/q31.jpgbin0 -> 82876 bytes
-rw-r--r--buch/papers/clifford/3d/q31.pov15
-rw-r--r--buch/papers/clifford/3d/qq.pdfbin0 -> 185901 bytes
-rw-r--r--buch/papers/clifford/3d/qq.tex68
-rw-r--r--buch/papers/ifs/images/FIC.pdf2647
-rw-r--r--buch/papers/ifs/images/Makefile9
-rw-r--r--buch/papers/ifs/images/chaosspiel.pdfbin0 -> 12525821 bytes
-rw-r--r--buch/papers/ifs/images/chaosspiel.tex37
-rw-r--r--buch/papers/ifs/images/farnnotweight-eps-converted-to.pdfbin166218 -> 6074235 bytes
-rw-r--r--buch/papers/ifs/images/farnrightwight-eps-converted-to.pdfbin59191 -> 6450743 bytes
-rw-r--r--buch/papers/ifs/teil0.tex2
-rw-r--r--buch/papers/ifs/teil1.tex24
-rw-r--r--buch/papers/ifs/teil2.tex62
-rw-r--r--buch/papers/ifs/teil3.tex88
-rw-r--r--buch/papers/mceliece/Makefile.inc8
-rw-r--r--buch/papers/mceliece/aufbau.tex161
-rw-r--r--buch/papers/mceliece/einleitung.tex16
-rw-r--r--buch/papers/mceliece/fazit.tex57
-rw-r--r--buch/papers/mceliece/funktionsweise.tex83
-rw-r--r--buch/papers/mceliece/main.tex27
-rw-r--r--buch/papers/mceliece/references.bib59
-rw-r--r--buch/papers/mceliece/teil0.tex22
-rw-r--r--buch/papers/mceliece/teil1.tex55
-rw-r--r--buch/papers/mceliece/teil2.tex40
-rw-r--r--buch/papers/mceliece/teil3.tex40
-rwxr-xr-xbuch/papers/multiplikation/code/MMbin26848 -> 0 bytes
-rwxr-xr-xbuch/papers/multiplikation/code/MM.c19
-rw-r--r--buch/papers/multiplikation/code/MM.py90
-rw-r--r--buch/papers/multiplikation/code/c_matrix.h204
-rw-r--r--buch/papers/multiplikation/code/c_meas_4096.pdfbin15865 -> 22207 bytes
-rw-r--r--buch/papers/multiplikation/code/ci.txt0
-rwxr-xr-xbuch/papers/multiplikation/code/helper_class.py5
-rw-r--r--buch/papers/multiplikation/code/meas/MM.txt112
-rw-r--r--buch/papers/multiplikation/code/meas/MM_dc.txt122
-rw-r--r--buch/papers/multiplikation/code/meas/blas.txt110
-rw-r--r--buch/papers/multiplikation/code/meas/ci/MM.txt0
-rw-r--r--buch/papers/multiplikation/code/meas/ci/Wino.txt0
-rw-r--r--buch/papers/multiplikation/code/meas/ci/blas.txt0
-rw-r--r--buch/papers/multiplikation/code/meas/ci/dc.txt0
-rw-r--r--buch/papers/multiplikation/code/meas/ci/strassen.txt0
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/MM.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/blas.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/strassen.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/winograd.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/MM.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/old/MM_dc.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/old/blas.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/old/strassen.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/old/winograd.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/strassen.txt120
-rw-r--r--buch/papers/multiplikation/code/meas/winograd.txt115
-rw-r--r--buch/papers/multiplikation/code/meas_1024.pdfbin17660 -> 18813 bytes
-rw-r--r--buch/papers/multiplikation/code/meas_1024.txt10
-rw-r--r--buch/papers/multiplikation/code/meas_128.pdfbin17961 -> 18120 bytes
-rw-r--r--buch/papers/multiplikation/code/meas_128.txt10
-rw-r--r--buch/papers/multiplikation/code/meas_256.pdfbin18067 -> 17715 bytes
-rw-r--r--buch/papers/multiplikation/code/meas_256.txt10
-rw-r--r--buch/papers/multiplikation/code/meas_32.pdfbin17078 -> 17964 bytes
-rw-r--r--buch/papers/multiplikation/code/meas_32.txt10
-rw-r--r--buch/papers/multiplikation/code/meas_4096.pdfbin0 -> 18300 bytes
-rw-r--r--buch/papers/multiplikation/code/meas_4096.txt6
-rw-r--r--buch/papers/multiplikation/code/meas_64.pdfbin17678 -> 17747 bytes
-rw-r--r--buch/papers/multiplikation/code/meas_64.txt10
-rwxr-xr-xbuch/papers/multiplikation/einlteung.tex30
-rw-r--r--buch/papers/multiplikation/images/algo_tab.pdfbin0 -> 34251 bytes
-rw-r--r--buch/papers/multiplikation/images/algo_tab.tex122
-rw-r--r--buch/papers/multiplikation/images/bigo.pdfbin24288 -> 28312 bytes
-rw-r--r--buch/papers/multiplikation/images/bigo.tex43
-rw-r--r--buch/papers/multiplikation/images/c_meas_4096.pdfbin0 -> 17400 bytes
-rw-r--r--buch/papers/multiplikation/images/meas_1024.pdfbin0 -> 18813 bytes
-rw-r--r--buch/papers/multiplikation/images/meas_c.pdfbin0 -> 23887 bytes
-rw-r--r--buch/papers/multiplikation/images/meas_c.tex150
-rw-r--r--buch/papers/multiplikation/images/meas_python.pdfbin0 -> 22337 bytes
-rw-r--r--buch/papers/multiplikation/images/meas_python.tex145
-rw-r--r--buch/papers/multiplikation/images/strassen.pdfbin15850 -> 22262 bytes
-rw-r--r--buch/papers/multiplikation/images/strassen.tex149
-rwxr-xr-xbuch/papers/multiplikation/loesungsmethoden.tex334
-rwxr-xr-xbuch/papers/multiplikation/main.tex26
-rwxr-xr-xbuch/papers/multiplikation/problemstellung.tex187
-rwxr-xr-xbuch/papers/multiplikation/references.bib37
-rw-r--r--buch/papers/munkres/figures/MatrixA.pngbin0 -> 87794 bytes
-rw-r--r--buch/papers/munkres/figures/Ungarische_Methode_Beispiel.pngbin1179631 -> 485941 bytes
-rw-r--r--buch/papers/munkres/main.tex2
-rw-r--r--buch/papers/munkres/teil1.tex52
-rw-r--r--buch/papers/munkres/teil2.tex3
-rw-r--r--buch/papers/munkres/teil3.tex66
-rw-r--r--buch/papers/punktgruppen/crystals.tex24
-rw-r--r--buch/papers/punktgruppen/intro.tex30
-rw-r--r--buch/papers/punktgruppen/piezo.tex60
-rw-r--r--buch/papers/punktgruppen/references.bib4
-rw-r--r--buch/papers/punktgruppen/symmetry.tex33
-rw-r--r--buch/papers/reedsolomon/Makefile2
-rw-r--r--buch/papers/reedsolomon/codebsp.tex2
-rw-r--r--buch/papers/reedsolomon/dtf.tex163
-rw-r--r--buch/papers/reedsolomon/einleitung.tex10
-rw-r--r--buch/papers/reedsolomon/endlichekoerper.tex70
-rw-r--r--buch/papers/reedsolomon/figures/fourier.pdfbin0 -> 59770 bytes
-rw-r--r--buch/papers/reedsolomon/figures/plotfft.pdfbin59617 -> 59772 bytes
-rw-r--r--buch/papers/reedsolomon/idee.tex178
-rw-r--r--buch/papers/reedsolomon/standalone/standalone.pdfbin1835758 -> 1837295 bytes
-rw-r--r--buch/papers/reedsolomon/tikz/Makefile7
-rw-r--r--buch/papers/reedsolomon/tikz/fourier.pdfbin0 -> 59721 bytes
-rw-r--r--buch/papers/reedsolomon/tikz/fourier.tex139
-rw-r--r--buch/papers/reedsolomon/tikz/plotfft.tex38
-rw-r--r--buch/papers/reedsolomon/tikz/plotfftraw.tex1
-rw-r--r--buch/papers/reedsolomon/tikz/tikz/codiert.txt96
-rw-r--r--buch/papers/reedsolomon/tikz/tikz/decodiert.txt96
-rw-r--r--buch/papers/reedsolomon/tikz/tikz/empfangen.txt96
-rw-r--r--buch/papers/reedsolomon/tikz/tikz/fehler.txt96
-rw-r--r--buch/papers/reedsolomon/tikz/tikz/locator.txt96
-rw-r--r--buch/papers/reedsolomon/tikz/tikz/signal.txt96
-rw-r--r--buch/papers/reedsolomon/tikz/tikz/syndrom.txt96
-rw-r--r--buch/papers/verkehr/section1.tex18
126 files changed, 5567 insertions, 2315 deletions
diff --git a/buch/papers/clifford/3d/Makefile b/buch/papers/clifford/3d/Makefile
new file mode 100644
index 0000000..147ca81
--- /dev/null
+++ b/buch/papers/clifford/3d/Makefile
@@ -0,0 +1,38 @@
+#
+# Makefile
+#
+# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+#
+all: dq.jpg q23.jpg q31.jpg drehung.jpg dq.pdf qq.pdf drehung.pdf
+
+size="+W3840 +H2160"
+
+dq.png: dq.pov common.inc
+ povray +A0.1 $(size) -Odq.png dq.pov
+dq.jpg: dq.png Makefile
+ convert -extract 1600x1400+1500+60 dq.png -density 300 -units PixelsPerInch dq.jpg
+dq.pdf: dq.jpg dq.tex
+ pdflatex dq.tex
+
+extract="1200x1200+1450+350"
+
+q23.png: q23.pov common.inc
+ povray +A0.1 $(size) -Oq23.png q23.pov
+q23.jpg: q23.png Makefile
+ convert -extract $(extract) q23.png -density 300 -units PixelsPerInch q23.jpg
+
+q31.png: q31.pov common.inc
+ povray +A0.1 $(size) -Oq31.png q31.pov
+q31.jpg: q31.png Makefile
+ convert -extract $(extract) q31.png -density 300 -units PixelsPerInch q31.jpg
+
+qq.pdf: qq.tex q31.jpg q23.jpg
+ pdflatex qq.tex
+
+drehung.png: drehung.pov common.inc
+ povray +A0.1 $(size) -Odrehung.png drehung.pov
+drehung.jpg: drehung.png Makefile
+ convert -extract 1600x1450+1400+50 drehung.png -density 300 -units PixelsPerInch drehung.jpg
+drehung.pdf: drehung.tex drehung.jpg
+ pdflatex drehung.tex
+
diff --git a/buch/papers/clifford/3d/common.inc b/buch/papers/clifford/3d/common.inc
new file mode 100644
index 0000000..55bf6e1
--- /dev/null
+++ b/buch/papers/clifford/3d/common.inc
@@ -0,0 +1,271 @@
+//
+// common.inc
+//
+// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#version 3.7;
+#include "colors.inc"
+
+global_settings {
+ assumed_gamma 1
+}
+
+#declare imagescale = 0.14;
+#declare r = 0.02;
+#declare thick = 0.040;
+
+camera {
+ location <40, 12, 15>
+ look_at <0, 0, 0>
+ right 16/9 * x * imagescale
+ up y * imagescale
+}
+
+light_source {
+ <40, 20, 20> color White
+ area_light <1,0,0> <0,0,1>, 10, 10
+ adaptive 1
+ jitter
+}
+
+sky_sphere {
+ pigment {
+ color rgb<1,1,1>
+ }
+}
+
+//
+// draw an arrow from <from> to <to> with thickness <arrowthickness> with
+// color <c>
+//
+#macro arrow(from, to, arrowthickness, c)
+#declare arrowdirection = vnormalize(to - from);
+#declare arrowlength = vlength(to - from);
+union {
+ sphere {
+ from, 1.1 * arrowthickness
+ }
+ cylinder {
+ from,
+ from + (arrowlength - 5 * arrowthickness) * arrowdirection,
+ arrowthickness
+ }
+ cone {
+ from + (arrowlength - 5 * arrowthickness) * arrowdirection,
+ 2 * arrowthickness,
+ to,
+ 0
+ }
+ pigment {
+ color c
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+
+arrow(< -3, 0, 0 >, < 3, 0, 0 >, r, White)
+arrow(< 0, -3, 0 >, < 0, 3, 0 >, r, White)
+arrow(< 0, 0, -3 >, < 0, 0, 3 >, r, White)
+
+#macro circlearrow0(e1, e2, e3, r1, r2, h, winkel)
+
+mesh {
+ #declare N = 100;
+ #declare phi = 0;
+ #declare phimax = winkel - pi / 12;
+ #declare phistep = (phimax - phi) / N;
+ #while (phi < phimax - phistep/2)
+ triangle {
+ center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3,
+ center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3,
+ center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3
+ }
+ triangle {
+ center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3,
+ center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3,
+ center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3
+ }
+ triangle {
+ center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3,
+ center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3,
+ center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3
+ }
+ triangle {
+ center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3,
+ center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3,
+ center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3
+ }
+ triangle {
+ center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3,
+ center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3,
+ center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3
+ }
+ triangle {
+ center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3,
+ center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3,
+ center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3
+ }
+ triangle {
+ center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3,
+ center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3,
+ center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3
+ }
+ triangle {
+ center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3,
+ center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3,
+ center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3
+ }
+ #declare phi = phi + phistep;
+ #end
+
+ triangle {
+ center + r1 * e1 - h * e3,
+ center + r1 * e1 + h * e3,
+ center + r2 * e1 + h * e3
+ }
+ triangle {
+ center + r2 * e1 - h * e3,
+ center + r2 * e1 + h * e3,
+ center + r1 * e1 - h * e3
+ }
+ triangle {
+ center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 - h * e3,
+ center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 - h * e3,
+ center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3
+ }
+ triangle {
+ center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 + h * e3,
+ center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 + h * e3,
+ center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) + h * e3
+ }
+ triangle {
+ center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 - h * e3,
+ center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3
+ center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 + h * e3
+ }
+ triangle {
+ center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3
+ center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 + h * e3,
+ center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) + h * e3
+ }
+ triangle {
+ center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3,
+ center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 - h * e3,
+ center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 + h * e3
+ }
+ triangle {
+ center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3,
+ center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 + h * e3,
+ center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) + h * e3
+ }
+
+ pigment {
+ color rgb<1, 0.4, 0.4>
+ }
+}
+
+#end
+
+
+#macro circlearrow(fromdirection, axis, center, r, h, winkel, anzahl)
+
+#declare e1 = vnormalize(fromdirection);
+#declare e2 = -vnormalize(vcross(axis, fromdirection));
+#declare e3 = vnormalize(axis);
+
+#declare r1 = 0.4 * r;
+#declare r2 = r;
+
+#declare w = 0;
+#while (w < anzahl)
+ #declare a = 2 * w * pi / anzahl;
+ circlearrow0(e1 * cos(a) - e2 * sin(a), e1 * sin(a) + e2 * cos(a), e3, r1, r2, 1.2 * h, winkel)
+ #declare w = w + 1;
+#end
+
+mesh {
+ #declare vlu = center - r * e1 - r * e2 - h * e3;
+ #declare vlo = center - r * e1 - r * e2 + h * e3;
+ #declare vru = center - r * e1 + r * e2 - h * e3;
+ #declare vro = center - r * e1 + r * e2 + h * e3;
+ #declare hlu = center + r * e1 - r * e2 - h * e3;
+ #declare hlo = center + r * e1 - r * e2 + h * e3;
+ #declare hru = center + r * e1 + r * e2 - h * e3;
+ #declare hro = center + r * e1 + r * e2 + h * e3;
+ triangle { vlu, vru, vro }
+ triangle { vlu, vro, vlo }
+
+ triangle { vru, hru, hro }
+ triangle { vru, hro, vro }
+
+ triangle { hru, hlu, hlo }
+ triangle { hru, hlo, hro }
+
+ triangle { hlu, vlu, vlo }
+ triangle { hlu, vlo, hlo }
+
+ triangle { vlu, vru, hru }
+ triangle { vlu, hru, hlu }
+
+ triangle { vlo, vro, hro }
+ triangle { vlo, hro, hlo }
+
+ pigment {
+ color rgb<0.6,0.6,1>
+ }
+ finish {
+ specular 0.96
+ metallic
+ }
+}
+
+#if (vlength(axis) > 0.1)
+cone {
+ center + 1.19 * h * e3, r, center + 2 * r * e3, 0
+ pigment {
+ color rgbt<0.6,0.6,1,0.8>
+ }
+}
+#end
+
+cylinder {
+ center, center + 2 * r * e3, 0.04*0.2
+ pigment {
+ color rgb<1.0,0.6,0.6>
+ }
+ finish {
+ specular 0.96
+ metallic
+ }
+}
+
+#end
+
+#macro bogen(v1, v2, center, winkelbogen, farbe)
+
+union {
+ #declare phi = 0;
+ #declare phimax = winkelbogen;
+ #declare phistep = (phimax - phi) / N;
+ #while (phi < phimax - phistep/2)
+ cylinder {
+ cos(phi ) * v1 + sin(phi ) * v2 + center,
+ cos(phi+phistep) * v1 + sin(phi+phistep) * v2 + center,
+ 0.01
+ }
+ sphere {
+ cos(phi ) * v1 + sin(phi ) * v2 + center,
+ 0.01
+ }
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color farbe
+ }
+}
+
+#end
diff --git a/buch/papers/clifford/3d/dq.jpg b/buch/papers/clifford/3d/dq.jpg
new file mode 100644
index 0000000..690cfdc
--- /dev/null
+++ b/buch/papers/clifford/3d/dq.jpg
Binary files differ
diff --git a/buch/papers/clifford/3d/dq.pdf b/buch/papers/clifford/3d/dq.pdf
new file mode 100644
index 0000000..797a558
--- /dev/null
+++ b/buch/papers/clifford/3d/dq.pdf
Binary files differ
diff --git a/buch/papers/clifford/3d/dq.pov b/buch/papers/clifford/3d/dq.pov
new file mode 100644
index 0000000..762eee2
--- /dev/null
+++ b/buch/papers/clifford/3d/dq.pov
@@ -0,0 +1,30 @@
+//
+// dq.pov -- Drehung und Quaternion
+//
+// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+arrow(<0,0,0>, <1, sqrt(2), 2>, r, Red)
+
+#declare r = 0.2 * r;
+
+#declare drehwinkel = 0.95 * 2*pi/3 * 3;
+#declare drehwinkel23 = drehwinkel;
+#declare drehwinkel12 = drehwinkel / sqrt(2);
+#declare drehwinkel13 = drehwinkel / 2;
+
+circlearrow(<1,0,0>, <0,0,1>, <1, sqrt(2), 0>, 1, thick, drehwinkel23, 1)
+circlearrow(<1,0,0>, <0,1,0>, <1, 0, 2>, sqrt(2)/2, thick, drehwinkel12, 1)
+circlearrow(<0,0,1>, <1,0,0>, <0, sqrt(2), 2>, 0.5, thick, drehwinkel13, 1)
+
+#declare l = 2.8;
+#declare h = 0.0001;
+union {
+ box { <-l,-l,-h>, <l,l,-h> }
+ box { <-l,-h,-l>, <l,-h,l> }
+ box { <-h,-l,-l>, <-h,l,l> }
+ pigment {
+ color rgbt<0.6,0.6,0.6,0.0>
+ }
+}
diff --git a/buch/papers/clifford/3d/dq.tex b/buch/papers/clifford/3d/dq.tex
new file mode 100644
index 0000000..6b28452
--- /dev/null
+++ b/buch/papers/clifford/3d/dq.tex
@@ -0,0 +1,51 @@
+%
+% dq.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\definecolor{darkred}{rgb}{0.7,0,0}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{6}
+\def\hoehe{6}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=12cm]{dq.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (-2.8,-2.7) {$O$};
+\node at (4.7,-3.4) {$a_1$};
+\node at (-2.6,5.2) {$a_2$};
+\fill[color=white,opacity=0.7] ({-5.7-0.25},{-4.8-0.15}) rectangle ({-5.7+0.25},{-4.8+0.2});
+\node at (-5.7,-4.8) {$a_3$};
+
+\node[color=blue] at (-3.6,0.8) {$y\mathbf{e}_{23}$};
+\node[color=blue] at (2.1,0.9) {$x\mathbf{e}_{12}$};
+\node[color=blue] at (1.3,-3.7) {$z\mathbf{e}_{13}$};
+
+\node[color=darkred] at (1.3,0.4) {$\vec{q}$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/clifford/3d/drehung.jpg b/buch/papers/clifford/3d/drehung.jpg
new file mode 100644
index 0000000..2347296
--- /dev/null
+++ b/buch/papers/clifford/3d/drehung.jpg
Binary files differ
diff --git a/buch/papers/clifford/3d/drehung.pdf b/buch/papers/clifford/3d/drehung.pdf
new file mode 100644
index 0000000..bc8036e
--- /dev/null
+++ b/buch/papers/clifford/3d/drehung.pdf
Binary files differ
diff --git a/buch/papers/clifford/3d/drehung.pov b/buch/papers/clifford/3d/drehung.pov
new file mode 100644
index 0000000..b86a2c5
--- /dev/null
+++ b/buch/papers/clifford/3d/drehung.pov
@@ -0,0 +1,87 @@
+//
+// drehung.pov -- Drehung um (1,1,1)
+//
+// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+#declare n = vnormalize(<1,1,1>);
+#declare V = <0,2.6,0>;
+#declare W = <0,0,2.6>;
+
+#declare Vparallel = vdot(n, V) * n;
+#declare Vperp = V - Vparallel;
+#declare Wparallel = vdot(n, W) * n;
+#declare Wperp = W - Wparallel;
+
+arrow(<0,0,0>, 2*n, thick, Red)
+
+arrow(<0,0,0>, V, thick, rgb<0.0,1.0,1.0>)
+arrow(<0,0,0>, W, thick, rgb<0.0,1.0,1.0>)
+
+circlearrow(vnormalize(vcross(<-1,0,1>,n)), -0.01 * <1,1,1>, <0,0,0>, 1, 0.8*thick, 1.98*pi/3, 3)
+
+arrow(<0,0,0>, Vperp, 0.99*thick, Blue)
+arrow(<0,0,0>, Wperp, 0.99*thick, Blue)
+
+arrow(Vperp, V, thick, Green)
+arrow(Wperp, W, thick, Green)
+
+#declare l = 2.4;
+intersection {
+ box { <-l,-l,-l>, <l,l,l> }
+ //cylinder { -n, n, 3 }
+ plane { n, 0.01 }
+ plane { -n, 0.01 }
+ pigment {
+ color rgbt<0.6,0.6,1.0,0.8>
+ }
+}
+
+#declare e1 = vnormalize(Vperp);
+#declare e3 = n;
+#declare e2 = vnormalize(vcross(e3, e1));
+#declare r = vlength(Vperp);
+
+mesh {
+ #declare phi = 0;
+ #declare phimax = 2*pi/3;
+ #declare phistep = (phimax - phi) / N;
+ #while (phi < phimax - phistep/2)
+ triangle {
+ <0,0,0>,
+ r * (cos(phi ) * e1 + sin(phi ) * e2),
+ r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2)
+ }
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color rgbt<0.2,0.2,1.0,0.4>
+ }
+}
+
+mesh {
+ #declare phi = 0;
+ #declare phimax = 2*pi/3;
+ #declare phistep = (phimax - phi) / N;
+ #while (phi < phimax - phistep/2)
+ triangle {
+ r * (cos(phi ) * e1 + sin(phi ) * e2),
+ r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2),
+ r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel
+ }
+ triangle {
+ r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2),
+ r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel,
+ r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + Vparallel
+ }
+ #declare phi = phi + phistep;
+ #end
+ pigment {
+ color rgbt<0.2,1,0.2,0.4>
+ }
+}
+
+bogen(r * e1, r * e2, <0,0,0>, 2*pi/3, Blue)
+bogen(r * e1, r * e2, Vparallel, 2*pi/3, Green)
+
diff --git a/buch/papers/clifford/3d/drehung.tex b/buch/papers/clifford/3d/drehung.tex
new file mode 100644
index 0000000..2ed6789
--- /dev/null
+++ b/buch/papers/clifford/3d/drehung.tex
@@ -0,0 +1,56 @@
+%
+% drehung.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+\definecolor{darkred}{rgb}{0.6,0,0}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{7}
+\def\hoehe{6}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=13cm]{drehung.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (6.1,-3.3) {$a_1$};
+\node at (-2.0,5.7) {$a_2$};
+\node at (-5.7,-4.9) {$a_3$};
+
+\node[color=white] at (-1.9,4.4) {$\boldsymbol{v}$};
+\node[color=white] at (4.5,-2.7) {$\boldsymbol{v}''$};
+
+\node[color=darkgreen] at (-3.3,4.4) {$\boldsymbol{v}_{\perp}$};
+\node[color=darkgreen] at (4.2,-4.3) {$\boldsymbol{v}''_{\perp}$};
+
+\node[color=blue] at (-3.7,1.5) {$\boldsymbol{v}_{\|}$};
+\node[color=blue] at (1.9,-4.7) {$\boldsymbol{v}''_{\|}$};
+
+\node[color=darkred] at (-1.6,-4.2) {$2\alpha=120^\circ$};
+\node[color=darkred] at (-4.9,-0.6) {$\boldsymbol{q}$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/clifford/3d/q23.jpg b/buch/papers/clifford/3d/q23.jpg
new file mode 100644
index 0000000..929ef90
--- /dev/null
+++ b/buch/papers/clifford/3d/q23.jpg
Binary files differ
diff --git a/buch/papers/clifford/3d/q23.pov b/buch/papers/clifford/3d/q23.pov
new file mode 100644
index 0000000..2e55c96
--- /dev/null
+++ b/buch/papers/clifford/3d/q23.pov
@@ -0,0 +1,14 @@
+//
+// q23.pov -- Drehung und Quaternion
+//
+// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+circlearrow(<1,0,0>, 0.01*<0,0,-1>, <0, 0, 0>, 1.0, thick, 0.98*pi/2, 4)
+
+bogen( <0,1.7,0>, <-1.7, 0, 0>, <0,0,0>, pi/2, Blue)
+
+arrow( <0,0,0>, <-2.0,0,0>, 0.99*thick, Blue)
+arrow( <0,0,0>, <0,2.0,0>, 0.99*thick, Blue)
+arrow( <0,0,0>, <0,0,2.0>, 0.99*thick, Red)
diff --git a/buch/papers/clifford/3d/q31.jpg b/buch/papers/clifford/3d/q31.jpg
new file mode 100644
index 0000000..c240b4f
--- /dev/null
+++ b/buch/papers/clifford/3d/q31.jpg
Binary files differ
diff --git a/buch/papers/clifford/3d/q31.pov b/buch/papers/clifford/3d/q31.pov
new file mode 100644
index 0000000..4abe1ed
--- /dev/null
+++ b/buch/papers/clifford/3d/q31.pov
@@ -0,0 +1,15 @@
+//
+// q31.pov -- Drehung und Quaternion
+//
+// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+circlearrow(<1,0,0>, 0.01*<0,-1,0>, <0, 0, 0>, 1.0, thick, 0.98*pi/2, 4)
+
+arrow( <0,0,0>, <-2.0,0,0>, 0.99*thick, Blue)
+arrow( <0,0,0>, <0,2.0,0>, 0.99*thick, Red)
+arrow( <0,0,0>, <0,0,2.0>, 0.99*thick, Blue)
+
+bogen( <0,0,1.7>, <-1.7, 0, 0>, <0,0,0>, pi/2, Blue)
+
diff --git a/buch/papers/clifford/3d/qq.pdf b/buch/papers/clifford/3d/qq.pdf
new file mode 100644
index 0000000..fd7dbfa
--- /dev/null
+++ b/buch/papers/clifford/3d/qq.pdf
Binary files differ
diff --git a/buch/papers/clifford/3d/qq.tex b/buch/papers/clifford/3d/qq.tex
new file mode 100644
index 0000000..9baa8bb
--- /dev/null
+++ b/buch/papers/clifford/3d/qq.tex
@@ -0,0 +1,68 @@
+%
+% qq.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\definecolor{darkred}{rgb}{0.7,0,0}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\begin{scope}[xshift=-3.3cm]
+\node at (0,0) {\includegraphics[width=6.3cm]{q23.jpg}};
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+\fill[color=white,opacity=0.5] ({-0.6-0.3},{-0.2-0.2}) rectangle ({-0.6+0.3},{-0.2+0.2});
+\node[color=darkred] at (-0.6,-0.2) {$\boldsymbol{q}_{23}$};
+\node[color=blue] at (-0.4,2.7) {$\boldsymbol{v}$};
+\node[color=blue] at (0.7,0.4) {$\boldsymbol{v}''_{23}$};
+\node at (3.1,-1.4) {$a_1$};
+\node at (-2.7,-2.4) {$a_3$};
+\node at (-0.7,3.4) {$a_2$};
+\end{scope}
+
+\setboolean{showgrid}{false}
+
+\begin{scope}[xshift=3.3cm]
+\node at (0,0) {\includegraphics[width=6.3cm]{q31.jpg}};
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+\fill[color=white,opacity=0.5] ({-0.7-0.3},{-0.9-0.2}) rectangle ({-0.7+0.3},{-0.9+0.2});
+\node[color=darkred] at (-0.7,-0.9) {$\boldsymbol{q}_{13}$};
+\node[color=blue] at (0.7,0.4) {$\boldsymbol{v}''_{23}$};
+\node[color=blue] at (2.7,-0.7) {$\boldsymbol{v}''$};
+\node at (3.1,-1.4) {$a_1$};
+\node at (-2.7,-2.4) {$a_3$};
+\node at (-0.7,3.4) {$a_2$};
+\end{scope}
+
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/ifs/images/FIC.pdf b/buch/papers/ifs/images/FIC.pdf
index 1c76dfe..525a857 100644
--- a/buch/papers/ifs/images/FIC.pdf
+++ b/buch/papers/ifs/images/FIC.pdf
@@ -1,7 +1,7 @@
%PDF-1.6 %
-1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 6 0 R 7 0 R 8 0 R 9 0 R]/Order 10 0 R/RBGroups[]>>/OCGs[5 0 R 6 0 R 7 0 R 8 0 R 9 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 50391/Subtype/XML/Type/Metadata>>stream
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R]/Order 42 0 R/RBGroups[]>>/OCGs[5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 51947/Subtype/XML/Type/Metadata>>stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 6.0-c004 79.164570, 2020/11/18-15:51:46 ">
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 6.0-c006 120.b669747, 2021/05/19-19:07:51 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/"
@@ -13,6 +13,7 @@
xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/"
xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:stFnt="http://ns.adobe.com/xap/1.0/sType/Font#"
xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"
xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
<dc:format>application/pdf</dc:format>
@@ -21,8 +22,8 @@
<rdf:li xml:lang="x-default">FIC</rdf:li>
</rdf:Alt>
</dc:title>
- <xmp:MetadataDate>2021-06-20T20:23:48+02:00</xmp:MetadataDate>
- <xmp:ModifyDate>2021-06-20T20:23:48+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2021-07-16T16:31+02:00</xmp:MetadataDate>
+ <xmp:ModifyDate>2021-07-16T16:31+02:00</xmp:ModifyDate>
<xmp:CreateDate>2021-06-20T20:23:48+02:00</xmp:CreateDate>
<xmp:CreatorTool>Adobe Illustrator 25.2 (Windows)</xmp:CreatorTool>
<xmp:Thumbnails>
@@ -31,11 +32,11 @@
<xmpGImg:width>256</xmpGImg:width>
<xmpGImg:height>128</xmpGImg:height>
<xmpGImg:format>JPEG</xmpGImg:format>
- <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAgAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8Ah+jaNo8mj2MkljbvI9vE&#xA;zu0SEklASSSMVRn6C0T/AKt9t/yJj/pil36C0T/q323/ACJj/pirv0Fon/Vvtv8AkTH/AExV36C0&#xA;T/q323/ImP8Apirv0Fon/Vvtv+RMf9MVd+gtE/6t9t/yJj/pirv0Fon/AFb7b/kTH/TFXDQ9EH/S&#xA;vtv+RMf/ADTiqfaJqOkaa6Cfy3omo267GK5020LU70kWNXr8ycUPYvJdj+TfmmErb+U9Ht9QjXlP&#xA;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</xmpGImg:image>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAgAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8Ah+jaNo8mj2MkljbvI9vE&#xA;zu0SEklASSSMVRn6C0T/AKt9t/yJj/pil36C0T/q323/ACJj/pirv0Fon/Vvtv8AkTH/AExV36C0&#xA;T/q323/ImP8Apirv0Fon/Vvtv+RMf9MVd+gtE/6t9t/yJj/pirv0Fon/AFb7b/kTH/TFXDQ9EH/S&#xA;vtv+RMf/ADTiqfaJqOkaa6Cfy3omo267GK5020LU70kWNXr8ycUPYvJdj+TfmmErb+U9Ht9QjXlP&#xA;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</xmpGImg:image>
</rdf:li>
</rdf:Alt>
</xmp:Thumbnails>
- <xmpMM:InstanceID>uuid:e882c6a4-b7dc-4cb1-95f3-adfed3b77c13</xmpMM:InstanceID>
+ <xmpMM:InstanceID>uuid:b9fcd98f-6fe2-4cbb-a19d-4367321d727e</xmpMM:InstanceID>
<xmpMM:DocumentID>xmp.did:ffdebe24-c43c-ae47-828c-2b9d14439d09</xmpMM:DocumentID>
<xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
<xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
@@ -73,6 +74,19 @@
<stDim:h>60.000000</stDim:h>
<stDim:unit>Millimeters</stDim:unit>
</xmpTPg:MaxPageSize>
+ <xmpTPg:Fonts>
+ <rdf:Bag>
+ <rdf:li rdf:parseType="Resource">
+ <stFnt:fontName>MyriadPro-It</stFnt:fontName>
+ <stFnt:fontFamily>Myriad Pro</stFnt:fontFamily>
+ <stFnt:fontFace>Italic</stFnt:fontFace>
+ <stFnt:fontType>Open Type</stFnt:fontType>
+ <stFnt:versionString>Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329</stFnt:versionString>
+ <stFnt:composite>False</stFnt:composite>
+ <stFnt:fontFileName>MyriadPro-It.otf</stFnt:fontFileName>
+ </rdf:li>
+ </rdf:Bag>
+ </xmpTPg:Fonts>
<xmpTPg:PlateNames>
<rdf:Seq>
<rdf:li>Cyan</rdf:li>
@@ -648,20 +662,22 @@
<?xpacket end="w"?>
-endstream endobj 3 0 obj <</Count 1/Kids[11 0 R]/Type/Pages>> endobj 11 0 obj <</ArtBox[8.16666 14.1824 288.781 151.356]/BleedBox[0.0 0.0 297.638 170.079]/Contents 12 0 R/CropBox[0.0 0.0 297.638 170.079]/LastModified(D:20210620202348+02'00')/MediaBox[0.0 0.0 297.638 170.079]/Parent 3 0 R/PieceInfo<</Illustrator 13 0 R>>/Resources<</ExtGState<</GS0 14 0 R>>/Properties<</MC0 5 0 R/MC1 6 0 R/MC2 7 0 R/MC3 8 0 R/MC4 9 0 R>>>>/Thumb 15 0 R/TrimBox[0.0 0.0 297.638 170.079]/Type/Page>> endobj 12 0 obj <</Filter/FlateDecode/Length 1133>>stream
-HWˎT9 ߯T*<j!ԋ
- {s_*L 6pYB<"-l}5kWB3IG}X>Aҍ㢯e
-`F]Gy8_
-:fNY- ۊT}(΁7[
-Lg#d,0Ȃ#e0;-}
-%*J<ŞG\f+˭z
-endstream endobj 15 0 obj <</BitsPerComponent 8/ColorSpace 16 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 21/Length 280/Width 37>>stream
-8;XF2_%FR-$j6r9!TZZWr$[(j>QmjWcVM*4CF>9rfZ'><*tdEK_f@d@jPN9F"=9\7
-mE.?=]D[&B,p1C*,`Bo=p2A(oZF)fL1&.2T;DRH4&m'Z]X1,t[/tN:.$JL`sTHr!Z
-jqp^HTfF<cOpUImc*bg#/h^+*HJ'tk&*6f-4d)(=0_!!Ldh./XTPZ)c763_kCEQ<M
-(->f'!cI8XZ17^;kn'b7c+#G3D^VB>V[f8,`O/I@RsLVXd&^1Q]d_2P:nmfor-W@1
-YPnm#`-VJX.%=9~>
-endstream endobj 16 0 obj [/Indexed/DeviceRGB 255 17 0 R] endobj 17 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+endstream endobj 3 0 obj <</Count 1/Kids[11 0 R]/Type/Pages>> endobj 11 0 obj <</ArtBox[8.16666 14.1824 288.781 151.356]/BleedBox[0.0 0.0 297.638 170.079]/Contents 43 0 R/CropBox[0.0 0.0 297.638 170.079]/LastModified(D:20210716163100+02'00')/MediaBox[0.0 0.0 297.638 170.079]/Parent 3 0 R/PieceInfo<</Illustrator 44 0 R>>/Resources<</ExtGState<</GS0 45 0 R>>/Font<</T1_0 36 0 R>>/ProcSet[/PDF/Text]/Properties<</MC0 37 0 R/MC1 38 0 R/MC2 39 0 R/MC3 40 0 R/MC4 41 0 R>>>>/Thumb 46 0 R/TrimBox[0.0 0.0 297.638 170.079]/Type/Page>> endobj 43 0 obj <</Filter/FlateDecode/Length 1309>>stream
+HWM[7 _cz,R> rAz!Mf
+1,l#QfZQ)Q!قbqT8h-[,VihI\r$1NƒGd aW\C|+_*%,&!IZ豶N M h%Z3?6bw%UHK#!H!5h 9^ +X[r .RJE9Xlɨi Fˈc"ؠ-Q2as"bF$ `*9NoOB-`9$y|'07Myuf?c} k'7}me~X{.
+$}E7+EC_͑W]w& {cfU`_DN#
+ r{"v/AnNp> G<x`L̑G~y4%&l"Tb !Jp ºP(4@#'R%o@OXJ򥿸 q_4\DcqZzFSa04z[\ tX
+ p80#!
+6h9< L5Xs xb܀[ Y6 -G
+#%\ D1Ha癑=ndCluHyH)^( Lf'@󞒰eB]&.00 Jal%VxiLօL2=<]tV²} ۛk P/nSxip Vݐo`ʙ4||s'a%y 檐DžAlEY:7p\dё[9O 
+>AIi+GtLZ|;(i Y:3yZ ֞uJ/yPhDfA|X|p<xel~\vMAqi$J%4l_5xVaN9u?\%4LaĄZ*E˳~ؿ_*euOy.((y4TrCq:I\׺WƆg΢ t(o1FJ[XzaAUuyv-yF8*5 wSGNv7@*hgf'peB=6T̴f=' 0
+endstream endobj 46 0 obj <</BitsPerComponent 8/ColorSpace 47 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 21/Length 288/Width 37>>stream
+8;XEGYn=kr$lk'(P_p4>(k>>JJgJpWPkXrqncBfc,aV.98Pl)3lOa,HZg`SjjGT!I
+"D!S;*Bca6V`Q;\MTT,KUc^rej^Smt+58A@"BD%u[dU$>!,M##-A&gt)&)'>2OH0`
+.4bjmUD/P?'L;t&^E>U92,DTa"#,s"2I2#0GnfBccl`Q_qj^ud;,q!c62SKoS#-QA
+@1t&W>2ek+*(4R(=%n"fQO1OWD?pc/idP=IBpt]QD0hh<fks!O)e`et:jZ\U7ps^+
+cgpb<q7HJVpr/g,!!a")bl~>
+endstream endobj 47 0 obj [/Indexed/DeviceRGB 255 48 0 R] endobj 48 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>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#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
@@ -669,25 +685,27 @@ E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
-endstream endobj 5 0 obj <</Intent 18 0 R/Name(Ebene 4)/Type/OCG/Usage 19 0 R>> endobj 6 0 obj <</Intent 20 0 R/Name(Ebene 1)/Type/OCG/Usage 21 0 R>> endobj 7 0 obj <</Intent 22 0 R/Name(Ebene 2)/Type/OCG/Usage 23 0 R>> endobj 8 0 obj <</Intent 24 0 R/Name(Ebene 5)/Type/OCG/Usage 25 0 R>> endobj 9 0 obj <</Intent 26 0 R/Name(Ebene 3)/Type/OCG/Usage 27 0 R>> endobj 26 0 obj [/View/Design] endobj 27 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 24 0 obj [/View/Design] endobj 25 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 22 0 obj [/View/Design] endobj 23 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 14 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 13 0 obj <</LastModified(D:20210620202348+02'00')/Private 28 0 R>> endobj 28 0 obj <</AIMetaData 29 0 R/AIPDFPrivateData1 30 0 R/AIPDFPrivateData2 31 0 R/AIPDFPrivateData3 32 0 R/AIPDFPrivateData4 33 0 R/AIPDFPrivateData5 34 0 R/ContainerVersion 12/CreatorVersion 25/NumBlock 5/RoundtripStreamType 2/RoundtripVersion 25>> endobj 29 0 obj <</Length 1223>>stream
+endstream endobj 37 0 obj <</Intent 49 0 R/Name(Ebene 4)/Type/OCG/Usage 50 0 R>> endobj 38 0 obj <</Intent 51 0 R/Name(Ebene 1)/Type/OCG/Usage 52 0 R>> endobj 39 0 obj <</Intent 53 0 R/Name(Ebene 2)/Type/OCG/Usage 54 0 R>> endobj 40 0 obj <</Intent 55 0 R/Name(Ebene 5)/Type/OCG/Usage 56 0 R>> endobj 41 0 obj <</Intent 57 0 R/Name(Ebene 3)/Type/OCG/Usage 58 0 R>> endobj 57 0 obj [/View/Design] endobj 58 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.3)/Subtype/Artwork>>>> endobj 55 0 obj [/View/Design] endobj 56 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.3)/Subtype/Artwork>>>> endobj 53 0 obj [/View/Design] endobj 54 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.3)/Subtype/Artwork>>>> endobj 51 0 obj [/View/Design] endobj 52 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.3)/Subtype/Artwork>>>> endobj 49 0 obj [/View/Design] endobj 50 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.3)/Subtype/Artwork>>>> endobj 36 0 obj <</BaseFont/QGHLNM+MyriadPro-It/Encoding/WinAnsiEncoding/FirstChar 46/FontDescriptor 59 0 R/LastChar 106/Subtype/Type1/Type/Font/Widths[211 0 492 492 492 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 647 0 0 0 0 0 0 0 0 0 0 0 0 0 523 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 229 227]>> endobj 59 0 obj <</Ascent 953/CapHeight 674/CharSet(/period/zero/one/two/D/R/i/j)/Descent -250/Flags 96/FontBBox[-185 -250 1090 953]/FontFamily(Myriad Pro)/FontFile3 60 0 R/FontName/QGHLNM+MyriadPro-It/FontStretch/Normal/FontWeight 400/ItalicAngle -11/StemV 84/Type/FontDescriptor/XHeight 484>> endobj 60 0 obj <</Filter/FlateDecode/Length 928/Subtype/Type1C>>stream
+H|PmlupzsY_#:::LºؽXTH[[vו R˶n ib:`Dtʐ9' H4wݿ/|˓</?$I7{GtXmMwɗTtRjr-xpeaL<`rBBC7kÇؼ"t6 Y܈6o,=OpKi^lrlDADF{rHHp:YeC DMp[E'f6PT!Ye#,>UcRSٖ6o':jegO6!`'# $zX~h \ħ'erIqC} 3TқjJ20g9pAGV׳3l*ḡ3E($cK] pc>w{F&x6P$ȩe/SKQ?ipzЂ8|>X-4ּ<T/ 4)^%Rz72u3lR&I:X0ECCڤ/ڲ$kF:6~nlV0j Z~r`'¯+gIe*>ą~{I_o\Z퓫gw?ǴPplih4͖'҉΁!7ς5s0  t2sӗća~fdоי~ʹD¥׎-t~9Zmy''ã+8kod_  w(Jn)2L49.~
+endstream endobj 45 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 44 0 obj <</LastModified(D:20210716163100+02'00')/Private 61 0 R>> endobj 61 0 obj <</AIMetaData 62 0 R/AIPDFPrivateData1 63 0 R/AIPDFPrivateData2 64 0 R/AIPDFPrivateData3 65 0 R/AIPDFPrivateData4 66 0 R/AIPDFPrivateData5 67 0 R/ContainerVersion 12/CreatorVersion 25/NumBlock 5/RoundtripStreamType 2/RoundtripVersion 25>> endobj 62 0 obj <</Length 1462>>stream
%!PS-Adobe-3.0
%%Creator: Adobe Illustrator(R) 24.0
-%%AI8_CreatorVersion: 25.2.3
+%%AI8_CreatorVersion: 25.3.1
%%For: (Alain) ()
-%%Title: (FIC.ai)
-%%CreationDate: 6/20/2021 8:23 PM
+%%Title: (FIC.pdf)
+%%CreationDate: 7/16/2021 4:31 PM
%%Canvassize: 16383
%%BoundingBox: 8 -156 289 -18
-%%HiResBoundingBox: 8.16666698455811 -155.896331787109 288.781496063013 -18.722782152231
+%%HiResBoundingBox: 8.16666698455811 -155.896331787109 288.781496063013 -18.722782152232
%%DocumentProcessColors: Cyan Magenta Yellow Black
%AI5_FileFormat 14.0
-%AI12_BuildNumber: 259
+%AI12_BuildNumber: 390
%AI3_ColorUsage: Color
%AI7_ImageSettings: 0
%%CMYKProcessColor: 1 1 1 1 ([Passermarken])
%AI3_Cropmarks: 0 -170.07874015748 297.63779527559 0
%AI3_TemplateBox: 149.5 -85.5 149.5 -85.5
-%AI3_TileBox: -260.125987616111 -370.677156943973 557.793995294045 200.522855263057
+%AI3_TileBox: -260.125987616111 -370.677156943975 557.793995294045 200.522855263056
%AI3_DocumentPreview: None
%AI5_ArtSize: 14400 14400
%AI5_RulerUnits: 1
@@ -696,1308 +714,1313 @@ endstream endobj 5 0 obj <</Intent 18 0 R/Name(Ebene 4)/Type/OCG/Usage 19 0 R>>
%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
%AI5_TargetResolution: 800
%AI5_NumLayers: 5
-%AI9_OpenToView: -66.666666666667 34.666666666667 6 2256 1308 18 0 0 46 87 0 0 0 1 1 0 1 1 0 0
+%AI17_Begin_Content_if_version_gt:24 4
+%AI10_OpenToVie: -67 35 6 0 0 0 2256 1308 18 0 0 46 87 0 0 0 1 1 0 1 1 0 0
+%AI17_Alternate_Content
+%AI9_OpenToView: -67 35 6 2256 1308 18 0 0 46 87 0 0 0 1 1 0 1 1 0 0
+%AI17_End_Versioned_Content
%AI5_OpenViewLayers: 77777
+%AI17_Begin_Content_if_version_gt:24 4
+%AI17_Alternate_Content
+%AI17_End_Versioned_Content
%%PageOrigin:-157 -481
%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142
%AI9_Flatten: 1
%AI12_CMSettings: 00.MS
%%EndComments
-endstream endobj 30 0 obj <</Length 65536>>stream
-%AI24_ZStandard_Data(/
-#
-DKt8Dν%θ!CLta#دX^By<#Wu:bCgi2;#[}ޖ*"r7D$Ƚ,#yvF3}8Vn;wQ62EăGv7b&.L$tR݆Tܷ_.zA2bHES,+GI=bIJ.UD|4<^!Z7ҟ+v\""xIC.EF
-GD`)n}0hl0kB644[K XlM^,ɓ.'@U%eeتYŲp˫Yr1]+#ڬAO2be)D3J]%|i&.-mf)mO;ʒ]0K򌄗uw1
-6( t DHT N@LA$ "Q ` <4Lz,2teٔJm#v%?f-椭 y D`,jU, PY
-zac!C$" d(Q"ETͬzVX`,`( ˍ"q x, 5xp4DxqlWTNYfˮ GP$^!H, GcH$"AFc@$8C$≈# @$~8xV>Taxl3,ġ:UjeR-|!0!Vl:em ZDMrRk  @:t)FeHf2XudSnq   <C$,ɁH$#"*"QF$˅UV =@$D("AW F \0CR wsq{+DWV†H'= E"}8 L](HʄH<TS^R*C~Xڋ١h( DĐ0"[Ģ8~@$
-`(ҎHd"".9HXX\/#< E$ 2!m@$̃H<C$qD"1p c/6f1,Dp4Wn46qq0CP1 (X8BP,n>x781G5,,rŹԠQѐ*VS0F197543!v2JXPJ饮2N7ʉ)Cem̶M@$p0XԢ>b)v4 p  ñ@$"HG$TDV."8"qccV:CK49P\@FHУQRAUh&{/CEfe: zD}&"*CJs3eHe/C?s  ŏ@$<H<2"a Dxt
-A$ DP(
-1.hE-lq \EcX<(fÒnTF:jmC$]4jA$ȶ hP^n
-Tgy_8
- 1 *LE#yH "H4E$J.+"aÜ.D<N/t8>kU]hScV
-S`0 `<h8CX0<p4BD$L bØ81ӖVWlUtQFuѡ) DbA j4v|FofajQ^ZG [ZMa cX/笠1q{`XhxxT "@6ЁlR:+-/13\$#GtnqE~#yłJ
-DeyłP<CPLeybX,cD A$*(рd0 ؋XsYjrĊjW\Up*1)A$*hp %x`A"X  Ё 2h, t)ID7e!:,ve,C*ka"2S2FYe "H0';Db GcX(̎q<geF$lS jPĠ-HA
-:L&""146(*YjTj;}cØ,F1Mg@$ld7Ec`4Fp4G8ꨃ䰣09qt#P8`8x8ỵ>A?G=a{(x0Gx8QlN>Ё dxLD<4,41nqz0-La432أ(F-JQ,+*Ukafxa4!B"-j-CP4CP(W0E) Ex_\?~HG6T3Ҳ(RDbF:qsup4 FcP46ajA6`8 ` d0e p, b0
- XpBC  Cd@&4\@ $Dpp *l` 0h4A"84HЀB$,H0 Lx JpB&L`.8lyhȀ:p
-\h 
-H$0L !p @(0HR (t CC 4@P@*x
-
-2p
- .0\@"Q
-P
-*<\@A &LȀÁD0 P)4\ TMOz;Yfp
- 
-@"hpA,:cA3bgE20o2G$8X|@pA&4D
-J,X XЀÅ 4h0!XР @ 25 *<$8< XD` " AB
- 04P` X`ᡂ
- "Tx Dp
- (8d@a
-XP B@IJC .04(Tp0X C8@$*T@AbC #b
-&
- d4lB\
-TT@9ʠ$0"
-TL 8@$4X[U24+7uݎ-!4ٚ2H ,x6mlLZaUq bt]r ia݉]R93Ǵ—"|U%h'XjHxf|,3wJVI~StUD,j)+!gV3E{!Qr,Xg
-ZItZzͽ\& 6C̤R,RxY]I,10m;1ѥYEeOZaJ'n3;3L*ZW2WrLߘG/WEiU+Kw,43L9DâՍI/"y*{֩L^<cH3wTJ|"4Rc$Օ_nʦ
-Ϯ߱[!{!JeZM+(YxmFj߂MɥSS}9cs.ddل(Tpp&l!bh@ ("bN)_.,CR*imS*
-8uU/:+YB"X5Q=2NDY;Mt? 6E9~o%PR=+S=!|FؾftQE[–[{|5o**vM2T/W:<{钙yScwBd9Q U}lU)=;{mb/K,֎ Z冎~ބiXǡw~Z7szU_ =^ETfu+u"zȔDW&Ÿ/"X',{Oա[u_P"bVZBt[\,$zC7K5:XoDzt-):I4::g6IX{@.B{fOĨks6j>jϑ<%~uoDTkCwe\FI#+䳷|2G/F5̨/gEidE[ZRTTS7aϢ5o&BMLf-zbNI A4@
-S:v—o
-Y>7WS}ӊϹ*TVKʈ4X[;,-CUZ%<xUìLZZνJ&?c6P%c=2nFlȯeg߼xrʔYi56ϼ|}nԾo}Wi
-w8^2\*lu>e> 瑽-l< Qsf9sΫfr/oGDMKBS8gb-1C;gu3/~"Mb42xU6)2Zu6ħ!!NwT[3BIw9 ,}:SqyFs-TD|3[ОIΊbhSU>*6rrlWYuwZo=ď= хz\,&"8C˲3r=ys/S,s.iHmL-G|d*|`tubgJKJ{c͌ ;ɬ/GSh]7MţJk?՗Lx|Y]ljŵqe!QeF
-~ly4[&Z9<XC$KP'irXӜdjQ_2vLicNfe0ГϺ3)3?.]պ[LEs鬰]y'_Nޏ$ZX6rCCEisаHyF%9G^J%UwSɝ!I7쨤܂K/a|.;+` *Ss ]R11_j=ˏ"x,T;]JfĺXN4 Uee ǚ07TeuȦY!<2Z`N!_46sJrx$ZbT<bc
-:nBݑ.t@w9vϔ A}<ʼU8E9*OVr5Sfҕ%̯OݜS ϶ZDUggE3Y߭(sTi{VtSusTiyhWl]W|ժ9|fNSC9VtyX5ci+"Mi5-Tfk1*;yTIgXwH9'Wmk'
-AD|!*ZeY9qvUyaoepu+9|732?]=0DO}3VFkOEDXrlF?*_FoEǖFWs+~<UGC^E*?**קz !%} 4IyRR$C"et! j6ݙ5͚EC`%$äkzh&"E޿v=\3̙ùZ:le㹨sjuE%ODe1ȔjZ31G 87tɕuSYԥ4V3Rzj(C"̾޲ܚȦ38tcz؝C4&7Sh\J0mYŖ8D磻Mϼ|CL#PKQ,]H)$?vYCԼc v"^k ͏[b$EȡYt:t"U 愝DDg$̼j 针at<.lcU!3A"YWUijTc'3=S\5tÖ&ъtV˭&=<C$L$I̳2<o'uZvłmJ擨>f[7s28Uww"B~83*+_:6dBNxLB -ٜ;s<U?v|,vGJ2f ja=kKR%ב4<s&2ƺޞ$;tX:NϪ\MUߣJ6"7:x>U8VV8Gƺ+DvΛ+'.z-M[ξ2_>;{19>#fm(MSټv6[ՈԼNVt]=T3;]0BjU{S{hXʎm
-by>͝9&M䱥<4ki>KU/5";ȫuҋHSi,6gp-cDBeO^nJ'CjЦ9Aw6יܣOoy+d2X+,T.+#N!Vmv9Y6t_!,C;ƥg\gjܚ_nSvspjݜˆXhj1yTzns<%S~WVm޴DkhiN1">fŦIS3~[L|ܗJߣQXsL4JW<wF7'nl>JQ8/k;:!"11 '1cM^#T:VT|Ekck~eM53j
-z愆"qtUXu.bӥ~d\WeV̳"/,vZ%fa4L–B
-- Yg]DDϣl/e5dVVTr.e֔2љ|u8vYW4W~a3>%S~5ƚfb"n2UfZUf\
-fUj._Uu6U>]"γ2YYX*"LcI*JU 3f>E̜VL̾ IS4c,THL՚b}4+55{NkNfO% )HBS<[y̞V-t*lƯl>'=SĨ/CL4L[U2uU*sR뎞g)ʺk9T솙U'<\[,5*7EihC_VeR]y
-Sy_]fG<˦LsN&*Qg]mg47;s?Ci-d4ِnj9ʠcF%ϧ:ܮS|-*e.yFotJ2+u֌.z6'<r5^O*'M33ow0eT<gmѦ~'[G:t,iyr|]nyoeFOE',xT.x"ObOkJ[,>ˍD8&g'ϹJdVHj7ұej].+%8tמ7xl90Ѫ%6ˉ8wsZƄ}W\v;,}=Lq]b7G}^Vkhf3*X&y3W%[j&*oBew)YUlXx%LZThE?WS4OԸeELefJnd=W.".=[Zww5휾yY|U^n"벝Y˶r6o>XƧ>᙮:enGt~~Aryn3Ws3=эBWCŰ,O.vu/KWʷ]!˻z%llqڐ\RtǃzAA$H
-Z!
- 2=Dͺ1$Y1K>PP@:Ɨ;M~ m.@}BH-?DѲWH^įAWoou@'
-6:)yAAW88}Ӿw$-w;QDq^ m(/(
-@DߧOybيj< p@&Y)$O*CrwHuz}Krn!r%E7b"8$ÖI[ 5VC!\1XV߇'A^Eă,4U;яkgڎmV(G& E} v )RlCBuH5}
-6QN/;}=Y<mb<>cp4ȩ~}*F+ Ex9W͵֘#*j}\t着oцqy8 zCtBʉOoM{"4ZZz:M>Gg..)=׶hͶ$DXgFEd<y =~[\J</ak;ؓM%9|_! =:e)qƥd W჉v/,ֈZ iDT.5)5kL|6Y/Ýq8\/THL2KVt qi\Mz{S8 5BK+B&ڒKn/e`MoH "7pNdj?1P/3 ۝~NL ʲ!}EœKrMWj1{-
-y_=L|S 7lyAe (
-UX†[d!MHSԘaTq.O,qoң)2r _W}F>m#yD(qԋiM$~
-&<Zb/ z>˴|w,5AY ݶG'Y/F@Wq}ZV"
-:h^Gstu_ 9.ǷfI r  P7\ % ]sЦ`{ V%*nA*?Y1ep̩\cD)[dkcxRs)VP˒I+ ֯{G5jzk}Ɲ6oN]l܇{6c-Yuh ͽkc:<Zj
- s%' [ungl˨c*NzU{QQ>
-M?Tz&XZV>`i
-,`e\2సAХk!:hm^"q(:'7N7Ā@!*(;t٩+5(ں|ƅY@q>X}b
-!| !A@[r9jvm*}[:ydP3VO5D'hhv. Eua2`TsȫRX{-6=ڦGUA[6
->5IKn=PIucL4ҍKVD;/64@}39mX4 %OdC
-DŽd&<#D8cpaF<]m:X: 8<] E..铲`fa0q] _#F锉_Ӣ!x=S
-rh&< (< E 偅x*̂\2vOB<1Op^NJ ťV?
-34av%>iAٮXJxyT.v
- 5j(wI$;kΐ$Rzd!WU4:[bIJLⓘQb?vv ؆EbA>2| }`K sV
-ǁ,tNipE pjP'yۓsaM '9 )c'I.CD!fܰLVrr.xcU<L 7B犳HX-i#R)5AGe
-fiylG, ,` 2`xr^nf0BH>!yAh07}MgRd6hGs7k1x45jH;]L( <#bs ]v5@nH=ZSBj EDs0H=bAB,$.E xlUDg;_V8Q:[p&T1D(DFd))_H%J
-"'1*t}0UDb͂"%>k"N hH '<X"#P"
-
-ZqlR MȤ6elKAvF~KRDldw޴nFquCTݒUd<s}Tb)+&
-Cr.bi9w i
-1Tꭲws]PE<sX^|a:(b)4ܮQHwtbj/Ƅ oMb^K?0h4ƈ3Mbu.=/2QEdZ-
-.[!„ENChp ~$7Yۿꚕ5gy$b%eRcOY$Tv Da!x" "-TidH+ SD0DoRe&Z"{(P1:! \e`/_>EJj
-qt~Ua O1J@]Aׁ
-=ɾcHAl boC<>i2 aO(G]P&kUz`QeT<\XxVG;+:e|:6DT$%\g\V6
-yx)3uN!lB+{9"EiٷXJi{o> :@Bd!45]A M e!eDJ4j4>rjO=#  DZdK9g8,)ԉ)э@5'^"l)V!!1 =hzV}=OCwpR̼d%h
-adP L"KO.@]ݱDڅ<*(]џTxakHBt 
-Ob|= yv R-W"Ѣ7k2 C9est 3dSάV=|WxS> *Jv
-Xud
-QOs>{3]is2Fp! 榹./0* Siw
-`yg%(ȏם,?HqkiχHAڋ)x
-v $P; h%MI}@6PI-TŤKKd@h[C30 5#$6?@UP[#eZ^s HaHC?BT\ıbS
-(
-7-f20u%Ԯ4vc&QP7$I~qt5._ u5鰝7\u(d3l
-Mq,U8j
-1À:|Cd/xv7)5J}nUQ4=e{Ioj P髭[Uو>X@|[uF#Z`+lAO
-_
-t+k̘
-|JQu|r>6|j͆/q&8-\ЍJ=ǾIe0&Gj
-9(N9ιzQq,ى2JEsDea'vSfۉ^!aDۅkM'!uO=4Jz7͐W̨zP,Nj,@9(Ta'9Ē,rb1g_'^=sO\xu9{dS(ٵ4iX?d=,pM7M}3=iӘ83Xo/Gk@$/5q-
-<5!i\)M7.j"+~E;DaT}>O0
-]fMԥ֡gJɆ*kVE=y`A U4ԧa
-'j\CQP׿/dòUPEePCh"]gP)~ct~B0qձӔ7YT,K% /~abހ41Oҭqtkt*[N5`zA;a+уWj[V>'8F$7IT
-Iрg_d>#F`Sq<B
-21Zs"2?)j ˟Ƅ6&ÂQɘ!GG_C%'JCmTF:ZdͿ_@\8n pz=*ALPika+4װ$yhk/@m}h& 4.c)hϡ
-1<o͏QHqIJPI'Djl43-RsV}x@3<īϝ'<U'8'XYKC.3
-A A,z?ӚĠ<b@H^Z#Aqʲ
-tww)ڤْ8<"(^iDrdX|շH<* 9<FhE 9%!L܌ԊDROqaBHma=k4G[u+rZc1Ka71 ƀvOTݜ\I3Mxf,r
-ˬ9?@V1Ɵ TR0v?8L= XS/ $gAFlHظԼ%zg?, w8齔NV6$H>Fp LW%H,S834X0tf?fdLSe( GDf6ډ-imKa˜"t-Ek],/+Wy<tHyTIJlE7X$ܿJa$sx)R/d,T?~OՂlx|_%TZ⸥q^+n&/
-pY`%yK,DCvh=2E>L>d]ïnC;\{BQ}!"?.1|"7qw@Ë>pa o4pB;I,y 
-+N <
-e?W?ɇ݂W0uHf|
- 'ih56c׏S3C!p%EX<7{:GT<Ă^+;,v nE4t!TA-
-^'# 1/[1Y
-2QʬJLL,{\#H2uI~/ޗՂƃA5$QEVñǀ Db|Ѳӽ#D d/L'ejL&üi'o{Lze'%zes q563JMxK+5n&
-?G`oOA5w CY_
- ! @L n a
-qlLkbZn=WȚjR<fCxIKXmz啶0vA 
-/ݨ4A7c5fhBk 2My=~86#zbJm%
-'3
-D?d I)g=ID7ב$
-{EcKB$>$z(@vRM5{'>с؋
-5BÖ́ANqc9‚Tje@Z4K쏛 '8+Fr01w5vRwUjd;.F#f޸Nqq 7cVY#vįwp\^u<N;.)
-3L2wkY f1,:3Wi ^"\́{FZeLh}`m$]UM2ʵ{ZVd8꥞JFqr̀ZDe\W,M8n7; ݞm[FP5nb]5K!6O[@jAk)H Il]oS|R*{ 3ڋ Ԍ+iݠ}2sWGph
-Id1bDRýRL+"h&~
-ŠPN9L` Nh6g/)Xl>arЉy%E41lZUDފN_굦dN#ˤ*u2  Ptu-:1A;MT\p$epv.OT:MJ>P-׮|_
-;/LOn5~C*
-Ƴ8T#hl~WuH&>yʖP널3[PH?E"JQR;n:/_ATS7ChSꀫ0n
-2wiw^F$mFI1 "6vZZꘃ`֭NjmPpݰ(s%h/͑Uͪ ۷r\=*q(
-*zpָ*1d}nomfɃf`V[e
-.L|rZld AXj$aވ$mDU6"3EQ$f;|);DoF[ ˦!̤+C舐ioCgDtKd%M
-6UXx}}Y an:/ƇC:A0sZ
-mVh*i",
->pƌC* ";Nk!A{88)~(1 1F*TV  FDς3?_T:}~G3NƗO|VVmv)*t>od'#ScqGv_<'&y ^vJvqv(OF@[-ؓF nSQ9)<4oYfIccnAP
-3~`3 >yЙ> \ 3'Zɺd6=`iN\pepJ[nl#V%Rbc:s5U*1pb'Lŝ9_}<]J\1`[.$GzXiH&ʽ! [}<OBYT`,/cX?G}hm}#XT?fql8zMB543
- P"BB?zX}PX
-)7YN}\qO`iBQ/d"Zĭ~wo0W{~ފ&yTDtw)31jĎ9E1Y[W+x;k ϷnGAe+o(GEh0)7kbmj,J&z\BPFF“؍X\׹ۓE`+b1 ]!K0jpn6SAZ+6cgVNEW#? {<:]1xxQDMW5d2L^ITam-rpRTS=8nީ|u\Q *M!qQ[[
-_^`p|h@eW`Tس
-ړUv59%z>X$}hC7`#ޫ ݼ;zu׃b/M,8ꦾ'Sm=·#5Pr=/$PQqtUvUjcJ[wJ؟ͽ:vf381QsA&D}cULѓ*|߄_ au2 &Nt."~OXQ g_AZԐMl'k}Tqw')o16Q>/5InP,wV:[-S+bxBO߂CD>Bܶ@AD䇙͉҂^U3)s"ET#i#I Τ#s Ly2EZRGĨqG2HMÂ3W -x['88rԙ^(Z40ZęUB!YngVCX*'WC@.\XF9AGI0hߪٽ4q.JG jp(CMPtk<lB*<Ɗ&
-bvzi[d}%ʳhC7CΙ":2H Hm~1{uѬZFpIQdB80\nd|뿳o7O9}-7H=I*CכKgzܘj6ȶVU!"7kو|>5v5v#v0nf9C4s2;Kof$_HE{J:_*|!@"Ek
-rʑFh2-LJvfZTy`[yx/wpA NfY߬<$h -5b J9Wک_,φxbX[/}ԫֹFZ&(Oh:1n,J]ae,YyK0գc[%JwG7ڿX۩MdS𨖵ɏԌ3h!3\O,xB~
-$b{.ң?t<a[1O'# d Do\$Лعzi ׌IςaK4㖊6ow5Co [:¾o! Y/?ļ
-LU[72d+`\> "Ϊ.T㦇D\_/y`
-q2H%ieWjVhw!+z}lUG:Y!0&(T$iIf4G6ly8O^éXҡ7xE{t"T>8c#:W`6T\j=enJ -
-x8B!-71~2^4 %3
-%C^@߄cr(T:dsU+{
-ȨԡTb25!_^dFmͤmdP")IźGDRXsa!F`!uM9m{ x0հ'\<e%w\Hoi7]`Iن 4F_2GLM(qhMT v@g0,sxh(ϊ1O`垧'sXz:n\!JeSdsM>GI|(%)@|)%/BҎ\(i&앢d)[Ed=}}_Myʤ%.q>!,]\Z#U
-ѥ pdzü'.-=krp5>{ݕ~g ,Bue 8fC\wM5?Em`5|j,'<:;6ٳ>+m1 5{"/pҬrO %lwCXI,?Q `l&X8aXڐ䗵"*,nLj\.>Ϳi5F r >m9y..3F 6jBI\FԾ$,Fj!x[ >Mu
-4-hF:hӀ:
-LBbGjm!(ztpiDi, 1B {/6LcNg
-0@c(H(6B:;K<,ۑu.̈́mo<"M'91 )TVF?mLLйSC&=m\(4Oj-tTCۯ@l)G0 D&(8h/{+
-.(ԓ<*p *+q!$`/۵ZCWI\/נ"Nb#]ߥ}r&]Y[?9Wָb2
-<"Z*4;nk^:JSLB PfKZِ>I<ܠ,JM52fJ"ځ y).^9VzXe`t2Xh4A>orgDOy_/J0XT@G01 t3UR=\vmVW۾mKcCwk ըﴤ7d@[q8;D}BO$2JI$ȋ@6]ED
-x_Oíy fqky<ձY@%]skWr̭RWk:Js7;D(0&-pvD<hׂ)*8^7c2D$&\/>N'8; @9t
-?`#qD:vmM
-|D ,[Zq1TU
-N^w
-MC)siL؜L851-3L+2b{%S㯓-,ZaIev { n,FYɞΑM6dWo1R뒲GuQ-
-G%Zi\eeulMnK[7w I7յ<!0]h%=>C^^7ЧjV̙9b1܌@"b5>9=Kѵ}2
-0-@n rx[<:׫cvU  Y Nni ** 0kxr^yK
-,oC#a24Ä w {MwFE.ۺqJĺa%^4'CqHd:D $%+e^Q $,>nRG62 tRF)h%u!FdzfkW$z!%4(P 2:ԓ,zd?'P,>)wg71_ OAo:ˠ`* $gr 71pMuEo<ӟ 8QػƵQ}8ݝk29 DI
-p9 >OVHAΰfLuG\R_Q0ߛ<JYD-.x`jt lWq/+P~\@)$ǞHc(OO!d<^dEO5ʮ7( P8&(eV e$L))Q^ * lC ՚`g$8H8P ~hES)Q"VTA5⪢ S5.Q("a(9j]LCuAVZ jADt&!Dbx&3R=]25N--pP:G> QN1Cˁ
-` TP
-Jp@ H
-Dp XP8
-CPI"%:qu plHT!m̲\E/suI3J(@D UScArDc) V%_:Ga,5ZGhR_/J5WT8i*ݐ6&T#VF*'~v¡J8cw,cϯ.rdqp4!cٌ=>4A"gtO D+:DqMU)%MTQŷq3y 5(^`*hF\1,J:îZM*Ѹ/2 T2w<Uh%t:G>ͣhkH< 0` ;D]y֝D`F1 x}h9$9I7!08 j3փn&"R#댋]MX݁ˬpfp/$CW[=8FQG)NYXȖ8M] D$!98*H# D2ܕSqQ<.V_UK$~ฎբ@#GNᔧksT$b3;"14 #)x$Hdƃ˅ B…%4-!$@GX*)xvI@^v;U?h'Df@#'DBE"_)N0<E!U?* MON-ܣq|bx 5.f'Ft`>^#eho5!&xv%
-~׻$_I𝳄 S&\i)O
-~.n*?g"e[IDQcl"Ui<CtL͝!U@4;H[j AZhQħde>hB?UX^m5**66}cF]cnǖr3dkᰎImGY}^V RDdbb DgϤk^( P*'"d<Ak LM$Md"j0޴$+Ͼ~BާՓ9 >vO*P.f!yeE2!/yǩ[.Uj*X2Ɂ4zQ_ҤB&l&',r{"(HPъKA3Ty$,(̱,2Q(9HCrFCl [}6GAQdeHT5'0eۜLRj<TM߉S)WYQQӻd$mR,Ę=R%@4=V{ӨѺ251.uRU
-5߅H8 ͩ*"eSߞiЋXhGIw&DOoFȚwwNc>j;Fֲl/C'aձi()R&AR~HXSe\9Q)ŸfK;Z" Ut="*_$M+Yi0IMYx#BD:vnjJx^%{P!OnZ4%&lr$U(GZ4CDmj"5Dvt%3(ʸ-u1NiZjOIhsR}Pna4Bv }v9&a!EMd^#Z1o.bO."FxŒUG9xBȐb0*}(;EAEv)У$v*ИBDbq$T%2e%L62"e)1UTE|ժ@b*'ܧjAa=bWb (oAm+.&"J#NbNx9X؋&X# ŽK]pSѨ#C |03JYаhFM?7Qq,ijl8cI żԊhkȊzX|d&^%ǼARӏDĉfV)87c #kFszWu . ]q]QdYQzL*rPĈ=P(:DUԨLZ ZτsPDpA+C:|qM u)y=xȄ"ID؈g$CDL&
-),2\E큜*G$Ji_"gM+#НP4kQg<|+AR#˃bV/DPM G㎐(LW\:;.^FJh>^G1TLr,Xz|D])mfdBv$=4H ))WCA5>b55A2A$3DSB![FbHV4&:<37>.rld(Ӻbeģl<QQjQt ECQ"-)KFVmzqP5 L4NM!9oc9t`_4SG)_r? EUL|N298 ԧBxNH9Fh81,}Nf8!.dHm S7AC [)kď?rt}
+endstream endobj 63 0 obj <</Length 65536>>stream
+%AI24_ZStandard_Data(/
+  P8@@0!8P$D0<@4LDhpLD, 8P$
+P@@P(H$€
+pdPA&PHbQER!~G?'ͪT<n=v,;kWq\T`P@e"Q$E"E
+ EpX(2utvl4;*O, m-ȃXEbX|5ʌ~5 mPy?hcH CX+)ƙxC"i,HvU犹dQ$TCĊD("Ð"A#Ei0RTOAa =qtS$eáHU$HG9QGp4f5ƣ`0HLJH">ΡHacȺzs-h)騨HhCSmKJr.>[*:k^FCE/=TffcVX(R$cc"1`,"cCD<h< d(EB
+QBr! €0 H8 zi!P6 ZI!HG6|njfb^ZV: %2pEDB#!1nq=<;:氆1laR$c8cH2abA p,IcX,_B-lQ /h7^>ulcn."9Ŋɡc>HQ?q<Gp,wC@9Q;i<Fh mdװF5ܠ`8 HH
+HI")H`,T8D Pр x`BdBD"4LD0T@A
+ A&<T BCaBBCāQ2H@!R"HD&<D(P`PDC JDDCL0T0C "  `L<PP"*H
+ px@@Bd0PC$Рa$.hP@&8`A ` ET0CÄ
+@X 0Q hHxx$x‚ &<4H
+
+(x<cXx,&<4D,bA,.80dyXLD0T@baסB 
+"   CHH .(,D&*D`D"2XhhPA (HTp`ALxhXx@aAB$"2!0!@d0aBKᡁB 
+.]"4X( H
+,]$$"" D ""&"&(D2`Y88T`" dˣ D*LXx``
+LDD4X@
+"D4DXp@BDd DAB" 0XH0\@Qᱰـ!bBD&<4HD& *l`H,H40`DD "
+ ( 0D h@(?D&& ^Eu۴TBC ރ<4Lhh@dCTU <2pXX˒$VʂV4 " xCD@ _`b `
+ $"L`x * *8D$@,D&D0(
+,Q&01 2ER&L`
+@DT ! (HL<@@4Q8
+]U:L?nufD?(">33=4E~PUl  *@08P$.D> !*(  Z&L08 $@Ӡ
+]XwݽݕVv{{&aqb+XyGS̓^]xYQH.gU{3ں7wT$ɶc{EjGw/{>x4W]{zw.J[6-ll~eڸ6V<eD;LLlszz']iL?>jM}|%]
+kS%,[zNh{6m_jgThWe-\IC|) e6Vy;h?YPwWq71&)~x,)uFN]q/Cş7_ESyQצJ[.1$'"*j퓉].Y'W~6xID4*n^s*;z裪-rqm1r}sKI!tK7hfGrceܵ!óE]-sjhӜҗ{4eTtLnjyE,4ɺh!U !ZWSs꼄{5itڌ J]ëӨd#m>zIwH~
+,D<*Mn-Qn9w ƽS_q֣/Ż$ܬ- ]Ot*] tjkMi^{4ltpm{xZT$4Y[G;` Z1C[ЕY;v̒`MmEw[z4ʒ:Tǹ9e(ҷElH=/V%i]K6%ro\cQؕ}EJSVfw=fŊk7kx{CVNY2*CW\{m1inv϶,MwG&)^4UܽQZ׻Uzjڭ֒f+ZlK\VlNtҊ߭}ԕ#}m}[GжiH[#Mˣ=^2O;rݺ5Ǖ%+'|{-,_9bź)/ y𦲘6uY7k8kYSXniWgUg4ҖsXRַ{Ghky[[͹eś;WusFj!MӾT3o mu[xU=d4[m:Uؖ"+[%R\R7EjS/8,Z[Vn*6%Q1og,VJ[76lT_T[Rùk'LUͳڢ۱ʒ:bʴ=2<f)[.tlh/'#-wŅJg{~s,IDŴdfZ-5-\> Jki͢.TS8ԭUbGSZnDu}Nz[b"ݼ$սeӻI-W7YƲ]f1ץweoٖWǙϜk˭g8Y^o[,k-M˚bzQ*kZjKOW%4[LYۤrl4|K7W:
+(D@`
+
+  p`8`ABDBD& PB{j?굜ҜC *vuimP |Q 7CbT;i{%=6X~P2ܴ(fBí' AQA9wAsR胒xck@pH&0aEb Ѓ"V^tqc’Իs)"]N.wR(Uss%g= -\Ԕlu1jiGʞ+o==j{ߕhWvLsR{}^)ͫUct9޳zeU_獢յŝ^QmiK5Ն[r{x+欺XuHgꮪʕ]~<#]Z`e"~yǛv2EYUejO8kZRkҥҝ"WMnWRʅw-ʦ~5.QSGtKoZDy,utQݝǺB[V?IdoeNWϕںT9a#*']%ţYFԱlrT%U"E,j}lLU
+u.Ji/qɨf nsd*>q&~xstEgRvݽqU٪2g&& MwI-Wpnx2͐vU1,cAr.M]̭Pkn)Â3,3>ZXPUTlsWDzz)3j[mr\6mݰphnQ\a9=˺-VRsHG6II2{"֬UY#/ " 9.\<ߚO{{hg{RJܼu9.Y*!  ѨhFCgs(V9.vz۟yOϩ/iҰשuIFeӴ46X(
+Nzuhݻh0ʱ:nʘSWuˬܻt/
+օ7sѼ'L<t]rW.$VWu_]4
+zNҭAAӋy*R{޿SK{v/xUS곲m.shiGJoҭf{-<Ӣstu
+C*;U5zzͅMTu`}S=v^*ԫÓD[mNYZכluꝪIg}շE+LI4:xϭRBݫ**{ykJ{7²~3M}mWz_*սs}jV-hwIxUsjY޽.c7cgg(~PVMQ_&Kb>(N;ܬoA<Ow{}U{So Ͳ)g7b=v*N9eeCZxro(Wd'QIWu[٫«ףW>[םu5we[վWot=Z!
+~]VhZlUG, HL0D48
+KtE@-!YytZw
+Dk]t/ݚn+sJ.ۻa;{G**YBΩl Jd)<ƭoMJ$n]
+uޅYdVܺٵ_Du-)j"yWץ 4&EC|ïک)t6U(w;=~y]!=-V)\6Ogm!u9WNB9h,]W9?[fUjYzn?Sߜ1-;vv:_
+U޺iw&r=IIy< g2ydt<.JL\>^EQZ4w>F<xt*mu['%mٞ͛7'˩x*[EuyB~tml+SbokO-<%ʹ./Cx+&u@S!Nnu_%+eJ5T"4u|o~TZE2햚"wK^2n?;<ٷu;WZ4;4B3ʴ+gVZuZSi:iL/}3T|dO3ҝלּ Ѥy|Fyӝ\JW˧^ɯDMJm|b.sK3 1iD~,1f^4Եҝ^b!ZHT˛j>jefOwR;_Io"dH|-ۚunR_FvF5],;=ԓZnIڏMmk[biJ[5G?OtT!S-uf/$ ʮKvϬUR3 ҪΜuqShG{Vvrv:xJzs39㽶AE6J~~ZFtՠdDTiMkfk,hSG3OhkdCä3T;tVkfW隖t<-tC*ҽjW"44U_5 ~LW_oN.2Y,f.Z3mͦ5wMߺ7򶎵`z^ڨt]]Tڹ]B5Oi[=^5K67꣧futҼq4VsjG{)8(aFV/,UWmmnӮnwvx姃y7Ꞟ{%zROMѕy;߿Kfݭ>=*ë3ܚD][\ޮ$f^^QiԻy<4hȻny*nwnX6^ʣ=%*sgm.깫wUxWY;ޜӮpTuv/Rw]-W%ΝݺR-7G8GGk%ҕ/"]~StM7WN>~ͦcC"Kk4FW.Cujkx] mrW53]f}Ѿsu6㗨<3Y:/ա?fGݽ;KU;7k$]/*~S-|;3:}-mE̢ozTt?D_+~MGd*Wa趖톉Ez]SY7:5L?J6 TKFuIDzR[#D5Uidi{-4}5vhHYY %mи³cHi1#2v!u}m~uҦe.4ъx[5M]úutWWl]u=ͩ%;mR{& bp?BzUԫ+NV?~$*%Ru]evCB<;HfIY2ջC6dQLɶ\G2H7utK+*7Ϛ{RoKR-;<DcgJl]F+,{<[<Sg=+D;?iӞ x[Vi'٧G޻4C2փfz=Y[~G#,o[sdF*-ۿgr5UKD㲽lNϼZe3LD??;S4$%vuH Ҵ3 mk{zI:huż)U7NQ <q_6w̛6NbV6Sgs΢}7k|Sjn.cks)pMu])!]Q[\lIDHڦ2L:^]'{
+"DX0  , DPW,Po휋mHskz
+؎Igsޫ9t4:G,MT;cҢbi=uwTd顴oe鈖hU-3E,[3;X:[ew^_;)uӱݖlO4Kh_N6M0l':g^_<UsbYzVWXyGM4u}xJyD)s"54ig:բ,[5fӼ-L3<$͆xV#ZL45{+/T|<,7ulCN(vWN?+}'('ј&uYJh^<jy\)aP~v_׈hV!+ݯTCX n Yՠ*Wg]խXiVJ\4N@t; 9dætlV59E2*%{7w%9ӏ*洲ƪɴm!+Mioh䡟LMZ?,Vң_}󚮡^!Y.#zkU>iI8h$E,1Sz9AAA
+zg4lDf^[Dyz<1YEq5QuECR{ 2gN/
+xQ "|1hX{y$[$1 koy
+O[ē2"OD0kH EyBsn֧%ɜ Q2>MKIv! =t)On=_y"0
+<y
+ةWC)K8Ɍd )h`˸F9:;%H2dAZcF@JT1|E2pTUfhaբQ3QT
+\ABB+PF2P{<oC!ەлBq"\)
+P*S/ʿ|ݵ=k!>+d.zhEQpD9%uavAAkn7(4lϷM<7jdK\0*ߎ@XP{R:'(b6p._I g((jQd'䭛sAWiG8~QA hB@/L}F 1ZM5,P; ν04Q
+k
+wdXUY@QRP_$%e$;x q-C
+
+|W${\LW,gh3D]hM$Y/ӐsbuT6(, gW"#@dz,a1a1+~0Ux\^,>1N1sF&1PA+vWL.ҦpcqM<ZTj5$C`xZA;m:Yi?Iڏ,*RAvhc-[`>FR
+U$J? Ta˺?(kXΕbv-r-G(l _kA+]b<emKܠ.9ȋ%%T-78*cb _ m;/F`7i
+-@r8x2?t/3AԷ2FրJ:_SMFd.m4bPmN]2]SGg*7wNu53GOnU~G 7T [*djZ~hiͳuq/!ĕ $_ރ䄋|5i@
+*ۨO隟zYc#Ņ}H6ѰQ()HQny>ȌbDu:Uk"v-& ]5GDԔ>k ``aw
+?NF',=ᅶ=M(#Op<is<mFc Ր>2}}J ¶ 9',*TF06wEI'P_ƆaJݳ3RXpn;/.FS`ů>m\5Fn['&*$K穣0
+
+rb^π4 9ᕗ5VLQB׫]_ntƌRA'ߒٸtn[<;T#2A9dSVFSf1UfVWV+ 2"8_=uNOؠ9˶ACSD~0crtXf%\G :j&\s>9|bʊ,YdUYO+CĖ_*NZqJkɚ؇ieћSe*kVWIy
+սxp˅Fkk:{%<^S-Rf`Q0^Sq(CԞ.Z%еyd$S
+rHECNq[
+HdqQ4ofq4uM[f(-<GY!mrUA6P*XJRIp&5g0^Gy.s\Ѐ8K.NL twWഘ"wZT_LũRB%~)xL5,(^U\A5~}}psNe4
+3!-~-l M&FOީs~d*\5?"om@RX9b088k,]PZ>Rb86 [۞6Hk1iaF(|O&2%)r^ V\׸k[d9 kԯ@T}P˟"eB%m( +j#' ,ܧrpg
+CoƘG54$R3TrEL+~?i'0\W!)ʎxIfDpc)fx ̉5 cW;-rgS401( LR79 BaK,n9iQ {beg޵?̹} |<TԻVMxRʃjJ ԾӘU";@rsUY\n)77*{Q J|
+:f8MQ'ڻlq#p&ƻK֦ :f|ƴXt~ &xWyj 2dZl #w+1Qz՘C(kaB{ox*=8<j츫 S@&ijόeBmQ딮GF;4n^]GW(djN|yL;H#9^K-+E!!/Cӣ"!Հ
+/S@QY|ϭ}ǣشXR[u[!]F8@kUilh @!lsW3emqz׈Y̢Be}g۱<{KզLB*߲Uz>KƬaumT)m  D{{'mj۪_aDgۗ1{h2B)m`Ѷ8AED ym[?6~9ŷ}QVk6
+Do~IB
+ݧ gdN;N]b0n,3[#9oZB.ch@j;ku]5X13b,Ч$(M=Wn*aж0x|_ Tsq*eB)c큸hfb9`S~i\RW:>P%!O;ImaputnV9 R5.`lXDݲY]j+KWbgBuя2DJVn5&3E#<n1c*>KҮߝ>FdҡGYDž[KZ6HmE?M,,,=O8kBl0871!V¼j \[21Juq5XPj1O1@* awf\&`kZܗq޼+z|ynP9vtdMS4s vA$ EU N5C4q{iPÌvdq"NzGq.[Uk^"x‡-Fq8s!$J6q.R&CMأa<} QB4 $k 2[ꦱ#H<ܡ/XuXp9ݲ|^dռu.$%MS#^(8ܯ+=-܉Ó"L\ᙛ ض
+'oS}ָjU%.[lnήmo:;Թmuu%gC<~,qi@Jt7ѫ+,TiG*X~f_~$sTRi*|D,G68&wqe9225Ѝb7:h24nŜŕ,uvF8˶\q={/g)e85,=KD`mopԨj&Yj :K8I";}'֦TN-{@+W|_iafXX= 2@Sx:YXIW<ha ikքRZy ޿_xjIUvR!^~#2
+%ԣ3^ϟ;]1^ϲZ! 3xWEW/,$#1趪ER2o%CЋ7 rQ.^E%=0 {{An/I)VYQixo 7G6yؕ|Ws^*+S0`Gt2!u`Tl^mbpK 2 @{~.ڜk쾈cܰN/sȁyy1DĄ5l&΋1!9 yĎ#(Dszh@zMcǕ2F(`6ǫnNh8|3% Pau #wE#F0Fɾ^ø*$5Rc|c[h1wfWS
+K˲=@)ߪ~+V,F|/D3&:y
+~Пe}ٳ-e*;FNs9mo;sXV/s}E
+ T葯"|4KUkbѾR"n1G(9- Pec~BSdRo2ܕ q1oƌ@h02kjBT^zԡ4x/\ u$2יӑg- Q bR~kܺwePI / Uj,ӉgmN3>
+MhPo4TS-X {RPݮI@tt!ˈcÞ^( [*e:7 Q*vt[ᨡd0Z)6VgYĖVp,]?& qU^UD5< |RQ? &Dd^>۴_yb6 ؼ
+ M P‰F4WvaHg6h۴
+c_ᨀD)UjD#+'VT;EFYq\p\(5c(=z\F4cI>G*$T}؄L@aw@Cܐ S8!]6Lt^)@Y`?&B
+ )y܊jh
+7;5 6V(d([% r3ILӗa6\ŝ`( J恐Tp
+GA]n)'Bc}7(DEv#TOVpe|m[<x G |T?'YNQ:6R*<û>OYOFd\Is|V́P/7o!-'L:_m[dO:3\Er$@xV#dHe-q!FHLPHy~@tfaAW$|ܳ [Lyɺn>`
+\И|XBf^J>02<t)X[g'$(+E.fzv
+gnZ$GWt/7mu{
+]U\LMلwaOd2RP
+-jLZM[._3󳥨:Sp QF )XBx WW<O8} X{%Q-l&MT9\~UpPǼʠ,7Ϟn.(5M婄]حhEڞDu Vo6E ܶZGt>JCA>VQWN`L2y}GFOsƾ+X;"LK q HI23?I ]C,\.xr)Qh;kSH"\()c\04}Q.ʋ;Aӡ|
+
+H)yѾ$5OZx1ݿ>W}BHv6Ω<l{N`RaQ`+C0V2ǯf:Rzaa|]+˙V6KZfmIUZC$MDeA6E3~"մ;8^VH rHc_|z) -447wD:Ď)i5&Ϥ1c|n\&%VBb"Σ.bnkf@Ȱ/ߏ% C"Ɗpjk'^>OV5;0=V<ξ/{dp4]_E$hjmҫCn%v~"ES>z6ek^/l-pOÉ|#5M,^} ZZ?b;m0jH >?p%5<42s&L[!%}iD wB
+g*К.,/(w$kl'#[녭`2%Q(k)^"u1>.>a`xdP lɅyxf
+ 8/ ح
+e9r&x& iA3&xLxM ZXKg~z49AuP1_ΰ-sUjDP (MV†v#2.Wx7LcwRѭz @!n+Uf!vo141f*jVkPf˦"•e+˕ bJ7SY*W873f ݫ:}Gk%~qbAFȑ1[x"[+:*E(D#RM,vvu.,y71ދ;ĽLUds I]9%K+3H6zl Dl>
+kŇ~:@ٜsH扪W'gj
+Q";Aֿ=n5Q Y9$hʡaI A[($T3
+{H 43'v:Af
+j)K
++(__}*flw8 Ҫ"\L@
+j"{iyѥ](K2ӈ,;,U~!MC?r2F[' bq?'(ЏMxŅO{
+Ҟg2hЃS7\{Wϖ/u=-|M;z#ùnr-X2?H5Z`1O|╼ <:;{gWس>mՉfrΪe֬j(3iCI zJOJ iNBd2L,Krd-%h
+ˆ(gYoؕm%D*BF:a60G? $"JS>)Mkvsڱ]v ֩ ivmj~4H7rdi05T{F&8v r0.W!
+F\h<~q`ؗCo ( r*s]p:Fnne49Z
+&]I*\d;d4eR9$˗{"`C.K)O7kiJ́Dߝ  &{Gf B"V y<K<Nh.GFcRv\(O 'ew=:@鍐nhTH:mH
+|&[ W av@:<^ 6^`]C3{$wY˱39;Dɥpuv˝8|胋df+x5r&_\y*h^rqNl&aל"v֨,8, GH,sQc4+}(
+n|v~
+e`V"8Ӳ쏐{?2tIT0 һjߦڈoMQO׮Q8쵢[H~td̄*rl=ۅȝ`{-c0N ?y$%<YFpXp2jhsmZx–yD#c߮}ӏ)T\r d+D@c%^eڹpglnNMV2ju|]QcrI8*Ynnb{c5| bn.φ ZfG|䟩ˮJ7I%Q;{jKO^j6坃4kw `f*Ooi*9[bbHt%-d,G1
+bn@d(F@%t\EEԚϔLPy"$`2Et,U7IIĜMÂ$fx$*ʿ"9U -`FI]'`K˅#d9Aw}$~NLە(GcK}si]By%iq(C #g
+sB{W   (pvBs5S{97bژUz'R!a؊B\Ԍ휣=8*a $y@R)jKk ltHOi
+k6.-*KpqX.$ԣrw{Mf1y"~G‡;HVI{oꇡ
+W@f@\ǁV<ώÚfNGTq
+ދDiI[Л M-&P!i7ZWSC.1sSgdhJY%XԔ _DS9#B(}mH:$ L= *1zYب֛ n %O8&>5jɫAiFCh08X,A(@v]JB!v0[~"i -|(\BAPUPՆ_Ys;aVJfZf?h)M3ade+8
+h:e%s2*
+y.i;}ft]*L&q">$fz[/_) 6ݴRP:U*j"mi@eBr ~~@H#gD aH%dcMen]QGigx06)#m-,pV_n kCp@LD Q\.5Y"r/n/jLj7q}v$
+Q9s{8H+4S{iorT7-pMG(lϦ.VuﵸgfW3z[KT5#gcG5'騼ڵ:'V T"j 1gtg]eI S6$}>$;'t<1i̧+R^L1#o9P;5Qg!^
+
+Z֟R1&f;#vl@Vqsi
+A*o
+FQ.*5h#'u0\is?ZA*ߥƩvB]ǡm; Ya8}[G)
+Sx1|׶HQcQt8dOX>
+ Et;Q;dcc>{cv?;3x1Mv/4Ĥi32bM6f~2Y_)iZk&S
+ԛ#q&>(h)ʓuoqv+{.JdQ2Bq,25My SYF-!SYKnvxs;NUtTq]Vf" [!v@ ?jU&11m3Y!=*{ &BLEt%#1%%T^y;a^ؔQ4'9=UeE[MlS+[h;ت".cnkՉ$AgL;$ͥ/ά^.\9ᔋeBw&=ፄ+ +g˾Io׼FD t7Un) !_I#V eR c٢86B :VfMy-GODK(PRaS=)AݩeR6 %Ycq=q~?/&*:tpOsj[V4έWKݬH
+;^U1j8eE5Yծ}y 'zI E[
+)os zsT .__Z,'zK2qa#(L/_qBҭ]_ ' gG.z5R| Mhȳ*,:ם:RNژ.O\$>lQZߣz2mH:MIh
+aՀ[FqP+m=?֓8 9in[nVh=
+}N bJ&\%"&ŨJU!CC/5C$nߦ3Øn7 dJA66PR1=A -K`4T򗍉1iz!I WhJ6EkΟP/!~Z*E]W7ɬBje̐W6[]`٩ql9@3z\|~ 6 -0 I9+m Ɇ~5L{Pz~)CqP> U|&97,PnšOaL#LpTt qSqi0/S>wu̝RF\~R%#R83I{:f׮
+
+"@+xBD\;in.en6 !WR&mO&)%%0
+&dvh\ׇXSO*R*G# HQ5$EFG0?S^].<nNY : C܈<5ﶯ3$X#'&saCmxbz0-~DPpD7pcqb;y,9dh񪼗p'h01e0 ٝR׷:$$W\)zqR#[r*6꫊Q`Ԙב:Zh)3~mjVLz&sG$fq:a$iBxpp7\XF%Hݖ=X#H`4X;9B>ȫn$p3ġ\UK: 睞(J>G WrكQکe{4XŌ߈^ k 7$c#X4Dozw ;) 9s0~ʄ: <IOŭBAXL3p"(<cM$j7t3DjCBFvvpCxvBx~~cR;2BC25H aM4L5MG٫^EFӾצo軫wsRnz-#i-(2Co5˪ALLL2#Ȓ⌔- qsYCZݑXZ'(yS)ҵiLD\ƛD{|7_Լz"xAI
+ӌ1$HF>d%8uŽWMKP#9F/KTEnOX8Zw)V8h>ϐ%㢐9E&j%iH`m>Aڼ/(( Iʰ&֘,qI_B򑠲;Rs**{>k;=rzLpMG*$gST=Cco5ZW<%NJ9¡JA0 5A9U_ElT" zȿ!<8{(XYՕ.1ӉyQ^-cG6ԈZ-CPo$:v07%9\jD4H {jK1'*EUL:{=bAV[sJCDTye?= 9)VuBH6MMϫd*p_ MDфtV
+TfhM ZN㽄|e[%6&);ZBt"t^K)\ rP-A^HѮO`2dt?,9qD+FEL1E1"OJ(<'ORBQ2b((rP.ezNZePXb\,*\Ɇ]f\,t<
+<B>V彵4"Bo~tvܕ~J$18nX,"+'K2Q7A3[vH%#;#SUUG׍L{d-HY8գ+${qS+
+MjD*RMj]r3|4`%
+Xv?2Z$
+l,CfPs-a5rtuVpfIߙ{I9 [3:q U(pZa܅_/a5M{T1(]Upj4x?"ψ;1g'ITr)2xS^+,R*sNX*qFIg\P3amGPSJ%n΄dz2.:!1gN㠗EE 
+.ɾN.#233m]Y`|\J&*lLWw7hg
+V.T,/.Ӧq/iỵf?Q̈_V6k9$ Րaup!QZ1bfHnlbzE7"`H)(
+~ΰ{U;V GXղ)O|%᪢{P+\vEFЇeOE
+m2(pbdX"[bBfZ]4+#͈ا#T Hɦ+0jԦ*C/Njt|U2}UIKD8Du
qJBDC$hB&svCD9UiCBB[xO"C(t9u
jFK$6*$QKޙ`Ibhb#5 ϐ: jYD3L}$fcRLK-眑d3-Kb`WzoyTM뢉*"efJEa - 3Ob*|C iO$*{|'Hj)*,O k=skjrGM tHޕ<՚X "&k"bJHѶ͍(t 2غ*V(u"},fT;29N}ĆFG>!BD̐ejZ-)̪oC~Iۋ:k`JA5 },}o }hIhp┼Z(r4uVc:({FaFi>AX_7)E:7רK*yZ~J8r
-# <|}h_5_2$ЬL&F *Z`{a/G ÉQfpsP#\*-j4qD:bF0`,*J)A`Zqdꯢb5]y;(&B;N %A(#dצ<AlND2Q<</4ggnDh#x 6 <n̄B\ՆxC(e$<E<gּ(lwrMJH#!"S2Q<a<x2 % 52NMy.f"C$ L4dODTW{jte#D4 P)A Q#Ses ;HVIH憌.".ýY&8CU";t14bBL(ATHA !!o PԑGդ 4 [#萋P̑Lg =U=PJbBQçh.v3 R߃)LI1`&Tb!,|(.is`24G"#6Ǽk%,$[Z'L9}Ӥ }EU43TX|ל¢պS^P -zI9 n Ec{ \(*ZσyusOwUUs[^R _n(M
-<فd" <7A+萑*);j"p,A 5XFJrpÁfcp@4}FB"Il6 fyf:aKCjQHVO ЏO0HRyFF9 -5A
-/,"u^ZuF"EBe%3`w#WEe3aPFx5C^5<]!BrAj&#TWe}BX>F:qTi$gwF(Uġ<BTX=_GR"HI>3,au88HNlӢAgCI8F<(HJ MEBPu>J<^3hJb㝩rgyXӃ&F$3 /t\UD2 R#PEE{,CVшe=K6DT$SD(!#VfD+r8:g0*H*hLT{PmE
-.+ST['ج!&e=UQ gv9yV,tn:sS,SKfq)PͩVZ[ Z!2k$~NL;ʑ暡T_q
-z]ZtufF"G:g<-ϰIR⢪&,!ҷSM72f=hoԤӴl`iyzZЃHdJ&CT=TibuK1=]B1$?oEEOvtjUstW$~4 jBE#&BDƉ8ϠDYY<̚&*x ]$zL1Ҵg<,EUK(Rxʊ!9h"# nͦE}2.RɎ:Jb#ibCjihFge'%Y%((f㏧H>ʕ*aՒ"~n(#!tƥ2rLWQu89hLAT4!g3%Ҙ:<ffA斯椩("QF֢̰wH1sKTׄ4'ql "!y*(<-$ӽӔ5R45V(@)>'{&C¬mA|!pٖ/mWBg@'Ld܀XF"ZT+Du;lpʏh}!AhI+a%qLPtP9>ƥ#ċb!wNgU_x>ڸ\6;X)0*v|8!@5]j\S=j4Eҩt2UC2u%t1aljcUicOULԸbEׄpH5H$Q
-30SOPJ:q yHH+YY(RBN=)GYY:\9`u0;ܘB#? L?*{(A.pas@^@8fLյJt@N'w4>D<ja>3.UEj,]:ES4N9R*#f I!2N7cȬBߔ*JPyi+{I(4OG^Y&<k2 K3mdהMHɣ9<)&rmڌr7DxyYj>C,Ik S_\xvDhN:CY1 9f$4e}j,~$rH)\aMA[ǹUqa6'd$Mym}<TQL%-3$٬bE(UZT5`"HʍYh$eָ#)s%Aq_u}P+>*^bzJ$NȤS|TqCTk*N2UEh
-ʛ>u~Mu^-<jh&&ZTx"sjD"q.cǽۢ*Q3fVS?V9Lv͑gJta&[|aQ\$i"%q)r/QI:OǸOS#*Hh:
-g?C.c,K!I%T%Z#\=</"GNONۭA:mADH.vS:.iUQQIZ}1Q MD.h*B֘ʎ6\7Dejtʺ&JAcSL [D' Elx|@RU1Thaf6G"y&UH=;R'^܃a 1CaPŹ)' :^$/ uT
+# <|}h_5_2$ЬL&F *Z`{a/G ÉQfpsP#\*-j4qD:bF0`,*J)A`Zqdꯢb5]y;(&B;N %A(#dצ<AlND2Q<</4ggnDh#x 6 <n̄B\ՆxC(e$<E<gּ(lwrMJH#!"S2Q<a<x2 % 52NMy.f"C$ L4dODTW{jte#D4 P)A Q#Ses ;HVIH憌.".ýY&8CU";t14bBL(ATHA !!o PԑGդ 4 [#萋P̑Lg =] EĻ*,+(5|b 0s0 ` =Ri˔dqf8HE,\ވ:V*C#y$2bj̻6[Bb
+5q„L*). 7Mz ]"̪az`ov*,jkNajQ)/Ht\$Fch"1={B.}YJksPQiAx<غ'*9-)ф/7x@SLJA2EdžRBtHB܏58]Rz#af`9zh8doLWm$-!iv/Nobkgf4V8/iYNzphȺ0o t
+$5WmdRd0 "RU9\k$R$T\B1 vG:l@|UTH8-߮a`\3:U8!*G<klX8BuUG.ԌENn@eFyg(iȋREz#xoHquʪ +En.ԜdO3yY
+V͌4Ħ8-Zdz6că[dQ$UG5$<ޙ*wVU:=hbDK؆5ՉH\qW0"2q0Њ2SQQE 5"j.UEAj\NVQDQrDLhꂬ6G1ajM(eC:/Q)Ŗ ,1M<%yg&{.d>jL[@?[F 9t}cy
+\` DB}$@ $!J 8!@l
+A5 cة",N<!4|gnAMTJn
+f󉢊Q`мĩf"{ F(ъmل[t̡ZKM+ZR9 ] ,xlTaH>*I\5XAPAbچ,U2GPZD8ڋBp ^J$P_95$gKT8`U_sRu\,E[Tq|EULV醴14R? v+U+Hd3}~uA { f y8{Yh$ZU|(^!GoJ(am84*E>~ gRM983Qfm3̘ Ü Ն-϶<x1h:j?a $22עZ!aVnV~D FKZ -ycgS5Eݘz1.!^# t:8:0 媰2HQ Q&̰xf E5:TV)N$T祎qZ7C-Q cS| M{мf5.&;EqEz0$&PzjVBՉsfCҬ6EB_BrI92&1QEƬY.~&hd-6wPQ9C>p[uV-Z0eU
+r*<+ "o(V Cq9(:Us@`)pʑjP1#OgH:Ut
+_Cf]V(VrGK$O[܃HBy:2Q\ L8YXB,i#MlRFJ́PO1kOf̗V!zReIZCML*ES'XDsz"/nΊL1$Q/#TSf#ȐCJrkBJ<4K8!Pe'Ghk㡚gb,gLmAD ܏f+B<
+Lİ(FARn̊(XD#)I+ OZiT#{P"q"'F&E\
+_SqJ-E6UהWkjQkES75QԢDS+%ctQ%<U6 fsm<S 4y⫈]+"1XNud)KTK~Ny*<ƍh~PD}F&ƟQ!E"D#P>)Vrcy^
+IT,r/ l)ye?rڵ4|tnM?iFOH.vS:.iUQQIZ}1Q MD.h*B֘ʎ6\7Dejtʺ&JAcSL [D' Elx|@RU1Thaf6G"y&UH=;R'^܃a 1CaPŹ)' :^$/ uT
7MNȡD1.a b&?B`2śM6'BYlV=pY:Փn*bk^t3(; IBE:eNH~:
"<P:zJ8o[c otprE<[A(4*HQ$N}B&<xRm*{B Rd ԃ`FӒ4l2Q$_b4+ ~7I >5CDr"@aϜ^^~EcoqHS<85xY㯰 =g9%$5a.IjNfr8 }N9&U"]ʮ͢RP(I"{˫~*^P4
1*ۋ$:y
-zIB Ջtb&fCN #nˈPvaݝE_Pl ndQ D(]N7ݎS\^"KbY3tYeѣ*> q ]!UWd9Z,E1h!씸?]eֈ<4(%rJrVisռ^_Iq<rVgQ̐jHeQ" We[HrI}™ĢEӊPLli!I92yJ[3V\HK5 GWUnE{}TOh {E վoC3bGo}5!ku=%_4*J<2<!ŸJވm@ MEFC7LlbXH0.ب#o<*pbcgi+l4T,ҎlJZ 9(oixӤ{F"u9x(2+>dxb;WP_7B<E+,N=F 骚nJՄ_ZJIQaיA;Nj'o%vקBף~h]Gmf4Do ,}p^2ᆅp酣Z/49ʹ #e$>,ɤ9L0"BgNIV=;zӬxҾ(wE%O48O3)[ǬU>G!yX~_ydޚwȓ64h(־L<ke*Z-Ō/Zg"ۦ~kޫ6Jp&1^:"?Z[6p+IqXW7r^\DcE-,B7LuYR6ʭbr9]qEv$rZת-7oq-RpJlKE+QHlDң#BD(.EX8b&},QS̒M(8%~de|ħ8OejTxM_Lx'D.
-)g9kJ
-O>ɧW1b^}$VAs[4{8Ś|OPY9۸Ƅ">5όbE[ys~r[ wWT3Q=ET }HHOGQIo}T<uϔO KNo?+!YGSG$kBzբXNоoioQS*µGUx",CȒ?^E?:nՇ1X"òp=[o^61~Wwz>Z6^$YE&¯/¯qR7UƛVnf) ŏtj:Әt0=qeEHDOS7<.#V\h2!JmDQ(Ƌ"?xX>V͹/
-U3_PFy,2E) #j,H $׆`*L4;X?q2xࢊ$J"
-ҬWlʼn=l_z*9)E>CoOy Y'e - 7,)or-"8)yKrtn!d\ *ZZH^9YdaJ1HVimd̋lP*ϤWEl)Ҟ0'SDrNC=bAAN6_PcVNmfR鄠UH[ۤ76G!KvWyJ:rӕG΍J[ׯ.R2(郻p喤N #Y\>hGm m`i;>+dƑ$ɠ W:A$&K%w/q.-HI8$%Dw&J&ɜ#ߐqW絼1MY<L,T2ײ]҉'2"2d&y$R1|(]6NKiUc3T;11dieubOrj/Bbh6֗luyD` F\
-2
-k}O%ckHz`4&FfbAUuh:SerIĦp8U;UuIETeN .|g?ʧ
-Q T+2'd8kr~"0Ur=p<"A>a[ljT0Ra]B&<m@\(SCQ.{S[ s]-H,$-?(pXQo0hæL
-CbAlP
-hzk3|h|0TW`/AD+A{U@ʇ[x`$Ӏfn+psn-lbW(RbwݜceTc}|1?(cɩܴK8tݥ cxNjcWc
- lc%I9OJ|VX* ^1x8r RSkFXQޓ^_MaS
-İ* #Z1`LcSa +hwPGtjt
-ƒSԟ!Ɗ>{k>65@0 X h¿$=<zcAvBRac-Rd{HŎ 怱hmt[ٜXE{l˴V.m9Z?c1tb9V)_!$ cda3ƲI$lℱ]%cƺ =0of:ʕ@V0X7Y"yi&8PcAm[{-@ %
-0l@eJXwkmf0֔q"/n_E`m@Nj5t Hleыӟ' 5kZź81P]O:2w$?C+ dO" Ib/VDM X a+}p`rC&(6Ef/hz /IuփkM=؋dWCS{pS.(/vPykYɋUHGh=NU~I^In.bGr J|b-,g1Bbaݒ+/V]A_R^XXn0m:/âSC_bRÿ{Gm &˒3>f+ ?WYh7"r` Z/I ,a}B@Lvj~>PLrb-gKi^,} Q
-E/'J[PPջX
-(?DqkdkZV.H~Lc(*qX0N1ZcP1 NX1.jHUcx[$ƍQDXDg!yn?:!XЏfyc:r}ґ k-ƻNܷ3qfp48GED6^)ocymc)~{Q13.ҚRw&A!2nO6胱i0d u$Qs߁ dP, 0]mHZ&}S0[cu1na"Hʊ `,,WLg#%G͈ML%QobGT!5p\l/tEQ07E_X<DX4
-wc=`\aF ciJcHzncEE~kL hH҉wښX
-bc,
- 7rkPv8{p0bX3%#L'X3{Rvgio5X =imطK%Xa-RKݵcmt`]kXH]73wX<c9I̘Z:3~O83bAR$܅2>ŧp-X˩^mx5usMcRo1=33vX O9]~lUmx dK+[bYMe8Rc).r?Q$1֠Sk޵/1FcYMczfck>-$ jb,#}{o';X^Ն]_xRB |llg{q5z g<2*rp!|K Y#5AR5^p=]02t(GJȎÞӟ#c]GSXUR;2ֳ^'+&蘥1Ϸ|hb /ĥ *yY\DV ]aꊓhy"=X0oAc%04 C0ɣ*՘J`
-x1灺dP^w#ȟ!]jѧ[zGXs8`H&RRcA(GVc
-ВEhFfl,h\Oi-fx2tAUM40LhcKuc X6J¨7Vr*.+De8{)ĉaL,U raBčŸ {qꍕUZ |6ƪ,ݍ:fS#p#~KXns)Kt jj:C
-e{vkr¨5VT rKbA]cη,$l",/r8ǟb<#Қ
-, CF8cb6֮}:9ЃGmc-̿ un,e)^aI5QrcYٍRl\Tʁn*⻱0o
-u94EcRNܜ1opK, qiϕܱ,AcW eNi,cj,sG_%wť2
-X]Q)o/ob
-Uf
-]xc)c=cW !Ɣn6
-ce>$c!86p,7 <p` VXt "m|
-ƺ_,J\lP
-<tl,K0!
-:Ȝ[qe#h~H痟zGuk҆W7(C@+ZK7"mQ@JDa'U%(7VBTjbȢavqW9Jw ֍5`B DBܴE^I[7ַ:Juc3rXlgfՏ1i@@XN%PӍ/S-˼M{t)dLs0ޕrd[u5aE}4!brW~#C\c?RadGʼnG?UIx"˂c+ST0[k8Z5H0)jzB-mrmı܌Yc83p*Hwٍc8~*x[2E)Zz$FX ֡Nq) OՖ`4]ks7sMS:ˈ>Xci= /R|y.?%I?pxM
-YX<?M,ydW*Naa8ER~NJM2Ufʯ4 c;7V
-6?W 1]-L4Jx=Q`V=@ `x/7`G)ZOjV~<q5ȥx* D,a CgaDJ=h.3frz. Kͤf~&bFˏ,.P m~m6qi:ڧPt_%YÄanuZ ]S)Z:Oح"͒Amhd#M0ġ`'N`sGqu> "[xOVqBIf¹v9-F&-WC05$ `;tޏJ [p7( D%B[ 06ǷV{5a;w6ގ2
-@Wga,)(hW
-t
-|\RVH6-CXg&̀ww<c&-ؘ:'bCOf4?)~JXzSw90-~^12 NV$Ӽ 28KCaٴ'VB!Ry m'%BU~@|2ЪD9<GrO,25m7%":x6i>yΫ&CلčQ NTmi(]4슶w|i"/ޱ_XPb4h}X*2g|de&Ig&=*ga;,TzQDx:ު _v0-Fƌ#[C:}"q* $s@[ys>KւwA;^ "J{67 Ij{m܍q/;="C@֕^\]hR`X}>nږ%;O 9"#U51~f{C_MxӋZnE?&Nև
-!Ό'+nHƠ ';4&C*]efid.~xUB\+g,% .okE*
-} ^4֐6|Yਂf1*!jm@%GXwطѣҿjjI3t [S*CˬS'Cy_&ywy b^ q
- Q~У%XO,uQ!5块xAV*ɧCCJ7Jgɉlk(\SvݶJҠE~=.5T5d]09I]l"2"/X.lD,ώ_
-@hX F,nlLQ!D\ ȟ){$X%L^M|ZDROvtRFzJIjE嗇S-Q&EE/skB7tId8y,ɵiS䚇8P畠svBPl sD\9}"6.kº=sELѲ9t[JIWSlVł;o HRdHAX-;nWoN!URY{-xݞH$[eN뎕ЮaliscAQ'qYa'1M2
-)JXϑ-:@[V[7 Tۏu9
-u¨T:"$49O-O "
-I5 G;| l6/==OT
--kn
-2[#͂ySeTz (dTߪyQjP>jy?/{pIx=3[Cث/N6%( ǚa
-͘7 ]ZEDU.!Uឳm1t>H ,
-Y"UMu<ݬ5LAhy !MsYevI¬ͩk4U}*jjWQPWlH:PmnTБPy—K' =ʉs.r𝽗:od|Eя\kHV?]|b7ёm2p_֊@(
-Z< fnl@ #*2 ܣŃr\ m aY&YA!bVɃwxĵ
-vE&9KR$E[WFk2wBS9FB+w'k ]!<:b2V9.ӱFH->5*%s lKW ;ӢuKb(V:U'&
-{ X]J%d \/OlF 7kϏM=ΠPsI I"5; PXnM[Ѷth4
-~wUUX+ T7Ω K[,6NlnGYݜSa>|3((![y
-^ rn%dN{q"هI QJC|w'̻ͷGy,0"m}\]G!`(Ec5$EfHK2.$k oZdU9W
-p,n@}kAIVm@CU/<L)HDp0
-w(k#-3% :;k|[VT( y_c0jvwTijyA&):n%[6Ab!eug\QU4)?sɨ]x.~|(=ns"EQًK骐
-88͎x}WAZ"Ծ`NqMgQ'D`.h΀GSO`3WDMLlb!=g;ID9a痠
-gwIM,)#Wh |UhhnL@+-| a~PFޒݰ lQpp@@g8vLDr]FGxiFzJa߁)ppbI3zXp)dus{"='])d_<wuvTz)ӵa
-GC?>A)P f9"(+=jj:"!z9Gy::/">pO:e+uyi:_FH,EV2!{`3նZ\Q1Ԃ?%:loF
-Ʒj- M\\AZTǀCU+o>Iv?)fCpRgʱ
-^3$ lϱ/q
- ģ<
-J˺1N?#¿NmM_y^`,pdHX`E`">O/ Gx.cF.眊$R<(xbtZ1<usw*1=$.&Ɨ(%-ʛj!,٭:{*jQVlU%9Qu"]ݠ>J>Ng )
-xX@bZ͚9B Wu剳\7J'Du ,ʉYx풁#J>??EtZf
-^<闰.1Aɀfِ7ZW>{xL9rt—3 {PԢC}9z#S4VG=
-['O8"mEC9I.V)̉.t
-_ sYQԇBw Ì0|5hoбe |){mթp@䓥BIot4v
-%_Aىhg+
-szR)0m'J hRCجcQ@:"]˺:` {'@Z*B fLhJZ}?YiчB^x=CY"1I
-Ȝ<ݷwBlR28 zs(A^֚bF?3[949hA-ۼT`i_x"T<N~f%v#Vw}<
- z% !\ 눲zHF<?x<q ^l!Ĵ}%Ot:@H?7'qۗn;8x>0EI{х҂>
-Ϊ{.Q>%=1G٠Ci\y=vJY~
-u ݗTGij`VXg_懝PRcYƵ\:%⺴
-{qZ (A)NzuN+'V
-
-OB!2+'Ɨot6$x
-~uc׹G?1q LgY<dr]Nqae$KxHεeް,#jMslɶSRXdT1~n9hOO|$<mZ3_ D#:T[*DH7jNT8$?يeOLJuJ̌Ê1ƧW'U(p';MBVu$q4/lhfp](([>N^g
-Fқ[ ց
-"'3TY:(( .Ϲ
-n`Zf* (%pOs6JfvQ{)flXDތj{9g.ccTc(>'$@Q_NM3lBk# ¤ҖL4'Z0'TDAdY-zGCa)͒T~v{%Dmh' 0K}Y /#.Ľie o|ٲbWDV@2ؑ =\:i`8'NhU)OŤ զ
-%K%9x^5roU
--# Pe(v.K8lɫ%7ڷDoK5D#h9;:y!xĄ"TF2 6,ҩA "HH_Qtr|78) A$K/Q'LV.,qbfEgt$ѣW⧏1F!xSJ:5DLJRv;1p6 - /p#>q J) H@v Qૡmt@Z9"Z e].ᒡ\j';
-[h+*!kH5##%}hh(
-r@j|~YX0‚|ƴP`k)NG@eXWcxn'=(ˍy
-Vôߟ,3,Guv-v0il' F@/g;B=eZXJ'9`E$f1e5Y7F ~Lv/?D[CdCYrw<B^
--gCTw
-²S7e,kDqJ#haԘp'̶h"kΕX4F$pBD٫*#5i@ %n7
-,ԟ7/}2`^*ubfCvM9&fn|K3
-]3=T,H#>GYNǘ%']Wh(i [u|9+:.mٲSa
-nXr&QBLs;<ldHj!~5Vl֖#f0({b/}8X}ڴD:&;mFDr'v84O;ڎbքwgPၠ/$@DXBկ+vA\#! x$h](4GO+
-cr]&A5 RýU,FVZxqU~p<N2x-'<\uȌp-rl (x!m'V'zxM'pj<
-˞Z7:Ȼp"bRw4 فQ:%DLЀOB^TZOzJ˿Nt딅vy { {WDŽŏn7TU>FQ=Ƅ`XPXD<vVv)ӚPq3=yb S
-PR<C5=r
-bkL:
-,>Q
-F_a/,+U
-
- h8񾇬i_BB ^'?m*.6pa|N
- `0]3eÂl4/Ј:*
-ل"ˡ9ؾ85] !@UdI8'dJlr A}_1q h.dc΢
-+⅃8ahnBg+Ǭ2-TjAWC~@e
- f
-A_'(sA;B^C|,
-k2aֿvDSf Ba|7IN@B'l ފ@: ۓ+'8@W{׻#hGO&twߢ͛ /?*Na<vBjTbGy:x{O7 1Tj;fN|p쉔0ӊ'?~ az#sw/;u+ w(aNJX'&yˊkk<-Õ`
-I=
-0k7)CF>
-D"YUW/FON*h'_g&"U}ITׯq+MS _bD +=BI})t]/|[qvQx0Wxo)AUd_JރyCqteT~ ^ G"p}Qy*hWwb>( z7{)Rbp&u&*xz'K|PG9T05
-+Ix! ^78k~/7k!1]ĹWf "jOu>ድ{vQ;sٵ7Ԁ߲+0`fQ
-3WJOB\&./Jmͅy37>sF!}c~O i?K`Tz]]GD9=~(ciӸ~Йz<RV\,󛸖S"޿%<=P \
-endstream endobj 31 0 obj <</Length 65536>>stream
-޵s"ݕ3KﶜЪvN5^žy=V'trֿ'Mo--
-Hw4Ǻ֡
-Vj;L5zQֺࠠ!D7bASdNZ6'iiKV)k1~Z5(njbfo`5M, a g'UjQ$5%(He9D/&uEɒl< `ڽeӹB?b#UïPRo@0$IPÃ+yrҫMhe jFpLx垦wT7HTa`g]R'tV׃o$fEjd -RZ&tE0>{A]jȐDepyBF,fQ'{poА4
-ׇ
-f F4)c|@%M/ڧ5pGi^tkЎ@Gݸ4
- `56L&;bt2X]?7(ݞe{fi/]Dz,CbÑ`:˜ŃF4u"sg̭Zv]VL5=:|8mB^@]o}o~2/F<y>΁c!OGp:qo擩Iq[ .̺s0,YFwO'n>s:ώ媻q=Q\>Kq&8"ۍDu>}QN4 niKcgM9I Ī3:T
-~F
-UE2^ZU]p̦ә1}aKgc4* m1ZgApQJ
-&rc@_;r3z(%BT: Z]jv].6e`B8L4:QfNhp?RoCD^Ő5"Q
-wȂ(E}W_Kf ;`.,Et R4;
-NFn]Uﳼ)DPvXW˅V'Pݨ02a˔m k(7ͷ.^F>A`gʚ"+ʤȓb+$=ŗ>ʼnAFA;|Hv{4'`|cxeWRpy;(`z"1Y 'qLӕ9^"O
-IPV.nxȄSɱoJx .ƌ;0wYZp5z;,q t&^E]3BZ;#1^ǖ^WK:I,+8 A!wM϶?8
-\U OpQ/2IO]8T"C>L$^.ތ!XGԠ
-E\P@/ns%Dw^{d2b9֤`wW0D,\x9/M%/P!FRX-z&TM1Z64R?mE=o 4u, {vV]
-B>-,lbBh%&FE_<2
- aq]"
-z('k$J{~A(n o$Ѷk69Z?lyq|<sI;ܠۧf*S3@S!
-?5@rZ L <Q{G7'o~s
-08XBT!bd'0[d~x>}F:wTE1?R7Q؜rޢ&Z1
-. N&ED̃W^ߡlQ~"md HesG97صCM\Jj\DG1V& %\..w]D;hRsK
-%wI|0`rR t@+PHyBAߔ0<7
-ɻį؂kAu2Na! F, JHb`^,l,*S]Z#`>DeƎsR$56޲d"% NŴ/-?cK `s=!Ob 60=b9a ;<ȹ0+h#v= -4
-B~Ek-x$.vJZ ܍TO\hj[YAA^4)5.eC(CB;4R]?7%Q `~
-C:Ѫ.Iٰt5q m uhXR>%S`F
-YQFTa-OG2U4`(D
-ˑHkZw&=@v4y;a' (p(6 1gwPc;=[7C{h\މ7 ?oV$T3 A%}E!&*ds rSOQW-Arw[C0Z
-Hw-xf~8t SڕH:*Ve7&(n]jy1AEub=C]X|:f2qwF
-\ zQF>X{YM|
-TkOJݿq+ފR [p&\4`mPXJտ$vT^=壨NrT_ȡUA6K-B &2dg2Y-fXA]nw&5nayt~02(sZط, ƻu:lv9ME-oXq"T:gN"TUY*I8Ч8Ea K9I`2L4q0%֑b#
-x<+7d8țAKq4+oq3ɜnF|Op
-(_;#|@&V :Ja0p
-䜪H^nP\EVB3$GM,GƌLcVE$]\CGL-vt͎f`]SQ{)y+ ZL$tzf<%JAJ~d7.aOeVkd|5"?
-36cJVu)gA!N0Z9qɔ`l-=ZzhG׮W>$"}nB1Yʩ4>R|/Ń:4 =NR Uk2ŕp?9+)n,G!~=rkR9]97k
-yd(rN$AVMN IE94?JD4?J ؅(Zpb/PHS/DEj.= %޳&m%3!HO/du 9^FY2R2 %LffSM2>s&γSOqӸA~-ԬJyFgL2N=Zٽx=t$^j)VDhi*#RIZqWUPS"{f.(iw启Gă攻HHCSěȟ'eUZV8D'̊:ďb83 `qu_"qT=*\OWEG'e&s<4}_37<|8ڞxTy1P̿0zD^e\lhj9{%xjIH~GՓ٪nj~\IwdQS 1fVWߺ[ѡΦKmtT9 [x<\;"|,%#LSǨU$cO#84bBӠ Yc}x&QQg(>ty<F?RHT8r=)/NO!ǛNTF#hH4dRgK\+FU|_ !?ξ;ވxY+4\sьUW\D8h*f i%es咢ٝ=
-fFH'="hF(k4iU[ghdz RC]7^ b}ps]f$x#ct`/#&WA/ZtcDªg$*F1.)1-C!1RH
-'ugQ-$ӵ$CqޣϲY9.g)FD
-[2)!($5\h5#9k&tLu5Y(j&4i@>D\& /:YU IµF>7w<:?;jFu*cȝ砗"FV,]CǚŒBUSBU˨H䰴CT,
-0䉖K<HŢ:iVS "ths <SW-L 443Ox<peVP KRsƍÉ}clN#b}Ǽ21ѹ-FzFZl/Nla6DU"H #y MĴ Fb7y ͍"Zsd]t]ԑ<85y?ʐx$!|!綋CPY.wA
-Ј=iL=!E 
-։4!QHLȏ &ׂF$YN[EY4ZiT)O:D`''gg&NnF J<' }q
-$ЙPȅND(>;;E"HlL:WHDm҈^m
-95U,NT1ǥBLNqWsnr.17t]1$! 4,Iz˖֖.]uj
-E,B>?%}LE格D\Z1]%bN*I, )(qa?؉=N T.?H: "B*hj!GS(M֐h4Ct&ZAN8d!L1(O2J2bT*F)ҍ4Jڠ>=h*6q0dJwn!vN8{s%cKk]B#li"q }AK㣖bnB%! Z 6ӈ&FG"Xrcr& nbOWnn]D/j7GE)\/NJFP9BtB7X.r3,+W)^-!+[èENC "B9hrFC9;
-̈!e()\mbϸ5[o&՛"T\3[]-fL|`b.]sޢw OȨUkeER
-VdHXt-(-e ]d)JUE`8"2ŠlFJ i~B$6IQB3;MI&JgB-d~1Y?:BQ'Eϒ25D iTEu
-.gΏC+^L[5UG91nf)(
-18h(ZygsR( mh7҈J m(zmCDF;ǭ5k9[+9̵ʍˍ1UID>1♜{T P(,IXJGJ;J^R}-D\>ZN&&,=ZXJ)j=&K.zF.YvaS]^~x\02=R+"cX6O[wDYĨ9:'Ŧk'P,.udMsQ%#Bbtoetz~DŠ^^D\٢+7[czEf79QT&BEjUTgJgUm|V2#"+m2tϹ!7jAHi$iEqua((BF^^d%" 9PGB gT
-].W*\iV?"]\. K\VD杮:HG$'fzg".MHF*."O3(O!ݨ[.XJJdDN*V%& 0
-[S) D/М%3ԓ9%4mS"]8W֥䈐2呐PeI)<AF4NbŒ8!<B@4V"аʥ;2A1묛;T2DkyX3|upqxk֌ȎFH6*n3.tB`_ʰHF9ǒV?1$-LZokj |-ir8a0 #Q&Q3Uն`{1*(Pk#o贂FԊ15!~F+Quƫ&dJm460US8U"V>B#YH#5[Eh _4"#KN$JV{,LBB!S|1 
-ʌU4.LY-6?6CIdL͊ Ejnl
-
-\L+[gB
-'|
-vXBU8UPWDlP
-}*jETv*h?
-NJ²\TH*
-AP!ms z<La^3)H/sPRT
-B;R
-?pO-"hC<5Qil@b0U( 
-Ln
-dYm+:P {
-(. U:?a>!'8'\vs! +Bc~'Wo'tn_A&ZiK:!\
-d'&
-tpK!%s [Zz{8+@PW m2S«A)!w-J@.A < o 4 RaBЗ%
-P
-Id8 &a _)LdK =+Adn&af;$}$Cv$P(N{ `/EC D~_H9HhhG] @P;5O=B|G8^8`ZY!EhY4BIfVoC3DtoɃz +xN -h&D1
-cAp#n x ocv O88}AP`03 7A](Ysb mcƝM81=?c{A#P@f
-AFw8Ls#;Xy)AD _3x
-A$#n:W-۾O.B
-J--|vjJ,#C0@CF
-`w Hby(" {{y.$QA!g~>0/rAT4fBPC͆t~hZM45g(*6[BeNJ "!X
->:GA؋,
-=$}l=(g
-͓N7,wN<CVAxf<j?ATdtnrYADE;
-]ӁD:T\!7с?HBՔZ1 Azf0Iq`;q
-Z1p\ ( ̿ԠVw jM8 a% \,C"4p,3<g7g^3 Og'p1e`622 ~V_A{dH\!c 1H~2oA Cp\k%1
-DCV
-UuU@DRTONiR+*(
-،x
-bM!dLA.H].V)(dI}H6$D60,2B
-{.MxR@3D#R!H&K0( E
-B8!XI{D
-NQz2
-5EAq;+@4D(eE|
-AC7"?P
-VUI\bKLbC9y(O`ć}?DUDAavQ*#5C})t΀
-$C;u(@,C+P7o(Y:%|?8OABשp<Cl
-,0CdDz(Ov(Cu
-hAwck
-jP G l^DF%* `Ew36 Z9v=!Et#@U0M p{RR u:NEH{jfFMWDW?ٲS\%6p?nIU,c6꽲u7U2jV4M?e 7Ԁl32l_g@G/qUڇ_-J6^нuR.BDxwKoNb)'[P ` Ycݞ;%j!х]%dL
-NH}< ȣrMUL7֋b%UIb\σ*$A`KAxRMF4DI0 )g,\hy#1c$=?t.r {X GTl#PDֲej4dhKvBkk@5&D\yt$0l--ߗjj%
-q-7>ߣ hM"(@-"(orw
-DpUZ@]bW !X*
-x(CS)q!pphi
-F
-4d?+Zܩ Xry]C`V4=`]`2Fp|u#e|Q$YA2~d; X>ysa*Jk5ׁ֭=TY {sL  ^Am: B7D9`[p\XK덱@ v<_#\
- m`\Aȋ6s<["V=@8ĮFqD3M5
-* IAE/LCN-3 覘p8rFmhz T PI
- It Wu_t p:KLȲD[Y>RP!<83xFl?whbbL!؁G xj`u - Bq@daBҬI8Uly.fhtlNJXd(*@)/z
-*I^W a Bi/ ĊG!0Q2R@*^-P-_"Z@vLKKx b#4%uY \آUŬ@
-XFVGxtu-hZFZ]_iz.{{-
--5eIU?>W @255>_ LU$#
-Ҳb֯k`7nP;ܐ!ʩG(K* +V81GBYPGQz4DW'{TB%xح<X pSK (w 4/F$TA+𐍄 ٨ cX:bq:bsx(f6 o}]I qgb T:!C,P &h\?!HQd>aڐ T0^33mu H5Z=7rX@'"@6Nk26hU`ipK[UW @r2m] :ޙ|X
- @|Ĵ>oK}G&o/cފ,1c) Pv⻊:Щ}10ñ
-d]@μ|T,2ݞ:*/(=AbxS&Oכ裤r@]*'
-s
-_P+ h%+@G΋g<U
-4D[#`E}ybvPxnL xD";B^dմ0CړYi
-Pq W2<+D@Y!
-P_&E
-bؑAL ¨
-@}
-SP &˙I *
-o)I
- =Ǿ[%l(d
-#a G'R(u$
->A*!
-5cBqh%j0F+G9 B]Gn :ᛅiiuCia@?R7&GXg/At(ڮ| =Ki
-K쾚hU'eŴ <F~+i5З]84
-bѨ5VMmԶҰNH¥Z7⇹/{PD%DŽThӍ' ~||ٶ~-ucؿ?=(dΉo&]oLpx
-_o?P*$<X"=H'9=NXtHo^Zy
-gdHSIi U
-oncu_./B}
-:p,b%6QFo"Nu(՗.(pޗQDf@re^U
-R[_bMbH3~o_)+,P/3#r_g7n% yx|wc?`~ݩDhH>'3sVi件Ly罨I0?Z23/RC)8*U'!VM7u9r1D_T0/ŗ3a~'k U U襖BG&2ga`'fu^AY
-$[Qz#K~Dz1?0.QaE
-|**^~WKܶjb,![*nO5D%t}fFp
-
-"(X/JY OR0ЏkjM}C;_onK!ucfBNՈv;!wR$}.~OH<
-zM s+b@o g UJdY[{fQk8Z WtIJ-lb ڶFo(u*'ѽ"k8<J?×SH#?~&z
-{?D=i ǍMv~K,?Q}pT"='ym
-Dvߑ.OD!̺Ztwooy
-8.ou-obP}]=Ÿjr/EAp_gjyh a{Ow+"cF㵿";ӹ?\f<)hNb+TqgWM痸CaN U*pe#9O !a?; u6!!m3z;L;jg(YM'k^}^%"'uAr)z d*J\0Pm%
-VIŁs&X)^7q6%npqnf,ҏp#IZős0RRŦw A3 4\[o,֚6GK_}b?-4i}m3A6|h'6J;PKoCh7"0W?,g\j[gEf)U_t8_0
-[FD`UQDn
-lBf~`~ ]rjpLp |;o(6S|FHh\@} :]#je
-!\?x 7][G'L{hVYVIK:*U5D/DL/;F8hev
-o_S~kdTK=s%~!F*O4@tg8oF#EqO}vI͉Sb'Ӌ ~V
-@rWÎmw4)ݿw7wU1j3w^yܥѷjFWamCحe_F p
-d׬h}:'g=: fPKFZ_,3ce3Y-ρGI)IB[i]e*u<h}8Gzk!A~c
-_=>~RWimuIq<9\2iHI0PS;+͏T(v25Z=]OWA04r8vׁ03L[Q"_=qŷ#eg7E7L%Wooآ{BI9>N]_=W߱Z~T>>uuiZW?{퉣g3Fyګ~ScǔnIUp"#S9^2^<Dtso
-פ}2Y2pWHٕU%I|_,N.Fss$8$Mՙa2瘱{.g]O;>+񵙲Z!s`nTv!ca"M\N圁VQ-,~Ao,1`Q쫤?Q0 mgIus"Ẕ]%ϱN7#*ͳ%e}g,5҆5g~l19ϡCt
-}Nzͱ{T& %MSH'Iю'_NԃW'I^t$2Ih/`=BI> 9KcJr$}~ٓyM
-ÚUy>2g|A-/*ɫ1q?sH A'`ѩΡ sEyΙRhh`dzrZXÀKJfusz
-Sa%^8E&SWeRsVƜcfXs@a)Hg’$'ta’ĠJmM=j Y9;=]DF93w:0DƈcIdtcKN4@%qs{4$}Ѥ<|AMoK:*kXrɒܤB9%˦gsv>"Cb9HAD9ݶ"QeI YUoνߴ9n
-d t gMsl1ӵ)w?M\,/|ޠ%)`XIpN~Q09 BYIPF+h Kzb1c 85-b`I`"T]$Z֡(=&-"PQ^Ɩdt&At! r<li~t ºKc>&OI{:>(=}}R+oagGEP:gav,EhGzAjVv%ၓ75c-xv}-T: g) ¨9PA<')ոC
-<ڂu8VҧIjP! 
-N.dk=D8䎭R 6 huzB:!g ǙIg+' ieMr_%P8_vKx#&hLV[y<5:OwL"Trcn<uG1D3=t(bIbW=."ZO2}мqeFh©)'rgl=e|yKh}̗cGHB=Fy9C{Dtg]
--iK^"x :g)q*T> GAdoD#b>`|t9)`#x)(|\Td!agf2pR)C]'Ֆ-K_"43S)d~F@7~
-S6_cGAoKyzz Tsb2؜yY?tRV= )4e
-4pGl- $ew3ӣ@!ZrM 4LEo%u ֥1tZwۻ@
-cfT><gmePi;)U. K:(’斩9e$#e@c
-Ν*-kW&5XEcV&n4N2*d'A ՓEKhPmrziQuP?DU + A '5XlM2^(1äm!|JAUʼn^^HagF1M+PKr2͌ gR2mQ++9d,ɿ@MbΝ + X/zm>["Ob >VQ&8\UH^)]:0 \@]6<b~d
-t>a@
-C8B
-0&U5:r {h(E0 G>(@ZHhRLNIMCJ
-{ ˓ugR={&Q~ ,d&Wu7%qxi,۸v;ʱ+dQz
-Mms',=vQ Y4.(u$
-"
-"&~bh$yD
- ݒ(48Tu8t88TRk @aq% 1W*zHAL
-ʑ$FM\IӘ苂>-I-@ QMZA&-t 0Q'͈@ST`47h9F40:s)KԲ_HK/
-v$Vu=DAGhтD2Z5-yULMf8U+<>08[a,a(d6ש߻'F FtLx6 g
-0L
-$ /4<;=:9ntXA&#
-FH6L(Kg-3A+  tW 2Av
-\
-L34>|0U傸'0Aa&u$}AFIO> MjLLA&4h35zܽgjGvP,;P8–9e2pe@3%GF;h$EwLtX A3fJ$c}.$8! R.fKcuu}gOZ(]ʟ(VP#o {R<}:^A)خSh 9X&I } D> <ڂR+Bw#5W*~ߤ8)©j,*Xw
-&PK{Y 5[TF[-!i D$H5;Htf1BMBtO$ 4G`GdidA%x֧AS~uTAXV9aރ~̷7JG[5}$u:)\v)L/66cb xL/lJ B6 Xz3X C-dz
-=f m {8<I2tKTVDQ8(Y4/2sM3DL!*NUVbCS~@`FC>ma5wœ 94)!!T,N#@r- OGP
-{**]ƥ~]FN<$Dй^h(&*'#hjİ'
-o*)cQtE6iou(k?OxR7<Y\O^ *)i@q|pE'sÈ' TO[{QjބцuKfXYܗI|)PӣijF lΧx/
-M$$85?I#|H*M
-%Er?,Beddą2]K:nXF2R7Z'H]5b;(HqO$!1Q#S'nkITK>99Ӱo&4iI%P2 %Nt%o&d0=dOShG|N&hN,mϴ+em*/OexCtam0#Eiԥ̨:)h/ot
-\QFJ
-)Tٽ~CT$F= (N櫕5IXHbI
-IDƦ݆@"Og N+W6p6$uV`ﮨ#(dīCSQ(W;dcH5amz!|. F%uL q5U*.Lr2D5JMuhģ0
-1l(5@rk\D??sI$aU {K KGW̥ZONAc-K%J1:EJgƛ(Su e qRƱ.tXmjiRJ|ec)SZ{kaU[BtZRR-}I-+-rT)чۈF,C-]
-+dj> )ItK&3 8;3+R ӅnG{vYTR=όR&-ɺJXڒHdHA]0<0+|jn)HZc-츦 U9'-UXK֥81k*HÕQ"!pHGåO
-!\q
-c cj׶rL3UqV]NBtP W2SRl;[2STnFRgpT]6 7
-&AVM):6B8-nj$SSm6+~8$XG3lm{[jEIiM6[ٷy$_n0h*z$(Mnzd0ƽڔoFyZph
-cK([8Xe|e RݱdAS5>MmtӀ@JҐu od~i}cI41܈yլJo:$wY^Sd#
-u ̛rqu5eR1%<oL }[^S6u#dY#yNo:AuwIӛ,s?A bty5EӦ l
-IF M6mXwOK og '0SgA>ԽM5;ONXk` v?}V}ob|s'nc.h)$-Byܔ
->k
-F Yb
-s8 oRvB)̬9M$['*/GYʣ|-CX&JF$\G0+ۤP_B!ɠv"2vtH(}֪61
-αu0uKx@-}>[tdYiVNkY7+22,
-Z I xMӁ\3k P6 *b,|>g88jRObf}1g2SؿXPBRcW[u{"@140y-S8e*<N7XTjJ1c?Ba)Sq=&«w+X 3Iӭ<tVޤe +zC1T)TSm2Wѱ4z 41G&2]DC|ևC.Ժ!pv !jLVw*IVW14exk.sݜܱ0q2򈬛nw*F;;Z3 Uעm<
- ˷X(;`LC%FR h9U3b9ֲrV25+*0wz(y?=| ʬBQ@Rc=TEs}cyz)DoL*rPv k?zKa\վA~6|,^z%֘^QE@k=U_W#oyLO#bۚw<b
-XR!pB`U
-/[}<E\Kt2\y"J9*WVP7
-2kx}-a3h!ۛőəjw`0`eB'+o*VƫY2*#ٰXE45Ӫ uCjKV{[+oWt
-4I3JeHV5Q;&,PɝvBXJtOH p\ui8mXB\b RjcZ~ R?3,S fKgw,r@/ץ>XAy,6;MMu0;pp|EX񧾛7X-p% u?EhM \$z.( H<A|%4L FXtF xݜ?ƴ(
-cQ?qΕF> s3ZJiouJo5,m7k(c1wLܮt)Yj%BcU͔&cz>!_t0 Jw*Ha4Ǣ7S،{>VΗ@H*¦CN>H
-$H fDG&Ue ikʨO_b_%(ƽ su&-XO48{~t-]?V$Mۭ{KK,\<$> b%QRơ_'+;++P!dǢޔߏo~oz gk[Gtqc6C)B.
-^;XWq2 cN8D\R¬Ę+N|Zcm8b^9.eLd19 k`:b_omv4
-{xUX2K^mv:F?mCc9RNXc1 "jV^)c_\d;&(!^TOy݄|,a=V~U=jF[=U3[CRtd˄GȅlQơa@>Uz6=֚BiG{,.Ч8
-VK z+Hjm #X{'vo,xRi^%WHIX h҅cIT:/}cIKH- A@R@\ 8~rm:קX1e FE);zc55EuoYV`+Unk}|y pD\x~n,l~D-kʻSX 43IAXIƢI~xo,n%84
-78I\mXat2j7[8+wצA ۉ̄x1GpjfoM0ؗ@\<I|No,Xn8|%+;$ c5H&.ʋ7VU:Qj7V6KQzM%0~j}c1\4qXb]QX,3dX/E+R SXH8q{DX3Z+MIt ?$.Mvc#n-5'o,O>$@Ed8E h=o[ 7&o]Rv`ocI4xﱩ:UNrE͕p,Ǵ+ XxcU]68kBc*3F){يp,±0vL"+*,*|'`M8}xHQ$z+HK8A
-nhc!58i!(sgX˸p7Ӹ[zGu~j c'~qOEFPZUFQ\Xd-_."?TZo<3|bn#Z"z!k[^,r`hwX@`c3jciSџcr;.ee x݄*$܁V>)k3vH_C+TW݅X2v' EO/ DIKHyJeQ0P.`,*uށ̝w4 hZ)ZilH0ǴW*71SR)"#d'އdS%T$X:
-R \Xfa@z!1Цcxd%WɈf:[ͪ
-Jk1V=O܅1'Ҋ Y^- IfsVnXg"X4|u],0C,*M? Xԙ0ja,/Z:O QRX_l&Xl|r&jkǎ;U a׀#{evYG ,ZG y=AQa@0ֶ QEi畬7`,A; QI{ub
- I!/[T!p"MW#+N):xra0\0OЕP s#/T(:uk7ӊM3գ0f,
- t&)aHRظذk<dJ>Y.;vq?wFFcBy]dF|I!H#EGZk8>&-eo&(D$tP*޸bݢi360QNk$ On3 )XhTDE b3#D3nEaOeeAx >{g<9)"?n} ,Mx9Kw\+% U0g#daC?#X{bs@0hо@dX]NL<$I(0M d}^hͬ\/,kd.\~nprXv ywdIHq1!N)Kg.EM! "a*#RЇ˰,[I H I֑M f W!}Ɓį:ae++#ʜؼٝͲh6 6֘m9߹Hcv#<΋hx>]Lt34Ӟa皞R%%*QRD"@JsU4'{k.hT^c<I4aAB^1<vW8E:J0UQ0OOz+@"/O_S#Pli<9aLihX1>02CPBNuy꾜$D>/YAZr0̸0 !aD^?±9|G7$FGp %"0X_eWX4b&)ƙ6-Dٛzf)wp)8a!$D¶P/\ĈMXѭ3ZW&D.AAZ*!:}} ^џ:2gἿF7i 9?%#|L
-GMg1T?;t|a31p>/Ql ` $5/d$ؠ2K"@B
-q&&C3 B;jSRVjf*a+%JrL=?С)>U">UtXh5/`<|_L1C~F_Oz"lixr9vBP<OqFa
-R'*xoՅ2vb!!tCx<<Ҵ®}XKpy cلpm!5a$/a`bgbdRH>/4&A_٩ @Q|j"pL(Bwp
-+j#HOVDBdW6x#M I7R%KT^HD̵fBc1$42
-wz]Da$1!a~Й>;MqoმxrBHl~pEKaI&bXE_4NdCaFƐK& =#f~_= "ea.?"S2="h֘T&EQj%K@ND,݊ňt'7v|zpx
-V\fS|6 t_ys2\Fe(WPf/ s1^R" 7q2Y T}9OqoXQ$ w@["a6L1G!*HnC"Byĉgm.Q0Ee-ޞO ᥉x̃t 2O?D)M| & ')haAQ(f6:/TxxOb6]8z4yW3p
-
-F^0
-Ȍo2iV"3QEf <S2V`CSCq<1{ z0U5>f,Xe?!N[Jis!h_u3.njy!d&5`)-ݐt-U!a8׆I3 2"Efs |*+h w
-1CVWJ3^ I}
-Ev_5X Qnj״)3OF0@*$N]lT*$!l̨=pc>"rqBktB{%:7f6(-5yaMtc IIl L;fVdnjaNLTcR D<T0Tj]L>eaC#&aæ␫&Ňw:f;1nT$P!A^fcF ᆤfYl`2eĖjNWk38\ρӵ.;D. fߝooG*MQcFd SRGm48]6OCabq{89_;uS>anjKA> I`1;0W*h.cFz=fv̨0njD@wt$1T"mN<–H22):f}NץB棰[(qғ By8U'3RgX?9T=֡ܜv̹졂4 3
- \n1`K1;u
-43FS<N"-bIj dL(1 Hю/ɓr-lpCF;bD2#r5f΋j#K$UvMȌ- LiIP  2CHɶ/g\qY?QǭHQy O7)bÀq@~_ĸKx, !3r%34g
-GW?$DW EtBnl>
-q9jJqEf䦴#zlEfؠ Hʀ kEK2ǵ4Ʌnd]4dssV`!3FQܢ \y'Nk
-F/3p.NZ&-R+Xnҧ-1ku2 tH8p
-~1:|p%`Siv/Xyp~ . 7" GD̹[eFr
-QsR_~zJ9SXIeF׻v(Qe|Z"֓"AqVG{Ϋ2 Td(HYeFf$p[J "JJL3JȬq(xIΔf!4rhTʌ:! ʌj a2A5¸Љn>1]eF V:h]EVI zEHzkA*3^CU'o,ϒ0T24OFƪ$ ReFk],A+3x>,3G2#M/2ätoq>k@T0yQՙS
-PM8ca"_YcGհ :"n=x8ۜF\fp[} a_Gh8gsҵ 3zacM̽[K` Q.@-:5- Dh8
-
-9ֹj΁0C $EҙŁ1xaBcND΢C\;ˌ;Yfq $fOa=7 44#= 5.?ߥe,=,L0݈;?X6mT=Чޮ%X 6J2bn#לX:+
-'I0\P>o
-f(ÈQ٭,F濄3h[f )l!1XjjecG8Yjw6Xf^Y0%Sa`MW/U",vHY<P:%k#n/XPOlYfP'^YF];rϰYfkYĹi 7LY,m\ 1_rjЅ p&怆,:{+hQ9ʌh
-B2?Fأ*S&q8ڢ6`ʛ}*(@ {le/> *(Oh-6v74J %јõoT<AA-k%1s&8:k0..eFyMN2~Jʌ g#ڑ+}nO2/`&qבm$bv(*d8Cb?As`}K5X !hfF eԢ<NaJdҖ,$!夕PFArtI!+
-w8$;N+%Ñn Bp\tz-wW2*ӴC'mzrfsٵ dFҴ( jQf`эVꡛ_(3jhj
-M*W+3 idE4Yaca.mI/Vvj'BUP2S
-KpJk4.7Tjzy%fxe q_$s{re˾]he! LD)+W:7'*SA\al?P#:eP#1VWf0/ _qd+€pE
-9%CASڰ*3ZK |Wm# Eb5-cw*3ʏ/mMhQ/X0 l6,
-)QHV?|r;y]Њz<ʌJa)cm2heFmsV2JUR+E ffTy⣆Ci*R-6y5h81|8oYfC{Y ,mR5
-nPgOCt*f9嵵4|VfSRҧ7
-
-9 Mofg &3̓qjcdv$ js<j2tLb1B<P:t4ܵևuua7_Gi')u92sOftbA̠ޓ#hXSE@GIJFMfx(RMfe5rLG<1PAUXזhHm6
-t4
-T̘%8 dिDUL7ɰJc@1ѫh
-|MĜ#4]O`ݎ7:s ͥ8ױ<14MrQ ]pi Oni2< ߉ FwqsNJi$i u>DaH\7Q&3X3R$oos#(љD4 vU lM*%AU7 U-yFdF7~:~2&jo=*ʌU<ʌA@/D2"aq-F Oz91,) D ,Pfњ<'BA\MΚԀG3'3ɑ9Ofry"Of$Ѿi `<[ Pf@X+7y@ /WM' Ld6iB$/aS3NbHou;cJe{љ+̣@ ˺7adH?'AA}T:bΓO
-j2Hw%3ȨwN"]F4m!OSp{G %paqi{]4FuP8C<x)-Q烿#0\!0Jf$Os;C2#i@dFmͪxWQ2c ]C|8 C49- Po4\|uʒH{h![0jަ9u])%aM΅à̂ P7SΗs@4C!<BWð{4En#KfdaaNd A[p&mJaNrqG䃎 a&ELV#/JtAz]+ɆnPc̨Bz6 ';lʼtU j-e't +j*053c'wt=fr3>u~d>q)O66 0#0`P}ZF1ˎ s_d%Xꌉot2Sl|7dLc~!3޲{qiN8\O? -tX͞sS2c- SƋ̀WMK
-c nxldFrs` UҖɌg[؎]W0p@o
-]f?oLx݉=rpkڈvdF큱t3Df>Yӿ
-'{^!3B J
- m~HF*
-x**RG"32gBs, =dV{~={
-]ֆjOYDȽ> O @:lO&F2ê&؊Hcb:{LAjƕ/hbqDg؁ܤLfy
-/
-6()#E.yfwZ[M[NR`Ɍ]Ob3?<U76}/\)DBa{"%3v/q_?/jU_(bɌ"j5%3Z'#TY ~ يa?P/$3}ZF/e@hS`ܪ޻bHZX-
-&=D
- #3̡@աmwqE҃T->/x&7e{Ǧ%\JͽV`; .@f~␇1Bˌy  xNEf\q|VTa*;1bed<z3*X: C ,/Ū_U1c4bTm4૙cHaU {*cg>fLeHufc@I)Q
-=.Hj*ִg^ҭ2h+0^_(uZnr/x g!%n9Ӟ ԛjʶ?󎙏nos{zHH{j+_cO<P#62$x: LDTד'ppZ9E̔ۅ{dchEf ԸPP:{+|W~ 3+a{S8-{AX {
-.=gw](:){Po_C|lzZ2{(`n*t:SciK*(T1BNz3')j:TAf䙜(6֗(u3fq{я6wc LG!L15H(ڛrl>ÆpWrYVD2@jP|ɇ/!c{ʎjz8mm~q\Bf
-}1`{V y$4dSilU޽~(kA[r޴НZ UZ _-Ⴟ>Pɀ*J}ؾ.OktT `7_?
-ԄT|l}R1cp$3q 4$T1ci( "xbT|E{XhTHljr ͪ$1`Rޗ~Y7&bF̍5.Ajd-6J RM@/ä9ĸZA
-Pzm <1Uyh/-⇢G
-~qosǐqQeΚWn87uߒ~(4mP*'Z1 ;z"ZΑV3 ;؟.Ō:ĔGO3 { ڲ
-wPܱeH31e
-
-
-Mi @ѥ> (kAwKy >jpc=T7fؑL2[K
-bei_blXƌXU㘑s48ڸD!0-|f&?Ck4DAr{OtrLNWq'vB$SyO kw^ah0Oy̨pnj`҇#*Q@ v1c $kO3Dg5 X;f Feh+X$qTړQ%
-<!QOJVZ"z2zJs(+l> ?63`{BcCן0pC>m̨^T] {3J9@2$#a\_1c
-k|-b?jY{E@)AR
-~;q0T~a.00Š(xQ EDƇL @0>!nb ^`bk00`<gqNbX(V`p*1[F,i`x7 RbDRe  k<pTK71jɉ/M%\,Z/rZr/*un8Hŀ>nx6Y*$ J/ΪZBߋͽ@g1Q{a +^d}F/=/$h^"Q/|/pbB ] 6Ng(7.bB|څ徒|PAKH`1[مB
-Tn I-IbFR nbX/, c{rj+Rƺol‘cNtl%Xiٞ=}@]+A;k$I9Kf
-CLk(O|Cj'l(vgʄjaik2L}y[Yoe
-tANp06sѠE mJsB!%'.4H`.Mi
-K,
-%HeAhʂޕ&d!dҴD
-
-wڍ*+rxe!+8<MXOV6v@-"6
-S<JB?XAG{= V-PKD ߽Q󞢂X` %jbOZPV"j[$&=
-fFPЯªsqM"Q{ļ׫0U<7jXurumv8@o!Bq
- `cUfHWE٪z=bTq
-*D<[$XN0<Zw*5WQ a<QhJ3Vz*"CED֖3G
-T|T0 {ܽvTe QӨZʇ`gT
-#Kmũa7
-jj@T{ڟKcfsJfJ* R)8*x~5
-pX'*,d !kB*i
-њbAcRZWm+?(oSHu\_Aǵ)g{pNQ| o;9>YQϦoUS篡
-*6KhlZ
-ǦR0X)ʓ?lQ
-Pxjl0
-OgWR,TR0C@H
-`(e\)D) QGAbZGڂ8
-^5e(ʳM6ߋ (06*
-:oEQ
-Xׄ?܈$NuȻninv`nR
-[΁(
-zfV@ b
-J
-LCBW&t Bwf=&P YLWxB&4JBL: :Rte}]*@0?kL\D
-& :Vswq"Z_%Ke%lm
-sf/5K8j.akOnG?%tt葝%gtG3;)W܂%J7:HR.)ݫ3Bt  
-t'-ԅw>u[F%X.nYtK<O, p`(%%IVݱDqc*]
-kUf.V,`5D@ s} 8
-aS+B, `$4!WB$c$D!
-JyAlAH=,@DAsV Wz΢k awcUF=}a=
-O`?ث?)߲e= F
-ټx'aO*ao!e`ZP F@z ,=}qpW&BOz` hk _|xTz=&f<hqdnyn*WpXäGA}x2l02aLvqw
-} .7K pXzA
-CʄAF f !A
-@P/xw&\' YvAe)0 q""҅tszpoqA  \
-Gouw Z4^
-+8Bgt땃B cWzSnST_~@&d<X X}Ap' مo}'3@P5+<.%(p鷯Jg^a+D
-
-ebbfa0q䞓++4#jIh!$`BV 4AQ81a9GzPG,kgsv<ef01&0b`Ak\PTn`ZnLgrFĂp10vh` 1ؐvE6ܐ:؜bݳ  \FQ5%Fe<e~cK'/$[$Z!rpCd'ZZ"{˄Ϩ0!녛!j]S# N0' 4"UGw/)~VCU S 90~l) -8-^qR#NKؐ4*W[;c^CIb7>0lp !$^jj-1c%f2b#U]=]D!hl4B`:vCK"!0uCJH0 KH"86:8 `,!>`Fcb#2<s za[ wiv5\42Ls=WBMWdv]ɵK%CbuK{e!۷viW[٥]Z`Op t/smhڥCj.9]z\HܺL"[=`إi:$"B+ćL"D߹sеk`yz/ϭ]ڇhJBn`d(`gW]y~o;U>__}ivGjt.\ǭ[k$}[?~i:ۺ㶆Gb? r]kO3>]Wnkiו[viV???~)4pcvwᙦḅ_irgXؿr_p m_ne޷__oLǟ]xvam]mg~_i_=\}a˲ #4n ׯ}Ұ[îu {xk{_p˭i?1c/#1?؅]<i{X
-ޕeV,L#3at+˱wVaϯgؿsҿni .mp r p,
-o=0]m #aa_ {xGza9neX_@z{o_~~W4:~4=K/,ïeK׿_$var]{ڷ4=M{W-1=yvu^a_8?_c};qҲ+11]׻nku+_nM_W[ׅnZkX_Zk}c_Zzi}uivc=g=,~n㹦g?/[n´뗦ߘGܖ~gnvis-nuMom.ҴKÞ[[mkڭcwr.\u׮w_Edۺ W״-\oݺoî6_q]q<u~Vvu~vk׻[sq,îҰֵҴҵ;-]E\ޅ]yKm]-tz}]yn<߭aauiq vw~k8vc=3<p,q~unzB<kح[
-endstream endobj 32 0 obj <</Length 65536>>stream
-n۾K{<qzO/u_?o?Lo=>m_ӭӭ[.6m n4z9Op3} ˵w_][޿оrg} n\ӯw=<˟n:~[oggzawr{W[ߥ[rL q]߾nڻeBݺ~*u=v_ϭʭ/a_V?]3 muߺV˴뾲춳_ٕi~ճ,2ӱۘvEVoeڵ~s;ϲ,皎}v ov_k_5+m}]!o~=e[k8nLm s[s[qLӱ|O1,/4 "q~#[~:neXzkyZdz9nv[ynkyvenٷ\mv~kߺpݙܺ޷. {׻֥k]Ǵ Ls[ӳ֥XiX~oӮog[O ~[u[m _4=-MLgY;rzڅ+ܾ4 ׵ۗ~_/u=> uo[4=ۺ[2=WױXt4M4,߾ߗvו~㶖߶gmYvim-ߕznZ?~nvߦ[ycwnZVv]wwc:pK_ݷk~ݖڷم+4,?uz.Mank׷.䷎gWdvᶆes<O[ K~g[v
-n;Ϟn؅+ȯ/纥tLKtZ15 oi]_ocm>6m6]B LZm<"]W~ >aV]_~gZZp[?p7oΰ ##}k 9L Rt?\2m7]8BF ]BdW`` !M r,!a4dU2~?"˝=zE6pzEDk˜qV7q-"CVES,(
-:56$nc[333S45$n"nHI\HA,xN0밈k^ NH?4$^CjC9f`E嗙jHAH*r2*ySf 2'
-hEؘ8P0zAvI Lijv̔jg];B+VQ`HnS
-R=0chs#$BO(q8N숖2B;butIl ̎6m̘mk<եFܒxˬH*z fi)2zP9|M,TMh5Sq_Y%@
-= *[dAL=}p M=JdBN+
-CC$U
-jHh%MvN[xzGK4BC)dN…/ /2&1<<ƝC+>(hĎXAPf8؀* Q1P
-zη]fEY*)AaLjlFuJ iA-V(5o|vj-16u%[4#DYjC>`jGN tM rjmfP, s'a⭜#d&
-QbZ>4G+3c:殂yE\²
- ʸOpS77bhesh$FR#S#]EĆә^ٚ9n`9ՁET@u!GJF1x2x!U]㞓;g|Xb;R.H6Vխx̫"Y
-`FQ($(xQ_c#l^}vWx^b1(`Ia!'2#\:8'nvY  $!mOiؔU*CKq1]Ҟ閹upH7A!!N̨@]@lLY{&΢i♯lF ,P`{<R秄 '
-@.2BؑFtc
-'Y~B(%v3!EO Bc]t56$kB!3!xP,P)R6綴ij4U!I 浶;5̍'Q1d9(vk.cTKqfƴpIWvJS]TM-yXI6sS輦Đ-K6A/)-uXyPD@sKăupiKȒ-0g{\tbs@#qy6c憔vLq3V,sL,wW̖TR/A3)2T-'P2+&xSAN (,YO-1#)1Udcf<utT,u3$3CZ@'EVȘy|MNW h`xadp\r'B Q)7P^)~=Wẗ6kQfE<#C.p\Ə jhtGILMƠ!EFHNqᆈRCcpGˇ䌬5#kQ{׍BÇso)ES#T7QǀCäFSIMGnȩ
-9ba
-h̢%˖-3ljlj`')BWJV-o Zw=gz+zINcgv
-h
-EcK@w׮h3CI9w/)$2o]W鈷g]9bnA 1q!YO`ŜDľnVDmԗ0Zy5w홍閻، \DQ2#n5"XF=q߀S0GvQp+1omnz+MzN=23 =
-MbHSYНk_SWA%)a/N vJ`o k"tzerHМ9wmhJ}")s*EbP9p/^2G!ZD*mv=&ȖMrНvSp82}AuWιnif$|^wf-?3g-oVٞך.թEpR JȡAԤCRIӕ*%m<Ď58R֎ 5 ]bFەcbP)wy1sB:HfW7]E@;MO4ǑA3LQI+tHؼЎM ,1SOI*kbU78irXϨxˬhxN)M&?HBX12|ЊG\CP#\FkYR7y 9BN5pII`GRِ2+!V} W!GBx
-hz+*=-FqKV]bJLubQ0 1$t"<w/xK{Зt픮ҵ[zKW/zѽ{^IӖٱ)ѪK%/vr˽EWd[cbc!8ݐcȜN/GvR.3'isw:%%a$,xݦfխp;1u3srP#\(W1ȩevz[S(o@GȢדc9+#K^_`lĜOy5m`F 3G:Hm:%3 |EvD*j)mMzlG[F WA5945e>)~bCh唦VXL,7C 97>V`%T5ՈMmA#)Z64 HX(ڑAs]ihxU`DPq 45lJq̢uUxU1w]/56:<^T_1)ewl[9f[)1s[)y풰@%/̅'b]9e5vI:=Ix{?YڸԕӮ=Z.v~:8Aeă0#[Z댬;:DJИn$%EytQȗ#KG?:)J; (nlőZ<u `twq)8$]Ȕ./ )oر
-=aS9 M\Eȧcq"piup@Χb!jZ5䐢^lHoyDRWRғH_*H)r0SjKA\ xl;&rJ-TנR6^3 .R,_YUҔM4#c%`L兼sl\ggud)#dAjvk:g6C"X5<x)9o6dp;[-.'Vf5;!LnHH-z[Ҕ-:5K
-R#K5QBsnG+֑ET%q]ωUيJzf!HjAK&8&)v[9UuO45u926\9F۔z8`Et j^&J+E^s'qAu)jJ ~ .wWP<"
-W\G152 Ae cKĔ!sj#8'(ĆM<@fv/2JRU5sbUD<_S_4k#\zUQc.SFw aAwΙn?IR'QX|])]EPiLY8ݺ1zLD* m8Sݒ,ź1^c;f.-IԞ7U$aKI®Iځ= 7U jՔ2/!K35+zKij%A0]Vo=&Kǜڿ^`ƨinK=e_b<[r-ϹzEU1$GS/TGi-SS`Gb&,z9Pȴz\%T%w2-
-!ł'Hsag|r9J i%l $l lIGx|gyzI[k@;\3_(ZoiuU
-UeCJ?\fE̾rĺ>h.-~W/3C 疔|O;kFBq|`)on4G}CfulIR/\4 6sc'T'vWXIѓ]3fU5T Ʊ5oWiYZO$7-w@DĄ ybYEҖxPl$'gYէhzDLi];UXƦ,X&pp4U Ӟ`3Ӂ2Ș㍡dF"yhaIPq;<kb]J4-I|wxE'4*x:BÇ"TZf3!#XfTEUB%z˝[4+OP-..VuTWUhETR~aUDf$==،B *YO|=[8RlfLfBR -9TlDP%lGT3b+x\#h EĈ6JbEQ]!Uu,V]5'g[jG V3>
-T9
--~t?μ{^u\-ޱJA>S Bs`QZM<sPy57',AԒTY 20N$#@h@GFaECLjȇȴ2#{ҹ-**7 +<6XӴCy s!$dGSZ2咤|IR?BNHRc`/ND8AQL@ T((x={^ihƶYcC,xR/ݐOӂCM%OvI={fU:c3N_=T[:;`jê)M~͝w$@%XoB
-fE&fLΈsQ Mg-dUI?@
-W3 5ĒvbV*)
-)ܒ~a0LkB8RC̐ʌ85P
-aT** :' 7ɬH%qXQZ?
-a[
-TeglHQ)&ָ7!]vWL3I"A6{$/q
-~p?
-2jFvV7BY5.l5YK) _'a?Rªש)inDSegG:̒b0]GRxlcӯuϙ 7-eSJΦkf +F{YXFhH_C9e*>ʉt+G!*tTB7PĐ>Jρ
-@8L_V; b[~RfuRm$Ez5ccɜ _>1 cB~Kx+vW͋:XNhg& m.n.1r
-5ȝĤVD%2&7[M 񯫏??Ps A sx
-Vˤ^HH)˞uW:z\'?a:hZ 3ZunS'-f M"Õ픴d9Rt%"|t>Nl}"qA.b)q)(YẂnb&|IwMZ=*#Ҷ-`w:
-:kI=78]I鯄vx(wz&SC߿80V-]̚P J4vU0P$0sT(Y41;QﵚF"{)WgP4lU=
-ݪ1K"aBG}K?ECd+E![;lPt:tOaY=NG{P
-6>e -_ ݐ/Wѽ:6|m+-)3\'?N
-iJiQO\tdk۬FbYA+iCt7 bp{J8U/]+y 0zjP0.LU.fUBt𤣠=c9::5'\{*(6ѫ~5Q;'wZt{&o+hP v|c]pg/t9 ErЛbY% _ ,Bv=BBA'R F9n־A?ר[D Zn?DB )P&sՕ(qh_zJ Hfѭ̦cnؙp,_LC]şU }^F8fu=J th **m0/fSueL I6.*@rVU@GDՍչV=2an~"n0Ϸghun[L0!;yf~:=s(c|.lD M<&}N<JAa$ ^o%xEVD oc c
-yKW}.:ҹj،Qd&@ԣʭ
-PNv:N$'^|b?]Ey bוVD.^F?79F:z] 'aΐ0+oaole+@o<x,I3 7PT cgԉ*%qQ"#\/\)!"3SDoYvnn% wa2,inɓ,x!I'sBynqWZ@޹
-( 38MFql@8?#
-&TB"3z:1\L*_rWVgYXJz.׻ZI'V~Vx?v:X#] ^ܘ=ۧ]H4pMA:"Pv4pnQ!LqEK^
-n%baI
-
-tWAtv:88R^X`'/2N6
-0Cs£Z! cѵr_lEvh(}7!}=X 2GK 4)I`EЂ>=0T/@󠘓Eb'Ŭ
-hn kK/(*uKnH97َB˚pn{&#fe q^ドL%Rj|O#Z5l\>BUD:&@ų 1:mT\ <n0>0}h
-Lmqz0BhXbj
-UbyKKbypbM^ D'k⧕4:$
-O`]nPYQ=4 M8-K>(.'A~tlD:Tbm0Qvf-o]ʤM{I0(xVāAK)P=uZnL\9.9˽)[sl~霺ãKt4vJHkws^SFzWpء{X =Bs|eɟCV:niP`i<Z4ƣ}6TB0O)1
- B^vӴ" YXL"7 ]w[t+41PR
-@fPo[ \l3\0ɌLDu7>צ"IRt
-%crEϬ|K؟l骄/3-DqzE;43 5>m*W^JR^ZKܾeA26v"i7|K*G9pPj
-l\A(D|Yomͷj9 #F
-@|7&ŠH^=T;Vg[dIHGLwJʙ_q>__KʒEC{`eF1< + "U >x ̇VNE dsLc(΄_VHEt~ẇvN\
-gf{_s͊qB*Bq~T
-ZAq7}JIߜn=8ҽX;?‹. n&>i|1-n3KR-W$29h\~*|'[lXslTVsks[e 2 i7Ѓ:gzkjT+ڪ𹢕
-@*
-XY]V1tQf]۱n(L3$z`\wgܒl=
-4I(K*\ zT@:Qp7e;/]׿ZNj3݃ou2$l^@oUSA%CI
-KE]w_HU)L9pZͮt]:Ga_&i*ђ4&̲w
-O C"ɵ
-btoQ6G<-cBԑ@=Fa?:e^#H}8vkǣ ZA'7cfzFmኋ aڔYm1-^GU!aVμ]lnekJ*cX|5 J[gkpolOא60r~!s$8<&[dzmP{[~Moi?wf|u~ȑLEPqOKk?hb<I0đt"dp/j"/eZdY+`#%ӢU,~y_Qa;ɸ"VLi;Y-q.]i;k,,f*$ЀQC%+!Ik Ȃ%󜭬]%V|m̵]E> (=cq=o0oӖ#18Tv79lm
-cqA; v0Ap8@ ,S~u4ĩ)kM2x{ 5JVC
-'ob 2q1ʟd{ gϐf(X \H#DX/$f;?a
-υŽPMYDyW@>oAWXq?$\GNs
-RڔtѥmoM\6T
-^kvwYZڲ TߙVK
-pFbyBd *15VJ5Ɲ.guHBVQzg>
-:`(ᘩfܹAU(`Oŷ~Rz}+{dsc,8D1eJ"7jvG}?ѻX/?zϭH1׿q1YtuԨ ^ʧz$-~%pQ PR/|0( m ჋J:m8*R4ϰuMyYCt=HO(_i2xcc oT9ˆjA];LQlm}P$bWIi>9Uq*7D`L,t8ϫ7 SenI^#qvRwYpcVޢW_q[k[ׄf( 7.otԇƦdMKkcZ)`9J둯,q{?Z aQ$nElq? .knc"&nu}Pi)q6g$QQ[c|;%A
-eDDx9
-#Ws
-i<UlEsD `Lo @+ԡ~"S4Ux\͖纆]dg(p!
-z쇡{\Xs&^0׿F a0!5 8{0ŁC puT(FmCSU@Zp) î駠Ϭ$_ (6eދUq W?+unlݣ)Ttw cr2kBlìwYPK^GJҾ(dpY d@0Q΍w
-dᏡD A,hҪeh jm-(
-ΩP?1`oEN5Ccff=<05Kڍz4{!?C"OoH/˱lq%][ATZ>*Pa*
-tn?J?,:Svc W臂{Óۨ4H
- ScvdWLCյ|?mhOR:~nI5 éN5Hp/L(GXMf(~ɓҔ =!(*ACɚ'5C+4
-c)qFAV^ϊ
-X9.-3Wҳo82 1 ˊaPFD o'g$/-
-->,"Ƞe'
-ƖӉcu),k7gq`''C^rD
-X Gtyy4JL_(y;ö
- yiV#I(-U?V3)g,(q<WZ#;;?Б|<;eG1Ο1 L%c7O:77'+s1_)Iv-^ rYEa],qQ5-~/<|F0zucZv(\ M&qW΀ۿ |l%dTt=҉  w1℄h wW[6$Uf (68<`g-ZU:~.Ң>%nPV| Ph~~Jl
-OJT XSTY
-CL\F}ڮ͖quC{3S-5<l1jkWq*}2衯Q >~7~KX,F0;RUFO*蒎n1I"֭y0ci#'ŦXn+G]/I.6.d:GU
-qBK߷T9 /{ؑ ~(s9ڟ(&[r"SgzU2P>H7٫<
-js4D/d/]6ϝ 䜐;paP5w_OmsjCqd:.6{:_˙3%DҤT?Bܗ~l\Hl$K7TG\4z{dc;^r'G3B䙜6
-ʐK& >0f*`0`:71i{1j; )9XVby
-7=^kyQȅkXZ&mb?
-iab,ɘ
-ndXb,3c3i21ÅRl.ݞCcyq[**DJإf{'ؘܘ
-R?wcezE#L5cx%)l#B
-3[fٷV3 kV3f ,Z5i` 1Pzf HQL}ʙ휉><sYMφbͰ{:>˄óP֌?CH - fpΕxY]E# 6~5
-U6:#j ř/!jkF O|q8i]
-|i߲"Ӕ{mՌAFN-eۮAj$_j9 v)˧fHYznFXl/5h7M yjF|4OL4@SijE5oӪLQ[-z4fNii6N1.~U3yՌ!߲a:mǓi i̾maK/%ELZilZ_8mG/~i!qZvu'kQ:K9ră8MַpӔH0 ""npO9Y_(D`q5
-g?ެZtvhhO3iV-jӌIڲt5
-Lk[&5ӌߟ* ZK+ZuLZH\˹JiZ5CǛE=D 5B|M~͠lTzAĆ
-j^fDI/3`F 6{ X6(<lf)j|mkDoԌ[ S(qlrCɖv o-¤n۹u&Uͨ P-Dtn~7 #ț{՛ioԌ(q|fD7L}C1=5ct󕚱 pfm su|ɤfN),Gh(.)3"n5>8cŽRy8qjFry@H-p0I͘gF=?α "(\ݕ 87''ܙSj\:iN\^n&jIۡfФ1a鉚QjaĘS\ ʜ 5m2>͐5%&Cp$/Y'<sA3W3wi.C/ݜiF@ssNO3|璫[C͸~5# f20I3::ylE7G7jn&(DS:qKV1G+ThtKá4MK3o^nPbq;ܦNgj SvL3w:SfpNfHYKflM5]q5KtF4cN3
-ƕi ,.4 DSxA ֘fL[:f"&f]RRHעtåf`Wӌ4ì_if4d:FH+5cw͇tQ̨ if0]6md] R'S/=# Y'\Zwۺ4 Jkn^?_WC~3‚NM3|4CK3f1ͨ#{⠬.]d_툀톗fdUO;`6{qv1~qx;'wi,irPidl~v0pw$B. iR
-A-_L?~Bh i2JQfhO3 pw/'KѠt8wR<P1bO3 x˸4t"RgӀWRޱC CiF?
-/ xxBƥ/xNxI3&ݘ,Y;Y_\zA`,.o4üyʫyǤ7o9/GyfF瑿4t iFj,eH8jҌalsޘ_8
-`
-yky357c!=+>\as}>o4|9#Gn8,dy/G+&L3,x<!DI~㧠ךQ7=]lAo qR!hhD342"' x>hAkhh zOvЌa=8fL̐)MU3c2B}fһoXyό|IO36R蕨!KG̨hs YcǗkό3{fT>3J*^gl%b谞'Jz[zD FWѷό)PO9M=#Ќ0:`}$>'h_0eO.KwŴg_{I,:ܓ!͐{c 4y?/hN{vgnhohuk4$[|5A5(Z>=||NH3OAn-4#E9W3Q!D@جʔrz}G3h(W<c_V¸!`0^y}}rɾLB S%
-?G>M4~nE~ _HPF'Cf$>DJ3mcYg4~G3p*fV4#_z_? y1!_-:QYtd
-A!,'0fD_S@R. j BRR`n
-w@
-ŀ$o@E
-^ ܏ Tp4F1 3T?فY=?PahF-,͐ޒ=1GFP<;ߑUGP&c
-G1HXmPN>7@/1[|i=f\2hnjah1zʣP||<>Hp{g*1ˎg%xcͨ&`|"cF$h/Ll4![VY;EL*٨uK,tqt4x1#3`C'\E8LR0Yp4Y,^ڌ%R4ɌfGQEe*3:9eF^ f,CH0i5BˊeA>w$xyeƌbBR T]
-a
-UPZAU\{2²p+3dDA` ˕xSyec$1eFtAPڪǯۄ(3T2#q:=ǟzO1
-0
-h=GM_6S+3 N_AE)"-6Mo88:KgR"`Ư2Apŕg'[/W08AнkAeAl[Jgs+3LR㠻pb/=\`e=-3BA2?Dzd+3v2` s|;ޖqy<ic
-k;` FˌV?|"aZ~XfnvrP4Yf̄@P^' X/ˌݮ B"xq(+3z*t5@0c.ˌ٠SsYAz'u>eF5+3Azkʌ۰@ЏtxZ9I:AjE6,NcA3pA2CFDꟁ[xy2#ٗ&3&H+oOmRH &1 2 
-WAPT$z4m<`\$qӸwh 8̠<:2Pd!oAma1N. @\ ̗̐ v$q$bFdS%3hy-8dw+ hbO\26.q|x-Wh}@2[?=!n#Qf9eF\e@oWf p&m~)3._`2~0e{*S!d]2C`@0/8/8JpP&Γ28+eʌPPl":>qSf 'FQrOfH7XT ~Ɍ@PnA<aɌ(QP-`ww [2# Z\2Í>aAp1
-Of0l'@!Kfw:7Wu@pzҹ\!3z$ji eY@ͅTTTmL32|@p'׽"8hPZ|ۏ-iXA$*5#34jɌ&O%3|^VPD@ˢɌ{ῸɌ7tHf+&&#3_@" :`՟+= Ne"3*Ȍ
-BAA2A~dƫ&%nEfHnv!X닑ez8S} jM@"%{adFH]D-aluA;`wZ>'3YrF!i8 "Ϝ!iZR2X74EvJ2 ȌևJEK
-!3ȌȌ!~9D)Fs.'%"3b*<dJD)aXχhۛBg\p-NNEN@1}w}8WJ)5"
-
-$QSDi ۈUzrkcJB륔|(#r-E˧57jq)M0=ůˍ
-VIo?ĉW ͒&J4m+qێ4mzt_{ ^s8S4_hUYc 癦)[
- p'՞q$KsLt^%uɬNJ*믖~3<?4A.&9OL}>2wsh,;ϓਗ਼ir|Uu|tTCd2ϱcGIlHGtvWSE8"K v%P{μ4&编<~G`k n2{ %o9rO"#̺Z5[T1r}q Bq?x[y!N.6HfېVY2Q**s2j2\
-"lMteݸ\ ToQDt9S} Hiᔄr[Hrm/rf=~C-ׇ@bp.)Yŷma$`n>ViHtLUn~Q\Ԯ:Rt:ڮaM io:elI"Η^"՚chTPg4t(DK7g7ߵ$y;Zk&1'5Dܒ6>h/VE l- #s+i~8΀qۏkD~#"Rs6Hͷ<.l]pZĢUHn:q(^]aB:}ҘE`k!/3Rw)lDU&R;jDAi=vH슥%f緬ᖐ|wi~Ҷ?ʖa!$;v>.fؙ+UF#%!h"ћ.-vjܳ~=߉c6p8%XlyIr+G;B3<dDK'7?h-ն8UOvn:yEqfK\tלFyGW&1KʏSXLω\2ԻLp{g:ns*z[j P&G Dv*}YQ~)1..vM*%H4BYvB{ќ`STH얳Rqn$ԎS\W>;J 12n:)|*Pz: 8Kl;D:e>CX[%3 irZDrf"GAј+7פֿ}sUE]
-&r`evT"Xbj'פXĐi\ 3{mUK*pPH8"7>Vq0=ǻe3ª`&٩G' J ӗMS ֋,vK$Ȣ[v.C(U&S ceonm:D> "a Yv\3FKg iOH|tFDQ*A{ 5 4Jc*oܺm%22ޙu$fxd$QJx(}Eޫ-wdU2cR9jW;N3::۽p^we+:T+nr(ԫ51)Ε2 *GP"|9"|݂1r' NoV(mm؎*QR%.5mTVZ )աJdbTM#2Q8-kD^[Z2}n|26<d \-4 EG %x$
-
-H:V x"F,x"0/ff@ͥ LRg5 Ihl .6Z~mpP|/I
- B
-.lؠ"
-7,r@J͒#nGfB|)G;0:Nl@lؘ#@8&Aǩ!jԎ A}M)Ib!eI]s'YUf:EZj%Te*,3%J 38' ~(? M2)H$X*aNeqX\Xe%,(&DN 15 LM
-EVQXq\ @|AZ8dQʧY(Uȗ+UkD%ŖPF9$E 0lDaB8aب@a &%Db
-
-].\FTnӤ^6\yNXj 
-"BDlh
-4x@Ć-*P#FqDh!hDVy |Sg lW*>j
-Ad#&l@
-Kԅ$6  BDaf0pb8S݂
-ؘ h QBc= l@)ԡ/{e22I;X1`ƆHX
-8p ,6B|QcdMfU^A-B`a4*Q1<Y0 /I(
->Z
-0A`b4 IP9[uS4eu}\03Vߙ*Pu$A 3
-6
-yXˮjSQz[9FbE#4&9ۍ8Lpa
-6H@AB .P60`p"ˆM/.E|<W
-(ԋDJCɆ7&JJt
-
-(
- 5ہ~|iNBi}jFg3󻏞.#`lD
-;$ZE?atrXD=Wg:گ5O,P5Rp
-4LC,XWhean$N.ů5$xM)fIk:)H9-D
-8y."h
-
-pDQ{fqCi DB06c*ך!Ի'-ۍS~IYuxCj@j@ !L`a `#O=G
-$k^BJ 9[@O*xV߯+TY4D@وd D
-0&
-t r-@BDxq.`t`RYRm֚GSl9e滆TFe-E 5B%4|8b
-eFzWcxU-]ƉMNVg (@ P *q!Ë$d
-p2:K(Պ%[E:k^s( U=I$[*rQ%2XWk)hNPc 7O 6GhWZZ/ch5aݲHgxA[\(& <yE{ѢIPf!N-e
-4ꬄCbk《}D*3 @abUeϚ=뎲Բ bRgˡ/ItdB;tEbfw-AF
-qH\{/ +|Ǜci]!}oQ}.Ԛ-ѯ&9 %wW尌sS*ODOX Z[xhW~xeYQl!V.SUHlu6}2
-4"[b_kOqv,7Q8[g+NuHU,( tSаC3@)f&zζM:$-2Y^v%'=܎9Q(CJBh5gzF_|(.m7>'f)= OD9%5C;AF<O8=|Zg'.U[4~x'M:Ugt 8B`aorhz,p=h.%(*AJ}§:`+YOOYdZlEB ;K~瓦/l^#v+[l*I
-rL,MUrs7L>Jfx!Fi9^f܄ֵϔ7Ajqb`nF.΄Kj[,,o*M0{>M*ŏ nB
-faz'E,Ju=.>]yDPKN6|apǬ:O(E17=2/;?< @xl=MnҼCÛ)X.U1
-:^Պl$~sJeY4r@* !nb;B$4rJLzGٮ܊Qb{0S c8^%= 4Nc'xJ`qψ˟(Hz)Ь1On”BrHz]o7-
-
-)Ϗd eYr8x*Ԟ>k8cb! <] f ^jtBkd*^ٟHYzEk:˲ Y5Vbsr`ᶼ~}7] oytA]z%x(z :Qd&SfmiaRp!Du~R؅滚~q^K>mˎ[I(q/2~D&T71BYzވ섩U'!Rcy[r:DKxo{=Y)r;
-
-烊T
-0Bg8_I0' +$Mքײ~kw"rI`jYse_~OW`o>l8_ fV(n !r 61^5X腱L!M糚Z]p)ȫ)Xp%ϧ)Q\T`H`l0S5lPz/܊Y{
-kA.L}ء*CAs꺝85ϥ(&HcRhp$
-Mr$J~9̪6 F^Xb'Rg%~Nc5[WH-'B;z4Faq*Zj,]jt|` `^
-fh]0XjƬ5=)s !I.Ouy!zІV3_i{pms_y܊,'bKmM;$y'Ohx +rW sn"鎎&-\ vM)U'hm ś4Oqz7()XɊeZ*^p,j-EɬEi%ֆa덀vȪ%)ס.ZmVlRx!drTR']p(|GTN5XwL] EsAjh.ͬ);[n*zXj-f\IS>GDw`e5HeB8UցgibxƈAhTTBՏ?`ۦaܲ
-PF3ح6=PhALj!11&
-;d1T>:vͩV, %pɞ- K\lz9ѯ7v}ǡ? /Rk/|`ߑ7͑/[6@ƨ6/\!],Bj8[tOރηQ\HgYDI$*K1_D vyH@u<Hc\
-jiG-`[K!2@rg?Ԟ(|W
-dxp~&|Lye'A.YP,ɚ!
-U[1f}'7A :F5Anb0HEZ+B]Z8R!j@EfV A!iCYuv_pݔ W/0rz0 8"kYk^
-1Ir=Wj!@1L܏yvʼn7~*.5"J(>MhïeriPI~
-Xc 8H2Cq%i1<6@ LZ)qU[+a`\
-כ B,?G𻂈&'j-ZNx!U,oA >BzC)>KfhZb&Ъ3й噅_ъM JgQdԪI\p+ʥ9 0 3@6,:P[ď
-2_#f}fX>1
-7Get%ɯ X
-mwŖEPl'zq2c@˃*7<ZpE,7J] ϶ lځv1>8Y.),<0aԠD.4# T 5Co =DG& tʑ 
-sIKV,
-W8ƂXǩ̃q
-emXd3Rd,I6JR}g$?]eV[ $BHeF~
-c0+` V
-dY<2e<
-ZXltF>[m=-[U,?r:!y(6
-6Nj&z6Mv]%qj,F0 DYZ ߔ
-I'^vJn:F]Y*{ d! kyC 6[!31ʼnbb{%A
-eAk.yN9BpbA^ 7Cr VF_T#-<GD@3x&NexlfE -ϐ[֬Rρ5YzI@za%?,Xl|)Ti3S}dyGi>aG"DajJv r-K
-@N>\:+уeCVjKV%հ6Fq1Bn =.ĎF\N_-_w 1I1Do0_.V144yI.bj
-<‡ X
-A (
--L 5[&p,Vr P{M<.3 ˗٪ R`n@LA݀J4HM8Et &
-Rؘ)R8s%z( /4:`>5>SHl;/f!*z1f? 1=GAl=$
-m`'L0H 7Ep[PZ桔Kᷞ,ww Gʬ X/\ϓZ_J3,.*0TBAQO EK
-wF ۞ &bC9:\pC9?zV!zÐdv"xeaԂqʯ4r1Xw>'D+7E7A =Kf$~Ui$08*ZN8)d % ?D]zY 0 )
-zmd_NR(3.{=gb v*Vjrh!z@b,e8~t 3'{(˱^iWj7ɒ!eMX-- /CϔZ V#!S3*7uDq?@ZovzRgr\^Vahyd gU::8qQ*Db*hm9گl<e/Թ&$i,s7N8z<r%/"Gs*mĉ܎ Qks!캯,ؾD)wy!8Oer7p :Wv \d*2B=xѣuOa+M0<ɒ qHQl.1,G~"rA,Z
-fb, N.\eЉB{jHj0$!r#46Kv<Aw-+y織&X@jBy,%Ni+Rl+Qk+Ph(*U!A,C/<>F NZDr.(WIv Rr(u8My^ r=B$sn]wZ;1R
-!Œ
- Ca=^m(Ls+=: v;3U<4<Id:g=LQaYELqGnj~ھ뱞bd
-W\C.J,WkعrŨ sC' W\ /r]>KS)UƢf$ԶP[ c
->f>Tl#Si#Th(Zn$Hr?kyv#z(K1+_w,[8oqj:W\uʳkͤ;"Syfc`Ȳ+ЊMp# ?QZ I.L'3AB?<0)"4U|> 8TϹ<zbpH"ZzOneX74]Ǽkdh8Z2Hλy<]h!M/'9ߒlۍt(HZhcIVl˪5(eW qQLNS~ǬaM
-2MWr<<x%7=<wbhF8v.J6p,'o+ˁ u0KݯSazPc&M0Xdө r+KtEE0tۭ(t-\A*4=#\ו,(Vm%J0\MHn@{e`%If-=t=G$=X#,}Z A~iQgA䲣,{*7@xOr40wCZY-YTK;Nx$E򞅰mEЫm '\׷nhX՘*S9[9!zQ O;IDj\4;V5# U_yߥ(e2X^ Ԍ錄t*M6:huwoԪ6
-0I<u-2HmQf54,f4x Er(7I:P7γ}Ǵixd`j4Zb}L3ͯY8~HQ߉W_MԲJa 7Uc`#G2ɖiPjQ=QQ`aEIi^鹒XO=j)7~ݾٴFjN2r;e#Vy=n |؀ceOz 9!F?Ei{q\B^vį[qHRh0u'.y]sNSn4t9NZVz=V#lN| "1jP:tZvtK@d3jtp;zV['Ś-cw>PMFUPڌ2 DžDsU-Υ(91< t>dfC皂zv d2ڱ<%Z -V1jSv8qBi\NzYi3۴N?j4jT՘Z]
-9ft2Jw̒=}dh4xhcol8wh}mDWFv
-^:#*F]vQ<Rtnz;Xʅy\8sqxu㿈l`ZP;^#Rl\-}Nk*h黖WZ|Hn j'[ÙZ %K-tkazd40x@k7Է4;snBHe7 $7jtÊ9Z/7$U%N, .Uȧ9u8VMbц=<PКG-[BWh2ӯ6(M4m=LN焸exL_,8T}wC,p'<_w7Thx(|.%)Ueœ#f Ԍ0zq<Zl:r~H w܆"FMQ캛0Z:`n.J'L/:tR|H]n~Mc Pa\-aDy
-n6\ufg+7ԪLOUˇUWz{ȱKZV-JK`GM ,˾O7ӱ[Rl0qF?u& KSrs6^E֠c䮠[vC&$"8DE)Ajn(r0qIQj.$skcnqJ{Ir|jx̩1i"@kO/) r<z q*BZmFi0-8 RYz[OvsVEcw_.ZcdpT~Yϼ0Њ^+ |Km$ǨL<HCE7 }8RɧY?(e],W[jG5˫ZQ @VqalέU]P`>Vhj4b!8TaBksJu;qJCN#;P|\rPZY1_EW 2 [
--&RN
-j=9.Pu$?d
- [1'@ej؍Xdvo˓Hg* r;8I^yKSe"J*4#t|2anq:={ѶږJtGj\y}t6;"Lm1N5}D 'r}+&h,Z`6i1;DŽDZz8Z.D5l3,f@
-L.DЩ.Sbܰl:#Zu,0̑g)<Ot݉2,/߭?i9_Y=\w1Ri#rHP
-4Fe\<!*+V`+jǫ@rMй&
-~@
-.D-|Qbg8{3 Z̓si ;ϸ:r暀Kdx?[DϪ,k]Uq=KrҺޫ n'vb 1Od
-8HczX7O9
- Ֆ Jt
-6\K-C C  _8eCHfݪ'ˮ;&۰-@!7e@|0[KA~lbyzdU7@(:mFGpkXTlﳢ/[N(^ڷPݮ۝0s%l0\/D 0A#]ewO)x 81b$ InE2_b02`J'P%Oj g"XVzIZARwL`:&u.G o|feT*9c|I2 &
-R=p..HFAJ 8Yb*8̺w!7#؞1mxdhV 2]t۶+NP
-rQ句dpr2?r;Gt_) 4Nt;Ncn.zhb$:IQj-E @ +Mw Jv `pCX\缗i BSr;I 0;ҵHn[NwCi\N?;s##Չ#vkV:F7vd.F3QRT,َ;
-EDZeAu+ 3Eس^0JTLDNAADWqJc*]r>N%3)=F L!.ٍM]7?iq~+ϟ~uFzz<TKGaU`= kX3g傣D
-&zAT
-hƬƋJDFA˖\j
-@:W)ãv әU[
-ˎs _{P0]3Q7u:?XeߥZ:]u;)Վt/2ݒie6mv!/Y)
-Z8B`-G+Kb/<a[ S-Y/
-0Yb~"8<CUOQЩl:ƁƺeAb
- mه)bMd$ɪizJju@hߢ̞‡kĘ޻ s:2?ją&'(NaHQr]r *
-4Pc)K/ ,@dCf 4/9Y̮0`Xe%L ?=ёٮu{98 $+Sv{'ۈ'>xQKdeбDŽnoyBS)G,7R[EߴC8ȌYH(>^Mu?I73n]h<VpڒP}H(b߃2Ԯ[viE KBh!0j.w
-)-aV$@t\d ;LdPV\R%Cf]m\hnZWܦ[5>m~}fֽ~-Z*MƎ|(ӪĞ4QM|gy|gpjΐXeeeGD
-mi;
-ˉ)崊$|0XP`4btN4fsZOT fi"/l%](?'
-F\&JmH(}Dtj,Cr~Eo -eHA8xS?6gTN]9fau 4 jxt~w2Gxц
-/د 5B RXHO 7Dn 1J}F*Q`pkY==뇄)=ܴ 3z~tL,U_dFUxRkXu/PO$ǩй"[Hd7enYMkEdbml+|We!Dp[OF `
-Cf'9Nd|0{Tq.P8dvMAj[As$00/,q چ_/}&1zCz۰lעuuKdzrwl ߳\]s3 UDt/7UwlSbij)B3>x!XQlz@]X6,Kc~L%nNم&2E/ ГTWi~뼎쾐_o`q&|Rc'GI&#j5@xw%* Kғƀ
-(W%\%jq18]J2!% {6)QJpI{CUfJ$ bm)Ƭ3D*e[NWԞߪߔ.jq{~rjfnۡKJM ^[[j B)3<IL|l{85 8gnT3 Tl~~}=EbA |5OujGk>Ҋ*_zX%ymJD~- BY⬢kA2㙢B@q>ܟeT
-"jZxhu盄sTCdwG5h_R)ry$HV'TŠj˷˃̗<A464gQRY`Ybm8
--= :Ab$U2 [4'$=OJȘK+]sl牺[oE4FE*lIoEЫͤqVg NJ'zCaWB܂V> DN 4,.
-&Gm)
-`#tEvALb $/&GN 76̊q$6<G`;q*fٵU[]u007dپuV7Ҍ_qیZt^t`p:pn:Yd0Yg(Ϯ5hWZo J
-auD&R# 2?lz* 鵦R}7hN85pKzy@_ ).Br~e9@_l'L6&r;nmYR@$XZ5**5ZzK4L]-@B&Ȃqno>U[)b;.[&>jd8Ps,ou= p`O$+Y$Gqs|0xTm<(Gr{Oxvc @EN
-$O5M H\{NA26%caE+4CĬ5&v/Rr/r;nݍ3GZ+R{YE?c42p!xT"؊uis2PVgqRE d者
-bUX bG
-w*jpKPq0Vi:R1I]g"AT gT=/q>:OT\vO5-W-O_>C
-PT הAiE뀄vXbryi4qiT+ aԺs_ -7P)U bM`RLqЭD(E PӜ (Xr2dn^3}u:G0|GrSb+b1y]z$u m%gEÕ V|Aڅ0j Xevʴf.k ,Kn@LN^o(O.C( sI1NeuwA*á~~wKCeV0Ȱܯ8Θ%[^l,Yh?_8oj j,!/:Z!xH.C 2=,ʳݡe;`٢! =_oD]Ħ1AOo{1R9 [d[n~3_n{kͦFˑ Fp
-[`y)6&]x=ϝ
-y\Xv PU 20;[<\m@,/ҜZ#r<f=
-4Ldl4<ɁV5INH.cզ kqbVN<OH;4Ia! 
-Y,߳6H+g\+k@킉-p{*Vݳ '`#<U̪%J/7>^k:yJqV-Gܒ(R3vܶDax8RfLc 6Of\\%-~AGE`۳rY.4g-k<4Ki/K}i <t}?YCfuA:_$c9于)Z\ί@zV[sn&:![s aN8uq"Бs8r5y0x~= 1
-ˠin\c\Jp~ږ{3@DAZ{:>?
-#TYCB:d8)Qc'Qu`@",Y<ӱԾrvAYΦ
-oS̟@"SC&,fρym:w=85f:b<Oehhtjp$K5v@R̄oJmÍ}/l* fravJTۥ-9e>bLp1Q T|7-f 5Fq Vb[
-}@(:AЂ@l!G NB8yvj[qb#l'U-#9 K˭==G5?lw=B"rZ^zPEq +JBCU8q,~Xn vPT8Uv?&2
-R~!rLb<Mgjr:T3?E덎pZ"} Nwf|+MV kkQ׹jn4fǼ#I.3oǁ+J1$Zϲ<!]o'|2-DKaH)YIavj>La 3be K_w>4gW\ Fis!AAj=,- Fe$;
-} |7a18(#8iR#C@RCXgE-y?VnsV/QC;QNbDyu1 x;2ރUYp23Zy^k6"̲ 3:Zj<T3'/r޳^*s1ox9w
-jׯ]L}I1Vͧ*{y:Ch $ M^ς\[2>M^Ë:Fp DC5 sC1~c;Ch59+j2 ?ƈ.&ML<A6A>V0,PqTR-AK^h2εYM1c!$Ԗ=_m'Md(MZ &sr(>+xڅ'Yf)繚jX>v;˖2Bq4& T.s#QjT2<-̮\8u q6CSIQFrNAgxNBdv_wHoIV9S4[&9s3wZj} cevG_;g9EѪ&*rܲa:kQrp3Goyxam2Яg[u/ zT1{LTlwaV~)hNvDWäC#Kl-%5UvfJƣ4jb&8A zF=p
-rxLAc42(
-f F9#9zt8NXUu}KU(V<vm(H2Amۦ Z{&}W3f}s 3Eۑ-c{foa6abi0q[_UI2|VtϬ/m:b=\br0ZwA/;Ow"[ :Y\hv!K/Dg漏yZgzW%OGubG mxޣs(ti=v3N(
-nT
-][:ޖKvCM5qZz~#W 4n_?Qߵ ~ zz%5^"Bkr_B f݇Sv^*!45@mЁ@UF&*ԮZn.[&C.+~fM0cԎa[gr[i!R0P^l'Vt.4M (1/ $4g^>Rsb35VKVQY a,,藽Jֿ b4y
-咆vRF:jRK-f
-nSbcrہ4] XH9!s0V/M^8+)VgN?u;+3"H#$݅9{i6ѳ]O9΃ Uwc񋭃s
-H7W+6Dv,mjKSgi-
-quuU 3]>_d9k).ڵEwOVˍSZ#&9Zp0?e((W{&
-jQ*aӸuzl:s[{a2ۊqa< ,AKU (r0Ju_hU]6vs$cmYSZ1bv;`li:/NIfs1ʲ݄(v8 lω9X5ﺔD[OV=g阈vZƹ<qlۿVevvHBpB}xmMEeq,8}<v;N8vKDvs3M0qϵ-2^$vӡz8*J5BQu>NgO"ǫC-&+jw!?H>gb44T0|r(I3iq=X.Ax)YlTzO6M[ZdpLUk`P!Ns;7iЪf'dR[I'B;I~} ᔼj2\2#'phHy9P]I2ObS1R3a#M.;L
-endstream endobj 33 0 obj <</Length 65536>>stream
-- <WU ë,*nd˱F`Fm6jc a p1O[SMC0]mY݈-\ʲ2Or\KQ$`n`#.}nEÝ-JpZ 7㽊Lr+4$cRu2H2eo"k2~ӵ'텍U
-rO^tF*mۍvbjSEsP5EIC]-Q qd|헁yz.4c6bgKmjU~tWDduB@p?P|.I.G| o~W[՘232}z*iHrXQ 8Ef=:.,Y?X|7U]8{NGI5rGk?%ˣ
-Z@=m0{|rU~ C/B0;T]
-q^b8 ڑK%5U.c̺=1\0;g{oB`6$j_~#"u #gF)6/zMBp'Jx5י5Id9.ہzCNY&2 ;GsV[QkRjf:X΄/ .)ޗ4|U\3,#BxŶ\-Lu;fNcxt1~sႤn4y5IjOXasLzArZ&#y֋a]hkE&IaD=2+Vu,|IJ-d-Y*#ImPAc
-6 6Kt#]F*QbːcT0v@~1^De!:4xv oeV=35O5a,Mu< 3QfVZX4xUY6MtDݳ9̷\G0 g-<t>ְ} hbΈP N|/1|X~ p@у M$rJN=W
-)3$wM7cĦBn`tZ
-(̐L{cۃ |x,Û
-̓(52Hhxߡ> ď1 5XApQW9V}p9h^F:WJ
-_ns V
-5W/(ډ 9eΫ2JnǬ3,N;RKDaTu_a%I#6ִ\
-v+O:Kx (1{riq}[  .$pDQR*
-ݠ{[ bC$q(
-U EF
-%z2:Yn"^.0Cd0D. Rî6A
-Xxn=
- '9g]+
-_U}'ʞqJd=HJK̲ t~*B7Sh X|Hxt.PUi* AN ]opfDXyrȪn @D**J4?R, JL h1QPK2 Ĩ{{Y$tpQ
->D1hNCҘ![qMDAZQfy
-7G0J>aq9Xh2Ny<r<Msf'A~9pTK(K\ux?Z4|ቕ}1IesmfA5"5nyk9;ქTklJrGѫBk { 0I\Ѫ[k 7Oc-tt=\x8Sk<Zo&fPa~ LRL4˱ؑJ뉞u+Doweq삻@]K|p3UTEdg8u4 79^n/|_mJ*݂S=MT 5y"F0C$ؒ fq1^5YvXc֯0SHeӱ
- |
-<C TzFT0s'Krjl>*sb3\q\kƳ4o4M1ycQTM!D2Mc==7@0-"e7I?`w Z1kFPs4]H7H탸u}b
-HR%luM:Z|<
-4I -D 4HqA*dEybz®7xO<Ub=/8 0UkTTp 95=gHAނGŖ,} nB\qބX~%%H݀$hHx/: 2I)P-E>VjzDdb)G x!"{Z
-3JfUH_w!XɲKBR{P>aB)Vi&0N6IK6*-eD'?rb롂QoĞ&Iq~)54[o8M7޶ q"&k>!3-7&Zysi]X]n˭8#`+UcIZ3,_ܺP^^HG0Ԭg~TوNɮiS6ݳ
-c^Vm%!泤$RmF5Yv}e7m"듓ZF>zTh];Ւ Ny=DNڅ5Xi60Qw
-Ȟ:FS@iv|څ: .699 mNhK&aT 1Mq6Ru?,3 7s:0$IԒYsTvA֐cDd6r {
-2feaiwVh,{@ .H쓢o5Hp[GQ̭G !:;YjPژ8˥qIчVr4v'?/0I%W먌wlLsg1֋ߌ]ub$mLb9h<vomYGKM3*#Ѽ.$ .Si0xԄS}hFD~cn|D,(l.@BQ!K-g]jUvd2@yg9#eT_5i(+3k %Y
-cUY eYK->%w8fיlfUyb](+'9.)q<n7܎+P04硦:5DI1jt+s)DFi7v|CM l?wq)ȳHuH:in4Vbp!0;^Z>վsGLa< &{Fp:(3 a t^lM-f{Œ6|' f e—GKꒂY]e[S߮/W1ɋ}IaxLl*e4% ^d&VJnm'_ ݱYk"4?]玨5n*]`F]xC-y
-ĪqEVy TI
-VOS7*pEgYܡ+"&,"*1<b+]Q贰(O .Ivu8| S-JŨq^$0Htj0DSbG[BVGZ8?]+<:$d"Ev2kiYo0| Soӡ3(%C2mJ\PRVSPKBE2.k~6Yrz|jVlE㏈#h6\<EZNWΗSJQՋ",%rp) du!b3G .9M[
-fWKhz[SOC/+)(*%-VQWUk s yꌺk2ٳ(7w&ŧNL֕SK
-
-C7EǬ finj~:FvY{H:BV@I GM䇨E[VZjZbmiih-Pi
-+ͥIӁ隟s8M}`@\QgU t R)m5ЇlQ [EjiV!rg1 FtY*m%3S^O @1*<I: ΔX:r"?lMa Ȧ:/qyDbhHjcTEt9P<iaOŇކ &4P@vZ, +u.>.ζHPՇ tUc-uua })nccvխXbl;)&5zbxh[q*4DLDD>",`u
-(a-6"k&TSe"d5bD003ט|dZ<PZ]XC?-[ex;t!"/pmX2lkP0pp&K\q!U^+{_% IaQ=YQ<OI( E<'jD
-s)sš7!B#$6z ,
-g%  
-NуVY.QHī+nyVfœB)YD০ŀI  '"P%Q
-%Q
-A5bE(*agFI
+zIB Ջtb&fCN #nˈPvaݝE_PC̼Rc%4,ᤡQS v| =m&{RB17",b$z1oPT#a#gga.qU%XÈќEE$CxaBW}g8~/~wVԣ1wO)Qp*|hU&5jE#V.Vf3aie"%tPʐ(Ey\(CgJ^2!$A6A:%) ;Qo{0mE@
+~9'#Č8pH!)k0LeT Et6knUӧr!?u4ŚRCU[n RyH5UU%8G/-O~8Y]ʕN+9@.E{nKu&:x)e1V";G9q kTʼnH%)-|FG$"9>K$
+QEbߗsd
+a\L\8GQL1K6%Nr)n<1ko%5j񚾘N\Rr)4|JϓO)(c)R]Ihq5r%q E}UkƋ+γ|qV)&f6=z@.'~.x)i j!5VB232 }(Hxׄ:TE9}|ޢ4UkDX1\g%#X ~j{t6cfDh#e#z˷>j1߼z_m|c"j:"5&}^mI_ZM_m5__m5n7 Ru11Ra".zvˢR};nx]Fdz)C
+"?PE~4>񦱶}Ms_3
+f&XdRFTYH T0NyiwHEű~M"d0]EIDEY؊{*Ur&R|rԟ*ND&rZ oXR<4ZD8qR 4ByOǹTdUys:^É,Ôcl:%Ӝ!Ȝ٠TLI'I9٠S=aOd{tEc=ѽ="݃mh'ٿƬo"?6|ͤ A_s.I?nl\Ct*5FU+y8y_E]dQw-I<.A8G =}(>ANv
+ҽ}4W4:'Ȁ{#I>AAtIr!MJNcE-( /_(-\ZΑʗpHJ M\8M9G!4kyc-AxXXd8eԥ#!NexEdxHM$&Ib~PllI06, "g:`g4{vlcncZ4Ğ8
+&C#_څ:l/?񥑿d1=X;@)79#f\>Hs~XU5ZLrTΉ\])D{Z^8Y84'5&ipH3HDUX>K 16(Go4TS<D*tEXdK\׼VITiU]SRԽFZaMd,r I,$LW9MgL=@:Ty.h*BU%l;_TA]4*ajE[愬Cqm"Tv^D;?xU_B.'vѴT>('lMmURF!KȄ!V 4Uk<ej(7e/b*`S}ka<k<e=+3 /t\UD2 R#PEE{,CVшe=K6DT$SD(!#VfD+r8:g0*H*hLT{PmE
+.+ST['ج!&e=UQ gv9yV,tn:sS,SKfq)PͩVZ[ Z!2k$~NL;ʑ暡T_q
+z]ZtufF"G:g<-ϰIR⢪&,!ҷSM72f=hoԤӴl`iyzZЃHdJ&CT=TibuK1=]B1$?oEEOvtjUstW$~4 jBE#&BDƉ8ϠDYY<̚&*x ]$zL1Ҵg<,E#UK(Rxʊ!9h|h(2lJQtч(+hCG$8r&v; 6jitVYvb\"Ub&1x
+\ѩP-y)2'6JQM1RNg\*C.wyQ3SD%)Or6S)CcflnjN"ed- {3'4AE~MHSq6] r9*bӢA21MYs(LSs(ki*/f˦
+%{ʛ(Jc[LU˿KI0ZXR 19J`P.t &RJUVɲ0E\d`,nQeUuIW7uDt$qJx;~>XcP<M0ֵ@M
+(v`<E-|}c;YC
+Nʯ QUX;OƢ>-.חf<!gwb1?ocQlU&cMdBo.$cGUxnlX*8rI1bNnc,6+f"0enYVe-V@d.+./VG+x X(>TزTs8 !OY5& !z4CWu7`ily/Vi,Ʋу(lDQJj5Vaxa_c5GxrPHkEl,nrOHHs΋(q6@GRIX!=1/ &!ƒc_c6+VUNXۉqm.:J𒡗g℃.a?nF6H6V>n-n qCƲ^AƲLj
+H?Abr*!n,ɇRU"zQhKscex:,}e3,܍u# WaOG񔰴{K=ZQ@S)nŒBҭ, 1hn0X\XqgT$M~93lccڪ ؍u&oÍjHMdmQucy0(>`5lX9sPrscSԴX 8eM4&$5)BԜHk;e}&Gy+R^c=Musi`LޱM+Zc5/ YYbcaȁO>BX1޳Z\iR!n ^ԗ0(
+Ɗ_sՍ^z_1QTJp~C$=߲JmWP vmN_幢"@lԤY=:( e!ѰMI2HpʬZ8 SKIƺ,h"2+r5fXG3Y7 $Ĩ tS˨61˛n kj-nF<Σvc */KVՍu{3Yqt;+G7!l9MX;Pیm7V&ݑ/D 8=nccPbn, Kv.0ÍU>6VecͼhhX5
+ʫzl
+S&S,keݬkylXϢGt1@XbB2 Ǜ~DC*ZˌJ^DE|9 .6 {DkX[(q4Agi
+kX!/:bj,z2HupќƂk Ɨ[X,YT.J~⊑k'k-wíeXkզ& )z_[TsX'
+O֕N,o X:;I@cٺ͒qĤN+2n
+(5xJƲƆ벳9;rh ,?%fϸ2;O9L,7XgQcA5:*k(C"N3"4e7V1FL鉓k/݂,SXC\7V%w17*_6nqOE(|Y3(:X&B]X"[nǷqg(=L!|q`c!o%0ȓ}p%ԉk)tЦ+ w,c" ՠ5mA$AC? ^%pazßÚ]cqɶ*/l^cRĽ0xTDBX8Tlk]vAP| wRDK Zca?L 囊EXNQA]ߤ RKE<<;`c+X)ztQ\'~',K7-q4JƂ3\A+Yߧ՟ ӆ&,m!
+ìJoPb
+X!B?Xc-0u'1`;`Xi]߰2肮<HXHW MI=Dl ,lSˆ&89B$ZkJpÛ\8`йL Dz-6~X3kJW^xOSX7)S58\dbiy0[x n|m/B<پ)V:5!R`Q+J__K8q]+KVDzyӋjc?B%mLv!>9&o,Nc̦Xtn,m jcU#
+UPcULۘBoUq#e{17NUwSWY, $cgbSD),QY5/3[)rBamS 2(< @8YFD24:";
+
+!nȿ&GFe}^uEK-"(FSD/81:74~ceϫ7¢J\ ~5dX#]s%(Ig,U\@5" gL
+8lCJ\~8&~iC
+mm\>d5x-s
+!:n KkiOPqHӶNQ:xB_F̦8C9VtD3kse(A01EU<c#͛oU ^ Iųіxdj?ϸeZ32Y_*/l@J^)lQV7vS^q2ٽlG:m;N4 *y0IzO/*k WÎ!vj=3RM
+dThFF#E;)h/֓N\D9{&Ta=9OO_4WHr^b2Z |
+6>5[+1Z@00$b}>#JYn_Ε <;ɧlK-6&bKRo@P:L5 13׿eXpOi*۠$kUrvaSDlDdXz՝`*4ad@O ,O^Cp-0jOpcfܑ< >u:рRc;{niyo꟎`7.7 aѹeCnψ(\1mt4"T5މdČZdN4iw,tɿ/Eء$vM:,(OzOz+aUg _'0OF} lKT~7pUw n ϗi
+*YO'{w2+ajFxtN+β}z{y)@bJf6‌ސM}܍zZ1&аf.Ɗen,3OMm&Vz`mW_M3'ǵU'}LNc
+/նC3:C?ѱk eDNWmTWj MEM,QI.)H7Z͞!WzQEQHy7mbur S}6ma#I?7卶(ڄWϵM_`fctn\æ"w04l
+|8Q5yB&/Qx$g JR kcW-#CY EBA&͋5[S .^һQw(̍{hvE>ṟ39+>$YlM HtK&e2xKRҡ0J:ŵ#)gQM"]owsg1AcZyK
+\ ABhlJ
+E.daGO4=P=|t.% *(\=D* t)huRc:(d c7M{
+cSGK-p;%텲A~Sr?ߞ](}_kȦ/, 2
+DZ쎈"g,PX %ć栩)&
+G"R[䩱tiGc!$О{B7UG u>#Kb>9SHPNPvdz^j鎢XC 0+*?2OǤsN/@_DdKZ&
+4rlEJ6=/c~5+풕(c/!(PXtb ȸ@})YrRAV>ًM<()MbbϲS dص\`_q|fQ*xYG˫ A?1̕k׷EFw^NOf4{ۆ;0q9aEi'< Q#- ~tڐǙ(Sʩ2JHC82.ƢB_9`-RMy`ۻ\NU(D; ÐᚋOe_( g}MoR׭n'4O4(ݔo3ݲ d*iyK\97ͼ(}mZqt_8XJ֋!p"my&_ /490FL"]H`YTEZ62 gk҉w:B./I+8M5"l>|FYvIѽ\$-ZS2)R& ;)&edQ3w&78I
+d
+jRqő{VPY)pgDfN;X״:<3轲зH ?OpJˆFq(8ԸQȰYC<,le8 iYxF>)喘Ջ,GU"c∬0fh^_ K(-M2K|S9X֝D4-!Ò}ڶT of#>A޼4Ol;&ʛZ3]J ʁZ U7?@U LlEDy/D%{%[NF3J 9ڐ:/,"P"$mQ6@}>^i<>6@h'TorI>{TD1`mt%$w 7 {&ȷ:Fe;rP)Y8
+siNBہ $8 3dx?q!S2ȯ$
+aymPP&L%W9IӧZS!dD|3:!/ j%389Has]a9!fN(3ͮ4:ʄҰE*#$@615<\q@˛N3?sYeK3g5T.VD)x9&$JTQXR y6h$tN~sp>.Pwf<IE73Lk="[_-ywV׀gdա~N4{pm0Vm gJ}B i7olc>$ꎸ㵤mVv|Rdԋp62`t0Gj}QGvߙZP- Eqd%{ lBe,XV7'W<gb$\%& ~#|k!:vr LAqG攳 V %d jZD51&=ގS=: |
+qD?*
+CJxtwH뵯)2ovsW@3A#X87kfl8d`jkb
+]߶Qt?*ey9a
+!#9KHBUg~7υ8n9}EvaR_ !mF'D$r*jn6
+ &ΑiD_z[O⑐쒨lo?
+7'? zij?E9i4#Hдm-
+FcJhk*AKE_d@70-ѭOVsDi)o9D s +b17PЗǧ&15yJMY)b<:#S9JO[O8)<E}dt;wo~x'!^DFcXƘ43~@2TtZ20"+ٟ
+d& X,@c|2v 5tZiH廬ڡokM-|ó61|Z&u%D9PzƵaf8v9<l3~IQ߆PX mmDeM1jxxuB*7Y[Md"'?)#-l0|w-腧-w/`Q#>ݸ;4~x)lys- cР,$ՔldH Fj^KUoB̉i,rB4
+AoV4-\Vdn$+"WÚ 1
+W
+dHɀ\Uzdo.jǠB)K#4܁\gP,ф+ !/8D3/z꒔'&R[D#R{o^,N
+/40s~l]*D[bHFD`9}H W@;dsbqGQQ)F*9^:Za֔^$~++ˤygz@ D[{  Lx\AT~*9_33z
+F^&DAB0g
+pϷHKuT(/ yv<CK|bN
+?̝,[{FJ p! |oxx*TGY
+cz,8YZ0DC"#Aqe݅&,mJQ7EX8ZJ:{()HY.(23>>@}í`8HY/ll!)xZy4c(\o(4fb%h!;\3
+o^/v|cx@3Fһ6{0<~-nQoiQ}sbbPҚP-gi1i2'?/c]Sre~[Z+uq7w=3=Q ?Q?P4dWfNm@Y vb&[0 -H
+*Ѻf,C%)D : D)WwDX.⚲ 0Acfn&X%ڌy,< e;۝ZOPӊG9z fElPIZna:SR(VɄWJNl6x
+#v8<Ϭ&"N.GnZ{ bNM蘌 vUdGғgufn
+aA?y*^u79CH&6$_#yS3NXf3Q5=hz𑭅x8@{X~v1*ԺF՟mur >Pq`bWf3puE#Yi>^6di|1/JV"ji]YvS
+:.o#쮜Xj_rH|(@T+ UqvY>/zI~
+CɗbafP_IAŜO޸`CMG`*1/y7dFkw> ]9RLg7Z8$ @?[ż;{>y07zQG&Q~u Vm Ɠߒr BV/3!AVr 878e_3]0ZfpvSXsB^
+7OO6Ph>FS+FZ-C8AvahFs"^ssh:D{ ѝJw<W"BECs@zbZȐCr#^\jS)2 qVzkOD$,U )Z|3rp>Ko; 2PGf,P.sTHк 5HwepR,0kqI>t}Ҁ>z
+trQXsM pHyK A%p#1&ScwL.H #9+ݝ=D)FXo2JU{)Op̮8y ,lk
+pt@Р#LXUMQB,;F[M:ɏ߭aӐXh@L=]o]8!Z.OxHyԭl\[&w#AIX5'Wy⢍=+>MMt#{9DuLm p
+
+p kDQ2V" $j(}7վ<~D=vl,bp_F6߇0qK<po7ut!\g"]!bV9OHBh\l%- =ݔ-ŃCx&;tr<F dF9k$3`OqGBp
+i/'{˩waܲ@uwt-F|㲋'wt !mfSҏf98:5-O:\C f6V]!u2
+md!>+ETI ^>L@"fGc;:+jTfkgV^j<'tzϫCtu*.4 ,WY*.EۛB|H'~W0ղ]R#U@XYrJdRC,;0<t9HNfyjusmVC7ͺg@-,`CS7+Ay;ڬ!1y 4
+$
++2hŜ\,2jIhC٤y񳔧&blA3;j{Lwfqu =39g.г/_v
+y
+9}T 1 C9הѩhUB_x5h-VWFCR%9Sa<)J A|Q[  chf3usdn3#4242aTUT"HHTvV?. F
+*HӰrx̰|6DXssasݰY2WYdsXe<4v֗|Uf=;3,9@ ~"RӠ\]&N 
+ her #TI
+Em4;pPNA*IOܐ T'H&j:\JvO Ψki@_slD0t$c&? C!Q
+CKH vj^(\=ن$Bixq
+m{-QMgbb
+:̅.&񃠛 63hpv5v[pV+MJfZL[S5Go:ؐچ Ppt c,E{ :h IxFW 트:-yOIj{ȚAit3]Z@sP]:_ڰ
+
+ D8BvoȆGNm
+AMV$B 20>JO`<A?0؟}
+hJ;LFβNR`**NG
+}jR1<5(Oyr:ziMǔuP@â騱
+}\t34r3Y toD$#ٸeOL ornn:l /1XMgu;FshdyW89]Z"-eCWP(iF ?0\. c0GC TCB21K+ g#b>@5
+nc\ t` ؈zAULv́)=l:-08S ө Nyh=HqWjH`
+fNKW_K']Ѕ
+΅XaDla?kOyا-ݧ)~~G-]FNT/r
+ u̜
+F׋!BZm
+kDpމYrJ@ZB?a9Fny2G܃k
+\ <P
+
+~p5nW1){ܩy %Qnra(U"Fന( \P<:(izpS
+p3GcT/Zc[]GX)E|=3{DR}q^\B$?}|H_
+fXZ*(#4R٫~n<EvHnf]ਝnQNJ:ARF1skKбr ei#X5d@hCv+2l%)+@sJ"2Jc&0@mPqþ<٧gtݲԚY
+)+*ѭ_&oJO4!c/0 3+LjFw O>by1D=MYDf3/$qd[Vҕ =/HPQ]9ЪG`HP`Mt-␑#feNlfd.+$z.V[ G*4USKry5ɬd&.OZUƚ"C2c~ PD/++bv?{zj%Ɍߥqi4Rx 9s N iw|pd,S%bgZ2va"Ҍ&^]⥋#gi2ؿ*
+;.Zm.@
+W4|&f_<6H {Nf >ڏ<BXx
+@`k0n'qcSl*gV'O CL|E 
+}(B_r}(
+}cyX>B?7w5l9<H0x& RS {K&0@ ,6-+[-Y#lrNӠ&5ĖgI&e-KEԍ`z4M~>mx0MMR 6æ]p;8zX[)4JJ>
+Z-*Z";@'ምuTS'Dے,=ϋE\"%[t+#.[h]ĈHZVE|
+̠26aj*G H {*tmIYieB{ ѕ&/ 2QNRf1tҺȫ=.i#19t. =.=f1%⡠t +OɁҽ`DuƥSFy gx ]/ƒKn ү
+S Ii<V(߄װX<cvGd7H^-yÿE @Q([xnǐU A"cר
+t"
+#Wˢ_@)纲;rz;6}7gr5ELSBo5P#0X3*d`b>t˷ܽh˴$na+>eP sAQMٯ,A(wx3s LnwN2zWʹm j6<'tyG3qo?e;SK{ڳ>vsK"- mcڢ?~vvf×Ue6[겙6=dCۛٱ2s˙b@F DIA$ 9H q$1 #q)"/j@"Bƾ@-
+]"
+endstream endobj 64 0 obj <</Length 65536>>stream
+*4'۞Kt+Yq;}#QuQE: J$Y<־nZ̨ENX1Š\b;hZo\2:kW~*DeIUq/DKCu.)y0E?<7
+M /]L hRb`3YqW鱪
+{BeDt3Bos$A]ē|[s\& 2(4Y
+yo{kǹ0r 
+ԡ3)s$1Jax\ɫKHΛ|܆?\! Gbx);vWZen~x\wVV%AsF$o5s:a<~0ɹIp6x-yg< w\<O_Uߏv #'ui'3GŽd6(:& ,٩j!=Z7 l Bzr[/jn
+M)d0V/R+NiD%}g0%ꡀ!ό2pYc>^ GpŶ(*=SQʨl2; RY),$t2!WsRn)'@TiT<N{lFFM<.zbaP#`
+]g+ 9`(ڸ #,ه:gU""8) wT؀x y<d`zo각xx+2}6<^rˉvԽĂF 0R7` jO9},4ųȃ[m*ȲQޝz9tGF=z6;d9&~=K#
+"Q6W-9>}ȁK1-|74 f#qĝd6` ;<n})<$Աo+|7j9x}r}ӍiLUy$]*;*솛5Zվ}a,֬RkOV08F؉ _77\Q8l;ḅvMS.֖琇a閬B$>8O3rA}T4hBwޓR |$?Z L@x Fq4c,>˵(M7䔦ChJ*Y
+) &-:Y)YT{o(E >z$F)1*p:<Rs(vu m2g.N1ًC+ڢb[Q'ɴ0=Mb^b66N1gphdC̝X1VD&sN_Ѳnۂ-y\/zU#ɔCe70%@R h9俛&iA%=K1'e a@kl jOfݑ9X?«<΃ Wp m[pӫНTHqͲ9~mmh![Qez~k.kj\+JK?}/4<$ں5eGc.X%\8eR'D:[0qlp5fФB#0\諟_-x0X<}ߒ`Ëu^CD+ 6{gL/"|p;:/Rpu_s\4מ1C[.V#Q<>}f1 6>Nf`- SsiY1d!pA`2#?xEֺM/ NӢa*hRtW'm +_Haȁ$qBS;f28}EV!`-X+A-d6˨HrbOW3e^dO e:3q\ '><CI1@1<˫ zKG[a6Ƌ̭b!'pmN"ICv"h;p+(-Ma`@])"QoH Ih/.+ž<nߑIeKgg
+Ny%+YeSBDWZ6Z)_?̲;j$ ' <zN¥9]}@%@m_!D')<[h>S%2_R[)N!,&"Megs4@d11(Dh~-+Jk<)OjF%{_X0Ǎ]'j:GYYm3]66<۰?n̓5=\wJ$)LC o"?
+Ze Goضq :-/6Z?3c$#,"SUZ GnEEg1<$qKTsTB^flٗId}raջ=ަ2b|;KL)ŷ!W1: '6[ӟ> 3ue`'x"
+Gk1 ?ݴ'9pRg ^qŷw22sP$Id
+?']yk:-x#g8"x 2dE[~0 espva}L\. kUZ
+0(,ٛ+݁4@s_+ŘQ'`!gO^IREږ$\I!P\ R3=c{?0$"|N8S7\l7Co:5+ۿLrH `M#t>ir i;y4<5L~J5 |:V=P5<BBeP:hVeU&<>qJ_ 4!3<uZu^cVVi4zrf!WɦqfZ?B'3@5Hic,O.Qqcթv$]f/5 . #ƒ08+~3!C. B6$N9p4)p)'di
+9
+ XPn0N݅G욊szˉu_ Fdo]CN2hSjA}V?^1⤔.SO~
+ p+Ep(Yc4z8l!nrIJMt)y*E.r$ABinrK|!O)=؊
+9츰0|q22%&sJNBcLf5#xzn?f&!A&L9lQh8% [z롺-AAݨZm1UB7R;Z{L"<l&3A0~bN`Q;'J!K7#T!ѹ6qUXc;#Hm I'~2c' y4{gpF ?/wGVPN1WG0 ŅWL]} 
+!<Oj#P!lգHq%SUUK# 5){UH=u\XĵšY<!MHM䢈a4HRe`"SD"H\uiOx=qSoR*
+?Bbr[RjSBkBLV
+P$s0C. 7P&[" ˄VPhwi&d7ALJeTxp8Ff2,W埈ԉi3USy*
+$$"8h4{L+єu]_xOE
+E#+I+Ax塺*9B|$C&
+g( "P|Ef4#pGpD?!+ FQQ!De &>+;Bkq!
+$ >mgTҌM8K4n5 ~!llRt}&N\&Zs/NDU"#}Q&EaDq_#Q$!MjmD)F$0ь-mxƥbVP`JQ4
+3npt~>1Yΐ,g0"p`W;H(* 9+tbEjW?!d0G)DKC|
+ LP=T0 sښbr<i&>-t\"ejjN/
+i )")w()PQX Bpx#G`"x G%]F.
+諗+b
+>b7k!Qv_ZE&a)Υä :c5ׁ~Fa!m4?We'43cY$q"яQ&(4աξXp0QI"DZ-"WĪI.p d<B8v}s5fjwpy5E?j_lqr)Tk@.J$hf| FbF Jh_1CB7:BCg.O!l5By3;1X"az3K!e2]F 9\! . XL
+b1ku0 6SF@(s@p@@dp>׈L(YGa!F $d#{|DxS[ !L<Eq0A M]1DzߜH!.B;E4wT؉ sɿN37q6Bv#p򡈸"^am1^["'B=#ٴ?N"DEQQ"j6~]dIRL
+QmPTSU(Rj@ 8~r 0sqZZS^6BrG=+9qbl5 ONH&]z1&z.[6Ep
+ Q!d>N$OkCNәT)Ρ)مre|8wF3ShYYG2?ps:sL߈uyh),4¬*V?-l"@*ݺUfF,p lMD3p7|ǓV&D!7ω|E<$aBM1g
+B̺3rCZM!;afY@ 1Gg!o zhJL\a@O !ϬRF+rG
+,L\.e"S2 |t[Ү(jcaX"NTG蠠A!TM4A2'jեW<X7AJicw##iFa`h{̂,+TQx
+E)hٓt1 .qCCC2B藭K^lQc\ySHXQA0ETpLQ? $H(>cy BC8ေ,Фp>|ݳNÙ 8$B-DFrG|khk%;Π ;TFP^H(* [ȎH#/ a~@u*})j,2= fj&q (JD$O8,Eplp;BeZ/19'( "b*Vrg0_a$~><Λ!Ixb-8/O^p頵n!z&[89VՆ%wpS6VjffO[
+m𿋡aJ" S:H7D$.`+L?JH-uxD-㡕"“o f\Ѻ>HD&q>6T#V0yad< {茰a2::wHDr5Ȕ5aU 1f.`8
+CtBtYL M8tR<s ۽҉y]TQBKSuB%Ou¢*0  6"E9 "
+^eq4R :(DRy`(cXt1*ar ⫐CK!t
+¹2S6Od~.d[O^:U^0#g2^HCx777·[*g07HxF7fq|Ø]Yb4SKA)^NڃCTHKqS- y7HOaWMhC 6J&f!J),,p?:6b͟k԰.,UL L hI nłxD@It2j}tA63Hb?
+cx&ḇV 38 'ð Bld#J"Jx˧ua0cIK1 b&FY1#yXmD>M&ppBa$FfϹ B6nCPvŌ5 oeT&+wڰ*rAC@:u)P5+@0uK;1{"J @)ml1/lmA a0]e>X ;1e!.4bh"tChþIbG)"1cA&b(Ȃ풸bA#HF582}B5Ɛl8A61+lSD6 wXwyC3K|0#@7Fv63"['. f8&8b@3VfTB
+MJ"9eݰ4b/aߩAe dS` g8V,!a颏ib/zylh m-n=a mt/AJxaBY5Kn[蜜 Lt$|D5pg#u 9uL0zsaRNtl֕ŪM&jW"BA&&b,&4^^geia20uk(F";1r͍DN.M1&))dhMZ 2DCLXP0w62R̈́4 r",u_m4 #Rz+gmBHj"a" "hpD7gDC(qx΅ぜ ))MA6Ø ‡Ø}
+zaAP1D/KZџ)";[^ E Q [S|LSƴ֜H] <q0CtWd5
+EzG6X'TnefEp—WA"5WF!"C,@`AuE(`B0 AAK$! TFC@)c<߬) YZ;)7!T/i+l>;"{CypF(ȳ߇AC6p-UW|ˣ_'TBW6#'Ti!c
+!"R6P"f!HR5?"H~")>(<PR$/+Q%S ؗ*xu!\V"@'gePP?!Џ~~j98nZ^FbOfCsunJi,o7BCp B!xBC@|!ӧ7wݥOvwK!80J [BB<Up^~A.pA@W 0G ȅ B B BxK sB T5 eh=v}p?@~;+??@7*>ҴBTs>C.
+
+/pxlZ@h)[[=WƈW
+r
+0dq
+HJ$$D45GGqnHތCA;s0)P@z(PpA
+‚T7 \P 10=x AY6P][WX
+(،KͱKZԈ,/PP8Moqn>wa y.]LsbԉwժN( \2,;Ů<{t t a VM0$heg8EvH5NyDS @!5`CYE4% ^^dC%]!%FӸ zG}8 J ;
+:JZ{F0Zi} ov,[38J-h R=q9ILRRFeèki32JEBTd;;&'ULR#A|55ʐBG@܆N^̡ I9L1+"x >V@ PE[D.9PHTQP72hFO wS<Xr)ǭVVB %EuWu $,  $W4=A
+ý$N0G[TaS* \B~>> :В$|`iiʝZU@'YNaPO4t @Jy?|3!<s\JB*C sDD$ @4>\#}}w=@9o[5"n: )uCFi:"^y9Ft
+P78Hnk7@G> Z݃7P6-ٝ;5 ?g $zxWـB1
+c mI( ~k?~c)j*`g)*jsӉ)Sd< m ?X}nimƕ/X<Y\kC_q?D%gQNe+U@r2u=T<qMJX| 0x.Up ,L0;u `.v,:&?@Q_l ELz[ 3hH 
+#o 
+F H$ ة6Z)JDtW$i @?$Ī'݉_ҕ
+JvF%^m.?="NWuZJAUcY]Js"B?Tg2 k@* l1$"@ [ YE#6;3@J_y`;R#[lrݯhdnY)
+T
+4zecbn ;:%lგ,K
+lC@יT0evk䄏Fb0ܳDWakmP&Få_ #'(y,Y!" {Ijf[SWN^%D3dkй
+\n~Q0ѻ $; !(X`A3z<ڒu0`8," H)@FeYU)ζ<,ޗ~x=̴}:,s<rna"_drDhl;KJ,Nx܅wժx^9|%w%Ր: `Bo?J^u;X4l93~/5\yhSDu}4Kp&)tɸnAu<7MXv ]6H,0)K$7P,09uAjsN Wuv;+0錴j]L˭dN {QD+ Tj
+?(v{(nD(-P,
+J>4
+H0
+A-$
+n
+8A2rK= XKM\8qJ#K%K
+`GyBqzw_4
+^_,R[o0hܜq
+"
+ YH+%p0qYԱ5:Dy0Gخi)$cԔҗ&EE
++eBx?E`g,v:j\T
+P
+b9EvnUtoa[JMU rfńOX`.U
+D*@ zA|x
+UJK0~D!C;^
+<B2ۯh_
+s1୭K%Fn
+eVWȾ
+:Ǚ[\R]0[)'Q]E5Ax@)Ŵ)SW`Y6
+Faˈ9c:K[?xIsG!#oNNt&^Ti&>gm
+Rs7ӂ(``^M>AcS6e +?&<%Ki``ň[p? ?j&umIMGm/ IJ9m,hr Lg$ RK?FnJRe,'PnTs)ȟKQHj
+.o*jS8or^q0hOnOOoLx6, IA
+p}rc 0a~ !H_Oy̠(.Bp. }y34`H
+=0?pęw]@X’٢Y"H:4;˭ +tP n9 E/r,ȸ;%C:ܷUFq(-C`=ʏ:ۮ7vha3b: 6ᷟ] dZ0hc=@d~
+\oVI 7W|_Neʀ1(מ['Y&/ySY&0{FؗcDV?`9 CaοEz)ҠդC7M х%+v~c=^:ڝ6< 2[Gvst3PBI}#.ǖuُBt'@ZGC[+zA޷D+f!s%vBk- E7OA k qu=pN7S8::Ϡ^q۠{};]ίP_!+9ʘEQƁm*S#is92C[ 7dAdyd^- x+̝ <mVRw\Ұ!;ۣxW~Vs;2GiE ra#v~F(vE\˻cŒnh7H@:ApU;Lko.$S xzhĔ;ZgGKT' w~
+K
+[MV?wȟצkadecߐ;JG6&
+dtkdpB07+'J<g D~iK@_}o#\nۍ8Dl@*†~Һߥj(2~Hf5!r읎M?~?Jzh<t=6򧠄AF 4.~e+xwE:U[bkaC~J!^vs#l 4^hÕrQ} Ga9$ue\ 2kJ)Za
+ߜ[ܐ.z©_PKM堨ήQC?w^A~Y#`-e42I")y/}hїT"/%ȁ* 15 ߼2K!}x!mhkhr'*0ED* }塟eyqsNq[ ~D O}x~ (?[[*6
+ f<nw~Dp!'-7>|C)kc"a1.- }O:%]|
+|H s$|oYZn,d; lc@ B&Z'xFJ)n^ t(% 4-D[Z| "@4/kk<v(f{7ب"J2K-DRCQ-7,|EpG?|V"ԽL50}Z"c)o%dQz{~D) =ex$#{ɚ=h:ebD=ܽfifj[1XWF `,cG>L
+dQKh")
+i=+ȞNn+o2ǧAv^pڀ.s`LdqIR@640|:Xl$]pEPdCoj(" ? d׌nV0oDEpU~K|:~he#p Z$X_)]K6C'@DԵ'!z*F'ݕdt9E4EAԯ{;̘t7 1m3;i:%POغe1~STj@z%F]ݫgLߑ8՛ߡB-@[0-sDOb1f'&w]׋lWNzo}H
+k~u!1-asK.4 rƔ{>qQ ' rf#a -K/
+mD^s.YՇ}r-"o,y>ŤzZFW_iv :™Tf쫯$RcQ䫗
+"VY|sV=xYA9 bUF Ltrd͋M9贯$NG1g I<[(Nkp$':+awNO*3Y|^R=jzЩ]՝ptʇŌ7x@[qMBnqs@zצšqc*_09X[{!{sxf$PwxbgD YYsXi -W6ڶJmuj@9q*;o6s1
+R=r~2G( K jXT U:1|w*<jƐSZ-WffUҎ'Ri
+9ZO5q֜Bb磭C'
+6csJ{6!PTH>eM6f(QݝfUf=&8O: sv/$y(?TZ5gX<!k Vfԍ~sn_Y-tlNT*5:{*HeHTАor{:x{9'NzIm%Y;S]q8t9Gy~9d:c)$E7{ȜM,z %8[鸂ƪ&HuK`AJʨ$GJN9s
+s*>
+][9]既_{G0K 
+B_9L6ōs
+scJncn#O8mN:xXbV=tZ7>D"4)Nsgl=7'>ʥB
+f#B=FI{>t\֐oKSAK8^[xq* :eR.菏G|2=H 1d|4^ϑqS>JpgAI>)_2O8"I1?+Þj p f?v O03?z+a:.=O
+l/, D2MjꇕhJEGUi D^=ބ)vL)
+JP}"h3^-H8Z$LY 8]lu|ժDI3 2j
+G~&3j"KQ[@(pMMtQaO*Sr2YhuVЏɻ|`! kmLX/1cA+tྍ7 ۠$D uȻ- կK+*E J)
+ԽP ۖ#(&(E\rá=dcBќ?=- xHie-b -`׎a90
+}yBxl7%JASXSCl, q8@eF>9{Wە@ z^J ,BTX
+]>ew
+ P-TաI^qH_`X=42 @{i\)jU@.
+D
+~eLO@ihoUh?I#'p_ #v3l*!~AؐT@~m]a1 -t?:==.8 
+ ۚmC .'UOtDL=Gī\ ւ0Q7v
+E/m"݁}Y(nƅ;2Y܁ܓHA 
+)fMs~L PI@vQ%"cϑ'!cZ\fƾ+Iw UcLʾVS܁r<x FC9 ,K@> Djrr_2gILYxc#dL]"g?=% B"JlDw+urz ^* 0 PL]S1;_m?PG< nߛ'CYA")䷯c- D05ADVX́QώlTrmip4D gK{3ڎ
+iTJ{.v'L"UR"&
+*J7J&VVnN0; +qret@T{#M5{c!뙍}4]_a \kR\6E,
+
+{űN>lC$
+Ee# V)ӃQ ~j(/ Rv 6hZ
+sfTO`ܹRi$1gzl6RlfoEI
+
+ a5U ݇((*WJUQ9
+U%LQ lQ*!Pd^wJ;Z_ ˆZe&4!p6![Z. 1 O &(%ĔQ =0&ƒc]^ $*yMbr7xY Pk&UL9ٞL2oG"J );l&(eWW8^ $0 L֒D Z63 3,DݙB[u9.ugsOm)Cd(ELvLD Ayv(߂ncH L6ЂWBBgm9~X -&(C?PL/{$RØ $=iLdur-a[uI jFWX=2إ J#s
+!) E
+WL4K1-2A1ɚRm5AN1e>TP&X&s TyB$~WWUС(i2㧄|iAKF (M^Ù96TtW m.vߟI
+aU ɖX|oh~D2$= l~AtۘEHIhZ_tнUi-<bUIU$OR4k5XImB SO Y' __
+&i\fM4C=" ~2OGF hiPvbxiNOu7=Ij K7c?VKEH˕k='x&l":M~l2*GS_G(C@jS{-P4nj\[8DMhMJ
+1Or/C/Q?SMHAˆ@*0rV=2JC8{=;KU)0C:m44aNm;:wM
+qMX6 95CF5Þ`U
+`/j˒?K
+Z"<ݒpIk./~*-]A 5_.)CҸ|i0}xF
+suM>6]P̑䋧K~N9yek1 N(0R]$XS#%$ˊ%$IKs Thņ;RʌG%HēP'}Fa,טK+!)Rћc.}?
+;_cgK;_)^LcK-rC%T9\N[՜^M)R:zȬ@dpլlQR>j#%-}<2_d[2O|j!UjK:{%*-mKKhͷ4<qOWdԉK'
+"Ra/VG:hei@r=ѹ+u5Ng QC_4% 6m7K_wR`ۏ . c؏z#p7Xk *9@f8$r,}Z
+lJ%$tÑH&N=f8B~T|P-e*;YtW[Zp -=mbeS-jHͶ)4\T:s0z!0ݒhw. F)]-kͭ$vI$2l @z^ b Y/0t~&LR3;4
+{Z&pqQuK<.[Pk9g,FIdxHw$GH[h!c;8i8pi
+8\n7?u(%lm)-E^tb
+]kXž]bKhlam2]VdAk"VwM5Of3M6]ms(զkA0@SCV#t*;
+)Z{h7WG9~pZ`j~p'7&?2YNi)˩mDE*R$( PnjD)PCpB}
+tSW1A@>';R7_i@T_/_AW!9gk0N
+VO{F c(]NC ׾ScLRD\NGuV 5 < ])vV<Lw<T6Ω"S(I)ijvzTnSPY?T!-+'(nZAE ړ=퐹oOةFDOD4k!~"
+Ap\&Jp AGÚ"tMmP8yҠ6Txjf:f'}^)B}%U꛰H4v@}8[gVPx;N1R 3
+n*"ć7(U*{x;{NhɫTDU.KK,(ss")A;^e#:X., 5^鄲W,8zfV^#($ uI uˑbuRgTP28De2z6M2q#yC E;b? LU
+W/zSew#tRO*!<\AJ00)WP='U#ORL]U7*\!Xΐ~i2-J(
+uݻd UX j7CLaDVf#̵I+1P>I$w Qhlqe/+ъc:TSeSi ء$UL%ihՒ"IUa@HHP;po@膅jVUD\?*G_X,Tr/z_AbH{!} (^o @+S(|hB/
+J4iwO;+z|;ɲ꧿fm"
+❕HBq]]k;Cu4CQ+0yN >2F%qVVI8-*𑋖ToU*&rmm5W*Xw<7H*h2&"Vѧ(˫&si I¤*XP ^leWJ*lX 8LU5#ɿ'W]7\;
+ʽ+}U-]͖NUgL(vP.ޯdU
+',,Bz}UDxk,NUyzb~Zd_E d1U_9<wbkOIB!u*7a1q'478Q bCtJ,M%b5q14+LJgDPKpji谮E ̬G_Ay p3Mܱ
+^HGᓠ
+#ٸcGZ7)Ns?BXo>^n!DH.KXfTtڔoکRX鰑F~=>+2<4csm#q
+)'?lL2Q#(k?_VQXɾQX4$s$wcq7bӝ8H~8Ie?*@cQĶ­ǚVX"ZxHB`e6%
+`MN`:1n1C͇ {S 0/gz K^>V:쮁_oXCUKYU_h>
+[c!IFk^`/XAX;SXӊehsy]KV#ʬ%+c1jHmh8-XiCX`K9#b5܀ *i5›Eҿ;:'=: J1? >s~+h;öcVq-=V]y4+ ԼG52E(?O,y6 hU@|!1cj4pZ[g.=) o2YB u]
+51 ?c&C\ˇY6
+A /~\?yApvc`7VZ4#$'dJe#.֘vn`V[%-
+DK!+VbW[ƪX_,uU\}i⢊z;+ƚ0~#.|%$፵2o%,WS7W/PFRZYZɼVXlm%^{r|"JG}1~Z*\b)(VnXS2o,KhŦVAabMvSt~+yN[}|59< A# H7qbn`]S[$~2CƊ1LcVxo,D{Dq%/^X–abozձx,c?yu±rEW8{Z:Ap,bOv]i5c&6k"I63tJ&'+'cW;c >5%!9ԌGaHJ'輤cY :_͜nLc ;M΄` .|bu1Dxq2I7\;|4^Ɨ~*nɱМ(ھ9HUc^8W{oy"2 4?5*0k\[]m8rr, jdX%Mȱ01ʱYkВP n
+nv,H&-|њ;B,SgR tiH:זM咂p==XqF\j< e=CmT 5;v*TZk@6
+ c~W,(2[
+$o9^'{X AӿX$1Z-Pq6XhH^YM
+cVL4U6um# >
+X  h0V-zǔEIj[0>XzԿef7#5?9* m] f0V|Xhhbڽ^a>Z* 0JgWK#HEvDpo2c%&4^/EL`i[|q2[LE,:#|W0V,z;X*Y0 ^0o:ɔl#cgdTA/<_$Bb,67sӷ"P'?ɪ0@aƋf@حq4LޕnO/aѷZH!EC" @/nβ=st^Xk#BVƽin^~'H`,"qiyXϚfb[-L^C0e cOAScEsBd.# ƊÙw!M7l ͇V=~^|\(p_e+c=(}Eqc,\%Xat0
+ :F+."i%21bAJ B IymOPe=e, [Xh 0 8&cՇ7XQwj7~*_ ba,.Kt1<;Vc1mzM
+jL^\ES~&sB<&2`_,#)J&b 7XpJL1}`j_Qq7sP!5I^,^]@9vf/V ʛ iDX
+bALϊ#4*h źp^,GJďobf1KGașBzʱ<H ŢZC6Y ;d i/. w*0 0ggKɧ
++|D-zhXv!D|x{475/_Y5Cf=KHoU_Zv(f?^ZK./Xtz4)|
+`&)qgN RBKcK`, <"Xv !+r^òx#Q?1--چ 9)|Pk-(?>1A[D`9 V-))ZA,’w ;90_Ib)@Pcsu40P^U}Mk]p0VsLSr氄-gYCXX̎xGa̷mjX*/
+`\_3|nl[3\ie2j/V0ybz2J|lÅb2^Nvޘ"dyS_D@mğXm=@S~]+k=5Jϰ_|o/V_,c?5ŰPbM 6Ӄ)~M7"ݹ E:*󗟐bŹ؉ ㋅c닅awXqe{b'A `\BFgr=&Kb⛰d[PJXFMxۆSX
+pgװ'!5vuW0L0YGkPX<qID0PюN4_&c/Tʂ&>cYSXtQ{ˉNHsW2G0F _.c9_cq<tc+K׏4a|;=c҇?X
+݃a0$ )lBadlµ?2%B,8
+;p#}ONO1Zټ.{L 2
+EXJ7ĈVI  w ]BPGQcx:B(Co\n4y
+(Fj}'ܵ]|'ovw|`_4B*"QѢj\JD "'L2EBjyy_{=3jVqNl} &| %;*T|30uڎCJ,q\=c 4h_ v
+|2. AA& Zpm A&pEA 2Ǿ/ffp C52O.qyN7~8 ,gmEü;e$JW踘_ԌQN\LJuR̃a~3&ʐ0at
+Eߎӑ?)eX᭤IcI$ H|&pGmaWS2tpIeNVAlNfYJ4_ԆNk挶~ʜ\1CґxEJC<.D&:_ϙ_iϰsMO|yHBD)"~PC %9*ۊOFSX=5g4UEU1$!/K;Vr+"D%ZG*(Cߧ mG[՗hm/)?(}044,UUF!(!:X~D<}u_ _S"Za~\, FqDf\Py0"Z/ ^ؿ>Rܣ##d_d,/2P
+Kؚ6S$38Ӧ({^,EԽ U VUPN= ',VC  +4u W
+dUH?q%9HyB%D3@8 1SG@?&9!5'1d)Y葲,rߒ!lfo23ER"9dﰿ4  5^t)bC"YA1ndC(_vJJ[zL%l$CINɳ:!ŧJUħ*⠐N G?`)f( I^0 R.>B |<#(
+QA^DﭺSTB.Y,<]4bxϘXVkI?5!|,-&% LL@J:Fs8 ";(*xST-)ENaEMx驣ÊH
+WFoD i`a4UdjTR hlTh,&FFSNK(:&;,oC8:g)64 BQ>9|pONivM;bI2l6ID &[I,WcH>wЄz<agĬ?+"C5°:>9\ ?]GTd^GM1ʤ-R((_
+r"b5V,F;ԽĴ\׃Sش2AXgr40.C.2{!g؟s񲆿ԕn1ENJ- 4~{Ê"ia dz9QADp#N<h gu|J)/*kg|hX/Mă'fcy|a%JlS_6NH<!OA (( zGB1(q`xqFC|n‘M<z4yWp
+w.\
+ D`0
+4aR򎨴pwhqL`#23~EF5dy6fЪ"~y`
+{cN}G]pгܘ̔! 3ёq *\aQOP Slގ(K{'6uNŲW*ZQ-Γv"t@TUt
+3rZssڠi&<]E@f Sw& RBp#1(ǀ9AfƤzuT6ui''xրRԗ"6[
+M? e@n Apf^@fp<n<EtF`7Ȍ3ݤVc 2
+ϡ.mZtWK+2#72̨DAД+ e2A|goadn4d;PsV`|!.}訸 r$sX`eB֕*EW~OfC 8b۶h@-X(AvɌ7@,GOy-"̸%9:
+hR`R~Nf@A`UNʌlR4a6 5Q}$ 񲭕 Sf 3P[a@̈"n e,>RXʌ3 54ʌ{fN&? *mdP(B@ȁ0Qk2ڙfu'3U{@8!P4}k:NSvRJ3V@k.[ u n-O SnX^Jxi55<^ǵdF]R2 m| \iX>X)!88-mis22 "ᛡs̰bg/qPf$UHMMR)E8:ikk'16ᚊ2)Z.eF̉RE,aza#V嘟.Q]&BUfa(bF J|w9X{i(_qU1X8QF*3eZ߃@5.o vM9RQ+IC-i%*BFJ|SڕtMkcO*3⬨ʌ9VRg }sI^nM*3)1BYK&S
+3 jK#l*3d%BQ.dUf$;6<Bok BW \@EOVVQ젡qÒ24)q&AűTfR}W88=Y@eƗif-|rLC5.We*L?M]Nȕ?ix,3!8gewO9SeF 2IPފa`BeXUb֪S
+*p8c `"`cіlN-Bְwyo=
+]kR%mNh .3(8ʜNQp ^k sZrcNҴǭqJ"dCrSr%򲔰5# j8Kqj+33+]O&̰,u>De2:TvC<JiM
+2C4U!VFرY@yufKQ1+Q!iw;[YxX1!xRj2"9eH՘;ĎqJ8p.4kl 8gJ\&YК,"G"P򽡟|bAjd1NF۳F)v:БYf3J9_gq fji 4L$gqpM8JB/墈C#^8
+sR}96
+ eFPBMU*L
+888H+tlYʃNd%EIJhg@vqz_ $GI$Xq^e)%y
+ILz+E+׳3CR~ '3HVzPWdhAAvO,b B+E'qV$0t1S^<U/ʌ>S884ieF
+zZ
+01 +Vpdb_/2F@|ͻm0f]lKH`5Žj̮܆BC)QZzeT
+*&Upo!NiSW)-*3-slb3 Tl^/肽P Z8_/TfQۚ^xd^3>^(8
+=e$`ՐVq[6&%Sy uYUf< %XR3VP=|N+y]؊$z BG(4ʌmbWze\ x+~fA! $cq3-G ȕQZ
+(~)|;VEZ,38oX6>6:<xbZ5bK.|,3i= eǤkU>-CZbyKhc {rryo!' 1b^qCRmЗP
+)QaYfp2#q e4b̳HfZNOF΀=6#f)G hbuYfPVˌ"d`U2cݏOXe<jhszJ1n QWRhkVk]ʌOZ+3΃d] Wv2`[ b%ފIYf|1+ŪYfORʌXEzm%I`Al+3 U c ,x x> w+z̘FUO-
+e))fe\c boG48+2XLRѻ :kR1/ >eUi)¿8SJ;(BoLCiD9Ӱ}=ʌ%̇Å
+䘌xv ۥ^GB˻p=x`!-Y5QYud2P`cC
+|qGfx!L#3 {*w d|v4 opsΑO
+&72C-#F)@HfT:;rTx:~m2.BYAjαB JFAd]$3a؉P4 XmUGR41 $p%d Vֻ-]D5=QwY <? 6R'׫h
+<C2:aXj5d /7Q/W&m'~v<YtZn4)?C"/ddO~NPx>#1 憟5 S# oӪ`$4bR,qs-!]v2qʆf,6&3^MV+ 4̢?Yfs!dB"DUph5$O &3aȆ5ACI:膟&3PH[;r-|O3m2#Ձ̈́kS`6wH̀>#k2cVfWeXI$"h2qFU֘
+ēR6<
+Sot;~cL(3"l&Qj- WKVh5*3Fw[e>$P@` 2#U U(ge@[~`(O"^`H1T# Mpծ gȑDVgʹlBQnIpeFx-I !hb4Ыda#Ø"9'2-8yd ^}X@3ZNdՍh(3B(”2 xmiyXTJu5r$l`28c8. .sW`z8cH`.-b cɌ)n
+&3"WaY19yG>d|'&3s߆J)%3v2{&3ga^o 0MfּJAQkZ#W1\̲U 6 )UȺ0b.2u$$Pe}/(ξw+'fQA(3~^!2"3F G?v9?) (^Pf<'AX]:ΚDdG'3@ȴg93?'3f-(40\e18Eqfmsڬ~8gZ7\meƞq
+
+`oVM=r8$3'*( ZCx$3O3o_"zW$(Rm8 ;P_,K\SB)M}.񀅥+uJf( 2pa {o_!wÀ G87ԒtXUFT3OVdY;0qDʮ3@T 0\aH&ven:f j4ȉ1Cep@G1W!ui#czAY =-k=Pg>Nk?fR"RUXO07o!31uUpWc!3&!2-N`j}0kxQ;ɧG E(o:7'!3BD4LwU@ 2cjwE)򛶙5@2At7&J-,2cqyՌM'EfXz;;,#ìh#zmȌv;`+d 0,_H%$և%xEgt8;P U6Hf IB E8tYɃxoHd?3C~Eu0H12X.g.UtaH[ $3vBq\
+5dxOEj" ZiPreƨ/Za1 /l jq[^/D]EqI$g%L 3XT[.%&2c\=eddbne:8#3Ba>DNz5k֑Jø0NPrS
+DG,@[Qk|!r "CFfĹ
+N~`HExUp՚U&a;'edWBB}ildC\4x]zIz
+]XB].2N%)32b9XzۃQ@g <Sh6NeI` <f^DMlaC6Bw"|x D[j |ð?nj-YVDh2Pj͇/sh{gWO|5H1>H6
+ WDpߙ["Q KLK;qv网(#LT܆x7|-赂w!AXej%Y2,Cf 9ecR P6%O{ Bl^%gja >w%TJnNWQdnj>nj<WNǣ@|m N\eAnPEnj">h3.(8(f.Q>p+Nea-3b1W3;|r̘ѐm1f:4_9Ôt~1mר$BȔBR-f&e6Sv:d@Ō+"qAǫ]xfŌ)3~@c/R\<ww[ufcT#U>3<ߛbF¾)o37F@Ol,`otnD] l(2`(ZhFZ
+)fDFa=U
++r>uNcǣXQ("(goz67s+zȎM
+=8:["8T
+VD3bd8.%f͝|/
+A?:I1PMBsoU$*M~Č~<tS5} ޶f{{
+t~~7s.ңؾaeEfVX7BM((W*A?]1#ex@u=FU3 ;(zbm61ebFRg{…f"h
+IGBA24B1W Ji8)H8)*w`
+hu.STSPcO_ )D`2E@
+w$/\å|ɟ-ÊvoNXJ9
+yƽFa(0 !ztzS2-~Z r磆7fSKO-GotcF͢>SbxWuP7쐓wQp$6W(liPvQF?d8fxmܦ.Z֘A*Nn=2w2wBg~gصpC`Kt>ƷBUM(7ft{1Þ^
+!M]xQ?y{TÆQˋB
+cF7Pj3J
+y\ЃqJĪF1ڞXFp($?<P3(t;1C(Xi}ሥJD~`]ew̨
+HguOH"CTd8fz-A=w-3*/GZƌ*PLu'1.q?5W ĊySE =bmc>1}O?16 3
+ךg
+F7=#M2q8nh\>!00`p%7x+-9m
+$fzX/K c<nd*gQt7;c*:6v,^1+AKq 3,#('CNȼ"+p -dg4$<vQ%kz$&sdP )C]Ld< {o+ *KÖ428tENBp[+ٶ
+)Wl5fq2[.vs؅3E'>=Ҍ eO #PZ]j̝o%2\8.DAu𛱢J cCB< Q/6 uvgnp~ϼlG3gMEY
+GZ=4ʨ Uu?ԅD,Z[gy͔FuH%ݠ4"PjQvFwxPdWB]awiEubZUi¸.igêi !TE jXyP^U+֤ѣ.ɓ9 FsriR8D]0TӾALHQ#RE] ˛jإ.K;SKDkA.&E:}(K9͂b!LJ(]^.1<֛f.tu@rLi˗\\
+pもquv<\|{. PX婴Ǭ-,[Xڟx u_uXfnaҪE&
+"  i-rve)[@[+b_\b^U]47iaHU ZjѳZe> .LI \ZhQh`iBXZEς
+,NI--Nd
+ FpǢ<;\Ƃ L-XHLbb<0-Ȃic\X$REĥ-,.:m@ IBj
+TH(6:&23Di>e~[^Q˴GsW vvrМv;W+]ap{]V4r+q]؊j|biEq<+fViNCVi cE8v'ـ(
+P +8ytF*FMjn_^ŔFCWήݨU ʎptUAV7i*Q`FڭEjE_+vg R2j[
+tREŠ*zUtTG;TxpSB
+IAB#jR j8Q{*RxS4U6u?]BM0G<W;cqJB
+5aG USa5
+ToJjjՈ\*
+lG%hh
+I@.FSmb`~OP(uVQ(MFmŶ^nmТUWQyEqmW&݁
+(<m2D]q}(Dǁ'Qni E[#Btn,1{ք,$]n
+v;LPx}@o;yP#yB
+6bMjs+_ٹmB&>}*е㠳 ]bl%Ef]6Q!SPUMyM5QzR5N
+5Dϣ :hә(Keċb&Y&B&] e"&ıDŽoZL@`a2Dh0A
+Fׅ:0F]`LTw$İFċu0:
+)ta`bXzir:}$tɁ  ېkkMP82E30ADLXc\b-%^ⅼD2{x 9
+-[ҕ8I()04m: @D|2sԥK]:F`b(<g-I%ujpŅ(@[@.3#.!NbfG{
+_ZYumWǵw *Ti!X`~u\ctp?Kh.ZޮKWVCȖ /H-J5oDYBKZbݵ"XqJ %* |1\gw ,a _E/wmCuktoוnӮf =(
+uQ%ҵЗ:S&{lJ ^ ޢij;JlxE IR-ItM$oǓ ''$ kI!HM@m:}QDcuO@;/-ϽP5%qR$( 0& He"~I(Hp%( *JHH!7`HDW;&记G!7OSH[
+JsW w GԠ<u}ώyS#L}G(@pGy潎G|{n'ǚnZKj+y9"qČi7/4+,H.5BbFp ԑ6Y2;xmSbZB%nH;o 7<-3tҼ( qE
+QE>EԶyk,EvypBDy2M{}&"i+$"lD$] y!hh%D(clU~^YŊ<id^w
+B),3!lN8Đ ѱrPC`L!d!s / ̅`B ϣZw $+iBWB9U!z*v=t!Y TA8<c{)z "čWz9 "ЋJ) A T8;DoGq#I+2EP1"b1*1ɰ2;NpTp]^ ۑ?b{yJ{[sϡ0XLCD3?@ބp;HiAC}#F{ W>ެW:ug>x|~>Hy͇3L>,x> -|
+v[ҭy2+L_䨇7FP!JFP<աoNJ{Gz CNvCp<MԖ\[CJx0+(!,b 0%;0ּʨ;YçT"\g-'x?{ ;uV렔a
+e[ \1@k) '
-hPq@ ޑf`({*A
-ږC]{mLZ8ŕ5
-Ñ]2%W 3(PhlaFÄ,B!X>5aň@r9a %
-nV6ǎ7K- : rYR I*
-!2aHOxt\
-m2mn
-WX3Q)+d5jE`YrђF1k 6R4X`D #
-
-jB4؞xp!Fذ0QE 68.xP
-蒴(@b'Ć1^
-``= xqy`# 0` أb~efPNO8R$%OUI'J:L+9R+  )̇ !D($Q
-jMLT7%b))Zz`qKݦ;bmAHe,W6qI38WliQ-(dX 3C
-TVВna|]0 !ve-HKlrݗsPVRU} 0!uY*B)
-FKb
-^i1hGZ%ꈉ53[YѝK\. ߦJ, paɢU70|W^($L xPUT>"Q^QPJR Ӫ1<o%SRՓkjwՑ}ZfYu-]CKi&^"xSBguD@mZ5emSF[9E@W-BSx7-8)0.:"7Fk1Z rCC:`%&,$WWPX Hд?f, AZ ZU 8l|lKK
-AP5e ҅%AæT_hX|EC=uk@J:PUI ESDƁ$RETUt
-%tdDFAT=Ғ LWKke^BmC1$&õsزMZd,Cܯ cR:uJ%χ )au*0Q*!$t%2ӻeTEpKRͅ+튕YUJm"&q7Lɴbdia4JILURIˇ ˅Eu)kۆwn ێWKfE@
-H((@&$1,.ȊZW!|h %JE19OR3UikD5VF)6>+
-fzlsLّɁ!FR8`E\-(4Me$"\X*ZX"|;BUY†,)YZ,B j%8eVK)~|9 LK)H L55
-<z5Io
-*,,]2ϙ@籣]O:2Hpf5/fZklQXN-
-hDOa:RL߽~JȬ*mNEk2[yپ-rjUn'άw5L rCAXP姕Du6o_4%DlB_rvrq^G~Ln)ﱚ˘3V"):b܉NsCAh UrX P=R`^k*Y˫ :\jɭMuߙZ=%4k:f&%"~G1J[&0SxE%{z:Qo2TFXN-+pIK}+ci~ٱb'Ɗ?bg 3WHG3*kqJSPȡ1֋&{ev2eRhC H}*SΡ/()f)hf8U#Y]!3(l$;b$E!b G\o#7}סJ^c:[LQSJɜSDARSB?،W~ B9)y%RO-%JjpbեAIJZh-v3iUb"z;RMaH)2 uc=ᨚq(,
-v:뽒r&I3g yhKK=5d# RJ|Y*,3SďKj nrIOW4+s}|OE4ߦZ=&GŎճ t ÆѰݸ^IHBְ3iW=$:DvjG$OMH嶜V# ٨naHu<yi47HY] (Q,5lB9ջfi$hX-VBۧz#z!k6 ^(Rz秘wmԜGda:i*i/Eսn\Rf(|֋J+ jh7VYgHe'9NEf-k 5˒B`+f+uSYR،D@>{.;b揹u9PDr?
-SCXgڅF7а4J~ߎiE$5QS7i<%C+2Bߗ[MԼYoo 'Q*x uԒَ[Mߛ]+Bcֆ]uK.Ԏ|T4gUYs +fOoӑԮ)'*фڶL`pP,5"J\a2fBPl\EyʠD5+:y}R oS (D&VQջ7UuҰ?m=[y#>Zې+`Frt.ܪ7M֋n :1rybkuFJJeb8$as|gځLT(UWZɉ0ZRnωrSHn90t6?+z-F*6KniPEpTѼOg5f~%vĦߴ1pzb6Uf5 ZpIjF{vn*6ကy+IL ڒP9Vy!3h,(×6{qK:[kyz)6ї QaɏB`eȢ/<ϴ@[vz!ԦyoP%)5+mm!"6
-FPhC ih5ծ3i
-nf k}
-W;Uq܋`WZ9N$ւ6ۙ[4^8btgU[69)$FTNjBum 141u=7tXv^hX ug=S8'Rq$Z  n2sc͒V@bkLA@a؎d5p;&v>GnpF@uZr~KzkUNus_j)(wQޢ(DAP9N5۱CnTbl#ϭzKkMUj8ݯ*WC*N[8Npkb4`vIx,TIUOFE\ni ݆ŔG!㄄whc!S Xo)uggrۻH5"7&P*E$x\c [F$.;CMEV ZAXf*Lbu c:-B_h:?Y+9TB"2;qRٝVQY/@#Ӫwۇv;Nx9jiFC$=7̆ruvEPk 
-.!G ݰ7\sVjdMm^C2*r9h.E,~3 céCX<*b5_cCJ峮 3ñ~d^Ze<[04sh8T݄NT6JlmX5q8YVmN빒\ඛ'c /M^sR^ ufoHx?V_l#Psj:3ug< oAU\Ί iEqFL㳧#7ޟ
-Ϛ@ai=p0kfcj L]8(XGX qN߱<Q#R.QŇEYe>Rf8(9_nޓP"c2{4@!7Ti ND~s
-2"UlAlymHJۅ\1
-JCx縘'n k9VI颏Z40dp[ov=jDZO#Ie8h `6.S 3 =colּJFnTLTe:Z0&؛PİHMAcdHҫ*ֶsaoد;r㑌w7q޹]c ` fvjے7 5X%O"caJ]m/Vf{g4p=зH)rnr+̕jDV8bl'ΑLFMSfqmԲ$z@bt]?lD)%MPijkVX>Z Ke&3Xp^nNKF7CFg-~D^k b߯]]{W1 ÒDJq<F`d1ͳ v1xPoQo~n\sƳ |4Pd!~M)4B$&F$ :٩I~gMDoJA P;ڕ}*;ڒ@N:SFLVaڏ#h>ޏiu n3jWaU307|im-N윬X}of<b)H_[*Q#.҃
-! /K鵆$7C`
-RC0G`k.z*
-bUم9zq
-srKtHȢ@h7len3ѯ%XUoJDaVu Q[
-
-5T ukMGV$B3dbXNY3@j'.2$VSko|򋬧=Њ7<_zqG~B։0E6:Hm%h}X+>ճyEٮ_4 ]#'2Wa<y5)_c瑪Z`4
-BJd6׼Hv T7ذvjvKnx]e S=ORz)5pg9NLC8cDm8xo.̴YΛ(8Wi'G-50,(ɦ a&+Msec0N"+Sۆ,C.v?Y2U-?1GZm'~w >Dj J00䉲B2% āf*-U* X_#" +t4W\eH8,Qb;RbvMAfwOAd2^x( ACE#UV/
-ܦ3X ZX^O7]Ml>OcQ fù8%I NZ
-x^^a Z;ajm nCọR1L")@ry8\2ث1K25jLb`5 :5L H݇v|*9Vb4*cvKan8N {δ7s&!finIa X#+L1JVaǫ~tHj] 7?b. <ߛX\W>GeO!Xt-̂oZO&/ ZW̟q\Sib*XVIYGQo9QZl>]/Vȼ߹j\)Km
- lP7=}j
-;Rw>h|n88hPogQ*C)(\( 8` %ZbDnq"YThXK
-:۪ ;ER8!|`T/bSukr]E̓El*{!4T H1_~ @FIM;_!E'T$.J`q%Ŋ/X\X/L"R$!@*ZXA I@tqE|x`%*66)
-!L +RN!ic+TP"x )`HBPE ).RXQ|IaX2lpOt[7(_hΒU:Y?(e{)Jܷ qh 03z=qO٦-i^\˽33ls&@/
-k Yn:7:]v=bhL
-V`1ZeP@i5Z_8Y \ эUD6 $v_lb0΂ӷJSGl# Ez|Zm7Nȅ̶CA]"(=mFS~;{^w_ٌV-.*0JSߩ'L'Rwݎ0Zv>o}U[Qk@{&{EӁzjYNFJޟ4p<Q7^YXFZR-w|%<-bnSI,=)W4MkjS 
-#GPDJ4w?κfՀY\,P:(z`=sRQR nZjnXy0ny1,8`o[l}2 -}FS4qٲ_B+1k]F{
- Xۈ^Ha%
- UY)\;@yv%=t}DzIBam.`; 1?B0b ӌHFͲHӉU :$]GӸ]FF
-Y+Js}5P^u0ރ(w@d6AE~bgU8Ҽfuf]7zbkM[=דPPnʫn˭Ϡvy)~QhX`pgG,5ם'Z
-oR0^
-309Qbyƭ3hڑkާD>\l"x@xq9l,.ڮMV[1=Grg͓-g8Nf8u
-CE1dl[1M׼eD4LIaio;"x!GJ/'zC5 j+CԘ'ts3̸ZgUUsZ0iebs0E[y |g-<r%|Wm,|`o8Kz^ɖtfb,yi|H[p xUϘv@t*zXc*U]R GRLW3ʪnGZ{$V|ΒƏyVCkUQ͈A=жJT\p:QT)za0J{9"q\ MSFûˋQ°0{
-pyvo2ȱ^EvM%ZH\5
-+Qg\@ uЪYOkҬrvUBh5 2]itn;{Ĉ0kLݟQ,x</tߚ.dhh9MId@5H9ฟbTt(v̮׹NaABX g}N3r<aIo>Su$0hF_0Rj*hM@%I0*-w\Q}rc-2y~ 5KJer+jV-wIJF<AMT8 r@~ݕyjQ:!DaUcˣe@(ɈVfXd3 4MӮzu8U-]ō$t7P0:&B(䶐Vbx*9֏Bsa.E;hCaqH4yߙ4NȾa_25v'Gvh $ZZ' /Sj,IjÉZ繚y'N#Y9jdx8~lhoE-Z߲L}xo
-e
-]9a9mS/]
-FTHbq9PVu7R4D9jF‡\ r5p.O9rpUT gI1]WU8Hi5PO]gFj i l&~Qq«z2ڷ iOX s9k:zUhh&.6Z?b,}2cK~0B$i:8oCq=WmVc-Deq5Jx*{BVAд8I?'Sǭ}!/=I~hk? WiHrĪOĖԼc,D0-H4LsW/Fu2^i9@Nx&^sQ7P>h]9y}f@g3P [ u)ʬ5~cy ]X?݉
- eSe<OsEtD<oEN,bXp\ʖ Z۳?'j(#9b(88IdD}b5.7;@z[@;(=\qzJs$ӫ͆J3f|X SJSDX0y>wދ 0IwKr=E[n(xH8iL+r{'
-F;濁~sHBp<wIJ>\n`8`0}-Z1bx<Zl15]>C)- ˈY,1l oUxm
-q7NvHAu<&gD<sD|*{%\5 O#y=Au.6]o\SxsWbx63hui9?C-zUI~]e0tnGڮEvOƩ />Dxu< tmG jV1l?ZyUm^ci8A(M3. 5YV/
-Rff8r(|_mD1,IWhVf<7m睆~eUهʬE ~s Q6 mn`8[ $XKCS1?91<#U^g~d@eyA]3_n=Oyޛ{aYLm潐ʞk2` sڱTkY=\Iь'Iߎ׶ߋh zqfk-4^d:&zazCr+JrQZEPj棚x ĹvNa
-%efTϹ$|e3e~k/] 8Zr2N^f{#0wOmu}trwLBu^-dᄩ#]1m;>'jn+1d(Y N_ R)/~a|!xq`ZXo: 4 %Qe%db/>YS-)璄4Ҹ]gg)|]q3kV-F-:O9R#%:1=5V3wM{Q7]RMB,c{%K^wP..Yq,>RLHuM7#]gN=gUS8ڮyzM,wĺ~]L_Y60Zj&.9$bAkIu=QvQY`k>-g. =B&
-%[5 -~N.CI-e Iw5εJ$oᣥƢ#rߔ/V|(M3!0Tg!L|
-pH4<8 dߜ岊rmY}쾊Pg#fZr"v^4رB]H?dy^EfxC.$s&[iacx\mY^1̾ ۽^ܔ8y$r\Ob{ߖ繖;!v9x"0Z0x0(Heq"0DvJqjy(Wbߓ5H&Q|r#!Hz~[
-Se(I˔Y1q_~~#3 #I-WBJCHԪtf V H8t/p>E_K<?ˍMZ GWp?Dk65K̺\by
-1Jq`؛y/2vȜTc7eIr'|>Dq=YNն:el;3%b$Gl|*׽=%k ׫RsLF ]"#4%U]T] _)# !6=gֳ Q&tx8eM'aвUK?iNbSx##x@t6ѴG
-Ru9G`VR\4x7Mʶ;B˔
-%Y9XR2=w$=^kVT dB͒Ì|XSdx] ,OH6ci1
- #&r{yU<, $Fws9cOv)ewj[A1#UfT93=ǩ0o4MIjhDc2Bxyk[Y3lݎMr; U,
-Q+󆙩4漆Q:*!Nt܅0 6-!F-MX qmli,:-w,%BESۍS Hmy+9b䙮ZHiN=]IVXEƓȑ2`N7Ag ľ|O4˖~x)qMڈ{=|:&觬 4wqKmn%լM]$sY>7\Sڶ3j(Vv3s_9j4[w<F*#5U ߖ
-p.;(Z8ŭ9,ǭ4q5R<nwjzevWUGa~Hp?+{ߣ$0
-Sݺ]<oe)2c!RIzohWjѳJca/βe7B9Vb8,B[t^GKt<oNx]4q(L1Y${iyԚȯ8=e~ 4Rv@޲L@e8r/NEiΟ 3YlbP |bmz J_sw-C^n%Vg%2Sz4޹
-
-_XJAxP޳!-R@jxcw)\_B<?~ߖ۳On:&zoyh;O(s(B?B˂"emϔ(2O՘ru6My@s4εJzDa;]k-u_)=!
-ZGm0/K D8޿$x7O]O頻4Rq^%e'frn
-z;jnp<XTl?!*;qTv nu=J:^J8ōZ[}ˍ\c{6 gL
-3G,_ζܹs-"6
-ZȰGA=Q%N.Œɀv
-S̟"xE΀#F~!h}Tˆcӆ- 1?ҜoYE˞ y_vcW7$d^f
-.Cj0I頴ݯq%xXg
-SJu.DqDeCA 8Q=Xve,5~ĺs_zqMĪt@2Izw#Jw(t~$z=UseĻv
-;2:^v<]mvxe}[޳@h 2V ՃM=IrdX0k\ZN
-4CRh&:4̞Dv[~f<c3>罉ޗۇ2 2JsB,5+P1y\by"Xۍs([1R $Z -6W" Qd0/6oezBƁ&Er_yXY
-xV—e,8r2B0I"WI]:Er FS4$94Y]lJ-#
--E)~kqn4~ٰ'z>XnZ<h?b|2/Vr6P^ub}' u7rc1rˁ9ѶƉ$'YUϝ4 +&Zy)K7$Wu}Z*3$e@k%˛Ns۫/C{qZ<Hlq5kj["
-6aj|*vs/z((s:e a.NZ $7ѩ‡nQZ5l9#-^ۏT\U
-qYbav9Ph'zY.=~{PYUAX8XNugY)Un-[gվb$J]l<R5' a=<̷b$PM
-Xoܢ:ӯ2+ )ѧh;ʷ'jηRa&΂ 67gRw86^/
--C ;RjG+jyB\'uh9fYN.ق Q*ͦV~T
-}Ķ>y)zgJL rMlQ8YoT&R&1m~Ms'JlPJ':7Pj jDg~9ϻnxخgI4OMY\T4&(?@8y^P
-F~ >ag7˖AL0킑*P;1pbNԊB )  A'(mj#Nx>eh;!R_qd^>&6KR-v+j<|Hbr2p
-_$ƬA*3 7Is+Ep ,Oe(tCZ k@
-u 0*f9ᦩ-!fhaEh!FL0Rr@C qP 9I L ,F푣xOTg
-nX(U!$rVHi89"D,
-LU\PL%z/Xn+l:`yjq8zCZM|%DE'_vf^v@׍qD
-N`x(J,ɉ]wL˥r$o(J6 5\,Y!yv9&MV\⬢78e<'u<G  gDwy:=bG-ϖێT=G 8zAHE!zUH^`|,7&kM۝
-л?:?(*/P!?HDX !,#8P6B<#x
+Ó# 85,88!G$*4\'_piӴ//
+ @p/^wwۅ[J " *Pve)`
+I
+\1Fƾ^?`<F`b!"y6@pخW
+o
+G}U 6MYU\ 4U*X*dTU‡)d@*2P!^C
+ۧP!O0DSqM!3uQRLKfd)R`Ž#RXQEZQXQQ.B\xXKނEDh-3P@TaP0jw:PB?!V >A2ʞ7P y%@;!N@(ĀB넛& 87'<@ВUb&nBY7&<6քf&54 e33.L@ :`̒//x s %U-"e 5a ,Õ
+duIQ@P.dnRmm'} a>4eCA>N~[8C)ːPv-R2TzEE? {B}wA[4[NsUWn{_xUsu#dw1UW]n23+|*= AjrTw-G!;fخwɼ'(;|euQ]LL`29Ey;3L=_g.b„aaJ=.;UF#-{丟O"\﷙G?[]2tTS~cC܄nk wÔ}Uű; 9Ɨc~썏ٝ?O{[e#v1~y=W7Uc׌5Tu魩Х>?ot鹯N=Bm7tw.Fn;w[+s;FaPߩgکFֻݺ]ʝ._uq3]ٿ߅}!Tv컞 >pEλ.Ə>]t壃1>̌ϜϟdعΙ߫a:|ucyc^ndݷT^u.bl Uk/:O~vq970Qv+]l\йus_'Ggo+~vg8=}c^u׽r{*)pu{N:۵k5f~?/0;ٮ>^[Eitq]'(/'()]߻Ƚ.-i5*瘳]'(vX>AʝD
+gfK?lwa°)>OнgBמ~28~~74;s).7> U.tͰ]?fO2sv^Vv~uyo/mBUӽؿuk%֎ޮ4SvA.:}ϕ>߿wcB} #lvֆ]Beu2:Tͭ A4APM?g`gvcׯ~v=u9察T<y뻋Pďso˷i} ;em3 EoY=*;טo_܆
+YBǛwFNy5uuRQy{]BknUNMYAWV`tS%uLݗwA|/Bugݪ s?7| 2;~ݧ} ft|ݮƘ)P;5ߣFfe{>wt9a|\_wV5{~~;dɝv}{ן._g޿{ KV~&ٮ}3~svfzgC1:R293y,l0>M_KtPE拎;;3>W?~|PyŎs풕a~j^tﲝT)꺅1s2*\t%cnuϗ_=>آ̟N%Ww^^'G
+>euOzvUƆ
+endstream endobj 65 0 obj <</Length 65536>>stream
+ h
+@ OSF:x T)^H0FW'`M:P4(ZLk$.=Նl-,#bt c%1MbdW-9OCD
+͏6FW-;KY1;M7ۊ &88сdf"'fBΏ*6>^@GY%jt\u`1,-T`F6P1<00cGA J8A X‘miS=5|^$&hUV0 K<x!x3:dW:@OY5?I3:FW.;,"A-.J*  kFvv4Kya%GX`q-=\$]qH Ep`qe<^ Sf
+n(Qi@*X|T1}a!f|xI JGhVtNY
+RsTub >ou`xh<[--^NPFhX!!ťENPDXpa1:h]z-_;oꏮwߔ˜?Jkkza"L}n?f1=Xt ÏvzJS >N{:JO<Av'NPT:ݽG
+ n̴'("Z6>G-4Qs𣮷^tڊhͨ
+^ c&xUP_ooǸn)*\+TTzV<Vyns;gO_tܾ1?FaMR ڊ hi3T+#dc#jqtCVnnz--Рr#<:t
++0)8MW@BOP,YIZ#&xqaƉɋҕ 6L3 P$k\
+NLXr8KD8B8aPe{#4P$QĢn^I񊑔,KWXu
+E 'm6n(*¤4^DEn*(r#A#1=lxDb@Q6DDl)VCT-G6{-b|dW +!G6񁺡0
+PCJdʈH
+ dHaK,@#&(2 %fv .cH" Rmņ 5JfpY"*z j*^8€.԰RDUS!%[3+0B(8f) `8nFZbMX7?PL|5dxd
+#
+S,tnf1P&<AO9MY-pl!ff+pf2?M GhV$h3@KX1b,1I@0x(4kbp
+V4f#
+
+b 
+ O/"5=EL.!NNa&|f- p a
+]3XErB$Ȇ~T,y)#R<{ D@H+Z`uiT )f,Wl5狀]ŰN[h E~i3Cw;`ؖ{U
+5_ sAht`Y~[ kjXS湩Y8"@"ux& ;F:?%5d
+ IG܄L2ukӮ[Y<Q^
+aA.5̻y:mB7C+T=S5HȚ S6)29l9q?:Ѡd
+bu
+9S,.@>8 h^akp ۪@TKSp?J9Q}*;+ЩLB?
+J
+[(9qv00dxZTbVaףQ) MNN1<9M$W nWghՅ"s3#SkC6.# 0B6x˓clxE1^jg$癐hȞcDlMO!%}>;J@0%2eJ38beP#o{[MR
+E|TBѠ?0zVK{a*\Xl&_esT|
+[wʌ:;g.Q%#n MM0|-[)e#4hpࢷ=@|@\r$8^@ .Ţ٭BcqUi*' p޺gqe\ح2\ΞC'?Ʀjn"In&r>%s̽"`y<_(SyF'<EOQ¸S잇i ;'?r'y.:&~*rsHٯ'ٹA^E'U}2,6sYp˕7[{s Y3!Ovfli6tp;zTwinx}OnM YC T,ŋv."2bq.zJ9 =C[?[2q *)>䅙D섄٦ij 0nDQƉy-& f!Ώpp7)RI
+fෝ/5ïlHS@3 tlHl*9d3 VLxK/qx[X^
+3 V)YDLcy|"SI!fEy(gR 6Z_`2^N:xYb Vc@rR=Y=pX0)RP6ЭOwє.vh+K ~@rEv`E ^P6#DpƄf70$zf G#NxX%7Lv=v9ZEN񟬁)vYf@=)' 7awoVX]cfR
+|fÅ<L9 t5O?L n㷎Jk{\.O]3tXzD_*vDXF_0dGHf%o1[; o޷0(.i3g7ԝ1=gKX•@ǼBs"EЦ VaR/x#|9#%o:G1Rdhi
+ 9KAK[sDΖe (%'>.fx#)b *}S@ti_u< ڊm}t!栾5[E ߩO/](TMN}At3YakލJ`njԕZ'dhqU
+MV- 6 k8Tqs
+5x_
+!m }[خRZgv]2d |˟9%푯_p|t5
+r$b&:t-bt/=;f/6޹
+V,I invx
+"ȇ.]eĺKbfC V:5ew[lw)8 S2օK"-VhzSQf$Rj)8pc~Nk(|XTL{y&/ v&j֎B V+Y'koSF0T[&j;)E&6k/`9$̚*=>)s6KʥA5͎XB^Ӡ W/Њ ${[Cde<gM$UM#~ ֹ2ܟWuYRÁnc짨SIj $_kJ37Z} o+NN٧^3
+Q{QUy13#AI
+M,ɟH]CGrtOPٳoLyьOGbE2.Lщ
+/_h'JF//{6
+ "Sm#NggO5O5%A2 =Uٟ ⋓.I
+{rea+Z#mxM2$t 6-hoby{ZGmJ/Woڀ|'.x8F7n?K7~+\EG|
+ev!yY7p
+xJ Š?Se 0bXkgKȖ+Ձɴ;˦
+&vim'˲Q̹]8\8[& ʅI)TY'TޘC׍rI?Ѥx/yvwe4o'
+x=Gg,6ٹ}heSㄓG㤶E.dE©bmHR|;Ӥs7ŖGemȑ_Z1Rt)X/aWYC2_%a4@ 7 tmaH@A>4Lπ(`ahO5#nj}/:G%0o-JPFP/$hg>nX@BCAH2"#4⟊{jv)jNFw 姜K,Q;&YcP4m $^Qd(?+"Fiչ^Vx7* ID!"
+fHNڨ::NLһ[/|ReD=x5-KR:y%=B=Ί>ycQ)~C/Q`/bb×YVL|<SA5"v
+?JZ?_L*0.AR ү.G<[5%\H] h7.P64 WDߵ+'x Bg?/\i+(e͎,ƦsŌtLD3icz_M|S͕QIL-+\`
+T:pN Vo9?/yN{%h'ejB#%jgޤ@"?.<9[Ro\L$BIttƲ4
+zcCM@ynR.O"hr-RBZ
+FHVao}k|.?.Gf{'+j%HQ=nrl@d!)$v3*VQͮMR' ѭg~pcSC4T·Ռb!jnONE&
+9}l
+P6zy~lLdOfŨ"M3Dt v:t5uоčt&#Ng6t>Z,CI" Z3#bU74Ōmz On<7Dmm<`6m"eG g FGaRq_Du /`3v)bVӚCUZsHf`)k^xNP`WYȠh;$`:7`Q4LMN5%EeϨ:.4*BEi} -8ѭYĢy|, L=h}WDi闘zqkkIQ?͓&5b/.-cܤڱk E
+XYQ׫^&>$E[!4Y_}r [,,ęAcQ⺌gs_N@ɈNQ+)0dO_&~Wqu#s9AYqi|鄕("9iߞsFn] 3;)/-gQ*I Ai*G.u[\ Υzmg,"_Ee@j>'5k.KHdܱh;: q^@m[5x
+14hTb+T .+ZbC{fl
+긎F1d2FsfB,ˑBVsJb̂1ۈ>d Gpb,B
+J i,K1CscH)r"3u xV"z$1؏Q& l'1#@G&C2di,5@dBdثf1(s[̀(!yOSO2ZTW6uXvR WʒٷeJ!\F3%j#l C ]Y3Ԃ=\̾2+,X;JN4ShjJ5c|ͼ66U3yC 1^4bXQ2!9{tt7,ufÏg rV=={k{sMqЬ*d$848a
+P]pO |TQݿjP{8lQAiJtq}id; u8l J iVL#5%Nj-7}fj6MԷjQT6%z'b}(U3̟jF!Ԝ:xiu/ɒHvjiamp٦NFAgQx+Z2iiŢ-N+qi\4 TEhv9r"NaGz N4|! ǑV(l?zi~jbCf
+!` ʴZ:ة]KTSPּK=gSkwj V4/[ZܩiFfjRij9S+Ev*#njl?՚Vɲjӌ m$V !W5V5i,h-=UU XM+OnmaI^fwsf3 ]S9z)YSM1ڵZH
+C1Q35=V\& 66<lG1RixB6}-DT6ep6y6mX J}j&%]^Km#mwK'ppNhՌ&7lfs}#$M6߭ d7AՌvžt=OX0&gDo\}E{Jހ^mmj֛
+%;f[oSԌC/5G͐s+pQ3*#RZ\r[Hspٴ-.'Qu w8qԌn"q2i4s!+u ZsKD@Wi'Kfaf=.?NF9;S%ԌÕ܆Ԍ{OSΥ]rNL9!;5"̹f,o̙uX3,Q36s,@CPf`MƧ9s5b ^Tgnd9i=9#-2Ьe{;"5c,>g}Ԍ:#`yfUa6Mn% *TH3O閸tۤV1+*=Sۦ 勷MWdSaqyK߿=4w`4C>P7q C7A6ttiUN3&,`:tiӌ605nSa:ڬ!XO3HEE`;K,<P:ΨVtԌE$4;͈lt)ҐgmtPXM3=<452ywJQJ#< y4X4N34\:iƵ/+VM3wdAn|Ȓ1+޳QJ!3OL34mEf,Lwt@4NfDes}K!eP5SMg9"n6 }E×:J cSLiY0թ|ՙ{`::֩f4r]GziF:#d0a1cm0;\-X&s4lԈ1"E;:( "]A"v>4v{΄?pqiq4c*ٹ3? OQK3aA^=
+:H3QoCAf,p9oߋs ɩ yzW<C0G+tVBgf|^;'̲/42|<%=5LfA/7W̠?fhRf0 ͘hKf,m
+\2A$4㳂flAof8 `AO@3꽲A3p6 -z#)gDШgkH=dңD< wUT3O
+bzpdu
+}9Ҍ꙾~Q _k=IG3طl4cp)W@ϲs 2_~d:]oQ
+Opό_]_("?V~~QAٓf
+x
+PBx~`Ҍ9 =˝y~Qu#fhi+`hFE36:Ә+$?U MO
+ @6v^
+1Q]y9fP1 F@X=ȫɟ0`c 8f.xnjA(ˠ
+\$I\B QDN=ҟ3- A|y8-$$`:9 ,,
+!3ݙuF} F72c=8(h~
+V@W>Wܪ7kOΥW!;^C-uGP:K5Gsf=#X#'Zf< >%FoL_8|qp]Ӥt>:eAR_B#dQmCaQx2c̨+8$8Ae
+tB&b Ȁ 8R5L5A"
+=@0̨"}Xfl#Fw9n=eZ( `AzA)ze,3&^Y n[f,|[fTnO,2o0; /LF
++3 ,3 k  S mZXg e,(_E HLP%'3곇>ʌTdƜf&3h H+ #>(<HfiD4x иFfH+vis'\" Zb؁/dIieQɌ(*$3l
+Z9
+L!G-Û ~*T9}chQ!q2bDf@/"yj!3
+
+cwlB̾T<fdY:/~2j`1B*C{ ZEl!!PXnj1#°YQ9!iՙq$3?bz,*͍@ `>JKsD0,@#@SUo_y&×Afl.;#D~u1K*7QQ>*]oI3
+vA&nOWm'|Wkރ U/EiԘ164v ق-]q
+<=ye5^plxSBP:+/P+ ْ=IZlbX-O+5)^bdVBDO!\8Ъݳ]/J7k|MWB{F?$E1FbgHA|H1Qmh^d -1"uK-EYe~A橬U 2ë4dVҊ CNH^4psFJ #P#6ALH9LpbKmEY V9d,6q- @be{ɅFUu܊ ՚,>
+1D6Z \ ΆsZn&, .Uf5ɳy%=`c]a~f$pdk搳T /kk`EV C
+mBLAJwlXazI|18Z*z]l-rg9w+:OhtL[/F-2 2_5|zh{q ċCM8kLG4:Ug-Ot6?i JW*xM VhP@8u)bn0(n\Wh"r.P jsy2B4W~y ۇ`jUb%9%@s %]
+S'O|HXl K3 9Bhj
+*X 1<&*Z8eZ$.
+(h@FE5auAJK72۰2+mҩS RDO QL*Uza[!Z'I/| Yc2'X'ή>3Ri
+p$g1ZSZ k"{q2nق
+1 Itm
+X*zZjXr%@*.
+H܂ְH'82C 5AoZ(Nu_
+r
++!JDn0&FH0? 9@DvH
+ )Q+X
+/b]P.4,cU', ;EB'xkwY7PQ`n)Z>D]БUK"~ “vCkFar/0`>FuQk9r >LvZlNa\'s b o8Uh,̭6F4?(:(~S Nm1rNVy1640 0(A&A D+Hb 2H:Sg#zRg0Vi!Ǭ#M) +W
+,Obd5 D1S1%tD+4 1W2
+Vr&'SPtAR+"稽E 2|UqYw=yJ;CbT;h!j|!~Mt
+6Gs-Dt Xt\ /@]:?dE.[DPZ(:AO%Z*MR,smNR|&U- N^ƫ7C<4-l"J 7A1װ![iBۄIuA'5lTCs%MQ{)j(jU)zo9z
+mEr)ނ$@ A݃Y^Z
+!Z dZHjC0I^RfQ`1zC5D'[ >4JT:;ؑ~S^i bzr* yؑRc1zz"M2Et c]nE
+J:PkZ $"THXji
+\n:D(h<aTY)X? d Zc Vb d zRg'L/ S˭X-__*؄v*] Y1 Uۇѫ0~I^|9Foՙ ܂h")DV 06asN`&b"w&Y0>k4[,1yԴF Tf
+4J)C6īkcHaG^"(Bh&'v!EQjӑOk{ND$AO:
+{MΔ 
+ Z`ۋVۊ~,JOy 3A 8LbK,UXR@T]u(Al ^ zQf)WiEW'
+W^@3B-hhpt>T}ЙJàDpB !\l)@yW5jAםBMQELY3Okn&Nb-Sf+.*o*f F
+Di  : v_UZKmFuwqzM A
+\g V 2Dn 9Oe1Vnd
+p@" 74EZ7δ)vM&vh6FI\m̈́مwq!HḮ,Î=Í| qfLaCh[ j8a=ǒ<E
+̗Y):n ۃxPfp"Lb'2%Y}kfI`w"URPCeA+k.zSjdH*~`w<{+6DJcJ4!~ALY0^<w_uraw9Ti)LYi[QBsaBIz9^?4:J T H_ 3Ps=*G-fW v$J:HRh49Dvtvdv46":qJuP(GvBeajki1Zs %ƬA@c?lˡ|`fS^~`TنҜODU_a~'Jj}
+CNrE0
+&1JkA.4b8oBdfH1&.;ѫ c4gDE[`3G$aRˑK,O|OEI8t$D#6 `߉>j? ӷ,?5c
+bTTY'1+A-fA݃1bHuFb;Y~9]o#rFKׁL;jAq+-9hy/vl9XA :SMŦA΁5Vށ4~݈Y0aay! 3Ya-8[oh8`{aTm7f*!4+DoMMUZ56Xn)|^7O^< a'M8q.Ym*Ui(Vh!ǰ;/}+)<roЁ:{"#J(ih9?H! >{HnA\vC,6+5rg~qM3 3,Dնaj3$c`VHHVk,?3+FѫsH1n_o)L07ob筗&[xIUfmYHY_3O?I}Yc NsH:Pza/YcJ-:2bD=Hil=,
+8=鏦ԙ d b1 -%9,SGjmT.HK6`
+ؿC=]o)H1H9dcZ G
+ ]P_cWM9ޯ$|enW*C^Q kRh!gʌ {yA,b(z%>2WT\y}Px܇0uv§v֢4THeU:1yQW,+Fpic:`=YzK'-6[W9(qA4f %J04hٍ8Mmj=tZ6#T+|xtg_t r9xJVǽXJsP+,e|g>*FGԥusB]9^vG(NDsv$n f+>uCLzrZN(e(s/L3']1q;땬18'Unsj8'n`A-Fw\gi!<QꆻqRf^.t o8 Wt8Mط1~b4kn9n|Η>^猺tɨ
+j#9v3׹ܳJCNp:5';6CF3NmXDo7͗^aۏ ^_Ǒ7ӛ<^ l׸ѶZ-#:rD945r*KF-{)){1hJйMrt$,Atm~rM+I ia be/Rd$q세t s\Q
+=t@s(vJj\.}ָ܎ w6̶ =lR7\Z6
+͎ y`|xq?ݷg ;&vggt9^xfu>ز"؜O/n3x"cB䂴btʩoĥy`F>O}ztm|Nu}du@X3 lY];QO<[QM)mf qdtbsF[2]H[&c) pgl
+Rdd|bsO<H;Mm9lKkL-74a!szx}bnHJuz+J&^M@n88W/wЫEPe9>Q78Pw/N>'KZ{8gU^ff8eL[gyյ\tlWq~8|
+bAp9 WU nnĕpv2s^IuUN8]S}zuuV:V6;3N&UW#SA!k<.jhv:N6 m)Uljfl
+
+;Nq=Y2]
+F)6N'idd:5.Z9\^NЄߪU11;%6;c!!bk)='+46W3fW qZ?/\H1q47S
+[wݮC)[Ŏ̀Rf0p77\MrBqjOͲoN>TԸݒK1~I^4KVEYvZW}p,ʰWwcA%A&)KFf
+C>2L(+VNͪH+xr+pF|Xn ٿbT]c>rru.zu8MÝi-<aqsjyX 'sį si:qˣnskN}-n9)ul
+Qݾ[En~Z)yÉk9HQ[mMr:%-~csR?brN?+VNV^g0/UwRuX\g;^qB=~PW7S7@+{JݾZBbrR?V(rg ^af%jsK=sŨ;fwm;M !݌RGCSy]2.g$sTLVLw>̪LAV۟%D2CZ1ZsKuR\e$`&zH"/2Yݐ?i}zSJs re>:zRrFъLy-۱qT,~.9Ret׉w_}sKCLS/1M@jv
+h>Cqv<\/Dzadv,Y.ĥ%uꀸq*fjn
+[Ns7ys=x0͓8UX1<Zz6 ^pFiϢ4QiME4^3mV%3J|{8]rJ E vlo#fjɒ)YX=Uj? zcX1;#\NKh>wDi(F4"՜y1~j1njd@ĥ e(h9Z[bKSJpJmp[FmլQwivr 7z4y,ugU\ 3p%04a]HZߙ9ϲ9mLi*&E較\ۍ4\ W0M4S @ a(DYOU:U|H
+z=j99ava:O;Zy+6958vusR*Fs=:6CZ{%JZ4,juxqkb} SNqϬ..'Ŋ-n9TN͊ʆCRp[ΈK691j񸜥<9luSmNiUQp9#O qsG<.#wS{94-wLcg=vrUMy@Vu0_wym4Qt9\\pZ;u0;N}M]GŲ^Jp!o:=ׂ4M؄bd?ޙ=Ho`
+W>2 ,Zl!C2_HMT܉-ޔzl6PB mf8)ĚvoJY 2nBG+mZ1߁Y,1 /i,5eө-8d<מt1 ̮<?u>W;fqɪUC<)*R6\6NVruڇۆxs\Bb2xvlȩjlچZt]KVǣuu<YeX̎Ǥbt]l(1;:P\z˽(z5Wԥ8b=wl n--KNp1|c{\jq:tE4~$jrF=8oQ<eQe3>s9̸s>Ì s:Q|YU_f6t}Q'F':slL _<:^U9ˆnt)\Ft"Y*fG$s%뒺bvE1^Ml~ 4D͙Rlxԏzn>*GjR71B(3CV®3㹮V1`c(JqyM!5Zg.vm.HsEkYdNsQ&IoݚUwc=}& 3FvK{(]@|dTApcZ P jpHU8^4?VrEߢ'ޟIxa*84s(xVjMd8q,q܈ rA^n-Lq^g_g#
+ډYN:ln:#7d49\j)x6Z[^Pwc
+q#E=(Ɨ wh/描rUEj>J8neOc _NqI[3:ܒO۝u߳Jp.K~ [Js+}g;br,\ mdpf2y:VmztGݱ:LFZr]-}.um9`>Lv4OAp}y'8%r<Qܳ
+Y;LJ-9gt)-q\9 9-〸rY<F$!TNOHpe24,$Z?LW'>ԍa:)L
+Ft%Ĵx+9v]Ħ~3\MZ2zϱ_D]p/ $5'ϼP
+2ݿi\h "fULiN|
+RWA$Fr7?N@܎Ǥӽp&4(s:L6m|qV^{0eւGΟ~|8Ԍnjϥp.Hw\2a D8mVAp?{׌4s ?ay_[
+MB
+ ~eZao+/Q`fXLF
+@~eO6SbS
+г۞Ix)Ϳ
+5зF"9!$gi:NFSs9bB-ݮKQ:д>Z!m`%$S :$s{5-;)T
+yR/R,_k w#_pg:]qʆCNr;vR'FqL]JfGĥy~s?<9f-GU:JfbŎɠbsgm\RJ9:Tgk>Uێ y!xk6N׬P̲-!4S$n7 L
+
+/IcD
+6L01 C*
+SfہߒT8'==~}ΜiWIv۱n@C+9 i%a뷟<XT^(De<GVڊ K ]Y7$h
+"UZSkxgO .Ya̦
+&Fܒ绐uƟRFzeYc7S/#8?ȇ9೚(8x51rMkQ||旚_NJ{jWZ|to]Бr1^1Bw IR
+BJ)'|3Mz k 2J:6#̢@]w>iM߯S<V|'ibHJ{Uڋ+vjӉ/zO
+>L!l~fsY݆z{0*hacXTAe47iޯY5Ni]X(Y"0!M1)v h:^)Q4``NGE%4
+Rl #!^ѫtǝRre9~aD9tݭMVq]% V
+Rw` +?`ً!Du#SBo4aj.Nd
+TM''7r F{uȱ)Љ>y^$>p".p&@IF *\9/nZO#q BvDIR kAk;. _&r {Y[J˭h5_N-Ucd)[Ѐ\-/I,bT~\Ā]^kܚݢw4[Z5+h<[p~ly)KۉslEiu
+*8! ;TٔQj){+oݲ\IĚJ1LqVI;i]ý=X|@BJmAEsz )E.Yj+Xj&DoEYCM %{x4~s# 1IU7E6#tlFs
+Œ̢O-նGj#XEOEтESձ:.wݦQ:qۈf3RT)!
+[^^<if4v_jw+2P
+/O$Zɵ! mg
+M&Ŧ*q,<0v8mwQ\N'=]^ET8|m8fBHEAJOMzI&)Ȇ%#E+O.5%VZHr M{еurI%VgAu u/0mcaCUa[
+BbJ?f3IKaTIV_(0!`R CEѫ3^uskI]lⶐ M^=ݟbUͷr}Lf֫1ViTd+v$I1Q8/#̦4Ec 1>b
+R]D <mkCeʀVF)K-mָj#e;/PۿJ1lp o&/u\:o[􋬩=q*9`3ˬęE*H|\8"No"V9gf1"Ij]yo:SKJZ[ G5S]GQ:_&ȱ W ֙H m$uV~bWer406#WB˒'3G+3U\EgWkn[
+.T",P\(-ӛL׻"~|cQ:@n<yhV ӳ?Q~JO?9OϬiũϼMZ:q= Ɨ)Xg .'9bIh)R &
+m$zHRK s<F4O𙆘M['N&ۇS_uԷKHMc͒-G o>Du jzoNKd5M' ׉t:U^烢ϫ;Ή]a>L)p+XOe_U`4FBH%EĆm_n,Rd5O7yiq"JmT˲_f~)yE[jC
+ҫ 6~~_\1YdIazyMUrݤU3 [Sbw4jA~mqU A䊕=BA @a*YXt$xMc<8ZUym?h>"' Wۆ e]긠܋ MF2ZQ <$
+Hg:PcŲZt0a =)5 ; %c'kM3XbhTb͢QnVZ&?m Bz`~z|dt,(N8P""C!>})o-g #JzSAT#Z2X1)P"WVp!G4ĩ2*Uݗi7M8%F+olD{xrF}{B ˂QEZ!Knݪ:|IBFɣos* /] )RX&Lsxcjð#.l5`Ѵ
+MCL< dCF`K,օ6u c ۋz|n7}WfnX.l'I/KHM5^7|xһŢ'|Ts" lIb?VwyzV^D2eI0Į#uAK>񸥴 7 L
+s f!pR^3v+2^4;:~rj}&\iհޒ<CZ1CiufZ#Q~y8QtOxa:Ӡew冒_=8|Ԝqaj?uj0)~+L:}q^,l[gĩ9GPH*6^l^i
+8>&O֜d
+&G: ;E,n(xTil$~Mg&Oh-Qj"xHr'1 H4O9'}M47fv!lGy.S6hUBC9ۘT>g7'IjaĢokL3\79Gfz`uf,.8K"Kl/>r?&0cZodR6_%HE1~H@,R,|DfQS0H\ePBP/(0$YZvcZӬ2,&E6JEtPZN6[o&ȱ>Qb1cߘU_ GզH>?<Φ ~Pp5
+DptND>]o#)X'`5ٞEQi)I L\?&vZz Eَ@_5aBA-z@F$~IhVY![q#]p&;Kd9T/Z;f|iWŦ#mbs{HJ_lRڥioiif4eTwB JeXch%v1asJ=bqJ>?GiQ^i'xOmY(5_595cَ\+aV2N0Z$¦ 2?k6FkWM e:b#6'
+$ni~w `PpR0m['Rjᷠ(``v bך`w#X5CQYq67me+V#Vn}D9Ã[9j%(QP^j)OO[$s{)M#J,5e  a߶IJ=* v~Ք.5dz FEC_l@iϴܵm3-S`{C+6>*-ibInS2 *9Zg"I/ slwQ:ϰ>I$x UUt3a<(16VcA}hyd-߫XםUEKMKCՆ= kM2Q!T<L(Hacң gLP[CNr#)NE`a8)%Q2c%,w{VSN|UtJT6K/ٖ˖Q"g
+M͓MMaٍ UJƐJU8fma*+Qn[^y^5l!y&~H6"֓@j9/>?fרr)g,~~2DUx g=P5h:f=fp:td7eU}'BpۭZ/5mds<[Sf;kEP+ClOj F =eX߁ B | %':T0\f|}z)>`\ȭwMYU6S+!tJRl?b)Qd=GRlu6(6AI[2 &z܎Ź櫂͐|$n!0n4p9]|ꮂv NU'-i}EEc/YhU X==_jD/ޔۆ~w*6#'\۳vͭ3^Ew n o QV<ۇ~z% 8EϠ(HNI~Ta{SlVx! t^H2qal-Ygĭ3A/=h@ǧ&զWZӃD<]e(̯mMpUFjQz?{
+vry,<Yb,.4>ä"~\$8ءJIn@^$<Yn,P/SM*ub}d`|̲WQ'ʯJ6?ٹQj'|PBR4a2k4Ѭ(`bU H4:Kd# ejs;8Xac6
+ U7nތ{$\GojLĸU%aKf-fqYuYzs-G<Á%xUg&Ue!I/6%ڊT+h+(R0v zivG*iMe3U'
+~SсFd}
+%4Ҿ@MdhF9z$\7 EjJ?m~2T&y)?ff:Sjֻȩ:[#EfRڍu]{NCf+{
+rG#NԼv#CY9HM[\m/OrhPzg*`sU ۅԳG-\v
+HY|"^gٚj
+Ɋ=㸄z!.~-M?i}6"h>!|8wg^gqfb<p~f|h94GhW.c6XmY4g8v`4! sPڍ)HE{~ϸ~xnct G ,}jLoˌE㝊z)
+b)vKZՌMo9oe۞se9^g#E4|B@|/Zm+N(v( B-tdhj}j$F˳&vC*۝x&xuV&#rb7%
+Z ^V ӫ#KL?n"[01Gag[ dEyծ[wˣo$6G-gcoZΟ$o2ͱJ(HYhzG<'wan8|:*ףv&}ȬGʼnYa(/K]i37"v|V%c:(4؎զ].# 2j-lnP=bp0o"<alZFӓ懏%75bz2Ntذ ,C V jPΔ4mpc7C7OB|{-"z_pJU{g8 /Us 6IǩJ.P.3\Vyj{vϑך(mF>Qզ¬3e`8l UFv)@_Wtl/N6tʫ9v[R}". vrtDZό@^t.i
+ǠcPId2%X- H}nkK-ͧC1lB7g fߪx07'
+VÆ0X`i ʭ1XE
+۸Bak@@e{R+vS2uzP|ԲXۣ}o/(mXzDvYd .3={U=2yR;Se"Mg[lxӌZ026۠#"G (xOyT}CsydVLK,Eւx5y iHJRtxbVl^l@><J@f`#ZKMم̒G7oOK:kq~ٞ<4Ӑ:]J㻂^N F7-5S0Um&$NqMZa85{6Uj
+ xٰF IŶ&p*Ș[q[OQXh+#5.y$=!eaaR'V-<U0DVc+Oj6{xhYe+Q-{m.MgG0L£Edro8n2yZLTUgӸTyrPc`Y/ 5<̊Hg٭]zw+~Yߥpy%a=
+-&UjJ|4EEUХ DEWqDzg
+b祌mLDh7[ޓV_6'DQEZDzV Y"C1HJ[1IIX<FW+DT+׫ka̒;|eFB4ovX֊Z'LGD#5J2r:WHBT`_ BB^#'
+S8
+.2^}4+Ӫ|rz%6Ob-P>TߖEWb,=<`D$ p|@R'C]-gTx;uU12](IJQ}fHLhH }V/6)cBl~$:eY'-zTּ76=Lf!fsa6LL߳"Vv +߰>ڑUݢ@`lO#kS0iI^aA*D:HJ!yt*fvt>^oFkOzц]6[UY@eh@ (Xq
+!0
+Ki*`RVqQ[sm5ϕ$db@ dЀ` 4*x
+a
+"QaB x
+vu`*B!)I`lhLA# $hp @*и
+@@h0@ xE
++ar[<UkV&6`
+C#6Ѐ
+46T 4` :h
+'46x
+8Р 4"XpAB@142Ё 
+!c ji^tnσ%3F{1 4A
+7-\|5,xA#и H A h 4(Ppa0蠱G0>XQJ쉰c$LČ۰.G {5v")T
+.thHB
+4hX`#^ 8"R
+*8Q"EŋTR P9h:VX@K Er:֯ 4 C
+8A<h@` -4J!E 04(pQN
+h1uh\}hNVǫN4]qt
+bF@
+014, Fp1 Bphx@&
+& Xu,%1IL`0
+(^(HA<
+ OdϹVyߘhK[g--4֜7^tF[`:@A2=a5`64$xA#Bs
+-4.`(@
+\`y*@Z@'
+h.F$׃}K055$G!vXuds,b@Ug&&ä7KTL s Yve .)9GZl#H+ 9=g^I q>m(ƈݬ7nwCJԚ# BHmYȱ2bCV}eՌn{goQ|& vf~'e텔͞.B(VH<lך,zLe0Vf>Ԓ,߳^^3w%IWlbq 5LҌ>X&}$b
+VL/ɬ! w Q[k#v nN%S YGHJWoMm^pj9>6qL*Z Fh.DGQhhr6o_)MzS1BZl6 G0.{롲d6AСe͒mLn*H+FfC"
+c($Dvl u+a-CKIr
+: b6/6h-׃r}DjbgKo[h9 `
+ҫmy"Iy35S - Onmsb1^xfA(نOL *ŶMC_7Tf rH8C[j+Ԇ,PohX[J{(ɂQP!{y(S_;qXF‡f)_o0Ѭ3%V$8-D?)(WNkPrJX8u"ɽˏYBLZ/Gۯv%tU棆ߨg E[j&-#6'Ae&NRBC*9zI_?}fm?":Ӂ긿3 QYm$)4 H^0F`L(Al %dGk
+ˬC`/C)Vl#E: a0 w
+C]cbNAPQRM4J!lR57`ђ3(J>iXf'ҫ)4w"yLÌ܄moL fae]j(~Vf#vn  cݲ{%|1H%/Cn&D͔ڄ *{R J^%fN6@);A=0qP(
+0V#Cʬj"U"X(ٲ<jCuR Ǭc,` <ZPrG齀;Ssex M0|,|ņDEt Azy!8Ii . _l:
+6H .a9jB ۟;H@3
+Z;V4D1z[YJr$ dkpSV÷bM@CvBCZ
+0`*~Tk0P_iUrK]o%K. 73j-GC
+ ؂!
+V}F
+ *@oh"B͒Y._d%|Qc$-hW=O@)OE 9JdpVJDB4izwl)8_x2Yn"vbF[o!~Od.Ю{ ~3DQ Dh}!j0˭JeU4A a;0c`&Lr(JΖ E x +Jsd~ <|u \`X?-bke| rݿi@ 7u`APCә *aMלB]2x?Xf&^\@e0BvzcI*I/kC>r(hhԼ'쁎*. :9Uk9Ms@ W"N*@QcuZCCʂIPjcuOJ2VR
+%>2OcN~l<"ٚ7LQx24(>Yk%4yH*׋j} dfrd<o%1^( B@ HZ9vZl)*4C%ך
+'FaDPRmaz뿅3,9JbXTZ'Ztq@j TŪtǫ&BsBԎB ;ыBŎ҉ RY&¦](nH"x:k2qj3r{4+PfT~ ;\.H2MG)@Fy<v
+ jl7T0;_Z{a%IEV[(3%Nc&t~2'JAeYzqQXZ)­_k71Zipҳ~C{<1c9+?"+Z4N:Hiqk<*P.KE{cՖUم w7Tk!r>DIHgE=qOnǁ~Պұ]ILRlOVuj]T?cuE<*^!jdWo0U8O_o,<.ޯ F 9s&é1T
+Vf`h"Т$6
+-C
+ƿ~Pv]0ͯ ՙ T!ԲފVr^EYg*Xc>8\-;_o*vW4K>9eG`B^d1R(~m
+ FQkE1{/\?!q+bmn^)Y$qk*\k1pxxb d5v%J@dWe8zjggכȨ
+Ra zPc G0|ѫ1b+{"If,jXgeH+*;scIkbD@enWb AAYeh'zNoʬO ^'E"j9O(ECYe.Wd,zXidJh gβ { jDԜ[rWC N4\(qXn5|@ H|(rV=ROQrU'̬4$[/nTN/Td˩2fW$yݲgPyjM8DHYoj„jg27B}tORy ++nbEE'"t3݁̂DiWG+筄 U&#fUNp1
+(Q0Td1ï6!m<nGmr_tELQ`!bOH!:#"15z,+
+u;RE5 ӚiEaFKRpkV2Mqe <{Γ.J0~$9E_VW%Q*1!VY"K3
+vPf0\Yɥ3
+8Naan4zs&J<xcX sĶXF;9mˉ~г~eVOYIb0#);X^(&L6b8Re-z[lЫD!}QbSX
+endstream endobj 66 0 obj <</Length 65536>>stream
+M6,Í Eq^C:S\y(\FTa38Iةٲ?<o5(y'{zrIMYY[X8FT["ZfFcQ`"<f󾗏{Q5gmi_p?n؅S*&I*DS?,1S뾉^b7UFժߺqH9'Eo*sQLi.R/蕬Ԧժ@9SX~c_2hXYZ^KnlTOMgm}>L3QQ9Ԛ45L=c.լ=1O
+ze"Z]0RњLJ?ɑȁ
+lr #|p,rI칏 mڔŎVIyqH
+B熩ėuA<QbriJ\.٫˝4&j*\0YrC:K`Pa-טJrBV2$},fYe*ㅳX vVK.<:9j_az$wnG|6 "4yE1K 3)"QBjZMI iiy9D[!#/.9?bn";yŔP:3ЀGSp&rJ DU%5d%'H
+;Iuɢ5J8*~x!b4#0ʨ8ҡ
+TABPKQTS+l6R@n9f6$Wl+hc( zn,=DF/BsرTer*ʠA`!]iBv1LJFlFX%EX8KYV/&xJe i %ŔDB5btDtUڢ:i}WYk-/5ZY6~Ym 5MVV.USJ4^$-Oчb <!UG|:ht\pKG;YON'HS6=Ziϗ5&:C!zH4NH`+] P<4/ $AX`lQBBN(\ D0A\5(g3cGئ[*Hhħi
+JvO7lvF݀<T pS$bR C h#p` $ ZBȆx`%U~Hn7OYW>V]`NX]&/hWaUݦM^c,)qԇR !$LO%IL|`%1D1=!UZ[/=PL&rslE ki;P3Qz:Zr.%H! F|%#|3&!G謀}RORX[6]TŒзD ܒݜeQ]Xiҗ̙Rb[ QDU+(ϵ;>"bjbfUQ qeyai@`c(-G( hP$<4p.lBA@t
+h
+1lGsfꡖE_nϙ͆ECS?fT`d+J ;PlрH0/_(hᘠ&l` I'׵A
+LQrJJb
+!r^IXg}eŌHYfR*O7^1'0#jL0<b0D=!PS
+--u&|WUТ~zYh?9\I\EnDt Q@qÄ $ՄLR 8s4@qᰅy1YԊ.s" -%l:$ʡ~j[0h~PF
+8078ȠS! 
+( B7ha^-)sNr*Fe!s$AF_20pVzXC 4z2z(FK@ChCLzx H%UǞ3 hBYaUdψYH[*aZk @2EI* a(w$Ve/Q Tz#yp3<:F%ԄVѡ
+B  `
+ aD D VV&8*T7TUb)dZ6xŠPXW$. ֐; *h@T0<Q tS: \mDTmE\PL:KPWϟ/U\q@" G.(@
+a3
+r0cZPը8QȆ&j )+OT3s\XV_!9ɩ-|
+4)2htƉ0 |N6p a  Ja+ dL.DdړU"c{AF`-bс, +8aF46ЈPF
+4(Иp
+
+ %*X@!
+r8
+Շ$'YMS:
+j#fi ˦*YߖY0"pY\U%4y`&F ! H+.D&VO,-vB\AaX(ƪ(H
+1{r$ M&<02
+L
+4"0(" E13txK
+[F-SP!Lq-*xB:_Qi}RR`ۄ(r@F( HFEdV0
+5.pMZ򜨸Lc61
+DuQT,}8Wr $O` ?H( KZ(<[nT@9+[>C!HQ ؟CSp=41qi-m!Hpϕ3QdZTZRQי5J~`J,Z9*B$٩
+s5^bZm籠(#t[[%(&
+<P LIV4Fyngmm.V+s5 z\@K_o"#ؕfn'猎iVx#7>J]h'vMNYVi]meVyb3%(%A(=Au1!qۨH]Ӱٶ<Fzix̚͘=3\'h
+E9 >&Hf&鵅 ĥe^1Y\fĖў4[fYeFlS&[vg"01cSC8)jKn-}avJPc#%o JGdUrO^f< .nu~F! & m}n/Ъ9ҩMeb(|oZg1)rJ_4"2Ls$ЄB}Xl`AEd/QAے݋h'%k}gK/K X}\KPkЗqK4Nj_e Kx ֋D֑2
+DEunp1%ՏӊĕHq&z!ꃖHilRY0&'Z0]>08jQ-۠n$|*
+KJWXi)O9 jm*ZC>b.+UU1"pV(*z ;*Bz%5ǥP9im߃P=g}۵=55V%G:O*48կm7i׭uߴK,BjY *<8jQ g4~K"J!`2׼|%N"H?7%)f3ۈAmX<;5(J^cml4v'#VCzn+ZgF=o^e?!bMnϮh)܁3%4uuZ"a9ǎ!]?NxkzŬ[5[UE4/ۨmϞ26YmXO&n.|'km}Bs-Hať0P^u\`g<L Q6% w '\bW@ƢL+M EM܂ ׆ȄDVm
+5$4fCbi1ΰّ[lTZ#~qBQWo5쌈5d66ƫURDU!03֋Bj߳7-}ְLLEz56̊K귥>y5u~WJR+5iB"q5NK(-vi޳V9L k%ҷH]&ЗY
+M$RO:=T'OXeF#2#9ry!"L5@Qj*Eܴ۫}=וwN.?UZDTNF_Zi Imo3L L`"dDEd赦RYԘYr=cƟ,|Zz=+x U~e6ߋ?,_g./tVMf,O/݈1ߞy.9aU|ݒudF׮x+ ofm9SpZ^ѣrJzmƫ-cjiKM
+6ͮxx*_7D:jD4SرZVپS?tm*(ԳnF|{n{rl۞Z0PZc(BWUy}Dy1h r3ybW3q Njы]!v}C^[n̎[Y˔Ԣϰ=hs/5FLTȌU0,h{ը]qMcVnnMmޛ~V,TuR\^$v~F\d1WmzU0OL&Jih%WluTUˮiܦ5V)ySqO*h<~Q*K1|DBQ3ӪjfQS<_j3^i]s5 R>crGy͸ I嶣5n\B,x
+!K )uEjZ߼ݎڰZ' ق[3řgnkRn`m0QybT^|P(F_ ßjV~{2CDe+8I, J?SIc4*$ZQ' WmD _e6S 6ߐjZ/`묣.q4*{0l ;3IA1a&H aS{X%V:nEn՛+9B<<?${pVAsgYͤFc@:q~3q㙄uL&^*Z5 ݀/3N&D̤=㴕d:͕U6%\+ZMU!Khofo?6~ Ƚrwa5Mu6#`dBO\&7З݊ŴB^:QEng[d*U k'H2=ai?*xEFl*9 ( Q JCf!Y5,E& {~t} ;vfJ?o{
+fKQtz8ja;z<o12UM[gL(M]GpR$IܿEP8Y(Wli(ݖ"=6 zᄉ=b cc^RcQm$E3:Ss8#2"^@6S^eE,̞EkFUכYϺ3ficko:VVn=,ڒv`ℙA{:洒o e]zόZqZRNahlYs^͞>_W-ËS6Ktl噤@D !9BBal:R0f cPzEMPUiQyj1[ꅶsR[yf<ΒWtw͚T+WTLőB.V`ʄ\!׋St\~Yz~ d
+n+if}07U/,5F%C,L "B<*R,(ԼU[3!A
+v[blūF(Й 0CF\rPQsȥ/eS*Sn@i:Sq6 p?ͮ)x@a8,FծĪCkézT8B`0I.9R$?^j&|S9Vל[t[K^k^yY/K~;^xIȧ1?!CjO6X-m2,<hiwik>Du"EyLHd "qZ[*3YvmxѲhAt2y6P1, 5ۯ*W؄P"J]l;W/Z
+ҙƪٔtKo$Dm^WS;u•g7 <AyLњKQCuAPy]ѶLF4 H\=]EY7e3CV[ohK2#SQdD;`$[
+6Fn 7Kp!tWJ+Sb<NqrƳ~8DXW63e
+m"t+X)I)8a$f(}RӀZl*4.-*͵+M
+F2Sa~ي45<k߫zZUf KFx _Em^c:. >{z@0RyMkP}ˆtf1drC(IFA T
+g K[&̒(R7װv 91JʖAzFzF5q}E]r:Nvg d7#9%_ngT!-@ǐj-_њc9_vvnr<{U>Fag,w%KZe]b̫NȪ;T^ĎNxB#37 bҀe!fM4bfnC-ө: fk%Kz.%Iֿ0cZ ѪʳÈ1ap")JZ_?j2ErBkB
+'zs+T`xq[*`5
+PRNU1?IZ]b?jɡ#a|jU>4yLPT c}VyXךG\rk3Ӯ2t-gan0Ud!IFI yc8U
+w @o"t"'$_ d]j! JOyŰi҄*+1T`-0*OTtj.Xkrljm'"5CvHB;U%ۃTq=ĸJ <X.Q0%ө2,[LGv mVe)T)RB
+CyWir^m7U+Y 刔nPOfZ`h?NeX`D\:QLN1Rq <VtlF_n-ɱ~uYr9Oa⤂ŋgŶ5, 8CZLblvS
+>^xXLDz \L @FjdjwP3tRC!ɍzMgjq0Ҥ*[!)ذ{ ":H ٴ6eZl3S/7c֚ing 2DR -Us+1WZ̄0"31[p$BXxW0!">Ib^%Vӊ g
+f1z8mOA>ՐCe{1+v]j,-]Gr!ůZʱkDP,NӘ ،5 Cabp|F 9I9=(ƤTJDqD
+irz)KpISK 
+@~*=}m}6<g˪:Īm۟ծf1Dn4ϰ5gGfҋ !J{!0βyֻ8V__j-Ѭ9 kNR[BtT¼J+Z;SpQC)E'Eۥ'q̀>+`R
+3J EWg.OtL%J5"{xZj5Z*3䏖3,p,iI 'V1MH $Q]iЫ;nǹn&7K&z_@a !>A W+؆J-WFYOPc8SAѣ*q~WR 7v,A)x &ԌKMD͑{/ 4Of,M&ņD(YFHMj̢{a:
+H_x ruAr'QݰH&3p*`BGǩV&X(R`dz#SYFPh`j.ھ$w{xgmy!溵@<n?HJPk,ZeY.Bk
+4G&t)SYgS +1>9/>h d
+;<¡v]A!mSBùrHư]=][v;Klm JSj_`{V?b3$0_n~w8؊Y2"h5'!X7% 4-i z?i>J!IDYU!f+MyevVL+[_M{Ğ9P=%酶 [{Rm=>2[~~v:U+EjNȒ*BTDq=2}ʤEZg9׮4\1yQ=jc95Bqr8΀W ElOv0J[vkj5iP൒߷MfM ؆3k֋#iA
+$/bvfPˬŎًY\1r#b:\h$BZK!r'Y_ߩ]5]`h}6H Pa#@ X\_j~0.Ƨf.Ϯ|=l X`$,Pz%%M
+ٞzt Fmfd7.oB@۪Y6?Iaz!;J[
+"Tjm}s^OJlzUFC\\HK-E1
+>#:[bgٮBH5AzБ
+|(hqjQRV XNc6т-p,Oc+N-)X E.b<h;?q EQ!q-۩wʇ6~敌W:#9~>z\kxL
+;
+}ӓ~ b`$GCMʇג"p#[j8z&z|({_?*!\R @XZf/M06#[*ǽR3y&8jSrvE2iA;H鉠#i!=sJ 2g0c*aVq4xI;@咠D§ofanܥu NW[ 1D0~cW6=o$[``q"@slEjlhuv_u +A
+RL8؂1
+6)p]ז|gy0Qg\~tr\ , i^V &&&Բ(L?'\H 1UāL6AGӫ
+sPa>pR,uD/B@,58?ͦwϖnWb$ە '^3Jn'p
++X4vslkQsQӵ:)~ 8Z0!d#Ux%V|jTQ٦}"lx6 !bh<>=zn= 1;,R.6 '=#;</Kf S 9 N{ +B [LJLc*[qs7A WVZhr>%g\iPmy̞`,01`rA~՛ZsS7Ė",6 5I B_7^k;г~C6
+1, V1j5O0Rj O<$@~J v`? u̴
+vߙRyӳ[#Z_\CĄ?`ePR[X1{ JVjlPyZAef kF>W@hx0NcX]!xAh2;Ηacqe'uZ0J9]DVh2k}VBS~@UcCY4kFpKXoQ~π4o5'>Ө
+ 4tLFro
+)d^'zD TZVY .DPI &aGeR|sc fOo}z&t&)egqz${O=Xf,Rw-k7!JW&Fœ0\_l/Noȱ uݘ)M|!A r/=R`9Mbns;ӓC~sm[ߘ6ZEjVD‹[R<[ET}0ÃS:b@*V
+*wx<x<x<x<x<x<x<xw;wǻxw;wǻxw;wǻxw;wǻxw;wǻxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
+L\1Vs&2=G$p&bF 㬂tU0ǤsHKUGhr[\tGσ-j}Aa1h
+׭˖TctEݱVrygRpܬ[6q:%lNכҋ"I06-MWNh9b<p+Nz}۽4噟rT4r9&*޷<"Jg:g Ba:`se,ej8#-7*^h%Fqi}πf2t>[0VhnN_xSMǁ;N6\m34/bt\+
+G'62U1(uF
+PgF`u+gW186Xgn8ha-8k.
+Hk9X/<Oz*YY
+w 'v܄t\G*Io9g=Gf)UjDNH侒sZt/4M7Q뎁Ʃ́.CVr|݀ղ>e ;#j|${NYL4Eq˩\=Av<ae  ×;S0ؙ݇BCõ6|g34b3P ׅR߃Z !D0s?([Zj2d xR8$Q}'U.wԥla23A4H/)fwIbt,Er>OF|9L|K|η
+q|
+.5~Dm깖^rbÁG[D2w &MbR8YeSJJa{6Gn8:ao/t<uFɆi/I5c8$vu>W<]d<.5/+j;>0N{Eg-g4vB0E'8YW_I
+C׌,t3J Q̯R~Do3R/ #XWGtEϩ'S v1rI轌Ҭ'ն* ?7 DRPV*#=z{u6Xk+|\:(nn9(>#tϵ {fnE+VL$xUsfS:Rt+.مv?#
+.,Yj+Fs__>y'uP )~tROs^rN,.IƓ uۈ.oGQz=o5S7N]2<}c0qӅTm-gR)E0b{Tvb{0܌SGA00ˮ3Jt;K
+Q>" ׂw8&(Hr}ɖAtMj|F!g!U-ǓcN
+7@B(|wQ.AH T\ɐ`[RlI_]9!249^'t9Oza޷NdY@. EI^9[g;k&uÕu2^v2Pg0VgL+z2#nmYRw
+1|&.؜  XBřņ]
+^D򪞻y$tT2I\KၹR:yCpۆ(0@m9^c4mGUdv.8ηs0ǵ\Q/5:`k*to&݌QNWֿyLxy[. g/D~Bu7>(MxfȡnDƟ>K ;~[n<T[{2%4&+Bq!@Creoj/ofϤA9]S*F72,C ޗ !ɱl'ƴm\.@# wBTc9_vE˳~Q;Nu?m˝js
+>47]5Jt+Ƴ$ q0t% ^a(|\i=od5tHbcq$7BqP<huj\/4t|"u\v;V  +Qcd`<vlF 3s>'|)Οo0It^|16β>YlPm
+KFr1ʱoԪ[Rb$9jL^߷8ʹ?We+05d 4Uv4i.M1>)J+au(^wg$iiKRs=oDq?kY~ϛ'Px\*&zBv'D՛( 6Td/5-'eHo;]'R4Gh~=Ų?gYBNJ ZIZt6ڋ [ǑNrcIһEו~zȨqrZK3`@F}W[ Z"[0ʖ+V2TyͶeP0OQw>הz9n.WC >R$c/z'eUqt>'ٞ >_kD*Zdפ3pUTߢ7Yk$p҄Y-I -hxcYk"˫=+ 2YjH8~/ciuvba)0 ׁ<<lTS?bsiz߲[fo%c^6Jw9;|q8^w"H;\m5O?iEo`vWx-s律z9XZ
+ۉPaP>I5-q=HEi}7̧ixorq8tX1~f=/O1F=ñ0`=w-Yj{R}緞kh~LBq;MI<p1XMh8g(p@|F2J
+_I7~HMQXyDU5D@e/Wxzk=p0K~(w`Y`Yjб*;9}=߅4iF^DZ%!l@'X/Kt%8߳ϵz%
+{+/J{9_+QԀ1q8f E8pd~
+Vv>ZQW.DF~%Yb,}~9]x\: v$Զ6-YW!"B{+5y/2{JKA"EB~)N,4¤vf0`V!D/4A>u֗(Ҕ5l2@[K{1zTl7rvZ!>DT&1x-ka Y4ae90XbV-W?Pa*sZyZ_զ/ίYS6ִ? Vňݢ׵̢ܠq] v [ߴ7hEy~&9 SnXv3m62 R  F<؄XkPm8Ұ63a`j?o DR|vIhObzSY~hc< [H1Ci;9tD|@̀s@Az%E/6%MD&0r9K݊0>q}8z4M4V"4e8epŰa}>
+WL4wZ-{ZVy*0 "=c
+%>ddޣmmԬ7zD`)P 4Mbxih86_{ `?َ&t5Pf\XzRG:b(pfG&rQV` y5 ($E`m2ΰI 0K Un}liLYh5KrX {UȀ+ m fv3a7g u $ 3Mbh!Jꗨ7ֆ3 Ya 1M +DBfNFFw I}P6w@4<hng?3>C_l+JF*0
+KFf p5F]Nb\m2〥 祖{;PuX拠R
+3&T,nGJVG#ɭ27=qcK$]kby-g9DQ:Zj2ϱY}";IzT`{ᖚԘfTެ>c;<Ts܈m$};Q!=
+zuSr8$Qg;CXVs*} x .Ug8I
+sB@nuۭ[
+(VjLaPYC*/_aⷵv!&HX]?yM__n2үw"v%`M4̭'Ek= 4Ϋߖ[2s`Δ/^x^OFJJmAn$T[i50iXTkOHOQn*Iq^|C@6M
+񻦵E~|JfGJ|SzN6\0' C3kJR\_A.JsF9~P4D)zא<.kn ,4ϴ<\OUbTFyfW*Rz?l;= T:9FkJrn U +3%Y[o-KQå2O}s_Zs1ϰ;M[^|!<HEKXJ
+ dǫֲe2yUxuYN Ә 6&Z
+!ռH܏b~&OREdy0}0%m}ˡ/x\k)vn"pv~:kj=Dp|S:!tZѬ CxyݘU7],O@-ע =^A9 `e)?m:4mgV-rbQZуˑ.70Qd/xUh7P|Nܧi/|{79[n p^Z^ #֚[oYiJޫ<N 1Ue/Q6*3 8L>+z\7f^J56XNcZ^iXG%yQs/FuX>g3gupRX9Sgp2U/ K ne3:
+͢b5bmQ!h\j)F0<ievq~ 9#:8wyAby9u8~6ݿF-<ȖY"o5bODy9-CUFrZq!?I0 ?LBSY+7Rt܆G#Bs0ݟp>
+&!VLV
+ |TZl8vwxO6q|!~mbr.{b6;y)0'锸ev;L/,AVpn|`X GRԱh=(2
+`\$+8N5 G:^essvy͵\W 9rJa Ӽ7Bp5fjg߁uk%XtE
+`õ`DxF͏Zp[qCǜGU[ ֛q+- 妴f@Q [ jH( .Lp-6۳KK=b:v9ʹ~ gYmJVS/3~tPEoJ^mBbIcُl1&o|`L7HE8gYg4D"LQuj44.4;Wb>?a{Mr\Rp;M]t;bT)8BGUFS~p.(5maIқ7asFehmBZqzf&H ǬV; 5:Vj5}Otf9ƇB;":`m|)Ao=䗥F#2gc5"8mcj)#ld5GVy6C JS-O`lPUAK*$El:` G+C# ?Zjtll0\$xUkC/c{)<¦jm 7t
+_˭-W]m|@fKMEMN1lYA"l'gYd,z45[lR j@dey*~Rqn뿆3 T$ PB)jw~pʕ(E6G&Bg Q{XuBnʆ@Yc8,ᖚ-79SkpZ VWi1U4LF"7zVkؖ@a2dz=b;zދy]Nj8,E%C wЙ(v-g8]M XPЋ K{1;I?o8si/4Uv&Y~KOh a s78n "7:;F}>V
+ wơU7q#buWYr3Aб2yJc^ZD+dRͳܯy$rlx ˬ55Nb]؆)۹ z$ZLEЊJ-0x/RbD%l(vTT^{_
+X5!o8Xp d
+9%&zTB-+W B-hz=@Qs)?WeQXMTk-'efb~Bgdbsa9OGK1%|NgLX)z\l/`vcrhLWc2;ӵ&ەY3^EW^kWkwOdTj߳uL{\ql p;' ۫ݰ:ɒE9fR:*1:m/Ft W2{Jɉ?Yt]J( 71-'r4βf~9~׀Ҳ)=^)EyQ^ >,͆ˌp?&z.ZHxy@sIz4Ԋxp#I.N+Fǜ6z 4N-Fn?"5AKxZ)߶T-wS`!|i;1%6aFR ]UDLUϋ-鬒D
+Ҍ^s(r6@%2z
+B^ 2Pt<.؍8Z_j6Oq(޷
+BTft'ʬwz`D; K`$4"Fr,>Oq
+_:TiP4Xmo(HP4·<LWC U
+ VMq0˱}sageR rCu6 l FlEyX(Zf\r9(TRqhx$lXQ: 8  qZdRP`YdNޣBZhd*vDap ޶S{5n~ct~>Lu@M!ҮԬa=[ gQz'ʯIkyzߊ~|-'ჂҞTw4{ߴIx-<
++[-|9~c
+1 4Jo%/zQ4EOJ
+9LRC|j)Fcc4>>rV R_E &N)zj^"*EĩdD'R !8
+6\*q&|Yh+z_j0D3dۭeQTbtj~,CLqq]igZ^EXd+zTfh*Zc#J04^(z0_u"='C']XTT`c=Qul7 <J,H.#U g˓Bz7r\RmT혿"')љu'??MX 4(Wb{D,A,5"݃xVbQ VUdNiW٥ilNܷZܳg}& ԛf6Sb~'H{ _TZߕ o^+2dͳܿP2CRehA :yP"zReƮeX>NڊՙI|gID;L1@z4O(}G\qj2Ī4ބ,DND|2QJ eLZ[ŶW[w(W^w֮[5\Gkl 4?,6(2NR R ef{nyT 6 T'zUe~JNBc
+r,~Ӭ7)Xbe2$ڇE:UĹ9RkPoi}S<mP o.J -ծu2
+9, /x
+hKP~ j}0ߠ$6"8E#ZBz`C"iL;S' 1?D Kܥh~DbA?\j1qF}i&Tϰ7# Tfʬ'0rT;M_=$ߓ[۹sZ0
+191 `'M!(AILFe9Rm036ij<ufնqrc1b0z߮s\ $/ 0F@W/÷ jJ-O\j1ϰ%& ߖGRrCAÑ3Ѱ3-SيӫL|CKڂ |7ֳ
+-<a D\HRmp" z/ɲMd$hB0wىDت)0 W݂e(-5O?/|(>1RcX4\,8?PItzB)Jr{.M-5=)16ha8Os D\8>9jd8mW'$K@ߵ#ZlxkX Y@%ۃdVrnG-/A; V+Y;$gr>:Wi62iL Ʃ1}[FnjR QEʌ
+M魯( /B 0EcVʼnu(Fy*P#֠E;Cơ<Yjh"t(7Yl-Xm"GG E8հ ԛ(1 7I 6CXVD`~SFA\m;dH7ufR4'<Sd$pI'HLMt>'iH!*XiUQB߁3*6C*qXb551zTr7Km+A >iPjck!SY**na-MۇB !8*6[z[k?
+[`sAgY_\w&Bp 1Pj'F/uk-kpIzO$qj#c"kуK E֛>9H}N89 J151\PqcWfG)rY1s*=k
+:BW5y%1 TX$İDA ЉSI5Cv6<=igr4-Ae d9a:93- -`DŽ
+aՙ$aHSwu>0(ID_v(xo50^$Ŧ%WkOZ&YoD,We;NZψQ.z\i>gI.|_m"r8e Sי~!޵V ޕX96cDvn:Iם@ b$p, ~@E"T.ƨC1FbƉ"(aE+EK"3Vn2[\eЙb+#ŦEhbU$->y>!3<`8In>3@%z
+s"ɧ JV'Kk?[[AzWц7=޺˲MQH6\֙#?Vd+(aKxz(R8
+4Do .>j>237Pْ1%=iZi&H@]+v0K/2OqS ?A$I%$8AOxJ$xu· w%x/!
+/ԕ#T|N[r1"DHd/@u0#48>]z`|G
++xBj!G+)P PR0Wb%p^ $xA4B̐򋔫ng(@ ք#t ^S/?q XvVd/Udh+8bSB @"F1t*rՑ2W UI56‡$'r
+BQJfC>0J3;,cL;1.$788xߔ/1SnDq0p@o}}_hdP<n9EO`m|u.'Q9|^nd3r=
+~[Eˁ- L'ܦ#$AiK1`:
+Πc
+F&q?
+HT&.6/Gh .7(A*2K4MdF_ 0*ޓQk.4fEJm#y$z$%Jҫ~z2t
+V}#gQRJ+A~!pj~ʫ
+6?n
+Va V /pxǒʬi&!C&Od
+Amܦ(8Q.NMA)@YlF(e><q0dϐI)!d4M_%90Jrc卡I7%]_& Uy1 AQ0T*jD4Z.muBw"ghGl?-xní:}xoBK;xi Gv-Jzo j2nCMCn[qlï頧>{oF>b;isnl{ZzHw%"IܗJ^q/q+yOD䝄wEj%Iܗ|'q/q+Ľ:w"Kn%I|'q/VQ4Pu/L'm
h
-WQ48
-/XMLNode1 /Int (xmlnode-nodet2;attribute(-28 1D
-yB4 ƭG-`փZF5 <
-XaNt !aa<4KJD%jq&1Ha B
-diM DҤG0.x 8P|R
-.#J4"$@'D0@B
-
-  c
-&Ā@
-gC7L^kKm8`#YeUdm6|CL\r;(Tp5Rޭӛ0*"4!$!XC1J%Z7BrI_rY f&H>s"-e eoG G)MYb+Z=+$%[C%pB_Dz?PTKω
-vn7,6UY}xV(:m?'T1PL4 g $ddA $Gy骺'Ǽk<Sqp4)]G.7A5?-1U (`g\4W]0iIӽE 16F?N)Rz9pH ȫ@>b
-~ oi'7 ,
--qΧReI >cr5><QT$ /Ҹzk Tm3#a^xCg30״~EJ/nrPh9i$I#HU^n4Fj9~|iC]l!ř_bOkvnPNwH(-.K.}SFS<?ق^ PI
-YІw\ 353Mny{;/w6
-{O-:YCm4ae\`\ '><xDiʩFZr,7Tx (KPpM }HNf
-tB8wɐvsAad&i4-%hIY._ ">`sU<e!@?#Kʙ #R&0Vn6j\@
-O2Y$.wd\x'Zi]Xc7Z5cNNjFUs j)GG ˻pkk%kh դc)A^&mܟA(FTeޓpdߺž bL=& u#9d B^fahَf2~0kjFN$ I.һR,z;R3]NBebM_'c%1qSDْ=:Xrkn)lˌ j9=i ވسiMza}xA8{q: ǹ='"h+b1BJ 3D#MߙFlg+lln[s)ҋ'50达*F$Mi~ܢU|˱S{cZs
-vR7X-EPب{}=CJ
-i+ H"q6JGl VW! / ʨ$A.Xr7Vʻq
-jהoj՝b.gFŀBf_G MoJknO@ \KMg !ŊT$R;@At8#dgNȧ;=1=L+"ܱ$^b"QHœcUs2m2q,ۛ|Ή6o
-ضPUp ZZCoYr>Ci"r8t=4L3*<X} =sK3{$+O"iFLdW8uߡKѮneHlT^ õI"J!KrjD;x:C][d~U
-W~hV)yH8'݌B b=i v^?VĐA mst!- ,?\i9."`%(KZ A63 $3 eKZ<fՉ0n% Kq 2oZx'+K$,jG.C䐡4C{y}Z|+8S
-k;%1 >^Zޔ ^wz* 9lE߾CQ.|ď"qŮ)k=pz/p:~ĿplV뺘x*<ӑoVHe(8v;
-me +^_ a"彛tX9^UbDϝnyyDStN\<jXt!%Y,,-My
-KYkDRFFNIo/ZKx!Ŗ0ov4u9>q'wEOxRQiPUu+1X}8}TCJB5Xbo)++`HPO8cY;z?s=`!|jJk*l,bhÑ#%|݁,z^3~8˟\;
-8E<EŔhYx}F?^dQӧ+jU»'T_".K4JUdmj>+y ÆpAt<(Ʌ#-Fv]KM[o,lSY +-ݍ9/,
-Z"
-{LB9c?^R$ǟğ.S3c_Sߦ0tF6Ăpr.<уPK"}l|7pd(<H_s"7
-mĭEVR%%
-F\o;ӗ.&a3( t9Gֵk3 v
-6Ah'u[oXu(O{
-Z~&
-[G#Z/4ш;)1Fkdo4WqQNJsFmiڬE]kwMC4yǣ)@@=/ؠPduO?M$nI<jq\ʢJ!
-_?ՀOȳ?՘~f
-{UB`|>~09jl"i,8~&6֫ӳaCȩQy9P˕f^t8p~#B"<A`aDx5
-dQ uĖUE&nӦcJvI'q_Z9}ZJkc%K&UL]*}H JS8EVgR?.LC$1-Ljh} mid' ~0[y4Vuେh!%4%Ll6,6d}*̙ hn^DsiYf iTuG+ҿH
-t*
-4{Їs07/v+J-/cn1~6!.lw#)b
-}_k-s5wz ^{{!(Bo1 (RI(F2:g.6V^{)n6}9ѝR5z{Vŕ vvO.BJ sE]Il rECRon7O]sjN*T&+7l͜[}[dQ}/PT BfR'_FމdU)5~+@ Yluݐ:|efұoA֯/C- dmn5>Fu љKnСFA5Ω7tAEH&}=zc<yF }kͺ[>o{! l
-}7skϢ/ٓbdE2Z7nc[F "ٱel=jKY:Ȳ=$7 26[[BwZ冝S*oJkY&Jw^!;\=oRֲlS*~lNl(b~׏R<J®;;}IJ#+S*CkNk*]zWwn춼ۖ{JQʦTB>zs(neOCn7F˴G\?lp7>E6)ua7+pwe{ Fp
-_:lP6DzU{CՖ+ٷg +;^X!vL3PL!qbXt~C46kϗ{ѵdƥ`?,2ga$[>(3gO6g~y=0 9F\֭cp/R*9Je1lNca-vzٙ>\H|d.Fj? *)k-asdon]sU+tK\nioͅtl̺9ǔ5cord_P#l#䧚jfT6K)|?M_ø_~wkJssua|0BJF^1~!mG76l+U.7 J| #|=}B_)_>Fno;vt 9rgȐ2B(#1l5)]s_mmb˶~˕g{Z| >ݷokr9?`7+dȱ];ccl9J~י{23쐛A{{1lIwo+Ydݎ=zte毻+۶͘wor)l )7e+#Kbno_R?gg
-fgJes.{csCaCJ5:t >itSve>ϲ|]Pv>Vwu0v?PB^٤3ػח?O>{RHϤsCw9l{KcvR*g
-R컏l]Gaǰw{);篿4J~R3L|_|ŗo{-)r{T.P9n-\~zdw;!s>ee82Ǝ;k,at{ e*?(c1x"l/. /pu6%UQ DUI"K(;L #d~~ݻ _޿^:hϽskOBw^Z}cbȾ ^suJO9疁4?[s̹[c'AfҾ+JB~G5nsNjC2Gn[q:kKs۽ۯ5|zw}~_{ﹿ}y>cK^x~zߓ߾w3??33s3;3333;3333?;~~gg톚6K~ cvwG^R,a^>R_Y|$_r{7谛f9:!L߷\wݛ㋱cZGݱW"?9J,Y:2G'a'_LJ<zt2zͣѣ{Lgͥ.]7.%tKoҥ3퐙2fݱuݑWr}؟u_s~){2S?|>vw͛;COK=ݼ ֐×$|0:^f#|a3uBaknȐt/Cݬ=6{d0]7;J:~f<2l7'<y@.+¨ɴ˒LhâEy7,JL
-h$Q5j
-Bz)&Ù)ÉLHhtMБaӉ4E9tLϜ"x\e=}#O7a㶘" #ֆ)q6`C]V;M J sQ S<QXpkB
-IϸF&f8\\#+0,S$]jD^Ք02Lk
-h +"8L :Oiʃ:ݰ@cQЦEM$=󮑉)UHMdi59G%UաL j2RFHiJɡròe] ҫù:*7,m&H4᨜"ᘩtU|X<t@(42( @<p8!
-h\*pq
-PeP*E}@:#1kJf8$z4s\p옯Dƭ
-rIV3Qr=%2ݣV5CT5po*L%AVÁ* 'iP&գyJ
-x`;DִL'FĽJ 'U皨v?)X՜*.e t󚚩SMhrTLsa;rB9]{p"asiJȅph`T"̦3iXDCú<DB pn6fzC$dgE2-D\TeႦ42)LhĔ" DOTTE:NTd*$)˜tLbZ$)¸f.WxL(@/(J(:$&Tu@T@"e"+
-ХT 䂡:$ <6@fA(i5=T)u@"]k3?2CP* ~թSpt2V_Ukkw8^'__RTCD3uw Փ0SٰoUAD4JiMB' (v@֌HYI LTB= Z<tB( %PPPT=Ʒ2TFLC_j·NhD55UV-:UEt$;|RQ޻Jf) J~ Io,۲Ƕ5T.y:_ʅvz.Ya?_) Cnٱ/{Pc+]ݭ#TA
-@8`uFXM
-)04n oh$ a
-q
-40@xT4 k*
-.ъP]XlDH`S
-.0
- <J
-qɘBbrE{sXp# 9bQqIh " 9$&\_% $&8$&D&H<h(hZ|ظX&TR*)aw`EOI#SSqISq"ii*EPJZ%A4#+2MSAs[ǏRZ<+ʴ $y6Q84-C)P
-HSCm4#]tYG*sװ?Lj4$f!JjfYIX@H IEU$EWT%mJO#ꙢL8p dN͢q<%V8$q8PPGáCp84uF69V   *сy=b^S64'q8 jU8+m NjܬJSsHő4F\F*ˤz6광J3i&kN#\jjGHIeL"I a\Pd!IiMGnXoX>@lx*ሐL 1@@.
-Ƥz86Q%fP<)"ͅEY+!D2
-u5pRbzLm. SĆS" !
-DemPw xT`b8[m"*&3XӖ`+3p|++ƓM4-_ >z8>&ȢK?HUJ؏Eĥ|Bkjbw)1Ox6 A/82xB&'VJ*Mu~܈(_yetc+4(Ue"o *3ܚT.jVl147
-D2zQx%_2?A<glw40_:aPK-[UapUD`ͭf!M\D-EoT>qQA
-M2sM֋RD$N>3w>!*M7 Qd"%EyF
-@,7 gs˞Eˢ$lJQZWݬlhH1*-B9 śld^h&h%$9ݧTU1=Ah= ӧ|r)ͱlo.&ArMDPX׆dBXK->0Z]I`z5k[?MJ&(Иa"~ e8|/ϗyN8ZW
-jq aop>vmpfE
-4ix` e}uV3M1+=C/F08Чn
-ݞQxYtz<PE^hMcPHhMa蚁 >>S0|
-eBF+zj
-*dIqpAEFJ\5NϘRAh
- (=TTܩ xxGZ
-tS9Ybc|髯;LU˫$NFަ;:Rg%}C@~0Wxgk~;Yx<ˏ&%Aa/ !צ0f0{h+#v0|ty
-dxM"[&c^tOcdY vZf8=YNm~9~`fE_RuedPv,Eq=}ӂ<ˢtsPMCt,HT߇ԃ@z /hrt赨wXϺ\fc3-Q}䖺Àb6rJ+y#~<jP ?@
-,?Z2@^vUMe'0"@*}2.DQ@ɐEh*))vd'bBXʢ0#tª
-1R.SeƪM4vS譥Qt@ E*0s} q7ז@7
-s6hBAxՅkr5/Yb?\3Qa{Kdf/5l/zV|5ʴ2ʉq7RݟRp}ƹ¤S(z
-^T<\j^Oӏ q<-NBY^dZYC]D8l^恿ῼwETrp
-S+E 9oҲ'5!尽3e.Ubp"P6;*IG3w9?wQ^<6atabCbzd{)sN` f0
-gz&'4fCR75DZ_
-n׷^btKQHE)ߛvU>Ea3R#k/ܥ^5eĖB\ptپ 
-gǞS,/wڇAi? X1MZeiUWצ:]E],ҊIVzE \_ LVR'tj~ Q@yI'ײ?+f`2E#V]EA<αt+ڴrNev@\|@ԹS,D@1J
-R#E4x8p͂RB|B3
-^ nb
-Y8z"g`ppז|ItOxig$"i *yVdC`dcơ  L h'3Y"k:25n^BCRWUB ()B6ףƎcT'x* ׫=o,fJ#BwOUdPjE9U4\ p|^lXD[vƈwxm
-E/  )ۍIF1;lQ)"`0.ĺXqg?{Mh+pԛ%V&<V}Vu75.DXFc?a8"7q%ٌ6/Tny4 |qvhXkg`&Y Ƿa۴+χӢ\SS
-n~I8q!+'~X^PI&]_$W3Vwb> GqtnDИ6zqnfd#`#r$E9W W4ӻr)pABo~,M Os8kI tߜʣ.ıli:X^
-׭O!™"i3ЯL6:%qB<kAĎ]M=LyD +U_~aզin&>C51qQkub-\ <] Hh}5 p@Dx=Ktg_,IDZ4=EY 03#\
-XF{d7\wE#_jwn &pbح_o))37(>[B@L*z%;M'K0L`}}bڝZ sLIVQFԯ7rk"k$'Mݴ`Eva"
-"\ldy6kt+9JLY!S8H[x6V\ZgSahhladF x{m'KbP
-VH]ĦDe+Qe߄
-!vgͭZ.B)d>X߅l1 [n_xCPCVl*T<{G羘
-PIkӼȺVOg}F!54, !t=S)|ӝ7RYfB1۴xP_(d0Fen =tj&UOF]71-k^OFGR_a\z0{<H[AE񠋚5dsR6[ք[)KC3cNf֑~7W{* \Sk RjYiCc΢BTbqRE%G0x_XR)'+| -֚45B(.z
-ΆXnpU δ4PD&pFC7ZߑDVB<pNjCV|DqыD/p8qںhҷ`b+*gp}`dG`fx.d[(M_F
->AB
-
-vX*A/q $dX7"B.^a@Yn9 t\tӴL\ZgBE`j%C]z>AGsy2]iUwkQrt%ŝc~K<2'ӹKaЉAx5tf hU@[=U=lιjNG צ[k9 1ڂ
-l"bx*KbS3k-AsZEzXCA _>o/^"~;\Dۆ[_pBkhr)_-&@?8JED 
-^^*bl u붋JnAZ;=^@5 qCKvAk,ǜ/ugY}5S56}As?#wyazP:e%s ܶ7CNQ ǽ?Z/ \_@WEcB[ݪ*Ӥ_1Ts%$lp$8ڈtFy)R1%-f~xIg; o}w#Aq! ۂFvN#*5jD@v,º8$mJZf?-Cxr}(a.o@cP״׵0Mc
-3ݩv$#aCԜM9SW-d_~7H#ؐ[$RZla(xw Gtnd$¸x't2 l7$Z$Q4š-cmO *Zb6Ʊ JjߌH¿/U^q A%zw1+<>PX=6]C16-gjpDZ}BpDۊF)>.Jڶ^wF [8 䞅 ~vV=۷_xC "N|2Xz pkߖQY|s{){H `ySgJgO!XPt۫zetMD&Ok}U.aCyH- x0Iq\xd
-grf)nxqщZ:akiUǜ2FΑ38c6dvp&dZ;
-@hr|ªvqHZyƆM֐VfX
-S(L~IjhL4qVc@D>7G
-1"cͯV i9.~)cC*9vRV i t_\DUև9`hwT2%0ˣi5
-`U
-:;Js(׮Iaޜz ;'bAӫnLuGI)joƨm@H:1@ĝ<ex1$jb;p[t?W"~#AT^'`4c]xs9E%d, /c-.[^qdFm[wZ|SV\ְ+{AT'JX3PA0)g2l1t:&]2
-,';Ȝ MGseGj,GNYaHR51#kQj3t- a[
-VfW< 4V-GuW[0Lpd{񐊮RuHLd(Ǘ9ū֦7c|(-a1FFk1(EGP-7MWwk}yIcN8[!1E,)NU5kF Y!¼9݊ VFDp{,+O$>F,JOu\`Gޫ7:ж{ E%#2xc _gͥ@*c(#uM$D0iQw$OK~nwxPC1Yg"]Z  ٠d$LT~\]ovo'e"rFN0,AFVYʊwgDߦCiZGf-+m mư/R\[Uɕ? n&˪65@}'=un"R|mB`D\FScK ZFൂ4v/XG$MA@/JZUi@}XVc[jL贤Ӵ(HjIRKAifKrUe;fpm0+5bKv ~yt.'k$@ї1\@s2aٷ9tՈtVrV
-GWt/c|3$GP$S9P(C.@d*RC:q/n5k@"cE ?Di[|.;S?S;0J(䋯65(P !g{0fonC2H٣nSɟp[g[$dO%.|%eR-M*2L@'-gNeZ&Ap*v}Y/ X]=#詴b7 f/(QɾgR1NC/=GW۰\g4`kq@dB}͸-"
-endstream endobj 34 0 obj <</Length 33421>>stream
-jLW#by`:Z<l4L=1q 3(0({&K=ϧa忥F̃{v af-7q52mօI+۷҂5 ,zoLWμ0An?˦X5),[tĴʏ/^w]*:N^b_U~-Zǩd@
-xrXL.s̺,!5YW^t^JKb F<t%q_Ƴ/FR8G𘫌 ]9 $=S8|:y.(^C
->6yM9
-:SW\KJC(w\ln^)GG 1eǶe"y6np Xa2`Ҳs&1BL6*Qt9ە~Kj̅g<-bioZtrKGsԭGLv*m>p\Z3h
-|z/-u\`Ǎ|Z;y\6^$H籎sL=e5\ XkeVvr#p|P#`H]FPaUBSLءJ?K)nƞE<ތ@S}:3 (҉B7 :7.eGm ۟3(ok4lJ!f c!X>pJ7dڭ
-K"cCnܸ<IᶰEbJssn@"es%dMȘ=zy¸2 q77TC/$|FL
-e<H@>n%_ #^hX|g,gWsG=6x`0M;D!twG׶:( 6
-^ xpzͼq ֍iF *!2\8K^RaEmeA Df%:'`ʜus FU<R\XtuX6:K}x靾a
-ݾ2Jw#j@Pm ʬ mC$ /n_}h^dI<ԯڟƸiBkB-Dԟ@Y7A
-DK}q o`ej
-VRԢfփo;oejDL^
-Ҷ#зy5N4FP"ȧ{ Ҥ._;:{]&̤ KNHqN(`} [=Ni}Bdw.:Kz>`
--ڥt}I ra`@r80\Eh]I%%uf Đ*wijJ\ΦN QoMVr*
-+ssq2N9[BEEb8UmRK..>Ag3TjgZ:5vcՕHY>38us
-оˇDW [i'"E!2TvGq+lm;J.S_"4c3懜e
-6q*n㛵̓*lB;Rj盲lw WtRmb;>0T'LYZw-*n@&UZZ͖"fF[~7ײWx"?h q,| ;WD//3
-QNRTR< E
-_؅}ٌLPF'U3y"XN77]C?pB;Z. 7&Ic|dXSg1HJCW;ds 6pEK#A:h<чU =1f3Qٺ#Ts<l]|%E2Uv0#; x8Y^&]%bߔk0LiYc8}g۫|&drY_/k_ؐh!KI
-&Zu[(C6Fe6({Z&%(Q;I7qy`oZo=;AB8. n[v*e-2#s%;\s_Pвm~Ap\9u%}-%
-g!IR$,Lnx.# Ȼ>eLf)Z tK`
-9%ʙ& *MlTޣpv,g2ܔpdC6HAntic
-.)IN hexuXf쳞7sudo.]trz3<w0_uMgmP( x% @ #SfQZH⑉Xg g&Ѷ̋ʚ,3]KVv1%9ڷ\ktx,`y!H W(4F5[B(
-еђL>] \;*FjUč%InC֏ELynX1/ѐfBFFZ%|k5Lm8-#ВL~eOœ2k٠^TiO<wo ꩕|
-on o[ՀOy4dk g[린t$£s*m̹,@j*i[FZnj=
- SE}ʰ FKҧ߾ GUˑ R68:/81uQ|5{+gZP./[XĪdUU-yЕvth9
-ybTV! "!_ĺVP١oLMУu
-{qb~6lPKBa`JuKwpD{Cj髊QmpLH]L'`7^uRʌ@j &|]w
-33`!SIΎ]?C'lp
-?y׶2uSTܴSz֒*n!g; bhn^rW˪v#߬*Aj HiH)aԪQcN?&jƯA%W)XZڧf{5U _;э3L0 ZK<[S YGvX<FBu1WAWYF`n*~]7 dVBWq2˷(;d<+:Кe_: t45 +~ ||[?DfM"~v}FֶQ}^HR!dIzjܬZ6+FZKFy-/m-rF嶥/aY<~R-Kq> VAS'3ԑ4fhN <"0
-l 8u0b]Q;SNgzAi>S
-UzBdE/Ǔ{Flh3<lJy8)T
-<A1D;pf!6x1w4H} :iM# :^Fã)_/)?S-M<|4j얿I=U#>!258p>%0> 9=EZˍ0pHNK{
-qG0SHoJU<;B6ʼ,`xi|fez2bkdBL+ɭ{<k&H1Nm|j
-@'na:'X,7vswwD9.]:5\d*jJd\4Vp
-|ڏ>,nlA;-GpT
-z' ׮YA$g}lPhWRÍ~%-nP0);UoxxI\Fr [,UK) oA)qժ
-.̿>S sɮg7ezP & 9asY.ICGGՒ`!]Mm
-P$b`J>.mzsNpvM:,VF }-0{"TIc@bip!Ҙ\N{2)Zs5gE?H X$^O%-
-XޅW=bmbH׺ 8 P!سr 4"K@8衄T8cs"Wxh$<1xxKiح#>2
-M )
-B o/."ݙ\WHgStb]5֍zDԳmuK|Uk'Ñ&Ovi+ -&#3PrI00x3#c$q(%NK@l&VGb R53]gȸBF84ĔB  jx e-+U7-Uq(y;&8_muo[U]$hȈH(PZ_I'i H
-LUl_h(]=E͉~PJjk+@Kh CB?iD6:)2}W$H
-YIkzR\|6uDRgBMc:# eT-wldp]%2]D<> ד <dgS<l0`}iv}HF[
-SR XBځ"nm0בB$` gxetGy+>fnމБҋܖ #Ҭ-܅%t\,% GG
-ZEI0ڴ@c8>B%Hn:Ԙ%Ir8sόNX&qFysEjݲo2~oX6#>yyYw6&z؅v(+RclNyjN 5 4 =gzĂ~%:9'
-ěn&c*m T8;U7\Ș]U^8e2GxPX#< }sA]f
-Ȯh1Ў O\ *)$^Iʊ@w8|'B@r@ā3U/ lHҐp@}w1 M^ npcK!!A<X{i3(5E_ZևbW;hRYQ~JO`Zn$Ζyl4$ǺSE_!p\)'p10\bqE_
-py2'}UXa&JV@A PAњbӰ>Y2UQ8&V"tw|aAUAz^) b&wnK[h{YU)t2mFhw`ԥ`zn)B8k`JP)>PJ2C|x |rhKcZlF#)%:ꩠ\3%ꛝPBDk NF+q܁Ncl&b %L8Y#1TỦD 0S(Q/ yt3 itH?a8$B\UjQ4
-L{ ,{P$K;'ykoi Iau\WGbl^K -IFVdV\*=hk~{+UɃqӒqq6`s``Y#f&*P0mTP1I{aiCh@ˣr34k_Cʸ8JoKn]ȫR q G'1!xHݥ]JSRb̈>E3PB
-!C2\G[aTx=Fm[zQ>&+TlGA8: eY Х6xO,D;@ňL+q5(k5DDbV#
-0) F=zx,Mթ4M0h2:V awڰ912S_>`IƦL/}{h.aWuCJy)
-͖>G:ɅyyvƲ95vBE7Ls*Jva5iSghG4>:AJ*/bU:OE/A98BqƊfzwp
-EћNXhȲWP3r$S9Md&64=C`̈́w*S`/2X:DMv|fLfbww2hrˬw:6skwl)8D Rք4 :E/82U96pPq!* =CYo؜K8z6ͺus1;u׳Ԏ /LJ2uR dlVsٝ$y;6gKgd]*$\C&/%"0:t*zI.n87S%jVD{%[86nq
-TI~^#xK'Y>uυ3R݅N
-QNLq0d&H{@"DɧQrdh
-ͣARtn(|Ef~
-:uo~ߒԓ(]cv}Kڽ~el*ևɰYlhYRK!#&f~a%wR(
-Y*S%0uɣ_HO"W{uquLNiCrPfا\a@0 pr|th -a<j)bQh6pޥ;W MI?%{ػX֭1EGቱyyFiCi?[rBB8ӼOXhҡxRڬKݔф%vz}Ěo}Fg&]&+-pB)m1V0!;
- I_!'+'ɒ C+tj㝪) ,>LJ4(Uy346 JP3Gr8F[ٟ:9NcLyL Cb E#.{fIʤi\ ޯ=)6l|jGЙT- WJCbk U.(07)XS)h."2vԎW 5*8r?JOW )χ.ܠcܨԀ$oQv,WԞ~$} *̙H+ ITIR| RǟeUjA2aׅ5J:G!t*~(3N-N$.yl9FhuhTN u
-J£[tl &0P:T wR&;^|`Ҕu7l
-dO>SŠRK $)^|[0?/Y^%xplCt'ns!#,𱀤 YeǏ> e\
-—"qƿj_;{GxTѱxKhC"- EQ=vՂaREnbݞ t/{ o4HC|pɰGW@!!՟W=!C艒\:P~n+Ebt!Ѫоxya p͵Q>"!f`:f*
-
-y̨TH*A <^XE.}dO ^heX.@1'L;Z Gwqˁht
-ݕu2BdeBԞ6H,[r FˠB yB224D
-Ђ
-:R5
-*h#ڈ6݇\"Rڈ62Kpfp5U] p5jB}L4@qY-$uY- J媲2d}̒=I "I^KW,͵ŽK!fр,FM7q}J%&9IMÖl%4R(|z4$+OZq@w@ЊTʐphe! W\ Xks!h4|VX BfJLGeNx4ToHqW̄+!3` svL6=bmiTZHb8RĿ*`$F2K yke8RD".3Y̩z"r(M 1~\[H<FaE: F35aK]1r5c<L,w@\PӐ("<)[; .
-f/A# FVRZ FS>rzY?"YVqdAh 1a <
-'(@f 3".S
-QIMc-Yg/kKgRr
-@Sml4@ BEn7 A@^BL*H2+DĢ*PTaHi6%+k@ @ *m7DsFzRܢRsKr),[&P*ZJ4 ՛"%YM]ZZ!I# $d 8 L6-j&4q5ĕwP q)hS rR<)BmBbLQ%#;S0L<,R!LkNڲk_m#]ÑucS0Wt.Ӂ"]¸YAq2n)M.MλŠp.Cy,*!KZ! p(':€8%6:Rʡj'
-9+
- XˈKp"Z9⦬AV.7ZM!RD@ < \!3`+_8x
-TլjB@PMFm1pG%ھ%p54P*W%F8Y_1#mK\X{,&s:*C'U <~qq-Rr7u:8
-L TXljj}Z5jE20cTVB*TvrYO)S'F#'H V @v ڣT=:hLC `6;Dm$'9Q|HLj cqd,5R2dΈ;
-
-fZW ȫyU]
-P6 I< 'ʉJ>_#H5R 0oOpwf` fAn:E*WE\)kNNV21戈$SspI:D6/m^q^r7 %XjӐ80 ,5Y͸JMĝAX=w)liv>&8YKc|J1.}Eq)i ˔t!D"ᓛ
-D]-882TZ&0
-sBR bNq1'LA SHKPH( Bybܭ$\VNԀm@}ܛK
-V*R8%xādLA|)C*%^C!†VȂYo M1_EGCVC\'d5&(:j̓$1O_PHMi':5[ء-TB%J(X%hs+
-7[1k
-EByJiF*cLaEHh"bh V4l@K8̀T",2R!u4"Y<\DQҧs0Ӥ@Tm%; N6:,ս)<I#alzkj3KX0a e ,Aw2NES0a(Q ÒHnB=2'\td bcBDr >e `$lpd
-2fy9N.~y$PH.!RYS4ٱ!kN|2qlUOKf'G`4D{A.b[jnw3eGpRz)M +5BςL0LOI.,5YѦ"k:QV3Ww@4l&[d*d阪E f$hRp$ hY/ïV'˛ IkF<GH; D`'Gcpܧ8f4·RjU̷ݛC+H_; ƯZ(\Q%OBD`_!(jH㨠 w9f1ĩnTvy ;
-n$ۨ $FT2Ѫ7̓b.7n7Zv̼VQN<IY 1vÅ0Y ,VDYX\6r8 '%X
-D
-T^3ޑ͵/mͻc3v{1wvݒ.lwj-轻v]oދ;b@uLuS}0wMp3wko-U@ŀci2 ƢTUA(
-
-isc,x,ZHkٱ,j?)Lb A<ۏN]M484689O>âY`M] (i)*,:eԑT @ -윚X
-w^Wc 6QPi"4YC": +B1e<xlM x3(ˌ #;3l;O8oTXov*b#Aء j 1}֛5QŤ0||JӂMa:wܯۈ)IvGcvrY 
- ݚQw;1ri6+9 ,]봙0a+0 H!b,nIr>c!M^ި}f-jFBr >n@x¤baM?XJ{H)ƾH3W43_%Z?>|nm57gqr7 V4]W0rbnNdkai,r{TA-ޘmA%F2En{$q<'վ=!NW,ӳU E4h@9+&T5g5 O7Aw?;,A-DB7a
-VK}
-
-f=$IC]P͚ACa %;HʦVEO>
-򩤕&BxհmǭNq X+Q={8=Y^r*Ny38A1 r[XA῿
-P$7~/eF n6@
-Z5E`Qtp?]鶣8m&{IKm&$·ݖ+9:>h6e_AS\PsSɄ?]>O{[J8dw /Z(zԙ< Z o%8bior;4=3k\kΊLMGOWpv{ J `ʲ5S4`2 ?aEڢ]'FuʊuJ"j.DïB TAImiNj^ti`:j9J6OޞmZ:BPIG}Tr-`Ac*@WX 2.7,]ޙS?%Z~m.^lzMFP{c5|yaUzM}#"eea#C8mjarAu>y4̦jt̲}Sf%ϰĶach5 rq*8]"WǰS݊c\E^Sft|6_*l'G |%]xa9IY uո^FiA+-P·COTC|&.A W:%T.{YgQN#4x*hIk lЦ(D+hRmȠfOs.6Q{|)c%놝B[igFu`|ҋ9l#U CROS[)0q?/5xg%[ T3\WAZ97#OkȀ4_. DrN2zR ,u'-B9dVgLp\K̨z mieG_'K^nΖ
-瑜7/]̲P|L C3v<S]ȩ)U#&#sGͭkv㧅?/zjMߞ1eJ?d;M+7{\ݑ݀ފpV+y
-O 1N.P+h+,b;rmDS /h[h<?Q
-ò=c0:T.Ղ.P.nS
-G}D֎0{ Ld9e>0#~;Q '
-Q!Z"&ܘzF
-#&Z ܇ߐ2@!ڀBANP:1B|݈K8jcD| nSU.cP<dOCb?;P .a{>Ps]}kW/!O?GnM4h:(
-HYW8ao?{B0",駧yr8>PpI6y՟f5d&pW"^@
-̥-8xZs
-?
-AY胄?nDpYe']Ԫ(KS$]{N=E'u-K^2Q ዄw'#ZEoVA?.V'CeK~x""I}U"tS2)"
->ޢ(Ok'c_I8_ϯTb"f9A
- j uҶWn3GG;EDQtڠ
-w97ɑ3?&3? >jPiBc#$klSőO8fƅUY;89 b1àTUtcb{P׿;VkE}amU\LdxC~>|%FY%BC,cTd~I<nǒ%j*6bf쯉^Rdȡ!9{3mkL35PTMQH7_FZ?M>&zUyNՇ?TaE8A;Nʌֶx הՆlr#8m{Tg'#>v :=X+pq`JHby\#.Uaɥ*BCg_|w-O
-Jzx@e+`α97 7޸2
-=' zjZb)S%4g:/gMpUwUXkpNTsV+5r%-Z9Bvuׅd ZdJs"TsI@5s\mjG
-6O޸NJd9ʧ>ۤzt87&;ΡƼaVEՒ>]
-Rn* =MX ĺ>
-9B*~قzx`8p_}kCf6Ƨ6_BjZ.&y |^-yuK`&_KݦF'=} !N8W88 /MoN=?5!^Dva<By{(/ u! ʨ?~|hFKBø-ȧZYƹqگR֭iۣtK6wa
-i2{;әx
-
-P& gNSAOH@-j|3CQ|#|b؃LDx02B<CLMzCJ Jӵ.?b4?73i b- C1~7㈦T;/P:5hR` qg23nYi9='UQsB|jsRIa<680'jO +77 6⣭z%([@`xw{RO/l5xS&27@v!<NLnb}}i:ʬY j_RBPPu*fv TQZ=/c\A#,(|:}|UZ:$:u^ـؽwxT&!". <Vް kr)CM@dR.^+~-s@68) +<N>˓o(kӡID9~fRyi.b7ʺt[U,.|kH6;SAЯR}IL@t(k;5F 3W
-'øLU,]^XzVaq8_6A[2qTkTIn6E^
-R3:R}Zvo?gP%_laPRܳ v@x1n֚Er+/?e
-PS`;Br"g]ֹD,g)bbH.L@&I0AZ~܃CB mWuJ^'exFAkC#@J!DBu}vmpzNMFMlBtʊ(|Zd?_c)Q29$ɰFRJw6yX55ױbTA׆u1lʚS)df#
-Eܱo/\#e/7Ap
-I$
-,?^?lphHE Gw7_Z-J~*0f^>K7Aop9ATk")*W{ۄ ^8 w`XL%$lpK}[!JcsePsj,Kg)BoH]Z@Ě.%!lGvJ<sEGaE͇>r{;X=@x&qJrum¦3=sHeݫ=y3#Ȁ ŗjg8j6K*(L8(~TІ 16/y?Q}PҢJiU~2IG,NT/."8FҬl#W8缐Q~N: -38[rv] fEd3 YťZfA"OʿF8ng]Gj &RSwT{()!ڞdT#`PoZT˰?.[Q|E3
-6 uԣ&M0IE6 /i% os:() HGD>/<6]'Uvh+>e;ʶgSƚ3 R|)/mq<G!:TVٳp!.P_s#.2XP9Gu\3љQ x8 Fv>gӫnsr˚[S_M?lIb/R
-G ^ N;= N#i& l<c!8c.X^pX\_`UW-8|ϊjގSlzv8AsVhA ۋUS BA|: C72`a\+KUdoWQ‰j]% 9'mf~BTVʳcdyB8Q"˟St}5aWys5ҩ,9"oKeY2.ʼn|;Si<̵Ob~y@Qħ"8:"6vQ KELc%~A <ؤD_ 2fa=y%}) Bpd\JliG0
-ʹSp=wտR]* "DÀr)ҢzFaSi[5kG B>ύzօ
-K$ |\!o)Yz7Bs*dD{=c*YnEa"F8|'
-7[>ב*n
-CL|qYstڥss3Kh(8m G4X G4)4|'0L>y3H6*7P)kכgLp
-)ϥְ%ae
-Y
-2k F 26o.fY:B)Y=>ӌ bL(V::IԒt0
-
-Kp^= [&S>)'z %I C4T4h:ڼTlȈB.䫝*~JA{=j#%54(t;S-װ#u- ~Tpe|x,͘7Ve%ry8PSӻfn$:5aiӼ&^md\d =>-uC<3*ʖpB ^Ke=J:~]Ӡ-9
-endstream endobj 10 0 obj [9 0 R 8 0 R 7 0 R 6 0 R 5 0 R] endobj 35 0 obj <</CreationDate(D:20210620202348+02'00')/Creator(Adobe Illustrator 25.2 \(Windows\))/ModDate(D:20210620202348+02'00')/Producer(Adobe PDF library 15.00)/Title(FIC)>> endobj xref
-0 36
-0000000000 65535 f
+WQ48
+jbc!9d T+iG@99<
+w:܉
+"E$+H(a
+%FU
+#z X
+TL=$Y)1 / *N (7;!Dv0#?eTB .?eT$($tEA! 3>=' TT "=
+
+j9$1b2JD4YRH` 3*A>K`@"ĈUhc.)8zHpD
+K,H`й$,@AD|VD'W 83+(F*ȠY:2!F@,B{+R0A
+%Qˆ.JPTHɠ.F#F0bD (HPQ
+$HP)"OeQ* ^t"EYPP~$~ߊH<)AAs0NaQ.(ɥStJ"Ed{!IdH  P sY5i
+`@@hDB>fRsJ`Ԙ ,Iw(į+@6G:qcQeԍ8:ooU7Dž۠ G~._xDa Hh$4LCXh)4xtt mXF# ^yОd@ Op{,SUvZUG<Sn" szsϽ(Q8`>*D[ DE0I|'=_Vᣊw2Z,2?r.IXWo"ddԉ9DvعwfZL3[yHƩCߘNlr[3'Q$b;@Nl9 b3ՊX]ڔd
+th^sZ `sK穌?$T |wzS% yFS 4Oguc/\d&- uaT3YC {=^_CR''W16*vD:J]8Ł!f/шi˷U<r5\X/tN
+,U靸<(VQcPu͋%djWO< 3[v@.Q\ܤH:g&J5q^ ˹M*zۚgyu@[={T5kEO
+K3bHfJ)ۧ>OZuoF{P
+f9k7gp8±kkS˲+\r9F>mtVNQēktk>a磾E" l*KA$/7{hv@4 ,$ &MB;RZS LI߱ w16n@'jg/i GMǹ y1f(e* RvңdOЏlU} v oP"W0.|iѺ.dƺ! ?\υďShDRj΁%jq%AЬrՃdbkr)1ibz%zik)gmd?Q^&FY[K}a0"#DhK2̀
+#-^e| g`̊
+U5D-X-
+!theUnθ`jՠZ=|a=GJV l=WyZJDrG7ڿZP F2E07 pHI{`_an I))Vm
+j
+NSXĐU
+V5)s pZiL2Q&dEBV[4+9=jȘB؀P/c7ISy[Gߨ{
+L;{ b@5z][L&#`;xMinZӈByW]Ho]{EViZ'وwL*%l^cҙ (I2_թ Sٵq~ȑ
+h)bscFLLj.i)+uBˤ[zd,M7:yYI7!J('D(=6>P#2zE֋;ObȵQG=Bw[t4a'[TN9A1Djμb4-IK+~T@d{v47EM *J<EE 3?>EQ}l^nWh<8ٕ&;ҽԕϮRm%]2R;T;T(o"Eը" ?DxnHrq$.N
+q?ʹQ/&jfm >'j6(2c^?zJ3w:M۔-sQ5&GO^H13u["Fٗ>5if'|Բ]dhi>3*GC+}g7Z;Bz?V~?,rKrLvٟ '~jh4zQ}Dֈt~7U5rěe5&گDKg]YYɷo<):ZBh4 1k33?!G坨aDƎo۷19v%h4gmj=!#>v;,ƼUOgvM2ڢ9"Tȳf_:;FcU\Yikζΰt4y7hSCmLҼD=)*oDC~-%2D[kdƨ2zLFqKNh4gh
+Ӑјp57^KG ?"\cT]yսKQb#vcz#.t6EŘFSIϼmqWrT<CTݎ*O]uuӴTw#GG
+9)*ODv4Qaq7DTxo 9'{?5E4FJom2m;ϰUf=V䦧Qb9NFc  &Td `T&ʄ&y`T@< 0FSȩjJ1 *'/j&Qo”o|Fl5 Zd4R,n{UEmFxk7De؎1B<00OEb
+$髿frK~1NٸyY٘acfnVOmMjmEŋp7YWC4_'SD\oeN/M~mwsbNDiS'۴ nڤl6!'ߴnڴ~Y33m&SO|v;br{:no&~^w"扅>Ļ6ɋm$OnWNfKLޫꚙq]}z:t|'zh짶oY_Us4Q)szƿ)_S͝@!B%6&>̄؈vFu@PAF@Ѐd$#"1H `v`4{HEȸ1qJ{V<<=k=dnLj^̯n芜5>L؋k8ƹ`0NKĢ瑀P.sX.0R8P"`
++c<mG;@ xՍ/%"[:Lx={"[S'{)qQݾ1t|iW jQ%BxHuNP'Bq2`\ßmz,&TE~Wzd'&d},zZbZC|P‰chCi"!EkX-Tw+B+˴ tSᝨ-R^Nud祏7WNлϮ|i\5Mc[M4p)*6ͧ9oF֦iߔDMhFQjYXeq)2#3k:.w ׯj=[h8QAL.p4Fh8R#&Fc2¼lR)[*I&
+(K)QԵTOHj*6VlwQTaD)JF}cmɞ:zRۭF:W&Lزi.#ZGZՈ~ܳ47Mͫj~H7/*e扷<]js8BMB%Fo4ܦHմo13nh4xƪhQԊp7E 5bh\8!6EͶ6NTѸx8RBT&E.#3irKTt}vk~=FBy~>V.Xc4((ٶn!zGGujDFɖߴϘxhZؽd1W>mFьFM XYZ
+/qq!Ѡ@DD( |. y2!CuaoP`!SL$A500(S` EP(eB5<'4(TSQqK ājx* EeC54`-T204X&BqP,$TC)8 8
+AU`,.(
+'>^cT`*Bk>~iS27&1JYƔx sڒp<#W.ZEEne4tiSr/g4ynG-Dry*WUN=l[}gmjGVU[VFqշ]5'[w_fkuoO)aڙ[nwe]]ˋ)a7!W{~UOmNOLDRB6<4D^Q1*CM01R%7nϾsU?Kێ\3|=]R7KI)3dʏ6QbfTqv u]X[ ^Ri  GRT錆)*KLh8<u/2\N~\h<&5=]px}zrH~o#ęԜ zl/T.u=N߽JZ{țvIM_}v׽P1YZdlm97_ow'nh8R3J{gx]C9%m]E89μwFc,'@>FxyQuW.^.FF)nb4˨'Fh[ իflϩѮ51ިS73Nƾnt<ctϽ|ċ~.ZvT(yL,%:vjۮƍ
+Q%)2)2Ť\* JE\2 #Bq&.NH. PP$ḦUelcVD tLw[wZwrk1.~c0"p*4=wL6twBoO5;̾G_Ө;**؆ 2>ݤv?;dS{#|0S4Ք3UU5O?3efFn.9{ļ]\D>TEmSoUlE]]EfnEݻɌ8;ύSwbwjk+v'fUE^FdŔY9aBLNLLĜəə)5S]i  H2dlbP$τIDcP0D@rIq0\.f8Jc \, Y.Td*6i(KH24L "0D XrBXD.A(a,bFA.HۉC* 4T ՙy X,4X<P&e(a,P*J1bT| c<Y.8&Mb,\X,uq$$eBU4  FqXvy\" ơd τa,vX0LPHT P*\8 #aX8SiLtP<%Pz@ay4b8 ?T2s.<C
+GBa) s c< &`0#i4
+ I8]*ADB¡@ɥ('y* " EAP R<+XT,4S8*caX@A%*)s2we. L&LX8sqLF 2#8CU2HH\ł@,&DN#0DcX*9p(H%`\ S@`ũh$$8D8pq  `< AHd.IFD`ʄǑRPĂy"@lFH*sP8!3<&L"iY>s_`<&0/P ' Ƣd 2`@Drq\$ MY
+3=wDa.b@"h $O"#GBhs4\*ʅDY*w
+S@ !Y͝ @4!ay(P8  D ,8p@i !I@
+
+
+ʅHQ*2@,8
+ eA+e, A P0d,8 B(((\ERq %sq(Ce"Tű0PNƉP,.E\`@ lW y
+?ME( !40AX4@X
+@@2D(H
+8
+2L8
+DHp2LRL
+EerH&4sq$#iP
+,1(\*T
+ѨxxxI4H,"#sDh(Fc4
+TŢdg9d D"G AyBqLLF8 ϳ* Xܨ.UԨt4$-C4"
+J=TI[YWIpAfkߗny'};I]]Y9)@^w-pEQMO+0w0*P[bAA=րmOl-tяf&%rpW}9zTܱ=*xBMW쥔7W4;cFEi$}
+ϷAPz|3&'| !)Y;
+;`EJBz>o'mXǻ-am"cL;YFTNcIhmэ)=6-(9i/n]qI<sgJo@HwKP voo99!Anfiڜ c+1# jk c~oXBC&P'P| XNҠAKa؁A\O{ͬdYM€6ſ(]?Gɒ(߸w]@_91-:?pM#^Tl2^FjtnEO0H43Y͂E]C~g힑'"r)p;iz2
+̒:QuPX?Cy pH_
+JUn3',|CX0V @nMõQvvԗdw+f'+`CA0&9ic )D\@nQXCxЯSeBg/)z'f
+Wסli-8u;@i{*5}e >S]#
+.PzBH>/D߽֞)SzHKA [*눧xºKG/媮<i9(OA讒v#h
+[vpCOs-DcOam_*./T<!+ 36qBNu"-bJDnyu%C)pa𶝕 מ7OEk
+T\^RzRO~x"/L=g#&@zؖ6#bt=_1`ο"WM~\/m/܈9R= b8
+$lfCgspp/o:"iUk~+0~ujsC7a[f @~^FVM
+ k',,T2 IAٽx%%MtA TKu2xt(Úmf%V4[t8gZ =6ǴZr2-TV88iS:mb1L2Oci/E<w0kx-uc!1$~ȓ.%l)-H5Ʉ[V ]BNbԫy~+
+Sٮjd:i^)ۮKh+f]>Ȅr Z)=bޏ0;) C
+ mRl#7F>܌NϹら!!._{P2gb OPB$hZkʈ"g+:a{z h!n I sꕫu KA[
+F8V2U@)P\!=3@
+RR{sxm ; hxBp]v BAd?fڋ6fU KֈT*ZzZ"t &e1Xv]zyos~M#H7/h$
+1/
+d-Ǘ+vՃ.>[Q3W^&\
+>0P
+潾"8В8J RS|No%(mf4ikXE
+eLYj"|c^ӻD4&J#)ڴI^yLLö)@ .O-MFAAzRPo P77aˬ8fXǨ
+,r}$2) ܚx4>3wLspai<ó|-vR5-ztjjN:ws'
+X_o~ S6%Cԇ6z:_7]1Fa\nyP{(N&;h-h"~ϵ)IHA4E,A9&^>! 5DsYh|<f2 wp2?l')mK(
+MW-D"EnMx^#An(Fma-<)$ | d6 h=+
+bʳCS
+Mu!+ܺXm~܁b'<&& '8PW$`Lx3*j@-2nMٜT6*鋱'Ca1bZ5l)v xmkw喭80Э!˷B|lOtfҌk*
+(%d%,xXw51Y0R}^bK "7x.JQ{ALL G+D FHU˭pѪyg6T-_ĉbRTڏ[fg^诖:_ȅ
+Es4zhQixq;5+?u^[:g q 6yWG[e߄ٲHL
+e/0Z,,Qi'J-̓)E*"`pjz[0Mpd|_.+nH?)Y0M\Z
+p% 6qN
+,TF/^0@4Tdd'>hxB6,?k1pz2ڶي䕅x=B1^gAJoCfG{tPsE@أKdjɈڼr8ȶxI錯Ru=‚DT!ܰ!v&>9o@h1oY':ғb(fF @=mK%։tW.{R4\|\kK,"P&_|TjD<b]CS,uZAHHl/-.ܪ.0^+K,ZU˶$ˬ^Aw(+q-Ґko\}).4TAK(<ݚnT(9"iu||~D4K~(m!5_׌12B|h>*
+ ~[E1l PuCDiH֘ˉ$s:C6&ꂴ
+SWD\BSn⼆&ŏRFBۯKTb~{5hv,?-j󖂒,J }!.\5\̲KxMGAD.k"P[0M;1uE]@d?&ScLLpۃ|A%b'qNg27γ
+.ý N $CzicdO6BFD2K82?-UWs(d[čAILG%WIUy8Ֆ'@K%e3' -V!n*h<<֠i9[ pDCeD<~
+Yފ@ ps}
+Pt[Ie C^Le@S܌
+j %1dnƧpV6g
+~f&lTw̦C#08rg ILVZJB}@2 sHUA5p
+nB,u~l#B:oZL%O&48xM&f?o=e10U7D"*~E({յǟ:>
+~XQI؉M ( :Ay(D'1F6LB/ٽP1IEy1ə?E_3uyΐ,vEZ-5ɷZRL2]q  5ppN֖}8Q*Jp6Y"i<s+U Nȫߓ5/>mXDD)nи64a}N2 =k]!
+q_ݿ
+%Iߜ )W~L 7J m%J>FW׼+0nOmz,̛ѼӦt(pX#?$ >k=I2`By .%GX0ؙ7T
+IU!YC|!iI$6+U?."5IiE^sj$4֐e5LB]QFǎccaD?!@48PB&Δc<6ۺPxCi}cGnCCЙ稑aJX^O;
+耘ÛUPlp۫KZR3.k۸HHfXk1RGCeAo`0 B²&2<"E:ѶZ%A, 7V*U99]w* V F%eT3aQze]H.şgmh^kU} ޟw`b`MM/S P$ k2j F]j'iX@+w@^ wI^j>ϾˎF$1'S۪;Y,~jSD_Va줔v6l1"4xRƧ<eõfGq
+Iuޣր0x!޻J<* ˄.L %#UӴހ?`mk/HtnFji, `)npfd=u,ZEBeY)"8u ,)8"=@#%JuEMܼ;JZ?d0Xݖj*N(f+LDѢ1Ɩ1FA(7OnJm:+ݲik_s`rJDև i5L z(4}ZgcĴ>$V1ma[Q ydfj(9˱[󺭎X7Z`i
+n@Q}8Zۦ<\F(<07,9sЭJFҵ'ڭB-Rcc-S-?ao⦆<[Kwbh)8 B>ƾWBM \Sgtd.Ư⽞zhJ]Gp1ju]#Zp2Ӄ^
+آ85Q_']W1%ſ3?d=^NhuydXZB]rFX,gvSξ+J l@x6kj˴'cdܝ8.gg3l=R4% U! LXwݔoC> LNcvA2x0HbDr—olmu"K{eW]o?,}NV-t spVPP{*:t '0
+5Fkz&0ȉe;/{-*,T;~pGZf8"bK753 z~e@5~bt^p,@"#B"bڒf W)6jz467pap4JG&noK =dq 1Y%DW?HjVLzr_MЮv͡SH4:.)w9%s,\FX9G
+Ue8 d\纉t؂-ȁܲ"֐c;GjgSmtk1o_hHC╥aS?ݼ
+b*S*{DW Вk*A.4@!*i}A"jH
+pdi_q6t7l(5 l nPZ|2!-As#ܷ }X5[c&t1 zv[^0m-ud6 p{2f@rb߯ɸXCFd$nbL*Y|
+VV5 xSN!,ݞ%IJ)FтDaE-JN{^>8AѸɖZHq/6 ѵi%+RwN6bb 槣B9Vv:,n+$K$·ΰ]254/pK:_a$}ؿmK9Y&<ݺ3%$Uoi-~M`8# 6{Qi sNi$@XoM!GPW&-g<bV
+֏ C[%
+Gs"Y6!GV5='5X˝BN<sxg9woYj͸
+pW') A}Fv
+er[esQ
+q/(oᓸ`e {!&D:g`UzH]գ
+Dk.tI7;Wa2pC5-_X%OW2QvK C-f;$8n2!G;;NhL0Q$UƧWN6 ʣF0< Ŷhfcvn)s\Vʉ - ЈslҖqP*Rט
+rv35w6I:d1=^ Q#
+^~2eWqmu~
+݆^ҹY_#h@Lx3^[7Vdw@A `րf_Gpl!U
+m#%X[u1] [B'Wv!A'x4muhz@DhXj%}S+
+Y%̵%S2yĮ`b ސ垾Y\A!36,R@f;؇ґWq(_(PN՝tϮ:#zNV;kn6QT=]XP"7y+YQW1 AќzƌtG`~㾮{ 0/6 ʖbYJYߋ˖)s`!"lzd<Y"P AdL2T #I-HqˊfNZ
+]p# Xάg5ۗ7 gKegUӟbԷ'0EZ"bmiM+gش?Kw٦aʒx\vCao;|=,<6qa$ٕ1
+&كgEֳy\SBb!+]뽆")K/
+dk$gqp muLLrꯪP)|Ju' AW">i8kaVQ
+C O
+%Xr޶68Gi$|]E,\)Z. 7aOBO :M-pxOTi~:%&HTnL1?K%Q bUbQoDH:/{|dUM֢?gu/eg3g[څ]Wo y<BUPyuzT zP"o UcWC4\!J0juH3T/C:3zZk, .tslƽKdUog(ŬR u1L&!P{p8s[UNFÝֿW^g9-ͣJ '=o10~j6-$xEՙU{ T4;,"uS'jQ}0sF_(*~D<{TI_nTD so?~_S_sj1<EԦ01ՙqax~
+tgr7Pl]@srS;U
+Vm#5Ő]bw׌4R[.>hZv2D՝FPEg.[F׆g++; n\'RfDxk5VQۊZVL4pb0? Ľ zfx`OYd9KfQ$jN'Vdk\ \D;
+8pqc yZwVsB
+n8saG\/]a*m\&Je“VytI@TK7߷a+dq1^ k!=`KߵE!WK4/6;@ /DEM[drj|PըmoڲҴA\[&QkI"p3 i ʨV ?!kĺX$ڡ '>kRq1 >߲R+n8h; ;h8l0$folHs!+X,b)vak4/(}+ 7h1DtQů1gt@|lZ"12a ht m|Zb\+qzH:_Њ,0jDo7(cZ93ĬjʹfR%9
+eaHm#Jx~,/o#R
+_&hvI^1},c5
+-3O\Xo*话F9os؆1>
+endstream endobj 67 0 obj <</Length 38184>>stream
+:̖" ʹ-׾XwLMH6_!ŌCDVמ{a`nVS2 q`K'ѯē!\š3 wUu.z sʃT&`N%mR٨S$&##=_ǧ
+ <"z}&ut9Yk[Bցp!uYgp40hb|բWFn[TUᢾnlA]N<ՑeG5PʜnLĒP>e ZY~E-_O}g
+ ,׻qnxFʒSwt$eFx-f0l*>)X*uu8. xo~2ymmߕSDy1E摵"YƓez^kt><M(m_?w {邪S%08M
+#99!-Lne]Ǹn}tk#@桞$uٗwmGU{e0 zXؕiY~=oHݑIż9,@'MoXԚ'aa^Kb9Q/+s&I,_8RDZ8y׀"iqK;+(cqq>9[Rb
+381Þz?eSZ&
+5;H2v*GD&WY2.t<B U<yae-Ap31Yrzt)ks^xHpRX ia8pDzSt" } TG:j(4RlC%&[ vm̰ %c+ˉu5M6Gk5X
+% Se?0Jqp3rLw-~uT‚*C A&on5•v! Z
+qFfn,\Zl]H%6O`O4ȍA&qL 3|Vdn
+oTTԳo+.S9+?>C:(9F
+l”"dډci~lv|
+*{z%.T18 E
+wIc!NyoF\(ԂldLbW买P4Va m (8?S1l8r8i3J+G"6-8=_ u} .WLXX fe{)ipUtL-nph]}+1dC
+nq #P:5+(BR]c@fuJfqm 6@ >8HtkCq
+5a/b`RuLM3V1WG8>.bX"uo ])A $D
+Ha" a|ߧcw}^3ĈL+)&hߏDͣJޭ&j`duH~E
+=C0І
+RFU"2tLfjmG:#3:2 pLƣ`N)[,Rl2DM%)t7ۍi_R]̪ y
+P7Jn[jT(g-SO9j -矇2JYClt"@N <#CE*S/ꐼUD^m1lZRK#ɀ,I}=ڮ)љ0V޲;;ΖϨT`-;CQh/%JHM >%¤zf*zD׶D%\A
+ f^kBnZVDdM{N -JWe"iߎ'$|^Ÿ6) {K4"`5d%FD(KC$%Mo@v'BYa. I`!t>QGѡu,֏@ _`_76'T4U$;A~A)6-x,}}cׇɰ7ڐahYgIaGDie&܂B7ްc.?PR;UeTaJ"$$89LXh4|:Ŷ}Z~3G}1%
+_
+pш<ehwSZ?Ji
+)KF2n<m@$wbpWw4DZ*׿w%=)=+X7 CvзOVEf~]@rT,ȅLRmš:Y9d>rrLPE
+)2SPچI}D(g'O/2,6I,}t# $V
+1$aa:@N
+ҕXZFڂE=3 +jRS]i4C
+䩼5\6C&Kow81Pr4]1$ J(Mig*[@9\@
+bk g?oAdeaM$o%:{~hBR'RFX~w ԿljMT(<)K GzMH+%jJCcwM冋&T
+yqpThbl!an_x\S=MY+]pz=#z,i#M1؅9QH (7#$%+
+QJKX9=zWuj:2 \/K}DŽiJQ< UwmnRyNl JIN1 h {k5L pJ[(sG5->`dUoy_!vjbEwm0Ib\6j\@Be =YOiZ@BF3^`$*}ztFvX0cj.xǑȽ.}y`~/ݾd"s@d~
+_\ D֜3tG b)y`HRc"1L(LB6, KHUSKYx#E3:JNٽgQJI6YơzB%4; JF frP}cCed',x>w D5U h{ٖ ADd ވI'ni띻"V -Rb"H5o,vtWLipB$IbN #QTkg'dӭQt;B*K?⭩FlLl
+0d#QGfzoL5
+ThJa);6-#DV0:)%]eZAGR>Kmb1~2
+Ġ(ê@$®S6jdڥJNidLz=
+ CcHzlNQ~UP,'FSFҰ"5䤖W'1HlMMSZ N `P*
+GO Qͻb4aN=RcO||3Qs1`u|'kK依,7g-ۋ0^qhuxd;iTqt{|/ZW X&'i7Sd)")u.?p#=ȇ60dHR /2^ñ;Vg5@ѽY986ks1
+^6
+
+
+"g 
+9 aH4`lLt7敺TK9EvTD>,=,pQEӅ(
+ADP#,SS1Xz.h$?KûW}1wbxaHԒڔ dDhKj"PH
+BRd,%XW&Úvi4IB@]a: b+؊J' )c;^1݀(WZieVi;Ňr* Չ Hm>mqTjWGp*}}0 PD7v@m
+Rl(_< G D30Sd$~6Rd
+nvfA5<>a6*d
+ƕ%/A´x*V _xi$xv0j[Ng#>Wi{-dXGLLӦE-F (7v)2"OjEQ
+Fd"ڈia&jSP`. & H Ȏ]$dUy .aISpsiRd-n+Co\hФ + ƋOyt<I DpZ7pMeYFa!yF8l$gl 0s[<&\&1tBȓnp(92yqn1?@B= 2B^^Pn &WCHi@p}eD?J
+zܡXuo.loD݀ {P0n@(J`5,1 DGa|-+ 
+,fz+ŗS`wEӢF^#Ev7 pO9N5 TW JI$. ̖ĀѨDD>92bEus݀] p9(6Bb3sS$?@w{+ر.SaIo RIG<mD
+D-MC$%L 7xݖn@J aM7m7 lHRLbEJڟloϋeqm
+NKd]g[iF3n@
+LCkafduZ.2PB UusAAR@fo+|ru8a_*.*A[¼rq*mK.4fJ&/r>2 xL#5OBw(Ve׀{E/c% !4Z
+uL0r`\,Nָgp硶fă:N<^~,u*,mp.EY,d836_@R
+p
+2xWU
+S<3XvXQj
+r-e 1<{Y\d/8U-gy kUX^rA_l-1_H~2e$ƿ8{8,~/Wm Z7EU*ߴ
+^ل6]XlXy&mb-M4-cUF%3h,,.mFİ
+6K>YKpF) qٜVHS<d؃J^l2+$V]p jo艴</jw+S][)D:qu
+buEʳrMa0shiE]5F4c¾n@(1/bjviҚ0,Ἦ尜)1 ,>36\ ք;P"QWnvYl/fvCd
+芇oW% $R׻aIjJޏ 1ʊL ؙRRSQI}MZZR8(iIM{"۴p_P-*0?]%3C ^%)5m’V(DW*`|X1(L61{a~RJc譴 *(w+NRF@fA"F*JqHi JiV6KFm4& /{(x?lI.'9`Ɍ=BF4}Z'LEu
+_6]"UBI6޷.|~
+~ԥ:X)e
+ #]'
+6OAE)$OArݰ\$)2,n=LGmOAY"/ĭQwa(Un@tkTX KQ1<
+\ P> R67?ωCOUr SPOl-6?;pR{sZR%8\ B'k+E%%4*Vb"xg4TT~
+|>%&
+D@PQ(8S04l0'(WˤS,"IB!=օ,h" &SnjZvUN!>!JxȕgS% pMRZpk&cf+nA-3TLoxڅT"j7lC<n3ws.LG^$E
+Bw`Ca#!>18a`{ Id 9 ˢJF,8rBF!<r['/:\TeF\y<ơnb He<O:UaH``.v4$&p"4[pQ `7^bbq<s<t4۷XFc2滠t"QzfL&1JZ G0tl r zM<헎vnd}L,ZD7hME &D"{y@G`
+B!1X:$H6A(exڝ ^ B,)&jn@ښMAX0Ya  x
+cLk15I D%D\Z7uC
+/*XF:&q@5 Bt%5<v(%uXO[p/FQpZKѲxHv! y݀@ѬLs"l!E6Srji(4Ƨd#\4lV'8w6RKj D"E`%X:k||<CG]p k kU|
+
+֕Z8Jt7 XeSdnC7ʦ>@Pdٍs-,=p
+A+'k Ai^ic%].. 7Kl] E%E"&Q1E))-X-`l$Pd;3$[V{G,=8.q"1#2?8q(,1 -)
+d[f:QH He7 #{7xuÆeTc+<\!'B)݀A)"gEL;mf"ג[ci$'Ő7U; `ԇ8culi%ʴpr\Y上B_UO17S#Ҥa4h,]Dm
+2HshK@ @mYouWY.a:}i;mO/e66 aCF Ee;(vPdCe;n5ev(~ خͥ/9\)9霂nAcN'Lq[r:&ֶN;k$8vEq)v'+P"y%pm
+Jz-bȮAELPT[IY(ҋi7O49<Mq2-~2O;s>dV7)O &SHܡ<PZrЭMHXw(9nI[1j 1
+ r6@e3\j39KϬ5÷^ʅ]HǬA`$âݼ>(2*:"@:1(H t㻪%#I-P-@W7#SɸFGLǰ6Sñ}t
+IZY
+,P:u꜉
+2Z)RM)E]"bbImJ'fRp)jzģ֙ݨ^G(Բ[ֹ@CY"rhH~uɌpٟƋ\H4>-]ZJwk 槠fڍM-5X]8>#n@(TaDKJ:.AxrkoLӤ 4D LJSSO2_tdna/2M eCqP`G1I_;a6uGøg:@<;#~@<*f7 %
+RDqaN 'N-^*ǹ>`HєCf*w݀Ze70cqfT@T8mCv:J],n]Hӷ=NZRيo^^71_<˖Cr.SjO>W'8|t'^e䓾HPjx 2>~DPprZ7
+B2)мȉV
+.8^jߴϑ&vС}aZ޽D.zq - O/-rV vYb9Y)Mt}xwH{=rԎbHNHT͕J[td T{Ė}HHyȌu9x*z7 OYQsau2]髮sOrO|Oj8zfzUq7(5kNnb
+JB 9</>Sa?ꍫ0zeN\6~
+FZ @rqbrR]Y-41*gW‘E\tL [E*Îݘ+ܠր٫0ݧ.4(SuR[+:m(5*83)DZ4u~DS#Ȧd#qt 7|LOjΊM>&SݍM
+'ɨ`]lOeѡuF
+ޅWKl5l L( Dn@VدufG]O9fDIHSݸ"3<՞eF-;.M&vHK0Un)|=\Z-TkAqqw,Шs݀jq6 ^nTI{#`m9;C!Gk \+uN!s6 q,APx )ڑI1dsT;⋈i%"η RB|R"SGJrwWp(h(d`] n^jfX3,ٵ}^`@j_?.1X:B P{!RW Mn>n怓E/SD}L,}
+ I}>^ g D3,_,SV)Ѣo=v
++06aY(JA#QaEw[BZїZE"+\d7pHA)X 4/< nAx7ej-1QԵ?۴) vHI]0r㾉Q>"PpEp݀}j Zbbp@>{m AD袎R0d'<X4Չg<T^h<biQZɐXporq0)} FS 
+jrLI a
+))9&LA!$麮[# pLe8n[
+wm}-sMoM 7??K>(7-Zdj4Ի6uRS,hGʎj7~5  E
+DV%SOZjOIO F19@R5n~7?]Kmp1?k5W5\T5*''u0>%urO\fp#hS(ZƆN*N</OjQ=2j;&Zv7 4DM*5l)5gn29m)]-M>Ȩ۷FSnd)-\ 0`H6Hm=.XJ=A݀
+Hȥ3yi*r(");=f}vCb"Ԟvo,+%F JxDù0bfFd
+h>*NDL*2DHƁ aA!RdU
+_z!iu2+Tg? l;e86k4xcO
+ߤFZc7D:*uik~j s7`FhH\4r&R;U6j(Ӻ2
+pOm?8 hv㑧cZQûyFЊЅ06Own
+;/E/x&60Ռ)E{UmR~4ڍL gb~Z&3\q_L>=CFU_IP-˞[ˠq{SF"8D \( q\x1ޭg$@<"ѺU`_ɩ`~ڠAH%%>lۥ{9m'yF1{MQ9LTL7 v1jhz*m1U̧tGԈK<TIĕVI-iӏtp`9-/q
+~/w9 [gM ֽ"pHտU`?KF†1-+@dVjhlR;1CZš*b!D1 Ixqc
+-˃*W_l6
+Y½n'aLBLBqNZfl8E&Qp6 .͡Kw7Z_D:^?I`~]0f4aQr0k5-"m#3WGx
+y~*Vq39ԵK5}s>NLcj-盟"b7*l0]U)ȸ!opǰB_js5c#sXS8Nص|{Fx#3*sYiAXUek!.$l4,+j$ZѪ52[݉VeSLZ]]c(3N'LEyVQI̚ TӸCGw'yQYG7^Hk̀"veB"s'%g2dwNZ-ԏ[ :(imx/mI~C5=Uz5nx.3/X"<D`}1o~JI;Ozq8;8˜g|26B9G6TPcfz\^6њS'qߝ'+Ҙsi9yښ# E:/uy3=ivqAb/ʦfGp4
+]BCˊ22lG=@a89h4T[8>5CAi#sbDk4-qѨC+Za4ĶS/O\8nǷJ[k2(i&JWa@H!65Ce,h7-â?r yȗUmaŹ]wo${mw:`s",fԤ4ܩ.v$=wZ\oW+s݌`Djh䝮ceC{8t ֪'O+֮k"/Ea}֗?  -꡿n@0XID.qB:dU,goZoe۴\lT]*n^~ 
+ɚ/. vݎ"0τ|`` ]rY=dse *tWzNRHWt(38ڄB27( *61KMvkL䚷c)@i kA2OVČKx9!:!,4pB |st"u0taz0)ZÔm-g0'y ^ډ`XL V9=vD$Ʃ6G`X~U
+<IJdQoF0nX0!v- {Wr#
+_DΣ~4[]Ӫrǖq{d&Cdm-GSo;0Gby~q|ykɇBrq LsWO2օ璍q<qT'MJJSpѣoѐ0DDM`j
+a3-D4%<C1;ІbY$ }"j[9`cb=ͼS@y0K'*twPk,
+v!}V?ԲeS"Y?E(rɎ~*M ;w,(Qp ɫ߯+n2tJ-]ϊ^s(5  Z9* )}elc`31ȶ ,tza1T'hRkMDm܎zs%GI#V?U%x
+J!|
+k < vHfA":خE !| ah/R;ړB܋\GTn(^2l!I{.(ҖRbfKi<(A5e@iRKbl
+ee]!eGfff1Ρ኉"/dR =>!Z^C~z_cuLgx3jF?<%Խ=x2<@ΡY hQl2)R1S?G` ЂP`KT&sC|\QhB[D:9b:`qK"k
+FoDjw/g%!UvKw\YMN9+T\`$+YT@﫟yI!3g#OpxP%>Kؑ.J!NAobYC\T>E3`9~$x଑6Hu8:8ob-x18ѧtu4]S٪1\o4d֦>f /PИrRJ&%5l
+"FmĕV+Ĩ69Q!RlQa!DŽUyIvĨr9FVU؀0jjtY3jQ\*9IQ:)ضĨKdq3fERDrmj[}u49\+~*t&hJ8#!d.ޤA|ArSuebda>B.{~a.hkdiH՚AM6V\iȕm5vdt+7ڗ+wVLޘ4aie@eNJSF,OyFhݼ0Јr M$*.$gW;%{pfAn8_2ljƯG]%rp| 8r ȖoY|Gz͝J,
+BcR 7D\!zr% ^lF;IX$Gi-S e\a؟΄_icefs
+mARЃ+)%u/|O >( >
+a+E&hz lj.vR=?^4
+qZ09LNLc䥣]MۢҠgv#|)ylo)_G3 3 a|o9]9o| Io<ڦ>kۙoey, YQVn }n]|n|hJ̸V-МBj+}h%]bF],^2L"{ >_O(` EYRQG,V@䅼$>8p)b("hԈqn-jX*y1/o ajwom!$6b]"#jSD6?Oh[EKKOv@4f0DzilX?Lt+Q.sn*]Tr`iK'7_n+[YiktJ
+P5+7dWj$P&\;10œ.m?
+*0z*;HM+ߤmQUĩ93V&cJL9T@lD=2.O@ 3tdžnM-c1pb=nVeԆbD6honm}ўk=@IXi7T~ s(xڻj#~ޓ/*?8 sG!s P6Lh'
+A-taufYtzxŒNz[SiCX]S!q-P*}8ql'8t~7,bTKkKg
+5U'xaVx]՘ճUd+7Jɸ Z2V[ԭiNQV֝M/:>BT30Ǧݧ ATTH٥Ί|4àYUloۄ*.AKY5΅w=?rK;,wtW2zVȡF@%K:t5)a%P[ 4H]a@Jxo XZiVHO(p;$
+-y D /[u$G[97
+OK0w5l02ɵ]^(cc;-o$ȡ5 6l4Tij~aP%\]պLI5,hVb;uWؚ_,WԵhҕ (9n%k+<SAӦD ZBuP;x^q6=mՑHV񛨷&x][?*ϟ%OI]gWaKpbSrtmC>w+b9
+o
+ c9d;u@Z^A8T!\⑬Sr
+`.UH-L.>
+ф
+%=k%)[u&~uDOqEN9eIQ`RTI +oge!$sY駈ݞX'iD{B/O0BSmQn{Q47_pDtX#\B`&lf:%]nkR8(x.alg:hq]>a; gumA`Ђ+qfDA`RuYVt.+%荺TE'r72]KہϿ1Ģ& N @Dɣ]y2)
+GWewƣFR Bbt(/S&+|APP24܂J_{ۨoA}]H_ʡ6!..3\C
+QD[a3 ..
+-TT:E2X0cif ,pX
+cѵCVaw$rCgGbz O>gD{L(ܙIZ"R| Lڕ= _+1!-%s, 
+` 45<vRFD҅u*9u0M$L8%j8+d ]alfk!MҒ)@[';-B+b" ޴Nq=Wb_z}ש~{.H|CYIP\eD{<t}\iѝ۶1 jR|^fUQ{0aRחr% UKwL Ђ8HH ڥNrAHKI!2K3I\1$VG Z"+A0J@GM
+܀Օv7{ѵcg,@m%Y^_<0!/l
+Ah¦ rŔt- X ۉxwbh5`֠7'
+aZam4Sd}jm;曋2uBny⧜MH$/-~JU5^^gy;CB}% oNزmsG Kׄ kSYYjhq9TN{`!?<%HwV 2q
+w]]a
+ϬlMZN{CJ^Vᤉ)~B^快d}C{.И
+g;"j#0\i{!o7$Ȥrh +DhffP͝
+Uh!z2Dszu~!s
+E_=ˋ+Xm^iaP$pJM3 X9ԩ'em{5<zb!)Ҍ$
+PP)
+
+ǟ^wJԑ(-d;'?di/+ >aa1y{`XRi5@"%YlBB E
+z$YO`Dh'pb:cI@Nٵsá&/)ItvX$$s<7ڇ7wd 8ZA<N4h(a,K=im[ŷ&p5V
+<܋[}~.z@?OԺp  +GA{"ٲ
+,Lȣ̜ʣEbAÕX[4חQO18O ĞyhsŎ?C>O9=S4% *Y9O33.ݜo@M4Zpɉꥴ䌦ꨐ4쮃GCMnRT^dz
+ ӂ1<Bxg0M?F
+E <FeAIogj%ԤVhF݁ Bc^bQyT&O{֯"_)u[3Z"DV*ؕ1z ၮ{Lt\ƾtRmWmGX
+2rڢs1s'RVñmrOB=htV.mN+UY1\]F/cPǻK3-c k_"zj"x@
+Dؔ
+2jꗁ /,$^tbW:Nhw &|P!LN]xИ{;fz+ʘ; 2|<T.m
+6zhW> 5_& 7ݪwP*?O67A$$`&uVD)&|>4A9܇8G I@ ^{7* uS@na\cDQP̲dMT
+z_%Wx
+f< [
+d)ΙB*{Ρr*tێ8K2iYz&[@쫁C?6F_8`Yk.`b<] ]Kf}\F1yi~
+w8
+endstream endobj 5 0 obj <</Intent 18 0 R/Name(Ebene 4)/Type/OCG/Usage 19 0 R>> endobj 6 0 obj <</Intent 20 0 R/Name(Ebene 1)/Type/OCG/Usage 21 0 R>> endobj 7 0 obj <</Intent 22 0 R/Name(Ebene 2)/Type/OCG/Usage 23 0 R>> endobj 8 0 obj <</Intent 24 0 R/Name(Ebene 5)/Type/OCG/Usage 25 0 R>> endobj 9 0 obj <</Intent 26 0 R/Name(Ebene 3)/Type/OCG/Usage 27 0 R>> endobj 26 0 obj [/View/Design] endobj 27 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 24 0 obj [/View/Design] endobj 25 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 22 0 obj [/View/Design] endobj 23 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 25.2)/Subtype/Artwork>>>> endobj 42 0 obj [41 0 R 40 0 R 39 0 R 38 0 R 37 0 R] endobj 68 0 obj <</CreationDate(D:20210620202348+02'00')/Creator(Adobe Illustrator 25.2 \(Windows\))/ModDate(D:20210716163100+02'00')/Producer(Adobe PDF library 15.00)/Title(FIC)>> endobj xref
+0 69
+0000000004 65535 f
0000000016 00000 n
-0000000193 00000 n
-0000050662 00000 n
+0000000263 00000 n
+0000052288 00000 n
+0000000000 00000 f
+0000360264 00000 n
+0000360334 00000 n
+0000360404 00000 n
+0000360474 00000 n
+0000360544 00000 n
0000000000 00000 f
-0000053324 00000 n
-0000053394 00000 n
-0000053464 00000 n
-0000053534 00000 n
-0000053604 00000 n
-0000351801 00000 n
-0000050714 00000 n
-0000051136 00000 n
-0000054367 00000 n
-0000054254 00000 n
0000052340 00000 n
-0000052762 00000 n
-0000052810 00000 n
-0000054138 00000 n
-0000054169 00000 n
-0000054022 00000 n
-0000054053 00000 n
-0000053906 00000 n
-0000053937 00000 n
-0000053790 00000 n
-0000053821 00000 n
-0000053674 00000 n
-0000053705 00000 n
-0000054441 00000 n
-0000054696 00000 n
-0000055971 00000 n
-0000121560 00000 n
-0000187149 00000 n
-0000252738 00000 n
-0000318327 00000 n
-0000351849 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000361078 00000 n
+0000361109 00000 n
+0000360962 00000 n
+0000360993 00000 n
+0000360846 00000 n
+0000360877 00000 n
+0000360730 00000 n
+0000360761 00000 n
+0000360614 00000 n
+0000360645 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000056114 00000 n
+0000055179 00000 n
+0000055250 00000 n
+0000055321 00000 n
+0000055392 00000 n
+0000055463 00000 n
+0000361194 00000 n
+0000052807 00000 n
+0000057828 00000 n
+0000057715 00000 n
+0000054187 00000 n
+0000054617 00000 n
+0000054665 00000 n
+0000055998 00000 n
+0000056029 00000 n
+0000055882 00000 n
+0000055913 00000 n
+0000055766 00000 n
+0000055797 00000 n
+0000055650 00000 n
+0000055681 00000 n
+0000055534 00000 n
+0000055565 00000 n
+0000056407 00000 n
+0000056702 00000 n
+0000057902 00000 n
+0000058157 00000 n
+0000059671 00000 n
+0000125260 00000 n
+0000190849 00000 n
+0000256438 00000 n
+0000322027 00000 n
+0000361247 00000 n
trailer
-<</Size 36/Root 1 0 R/Info 35 0 R/ID[<8F914AC017E7274DA4FF36C5815F2B8A><ADB0D5143910BA4C92D0FEA7476B1AE2>]>>
+<</Size 69/Root 1 0 R/Info 68 0 R/ID[<8F914AC017E7274DA4FF36C5815F2B8A><196BBE183DA3F8489DF09FFAFB9C2A6A>]>>
startxref
-352030
+361428
%%EOF
diff --git a/buch/papers/ifs/images/Makefile b/buch/papers/ifs/images/Makefile
new file mode 100644
index 0000000..c6d3fb5
--- /dev/null
+++ b/buch/papers/ifs/images/Makefile
@@ -0,0 +1,9 @@
+#
+# Makefile
+#
+# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+#
+chaosspiel.pdf: chaosspiel.tex \
+ farnnotweight-eps-converted-to.pdf \
+ farnrightwight-eps-converted-to.pdf
+ pdflatex chaosspiel.tex
diff --git a/buch/papers/ifs/images/chaosspiel.pdf b/buch/papers/ifs/images/chaosspiel.pdf
new file mode 100644
index 0000000..23f0dd2
--- /dev/null
+++ b/buch/papers/ifs/images/chaosspiel.pdf
Binary files differ
diff --git a/buch/papers/ifs/images/chaosspiel.tex b/buch/papers/ifs/images/chaosspiel.tex
new file mode 100644
index 0000000..7c69ad3
--- /dev/null
+++ b/buch/papers/ifs/images/chaosspiel.tex
@@ -0,0 +1,37 @@
+%
+% tikztemplate.tex -- template for standalon tikz images
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math}
+\begin{document}
+\def\skala{1}
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+% add image content here
+
+\begin{scope}[xshift=-3.6cm]
+%\clip (-3.3,-3) rectangle (3.3,3);
+\node at (0,0) {
+\includegraphics[width=6.8cm]{farnnotweight-eps-converted-to.pdf}
+};
+\node at (0.2,-5.7) {(a)};
+\end{scope}
+
+\begin{scope}[xshift=3.6cm]
+%\clip (-3.3,-3) rectangle (3.3,3);
+\node at (0,0) {
+\includegraphics[width=6.8cm]{farnrightwight-eps-converted-to.pdf}
+};
+\node at (0.2,-5.7) {(b)};
+\end{scope}
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf b/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf
index 35bff32..f5e4093 100644
--- a/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf
+++ b/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf
Binary files differ
diff --git a/buch/papers/ifs/images/farnrightwight-eps-converted-to.pdf b/buch/papers/ifs/images/farnrightwight-eps-converted-to.pdf
index 3652e8f..fa69d77 100644
--- a/buch/papers/ifs/images/farnrightwight-eps-converted-to.pdf
+++ b/buch/papers/ifs/images/farnrightwight-eps-converted-to.pdf
Binary files differ
diff --git a/buch/papers/ifs/teil0.tex b/buch/papers/ifs/teil0.tex
index 833748c..af2105e 100644
--- a/buch/papers/ifs/teil0.tex
+++ b/buch/papers/ifs/teil0.tex
@@ -5,7 +5,7 @@
%
\section{Einleitung \label{ifs:section:teil0}}
\rhead{Was ist ein Iteriertes Funktionsschema}
-Mit der Hilfe von Iterierten Funktionsschemata (IFS) kann mit nur wenigen affinen Funktionen, komplexe Bilder beschreiben werden.
+Mit der Hilfe von Iterierten Funktionsschemata (IFS) können mit nur wenigen affinen Funktionen komplexe Bilder beschrieben werden.
In der Regel sind diese Bilder Fraktale.
Wie es dazu kommt, und wie man mit IFS auch Bilder komprimieren kann, wollen wir in diesem Kapitel untersuchen.
diff --git a/buch/papers/ifs/teil1.tex b/buch/papers/ifs/teil1.tex
index a75b529..caba120 100644
--- a/buch/papers/ifs/teil1.tex
+++ b/buch/papers/ifs/teil1.tex
@@ -7,29 +7,27 @@
\label{ifs:section:teil1}}
\rhead{Problemstellung}
Bevor wir die IFS ansehen, schauen wir uns Fraktale genauer an.
-
-
Über die genaue Definition von Fraktalen sind sich die Mathematiker nicht einig.
-In diesem Kapitel orientieren wir uns an den Eigenschaften welche Kenneth Falconer in seinem Buch Fractal Geometry \cite{ifs:fractal-geometry} beschreibt.
+In diesem Kapitel orientieren wir uns an den Eigenschaften, welche Kenneth Falconer in seinem Buch {\em Fractal Geometry} \cite{ifs:fractal-geometry} beschreibt.
Von einem Fraktal $F$ können wir folgende Eigenschaften erwarten:
\begin{enumerate}
\item $F$ hat eine unendlich feine Struktur
\item $F$ kann nicht mit der klassischen Geometrie beschrieben werden.
\item Oftmals hat $F$ eine Form von Selbstähnlichkeit.
- \item Die 'fraktale Dimension' ist grösser als die topologische Dimension
+ Man spricht von einer selbstähnlichen Menge, wenn sich diese Menge überdecken lässt mit echten Teilmengen, die zur ganzen Menge ähnlich sind.
+ \item Die `fraktale Dimension' ist grösser als die topologische Dimension.
\item Viele Fraktale lassen sich auf eine simple Art definieren. Es genügen zum Beispiel nur wenige Funktionen, welche rekursiv ausgeführt werden, um ein Fraktal zu definieren.
\end{enumerate}
\subsection{Koch Kurve
\label{ifs:subsection:lilkoch}}
Diese Eigenschaften möchten wir nun am Beispiel der Koch Kurve näher anschauen.
-In Abbildung \ref{ifs:kochkurve8} sehen wir die Koch Kurve. Sie besteht aus lauter kleineren Kopien von sich selber.
-Den Konstruktionsvorgang ist in Abbildung \ref{ifs:kochconst} dargestellt.
+In Abbildung \ref{ifs:kochkurve8} sehen wir die Koch Kurve. Sie besteht aus lauter kleineren Kopien von sich selbst.
+Der Konstruktionsvorgang ist in Abbildung \ref{ifs:kochconst} dargestellt.
Gestartet wird mit einer einzelnen Strecke der Länge $a$.
Diese wird in ersten Schritt durch vier gleich langen Streckenabschnitte der Länge $\frac{a}{3}$ ersetzt.
In \ref{ifs:kochconstb} ist die Anordnung dieser vier Streckenabschnitte ersichtlich.
Dieser Schritt wird nun für jeden der resultierten Streckenabschnitten wiederholt.
Die Kurve besteht also aus vier kleineren Kopien der ganzen Kurve, was auch unter Selbstähnlichkeit bekannt ist.
-Man spricht von einer selbstähnlichen Menge, wenn sich diese Menge überdecken lässt mit echten Teilmengen, die zur ganzen Menge ähnlich sind.
\begin{figure}
@@ -66,7 +64,7 @@ berechnen.
In jedem Schritt wird die Länge um den Faktor $\frac{4}{3}$ verlängert. Daraus resultiert, dass die Länge gegen $\infty$ divergiert.
-Die Fläche unter der Kurve lässt sich folgendermassen berechnen
+Die Fläche zwischen der Strecke von $O$ nach $(1,0)$ und der Kurve lässt sich folgendermassen berechnen
\begin{align*}
A_0 &= 0 \\
A_1 &= \left( \frac{a}{3}\right)^2 \frac{\sqrt{3}}{4} = a^2 \frac{\sqrt{3}}{36}\\
@@ -88,22 +86,22 @@ Wie wir sehen ist die Koch-Kurve ein Objekt mit endlicher Fläche, aber unendlic
Zu guter Letzt bestimmen wir die Dimension der Kurve.
Es gibt viele verschiedene Methoden die Dimension zu definieren. Diese können dann auch unterschiedliche Resultate liefern.
Vor allem im Zusammenhang mit Fraktalen findet man in der Literatur unterschiedliche Arten.
-In diesem Beispiel werden wir die Ähnlichkeits-Dimension \cite{ifs:fractal-geometry}.
+Da die Kochsche Kurve selbstähnlich ist, ist die Ähnlichkeits-Dimension \cite{ifs:fractal-geometry} die angemessene Messzahl für die Dimension.
Die Ähnlichkeits-Dimension $D$ ist das Verhältnis der Logarithmen der Anzahl Kopien $N$ des Originales und deren Skalierungsfaktor $\epsilon$
\begin{align*}
D = - \frac{\log N}{\log \epsilon }.
\end{align*}
-Mit ihr kann man einfach die Dimension selbstähnlicher Mengen bestimmen.
-Als Beispiel nehmen wir ein gleichseitiges Dreieck. Dieses besteht aus $N = 4$ Kopien mit halber ($\epsilon = 1/2$) Kantenlänge $l$, Abbildung \ref{ifs:trinagle}.
+Die Ähnlichkeits-Dimension stimmt für viele gewöhnliche Geometrische Objekte mit der intuitiven Vorstellung von Dimension überein.
+Zum Beispiel besteht ein Dreieck aus $N = 4$ Kopien mit halber ($\epsilon = 1/2$) Kantenlänge $l$, Abbildung \ref{ifs:trinagle}.
Somit hat das Dreieck die Dimension $D = 2$.
Die Koch Kurve besteht aus $N = 4$ Kopien mit Kantenlänge $\epsilon =l \cdot 1/3$.
Ihre Ähnlichkeits-Dimension ist somit
\begin{align*}
D = - \frac{\log N }{\log \epsilon } = - \frac{\log 4 }{\log 1/3 } \approx 1.2619.
\end{align*}
-Wie wir nun sehen besitzt die Koch-Kurve alle oben beschriebenen Eigenschaften von Fraktalen.
-Dies muss jedoch nicht bei allen Fraktalen der Fall. Sonst wäre die Frage nach einer 'richtigen' Definition einfach zu beantworten.
+Wie wir nun sehen, besitzt die Koch-Kurve alle oben beschriebenen Eigenschaften von Fraktalen.
+Dies muss jedoch nicht bei allen Fraktalen der Fall sein. Sonst wäre die Frage nach einer `richtigen' Definition einfach zu beantworten.
\begin{figure}
\centering
\begin{tikzpicture}
diff --git a/buch/papers/ifs/teil2.tex b/buch/papers/ifs/teil2.tex
index fd10634..d0110ed 100644
--- a/buch/papers/ifs/teil2.tex
+++ b/buch/papers/ifs/teil2.tex
@@ -6,8 +6,9 @@
\section{Fraktale mit IFS
\label{ifs:section:teil2}}
\rhead{Teil 2}
-Wollen wir nun eine bestimmte Art anschauen, wie man Fraktale machen kann.
-Zur Veranschaulichung dieser Methode nehmen wir das Sierpinski Dreieck.
+Wollen wir nun eine bestimmte Art anschauen, wie man Fraktale erzeugen kann.
+Im Beispiel auf Seite \pageref{ifs:trinagle} haben wir ein Dreieck aus 4 skalierten Kopien zusammengefügt.
+Lässt man die Kopie im Zentrum des Dreiecks weg, entsteht die Grundlage des sogenannten Sierpinski-Dreieck in Abbildung \ref{ifs:sierpinski10}.
\begin{figure}
\centering
\includegraphics[width=0.5\textwidth]{papers/ifs/images/sierpinski}
@@ -92,21 +93,22 @@ Man kann sogar noch einen Schritt weiter gehen, und sagen: Wenn wir die Funktion
\label{ifs:sierpconst}
\end{figure}
Im Beispiel der Abbildung \ref{ifs:sierpconst} sehen wir, wie das Bild nach jeder Iteration dem Sierpinski-Dreieck ähnlicher wird.
-Der Abstand zum Original wird immer kleiner, und konvergiert gegen null.
+Der `Abstand' zum Original wird immer kleiner, und konvergiert gegen null.
\subsection{Iterierte Funktionensysteme
\label{ifs:subsection:IteratedFunktionensysteme}}
In diesem Abschnitt wollen wir die Erkenntnis, wie wir aus einer beliebigen Menge ein Sierpinski-Dreieck generieren können, verallgemeinern.
-$S_1,\dots,S_n$ sind Kontraktionen auf die Menge $D \subset \mathbb{R}^n$. Es gilt
+$S_1,\dots,S_n$ sind Kontraktionen auf einer Menge $D \subset \mathbb{R}^n$. Es gilt
\begin{align}
|S_i(x) - S_i(y)| \leq c_i|x - y|
\end{align}
für jedes i mit einem $c_i < 1$.
-Der Banachsche Fixpunktsatz besagt, dass für solche Kontraktionen ein Eindeutiges $A$ existiert, für das $S(A) = A$ gilt.
+Man kann zeigen, dass für solche Kontraktionen ein eindeutiges $A$ existiert, für das $S_i(A) = A$ gilt.
Den Beweis kann man in \cite{ifs:Rousseau2012} nachlesen.
-Hat man nicht nur eine sondern mehrere Kontraktionen, dann existiert eine eindeutige kompakte Menge $F$ für die gilt
+
+Hat man nicht nur eine sondern mehrere Kontraktionen, dann existiert eine eindeutige kompakte Menge $F$, für die gilt
\begin{equation}
F = \bigcup\limits_{i = 1}^{m} S_i(F).
\end{equation}
@@ -115,17 +117,17 @@ Weiter definieren wir die Transformation S auf kompakte Mengen $E$ ohne die leer
S(E) = \bigcup\limits_{i = 1}^m S_i(E).
\label{ifs:transformation}
\end{equation}
-Wird diese Transformation Iterativ ausgeführt, das heisst $S^0(E) = E, S^k(E) = S(S^{k-1}(E))$, gilt
+Wird diese Transformation iterativ ausgeführt, das heisst $S^0(E) = E, S^k(E) = S(S^{k-1}(E))$, gilt
\begin{equation}
F = \bigcap\limits_{k = 1}^{\infty} S^k(E).
\label{ifs:ifsForm}
\end{equation}
-In Worte gefasst bedeutet das, dass jede Gruppe von Kontraktionen iterativ ausgeführt, gegen eine eindeutige Menge konvergiert.
+In Worte gefasst bedeutet das, dass jede Gruppe von Kontraktionen iterativ ausgeführt gegen eine eindeutige Menge konvergiert.
Diese Menge ist auch als Attraktor eines IFS bekannt.
Der Beweis für die Existenz eines eindeutigen Attraktors ist in \cite{ifs:fractal-geometry} beschrieben.
\subsection{Beispiel: Barnsley-Farn}
-Der Barnsley-Farn, Abbildung \ref{ifs:farn}, ist ein Beispiel eines Fraktal, welches mit einem IFS generiert werden kann.
+Der Barnsley-Farn, Abbildung \ref{ifs:farn}, ist ein Beispiel eines Fraktals, welches mit einem IFS generiert werden kann.
Wie man schnell erkennen kann, besteht der Farn aus Blättern, welche eine grosse Ähnlichkeit zum ganzen Farn haben.
Die vier affinen Transformationen
\begin{align}
@@ -153,7 +155,7 @@ Die vier affinen Transformationen
\begin{pmatrix}
0 \\
1.6
- \end{pmatrix}\\
+ \end{pmatrix},\\
& {S_3(x,y)}
=
\begin{pmatrix}
@@ -183,25 +185,25 @@ Die vier affinen Transformationen
\begin{pmatrix}
0 \\
0.44
- \end{pmatrix}\\
+ \end{pmatrix},\\
\label{ifs:farnFormel}
\end{align}
-, welche für die konstruktion des Farns benötigt werden sind in der Abbildung \ref{ifs:farncolor} farblich dargestellt.
+welche für die Konstruktion des Farns benötigt werden, sind in der Abbildung \ref{ifs:farncolor} farblich dargestellt.
Das gesamte Farnblatt ist in der schwarzen Box.
-Auf diese werden die Transformationen angewendet
+Auf diese werden die Transformationen angewendet.
$S_1$ erstellt den Stiel des Farnblattes (rot).
-Die Transformation bildet das Gesamte Blatt auf die Y-Achse ab.
+Die Transformation bildet das gesamte Blatt auf die $y$-Achse ab.
$S_2$ (grün) erstellt den Hauptteil des Farnes.
Sie verkleinert und dreht das gesamte Bild und stellt es auf das Ende des Stiels aus $S_1$.
-$S_3$ bildet das gesamte Blatt auf das blaue Teilblatt unten Links ab.
+$S_3$ bildet das gesamte Blatt auf das blaue Teilblatt unten links ab.
$S_4$ spiegelt das Blatt und bildet es auf das magentafarbene Teilblatt ab.
\subsection{Erzeugung eines Bildes zu einem IFS}
-Es gibt zwei verschiedene Methoden um das Bild zu einem IFS zu erzeugen.
+Es gibt zwei verschiedene Methoden, um das Bild zu einem IFS zu erzeugen.
Die erste Methode ist wahrscheinlich die intuitivste.
-Wir beginnen mit einm Startbild, zum Beispiel ein Schwarzes Quadrat, und bilden dieses mit den affinen Transformationen des IFS ab.
-Das neue Bild, dass entsteht, ist die nächste Iterierte.
+Wir beginnen mit einem Startbild, zum Beispiel ein schwarzes Quadrat, und bilden dieses mit den affinen Transformationen des IFS ab.
+Das neue Bild, das entsteht, ist die nächste Iterierte.
Dieses wird wieder mit den Transformationen abgebildet.
-Wir wiederholen den letzten schritt, bis wir zufrieden mit der neusten Iterierten sind.
+Wir wiederholen den letzten Schritt, bis wir zufrieden mit der neusten Iterierten sind.
Diesen Vorgang haben wir beim Sierpinski-Dreieck in Abbildung \ref{ifs:sierpconst} gebraucht.
In Abbildung \ref{ifs:sierpinski10} ist die zehnte Iterierte zu sehen.
@@ -213,11 +215,12 @@ Bis jetzt wurde immer davon gesprochen, die Transformationen auf die gesamte Men
Bei komplizierteren IFS welche viele Iterationen brauchen, bis man den Attraktor erkennen kann, ist die erste Methode ziemlich rechenintensiv.
Beim Chaosspiel werden die Transformationen nicht auf die Menge angewendet, sondern nur auf einen einzelnen Punkt.
Der Startpunkt kann dabei ein beliebiger Punkt in $E$ sein.
-Es wird bei jedem Iterationsschritt nur eine Transformation, welche zufällig gewählt wurde, angewendet.
+Es wird bei jedem Iterationsschritt nur eine Transformation $S_i$, welche zufällig gewählt wurde, angewendet.
+
Da, wie wir beim Barnsley-Farn gut sehen, nicht jede Transformation gleich viel des Bildes ausmacht, werden diese beim Chaosspiel gewichtet.
-Je mehr eine Transformation kontrahiert, desto weniger Punkte braucht es um die resultierende Teilabbildung darzustellen.
-Im Fall des Barnsley-Fern wird $S_1$ in $1\%$, $S_2$ in $85\%$ und $S_3 \& S_4$ in $7\%$ der Iterationen ausgeführt.
-Wir sehen auch in Abbildung \ref{ifs:farncolor} gut, dass der rote Stiel, $S_1$, einiges weniger Punkte braucht als der grüne Hauptteil des Blattes, $S_2$.
+Je mehr eine Transformation kontrahiert, desto weniger Punkte braucht es, um die resultierende Teilabbildung darzustellen.
+Im Fall des Barnsley-Farns wird $S_1$ in $1\%$, $S_2$ in $85\%$ und $S_3$ und $S_4$ in $7\%$ der Iterationen ausgeführt.
+Wir sehen auch in Abbildung \ref{ifs:farncolor} gut, dass der rote Stiel, $S_1$, viel weniger Punkte braucht als der grüne Hauptteil des Blattes, $S_2$.
In Abbildung \ref{ifs:farnNoWeight} wurden die vier gleich stark gewichtet.
Man sieht, dass trotzt gleich vieler Iterationen wie in Abbildung \ref{ifs:farn}, der Farn nicht so gut abgebildet wird.
@@ -245,12 +248,13 @@ In jeder Kopie des ganzen Farns fehlen die Punkte für dieses rechte untere Teil
\begin{figure}
\centering
- \subfigure[]{
- \label{ifs:farnNoWeight}
- \includegraphics[width=0.45\textwidth]{papers/ifs/images/farnnotweight}}
- \subfigure[]{
- \label{ifs:farnrightWeight}
- \includegraphics[width=0.45\textwidth]{papers/ifs/images/farnrightwight}}
+ \includegraphics{papers/ifs/images/chaosspiel.pdf}
+ %\subfigure[]{
+ % \label{ifs:farnNoWeight}
+ % \includegraphics[width=0.45\textwidth]{papers/ifs/images/farnnotweight}}
+ %\subfigure[]{
+ % \label{ifs:farnrightWeight}
+ % \includegraphics[width=0.45\textwidth]{papers/ifs/images/farnrightwight}}
\caption{(a) Chaosspiel ohne Gewichtung (b) $S_4$ zu wenig gewichtet}
\label{ifs:farnweight}
\end{figure}
diff --git a/buch/papers/ifs/teil3.tex b/buch/papers/ifs/teil3.tex
index 78fb935..cebb664 100644
--- a/buch/papers/ifs/teil3.tex
+++ b/buch/papers/ifs/teil3.tex
@@ -6,32 +6,31 @@
\section{Fraktale Bildkomprimierung
\label{ifs:section:teil3}}
\rhead{Fraktale Bildkomprimierung}
-Mit dem Prinzip dieser IFS ist es auch möglich Bilder zu Komprimieren.
-Diese Idee hatte der Mathematiker Michael Barnsley, welcher mit seinem Buch Fractals Everywhere einen wichtigen Beitrag zum Verständnis von Fraktalen geliefert hat.
-Das Ziel ist es ein IFS zu finden, welches das Bild als Attraktor hat.
+Mit dem Prinzip dieser IFS ist es auch möglich, Bilder zu komprimieren.
+Diese Idee hatte der Mathematiker Michael Barnsley, welcher mit seinem Buch {\em Fractals Everywhere} einen wichtigen Beitrag zum Verständnis von Fraktalen geliefert hat.
+Das Ziel ist, ein IFS zu finden, welches das Bild als Attraktor hat.
In diesem Unterkapitel wollen wir eine Methode dafür anschauen, wie sie in \cite{ifs:Rousseau2012} beschrieben ist.
Es ist wohl nicht falsch zu sagen, dass Ähnlichkeiten zur gesamten Menge, wie wir sie zum Beispiel beim Barnsley Farn gesehen haben, bei Bilder aus dem Alltag eher selten anzutreffen sind.
Ein IFS, wie wir es in \ref{ifs:subsection:IteratedFunktionensysteme} definiert haben, wird uns also nicht weiter helfen.
-Die Lösung dazu sind Partitionierte IFS (PIFS) \cite{ifs:pifs}.
+Anders sieht es mit partitionierten IFS (PIFS) \cite{ifs:pifs} aus.
+
In \ref{ifs:transformation} wurde definiert, dass die Kontraktionen $S_i$ bei IFS auf die gesamte Menge $E$ angewendet werden.
Bei einem PIFS wird der Attraktor in disjunkte Teilmengen aufgeteilt.
Für jede dieser Teilmengen $R_i$ braucht es dann eine grössere Teilmenge, welche mit einer affinen Transformation eine zu $R_i$ ähnliche Menge bildet.
-Wir müssen nicht mehr Ähnlichkeiten zum ganzen Bild finden, sondern zwischen Teilen des Bildes.
+Wir müssen nicht mehr Ähnlichkeiten zum ganzen Bild finden, sondern nur zwischen Teilen des Bildes.
Doch wie finden wir das PIFS, welches das Bild als Attraktor hat?
-\subsection{das Kompressionsverfahren
+\subsection{Das Kompressionsverfahren
\label{ifs:subsection:malorum}}
Wir beschränken das Verfahren für Graustufenbilder. Wie das Verfahren für Farbbilder verwendet werden kann, wird später erläutert.
-Ein Graustufenbild kann man als Pixelraster mit einer x und y Achse verstehen.
+Ein Graustufenbild kann man als Pixelraster mit einer $x$ und $y$ Achse verstehen.
Jedem dieser Pixel wird ein Grauwert zugeordnet.
-Ein Bild ist also eine Funktion, die jedem Pixel einen Grauwert $z$ zuweist
-\begin{align*}
- z = f(x,y).
-\end{align*}
+Ein Bild ist also eine Funktion, die jedem Pixel einen Grauwert \(z = f(x,y)\) zuweist.
+
+Wir suchen ein PIFS, welches das zu komprimierende Bild als Attraktor hat.
+In einem ersten Schritt teilen wir das Bild in disjunkte benachbarte $b \times b$ Pixel-Quadrate auf. Diese Blöcke nennen wir Range-Blöcke der Menge $R=\{R_0,R_1,...R_m\}$. Diese sind als Raster im rechten Bild der Abbildung \ref{ifs:FIC} dargestellt.
-Wir suchen ein PIFS welches das zu komprimierende Bild als Attraktor hat.
-In einem ersten Schritt teilen wir das Bild in disjunkte benachbarte $b \times b$ Pixel-Quadrate auf. Diese Blöcke nennen wir Range-Blöcke der Menge $R=\{R_0,R_1,...R_m\}$
Im nächsten Schritt teilen wir das Bild in alle möglichen $2b \times 2b$ Pixel-Quadrate auf. Diese sind die Domain-Blöcke der Menge $D = \{D_0,D_1,...D_n\}$.
Im dritten und letzten Schritt wird für jeden Range-Block $R_i$ ein Domain-Block $D_j$ gesucht, welcher ihm am ähnlichsten ist.
Zwei Beispiele wie solche Domain-, und Range-Block Paare aussehen können, sehen wir in Abbildung \ref{ifs:FIC}
@@ -57,8 +56,10 @@ Zuerst brauchen wir die Transformation
g_i
\end{pmatrix}
\end{align*}
-um ein Element aus $D$ auf ein Element von $R$ Abzubilden.
-Wenn wir die Grauwerte ausser acht lassen, haben wir die affine Abbildung
+um ein Element aus $D$ auf ein Element von $R$ abzubilden.
+Das bestimmen der besten Transformation kann man in drei Schritte aufteilen.
+
+\textbf{Schritt 1: }Wenn wir die Grauwerte ausser acht lassen, haben wir die affine Abbildung
\begin{align}
t_i(x,y) =
\begin{pmatrix}
@@ -83,39 +84,47 @@ Wir sind auf folgende acht Abbildungen beschränkt:
\item Drehung um 90, 180 oder 270 Grad.
\item Spiegelung an der vertikalen, horizontalen und den Diagonalachsen.
\end{itemize}
-Da wir ein $2b \times 2b$ Feld auf ein $b \times b$ Feld abbilden möchten, müssen wir zuerst $G_j$ um $1/2$ skalieren.
-Dies erreichen wir, indem wir alle disjunkten $2 \times 2$ px Blöcke mit einem Pixel des Grautones deren Mittelwertes ersetzen.
+Da wir ein $2b \times 2b$ Feld auf ein $b \times b$ Feld abbilden möchten, müssen wir zuerst $D_j$ um $1/2$ skalieren.
+Dies erreichen wir, indem wir alle disjunkten $2 \times 2$ Pixel Blöcke mit einem Pixel des Grautones deren Mittelwertes ersetzen.
-
-Die Parameter $s_i$ und $g_i$ beschreiben die Änderung des Grautones. $s$ verändert den Kontrast und $g$ verschiebt die Grautöne auf die richtige Helligkeit, sie bilden die lineare Funktion
+\textbf{Schritt 2: }Es muss nicht nur eine geometrische Abbildung, sondern auch eine Abbildung für die Grautöne gewählt werden. Letztere lässt sich mit den Parametern $s_i$ und $g_i$ beschrieben.
+Wir suchen einen linearen Zusammenhang zwischen den Grautönen des Domain-, und Range-Block. $s_i$ verändert den Kontrast und $g_i$ verschiebt die Grautöne auf die richtige Helligkeit, sie bilden die lineare Funktion
\begin{align*}
z' = s_i z + g_i.
\end{align*}
Für die Bestimmung dieser Parameter führen wir zuerst die Bildfunktionen $f_{R_i}$ und $\tilde{f_{R_i}}$ ein.
-$f_{R_i}$ ist die Bildfunktion des Range-Blockes $R_i$ und $\tilde{f_{R_i}}$ ist die Bildfunktion des zuerst Skalierten und dann mit \ref{ifs:affTrans} transformierten Domain-Blocks $D_j$.
+$f_{R_i}$ ist die Bildfunktion des Range-Blockes $R_i$ und $\tilde{f_{R_i}}$ ist die Bildfunktion des zuerst skalierten und dann mit \eqref{ifs:affTrans} transformierten Domain-Blocks $D_j$.
-Wir suchen $s_i$ und $g_i$ so das
+Wir suchen $s_i$ und $g_i$ so das der quadratische Abstand zwischen
\begin{align*}
- f_{R_i} = s_i \tilde{f_{R_i}} + g_i = \bar{f_{R_i}}.
+ \bar{f_{R_i}} = s_i \tilde{f_{R_i}} + g_i
\end{align*}
-Die Parameter lassen sich mit
+und $f_{R_i}$ am kleinsten ist.
+Dies ist ein klassisches Problem der linearen Regression. Die Parameter lassen sich mit
\begin{align*}
- s = \frac{\operatorname{cov}(f_{R_i}), f(\tilde{f_{R_i}}))}{\operatorname{var}(\tilde{f_{R_i}})} \\
- g = E(f_{R_i}) - s E(f(\tilde{f_{R_i}}))
+ s_i = \frac{\operatorname{cov}(f_{R_i}, \tilde{f_{R_i}})}{\operatorname{var}(\tilde{f_{R_i}})} \\
+ g_i = E(f_{R_i}) - s E(\tilde{f_{R_i}})
\end{align*}
berechnen.
+Die Varianz und Kovarianz erstrecken sich über die Grauwerte der Pixel der Blöcke.
Mit diesen Parametern haben wir nun die Transformation vollständig bestimmt.
-Um zu beurteilen wie ähnlich der Domain-Block $D_j$ mit der gefundenen Transformation $T$ dem Range-Block ist, berechnet man den quadratischen Abstand
+
+Um zu beurteilen wie ähnlich der Domain-Block $D_j$ mit der gefundenen Transformation $T$ dem Range-Block ist, berechnet man den quadratischen Fehler
\begin{align*}
e = d(f_{R_i}, \bar{f_{R_i}}).
\end{align*}
-Dieser Abstand sollte so klein wie möglich sein.
+$e$ sollte so klein wie möglich sein.
+
+\textbf{Schritt 3: }
+Somit haben wir die zwei Schritte um eine Transformation $T_i$ zu finden.
+Wir führen den zweiten Schritt für jede der acht möglichen affinen Abbildungen vom ersten Schritt aus, und bestimmen den jeweilig resultierenden Fehler $e$.
+Es resultieren acht $T_j$ mit ihren jeweiligen Fehlern.
-Wir bestimmen die Parameter $s$ und $g$ für jede der acht möglichen affinen Abbildungen und das mit jedem Domain-Block.
-Die Kombination von $D_j$ und $T_i$, welche den kleinsten Abstand $e$ hat, ist die beste.
+Um den besten Domain-Block zu finden, führen wir die drei Schritte für jeden Domain-Block aus.
+Der Domain-Block $D_j$, welcher die Transformation $T_j$ mit dem kleinsten Fehler $e$ hat, ist der ähnlichste.
-Diese Schritte führen wir für jeden Range-Block $R_i$ aus.
-Am Ende des Algorithmus haben wir für jeden Range-Block den zugehörigen Domain-Block und Transformation gefunden.
+Wir suchen nun für jeden Range-Block $R_i$ den ähnlichsten Domain-Block.
+Am Ende des Algorithmus haben wir für jeden Range-Block den zugehörigen Domain-Block und die dazugehörige Transformation gefunden.
\begin{figure}
\centering
@@ -128,7 +137,7 @@ Am Ende des Algorithmus haben wir für jeden Range-Block den zugehörigen Domain
Mit den gefundenen Abbildungen lässt sich das Bild generieren.
Wir beginnen wie schon im letzten Kapitel mit einer beliebigen Startmenge.
In unserem Fall ist dieses ein Bild $f_0$ derselben Grösse.
-Nun ersetzen wir jedes $R_i$ mit der Transformierten des zugehörigen Domain-Blocks $T(G_j)$.
+Nun ersetzen wir jedes $R_i$ mit der Transformierten des zugehörigen Domain-Blocks $T(D_j)$.
Dies wird verkürzt als Operator $W$ geschrieben.
So erhalten wir ein neues Bild $f_1 = W(f_0)$.
Dieses Vorgehen führen wir iteriert aus bis wir von $f_n = W(f_{n-1})$ zu $f_{n-1}$ kaum mehr einen Unterschied feststellen. Die Iteration hat nun ihren Attraktor, das Bild, erreicht.
@@ -140,22 +149,21 @@ Teilt man ein Bild in die drei Farbkanäle auf, das heisst, es wird nur noch ein
Nun wendet man auf jeden dieser Farbkanalbilder den Algorithmus an, und fügt nach der Rekonstruktion die Kanäle wieder zusammen.
\subsubsection{Performance des Verfahren}
-Dieser Grundalgorithmus der fraktalen Bildkompression ist recht langsam und skaliert auch schlecht für grössere Bilder.
-Dies resultiert aus eigenen Experimenten.
+Experimentelle Beobachtungen haben gezeigt, dass dieser Grundalgorithmus der fraktalen Bildkompression recht langsam ist und auch schlecht für grössere Bilder skaliert.
Man kann die Laufzeit zwar verbessern indem man die Domain-Blöcke auch disjunkt macht, und für weniger detailreiche Bilder ein grösseres $b$ wählt, jedoch wird er auch so nicht so schnell wie zum Beispiel das JPEG-Verfahren.
Es wurden bessere Algorithmen der fraktalen Bildkompression entwickelt, doch auch diese können, vor allem in der Laufzeit, noch nicht mit herkömmlichen Komprimierungsverfahren mithalten.
\subsection{Beispiel}
-Wir Verwenden dafür den oben beschriebenen Algorithmus, welcher uns für jeden Range-Block die benötigten Parameter liefert.
+Wir verwenden dafür den oben beschriebenen Algorithmus, welcher uns für jeden Range-Block die benötigten Parameter liefert.
Mit diesen lässt sich das Bild im Anschluss wieder Rekonstruieren.
-Die Range-Blöcke wurden $4\times4$ gewählt und die Dommain dementsprechend $8\times8$.
+Die Range-Blöcke wurden $4\times4$ gewählt und die Domain dementsprechend $8\times8$.
Um etwas Zeit bei der Komprimierung zu ersparen, wurden nur disjunkte Domain-Blöcke gebraucht.
-Als erstes Beispiel wählen wir das 360x360px Bild von Rapperswil in Abbildung \ref{ifs:original}.
-Das Startbild ist ein mittelgraues 360x360px Bild, Abbildung \ref{ifs:bild0}.
-Es kann jedoch ein beliebiges Startbild
+Als erstes Beispiel wählen wir das 360$\times$360 Pixel Bild von Rapperswil in Abbildung \ref{ifs:original}.
+Das Startbild ist ein mittelgraues 360$\times$360 Pixel Bild, Abbildung \ref{ifs:bild0}.
+Es kann jedoch ein beliebiges Startbild sein.
Nun lassen wir das PIFS laufen.
Wie wir in Abbildung \ref{ifs:rappirecoa} sehen, ist schon nach der ersten Iteration das Bild schon erkennbar.
-Nach der fünften Iteration , Abbildung \ref{ifs:rappirecoc} gibt es fast keinen Unterschied mehr zur letzten Iteration, wir können die Rekonstruktion beenden.
+Nach der fünften Iteration, Abbildung \ref{ifs:rappirecoc} gibt es fast keinen Unterschied mehr zur letzten Iteration, wir können die Rekonstruktion beenden.
\begin{figure}
\centering
\includegraphics[width=0.4\textwidth]{papers/ifs/images/original}
diff --git a/buch/papers/mceliece/Makefile.inc b/buch/papers/mceliece/Makefile.inc
index ed1affa..53ecf7a 100644
--- a/buch/papers/mceliece/Makefile.inc
+++ b/buch/papers/mceliece/Makefile.inc
@@ -7,8 +7,8 @@ dependencies-mceliece = \
papers/mceliece/packages.tex \
papers/mceliece/main.tex \
papers/mceliece/references.bib \
- papers/mceliece/teil0.tex \
- papers/mceliece/teil1.tex \
- papers/mceliece/teil2.tex \
- papers/mceliece/teil3.tex
+ papers/mceliece/einleitung.tex \
+ papers/mceliece/aufbau.tex \
+ papers/mceliece/funktionsweise.tex \
+ papers/mceliece/fazit.tex
diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex
new file mode 100644
index 0000000..200cb7b
--- /dev/null
+++ b/buch/papers/mceliece/aufbau.tex
@@ -0,0 +1,161 @@
+%
+% einleitung.tex -- Beispiel-File für die Einleitung
+%
+% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
+%
+\section{Aufbau\label{mceliece:section:Aufbau}}
+\rhead{Aufbau}
+Das McEliece-Kryptosystem besteht aus folgenden Elementen:
+
+\subsection{Datenvektor $d_k$
+\label{mceliece:subsection:d_k}}
+In diesem Vektor der Länge $k$ sind die zu verschlüsselnden Daten enthalten.
+
+Beispiel:
+\[d_4=
+\begin{pmatrix}
+ 1\\
+ 1\\
+ 1\\
+ 0
+\end{pmatrix}
+\]
+
+\subsection{Binäre Zufallsmatrix $S_k$
+\label{mceliece:subsection:s_k}}
+$S_k$ ist eine Binäre Zufallsmatrix der Grösse $k \times k$.
+Auch muss diese Matrix in $\mathbb{F}_2$ invertierbar sein.
+Für kleine Matrizen kann durchaus jedes Matrizenelement zufällig generiert werden,
+wobei danach mithilfe des Gauss-Algorithmus deren Inverse bestimmt werden kann.
+Da eine solche Matrix möglicherweise singulär ist, muss in diesem Fall eine neue Zufallsmatrix erzeugt werden.
+Für grössere Matrizen existieren bessere Methoden, auf welche hier nicht weiter eingegangen wird \cite{mceliece:GenerationRandMatrix}.
+
+Beispiel:
+\[S_4=
+ \begin{pmatrix}
+ 0 & 0 & 1 & 1\\
+ 0 & 0 & 0 & 1\\
+ 0 & 1 & 0 & 1\\
+ 1 & 0 & 0 & 1
+ \end{pmatrix}
+\]
+
+\[
+ S_4^{-1}=
+ \begin{pmatrix}
+ 0 & 1 & 0 & 1\\
+ 0 & 1 & 1 & 0\\
+ 1 & 1 & 0 & 0\\
+ 0 & 1 & 0 & 0\\
+ \end{pmatrix}
+\]
+
+\subsection{Linear-Code-Generatormatrix $G_{n,k}$
+\label{mceliece:subsection:g_nk}}
+Das wichtigste Element des McEliece-Systems ist ein fehlerkorrigierender Code,
+der in der Lage ist, $t$ Fehler zu korrigieren.
+Im Zusammenhang mit McEliece werden dabei meist binäre Goppa-Codes \cite{mceliece:goppa} verwendet,
+es können prinzipiell auch andere Codes wie beispielsweise Reed-Solomon verwendet werden,
+jedoch besitzen einige (unter anderem auch Reed-Solomon) Codes Schwachstellen \cite{mceliece:lorenz}.
+Das Codieren mit diesem linearen Code kann mithilfe dessen Generatormatrix $G_{n,k}$ erfolgen.
+Da es sich um einen fehlerkorrigierenden Code handelt,
+wird das Codewort länger als das Datenwort,
+es wird also Redundanz hinzugefügt,
+um die Fehlerkorrektur möglich zu machen.
+
+Beispiel
+\[
+ G_{7,4}=
+ \begin{pmatrix}
+ 1 & 0 & 0 & 0\\
+ 1 & 1 & 0 & 0\\
+ 0 & 1 & 1 & 0\\
+ 1 & 0 & 1 & 1\\
+ 0 & 1 & 0 & 1\\
+ 0 & 0 & 1 & 0\\
+ 0 & 0 & 0 & 1
+ \end{pmatrix}
+\]
+
+\subsection{Permutations-Matrix $P_n$
+\label{mceliece:subsection:p_n}}
+Mit der zufällig generierten Permutationsmatrix $P_n$ wird die Reihenfolge der Bits geändert.
+Mit der Inversen $P_n^{-1}$ kann die Bitvertauschung rückgängig gemacht werden.
+
+Beispiel
+\[
+ P_7=
+ \begin{pmatrix}
+ 0 & 1 & 0 & 0 & 0 & 0 & 0\\
+ 0 & 0 & 0 & 0 & 0 & 0 & 1\\
+ 0 & 0 & 0 & 0 & 0 & 1 & 0\\
+ 0 & 0 & 1 & 0 & 0 & 0 & 0\\
+ 0 & 0 & 0 & 1 & 0 & 0 & 0\\
+ 1 & 0 & 0 & 0 & 0 & 0 & 0\\
+ 0 & 0 & 0 & 0 & 1 & 0 & 0
+ \end{pmatrix}
+\]
+,
+\[
+ P_7^{-1}=P_7^t=
+ \begin{pmatrix}
+ 0 & 0 & 0 & 0 & 0 & 1 & 0\\
+ 1 & 0 & 0 & 0 & 0 & 0 & 0\\
+ 0 & 0 & 0 & 1 & 0 & 0 & 0\\
+ 0 & 0 & 0 & 0 & 1 & 0 & 0\\
+ 0 & 0 & 0 & 0 & 0 & 0 & 1\\
+ 0 & 0 & 1 & 0 & 0 & 0 & 0\\
+ 0 & 1 & 0 & 0 & 0 & 0 & 0
+ \end{pmatrix}
+\]
+
+\subsection{Public-Key $K_{n,k}$
+\label{mceliece:subsection:k_nk}}
+Der öffentliche Schlüssel, welcher zum Verschlüsseln verwendet wird,
+berechnet sich aus den bereits bekannten Matrizen wiefolgt:
+\[
+ K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,.
+\]
+
+Beispiel
+\[
+ K_{7,4}=
+ \begin{pmatrix}
+ 0 & 0 & 1 & 0\\
+ 1 & 0 & 0 & 1\\
+ 0 & 0 & 1 & 1\\
+ 1 & 1 & 1 & 1\\
+ 0 & 1 & 0 & 1\\
+ 0 & 1 & 0 & 0\\
+ 1 & 0 & 0 & 0
+ \end{pmatrix}
+\]
+
+\subsection{Fehler-Vektor $e_n$
+\label{mceliece:subsection:e_n}}
+Dieser Vektor der Länge $n$ besteht aus $t$ Einsen, welche zufällig innerhalb des Vektors angeordnet sind,
+alle anderen Einträge sind Null.
+Dieser Fehlervektor besitzt also gleich viele Einer,
+wie die Anzahl Fehler, die der Linearcode der Generatormatrix $G_{n,k}$ zu korrigieren vermag.
+
+Beispiel
+\[
+ E_7=
+ \begin{pmatrix}
+ 0\\
+ 0\\
+ 1\\
+ 0\\
+ 0\\
+ 0\\
+ 0
+ \end{pmatrix}
+\]
+
+\subsection{Daten-Vektor $d_k$
+\label{mceliece:subsection:d_k}}
+In diesem Vektor der länge $k$ ist die Nachricht (oder einen Teil davon) enthalten.
+
+\subsection{Code-Vektor $c_n$
+\label{mceliece:subsection:c_n}}
+In diesem Vektor der länge $n$ ist die verschlüsselte Nachricht (oder einen Teil davon) enthalten. \ No newline at end of file
diff --git a/buch/papers/mceliece/einleitung.tex b/buch/papers/mceliece/einleitung.tex
new file mode 100644
index 0000000..cebb8ed
--- /dev/null
+++ b/buch/papers/mceliece/einleitung.tex
@@ -0,0 +1,16 @@
+%
+% teil1.tex -- Beispiel-File für das Paper
+%
+% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
+%
+\section{Einleitung
+\label{mceliece:section:einleitung}}
+\rhead{Einleitung}
+Beim McEliece-Kryptosystem handelt es sich um ein asymetrisches Verschlüsselungsverfahren, welches erlaubt,
+Daten verschlüsselt über ein Netzwerk zu übermitteln, ohne dass vorab ein gemeinsamer,
+geheimer Schlüssel unter den Teilnehmern ausgetauscht werden müsste.
+Eine andere, bereits erläuterte Variante einer asymetrischen Verschlüsselung ist das Diffie-Hellman-Verfahren \ref{buch:subsection:diffie-hellman}.
+Im Gegensatz zu Diffie-Hellman gilt das McEliece-System als Quantencomputerresistent
+und das Verschlüsseln/Entschlüsseln von Nachrichten wird hauptsächlich mit Matrizenoperationen durchgeführt.
+
+
diff --git a/buch/papers/mceliece/fazit.tex b/buch/papers/mceliece/fazit.tex
new file mode 100644
index 0000000..186708b
--- /dev/null
+++ b/buch/papers/mceliece/fazit.tex
@@ -0,0 +1,57 @@
+%
+% teil3.tex -- Beispiel-File für Teil 3
+%
+% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
+%
+\section{Fazit
+\label{mceliece:section:fazit}}
+\rhead{Fazit}
+Ein kurzer Vergleich des McEliece-Systems
+mit dem oft verwendeten RSA-System soll zeigen, wo dessen Vor- und Nachteile liegen.
+
+\subsection{Resourcen}
+Eine Eigenheit des McEliece-Systems ist das hinzufügen von Rauschen (mit Fehlervektor $e_n$).
+Damit diese mit dem Lienarcode-Decoder wieder entfernt werden können,
+wird Redundanz benötigt,
+weshalb dessen Kanalefizienz (Nutzbits/Übertragungsbits) sinkt.
+Die Schlüsselgrösse des McEliece-Systems ist deshalb so riesig, weil es sich um eine zweidimensionale Matrix handelt, währenddem RSA mit nur zwei Skalaren auskommt.
+Das McEliece-System benötigt dafür weniger Rechenaufwand beim Verschlüsseln/Entschlüsseln, da die meisten Operationen mit Matrixmultiplikationen ausgeführt werden können (Aufwand ist in binären Operationen pro Informationsbit)\cite{mceliece:CodeBasedCrypto}.
+Beim Rechenaufwand sei noch erwähnt,
+dass asymetrische Verschlüsselungen meist nur dazu verwendet werden,
+um einen Schlüssel für eine symetrische Verschlüsselung auszutauschen.
+\begin{center}
+\begin{tabular}{c|c|c}
+ &McEliece (n=2048, k=1718, t = 30) &RSA (2048, e = 216 + 1)\\
+ \hline
+ Schlüssegrösse: (Public) &429.5 KByte &0.5 KByte \\
+ Kanaleffizienz: &83.9 \% &100 \% \\
+ Verschlüsselungsaufwand: &1025 &40555 \\
+ Entschlüsselungsaufwand: &2311 &6557176, 5
+\end{tabular}
+\end{center}
+
+\subsection{Sicherheit}
+Grosse unterschiede zwischen den beiden Kryptosystemen gibt es jedoch bei der Sicherheit.
+Der Kern der RSA-Verschlüsselung beruht auf dem Problem, eine grosse Zahl in ihre beiden Primfaktoren zu zerlegen.
+Bei genügend grossen Zahlen ist diese Zerlegung auch mit den heute besten verfügbaren Computern kaum innerhalb vernünftiger Zeit zu lösen.
+Weiter ist aber bekannt,
+dass mithilfe des sogenannten Shor-Algorithmus \cite{mceliece:shor} und einem Quantencomputer auch diese Zerlegung zügig realisiert werden könnte,
+was zur Folge hätte, dass die Verschlüsselung von RSA unwirksam würde.
+Zurzeit sind die Quantencomputer jedoch noch bei weitem nicht in der Lage, grosse Zahlen mithilfe dieses Algorithmuses zu zerlegen.
+Das McEliece-System hingegen beruht auf dem Problem des ``Syndrome decoding'' (Korrektur von Bitfehlern eines Codewortes, das mit einem entsprechenden Linearcode codiert wurde).
+Für das ``Syndrome decoding'' sind bis heute keine Methoden bekannt,
+welche nennenswerte Vorteile gegenüber dem Durchprobieren (brute-force) bringen,
+auch nicht mithilfe eines Quantencomputers.
+\begin{center}
+\begin{tabular}{c|c|c}
+ &McEliece &RSA \\
+\hline
+ Grundlage Verschlüsselung &Syndrome decoding &Integer factoring\\
+ Aufwand (gewöhnliche CPU) &exponential &< exponential \\
+ Aufwand (Quantencomputer) &> polynomial &$\mathcal{O}(\log(N)^3)$
+\end{tabular}
+\end{center}
+Die Verbreitung des McEliece-Kryptosystems ist zurzeit äusserst gering.
+Das liegt einerseits an der immensen Grösse des öffentlichen Schlüssels,
+andererseits wird aber auch in naher Zukunft nicht mit einem genügend starken Quantencomputer gerechnet,
+welcher andere asymetrische Verschlüsselungen gefährden würde.
diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex
new file mode 100644
index 0000000..7c69b13
--- /dev/null
+++ b/buch/papers/mceliece/funktionsweise.tex
@@ -0,0 +1,83 @@
+%
+% teil2.tex -- Beispiel-File für teil2
+%
+% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
+%
+\section{Funktionsweise
+\label{mceliece:section:funktionsweise}}
+\rhead{Funktionsweise}
+Um den Ablauf des Datenaustausches mittels McEliece-Verschlüsselung zu erläutern,
+wird ein Szenario verwendet,
+bei dem Bob an Alice eine verschlüsselte Nachticht über ein öffentliches Netzwerk zukommen lässt.
+
+\subsection{Vorbereitung
+\label{mceliece:section:vorbereitung}}
+Damit der Nachrichtenaustausch stattfinden kann, muss Alice (Empfängerin)
+zuerst ein Schlüsselpaar definieren.
+Dazu erstellt sie die einzelnen Matrizen $S_k$, $G_{n,k}$ und $P_n$.
+Diese drei einzelnen Matrizen bilden den privaten Schlüssel von Alice
+und sollen geheim bleiben.
+Der öffentliche Schlüssel $K_{n,k}$ hingegen berechnet sich
+aus der Multiplikation der privaten Matrizen (Abschnitt \ref{mceliece:subsection:k_nk})
+und wird anschliessend Bob zugestellt.
+
+\subsection{Verschlüsselung
+\label{mceliece:section:verschl}}
+Bob berechnet nun die verschlüsselte Nachricht $c_n$, indem er seine Daten $d_k$
+mit dem öffentlichen Schlüssel $K_{n,k}$ von Alice multipliziert
+und anschliessend durch eine Addition mit einem Fehlervektor $e_n$ einige Bitfehler hinzufügt.
+\[
+ c_n\,=\,K_{n,k}\cdot d_k + e_n\,.
+\]
+Dabei wird für jede Nachricht (oder für jedes Nachrichtenfragment)
+einen neuen, zufälligen Fehlervektor generiert.
+Die verschlüsselte Nachricht $c_n$ wird anschliessend Alice zugestellt.
+
+\subsection{Entschlüsselung
+\label{mceliece:section:entschl}}
+Alice entschlüsselt die erhaltene Nachricht in mehreren einzelnen Schritten.
+Um etwas Transparenz in diese Prozedur zu bringen, wird der öffentliche Schlüssel $K_{n,k}$ mit seinen Ursprungsmatrizen dargestellt.
+\begin{align*}
+ c_n\,&=\,K_{n,k}\cdot d_k + e_n \\
+ &= P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + e_n
+\end{align*}
+Zuerst wird der Effekt der Permutationsmatrix rückgängig gemacht,
+indem das Codewort mit dessen Inversen $P_n^{-1}$ multipliziert wird.
+\begin{align*}
+ c_{n}''\,=\,P_n^{-1}\cdot c_n\,&= P_n^{-1}\cdot P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\
+ &= G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\
+\end{align*}
+Eine weitere Vereinfachung ist nun möglich,
+weil $P_n^{-1}$ einerseits auch eine gewöhnliche Permutationsmatrix ist
+und andererseits ein zufälliger Fehlervektor $e_n$ multipliziert mit einer Permutationsmatrix
+wiederum einen gleichwertigen, zufälligen Fehlervektor $e_n'$ ergibt.
+\begin{align*}
+ c_{n}''\,&=\,G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\
+ &=\,G_{n,k}\cdot S_{k}\cdot d_k + e'_n\quad \quad \quad | \,
+ e'_n\,=\,P_n^{-1}\cdot e_n
+\end{align*}
+Dank des fehlerkorrigierenden Codes, der durch die implizite Multiplikation mittels $G_{n,k}$ auf die Daten angewendet wurde,
+können nun die Bitfehler, verursacht durch den Fehlervektor $e'_n$,
+entfernt werden.
+Da es sich bei diesem Schritt nicht um eine einfache Matrixmultiplikation handelt,
+wird die Operation durch eine Funktion dargestellt.
+Wie dieser Decoder genau aufgebaut ist,
+hängt vom verwendeten Linearcode ab.
+\begin{align*}
+ c_{k}'\,&=\text{Linear-Code-Decoder($c''_n$)}\\
+ &=\text{Linear-Code-Decoder($G_{n,k}\cdot S_{k}\cdot d_k + e'_n$)}\\
+ &=S_{k}\cdot d_k
+\end{align*}
+Zum Schluss wird das inzwischen fast entschlüsselte Codewort $c'_k$ mit der inversen der zufälligen Binärmatrix $S^{-1}$ multipliziert,
+womit der Inhalt der ursprünglichen Nachricht nun wiederhergestellt wurde.
+\begin{align*}
+ c_{k}'\,&=S_{k}\cdot d_k \quad | \cdot S_k^{-1}\\
+ d'_{k}\,=\,S_{k}^{-1} \cdot c'_k&=S_{k}^{-1} \cdot S_{k}\cdot d_k\\
+ &=d_k
+\end{align*}
+
+\subsection{Beispiel}
+
+TODO:
+-alle Beispielmatrizen- und Vektoren hierhin zügeln, numerisches Beispiel kreieren\\
+-erläutern des 7/4-codes (ja/nein)? \ No newline at end of file
diff --git a/buch/papers/mceliece/main.tex b/buch/papers/mceliece/main.tex
index dbbaaac..352a6be 100644
--- a/buch/papers/mceliece/main.tex
+++ b/buch/papers/mceliece/main.tex
@@ -8,29 +8,10 @@
\begin{refsection}
\chapterauthor{Reto Fritsche}
-Ein paar Hinweise für die korrekte Formatierung des Textes
-\begin{itemize}
-\item
-Absätze werden gebildet, indem man eine Leerzeile einfügt.
-Die Verwendung von \verb+\\+ ist nur in Tabellen und Arrays gestattet.
-\item
-Die explizite Platzierung von Bildern ist nicht erlaubt, entsprechende
-Optionen werden gelöscht.
-Verwenden Sie Labels und Verweise, um auf Bilder hinzuweisen.
-\item
-Beginnen Sie jeden Satz auf einer neuen Zeile.
-Damit ermöglichen Sie dem Versionsverwaltungssysteme, Änderungen
-in verschiedenen Sätzen von verschiedenen Autoren ohne Konflikt
-anzuwenden.
-\item
-Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren
-Übersicht wegen, aber auch um GIT die Arbeit zu erleichtern.
-\end{itemize}
-
-\input{papers/mceliece/teil0.tex}
-\input{papers/mceliece/teil1.tex}
-\input{papers/mceliece/teil2.tex}
-\input{papers/mceliece/teil3.tex}
+\input{papers/mceliece/einleitung.tex}
+\input{papers/mceliece/aufbau.tex}
+\input{papers/mceliece/funktionsweise.tex}
+\input{papers/mceliece/fazit.tex}
\printbibliography[heading=subbibliography]
\end{refsection}
diff --git a/buch/papers/mceliece/references.bib b/buch/papers/mceliece/references.bib
index 47798d3..0388ff4 100644
--- a/buch/papers/mceliece/references.bib
+++ b/buch/papers/mceliece/references.bib
@@ -4,32 +4,45 @@
% (c) 2020 Autor, Hochschule Rapperswil
%
-@online{mceliece:bibtex,
- title = {BibTeX},
- url = {https://de.wikipedia.org/wiki/BibTeX},
- date = {2020-02-06},
- year = {2020},
- month = {2},
- day = {6}
+@online{mceliece:GenerationRandMatrix,
+ title = {Efficient Generation of Random Nonsingular Matrices},
+ url = {https://www.researchgate.net/publication/2729950_Efficient_Generation_of_Random_Nonsingular_Matrices},
+ date = {Januar 1993},
+ year = {2021},
+ month = {7},
+ day = {29}
}
-@book{mceliece:numerical-analysis,
- title = {Numerical Analysis},
- author = {David Kincaid and Ward Cheney},
- publisher = {American Mathematical Society},
- year = {2002},
- isbn = {978-8-8218-4788-6},
- inseries = {Pure and applied undegraduate texts},
- volume = {2}
+@online{mceliece:lorenz,
+ title = {Cryptography based on error correcting codes},
+ url = {https://algo.epfl.ch/_media/en/projects/lorenz_thesis.pdf},
+ date = {2007-07-27},
+ year = {2021},
+ month = {7},
+ day = {29}
}
-@article{mceliece:mendezmueller,
- author = { Tabea Méndez and Andreas Müller },
- title = { Noncommutative harmonic analysis and image registration },
- journal = { Appl. Comput. Harmon. Anal.},
- year = 2019,
- volume = 47,
- pages = {607--627},
- url = {https://doi.org/10.1016/j.acha.2017.11.004}
+@online{mceliece:shor,
+ title = {Shor's algorithm},
+ url = {https://en.wikipedia.org/wiki/Shor%27s_algorithm},
+ year = {2021},
+ month = {8},
+ day = {9}
}
+@online{mceliece:CodeBasedCrypto,
+ title = {Code based cryptography and steganography},
+ url = {https://www.researchgate.net/publication/268009418_Code_Based_Cryptography_and_Steganography},
+ date = {2013-05-30},
+ year = {2021},
+ month = {8},
+ day = {9}
+}
+
+@online{mceliece:goppa,
+ title = {Binary Goppa code},
+ url = {https://en.m.wikipedia.org/wiki/Binary_Goppa_code},
+ year = {2021},
+ month = {8},
+ day = {10}
+} \ No newline at end of file
diff --git a/buch/papers/mceliece/teil0.tex b/buch/papers/mceliece/teil0.tex
deleted file mode 100644
index b98f8be..0000000
--- a/buch/papers/mceliece/teil0.tex
+++ /dev/null
@@ -1,22 +0,0 @@
-%
-% einleitung.tex -- Beispiel-File für die Einleitung
-%
-% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
-%
-\section{Teil 0\label{mceliece:section:teil0}}
-\rhead{Teil 0}
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
-erat, sed diam voluptua \cite{mceliece:bibtex}.
-At vero eos et accusam et justo duo dolores et ea rebum.
-Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
-dolor sit amet.
-
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
-erat, sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita
-kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
-amet.
-
-
diff --git a/buch/papers/mceliece/teil1.tex b/buch/papers/mceliece/teil1.tex
deleted file mode 100644
index 06035a6..0000000
--- a/buch/papers/mceliece/teil1.tex
+++ /dev/null
@@ -1,55 +0,0 @@
-%
-% teil1.tex -- Beispiel-File für das Paper
-%
-% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
-%
-\section{Teil 1
-\label{mceliece:section:teil1}}
-\rhead{Problemstellung}
-Sed ut perspiciatis unde omnis iste natus error sit voluptatem
-accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
-quae ab illo inventore veritatis et quasi architecto beatae vitae
-dicta sunt explicabo.
-Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit
-aut fugit, sed quia consequuntur magni dolores eos qui ratione
-voluptatem sequi nesciunt
-\begin{equation}
-\int_a^b x^2\, dx
-=
-\left[ \frac13 x^3 \right]_a^b
-=
-\frac{b^3-a^3}3.
-\label{mceliece:equation1}
-\end{equation}
-Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet,
-consectetur, adipisci velit, sed quia non numquam eius modi tempora
-incidunt ut labore et dolore magnam aliquam quaerat voluptatem.
-
-Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
-suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur?
-Quis autem vel eum iure reprehenderit qui in ea voluptate velit
-esse quam nihil molestiae consequatur, vel illum qui dolorem eum
-fugiat quo voluptas nulla pariatur?
-
-\subsection{De finibus bonorum et malorum
-\label{mceliece:subsection:finibus}}
-At vero eos et accusamus et iusto odio dignissimos ducimus qui
-blanditiis praesentium voluptatum deleniti atque corrupti quos
-dolores et quas molestias excepturi sint occaecati cupiditate non
-provident, similique sunt in culpa qui officia deserunt mollitia
-animi, id est laborum et dolorum fuga \eqref{000tempmlate:equation1}.
-
-Et harum quidem rerum facilis est et expedita distinctio
-\ref{mceliece:section:loesung}.
-Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil
-impedit quo minus id quod maxime placeat facere possimus, omnis
-voluptas assumenda est, omnis dolor repellendus
-\ref{mceliece:section:folgerung}.
-Temporibus autem quibusdam et aut officiis debitis aut rerum
-necessitatibus saepe eveniet ut et voluptates repudiandae sint et
-molestiae non recusandae.
-Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis
-voluptatibus maiores alias consequatur aut perferendis doloribus
-asperiores repellat.
-
-
diff --git a/buch/papers/mceliece/teil2.tex b/buch/papers/mceliece/teil2.tex
deleted file mode 100644
index fd247c7..0000000
--- a/buch/papers/mceliece/teil2.tex
+++ /dev/null
@@ -1,40 +0,0 @@
-%
-% teil2.tex -- Beispiel-File für teil2
-%
-% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
-%
-\section{Teil 2
-\label{mceliece:section:teil2}}
-\rhead{Teil 2}
-Sed ut perspiciatis unde omnis iste natus error sit voluptatem
-accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
-quae ab illo inventore veritatis et quasi architecto beatae vitae
-dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
-aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
-eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
-est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
-velit, sed quia non numquam eius modi tempora incidunt ut labore
-et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
-veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
-nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
-reprehenderit qui in ea voluptate velit esse quam nihil molestiae
-consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
-pariatur?
-
-\subsection{De finibus bonorum et malorum
-\label{mceliece:subsection:bonorum}}
-At vero eos et accusamus et iusto odio dignissimos ducimus qui
-blanditiis praesentium voluptatum deleniti atque corrupti quos
-dolores et quas molestias excepturi sint occaecati cupiditate non
-provident, similique sunt in culpa qui officia deserunt mollitia
-animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
-est et expedita distinctio. Nam libero tempore, cum soluta nobis
-est eligendi optio cumque nihil impedit quo minus id quod maxime
-placeat facere possimus, omnis voluptas assumenda est, omnis dolor
-repellendus. Temporibus autem quibusdam et aut officiis debitis aut
-rerum necessitatibus saepe eveniet ut et voluptates repudiandae
-sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
-sapiente delectus, ut aut reiciendis voluptatibus maiores alias
-consequatur aut perferendis doloribus asperiores repellat.
-
-
diff --git a/buch/papers/mceliece/teil3.tex b/buch/papers/mceliece/teil3.tex
deleted file mode 100644
index 421b331..0000000
--- a/buch/papers/mceliece/teil3.tex
+++ /dev/null
@@ -1,40 +0,0 @@
-%
-% teil3.tex -- Beispiel-File für Teil 3
-%
-% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
-%
-\section{Teil 3
-\label{mceliece:section:teil3}}
-\rhead{Teil 3}
-Sed ut perspiciatis unde omnis iste natus error sit voluptatem
-accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
-quae ab illo inventore veritatis et quasi architecto beatae vitae
-dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
-aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
-eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
-est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
-velit, sed quia non numquam eius modi tempora incidunt ut labore
-et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
-veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
-nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
-reprehenderit qui in ea voluptate velit esse quam nihil molestiae
-consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
-pariatur?
-
-\subsection{De finibus bonorum et malorum
-\label{mceliece:subsection:malorum}}
-At vero eos et accusamus et iusto odio dignissimos ducimus qui
-blanditiis praesentium voluptatum deleniti atque corrupti quos
-dolores et quas molestias excepturi sint occaecati cupiditate non
-provident, similique sunt in culpa qui officia deserunt mollitia
-animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
-est et expedita distinctio. Nam libero tempore, cum soluta nobis
-est eligendi optio cumque nihil impedit quo minus id quod maxime
-placeat facere possimus, omnis voluptas assumenda est, omnis dolor
-repellendus. Temporibus autem quibusdam et aut officiis debitis aut
-rerum necessitatibus saepe eveniet ut et voluptates repudiandae
-sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
-sapiente delectus, ut aut reiciendis voluptatibus maiores alias
-consequatur aut perferendis doloribus asperiores repellat.
-
-
diff --git a/buch/papers/multiplikation/code/MM b/buch/papers/multiplikation/code/MM
deleted file mode 100755
index f07985f..0000000
--- a/buch/papers/multiplikation/code/MM
+++ /dev/null
Binary files differ
diff --git a/buch/papers/multiplikation/code/MM.c b/buch/papers/multiplikation/code/MM.c
index 04c4dab..2588262 100755
--- a/buch/papers/multiplikation/code/MM.c
+++ b/buch/papers/multiplikation/code/MM.c
@@ -28,11 +28,12 @@ int main() {
// omp_set_num_threads(4);
// run_algo(openMP_MM, "openMP_MM",0);
run_algo(MM_dc, "MM_dc",0);
+
run_algo(strassen, "strassen",0);
run_algo(MM, "MM", 0);
- // run_algo(winograd, "winograd", 0);
- run_algo_cblas(0);
+ run_algo(winograd, "winograd", 0);
+ run_algo_cblas(0);
return 0;
}
@@ -414,12 +415,12 @@ void run_algo(void (*algo)(), char alog_name[], int print)
for(int i=0; i<n_arrays; ++i)
{
- for(int j = 0; j<1; ++j)
+ for(int j = 0; j<10; ++j)
{
- int *C = (int*) malloc(n[i] * n[i] * sizeof(int));
- double dtime = omp_get_wtime();
- algo(Ap[i], Bp[i], (int*) C, n[i]);
- dtime = omp_get_wtime() - dtime;
+ int *C = (int*) malloc(n[i] * n[i] * sizeof(int));
+ double dtime = omp_get_wtime();
+ algo(Ap[i], Bp[i], (int*) C, n[i]);
+ dtime = omp_get_wtime() - dtime;
// printf("The %s program took %f seconds to execute \n", alog_name, dtime);
fprintf(fptr, "%f,%d\n", dtime, n[i]);
@@ -428,7 +429,7 @@ void run_algo(void (*algo)(), char alog_name[], int print)
printMatrix((int*)C, n[i]);
}
free(C);
- }
+ }
}
fclose(fptr);
@@ -442,7 +443,7 @@ void run_algo_cblas(int print)
fptr = fopen("meas/blas.txt", "w");
for(int i=0; i<n_arrays; ++i)
{
- for(int j = 0; j<1; ++j)
+ for(int j = 0; j<10; ++j)
{
double *dC = (double*) malloc(n[i] * n[i] * sizeof(double));
double dtime = omp_get_wtime();
diff --git a/buch/papers/multiplikation/code/MM.py b/buch/papers/multiplikation/code/MM.py
index 626b82d..8057850 100644
--- a/buch/papers/multiplikation/code/MM.py
+++ b/buch/papers/multiplikation/code/MM.py
@@ -5,6 +5,7 @@ Created on Fri Mar 19 07:31:29 2021
@author: nunigan
"""
+import scipy.stats
import numpy as np
import time
import matplotlib.pyplot as plt
@@ -132,6 +133,7 @@ def winograd2(A, B):
return C
def test_perfomance(n):
+
t_mm = []
t_mm_dc = []
t_mm_strassen = []
@@ -174,17 +176,18 @@ def test_perfomance(n):
plt.plot(n, t_mm_strassen, label='Strassen', lw=5)
plt.plot(n, t_wino, label='Winograd', lw=5)
plt.plot(n, t_np, label='NumPy A@B', lw=5)
+ # plt.xscale('log', base=2)
plt.legend()
plt.xlabel("n")
plt.ylabel("time (s)")
- plt.grid(True)
+ plt.grid(True, which="both", ls="-")
plt.tight_layout()
# plt.yscale('log')
plt.legend(fontsize=19)
plt.savefig('meas_' + str(max(n))+ '.pdf')
arr = np.array([n, t_mm, t_mm_dc, t_mm_strassen, t_wino, t_np])
np.savetxt('meas_' + str(max(n))+ '.txt',arr)
- return arr
+ return t_np
def plot(num):
@@ -198,10 +201,11 @@ def plot(num):
plt.plot(n, t_mm, label='3 For Loops', lw=5)
plt.plot(n, t_mm_dc, label='Divide and Conquer', lw=5)
plt.plot(n, t_mm_strassen, label='Strassen', lw=5)
- # plt.plot(n, t_wino, label='Winograd', lw=5)
+ plt.plot(n, t_wino, label='Winograd', lw=5)
plt.plot(n, t_np, label='NumPy A@B', lw=5)
plt.legend()
plt.xlabel("n")
+ # plt.yscale('log', base=10)
plt.ylabel("time (s)")
plt.grid(True)
plt.tight_layout()
@@ -211,36 +215,39 @@ def plot(num):
return arr
def plot_c_res(ave, num):
+
MM = np.loadtxt("meas/MM.txt", delimiter=',')
- # winograd = np.loadtxt("meas/winograd.txt", delimiter=',')
+ winograd = np.loadtxt("meas/winograd.txt", delimiter=',')
blas = np.loadtxt("meas/blas.txt", delimiter=',')
MM_dc = np.loadtxt("meas/MM_dc.txt", delimiter=',')
strassen = np.loadtxt("meas/strassen.txt", delimiter=',')
MM_t = MM[:,0]
MM_n = MM[:,1]
- MM_t = np.mean(MM_t.reshape(-1,ave),axis=1)
- MM_n = np.mean(MM_n.reshape(-1,ave),axis=1)
+ # MM_t = np.mean(MM_t.reshape(-1,ave),axis=1)
+ # MM_n = np.mean(MM_n.reshape(-1,ave),axis=1)
MM_dc_t = MM_dc[:,0]
MM_dc_n = MM_dc[:,1]
- MM_dc_t = np.mean(MM_dc_t.reshape(-1,ave),axis=1)
- MM_dc_n = np.mean(MM_dc_n.reshape(-1,ave),axis=1)
+ # MM_dc_t = np.mean(MM_dc_t.reshape(-1,ave),axis=1)
+ # MM_dc_n = np.mean(MM_dc_n.reshape(-1,ave),axis=1)
strassen_t = strassen[:,0]
strassen_n = strassen[:,1]
- strassen_t = np.mean(strassen_t.reshape(-1,ave),axis=1)
- strassen_n = np.mean(strassen_n.reshape(-1,ave),axis=1)
+ # strassen_t = np.mean(strassen_t.reshape(-1,ave),axis=1)
+ # strassen_n = np.mean(strassen_n.reshape(-1,ave),axis=1)
- # winograd_t = winograd[:,0]
- # winograd_n = winograd[:,1]
+ winograd_t = winograd[:,0]
+ winograd_n = winograd[:,1]
# winograd_t = np.mean(winograd_t.reshape(-1,ave),axis=1)
# winograd_n = np.mean(winograd_n.reshape(-1,ave),axis=1)
blas_t = blas[:,0]
blas_n = blas[:,1]
- blas_t = np.mean(blas_t.reshape(-1,ave),axis=1)
- blas_n = np.mean(blas_n.reshape(-1,ave),axis=1)
+ # blas_t = np.mean(blas_t.reshape(-1,ave),axis=1)
+ # blas_n = np.mean(blas_n.reshape(-1,ave),axis=1)
+
+
def func(x, a,b):
return b*x**a
@@ -254,14 +261,16 @@ def plot_c_res(ave, num):
plt.rc('axes', labelsize=23)
plt.rc('xtick', labelsize=23)
plt.rc('ytick', labelsize=23)
- plt.plot(MM_n, MM_t, label='3 For Loops', lw=5)
- # plt.plot(winograd_n, winograd_t, label='Winograd MM', lw=5)
- plt.plot(blas_n, blas_t, label='Blas', lw=5)
- plt.plot(strassen_n, strassen_t, label='Strassen', lw=5)
- plt.plot(MM_dc_n, MM_dc_t, label='Divide and Conquer', lw=5)
+ plt.loglog(MM_n, MM_t, '.', label='3 For Loops', lw=5)
+ plt.loglog(winograd_n, winograd_t, '.', label='Winograd MM', lw=5)
+ plt.loglog(blas_n, blas_t, '.', label='Blas', lw=5)
+ plt.loglog(strassen_n, strassen_t, '.', label='Strassen', lw=5)
+ plt.loglog(MM_dc_n, MM_dc_t, '.', label='Divide and Conquer', lw=5)
plt.xlabel("n")
+ # plt.yscale('log', base=10)
+ # plt.xscale('log', base=2)
plt.ylabel("time (s)")
- plt.grid(True)
+ plt.grid(True, which="both", ls="-")
plt.tight_layout()
plt.legend(fontsize=19)
plt.savefig('c_meas_' + str(num)+ '.pdf')
@@ -271,23 +280,42 @@ def plot_c_res(ave, num):
# plt.plot(blas_n, func(blas_n, *popt2), 'r-', label='fit MM: a=%5.5f, b=%5.10f' % tuple(popt2))
plt.legend()
+ # return [MM_n,winograd_n,blas_n,strassen_n,MM_dc_n]
+
+ return [MM_t,winograd_t,blas_t,strassen_t,MM_dc_t]
+
+
+def mean_confidence_interval(data, confidence=0.95):
+ a = 1.0 * np.array(data)
+ n = len(a)
+ m, se = np.mean(a), scipy.stats.sem(a)
+ h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)
+ return m, h
# test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if __name__ == '__main__':
- plot_c_res(1, 4096)
-
-
- # plot(8)
- # n = np.logspace(1,10,10,base=2,dtype=(np.int))
+ # A = plot_c_res(10, 4096)
+ # name = ['MM', 'Wino', 'blas', 'strassen', 'dc']
+ # for i in range(5):
+ # ci_inner = []
+ # print(name[i])
+ # for j in range(11):
+ # m,h=mean_confidence_interval(A[i][j*10:(j+1)*10])
+ # print("({},{})".format(2**(j+1),m))
+ # np.savetxt('meas/ci/' + name[i]+'.txt',ci_inner)
+
+ arr = plot(4096)
+ # n = np.logspace(1,12,12,base=2,dtype=(np.int))
+ # n=[2048,4096]
# n = np.arange(1,50,2)
- A = np.random.randint(-10, 10, (5,3))
- B = np.random.randint(-10, 10, (3,5))
+ # A = np.random.randint(-10, 6, (5,3))
+ # B = np.random.randint(-10, 6, (3,5))
- C = winograd2(A, B)
- C_test = A@B
- print(C)
- print(C_test)
+ # C = winograd2(A, B)
+ # C_test = A@B
+ # print(C)
+ # print(C_test)
# print(np.equal(C, C_test))
# t_np = test_perfomance(n)
diff --git a/buch/papers/multiplikation/code/c_matrix.h b/buch/papers/multiplikation/code/c_matrix.h
index 13df55d..63d5390 100644
--- a/buch/papers/multiplikation/code/c_matrix.h
+++ b/buch/papers/multiplikation/code/c_matrix.h
@@ -1,101 +1,177 @@
-/* Seminar Matrizen, autogenerated File, Michael Schmid, 30/05/2021, 22:00:57 */
+/* Seminar Matrizen, autogenerated File, Michael Schmid, 10/08/2021, 05:46:32 */
#include <stdint.h>
const int A0[][2] =
{
- {-15,68},
- {49,86}
+ {60,-84},
+ {-66,-1}
};
const int B0[][2] =
{
- {33,73},
- {38,-76}
+ {-45,87},
+ {-38,-73}
};
const double dB0[][2] =
{
- {33,73},
- {38,-76}
+ {-45,87},
+ {-38,-73}
};
const double dA0[][2] =
{
- {-15,68},
- {49,86}
+ {60,-84},
+ {-66,-1}
};
const int A1[][4] =
{
- {75,-38,-32,-65},
- {37,74,-31,29},
- {15,-62,-20,-20},
- {-31,-35,-89,47}
+ {-72,-19,-91,62},
+ {-36,-74,-44,-47},
+ {-39,-31,50,-93},
+ {-81,2,-17,-86}
};
const int B1[][4] =
{
- {71,90,78,-98},
- {4,63,12,-47},
- {11,-44,75,-69},
- {95,-15,64,23}
+ {-66,39,-23,52},
+ {-88,-13,13,-13},
+ {-45,-70,28,-20},
+ {96,5,88,96}
};
const double dB1[][4] =
{
- {71,90,78,-98},
- {4,63,12,-47},
- {11,-44,75,-69},
- {95,-15,64,23}
+ {-66,39,-23,52},
+ {-88,-13,13,-13},
+ {-45,-70,28,-20},
+ {96,5,88,96}
};
const double dA1[][4] =
{
- {75,-38,-32,-65},
- {37,74,-31,29},
- {15,-62,-20,-20},
- {-31,-35,-89,47}
+ {-72,-19,-91,62},
+ {-36,-74,-44,-47},
+ {-39,-31,50,-93},
+ {-81,2,-17,-86}
};
const int A2[][8] =
{
- {80,42,3,-16,6,55,87,16},
- {-99,-14,21,-1,-94,-56,91,10},
- {-47,-55,-59,62,12,-53,87,-65},
- {-60,94,-67,23,-62,33,-63,-72},
- {12,-75,16,21,22,-37,1,16},
- {-100,-99,82,-66,2,64,-13,44},
- {59,-100,-90,8,36,-24,18,88},
- {73,-58,75,-100,-19,-29,85,-19}
+ {-36,-2,-58,-32,34,-89,49,-55},
+ {-68,-73,52,-3,-51,-37,-31,70},
+ {73,-90,-21,-79,-15,96,-99,12},
+ {68,-25,38,-73,-60,35,-99,72},
+ {-43,-87,48,-84,-100,37,80,53},
+ {-27,88,-5,-82,-57,-27,20,10},
+ {-91,-47,54,-90,-99,-76,50,-18},
+ {69,-36,76,5,-67,-38,-95,91}
};
const int B2[][8] =
{
- {-61,88,69,49,-53,47,73,45},
- {16,14,-88,-11,-67,-73,-20,43},
- {-60,-63,26,32,-29,18,-44,-69},
- {1,21,21,38,7,-100,-61,-76},
- {-90,95,-99,88,49,-80,27,-36},
- {24,-12,-47,-7,29,15,52,37},
- {-98,-76,29,76,-41,-75,97,79},
- {62,-90,-35,-14,-30,-42,-95,52}
+ {-84,22,-13,-66,-42,51,66,0},
+ {37,-65,66,-85,-10,-23,77,5},
+ {1,41,-79,0,63,-37,-10,29},
+ {72,66,-99,92,-28,65,25,-40},
+ {69,-49,65,-18,64,-97,-47,30},
+ {36,86,66,-12,-17,89,1,-37},
+ {-100,11,27,23,-75,-23,96,-9},
+ {68,90,-87,-99,-70,-28,98,-76}
};
const double dB2[][8] =
{
- {-61,88,69,49,-53,47,73,45},
- {16,14,-88,-11,-67,-73,-20,43},
- {-60,-63,26,32,-29,18,-44,-69},
- {1,21,21,38,7,-100,-61,-76},
- {-90,95,-99,88,49,-80,27,-36},
- {24,-12,-47,-7,29,15,52,37},
- {-98,-76,29,76,-41,-75,97,79},
- {62,-90,-35,-14,-30,-42,-95,52}
+ {-84,22,-13,-66,-42,51,66,0},
+ {37,-65,66,-85,-10,-23,77,5},
+ {1,41,-79,0,63,-37,-10,29},
+ {72,66,-99,92,-28,65,25,-40},
+ {69,-49,65,-18,64,-97,-47,30},
+ {36,86,66,-12,-17,89,1,-37},
+ {-100,11,27,23,-75,-23,96,-9},
+ {68,90,-87,-99,-70,-28,98,-76}
};
const double dA2[][8] =
{
- {80,42,3,-16,6,55,87,16},
- {-99,-14,21,-1,-94,-56,91,10},
- {-47,-55,-59,62,12,-53,87,-65},
- {-60,94,-67,23,-62,33,-63,-72},
- {12,-75,16,21,22,-37,1,16},
- {-100,-99,82,-66,2,64,-13,44},
- {59,-100,-90,8,36,-24,18,88},
- {73,-58,75,-100,-19,-29,85,-19}
- };
-const int *Ap[3] = {(int*) A0,(int*) A1,(int*) A2};
-const int *Bp[3] = {(int*) B0,(int*) B1,(int*) B2};
-const double *dAp[3] = {(double*) dA0,(double*) dA1,(double*) dA2};
-const double *dBp[3] = {(double*) dB0,(double*) dB1,(double*) dB2};
-int n[3] = {2,4,8};
-int n_arrays = 3;
+ {-36,-2,-58,-32,34,-89,49,-55},
+ {-68,-73,52,-3,-51,-37,-31,70},
+ {73,-90,-21,-79,-15,96,-99,12},
+ {68,-25,38,-73,-60,35,-99,72},
+ {-43,-87,48,-84,-100,37,80,53},
+ {-27,88,-5,-82,-57,-27,20,10},
+ {-91,-47,54,-90,-99,-76,50,-18},
+ {69,-36,76,5,-67,-38,-95,91}
+ };
+const int A3[][16] =
+ {
+ {-24,65,21,19,94,70,-90,-81,53,-41,-23,-1,58,-80,-54,59},
+ {-42,76,-19,98,29,-56,92,14,45,11,82,83,48,-13,81,66},
+ {43,-57,-67,95,5,72,11,0,-47,55,-24,36,84,54,-31,-54},
+ {-39,-40,19,97,-82,-56,27,95,81,-21,-50,-74,-35,-87,-28,-26},
+ {-74,-98,79,92,-24,-48,99,94,55,-83,70,98,-24,18,-67,14},
+ {20,76,11,-23,-56,21,0,42,64,86,-74,44,93,-76,-30,97},
+ {13,20,-73,-11,-30,80,53,-8,60,21,17,-42,82,-72,-6,-80},
+ {36,-93,-64,-21,20,-85,15,24,99,81,-52,64,71,-56,52,63},
+ {32,9,-2,-85,17,62,-98,-35,75,-58,-44,-20,-47,89,-95,52},
+ {93,-43,86,68,-6,-25,90,57,60,-10,65,-97,43,46,-60,-41},
+ {43,-33,0,50,-100,26,-60,95,39,-70,-61,-81,9,-23,-99,-4},
+ {20,61,15,43,-96,93,-55,38,-29,-1,-10,26,-87,18,64,6},
+ {-98,-84,51,16,-14,86,52,59,44,-39,-2,10,82,-66,54,19},
+ {89,-49,-37,-6,-53,40,-11,46,-51,-56,86,34,11,13,-20,-49},
+ {-90,14,28,-45,-25,-56,-51,-61,28,-8,51,91,95,-10,-85,58},
+ {8,-44,88,-71,-27,11,89,37,86,-78,-44,-56,-87,0,-42,-61}
+ };
+const int B3[][16] =
+ {
+ {62,-30,62,92,29,-93,-95,44,-33,-88,-29,9,-88,-42,-90,-70},
+ {60,37,-44,-93,-87,6,-53,2,-29,53,-49,59,6,83,-15,50},
+ {-19,85,-49,-14,84,-4,12,88,-83,-81,-24,-16,-12,-42,-63,-71},
+ {-42,-78,-58,-61,-29,67,-28,-46,64,7,6,-13,88,-42,95,-24},
+ {-90,-56,8,-30,-89,70,37,-29,24,-8,-10,-2,-25,-63,-95,-91},
+ {10,-81,42,-28,-13,-68,-72,-20,-22,5,-79,-50,-88,62,57,69},
+ {-67,24,-71,-43,11,48,33,-93,-82,-65,-4,5,-15,25,-54,-45},
+ {-49,19,-29,90,-97,-87,78,-39,-75,-85,-79,-35,54,3,-73,7},
+ {-7,39,70,-42,32,-100,56,4,-24,-57,38,-49,-50,-44,79,-42},
+ {37,-65,-55,22,-97,-42,-76,95,97,-27,38,11,0,-81,-23,35},
+ {26,-70,10,-29,47,-70,-52,29,-13,-18,5,34,18,32,87,91},
+ {-84,41,-19,96,-51,-19,81,75,81,92,2,-40,-42,-69,-10,-61},
+ {-30,98,71,-51,91,-59,58,86,86,-22,-84,7,66,-55,-52,23},
+ {-71,-44,-9,90,26,18,26,-10,-85,64,-47,3,72,81,74,-8},
+ {52,-59,-91,22,8,-63,84,9,-11,-54,-78,-71,-98,42,96,57},
+ {18,-39,34,-50,-62,-96,-2,-78,52,94,-33,2,-19,-9,-86,-75}
+ };
+const double dB3[][16] =
+ {
+ {62,-30,62,92,29,-93,-95,44,-33,-88,-29,9,-88,-42,-90,-70},
+ {60,37,-44,-93,-87,6,-53,2,-29,53,-49,59,6,83,-15,50},
+ {-19,85,-49,-14,84,-4,12,88,-83,-81,-24,-16,-12,-42,-63,-71},
+ {-42,-78,-58,-61,-29,67,-28,-46,64,7,6,-13,88,-42,95,-24},
+ {-90,-56,8,-30,-89,70,37,-29,24,-8,-10,-2,-25,-63,-95,-91},
+ {10,-81,42,-28,-13,-68,-72,-20,-22,5,-79,-50,-88,62,57,69},
+ {-67,24,-71,-43,11,48,33,-93,-82,-65,-4,5,-15,25,-54,-45},
+ {-49,19,-29,90,-97,-87,78,-39,-75,-85,-79,-35,54,3,-73,7},
+ {-7,39,70,-42,32,-100,56,4,-24,-57,38,-49,-50,-44,79,-42},
+ {37,-65,-55,22,-97,-42,-76,95,97,-27,38,11,0,-81,-23,35},
+ {26,-70,10,-29,47,-70,-52,29,-13,-18,5,34,18,32,87,91},
+ {-84,41,-19,96,-51,-19,81,75,81,92,2,-40,-42,-69,-10,-61},
+ {-30,98,71,-51,91,-59,58,86,86,-22,-84,7,66,-55,-52,23},
+ {-71,-44,-9,90,26,18,26,-10,-85,64,-47,3,72,81,74,-8},
+ {52,-59,-91,22,8,-63,84,9,-11,-54,-78,-71,-98,42,96,57},
+ {18,-39,34,-50,-62,-96,-2,-78,52,94,-33,2,-19,-9,-86,-75}
+ };
+const double dA3[][16] =
+ {
+ {-24,65,21,19,94,70,-90,-81,53,-41,-23,-1,58,-80,-54,59},
+ {-42,76,-19,98,29,-56,92,14,45,11,82,83,48,-13,81,66},
+ {43,-57,-67,95,5,72,11,0,-47,55,-24,36,84,54,-31,-54},
+ {-39,-40,19,97,-82,-56,27,95,81,-21,-50,-74,-35,-87,-28,-26},
+ {-74,-98,79,92,-24,-48,99,94,55,-83,70,98,-24,18,-67,14},
+ {20,76,11,-23,-56,21,0,42,64,86,-74,44,93,-76,-30,97},
+ {13,20,-73,-11,-30,80,53,-8,60,21,17,-42,82,-72,-6,-80},
+ {36,-93,-64,-21,20,-85,15,24,99,81,-52,64,71,-56,52,63},
+ {32,9,-2,-85,17,62,-98,-35,75,-58,-44,-20,-47,89,-95,52},
+ {93,-43,86,68,-6,-25,90,57,60,-10,65,-97,43,46,-60,-41},
+ {43,-33,0,50,-100,26,-60,95,39,-70,-61,-81,9,-23,-99,-4},
+ {20,61,15,43,-96,93,-55,38,-29,-1,-10,26,-87,18,64,6},
+ {-98,-84,51,16,-14,86,52,59,44,-39,-2,10,82,-66,54,19},
+ {89,-49,-37,-6,-53,40,-11,46,-51,-56,86,34,11,13,-20,-49},
+ {-90,14,28,-45,-25,-56,-51,-61,28,-8,51,91,95,-10,-85,58},
+ {8,-44,88,-71,-27,11,89,37,86,-78,-44,-56,-87,0,-42,-61}
+ };
+const int *Ap[4] = {(int*) A0,(int*) A1,(int*) A2,(int*) A3};
+const int *Bp[4] = {(int*) B0,(int*) B1,(int*) B2,(int*) B3};
+const double *dAp[4] = {(double*) dA0,(double*) dA1,(double*) dA2,(double*) dA3};
+const double *dBp[4] = {(double*) dB0,(double*) dB1,(double*) dB2,(double*) dB3};
+int n[4] = {2,4,8,16};
+int n_arrays = 4;
diff --git a/buch/papers/multiplikation/code/c_meas_4096.pdf b/buch/papers/multiplikation/code/c_meas_4096.pdf
index 547d794..f637ae4 100644
--- a/buch/papers/multiplikation/code/c_meas_4096.pdf
+++ b/buch/papers/multiplikation/code/c_meas_4096.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/ci.txt b/buch/papers/multiplikation/code/ci.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/buch/papers/multiplikation/code/ci.txt
diff --git a/buch/papers/multiplikation/code/helper_class.py b/buch/papers/multiplikation/code/helper_class.py
index 485fa76..3b74f67 100755
--- a/buch/papers/multiplikation/code/helper_class.py
+++ b/buch/papers/multiplikation/code/helper_class.py
@@ -101,5 +101,6 @@ if __name__ == '__main__':
helper = Helper()
# n = np.arange(2,10)
- n = np.logspace(1,3,3,base=2,dtype=(np.int))
- C = helper.write_c_matrix(n)
+ n = np.logspace(1,11,11,base=2,dtype=(np.int))
+ # n=[8192]
+ # C = helper.write_c_matrix(n)
diff --git a/buch/papers/multiplikation/code/meas/MM.txt b/buch/papers/multiplikation/code/meas/MM.txt
index 1a0cd5d..7bffb6e 100644
--- a/buch/papers/multiplikation/code/meas/MM.txt
+++ b/buch/papers/multiplikation/code/meas/MM.txt
@@ -1,12 +1,110 @@
0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000001,4
+0.000000,4
+0.000000,4
+0.000000,4
0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000001,4
+0.000001,4
+0.000002,8
0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000001,8
+0.000001,8
+0.000011,16
+0.000011,16
0.000011,16
+0.000011,16
+0.000011,16
+0.000021,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000090,32
+0.000093,32
+0.000083,32
+0.000082,32
+0.000090,32
+0.000080,32
+0.000080,32
0.000080,32
-0.000653,64
-0.005397,128
-0.045147,256
-0.487710,512
-3.964180,1024
-128.863544,2048
-996.370209,4096
+0.000089,32
+0.000126,32
+0.000771,64
+0.000651,64
+0.000651,64
+0.000651,64
+0.000731,64
+0.000673,64
+0.000745,64
+0.000672,64
+0.000671,64
+0.000707,64
+0.005642,128
+0.005579,128
+0.005768,128
+0.005745,128
+0.005518,128
+0.005877,128
+0.005513,128
+0.005850,128
+0.005769,128
+0.005581,128
+0.052188,256
+0.051988,256
+0.051888,256
+0.051518,256
+0.051709,256
+0.051543,256
+0.051707,256
+0.051845,256
+0.051495,256
+0.051834,256
+0.507020,512
+0.504111,512
+0.502049,512
+0.529743,512
+0.501028,512
+0.502097,512
+0.503490,512
+0.502079,512
+0.506688,512
+0.504163,512
+4.538722,1024
+4.291473,1024
+4.516302,1024
+4.374630,1024
+4.719557,1024
+4.438999,1024
+4.641680,1024
+4.407959,1024
+4.441451,1024
+4.677313,1024
+129.433279,2048
+129.277802,2048
+129.284817,2048
+129.086884,2048
+129.197444,2048
+129.350999,2048
+129.264250,2048
+129.295723,2048
+129.402601,2048
+129.300820,2048
diff --git a/buch/papers/multiplikation/code/meas/MM_dc.txt b/buch/papers/multiplikation/code/meas/MM_dc.txt
index 0d5580a..b78b925 100644
--- a/buch/papers/multiplikation/code/meas/MM_dc.txt
+++ b/buch/papers/multiplikation/code/meas/MM_dc.txt
@@ -1,12 +1,110 @@
-0.000006,2
-0.000007,4
-0.000035,8
-0.000228,16
-0.001310,32
-0.007204,64
-0.034338,128
-0.267511,256
-2.131212,512
-17.177403,1024
-146.112874,2048
-1156.777565,4096
+0.000003,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000002,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000007,8
+0.000007,8
+0.000007,8
+0.000007,8
+0.000018,8
+0.000008,8
+0.000075,16
+0.000063,16
+0.000088,16
+0.000062,16
+0.000086,16
+0.000092,16
+0.000081,16
+0.000080,16
+0.000070,16
+0.000085,16
+0.000581,32
+0.000659,32
+0.000584,32
+0.000714,32
+0.000666,32
+0.000574,32
+0.000616,32
+0.000534,32
+0.000506,32
+0.000506,32
+0.004567,64
+0.004502,64
+0.004332,64
+0.004578,64
+0.004543,64
+0.004426,64
+0.004497,64
+0.004329,64
+0.004288,64
+0.004277,64
+0.036456,128
+0.034901,128
+0.034545,128
+0.034283,128
+0.035150,128
+0.034663,128
+0.034901,128
+0.034022,128
+0.034368,128
+0.035154,128
+0.296292,256
+0.297592,256
+0.302464,256
+0.299557,256
+0.299367,256
+0.306394,256
+0.287616,256
+0.292630,256
+0.289542,256
+0.277019,256
+2.331956,512
+2.224501,512
+2.203910,512
+2.198937,512
+2.206083,512
+2.199477,512
+2.199847,512
+2.225379,512
+2.202491,512
+2.235926,512
+17.649432,1024
+17.636769,1024
+17.639024,1024
+17.625402,1024
+17.722286,1024
+17.611777,1024
+17.653120,1024
+17.748270,1024
+17.691817,1024
+17.614448,1024
+141.943689,2048
+141.580812,2048
+141.882050,2048
+141.516253,2048
+141.351237,2048
+141.641167,2048
+141.596407,2048
+141.607048,2048
+141.469723,2048
+141.515550,2048
diff --git a/buch/papers/multiplikation/code/meas/blas.txt b/buch/papers/multiplikation/code/meas/blas.txt
index 6b7cd0b..9414d8f 100644
--- a/buch/papers/multiplikation/code/meas/blas.txt
+++ b/buch/papers/multiplikation/code/meas/blas.txt
@@ -1,12 +1,110 @@
0.000001,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
0.000000,4
0.000001,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000003,16
+0.000003,16
+0.000003,16
+0.000003,16
+0.000003,16
+0.000003,16
+0.000012,16
+0.000003,16
+0.000003,16
0.000003,16
0.000021,32
+0.000019,32
+0.000030,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000180,64
+0.000192,64
+0.000163,64
+0.000153,64
+0.000153,64
+0.000197,64
+0.000163,64
+0.000267,64
+0.000226,64
0.000164,64
-0.001240,128
-0.009657,256
-0.072523,512
-0.735149,1024
-6.895747,2048
-56.812183,4096
+0.001216,128
+0.001233,128
+0.001364,128
+0.001278,128
+0.001211,128
+0.001295,128
+0.001206,128
+0.001371,128
+0.001225,128
+0.001250,128
+0.009733,256
+0.009497,256
+0.009586,256
+0.009600,256
+0.009768,256
+0.009566,256
+0.009731,256
+0.009550,256
+0.009664,256
+0.009794,256
+0.077453,512
+0.076616,512
+0.088812,512
+0.075990,512
+0.076925,512
+0.076303,512
+0.075915,512
+0.075600,512
+0.075122,512
+0.075029,512
+0.769186,1024
+0.775780,1024
+0.753906,1024
+0.757834,1024
+0.772001,1024
+0.770950,1024
+0.791317,1024
+0.753319,1024
+0.747228,1024
+0.752347,1024
+7.625205,2048
+7.652278,2048
+7.640682,2048
+7.649428,2048
+7.632806,2048
+7.579347,2048
+7.612317,2048
+7.676742,2048
+7.632979,2048
+7.619210,2048
diff --git a/buch/papers/multiplikation/code/meas/ci/MM.txt b/buch/papers/multiplikation/code/meas/ci/MM.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/MM.txt
diff --git a/buch/papers/multiplikation/code/meas/ci/Wino.txt b/buch/papers/multiplikation/code/meas/ci/Wino.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/Wino.txt
diff --git a/buch/papers/multiplikation/code/meas/ci/blas.txt b/buch/papers/multiplikation/code/meas/ci/blas.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/blas.txt
diff --git a/buch/papers/multiplikation/code/meas/ci/dc.txt b/buch/papers/multiplikation/code/meas/ci/dc.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/dc.txt
diff --git a/buch/papers/multiplikation/code/meas/ci/strassen.txt b/buch/papers/multiplikation/code/meas/ci/strassen.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/strassen.txt
diff --git a/buch/papers/multiplikation/code/meas/old/8196/MM.txt b/buch/papers/multiplikation/code/meas/old/8196/MM.txt
new file mode 100644
index 0000000..0edf9f6
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/MM.txt
@@ -0,0 +1 @@
+9376.173434,8192
diff --git a/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt b/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt
new file mode 100644
index 0000000..36f6ff0
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt
@@ -0,0 +1 @@
+9606.402522,8192
diff --git a/buch/papers/multiplikation/code/meas/old/8196/blas.txt b/buch/papers/multiplikation/code/meas/old/8196/blas.txt
new file mode 100644
index 0000000..b5989fb
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/blas.txt
@@ -0,0 +1 @@
+478.429957,8192
diff --git a/buch/papers/multiplikation/code/meas/old/8196/strassen.txt b/buch/papers/multiplikation/code/meas/old/8196/strassen.txt
new file mode 100644
index 0000000..ca06e97
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/strassen.txt
@@ -0,0 +1 @@
+3014.235467,8192
diff --git a/buch/papers/multiplikation/code/meas/old/8196/winograd.txt b/buch/papers/multiplikation/code/meas/old/8196/winograd.txt
new file mode 100644
index 0000000..2a529c4
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/winograd.txt
@@ -0,0 +1 @@
+10071.512655,8192
diff --git a/buch/papers/multiplikation/code/meas/old/MM.txt b/buch/papers/multiplikation/code/meas/old/MM.txt
new file mode 100644
index 0000000..e296dd7
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/MM.txt
@@ -0,0 +1,12 @@
+0.000001,2
+0.000001,4
+0.000001,8
+0.000010,16
+0.000081,32
+0.000654,64
+0.005556,128
+0.054253,256
+0.487317,512
+4.162845,1024
+125.909034,2048
+1111.312696,4096
diff --git a/buch/papers/multiplikation/code/meas/old/MM_dc.txt b/buch/papers/multiplikation/code/meas/old/MM_dc.txt
new file mode 100644
index 0000000..f6be928
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/MM_dc.txt
@@ -0,0 +1,12 @@
+0.000003,2
+0.000002,4
+0.000010,8
+0.000068,16
+0.000594,32
+0.004264,64
+0.036289,128
+0.324645,256
+2.612010,512
+19.928951,1024
+159.333884,2048
+1147.106865,4096
diff --git a/buch/papers/multiplikation/code/meas/old/blas.txt b/buch/papers/multiplikation/code/meas/old/blas.txt
new file mode 100644
index 0000000..92a61b9
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/blas.txt
@@ -0,0 +1,12 @@
+0.000001,2
+0.000001,4
+0.000001,8
+0.000003,16
+0.000022,32
+0.000179,64
+0.001278,128
+0.010165,256
+0.074739,512
+0.704748,1024
+6.845095,2048
+55.845038,4096
diff --git a/buch/papers/multiplikation/code/meas/old/strassen.txt b/buch/papers/multiplikation/code/meas/old/strassen.txt
new file mode 100644
index 0000000..fdfbf2b
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/strassen.txt
@@ -0,0 +1,12 @@
+0.000001,2
+0.000003,4
+0.000010,8
+0.000066,16
+0.000470,32
+0.003368,64
+0.024232,128
+0.172000,256
+1.209262,512
+8.457472,1024
+59.267256,2048
+414.648901,4096
diff --git a/buch/papers/multiplikation/code/meas/old/winograd.txt b/buch/papers/multiplikation/code/meas/old/winograd.txt
new file mode 100644
index 0000000..d185906
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/winograd.txt
@@ -0,0 +1,12 @@
+0.000001,2
+0.000001,4
+0.000002,8
+0.000011,16
+0.000100,32
+0.000654,64
+0.005229,128
+0.057440,256
+0.517850,512
+4.539413,1024
+130.627663,2048
+1179.261048,4096
diff --git a/buch/papers/multiplikation/code/meas/strassen.txt b/buch/papers/multiplikation/code/meas/strassen.txt
index 89cf41a..d6e040e 100644
--- a/buch/papers/multiplikation/code/meas/strassen.txt
+++ b/buch/papers/multiplikation/code/meas/strassen.txt
@@ -1,12 +1,110 @@
0.000000,2
-0.000003,4
-0.000010,8
-0.000086,16
-0.000476,32
-0.003366,64
-0.025547,128
-0.184593,256
-1.248713,512
-9.007700,1024
-61.079879,2048
-424.493037,4096
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000004,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000001,4
+0.000020,8
+0.000018,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000019,8
+0.000080,16
+0.000075,16
+0.000078,16
+0.000085,16
+0.000065,16
+0.000065,16
+0.000065,16
+0.000064,16
+0.000065,16
+0.000065,16
+0.000546,32
+0.000480,32
+0.000563,32
+0.000551,32
+0.000502,32
+0.000504,32
+0.000463,32
+0.000462,32
+0.000508,32
+0.000462,32
+0.003675,64
+0.003665,64
+0.003493,64
+0.003708,64
+0.003465,64
+0.003502,64
+0.003710,64
+0.003537,64
+0.003637,64
+0.003568,64
+0.025342,128
+0.025179,128
+0.026475,128
+0.025758,128
+0.025333,128
+0.024988,128
+0.025727,128
+0.025298,128
+0.025283,128
+0.025098,128
+0.181311,256
+0.178432,256
+0.177075,256
+0.177474,256
+0.177025,256
+0.177805,256
+0.177944,256
+0.178151,256
+0.177858,256
+0.178742,256
+1.283374,512
+1.246682,512
+1.245898,512
+1.251547,512
+1.250288,512
+1.250495,512
+1.257037,512
+1.255247,512
+1.255382,512
+1.259050,512
+8.784102,1024
+8.845725,1024
+8.771100,1024
+8.770184,1024
+8.955977,1024
+8.849161,1024
+8.806902,1024
+8.808937,1024
+8.848900,1024
+8.861383,1024
+61.787123,2048
+61.972599,2048
+61.822434,2048
+62.051331,2048
+61.946171,2048
+61.911404,2048
+61.872671,2048
+61.791260,2048
+61.818110,2048
+62.045588,2048
diff --git a/buch/papers/multiplikation/code/meas/winograd.txt b/buch/papers/multiplikation/code/meas/winograd.txt
index 3a4d88b..970a3f4 100644
--- a/buch/papers/multiplikation/code/meas/winograd.txt
+++ b/buch/papers/multiplikation/code/meas/winograd.txt
@@ -1,11 +1,110 @@
+0.000001,2
0.000000,2
-0.000001,4
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000021,16
+0.000011,16
0.000011,16
-0.000091,32
-0.000663,64
-0.005182,128
-0.046038,256
-0.533429,512
-4.257458,1024
-130.378038,2048
+0.000092,32
+0.000092,32
+0.000081,32
+0.000081,32
+0.000081,32
+0.000081,32
+0.000088,32
+0.000079,32
+0.000079,32
+0.000079,32
+0.000670,64
+0.000739,64
+0.000609,64
+0.000609,64
+0.000700,64
+0.000648,64
+0.000626,64
+0.000626,64
+0.000626,64
+0.000626,64
+0.005321,128
+0.005286,128
+0.005180,128
+0.005223,128
+0.005249,128
+0.005299,128
+0.005205,128
+0.005268,128
+0.005464,128
+0.005378,128
+0.053123,256
+0.052325,256
+0.052729,256
+0.052930,256
+0.052207,256
+0.053178,256
+0.052122,256
+0.052681,256
+0.052965,256
+0.052486,256
+0.527028,512
+0.525201,512
+0.521822,512
+0.525147,512
+0.525241,512
+0.527725,512
+0.526321,512
+0.526479,512
+0.524020,512
+0.520768,512
+4.732299,1024
+4.617253,1024
+4.647425,1024
+4.519233,1024
+4.917471,1024
+4.564929,1024
+4.870771,1024
+4.555407,1024
+4.727473,1024
+4.559349,1024
+136.409028,2048
+136.390557,2048
+136.541672,2048
+136.598491,2048
+137.720790,2048
+136.825926,2048
+136.367686,2048
+136.650627,2048
+136.642195,2048
+136.622805,2048
diff --git a/buch/papers/multiplikation/code/meas_1024.pdf b/buch/papers/multiplikation/code/meas_1024.pdf
index fd0a108..f489a7d 100644
--- a/buch/papers/multiplikation/code/meas_1024.pdf
+++ b/buch/papers/multiplikation/code/meas_1024.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/meas_1024.txt b/buch/papers/multiplikation/code/meas_1024.txt
index c5ce619..ab507a2 100644
--- a/buch/papers/multiplikation/code/meas_1024.txt
+++ b/buch/papers/multiplikation/code/meas_1024.txt
@@ -1,6 +1,6 @@
2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 2.560000000000000000e+02 5.120000000000000000e+02 1.024000000000000000e+03
-1.502037048339843750e-05 6.628036499023437500e-05 4.780292510986328125e-04 2.713203430175781250e-03 2.115225791931152344e-02 1.758832931518554688e-01 1.338865518569946289e+00 1.009106445312500000e+01 8.192077994346618652e+01 7.835870332717895508e+02
-6.675720214843750000e-06 7.200241088867187500e-05 5.540847778320312500e-04 3.144979476928710938e-03 2.545046806335449219e-02 2.083067893981933594e-01 1.659256219863891602e+00 1.319160294532775879e+01 1.046767003536224365e+02 9.679818902015686035e+02
-1.668930053710937500e-05 1.628398895263671875e-04 7.648468017578125000e-04 4.426956176757812500e-03 2.922415733337402344e-02 1.800994873046875000e-01 1.286747694015502930e+00 9.412034273147583008e+00 6.263725924491882324e+01 4.427414393424987793e+02
-2.408027648925781250e-05 8.463859558105468750e-05 4.761219024658203125e-04 2.339839935302734375e-03 1.682758331298828125e-02 1.299476623535156250e-01 1.048770904541015625e+00 8.114667415618896484e+00 6.373566389083862305e+01 6.489995403289794922e+02
-1.573562622070312500e-05 7.152557373046875000e-06 7.152557373046875000e-06 2.074241638183593750e-05 5.388259887695312500e-05 6.365776062011718750e-05 3.257751464843750000e-03 1.396179199218750000e-03 3.274917602539062500e-03 2.186250686645507812e-02
+1.859664916992187500e-05 8.296966552734375000e-05 5.471706390380859375e-04 3.053665161132812500e-03 2.407431602478027344e-02 1.868948936462402344e-01 1.563691616058349609e+00 1.100623321533203125e+01 8.547679090499877930e+01 7.507572824954986572e+02
+8.106231689453125000e-06 9.012222290039062500e-05 7.290840148925781250e-04 4.970788955688476562e-03 2.718997001647949219e-02 2.652802467346191406e-01 1.777865171432495117e+00 1.327002429962158203e+01 1.053971357345581055e+02 8.473208103179931641e+02
+2.098083496093750000e-05 1.742839813232421875e-04 9.438991546630859375e-04 4.754066467285156250e-03 4.852557182312011719e-02 2.204136848449707031e-01 1.447179555892944336e+00 9.938656568527221680e+00 6.396102952957153320e+01 4.614939928054809570e+02
+2.789497375488281250e-05 1.049041748046875000e-04 5.528926849365234375e-04 4.555702209472656250e-03 1.871442794799804688e-02 1.530685424804687500e-01 1.194762229919433594e+00 8.298985958099365234e+00 6.836994743347167969e+01 5.373736469745635986e+02
+1.835823059082031250e-05 7.867813110351562500e-06 1.001358032226562500e-05 5.412101745605468750e-05 4.267692565917968750e-05 1.184940338134765625e-04 2.441406250000000000e-04 6.957054138183593750e-04 2.217054367065429688e-03 1.880884170532226562e-02
diff --git a/buch/papers/multiplikation/code/meas_128.pdf b/buch/papers/multiplikation/code/meas_128.pdf
index ed1ec63..c54648f 100644
--- a/buch/papers/multiplikation/code/meas_128.pdf
+++ b/buch/papers/multiplikation/code/meas_128.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/meas_128.txt b/buch/papers/multiplikation/code/meas_128.txt
index 976bbdf..f3a5beb 100644
--- a/buch/papers/multiplikation/code/meas_128.txt
+++ b/buch/papers/multiplikation/code/meas_128.txt
@@ -1,6 +1,6 @@
2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02
-1.978874206542968750e-05 1.134872436523437500e-04 4.298686981201171875e-04 2.815246582031250000e-03 2.616596221923828125e-02 1.767718791961669922e-01 1.293319463729858398e+00
-6.675720214843750000e-06 1.251697540283203125e-04 4.818439483642578125e-04 3.490447998046875000e-03 2.465796470642089844e-02 2.014584541320800781e-01 1.630620479583740234e+00
-2.408027648925781250e-05 2.126693725585937500e-04 1.172780990600585938e-03 4.364490509033203125e-03 3.148293495178222656e-02 2.010228633880615234e-01 1.429297924041748047e+00
-2.932548522949218750e-05 1.466274261474609375e-04 4.270076751708984375e-04 2.837419509887695312e-03 1.723575592041015625e-02 1.308519840240478516e-01 1.015527009963989258e+00
-3.337860107421875000e-05 1.096725463867187500e-05 9.536743164062500000e-06 3.600120544433593750e-05 2.837181091308593750e-05 5.912780761718750000e-05 1.981019973754882812e-03
+1.239776611328125000e-05 5.507469177246093750e-05 3.888607025146484375e-04 2.762079238891601562e-03 2.097773551940917969e-02 1.672370433807373047e-01 1.410297393798828125e+00
+5.483627319335937500e-06 5.888938903808593750e-05 3.871917724609375000e-04 3.364324569702148438e-03 2.481031417846679688e-02 2.047052383422851562e-01 1.712310314178466797e+00
+1.358985900878906250e-05 1.189708709716796875e-04 6.430149078369140625e-04 5.586385726928710938e-03 3.101944923400878906e-02 1.874091625213623047e-01 1.327976465225219727e+00
+1.978874206542968750e-05 7.224082946777343750e-05 4.618167877197265625e-04 3.294944763183593750e-03 1.755571365356445312e-02 1.360688209533691406e-01 1.028253555297851562e+00
+1.215934753417968750e-05 5.722045898437500000e-06 2.074241638183593750e-05 4.339218139648437500e-05 2.813339233398437500e-05 5.292892456054687500e-05 1.921653747558593750e-04
diff --git a/buch/papers/multiplikation/code/meas_256.pdf b/buch/papers/multiplikation/code/meas_256.pdf
index 5f049dc..2eb177b 100644
--- a/buch/papers/multiplikation/code/meas_256.pdf
+++ b/buch/papers/multiplikation/code/meas_256.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/meas_256.txt b/buch/papers/multiplikation/code/meas_256.txt
index 15035c6..62e77cb 100644
--- a/buch/papers/multiplikation/code/meas_256.txt
+++ b/buch/papers/multiplikation/code/meas_256.txt
@@ -1,6 +1,6 @@
2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 2.560000000000000000e+02
-1.049041748046875000e-05 5.340576171875000000e-05 5.936622619628906250e-04 2.707719802856445312e-03 2.246093750000000000e-02 1.631326675415039062e-01 1.335460901260375977e+00 1.052024245262145996e+01
-4.768371582031250000e-06 5.531311035156250000e-05 8.208751678466796875e-04 3.099203109741210938e-03 2.490711212158203125e-02 2.070860862731933594e-01 1.739669799804687500e+00 1.384817218780517578e+01
-1.478195190429687500e-05 1.132488250732421875e-04 5.970001220703125000e-04 3.906726837158203125e-03 3.041696548461914062e-02 2.000186443328857422e-01 1.392681598663330078e+00 9.388872385025024414e+00
-1.716613769531250000e-05 6.866455078125000000e-05 5.314350128173828125e-04 2.688407897949218750e-03 1.695108413696289062e-02 1.297233104705810547e-01 1.087257385253906250e+00 8.699601650238037109e+00
-2.336502075195312500e-05 4.529953002929687500e-06 8.106231689453125000e-06 4.291534423828125000e-05 6.008148193359375000e-05 8.988380432128906250e-05 1.647472381591796875e-04 4.460811614990234375e-04
+1.144409179687500000e-05 5.507469177246093750e-05 3.774166107177734375e-04 3.177404403686523438e-03 2.508044242858886719e-02 2.120554447174072266e-01 1.431464910507202148e+00 1.076412820816040039e+01
+5.722045898437500000e-06 5.745887756347656250e-05 4.494190216064453125e-04 3.611087799072265625e-03 3.317713737487792969e-02 2.292332649230957031e-01 2.090558290481567383e+00 1.306217479705810547e+01
+1.788139343261718750e-05 1.168251037597656250e-04 5.981922149658203125e-04 4.416465759277343750e-03 3.002405166625976562e-02 2.104022502899169922e-01 1.488269329071044922e+00 9.164114713668823242e+00
+1.955032348632812500e-05 7.224082946777343750e-05 3.829002380371093750e-04 2.558946609497070312e-03 2.043128013610839844e-02 1.361320018768310547e-01 1.089214324951171875e+00 8.553364753723144531e+00
+2.384185791015625000e-05 5.245208740234375000e-06 6.437301635742187500e-06 2.455711364746093750e-05 4.148483276367187500e-05 8.702278137207031250e-05 3.793239593505859375e-04 6.709098815917968750e-04
diff --git a/buch/papers/multiplikation/code/meas_32.pdf b/buch/papers/multiplikation/code/meas_32.pdf
index 94c3731..b926095 100644
--- a/buch/papers/multiplikation/code/meas_32.pdf
+++ b/buch/papers/multiplikation/code/meas_32.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/meas_32.txt b/buch/papers/multiplikation/code/meas_32.txt
index afdb6d5..0fdc18d 100644
--- a/buch/papers/multiplikation/code/meas_32.txt
+++ b/buch/papers/multiplikation/code/meas_32.txt
@@ -1,6 +1,6 @@
2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01
-1.215934753417968750e-05 5.459785461425781250e-05 3.700256347656250000e-04 3.249406814575195312e-03 1.996850967407226562e-02
-4.529953002929687500e-06 5.650520324707031250e-05 4.577636718750000000e-04 4.029273986816406250e-03 2.444481849670410156e-02
-1.311302185058593750e-05 1.165866851806640625e-04 6.275177001953125000e-04 4.323244094848632812e-03 2.624726295471191406e-02
-1.835823059082031250e-05 6.890296936035156250e-05 3.914833068847656250e-04 2.423048019409179688e-03 1.761770248413085938e-02
-1.263618469238281250e-05 5.006790161132812500e-06 5.960464477539062500e-06 1.144409179687500000e-05 3.600120544433593750e-05
+1.239776611328125000e-05 5.507469177246093750e-05 3.802776336669921875e-04 2.795457839965820312e-03 2.073740959167480469e-02
+5.006790161132812500e-06 5.841255187988281250e-05 3.988742828369140625e-04 3.505229949951171875e-03 2.511668205261230469e-02
+1.335144042968750000e-05 1.149177551269531250e-04 6.387233734130859375e-04 4.088878631591796875e-03 2.969408035278320312e-02
+1.955032348632812500e-05 8.058547973632812500e-05 3.998279571533203125e-04 2.514839172363281250e-03 1.842117309570312500e-02
+1.215934753417968750e-05 8.583068847656250000e-06 6.675720214843750000e-06 2.694129943847656250e-05 2.789497375488281250e-05
diff --git a/buch/papers/multiplikation/code/meas_4096.pdf b/buch/papers/multiplikation/code/meas_4096.pdf
new file mode 100644
index 0000000..ecf2cff
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas_4096.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/meas_4096.txt b/buch/papers/multiplikation/code/meas_4096.txt
new file mode 100644
index 0000000..cae1bc6
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas_4096.txt
@@ -0,0 +1,6 @@
+2.048000000000000000e+03 4.096000000000000000e+03
+6.154183513402938843e+03 4.681333474493026733e+04
+7.375929301261901855e+03 5.846600176072120667e+04
+3.860573610544204712e+03 2.290433094644546509e+04
+4.884613198995590210e+03 4.359707747149467468e+04
+2.157390117645263672e-01 1.491588830947875977e+00
diff --git a/buch/papers/multiplikation/code/meas_64.pdf b/buch/papers/multiplikation/code/meas_64.pdf
index 3a90949..92af29b 100644
--- a/buch/papers/multiplikation/code/meas_64.pdf
+++ b/buch/papers/multiplikation/code/meas_64.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/meas_64.txt b/buch/papers/multiplikation/code/meas_64.txt
index ae6ff9b..b4fc7a1 100644
--- a/buch/papers/multiplikation/code/meas_64.txt
+++ b/buch/papers/multiplikation/code/meas_64.txt
@@ -1,6 +1,6 @@
2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01
-1.645088195800781250e-05 7.295608520507812500e-05 3.807544708251953125e-04 2.672195434570312500e-03 2.010774612426757812e-02 1.662156581878662109e-01
-7.390975952148437500e-06 7.843971252441406250e-05 4.265308380126953125e-04 3.107070922851562500e-03 2.457642555236816406e-02 2.122807502746582031e-01
-1.931190490722656250e-05 1.568794250488281250e-04 7.593631744384765625e-04 3.937005996704101562e-03 3.596329689025878906e-02 2.131938934326171875e-01
-2.622604370117187500e-05 9.226799011230468750e-05 3.504753112792968750e-04 2.469539642333984375e-03 1.652932167053222656e-02 1.281068325042724609e-01
-1.788139343261718750e-05 7.152557373046875000e-06 6.914138793945312500e-06 1.120567321777343750e-05 2.884864807128906250e-05 6.914138793945312500e-05
+2.145767211914062500e-05 6.175041198730468750e-05 4.422664642333984375e-04 3.235816955566406250e-03 2.289748191833496094e-02 1.855163574218750000e-01
+1.025199890136718750e-05 6.341934204101562500e-05 5.202293395996093750e-04 3.566026687622070312e-03 3.026723861694335938e-02 2.312932014465332031e-01
+2.384185791015625000e-05 1.807212829589843750e-04 6.821155548095703125e-04 4.796504974365234375e-03 2.968001365661621094e-02 2.291278839111328125e-01
+3.504753112792968750e-05 1.106262207031250000e-04 4.322528839111328125e-04 2.696514129638671875e-03 2.188420295715332031e-02 1.477701663970947266e-01
+3.218650817871093750e-05 1.144409179687500000e-05 7.390975952148437500e-06 4.625320434570312500e-05 3.814697265625000000e-05 5.435943603515625000e-05
diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex
index bc4bfcf..21fa9df 100755
--- a/buch/papers/multiplikation/einlteung.tex
+++ b/buch/papers/multiplikation/einlteung.tex
@@ -3,28 +3,22 @@
%
% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
%
-\section{Einleitung \label{multiplikation:section:einleitung}}
-\rhead{Einleitung}
+\section{Matrizenmultiplikation \label{multiplikation:section:einleitung}}
+\rhead{Matrizenmultiplikation}
-Die Multiplikation zweier Matrizen ist eine wichtige Operation die in verschiedensten Teilen der Mathematik Anwendung findet.
-Die Beschreibung der Multiplikation aus der Definition 2.10 (\textcolor{blue} {Kein Hyperlink zu einer Definition?)}:
+Die Multiplikation zweier Matrizen ist eine wichtige Operation, die in verschiedensten Teilen der Mathematik Anwendung findet.
+Die Beschreibung der Multiplikation aus der Definition 2.10:
Eine $m\times n$-Matrix $\mathbf{A}\in M_{m\times n}(\Bbbk)$ und eine
$n\times p$-Matrix $\mathbf{B}\in M_{n\times l}(\Bbbk)$ haben als Produkt
eine $n\times l$-Matrix $\mathbf{C}=\mathbf{AB}\in M_{n\times l}(\Bbbk)$ mit den
Koeffizienten
\begin{equation}
-c_{ij} = \sum_{k=1}^n a_{ik} b_{kj}.
+C_{ij} = \sum_{k=1}^n A_{ik} B_{kj}.
\label{multiplikation:eq:MM}
\end{equation}
-Grafisch kann die Matrizenmultiplikation $AB=C$ wie in \ref{multiplikation:fig:mm_viz} visualisiert werden.
-\begin{figure}
- \center
- \includegraphics[]{papers/multiplikation/images/mm_visualisation}
- \caption{Matrizen Multiplikation}
- \label{multiplikation:fig:mm_viz}
-\end{figure}
-Im Fall einer Matrizengr\"osse von $2\times 2$
+Grafisch kann die Matrizenmultiplikation $\mathbf{AB}=\mathbf{C}$ wie in Abbildung \ref{multiplikation:fig:mm_viz} visualisiert werden.
+Im Fall einer Matrizengr\"osse von $2\times 2$ kann die Matrixgleichung
\begin{equation}
\begin{bmatrix}
A_{11} & A_{12}\\
@@ -40,7 +34,7 @@ C_{11} & C_{12}\\
C_{21} & C_{22}
\end{bmatrix}
\end{equation}
-kann die Gleichung der einzelnen Terme
+explizt als Gleichungen
\begin{equation} \label{multiplikation:eq:MM_exp}
\begin{split}
C_{11} &= A_{11} \cdot B_{11} + A_{12} \cdot B_{21}\\
@@ -49,4 +43,10 @@ C_{21} &= A_{21} \cdot B_{11} + A_{22} \cdot B_{21}\\
C_{22} &= A_{21} \cdot B_{12} + A_{22} \cdot B_{22}
\end{split}
\end{equation}
-explizit geschrieben werden.
+der einzelnen Terme geschrieben werden.
+\begin{figure}
+ \center
+ \includegraphics[]{papers/multiplikation/images/mm_visualisation}
+ \caption{Grafische Illustration der Matrizenmultiplikation}
+ \label{multiplikation:fig:mm_viz}
+\end{figure}
diff --git a/buch/papers/multiplikation/images/algo_tab.pdf b/buch/papers/multiplikation/images/algo_tab.pdf
new file mode 100644
index 0000000..7f2bb4f
--- /dev/null
+++ b/buch/papers/multiplikation/images/algo_tab.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/algo_tab.tex b/buch/papers/multiplikation/images/algo_tab.tex
new file mode 100644
index 0000000..50ce392
--- /dev/null
+++ b/buch/papers/multiplikation/images/algo_tab.tex
@@ -0,0 +1,122 @@
+\documentclass{article}
+\usepackage[left=25mm,right=25mm,top=25mm,bottom=25mm]{geometry}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{geometry}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{algorithm}
+\usepackage{algpseudocode}
+\usepackage{mathrsfs}
+\usepackage{amsfonts}
+\usepackage{amsthm}
+\usepackage{lipsum}
+\usepackage{amscd}
+\usepackage{graphicx}
+\usepackage{fancyhdr}
+\usepackage{textcomp}
+\usepackage{pgfplots}
+\usepackage{txfonts}
+\usepackage[all]{xy}
+\usepackage{paralist}
+\usepackage[colorlinks=true]{hyperref}
+\usepackage{array}
+\usepackage{tikz}
+\usepackage{slashed}
+\usepackage{pdfpages}
+\usepackage{multicol}
+\usepackage{cite}
+\usepackage{url}
+\usepackage{amsmath,amsfonts,amssymb}
+\usepackage{tikz}
+\usetikzlibrary{arrows,matrix,positioning}
+\usetikzlibrary{overlay-beamer-styles}
+\usetikzlibrary{matrix.skeleton}
+\usetikzlibrary{automata,positioning}
+\usetikzlibrary{decorations.text}
+\usepackage{listings}
+\usepackage{multirow}
+\usepackage{color}
+
+\begin{document}
+
+
+
+\begin{table}[t]
+ \begin{tabular}{ll}
+ \begin{minipage}{0.4\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:b1}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{B1}{$a, b$}
+ \State \textbf{return} $a+b$
+ \EndFunction
+ \State
+ \State
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ &
+ \begin{minipage}{0.4\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:b2}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{B2}{$a, b$}
+ \State $ x \gets a+b $
+ \State $ y \gets a \cdot b $
+ \State \textbf{return} $x+y$
+ \EndFunction
+ \end{algorithmic}
+\end{algorithm}
+
+ \end{minipage}
+ \end{tabular}
+\end{table}
+
+\begin{table}
+ \begin{tabular}[t]{ll}
+ \begin{minipage}{0.4\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \label{multiplikation:alg:linear}
+ \Function{L}{$\mathbf{a}, \mathbf{b}$,n}
+ \State $ sum \gets 0$
+ \For{$i = 0,1,2 \dots,n$}
+ \State $ sum \gets sum + A[i] \cdot B[i] $
+ \EndFor
+
+ \State \textbf{return} $sum$
+
+ \EndFunction
+ \State
+ \State
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ &
+ \begin{minipage}{0.4\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:q1}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{Q}{$\mathbf{A}, \mathbf{B}$,n}
+ \State $ sum \gets 0$
+ \For{$i = 0,1,2 \dots,n$}
+ \For{$j = 0,1,2 \dots,n$}
+ \State $ sum \gets sum + A[i] \cdot B[j] $
+ \EndFor
+ \EndFor
+ \State \textbf{return} $sum$
+ \EndFunction
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ \end{tabular}
+\end{table}
+
+dhdfh
+\end{document}
diff --git a/buch/papers/multiplikation/images/bigo.pdf b/buch/papers/multiplikation/images/bigo.pdf
index dfa2ba4..2519553 100644
--- a/buch/papers/multiplikation/images/bigo.pdf
+++ b/buch/papers/multiplikation/images/bigo.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/bigo.tex b/buch/papers/multiplikation/images/bigo.tex
index e3293e4..63fd0fd 100644
--- a/buch/papers/multiplikation/images/bigo.tex
+++ b/buch/papers/multiplikation/images/bigo.tex
@@ -39,67 +39,72 @@
\begin{document}
\begin{tikzpicture}
+
\begin{axis}[
- axis lines = left,
- xlabel = $n$ (Data Input),
- ylabel = {$t$ (time)},
- legend pos=north east,
+ xmode=log, ymode=log,
+ xmin=1e-0, xmax=5000,
+ ymin=10e-1, ymax=1e7,
+ grid=both,
+ major grid style={black!50},
+ xlabel = data input size,
+ ylabel = {time},
+ legend pos=north west,
very thick,
- ymax = 500,
yticklabels=\empty,
xticklabels=\empty,
scale only axis=true,
- width=12cm, height=6cm,
+ width=12cm, height=8cm,
+ legend cell align={left}
]
\addplot [
- domain= 1:20,
+ domain= 1:5000,
samples=100,
color=red,
]
{1};
\addlegendentry{$\mathcal{O}(1)$}
\addplot [
- domain= 1:20,
+ domain= 1:5000,
samples=100,
color=green,
]
{x};
\addlegendentry{$\mathcal{O}(n)$}
\addplot [
- domain= 1:20,
+ domain= 1:50000,
samples=100,
color=blue,
]
{x^2};
-\addlegendentry{$\mathcal{O}(n^2)$}
+\addlegendentry{$\mathcal{O}\left(n^2\right)$}
\addplot [
- domain= 1:10,
+ domain= 1:500,
samples=100,
color=purple,
]
{x^3};
-\addlegendentry{$\mathcal{O}(n^3)$}
+\addlegendentry{$\mathcal{O}\left(n^3\right)$}
\addplot [
- domain= 1:10,
+ domain= 1:500,
samples=100,
color=black,
]
-{exp(x)};
-\addlegendentry{$\mathcal{O}(e^n)$}
+{exp(x) - 1.7};
+\addlegendentry{$\mathcal{O}\left(e^n\right)$}
\addplot [
- domain= 1:20,
+ domain= 1:5000,
samples=100,
color=orange,
]
-{log2(x)};
+{log2(x)+1};
\addlegendentry{$\mathcal{O}(\log n)$}
\addplot [
- domain= 1:20,
+ domain= 1:5000,
samples=100,
color=gray,
]
-{x*log2(x)};
+{x*log2(x)+1};
\addlegendentry{$\mathcal{O}(n \log n)$}
\end{axis}
\end{tikzpicture}
diff --git a/buch/papers/multiplikation/images/c_meas_4096.pdf b/buch/papers/multiplikation/images/c_meas_4096.pdf
new file mode 100644
index 0000000..304015a
--- /dev/null
+++ b/buch/papers/multiplikation/images/c_meas_4096.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/meas_1024.pdf b/buch/papers/multiplikation/images/meas_1024.pdf
new file mode 100644
index 0000000..70c7ec1
--- /dev/null
+++ b/buch/papers/multiplikation/images/meas_1024.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/meas_c.pdf b/buch/papers/multiplikation/images/meas_c.pdf
new file mode 100644
index 0000000..521151e
--- /dev/null
+++ b/buch/papers/multiplikation/images/meas_c.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/meas_c.tex b/buch/papers/multiplikation/images/meas_c.tex
new file mode 100644
index 0000000..12d3527
--- /dev/null
+++ b/buch/papers/multiplikation/images/meas_c.tex
@@ -0,0 +1,150 @@
+
+\documentclass[border=10pt,varwidth]{standalone}
+\usepackage[left=25mm,right=25mm,top=25mm,bottom=25mm]{geometry}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{geometry}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{mathrsfs}
+\usepackage{amsfonts}
+\usepackage{amsthm}
+\usepackage{lipsum}
+\usepackage{amscd}
+\usepackage{graphicx}
+\usepackage{fancyhdr}
+\usepackage{textcomp}
+\usepackage{pgfplots}
+\usepackage{txfonts}
+\usepackage[all]{xy}
+\usepackage{paralist}
+\usepackage[colorlinks=true]{hyperref}
+\usepackage{array}
+\usepackage{tikz}
+\usepackage{slashed}
+\usepackage{pdfpages}
+\usepackage{cite}
+\usepackage{url}
+\usepackage{amsmath,amsfonts,amssymb}
+\usepackage{tikz}
+\usepackage{pgfplotstable}
+\usetikzlibrary{arrows,matrix,positioning}
+\usetikzlibrary{overlay-beamer-styles}
+\usetikzlibrary{matrix.skeleton}
+\usetikzlibrary{automata,positioning}
+\usetikzlibrary{decorations.text}
+\usepackage{listings}
+\usepackage{multirow}
+\usepackage{color}
+
+\begin{document}
+
+\begin{tikzpicture}
+\begin{axis}[
+xmode=log, ymode=log,
+xmin=30, xmax=10000,
+ymin=1e-5, ymax=2e4,
+grid=both,
+major grid style={black!50},
+xlabel = data input ($n$),
+ylabel = {time ($s$)},
+legend pos=north west,
+very thick,
+scale only axis=true,
+width=12cm, height=8cm,
+ log basis x={10},
+ legend cell align={left}
+]
+\addlegendentry{Winograd}
+\addplot[ color=blue,
+ error bars/.cd, y dir=both, y explicit,
+] coordinates {
+%(2,1e-07)
+%(4,5e-07)
+%(8,2.0000000000000003e-06)
+%(16,1.1999999999999999e-05)
+(32,8.329999999999999e-05)
+(64,0.0006479)
+(128,0.0052873)
+(256,0.052674599999999995)
+(512,0.5249752000000001)
+(1024,4.671161)
+(2048,136.6769777)
+(4096,1179.261048)
+(8192,10071.512655)
+};
+\addlegendentry{Strassen}
+\addplot [ color=black,
+]coordinates {
+%(2,1e-07)
+%(4,2.1e-06)
+%(8,1.13e-05)
+%(16,7.07e-05)
+(32,0.0005041)
+(64,0.003596)
+(128,0.0254481)
+(256,0.1781817)
+(512,1.2555)
+(1024,8.8302371)
+(2048,61.9018691)
+(4096,414.648901)
+(8192,3014.235467)
+};
+
+\addlegendentry{MM div and conq}
+\addplot[ color=green,
+] coordinates {
+%(2,3e-07)
+%(4,1.1e-06)
+%(8,8.6e-06)
+%(16,7.819999999999999e-05)
+(32,0.0005940000000000001)
+(64,0.0044339)
+(128,0.0348443)
+(256,0.29484730000000003)
+(512,2.2228507)
+(1024,17.659234500000004)
+(2048,141.6103936)
+(4096,1147.106865)
+(8192,9606.402522)
+};
+
+\addlegendentry{MM}
+\addplot [ color=red,
+]coordinates {
+%(2,0.0)
+%(4,3e-07)
+%(8,1.8000000000000001e-06)
+%(16,1.1999999999999999e-05)
+(32,8.93e-05)
+(64,0.0006923)
+(128,0.0056842)
+(256,0.051771500000000005)
+(512,0.5062468000000001)
+(1024,4.5048086)
+(2048,129.2894619)
+(4096,1111.312696)
+(8192,9376.173434)
+};
+\addlegendentry{BLAS}
+\addplot[ color=purple,
+] coordinates {
+%(2,1e-07)
+%(4,0.0)
+%(8,1e-07)
+%(16,3.9e-06)
+(32,2.1000000000000002e-05)
+(64,0.00018580000000000002)
+(128,0.0012649)
+(256,0.0096489)
+(512,0.0773765)
+(1024,0.7643868)
+(2048,7.6320993999999995)
+(4096,55.845038)
+(8192,478.429957)
+};
+\end{axis}
+\end{tikzpicture}
+
+\end{document}
diff --git a/buch/papers/multiplikation/images/meas_python.pdf b/buch/papers/multiplikation/images/meas_python.pdf
new file mode 100644
index 0000000..fe89773
--- /dev/null
+++ b/buch/papers/multiplikation/images/meas_python.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/meas_python.tex b/buch/papers/multiplikation/images/meas_python.tex
new file mode 100644
index 0000000..ad43cf6
--- /dev/null
+++ b/buch/papers/multiplikation/images/meas_python.tex
@@ -0,0 +1,145 @@
+
+\documentclass[border=10pt,varwidth]{standalone}
+\usepackage[left=25mm,right=25mm,top=25mm,bottom=25mm]{geometry}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{geometry}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{mathrsfs}
+\usepackage{amsfonts}
+\usepackage{amsthm}
+\usepackage{lipsum}
+\usepackage{amscd}
+\usepackage{graphicx}
+\usepackage{fancyhdr}
+\usepackage{textcomp}
+\usepackage{pgfplots}
+\usepackage{txfonts}
+\usepackage[all]{xy}
+\usepackage{paralist}
+\usepackage[colorlinks=true]{hyperref}
+\usepackage{array}
+\usepackage{tikz}
+\usepackage{slashed}
+\usepackage{pdfpages}
+\usepackage{cite}
+\usepackage{url}
+\usepackage{amsmath,amsfonts,amssymb}
+\usepackage{tikz}
+\usepackage{pgfplotstable}
+\usetikzlibrary{arrows,matrix,positioning}
+\usetikzlibrary{overlay-beamer-styles}
+\usetikzlibrary{matrix.skeleton}
+\usetikzlibrary{automata,positioning}
+\usetikzlibrary{decorations.text}
+\usepackage{listings}
+\usepackage{multirow}
+\usepackage{color}
+
+\begin{document}
+
+\begin{tikzpicture}
+\begin{axis}[
+xmode=log, ymode=log,
+xmin=30, xmax=4200,
+ymin=0.01, ymax=70000,
+grid=both,
+major grid style={black!50},
+xlabel = data input ($n$),
+ylabel = {time ($s$)},
+legend pos=north west,
+very thick,
+scale only axis=true,
+width=12cm, height=8cm,
+ log basis x={10},
+ legend cell align={left}
+]
+\addlegendentry{Winograd}
+\addplot[ color=blue,
+] coordinates {
+% (2, 2.7895e-05 )
+% (4, 0.000104904)
+% (8, 0.000552893)
+% (16, 0.0045557 )
+(32, 0.0187144 )
+(64, 0.153069 )
+(128, 1.19476 )
+(256, 8.29899 )
+(512, 68.3699 )
+(1024,537.374 )
+(2046,4884.61)
+(4096,43597.1)
+};
+\addlegendentry{Strassen}
+\addplot [ color=black,
+]coordinates {
+ % (2,2.09808e-05 )
+ % (4,0.000174284 )
+ % (8,0.000943899 )
+ % (16,0.00475407 )
+ (32,0.0485256 )
+ (64,0.220414 )
+ (128,1.44718 )
+ (256,9.93866 )
+ (512,63.961 )
+(1024,461.494 )
+(2046,3860.57)
+(4096,22904.3)
+};
+
+\addlegendentry{MM div and conq}
+\addplot[ color=green,
+] coordinates {
+ % (2,8.10623e-06 )
+ % (4,9.01222e-05 )
+ % (8,0.000729084 )
+ % (16,0.00497079 )
+ (32,0.02719 )
+ (64,0.26528 )
+ (128,1.77787 )
+ (256,13.27 )
+ (512,105.397 )
+(1024,847.321 )
+(2046,7375.93)
+(4096,58466)
+};
+
+\addlegendentry{MM}
+\addplot [ color=red,
+]coordinates {
+ % (2,1.85966e-05)
+ % (4,8.29697e-05 )
+ % (8,0.000547171)
+ % (16,0.00305367 )
+ (32, 0.0240743 )
+ (64, 0.186895 )
+ (128, 1.56369 )
+ (256, 11.0062 )
+ (512, 85.4768)
+(1024,750.757 )
+(2046,6154.18)
+(4096,46813.3)
+};
+% \addlegendentry{NumPy}
+% \addplot[ color=blue,
+% ] coordinates {
+% % (2,1.83582e-05 )
+% % (4,7.86781e-06)
+% % (8,1.00136e-05)
+% % (16,5.4121e-05 )
+% (32,4.26769e-05)
+% (64,0.000118494)
+% (128,0.000244141 )
+% (256,0.000695705 )
+% (512,0.00221705 )
+% (1024,0.0188088 )
+% (2046,0.215739)
+% (4096,1.49159)
+% };
+
+\end{axis}
+\end{tikzpicture}
+
+\end{document}
diff --git a/buch/papers/multiplikation/images/strassen.pdf b/buch/papers/multiplikation/images/strassen.pdf
index 9899dcb..d150125 100644
--- a/buch/papers/multiplikation/images/strassen.pdf
+++ b/buch/papers/multiplikation/images/strassen.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/strassen.tex b/buch/papers/multiplikation/images/strassen.tex
index 797772b..b51a9d5 100644
--- a/buch/papers/multiplikation/images/strassen.tex
+++ b/buch/papers/multiplikation/images/strassen.tex
@@ -56,7 +56,7 @@
A_{11}B_{11} \& A_{12}B_{12} \& A_{21}B_{12} \& A_{22}B_{12} \\
A_{11}B_{22} \& A_{12}B_{22} \& A_{21}B_{22} \& A_{22}B_{22} \\
};}
-
+
\foreach \j in {1,...,7}
{
\matrix(M\i\j)[matrix of math nodes,nodes in empty cells,
@@ -76,18 +76,18 @@
}
\huge{
- \node at (-3,-20) {$C_{22}=$};
- \node at (-3,-15) {$C_{21}=$} ;
- \node at (-3,-10) {$C_{12}=$} ;
- \node at (-3,-5) {$C_{11}=$} ;
-
- \node at (5,-2) {I};
- \node at (10,-2) {II};
- \node at (15,-2) {III};
- \node at (20,-2) {IV};
- \node at (25,-2) {V};
- \node at (30,-2) {VI};
- \node at (35,-2) {VII};
+ \node at (-3,-20) {$\mathbf{C}_{22}=$};
+ \node at (-3,-15) {$\mathbf{C}_{21}=$} ;
+ \node at (-3,-10) {$\mathbf{C}_{12}=$} ;
+ \node at (-3,-5) {$\mathbf{C}_{11}=$} ;
+
+ \node at (5,-2) {$\mathbf{P}$};
+ \node at (10,-2) {$\mathbf{Q}$};
+ \node at (15,-2) {$\mathbf{R}$};
+ \node at (20,-2) {$\mathbf{S}$};
+ \node at (25,-2) {$\mathbf{T}$};
+ \node at (30,-2) {$\mathbf{U}$};
+ \node at (35,-2) {$\mathbf{V}$};
}
@@ -100,41 +100,132 @@
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X4-3-3)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X4-4-4)] {};
+% P
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M11-4-1)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M11-1-4)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M11-4-4)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M11-1-1)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M14-1-4)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M14-2-4)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M15-4-1)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M15-4-2)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M17-2-4)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M17-4-4)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M17-2-2)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M17-4-2)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M23-3-1)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M23-4-1)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M25-4-1)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M25-4-2)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M21-4-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M21-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M21-4-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M21-1-1)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M32-1-4)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M32-1-3)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M34-1-4)] {};
-\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M34-2-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M31-4-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M31-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M31-4-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M31-1-1)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M41-4-1)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M41-1-4)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M41-4-4)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M41-1-1)] {};
+
+% Q
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M12-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M12-1-3)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M22-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M22-1-3)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M32-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M32-1-3)] {};
+
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M42-1-4)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M42-1-3)] {};
+
+% R
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M13-3-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M13-4-1)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M23-3-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M23-4-1)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M33-3-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M33-4-1)] {};
+
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M43-3-1)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M43-4-1)] {};
+
+% S
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M14-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M14-2-4)] {};
+
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M24-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M24-2-4)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M34-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M34-2-4)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M44-1-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M44-2-4)] {};
+
+%T
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M15-4-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M15-4-2)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M25-4-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M25-4-2)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M35-4-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M35-4-2)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M45-4-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M45-4-2)] {};
+
+% U
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M16-1-3)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M16-1-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M16-3-3)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M16-3-1)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M26-1-3)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M26-1-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M26-3-3)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M26-3-1)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M36-1-3)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M36-1-1)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M36-3-3)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M36-3-1)] {};
+
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M46-1-3)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M46-1-1)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M46-3-3)] {};
\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M46-3-1)] {};
+
+%V
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M17-2-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M17-4-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M17-2-2)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M17-4-2)] {};
+
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M27-2-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M27-4-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M27-2-2)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M27-4-2)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M37-2-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M37-4-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M37-2-2)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M37-4-2)] {};
+
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M47-2-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M47-4-4)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M47-2-2)] {};
+\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M47-4-2)] {};
+
+
+
+
+
\end{tikzpicture}
\end{document}
diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex
index 83be814..51872f5 100755
--- a/buch/papers/multiplikation/loesungsmethoden.tex
+++ b/buch/papers/multiplikation/loesungsmethoden.tex
@@ -4,18 +4,17 @@
% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
%
-\section{L\"osungsmethoden}
-\rhead{L\"osungsmethoden}
+\section{Algorithmen}
+\rhead{Algorithmen}
-In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultiplikation vorgestellt, auch werden Libraries zur automatisierten Verwendung von vordefinierten Algorithmen gezeigt.
+In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultiplikation vorgestellt, auch werden Bibliotheken zur unkomplizierten Verwendung von vordefinierten Algorithmen gezeigt.
\subsection{Standard Algorithmus}
-Der Standard Methode kann im Algorithmus \ref{multiplikation:alg:smm} entnommen werden.
-Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt implementiert.
-Die \texttt{For i} Schleife iteriert \"uber alle Zeilen der $\mathbf{A}$ Matrix, die \texttt{For j} Schleife iteriert \"uber alle Spalten der $\mathbf{B}$ Matrix und die \texttt{For k} Schleife iteriert \"uber alle Eintr\"age dieser Zeilen bzw. Spalten.
-
-\begin{algorithm}\caption{Matrix Multiplication}
+Die Standardmethode ist im Algorithmus \ref{multiplikation:alg:smm} implementiert.
+Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt umgesetzt.
+Die \texttt{for i} Schleife iteriert \"uber alle Zeilen der $\mathbf{A}$ Matrix, die \texttt{for j} Schleife iteriert \"uber alle Spalten der $\mathbf{B}$ Matrix und die \texttt{for k} Schleife iteriert \"uber alle Eintr\"age dieser Zeilen bzw. Spalten.
+\begin{algorithm}\footnotesize\caption{Matrizenmultiplikation}
\label{multiplikation:alg:smm}
\setlength{\lineskip}{7pt}
\begin{algorithmic}[1]
@@ -38,17 +37,18 @@ Die \texttt{For i} Schleife iteriert \"uber alle Zeilen der $\mathbf{A}$ Matrix,
\EndFunction
\end{algorithmic}
\end{algorithm}
-
-Die Laufzeit dieser Struktur mit drei \texttt{For} Schleifen ist $\mathcal{O}(n^3)$
+Die Laufzeit dieser Struktur mit drei \texttt{for} Schleifen ist $\mathcal{O} (n^3)$.
\subsubsection{Divide and Conquer Methode}
-F\"ur gewisse Algorithmen f\"uhren \textit{Divide and Conquer} Ans\"atze zu markant besseren Laufzeiten.
-Das bekannteste Beispiel ist wohl die \textit{Fast Fourier Transform} wobei die Laufzeit von $\mathcal{O}(n^2)$ zu $\mathcal{O}(n \log n)$ verbessert werden kann.
+F\"ur gewisse Algorithmen f\"uhren \textit{Divide and Conquer} Ans\"atze \cite{multiplikation:DAC} zu markant besseren Laufzeiten.
+Die Grundidee ist, dass ein Problem in mehrere, meist simplere und kleinere Teilprobleme aufgeteilt wird.
+Das bekannteste Beispiel ist wohl die \textit{Fast Fourier Transform} wobei die Laufzeit von $\mathcal{O} (n^2)$ zu $\mathcal{O}(n \log n)$ verbessert werden kann.
Die Matrizenmultiplikation kann ebenfalls mit solch einem Ansatz berechnet werden.
-Zur vereinfachten Veranschaulichung kann die Situation, mit $\mathbf{A}$ und $\mathbf{B}$ der gr\"osse $2^n \times 2^n$ verwendet werden.
-Die Matrizen $\mathbf{A}$ und $\mathbf{B}$ werden in jeweils vier Blockmatrizen der gr\"osse $2^{n-1} \times 2^{n-1}$
+Zur vereinfachten Veranschaulichung kann die Situation mit $\mathbf{A}$ und $\mathbf{B}$ der Gr\"osse $2^n \times 2^n$ verwendet werden.
+Die Matrizen $\mathbf{A}$ und $\mathbf{B}$ werden in jeweils vier Blockmatrizen der Gr\"osse $2^{n-1} \times 2^{n-1}$ aufgeteilt.
+Das Matrizen Produkt
\begin{equation}
\mathbf{A}\mathbf{B}=
\begin{bmatrix}
@@ -63,20 +63,18 @@ Die Matrizen $\mathbf{A}$ und $\mathbf{B}$ werden in jeweils vier Blockmatrizen
\begin{bmatrix}
\mathbf{C}_{11} & \mathbf{C}_{12}\\
\mathbf{C}_{21} & \mathbf{C}_{22}
-\end{bmatrix}
+\end{bmatrix},
\end{equation}
-aufgeteilt.
-Die Berechnung
-\begin{equation}
-\mathbf{C}_{ij} = \sum_{k=1}^n \mathbf{A}_{ik} \mathbf{B}_{kj}
+mit \begin{equation}
+\mathbf{C}_{ij} = \sum_{k=1}^{2n} \mathbf{A}_{ik} \mathbf{B}_{kj},
\label{multiplikation:eq:MM_block}
\end{equation}
-ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, wobei hier f\"ur die Multiplikation die Matrizenmultiplikation verwendet wird.
+ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, f\"ur die Multiplikation der Untermatrize $\mathbf{A}_{ik}$ und $\mathbf{B}_{kj}$ wird die Matrizenmultiplikation verwendet.
Der Algorithmus \ref{multiplikation:alg:devide_mm} zeigt den \textit{Divide and Conquer} Ansatz,
Der Grundstruktur dieser Methode besteht aus dem rekursiven Aufruf der Funktion mit den erzeugten Blockmatrizen.
Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$ durchgef\"uhrt.
-\begin{algorithm}\caption{Divide and Conquer Matrix Multiplication}
+\begin{algorithm}\footnotesize\caption{Divide and Conquer Matrizenmultiplikation}
\setlength{\lineskip}{7pt}
\label{multiplikation:alg:devide_mm}
\begin{algorithmic}
@@ -105,37 +103,33 @@ Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$
\end{algorithmic}
\end{algorithm}
-Die Laufzeit dieser rekursiven Funktion kann mit dem \textit{Master Theorem} berechnet werden.
-Ohne auf diesen vertieft einzugehen, bestimmt die Anzahl rekursiver Aufrufe der Funktion die Laufzeit.
-In diesem Fall wird die Funktion pro Durchlauf acht mal rekursiv aufgerufen, dies f\"uhrt
+Die Laufzeit dieser rekursiven Funktion kann mit dem \textit{Master Theorem} \cite{multiplikation:master_theorem} berechnet werden. Das \textit{Master Theorem} bestimmt die Zeitkomplexit\"at von rekursiven Algorithmen.
+Ohne auf dieses vertieft einzugehen, bestimmt die Anzahl rekursiver Aufrufe $\mathcal{T} $ der Funktion die Laufzeit.
+In diesem Fall wird die Funktion pro Durchlauf acht mal rekursiv aufgerufen, dies f\"uhrt zu
\begin{equation} \label{multiplikation:eq:laufzeitdac}
- \mathcal{T}(n) =
- \begin{cases}
- 1 & \text{if } n \leq 2\\
- 8 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2
- \end{cases} = \mathcal{O}(n^{\log_2 8}) = \mathcal{O}(n^{3})
+ \mathcal{T}(n) = 8 \cdot \mathcal{T} \left(\frac{n}{2}\right ) + n^2 = \mathcal{O}(n^{\log_2 8}) = \mathcal{O} (n^{3} ),
\end{equation}
-zu einer kubischen Laufzeit.
+also einer kubischen Laufzeit.
Die Addition zweier Matrizen $\mathbf{A} + \mathbf{B} = \mathbf{C}$ hat eine Laufzeit von $\mathcal{O}(n^{2})$ und kann neben dem dominierendem Anteil von $\mathcal{O}(n^{3})$ ignoriert werden.
In diesem Fall hat der \textit{Divide and Conquer} Ansatz zu keiner Verbesserung gef\"uhrt.
-\subsection{Strassen's Algorithmus}
+\subsection{Strassens Algorithmus}
-Strassen's Algorithmus \cite{multiplikation:strassen_1969} beschreibt die Matrizenmultiplikation mit einer Vielzahl von Additionen, Subtraktionen und Multiplikationen.
-Die Grundlegenden Terme
+Strassens Algorithmus \cite{multiplikation:strassen_1969} beschreibt die Matrizenmultiplikation mit einer Vielzahl von Additionen, Subtraktionen und Multiplikationen von Blockmatrizen.
+Die sieben grundlegenden Terme
\begin{equation} \label{multiplikation:eq:strassen}
\begin{split}
-\text{\textbf{P}} &= (\mathbf{A}_{11} + \mathbf{A}_{22}) \cdot (\mathbf{B}_{11} + \mathbf{B}_{22}) \\
-\text{\textbf{Q}} &= (\mathbf{A}_{21} + \mathbf{A}_{22}) \cdot \mathbf{B}_{11} \\
-\text{\textbf{R}} &= \mathbf{A}_{11} \cdot (\mathbf{B}_{12}-\mathbf{B}_{22}) \\
-\text{\textbf{S}} &= \mathbf{A}_{22} \cdot (-\mathbf{B}_{11}+\mathbf{B}_{21}) \\
-\text{\textbf{T}} &= (\mathbf{A}_{11} + \mathbf{A}_{12}) \cdot \mathbf{B}_{22} \\
-\text{\textbf{U}} &= (-\mathbf{A}_{11} + \mathbf{A}_{21}) \cdot (\mathbf{B}_{11} + \mathbf{B}_{12}) \\
-\text{\textbf{V}} &= (\mathbf{A}_{12} - \mathbf{A}_{22}) \cdot (\mathbf{B}_{21} + \mathbf{B}_{22})
+\text{\textbf{P}} &= \left(\mathbf{A}_{11} + \mathbf{A}_{22}\right ) \cdot \left(\mathbf{B}_{11} + \mathbf{B}_{22}\right ) \\
+\text{\textbf{Q}} &= \left(\mathbf{A}_{21} + \mathbf{A}_{22}\right ) \cdot \mathbf{B}_{11} \\
+\text{\textbf{R}} &= \mathbf{A}_{11} \cdot \left(\mathbf{B}_{12}-\mathbf{B}_{22}\right ) \\
+\text{\textbf{S}} &= \mathbf{A}_{22} \cdot \left(-\mathbf{B}_{11}+\mathbf{B}_{21}\right ) \\
+\text{\textbf{T}} &= \left(\mathbf{A}_{11} + \mathbf{A}_{12}\right ) \cdot \mathbf{B}_{22} \\
+\text{\textbf{U}} &= \left(-\mathbf{A}_{11} + \mathbf{A}_{21}\right ) \cdot \left(\mathbf{B}_{11} + \mathbf{B}_{12}\right ) \\
+\text{\textbf{V}} &= \left(\mathbf{A}_{12} - \mathbf{A}_{22}\right ) \cdot \left(\mathbf{B}_{21} + \mathbf{B}_{22}\right )
\end{split}
\end{equation}
-aus $\mathbf{A}$ und $\mathbf{B}$, werden f\"ur die Berechnung der Matrix $\mathbf{C}$
+aus $\mathbf{A}$ und $\mathbf{B}$ werden f\"ur die Berechnung der Bl\"ocke
\begin{equation} \label{multiplikation:eq:strassen2}
\begin{split}
\mathbf{C}_{11} &= \text{\textbf{P}} + \text{\textbf{S}} - \text{\textbf{T}} + \text{\textbf{V}} \\
@@ -144,8 +138,8 @@ aus $\mathbf{A}$ und $\mathbf{B}$, werden f\"ur die Berechnung der Matrix $\math
\mathbf{C}_{22} &= \text{\textbf{P}} + \text{\textbf{R}} - \text{\textbf{Q}} + \text{\textbf{U}}
\end{split}
\end{equation}
-gebraucht.
-\begin{algorithm}\caption{Strassen Matrix Multiplication}
+der Matrix $\mathbf{C}$ gebraucht.
+\begin{algorithm}\footnotesize\caption{Strassen Matrizenmultiplikation}
\label{multiplikation:alg:strassen}
\setlength{\lineskip}{7pt}
\begin{algorithmic}
@@ -190,63 +184,86 @@ gebraucht.
\EndFunction
\end{algorithmic}
\end{algorithm}
-Strassens's Methode wird in der Abbildung \ref{multiplikation:fig:strassen} grafisch dargestellt.
+Strassens Methode wird in der Abbildung \ref{multiplikation:fig:strassen} grafisch dargestellt.
+Jedes Feld steht f\"ur eine Multiplikation zweier Matrizenelementen von $\mathbf{A}$ oder $\mathbf{B}$ .
+Die gr\"unen Felder auf der linken Seite, zeigen die Addition, welche f\"ur den dazugeh\"origen Term ben\"otigt wird.
+Die sieben Spalten beschreiben die Matrizen $\mathbf{P,Q,R, \ldots, V}$.
+Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition.
\begin{figure}
\center
\includegraphics[width=\linewidth]{papers/multiplikation/images/strassen.pdf}
- \caption{Strassen's Algorithmus}
+ \caption{Der Algorithmus von Strassen verwendet Multiplikationen zur Berechnung der sieben Block-Matrizen $\mathbf{P}$ bis $\mathbf{V}$ aus $\mathbf{A}$ und $\mathbf{B}$, aus denen sich die Blöcke es Produktes $\mathbf{C}=\mathbf{AB}$ ausschliesslich durch Addition und Subtraktion bilden lassen. Die einzelnen Felder in den Quadraten stellen alle möglichen Produkte von Matrizen $\mathbf{A}_{ik}$ und $\mathbf{B}_{jl}$ dar. In den grossen Quadraten am linken Rand sind diejenigen Produkte grün markiert, welche zusammen die entsprechenden Blöcke $\mathbf{C}_{il}$ von $\mathbf{C}$ ergeben. In den Spalten $\mathbf{P}$ bis $\mathbf{V}$ sind die Produkte farblich hervorgehoben, die in der Definition der entsprechenden Matrix vorkommen. Grün und rot symbolisieren die Vorzeichen, mit denen die Produkte kombiniert werden müssen}
\label{multiplikation:fig:strassen}
\end{figure}
Die Funktion wird sieben mal rekursiv aufgerufen.
-Dies f\"uhrt zu einer Laufzeit von
+Dies f\"uhrt nach dem \textit{Master Theorem} zu einer Laufzeit von
\begin{equation} \label{multiplikation:eq:laufzeitstrassen}
\mathcal{T}(n) =
-\begin{cases}
-1 & \text{if } n \leq 2\\
-7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2
-\end{cases} = \mathcal{O}(n^{\log_2 7}) = \mathcal{O}(n^{2.8074})
+7 \cdot \mathcal{T}\left(\frac{n}{2}\right) + n^2 = \mathcal{O}(n^{\log_2 7} ) = \mathcal{O}(n^{2.8074} )
\end{equation}
-und ist somit schneller als die Standard Methode.
+und ist somit schneller als die Standardmethode.
+Man beachte, dass die Anzahl von Additionen und Subtraktionen gr\"osser und die Anzahl der Multiplikationen kleiner wurde.
-\subsection{Winograd's Algorithmus}
+\subsection{Winograds Algorithmus}
-Ein weiterer Ansatz lieferte Shmuel Winograd im Jahre 1968 \cite{multiplikation:winograd_1968}.
-Er zeigte einen neuen Algorithmus f\"ur das
-\begin{equation}
- \langle x,y \rangle = \sum_{i=1}^{n}x_i y_i
+Einen weiteren Ansatz lieferte Shmuel Winograd im Jahre 1968 \cite{multiplikation:winograd_1968}.
+Er beschrieb einen neuen Algorithmus f\"ur das Skalarprodukt
+\begin{equation} \label{multiplikation:eq:skalar}
+ \langle x,y \rangle = \sum_{i=1}^{n}x_i y_i.
\end{equation}
-Skalarprodukt.
F\"ur jeden Vektor berechne
\begin{equation}
\xi = \sum_{j=1}^{ \lfloor n/2 \rfloor} x_{2j-1} \cdot x_{2j}
\end{equation}
und
\begin{equation}
- \eta = \sum_{j=1}^{ \lfloor n/2 \rfloor} y_{2j-1} \cdot y_{2j}.
+ \eta = \sum_{j=1}^{ \lfloor n/2 \rfloor} y_{2j-1} \cdot y_{2j},
\end{equation}
+die jeweils nur von $x$ und $y$ abhängen.
+Dazu werden $2 \cdot \lfloor n/2 \rfloor \leq n$ Multiplikationen benötigt.
Das Skalarprodukt ist nun geben mit
\begin{equation}
\langle x,y \rangle =
\begin{cases}
- \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta & \text{if $n$ is even}\\
- \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta + x_n y_n & \text{if $n$ is odd}.
+ \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta & \text{wenn $n$ gerade}\\
+ \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta + x_n y_n & \text{wenn $n$ ungerade}.
\end{cases}
\end{equation}
-
-Angenommen man hat $N$ Vektoren mit welchen man $T$ Skalarprodukte berechnen m\"ochte.
+Das Skalarprodukt kann also mit $ \lfloor \frac{n+1}{2} \rfloor$ weiteren Multiplikationen berechnet werden.
+Angenommen man hat $N$ Vektoren, mit welchen man $T$ Skalarprodukte berechnen m\"ochte.
Daf\"ur werden $N\lfloor n/2 \rfloor + T\lfloor (n+1)/2 \rfloor $ Multiplikationen ben\"otigt.
+Die Summen f\"ur $\xi$ und $\eta$ m\"ussen nur einmal berechnet werden.
+Für die ursprüngliche Gleichung \eqref{multiplikation:eq:skalar} für das Skalarprodukt benötigt man $Tn$ Multiplikationen.
+Damit können wir die Laufzeit der Methode von Winograd mit der Laufzeit der Standardmethode vergleichen. Sie ist kleiner als die Laufzeit für die Standardmethode, wenn gilt
+\begin{equation}\label{multiplikation:eq:eff}
+\begin{array}{crcl}
+ & N\lfloor n/2\rfloor + T\lfloor(n+1)/2\rfloor \approx Nn/2 + Tn/2 & \le & Tn \\
+\Leftrightarrow & Nn/2 & \le & Tn/2 \\
+\Leftrightarrow & N & \le & T.
+\end{array}
+\end{equation}
Eine Matrizenmultiplikation mit $\mathbf{A}$ einer $m \times n$ und $\mathbf{B}$ einer $n \times p$ Matrix, entspricht $N=m+p$ Vektoren mit welchen man $T=mp$ Skalarprodukte berechnet.
Dies f\"uhrt zu
\begin{equation}
(m+p) \left \lfloor \frac{n}{2} \right \rfloor + mp \left \lfloor \frac{n+1}{2} \right \rfloor = \frac{mn}{2} + \frac{pn}{2} + \frac{mpn}{2} + \frac{mp}{2}
\end{equation}
Multiplikationen.
-Wenn $m,p,n$ gross werden, dominiert der Term $\frac{mpn}{2}$ und es werden $\frac{mpn}{2}$ Multiplikationen ben\"otigt.
-Was im Vergleich zu den $mpn$ Multiplikation der Standard Methode nur die H\"alfte ist.
-Die Implementation kann im Algorithmus \ref{multiplikation:alg:winograd} entnommen werden.
-
-\begin{algorithm}\caption{Winograd Matrix Multiplication}
+Wenn $m,p,n$ gross werden, dominiert der Term $\frac{mpn}{2}$ und es werden $\frac{mpn}{2}$ Multiplikationen ben\"otigt, was im Vergleich zu den $mpn$ Multiplikation der Standardmethode nur die H\"alfte ist.
+Mit dem gleichen Ansatz wie in der Gleichung \eqref{multiplikation:eq:eff} aber mit quadratischen Matrizen, muss
+\begin{align}
+ \begin{split}
+N=2n, &\quad T = n^2 \\
+ 2n &\leq n^2 \\
+ 2 &\leq n
+\end{split}
+\end{align}
+sein, damit man etwas einspart.
+Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen werden.
+Falls $m=n=p$, werden $\frac{n^3}{2}$ Multiplikationen benötigt.
+Im Abschnitt \ref{muliplikation:sec:bigo} wurde bereits erläutert: falls $n \rightarrow \infty$ können Konstanten vernachlässigt werden und
+ somit entsteht für diesen Algorithmus wieder die ursprüngliche Laufzeit von $\mathcal{O}(n^3 )$.
+\begin{algorithm}\footnotesize\caption{Winograds Matrizenmultiplikation}
\setlength{\lineskip}{7pt}
\label{multiplikation:alg:winograd}
\begin{algorithmic}
@@ -297,13 +314,188 @@ Die Implementation kann im Algorithmus \ref{multiplikation:alg:winograd} entnomm
\end{algorithmic}
\end{algorithm}
-\subsection{Weitere Algorithmen}
-\textcolor{red}{TODO: BLAS}
+\subsection{Basic Linear Algebra Subprograms (BLAS)}
+
+Die gebräuchliche Methode f\"ur die Anwendung einer optimierten Matrizenmultiplikation ist die Verwendung einer Subroutine aus den \textit{Basic Linear Algebra Subprograms (BLAS)} \cite{multiplikation:BLAS}.
+Die meisten numerischen Bibliotheken von high-level Skriptsprachen wie \texttt{Matlab}, \texttt{NumPy (Python)}, \texttt{GNU Octave} oder \texttt{Mathematica} ben\"utzen eine Form von \textit{BLAS}.
+
+\textit{BLAS} sind dabei in drei unterschiedliche Levels aufgeteilt.
+
+\begin{itemize}
+ \item Level 1
+ \begin{itemize}
+ \item Operationen der Art: $\mathbf{y} \leftarrow \alpha \mathbf{x}+\mathbf{y}$
+ \item Dieses Level hat $\mathcal{O}(n)$ Charakteristik
+ \end{itemize}
+ \item Level 2
+ \begin{itemize}
+ \item Operationen der Art: $\mathbf{y} \leftarrow \alpha \mathbf{A}\mathbf{x}+\beta \mathbf{y}$
+ \item Dieses Level hat $\mathcal{O}(n^2)$ Charakteristik
+ \end{itemize}
+ \item Level 3
+ \begin{itemize}
+ \item Operationen der Art: $\mathbf{C} \leftarrow \alpha \mathbf{A}\mathbf{B}+\beta\mathbf{C}$
+ \item Dieses Level hat $\mathcal{O}(n^3)$ Charakteristik
+ \end{itemize}
+\end{itemize}
+
+Die \textit{BLAS} sind auf die modernen Computer Prozessoren optimiert und k\"onnen dank einer ausgeklügelter Verwendung der Speicherarchitektur zu erheblichen Leistungsoptimierungen f\"uhren.
+
-\section{Implementation}
+%\subsubsection{General Matrix Multiplication (GEMM)}
+%
+%Die \textit{Double-GEMM} \cite{multiplikation:DGEMM} ist definiert als:
+%
+%\textit{DGEMM performs one of the matrix-matrix operations}
+%$$
+% C := \alpha \cdot op( A )\cdot op( B ) + \beta \cdot C,
+% $$
+% \textit{where op( X ) is one of}
+%$$
+%op( X ) = X \quad \text{ or } \quad op( X ) = X^T,
+%$$
+% \textit{alpha and beta are scalars, and A, B and C are matrices, with op( A )
+% an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
+% }
+
+%Die Implementation von $\alpha\mathbf{A}\mathbf{B} + \beta \mathbf{C} = \mathbf{C}$, wobei $\alpha = 1.0$ und $\beta = 0.0$ in der \texttt{C}-Version von \textit{BLAS}, ist als
+%\begin{lstlisting}[style=multiplikationC]
+%cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
+% m, n, k, 1, A, m , B, k, 0, C, m);
+%\end{lstlisting}
+%definiert.
+
+
+
+\section{Implementation}\label{multiplikation:section:Implementation}
\rhead{Implementation}
-\textcolor{red}{TODO: messresultate}
+
+Folgende Algorithmen wurden jeweils in \texttt{C} und \texttt{Python} implementiert.
+\begin{itemize}
+ \item Standard Matrizenmultiplikation
+ \item \textit{Divide and Conquer} Matrizenmultiplikation
+ \item Strassens Matrizenmultiplikation
+ \item Winograds Matrizenmultiplikation
+ \item \texttt{BLAS} Matrizenmultiplikation in \texttt{C}
+ \item \texttt{Numpy} Matrizenmultiplikation in \texttt{Python}
+\end{itemize}
+
+Der Code kann im zum Buch gehörigem \textit{GitHub} \footnote{\url{https://github.com/AndreasFMueller/SeminarMatrizen.git}} Repository gefunden werden.
+Anzumerken ist, dass die Matrizenmultiplikation von \texttt{NumPy} als einzige Implementation Multiprocessing und Multithreading verwendet, dies f\"uhrt zu den tiefen Messzeiten.
+In Abbildung \ref{multiplikation:fig:python} und Abbildung \ref{multiplikation:fig:c_meas_4096} sind de Messresultate grafisch dargestellt. Die selben Messresultate sind tabellarisch in Tabelle \ref{multiplikation:tab:messung_Python} und Tabelle \ref{multiplikation:tab:messung_C} ersichtlich.
+
+Die gezeigten Algorithmen haben alle eine Laufzeit der Form $\mathcal{O}(n^k) $.
+Bei einer doppelt logarithmischen Darstellung unterscheiden sich diese in Geraden mit unterschiedlichen Steigungen.
+Bei den grafisch gezeigten Messresultate, können diese Steigungen gut erkannt werden, wobei die tiefere Laufzeit des Strassen Algorithmus eindrücklich zu sehen ist.
+Der benötigte Overhead der Algorithmen zeigt sich in unterschiedlichen $y$-Achsenschnittpunkte.
+
+In der Messung mit der Programmiersprache \texttt{C} kann ein typischer Cache-Effekt beobachtet wer-
+den.
+Bei den Algorithmen von Winograd und der Standardmethode hat bei einer Matrizengrösse von $n = 2048$ wohl eine Zeile der Matrix nicht an einer Cache Speicherstelle Platz.
+Diese beiden Algorithmen sind die Einzigen, welche \texttt{for}-Schleifen über die ganze Breite der Matrizen verwenden.
+Dies führt dazu, dass ganze Zeilen zwischengespeichert werden müssen.
+Bei den anderen Algorithmen ist dies nicht der Fall.
+
+Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{multiplikation:tab:pc_config} aufgelistet.
+
+
+\begin{table}
+ \begin{center}
+ \begin{tabular}{r l l l l l}
+ \hline
+ \hline
+ \textbf{n} & \textbf{MM (\textit{s})} & \textbf{MM DC (\textit{s})} & \textbf{Strassen (\textit{s})} & \textbf{Winograd (\textit{s})} & \textbf{BLAS (\textit{s})} \\
+ \hline
+ \multicolumn{6}{c}{} \\
+ \textbf{32} & \phantom{000}0.000089 & \phantom{000}0.000594 & \phantom{000}0.0005 & \phantom{0000}0.00008 & \phantom{00}0.000021 \\
+ \textbf{64} & \phantom{000}0.00069 & \phantom{000}0.0044 & \phantom{000}0.0036 & \phantom{0000}0.00064 & \phantom{00}0.00018 \\
+ \textbf{128} & \phantom{000}0.0057 & \phantom{000}0.035 & \phantom{000}0.025 & \phantom{0000}0.0052 & \phantom{00}0.0012 \\
+ \textbf{256} & \phantom{000}0.052 & \phantom{000}0.29 & \phantom{000}0.178 & \phantom{0000}0.053 & \phantom{00}0.0096 \\
+ \textbf{512} & \phantom{000}0.51 & \phantom{000}2.22 & \phantom{000}1.25 & \phantom{0000}0.55 & \phantom{00}0.077 \\
+ \textbf{1024} & \phantom{000}4.50 & \phantom{00}17.65 & \phantom{000}8.83 & \phantom{0000}4.67 & \phantom{00}0.764 \\
+ \textbf{2048} & \phantom{0}129.28 & \phantom{0}141.61 & \phantom{00}61.901 & \phantom{00}136.67 & \phantom{00}7.63 \\
+ \textbf{4096} & 1111.31 & 1147.10 & \phantom{0}414.64 & \phantom{0}1179.26 & \phantom{0}55.84 \\
+ \textbf{8192} & 9376.17 & 9606.40 & 3014.23 & 10071.51 & 478.42 \\
+ \multicolumn{6}{c}{} \\
+ \hline
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{Laufzeiten der verschieden Algorithmen in der Programmiersprache \texttt{C}}
+ \label{multiplikation:tab:messung_C}
+ \end{table}
+
+
+
+ \begin{table}
+ \begin{center}
+ \begin{tabular}{r l l l l l}
+ \hline
+ \hline
+ \textbf{n} & \textbf{MM (\textit{s})} & \textbf{MM DC (\textit{s})} & \textbf{Strassen (\textit{s})} & \textbf{Winograd (\textit{s})} & \textbf{NumPy(\textit{s})} \\
+ \hline
+ \multicolumn{6}{c}{} \\
+ \textbf{32} & \phantom{000}0.0240 & \phantom{0000}0.0271& \phantom{0000}0.04852 & \phantom{0000}0.01871 & 0.0000426 \\
+ \textbf{64} &\phantom{000} 0.186 & \phantom{0000}0.265 & \phantom{0000}0.2204 & \phantom{0000}0.1530& 0.000118 \\
+ \textbf{128} &\phantom{000} 1.563 & \phantom{0000}1.777 & \phantom{0000}1.447 & \phantom{0000}1.1947 & 0.000244 \\
+ \textbf{256} &\phantom{00} 11.006 & \phantom{000}13.27 & \phantom{0000}9.938 & \phantom{0000}8.298& 0.000695 \\
+ \textbf{512} &\phantom{00} 85.476 & \phantom{00}105.397 & \phantom{000}63.961 & \phantom{000}68.360 & 0.00221\\
+ \textbf{1024} &\phantom{0} 750.757 & \phantom{00}847.321 & \phantom{00}461.494 & \phantom{00}537.374 & 0.0188 \\
+ \textbf{2048} & 6154.18 & \phantom{0}7375.93 & \phantom{0}3860.57 & \phantom{0}4884.61 & 0.215 \\
+ \textbf{4096} & 46813.30 & 58466.00 & 22904.30 & 43597.10 & 1.49 \\
+ \multicolumn{6}{c}{} \\
+ \hline
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{Laufzeiten der verschieden Algorithmen in der Skriptsprache \texttt{Python}}
+ \label{multiplikation:tab:messung_Python}
+ \end{table}
+
+ \begin{table}
+ \begin{center}
+ \begin{tabular}{c c c c}
+ \hline
+ \hline
+ \textbf{CPU} & \textbf{OS} & \textbf{GPU } & \textbf{Memory } \\
+ \hline
+ \multicolumn{4}{c}{} \\
+ Intel® Core™ i7-4770K CPU & Ubuntu 20.04.2 LTS & Radeon RX 570 & 32 GB 1600 MHz \\
+ @ 3.50GHz × 8 & 64-bit & & \\
+ \multicolumn{4}{c}{} \\
+ \hline
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{Messsystem}
+ \label{multiplikation:tab:pc_config}
+ \end{table}
+
+\begin{figure}
+ \center
+ \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_c}
+ \caption{Doppelt logarithmisch dargestellte Laufzeiten, der verschieden Algorithmen, in der Programmiersprache \texttt{C}}
+ \label{multiplikation:fig:c_meas_4096}
+\end{figure}
+
+
+\begin{figure}
+ \center
+ \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_python}
+ \caption{Doppelt logarithmisch dargestellte Laufzeiten, der verschieden Algorithmen, in der Skriptsprache \texttt{Python}}
+ \label{multiplikation:fig:python}
+\end{figure}
\section{Fazit}
\rhead{Fazit}
+
+Wie man im Abschnitt \ref{multiplikation:section:Implementation} sehen kann, sind die gezeigten Algorithmen trotz der theoretisch geringeren Zeitkomplexitäten den Implementationen der numerischen Bibliotheken klar unterlegen.
+Ein optimierter Speicherzugriff hat einen weitaus grösseren Einfluss auf die Laufzeit als die Zeitkomplexität des Algorithmus.
+
+Doch haben Entdeckungen wie jene von Strassen und Winograd ihre Daseinsberechtigung.
+Nicht auf jeden Computersystemen können die \textit{BLAS} angewandt werden.
+Denke man an sehr kleine Mikrocontroller ohne Floatingpoint Recheneinheiten oder auch an \textit{Field Programmable Gate Arrays (FPGA's)}.
+Der Overhead der gezeigten Algorithmen ist in allen Fällen grösser als bei der Standardmethode (z.B. sieben rekursive Aufrufe gegenüber drei \texttt{for}-Schleifen).
+Um diesem entgegenzuwirken muss der Laufzeitunterschied zwischen Addition und Multiplikation gross genug sein.
+Wenn dies gegeben ist und dazu noch grosse Matritzen multipliziert werden, kann die Verwendung der Algorithmen von Strassen oder Winograd zu einer Senkung der Laufzeit führen.
diff --git a/buch/papers/multiplikation/main.tex b/buch/papers/multiplikation/main.tex
index 8d0a8df..ca93e92 100755
--- a/buch/papers/multiplikation/main.tex
+++ b/buch/papers/multiplikation/main.tex
@@ -4,8 +4,30 @@
%
% (c) 2021 Hochschule Rapperswil
%
-\chapter{Schnelle Matrizen Multiplikation\label{chapter:multiplikation}}
-\lhead{FMM}
+\definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue
+\definecolor{mylilas}{RGB}{170,55,241}
+\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
+\lstdefinestyle{multiplikationC}{
+ numbers=left,
+ belowcaptionskip=1\baselineskip,
+ breaklines=true,
+ frame=l,
+ framerule=0pt,
+ framesep=-1pt,
+ xleftmargin=1em,
+ language=C,
+ showstringspaces=false,
+ basicstyle=\ttfamily,
+ keywordstyle=\bfseries\color{green!40!black},
+ commentstyle=\itshape\color{purple!40!black},
+ identifierstyle=\color{blue},
+ stringstyle=\color{red},
+ numberstyle=\ttfamily\tiny,
+ backgroundcolor=\color{backcolour}
+}
+
+\chapter{Schnelle Matrizenmultiplikation\label{chapter:multiplikation}}
+\lhead{MM}
\begin{refsection}
\chapterauthor{Michael Schmid}
diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex
index b20a791..604ea36 100755
--- a/buch/papers/multiplikation/problemstellung.tex
+++ b/buch/papers/multiplikation/problemstellung.tex
@@ -3,102 +3,135 @@
%
% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
%
-\section{Problemstellung}
+\section{Laufzeiten von Algorithmen}
\rhead{Problemstellung}
-Dank der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung dieser Operation von grosser Bedeutung.
-Das Ziel dieses Papers ist verschiedenen Algorithmen der Matrizenmultiplikation vorzustellen.
-Wobei gezielt auf Algorithmen, welche das Problem schneller als der Standard Algorithmus L\"osen eingegangen wird.
-
-\subsection{Big $\mathcal{O}$ Notation}
-Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus \cite{multiplikation:bigo}.
-$f(x) \in \mathcal{O}(g(x))$ besagt das die Funktion $f$ nicht wesentlich schneller w\"achst als $g$ wenn $x \rightarrow \infty$.
-Vereinfacht werden f\"ur Algorithmen die folgende Notation verwendet:
+Wegen der breiten Anwendung der Matrizenmultiplikation ist eine effiziente Ausführung dieser Operation von grosser Bedeutung.
+Das Ziel dieses Papers ist, verschiedenen Algorithmen der Matrizenmultiplikation vorzustellen.
+Gezielt wird auf Algorithmen eingegangen, welche das Problem schneller als der Standardalgorithmus l\"osen.
+
+\label{muliplikation:sec:bigo}
+Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus in Abhängigkeit zur Inputgrösse \cite{multiplikation:bigo}.
+$f(x) \in \mathcal{O}(g(x))$ besagt, dass die Funktion $f$ nicht wesentlich schneller w\"achst als $g$ wenn $x \rightarrow \infty$.
+Dies ist gegeben, wenn es für $f \in \mathcal{O}(n^k)$ eine Konstante $C$ gibt, mit $f(n) \leq Cn^k$.
+% Es gibt eine Konstante $K$ derart, dass $f(x) \le K g(x)$ für $x\to\infty$.
+Vereinfacht werden f\"ur Algorithmen die folgende Sprechweise verwendet:
\begin{itemize}
\item $f \in \mathcal{O}(1) \rightarrow f$ ist beschr\"ankt
\item $f \in \mathcal{O}(n) \rightarrow f$ w\"achst linear
- \item $f \in \mathcal{O}(n^2) \rightarrow f$ w\"achst quadratisch
+ \item $f \in \mathcal{O} (n^2 ) \rightarrow f$ w\"achst quadratisch
\item $f \in \mathcal{O}(\log n) \rightarrow f$ w\"achst logarithmisch
\item $f \in \mathcal{O}(n \log n) \rightarrow f$ hat super-lineares Wachstum
- \item $f \in \mathcal{O}(e^n) \rightarrow f$ w\"achst exponentiell
+ \item $f \in \mathcal{O} (e^n ) \rightarrow f$ w\"achst exponentiell
\item usw.
\end{itemize}
-In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die Verschiedenen Laufzeiten miteinander verglichen werden.
+Konstanten werden nicht beachtet, eine Laufzeit von $4n^2$ führt, falls $n \rightarrow \infty$ zu $\mathcal{O}(n^2)$.
+In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufzeiten miteinander verglichen werden.
+Bei einer doppelt logarithmischen Darstellung werden Polynome der Form $f(x) = x^k$ als Gerade und Exponentialfunktionen der Form $f(x) = a^x$ als nach oben gekr\"ummte Kurven abgebildet.
+
-\begin{figure}
- \center
- \includegraphics[]{papers/multiplikation/images/bigo}
- \caption{Verschiedene Laufzeiten}
- \label{multiplikation:fig:bigo}
-\end{figure}
\subsubsection{Beispiel Algorithmen}
+
+Es folgen einige Beispiele von Algorithmen, welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen.
+
+
+\begin{table}[t]
+ \begin{tabular}{ll}
+ \begin{minipage}{0.48\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:b1}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{B1}{$a, b$}
+ \State \textbf{return} $a+b$
+ \EndFunction
+ \State
+ \State
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ &
+ \begin{minipage}{0.48\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:b2}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{B2}{$a, b$}
+ \State $ x \gets a+b $
+ \State $ y \gets a \cdot b $
+ \State \textbf{return} $x+y$
+ \EndFunction
+ \end{algorithmic}
+ \end{algorithm}
+
+ \end{minipage}
+ \end{tabular}
+\end{table}
+
+\begin{table}
+ \begin{tabular}[t]{ll}
+ \begin{minipage}{0.48\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \label{multiplikation:alg:linear}
+ \Function{L}{$\mathbf{a}, \mathbf{b}$,n}
+ \State $ sum \gets 0$
+ \For{$i = 0,1,2 \dots,n$}
+ \State $ sum \gets sum + A[i] \cdot B[i] $
+ \EndFor
+
+ \State \textbf{return} $sum$
+
+ \EndFunction
+ \State
+ \State
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ &
+ \begin{minipage}{0.48\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:q1}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{Q}{$\mathbf{A}, \mathbf{B}$,n}
+ \State $ sum \gets 0$
+ \For{$i = 0,1,2 \dots,n$}
+ \For{$j = 0,1,2 \dots,n$}
+ \State $ sum \gets sum + A[i] \cdot B[j] $
+ \EndFor
+ \EndFor
+ \State \textbf{return} $sum$
+ \EndFunction
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ \end{tabular}
+\end{table}
+
\paragraph{Beschr\"ankter Algorithmus}
+Algorithmus \ref{multiplikation:alg:b1} ist ein Beispiel mit beschränkter Laufzeit $\mathcal{O}(1)$
+Da $a$ und $b$ Skalare sind, hat keine Gr\"osse $n$ einen Einfluss auf die Laufzeit.
+
+Wie erwähnt, werden konstanten nicht beachtet, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$.
-Ein Beispiel eines Beschr\"ankter Verhalten $\mathcal{O}(1)$, kann im Algorithmus \ref{multiplikation:alg:b1} entnommen werden.
-
-\begin{algorithm}\caption{}
- \label{multiplikation:alg:b1}
- \setlength{\lineskip}{7pt}
- \begin{algorithmic}
- \Function{B1}{$a, b$}
- \State \textbf{return} $a+b$
- \EndFunction
- \end{algorithmic}
-\end{algorithm}
-
-Wobei Konstanten nicht beachtet werden, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$.
-
-\begin{algorithm}\caption{}
- \label{multiplikation:alg:b2}
- \setlength{\lineskip}{7pt}
- \begin{algorithmic}
- \Function{B2}{$a, b$}
- \State $ x \gets a+b $
- \State $ y \gets a \cdot b $
- \State \textbf{return} $x+y$
- \EndFunction
- \end{algorithmic}
-\end{algorithm}
\paragraph{Linearer Algorithmus}
-Folgender Algorithmus \ref{multiplikation:alg:l1} hat ein lineares $\mathcal{O}(n)$ Verhalten.
-
-\begin{algorithm}\caption{}
- \setlength{\lineskip}{7pt}
- \begin{algorithmic}
- \label{multiplikation:alg:l1}
- \Function{L}{$\mathbf{A}, \mathbf{B}$,n}
- \State $ sum \gets 0$
- \For{$i = 0,1,2 \dots,n$}
- \State $ sum \gets sum + A[i] \cdot B[i] $
- \EndFor
-
- \State \textbf{return} $sum$
-
- \EndFunction
- \end{algorithmic}
-\end{algorithm}
+Der Algorithmus \ref{multiplikation:alg:linear} hat ein lineares Verhalten.
+Die \texttt{for}-Schleife wird $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O}(n)$.
\paragraph{Quadratischer Algorithmus}
-Folgender Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches $\mathcal{O}(n^2)$ Verhalten.
-
-\begin{algorithm}[H]\caption{}
- \label{multiplikation:alg:q1}
- \setlength{\lineskip}{7pt}
- \begin{algorithmic}
- \Function{Q}{$\mathbf{A}, \mathbf{B}$,n}
- \State $ sum \gets 0$
- \For{$i = 0,1,2 \dots,n$}
- \For{$j = 0,1,2 \dots,n$}
- \State $ sum \gets sum + A[i] \cdot B[j] $
- \EndFor
- \EndFor
- \State \textbf{return} $sum$
- \EndFunction
- \end{algorithmic}
-\end{algorithm}
+Der Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalten.
+Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O} (n^2 )$.
+\begin{figure}
+ \center
+ \includegraphics[]{papers/multiplikation/images/bigo}
+ \caption{Laufzeiten von verschiedensten Zeitkomplexitäten. Bei einer logarithmischen Darstellung werden Polynome der Form $f(x) = x^k$ als Gerade und Exponentialfunktionen der Form $f(x) = a^x$ als nach oben gekr\"ummte Kurven dargestellt.}
+ \label{multiplikation:fig:bigo}
+\end{figure}
diff --git a/buch/papers/multiplikation/references.bib b/buch/papers/multiplikation/references.bib
index 9d76e8e..8815386 100755
--- a/buch/papers/multiplikation/references.bib
+++ b/buch/papers/multiplikation/references.bib
@@ -63,3 +63,40 @@
month = {7},
day = {27}
}
+
+@online{multiplikation:master_theorem,
+ title = {Master theorem (analysis of algorithms)},
+ url = {https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)},
+ date = {2021-07-28},
+ year = {2021},
+ month = {7},
+ day = {28}
+}
+
+
+@online{multiplikation:DAC,
+ title = {Divide-and-conquer algorithm},
+ url = {https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm},
+ date = {2021-07-28},
+ year = {2021},
+ month = {7},
+ day = {28}
+}
+
+@online{multiplikation:BLAS,
+ title = {BLAS (Basic Linear Algebra Subprograms)},
+ url = {http://www.netlib.org/blas/},
+ date = {2021-08-01},
+ year = {2021},
+ month = {8},
+ day = {01}
+}
+
+@online{multiplikation:DGEMM,
+ title = {DGEMM},
+ url = {http://www.netlib.org/lapack/explore-html/d1/d54/group__double__blas__level3_gaeda3cbd99c8fb834a60a6412878226e1.html#gaeda3cbd99c8fb834a60a6412878226e1},
+ date = {2021-08-01},
+ year = {2021},
+ month = {8},
+ day = {01}
+}
diff --git a/buch/papers/munkres/figures/MatrixA.png b/buch/papers/munkres/figures/MatrixA.png
new file mode 100644
index 0000000..45a71a4
--- /dev/null
+++ b/buch/papers/munkres/figures/MatrixA.png
Binary files differ
diff --git a/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png
index fb4d061..242db77 100644
--- a/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png
+++ b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png
Binary files differ
diff --git a/buch/papers/munkres/main.tex b/buch/papers/munkres/main.tex
index e5282dc..201e70b 100644
--- a/buch/papers/munkres/main.tex
+++ b/buch/papers/munkres/main.tex
@@ -13,8 +13,6 @@
\input{papers/munkres/teil1.tex}
\input{papers/munkres/teil2.tex}
\input{papers/munkres/teil3.tex}
-\input{papers/munkres/teil4.tex}
-\input{papers/munkres/teil5.tex}
\printbibliography[heading=subbibliography]
\end{refsection}
diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex
index d22b57f..aad45cc 100644
--- a/buch/papers/munkres/teil1.tex
+++ b/buch/papers/munkres/teil1.tex
@@ -8,20 +8,20 @@
\rhead{Problemstellung}
Das Spezielle an einem Zuordnungsproblem ist, dass es an jedem Ort nur eine Einheit angeboten bzw. nachgefragt wird. Es werden hier nicht Mengen möglichst kostenminimal von einem zum anderen
-Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen, oder Bau-Maschinen auf bestimmte Orte, Stellen oder Aufgaben.
+Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen oder Bau-Maschinen auf bestimmte Orte, Stellen oder Aufgaben.
Um dieses Problem in einer einfachen, händischen Art und Weise zu lösen wurde der Munkres-Algorithmus, auch die Ungarische Methode genannt, entwickelt. Diese Methode ist ein weiteres Hauptthema dieses Kapitels.
\subsection{Zuordnungsproblem an einem konkreten Beispiel
\label{munkres:subsection:bonorum}}
-Man hat den Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt, eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne
+Als Beispiel betrachten wir den Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt, eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne
soll möglichst klein werden.
-Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte angenommen werden $\mathbb{R}$.
-Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden $\mathbb{Z}$. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran von A nach B oder gar kein Kran verschoben werden. Also 1 oder 0.
-Für solche Optimierungsproblem für reelle Varianten sind verschiedene Verfahren entwickelt worden, die im Allgemeinen auch sehr effizient sind. Das reelle Problem ist also in einer einfachen Art uns weise lösbar. Doch das Problem bleibt, wie in der Illustration oben ersichtlich. Es kann mit ganzzahligen Punkten kein Optimum erzielt werden. Das Ziel ist es an das Optimum so nah wie möglich heranzukommen und dies ist eine vergleichsweise träge und langsame Angelegenheit.
+Die Frage lautet: Wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte $\mathbb{R}$ angenommen werden.
+Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran (Anzahl 1) von A nach B oder gar kein Kran (Anzahl 0) verschoben werden.
+Für solche Optimierungsprobleme für reelle Variablen sind verschiedene Verfahren entwickelt worden, die im Allgemeinen auch sehr effizient sind. Das reelle Problem ist also in einer einfachen Art und Weise lösbar. Doch das Problem bleibt, wie in der Illustration oben ersichtlich. Es kann mit ganzzahligen Punkten kein Optimum erzielt werden. Das Ziel ist es an das Optimum so nah wie möglich heranzukommen und dies ist eine vergleichsweise träge und langsame Angelegenheit.
\begin{figure}
\centering
-\includegraphics[width=5cm]{papers/munkres/figures/ganzzahlige_punkte}
+\includegraphics[width=8cm]{papers/munkres/figures/ganzzahlige_punkte}
\caption{Problem der Ganzzahligkeit.}
\label{munkres:Vr2}
\end{figure}
@@ -34,23 +34,37 @@ In einem Zuordnungsproblem sind alle Angebots- und Bedarfsmengen gleich 1
\begin{equation}
a_{i}=b_{j}=1
\end{equation}
-Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix $\mathbb{A}$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden.
-In der Zelle dieser Matrix sind $a_{i,j}$ die Wege dargestellt, die entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet.
+Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix
+\[
+A
+=
+\begin{pmatrix}
+a_{11}&a_{12}&\dots &a_{1n}\\
+a_{21}&a_{22}&\dots &a_{2n}\\
+\vdots&\vdots&\ddots&\vdots\\
+a_{n1}&a_{n2}&\dots &a_{nn}
+\end{pmatrix}
+\in \mathbb{R}^{n,n}
+\]
+kann der Faktor Kosten mit in die Rechnung eingebracht werden.
+In den Zellen dieser Matrix sind die Zahlen $a_{i,j}$ dargestellt, welche den Weg in z.B. Kilometer beschreiben.
+Sie entstehen, wenn man z.B. einem Kran $i$ dem Einsatzort $j$ zuordnet.
\subsection{Alternative Darstellungen des Zuordnungsproblems
\label{munkres:subsection:bonorum}}
-\begin{equation}
-Netzwerk
-\end{equation}
-\begin{equation}
-Matrix
-\end{equation}
-\begin{equation}
-Bitpartiter Graph
-\end{equation}
+\subsubsection{Netzwerk}
+Ein (Fluss- oder Transport-) Netzwerk (engl. network) ist ein zusammenhängender Graph, bei dem jede Kante einen Fluss aufnehmen kann und jede Kante eine Kapazität für den Fluss hat. Die Menge des Flusses auf einer Kante kann die Kapazität der Kante nicht überschreiten. Ein Fluss muss die Einschränkung erfüllen, dass die Menge des Flusses in einen Knoten gleich der Menge des Flusses aus ihm heraus ist. Ein Fluss-Netzwerk (engl. flow network) ist ein Netzwerk, dessen Kanten zusätzlich Kosten pro Mengeneinheit des Flusses zugeordnet sind. Typischerweise will man einen Fluss durch die Kanten bestimmen, der den Einschränkungen des Netzwerks genügt und dessen Gesamtkosten minimal sind. Im Bild 21.2 dargestellt sind in den eckigen Klammern links die externen Flüsse $[1]$ für jeden Kran und in den eckigen Klammern rechts eine $[-1]$ für jeden Baustellenort. Die Kosten sind entlang der Kanten als Zahlen in Klammern dargestellt.
+\subsubsection{Matrix}
+Im Bild 21.3 ist eine typische $4\times 4$ Matrix dargestellt. Die Zeilen A1 bis A4 betreffen z.B. vier bestehende Maschinenlager eines Unternehmers. In den Spalten B1 bis B4 sind vier neue Baustellenorte zugewiesen. Die Zahlen in der Matrix bedeuten z.B. die Distanz in Kilometer von dem jeweiligen Lager zur jeweiligen Baustelle.
+\subsubsection{Bitpartiter Graph}
Ein bipartiter Graph ist ein mathematisches Modell für Beziehungen
-zwischen den Elementen zweier Mengen.
-Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen.
+zwischen den Elementen zweier Mengen. Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen. Zwischen zwei Gruppen von Objekten wird hierbei eine eindeutige Zuordnung hergestellt. Der Graph ist in Abbildung 21.4 ersichtlich.
+\begin{itemize}
+\item 3 = Anzahl der Knoten aus Menge A.
+\item 3 = Anzahl der Knoten aus Menge B.
+\end{itemize}
+
+
\begin{figure}
\centering
\includegraphics[width=5cm]{papers/munkres/figures/Netzwerkdarstellung}
diff --git a/buch/papers/munkres/teil2.tex b/buch/papers/munkres/teil2.tex
index a3b249e..2fe24f8 100644
--- a/buch/papers/munkres/teil2.tex
+++ b/buch/papers/munkres/teil2.tex
@@ -8,6 +8,5 @@
\rhead{Schwierigkeit der Lösung (Permutationen)}
Eine Permutation ist eine Anordnung von Objekten in einer bestimmten Reihenfolge oder eine Umordnung von Objekten aus einer vorgegebenen Reihung. Ist eine optimale Zuordnung gefunden, so steht in jeder Zeile und jeder Spalte der Matrix genau ein Element, das zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird auch als Transversale der Matrix bezeichnet.
-
-Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigender Permutationen.
+Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigende Permutationen.
diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex
index 874baae..fd25a74 100644
--- a/buch/papers/munkres/teil3.tex
+++ b/buch/papers/munkres/teil3.tex
@@ -11,7 +11,7 @@ Mit der ungarischen Methode können also Optimierungsprobleme gelöst
werden, die bei gewichteten Zuordnungen in bipartiten Graphen entstehen.
Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen so
optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der
-Gesamtgewinn maximiert werden kann.
+Gesamtgewinn maximiert werden kann.
\subsection{Geschichte
\label{munkres:subsection:malorum}}
@@ -32,69 +32,38 @@ um eine $O(n^3)$-Laufzeit zu erreichen.
Die Ungarische Methode ist ein kombinatorischer Optimierungsalgorithmus, der das Zuordnungsproblem
in polynomieller Zeit löst.
Der Begriff polynomielle Laufzeit bedeutet, dass die Laufzeit des Programms
-wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei die "Grösse" des Problems.
+wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei die ''Grösse'' des Problems.
\subsection{Unterschiedliche Anzahl von Quellen und Zielen
\label{munkres:subsection:malorum}}
-Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z.B dann der Fall, wenn eine 3 Mitarbeiter 4 Eignungstests abdsolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position quadratisch ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise eine $4\times 3$ wird zu einer $4\times 4$ Matrix.
+Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z. B. dann der Fall, wenn drei Mitarbeiter vier verschiedene Eignungstests absolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position zu einem Quadrat ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise wird eine $3\times 4$ zu einer $4\times 4$-Matrix.
\subsection{Beispiel eines händischen Verfahrens
\label{munkres:subsection:malorum}}
-Die ungarische Methode kann in einem einfachen händischen Beispiel
-erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer
-weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass
-jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt.
-Die optimale Lösung ist erreicht, wenn genau $n$ Zuordnungen gefunden
-sind.
+Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Wir gehen von der Kostenmatrix $A$ aus. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschliessend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Es gibt Situationen, in denen man nichts mehr tun muss, um eine optimale Zuordnung zu finden. Eine optimale Zuordnung ohne zusätzliche Kosten ist eine Auswahl genau eines Feldes in jeder Zeile und Spalte, welches 0 enthält. Das Ziel des Algorithmus ist also, die Matrix so zu ändern, dass genügend Nullen in der Matrix vorkommen. Es ist zudem wichtig, dass man nach jeder Modifikation der Matrix testet, ob man bereits eine Zuordnung machen kann, also genügend Nullen hat.
+Das Vorgehen wird in den nachfolgenden Schritten 1-6 beschrieben und auch in der Abbildung 21.5 dargestellt.
\begin{enumerate}
-\item Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl wird bei
-allen anderen Ziffern in der jeweiligen Zeile subtrahiert.
+\item Man beginnt mit der Zeilen-Reduktion. Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl, jeweils in rot markiert, wird bei allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. Man erkennt, dass die Nullen mit zwei Linien abdeckbar sind. Das heisst es gibt zwei Spalten bei denen noch keine Zuordnungen möglich sind.
-\item Danach zieht man wiederum die kleinste Zahl in jeder Spalte von allen
-Zahlen in der Spalte ab.
+\item Auch im zweiten Schritt werden mittels der Spalten-Reduktion die unvermeidbaren Weg-Kosten abgezogen. Man zieht die kleinste Zahl, wiederum in rot markiert, in jeder Spalte von allen Zahlen in der Spalte ab.
+Die Nullen können somit mit drei Linien abgedeckt werden. Im Idealfall hat die Matrix in jeder Zeile und Spalte bereits genügend viele Nullen, so dass man bereits eine Zuordnung ohne Mehrkosten machen kann. Dies ist jedoch noch nicht der Fall. Es sollen weitere Nullen in die Matrix hineingebracht werden.
-\item Es sollen möglichst viele Nullen markiert werden, welche freistehend sind.
-(Freistehend bedeutet, sowohl in der jeweiligen Zeile und Spalte nur
-eine markierte Null zu haben)
+\item Es bleiben jetzt einige Felder übrig, für die noch keine Zuordnung möglich ist. Die kleinste Ziffer wird dabei aus den noch nicht mit blau markierten Zahlen ausgewählt werden. Im Beispiel ist es die Zahl 1. Das Feld mit dem kleinsten Eintrag beinhaltet die Kosten, die unvermeidlich sind, wenn man für diese Felder auch noch eine Zuordnung machen will. Um neue Nullen zu bekommen, lagert man jetzt die Kosten auf die anderen Zeilen und Spalten um. Dies tut man, indem man in allen nicht abgedeckten Feldern die minimalen Kosten subtrahiert und in den blau markierten Kreuzungspunkten dazu addiert.
+Dieser Schritt 3 muss so oft wiederholt werden, bis genügend viele Nullen in der Matrix vorhanden sind.
-\item Jeweilige Zeilen eruieren, bei welchen keine markierte Null vorhanden sind und kennzeichnen.
+\item In Schritt 4 sollen jetzt möglichst viele Nullen markiert werden, welche freistehend sind.
+Freistehend bedeutet, dass sowohl in der jeweiligen Zeile und Spalte keine andere markierte Null vorhanden ist.
-\item In der vorherigen Zeile die 0 eruieren und die Spalte ebenfalls
-kennzeichnen (*2)
+\item Alle markierten Nullen werden jetzt in eine 1 umgewandelt. Die restlichen Ziffern in der Matrix, exklusiv die einsen, sollen jetzt ignoriert und durch eine Null ersetzt werden.
-\item Im der selben Spalte die Markierte Null eruieren und die dazugehörige
-Zeile kennzeichnen (*3)
-
-\item Alle Zeilen durchstreichen, welche KEINE Kennzeichnungen (*) haben
-
-\item Alle Spalten durchstreichen, welche EINE Kennzeichnung besitzt! (hier, *2)
-
-\item Kleinste Ziffer auswählen, welche nicht schon durchgestrichen sind.
-(Im Beispiel ist es die Zahl 1. (Egal welche 1)
-
-\item Die eruierte kleinste Ziffer, wird von den nicht durchgestrichenen Ziffern
-subtrahiert. Danach muss die Matrix wieder komplettiert werden. (inkl. Unterstreichen)
-
-\item Jeweilige Zahlen eruieren, welche vorgängig doppelt durchgestrichen wurden.
-
-\item Kleinste eruierte Ziffer von vorhin auf die zwei markierten Ziffern addieren.
-
-\item Es sollen wiederum von neuem möglichst viele Nullen markiert werden,
-welche freistehend sind. In diesem Schritt werden nur die markierten Nullen betrachtet.
-
-\item Aus allen markierten Nullen in eine eins umwandeln.
-
-\item Die restlichen Ziffern, durch eine Null ersetzen.
-
-\item Zu guter letzt soll überall wo eine 1 steht, in der Ausgangsmatrix die
-dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen ergeben sich nach Summieren der Zahlen der minimalste Transportweg.
+\item Zu guter Letzt werden überall wo eine 1 steht, die Zahlen aus der Ausgangsmatrix eingefügt. Nach Einsetzen der Zahlen können die in rot markierten Zahlen aufsummiert werden. Man erhält den minimalsten Transportweg von total 13 Kilometer.
\end{enumerate}
\begin{figure}
\centering
-\includegraphics[width=14cm]{papers/munkres/figures/Ungarische_Methode_Beispiel.png}
+\includegraphics[width=8cm]{papers/munkres/figures/Ungarische_Methode_Beispiel.png}
\caption{Händisches Beispiel des Munkres Algorithmus, minimalster Transportweg.}
\label{munkres:Vr2}
\end{figure}
@@ -102,6 +71,8 @@ dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen
\subsection{Zuordnung der Kräne
\label{munkres:subsection:malorum}}
+Als Resultat des Munkres-Algorithmus werden in Abbildung 21.6 nebst dem minimalsten Transportweg auch die optimalste Zuweisung der Kräne auf die neuen Standorte ersichtlich.
+Es können die folgenden Zuordnungen aus der Matrix abgelesen werden:
\begin{itemize}
\item Der Kran von Baustelle A1 soll zur Baustelle B2.
\item Der Kran von Baustelle A2 soll zur Baustelle B3.
@@ -114,5 +85,4 @@ dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen
\includegraphics[width=3cm]{papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png}
\caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne }
\label{munkres:Vr2}
-\end{figure}
-
+\end{figure} \ No newline at end of file
diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex
index 42008e1..0a9d3b6 100644
--- a/buch/papers/punktgruppen/crystals.tex
+++ b/buch/papers/punktgruppen/crystals.tex
@@ -18,8 +18,8 @@ Glücklicherweise ist das Innere eines Kristalles relativ einfach definiert.
Ein zweidimensionales Beispiel eines solchen Muster ist Abbildung \ref{fig:punktgruppen:lattice}.
Für die Überschaubarkeit haben wir ein simples Motiv eines einzelnen grauen Punktes dargestellt und betrachten dies nur in zwei Dimensionen.
Die eingezeichneten Vektoren \(\vec{a}_1\) und \(\vec{a}_2\) sind die kleinstmöglichen Schritte im Raum bis sich das Kristallgitter wiederholt.
-Wird ein beliebiger grauer Gitterpunkt in \ref{fig:punktgruppen:lattice} gewählt und um eine ganzzahlige Linearkombination von \(\vec{a}_1\) und \(\vec{a}_2\) verschoben, endet er zwangsweise auf einem Gitterpunkt, wenn nicht wieder am selben Ort.
-Im dreidimensionalen Raum können alle Gitterpunkte mit derselben Idee und einem zusätzlichen Vektor \(\vec{c}\) also
+Wird ein beliebiger grauer Gitterpunkt in Abbildung \ref{fig:punktgruppen:lattice} gewählt und um eine ganzzahlige Linearkombination von \(\vec{a}_1\) und \(\vec{a}_2\) verschoben, endet er zwangsweise auf einem Gitterpunkt, wenn nicht wieder am selben Ort.
+Im dreidimensionalen Raum können alle Gitterpunkte mit derselben Idee und einem zusätzlichen Vektor \(\vec{a}_3\) also
\[
\vec{r} = n_1 \vec{a}_1 + n_2 \vec{a}_2 + n_3 \vec{a}_3 = \sum_i n_i \vec{a}_i
\]
@@ -39,7 +39,7 @@ können wir auch sagen, dass alle Verschiebungen um eine Linearkombination
der Vektoren $\vec{a}_1$ , $\vec{a}_2$ und $\vec{a}_3$ erlaubt sind.
Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich grossen Kristallgittern besteht.
-\subsection{Limitierte Kristallsymmetrien} \label{txt:punktgruppen:Translationssymmetrie}
+\subsection{Einschränkungen durch Kristallsymmetrien} \label{sec:punktgruppen:Translationssymmetrie}
Die Translationssymmetrie ist wohl keine grosse Überraschung, wenn man die Abbildung \ref{fig:punktgruppen:lattice} betrachtet.
Was nicht direkt ersichtlich ist, ist dass bei beliebigen Grundvektoren nicht beliebige Symmetrien erstellt werden können.
Dies weil die Translationssymmetrie eines Kristalles weitere Symmetrien deutlich einschränkt.
@@ -53,7 +53,7 @@ Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich g
\label{fig:punktgruppen:rot-geometry}
\end{figure}
-\begin{satz}
+\begin{satz} \label{thm:punktgruppen:crystal-restriction}
Die Rotationssymmetrien eines Kristalls sind auf 2-fach, 3-fach, 4-fach und 6-fach beschränkt.
Mit anderen Worten: Es sind nur Drehwinkel von
0\(^{\circ}\),
@@ -87,7 +87,7 @@ Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich g
Wir beginnen, indem wir die Länge der Verschiebung \(|\vec{Q}| = Q\) setzen und \(|\vec{Q}'| = Q'\).
Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass \(Q' = Q + 2x\).
Da \(\vec{Q}\) eine Translation um ein Grundvektor ist , muss \(\vec{Q}'\) ein ganzes Vielfaches von \(\vec{Q}\) sein.
- Demnach auch die Länge
+ Demnach ist auch die Länge
\[
Q' = nQ = Q + 2x .
\]
@@ -95,12 +95,12 @@ Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich g
\[
nQ = Q + 2Q\sin(\alpha - \pi/2) .
\]
- Wir können durch \(Q\) dividieren um unabhängig von der Läge des Grundvektors zu werden, was auch Sinn macht,
+ Wir können durch \(Q\), dividieren um unabhängig von der Läge des Grundvektors zu werden, was auch Sinn macht,
da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangiert.
- Zusätzlich können wir den Sinusterm vereinfachen.
+ Zusätzlich können wir den Sinusterm vereinfachen. Somit wird
\[
- n = 1 - 2\cos\alpha \quad\iff\quad
- \alpha = \cos^{-1}\left(\frac{1-n}{2}\right)
+ n = 1 - 2\cos\alpha \quad\text{oder}\quad
+ \alpha = \cos^{-1}\left(\frac{1-n}{2}\right).
\]
Dies schränkt die möglichen Rotationssymmetrien auf
\(
@@ -144,10 +144,10 @@ Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:kristallklas
Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:kristallklassen} zu sehen sind.
\begin{itemize}
\item In Kristallen ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\) zu finden.
- Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nicht kompatibel mit der Translationssymmetrie eines Kristalles und daher in der Kristallographie nicht relevant.
- \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:kristallklassen} auf \(C\) nur ganz bestimmte Subskripte folgen.
+ Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nach Satz \ref{thm:punktgruppen:crystal-restriction} nicht kompatibel mit der Translationssymmetrie eines Kristalles und daher in der Kristallographie nicht relevant.
+ \item Dank Abschnitt \ref{sec:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:kristallklassen} auf \(C\) nur ganz bestimmte Subskripte folgen.
Ist im Subskript eine Zahl \(n\) zu finden, steht dies für eine \(n\)-fache Symmetrie.
- Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:kristallklassen} nicht vorkommen, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} keine mögliche Rotationssymmetrie eines Kristalles ist.
+ Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:kristallklassen} nicht vorkommen, da \(360^\circ/5 = 72^\circ\) was nach Satz \ref{thm:punktgruppen:crystal-restriction} keine mögliche Rotationssymmetrie eines Kristalles ist.
\item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse.
Für die folgenden Betrachtungen müssen wir uns Abbildung \ref{fig:punktgruppen:kristallklassen} genauer ansehen.
Dabei ist mit horizontal flach auf dem Papier gemeint.
diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex
index 1293234..e3f0226 100644
--- a/buch/papers/punktgruppen/intro.tex
+++ b/buch/papers/punktgruppen/intro.tex
@@ -1,26 +1,16 @@
\section{Einleitung}
+
Es gibt viele Möglichkeiten sich in Kristallen zu verlieren.
-Auch wenn man nur die mathematischen Betrachtungsweisen berücksichtigt,
-hat man noch viel zu viele Optionen sich mit Kristallen zu beschäftigen.
+Auch wenn man nur die mathematischen Betrachtungsweisen berücksichtigt, hat man noch viel zu viele Optionen, sich mit Kristallen zu beschäftigen.
In diesem Kapitel wird daher der Fokus ``nur'' auf die Symmetrie gelegt.
-Zu Beginn werden wir zeigen was eine Symmetrie ausmacht und
-dass sie noch weit mehr in sich verbirgt als nur schön auszusehen.
-Die vorgestellten Symmetrien sind äusserst gut geeignet,
-um die Grundeigenschaften eines Kristalles zu beschreiben.
-Mit etwas kniffligen geometrischen Überlegungen kann man zeigen,
-was in der Welt der Kristallographie alles möglich ist oder nicht.
-Einschränkungen in Kristallsymmetrien sind durchaus willkommen,
-da dank ihnen sich die möglichen Kristallgitter in Grenzen halten
-und sich kategorisieren lassen.
-Kategorien sind nicht nur für einen besseren Überblick nützlich,
-sondern kann man aus ihnen auch auf Physikalische Eigenschaften schliessen.
+Zu Beginn werden wir zeigen, was eine Symmetrie ausmacht und dass sie noch weit mehr in sich verbirgt als nur schön auszusehen.
+Die vorgestellten Symmetrien sind äusserst gut geeignet, um die Grundeigenschaften eines Kristalles zu beschreiben.
+Mit etwas kniffligen geometrischen Überlegungen kann man zeigen, was in der Welt der Kristallographie alles möglich ist oder nicht.
+Diese erlauben alle möglichen Kristalle nach ihren Symmetrien in erstaunlich wenige Klassen zu kategorisieren.
+Kategorien sind nicht nur für einen besseren Überblick nützlich, sondern kann man aus ihnen auch auf physikalische Eigenschaften schliessen.
Als spannendes Beispiel: Die Piezoelektrizität.
-Piezoelektrizität ist kein weit verbreiteter Begriff,
-jedoch beschreibt er ein Effekt, ohne welchen diverse Altagsgegenständen nicht besonders nützlich wären.
-Wie zum Beispiel sorgt er in den allermeisten Feuerzeugen für die Zündung.
-Hiermit ist hoffentlich ein Funken Interesse geweckt
-um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten.
-
-
+Piezoelektrizität beschreibt einen Effekt, ohne welchen diverse Altagsgegenständen nicht besonders nützlich wären.
+Zum Beispiel sorgt er in den allermeisten Feuerzeugen für die Zündung.
+Hiermit ist hoffentlich ein Funken Interesse geweckt um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten.
%% vim:linebreak breakindent showbreak=.. spell spelllang=de:
diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex
index 6ed7ee9..1cf9b98 100644
--- a/buch/papers/punktgruppen/piezo.tex
+++ b/buch/papers/punktgruppen/piezo.tex
@@ -1,5 +1,4 @@
\section{Piezoelektrizität}
-%% TODO: improve this paragraph
Die Piezoelektrizität ist die spannende Eigenschaft, dass gewisse Kristalle eine elektrische Spannung erzeugen, wenn mechanischer Druck auf sie ausgeübt wird.
\begin{figure}
@@ -10,13 +9,13 @@ Die Piezoelektrizität ist die spannende Eigenschaft, dass gewisse Kristalle ein
\end{figure}
\subsection{Polarisierung}
+
Piezoelektrizität basiert darauf, dass zwischen den Oberflächen des Kristalles ein Ladungsungleichgewicht entsteht (siehe Abbildung\ref{fig:punktgruppen:basicPiezo}).
-Dieses Ungleichgewicht resultiert,
-weil durch den mechanischen Druck auf der einen Oberfläche des Kristalles positive Ionen näher an die Oberfläche gelangen,
-wärend auf der gegenüberliegenden Seite dasselbe mit negativen Ionen passiert.
-Es besitzt jedoch nicht jeder Kristall eine atomare Struktur welche sich unter Druck genau so verformt.
+Dieses Ungleichgewicht resultiert, weil durch den mechanischen Druck auf der einen Oberfläche des Kristalles positive Ionen näher an die Oberfläche gelangen, wärend auf der gegenüberliegenden Seite dasselbe mit negativen Ionen passiert.
+Es besitzt jedoch nicht jeder Kristall eine atomare Struktur, welche sich unter Druck genau so verformt.
Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für die Entstehung dieses Effektes.
+
\begin{figure}
\centering
\begin{tabular}{c |c}
@@ -35,47 +34,44 @@ Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für
\end{figure}
\subsection{Atomarer Aufbau}
+
Die Polarisation entsteht an der Oberfläche eines Kristalles, die Erklärung dazu finden wir jedoch im atomaren Aufbau.
Wir wollen dazu die verschiedenen Kristallstrukturen auf Abbildung \ref{fig:punktgruppen:atomPiezo} diskutieren.
-In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise positive Ionen und blaue negative Ionen repräsentieren.
-Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe.
-Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet.
+In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise positive Ionen und blaue negative Ionen repräsentieren.
+Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe.
+Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet.
Eingezeichnet ist auch das elektrische Feld, welches entsteht, weil die Ladungsträger ganz links und rechts weiter auseinander gedrückt werden.
-Als Hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich,
-dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen.
-\par
+Als Hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen.
+
+
Die Struktur \subref{fig:punktgruppen:atoms-grid} ist nicht piezoelektrisch.
Dies wird ersichtlich, wenn man \subref{fig:punktgruppen:atoms-grid} unter Druck setzt und sich die Struktur zu \subref{fig:punktgruppen:atoms-grid-f} verformt.
-Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten,
-scheint es als würden rechts mehr positive Ionen in die Platte gedrückt werden und links umgekehrt.
+Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten, scheint es, als würden rechts mehr positive Ionen in die Platte gedrückt werden und links umgekehrt.
Dies ist aber nicht mehr der Fall, wenn sich die Struktur nach oben und unten periodisch wiederholt.
-\par
-Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung.
-Was zwischen \subref{fig:punktgruppen:atoms-piezo-fv} und \subref{fig:punktgruppen:atoms-piezo-fh} zu beobachten ist,
-ist, dass die entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht,
-im Gegensatz zu \subref{fig:punktgruppen:atoms-piezo-fh}.
-Daraus kann man schliessen, dass \subref{fig:punktgruppen:atoms-piezo} keine Rotationssymmetrie von \(90^\circ\) besitzen kann,
-weil die Eigenschaften der Struktur sich bei einer \(90^\circ\) Drehung ändern.
-Das Fehlen dieser Rotationssymmetrie bestätigt sich auch wenn \subref{fig:punktgruppen:atoms-piezo} als Hexagon betrachtet wird.
+
+
+Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung.
+Was zwischen \subref{fig:punktgruppen:atoms-piezo-fv} und \subref{fig:punktgruppen:atoms-piezo-fh} zu beobachten ist, dass die entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, im Gegensatz zu \subref{fig:punktgruppen:atoms-piezo-fh}.
+Daraus kann man schliessen, dass \subref{fig:punktgruppen:atoms-piezo} keine Rotationssymmetrie von \(90^\circ\) besitzen kann, weil die Eigenschaften der Struktur sich bei einer \(90^\circ\) Drehung ändern.
+Das Fehlen dieser Rotationssymmetrie bestätigt sich auch wenn \subref{fig:punktgruppen:atoms-piezo} als Hexagon betrachtet wird.
+
\subsection{Punktsymmetrie}
+
Piezoelektrische Kristalle können nicht punktsymmetrisch sein.
Kristallgitter, bei welchen eine Punktspiegelung eine symmetrische Operation ist, können keine piezoelektrische Kristalle bilden.
-Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht punktsymmetrischer Kristall
-mit einem punktsymmetrischen \subref{fig:punktgruppen:atoms-grid} verglichen worden.
-Als vereinfachte Erklärung kann man sich wieder das Bild eines Kristalles wie \subref{fig:punktgruppen:atoms-piezo} vor Augen führen,
-welcher unter Druck auf der einen Seite negative und der anderen Seite positive Ionen an seine Oberfläche verdrängt.
-Spiegelt man nun den Kristall um den Gitterpunkt in der Mitte des Kristalles, so würden die negativen Ionen auf den positiven auf der anderen Seite landen,
-was der Definition einer Symmetrie deutlich widerspricht.
+Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht punktsymmetrischer Kristall mit einem punktsymmetrischen \subref{fig:punktgruppen:atoms-grid} verglichen worden.
+Als vereinfachte Erklärung kann man sich wieder das Bild eines Kristalles wie \subref{fig:punktgruppen:atoms-piezo} vor Augen führen, welcher unter Druck auf der einen Seite negative und der anderen Seite positive Ionen an seine Oberfläche verdrängt.
+Spiegelt man nun den Kristall um den Gitterpunkt in der Mitte des Kristalles, so würden die negativen Ionen auf den positiven auf der anderen Seite landen, was der Definition einer Symmetrie deutlich widerspricht.
+
\subsection{Vom Kristall zum Feuer}
+
Piezoelektrizität hat durchaus Nutzen im Alltag.
-Feuerzeuge welche nicht auf dem Prinzip beruhen einen Zündstein abzuschleifen,
-sonder ohne Verschleiss auf Knopfdruck einen Zündfunken erzeugen, basieren auf dem Prinzip der Piezoelektrizität.
+Feuerzeuge welche nicht auf dem Prinzip beruhen einen Zündstein abzuschleifen, sondern ohne Verschleiss auf Knopfdruck einen Zündfunken erzeugen, basieren auf dem Prinzip der Piezoelektrizität.
Drückt der Nutzende auf den Zündknopf, spannt sich eine Feder bis zu einer konfigurierten Spannung.
-Wird vom Nutzenden fester zugedrückt entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer,
-welcher auf das Piezoelement aufschlägt.
+Drückt der Nutzende stärker zu, entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, welcher auf das Piezoelement aufschlägt.
Der augenblicklich hohe Druck sorgt an den Piezokontakten für eine eben so kurze aber hohe elektrische Spannung.
Die Spannung reicht aus, um eine Funkenstrecke zu überwinden und so eine entflammbares Gas zu entzünden.
-Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass der eine eine Punktsymmetrie aufweist, empfiehlt es sich, sich am anderen zu versuchen.
+Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass der eine eine Punktsymmetrie aufweist, empfiehlt es sich, sich mit dem anderen zu versuchen.
diff --git a/buch/papers/punktgruppen/references.bib b/buch/papers/punktgruppen/references.bib
index 05c803f..7928b22 100644
--- a/buch/papers/punktgruppen/references.bib
+++ b/buch/papers/punktgruppen/references.bib
@@ -26,7 +26,7 @@
@book{punktgruppen:lang-elt2,
title = {Elektrotechnik 2},
- author = {Prof. Hans-Dieter Lang Ph.D},
+ author = {Hans-Dieter Lang Ph.D},
publisher = {Fachhochschule Ostschweiz Rapperswil},
year = {2020},
month = {2},
@@ -45,7 +45,7 @@
@online{punktgruppen:restriction,
title = {Structure of Materials: Allowed Rotational Symmetry in Crystals},
- author = {Prof. Silvija Gradecak-Garaj{,} Massachusetts Institute of Technology (MIT)},
+ author = {Silvija Gradecak-Garaj{,} Massachusetts Institute of Technology (MIT)},
year = {2020},
month = {4},
day = {9},
diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex
index 2067663..4a8d911 100644
--- a/buch/papers/punktgruppen/symmetry.tex
+++ b/buch/papers/punktgruppen/symmetry.tex
@@ -20,11 +20,11 @@ Wie wir jedoch später sehen werden, ist das Konzept der Symmetrie eigentlich vi
\subsection{Geometrische Symmetrien}
In Abbildung \ref{fig:punktgruppen:geometry-example} haben wir einige Formen, die offensichtlich symmetrisch sind.
-Zum Beispiel hat das Quadrat eine Gerade, an deren es gespiegelt werden kann, ohne sein Aussehen zu verändern.
+Zum Beispiel hat das Quadrat eine Gerade, an der es gespiegelt werden kann, ohne sein Aussehen zu verändern.
Regelmässige Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine diskrete Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur unverändert lässt.
-Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für den Drehwinkel \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen.
+Das letzte Beispiel auf der rechts ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für den Drehwinkel \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen.
Ein Objekt kann mehr als nur eine Symmetrie aufweisen.
-Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden.
+Zum Beispiel kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden.
Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe.
\begin{definition}[Symmetriegruppe]
@@ -35,7 +35,7 @@ Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe.
Eine Gruppe benötigt ausserdem auch zwingend ein neutrales Element, welches wir mit \(\mathds{1}\) bezeichnen.
Die Anwendung der neutralen Operation ist gleichbedeutend damit, alles unverändert zu lassen.
-Weiterhin muss in einer Gruppe für jede Operation \(g\) auch eine inverse Operation \(g^{-1}\) vorkommen, die intuitiv rückgängig macht, was \(g\) getan hat. % intuitiv weglassen oder anstelle sinnbildlich
+Weiterhin muss in einer Gruppe für jede Operation \(g\) auch eine inverse Operation \(g^{-1}\) vorkommen, die rückgängig macht, was \(g\) getan hat.
Somit ist \(\mathds{1}\) auch äquivalent dazu, eine Operation und dann ihre Inverse anzuwenden.
Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, sie wird aber auch oft als Multiplikation geschrieben.
Das liegt daran, dass in manchen Fällen die Zusammensetzung algebraisch durch eine Multiplikation berechnet wird.
@@ -45,23 +45,23 @@ durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine
\begin{definition}[Zyklische Untergruppe, Erzeuger]
Sei \(g\) ein Element einer Symmetriegruppe \(G\).
Alle möglichen Kompositionen von \(g\) und \(g^{-1}\) bilden eine sogenannte zyklische Untergruppe von \(G\), wobei \(g\) Erzeuger der Untergruppe genannt wird.
- Die von \(g\) erzeugte Untergruppe \(\langle g \rangle = \left\{ g^k : k \in \mathbb{Z} \right\}\) wird mit spitzen Klammern bezeichnet.
+ Die von \(g\) erzeugte Untergruppe \(\langle g \rangle = \{ g^k : k \in \mathbb{Z} \}\) wird mit spitzen Klammern bezeichnet.
\end{definition}
\begin{beispiel}
Um die Syntax zu verstehen, betrachten wir eine durch \(a\) erzeugte Gruppe \(G = \langle a \rangle\).
Das bedeutet, dass \(G\) die Elemente \(a, aa, aaa, \ldots\) sowie \(a^{-1}, a^{-1}a^{-1}, \ldots\) und ein neutrales Element \(\mathds{1} = aa^{-1}\) enthält.
\end{beispiel}
\begin{beispiel}
- Als anschaulicheres Beispiel, können wir eine zyklische Untergruppe des \(n\)-Gon formalisieren.
+ Als anschaulicheres Beispiel können wir eine zyklische Untergruppe des \(n\)-Gon formalisieren.
Wir bezeichnen mit \(r\) eine Drehung im Gegenuhrzeigersinn von \(360^\circ/n\) um einen Punkt.
Diese Definition reicht aus, um die gesamte Symmetriegruppe
\[
C_n = \langle r \rangle
- = \left\{\mathds{1}, r, r^2, \ldots, r^{n-1}\right\}
+ = \{\mathds{1}, r, r^2, \ldots, r^{n-1}\}
\]
der Drehungen eines \(n\)-Gons zu erzeugen.
Das liegt daran, dass wir durch die mehrfache Verwendung von \(r\) jeden Winkel erzeugen k\"onnen, der die Rotationssymmetrie bewahrt.
- In ähnlicher Weise, aber weniger interessant enthält die Reflexionssymmetriegruppe \(\langle\sigma\rangle\) nur \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\).
+ In ähnlicher Weise, aber weniger interessant, enthält die Reflexionssymmetriegruppe \(\langle\sigma\rangle\) nur \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\).
\end{beispiel}
Wenn wir diese Idee nun erweitern, können wir mit einem Erzeugendensystem
@@ -69,8 +69,8 @@ komplexere Strukturen aufbauen.
%@Naoki Are you ok with my grammar fixes I'm not 101% shore how to use the word Erzeugendensystem?
\begin{definition}[Erzeugendensystem]
- Jede disktrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden.
- Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer Symmetriegruppe sein.
+ Jede diskrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden.
+ Wir lassen \(g_1, g_2, g_3, \ldots\) erzeugenden Elemente einer Symmetriegruppe sein.
Da es mehrere Erzeuger gibt, müssen auch die sogenannten Definitionsgleichungen gegeben werden, die die Multiplikationstabelle vollständig definieren.
Die Gleichungen sind ebenfalls in den Klammern angegeben.
Die erzeugenden Elementen bauen zusammen mit den Definitionsgleichungen ein Erzeugendensystem.
@@ -84,9 +84,9 @@ komplexere Strukturen aufbauen.
Daraus ergibt sich die so genannte Diedergruppe
\begin{align*}
D_n &= \langle r, \sigma : r^n = \sigma^2 = (\sigma r)^2 = \mathds{1} \rangle \\
- &= \left\{
+ &= \{
\mathds{1}, r, \ldots, r^{n-1}, \sigma, \sigma r, \ldots, \sigma r^{n-1}
- \right\}.
+ \}. \qedhere
\end{align*}
\end{beispiel}
@@ -110,16 +110,17 @@ Um es formaler zu beschreiben, werden wir einige Begriffe einführen.
Man sagt, dass der Homomorphismus \(f\) \(G\) in \(H\) transformiert.
\end{definition}
\begin{beispiel}
- Die Rotationssymmetrie des Kreises \(C_\infty\), mit einem unendlichen Kontinuum von Werten \(\alpha \in \mathbb{R}\), entspricht perfekt dem komplexen Einheitskreis.
+ Die Rotationssymmetrie des Kreises \(C_\infty\), mit einem unendlichen Kontinuum von Werten \(\alpha \in \mathbb{R}\), entspricht genau dem komplexen Einheitskreis.
Der Homomorphismus \(\phi: C_\infty \to \mathbb{C}\) ist durch die Eulersche Formel \(\phi(r) = e^{i\alpha}\) gegeben.
\end{beispiel}
\begin{definition}[Darstellung einer Gruppe]
- Die Darstellung einer Gruppe ist ein Homomorphismus, der eine Symmetriegruppe auf eine Menge von Matrizen abbildet.
+ Die Darstellung einer Gruppe ist ein Homomorphismus
\[
- \Phi: G \to \operatorname{GL}_n(\mathbb{R}).
+ \Phi: G \to \operatorname{GL}_n(\mathbb{R}),
\]
- Äquivalent kann man sagen, dass ein Element aus der Symmetriegruppe auf einen Vektorraum \(V\) wirkt, indem man definiert \(\Phi : G \times V \to V\).
+ der eine Symmetriegruppe auf eine Menge von Matrizen abbildet.
+ Äquivalent kann man sagen, dass ein Element aus der Symmetriegruppe auf einen Vektorraum \(V\) wirkt, indem man \(\Phi : G \times V \to V\) definiert.
\end{definition}
\begin{beispiel}
Die Elemente \(r^k \in C_n\), wobei \(0 < k < n\), stellen abstrakt eine Drehung von \(2\pi k/n\) um den Ursprung dar.
diff --git a/buch/papers/reedsolomon/Makefile b/buch/papers/reedsolomon/Makefile
index 25fd98b..4be963e 100644
--- a/buch/papers/reedsolomon/Makefile
+++ b/buch/papers/reedsolomon/Makefile
@@ -24,7 +24,7 @@ SOURCES := \
TIKZFIGURES := \
tikz/polynom2.tex \
- tikz/plotfft.tex
+ tikz/fourier.tex
FIGURES := $(patsubst tikz/%.tex, figures/%.pdf, $(TIKZFIGURES))
diff --git a/buch/papers/reedsolomon/codebsp.tex b/buch/papers/reedsolomon/codebsp.tex
index 8430ebd..eb4e82f 100644
--- a/buch/papers/reedsolomon/codebsp.tex
+++ b/buch/papers/reedsolomon/codebsp.tex
@@ -76,7 +76,7 @@ dar.
\subsection{Der Ansatz der diskreten Fouriertransformation
\label{reedsolomon:subsection:diskFT}}
-In einem vorherigen Abschnitt \textcolor{red}{(???)} haben wir schon einmal die diskrete Fouriertransformation zum Codieren einer Nachricht verwendet. In den endlichen Körpern wird dies jedoch nicht gelingen, da die Eulerische Zahl $e$ in endlichen Körpern nicht existiert.
+Im vorherigen Abschnitt \ref{reedsolomon:section:dtf} haben wir schon einmal die diskrete Fouriertransformation zum Codieren einer Nachricht verwendet. In den endlichen Körpern wird dies jedoch nicht gelingen, da die Eulerische Zahl $e$ in endlichen Körpern nicht existiert.
Wir wählen deshalb eine Zahl $a$, die die gleichen Aufgaben haben soll wie $e^{\frac{j}{2 \pi}}$ in der diskreten Fouriertransformation, nur mit dem Unterschied, dass $a$ in $\mathbb{F}_{11}$ ist. Dazu soll die Potenz von $a$ den gesamten Zahlenbereich von $\mathbb{F}_{11}$ abdecken.
Dazu ändern wir die Darstellung von
\[
diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex
index 4552bed..9647775 100644
--- a/buch/papers/reedsolomon/dtf.tex
+++ b/buch/papers/reedsolomon/dtf.tex
@@ -1,85 +1,124 @@
%
% dtf.tex -- Idee mit DFT
%
-\section{Übertragung mit Hilfe der Diskrten Fourientransformation
+\section{Übertragung mit Hilfe der diskrten Fourier-Transformation
\label{reedsolomon:section:dtf}}
\rhead{Umwandlung mit DTF}
-Um die Polynominterpolation zu umgehen, gehen wir nun über in die Fourietransformation.
-Dies wird weder eine Erklärung der Forientransorfmation, noch ein genauer gebrauch für den Reed-Solomon-Code.
-Dieser Abschnitt zeigt nur wie die Fourietransformation auf Fehler reagiert.
-Das ganze zeigen wir mit einem Beispiel einer Übertragung von Zahlen mit Hilfe der Fourietransformation.
+Die Grundidee eines fehlerkorrigierenden Code ist, dass Informationen eines Datenpunktes
+durch die Codierung auf viele übertragene Werte verteilt werden.
+Die Decodierung ist in der Lage, den ursprünglichen Datenwert zu rekonstruieren,
+sogar wenn einzelne wenige übertragene Werte beschädigt worden sind.
+\par
+Die Fourier-Transformation transformiert einen einzelnen Wert,
+eine Dirac-Funktion, auf ein Spektrum, welches sich über die ganze Frequenzachse erstreckt.
+Aus der Filtertheorie ist bekannt, dass der ursprüngliche Impuls mehr oder weniger rekonstruierbar ist,
+ vorausgesetzt, es gehen nicht zu viele Frequenzen bei der Übertragung verloren.
+\par
+Es liegt daher nahe zu versuchen, die Fourier-Transformation
+für Codierung und Decodierung zu verwenden.
-\subsection{Diskrete Fourietransformation Zusamenhang
-\label{reedsolomon:subsection:dtfzusamenhang}}
-Mit hilfe der Fourietransformation werden die \textcolor{blue}{blauen Datenpunkte} transformiert,
-zu den \textcolor{darkgreen}{grünen Übertragungspunkten}.
-Durch eine Rücktransformation könnnen die \textcolor{blue}{blauen Datenpunkte} wieder rekonstruiert werden.
+\subsection{Beispiel mit Fehlerkorrektur mit Fourier-Transformation
+\label{reedsolomon:subsection:sendbsp}}
+Das folgende Beispiel soll zeigen, wie die Idee der Fehlerkorrektur umgesetzt wurde.
+Die Fehlererkennung des Reed-Solomon-Codes funktioniert nach einem sehr Ähnlichen Prinzip.
-\subsubsection{Beispiel einer Übertragung
-\label{reedsolomon:subsection:Übertragungsabfolge}}
-Der Auftrag ist nun 64 Daten zu übertragen und nach 32 Fehler abzusicheren,
-16 Fehler erkennen und rekonstruieren.
+%Das folgende Beispiel soll zeigen, wie Fehlerkorrektur möglich ist.
+%Dieses auf eine Art, die der Funktionsweise des Reed-Solomon-Codes,
+%der später erklärt wird, analog ist.
+\par
+Der Auftrag besteht darin, 64 Datenwerte zu übertragen, 32 Fehler erkennen können und bis zu 16 Fehler zu rekonstruieren.
+Mit Hilfe der Fourier-Transformation werden die \textcolor{blue}{blauen Datenpunkte} transformiert,
+zu den \textcolor{darkgreen}{grünen Übertragungspunkten}.
+Durch eine Rücktransformation können die \textcolor{blue}{blauen Datenpunkte} wieder rekonstruiert werden.
-Dieser Auftrag soll mittels Fouriertransformation bewerkstelligt werden.
-In der Abbildung \ref{reedsolomon:subsection:Übertragungsabfolge} sieht man dies Schritt für Schritt,
-und hier werden die einzelne Schritte erklärt:
-\begin{enumerate}[(1)]
- \item Das Signal hat 64 die Daten $k$, hier zufällige Zahlen, welche übertragen werden sollen.
- Zusätzlich soll nach 16 Fehler $t$, die rekonstruierbar sind abgesichert werden.
- Das macht dann insgesamt $k + 2t =
- 64 +2 \cdot 16= 96$ Übertragungszahlen.
- (siehe Abschnitt \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:Fehlerkorrekturstellen})
- Die 32 Fehlerkorrekturstellen werden als Nullzahlen Übertragen.
- \item Nun werden mittels der diskreten Fourietransformation diese 96 codiert, transformiert.
- Das heisst alle Informationen ist in alle Zahlenvorhanden, auch die Fehlerkorrekturstellen Nullzahlen.
- \item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75.
- Die Fehler können auf den ganzen 96 Übertragungswerten liegen, wie die 75 zeigt.
-Zu Beachten ist auch noch, dass der Fehler um das 20- bis 150-Fache kleiner ist.Die Fehlerskala ist rechts.
- \item Dieses wird nun Empfangen, man kann keine Fehler erkennen, da diese soviel kleiner sind.
- Für das Decodieren wird die Inverse Fourietransformation angewendet, und alle Fehler werden mittransformiert.
- \item Nun sieht man die Fehler im decodierten Signal in den Übertragungszahlen.
- Von den Übertragungsstellen 64 bis 96 erkennt man, das diese nicht mehr Null sind.
- \item Diese Fehlerkorrekturstellen 64 bis 96, dies definieren wir als Syndrom.
- In diesem Syndrom ist die Fehlerinformation gespeichert und muss nur noch transformiert werden.
- \item Hier sieht man genau wo die Fehler stattgefunden haben.
- Leider nicht mehr mit der Qualtiätt der Ursprünglichen Fehler, sie sind nur noch 0.6 oder 0.4 gross.
- Obwohl der Fehler um das 20Fache kleiner ist erkennt man im Locator die Fehlerstellen wieder.
- \end{enumerate}
- Nun haben wir mit Hilfe der Fourietransformation die 3 Fehlerstellen durch das Syndrom lokalisiert,
- jetzt gilt es nur noch diese zu korrigieren und wir haben unser originales Signal wieder.
-\begin{figure}
+\begin{figure}%[!ht]
\centering
- \resizebox{1.1\textwidth}{!}{
- \includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft}
+ \resizebox{\textwidth}{!}{
+ \includegraphics[width=\textwidth]{papers/reedsolomon/figures/fourier}
%\input{papers/reedsolomon/tikz/plotfftraw.tex}
}
- \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}}
+ \caption{Übertragungsabfolge \ref{reedsolomon:subsection:sendbsp}}
\label{fig:sendorder}
\end{figure}
+In der Abbildung \ref{fig:sendorder} wird eine Übertragung Schritt für Schritt illustriert.
+In der folgenden Aufzählung werden diese einzelne Schritte erklärt und erläutert:
+\begin{enumerate}[(1)]
+ \item Das Signal besteht aus 64 zufälligen, ganzzahligen Datenwerten zwischen 0 und 10.
+ Für die Rekonstruktion werden zusätzliche Datenwerte benötigt, wir fügen deshalb 32 Werte hinzu.
+ Diese setzen wir willkürlich alle auf Null und nennen sie Fehlerkorrekturstellen.
+ Wir erhalten so einen erweiterten Signalvektor der Länge $N =96$.
+ \item Mit der Fourier-Transformation wird der ganze Signalvektor codiert.
+ Dadurch wird jede Informationseinheit auf alle Punkte des Spektrums verteilt.
+ \item Wir dürfen annehmen, dass bei der Übertragung, nur einzelne übertragene
+ Werte durch Fehler verändert werden.
+ \par
+ Im Beispiel sind dies die Werte an den Stellen 6, 20 und 74 (\textcolor{red}{rote Kurve}),
+ die um einen Betrag verändert werden.
+ Dieser ist bis zu 150-mal kleiner als die ursprünglich codierten Werte.
+ Der Empfänger erkennt daher im allgemeinen nicht, ob und wo Übertragungsfehler aufgetreten sind.
+ \item Ohne Übertragungsfehler kann der Signalvektor durch die inverse Fourier-Transformation vollständig
+ wiederhergestellt werden.
+ Dazu gehören auch die Nullen an den Fehlerkorrekturstellen 64 - 96.
+ \par
+ Sind Übertragungsfehler aufgetreten, werden an diesen Stellen die Werte von Null abweichen.
+ Somit haben wir bereits Fehler erkannt.
+ \item Die Werte an den Fehlerkorrekturstellen 64 - 96, die nicht mehr Null sind, nennen wir das Syndrom.
+ Im Syndrom steckt nur Information über die Fehler, sie werden durch die inverse Fourier-Transformation erzeugt.
+ \item Um die Fehler zu rekonstruieren, kann man versuchen, die Information im Syndrom mit Fourier-Transformation zu transformieren.
+ Da das Syndrom nur ein Teil der Fehlerinformation ist, liefert die Fourier-Transformation eine Approximation der Fehler.
+ Diese Approximation der Fehler ist genau genug, um die Fehlerstellen zu lokalisieren.
+\end{enumerate}
+Im Beispiel haben wir mit dem Syndrom nur etwa ein Drittel der Fehlerinformation, es ist daher zu erwarten,
+dass die Fehlerwerte auch nur ein Drittel so gross sind.
+\par
+Damit können die Fehler korrigiert und die Originaldaten wiederhergestellt werden.
+Der Rekonstruktionsauftrag ist damit erfolgreich ausgeführt.
-Nun zur Definition der Diskrete Fourietransformation, diese ist definiert als
+\subsection{Fourier-Transformation und Polynome\label{reedsolomon:subsection:ftandpolynom}}
+Im Abschnitt \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:polynomansatz}
+wurden Werte eines Polynoms zur Codierung verwendet.
+Die 7 Übertragungspunkte könnten ein Polynom
+\begin{equation}
+ \textcolor{darkgreen}{p(x)}
+ =
+ \textcolor{blue}{a_0} + \textcolor{blue}{a_1}x + \textcolor{blue}{a_2}x^2 +
+ \textcolor{gray}{a_3}x^3 + \textcolor{gray}{a_4}x^4 + \textcolor{gray}{a_5}x^5 +
+ \textcolor{gray}{a_6}x^6
+\label{reedsolomon:equationpoly}
+\end{equation}
+sechsten Grades bestimmen.
+Durch die Wahl von $\textcolor{gray}{a_3=0}$, $\textcolor{gray}{a_4=0}$, $\textcolor{gray}{a_5=0}$, $\textcolor{gray}{a_6=0}$
+erzeugen wir die für die Fehlerkorrektur nötige Redundanz, ganz analog zum Schritt (1) im Beispiel.
+\par
+Die Analogie geht aber noch weiter.
+ Schreibt man
+ \( w =
+ e^{-\frac{2\pi j}{N} k}\)
+ \label{reedsolomon:DFT_summand}, damit wird aus der Formel
\begin{equation}
\hat{c}_{k}
= \frac{1}{N} \sum_{n=0}^{N-1}
- {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn}.
+ {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn}
,\label{reedsolomon:DFT}
\end{equation}
- Wenn man nun
+ für die diskrete-Fourier-Transformation das Polynom
\begin{equation}
- w =
- e^{-\frac{2\pi j}{N} k}
- \label{reedsolomon:DFT_summand}
+ q(w)=
+ \frac{{f}_0}{N} + \frac{{f}_1}{N} w^1 + \frac{{f}_2}{N} w^2 + \dots + \frac{{f}_{N-1}}{N} w^{N-1}.
+ \label{reedsolomon:DFT_polynom}
\end{equation}
- ersetzte, und $N$ konstantbleibt, erhält man
+ Im Beispiel werden aber Werte des Polynoms
\begin{equation}
- \hat{c}_{k}=
- \frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N)
- \label{reedsolomon:DFT_polynom}
+ \textcolor{darkgreen}{q(w)}=
+ \frac{\textcolor{blue}{{f}_0}}{N} + \frac{\textcolor{blue}{{f}_1}}{N} w^1 + \frac{\textcolor{blue}{{f}_2}}{N} w^2 + \dots +
+ \frac{\textcolor{blue}{{f}_{63}}}{N} w^{63} + \frac{\textcolor{gray}{{f}_{64}}}{N} w^{64} + \textcolor{gray}{\dots} + \frac{\textcolor{gray}{{f}_{N-1}}}{N} w^{N-1}
+ \label{reedsolomon:DFT_polynom2}
\end{equation}
- was überaust ähnlich zu unserem Polynomidee ist.
-Die Polynominterpolation und die Fourietransformation rechnen beide mit reelen Zahlen.
-Wenn die Fehlerabweichung sehr sehr klein ist, erkennt man diese irgendwann nicht mehr.
-Zusätzlich muss mann immer Grenzen bestimmen auf wieviel Stellen gerechnet wird und wie die Fehler erkannt werden im Locator.
-Deshalb haben Mathematiker einen neuen Körper gesucht und ihn in der Endlichkeit gefunden,
-dies wird nun im nächsten Abschnitt genauer erklärt.
-
+ für verschiedene \( w = e^{-\frac{2\pi j}{N} k}, k=1, \dots ,N-1\) übermittelt.
+Das Syndrom entstand durch die Wahl ${f_{64}}=0$ bis ${f}_{N-1}=0$ (graue Koeffizenten).
+\par
+Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reellen Zahlen.
+Wenn die Approximation nicht mehr genügend gut ist um die Fehler zu erkennen und rekonstruieren,
+dann brauchen wir andere Varianten.
+Um dieser Approximation zu entkommen, verlassen wir die reellen Zahlen und gehen zum endlichen Körpern, oder auch Galois-Körper genannt.
+Dieser bietet uns einige Vorteile. \ No newline at end of file
diff --git a/buch/papers/reedsolomon/einleitung.tex b/buch/papers/reedsolomon/einleitung.tex
index 074df05..f99ad82 100644
--- a/buch/papers/reedsolomon/einleitung.tex
+++ b/buch/papers/reedsolomon/einleitung.tex
@@ -6,11 +6,11 @@
\section{Einleitung
\label{reedsolomon:section:einleitung}}
\rhead{Einleitung}
-Der Reed-Solomon-Code ist entstanden um,
-das Problem der Fehler bei der Datenübertragung, zu lösen.
-In diesem Abschnitt wird möglichst verständlich die mathematische Abfolge,
-Funktion oder Algorithmus des Reed-Solomon-Code erklärt.
-Es wird jedoch nicht auf die technische Umsetzung oder Implementierung eingegangen.
+Der Reed-Solomon-Code wurde von den beiden Mathematiker Irving S. Reed und Gustave Solomon im Jahre 1960 entwickelt.
+Dabei haben sie das Problem der Fehlerhaften Datenübertragung gelöst.
+In diesem Abschnitt wird möglichst verständlich die mathematische Abfolge und
+Funktionsweise des Reed-Solomon-Code erklärt.
+Es wird jedoch nicht auf die technische Umsetzung oder Implementierung eingegangen, jedoch wird im Abschnitt \ref{reedsolomon:section:anwendung} einige Anwendungen des Reed-Solomon-Codes vorgestellt.
diff --git a/buch/papers/reedsolomon/endlichekoerper.tex b/buch/papers/reedsolomon/endlichekoerper.tex
index 1d196fd..3019dd7 100644
--- a/buch/papers/reedsolomon/endlichekoerper.tex
+++ b/buch/papers/reedsolomon/endlichekoerper.tex
@@ -3,21 +3,63 @@
%
% (c) 2021 Michael Steiner, Hochschule Rapperswil
%
-\section{Reed-Solomon in Endlichen Körpern
+\section{Reed-Solomon in endlichen Körpern
\label{reedsolomon:section:endlichekoerper}}
\rhead{Reed-Solomon in endlichen Körpern}
-\[
-\textcolor{red}{\text{TODO: (warten auf den 1. Teil)}}
-\]
-Das Rechnen in endlichen Körpern bietet einige Vorteile:
+Im vorherigen Abschnitt haben wir gesehen, dass wir die Fehler mittels Approximation suchen und somit nur ungefähre Angaben haben, wo sich Fehler aufhalten.
+Um dies zu ändern wechseln wir vom komplexen Zahlenraum in endliche Körper.
+In endlichen Körpern gibt es keine Approximationen wie bei den rationalen und reellen Zahlen.
+Alle Zahlen sind richtig oder falsch, ``fast richtig'' gibt es nicht.
+Zudem beschränken sich die arithmetischen Rechenoperationen auf das Addieren und Multiplizieren.
+Wir können also nur ganze Zahlen als Resultat erhalten.
+Dies erleichtert auch die Umsetzung auf ein digitales System, da Computer in der Regel lieber mit ganzen als mit gebrochenen oder komplexen Zahlen arbeiten.
-\begin{itemize}
- \item Konkrete Zahlen: In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. Zudem beschränken sich die möglichen Rechenoperationen auf das Addieren und Multiplizieren. Somit können wir nur ganze Zahlen als Resultat erhalten.
-
- \item Digitale Fehlerkorrektur: lässt sich nur in endlichen Körpern umsetzen.
-
-\end{itemize}
+Um jetzt eine Nachricht in einem endlichen Körpern zu konstruieren gehen, wir im Grunde gleich vor wie im Beispiel aus dem Abschnitt \ref{reedsolomon:subsection:sendbsp}.
+Eine Nachricht besteht aus einem Nutzdatenteil und einem Fehlerkorrekturteil.
+Diese Nachricht wird codiert, übertragen und beim Empfänger wieder decodiert.
+In endlichen Körpern können wir jedoch nicht mehr die Fouriertransformation zur Hilfe nehmen.
+Wir müssen also eine Alternative finden, welche die gleichen Eigenschaften wie die Fouriertransformation aufweist, aber im endlichen Körper verwendet werden kann.
+Auch beim Decodieren müssen wir uns etwas einfallen lassen, wenn die Vorgehensweise mit dem Lokator auch in endlichen Körpern funktionieren soll. Die folgenden Abschnitte widmen sich deshalb der genaueren Betrachtung eines Reed-Solomon-Codes und wie er in endlichen Körpern funktioniert.
-Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren legen wir fest, dass diese Nachricht aus einem Nutzdatenteil und einem Fehlerkorrekturteil bestehen muss. Somit ist die zu übertragende Nachricht immer grösser als die Daten, die wir übertragen wollen. Zudem müssen wir einen Weg finden, den Fehlerkorrekturteil so aus den Nutzdaten zu berechnen, dass wir die Nutzdaten auf der Empfängerseite wieder rekonstruieren können, sollte es zu einer fehlerhaften Übertragung kommen.
-
-Nun stellt sich die Frage, wie wir eine fehlerhafte Nachricht korrigieren können, ohne ihren ursprünglichen Inhalt zu kennen. Der Reed-Solomon-Code erzielt dies, indem aus dem Fehlerkorrekturteil ein sogenanntes ``Lokatorpolynom'' generiert werden kann. Dieses Polynom gibt dem Emfänger an, welche Stellen in der Nachricht feherhaft sind.
+%
+%Damit all diese Probleme möglichst verständlich
+%
+%
+%Um all diese Probleme und möglichst
+%
+%
+%um Fehler zu erkennen und mittels Lokatorpolynom
+%
+%
+% ein Lokatorpolynom zu finden.
+%
+%
+%
+% Eine Nachricht besteht aus einem Nutzdatenanteil und einem Fehlerkorrekturteil,
+%
+%
+%
+%In diesem Zahlenraum gibt es nur Natürliche Zahlen und es darf nur Addiert oder Multipliziert werden.
+%Der grosse Vorteil an endlichen Körper ist, dass dich der einfacher Digital umsetzen lässt.
+%
+%
+%Dieser Zahlenraum bringt eine Menge von neuen Regeln mit sich.
+%So gibt es dort nur Natürliche Zahlen und die Arithmetischen Rechenoperationen sind beschränkt auf die Addition und Multiplikation.
+%
+%
+%
+%\[
+%\textcolor{red}{\text{TODO: (warten auf den 1. Teil)}}
+%\]
+%Das Rechnen in endlichen Körpern bietet einige Vorteile:
+%
+%\begin{itemize}
+% \item Konkrete Zahlen: In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. Zudem beschränken sich die möglichen Rechenoperationen auf das Addieren und Multiplizieren. Somit können wir nur ganze Zahlen als Resultat erhalten.
+%
+% \item Digitale Fehlerkorrektur: lässt sich nur in endlichen Körpern umsetzen.
+%
+%\end{itemize}
+%
+%Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren legen wir fest, dass diese Nachricht aus einem Nutzdatenteil und einem Fehlerkorrekturteil bestehen muss. Somit ist die zu übertragende Nachricht immer grösser als die Daten, die wir übertragen wollen. Zudem müssen wir einen Weg finden, den Fehlerkorrekturteil so aus den Nutzdaten zu berechnen, dass wir die Nutzdaten auf der Empfängerseite wieder rekonstruieren können, sollte es zu einer fehlerhaften Übertragung kommen.
+%
+%Nun stellt sich die Frage, wie wir eine fehlerhafte Nachricht korrigieren können, ohne ihren ursprünglichen Inhalt zu kennen. Der Reed-Solomon-Code erzielt dies, indem aus dem Fehlerkorrekturteil ein sogenanntes ``Lokatorpolynom'' generiert werden kann. Dieses Polynom gibt dem Emfänger an, welche Stellen in der Nachricht feherhaft sind.
diff --git a/buch/papers/reedsolomon/figures/fourier.pdf b/buch/papers/reedsolomon/figures/fourier.pdf
new file mode 100644
index 0000000..4995141
--- /dev/null
+++ b/buch/papers/reedsolomon/figures/fourier.pdf
Binary files differ
diff --git a/buch/papers/reedsolomon/figures/plotfft.pdf b/buch/papers/reedsolomon/figures/plotfft.pdf
index 80d17d2..80adafb 100644
--- a/buch/papers/reedsolomon/figures/plotfft.pdf
+++ b/buch/papers/reedsolomon/figures/plotfft.pdf
Binary files differ
diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex
index 41e0d4c..daa2913 100644
--- a/buch/papers/reedsolomon/idee.tex
+++ b/buch/papers/reedsolomon/idee.tex
@@ -4,61 +4,106 @@
\section{Idee
\label{reedsolomon:section:idee}}
\rhead{Problemstellung}
-Um beim Datenübertragen Fehler zu erkennen, könnte man die Daten jeweils doppelt senden,
-und so jeweilige Fehler zu erkennen.
-Doch nur schon um Fehler zu erkennen werden überproportional viele Daten doppelt und dreifach gesendet.
-Der Reed-Solomon-Code macht dies auf eine andere, clevere Weise.
-Das Problem liegt darin Informationen, Zahlen,
-zu Übertragen und Fehler zu erkennen.
-Speziell beim Reed-Solomon-Code kann man nicht nur Fehler erkennen,
-man kann sogar einige Fehler korrigieren.
-Der Unterschied des Fehler erkennen und korrigiren, ist das beim Erkennen nur die Frage beantwortet wird: Ist die Übertragung fehlerhaft oder nicht?
-Beim Korrigieren werden Fehler erkannt und dann zusätzlich noch den original Wert rekonstruieren.
-Auch eine Variante wäre die Daten nach einer Fehlerhaften sendung, nochmals zum senden auffordern(auch hier wird doppelt und dreifach gesendung),
-was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvoll ist.
-Anwendungen finden sind im Abchnitt \externaldocument{papers/reedsolomon/anwendungen}
-\ref{reedsolomon:section:anwendung} beschrieben.
+Um Fehler in einer Datenübertragung zu erkennen, könnte man die Daten jeweils doppelt senden,
+also den gleiche Wert immer zweimal versenden.
+Tritt ein Fehler ein wird sich dies in der Differenz der beiden Werten bemerkbar machen.
+Aber wie erkennen wir, welcher nun der richtige ist? Die Lösung ist simpel: Wir übertragen den Wert einfach dreimal.
+Wenn jetzt ein Fehler auftritt, kann durch die beiden unveränderten Werten den richtigen bestimmt werden.
+Doch was machen wir, wenn bei dieser Übertragung zwei Fehler auftreten?
+Oder noch schlimmer: Was wenn zweimal derselbe Fehler auftritt? Die beiden Fehlerhaften Werte überstimmen bei der Evaluierung den gesendeten Datenwert, der dann unwiderruflich verloren geht.
+Wir könnten dies noch steigern mit vier, fünf oder mehr gleichen Übertragenen Werte. Dies erhöht zwar die Robustheit der gesendeten Daten, führt aber auch dazu, dass wir durch die Mehrfachübertragung nur sehr wenige Nutzdaten versenden können.
+Gerade in unserer heutigen Zeit wäre dies ein enorm grosses Problem und aus diesem Grund wurden alternative Ansätze ausgearbeitet um dieses grundlegende Problem zu lösen.
+%
+%
+%Gerade in der heutigen modernen Zeit bei dem hohen bedarf an Daten würden unsere Kommunikationssysteme bei weitem nicht ausreichen um den einen einzigen Datenwert mehrfach zu übertragen
+%
+% Gerade in der Heutigen modernen Zeit bei diesem enormen mass an daten die wir alle tagtäglich anfordern Währe dies wohl unmöglich, wenn wir die daten auf diese Weise
+%
+%
+%
+%
+%
+%Wenn es uns gelingt, Fehler nach Ihrer Übertragung zu erkennen, dann könnten wir in einem neuen Ansatz den fehlerhaft empfangenen Wert noch einmal anfordern.
+%Wir stellen fest, dass für viele alltägliche Anwendungen völlig ausreichend ist.
+%
+%Was ist, wenn wir aber eine Datenquelle haben, von der wir nur einmalig lesen können?
+%
+%
+%
+%Beim Übertragen von drei Werten können wir maximal 2 Fehler erkennen aber nicht mehr korrigieren.
+%Wenn wir noch mehr Werte
+%
+%Wir Übertragen Ziemlich viele Werte für so wenige Nutzdaten. Hinzu kommt, dass wir bei dieser Vorgehensweise gerade mal bestimmen können, dass überhaupt Fehler aufgetreten sind
+%
+%
+%Wir haben also drei Werte die bestimmt einen Fehler korrigieren können, was ziemlich viele Werte um einen Fehler zu korrigieren.
+%
+% um so jeweils einzelne Fehler zu erkennen.
+%Wenn jedoch mehr als nur ein Fehler erkannt werden und sogar noch das Original rekonstruiert werden soll, dann sollen die Daten drei oder vierfach versendet werden.
+%Doch nur schon um einen Fehler zu erkennen werden überproportional viele Daten doppelt und dreifach versendet.
+%Das Hauptproblem ist, dass Informationen Fehlerfrei Übertragen werden sollen. Um dies zu erreichen muss gleich nach dem Empfangen Fehler erkannt und korrigiert werden.
+%
+%Das Problem liegt darin, Informationen oder Zahlen beim Übertragen gleichzeitig noch
+%
+%Das Problem liegt darin, das Informationen oder Zahlen zu Übertragen und gleichzeitig Fehler zu erkennen
+%
+%
+%Das Problem liegt darin Informationen, Zahlen, zu Übertragen und Fehler zu erkennen und zu korrigieren.
+%Der Unterschied des Fehler Erkennens und Korrigirens, ist das beim Erkennen nur die Frage beantwortet wird: Ist die Übertragung fehlerhaft oder nicht?
+%Beim Korrigieren werden Fehler erkannt und dann zusätzlich noch die Originalwerte rekonstruiert.
+%Eine weitere Möglichkeit wäre, dass der Empfänger nach einer fehlerhaften Übertragung die selben Daten nochmals anfordert.
+%Dies führt wieder zu unerwünschten mehrfachen Übertragung.
+%In Anwendungen des Reed-Solomon-Codes Abschnitt \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung}
+% ist diese vom Empfänger gesteuerte erneute Übertragen meistens nicht sinnvoll oder sogar unmöglich.
+%Der Reed-Solomon-Code macht dies Übertragung auf eine andere, clevere Weise.
\subsection{Polynom-Ansatz
\label{reedsolomon:section:polynomansatz}}
\rhead{Polynom-Ansatz}
-Eine Idee ist, aus den Daten ein Polynom zu bilden.
-Diese Polynomfunktion bei bestimmten Werten errechnet und diese Punkte dann überträgt.
-\begin{beispiel} Nehmen wir die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5},
-welche uns dann das Polynom
+Eine zentrale Idee des Reed-Solomon-Code ist, aus den Daten ein Polynom zu bilden.
+Mit dieser Polynomfunktion wird dann eine Anzahl von Werten übertragen.
+\begin{beispiel} Nehmen wir die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1} und \textcolor{blue}{5}, welche übertragen werden sollen. Daraus bilden wir das Polynom
\begin{equation}
p(x)
=
-\textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5}
+\textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5}.
\label{reedsolomon:equation1}
\end{equation}
-ergeben.
+\par
+Ein Polynom zweiten Grades ist durch drei Punkte eindeutig bestimmbar.
+Bei einer fehlerlosen Übertragung können wir mit 3 übertragenen Werten
+ das Polynom durch Polynominterpolation volständig rekonstruieren.
+Wir brauchen Polynominterpolation als Methode, um aus den Punkten wieder ein Polynom zu bilden.
+Die Koeffizente des rekonstruierten Polynoms sind dann unsere gesendeten Zahlen \textcolor{blue}{2}, \textcolor{blue}{1} und \textcolor{blue}{5}.
+\par
+Wie können wir nun Fehler erkennen oder sogar korrigieren?
+Versuchen wir doch, mehr Werte zu übertragen, wie zum Beispiel 7 Werte.
Übertragen werden nun die \textcolor{darkgreen}{grünen Werte}
-dieses \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3\dots 7 dieses Polynomes.
-Grafisch sieht man dies dann in Abbildung \ref{fig:polynom},
-mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{darkgreen}{8},
-\textcolor{darkgreen}{15}, \textcolor{darkgreen}{26},
-\textcolor{darkgreen}{41}, \textcolor{darkgreen}{60},
-\textcolor{darkgreen}{83}, \textcolor{darkgreen}{110})$
-Wenn ein Fehler sich in die Übertragung eingeschlichen hat, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren.
-Der Leser/Empfänger weiss, den Grad des Polynoms und dessen \textcolor{darkgreen}{Werte} übermittelt wurden.
-Die Farbe blau brauchen wir für die \textcolor{blue}{Daten} welche wir mit der Farbe grün \textcolor{darkgreen}{Übermitteln}.
-\end{beispiel}
+ des \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3, \dots , 7.
+In Abbildung \ref{fig:polynom} ist das zu den \textcolor{blue}{Datenpunkten} gehörige Polynom blau dargestellt,
+die \textcolor{darkgreen}{übertragenen Werte} des Polynoms sind grün, wobei diese Punkte aufgrund von Übertragungsfehler jetzt eine Parabel darstellen.
+Die Fehlerhaften Punkte lassen sich sehr einfach bestimmen, weil diese nicht auf der ursprünglichen Funktion liegen.
+Somit können die roten Punkte auf der Parabel durch die grauen ersetzt werden und sind damit korrigiert.
-\begin{beispiel}
-Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar.
-Hat es Fehler in der Übertragunge gegeben,in der Abbilbung \ref{fig:polynom} die \textcolor{red}{roten Punkte}).
-Erkennt man diese Fehler, da alle korrekten Punkte auf der Parabel liegen müssen.
-Die \textcolor{darkgreen}{grünen Punkte} bestimmen die Parabel, und die Fehler können zu den
-\textcolor{gray}{Orginalpunkte} rekonstruiert werden.
-Ab wie vielen Fehler ist das Polynom nicht mehr erkennbar beim Übertragen von 7 Punkten?
-Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten,
-gegenüber dem mit 5 Punkten falsch liegt. \ref{fig:polynom}
-Werden es mehr Fehler kann nur erkannt werden, dass das Polynom nicht stimmt.
-Das orginale Polynom kann aber nicht mehr gefunden werden.
-Da andere Polynome oder das Konkurrenzpolynom, grau gestrichelt in Abbildung \ref{fig:polynom}, das orginal fehlleitet.
-Um das Konkurrenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Übertragungspunkte} nötig.
-\end{beispiel}
+Bisher konnten wir von 7 Zahlen zwei Fehler erkennen und korrigieren. Können wir in diesem Beispiel noch mehr Fehler korrigieren?
+Wir erhöhen dazu die Fehleranzahl Schritt für Schritt:
+\begin{itemize}
+ \item[\textit{1 Fehler}:] Bei einem Fehler können konkurrenzierende, aber falsche Polynome zusammen mit zwei originalen Punkten entstehen.
+ Dabei können aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein.
+ Da 6 > 3 ist haben wir unser originales Polynom gefunden.
+ \item[\textit{2 Fehler}:] Bei Zwei Fehlern kann ein Fehler mit zwei originalen Punkten ein konkurrenzierendes, aber falsches Polynom bilden.
+ Da der zweite \textcolor{red}{Fehler} frei wählbar ist, kann dieser auch auf dem \textcolor{gray}{Konkurrenzpolynom} liegen, wie in der Abbilbung \ref{fig:polynom} zu sehen ist.
+ Nun haben wir, ein \textcolor{blue}{originales Polynom} mit \textcolor{darkgreen}{5} übereinstimmenden und ein konkurrenzierendes mit 4 Punkten.
+ Da 5 noch grösser als 4 ist, können wir sagen, welches das Originalpolynom ist.
+ \item[\textit{3 Fehler}:] Bei Drei kann genau wie bei 1 oder 2 Fehler, ein konkurenzierendes Polynom mit einem Fehler und zwei originalen Punkten bestimmt werden.
+ Auch hier sind die anderen Fehler frei wählbar und liegen auf dem Konkurrenzpolynom.
+ Nun ist es so das 5 Punkte auf diesem konkurenzierenden Polynom und 4 Punkte auf dem originalen.
+ Das Originalpolynom kann nicht mehr gefunden werden.
+ \item[\textit{4 Fehler}:] Bei Vier kann noch erkannt werden, dass Fehler aufgetreten sind, da 3 originale Punkte das ursprüngliche Polynom ergeben.
+ Somit haben wir mindestens 2 verschieden Polynome, was bedeutet, dass Fehler entstanden sind.
+ \item[\textit{5 Fehler:}] Bei Fünf kann mit den 2 originalen Punkte das Originale Polynom nicht mehr erkannt werden und
+ somit kann auch keine Aussage mehr gemacht werden, ob Fehler aufgetreten sind oder nicht.
+\end{itemize}
\begin{figure}%[!ht]
\centering
@@ -67,28 +112,18 @@ Um das Konkurrenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Üb
\caption{Polynom $p(x)$ von der Gleichung\eqref{reedsolomon:equation1}}
\label{fig:polynom}
\end{figure}
+\qedhere
+\end{beispiel}
-\section{Fehlerkorekturstellen bestimmen
+\section{Anzahl Übertragungswerte bestimmen
\label{reedsolomon:section:Fehlerkorrekturstellen}}
-Um zu bestimmen wieviel zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind, um die Fehler zu korrigieren,
-muss man zuerst wissen, wieviel \textcolor{blue}{Daten} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen.
-Die Anzahl \textcolor{blue}{Daten} (ab hier verwenden wir das Wort Nutzlast), die als Polynomkoeffizente $k$ übergeben werden,
-brauchen die gleiche Anzahl an Polynomkoeffizententräger, beginnend bei Grad 0 somit ergibt sich der Polynomgrad mit $k-1$.
-Für die Anzahl der Fehler $t$, welche korrigiert werden können, gehen wir zum Beispiel.
-\begin{beispiel} von den Polynom \ref{reedsolomon:equation1} in, welchem wir \textcolor{darkgreen}{7 Übertragungspunkte} senden.
-Durch 3 Punkte wird das Polyom eindeutig bestimmt, nun haben wir mehrere Konkurrenzpolynome, doch mit maximal 2 Fehler liegen auf einem Konkurrenzpolynom,
-maximal 4 Punkte und auf unserem orginal 5 Punkte. Ansonsten hatt es mehr Fehler oder unser Konkurrenzpolynom ist das gleiche wie das Original.
-Somit können wir nun bestimmen, dass von den \textcolor{darkgreen}{7 Übertragungspunkten$u$} bis zu 2 Fehler korrigiert werden können und 4 Übertragungspunkte zusätzlich gesendet werden müssen.
-\end{beispiel}
-Man könnte auch dies in der Tabelle \ref{tab:fehlerkorrekturstellen} erkennen, doch mit dieser Gleichung
-\begin{equation}
- \frac{\textcolor{darkgreen}{u}-\textcolor{blue}{k}}{\textcolor{red}{t}}
- =2
- \label{reedsolomon:equation2}
-\end{equation}
-zeigt sich, dass es $k+2t$ Übertragungspunkte braucht.
+Um zu bestimmen, wie viele zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind um die Fehler zu korrigieren,
+ muss man zuerst wissen, wie viele \textcolor{blue}{Datenwerte} gesendet und wie viele \textcolor{red}{Fehler} erkannt werden sollen.
+Die Anzahl Datenwerte ergeben die Anzahl Polynomkoeffizenten \textcolor{blue}{$k$} und somit den Grad $k-1$ des Polynoms.
+Die Bestimmung der Anzahl der Fehler \textcolor{red}{$t$}, welche korrigiert werden können, braucht Redundanz.
+Bilden wir verschieden grosse Polynome und untersuchen diese mit unterschiedlich vielen Fehlern erkennt man allmählich ein Muster.
-\begin{table}
+\begin{table}%[!ht]
\centering
\begin{tabular}{ c c | c}
\hline
@@ -104,8 +139,19 @@ zeigt sich, dass es $k+2t$ Übertragungspunkte braucht.
\caption{ Fehlerkorrekturstellen Bestimmung.}
\label{tab:fehlerkorrekturstellen}
\end{table}
+\par
+Es müssen mehr Punkte auf dem \textcolor{blue}{originalen Polynom} liegen, als auf dem konkurenzierenden.
+Somit braucht man für die Übertragung pro \textcolor{red}{Fehler} zwei Übertragungspunkte mehr.
+Wie in der Tabelle \ref{tab:fehlerkorrekturstellen} ersichtlich ist ergeben sich diese Anzahl an \textcolor{darkgreen}{Punkte} für die Übertragung.
+\begin{equation}
+ \textcolor{darkgreen}{u}=
+ \textcolor{blue}{k}+2\textcolor{red}{t}.
+ \label{reedsolomon:equation2}
+\end{equation}
+
+Ein Nebeneffekt ist, dass auch $2t$ Fehler erkannt werden können, die aber nicht korrigiert werden können.
+Um die Polynomkoeffizenten nach der Übertragung zu rekonstruieren, haben wir jedes mal die Polynominterpolationsmethode angewendet.
+Diese Polynominterpolation ist leider schwierig zu berechnen und sehr fehleranfällig.
+Es wäre daher einfacher, wenn wir eine alternative Vorgehensweise finden könnten.
-Ein Nebeneffekt ist, dass dadurch auch $2t$ Fehler erkannt werden können, nicht aber korrigiert.
-Um aus den übertragenen Zahlen wieder die Nutzlastzahlen zu bekommen könnte man eine Polynominterpolation anwenden,
-doch die Punkte mit Polynominterpolation zu einem Polynom zu rekonstruieren ist schwierig und fehleranfällig.
diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf
index 4a44333..dfa9eea 100644
--- a/buch/papers/reedsolomon/standalone/standalone.pdf
+++ b/buch/papers/reedsolomon/standalone/standalone.pdf
Binary files differ
diff --git a/buch/papers/reedsolomon/tikz/Makefile b/buch/papers/reedsolomon/tikz/Makefile
new file mode 100644
index 0000000..1753f37
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/Makefile
@@ -0,0 +1,7 @@
+#
+# Makefile
+#
+# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+#
+fourier.pdf: fourier.tex
+ pdflatex fourier.tex
diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf
new file mode 100644
index 0000000..7e0198b
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/fourier.pdf
Binary files differ
diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex
new file mode 100644
index 0000000..7b4ccea
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/fourier.tex
@@ -0,0 +1,139 @@
+%
+% Plot der Übertrangungsabfolge ins FFT und zurück mit IFFT
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{pgfplots}
+\usepackage{pgfplotstable}
+\usepackage{csvsimple}
+\usepackage{filecontents}
+
+\def\plotwidth{7.5cm}
+\def\plotheight{5.5cm}
+\def\xverschiebung{4.5cm}
+\def\yverschiebung{-7cm}
+\def\yyverschiebung{-14cm}
+
+\def\marke#1{
+ \coordinate (M) at (-0.8,4.6);
+ \fill[color=lightgray] (M) circle[radius=0.3];
+ \draw (M) circle[radius=0.3];
+ \node at (M) {#1};
+}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\begin{document}
+\begin{tikzpicture}[>=latex,thick]
+
+\fill[color=blue!10] (-5.7,-14.5) rectangle (2.6,5.0);
+\fill[color=darkgreen!10] (2.6,-14.5) rectangle (11.1,5.0);
+
+\draw[dashed,line width=2pt,color=lightgray] (2.6,4.9) -- (2.6,-14.4);
+\coordinate (B) at (2.6,-1.3);
+\node[color=gray] at (B) [rotate=90,above] {Zeitbereich\strut};
+\node[color=gray] at (B) [rotate=90,below] {Frequenzbereich\strut};
+
+\begin{scope}[xshift=-\xverschiebung,yshift=0cm]
+ \begin{axis}
+ [title = {\large Signal\strut},
+ xtick={0,32,64,96},
+ axis background/.style={fill=white},
+ width=\plotwidth,height=\plotheight]
+ \addplot[blue,line width=1pt] table[col sep=comma]
+ {tikz/signal.txt};
+ \end{axis}
+ \marke{1}
+\end{scope}
+
+\begin{scope}[xshift=\xverschiebung,yshift=0cm]
+ \begin{axis}[title = {\large Codiert\strut},
+ xtick={0,32,64,96},
+ axis background/.style={fill=white},
+ width=\plotwidth,height=\plotheight]
+ \addplot[color=black!60!green,line width=1pt]
+ table[col sep=comma]
+ {tikz/codiert.txt};
+ \end{axis}
+ \marke{2}
+ \draw[->,line width=1pt] (3,-0.4) -- node[right] {Übertragung} (3,-2.2);
+\end{scope}
+
+\definecolor{pink}{rgb}{0.6,0.2,1}
+
+\begin{scope}[xshift=-\xverschiebung,yshift=\yverschiebung]
+ %\fill[color=pink!20] (4.65,0.35) ellipse (1.1cm and 0.5cm);
+ \begin{axis}[title = {\large Decodiert\strut},
+ xtick={0,32,64,96},
+ axis background/.style={fill=white},
+ width=\plotwidth,height=\plotheight]
+ \addplot[blue,line width=1pt]
+ table[col sep=comma] {tikz/decodiert.txt};
+ \end{axis}
+ \marke{4}
+ \draw[color=pink] (4.65,0.35) ellipse (1.1cm and 0.5cm);
+ \draw[->,color=pink,line width=1pt]
+ (4.65,-0.15) to[out=-90,in=90] (3,-2.2);
+\end{scope}
+
+\begin{scope}[xshift=\xverschiebung,yshift=\yverschiebung]
+ \begin{axis}[title = {\large Empfangen {\color{red} mit Fehlern}\strut},
+ xtick={0,96},
+ axis background/.style={fill=white},
+ axis y line*=left,
+ width=\plotwidth,height=\plotheight]
+ \addplot[color=black!60!green,line width=1pt]
+ table[col sep=comma]
+ {tikz/empfangen.txt};
+ \end{axis}
+ \begin{axis}[xtick={6,20,74}, axis y line*=right,
+ width=\plotwidth,height=\plotheight]
+ \addplot[red,line width=1pt]
+ table[col sep=comma] {tikz/fehler.txt};
+ \end{axis}
+ \marke{3}
+\end{scope}
+
+\begin{scope}[xshift=-\xverschiebung,yshift=\yyverschiebung]
+ \begin{axis}[title = {\large \color{pink}Syndrom\strut},
+ xtick={0,32,64,96},
+ axis background/.style={fill=white},
+ width=\plotwidth,height=\plotheight]
+ \addplot[pink,line width=1pt]
+ table[col sep=comma] {tikz/syndrom.txt};
+ \end{axis}
+ \marke{5}
+\end{scope}
+
+\begin{scope}[xshift=\xverschiebung,yshift=\yyverschiebung]
+ % Beschriftung Rechts
+ \begin{axis}[axis x line= none, axis y line*=right, ytick={0.3},
+ xtick={0,32,64,96},
+ axis background/.style={fill=white},
+ width=\plotwidth,height=\plotheight]
+ \addplot[color=black!60,line width=1pt] {0.3};
+ \end{axis}
+ \begin{axis}[title = {\large Lokator\strut},axis y line*=left,
+ xtick={0,6,20,74,96},
+ width=\plotwidth,height=\plotheight]
+ \addplot[gray,line width=1pt]
+ table[col sep=comma] {tikz/locator.txt};
+ \end{axis}
+ \marke{6}
+\end{scope}
+
+% Fourier-Transformations-Pfeile
+
+\draw[->,line width=1pt] (1.8,2) -- node[above] {DFT\strut} (3.8,2);
+
+\begin{scope}[yshift=\yverschiebung]
+\draw[<-,line width=1pt] (1.8,2) -- node[above] {DFT$\mathstrut^{-1}$} (3.8,2);
+\end{scope}
+
+\begin{scope}[yshift=\yyverschiebung]
+\draw[->,line width=1pt] (1.8,2) -- node[above] {DFT\strut} (3.8,2);
+\end{scope}
+
+\end{tikzpicture}
+\end{document}
diff --git a/buch/papers/reedsolomon/tikz/plotfft.tex b/buch/papers/reedsolomon/tikz/plotfft.tex
index bb74dfb..77c4dc3 100644
--- a/buch/papers/reedsolomon/tikz/plotfft.tex
+++ b/buch/papers/reedsolomon/tikz/plotfft.tex
@@ -10,6 +10,7 @@
\usepackage{filecontents}
+
\begin{document}
\begin{tikzpicture}[]
@@ -28,12 +29,13 @@
\node(codiert) [] {
\begin{tikzpicture}[]
- \begin{axis}[ title = {\Large {Codiert \space + \space Fehler}},
- xtick={0,40,60,100}, axis y line*=left]
- \addplot[green] table[col sep=comma] {tikz/codiert.txt};
+ % Beschriftung Rechts
+ \begin{axis}[axis x line= none, axis y line*=right,ytick={0}]
+ \addplot[color=white] {0};
\end{axis}
- \begin{axis}[xtick={7,21,75}, axis y line*=right]
- \addplot[red] table[col sep=comma] {tikz/fehler.txt};
+
+ \begin{axis}[ title = {\Large {Codiert}}, axis y line*=left]
+ \addplot[color=black!60!green] table[col sep=comma] {tikz/codiert.txt};
\end{axis}
\end{tikzpicture}}; \\
@@ -46,8 +48,12 @@
\node(empfangen) [] {
\begin{tikzpicture}
- \begin{axis}[title = {\Large {Empfangen}}]
- \addplot[green] table[col sep=comma] {tikz/empfangen.txt};
+ \begin{axis}[title = {\Large {Empfangen \space + \space Fehler}},
+ xtick={0,40,60,100}, axis y line*=left]
+ \addplot[color=black!60!green] table[col sep=comma] {tikz/empfangen.txt};
+ \end{axis}
+ \begin{axis}[xtick={7,21,75}, axis y line*=right]
+ \addplot[red] table[col sep=comma] {tikz/fehler.txt};
\end{axis}
\end{tikzpicture}};\\
@@ -60,7 +66,12 @@
\node(locator) [] {
\begin{tikzpicture}
- \begin{axis}[title = {\Large {Locator}}]
+ % Beschriftung Rechts
+ \begin{axis}[axis x line= none, axis y line*=right, ytick={0.3}];
+ \addplot[color=black!60] {0.3};
+ \end{axis}
+
+ \begin{axis}[title = {\Large {Locator}},axis y line*=left]
\addplot[gray] table[col sep=comma] {tikz/locator.txt};
\end{axis}
\end{tikzpicture}};\\
@@ -74,7 +85,6 @@
\node(FFT) [scale=0.9, above of=IFFT] {FFT};
\draw[-stealth](FFT.north west)--(FFT.north east);
- \draw[thick, ->,] (codiert)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5);
%Arrows
\draw[thick, ->] (signal.east) to (codiert.west);
\draw[thick, ->] (codiert.south) to (empfangen.north);
@@ -85,10 +95,10 @@
%item
\node[circle, draw, fill =lightgray] at (signal.north west) {1};
- \node[circle, draw, fill =lightgray] at (codiert.north west) {2+3};
- \node[circle, draw, fill =lightgray] at (empfangen.north west) {4};
- \node[circle, draw, fill =lightgray] at (decodiert.north west) {5};
- \node[circle, draw, fill =lightgray] at (syndrom.north west) {6};
- \node[circle, draw, fill =lightgray] at (locator.north west) {7};
+ \node[circle, draw, fill =lightgray] at (codiert.north west) {2};
+ \node[circle, draw, fill =lightgray] at (empfangen.north west) {3};
+ \node[circle, draw, fill =lightgray] at (decodiert.north west) {4};
+ \node[circle, draw, fill =lightgray] at (syndrom.north west) {5};
+ \node[circle, draw, fill =lightgray] at (locator.north west) {6};
\end{tikzpicture}
\end{document} \ No newline at end of file
diff --git a/buch/papers/reedsolomon/tikz/plotfftraw.tex b/buch/papers/reedsolomon/tikz/plotfftraw.tex
index 141d2ce..db35734 100644
--- a/buch/papers/reedsolomon/tikz/plotfftraw.tex
+++ b/buch/papers/reedsolomon/tikz/plotfftraw.tex
@@ -1,3 +1,4 @@
+
\begin{tikzpicture}[]
%---------------------------------------------------------------
diff --git a/buch/papers/reedsolomon/tikz/tikz/codiert.txt b/buch/papers/reedsolomon/tikz/tikz/codiert.txt
new file mode 100644
index 0000000..4a481d8
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/tikz/codiert.txt
@@ -0,0 +1,96 @@
+0,284
+1,131.570790435043
+2,41.9840308053375
+3,12.1189172092243
+4,23.8408857476069
+5,69.1793197789512
+6,24.0186013379153
+7,37.3066577242559
+8,18.2010889773887
+9,12.3214904922455
+10,15.6627133315015
+11,24.5237955316204
+12,32.1114345314062
+13,44.9845039238714
+14,13.5324640263625
+15,10.1736266929292
+16,4.58257569495584
+17,23.217268502288
+18,16.5769107917917
+19,6.89948680823017
+20,4.84567134895776
+21,10.4219666223433
+22,43.6179140616243
+23,35.9073375743642
+24,15.0332963783729
+25,21.7594021268945
+26,23.2496572716993
+27,17.9815599423852
+28,11.3577742151117
+29,38.467599433197
+30,28.3035029562577
+31,9.54321919833388
+32,21.377558326432
+33,17.6292439561917
+34,12.6951848921471
+35,20.0667752354841
+36,22.9097309529208
+37,8.78894645948548
+38,13.360682005498
+39,25.1757616314718
+40,38.0357773686457
+41,18.4633287776253
+42,19.0584505869806
+43,10.8631093309173
+44,12.6147770818983
+45,12.5398140021274
+46,34.901983501949
+47,22.3480442021702
+48,6
+49,22.3480442021702
+50,34.901983501949
+51,12.5398140021274
+52,12.6147770818983
+53,10.8631093309173
+54,19.0584505869806
+55,18.4633287776253
+56,38.0357773686457
+57,25.1757616314718
+58,13.360682005498
+59,8.78894645948548
+60,22.9097309529208
+61,20.0667752354841
+62,12.6951848921471
+63,17.6292439561917
+64,21.377558326432
+65,9.54321919833388
+66,28.3035029562577
+67,38.467599433197
+68,11.3577742151117
+69,17.9815599423852
+70,23.2496572716993
+71,21.7594021268945
+72,15.0332963783729
+73,35.9073375743642
+74,43.6179140616243
+75,10.4219666223433
+76,4.84567134895776
+77,6.89948680823017
+78,16.5769107917917
+79,23.217268502288
+80,4.58257569495584
+81,10.1736266929292
+82,13.5324640263625
+83,44.9845039238714
+84,32.1114345314062
+85,24.5237955316204
+86,15.6627133315015
+87,12.3214904922455
+88,18.2010889773887
+89,37.3066577242559
+90,24.0186013379153
+91,69.1793197789512
+92,23.8408857476069
+93,12.1189172092243
+94,41.9840308053375
+95,131.570790435043
diff --git a/buch/papers/reedsolomon/tikz/tikz/decodiert.txt b/buch/papers/reedsolomon/tikz/tikz/decodiert.txt
new file mode 100644
index 0000000..f6221e6
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/tikz/decodiert.txt
@@ -0,0 +1,96 @@
+0,6.05208333333333
+1,6.02602539785853
+2,0.0261327016093151
+3,5.98927158561317
+4,4.019445724874
+5,0.0247005083663722
+6,4.97798278395618
+7,1.95246440445439
+8,0.974000110512201
+9,2.00528527696027
+10,1.00071804528155
+11,1.97630907888264
+12,0.0232923747656228
+13,6.01302820392331
+14,3.03567381915226
+15,5.02435590137329
+16,7.00526061008995
+17,5.00739608089369
+18,5.02211514480064
+19,4.02175864806658
+20,1.00236543833726
+21,4.98147315261261
+22,8.97728828610336
+23,8.98481304394618
+24,2.98958333333333
+25,1.98491220960989
+26,5.97728835934715
+27,5.98144124907561
+28,4.00163839998525
+29,2.02176249296313
+30,9.02210713874162
+31,1.00742763919872
+32,1.00557258081044
+33,1.02435888848794
+34,2.03577412756745
+35,6.01302820392331
+36,5.97917574041123
+37,0.976310374034338
+38,9.00062625447998
+39,7.00515849238528
+40,6.97396416790894
+41,0.95256880864368
+42,8.97794719866783
+43,9.01850701506487
+44,10.0194409579917
+45,8.98926601525997
+46,7.9866590265379
+47,5.02603060999077
+48,2.05208333333333
+49,4.02603841132848
+50,0.986882897867895
+51,0.0177592928994285
+52,9.01944131204563
+53,3.0185365665612
+54,2.97803642439316
+55,2.95243072164649
+56,4.97396651395488
+57,6.00516695947321
+58,0.0143895905726619
+59,7.97630812771393
+60,5.97917574041123
+61,9.01298821331865
+62,3.03567381915226
+63,4.02435609145793
+64,0.0275599094902563
+65,0.0115837187254191
+66,0.025877761014238
+67,0.0224618032819697
+68,0.04410594689944
+69,0.0474504002669341
+70,0.0227694695500626
+71,0.0271436638090525
+72,0.0104166666666667
+73,0.0271436638090523
+74,0.0227694695500608
+75,0.0474504002669343
+76,0.0441059468994397
+77,0.0224618032819701
+78,0.0258777610142379
+79,0.0115837187254183
+80,0.027559909490256
+81,0.0245124379481793
+82,0.0499782237195209
+83,0.0401432022864265
+84,0.0232923747656228
+85,0.0237974288564099
+86,0.0143895905726624
+87,0.0271745729691685
+88,0.0275599094902567
+89,0.0515501672184983
+90,0.0358255004834542
+91,0.024700508366373
+92,0.0210194725405171
+93,0.0177592928994296
+94,0.0261327016093158
+95,0.0314909067039411
diff --git a/buch/papers/reedsolomon/tikz/tikz/empfangen.txt b/buch/papers/reedsolomon/tikz/tikz/empfangen.txt
new file mode 100644
index 0000000..38c13b0
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/tikz/empfangen.txt
@@ -0,0 +1,96 @@
+0,284
+1,131.570790435043
+2,41.9840308053375
+3,12.1189172092243
+4,23.8408857476069
+5,69.1793197789512
+6,23.6290258699579
+7,37.3066577242559
+8,18.2010889773887
+9,12.3214904922455
+10,15.6627133315015
+11,24.5237955316204
+12,32.1114345314062
+13,44.9845039238714
+14,13.5324640263625
+15,10.1736266929292
+16,4.58257569495584
+17,23.217268502288
+18,16.5769107917917
+19,6.89948680823017
+20,5.55320238736303
+21,10.4219666223433
+22,43.6179140616243
+23,35.9073375743642
+24,15.0332963783729
+25,21.7594021268945
+26,23.2496572716993
+27,17.9815599423852
+28,11.3577742151117
+29,38.467599433197
+30,28.3035029562577
+31,9.54321919833388
+32,21.377558326432
+33,17.6292439561917
+34,12.6951848921471
+35,20.0667752354841
+36,22.9097309529208
+37,8.78894645948548
+38,13.360682005498
+39,25.1757616314718
+40,38.0357773686457
+41,18.4633287776253
+42,19.0584505869806
+43,10.8631093309173
+44,12.6147770818983
+45,12.5398140021274
+46,34.901983501949
+47,22.3480442021702
+48,6
+49,22.3480442021702
+50,34.901983501949
+51,12.5398140021274
+52,12.6147770818983
+53,10.8631093309173
+54,19.0584505869806
+55,18.4633287776253
+56,38.0357773686457
+57,25.1757616314718
+58,13.360682005498
+59,8.78894645948548
+60,22.9097309529208
+61,20.0667752354841
+62,12.6951848921471
+63,17.6292439561917
+64,21.377558326432
+65,9.54321919833388
+66,28.3035029562577
+67,38.467599433197
+68,11.3577742151117
+69,17.9815599423852
+70,23.2496572716993
+71,21.7594021268945
+72,15.0332963783729
+73,35.9073375743642
+74,44.6135417384784
+75,10.4219666223433
+76,4.84567134895776
+77,6.89948680823017
+78,16.5769107917917
+79,23.217268502288
+80,4.58257569495584
+81,10.1736266929292
+82,13.5324640263625
+83,44.9845039238714
+84,32.1114345314062
+85,24.5237955316204
+86,15.6627133315015
+87,12.3214904922455
+88,18.2010889773887
+89,37.3066577242559
+90,24.0186013379153
+91,69.1793197789512
+92,23.8408857476069
+93,12.1189172092243
+94,41.9840308053375
+95,131.570790435043
diff --git a/buch/papers/reedsolomon/tikz/tikz/fehler.txt b/buch/papers/reedsolomon/tikz/tikz/fehler.txt
new file mode 100644
index 0000000..23f1a83
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/tikz/fehler.txt
@@ -0,0 +1,96 @@
+0,0
+1,0
+2,0
+3,0
+4,0
+5,0
+6,2
+7,0
+8,0
+9,0
+10,0
+11,0
+12,0
+13,0
+14,0
+15,0
+16,0
+17,0
+18,0
+19,0
+20,2
+21,0
+22,0
+23,0
+24,0
+25,0
+26,0
+27,0
+28,0
+29,0
+30,0
+31,0
+32,0
+33,0
+34,0
+35,0
+36,0
+37,0
+38,0
+39,0
+40,0
+41,0
+42,0
+43,0
+44,0
+45,0
+46,0
+47,0
+48,0
+49,0
+50,0
+51,0
+52,0
+53,0
+54,0
+55,0
+56,0
+57,0
+58,0
+59,0
+60,0
+61,0
+62,0
+63,0
+64,0
+65,0
+66,0
+67,0
+68,0
+69,0
+70,0
+71,0
+72,0
+73,0
+74,1
+75,0
+76,0
+77,0
+78,0
+79,0
+80,0
+81,0
+82,0
+83,0
+84,0
+85,0
+86,0
+87,0
+88,0
+89,0
+90,0
+91,0
+92,0
+93,0
+94,0
+95,0
diff --git a/buch/papers/reedsolomon/tikz/tikz/locator.txt b/buch/papers/reedsolomon/tikz/tikz/locator.txt
new file mode 100644
index 0000000..b28988c
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/tikz/locator.txt
@@ -0,0 +1,96 @@
+0,0.0301224340567056
+1,0.141653026854885
+2,0.138226631799377
+3,0.0339903276086929
+4,0.310585462557496
+5,0.551427312631385
+6,0.628514858396814
+7,0.51102386251559
+8,0.275861355940449
+9,0.0502396354182268
+10,0.090185502547573
+11,0.110759344849756
+12,0.0684618905063001
+13,0.0362855426992259
+14,0.0697096919781468
+15,0.109288539370248
+16,0.0923187999496653
+17,0.0512198536768088
+18,0.274192386987782
+19,0.51349614953654
+20,0.633154426602466
+21,0.553283743533942
+22,0.307840573214514
+23,0.0341664350328392
+24,0.140270857957
+25,0.138527177682831
+26,0.029637547736156
+27,0.0816962563186052
+28,0.0944383203811073
+29,0.0263932110686261
+30,0.0585881348402056
+31,0.0737117341599984
+32,0.0239973937701886
+33,0.0464215468420038
+34,0.0616218854220964
+35,0.0221963086695009
+36,0.0390764778127646
+37,0.0537637218396934
+38,0.0208333333333332
+39,0.0343107696069045
+40,0.0483441215964552
+41,0.0198077862118806
+42,0.0311207395968725
+43,0.0444955089373458
+44,0.0190533549944159
+45,0.0290049795038723
+46,0.0417536642697558
+47,0.0185261550443084
+48,0.0277059929762261
+49,0.0398606084144816
+50,0.0181978813094817
+51,0.0271098219177584
+52,0.0386836665079729
+53,0.0180518611046889
+54,0.0272138992557141
+55,0.0381891287148314
+56,0.0180809085252469
+57,0.0281418959420061
+58,0.0384596362516637
+59,0.0182864418432272
+60,0.0302250788423173
+61,0.0397874837986351
+62,0.0186786556701694
+63,0.0342489348284216
+64,0.0429932815348666
+65,0.0192777878591759
+66,0.0422808966931999
+67,0.0506815964680563
+68,0.0201167847752226
+69,0.0615048274405271
+70,0.0744953894508454
+71,0.021246054596492
+72,0.142602265816215
+73,0.273502052865436
+74,0.325309673287599
+75,0.272705389655349
+76,0.149074257381345
+77,0.0247199397628712
+78,0.0680137859566976
+79,0.075388270873485
+80,0.0273637831604903
+81,0.0407867704453274
+82,0.0632964886441949
+83,0.0309749128751093
+84,0.0315202035072035
+85,0.0627625211892184
+86,0.0360843918243497
+87,0.02794920551495
+88,0.0677921493367236
+89,0.0437167157553067
+90,0.0270640150996317
+91,0.0783380025231622
+92,0.0561293738314281
+93,0.0278742033265809
+94,0.0981443889498639
+95,0.0794543457386548
diff --git a/buch/papers/reedsolomon/tikz/tikz/signal.txt b/buch/papers/reedsolomon/tikz/tikz/signal.txt
new file mode 100644
index 0000000..c4fa5f8
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/tikz/signal.txt
@@ -0,0 +1,96 @@
+0,6
+1,6
+2,0
+3,6
+4,4
+5,0
+6,5
+7,2
+8,1
+9,2
+10,1
+11,2
+12,0
+13,6
+14,3
+15,5
+16,7
+17,5
+18,5
+19,4
+20,1
+21,5
+22,9
+23,9
+24,3
+25,2
+26,6
+27,6
+28,4
+29,2
+30,9
+31,1
+32,1
+33,1
+34,2
+35,6
+36,6
+37,1
+38,9
+39,7
+40,7
+41,1
+42,9
+43,9
+44,10
+45,9
+46,8
+47,5
+48,2
+49,4
+50,1
+51,0
+52,9
+53,3
+54,3
+55,3
+56,5
+57,6
+58,0
+59,8
+60,6
+61,9
+62,3
+63,4
+64,0
+65,0
+66,0
+67,0
+68,0
+69,0
+70,0
+71,0
+72,0
+73,0
+74,0
+75,0
+76,0
+77,0
+78,0
+79,0
+80,0
+81,0
+82,0
+83,0
+84,0
+85,0
+86,0
+87,0
+88,0
+89,0
+90,0
+91,0
+92,0
+93,0
+94,0
+95,0
diff --git a/buch/papers/reedsolomon/tikz/tikz/syndrom.txt b/buch/papers/reedsolomon/tikz/tikz/syndrom.txt
new file mode 100644
index 0000000..8ca9eed
--- /dev/null
+++ b/buch/papers/reedsolomon/tikz/tikz/syndrom.txt
@@ -0,0 +1,96 @@
+0,0
+1,0
+2,0
+3,0
+4,0
+5,0
+6,0
+7,0
+8,0
+9,0
+10,0
+11,0
+12,0
+13,0
+14,0
+15,0
+16,0
+17,0
+18,0
+19,0
+20,0
+21,0
+22,0
+23,0
+24,0
+25,0
+26,0
+27,0
+28,0
+29,0
+30,0
+31,0
+32,0
+33,0
+34,0
+35,0
+36,0
+37,0
+38,0
+39,0
+40,0
+41,0
+42,0
+43,0
+44,0
+45,0
+46,0
+47,0
+48,0
+49,0
+50,0
+51,0
+52,0
+53,0
+54,0
+55,0
+56,0
+57,0
+58,0
+59,0
+60,0
+61,0
+62,0
+63,0
+64,0.0275599094902563
+65,0.0115837187254191
+66,0.025877761014238
+67,0.0224618032819697
+68,0.04410594689944
+69,0.0474504002669341
+70,0.0227694695500626
+71,0.0271436638090525
+72,0.0104166666666667
+73,0.0271436638090523
+74,0.0227694695500608
+75,0.0474504002669343
+76,0.0441059468994397
+77,0.0224618032819701
+78,0.0258777610142379
+79,0.0115837187254183
+80,0.027559909490256
+81,0.0245124379481793
+82,0.0499782237195209
+83,0.0401432022864265
+84,0.0232923747656228
+85,0.0237974288564099
+86,0.0143895905726624
+87,0.0271745729691685
+88,0.0275599094902567
+89,0.0515501672184983
+90,0.0358255004834542
+91,0.024700508366373
+92,0.0210194725405171
+93,0.0177592928994296
+94,0.0261327016093158
+95,0.0314909067039411
diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex
index 6ac86ad..8994066 100644
--- a/buch/papers/verkehr/section1.tex
+++ b/buch/papers/verkehr/section1.tex
@@ -54,13 +54,13 @@ Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er
\subsection{Anwendung Floyd-Warshall-Algorithmus}
%THEORIE...
-In einem ersten Schritt wird eine Gewichtsmatrix $W$ mit den Matrixeinträgen $W[i, j]$ erstellt.
+In einem ersten Schritt wird eine Gewichtsmatrix $W$ mit den Matrixeinträgen $W(i, j)$ erstellt.
Der Algorithmus berechnet danach in einer Hauptschleife alle Knoten $k$ von 1 bis $n$.
Dabei versucht er in jeder Iteration alle Wege von $i$ nach $j$ durch die Wege $(i, k)$ und $(k, j)$ zu verbessern.
Falls dieser mögliche Umweg zu einer Verbesserung führt, wird der entsprechende Eintrag aktualisiert.
Die aktuelle Gewichtung der Pfade wird mit
-\begin{equation}d[i, j]=\min[d[i,j], d[i,k] + d[k,i]]\end{equation}
+\begin{equation}d(i, j)=\min\{d(i,j), d(i,k) + d(k,i)\}\end{equation}
ermittelt.
@@ -68,14 +68,14 @@ ermittelt.
\section{PageRank-Algorithmus}
Der PageRank-Algorithmus wurde von den Gründern von Google, Larry Page und Sergey Brin im Jahr 1996 entwickelt und zum Patent angemeldet. Zwei Jahre später gründeten sie ihr Unternehmen Google Inc.
Beim PageRank-Algorithmus handelt es sich nicht um einen Suchalgorithmus, stattdessen werden Knoten aufgrund der Vernetzung des vorliegenden Graphen bewertet.
-Verwendet wird er beispielsweise um die Verlinkungsstruktur verschiedener Websites des World Wide Web anhand ihrer Struktur zu bewerten und relevante Suchergebnisse zu ermittteln. Der PageRank wird umso höher, je mehr hochwertige Links auf eine Webseite verweisen und je höher die Gewichtung einer Webseite ist, desto grösser ist der Effekt.\\
+Verwendet wird er beispielsweise um die Verlinkungsstruktur verschiedener Websites des World Wide Web anhand ihrer Struktur zu bewerten und relevante Suchergebnisse zu ermittteln. Der PageRank wird umso höher, je mehr hochwertige Links auf eine Webseite verweisen und je höher die Gewichtung einer Webseite ist, desto grösser ist der Effekt.
Dabei handelt es sich um einen iterativen Prozess. Ausgegangen wird von der Adjazenz-Matrix $A$, für welche folgendes gilt:
\begin{equation}
-A_{i,j}=\left\{ \begin{matrix}
-1 & \text{Kante von $j$ nach $i$} \\ 0 & \text{keine Kante von $j$ nach $i$}
-\end{matrix}
- \right.
+A_{i,j} = \begin{cases}
+1&\quad\text{Kante von $j$ nach $i$}\\
+0&\quad\text{keine Kante von $j$ nach $i$}
+\end{cases}
\label{verkehr:Adja}
\end{equation}
@@ -86,8 +86,8 @@ Grundsätzlich setzt sich der PageRank Algorithmus mit der Fragestellung auseina
Für ungerichtete Graphen mit $n$ Knoten gilt \begin{equation}A_{i,j}=A_{j,i}\end{equation} und weiter \begin{equation}A_{i,i}=0\quad\forall i\in \left\{1\dots n\right\}\end{equation}
Beim PageRank-Algorithmus wird eine abgewandelte Form der Adjazenz-Matrix verwendet.
-Dabei werden die Matrix-Einträge spaltenweise durch die jeweilige Spaltensumme geteilt:
-\( P_{i,j}=\frac{A_{i,j}}{\sum_{i=1}^{n}A_{i,j}} \)
+Dabei werden die Matrix-Einträge spaltenweise durch die jeweilige Spaltensumme geteilt, so entsteht die Link-Matrix
+\[ P_{i,j}=\frac{A_{i,j}}{\sum_{k=1}^{n}A_{k,j}} \]
Anschliessend multipliziert man diese Matrix $P$ mit einem Spaltenvektor $\Vec{r_0}$ mit $n$ Einträgen, für welchen gilt:
\( \Vec{r_0}(i) = \frac{1}{n} \quad\forall i\in \left\{1\dots n\right\} \)
Dieser Vektor stellt ein neutrales Ranking dar. Alle Knoten werden gleich gewichtet.