summaryrefslogtreecommitdiff
path: root/doc/numpybook
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2014-03-13 11:05:10 -0600
committerCharles Harris <charlesr.harris@gmail.com>2014-03-13 11:05:10 -0600
commit5b97375291b6f2502b3fcdecb1753e067de68880 (patch)
tree4573d09e7237b720d78e13aa2587c206f67a5533 /doc/numpybook
parentdfe6c7ed74c087c0deabfd4f7a50224498840838 (diff)
downloadnumpy-5b97375291b6f2502b3fcdecb1753e067de68880.tar.gz
MAINT: Remove doc/numpybook.
Remove doc/numpybook. It has become outdated in parts and its contents is now part of the official numpy documentation.
Diffstat (limited to 'doc/numpybook')
-rw-r--r--doc/numpybook/Figures/contiguous.eps374
-rw-r--r--doc/numpybook/Figures/contiguous.fig133
-rw-r--r--doc/numpybook/Figures/contiguous.pdfbin5700 -> 0 bytes
-rw-r--r--doc/numpybook/Figures/fig1.eps4577
-rw-r--r--doc/numpybook/Figures/fig1bw.eps4575
-rw-r--r--doc/numpybook/Figures/fig2.eps4921
-rw-r--r--doc/numpybook/Figures/fig2bw.eps4919
-rw-r--r--doc/numpybook/Figures/hierarchy.diabin4332 -> 0 bytes
-rw-r--r--doc/numpybook/Figures/hierarchy.eps5596
-rw-r--r--doc/numpybook/Figures/hierarchy.figbin2163 -> 0 bytes
-rw-r--r--doc/numpybook/Figures/hierarchy.pdfbin62320 -> 0 bytes
-rw-r--r--doc/numpybook/Figures/hierarchy.pngbin32014 -> 0 bytes
-rw-r--r--doc/numpybook/Figures/threefundamental.eps246
-rw-r--r--doc/numpybook/Figures/threefundamental.fig57
-rw-r--r--doc/numpybook/Figures/threefundamental.pngbin4696 -> 0 bytes
-rw-r--r--doc/numpybook/capi.lyx24240
-rw-r--r--doc/numpybook/comparison/ctypes/code.c60
-rw-r--r--doc/numpybook/comparison/ctypes/filter.py25
-rw-r--r--doc/numpybook/comparison/ctypes/interface.py59
-rw-r--r--doc/numpybook/comparison/ctypes/newfile.datbin800 -> 0 bytes
-rwxr-xr-xdoc/numpybook/comparison/ctypes/timeme2
-rw-r--r--doc/numpybook/comparison/f2py/add.f45
-rw-r--r--doc/numpybook/comparison/f2py/add.pyf34
-rw-r--r--doc/numpybook/comparison/f2py/filter.f20
-rw-r--r--doc/numpybook/comparison/f2py/filter.pyf16
-rw-r--r--doc/numpybook/comparison/f2py/filtermodule.c293
-rwxr-xr-xdoc/numpybook/comparison/f2py/timeme1
-rw-r--r--doc/numpybook/comparison/pyrex/add.c560
-rw-r--r--doc/numpybook/comparison/pyrex/add.pyx75
-rw-r--r--doc/numpybook/comparison/pyrex/c_numpy.pxd107
-rw-r--r--doc/numpybook/comparison/pyrex/filter.c388
-rw-r--r--doc/numpybook/comparison/pyrex/filter.pyx44
-rw-r--r--doc/numpybook/comparison/pyrex/setup.py30
-rwxr-xr-xdoc/numpybook/comparison/pyrex/timeme2
-rw-r--r--doc/numpybook/comparison/timing.py62
-rw-r--r--doc/numpybook/comparison/weave/filter.py24
-rw-r--r--doc/numpybook/comparison/weave/inline.py51
-rwxr-xr-xdoc/numpybook/comparison/weave/timeme2
-rw-r--r--doc/numpybook/graphics/note.eps116
-rw-r--r--doc/numpybook/graphics/note.fig16
-rw-r--r--doc/numpybook/graphics/note.pngbin1984 -> 0 bytes
-rw-r--r--doc/numpybook/graphics/tip.eps127
-rw-r--r--doc/numpybook/graphics/tip.fig14
-rw-r--r--doc/numpybook/graphics/tip.pngbin2685 -> 0 bytes
-rw-r--r--doc/numpybook/graphics/tip.xfig.fig12
-rw-r--r--doc/numpybook/graphics/warning.eps125
-rw-r--r--doc/numpybook/graphics/warning.fig15
-rw-r--r--doc/numpybook/graphics/warning.pngbin1690 -> 0 bytes
-rw-r--r--doc/numpybook/mybook.layout177
-rw-r--r--doc/numpybook/numpybook.lyx27837
-rw-r--r--doc/numpybook/runcode.py151
51 files changed, 0 insertions, 80128 deletions
diff --git a/doc/numpybook/Figures/contiguous.eps b/doc/numpybook/Figures/contiguous.eps
deleted file mode 100644
index 006babe7a..000000000
--- a/doc/numpybook/Figures/contiguous.eps
+++ /dev/null
@@ -1,374 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: contiguous.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 4
-%%CreationDate: Thu Aug 18 12:08:29 2005
-%%For: oliphant@oliphant (Travis Oliphant)
-%%BoundingBox: 0 0 434 215
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 215 moveto 0 0 lineto 434 0 lineto 434 215 lineto closepath clip newpath
--197.3 306.7 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
- bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
- 4 -2 roll mul srgb} bind def
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-10 setmiterlimit
-0 slj 0 slc
- 0.06000 0.06000 sc
-%
-% Fig objects follow
-%
-%
-% here starts figure with depth 50
-% Polyline
-30.000 slw
-n 5700 1575 m 6900 1575 l 6900 2175 l 5700 2175 l
- cp gs col0 s gr
-% Polyline
-n 7500 1575 m 8700 1575 l 8700 2175 l 7500 2175 l
- cp gs col0 s gr
-% Polyline
-7.500 slw
-n 3300 1575 m 10500 1575 l 10500 2175 l 3300 2175 l
- cp gs col0 s gr
-% Polyline
-n 3900 1575 m
- 3900 2175 l gs col0 s gr
-% Polyline
-n 4500 1575 m
- 4500 2175 l gs col0 s gr
-% Polyline
-n 5100 1575 m
- 5100 2175 l gs col0 s gr
-% Polyline
-n 5700 1575 m
- 5700 2175 l gs col0 s gr
-% Polyline
-n 6300 1575 m
- 6300 2175 l gs col0 s gr
-% Polyline
-n 6900 1575 m
- 6900 2175 l gs col0 s gr
-% Polyline
-n 7500 1575 m
- 7500 2175 l gs col0 s gr
-% Polyline
-n 8100 1575 m
- 8100 2175 l gs col0 s gr
-% Polyline
-n 8700 1575 m
- 8700 2175 l gs col0 s gr
-% Polyline
-n 9300 1575 m
- 9300 2175 l gs col0 s gr
-% Polyline
-n 9900 1575 m
- 9900 2175 l gs col0 s gr
-/Helvetica-Bold ff 180.00 scf sf
-10125 1950 m
-gs 1 -1 sc (11) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-9525 1950 m
-gs 1 -1 sc (10) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-9000 1950 m
-gs 1 -1 sc (9) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8400 1950 m
-gs 1 -1 sc (8) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7800 1950 m
-gs 1 -1 sc (7) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7200 1950 m
-gs 1 -1 sc (6) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-6600 1950 m
-gs 1 -1 sc (5) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-6000 1950 m
-gs 1 -1 sc (4) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-5400 1950 m
-gs 1 -1 sc (3) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4800 1950 m
-gs 1 -1 sc (2) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4200 1950 m
-gs 1 -1 sc (1) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-3600 1950 m
-gs 1 -1 sc (0) col0 sh gr
-% Polyline
-30.000 slw
-n 4200 3300 m 5400 3300 l 5400 4500 l 4200 4500 l
- cp gs col0 s gr
-% Polyline
-7.500 slw
-n 4200 2700 m
- 4200 5100 l gs col0 s gr
-% Polyline
-n 4800 2700 m
- 4800 5100 l gs col0 s gr
-% Polyline
-n 3600 3300 m
- 5400 3300 l gs col0 s gr
-% Polyline
-n 3600 3900 m
- 5400 3900 l gs col0 s gr
-% Polyline
-n 3600 2700 m 5400 2700 l 5400 5100 l 3600 5100 l
- cp gs col0 s gr
-% Polyline
-n 3600 4500 m
- 5400 4500 l gs col0 s gr
-/Helvetica-Bold ff 240.00 scf sf
-5625 3975 m
-gs 1 -1 sc (C) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-5175 4725 m
-gs 1 -1 sc (11) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4575 4725 m
-gs 1 -1 sc (10) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4050 4725 m
-gs 1 -1 sc (9) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-5250 4125 m
-gs 1 -1 sc (8) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4650 4125 m
-gs 1 -1 sc (7) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4050 4125 m
-gs 1 -1 sc (6) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-5250 3525 m
-gs 1 -1 sc (5) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4650 3525 m
-gs 1 -1 sc (4) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4050 3525 m
-gs 1 -1 sc (3) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-5250 2925 m
-gs 1 -1 sc (2) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4650 2925 m
-gs 1 -1 sc (1) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4050 2925 m
-gs 1 -1 sc (0) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-3675 3225 m
-gs 1 -1 sc (\(0,0\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4875 3225 m
-gs 1 -1 sc (\(0,2\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-3675 3825 m
-gs 1 -1 sc (\(1,0\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4875 3825 m
-gs 1 -1 sc (\(1,2\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4275 3825 m
-gs 1 -1 sc (\(1,1\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4875 4425 m
-gs 1 -1 sc (\(2,2\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4875 5025 m
-gs 1 -1 sc (\(3,2\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4275 3225 m
-gs 1 -1 sc (\(0,1\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-3675 4425 m
-gs 1 -1 sc (\(2,0\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-3675 5025 m
-gs 1 -1 sc (\(3,0\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4275 4425 m
-gs 1 -1 sc (\(2,1\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-4275 5025 m
-gs 1 -1 sc (\(3,1\)) col0 sh gr
-% Polyline
-30.000 slw
-n 7650 3375 m 8850 3375 l 8850 4575 l 7650 4575 l
- cp gs col0 s gr
-% Polyline
-7.500 slw
-n 7050 3975 m
- 9450 3975 l gs col0 s gr
-% Polyline
-n 7050 3375 m
- 9450 3375 l gs col0 s gr
-% Polyline
-n 7650 4575 m
- 7650 2775 l gs col0 s gr
-% Polyline
-n 8250 4575 m
- 8250 2775 l gs col0 s gr
-% Polyline
-n 8850 4575 m
- 8850 2775 l gs col0 s gr
-% Polyline
-n 7050 4575 m 7050 2775 l 9450 2775 l 9450 4575 l
- cp gs col0 s gr
-/Helvetica-Bold ff 240.00 scf sf
-9600 3750 m
-gs 1 -1 sc (Fortran) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-9225 4200 m
-gs 1 -1 sc (11) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-9225 3600 m
-gs 1 -1 sc (10) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-9300 3000 m
-gs 1 -1 sc (9) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8625 4200 m
-gs 1 -1 sc (8) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8625 3600 m
-gs 1 -1 sc (7) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8625 3000 m
-gs 1 -1 sc (6) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8100 4200 m
-gs 1 -1 sc (5) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8100 3600 m
-gs 1 -1 sc (4) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8100 3000 m
-gs 1 -1 sc (3) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7500 4200 m
-gs 1 -1 sc (2) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7500 3600 m
-gs 1 -1 sc (1) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7500 3000 m
-gs 1 -1 sc (0) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7125 3300 m
-gs 1 -1 sc (\(0,0\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7725 3300 m
-gs 1 -1 sc (\(0,1\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8325 3300 m
-gs 1 -1 sc (\(0,2\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7125 3900 m
-gs 1 -1 sc (\(1,0\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7725 3900 m
-gs 1 -1 sc (\(1,1\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8325 3900 m
-gs 1 -1 sc (\(1,2\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7125 4500 m
-gs 1 -1 sc (\(2,0\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-7725 4500 m
-gs 1 -1 sc (\(2,1\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8325 4500 m
-gs 1 -1 sc (\(2,2\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8925 3900 m
-gs 1 -1 sc (\(1,3\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8925 4500 m
-gs 1 -1 sc (\(2,3\)) col0 sh gr
-/Helvetica-Bold ff 180.00 scf sf
-8925 3300 m
-gs 1 -1 sc (\(0,3\)) col0 sh gr
-% here ends figure;
-$F2psEnd
-rs
-showpage
diff --git a/doc/numpybook/Figures/contiguous.fig b/doc/numpybook/Figures/contiguous.fig
deleted file mode 100644
index c2416dafa..000000000
--- a/doc/numpybook/Figures/contiguous.fig
+++ /dev/null
@@ -1,133 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-6 3300 1500 10500 2250
-2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 5700 1575 6900 1575 6900 2175 5700 2175 5700 1575
-2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 7500 1575 8700 1575 8700 2175 7500 2175 7500 1575
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 3300 1575 10500 1575 10500 2175 3300 2175 3300 1575
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3900 1575 3900 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 4500 1575 4500 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 5100 1575 5100 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 5700 1575 5700 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6300 1575 6300 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6900 1575 6900 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 7500 1575 7500 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 8100 1575 8100 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 8700 1575 8700 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 9300 1575 9300 2175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 9900 1575 9900 2175
-4 0 0 50 -1 18 12 0.0000 4 135 210 10125 1950 11\001
-4 0 0 50 -1 18 12 0.0000 4 135 210 9525 1950 10\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 9000 1950 9\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 8400 1950 8\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 7800 1950 7\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 7200 1950 6\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 6600 1950 5\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 6000 1950 4\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 5400 1950 3\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4800 1950 2\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4200 1950 1\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 3600 1950 0\001
--6
-6 3600 2700 5850 5100
-2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 4200 3300 5400 3300 5400 4500 4200 4500 4200 3300
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 4200 2700 4200 5100
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 4800 2700 4800 5100
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3600 3300 5400 3300
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3600 3900 5400 3900
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 3600 2700 5400 2700 5400 5100 3600 5100 3600 2700
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3600 4500 5400 4500
-4 0 0 50 -1 18 16 0.0000 4 180 180 5625 3975 C\001
-4 0 0 50 -1 18 12 0.0000 4 135 210 5175 4725 11\001
-4 0 0 50 -1 18 12 0.0000 4 135 210 4575 4725 10\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4050 4725 9\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 5250 4125 8\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4650 4125 7\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4050 4125 6\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 5250 3525 5\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4650 3525 4\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4050 3525 3\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 5250 2925 2\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4650 2925 1\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 4050 2925 0\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 3675 3225 (0,0)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 4875 3225 (0,2)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 3675 3825 (1,0)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 4875 3825 (1,2)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 4275 3825 (1,1)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 4875 4425 (2,2)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 4875 5025 (3,2)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 4275 3225 (0,1)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 3675 4425 (2,0)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 3675 5025 (3,0)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 4275 4425 (2,1)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 4275 5025 (3,1)\001
--6
-6 7050 2775 10500 4650
-2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 7650 3375 8850 3375 8850 4575 7650 4575 7650 3375
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 7050 3975 9450 3975
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 7050 3375 9450 3375
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 7650 4575 7650 2775
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 8250 4575 8250 2775
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 8850 4575 8850 2775
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 7050 4575 7050 2775 9450 2775 9450 4575 7050 4575
-4 0 0 50 -1 18 16 0.0000 4 180 840 9600 3750 Fortran\001
-4 0 0 50 -1 18 12 0.0000 4 135 210 9225 4200 11\001
-4 0 0 50 -1 18 12 0.0000 4 135 210 9225 3600 10\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 9300 3000 9\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 8625 4200 8\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 8625 3600 7\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 8625 3000 6\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 8100 4200 5\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 8100 3600 4\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 8100 3000 3\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 7500 4200 2\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 7500 3600 1\001
-4 0 0 50 -1 18 12 0.0000 4 135 105 7500 3000 0\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 7125 3300 (0,0)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 7725 3300 (0,1)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 8325 3300 (0,2)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 7125 3900 (1,0)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 7725 3900 (1,1)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 8325 3900 (1,2)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 7125 4500 (2,0)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 7725 4500 (2,1)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 8325 4500 (2,2)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 8925 3900 (1,3)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 8925 4500 (2,3)\001
-4 0 0 50 -1 18 12 0.0000 4 180 450 8925 3300 (0,3)\001
--6
diff --git a/doc/numpybook/Figures/contiguous.pdf b/doc/numpybook/Figures/contiguous.pdf
deleted file mode 100644
index 3e3a55e64..000000000
--- a/doc/numpybook/Figures/contiguous.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/Figures/fig1.eps b/doc/numpybook/Figures/fig1.eps
deleted file mode 100644
index 6b77676c8..000000000
--- a/doc/numpybook/Figures/fig1.eps
+++ /dev/null
@@ -1,4577 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: fig1.eps
-%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/
-%%CreationDate: Fri Jan 6 00:09:47 2006
-%%BoundingBox: 13 175 598 616
-%%EndComments
-%%BeginProlog
-/mpldict 7 dict def
-mpldict begin
-/m { moveto } bind def
-/l { lineto } bind def
-/r { rlineto } bind def
-/box {
-m
-1 index 0 r
-0 exch r
-neg 0 r
-closepath
-} bind def
-/clipbox {
-box
-clip
-newpath
-} bind def
-/ellipse {
-newpath
-matrix currentmatrix 7 1 roll
-translate
-scale
-0 0 1 5 3 roll arc
-setmatrix
-closepath
-} bind def
-%%BeginFont: Verdana
-%!PS-TrueType-1.0-1.0
-8 dict begin
-/FontName /Verdana def
-/FontMatrix [1 0 0 1 0 0] def
-/FontType 42 def
-/Encoding StandardEncoding def
-/FontBBox [-102 -423 2963 2049] def
-/PaintType 0 def
-/FontInfo 7 dict dup begin
-/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def
-/FamilyName (Verdana) def
-/FullName (Verdana) def
-/version (Version 2.35) def
-/isFixedPitch false def
-/UnderlinePosition -180 def
-/UnderlineThickness 120 def
-end readonly def
-/sfnts [
-<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F
-00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4
-000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198
-6670676DEE371553000021740000013867617370001700090000021000000010676C7966
-01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C
-0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444
-00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC
-6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374
-C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000
-16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801
-00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000
-00000000000000000000037D00010000037D00620007006B000500020010002F00380000
-0495013F0003000100010411019000050000059A053300000125059A0533000003A00078
-02A70800020B0604030504040204000002870000000000000000000000004D5320200040
-0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001
-FFFF00030000002801E60001000000000000004300000001000000000001000700430001
-0000000000020007004A0001000000000003002F00510001000000000004000700800001
-000000000005000C00870001000000000006000700930001000000000007002F009A0003
-000104030002000C00C90003000104050002001000D50003000104060002000C00E50003
-000104070002001000F10003000104080002001001010003000104090000008601110003
-000104090001000E01970003000104090002000E01A50003000104090003005E01B30003
-000104090004000E021100030001040900050018021F0003000104090006000E02370003
-000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003
-0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003
-000104130002001202E50003000104140002000C02F70003000104150002001003030003
-000104160002000C03130003000104190002000E031F00030001041B00020010032D0003
-0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003
-0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003
-00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064
-61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C
-6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F
-736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372
-6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264
-616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270
-6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900
-6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03
-BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400
-6100740061002000A9002000310039003900360020004D006900630072006F0073006F00
-66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00
-6C0020005200690067006800740073002000520065007300650072007600650064005600
-65007200640061006E00610052006500670075006C00610072004D006900630072006F00
-73006F00660074003A00560065007200640061006E006100200052006500670075006C00
-610072003A00560065007200730069006F006E0020003100200028004D00690063007200
-6F0073006F00660074002900560065007200640061006E00610056006500720073006900
-6F006E00200032002E0033003500560065007200640061006E0061005600650072006400
-61006E006100200069007300200061002000740072006100640065006D00610072006B00
-20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000
-6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100
-61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200
-6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100
-6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04
-47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00
-4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00
-740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00
-61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A
-000001060000010000000000000001020000000200000000000000000000000000000001
-0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324
-25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748
-494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B
-6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F
-909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2
-B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5
-D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF
-02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85
-1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116
-21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA
-25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303
-03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026
-203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202
-2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01
-FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000
-0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077
-E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74
-DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000
-000002380000023800000000000000000000023800000242026800000000000000000000
-000002B203640368037600000000000000000000000000000000036A0000036A00000000
-000000000000000000000000000000000358000003580000000000000000000000000000
-0000000000000000034400000000000300A300840085037C009600E60086008E008B009D
-00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3
-00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC
-00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A
-0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A
-0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104
-010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E
-014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A
-015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E
-01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D
-016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9
-00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125
-0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9
-00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B
-01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D
-01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7
-01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5
-01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A
-026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C
-027D027E027F028002810282028302840285028602870288034C034D034E034F03500351
-03520353035403550356035703580359035A035B035C035D035E035F0360036103620363
-036403650366036703680369036A036B036C036D036E036F037003710191019203740375
-037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087
-00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242
-0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE
-04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13
-0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE
-122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747
-17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B
-1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226
-2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C
-245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2
-2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7
-316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD
-361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03
-3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47
-3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF
-40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF
-44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8
-48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E
-4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58
-4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491
-54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8
-575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2
-5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD
-5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1
-62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589
-65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A
-67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48
-6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA
-705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE
-73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA
-78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E
-7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9
-82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD
-87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73
-8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD
-9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7
-95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759
-976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB
-98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911
-9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB
-9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22
-9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B
-0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F
-740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4
-110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D
-B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10
-010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101
-01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101
-0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D
-320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C
-111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D
-230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D
-100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01
-010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C
-111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A
-100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22
-11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11
-0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10
-282001010101010101010101010101010101010101320D320D320D320D320D320D320D32
-0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B
-28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C
-00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D
-000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013
-0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019
-001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F
-0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025
-0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B
-002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031
-0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037
-0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D
-003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043
-0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049
-0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F
-004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055
-0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B
-005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061
-0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067
-0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D
-006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073
-0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079
-0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F
-007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085
-0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B
-008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091
-0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097
-0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D
-009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3
-00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9
-00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF
-00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5
-00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB
-00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1
-00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7
-00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD
-00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3
-00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9
-00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF
-00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5
-00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB
-00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1
-00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7
-00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD
-00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280
-B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55
-026F54019F54AF54025153170452531604535215044A4952044649370447493204484932
-04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532
-0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3
-B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3
-092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936
-4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590
-8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540
-C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914
-15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314
-480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B
-1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A
-1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10
-BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A
-0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808
-004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B
-2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861
-B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B
-2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B
-2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736
-26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258
-45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225
-45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C
-60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0
-042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820
-8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320
-468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046
-8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60
-441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010
-0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF
-00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC
-00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098
-009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF
-006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1
-0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072
-0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A
-006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A
-008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000
-045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100
-0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073
-022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2
-0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A
-0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A
-057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C
-058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086
-04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046
-03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A
-02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9
-04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056
-04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A
-05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068
-04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB
-0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1
-051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9
-0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E
-064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB
-068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071
-03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2
-0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096
-0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA
-03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A
-050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073
-064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118
-05160113051602210516012D05160161051601560516019F05160132047E001802460018
-05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D
-04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB
-0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069
-05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068
-062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB
-047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073
-04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E
-04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E
-0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A
-065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5
-047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A
-04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A
-050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8
-051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001
-035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005
-05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8
-036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1
-05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9
-0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056
-07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089
-05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100
-057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A
-057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8
-05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044
-06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1
-04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9
-04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071
-02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073
-05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006
-060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051
-060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8
-0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8
-06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9
-03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D
-059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F
-04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053
-06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005
-02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9
-080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3
-045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1
-0000020900000221000001540000021D0516013605160003051601360516012505160142
-051601420516014205160125051602090516013605160142051601420516014205160142
-051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3
-0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A
-04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A
-050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8
-04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000064C007304DB006A064C0073
-04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A
-064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073
-04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1
-060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006
-04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED
-0516008A0000001F00000380090E09000303050507070B07030404070703050304070707
-070707070707070404070707060A08070808070608080505070609080907090707070808
-090707070404040706060606060606030606030306030906060606040604060607060605
-060506070808080708090806060606060606060606060303030306060606060606060606
-07050707060507060909090606070A090907070707060607070607050507090606050707
-0707070606070808090A0907090404020207070607030604040606070302040E08070807
-070505050509090908080803060606060606060606060603070607050508060706070607
-070505050909090608060507060806080606060308060806080608070607060603060306
-040806080609060704070407060704070408060806070507050609070606050605090606
-050B09060703050B03050303050308060806080607060706070608060806080608060806
-050305030503050305030706060603080608060906090607040706070408060806080608
-06090707060308060A090906040907090709070706020607060909090902060606080809
-060908090308070607070805070809080709080706070707090905070605060306060505
-060603060606060506060506050907030606060707080608070505050A0A070707070807
-070607070906080807070908090807080707070708070909080907080907060606040606
-070506060606070606060606050609060705090907080606080606060406060303030909
-060606060505090B06050505050505050000000009060806000000000606060606060606
-060606060606060806080608060806080608060806080608060806080608060706070607
-060706070607060706070605030503000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000090609060906
-090609060906090609060906090609060906080608060806080608060806080607060706
-07060706060007000A0F0A000404040508070B0703050507080405040507070707070707
-0707070505080808060A070708080606080805050706090709070908070708070B070707
-0505050806060707050707040707030307030B0707070704060407060707060606050608
-070708060709080707070707070507070707030303030707070707070707070707050707
-060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706
-06080707090B0A070A0505030308080607040605050606070403050F0706070606050505
-050909090808080306060606060606060606060307060706050806070607070808050505
-0A0A0A060807050706080508050706040707070708070806070607060306030605070707
-0709070804080407060704070408070807070607060609090707050705090606050C0906
-0704060B0306040406040707080508050607060706070807080708070807080705030503
-0503050305030707070603070707070907090708040706070408070807080708070B0707
-060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909
-030707070607080507070907070908070707070709090507070507030707070507070307
-0607060507070507060909030707070906080608070505050B0B08070708070707060706
-0906080807070908090807080707090709070B0B080907080A0707070605060707050707
-0706070707070705050609070706090A0708060608060707050606030303090907070607
-06050A0C0705050505050505000000000907080700000000060606060606060606060606
-060606070707070707070707070707070707070707070707070707060706070607060706
-070607060706070503050300000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000009070907090709070907
-090709070907090709070907090708070807080708070807080708070706070607060706
-070007000B110B000404040509070C080305050709040504050707070707070707070705
-05090909060A080809090706090805050806090809070908080708080B08070805050509
-07070707060707040707030407030B070707070506040707090707060705070908080907
-080908070707070707060707070703030303070707070707070707070706070707060707
-0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808
-090C0B070B05050303090907070407050507070704030511080708070705050505090909
-08080803070707070707070707070603080608060509070707070709090606060B0B0B07
-090705080609060906070704080708070907090707070706030603060508070807090708
-05080508060704070408070807080608060609090707060705090707060D0A070804060C
-040704040704080709060906070707070707090709070907080708070503050305030503
-05040807070603080708070907090708050806070408070807080708070B090707030807
-0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808
-070808050808090807090807070707080909050707060703070707050707030707070706
-07070607070909030707070907090609080505050D0C090808080808080608070B070808
-08080908090807090708090809080B0C090A07090B080707070508070906070707070707
-07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D
-070606060606060600000000090708070000000007070707070707070707070707070708
-070807080708070807080708070807080708070807080707070707070707070707070707
-070707050305030000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000907090709070907090709070907
-090709070907090709070807080708070807080708070807070707070707070707000700
-0C120C00040405060A080D09030505080904050405080808080808080808080505090909
-070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808
-060808040808030407030B0808080805070508070B0707070805080A08080908090A0908
-08080808080608080808030303030808080808080808080808070808080708070C0C0C08
-08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08
-0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903
-0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508
-07090609060808040808080809090908080808070307040706090809080A080805080508
-07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404
-070408080906090608080808080809080908090809080908050305030503050305040807
-070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08
-050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905
-08080A09080A0908080707080B0A05070806080308070706080803080708070608080608
-070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09
-0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806
-07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707
-07070707000000000A080908000000000808080808080808080808080808080808080808
-080808080808080808080808080808080808080808080808080808080808080808080805
-030503000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08
-0A080A080A0809080908090809080908090809080707070707070707080008000D140D00
-050505050A080D09030606090905070506080808080808080808080606090909070D0908
-090908080909050608070B090A080A08090909090D0909090606060B0808080808080805
-0808030407030B0808080805070608080B0708070807080B09090908090A090808080808
-080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A
-0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603
-03090B080905080606080808050306140908090808050505050A0A0A0909090308080808
-08080808080807030907090707090809080808090B0707070D0D0D080908050907090809
-080808050908090809080908080808070307040706090809080A08080508050907090609
-060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908
-090809080808080808080908090809080908090805030503050305030604080707070309
-0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D
-0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09
-080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03
-0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809
-09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07
-09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707
-000000000A08090900000000080808080808080808080808080808090809080908090809
-080908090809080908090809080908080808080808080808080808080808080503050300
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08
-0A0809080908090909090909090909090908090809080908080008000E150E0005050606
-0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908
-0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305
-08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808
-0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B
-0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08
-0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909
-090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905
-0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A
-090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07
-0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B
-090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09
-080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08
-0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B
-090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A
-0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C
-090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000
-0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A
-080A080A080A080A080A0809080908090809080908090809080908050305030000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09
-0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B
-0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507
-0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09
-0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303
-0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B
-0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07
-0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803
-0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09
-0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A
-09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909
-09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A
-060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A
-0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A
-0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B
-0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10
-0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908
-0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A
-000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A
-090A090A090A090909090909090909090909090909090905030503000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A
-0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A
-0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C
-0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06
-09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A
-0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09
-090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A
-060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09
-070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A
-0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D
-0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A
-0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A
-070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010
-10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B
-0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707
-12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B
-110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A
-0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000
-0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B
-0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B
-0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806
-080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C
-0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A
-0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A
-0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A
-09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A
-0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A
-0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09
-05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B
-080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B
-0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C
-0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B
-0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05
-0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C
-0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A
-0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905
-050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B
-0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B
-0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000D0A
-0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B
-0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B
-0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C
-120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09
-0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B
-0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F
-0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B
-0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F
-0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A
-080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B
-0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B
-080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D
-0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10
-0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08
-0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C
-0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B
-0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010
-0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B
-0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B
-0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B
-0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B
-0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C
-0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D
-090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10
-0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C
-0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C
-0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808
-080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A
-1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E
-0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C
-0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806
-0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C
-0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11
-060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B
-0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C
-120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C
-0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C
-0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C
-0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C
-0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C
-0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B
-0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09
-091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910
-0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D
-0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C
-1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E
-1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010
-0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D
-100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E
-090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16
-060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806
-09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C
-1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E
-0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A
-0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F
-0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D
-0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417
-0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E
-0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D
-0C0D0C080608060000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000100C100C100C100C100C100C100C
-110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00
-152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111
-0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D
-0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D
-0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D
-0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D
-150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06
-0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E
-0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E
-0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707
-0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C
-0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D
-0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008
-0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D
-0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210
-11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B
-0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B
-0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E
-0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08
-060806000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D
-120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600
-0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F
-0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08
-0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D
-0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511
-161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06
-0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E
-0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F
-0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E
-09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D
-0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610
-0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216
-1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310
-0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206
-0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F
-0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D
-0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C
-00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F
-0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D
-120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B
-130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D
-12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608
-0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E
-0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313
-0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E
-0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F
-0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08
-100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11
-0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C
-0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12
-0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E
-0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E
-0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13
-0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310
-121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414
-0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000
-130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10
-0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F
-110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11
-060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B
-110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F
-0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606
-06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11
-14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B
-0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06
-100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E
-1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10
-0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E
-0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11
-0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F
-1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10
-15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11
-100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919
-1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D
-140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210
-000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10
-0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210
-12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11
-160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714
-15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C
-0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110
-1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F
-0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111
-0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E
-0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511
-1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516
-11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511
-15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11
-0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B
-1B061111111214180F181419071213131113140B13131714121514101211111318160B11
-110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C
-1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213
-1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011
-0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000
-111111111111111111111111111111121012101210121012101210121012101210121012
-101210111011101110111011101110111011100B070B0700000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000015101510151015101510151015101610161016101610161014111411141214121412
-141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B
-0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714
-141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211
-1811110F120D1218141414121617151111111111110F1111111109090909121212121212
-1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12
-100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C
-14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212
-11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110
-091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12
-0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612
-161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215
-12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212
-12141619101A161A091414141214160D14141816131716111412121419180D12120F1209
-1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814
-12161414141016121C12161614151816171611141212181416151E1E171B14141E141112
-110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09
-090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212
-121212121212121212121214111411141114111411141114111411141114111411141112
-1112111211121112111211121112110D090D090000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000001712
-171217121712171217121712171217121712171217121512151216131613161316131613
-121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414
-141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716
-201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311
-140F141A1616161418191713131313131311131313130909090914131313131314141414
-141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A
-141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614
-140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A
-1A1111112020201419140D16111611161114140C16131613191519141314131209120912
-0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414
-11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814
-0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417
-14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C
-111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F
-141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616
-161218141F14181816181B181918131614141A1618172121191D161621171314130F1413
-1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D
-14131314120F20261411111111111111000000001A131815000000001414141414141414
-141414141414141613161316131613161316131613161316131613161316131413141314
-13141314131413141314130D090D09000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000191319131913
-19131913191319131A131A131A131A131A13171417141815181518151815181514131413
-1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515
-1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417
-0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B
-17171715191A181414141414141114141414090909091514141414141515151515121515
-1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815
-151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D
-0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212
-212121151A150D17111711171115150C1714171419151A151415141209120A120F191519
-151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14
-180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09
-0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14
-140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E
-091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914
-1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915
-2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515
-141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415
-131021271512121212121212000000001B14191600000000151515151515151515151515
-151515171417141714171417141714171417141714171417141714151415141514151415
-141514151415140D090D0900000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000001A141A141A141A141A14
-1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414
-15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811
-111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E
-181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17
-1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817
-25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919
-1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D
-1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518
-1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A
-101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528
-0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A
-110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916
-24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A
-17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613
-16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C
-1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18
-1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B
-1814141414141414000000001E161C180000000018181818181818181818181818181819
-161916191619161916191619161916191619161916191617161716171617161716171617
-161716100A100A0000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000001D161D161D161D161D161D161D16
-1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800
-2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222
-172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A
-161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19
-191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B
-1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B
-2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C
-1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D
-161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D
-161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F
-190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19
-19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119
-132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012
-1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B
-1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320
-2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16
-151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717
-17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D
-191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912
-0C120C000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000211921192119211921192119211922192219
-2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00
-10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20
-20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10
-1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C
-1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24
-2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C
-0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D
-1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820
-181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C
-12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C
-201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22
-1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D
-262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722
-1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C
-1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20
-1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B
-1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919
-00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F
-1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C
-251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417
-292036240D17172029121712172020202020202020202017172929291B3222222327201D
-27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11
-1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E
-1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929
-202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E
-1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020
-20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012
-221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025
-20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A
-201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027
-1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F
-1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E
-221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029
-20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922
-26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C
-20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000
-281E262100000000202020202020202020202020202020221E221E221E221E221E221E22
-1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520
-2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27
-0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719
-251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522
-212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F
-0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227
-2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219
-19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F
-251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520
-2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25
-1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220
-22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126
-17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222
-27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125
-2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26
-251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838
-2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E
-2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924
-000000002222222222222222222222222222222520252025202520252025202520252025
-2025202520252022202220222022202220222022202220170F170F000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924
-29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25
-2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B
-2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419
-1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523
-2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520
-202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425
-15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E
-1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25
-232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30
-24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24
-2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24
-172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A
-3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824
-241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A
-41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729
-3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325
-1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000
-252525252525252525252525252525282328232823282328232823282328232823282328
-23282325232523252325232523252325232523180F180F00000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26
-2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18
-1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F
-2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28
-372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929
-2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029
-251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66
-2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929
-28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825
-122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A
-21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A
-322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31
-2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B
-2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12
-2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E
-29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829
-28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312
-12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B
-2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A
-282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000003529
-35293529352935293529352936293629362936293629312A312A332C332C332C332C332C
-29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030
-3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733
-4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27
-3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F
-302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D
-303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F
-2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D
-3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A
-22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F
-2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F
-1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37
-2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841
-28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22
-2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333
-332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D
-3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545
-2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030
-30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F
-2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E
-3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C
-2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535
-35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339
-26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544
-39393A343E413D3232323232322B313131311818181835323232323235353535352D3535
-352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36
-36443939415951355326261616444431331E3526263434351E16267E3934393434222222
-224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D
-53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E
-3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833
-3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218
-22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433
-31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B
-1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831
-3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34
-51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535
-31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135
-2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535
-353535393239323932393239323932393239323932393239323932343134313431343134
-313431343134312218221800000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000041324132413241324132
-41324132433243324332433243323D353D353F373F373F373F373F373331333133313331
-340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A
-2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B
-3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A
-4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39
-5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F
-48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848
-434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A
-4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840
-2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363
-1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718
-2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37
-5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41
-3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E
-383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545
-40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B
-383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C
-3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F
-373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A
-373A37271827180000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000004838483848384838483848384838
-4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00
-649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252
-37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E
-343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C
-3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240
-4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240
-642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B
-40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44
-34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44
-343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323
-3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B
-3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D
-2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A
-4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F
-3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B
-4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35
-323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636
-3636363600000000513D4C4200000000404040404040404040404040404040443C443C44
-3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A
-1B2A1B000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D
-513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100
-000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111
-2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007
-0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED
-332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1
-0304061400030007002640150206060307010F09400902032C0040000100042C072FED33
-5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD
-BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17
-7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E
-0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5
-131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F
-ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0
-C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135
-2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE
-CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178
-8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16
-70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A
-08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18
-312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031
-201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932
-2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130
-5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117
-15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362
-2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101
-7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D
-C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807
-05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908
-260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203
-031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616
-282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33
-2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633
-321625012309011406232226353436333216013426232206151416333236013426232206
-1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59
-64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC
-DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018
-004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576
-087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008
-300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D
-1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D
-3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673
-4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B
-2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633
-323601151406070123270E01232224353436373E01372E01353436373E01333216151406
-070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32
-3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102
-0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71
-F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4
-03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301
-822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803
-28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830
-000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01
-070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01
-2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D
-060306131503151326012603261326154701400340134715500350136003601379007602
-700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F
-3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49
-4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001
-00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554
-0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450
-0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B
-060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217
-392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606
-8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167
-FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D
-01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4
-FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0
-0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500
-590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09
-012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02
-01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270
-0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00
-3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116
-01250138004900440156016701770186010A011202032F02010200010000022F332F003F
-2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F
-05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15
-4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130
-5D011002212002111012212012013E01353426272E01232206070E01151416171E013332
-36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C
-02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52
-4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502
-1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED
-3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098
-03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116
-03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B
-0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F
-100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202
-101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01
-373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0
-8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223
-3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F
-290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C
-780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D
-020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10
-E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514
-06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01
-2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6
-6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C
-02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1
-233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D
-240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F
-0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39
-395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311
-3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001
-00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08
-7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F
-1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F
-ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01
-353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC
-6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3
-344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED
-0022003700644044060D160D3925333133374925423143375F01560D5020502165217531
-0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F
-2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114
-002322262726023534123736243332161715232E01232200073E01333216171E01073426
-272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50
-290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601
-E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014
-282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801
-4B0258027903070301000120020203000002034A050302080F081F087B02030300020204
-0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123
-012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028
-0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B
-592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616
-0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39
-0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F
-ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334
-26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1
-908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F
-92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912
-3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045
-0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914
-294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED
-5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627
-35331E01333212370E01232226272E01353400333216171612073426272E012322061514
-16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859
-012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C
-BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28
-15290002015A00000249045D00030007001E4010015602050656050807002D0600010101
-2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002
-00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806
-5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F
-5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03
-40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306
-540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840
-080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887
-10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75
-FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940
-09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001
-213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006
-006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01
-2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939
-5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB
-7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069
-40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870
-090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000
-172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406
-070E01071523113E01373E013534262322060723353E013332160123353303ED46393892
-52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D
-346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04
-0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05
-2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766
-3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A
-510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37
-0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00
-3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01
-23222635341233321617353311333E013534022726242322040706021514121716043332
-3637150E0123222427260235341237362433320417161201112E01232206151416333236
-074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63
-010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B
-438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A
-A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6
-A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287
-01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06
-03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C
-010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F
-39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121
-130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8
-0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07
-1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D
-10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216
-171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132
-36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E
-2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08
-1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546
-05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28
-600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C
-3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E
-012322242726023534123736243332161715232E01232206070E01151416171E01333236
-373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543
-46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D
-E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408
-03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00
-3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637
-3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE
-B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B
-003B402309350006100602060601053502030A350108040008010800730D0F0D01060914
-016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111
-21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009
-0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6
-FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79
-C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06
-130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734
-0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED
-3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021
-32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770
-01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101
-23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B
-05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D
-03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133
-11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B
-002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4
-3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804
-A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403
-09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623
-22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5
-02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075
-190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901
-3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302
-0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D
-400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87
-10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE
-FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005
-002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901
-113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138
-023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903
-050A020309000410043404440454046A04060404070B0903010708090A0B030502140078
-0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931
-30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001
-130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07
-34074507510761077107077606010F0102061F0115063406440653066B0160067F017006
-0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304
-6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121
-0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017
-002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13
-53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824
-10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412
-373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58
-01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9
-B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010
-001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309
-080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D
-10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107
-3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E
-C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002
-0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D
-59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979
-150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303
-2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31
-305D015D010E01232226270E01232224272602353412373624333216171612151002071E
-01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160
-5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D
-BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201
-3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01
-3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010
-071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019
-031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710
-7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637
-3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD
-B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030
-009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510
-4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D
-86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A
-111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F
-ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127
-2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85
-0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801
-A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28
-152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B
-0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC
-04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03
-4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10
-F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E
-01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A
-4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066
-470148020205040507065706860603061400000105070457048604030414030203080144
-014B02580273017C02060005027503010303020845004A0302020103040024003A005A00
-6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10
-F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309
-01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C
-00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329
-08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A
-0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001
-000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00
-75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187
-10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01
-390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1
-000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557
-09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201
-020514060607050407010A0B0602080302080F0D01060216022602360247020509081908
-290839084808050208070A04010406020D00160026003600470050000600660D08090619
-062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931
-30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5
-FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006
-000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619
-08270628085606590865066A08080814000100061405040502000D050200010004000703
-040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4
-ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104
-E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1
-000900594036030708060813082608360846085608660876080808B30202030707033506
-03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939
-2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603
-91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201
-0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208
-FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A
-0138014B01590168017801890109011200032F000100030100006002700202022F5D332F
-003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614
-0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521
-1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034
-3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F
-036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309
-0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003
-0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154
-051602FA068C000300244016480159026902790204500360037003030303010000022F33
-2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026
-0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A
-0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A
-001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED
-3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437
-353426272E012322060723353E01333216171E011503110E01070E01151416333236041D
-BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944
-5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C
-FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F
-3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08
-141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939
-31305D011406070E012322262707231133113E0133321203342623220607111E01333236
-04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F
-2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057
-40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155
-0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6
-3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123
-2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5
-A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002
-006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912
-0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10
-F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711
-3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E
-B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A
-FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D
-6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103
-1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E
-013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672
-E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D
-011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505
-030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037
-0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123
-22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6
-BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030
-006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05
-702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232
-1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939
-3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332
-1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55
-9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29
-276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000
-045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860
-1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123
-22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87
-262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144
-02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D
-003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59
-021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D
-4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F
-FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335
-210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28
-2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F
-011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A
-0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD
-325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0
-015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC
-1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101
-01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B
-006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110
-1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010
-801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D
-2123113426272E01232206071E01151123113426272E012322060711231133153E013332
-16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372
-9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49
-5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213
-040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED
-123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B
-4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471
-047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C
-1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110
-002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118
-C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002
-00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C
-0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD
-32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01
-33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F
-51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A
-D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20
-701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110
-F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133
-321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0
-BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2
-C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F
-05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931
-305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931
-2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602
-091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F
-6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201
-2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505
-07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01
-14062322262735331E0133323635342726272E01272E01353436373E013332161715232E
-0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B
-393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222
-221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA
-02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02
-0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F
-3333FD322F31305D250E012322263511233533113311211521111416171E013332363733
-02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E
-FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515
-09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED
-3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69
-B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000
-047F045D000600864041260429063604390646044906062905390540055105600505061A
-000100041A03020328002703380037034A00470375017A02080005027503010305020802
-010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403
-820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901
-2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636
-045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701
-58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00
-0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E
-3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901
-23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303
-5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403
-14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407
-4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230
-084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809
-06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600
-01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117
-395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309
-0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A
-01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307
-0519031705460149035800570179030902071A000100051A040304490046040200030204
-05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F
-0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931
-30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04
-5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03
-45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B
-1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F
-3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800
-000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C
-09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105
-2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426
-2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6
-AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B
-BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00
-1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467
-0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C
-010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F
-5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436
-37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B
-887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00
-000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418
-4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16
-1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322
-26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466
-5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD
-4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A
-40130320113011401170118011050200110E060725012B355D350003001A0000055E0801
-0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646
-125906561278027703082020211F02870101011400120020210387040104140505067B06
-74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813
-114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200
-5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D
-10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D
-C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334
-26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672
-7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1
-02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B
-342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D
-313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371
-2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F
-5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514
-062322262735331E01333236353426270E01232224272602353412373624333216171523
-2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A
-5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346
-BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2
-B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236
-002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8
-023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7
-075002360032FD000117008E009601750018401103002930295029702904020029240F03
-25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210
-24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000
-0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000
-01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000
-011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000
-0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35
-5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B
-3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501
-2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B
-01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08
-0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B
-20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D
-015D250E01071E011514062322262735331E01333236353426270E01232226272E013510
-003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09
-1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A
-460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7
-D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022
-21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021
-20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024
-20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330
-2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D
-FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117
-0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D
-40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108
-880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133
-023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003
-0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100
-0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001
-2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9
-0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A
-FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A
-FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A
-FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A
-FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501
-2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025
-012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225
-012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625
-012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625
-012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60
-1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104
-0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED
-173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE
-6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B
-0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00
-3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9
-A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F
-FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901
-7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18
-471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED
-2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600
-353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB
-010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16
-0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021
-00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08
-1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605
-190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239
-ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206
-1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62
-0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468
-05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132
-63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C
-10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D
-181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217
-39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406
-07151E01151406070E012322262735331E01333236353426272E01272627263534363735
-2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627
-2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7
-5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B
-845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237
-072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334
-323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A
-563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688
-0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A
-DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106
-0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F
-5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506
-BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913
-39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B
-303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED
-2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01
-333236373E0135342623353236353426272E01232206070E01151123113436373E013332
-1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C
-28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123
-421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0
-000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314
-282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19
-2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD
-06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F
-ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001
-5D005D011000212000111000212000031000212000111000212000072301231123112132
-16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01
-66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71
-63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC
-FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719
-3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C
-0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064
-146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F
-521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F
-5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021
-2000031000212000111000212000050E012322243534003332161715232E012322061514
-1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701
-36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE
-0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230
-1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379
-0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800
-000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D
-0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3
-FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516
-03C3068C000300244016470156006600760004500360037003030303010000022F332F00
-2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003
-000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F
-5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597
-04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303
-0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08
-030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00
-2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121
-0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999
-6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1
-000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414
-05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35
-0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F
-5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101
-112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68
-B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D
-0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B
-090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70
-1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04
-0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F
-ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433
-3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA
-63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240
-453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601
-216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52
-E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34
-441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821
-AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6
-ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123
-2202353412333216173E01333212052E01232206151416333236373E0125342623220607
-0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A
-9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE
-010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3
-05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB
-0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F
-5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4
-021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403
-020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303
-00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F
-2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482
-FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006
-000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837
-051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F
-5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901
-350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000
-0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10
-0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305
-0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08
-BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B
-5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C
-015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020
-080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C
-5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332
-363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752
-433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B
-410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19
-19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED
-3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623
-22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0
-F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B
-0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91
-99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601
-08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302
-03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A
-0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239
-012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001
-8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288
-FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307
-050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F
-5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD
-B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500
-093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31
-300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001
-008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A
-10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226
-2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C
-228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B
-0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E
-6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B
-2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335
-0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E
-01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D
-B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A
-300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031
-40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33
-ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332
-3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC
-AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403
-300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825
-1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C
-FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135
-26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4
-A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C
-580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9
-40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D
-6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143
-124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304
-00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939
-10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32
-31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637
-362437353426272E012322060723353E01333216173E0133321215272E01272E01232206>
-<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15
-5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525
-20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C
-242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C
-FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008
-0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825
-04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D
-1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117
-3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123
-22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674
-6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D
-E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2
-03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C
-05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303
-101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED
-331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01
-151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04
-FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203
-05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4
-FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001
-00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100
-00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001
-0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829
-08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31
-308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902
-DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C
-270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D
-020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D
-FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001
-5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337
-3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E
-2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E
-1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606
-050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23
-541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED
-3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322
-26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E
-01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C
-59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437
-607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E
-05D100030006004F403148024703025A056A050205041A000003061A010102390236036B
-0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739
-5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105
-D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037
-0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100
-000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B
-2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE
-8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476
-0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040
-1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33
-2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104
-82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01
-110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800
-2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335
-3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117
-004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000
-011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032
-0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016
-002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834
-10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F
-FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121
-152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E
-FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68
-B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C
-2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314
-5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B
-0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538
-10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130
-015D01211416171E013332363733150E01232226270E01232200111000333216173E0133
-321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62
-BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792
-92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B
-A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05
-02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC
-00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002
-FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910
-3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202
-04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE
-F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF
-E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701
-000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B
-2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001
-FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701
-00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F
-000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100
-010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506
-14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407
-0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD
-3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB
-1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B
-4804470658045706680467067F047006087F057007020705000301000330036003900304
-03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A
-19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02
-C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016
-400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C
-00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D
-35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F
-332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC
-003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00
-4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204
-00121203151827190119191D341502002833010133332F34030A272001022320292C0400
-0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED
-12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D
-331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323
-37332E013534363723373312003332161715232E01232204072107210E01151416172107
-211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050
-C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476
-152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC
-02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001
-2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4
-5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0
-400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135
-0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003
-001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14
-0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139
-10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335
-333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C
-6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000
-0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A
-000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F
-3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436
-33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41
-03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A
-0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201
-0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17
-3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D
-01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05
-000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130
-0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037
-0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B
-09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF
-E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701
-0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B
-2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007
-0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C
-073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E
-17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20
-19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016
-01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12
-3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D
-ED5D3130015D011406232226353436333216250123090114062322263534363332160134
-262322061514163332360134262322061514163332362514062322263534363332160734
-262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6
-BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658
-586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787
-FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801
-023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D
-0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000
-055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8
-0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
-FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B
-3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925
-012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04
-0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200
-104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C
-000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236
-003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801
-023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA
-08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1
-052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2
-FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF
-00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500
-000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D
-FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905
-5606690566067A0573060601020350056005700503050560030103500060007000030000
-042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101
-00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952
-0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33
-2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F
-365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724
-29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED
-31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C
-7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00
-03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E
-ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B
-0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00
-2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51
-090009300902313009015009600970090309091551030C29200030000200003000600003
-D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635
-343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875
-065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02
-1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623
-22262735331E0133323635342627331E010370B79225742D091A58326862060399020659
-A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402
-00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204
-0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE
-8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04
-1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123
-222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE
-790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902
-64016B0274017B020606050250036003700303030360020102500060007000030000032F
-332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501
-7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804
-090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11
-332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC
-52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614
-000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A
-050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735
-37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502
-0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5
-03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000
-050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D
-000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A
-FE780228061400030007002940160F094F090201060106050201050B00041F014F050105
-2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8
-64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B
-0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C
-2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01
-23211123353311213204171612073426272E012B011121152111333236373E0105BCB193
-66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE
-B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1
-0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B
-542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E
-030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F
-1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110
-00232200353400333216172E01270527372E012735211E01173717071612013E01353426
-272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D
-0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201
-08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE
-2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025
-012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025
-012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400
-0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F
-233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED
-3130015D011406070E012B011123113311333216171E01073426272E012B011133323637
-3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939
-4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013
-0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01
-1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED
-3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607
-111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C
-88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0
-02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130
-0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7
-0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709
-01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401
-B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01
-0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121
-35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C
-102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10
-651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F
-ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01
-333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42
-022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0
-002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37
-2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A
-2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F
-1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B
-01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A
-0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C
-B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5
-0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02
-010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200
-003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B
-2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600
-002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131
-003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535
-0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510
-0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD
-32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521
-1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF
-8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C
-FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089
-000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001
-0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436
-24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544
-6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40
-0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937
-3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F
-2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115
-14062322262735331E01333236353426270E012322242735331604333236353426272E01
-272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3
-9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3
-9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C
-4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E
-28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B
-3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779
-3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09
-0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F
-4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D
-1112173931305D2B011406071E011514062322262735331E01333236353426270E012322
-262735331E0133323635342726272E01272E01353436373E013332161715232E01232206
-15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46
-0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347
-4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918
-0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801
-0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3
-068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546
-0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7
-03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1
-04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908
-70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A
-01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED
-1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135
-213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE
-95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86
-9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502
-2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003
-0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B
-FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B
-3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B
-35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A
-0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E
-570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01
-0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F
-20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F
-003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D
-005D010E012322263534363703210323012101230E0115141633323637330902062B344B
-2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D
-90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478
-003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25
-703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420
-3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49
-03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112
-392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534
-3637362437353426272E012322060723353E01333216171E011511230E01151416333236
-373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601
-1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474
-7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F
-24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2
-0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1
-062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E
-34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209
-0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F
-ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01
-33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5
-6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025
-2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F
-04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516
-090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32
-5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534
-3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7
-03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7
-B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E
-34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33
-3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301
-1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F
-31305D01211416171E013332363733150E01070E011514163332363733150E0123222635
-343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102
-03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030
-5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2
-B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325
-012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025
-012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702
-0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270
-030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35
-005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102
-030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6
-32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52
-C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D
-010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204
-1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133
-0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E
-07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133
-2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9
-05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807
-2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311
-33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000
-0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051
-00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031
-0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236
-00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236
-00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471
-068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000
-059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9
-00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF
-00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500
-FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B
-3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25
-012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225
-012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01
-18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4
-5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332
-3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521
-FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046
-0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F
-18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6
-5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130
-5D250E01071E011514062322262735331E01333236353426272322263511233533113311
-211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB
-B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10
-B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000
-011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F
-0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E
-0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800
-4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD
-322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637
-331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8
-CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236
-00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00
-210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310
-21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35
-3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1
-023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529
-0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1
-FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF
-007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500
-FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B
-3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625
-012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625
-012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06
-10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073
-FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705
-53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726
-27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F
-003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624
-33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C
-5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566
-6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069
-FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532
-65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11
-12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01
-071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E
-0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F
-4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A
-524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01
-363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C
-38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205
-0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939
-3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633
-32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111
-8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086
-4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21
-1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111
-001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4
-113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637
-3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE
-F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0
-FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3
-0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418
-79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37
-2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D
-11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226
-272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01
-3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41
-40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D
-40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6
-0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15
-451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F
-1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000
-232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01
-1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609
-A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000
-4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
-2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002
-0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717
-0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A
-05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D
-ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127
-2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD
-51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145
-4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59
-051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED
-12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000
-03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005
-10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C
-3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B
-2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311
-3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254
-9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D
-00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037
-3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E
-34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A
-4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33
-7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F
-1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED
-332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127
-2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133
-32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA
-E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486
-B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E
-1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2
-45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D
-75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005
-B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023
-60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065
-B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213
-040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6
-ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E
-012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63
-B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5
-0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1
-022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366
-041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020
-0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F
-5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6
-88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D
-481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F
-29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10
-371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840
-1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D
-335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B
-2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123
-220615141633323637330901230901140623222635343633321607342623220615141633
-3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE
-B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302
-68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B
-006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612
-120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8
-FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B
-2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135
-3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D
-0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B
-A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101
-05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113
-1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017
-400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101
-CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230
-0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703
-8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606
-00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6
-0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017
-0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C
-CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00
-0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514
-06232226353436172206151416333236353426016B689393686893926949666748486766
-03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000
-011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000
-011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117
-00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116
-00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236
-00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236
-00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000
-049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6
-046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D
-0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460
-068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8
-0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A
-FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3
-05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59
-0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500
-FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35
-FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A
-23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E
-4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235
-40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27
-040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33
-2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510
-002132041715232E01272E012322001110002132363711213521110E01071E0115140623
-22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA
-FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061
-0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516
-A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D
-10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020
-112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033
-603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10
-E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31
-305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133
-321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460
-7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE
-E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6
-BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A
-B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A
-4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1
-001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304
-070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED
-1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121
-11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19
-0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030
-031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020
-02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F
-ED393931305D2123113426272E0123220607112311233533353315211521113E01333216
-15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE
-04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B
-10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201
-0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4
-332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335
-2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3
-C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898
-FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054
-40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704
-10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F
-ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617
-1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF
-81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32
-0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A
-140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31
-302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198
-98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202
-00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130
-01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B
-00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329
-12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F
-2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406
-232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898
-FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003
-0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01
-0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533
-1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998
-045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717
-13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210
-E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315
-230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141
-1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F
-024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104
-04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4
-FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534
-3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141
-13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801
-0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35
-0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A
-1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4
-5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627
-35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816
-160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00
-FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF
-00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05
-0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D
-021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802
-050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D
-11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D
-7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102
-2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507
-01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C
-ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426
-02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0
-0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104
-01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F
-2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149
-8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300
-FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016
-0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100
-2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107
-7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776
-06010F0102061F01150626013601340646014406560153066006790170060E0406015A01
-550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802
-0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172
-715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901
-330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00
-000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E
-1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD
-322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114
-062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26
-0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805
-0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F
-03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025
-2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325
-2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35
-FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001
-001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05
-1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11
-332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627
-231133153E013332161715232E012322060711331E011514062322262735333C4E285E52
-0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5
-5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000
-011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000
-011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F
-004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204
-5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111
-21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE
-528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B
-3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C
-0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00
-3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311
-331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C
-012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28
-251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D
-1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625
-2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25
-2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35
-FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35
-FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001
-00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33
-20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36
-1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31
-302B5D053436372206232226272E01351133111416171E01333236373E01351133111406
-070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C
-976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9
-037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00
-000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205
-0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B
-1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437
-350E01232226351133111416171E0133323637113311230E011514163332363733150E01
-23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C
-A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24
-FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35
-FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35
-FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35
-FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001
-00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6
-5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679
-67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E
-00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646
-125906561278027703082020211F02370187010201140012002021033704870402041405
-05060606091226062912370638124606491258127A0675120B24240C702501251651A00C
-F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF
-C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F
-0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C
-0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507
-05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12
-17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00
-5D212303210323012E013534363332161514060727342623220615141633323613090207
-2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D
-F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD
-CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E
-37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F
-4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A
-01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600
-0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD
-32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B
-5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736
-2437353426272E01232206070E010723353E01372E01353436333216151406071E011503
-110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A
-5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56
-E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D
-4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761
-5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000
-0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F
-068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA
-08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D
-3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E
-2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D
-ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117
-004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117
-004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117
-008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117
-008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117
-008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D
-355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0
-40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236
-003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF
-003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B
-090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100
-B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B
-010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000
-05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028
-00934063411253125B1A6312730273129024B603B6240923200551000810082008030808
-1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C
-1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12
-17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED
-393931305D2901353E0137233533352335333534123332161715232E012322061D012115
-21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93
-016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00
-000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37
-07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C
-1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B
-31305D01211416171E013332363733150E0123200011100021320011272E01272E012322
-06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A
-9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100
-FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C
-040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600
-003700BB02910000011702410413FDC600384026040302360A0403023900392039403980
-39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35
-3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038
-4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F
-094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600
-003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103
-01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535
-00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01
-010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD
-D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A
-0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E
-010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001
-0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303
-0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF
-090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D
-33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31
-803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024
-00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000
-059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F
-0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000
-0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F
-5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018
-010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF
-0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227
-1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037
-003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04
-4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117
-019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70
-2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D
-0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F
-370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33
-2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177
-BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E
-05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003
-00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02
-4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239
-012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127
-FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508
-05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216
-002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E
-0902390258020378017703020203020114000600020314040405490546067C0573060405
-030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504
-65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123
-09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030
-0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047
-40130535060609013502030A350908054009133704B8FFC0401609133704050504030204
-0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001
-213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0
-FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603
-010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311
-2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000
-000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B
-A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B
-0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325
-293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403
-0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209
-D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B
-71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135
-090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE
-061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000
-FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E
-021B067518011834380948096F090309192209030810030822142311141023071B180714
-108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910
-C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135
-1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34
-359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D
-2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A
-641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014
-041925140204160B341F02261835011608251202191214081502141C272222290F29010F
-291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED
-1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526
-023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D
-CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A
-0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E
-FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006
-000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05
-01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A
-B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E
-014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116
-019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D
-FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116
-019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037
-0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10
-371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00
-90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239
-2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715
-1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE
-F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120
-1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016
-A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507
-01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505
-15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D
-1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133
-0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6
-0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C
-07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133
-2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426
-2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A
-201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647
-664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828
-264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E
-05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12
-3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D
-A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1
-04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B
-2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25
-181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED
-12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612
-072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A
-252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70
-28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5
-8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8
-045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6
-18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040
-10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736
-178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37
-00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F
-FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D
-71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180
-487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100
-0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8
-FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040
-260910370C001C004B005A006A00790006008D090F090103041304440455046504760406
-04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0
-08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9
-FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C
-0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F
-3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E
-4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000
-047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E
-24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C
-030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0
-400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F
-1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01
-353436373E0137352E01353436373523352115212206070E01151416171E013B01152122
-06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89
-4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467
-211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22
-2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216
-00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315
-3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10
-F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623
-220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0
-0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64
-03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037
-3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B
-12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01
-3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA
-5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057
-AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2
-045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901
-091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133
-3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F
-5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408
-4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606
-0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10
-3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001
-8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906
-010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01
-53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047
-1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010
-7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D
-5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406
-070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360
-4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806
-343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611
-045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28
-0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A
-291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4
-2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627
-2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E
-01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A
-5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462
-5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937
-7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB
-023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500
-FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF
-00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071
-FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8
-0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
-0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F
-073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D
-1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED
-31305D011406070E012B0135333236373E01353426272E01232111231121352115211121
-3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398
-BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF
-00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804
-0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C
-0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13
-000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D
-33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736
-243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE
-EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010
-4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF
-0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000
-02E207500236002C00000117008EFF240175001940130200104010501060107010050100
-100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1
-000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503
-28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501
-3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D
-013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01
-2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01
-0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24
-401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238
-052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00
-000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120
-1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6
-FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123
-2111213236373E01371406070E0123211121112311331121113311213216171E0107B432
-35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901
-C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001
-FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01
-07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F
-5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E
-01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079
-646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575
-07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002
-0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716
-191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E
-1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF
-E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F
-5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001
-8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901
-030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F
-1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902
-09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B
-0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D
-10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6
-FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000
-052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100
-71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D
-011406070E0123211121152111213216171E01073426272E01232111213236373E01052C
-554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C
-B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1
-021600250000000100C80000048A05D10005001F401003013504030000070F0701021403
-6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002
-000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013
-0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12
-392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705
-9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE
-9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E
-093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116
-09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33
-35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733
-350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112
-392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD
-2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01
-2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01
-0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C
-912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B
-18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051
-FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040
-3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409
-0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217
-392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607
-0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322
-06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63
-F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52
-A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818
-151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023
-0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8
-FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207
-14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133
-0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093
-40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D
-0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308
-030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18
-10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331
-305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB
-D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100
-000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500
-6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02
-1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504
-4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6
-5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A
-FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607
-0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B
-5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD
-051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F
-01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311
-210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6
-030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6
-FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216
-00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000
-000100C80000053B05D100070027401703350603010501140078090F0940095009030414
-056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA
-DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000
-FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801
-461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700
-03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40
-0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710
-FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F
-010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186
-05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1
-001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E
-150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17
-3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01
-272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107
-0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A
-8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC
-4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170
-B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C
-0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED
-392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1
-FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502
-0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33
-12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304
-EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930
-2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814
-05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333
-31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500
-000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814
-05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD
-32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC
-05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B
-1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123
-0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321
-11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01
-0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25
-2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055
-4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040
-150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D
-002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321
-113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD
-EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8
-23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416
-560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B
-ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111
-3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298
-C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061
-FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718
-34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C
-1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F
-3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E
-01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051
-F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF
-676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0
-000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C
-03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F
-6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023
-2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01
-03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC
-FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000
-04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305
-0506060F113440030103030012340F03000519150904060309045F050105120114007821
-0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD
-C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133
-04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0
-026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216
-0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039
-6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A
-223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F
-ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01
-37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE
-4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F
-B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959
-11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9
-00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37
-12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F
-35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931
-302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332
-36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E
-4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A
-045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F
-19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806
-10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009
-FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E
-1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11
-332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111
-3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101
-F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632
-045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF
-E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910
-37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E
-0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07
-0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417
-39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD
-3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711
-33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F
-1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02
-01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159
-631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D
-10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F
-06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B
-5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01
-1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534
-26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D
-49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342
-546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11
-110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02
-0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B
-0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311
-01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017
-0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102
-04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960
-190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33
-2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA
-FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6
-94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635
-1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713
-3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700
-001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239
-2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E
-01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924
-2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021
-003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303
-1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107
-0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307
-201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D
-1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503
-4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02
-030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20
-0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D
-012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2
-023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105
-0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED
-31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF
-006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005
-011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311
-210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A
-FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849
-014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00
-0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E
-013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951
-0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627
-D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000
-4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
-2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF
-003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622
-011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B
-0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E
-0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B
-33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332
-16171133113E0133321203342623220607111E0133323605112E01232206151416333236
-064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F
-2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D
-DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00
-FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B
-08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188
-0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304
-2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025
-0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902
-092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416
-171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE
-CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809
-1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED
-10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC
-045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108
-0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104
-5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121
-1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002
-000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16
-0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F
-FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E
-0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55
-FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33
-2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617
-05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025
-402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F
-3130013426272E012B0111333236373E01371406070E012321113311333216171E011333
-1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157
-334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000
-0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013
-090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F
-5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01
-037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A
-FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532
-0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313
-061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13
-03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F
-ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521
-2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314
-BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44
-000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03
-3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F
-10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206
-15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC
-D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD
-FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D
-0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603
-09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D
-ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637
-3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01
-AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C
-37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560
-250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28
-59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F
-2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6
-ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322
-0607112311233533353315211521113E01333216171416151406070602070E01232A0127
-35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303
-020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86
-FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682
-0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021
-006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037
-193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340
-090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B
-2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236
-3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E
-0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478
-021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077
-0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900
-30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409
-3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530
-35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED
-31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E
-01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B
-64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A
-183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A
-03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000
-06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8
-FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810
-F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E
-012B0111333236373E01371406070E0123211121112311331121113311333216171E0106
-3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157
-334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001
-00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201
-010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6
-ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123
-3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC
-63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682
-0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D
-FE64047F06150007001500BD404C04063406440650066006700606090307051903170546
-0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B
-0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102
-03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465
-0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933
-2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627
-331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D
-FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027
-0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A
-05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111
-330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B
-B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F
-3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9
-000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F
-0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC
-0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501
-2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015
-0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09
-0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF
-C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006
-0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED
-1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121
-0111330114062322263534363332160734262322061514163332360121152104FFF5FD72
-B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05
-D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D
-000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F
-333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F
-05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F
-ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F
-05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636
-166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130
-2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B
-86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3
-1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455
-0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF
-16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F
-121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607
-0E012322262735331E013332363534262B01353332363534262322060723353E01333216
-15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140
-964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62
-57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C
-05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F
-ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F
-0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D
-1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000
-092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322
-262735331E01333236373E01353426272E012322060711211521153E01333216171E0103
-75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634
-373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F
-000100F3023503A505DA000600414025560101030100012A020203630073000200000351
-0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D
-8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5
-021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B
-0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316
-04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01
-140623222635343637352E0135343633321615140607151E01033426232206151416171E
-01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261
-5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429
-64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D
-304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045
-0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22
-1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED
-5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207
-0E01232224272602353412373624333216171E01173E013534262735331E011514060110
-0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819
-144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863
-630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE
-DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A
-21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F
-2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31
-302B011000232200111000333216173332363534262735331E01151406071E0107342623
-22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA
-9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D
-D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03
-0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D
-050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322
-26272E01351133111416171E01333236373E0135113332363534262735331E0115140623
-052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2
-F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384
-000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509
-051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27
-050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123
-350E01232226351133111416171E0133323637113332363534262735331E011514062B01
-0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD
-8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042
-4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437
-09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523
-353E013534262322060723353E01333216034242426E2F3026211F251803134926516605
-F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144
-8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C
-001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A
-004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560
-0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217
-392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF
-00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510
-0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E
-103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303
-3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752
-0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B
-0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910
-370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104
-2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31
-30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1
-9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15
-44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040
-200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0
-40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED
-002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627
-2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A
-192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788
-912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006
-0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D
-002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2
-A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D
-0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00
-8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533
-1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55
-010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300
-13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A
-0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B
-D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623
-22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21
-42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7
-03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37
-11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED
-D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416
-33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2
-A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC
-A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016
-00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005
-020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E
-5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603
-4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600
-00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701
-0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003
-0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33
-D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327
-07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5
-F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052
-6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010
-6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102
-11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D
-71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E
-9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D
-001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E
-6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00
-0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623
-222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730
-58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022
-02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003
-CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E
-0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E
-5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714
-06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D
-231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805
-4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F
-1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003
-E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B
-0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E
-5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635
-370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C
-6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828
-2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900
-06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A
-0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011
-143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B
-5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406
-071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026
-211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF
-001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068
-FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500
-FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40
-1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A
-BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024
-00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1
-04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35
-3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100
-0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D
-030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116
-025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1
-04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35
-3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B
-3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229
-38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116
-024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82
-041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025
-0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116
-02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116
-0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236
-00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236
-0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000
-055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1
-041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500
-FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535
-FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00
-252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00
-001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068
-FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B
-002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600
-000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A
-B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C
-401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460
-068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025
-2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901
-0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A
-B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016
-400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048
-00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028
-00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF
-FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF
-00C80000053608010236002800000116025C26000013400D0201101020100200100C0203
-252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024
-2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600
-000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900
-000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026
-01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500
-5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E
-031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117
-0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000
-01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82
-02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82
-018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82
-05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82
-0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA
-080102360032000001170256009601750022400B0250340102503470340234B8FFC04009
-090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A
-E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000
-0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535
-005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C
-501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117
-024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1
-0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1
-05DA08010236003200000117025C009600000015400F0302202850288028030028240F03
-252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C
-201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000
-01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A
-FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500
-1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117
-024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D
-3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300
-212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D
-007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C
-0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236
-024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D
-35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02
-002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012
-400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116
-024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7
-008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236
-02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF
-0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF
-006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2
-FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82
-0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529
-080102360038000001170256006201750012400B01502301010023220C00252B35005D35
-FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF
-00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D
-0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160
-28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000
-0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500
-5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760
-27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062
-01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249
-00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000
-011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000
-011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116
-024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B
-FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4
-0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D
-FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025
-2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125
-2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A
-4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018
-401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236
-005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6
-07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35
-FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003
-006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524
-4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B
-2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632
-ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123
-1123350E01232202113436373E0133321617352135213533153301112E01232206151416
-3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C
-B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279
-2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498
-0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102
-24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F
-5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332
-16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9
-1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619
-17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000
-0002000000000000FF4C00780000000000000000000000000000000000000000037D0000
-01020103010401050106010701080109010A010B010C010D010E010F0110011101120113
-011401150116011701180119011A011B011C011D011E011F012001210122012301240125
-0126012701280129012A012B012C012D012E012F01300131013201330134013501360137
-01380139013A013B013C013D013E013F0140014101420143014401450146014701480149
-014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B
-015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D
-016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F
-0180018101820183018401850186018701880189018A018B018C018D018E018F01900191
-01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3
-01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5
-01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7
-01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9
-01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB
-01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD
-01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F
-0210021102120213021402150216021702180219021A021B021C021D021E021F02200221
-02220223022402250226022702280229022A022B022C022D022E022F0230023102320233
-023402350236023702380239023A023B023C023D023E023F024002410242024302440245
-0246024702480249024A024B024C024D024E024F02500251025202530254025502560257
-02580259025A025B025C025D025E025F0260026102620263026402650266026702680269
-026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B
-027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D
-028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F
-02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1
-02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3
-02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5
-02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7
-02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9
-02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B
-030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D
-031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F
-0330033103320333033403350336033703380339033A033B033C033D033E033F03400341
-03420343034403450346034703480349034A034B034C034D034E034F0350035103520353
-035403550356035703580359035A035B035C035D035E035F036003610362036303640365
-0366036703680369036A036B036C036D036E036F03700371037203730374037503760377
-03780379037A037B037C037D037E037F0380038103820383038403850386038703880389
-038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B
-039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD
-03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF
-03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1
-03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3
-03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5
-03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407
-04080409040A040B040C040D040E040F0410041104120413041404150416041704180419
-041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B
-042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D
-043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F
-0450045104520453045404550456045704580459045A045B045C045D045E045F04600461
-04620463046404650466046704680469046A046B046C046D046E046F0470047104720473
-047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E
-6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572
-7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573
-696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04
-706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03
-6F6E650374776F05746872656504666F757204666976650373697805736576656E056569
-676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07
-67726561746572087175657374696F6E0261740141014201430144014501460147014801
-49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B
-627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61
-7363696963697263756D0A756E64657273636F7265056772617665016101620163016401
-650166016701680169016A016B016C016D016E016F017001710172017301740175017601
-7701780179017A0962726163656C656674036261720A627261636572696768740A617363
-696974696C646509416469657265736973054172696E670843636564696C6C6106456163
-757465064E74696C6465094F646965726573697309556469657265736973066161637574
-65066167726176650B6163697263756D666C657809616469657265736973066174696C64
-65056172696E670863636564696C6C6106656163757465066567726176650B6563697263
-756D666C65780965646965726573697306696163757465066967726176650B6963697263
-756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176
-650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574
-65067567726176650B7563697263756D666C657809756469657265736973066461676765
-72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65
-74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F
-707972696768740974726164656D61726B056163757465086469657265736973086E6F74
-657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C
-657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961
-6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C
-0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C
-6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E
-6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D
-656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C
-697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64
-61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768
-740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67
-650979646965726573697309596469657265736973086672616374696F6E044575726F0D
-6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964
-616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261
-73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66
-6C65780B4563697263756D666C6578064161637574650945646965726573697306456772
-617665064961637574650B4963697263756D666C65780949646965726573697306496772
-617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465
-0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66
-6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E
-6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06
-4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A
-6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574
-650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065
-72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861
-6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762
-72657665066762726576650449646F740853636564696C6C610873636564696C6C610643
-61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F
-76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65
-6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E
-656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375
-7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61
-63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375
-7465065261637574650672616375746506526361726F6E06726361726F6E065361637574
-65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463
-61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465
-065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461
-0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370
-68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72
-0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563
-6F6E64096166696936313234380961666969363132383906483232303733064831383534
-3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761
-6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404
-63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445
-646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F
-740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578
-0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465
-07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E
-656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B
-636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C
-6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E
-67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564
-696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65
-7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D
-6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B
-5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B
-7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163
-757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61
-7368616375746509616E6F74656C65696106576772617665067767726176650657616375
-746506776163757465095764696572657369730977646965726573697306596772617665
-067967726176650D71756F74657265766572736564097261646963616C65780961666969
-303839343109657374696D61746564096F6E656569676874680C74687265656569676874
-68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363
-656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374
-6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F
-7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F
-730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861
-04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61
-707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553
-69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164
-696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65
-7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C
-6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105
-746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69
-63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567
-610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372
-6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969
-313030323309616669693130303531096166696931303035320961666969313030353309
-616669693130303534096166696931303035350961666969313030353609616669693130
-303537096166696931303035380961666969313030353909616669693130303630096166
-696931303036310961666969313030363209616669693130313435096166696931303031
-370961666969313030313809616669693130303139096166696931303032300961666969
-313030323109616669693130303232096166696931303032340961666969313030323509
-616669693130303236096166696931303032370961666969313030323809616669693130
-303239096166696931303033300961666969313030333109616669693130303332096166
-696931303033330961666969313030333409616669693130303335096166696931303033
-360961666969313030333709616669693130303338096166696931303033390961666969
-313030343009616669693130303431096166696931303034320961666969313030343309
-616669693130303434096166696931303034350961666969313030343609616669693130
-303437096166696931303034380961666969313030343909616669693130303635096166
-696931303036360961666969313030363709616669693130303638096166696931303036
-390961666969313030373009616669693130303732096166696931303037330961666969
-313030373409616669693130303735096166696931303037360961666969313030373709
-616669693130303738096166696931303037390961666969313030383009616669693130
-303831096166696931303038320961666969313030383309616669693130303834096166
-696931303038350961666969313030383609616669693130303837096166696931303038
-380961666969313030383909616669693130303930096166696931303039310961666969
-313030393209616669693130303933096166696931303039340961666969313030393509
-616669693130303936096166696931303039370961666969313030373109616669693130
-303939096166696931303130300961666969313031303109616669693130313032096166
-696931303130330961666969313031303409616669693130313035096166696931303130
-360961666969313031303709616669693130313038096166696931303130390961666969
-313031313009616669693130313933096166696931303035300961666969313030393809
-616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C
-74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65
-7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65
-696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068
-35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568
-6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62
-096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835
-393108676C79706835393208676C79706835393308676C79706835393408676C79706835
-393508676C79706835393608676C79706835393708676C79706835393808676C79706835
-393908676C79706836303008676C79706836303108676C79706836303208676C79706836
-303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F
-6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061
-63697263756D666C65786163757465104163697263756D666C6578677261766510616369
-7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461
-63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465
-106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F
-77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162
-7265766561637574650B41627265766567726176650B61627265766567726176650F4162
-72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665
-74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272
-657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F
-6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972
-63756D666C65786163757465106563697263756D666C6578616375746510456369726375
-6D666C65786772617665106563697263756D666C65786772617665144563697263756D66
-6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563
-697263756D666C657874696C6465106563697263756D666C657874696C64651345636972
-63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A
-49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74
-62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79
-70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861
-74616671616D617473056869726971057473657265057365676F6C057061746168067161
-6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166
-0472616665057061736571077368696E646F740673696E646F7408736F66706173757104
-616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865
-740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65
-6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C
-70650270650A66696E616C747361646905747361646903716F660472657368047368696E
-0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265
-73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F
-740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564
-686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73
-68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410
-7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174
-7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461
-6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461
-676573680974657464616765736809796F646461676573680E66696E616C6B6166646167
-657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809
-6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368
-0870656461676573680B747361646964616765736809716F666461676573680A72657368
-6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07
-62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572
-6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674
-746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338
-380961666969353734303309616669693537343037096166696935373430390961666969
-353734343009616669693537343531096166696935373435320961666969353734353309
-616669693537343534096166696935373435350961666969353734353609616669693537
-343537096166696935373435380961666969353733393209616669693537333933096166
-696935373339340961666969353733393509616669693537333936096166696935373339
-370961666969353733393809616669693537333939096166696935373430300961666969
-353734303109616669693537333831096166696935373436310961666969363331363709
-616669693537343539096166696935373534330961666969353735333409616669693537
-343934096166696936323834330961666969363238343409616669693632383435096166
-696936343234300961666969363432343109616669693633393534096166696935373338
-320961666969363432343209616669693632383831096166696935373530340961666969
-353733363909616669693537333730096166696935373337310961666969353733373209
-616669693537333733096166696935373337340961666969353733373509616669693537
-333931096166696935373437310961666969353734363009616669693532323538096166
-696935373530360961666969363239353809616669693632393536096166696935323935
-370961666969353735303509616669693632383839096166696936323838370961666969
-363238383809616669693537353037096166696936323936310961666969363239353909
-616669693632393630096166696935373530380961666969363239363209616669693537
-353637096166696936323936340961666969353233303509616669693532333036096166
-696935373530390961666969363239363709616669693632393635096166696936323936
-360961666969353735353509616669693532333634096166696936333735330961666969
-363337353409616669693633373539096166696936333736330961666969363337393509
-616669693632383931096166696936333830380961666969363239333809616669693633
-383130096166696936323934320961666969363239343709616669693633383133096166
-696936333832330961666969363338323409616669693633383333096166696936333834
-340961666969363238383209616669693632383833096166696936323838340961666969
-363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A
-4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375
-7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665
-106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F
-7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874
-696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74
-62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465
-0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68
-6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C
-64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74
-62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665>
-<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568
-6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75
-686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D
-55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832
-08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61
-626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974
-696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009
-0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6
-FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039
-FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059
-FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0
-FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6
-FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039
-FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A
-FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5
-FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB
-FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2
-FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C
-FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E
-FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052
-FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010
-FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090
-FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052
-FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0
-FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A
-FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037
-FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064
-FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6
-FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D
-FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044
-FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB
-FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037
-FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C
-FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4
-FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059
-FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010
-FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026
-FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046
-FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058
-FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090
-FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0
-FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090
-FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E
-FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C
-FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1
-FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E
-FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058
-FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0
-FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032
-FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064
-FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1
-FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E
-FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A
-FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055
-FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0
-FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2
-FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044
-FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091
-FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2
-FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C
-FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037
-FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010
-FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060
-0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059
-FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1
-FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C
-FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059
-FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C
-FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0
-FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010
-FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F
-FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0
-FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F
-FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1
-FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A
-FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2
-FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047
-FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0
-FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010
-FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054
-FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF
-FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F
-FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB
-FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB
-FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036
-FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D
-FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D
-FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036
-FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D
-FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D
-FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011
-FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056
-FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F
-FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C
-006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039
-FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C
-FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3
-06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205
-05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E
-801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608
-2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0
-3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D
-010104050030819E311F301D060355040A1316566572695369676E205472757374204E65
-74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603
-55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520
-526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544
-2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030
-30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269
-5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967
-6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D
-70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249
-4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30
-819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D
-2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A
-B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881
-1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797
-6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100
-3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F
-5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09
-16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8
-C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43
-ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30
-1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603
-55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369
-676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355
-040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572
-695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331
-3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053
-74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054
-72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920
-41434345505445442C20286329393720566572695369676E2C20496E632E311730150603
-55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E
-657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD
-8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC
-F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B
-D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265
-E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181
-006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508
-2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1
-5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E
-A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210
-7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130
-0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C
-20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20
-536F667477617265205075626C697368657273204341301E170D39383034313630303030
-30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74
-65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603
-55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075
-626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63
-6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49
-41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61
-73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E
-207632310B3009060355040613025553311330110603550408130A57617368696E67746F
-6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73
-6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420
-436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030
-8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0
-D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9
-6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765
-DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C
-4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F
-7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2
-A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64
-E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B
-0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338
-CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355
-040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967
-6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182
-0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116
-0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A
-0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E
-636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469
-66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E
-642069747320757365206973207374726963746C790A7375626A65637420746F2C207468
-6520566572695369676E2043657274696669636174696F6E205072616374696365205374
-6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65
-20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470
-733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043
-50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C
-20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C
-204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967
-6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874
-732052657365727665642E204345525441494E0A57415252414E5449455320444953434C
-41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E
-473A2054484520555345204F462054484953204345525449464943415445204953205354
-524943544C59205355424A45435420544F205448450A564552495349474E204345525449
-4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953
-5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D
-504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544
-494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52
-204649544E45535320464F52204120504152544943554C415220505552504F53452C2041
-4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54
-49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D
-414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74
-656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76
-657269666965645375626A656374417474726962757465730A657874656E73696F6E2076
-616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375
-7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941
-2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73
-69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030
-80060B6086480186F845010701013080302806082B06010505070201161C68747470733A
-2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056
-3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320
-43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20
-286329393720566572695369676E0000000000003016060A2B06010401823702011B0408
-30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B
-25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F
-AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F
-228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728
-2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713
-08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133
-3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172
-65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06
-082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401
-8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630
-1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A
-2B06010401823702010C31443042A01A801800560065007200640061006E006100200046
-006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74
-727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F
-B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7
-CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5
-E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4
-836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF
-88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F
-86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA
-0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030
-8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06
-0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504
-0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E
-2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B
-132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953
-69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608
-2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01
-0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609
-2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648
-86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA
-BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D
-41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342
-DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000>
-] def
-/CharStrings 893 dict dup begin
-/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def
-/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def
-/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def
-/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def
-/period 17 def /slash 18 def /zero 19 def /one 20 def
-/two 21 def /three 22 def /four 23 def /five 24 def
-/six 25 def /seven 26 def /eight 27 def /nine 28 def
-/colon 29 def /semicolon 30 def /less 31 def /equal 32 def
-/greater 33 def /question 34 def /at 35 def /A 36 def
-/B 37 def /C 38 def /D 39 def /E 40 def
-/F 41 def /G 42 def /H 43 def /I 44 def
-/J 45 def /K 46 def /L 47 def /M 48 def
-/N 49 def /O 50 def /P 51 def /Q 52 def
-/R 53 def /S 54 def /T 55 def /U 56 def
-/V 57 def /W 58 def /X 59 def /Y 60 def
-/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def
-/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def
-/b 69 def /c 70 def /d 71 def /e 72 def
-/f 73 def /g 74 def /h 75 def /i 76 def
-/j 77 def /k 78 def /l 79 def /m 80 def
-/n 81 def /o 82 def /p 83 def /q 84 def
-/r 85 def /s 86 def /t 87 def /u 88 def
-/v 89 def /w 90 def /x 91 def /y 92 def
-/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def
-/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def
-/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def
-/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def
-/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def
-/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def
-/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def
-/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def
-/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def
-/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def
-/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def
-/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def
-/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def
-/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def
-/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def
-/summation 153 def /product 154 def /pi1 155 def /integral 156 def
-/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def
-/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def
-/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def
-/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def
-/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def
-/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def
-/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def
-/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def
-/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def
-/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def
-/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def
-/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def
-/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def
-/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def
-/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def
-/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def
-/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def
-/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def
-/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def
-/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def
-/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def
-/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def
-/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def
-/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def
-/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def
-/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def
-/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def
-/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def
-/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def
-/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def
-/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def
-/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def
-/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def
-/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def
-/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def
-/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def
-/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def
-/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def
-/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def
-/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def
-/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def
-/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def
-/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def
-/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def
-/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def
-/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def
-/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def
-/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def
-/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def
-/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def
-/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def
-/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def
-/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def
-/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def
-/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def
-/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def
-/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def
-/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def
-/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def
-/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def
-/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def
-/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def
-/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def
-/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def
-/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def
-/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def
-/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def
-/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def
-/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def
-/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def
-/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def
-/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def
-/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def
-/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def
-/zeta 453 def /eta 454 def /theta 455 def /iota 456 def
-/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def
-/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def
-/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def
-/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def
-/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def
-/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def
-/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def
-/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def
-/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def
-/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def
-/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def
-/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def
-/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def
-/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def
-/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def
-/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def
-/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def
-/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def
-/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def
-/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def
-/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def
-/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def
-/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def
-/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def
-/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def
-/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def
-/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def
-/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def
-/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def
-/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def
-/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def
-/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def
-/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def
-/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def
-/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def
-/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def
-/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def
-/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def
-/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def
-/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def
-/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def
-/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def
-/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def
-/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def
-/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def
-/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def
-/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def
-/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def
-/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def
-/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def
-/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def
-/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def
-/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def
-/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def
-/bet 673 def /gimel 674 def /dalet 675 def /he 676 def
-/vav 677 def /zayin 678 def /het 679 def /tet 680 def
-/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def
-/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def
-/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def
-/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def
-/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def
-/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def
-/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def
-/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def
-/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def
-/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def
-/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def
-/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def
-/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def
-/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def
-/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def
-/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def
-/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def
-/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def
-/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def
-/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def
-/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def
-/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def
-/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def
-/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def
-/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def
-/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def
-/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def
-/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def
-/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def
-/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def
-/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def
-/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def
-/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def
-/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def
-/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def
-/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def
-/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def
-/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def
-/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def
-/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def
-/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def
-/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def
-/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def
-/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def
-/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def
-/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def
-/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def
-/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def
-/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def
-/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def
-/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def
-/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def
-/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def
-
-end readonly def
-FontName currentdict end definefont pop
-%%EndFont
-%%EndProlog
-mpldict begin
-13.5 175.5 translate
-585 441 0 0 clipbox
-% polygon
-1.000 setgray
-1.000 setlinewidth
-0 setlinejoin
-2 setlinecap
-[] 0 setdash
-0 0 m
-0 441 l
-585 441 l
-585 0 l
-closepath
-gsave
-fill
-grestore
-stroke
-% polygon
-0.000 setgray
-73.125 44.1 m
-73.125 396.9 l
-526.5 396.9 l
-526.5 44.1 l
-closepath
-gsave
-1.000 setgray
-fill
-grestore
-stroke
-% draw_lines
-0.000 0.000 1.000 setrgbcolor
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 44.100 m
-82.192 44.625 l
-91.260 46.237 l
-100.328 49.043 l
-109.395 53.206 l
-118.463 58.937 l
-127.530 66.464 l
-136.597 76.012 l
-145.665 87.777 l
-154.733 101.897 l
-163.800 118.431 l
-172.868 137.336 l
-181.935 158.456 l
-191.002 181.511 l
-200.070 206.100 l
-209.138 231.707 l
-218.205 257.720 l
-227.273 283.450 l
-236.340 308.160 l
-245.408 331.100 l
-254.475 351.539 l
-263.543 368.804 l
-272.610 382.309 l
-281.678 391.584 l
-290.745 396.306 l
-299.812 396.306 l
-308.880 391.584 l
-317.948 382.309 l
-327.015 368.804 l
-336.083 351.539 l
-345.150 331.100 l
-354.218 308.160 l
-363.285 283.450 l
-372.353 257.720 l
-381.420 231.707 l
-390.488 206.100 l
-399.555 181.511 l
-408.623 158.456 l
-417.690 137.336 l
-426.758 118.431 l
-435.825 101.897 l
-444.893 87.777 l
-453.960 76.012 l
-463.028 66.464 l
-472.095 58.937 l
-481.163 53.206 l
-490.230 49.043 l
-499.298 46.237 l
-508.365 44.625 l
-517.433 44.100 l
-stroke
-grestore
-% draw_lines
-1.000 0.000 0.000 setrgbcolor
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 44.100 m
-82.192 58.500 l
-91.260 72.900 l
-100.328 87.300 l
-109.395 101.700 l
-118.463 116.100 l
-127.530 130.500 l
-136.597 144.900 l
-145.665 159.300 l
-154.733 173.700 l
-163.800 188.100 l
-172.868 202.500 l
-181.935 216.900 l
-191.002 231.300 l
-200.070 245.700 l
-209.138 260.100 l
-218.205 274.500 l
-227.273 288.900 l
-236.340 303.300 l
-245.408 317.700 l
-254.475 332.100 l
-263.543 346.500 l
-272.610 360.900 l
-281.678 375.300 l
-290.745 389.700 l
-299.812 389.700 l
-308.880 375.300 l
-317.948 360.900 l
-327.015 346.500 l
-336.083 332.100 l
-345.150 317.700 l
-354.218 303.300 l
-363.285 288.900 l
-372.353 274.500 l
-381.420 260.100 l
-390.488 245.700 l
-399.555 231.300 l
-408.623 216.900 l
-417.690 202.500 l
-426.758 188.100 l
-435.825 173.700 l
-444.893 159.300 l
-453.960 144.900 l
-463.028 130.500 l
-472.095 116.100 l
-481.163 101.700 l
-490.230 87.300 l
-499.298 72.900 l
-508.365 58.500 l
-517.433 44.100 l
-stroke
-grestore
-% draw_lines
-0.000 0.500 0.000 setrgbcolor
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 44.100 m
-82.192 45.548 l
-91.260 49.869 l
-100.328 56.992 l
-109.395 66.799 l
-118.463 79.131 l
-127.530 93.783 l
-136.597 110.516 l
-145.665 129.056 l
-154.733 149.096 l
-163.800 170.309 l
-172.868 192.347 l
-181.935 214.846 l
-191.002 237.438 l
-200.070 259.753 l
-209.138 281.422 l
-218.205 302.092 l
-227.273 321.421 l
-236.340 339.094 l
-245.408 354.819 l
-254.475 368.339 l
-263.543 379.431 l
-272.610 387.913 l
-281.678 393.647 l
-290.745 396.538 l
-299.812 396.538 l
-308.880 393.647 l
-317.948 387.913 l
-327.015 379.431 l
-336.083 368.339 l
-345.150 354.819 l
-354.218 339.094 l
-363.285 321.421 l
-372.353 302.092 l
-381.420 281.422 l
-390.488 259.753 l
-399.555 237.438 l
-408.623 214.846 l
-417.690 192.347 l
-426.758 170.309 l
-435.825 149.096 l
-444.893 129.056 l
-453.960 110.516 l
-463.028 93.783 l
-472.095 79.131 l
-481.163 66.799 l
-490.230 56.992 l
-499.298 49.869 l
-508.365 45.548 l
-517.433 44.100 l
-stroke
-grestore
-% draw_lines
-0.750 0.000 0.750 setrgbcolor
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 72.324 m
-82.192 73.656 l
-91.260 77.632 l
-100.328 84.185 l
-109.395 93.207 l
-118.463 104.552 l
-127.530 118.033 l
-136.597 133.427 l
-145.665 150.483 l
-154.733 168.921 l
-163.800 188.437 l
-172.868 208.711 l
-181.935 229.410 l
-191.002 250.195 l
-200.070 270.724 l
-209.138 290.661 l
-218.205 309.676 l
-227.273 327.460 l
-236.340 343.718 l
-245.408 358.186 l
-254.475 370.624 l
-263.543 380.828 l
-272.610 388.632 l
-281.678 393.907 l
-290.745 396.567 l
-299.812 396.567 l
-308.880 393.907 l
-317.948 388.632 l
-327.015 380.828 l
-336.083 370.624 l
-345.150 358.186 l
-354.218 343.718 l
-363.285 327.460 l
-372.353 309.676 l
-381.420 290.661 l
-390.488 270.724 l
-399.555 250.195 l
-408.623 229.410 l
-417.690 208.711 l
-426.758 188.437 l
-435.825 168.921 l
-444.893 150.483 l
-453.960 133.427 l
-463.028 118.033 l
-472.095 104.552 l
-481.163 93.207 l
-490.230 84.185 l
-499.298 77.632 l
-508.365 73.656 l
-517.433 72.324 l
-stroke
-grestore
-% text
-0.000 setgray
-/Verdana findfont
-18.000 scalefont
-setfont
-144.812 403.956 m
-0 4 rmoveto
-(Smoothing window in time-domain) show
-% text
-/Verdana findfont
-14.000 scalefont
-setfont
-69.469 30.1 m
-(0) show
-% line
-0.500 setlinewidth
-0 setlinecap
-163.800 44.100 m 163.800 48.100 l
-stroke
-% line
-163.800 392.900 m 163.800 396.900 l
-stroke
-% text
-155.769 30.1 m
-(10) show
-% line
-254.475 44.100 m 254.475 48.100 l
-stroke
-% line
-254.475 392.900 m 254.475 396.900 l
-stroke
-% text
-246.444 30.1 m
-(20) show
-% line
-345.150 44.100 m 345.150 48.100 l
-stroke
-% line
-345.150 392.900 m 345.150 396.900 l
-stroke
-% text
-337.619 30.1 m
-(30) show
-% line
-435.825 44.100 m 435.825 48.100 l
-stroke
-% line
-435.825 392.900 m 435.825 396.900 l
-stroke
-% text
-427.731 30.1 m
-(40) show
-% text
-518.844 30.1 m
-(50) show
-% text
-296.656 17.1 m
-(n) show
-% text
-47.812 39.1 m
-(0.0) show
-% line
-73.125 114.660 m 77.125 114.660 l
-stroke
-% line
-522.500 114.660 m 526.500 114.660 l
-stroke
-% text
-47.875 109.66 m
-(0.2) show
-% line
-73.125 185.220 m 77.125 185.220 l
-stroke
-% line
-522.500 185.220 m 526.500 185.220 l
-stroke
-% text
-47.125 180.22 m
-(0.4) show
-% line
-73.125 255.780 m 77.125 255.780 l
-stroke
-% line
-522.500 255.780 m 526.500 255.780 l
-stroke
-% text
-47.812 250.78 m
-(0.6) show
-% line
-73.125 326.340 m 77.125 326.340 l
-stroke
-% line
-522.500 326.340 m 526.500 326.340 l
-stroke
-% text
-47.797 321.34 m
-(0.8) show
-% text
-48.062 391.9 m
-(1.0) show
-% polygon
-1.000 setlinewidth
-2 setlinecap
-214.291 51.156 m
-214.291 161.736 l
-385.334 161.736 l
-385.334 51.156 l
-closepath
-gsave
-1.000 setgray
-fill
-grestore
-stroke
-% draw_lines
-0.000 0.000 1.000 setrgbcolor
-230.344 143.521 m
-237.901 143.521 l
-245.457 143.521 l
-253.013 143.521 l
-stroke
-% draw_lines
-1.000 0.000 0.000 setrgbcolor
-230.344 121.605 m
-237.901 121.605 l
-245.457 121.605 l
-253.013 121.605 l
-stroke
-% draw_lines
-0.000 0.500 0.000 setrgbcolor
-230.344 97.688 m
-237.901 97.688 l
-245.457 97.688 l
-253.013 97.688 l
-stroke
-% draw_lines
-0.750 0.000 0.750 setrgbcolor
-230.344 71.371 m
-237.901 71.371 l
-245.457 71.371 l
-253.013 71.371 l
-stroke
-% text
-0.000 setgray
-/Verdana findfont
-24.000 scalefont
-setfont
-262.081 134.521 m
-(Blackman) show
-% text
-262.081 112.605 m
-(Bartlett) show
-% text
-262.081 86.688 m
-0 5 rmoveto
-(Hanning) show
-% text
-262.081 60.371 m
-0 5 rmoveto
-(Hamming) show
-
-end
-showpage
diff --git a/doc/numpybook/Figures/fig1bw.eps b/doc/numpybook/Figures/fig1bw.eps
deleted file mode 100644
index 3353edcb4..000000000
--- a/doc/numpybook/Figures/fig1bw.eps
+++ /dev/null
@@ -1,4575 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: fig1bw.eps
-%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/
-%%CreationDate: Fri Jan 6 00:30:28 2006
-%%BoundingBox: 13 175 598 616
-%%EndComments
-%%BeginProlog
-/mpldict 7 dict def
-mpldict begin
-/m { moveto } bind def
-/l { lineto } bind def
-/r { rlineto } bind def
-/box {
-m
-1 index 0 r
-0 exch r
-neg 0 r
-closepath
-} bind def
-/clipbox {
-box
-clip
-newpath
-} bind def
-/ellipse {
-newpath
-matrix currentmatrix 7 1 roll
-translate
-scale
-0 0 1 5 3 roll arc
-setmatrix
-closepath
-} bind def
-%%BeginFont: Verdana
-%!PS-TrueType-1.0-1.0
-8 dict begin
-/FontName /Verdana def
-/FontMatrix [1 0 0 1 0 0] def
-/FontType 42 def
-/Encoding StandardEncoding def
-/FontBBox [-102 -423 2963 2049] def
-/PaintType 0 def
-/FontInfo 7 dict dup begin
-/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def
-/FamilyName (Verdana) def
-/FullName (Verdana) def
-/version (Version 2.35) def
-/isFixedPitch false def
-/UnderlinePosition -180 def
-/UnderlineThickness 120 def
-end readonly def
-/sfnts [
-<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F
-00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4
-000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198
-6670676DEE371553000021740000013867617370001700090000021000000010676C7966
-01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C
-0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444
-00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC
-6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374
-C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000
-16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801
-00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000
-00000000000000000000037D00010000037D00620007006B000500020010002F00380000
-0495013F0003000100010411019000050000059A053300000125059A0533000003A00078
-02A70800020B0604030504040204000002870000000000000000000000004D5320200040
-0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001
-FFFF00030000002801E60001000000000000004300000001000000000001000700430001
-0000000000020007004A0001000000000003002F00510001000000000004000700800001
-000000000005000C00870001000000000006000700930001000000000007002F009A0003
-000104030002000C00C90003000104050002001000D50003000104060002000C00E50003
-000104070002001000F10003000104080002001001010003000104090000008601110003
-000104090001000E01970003000104090002000E01A50003000104090003005E01B30003
-000104090004000E021100030001040900050018021F0003000104090006000E02370003
-000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003
-0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003
-000104130002001202E50003000104140002000C02F70003000104150002001003030003
-000104160002000C03130003000104190002000E031F00030001041B00020010032D0003
-0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003
-0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003
-00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064
-61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C
-6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F
-736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372
-6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264
-616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270
-6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900
-6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03
-BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400
-6100740061002000A9002000310039003900360020004D006900630072006F0073006F00
-66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00
-6C0020005200690067006800740073002000520065007300650072007600650064005600
-65007200640061006E00610052006500670075006C00610072004D006900630072006F00
-73006F00660074003A00560065007200640061006E006100200052006500670075006C00
-610072003A00560065007200730069006F006E0020003100200028004D00690063007200
-6F0073006F00660074002900560065007200640061006E00610056006500720073006900
-6F006E00200032002E0033003500560065007200640061006E0061005600650072006400
-61006E006100200069007300200061002000740072006100640065006D00610072006B00
-20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000
-6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100
-61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200
-6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100
-6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04
-47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00
-4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00
-740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00
-61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A
-000001060000010000000000000001020000000200000000000000000000000000000001
-0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324
-25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748
-494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B
-6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F
-909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2
-B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5
-D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF
-02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85
-1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116
-21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA
-25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303
-03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026
-203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202
-2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01
-FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000
-0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077
-E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74
-DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000
-000002380000023800000000000000000000023800000242026800000000000000000000
-000002B203640368037600000000000000000000000000000000036A0000036A00000000
-000000000000000000000000000000000358000003580000000000000000000000000000
-0000000000000000034400000000000300A300840085037C009600E60086008E008B009D
-00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3
-00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC
-00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A
-0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A
-0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104
-010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E
-014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A
-015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E
-01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D
-016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9
-00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125
-0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9
-00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B
-01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D
-01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7
-01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5
-01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A
-026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C
-027D027E027F028002810282028302840285028602870288034C034D034E034F03500351
-03520353035403550356035703580359035A035B035C035D035E035F0360036103620363
-036403650366036703680369036A036B036C036D036E036F037003710191019203740375
-037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087
-00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242
-0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE
-04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13
-0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE
-122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747
-17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B
-1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226
-2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C
-245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2
-2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7
-316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD
-361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03
-3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47
-3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF
-40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF
-44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8
-48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E
-4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58
-4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491
-54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8
-575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2
-5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD
-5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1
-62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589
-65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A
-67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48
-6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA
-705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE
-73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA
-78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E
-7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9
-82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD
-87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73
-8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD
-9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7
-95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759
-976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB
-98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911
-9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB
-9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22
-9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B
-0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F
-740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4
-110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D
-B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10
-010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101
-01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101
-0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D
-320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C
-111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D
-230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D
-100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01
-010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C
-111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A
-100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22
-11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11
-0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10
-282001010101010101010101010101010101010101320D320D320D320D320D320D320D32
-0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B
-28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C
-00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D
-000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013
-0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019
-001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F
-0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025
-0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B
-002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031
-0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037
-0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D
-003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043
-0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049
-0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F
-004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055
-0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B
-005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061
-0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067
-0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D
-006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073
-0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079
-0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F
-007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085
-0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B
-008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091
-0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097
-0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D
-009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3
-00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9
-00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF
-00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5
-00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB
-00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1
-00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7
-00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD
-00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3
-00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9
-00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF
-00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5
-00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB
-00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1
-00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7
-00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD
-00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280
-B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55
-026F54019F54AF54025153170452531604535215044A4952044649370447493204484932
-04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532
-0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3
-B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3
-092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936
-4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590
-8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540
-C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914
-15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314
-480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B
-1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A
-1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10
-BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A
-0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808
-004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B
-2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861
-B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B
-2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B
-2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736
-26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258
-45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225
-45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C
-60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0
-042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820
-8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320
-468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046
-8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60
-441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010
-0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF
-00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC
-00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098
-009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF
-006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1
-0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072
-0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A
-006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A
-008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000
-045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100
-0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073
-022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2
-0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A
-0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A
-057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C
-058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086
-04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046
-03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A
-02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9
-04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056
-04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A
-05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068
-04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB
-0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1
-051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9
-0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E
-064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB
-068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071
-03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2
-0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096
-0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA
-03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A
-050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073
-064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118
-05160113051602210516012D05160161051601560516019F05160132047E001802460018
-05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D
-04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB
-0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069
-05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068
-062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB
-047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073
-04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E
-04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E
-0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A
-065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5
-047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A
-04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A
-050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8
-051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001
-035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005
-05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8
-036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1
-05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9
-0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056
-07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089
-05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100
-057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A
-057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8
-05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044
-06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1
-04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9
-04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071
-02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073
-05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006
-060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051
-060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8
-0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8
-06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9
-03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D
-059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F
-04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053
-06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005
-02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9
-080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3
-045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1
-0000020900000221000001540000021D0516013605160003051601360516012505160142
-051601420516014205160125051602090516013605160142051601420516014205160142
-051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3
-0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A
-04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A
-050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8
-04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000064C007304DB006A064C0073
-04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A
-064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073
-04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1
-060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006
-04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED
-0516008A0000001F00000380090E09000303050507070B07030404070703050304070707
-070707070707070404070707060A08070808070608080505070609080907090707070808
-090707070404040706060606060606030606030306030906060606040604060607060605
-060506070808080708090806060606060606060606060303030306060606060606060606
-07050707060507060909090606070A090907070707060607070607050507090606050707
-0707070606070808090A0907090404020207070607030604040606070302040E08070807
-070505050509090908080803060606060606060606060603070607050508060706070607
-070505050909090608060507060806080606060308060806080608070607060603060306
-040806080609060704070407060704070408060806070507050609070606050605090606
-050B09060703050B03050303050308060806080607060706070608060806080608060806
-050305030503050305030706060603080608060906090607040706070408060806080608
-06090707060308060A090906040907090709070706020607060909090902060606080809
-060908090308070607070805070809080709080706070707090905070605060306060505
-060603060606060506060506050907030606060707080608070505050A0A070707070807
-070607070906080807070908090807080707070708070909080907080907060606040606
-070506060606070606060606050609060705090907080606080606060406060303030909
-060606060505090B06050505050505050000000009060806000000000606060606060606
-060606060606060806080608060806080608060806080608060806080608060706070607
-060706070607060706070605030503000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000090609060906
-090609060906090609060906090609060906080608060806080608060806080607060706
-07060706060007000A0F0A000404040508070B0703050507080405040507070707070707
-0707070505080808060A070708080606080805050706090709070908070708070B070707
-0505050806060707050707040707030307030B0707070704060407060707060606050608
-070708060709080707070707070507070707030303030707070707070707070707050707
-060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706
-06080707090B0A070A0505030308080607040605050606070403050F0706070606050505
-050909090808080306060606060606060606060307060706050806070607070808050505
-0A0A0A060807050706080508050706040707070708070806070607060306030605070707
-0709070804080407060704070408070807070607060609090707050705090606050C0906
-0704060B0306040406040707080508050607060706070807080708070807080705030503
-0503050305030707070603070707070907090708040706070408070807080708070B0707
-060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909
-030707070607080507070907070908070707070709090507070507030707070507070307
-0607060507070507060909030707070906080608070505050B0B08070708070707060706
-0906080807070908090807080707090709070B0B080907080A0707070605060707050707
-0706070707070705050609070706090A0708060608060707050606030303090907070607
-06050A0C0705050505050505000000000907080700000000060606060606060606060606
-060606070707070707070707070707070707070707070707070707060706070607060706
-070607060706070503050300000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000009070907090709070907
-090709070907090709070907090708070807080708070807080708070706070607060706
-070007000B110B000404040509070C080305050709040504050707070707070707070705
-05090909060A080809090706090805050806090809070908080708080B08070805050509
-07070707060707040707030407030B070707070506040707090707060705070908080907
-080908070707070707060707070703030303070707070707070707070706070707060707
-0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808
-090C0B070B05050303090907070407050507070704030511080708070705050505090909
-08080803070707070707070707070603080608060509070707070709090606060B0B0B07
-090705080609060906070704080708070907090707070706030603060508070807090708
-05080508060704070408070807080608060609090707060705090707060D0A070804060C
-040704040704080709060906070707070707090709070907080708070503050305030503
-05040807070603080708070907090708050806070408070807080708070B090707030807
-0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808
-070808050808090807090807070707080909050707060703070707050707030707070706
-07070607070909030707070907090609080505050D0C090808080808080608070B070808
-08080908090807090708090809080B0C090A07090B080707070508070906070707070707
-07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D
-070606060606060600000000090708070000000007070707070707070707070707070708
-070807080708070807080708070807080708070807080707070707070707070707070707
-070707050305030000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000907090709070907090709070907
-090709070907090709070807080708070807080708070807070707070707070707000700
-0C120C00040405060A080D09030505080904050405080808080808080808080505090909
-070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808
-060808040808030407030B0808080805070508070B0707070805080A08080908090A0908
-08080808080608080808030303030808080808080808080808070808080708070C0C0C08
-08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08
-0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903
-0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508
-07090609060808040808080809090908080808070307040706090809080A080805080508
-07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404
-070408080906090608080808080809080908090809080908050305030503050305040807
-070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08
-050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905
-08080A09080A0908080707080B0A05070806080308070706080803080708070608080608
-070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09
-0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806
-07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707
-07070707000000000A080908000000000808080808080808080808080808080808080808
-080808080808080808080808080808080808080808080808080808080808080808080805
-030503000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08
-0A080A080A0809080908090809080908090809080707070707070707080008000D140D00
-050505050A080D09030606090905070506080808080808080808080606090909070D0908
-090908080909050608070B090A080A08090909090D0909090606060B0808080808080805
-0808030407030B0808080805070608080B0708070807080B09090908090A090808080808
-080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A
-0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603
-03090B080905080606080808050306140908090808050505050A0A0A0909090308080808
-08080808080807030907090707090809080808090B0707070D0D0D080908050907090809
-080808050908090809080908080808070307040706090809080A08080508050907090609
-060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908
-090809080808080808080908090809080908090805030503050305030604080707070309
-0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D
-0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09
-080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03
-0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809
-09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07
-09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707
-000000000A08090900000000080808080808080808080808080808090809080908090809
-080908090809080908090809080908080808080808080808080808080808080503050300
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08
-0A0809080908090909090909090909090908090809080908080008000E150E0005050606
-0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908
-0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305
-08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808
-0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B
-0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08
-0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909
-090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905
-0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A
-090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07
-0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B
-090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09
-080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08
-0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B
-090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A
-0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C
-090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000
-0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A
-080A080A080A080A080A0809080908090809080908090809080908050305030000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09
-0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B
-0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507
-0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09
-0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303
-0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B
-0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07
-0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803
-0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09
-0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A
-09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909
-09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A
-060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A
-0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A
-0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B
-0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10
-0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908
-0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A
-000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A
-090A090A090A090909090909090909090909090909090905030503000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A
-0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A
-0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C
-0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06
-09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A
-0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09
-090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A
-060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09
-070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A
-0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D
-0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A
-0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A
-070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010
-10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B
-0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707
-12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B
-110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A
-0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000
-0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B
-0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B
-0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806
-080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C
-0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A
-0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A
-0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A
-09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A
-0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A
-0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09
-05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B
-080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B
-0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C
-0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B
-0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05
-0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C
-0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A
-0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905
-050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B
-0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B
-0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000D0A
-0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B
-0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B
-0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C
-120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09
-0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B
-0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F
-0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B
-0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F
-0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A
-080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B
-0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B
-080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D
-0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10
-0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08
-0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C
-0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B
-0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010
-0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B
-0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B
-0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B
-0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B
-0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C
-0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D
-090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10
-0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C
-0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C
-0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808
-080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A
-1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E
-0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C
-0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806
-0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C
-0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11
-060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B
-0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C
-120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C
-0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C
-0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C
-0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C
-0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C
-0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B
-0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09
-091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910
-0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D
-0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C
-1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E
-1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010
-0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D
-100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E
-090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16
-060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806
-09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C
-1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E
-0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A
-0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F
-0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D
-0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417
-0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E
-0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D
-0C0D0C080608060000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000100C100C100C100C100C100C100C
-110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00
-152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111
-0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D
-0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D
-0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D
-0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D
-150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06
-0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E
-0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E
-0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707
-0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C
-0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D
-0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008
-0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D
-0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210
-11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B
-0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B
-0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E
-0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08
-060806000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D
-120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600
-0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F
-0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08
-0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D
-0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511
-161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06
-0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E
-0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F
-0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E
-09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D
-0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610
-0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216
-1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310
-0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206
-0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F
-0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D
-0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C
-00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F
-0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D
-120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B
-130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D
-12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608
-0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E
-0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313
-0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E
-0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F
-0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08
-100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11
-0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C
-0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12
-0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E
-0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E
-0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13
-0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310
-121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414
-0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000
-130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10
-0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F
-110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11
-060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B
-110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F
-0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606
-06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11
-14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B
-0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06
-100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E
-1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10
-0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E
-0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11
-0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F
-1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10
-15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11
-100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919
-1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D
-140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210
-000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10
-0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210
-12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11
-160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714
-15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C
-0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110
-1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F
-0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111
-0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E
-0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511
-1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516
-11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511
-15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11
-0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B
-1B061111111214180F181419071213131113140B13131714121514101211111318160B11
-110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C
-1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213
-1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011
-0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000
-111111111111111111111111111111121012101210121012101210121012101210121012
-101210111011101110111011101110111011100B070B0700000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000015101510151015101510151015101610161016101610161014111411141214121412
-141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B
-0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714
-141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211
-1811110F120D1218141414121617151111111111110F1111111109090909121212121212
-1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12
-100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C
-14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212
-11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110
-091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12
-0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612
-161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215
-12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212
-12141619101A161A091414141214160D14141816131716111412121419180D12120F1209
-1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814
-12161414141016121C12161614151816171611141212181416151E1E171B14141E141112
-110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09
-090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212
-121212121212121212121214111411141114111411141114111411141114111411141112
-1112111211121112111211121112110D090D090000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000001712
-171217121712171217121712171217121712171217121512151216131613161316131613
-121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414
-141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716
-201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311
-140F141A1616161418191713131313131311131313130909090914131313131314141414
-141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A
-141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614
-140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A
-1A1111112020201419140D16111611161114140C16131613191519141314131209120912
-0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414
-11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814
-0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417
-14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C
-111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F
-141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616
-161218141F14181816181B181918131614141A1618172121191D161621171314130F1413
-1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D
-14131314120F20261411111111111111000000001A131815000000001414141414141414
-141414141414141613161316131613161316131613161316131613161316131413141314
-13141314131413141314130D090D09000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000191319131913
-19131913191319131A131A131A131A131A13171417141815181518151815181514131413
-1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515
-1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417
-0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B
-17171715191A181414141414141114141414090909091514141414141515151515121515
-1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815
-151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D
-0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212
-212121151A150D17111711171115150C1714171419151A151415141209120A120F191519
-151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14
-180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09
-0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14
-140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E
-091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914
-1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915
-2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515
-141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415
-131021271512121212121212000000001B14191600000000151515151515151515151515
-151515171417141714171417141714171417141714171417141714151415141514151415
-141514151415140D090D0900000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000001A141A141A141A141A14
-1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414
-15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811
-111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E
-181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17
-1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817
-25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919
-1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D
-1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518
-1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A
-101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528
-0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A
-110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916
-24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A
-17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613
-16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C
-1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18
-1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B
-1814141414141414000000001E161C180000000018181818181818181818181818181819
-161916191619161916191619161916191619161916191617161716171617161716171617
-161716100A100A0000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000001D161D161D161D161D161D161D16
-1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800
-2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222
-172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A
-161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19
-191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B
-1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B
-2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C
-1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D
-161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D
-161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F
-190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19
-19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119
-132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012
-1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B
-1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320
-2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16
-151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717
-17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D
-191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912
-0C120C000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000211921192119211921192119211922192219
-2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00
-10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20
-20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10
-1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C
-1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24
-2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C
-0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D
-1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820
-181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C
-12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C
-201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22
-1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D
-262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722
-1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C
-1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20
-1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B
-1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919
-00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F
-1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C
-251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417
-292036240D17172029121712172020202020202020202017172929291B3222222327201D
-27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11
-1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E
-1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929
-202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E
-1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020
-20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012
-221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025
-20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A
-201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027
-1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F
-1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E
-221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029
-20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922
-26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C
-20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000
-281E262100000000202020202020202020202020202020221E221E221E221E221E221E22
-1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520
-2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27
-0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719
-251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522
-212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F
-0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227
-2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219
-19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F
-251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520
-2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25
-1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220
-22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126
-17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222
-27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125
-2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26
-251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838
-2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E
-2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924
-000000002222222222222222222222222222222520252025202520252025202520252025
-2025202520252022202220222022202220222022202220170F170F000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924
-29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25
-2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B
-2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419
-1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523
-2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520
-202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425
-15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E
-1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25
-232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30
-24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24
-2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24
-172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A
-3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824
-241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A
-41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729
-3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325
-1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000
-252525252525252525252525252525282328232823282328232823282328232823282328
-23282325232523252325232523252325232523180F180F00000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26
-2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18
-1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F
-2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28
-372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929
-2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029
-251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66
-2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929
-28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825
-122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A
-21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A
-322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31
-2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B
-2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12
-2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E
-29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829
-28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312
-12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B
-2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A
-282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000003529
-35293529352935293529352936293629362936293629312A312A332C332C332C332C332C
-29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030
-3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733
-4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27
-3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F
-302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D
-303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F
-2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D
-3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A
-22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F
-2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F
-1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37
-2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841
-28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22
-2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333
-332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D
-3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545
-2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030
-30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F
-2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E
-3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C
-2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535
-35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339
-26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544
-39393A343E413D3232323232322B313131311818181835323232323235353535352D3535
-352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36
-36443939415951355326261616444431331E3526263434351E16267E3934393434222222
-224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D
-53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E
-3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833
-3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218
-22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433
-31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B
-1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831
-3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34
-51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535
-31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135
-2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535
-353535393239323932393239323932393239323932393239323932343134313431343134
-313431343134312218221800000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000041324132413241324132
-41324132433243324332433243323D353D353F373F373F373F373F373331333133313331
-340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A
-2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B
-3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A
-4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39
-5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F
-48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848
-434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A
-4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840
-2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363
-1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718
-2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37
-5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41
-3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E
-383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545
-40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B
-383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C
-3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F
-373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A
-373A37271827180000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000004838483848384838483848384838
-4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00
-649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252
-37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E
-343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C
-3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240
-4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240
-642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B
-40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44
-34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44
-343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323
-3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B
-3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D
-2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A
-4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F
-3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B
-4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35
-323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636
-3636363600000000513D4C4200000000404040404040404040404040404040443C443C44
-3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A
-1B2A1B000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D
-513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100
-000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111
-2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007
-0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED
-332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1
-0304061400030007002640150206060307010F09400902032C0040000100042C072FED33
-5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD
-BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17
-7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E
-0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5
-131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F
-ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0
-C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135
-2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE
-CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178
-8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16
-70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A
-08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18
-312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031
-201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932
-2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130
-5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117
-15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362
-2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101
-7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D
-C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807
-05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908
-260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203
-031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616
-282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33
-2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633
-321625012309011406232226353436333216013426232206151416333236013426232206
-1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59
-64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC
-DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018
-004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576
-087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008
-300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D
-1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D
-3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673
-4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B
-2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633
-323601151406070123270E01232224353436373E01372E01353436373E01333216151406
-070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32
-3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102
-0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71
-F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4
-03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301
-822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803
-28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830
-000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01
-070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01
-2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D
-060306131503151326012603261326154701400340134715500350136003601379007602
-700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F
-3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49
-4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001
-00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554
-0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450
-0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B
-060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217
-392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606
-8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167
-FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D
-01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4
-FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0
-0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500
-590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09
-012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02
-01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270
-0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00
-3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116
-01250138004900440156016701770186010A011202032F02010200010000022F332F003F
-2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F
-05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15
-4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130
-5D011002212002111012212012013E01353426272E01232206070E01151416171E013332
-36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C
-02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52
-4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502
-1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED
-3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098
-03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116
-03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B
-0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F
-100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202
-101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01
-373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0
-8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223
-3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F
-290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C
-780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D
-020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10
-E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514
-06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01
-2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6
-6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C
-02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1
-233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D
-240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F
-0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39
-395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311
-3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001
-00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08
-7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F
-1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F
-ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01
-353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC
-6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3
-344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED
-0022003700644044060D160D3925333133374925423143375F01560D5020502165217531
-0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F
-2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114
-002322262726023534123736243332161715232E01232200073E01333216171E01073426
-272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50
-290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601
-E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014
-282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801
-4B0258027903070301000120020203000002034A050302080F081F087B02030300020204
-0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123
-012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028
-0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B
-592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616
-0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39
-0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F
-ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334
-26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1
-908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F
-92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912
-3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045
-0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914
-294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED
-5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627
-35331E01333212370E01232226272E01353400333216171612073426272E012322061514
-16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859
-012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C
-BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28
-15290002015A00000249045D00030007001E4010015602050656050807002D0600010101
-2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002
-00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806
-5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F
-5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03
-40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306
-540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840
-080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887
-10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75
-FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940
-09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001
-213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006
-006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01
-2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939
-5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB
-7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069
-40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870
-090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000
-172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406
-070E01071523113E01373E013534262322060723353E013332160123353303ED46393892
-52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D
-346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04
-0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05
-2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766
-3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A
-510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37
-0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00
-3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01
-23222635341233321617353311333E013534022726242322040706021514121716043332
-3637150E0123222427260235341237362433320417161201112E01232206151416333236
-074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63
-010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B
-438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A
-A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6
-A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287
-01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06
-03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C
-010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F
-39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121
-130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8
-0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07
-1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D
-10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216
-171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132
-36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E
-2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08
-1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546
-05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28
-600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C
-3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E
-012322242726023534123736243332161715232E01232206070E01151416171E01333236
-373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543
-46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D
-E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408
-03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00
-3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637
-3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE
-B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B
-003B402309350006100602060601053502030A350108040008010800730D0F0D01060914
-016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111
-21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009
-0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6
-FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79
-C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06
-130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734
-0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED
-3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021
-32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770
-01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101
-23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B
-05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D
-03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133
-11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B
-002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4
-3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804
-A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403
-09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623
-22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5
-02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075
-190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901
-3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302
-0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D
-400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87
-10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE
-FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005
-002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901
-113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138
-023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903
-050A020309000410043404440454046A04060404070B0903010708090A0B030502140078
-0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931
-30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001
-130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07
-34074507510761077107077606010F0102061F0115063406440653066B0160067F017006
-0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304
-6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121
-0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017
-002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13
-53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824
-10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412
-373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58
-01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9
-B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010
-001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309
-080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D
-10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107
-3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E
-C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002
-0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D
-59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979
-150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303
-2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31
-305D015D010E01232226270E01232224272602353412373624333216171612151002071E
-01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160
-5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D
-BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201
-3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01
-3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010
-071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019
-031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710
-7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637
-3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD
-B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030
-009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510
-4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D
-86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A
-111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F
-ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127
-2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85
-0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801
-A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28
-152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B
-0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC
-04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03
-4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10
-F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E
-01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A
-4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066
-470148020205040507065706860603061400000105070457048604030414030203080144
-014B02580273017C02060005027503010303020845004A0302020103040024003A005A00
-6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10
-F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309
-01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C
-00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329
-08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A
-0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001
-000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00
-75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187
-10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01
-390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1
-000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557
-09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201
-020514060607050407010A0B0602080302080F0D01060216022602360247020509081908
-290839084808050208070A04010406020D00160026003600470050000600660D08090619
-062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931
-30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5
-FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006
-000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619
-08270628085606590865066A08080814000100061405040502000D050200010004000703
-040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4
-ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104
-E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1
-000900594036030708060813082608360846085608660876080808B30202030707033506
-03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939
-2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603
-91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201
-0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208
-FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A
-0138014B01590168017801890109011200032F000100030100006002700202022F5D332F
-003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614
-0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521
-1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034
-3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F
-036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309
-0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003
-0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154
-051602FA068C000300244016480159026902790204500360037003030303010000022F33
-2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026
-0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A
-0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A
-001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED
-3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437
-353426272E012322060723353E01333216171E011503110E01070E01151416333236041D
-BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944
-5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C
-FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F
-3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08
-141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939
-31305D011406070E012322262707231133113E0133321203342623220607111E01333236
-04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F
-2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057
-40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155
-0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6
-3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123
-2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5
-A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002
-006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912
-0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10
-F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711
-3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E
-B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A
-FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D
-6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103
-1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E
-013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672
-E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D
-011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505
-030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037
-0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123
-22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6
-BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030
-006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05
-702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232
-1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939
-3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332
-1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55
-9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29
-276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000
-045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860
-1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123
-22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87
-262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144
-02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D
-003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59
-021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D
-4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F
-FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335
-210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28
-2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F
-011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A
-0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD
-325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0
-015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC
-1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101
-01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B
-006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110
-1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010
-801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D
-2123113426272E01232206071E01151123113426272E012322060711231133153E013332
-16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372
-9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49
-5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213
-040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED
-123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B
-4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471
-047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C
-1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110
-002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118
-C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002
-00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C
-0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD
-32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01
-33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F
-51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A
-D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20
-701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110
-F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133
-321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0
-BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2
-C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F
-05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931
-305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931
-2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602
-091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F
-6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201
-2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505
-07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01
-14062322262735331E0133323635342726272E01272E01353436373E013332161715232E
-0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B
-393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222
-221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA
-02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02
-0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F
-3333FD322F31305D250E012322263511233533113311211521111416171E013332363733
-02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E
-FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515
-09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED
-3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69
-B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000
-047F045D000600864041260429063604390646044906062905390540055105600505061A
-000100041A03020328002703380037034A00470375017A02080005027503010305020802
-010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403
-820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901
-2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636
-045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701
-58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00
-0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E
-3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901
-23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303
-5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403
-14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407
-4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230
-084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809
-06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600
-01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117
-395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309
-0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A
-01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307
-0519031705460149035800570179030902071A000100051A040304490046040200030204
-05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F
-0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931
-30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04
-5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03
-45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B
-1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F
-3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800
-000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C
-09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105
-2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426
-2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6
-AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B
-BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00
-1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467
-0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C
-010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F
-5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436
-37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B
-887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00
-000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418
-4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16
-1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322
-26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466
-5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD
-4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A
-40130320113011401170118011050200110E060725012B355D350003001A0000055E0801
-0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646
-125906561278027703082020211F02870101011400120020210387040104140505067B06
-74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813
-114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200
-5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D
-10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D
-C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334
-26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672
-7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1
-02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B
-342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D
-313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371
-2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F
-5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514
-062322262735331E01333236353426270E01232224272602353412373624333216171523
-2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A
-5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346
-BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2
-B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236
-002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8
-023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7
-075002360032FD000117008E009601750018401103002930295029702904020029240F03
-25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210
-24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000
-0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000
-01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000
-011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000
-0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35
-5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B
-3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501
-2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B
-01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08
-0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B
-20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D
-015D250E01071E011514062322262735331E01333236353426270E01232226272E013510
-003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09
-1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A
-460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7
-D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022
-21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021
-20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024
-20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330
-2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D
-FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117
-0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D
-40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108
-880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133
-023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003
-0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100
-0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001
-2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9
-0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A
-FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A
-FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A
-FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A
-FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501
-2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025
-012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225
-012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625
-012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625
-012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60
-1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104
-0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED
-173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE
-6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B
-0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00
-3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9
-A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F
-FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901
-7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18
-471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED
-2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600
-353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB
-010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16
-0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021
-00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08
-1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605
-190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239
-ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206
-1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62
-0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468
-05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132
-63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C
-10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D
-181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217
-39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406
-07151E01151406070E012322262735331E01333236353426272E01272627263534363735
-2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627
-2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7
-5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B
-845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237
-072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334
-323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A
-563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688
-0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A
-DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106
-0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F
-5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506
-BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913
-39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B
-303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED
-2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01
-333236373E0135342623353236353426272E01232206070E01151123113436373E013332
-1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C
-28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123
-421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0
-000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314
-282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19
-2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD
-06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F
-ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001
-5D005D011000212000111000212000031000212000111000212000072301231123112132
-16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01
-66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71
-63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC
-FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719
-3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C
-0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064
-146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F
-521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F
-5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021
-2000031000212000111000212000050E012322243534003332161715232E012322061514
-1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701
-36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE
-0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230
-1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379
-0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800
-000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D
-0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3
-FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516
-03C3068C000300244016470156006600760004500360037003030303010000022F332F00
-2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003
-000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F
-5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597
-04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303
-0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08
-030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00
-2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121
-0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999
-6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1
-000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414
-05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35
-0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F
-5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101
-112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68
-B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D
-0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B
-090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70
-1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04
-0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F
-ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433
-3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA
-63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240
-453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601
-216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52
-E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34
-441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821
-AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6
-ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123
-2202353412333216173E01333212052E01232206151416333236373E0125342623220607
-0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A
-9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE
-010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3
-05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB
-0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F
-5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4
-021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403
-020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303
-00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F
-2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482
-FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006
-000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837
-051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F
-5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901
-350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000
-0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10
-0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305
-0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08
-BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B
-5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C
-015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020
-080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C
-5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332
-363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752
-433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B
-410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19
-19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED
-3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623
-22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0
-F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B
-0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91
-99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601
-08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302
-03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A
-0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239
-012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001
-8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288
-FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307
-050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F
-5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD
-B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500
-093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31
-300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001
-008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A
-10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226
-2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C
-228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B
-0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E
-6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B
-2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335
-0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E
-01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D
-B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A
-300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031
-40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33
-ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332
-3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC
-AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403
-300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825
-1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C
-FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135
-26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4
-A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C
-580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9
-40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D
-6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143
-124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304
-00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939
-10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32
-31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637
-362437353426272E012322060723353E01333216173E0133321215272E01272E01232206>
-<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15
-5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525
-20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C
-242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C
-FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008
-0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825
-04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D
-1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117
-3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123
-22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674
-6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D
-E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2
-03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C
-05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303
-101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED
-331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01
-151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04
-FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203
-05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4
-FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001
-00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100
-00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001
-0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829
-08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31
-308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902
-DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C
-270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D
-020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D
-FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001
-5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337
-3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E
-2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E
-1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606
-050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23
-541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED
-3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322
-26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E
-01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C
-59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437
-607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E
-05D100030006004F403148024703025A056A050205041A000003061A010102390236036B
-0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739
-5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105
-D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037
-0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100
-000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B
-2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE
-8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476
-0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040
-1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33
-2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104
-82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01
-110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800
-2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335
-3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117
-004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000
-011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032
-0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016
-002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834
-10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F
-FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121
-152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E
-FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68
-B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C
-2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314
-5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B
-0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538
-10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130
-015D01211416171E013332363733150E01232226270E01232200111000333216173E0133
-321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62
-BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792
-92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B
-A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05
-02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC
-00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002
-FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910
-3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202
-04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE
-F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF
-E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701
-000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B
-2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001
-FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701
-00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F
-000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100
-010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506
-14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407
-0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD
-3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB
-1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B
-4804470658045706680467067F047006087F057007020705000301000330036003900304
-03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A
-19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02
-C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016
-400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C
-00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D
-35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F
-332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC
-003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00
-4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204
-00121203151827190119191D341502002833010133332F34030A272001022320292C0400
-0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED
-12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D
-331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323
-37332E013534363723373312003332161715232E01232204072107210E01151416172107
-211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050
-C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476
-152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC
-02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001
-2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4
-5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0
-400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135
-0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003
-001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14
-0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139
-10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335
-333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C
-6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000
-0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A
-000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F
-3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436
-33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41
-03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A
-0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201
-0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17
-3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D
-01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05
-000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130
-0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037
-0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B
-09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF
-E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701
-0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B
-2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007
-0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C
-073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E
-17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20
-19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016
-01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12
-3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D
-ED5D3130015D011406232226353436333216250123090114062322263534363332160134
-262322061514163332360134262322061514163332362514062322263534363332160734
-262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6
-BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658
-586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787
-FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801
-023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D
-0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000
-055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8
-0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
-FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B
-3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925
-012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04
-0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200
-104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C
-000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236
-003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801
-023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA
-08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1
-052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2
-FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF
-00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500
-000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D
-FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905
-5606690566067A0573060601020350056005700503050560030103500060007000030000
-042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101
-00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952
-0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33
-2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F
-365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724
-29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED
-31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C
-7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00
-03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E
-ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B
-0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00
-2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51
-090009300902313009015009600970090309091551030C29200030000200003000600003
-D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635
-343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875
-065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02
-1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623
-22262735331E0133323635342627331E010370B79225742D091A58326862060399020659
-A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402
-00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204
-0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE
-8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04
-1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123
-222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE
-790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902
-64016B0274017B020606050250036003700303030360020102500060007000030000032F
-332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501
-7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804
-090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11
-332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC
-52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614
-000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A
-050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735
-37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502
-0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5
-03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000
-050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D
-000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A
-FE780228061400030007002940160F094F090201060106050201050B00041F014F050105
-2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8
-64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B
-0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C
-2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01
-23211123353311213204171612073426272E012B011121152111333236373E0105BCB193
-66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE
-B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1
-0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B
-542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E
-030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F
-1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110
-00232200353400333216172E01270527372E012735211E01173717071612013E01353426
-272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D
-0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201
-08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE
-2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025
-012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025
-012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400
-0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F
-233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED
-3130015D011406070E012B011123113311333216171E01073426272E012B011133323637
-3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939
-4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013
-0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01
-1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED
-3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607
-111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C
-88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0
-02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130
-0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7
-0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709
-01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401
-B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01
-0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121
-35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C
-102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10
-651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F
-ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01
-333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42
-022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0
-002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37
-2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A
-2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F
-1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B
-01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A
-0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C
-B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5
-0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02
-010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200
-003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B
-2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600
-002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131
-003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535
-0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510
-0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD
-32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521
-1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF
-8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C
-FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089
-000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001
-0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436
-24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544
-6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40
-0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937
-3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F
-2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115
-14062322262735331E01333236353426270E012322242735331604333236353426272E01
-272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3
-9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3
-9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C
-4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E
-28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B
-3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779
-3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09
-0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F
-4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D
-1112173931305D2B011406071E011514062322262735331E01333236353426270E012322
-262735331E0133323635342726272E01272E01353436373E013332161715232E01232206
-15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46
-0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347
-4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918
-0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801
-0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3
-068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546
-0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7
-03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1
-04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908
-70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A
-01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED
-1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135
-213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE
-95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86
-9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502
-2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003
-0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B
-FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B
-3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B
-35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A
-0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E
-570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01
-0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F
-20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F
-003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D
-005D010E012322263534363703210323012101230E0115141633323637330902062B344B
-2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D
-90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478
-003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25
-703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420
-3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49
-03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112
-392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534
-3637362437353426272E012322060723353E01333216171E011511230E01151416333236
-373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601
-1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474
-7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F
-24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2
-0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1
-062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E
-34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209
-0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F
-ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01
-33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5
-6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025
-2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F
-04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516
-090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32
-5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534
-3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7
-03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7
-B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E
-34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33
-3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301
-1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F
-31305D01211416171E013332363733150E01070E011514163332363733150E0123222635
-343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102
-03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030
-5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2
-B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325
-012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025
-012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702
-0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270
-030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35
-005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102
-030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6
-32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52
-C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D
-010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204
-1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133
-0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E
-07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133
-2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9
-05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807
-2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311
-33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000
-0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051
-00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031
-0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236
-00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236
-00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471
-068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000
-059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9
-00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF
-00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500
-FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B
-3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25
-012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225
-012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01
-18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4
-5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332
-3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521
-FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046
-0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F
-18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6
-5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130
-5D250E01071E011514062322262735331E01333236353426272322263511233533113311
-211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB
-B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10
-B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000
-011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F
-0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E
-0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800
-4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD
-322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637
-331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8
-CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236
-00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00
-210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310
-21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35
-3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1
-023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529
-0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1
-FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF
-007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500
-FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B
-3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625
-012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625
-012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06
-10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073
-FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705
-53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726
-27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F
-003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624
-33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C
-5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566
-6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069
-FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532
-65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11
-12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01
-071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E
-0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F
-4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A
-524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01
-363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C
-38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205
-0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939
-3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633
-32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111
-8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086
-4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21
-1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111
-001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4
-113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637
-3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE
-F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0
-FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3
-0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418
-79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37
-2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D
-11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226
-272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01
-3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41
-40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D
-40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6
-0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15
-451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F
-1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000
-232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01
-1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609
-A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000
-4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
-2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002
-0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717
-0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A
-05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D
-ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127
-2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD
-51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145
-4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59
-051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED
-12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000
-03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005
-10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C
-3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B
-2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311
-3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254
-9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D
-00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037
-3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E
-34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A
-4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33
-7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F
-1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED
-332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127
-2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133
-32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA
-E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486
-B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E
-1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2
-45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D
-75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005
-B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023
-60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065
-B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213
-040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6
-ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E
-012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63
-B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5
-0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1
-022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366
-041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020
-0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F
-5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6
-88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D
-481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F
-29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10
-371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840
-1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D
-335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B
-2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123
-220615141633323637330901230901140623222635343633321607342623220615141633
-3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE
-B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302
-68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B
-006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612
-120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8
-FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B
-2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135
-3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D
-0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B
-A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101
-05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113
-1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017
-400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101
-CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230
-0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703
-8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606
-00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6
-0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017
-0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C
-CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00
-0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514
-06232226353436172206151416333236353426016B689393686893926949666748486766
-03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000
-011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000
-011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117
-00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116
-00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236
-00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236
-00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000
-049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6
-046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D
-0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460
-068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8
-0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A
-FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3
-05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59
-0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500
-FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35
-FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A
-23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E
-4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235
-40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27
-040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33
-2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510
-002132041715232E01272E012322001110002132363711213521110E01071E0115140623
-22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA
-FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061
-0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516
-A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D
-10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020
-112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033
-603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10
-E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31
-305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133
-321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460
-7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE
-E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6
-BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A
-B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A
-4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1
-001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304
-070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED
-1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121
-11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19
-0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030
-031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020
-02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F
-ED393931305D2123113426272E0123220607112311233533353315211521113E01333216
-15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE
-04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B
-10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201
-0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4
-332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335
-2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3
-C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898
-FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054
-40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704
-10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F
-ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617
-1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF
-81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32
-0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A
-140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31
-302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198
-98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202
-00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130
-01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B
-00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329
-12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F
-2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406
-232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898
-FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003
-0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01
-0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533
-1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998
-045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717
-13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210
-E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315
-230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141
-1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F
-024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104
-04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4
-FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534
-3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141
-13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801
-0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35
-0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A
-1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4
-5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627
-35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816
-160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00
-FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF
-00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05
-0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D
-021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802
-050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D
-11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D
-7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102
-2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507
-01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C
-ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426
-02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0
-0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104
-01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F
-2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149
-8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300
-FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016
-0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100
-2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107
-7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776
-06010F0102061F01150626013601340646014406560153066006790170060E0406015A01
-550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802
-0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172
-715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901
-330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00
-000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E
-1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD
-322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114
-062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26
-0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805
-0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F
-03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025
-2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325
-2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35
-FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001
-001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05
-1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11
-332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627
-231133153E013332161715232E012322060711331E011514062322262735333C4E285E52
-0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5
-5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000
-011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000
-011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F
-004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204
-5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111
-21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE
-528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B
-3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C
-0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00
-3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311
-331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C
-012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28
-251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D
-1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625
-2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25
-2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35
-FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35
-FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001
-00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33
-20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36
-1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31
-302B5D053436372206232226272E01351133111416171E01333236373E01351133111406
-070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C
-976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9
-037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00
-000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205
-0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B
-1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437
-350E01232226351133111416171E0133323637113311230E011514163332363733150E01
-23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C
-A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24
-FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35
-FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35
-FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35
-FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001
-00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6
-5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679
-67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E
-00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646
-125906561278027703082020211F02370187010201140012002021033704870402041405
-05060606091226062912370638124606491258127A0675120B24240C702501251651A00C
-F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF
-C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F
-0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C
-0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507
-05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12
-17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00
-5D212303210323012E013534363332161514060727342623220615141633323613090207
-2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D
-F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD
-CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E
-37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F
-4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A
-01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600
-0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD
-32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B
-5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736
-2437353426272E01232206070E010723353E01372E01353436333216151406071E011503
-110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A
-5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56
-E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D
-4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761
-5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000
-0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F
-068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA
-08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D
-3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E
-2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D
-ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117
-004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117
-004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117
-008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117
-008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117
-008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D
-355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0
-40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236
-003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF
-003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B
-090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100
-B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B
-010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000
-05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028
-00934063411253125B1A6312730273129024B603B6240923200551000810082008030808
-1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C
-1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12
-17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED
-393931305D2901353E0137233533352335333534123332161715232E012322061D012115
-21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93
-016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00
-000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37
-07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C
-1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B
-31305D01211416171E013332363733150E0123200011100021320011272E01272E012322
-06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A
-9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100
-FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C
-040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600
-003700BB02910000011702410413FDC600384026040302360A0403023900392039403980
-39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35
-3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038
-4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F
-094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600
-003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103
-01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535
-00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01
-010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD
-D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A
-0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E
-010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001
-0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303
-0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF
-090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D
-33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31
-803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024
-00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000
-059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F
-0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000
-0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F
-5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018
-010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF
-0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227
-1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037
-003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04
-4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117
-019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70
-2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D
-0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F
-370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33
-2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177
-BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E
-05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003
-00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02
-4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239
-012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127
-FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508
-05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216
-002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E
-0902390258020378017703020203020114000600020314040405490546067C0573060405
-030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504
-65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123
-09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030
-0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047
-40130535060609013502030A350908054009133704B8FFC0401609133704050504030204
-0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001
-213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0
-FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603
-010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311
-2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000
-000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B
-A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B
-0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325
-293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403
-0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209
-D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B
-71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135
-090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE
-061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000
-FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E
-021B067518011834380948096F090309192209030810030822142311141023071B180714
-108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910
-C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135
-1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34
-359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D
-2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A
-641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014
-041925140204160B341F02261835011608251202191214081502141C272222290F29010F
-291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED
-1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526
-023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D
-CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A
-0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E
-FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006
-000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05
-01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A
-B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E
-014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116
-019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D
-FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116
-019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037
-0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10
-371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00
-90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239
-2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715
-1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE
-F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120
-1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016
-A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507
-01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505
-15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D
-1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133
-0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6
-0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C
-07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133
-2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426
-2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A
-201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647
-664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828
-264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E
-05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12
-3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D
-A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1
-04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B
-2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25
-181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED
-12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612
-072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A
-252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70
-28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5
-8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8
-045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6
-18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040
-10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736
-178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37
-00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F
-FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D
-71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180
-487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100
-0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8
-FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040
-260910370C001C004B005A006A00790006008D090F090103041304440455046504760406
-04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0
-08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9
-FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C
-0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F
-3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E
-4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000
-047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E
-24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C
-030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0
-400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F
-1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01
-353436373E0137352E01353436373523352115212206070E01151416171E013B01152122
-06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89
-4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467
-211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22
-2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216
-00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315
-3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10
-F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623
-220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0
-0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64
-03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037
-3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B
-12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01
-3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA
-5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057
-AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2
-045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901
-091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133
-3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F
-5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408
-4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606
-0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10
-3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001
-8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906
-010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01
-53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047
-1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010
-7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D
-5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406
-070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360
-4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806
-343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611
-045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28
-0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A
-291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4
-2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627
-2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E
-01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A
-5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462
-5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937
-7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB
-023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500
-FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF
-00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071
-FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8
-0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
-0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F
-073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D
-1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED
-31305D011406070E012B0135333236373E01353426272E01232111231121352115211121
-3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398
-BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF
-00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804
-0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C
-0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13
-000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D
-33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736
-243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE
-EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010
-4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF
-0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000
-02E207500236002C00000117008EFF240175001940130200104010501060107010050100
-100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1
-000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503
-28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501
-3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D
-013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01
-2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01
-0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24
-401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238
-052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00
-000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120
-1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6
-FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123
-2111213236373E01371406070E0123211121112311331121113311213216171E0107B432
-35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901
-C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001
-FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01
-07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F
-5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E
-01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079
-646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575
-07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002
-0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716
-191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E
-1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF
-E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F
-5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001
-8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901
-030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F
-1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902
-09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B
-0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D
-10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6
-FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000
-052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100
-71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D
-011406070E0123211121152111213216171E01073426272E01232111213236373E01052C
-554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C
-B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1
-021600250000000100C80000048A05D10005001F401003013504030000070F0701021403
-6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002
-000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013
-0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12
-392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705
-9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE
-9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E
-093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116
-09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33
-35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733
-350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112
-392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD
-2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01
-2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01
-0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C
-912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B
-18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051
-FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040
-3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409
-0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217
-392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607
-0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322
-06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63
-F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52
-A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818
-151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023
-0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8
-FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207
-14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133
-0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093
-40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D
-0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308
-030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18
-10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331
-305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB
-D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100
-000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500
-6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02
-1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504
-4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6
-5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A
-FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607
-0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B
-5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD
-051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F
-01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311
-210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6
-030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6
-FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216
-00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000
-000100C80000053B05D100070027401703350603010501140078090F0940095009030414
-056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA
-DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000
-FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801
-461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700
-03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40
-0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710
-FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F
-010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186
-05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1
-001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E
-150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17
-3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01
-272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107
-0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A
-8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC
-4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170
-B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C
-0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED
-392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1
-FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502
-0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33
-12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304
-EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930
-2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814
-05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333
-31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500
-000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814
-05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD
-32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC
-05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B
-1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123
-0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321
-11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01
-0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25
-2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055
-4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040
-150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D
-002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321
-113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD
-EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8
-23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416
-560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B
-ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111
-3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298
-C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061
-FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718
-34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C
-1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F
-3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E
-01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051
-F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF
-676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0
-000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C
-03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F
-6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023
-2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01
-03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC
-FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000
-04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305
-0506060F113440030103030012340F03000519150904060309045F050105120114007821
-0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD
-C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133
-04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0
-026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216
-0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039
-6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A
-223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F
-ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01
-37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE
-4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F
-B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959
-11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9
-00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37
-12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F
-35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931
-302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332
-36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E
-4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A
-045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F
-19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806
-10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009
-FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E
-1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11
-332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111
-3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101
-F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632
-045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF
-E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910
-37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E
-0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07
-0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417
-39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD
-3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711
-33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F
-1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02
-01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159
-631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D
-10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F
-06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B
-5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01
-1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534
-26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D
-49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342
-546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11
-110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02
-0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B
-0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311
-01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017
-0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102
-04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960
-190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33
-2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA
-FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6
-94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635
-1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713
-3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700
-001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239
-2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E
-01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924
-2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021
-003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303
-1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107
-0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307
-201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D
-1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503
-4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02
-030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20
-0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D
-012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2
-023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105
-0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED
-31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF
-006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005
-011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311
-210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A
-FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849
-014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00
-0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E
-013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951
-0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627
-D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000
-4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
-2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF
-003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622
-011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B
-0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E
-0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B
-33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332
-16171133113E0133321203342623220607111E0133323605112E01232206151416333236
-064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F
-2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D
-DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00
-FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B
-08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188
-0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304
-2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025
-0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902
-092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416
-171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE
-CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809
-1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED
-10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC
-045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108
-0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104
-5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121
-1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002
-000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16
-0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F
-FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E
-0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55
-FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33
-2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617
-05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025
-402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F
-3130013426272E012B0111333236373E01371406070E012321113311333216171E011333
-1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157
-334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000
-0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013
-090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F
-5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01
-037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A
-FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532
-0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313
-061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13
-03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F
-ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521
-2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314
-BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44
-000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03
-3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F
-10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206
-15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC
-D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD
-FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D
-0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603
-09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D
-ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637
-3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01
-AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C
-37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560
-250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28
-59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F
-2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6
-ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322
-0607112311233533353315211521113E01333216171416151406070602070E01232A0127
-35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303
-020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86
-FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682
-0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021
-006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037
-193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340
-090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B
-2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236
-3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E
-0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478
-021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077
-0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900
-30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409
-3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530
-35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED
-31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E
-01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B
-64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A
-183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A
-03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000
-06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8
-FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810
-F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E
-012B0111333236373E01371406070E0123211121112311331121113311333216171E0106
-3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157
-334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001
-00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201
-010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6
-ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123
-3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC
-63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682
-0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D
-FE64047F06150007001500BD404C04063406440650066006700606090307051903170546
-0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B
-0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102
-03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465
-0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933
-2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627
-331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D
-FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027
-0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A
-05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111
-330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B
-B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F
-3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9
-000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F
-0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC
-0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501
-2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015
-0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09
-0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF
-C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006
-0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED
-1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121
-0111330114062322263534363332160734262322061514163332360121152104FFF5FD72
-B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05
-D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D
-000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F
-333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F
-05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F
-ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F
-05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636
-166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130
-2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B
-86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3
-1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455
-0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF
-16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F
-121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607
-0E012322262735331E013332363534262B01353332363534262322060723353E01333216
-15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140
-964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62
-57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C
-05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F
-ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F
-0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D
-1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000
-092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322
-262735331E01333236373E01353426272E012322060711211521153E01333216171E0103
-75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634
-373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F
-000100F3023503A505DA000600414025560101030100012A020203630073000200000351
-0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D
-8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5
-021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B
-0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316
-04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01
-140623222635343637352E0135343633321615140607151E01033426232206151416171E
-01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261
-5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429
-64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D
-304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045
-0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22
-1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED
-5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207
-0E01232224272602353412373624333216171E01173E013534262735331E011514060110
-0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819
-144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863
-630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE
-DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A
-21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F
-2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31
-302B011000232200111000333216173332363534262735331E01151406071E0107342623
-22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA
-9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D
-D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03
-0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D
-050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322
-26272E01351133111416171E01333236373E0135113332363534262735331E0115140623
-052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2
-F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384
-000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509
-051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27
-050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123
-350E01232226351133111416171E0133323637113332363534262735331E011514062B01
-0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD
-8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042
-4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437
-09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523
-353E013534262322060723353E01333216034242426E2F3026211F251803134926516605
-F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144
-8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C
-001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A
-004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560
-0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217
-392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF
-00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510
-0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E
-103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303
-3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752
-0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B
-0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910
-370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104
-2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31
-30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1
-9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15
-44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040
-200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0
-40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED
-002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627
-2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A
-192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788
-912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006
-0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D
-002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2
-A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D
-0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00
-8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533
-1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55
-010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300
-13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A
-0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B
-D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623
-22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21
-42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7
-03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37
-11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED
-D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416
-33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2
-A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC
-A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016
-00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005
-020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E
-5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603
-4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600
-00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701
-0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003
-0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33
-D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327
-07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5
-F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052
-6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010
-6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102
-11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D
-71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E
-9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D
-001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E
-6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00
-0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623
-222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730
-58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022
-02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003
-CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E
-0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E
-5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714
-06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D
-231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805
-4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F
-1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003
-E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B
-0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E
-5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635
-370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C
-6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828
-2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900
-06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A
-0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011
-143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B
-5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406
-071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026
-211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF
-001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068
-FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500
-FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40
-1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A
-BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024
-00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1
-04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35
-3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100
-0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D
-030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116
-025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1
-04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35
-3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B
-3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229
-38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116
-024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82
-041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025
-0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116
-02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116
-0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236
-00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236
-0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000
-055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1
-041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500
-FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535
-FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00
-252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00
-001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068
-FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B
-002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600
-000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A
-B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C
-401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460
-068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025
-2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901
-0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A
-B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016
-400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048
-00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028
-00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF
-FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF
-00C80000053608010236002800000116025C26000013400D0201101020100200100C0203
-252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024
-2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600
-000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900
-000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026
-01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500
-5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E
-031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117
-0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000
-01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82
-02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82
-018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82
-05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82
-0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA
-080102360032000001170256009601750022400B0250340102503470340234B8FFC04009
-090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A
-E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000
-0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535
-005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C
-501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117
-024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1
-0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1
-05DA08010236003200000117025C009600000015400F0302202850288028030028240F03
-252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C
-201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000
-01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A
-FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500
-1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117
-024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D
-3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300
-212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D
-007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C
-0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236
-024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D
-35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02
-002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012
-400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116
-024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7
-008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236
-02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF
-0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF
-006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2
-FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82
-0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529
-080102360038000001170256006201750012400B01502301010023220C00252B35005D35
-FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF
-00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D
-0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160
-28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000
-0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500
-5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760
-27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062
-01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249
-00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000
-011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000
-011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116
-024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B
-FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4
-0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D
-FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025
-2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125
-2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A
-4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018
-401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236
-005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6
-07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35
-FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003
-006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524
-4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B
-2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632
-ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123
-1123350E01232202113436373E0133321617352135213533153301112E01232206151416
-3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C
-B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279
-2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498
-0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102
-24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F
-5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332
-16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9
-1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619
-17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000
-0002000000000000FF4C00780000000000000000000000000000000000000000037D0000
-01020103010401050106010701080109010A010B010C010D010E010F0110011101120113
-011401150116011701180119011A011B011C011D011E011F012001210122012301240125
-0126012701280129012A012B012C012D012E012F01300131013201330134013501360137
-01380139013A013B013C013D013E013F0140014101420143014401450146014701480149
-014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B
-015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D
-016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F
-0180018101820183018401850186018701880189018A018B018C018D018E018F01900191
-01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3
-01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5
-01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7
-01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9
-01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB
-01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD
-01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F
-0210021102120213021402150216021702180219021A021B021C021D021E021F02200221
-02220223022402250226022702280229022A022B022C022D022E022F0230023102320233
-023402350236023702380239023A023B023C023D023E023F024002410242024302440245
-0246024702480249024A024B024C024D024E024F02500251025202530254025502560257
-02580259025A025B025C025D025E025F0260026102620263026402650266026702680269
-026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B
-027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D
-028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F
-02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1
-02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3
-02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5
-02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7
-02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9
-02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B
-030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D
-031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F
-0330033103320333033403350336033703380339033A033B033C033D033E033F03400341
-03420343034403450346034703480349034A034B034C034D034E034F0350035103520353
-035403550356035703580359035A035B035C035D035E035F036003610362036303640365
-0366036703680369036A036B036C036D036E036F03700371037203730374037503760377
-03780379037A037B037C037D037E037F0380038103820383038403850386038703880389
-038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B
-039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD
-03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF
-03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1
-03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3
-03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5
-03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407
-04080409040A040B040C040D040E040F0410041104120413041404150416041704180419
-041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B
-042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D
-043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F
-0450045104520453045404550456045704580459045A045B045C045D045E045F04600461
-04620463046404650466046704680469046A046B046C046D046E046F0470047104720473
-047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E
-6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572
-7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573
-696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04
-706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03
-6F6E650374776F05746872656504666F757204666976650373697805736576656E056569
-676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07
-67726561746572087175657374696F6E0261740141014201430144014501460147014801
-49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B
-627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61
-7363696963697263756D0A756E64657273636F7265056772617665016101620163016401
-650166016701680169016A016B016C016D016E016F017001710172017301740175017601
-7701780179017A0962726163656C656674036261720A627261636572696768740A617363
-696974696C646509416469657265736973054172696E670843636564696C6C6106456163
-757465064E74696C6465094F646965726573697309556469657265736973066161637574
-65066167726176650B6163697263756D666C657809616469657265736973066174696C64
-65056172696E670863636564696C6C6106656163757465066567726176650B6563697263
-756D666C65780965646965726573697306696163757465066967726176650B6963697263
-756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176
-650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574
-65067567726176650B7563697263756D666C657809756469657265736973066461676765
-72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65
-74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F
-707972696768740974726164656D61726B056163757465086469657265736973086E6F74
-657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C
-657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961
-6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C
-0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C
-6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E
-6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D
-656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C
-697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64
-61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768
-740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67
-650979646965726573697309596469657265736973086672616374696F6E044575726F0D
-6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964
-616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261
-73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66
-6C65780B4563697263756D666C6578064161637574650945646965726573697306456772
-617665064961637574650B4963697263756D666C65780949646965726573697306496772
-617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465
-0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66
-6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E
-6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06
-4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A
-6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574
-650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065
-72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861
-6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762
-72657665066762726576650449646F740853636564696C6C610873636564696C6C610643
-61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F
-76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65
-6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E
-656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375
-7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61
-63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375
-7465065261637574650672616375746506526361726F6E06726361726F6E065361637574
-65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463
-61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465
-065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461
-0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370
-68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72
-0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563
-6F6E64096166696936313234380961666969363132383906483232303733064831383534
-3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761
-6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404
-63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445
-646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F
-740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578
-0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465
-07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E
-656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B
-636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C
-6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E
-67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564
-696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65
-7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D
-6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B
-5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B
-7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163
-757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61
-7368616375746509616E6F74656C65696106576772617665067767726176650657616375
-746506776163757465095764696572657369730977646965726573697306596772617665
-067967726176650D71756F74657265766572736564097261646963616C65780961666969
-303839343109657374696D61746564096F6E656569676874680C74687265656569676874
-68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363
-656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374
-6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F
-7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F
-730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861
-04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61
-707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553
-69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164
-696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65
-7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C
-6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105
-746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69
-63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567
-610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372
-6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969
-313030323309616669693130303531096166696931303035320961666969313030353309
-616669693130303534096166696931303035350961666969313030353609616669693130
-303537096166696931303035380961666969313030353909616669693130303630096166
-696931303036310961666969313030363209616669693130313435096166696931303031
-370961666969313030313809616669693130303139096166696931303032300961666969
-313030323109616669693130303232096166696931303032340961666969313030323509
-616669693130303236096166696931303032370961666969313030323809616669693130
-303239096166696931303033300961666969313030333109616669693130303332096166
-696931303033330961666969313030333409616669693130303335096166696931303033
-360961666969313030333709616669693130303338096166696931303033390961666969
-313030343009616669693130303431096166696931303034320961666969313030343309
-616669693130303434096166696931303034350961666969313030343609616669693130
-303437096166696931303034380961666969313030343909616669693130303635096166
-696931303036360961666969313030363709616669693130303638096166696931303036
-390961666969313030373009616669693130303732096166696931303037330961666969
-313030373409616669693130303735096166696931303037360961666969313030373709
-616669693130303738096166696931303037390961666969313030383009616669693130
-303831096166696931303038320961666969313030383309616669693130303834096166
-696931303038350961666969313030383609616669693130303837096166696931303038
-380961666969313030383909616669693130303930096166696931303039310961666969
-313030393209616669693130303933096166696931303039340961666969313030393509
-616669693130303936096166696931303039370961666969313030373109616669693130
-303939096166696931303130300961666969313031303109616669693130313032096166
-696931303130330961666969313031303409616669693130313035096166696931303130
-360961666969313031303709616669693130313038096166696931303130390961666969
-313031313009616669693130313933096166696931303035300961666969313030393809
-616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C
-74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65
-7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65
-696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068
-35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568
-6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62
-096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835
-393108676C79706835393208676C79706835393308676C79706835393408676C79706835
-393508676C79706835393608676C79706835393708676C79706835393808676C79706835
-393908676C79706836303008676C79706836303108676C79706836303208676C79706836
-303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F
-6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061
-63697263756D666C65786163757465104163697263756D666C6578677261766510616369
-7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461
-63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465
-106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F
-77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162
-7265766561637574650B41627265766567726176650B61627265766567726176650F4162
-72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665
-74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272
-657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F
-6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972
-63756D666C65786163757465106563697263756D666C6578616375746510456369726375
-6D666C65786772617665106563697263756D666C65786772617665144563697263756D66
-6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563
-697263756D666C657874696C6465106563697263756D666C657874696C64651345636972
-63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A
-49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74
-62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79
-70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861
-74616671616D617473056869726971057473657265057365676F6C057061746168067161
-6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166
-0472616665057061736571077368696E646F740673696E646F7408736F66706173757104
-616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865
-740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65
-6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C
-70650270650A66696E616C747361646905747361646903716F660472657368047368696E
-0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265
-73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F
-740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564
-686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73
-68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410
-7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174
-7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461
-6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461
-676573680974657464616765736809796F646461676573680E66696E616C6B6166646167
-657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809
-6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368
-0870656461676573680B747361646964616765736809716F666461676573680A72657368
-6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07
-62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572
-6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674
-746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338
-380961666969353734303309616669693537343037096166696935373430390961666969
-353734343009616669693537343531096166696935373435320961666969353734353309
-616669693537343534096166696935373435350961666969353734353609616669693537
-343537096166696935373435380961666969353733393209616669693537333933096166
-696935373339340961666969353733393509616669693537333936096166696935373339
-370961666969353733393809616669693537333939096166696935373430300961666969
-353734303109616669693537333831096166696935373436310961666969363331363709
-616669693537343539096166696935373534330961666969353735333409616669693537
-343934096166696936323834330961666969363238343409616669693632383435096166
-696936343234300961666969363432343109616669693633393534096166696935373338
-320961666969363432343209616669693632383831096166696935373530340961666969
-353733363909616669693537333730096166696935373337310961666969353733373209
-616669693537333733096166696935373337340961666969353733373509616669693537
-333931096166696935373437310961666969353734363009616669693532323538096166
-696935373530360961666969363239353809616669693632393536096166696935323935
-370961666969353735303509616669693632383839096166696936323838370961666969
-363238383809616669693537353037096166696936323936310961666969363239353909
-616669693632393630096166696935373530380961666969363239363209616669693537
-353637096166696936323936340961666969353233303509616669693532333036096166
-696935373530390961666969363239363709616669693632393635096166696936323936
-360961666969353735353509616669693532333634096166696936333735330961666969
-363337353409616669693633373539096166696936333736330961666969363337393509
-616669693632383931096166696936333830380961666969363239333809616669693633
-383130096166696936323934320961666969363239343709616669693633383133096166
-696936333832330961666969363338323409616669693633383333096166696936333834
-340961666969363238383209616669693632383833096166696936323838340961666969
-363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A
-4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375
-7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665
-106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F
-7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874
-696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74
-62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465
-0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68
-6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C
-64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74
-62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665>
-<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568
-6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75
-686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D
-55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832
-08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61
-626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974
-696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009
-0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6
-FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039
-FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059
-FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0
-FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6
-FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039
-FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A
-FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5
-FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB
-FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2
-FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C
-FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E
-FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052
-FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010
-FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090
-FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052
-FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0
-FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A
-FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037
-FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064
-FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6
-FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D
-FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044
-FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB
-FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037
-FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C
-FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4
-FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059
-FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010
-FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026
-FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046
-FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058
-FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090
-FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0
-FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090
-FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E
-FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C
-FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1
-FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E
-FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058
-FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0
-FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032
-FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064
-FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1
-FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E
-FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A
-FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055
-FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0
-FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2
-FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044
-FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091
-FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2
-FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C
-FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037
-FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010
-FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060
-0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059
-FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1
-FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C
-FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059
-FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C
-FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0
-FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010
-FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F
-FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0
-FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F
-FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1
-FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A
-FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2
-FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047
-FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0
-FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010
-FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054
-FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF
-FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F
-FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB
-FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB
-FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036
-FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D
-FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D
-FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036
-FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D
-FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D
-FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011
-FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056
-FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F
-FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C
-006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039
-FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C
-FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3
-06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205
-05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E
-801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608
-2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0
-3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D
-010104050030819E311F301D060355040A1316566572695369676E205472757374204E65
-74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603
-55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520
-526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544
-2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030
-30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269
-5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967
-6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D
-70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249
-4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30
-819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D
-2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A
-B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881
-1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797
-6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100
-3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F
-5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09
-16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8
-C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43
-ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30
-1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603
-55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369
-676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355
-040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572
-695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331
-3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053
-74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054
-72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920
-41434345505445442C20286329393720566572695369676E2C20496E632E311730150603
-55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E
-657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD
-8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC
-F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B
-D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265
-E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181
-006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508
-2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1
-5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E
-A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210
-7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130
-0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C
-20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20
-536F667477617265205075626C697368657273204341301E170D39383034313630303030
-30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74
-65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603
-55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075
-626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63
-6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49
-41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61
-73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E
-207632310B3009060355040613025553311330110603550408130A57617368696E67746F
-6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73
-6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420
-436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030
-8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0
-D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9
-6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765
-DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C
-4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F
-7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2
-A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64
-E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B
-0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338
-CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355
-040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967
-6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182
-0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116
-0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A
-0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E
-636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469
-66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E
-642069747320757365206973207374726963746C790A7375626A65637420746F2C207468
-6520566572695369676E2043657274696669636174696F6E205072616374696365205374
-6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65
-20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470
-733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043
-50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C
-20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C
-204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967
-6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874
-732052657365727665642E204345525441494E0A57415252414E5449455320444953434C
-41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E
-473A2054484520555345204F462054484953204345525449464943415445204953205354
-524943544C59205355424A45435420544F205448450A564552495349474E204345525449
-4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953
-5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D
-504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544
-494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52
-204649544E45535320464F52204120504152544943554C415220505552504F53452C2041
-4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54
-49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D
-414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74
-656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76
-657269666965645375626A656374417474726962757465730A657874656E73696F6E2076
-616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375
-7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941
-2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73
-69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030
-80060B6086480186F845010701013080302806082B06010505070201161C68747470733A
-2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056
-3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320
-43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20
-286329393720566572695369676E0000000000003016060A2B06010401823702011B0408
-30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B
-25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F
-AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F
-228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728
-2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713
-08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133
-3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172
-65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06
-082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401
-8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630
-1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A
-2B06010401823702010C31443042A01A801800560065007200640061006E006100200046
-006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74
-727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F
-B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7
-CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5
-E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4
-836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF
-88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F
-86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA
-0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030
-8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06
-0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504
-0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E
-2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B
-132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953
-69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608
-2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01
-0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609
-2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648
-86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA
-BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D
-41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342
-DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000>
-] def
-/CharStrings 893 dict dup begin
-/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def
-/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def
-/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def
-/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def
-/period 17 def /slash 18 def /zero 19 def /one 20 def
-/two 21 def /three 22 def /four 23 def /five 24 def
-/six 25 def /seven 26 def /eight 27 def /nine 28 def
-/colon 29 def /semicolon 30 def /less 31 def /equal 32 def
-/greater 33 def /question 34 def /at 35 def /A 36 def
-/B 37 def /C 38 def /D 39 def /E 40 def
-/F 41 def /G 42 def /H 43 def /I 44 def
-/J 45 def /K 46 def /L 47 def /M 48 def
-/N 49 def /O 50 def /P 51 def /Q 52 def
-/R 53 def /S 54 def /T 55 def /U 56 def
-/V 57 def /W 58 def /X 59 def /Y 60 def
-/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def
-/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def
-/b 69 def /c 70 def /d 71 def /e 72 def
-/f 73 def /g 74 def /h 75 def /i 76 def
-/j 77 def /k 78 def /l 79 def /m 80 def
-/n 81 def /o 82 def /p 83 def /q 84 def
-/r 85 def /s 86 def /t 87 def /u 88 def
-/v 89 def /w 90 def /x 91 def /y 92 def
-/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def
-/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def
-/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def
-/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def
-/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def
-/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def
-/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def
-/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def
-/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def
-/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def
-/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def
-/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def
-/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def
-/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def
-/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def
-/summation 153 def /product 154 def /pi1 155 def /integral 156 def
-/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def
-/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def
-/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def
-/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def
-/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def
-/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def
-/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def
-/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def
-/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def
-/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def
-/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def
-/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def
-/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def
-/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def
-/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def
-/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def
-/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def
-/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def
-/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def
-/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def
-/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def
-/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def
-/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def
-/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def
-/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def
-/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def
-/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def
-/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def
-/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def
-/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def
-/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def
-/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def
-/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def
-/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def
-/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def
-/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def
-/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def
-/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def
-/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def
-/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def
-/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def
-/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def
-/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def
-/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def
-/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def
-/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def
-/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def
-/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def
-/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def
-/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def
-/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def
-/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def
-/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def
-/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def
-/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def
-/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def
-/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def
-/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def
-/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def
-/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def
-/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def
-/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def
-/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def
-/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def
-/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def
-/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def
-/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def
-/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def
-/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def
-/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def
-/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def
-/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def
-/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def
-/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def
-/zeta 453 def /eta 454 def /theta 455 def /iota 456 def
-/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def
-/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def
-/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def
-/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def
-/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def
-/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def
-/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def
-/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def
-/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def
-/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def
-/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def
-/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def
-/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def
-/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def
-/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def
-/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def
-/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def
-/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def
-/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def
-/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def
-/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def
-/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def
-/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def
-/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def
-/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def
-/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def
-/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def
-/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def
-/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def
-/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def
-/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def
-/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def
-/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def
-/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def
-/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def
-/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def
-/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def
-/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def
-/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def
-/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def
-/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def
-/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def
-/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def
-/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def
-/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def
-/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def
-/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def
-/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def
-/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def
-/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def
-/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def
-/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def
-/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def
-/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def
-/bet 673 def /gimel 674 def /dalet 675 def /he 676 def
-/vav 677 def /zayin 678 def /het 679 def /tet 680 def
-/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def
-/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def
-/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def
-/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def
-/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def
-/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def
-/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def
-/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def
-/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def
-/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def
-/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def
-/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def
-/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def
-/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def
-/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def
-/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def
-/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def
-/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def
-/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def
-/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def
-/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def
-/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def
-/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def
-/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def
-/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def
-/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def
-/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def
-/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def
-/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def
-/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def
-/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def
-/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def
-/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def
-/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def
-/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def
-/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def
-/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def
-/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def
-/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def
-/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def
-/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def
-/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def
-/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def
-/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def
-/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def
-/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def
-/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def
-/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def
-/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def
-/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def
-/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def
-/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def
-/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def
-
-end readonly def
-FontName currentdict end definefont pop
-%%EndFont
-%%EndProlog
-mpldict begin
-13.5 175.5 translate
-585 441 0 0 clipbox
-% polygon
-1.000 setgray
-1.000 setlinewidth
-0 setlinejoin
-2 setlinecap
-[] 0 setdash
-0 0 m
-0 441 l
-585 441 l
-585 0 l
-closepath
-gsave
-fill
-grestore
-stroke
-% polygon
-0.000 setgray
-73.125 44.1 m
-73.125 396.9 l
-526.5 396.9 l
-526.5 44.1 l
-closepath
-gsave
-1.000 setgray
-fill
-grestore
-stroke
-% draw_lines
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 44.100 m
-82.192 44.625 l
-91.260 46.237 l
-100.328 49.043 l
-109.395 53.206 l
-118.463 58.937 l
-127.530 66.464 l
-136.597 76.012 l
-145.665 87.777 l
-154.733 101.897 l
-163.800 118.431 l
-172.868 137.336 l
-181.935 158.456 l
-191.002 181.511 l
-200.070 206.100 l
-209.138 231.707 l
-218.205 257.720 l
-227.273 283.450 l
-236.340 308.160 l
-245.408 331.100 l
-254.475 351.539 l
-263.543 368.804 l
-272.610 382.309 l
-281.678 391.584 l
-290.745 396.306 l
-299.812 396.306 l
-308.880 391.584 l
-317.948 382.309 l
-327.015 368.804 l
-336.083 351.539 l
-345.150 331.100 l
-354.218 308.160 l
-363.285 283.450 l
-372.353 257.720 l
-381.420 231.707 l
-390.488 206.100 l
-399.555 181.511 l
-408.623 158.456 l
-417.690 137.336 l
-426.758 118.431 l
-435.825 101.897 l
-444.893 87.777 l
-453.960 76.012 l
-463.028 66.464 l
-472.095 58.937 l
-481.163 53.206 l
-490.230 49.043 l
-499.298 46.237 l
-508.365 44.625 l
-517.433 44.100 l
-stroke
-grestore
-% draw_lines
-0 setlinecap
-[6 6] 0 setdash
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 44.100 m
-82.192 58.500 l
-91.260 72.900 l
-100.328 87.300 l
-109.395 101.700 l
-118.463 116.100 l
-127.530 130.500 l
-136.597 144.900 l
-145.665 159.300 l
-154.733 173.700 l
-163.800 188.100 l
-172.868 202.500 l
-181.935 216.900 l
-191.002 231.300 l
-200.070 245.700 l
-209.138 260.100 l
-218.205 274.500 l
-227.273 288.900 l
-236.340 303.300 l
-245.408 317.700 l
-254.475 332.100 l
-263.543 346.500 l
-272.610 360.900 l
-281.678 375.300 l
-290.745 389.700 l
-299.812 389.700 l
-308.880 375.300 l
-317.948 360.900 l
-327.015 346.500 l
-336.083 332.100 l
-345.150 317.700 l
-354.218 303.300 l
-363.285 288.900 l
-372.353 274.500 l
-381.420 260.100 l
-390.488 245.700 l
-399.555 231.300 l
-408.623 216.900 l
-417.690 202.500 l
-426.758 188.100 l
-435.825 173.700 l
-444.893 159.300 l
-453.960 144.900 l
-463.028 130.500 l
-472.095 116.100 l
-481.163 101.700 l
-490.230 87.300 l
-499.298 72.900 l
-508.365 58.500 l
-517.433 44.100 l
-stroke
-grestore
-% draw_lines
-[3 5 1 5] 0 setdash
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 44.100 m
-82.192 45.548 l
-91.260 49.869 l
-100.328 56.992 l
-109.395 66.799 l
-118.463 79.131 l
-127.530 93.783 l
-136.597 110.516 l
-145.665 129.056 l
-154.733 149.096 l
-163.800 170.309 l
-172.868 192.347 l
-181.935 214.846 l
-191.002 237.438 l
-200.070 259.753 l
-209.138 281.422 l
-218.205 302.092 l
-227.273 321.421 l
-236.340 339.094 l
-245.408 354.819 l
-254.475 368.339 l
-263.543 379.431 l
-272.610 387.913 l
-281.678 393.647 l
-290.745 396.538 l
-299.812 396.538 l
-308.880 393.647 l
-317.948 387.913 l
-327.015 379.431 l
-336.083 368.339 l
-345.150 354.819 l
-354.218 339.094 l
-363.285 321.421 l
-372.353 302.092 l
-381.420 281.422 l
-390.488 259.753 l
-399.555 237.438 l
-408.623 214.846 l
-417.690 192.347 l
-426.758 170.309 l
-435.825 149.096 l
-444.893 129.056 l
-453.960 110.516 l
-463.028 93.783 l
-472.095 79.131 l
-481.163 66.799 l
-490.230 56.992 l
-499.298 49.869 l
-508.365 45.548 l
-517.433 44.100 l
-stroke
-grestore
-% draw_lines
-[1 3] 0 setdash
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 72.324 m
-82.192 73.656 l
-91.260 77.632 l
-100.328 84.185 l
-109.395 93.207 l
-118.463 104.552 l
-127.530 118.033 l
-136.597 133.427 l
-145.665 150.483 l
-154.733 168.921 l
-163.800 188.437 l
-172.868 208.711 l
-181.935 229.410 l
-191.002 250.195 l
-200.070 270.724 l
-209.138 290.661 l
-218.205 309.676 l
-227.273 327.460 l
-236.340 343.718 l
-245.408 358.186 l
-254.475 370.624 l
-263.543 380.828 l
-272.610 388.632 l
-281.678 393.907 l
-290.745 396.567 l
-299.812 396.567 l
-308.880 393.907 l
-317.948 388.632 l
-327.015 380.828 l
-336.083 370.624 l
-345.150 358.186 l
-354.218 343.718 l
-363.285 327.460 l
-372.353 309.676 l
-381.420 290.661 l
-390.488 270.724 l
-399.555 250.195 l
-408.623 229.410 l
-417.690 208.711 l
-426.758 188.437 l
-435.825 168.921 l
-444.893 150.483 l
-453.960 133.427 l
-463.028 118.033 l
-472.095 104.552 l
-481.163 93.207 l
-490.230 84.185 l
-499.298 77.632 l
-508.365 73.656 l
-517.433 72.324 l
-stroke
-grestore
-% text
-/Verdana findfont
-18.000 scalefont
-setfont
-144.812 403.956 m
-0 4 rmoveto
-(Smoothing window in time-domain) show
-% text
-/Verdana findfont
-14.000 scalefont
-setfont
-69.469 30.1 m
-(0) show
-% line
-0.500 setlinewidth
-[] 0 setdash
-163.800 44.100 m 163.800 48.100 l
-stroke
-% line
-163.800 392.900 m 163.800 396.900 l
-stroke
-% text
-155.769 30.1 m
-(10) show
-% line
-254.475 44.100 m 254.475 48.100 l
-stroke
-% line
-254.475 392.900 m 254.475 396.900 l
-stroke
-% text
-246.444 30.1 m
-(20) show
-% line
-345.150 44.100 m 345.150 48.100 l
-stroke
-% line
-345.150 392.900 m 345.150 396.900 l
-stroke
-% text
-337.619 30.1 m
-(30) show
-% line
-435.825 44.100 m 435.825 48.100 l
-stroke
-% line
-435.825 392.900 m 435.825 396.900 l
-stroke
-% text
-427.731 30.1 m
-(40) show
-% text
-518.844 30.1 m
-(50) show
-% text
-296.656 17.1 m
-(n) show
-% text
-47.812 39.1 m
-(0.0) show
-% line
-73.125 114.660 m 77.125 114.660 l
-stroke
-% line
-522.500 114.660 m 526.500 114.660 l
-stroke
-% text
-47.875 109.66 m
-(0.2) show
-% line
-73.125 185.220 m 77.125 185.220 l
-stroke
-% line
-522.500 185.220 m 526.500 185.220 l
-stroke
-% text
-47.125 180.22 m
-(0.4) show
-% line
-73.125 255.780 m 77.125 255.780 l
-stroke
-% line
-522.500 255.780 m 526.500 255.780 l
-stroke
-% text
-47.812 250.78 m
-(0.6) show
-% line
-73.125 326.340 m 77.125 326.340 l
-stroke
-% line
-522.500 326.340 m 526.500 326.340 l
-stroke
-% text
-47.797 321.34 m
-(0.8) show
-% text
-48.062 391.9 m
-(1.0) show
-% polygon
-1.000 setlinewidth
-2 setlinecap
-214.291 51.156 m
-214.291 161.736 l
-385.334 161.736 l
-385.334 51.156 l
-closepath
-gsave
-1.000 setgray
-fill
-grestore
-stroke
-% draw_lines
-230.344 143.521 m
-237.901 143.521 l
-245.457 143.521 l
-253.013 143.521 l
-stroke
-% draw_lines
-0 setlinecap
-[6 6] 0 setdash
-230.344 121.605 m
-237.901 121.605 l
-245.457 121.605 l
-253.013 121.605 l
-stroke
-% draw_lines
-[3 5 1 5] 0 setdash
-230.344 97.688 m
-237.901 97.688 l
-245.457 97.688 l
-253.013 97.688 l
-stroke
-% draw_lines
-[1 3] 0 setdash
-230.344 71.371 m
-237.901 71.371 l
-245.457 71.371 l
-253.013 71.371 l
-stroke
-% text
-/Verdana findfont
-24.000 scalefont
-setfont
-262.081 134.521 m
-(Blackman) show
-% text
-262.081 112.605 m
-(Bartlett) show
-% text
-262.081 86.688 m
-0 5 rmoveto
-(Hanning) show
-% text
-262.081 60.371 m
-0 5 rmoveto
-(Hamming) show
-
-end
-showpage
diff --git a/doc/numpybook/Figures/fig2.eps b/doc/numpybook/Figures/fig2.eps
deleted file mode 100644
index 20797dc71..000000000
--- a/doc/numpybook/Figures/fig2.eps
+++ /dev/null
@@ -1,4921 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: fig2.eps
-%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/
-%%CreationDate: Fri Jan 6 00:11:32 2006
-%%BoundingBox: 13 175 598 616
-%%EndComments
-%%BeginProlog
-/mpldict 7 dict def
-mpldict begin
-/m { moveto } bind def
-/l { lineto } bind def
-/r { rlineto } bind def
-/box {
-m
-1 index 0 r
-0 exch r
-neg 0 r
-closepath
-} bind def
-/clipbox {
-box
-clip
-newpath
-} bind def
-/ellipse {
-newpath
-matrix currentmatrix 7 1 roll
-translate
-scale
-0 0 1 5 3 roll arc
-setmatrix
-closepath
-} bind def
-%%BeginFont: Verdana
-%!PS-TrueType-1.0-1.0
-8 dict begin
-/FontName /Verdana def
-/FontMatrix [1 0 0 1 0 0] def
-/FontType 42 def
-/Encoding StandardEncoding def
-/FontBBox [-102 -423 2963 2049] def
-/PaintType 0 def
-/FontInfo 7 dict dup begin
-/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def
-/FamilyName (Verdana) def
-/FullName (Verdana) def
-/version (Version 2.35) def
-/isFixedPitch false def
-/UnderlinePosition -180 def
-/UnderlineThickness 120 def
-end readonly def
-/sfnts [
-<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F
-00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4
-000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198
-6670676DEE371553000021740000013867617370001700090000021000000010676C7966
-01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C
-0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444
-00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC
-6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374
-C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000
-16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801
-00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000
-00000000000000000000037D00010000037D00620007006B000500020010002F00380000
-0495013F0003000100010411019000050000059A053300000125059A0533000003A00078
-02A70800020B0604030504040204000002870000000000000000000000004D5320200040
-0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001
-FFFF00030000002801E60001000000000000004300000001000000000001000700430001
-0000000000020007004A0001000000000003002F00510001000000000004000700800001
-000000000005000C00870001000000000006000700930001000000000007002F009A0003
-000104030002000C00C90003000104050002001000D50003000104060002000C00E50003
-000104070002001000F10003000104080002001001010003000104090000008601110003
-000104090001000E01970003000104090002000E01A50003000104090003005E01B30003
-000104090004000E021100030001040900050018021F0003000104090006000E02370003
-000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003
-0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003
-000104130002001202E50003000104140002000C02F70003000104150002001003030003
-000104160002000C03130003000104190002000E031F00030001041B00020010032D0003
-0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003
-0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003
-00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064
-61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C
-6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F
-736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372
-6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264
-616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270
-6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900
-6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03
-BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400
-6100740061002000A9002000310039003900360020004D006900630072006F0073006F00
-66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00
-6C0020005200690067006800740073002000520065007300650072007600650064005600
-65007200640061006E00610052006500670075006C00610072004D006900630072006F00
-73006F00660074003A00560065007200640061006E006100200052006500670075006C00
-610072003A00560065007200730069006F006E0020003100200028004D00690063007200
-6F0073006F00660074002900560065007200640061006E00610056006500720073006900
-6F006E00200032002E0033003500560065007200640061006E0061005600650072006400
-61006E006100200069007300200061002000740072006100640065006D00610072006B00
-20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000
-6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100
-61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200
-6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100
-6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04
-47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00
-4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00
-740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00
-61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A
-000001060000010000000000000001020000000200000000000000000000000000000001
-0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324
-25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748
-494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B
-6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F
-909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2
-B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5
-D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF
-02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85
-1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116
-21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA
-25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303
-03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026
-203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202
-2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01
-FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000
-0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077
-E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74
-DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000
-000002380000023800000000000000000000023800000242026800000000000000000000
-000002B203640368037600000000000000000000000000000000036A0000036A00000000
-000000000000000000000000000000000358000003580000000000000000000000000000
-0000000000000000034400000000000300A300840085037C009600E60086008E008B009D
-00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3
-00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC
-00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A
-0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A
-0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104
-010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E
-014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A
-015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E
-01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D
-016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9
-00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125
-0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9
-00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B
-01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D
-01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7
-01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5
-01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A
-026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C
-027D027E027F028002810282028302840285028602870288034C034D034E034F03500351
-03520353035403550356035703580359035A035B035C035D035E035F0360036103620363
-036403650366036703680369036A036B036C036D036E036F037003710191019203740375
-037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087
-00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242
-0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE
-04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13
-0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE
-122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747
-17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B
-1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226
-2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C
-245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2
-2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7
-316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD
-361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03
-3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47
-3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF
-40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF
-44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8
-48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E
-4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58
-4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491
-54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8
-575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2
-5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD
-5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1
-62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589
-65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A
-67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48
-6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA
-705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE
-73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA
-78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E
-7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9
-82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD
-87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73
-8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD
-9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7
-95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759
-976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB
-98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911
-9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB
-9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22
-9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B
-0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F
-740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4
-110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D
-B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10
-010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101
-01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101
-0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D
-320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C
-111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D
-230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D
-100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01
-010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C
-111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A
-100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22
-11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11
-0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10
-282001010101010101010101010101010101010101320D320D320D320D320D320D320D32
-0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B
-28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C
-00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D
-000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013
-0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019
-001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F
-0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025
-0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B
-002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031
-0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037
-0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D
-003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043
-0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049
-0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F
-004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055
-0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B
-005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061
-0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067
-0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D
-006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073
-0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079
-0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F
-007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085
-0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B
-008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091
-0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097
-0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D
-009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3
-00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9
-00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF
-00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5
-00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB
-00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1
-00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7
-00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD
-00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3
-00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9
-00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF
-00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5
-00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB
-00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1
-00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7
-00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD
-00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280
-B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55
-026F54019F54AF54025153170452531604535215044A4952044649370447493204484932
-04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532
-0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3
-B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3
-092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936
-4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590
-8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540
-C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914
-15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314
-480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B
-1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A
-1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10
-BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A
-0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808
-004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B
-2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861
-B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B
-2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B
-2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736
-26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258
-45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225
-45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C
-60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0
-042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820
-8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320
-468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046
-8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60
-441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010
-0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF
-00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC
-00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098
-009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF
-006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1
-0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072
-0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A
-006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A
-008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000
-045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100
-0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073
-022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2
-0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A
-0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A
-057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C
-058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086
-04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046
-03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A
-02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9
-04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056
-04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A
-05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068
-04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB
-0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1
-051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9
-0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E
-064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB
-068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071
-03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2
-0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096
-0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA
-03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A
-050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073
-064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118
-05160113051602210516012D05160161051601560516019F05160132047E001802460018
-05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D
-04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB
-0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069
-05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068
-062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB
-047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073
-04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E
-04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E
-0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A
-065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5
-047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A
-04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A
-050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8
-051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001
-035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005
-05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8
-036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1
-05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9
-0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056
-07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089
-05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100
-057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A
-057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8
-05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044
-06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1
-04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9
-04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071
-02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073
-05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006
-060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051
-060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8
-0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8
-06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9
-03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D
-059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F
-04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053
-06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005
-02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9
-080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3
-045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1
-0000020900000221000001540000021D0516013605160003051601360516012505160142
-051601420516014205160125051602090516013605160142051601420516014205160142
-051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3
-0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A
-04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A
-050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8
-04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000064C007304DB006A064C0073
-04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A
-064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073
-04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1
-060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006
-04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED
-0516008A0000001F00000380090E09000303050507070B07030404070703050304070707
-070707070707070404070707060A08070808070608080505070609080907090707070808
-090707070404040706060606060606030606030306030906060606040604060607060605
-060506070808080708090806060606060606060606060303030306060606060606060606
-07050707060507060909090606070A090907070707060607070607050507090606050707
-0707070606070808090A0907090404020207070607030604040606070302040E08070807
-070505050509090908080803060606060606060606060603070607050508060706070607
-070505050909090608060507060806080606060308060806080608070607060603060306
-040806080609060704070407060704070408060806070507050609070606050605090606
-050B09060703050B03050303050308060806080607060706070608060806080608060806
-050305030503050305030706060603080608060906090607040706070408060806080608
-06090707060308060A090906040907090709070706020607060909090902060606080809
-060908090308070607070805070809080709080706070707090905070605060306060505
-060603060606060506060506050907030606060707080608070505050A0A070707070807
-070607070906080807070908090807080707070708070909080907080907060606040606
-070506060606070606060606050609060705090907080606080606060406060303030909
-060606060505090B06050505050505050000000009060806000000000606060606060606
-060606060606060806080608060806080608060806080608060806080608060706070607
-060706070607060706070605030503000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000090609060906
-090609060906090609060906090609060906080608060806080608060806080607060706
-07060706060007000A0F0A000404040508070B0703050507080405040507070707070707
-0707070505080808060A070708080606080805050706090709070908070708070B070707
-0505050806060707050707040707030307030B0707070704060407060707060606050608
-070708060709080707070707070507070707030303030707070707070707070707050707
-060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706
-06080707090B0A070A0505030308080607040605050606070403050F0706070606050505
-050909090808080306060606060606060606060307060706050806070607070808050505
-0A0A0A060807050706080508050706040707070708070806070607060306030605070707
-0709070804080407060704070408070807070607060609090707050705090606050C0906
-0704060B0306040406040707080508050607060706070807080708070807080705030503
-0503050305030707070603070707070907090708040706070408070807080708070B0707
-060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909
-030707070607080507070907070908070707070709090507070507030707070507070307
-0607060507070507060909030707070906080608070505050B0B08070708070707060706
-0906080807070908090807080707090709070B0B080907080A0707070605060707050707
-0706070707070705050609070706090A0708060608060707050606030303090907070607
-06050A0C0705050505050505000000000907080700000000060606060606060606060606
-060606070707070707070707070707070707070707070707070707060706070607060706
-070607060706070503050300000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000009070907090709070907
-090709070907090709070907090708070807080708070807080708070706070607060706
-070007000B110B000404040509070C080305050709040504050707070707070707070705
-05090909060A080809090706090805050806090809070908080708080B08070805050509
-07070707060707040707030407030B070707070506040707090707060705070908080907
-080908070707070707060707070703030303070707070707070707070706070707060707
-0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808
-090C0B070B05050303090907070407050507070704030511080708070705050505090909
-08080803070707070707070707070603080608060509070707070709090606060B0B0B07
-090705080609060906070704080708070907090707070706030603060508070807090708
-05080508060704070408070807080608060609090707060705090707060D0A070804060C
-040704040704080709060906070707070707090709070907080708070503050305030503
-05040807070603080708070907090708050806070408070807080708070B090707030807
-0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808
-070808050808090807090807070707080909050707060703070707050707030707070706
-07070607070909030707070907090609080505050D0C090808080808080608070B070808
-08080908090807090708090809080B0C090A07090B080707070508070906070707070707
-07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D
-070606060606060600000000090708070000000007070707070707070707070707070708
-070807080708070807080708070807080708070807080707070707070707070707070707
-070707050305030000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000907090709070907090709070907
-090709070907090709070807080708070807080708070807070707070707070707000700
-0C120C00040405060A080D09030505080904050405080808080808080808080505090909
-070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808
-060808040808030407030B0808080805070508070B0707070805080A08080908090A0908
-08080808080608080808030303030808080808080808080808070808080708070C0C0C08
-08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08
-0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903
-0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508
-07090609060808040808080809090908080808070307040706090809080A080805080508
-07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404
-070408080906090608080808080809080908090809080908050305030503050305040807
-070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08
-050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905
-08080A09080A0908080707080B0A05070806080308070706080803080708070608080608
-070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09
-0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806
-07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707
-07070707000000000A080908000000000808080808080808080808080808080808080808
-080808080808080808080808080808080808080808080808080808080808080808080805
-030503000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08
-0A080A080A0809080908090809080908090809080707070707070707080008000D140D00
-050505050A080D09030606090905070506080808080808080808080606090909070D0908
-090908080909050608070B090A080A08090909090D0909090606060B0808080808080805
-0808030407030B0808080805070608080B0708070807080B09090908090A090808080808
-080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A
-0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603
-03090B080905080606080808050306140908090808050505050A0A0A0909090308080808
-08080808080807030907090707090809080808090B0707070D0D0D080908050907090809
-080808050908090809080908080808070307040706090809080A08080508050907090609
-060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908
-090809080808080808080908090809080908090805030503050305030604080707070309
-0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D
-0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09
-080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03
-0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809
-09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07
-09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707
-000000000A08090900000000080808080808080808080808080808090809080908090809
-080908090809080908090809080908080808080808080808080808080808080503050300
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08
-0A0809080908090909090909090909090908090809080908080008000E150E0005050606
-0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908
-0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305
-08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808
-0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B
-0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08
-0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909
-090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905
-0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A
-090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07
-0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B
-090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09
-080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08
-0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B
-090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A
-0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C
-090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000
-0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A
-080A080A080A080A080A0809080908090809080908090809080908050305030000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09
-0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B
-0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507
-0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09
-0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303
-0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B
-0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07
-0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803
-0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09
-0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A
-09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909
-09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A
-060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A
-0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A
-0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B
-0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10
-0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908
-0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A
-000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A
-090A090A090A090909090909090909090909090909090905030503000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A
-0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A
-0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C
-0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06
-09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A
-0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09
-090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A
-060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09
-070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A
-0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D
-0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A
-0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A
-070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010
-10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B
-0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707
-12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B
-110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A
-0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000
-0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B
-0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B
-0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806
-080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C
-0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A
-0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A
-0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A
-09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A
-0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A
-0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09
-05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B
-080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B
-0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C
-0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B
-0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05
-0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C
-0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A
-0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905
-050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B
-0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B
-0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000D0A
-0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B
-0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B
-0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C
-120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09
-0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B
-0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F
-0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B
-0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F
-0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A
-080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B
-0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B
-080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D
-0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10
-0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08
-0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C
-0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B
-0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010
-0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B
-0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B
-0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B
-0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B
-0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C
-0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D
-090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10
-0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C
-0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C
-0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808
-080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A
-1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E
-0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C
-0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806
-0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C
-0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11
-060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B
-0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C
-120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C
-0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C
-0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C
-0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C
-0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C
-0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B
-0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09
-091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910
-0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D
-0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C
-1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E
-1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010
-0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D
-100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E
-090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16
-060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806
-09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C
-1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E
-0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A
-0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F
-0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D
-0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417
-0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E
-0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D
-0C0D0C080608060000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000100C100C100C100C100C100C100C
-110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00
-152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111
-0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D
-0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D
-0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D
-0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D
-150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06
-0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E
-0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E
-0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707
-0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C
-0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D
-0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008
-0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D
-0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210
-11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B
-0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B
-0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E
-0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08
-060806000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D
-120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600
-0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F
-0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08
-0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D
-0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511
-161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06
-0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E
-0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F
-0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E
-09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D
-0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610
-0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216
-1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310
-0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206
-0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F
-0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D
-0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C
-00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F
-0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D
-120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B
-130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D
-12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608
-0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E
-0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313
-0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E
-0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F
-0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08
-100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11
-0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C
-0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12
-0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E
-0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E
-0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13
-0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310
-121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414
-0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000
-130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10
-0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F
-110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11
-060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B
-110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F
-0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606
-06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11
-14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B
-0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06
-100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E
-1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10
-0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E
-0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11
-0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F
-1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10
-15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11
-100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919
-1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D
-140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210
-000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10
-0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210
-12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11
-160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714
-15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C
-0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110
-1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F
-0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111
-0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E
-0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511
-1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516
-11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511
-15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11
-0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B
-1B061111111214180F181419071213131113140B13131714121514101211111318160B11
-110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C
-1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213
-1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011
-0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000
-111111111111111111111111111111121012101210121012101210121012101210121012
-101210111011101110111011101110111011100B070B0700000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000015101510151015101510151015101610161016101610161014111411141214121412
-141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B
-0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714
-141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211
-1811110F120D1218141414121617151111111111110F1111111109090909121212121212
-1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12
-100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C
-14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212
-11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110
-091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12
-0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612
-161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215
-12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212
-12141619101A161A091414141214160D14141816131716111412121419180D12120F1209
-1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814
-12161414141016121C12161614151816171611141212181416151E1E171B14141E141112
-110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09
-090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212
-121212121212121212121214111411141114111411141114111411141114111411141112
-1112111211121112111211121112110D090D090000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000001712
-171217121712171217121712171217121712171217121512151216131613161316131613
-121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414
-141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716
-201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311
-140F141A1616161418191713131313131311131313130909090914131313131314141414
-141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A
-141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614
-140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A
-1A1111112020201419140D16111611161114140C16131613191519141314131209120912
-0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414
-11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814
-0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417
-14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C
-111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F
-141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616
-161218141F14181816181B181918131614141A1618172121191D161621171314130F1413
-1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D
-14131314120F20261411111111111111000000001A131815000000001414141414141414
-141414141414141613161316131613161316131613161316131613161316131413141314
-13141314131413141314130D090D09000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000191319131913
-19131913191319131A131A131A131A131A13171417141815181518151815181514131413
-1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515
-1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417
-0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B
-17171715191A181414141414141114141414090909091514141414141515151515121515
-1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815
-151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D
-0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212
-212121151A150D17111711171115150C1714171419151A151415141209120A120F191519
-151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14
-180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09
-0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14
-140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E
-091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914
-1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915
-2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515
-141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415
-131021271512121212121212000000001B14191600000000151515151515151515151515
-151515171417141714171417141714171417141714171417141714151415141514151415
-141514151415140D090D0900000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000001A141A141A141A141A14
-1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414
-15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811
-111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E
-181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17
-1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817
-25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919
-1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D
-1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518
-1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A
-101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528
-0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A
-110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916
-24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A
-17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613
-16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C
-1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18
-1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B
-1814141414141414000000001E161C180000000018181818181818181818181818181819
-161916191619161916191619161916191619161916191617161716171617161716171617
-161716100A100A0000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000001D161D161D161D161D161D161D16
-1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800
-2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222
-172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A
-161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19
-191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B
-1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B
-2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C
-1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D
-161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D
-161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F
-190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19
-19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119
-132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012
-1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B
-1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320
-2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16
-151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717
-17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D
-191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912
-0C120C000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000211921192119211921192119211922192219
-2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00
-10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20
-20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10
-1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C
-1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24
-2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C
-0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D
-1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820
-181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C
-12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C
-201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22
-1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D
-262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722
-1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C
-1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20
-1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B
-1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919
-00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F
-1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C
-251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417
-292036240D17172029121712172020202020202020202017172929291B3222222327201D
-27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11
-1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E
-1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929
-202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E
-1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020
-20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012
-221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025
-20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A
-201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027
-1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F
-1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E
-221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029
-20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922
-26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C
-20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000
-281E262100000000202020202020202020202020202020221E221E221E221E221E221E22
-1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520
-2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27
-0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719
-251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522
-212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F
-0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227
-2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219
-19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F
-251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520
-2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25
-1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220
-22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126
-17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222
-27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125
-2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26
-251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838
-2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E
-2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924
-000000002222222222222222222222222222222520252025202520252025202520252025
-2025202520252022202220222022202220222022202220170F170F000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924
-29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25
-2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B
-2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419
-1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523
-2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520
-202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425
-15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E
-1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25
-232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30
-24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24
-2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24
-172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A
-3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824
-241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A
-41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729
-3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325
-1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000
-252525252525252525252525252525282328232823282328232823282328232823282328
-23282325232523252325232523252325232523180F180F00000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26
-2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18
-1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F
-2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28
-372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929
-2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029
-251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66
-2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929
-28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825
-122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A
-21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A
-322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31
-2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B
-2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12
-2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E
-29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829
-28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312
-12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B
-2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A
-282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000003529
-35293529352935293529352936293629362936293629312A312A332C332C332C332C332C
-29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030
-3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733
-4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27
-3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F
-302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D
-303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F
-2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D
-3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A
-22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F
-2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F
-1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37
-2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841
-28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22
-2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333
-332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D
-3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545
-2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030
-30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F
-2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E
-3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C
-2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535
-35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339
-26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544
-39393A343E413D3232323232322B313131311818181835323232323235353535352D3535
-352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36
-36443939415951355326261616444431331E3526263434351E16267E3934393434222222
-224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D
-53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E
-3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833
-3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218
-22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433
-31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B
-1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831
-3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34
-51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535
-31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135
-2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535
-353535393239323932393239323932393239323932393239323932343134313431343134
-313431343134312218221800000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000041324132413241324132
-41324132433243324332433243323D353D353F373F373F373F373F373331333133313331
-340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A
-2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B
-3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A
-4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39
-5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F
-48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848
-434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A
-4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840
-2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363
-1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718
-2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37
-5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41
-3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E
-383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545
-40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B
-383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C
-3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F
-373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A
-373A37271827180000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000004838483848384838483848384838
-4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00
-649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252
-37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E
-343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C
-3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240
-4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240
-642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B
-40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44
-34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44
-343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323
-3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B
-3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D
-2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A
-4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F
-3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B
-4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35
-323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636
-3636363600000000513D4C4200000000404040404040404040404040404040443C443C44
-3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A
-1B2A1B000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D
-513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100
-000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111
-2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007
-0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED
-332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1
-0304061400030007002640150206060307010F09400902032C0040000100042C072FED33
-5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD
-BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17
-7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E
-0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5
-131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F
-ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0
-C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135
-2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE
-CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178
-8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16
-70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A
-08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18
-312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031
-201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932
-2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130
-5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117
-15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362
-2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101
-7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D
-C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807
-05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908
-260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203
-031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616
-282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33
-2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633
-321625012309011406232226353436333216013426232206151416333236013426232206
-1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59
-64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC
-DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018
-004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576
-087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008
-300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D
-1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D
-3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673
-4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B
-2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633
-323601151406070123270E01232224353436373E01372E01353436373E01333216151406
-070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32
-3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102
-0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71
-F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4
-03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301
-822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803
-28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830
-000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01
-070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01
-2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D
-060306131503151326012603261326154701400340134715500350136003601379007602
-700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F
-3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49
-4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001
-00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554
-0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450
-0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B
-060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217
-392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606
-8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167
-FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D
-01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4
-FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0
-0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500
-590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09
-012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02
-01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270
-0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00
-3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116
-01250138004900440156016701770186010A011202032F02010200010000022F332F003F
-2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F
-05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15
-4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130
-5D011002212002111012212012013E01353426272E01232206070E01151416171E013332
-36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C
-02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52
-4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502
-1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED
-3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098
-03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116
-03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B
-0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F
-100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202
-101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01
-373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0
-8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223
-3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F
-290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C
-780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D
-020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10
-E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514
-06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01
-2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6
-6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C
-02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1
-233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D
-240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F
-0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39
-395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311
-3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001
-00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08
-7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F
-1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F
-ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01
-353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC
-6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3
-344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED
-0022003700644044060D160D3925333133374925423143375F01560D5020502165217531
-0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F
-2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114
-002322262726023534123736243332161715232E01232200073E01333216171E01073426
-272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50
-290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601
-E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014
-282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801
-4B0258027903070301000120020203000002034A050302080F081F087B02030300020204
-0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123
-012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028
-0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B
-592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616
-0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39
-0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F
-ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334
-26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1
-908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F
-92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912
-3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045
-0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914
-294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED
-5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627
-35331E01333212370E01232226272E01353400333216171612073426272E012322061514
-16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859
-012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C
-BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28
-15290002015A00000249045D00030007001E4010015602050656050807002D0600010101
-2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002
-00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806
-5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F
-5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03
-40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306
-540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840
-080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887
-10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75
-FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940
-09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001
-213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006
-006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01
-2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939
-5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB
-7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069
-40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870
-090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000
-172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406
-070E01071523113E01373E013534262322060723353E013332160123353303ED46393892
-52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D
-346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04
-0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05
-2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766
-3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A
-510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37
-0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00
-3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01
-23222635341233321617353311333E013534022726242322040706021514121716043332
-3637150E0123222427260235341237362433320417161201112E01232206151416333236
-074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63
-010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B
-438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A
-A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6
-A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287
-01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06
-03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C
-010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F
-39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121
-130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8
-0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07
-1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D
-10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216
-171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132
-36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E
-2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08
-1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546
-05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28
-600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C
-3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E
-012322242726023534123736243332161715232E01232206070E01151416171E01333236
-373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543
-46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D
-E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408
-03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00
-3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637
-3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE
-B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B
-003B402309350006100602060601053502030A350108040008010800730D0F0D01060914
-016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111
-21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009
-0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6
-FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79
-C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06
-130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734
-0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED
-3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021
-32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770
-01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101
-23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B
-05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D
-03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133
-11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B
-002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4
-3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804
-A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403
-09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623
-22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5
-02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075
-190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901
-3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302
-0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D
-400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87
-10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE
-FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005
-002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901
-113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138
-023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903
-050A020309000410043404440454046A04060404070B0903010708090A0B030502140078
-0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931
-30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001
-130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07
-34074507510761077107077606010F0102061F0115063406440653066B0160067F017006
-0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304
-6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121
-0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017
-002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13
-53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824
-10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412
-373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58
-01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9
-B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010
-001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309
-080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D
-10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107
-3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E
-C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002
-0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D
-59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979
-150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303
-2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31
-305D015D010E01232226270E01232224272602353412373624333216171612151002071E
-01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160
-5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D
-BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201
-3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01
-3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010
-071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019
-031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710
-7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637
-3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD
-B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030
-009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510
-4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D
-86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A
-111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F
-ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127
-2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85
-0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801
-A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28
-152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B
-0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC
-04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03
-4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10
-F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E
-01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A
-4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066
-470148020205040507065706860603061400000105070457048604030414030203080144
-014B02580273017C02060005027503010303020845004A0302020103040024003A005A00
-6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10
-F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309
-01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C
-00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329
-08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A
-0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001
-000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00
-75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187
-10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01
-390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1
-000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557
-09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201
-020514060607050407010A0B0602080302080F0D01060216022602360247020509081908
-290839084808050208070A04010406020D00160026003600470050000600660D08090619
-062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931
-30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5
-FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006
-000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619
-08270628085606590865066A08080814000100061405040502000D050200010004000703
-040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4
-ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104
-E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1
-000900594036030708060813082608360846085608660876080808B30202030707033506
-03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939
-2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603
-91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201
-0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208
-FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A
-0138014B01590168017801890109011200032F000100030100006002700202022F5D332F
-003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614
-0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521
-1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034
-3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F
-036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309
-0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003
-0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154
-051602FA068C000300244016480159026902790204500360037003030303010000022F33
-2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026
-0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A
-0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A
-001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED
-3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437
-353426272E012322060723353E01333216171E011503110E01070E01151416333236041D
-BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944
-5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C
-FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F
-3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08
-141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939
-31305D011406070E012322262707231133113E0133321203342623220607111E01333236
-04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F
-2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057
-40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155
-0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6
-3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123
-2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5
-A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002
-006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912
-0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10
-F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711
-3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E
-B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A
-FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D
-6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103
-1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E
-013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672
-E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D
-011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505
-030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037
-0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123
-22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6
-BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030
-006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05
-702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232
-1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939
-3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332
-1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55
-9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29
-276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000
-045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860
-1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123
-22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87
-262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144
-02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D
-003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59
-021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D
-4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F
-FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335
-210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28
-2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F
-011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A
-0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD
-325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0
-015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC
-1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101
-01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B
-006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110
-1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010
-801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D
-2123113426272E01232206071E01151123113426272E012322060711231133153E013332
-16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372
-9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49
-5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213
-040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED
-123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B
-4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471
-047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C
-1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110
-002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118
-C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002
-00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C
-0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD
-32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01
-33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F
-51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A
-D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20
-701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110
-F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133
-321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0
-BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2
-C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F
-05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931
-305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931
-2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602
-091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F
-6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201
-2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505
-07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01
-14062322262735331E0133323635342726272E01272E01353436373E013332161715232E
-0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B
-393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222
-221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA
-02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02
-0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F
-3333FD322F31305D250E012322263511233533113311211521111416171E013332363733
-02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E
-FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515
-09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED
-3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69
-B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000
-047F045D000600864041260429063604390646044906062905390540055105600505061A
-000100041A03020328002703380037034A00470375017A02080005027503010305020802
-010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403
-820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901
-2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636
-045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701
-58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00
-0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E
-3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901
-23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303
-5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403
-14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407
-4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230
-084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809
-06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600
-01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117
-395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309
-0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A
-01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307
-0519031705460149035800570179030902071A000100051A040304490046040200030204
-05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F
-0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931
-30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04
-5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03
-45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B
-1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F
-3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800
-000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C
-09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105
-2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426
-2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6
-AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B
-BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00
-1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467
-0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C
-010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F
-5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436
-37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B
-887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00
-000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418
-4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16
-1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322
-26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466
-5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD
-4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A
-40130320113011401170118011050200110E060725012B355D350003001A0000055E0801
-0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646
-125906561278027703082020211F02870101011400120020210387040104140505067B06
-74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813
-114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200
-5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D
-10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D
-C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334
-26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672
-7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1
-02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B
-342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D
-313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371
-2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F
-5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514
-062322262735331E01333236353426270E01232224272602353412373624333216171523
-2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A
-5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346
-BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2
-B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236
-002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8
-023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7
-075002360032FD000117008E009601750018401103002930295029702904020029240F03
-25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210
-24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000
-0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000
-01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000
-011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000
-0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35
-5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B
-3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501
-2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B
-01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08
-0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B
-20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D
-015D250E01071E011514062322262735331E01333236353426270E01232226272E013510
-003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09
-1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A
-460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7
-D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022
-21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021
-20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024
-20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330
-2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D
-FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117
-0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D
-40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108
-880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133
-023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003
-0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100
-0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001
-2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9
-0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A
-FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A
-FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A
-FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A
-FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501
-2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025
-012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225
-012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625
-012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625
-012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60
-1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104
-0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED
-173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE
-6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B
-0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00
-3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9
-A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F
-FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901
-7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18
-471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED
-2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600
-353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB
-010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16
-0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021
-00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08
-1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605
-190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239
-ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206
-1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62
-0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468
-05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132
-63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C
-10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D
-181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217
-39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406
-07151E01151406070E012322262735331E01333236353426272E01272627263534363735
-2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627
-2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7
-5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B
-845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237
-072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334
-323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A
-563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688
-0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A
-DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106
-0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F
-5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506
-BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913
-39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B
-303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED
-2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01
-333236373E0135342623353236353426272E01232206070E01151123113436373E013332
-1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C
-28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123
-421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0
-000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314
-282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19
-2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD
-06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F
-ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001
-5D005D011000212000111000212000031000212000111000212000072301231123112132
-16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01
-66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71
-63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC
-FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719
-3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C
-0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064
-146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F
-521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F
-5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021
-2000031000212000111000212000050E012322243534003332161715232E012322061514
-1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701
-36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE
-0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230
-1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379
-0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800
-000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D
-0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3
-FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516
-03C3068C000300244016470156006600760004500360037003030303010000022F332F00
-2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003
-000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F
-5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597
-04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303
-0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08
-030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00
-2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121
-0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999
-6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1
-000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414
-05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35
-0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F
-5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101
-112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68
-B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D
-0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B
-090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70
-1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04
-0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F
-ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433
-3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA
-63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240
-453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601
-216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52
-E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34
-441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821
-AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6
-ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123
-2202353412333216173E01333212052E01232206151416333236373E0125342623220607
-0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A
-9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE
-010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3
-05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB
-0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F
-5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4
-021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403
-020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303
-00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F
-2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482
-FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006
-000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837
-051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F
-5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901
-350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000
-0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10
-0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305
-0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08
-BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B
-5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C
-015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020
-080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C
-5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332
-363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752
-433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B
-410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19
-19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED
-3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623
-22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0
-F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B
-0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91
-99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601
-08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302
-03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A
-0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239
-012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001
-8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288
-FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307
-050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F
-5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD
-B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500
-093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31
-300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001
-008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A
-10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226
-2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C
-228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B
-0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E
-6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B
-2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335
-0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E
-01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D
-B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A
-300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031
-40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33
-ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332
-3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC
-AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403
-300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825
-1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C
-FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135
-26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4
-A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C
-580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9
-40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D
-6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143
-124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304
-00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939
-10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32
-31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637
-362437353426272E012322060723353E01333216173E0133321215272E01272E01232206>
-<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15
-5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525
-20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C
-242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C
-FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008
-0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825
-04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D
-1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117
-3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123
-22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674
-6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D
-E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2
-03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C
-05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303
-101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED
-331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01
-151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04
-FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203
-05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4
-FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001
-00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100
-00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001
-0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829
-08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31
-308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902
-DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C
-270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D
-020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D
-FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001
-5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337
-3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E
-2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E
-1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606
-050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23
-541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED
-3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322
-26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E
-01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C
-59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437
-607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E
-05D100030006004F403148024703025A056A050205041A000003061A010102390236036B
-0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739
-5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105
-D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037
-0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100
-000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B
-2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE
-8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476
-0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040
-1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33
-2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104
-82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01
-110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800
-2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335
-3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117
-004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000
-011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032
-0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016
-002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834
-10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F
-FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121
-152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E
-FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68
-B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C
-2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314
-5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B
-0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538
-10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130
-015D01211416171E013332363733150E01232226270E01232200111000333216173E0133
-321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62
-BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792
-92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B
-A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05
-02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC
-00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002
-FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910
-3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202
-04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE
-F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF
-E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701
-000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B
-2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001
-FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701
-00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F
-000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100
-010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506
-14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407
-0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD
-3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB
-1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B
-4804470658045706680467067F047006087F057007020705000301000330036003900304
-03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A
-19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02
-C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016
-400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C
-00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D
-35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F
-332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC
-003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00
-4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204
-00121203151827190119191D341502002833010133332F34030A272001022320292C0400
-0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED
-12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D
-331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323
-37332E013534363723373312003332161715232E01232204072107210E01151416172107
-211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050
-C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476
-152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC
-02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001
-2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4
-5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0
-400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135
-0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003
-001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14
-0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139
-10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335
-333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C
-6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000
-0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A
-000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F
-3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436
-33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41
-03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A
-0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201
-0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17
-3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D
-01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05
-000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130
-0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037
-0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B
-09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF
-E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701
-0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B
-2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007
-0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C
-073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E
-17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20
-19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016
-01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12
-3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D
-ED5D3130015D011406232226353436333216250123090114062322263534363332160134
-262322061514163332360134262322061514163332362514062322263534363332160734
-262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6
-BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658
-586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787
-FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801
-023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D
-0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000
-055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8
-0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
-FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B
-3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925
-012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04
-0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200
-104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C
-000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236
-003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801
-023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA
-08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1
-052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2
-FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF
-00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500
-000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D
-FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905
-5606690566067A0573060601020350056005700503050560030103500060007000030000
-042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101
-00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952
-0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33
-2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F
-365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724
-29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED
-31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C
-7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00
-03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E
-ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B
-0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00
-2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51
-090009300902313009015009600970090309091551030C29200030000200003000600003
-D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635
-343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875
-065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02
-1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623
-22262735331E0133323635342627331E010370B79225742D091A58326862060399020659
-A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402
-00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204
-0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE
-8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04
-1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123
-222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE
-790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902
-64016B0274017B020606050250036003700303030360020102500060007000030000032F
-332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501
-7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804
-090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11
-332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC
-52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614
-000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A
-050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735
-37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502
-0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5
-03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000
-050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D
-000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A
-FE780228061400030007002940160F094F090201060106050201050B00041F014F050105
-2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8
-64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B
-0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C
-2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01
-23211123353311213204171612073426272E012B011121152111333236373E0105BCB193
-66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE
-B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1
-0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B
-542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E
-030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F
-1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110
-00232200353400333216172E01270527372E012735211E01173717071612013E01353426
-272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D
-0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201
-08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE
-2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025
-012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025
-012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400
-0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F
-233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED
-3130015D011406070E012B011123113311333216171E01073426272E012B011133323637
-3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939
-4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013
-0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01
-1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED
-3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607
-111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C
-88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0
-02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130
-0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7
-0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709
-01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401
-B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01
-0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121
-35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C
-102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10
-651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F
-ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01
-333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42
-022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0
-002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37
-2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A
-2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F
-1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B
-01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A
-0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C
-B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5
-0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02
-010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200
-003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B
-2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600
-002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131
-003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535
-0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510
-0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD
-32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521
-1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF
-8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C
-FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089
-000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001
-0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436
-24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544
-6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40
-0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937
-3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F
-2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115
-14062322262735331E01333236353426270E012322242735331604333236353426272E01
-272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3
-9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3
-9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C
-4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E
-28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B
-3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779
-3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09
-0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F
-4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D
-1112173931305D2B011406071E011514062322262735331E01333236353426270E012322
-262735331E0133323635342726272E01272E01353436373E013332161715232E01232206
-15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46
-0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347
-4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918
-0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801
-0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3
-068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546
-0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7
-03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1
-04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908
-70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A
-01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED
-1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135
-213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE
-95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86
-9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502
-2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003
-0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B
-FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B
-3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B
-35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A
-0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E
-570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01
-0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F
-20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F
-003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D
-005D010E012322263534363703210323012101230E0115141633323637330902062B344B
-2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D
-90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478
-003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25
-703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420
-3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49
-03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112
-392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534
-3637362437353426272E012322060723353E01333216171E011511230E01151416333236
-373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601
-1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474
-7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F
-24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2
-0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1
-062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E
-34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209
-0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F
-ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01
-33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5
-6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025
-2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F
-04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516
-090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32
-5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534
-3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7
-03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7
-B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E
-34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33
-3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301
-1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F
-31305D01211416171E013332363733150E01070E011514163332363733150E0123222635
-343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102
-03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030
-5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2
-B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325
-012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025
-012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702
-0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270
-030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35
-005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102
-030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6
-32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52
-C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D
-010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204
-1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133
-0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E
-07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133
-2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9
-05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807
-2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311
-33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000
-0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051
-00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031
-0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236
-00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236
-00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471
-068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000
-059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9
-00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF
-00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500
-FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B
-3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25
-012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225
-012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01
-18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4
-5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332
-3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521
-FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046
-0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F
-18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6
-5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130
-5D250E01071E011514062322262735331E01333236353426272322263511233533113311
-211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB
-B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10
-B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000
-011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F
-0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E
-0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800
-4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD
-322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637
-331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8
-CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236
-00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00
-210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310
-21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35
-3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1
-023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529
-0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1
-FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF
-007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500
-FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B
-3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625
-012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625
-012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06
-10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073
-FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705
-53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726
-27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F
-003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624
-33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C
-5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566
-6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069
-FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532
-65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11
-12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01
-071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E
-0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F
-4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A
-524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01
-363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C
-38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205
-0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939
-3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633
-32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111
-8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086
-4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21
-1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111
-001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4
-113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637
-3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE
-F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0
-FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3
-0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418
-79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37
-2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D
-11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226
-272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01
-3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41
-40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D
-40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6
-0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15
-451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F
-1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000
-232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01
-1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609
-A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000
-4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
-2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002
-0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717
-0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A
-05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D
-ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127
-2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD
-51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145
-4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59
-051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED
-12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000
-03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005
-10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C
-3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B
-2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311
-3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254
-9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D
-00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037
-3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E
-34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A
-4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33
-7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F
-1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED
-332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127
-2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133
-32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA
-E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486
-B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E
-1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2
-45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D
-75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005
-B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023
-60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065
-B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213
-040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6
-ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E
-012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63
-B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5
-0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1
-022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366
-041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020
-0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F
-5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6
-88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D
-481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F
-29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10
-371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840
-1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D
-335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B
-2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123
-220615141633323637330901230901140623222635343633321607342623220615141633
-3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE
-B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302
-68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B
-006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612
-120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8
-FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B
-2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135
-3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D
-0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B
-A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101
-05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113
-1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017
-400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101
-CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230
-0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703
-8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606
-00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6
-0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017
-0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C
-CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00
-0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514
-06232226353436172206151416333236353426016B689393686893926949666748486766
-03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000
-011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000
-011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117
-00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116
-00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236
-00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236
-00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000
-049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6
-046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D
-0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460
-068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8
-0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A
-FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3
-05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59
-0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500
-FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35
-FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A
-23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E
-4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235
-40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27
-040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33
-2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510
-002132041715232E01272E012322001110002132363711213521110E01071E0115140623
-22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA
-FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061
-0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516
-A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D
-10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020
-112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033
-603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10
-E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31
-305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133
-321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460
-7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE
-E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6
-BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A
-B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A
-4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1
-001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304
-070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED
-1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121
-11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19
-0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030
-031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020
-02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F
-ED393931305D2123113426272E0123220607112311233533353315211521113E01333216
-15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE
-04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B
-10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201
-0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4
-332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335
-2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3
-C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898
-FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054
-40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704
-10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F
-ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617
-1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF
-81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32
-0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A
-140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31
-302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198
-98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202
-00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130
-01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B
-00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329
-12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F
-2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406
-232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898
-FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003
-0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01
-0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533
-1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998
-045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717
-13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210
-E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315
-230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141
-1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F
-024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104
-04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4
-FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534
-3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141
-13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801
-0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35
-0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A
-1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4
-5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627
-35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816
-160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00
-FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF
-00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05
-0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D
-021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802
-050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D
-11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D
-7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102
-2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507
-01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C
-ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426
-02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0
-0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104
-01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F
-2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149
-8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300
-FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016
-0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100
-2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107
-7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776
-06010F0102061F01150626013601340646014406560153066006790170060E0406015A01
-550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802
-0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172
-715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901
-330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00
-000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E
-1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD
-322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114
-062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26
-0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805
-0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F
-03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025
-2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325
-2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35
-FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001
-001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05
-1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11
-332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627
-231133153E013332161715232E012322060711331E011514062322262735333C4E285E52
-0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5
-5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000
-011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000
-011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F
-004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204
-5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111
-21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE
-528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B
-3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C
-0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00
-3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311
-331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C
-012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28
-251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D
-1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625
-2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25
-2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35
-FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35
-FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001
-00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33
-20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36
-1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31
-302B5D053436372206232226272E01351133111416171E01333236373E01351133111406
-070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C
-976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9
-037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00
-000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205
-0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B
-1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437
-350E01232226351133111416171E0133323637113311230E011514163332363733150E01
-23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C
-A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24
-FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35
-FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35
-FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35
-FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001
-00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6
-5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679
-67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E
-00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646
-125906561278027703082020211F02370187010201140012002021033704870402041405
-05060606091226062912370638124606491258127A0675120B24240C702501251651A00C
-F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF
-C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F
-0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C
-0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507
-05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12
-17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00
-5D212303210323012E013534363332161514060727342623220615141633323613090207
-2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D
-F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD
-CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E
-37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F
-4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A
-01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600
-0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD
-32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B
-5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736
-2437353426272E01232206070E010723353E01372E01353436333216151406071E011503
-110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A
-5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56
-E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D
-4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761
-5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000
-0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F
-068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA
-08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D
-3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E
-2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D
-ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117
-004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117
-004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117
-008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117
-008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117
-008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D
-355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0
-40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236
-003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF
-003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B
-090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100
-B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B
-010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000
-05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028
-00934063411253125B1A6312730273129024B603B6240923200551000810082008030808
-1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C
-1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12
-17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED
-393931305D2901353E0137233533352335333534123332161715232E012322061D012115
-21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93
-016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00
-000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37
-07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C
-1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B
-31305D01211416171E013332363733150E0123200011100021320011272E01272E012322
-06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A
-9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100
-FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C
-040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600
-003700BB02910000011702410413FDC600384026040302360A0403023900392039403980
-39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35
-3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038
-4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F
-094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600
-003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103
-01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535
-00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01
-010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD
-D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A
-0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E
-010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001
-0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303
-0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF
-090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D
-33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31
-803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024
-00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000
-059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F
-0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000
-0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F
-5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018
-010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF
-0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227
-1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037
-003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04
-4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117
-019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70
-2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D
-0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F
-370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33
-2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177
-BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E
-05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003
-00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02
-4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239
-012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127
-FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508
-05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216
-002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E
-0902390258020378017703020203020114000600020314040405490546067C0573060405
-030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504
-65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123
-09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030
-0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047
-40130535060609013502030A350908054009133704B8FFC0401609133704050504030204
-0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001
-213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0
-FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603
-010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311
-2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000
-000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B
-A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B
-0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325
-293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403
-0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209
-D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B
-71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135
-090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE
-061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000
-FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E
-021B067518011834380948096F090309192209030810030822142311141023071B180714
-108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910
-C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135
-1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34
-359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D
-2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A
-641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014
-041925140204160B341F02261835011608251202191214081502141C272222290F29010F
-291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED
-1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526
-023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D
-CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A
-0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E
-FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006
-000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05
-01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A
-B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E
-014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116
-019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D
-FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116
-019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037
-0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10
-371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00
-90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239
-2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715
-1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE
-F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120
-1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016
-A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507
-01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505
-15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D
-1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133
-0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6
-0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C
-07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133
-2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426
-2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A
-201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647
-664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828
-264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E
-05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12
-3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D
-A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1
-04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B
-2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25
-181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED
-12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612
-072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A
-252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70
-28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5
-8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8
-045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6
-18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040
-10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736
-178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37
-00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F
-FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D
-71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180
-487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100
-0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8
-FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040
-260910370C001C004B005A006A00790006008D090F090103041304440455046504760406
-04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0
-08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9
-FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C
-0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F
-3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E
-4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000
-047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E
-24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C
-030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0
-400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F
-1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01
-353436373E0137352E01353436373523352115212206070E01151416171E013B01152122
-06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89
-4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467
-211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22
-2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216
-00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315
-3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10
-F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623
-220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0
-0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64
-03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037
-3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B
-12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01
-3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA
-5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057
-AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2
-045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901
-091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133
-3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F
-5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408
-4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606
-0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10
-3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001
-8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906
-010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01
-53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047
-1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010
-7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D
-5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406
-070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360
-4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806
-343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611
-045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28
-0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A
-291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4
-2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627
-2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E
-01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A
-5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462
-5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937
-7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB
-023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500
-FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF
-00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071
-FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8
-0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
-0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F
-073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D
-1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED
-31305D011406070E012B0135333236373E01353426272E01232111231121352115211121
-3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398
-BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF
-00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804
-0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C
-0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13
-000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D
-33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736
-243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE
-EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010
-4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF
-0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000
-02E207500236002C00000117008EFF240175001940130200104010501060107010050100
-100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1
-000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503
-28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501
-3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D
-013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01
-2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01
-0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24
-401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238
-052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00
-000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120
-1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6
-FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123
-2111213236373E01371406070E0123211121112311331121113311213216171E0107B432
-35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901
-C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001
-FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01
-07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F
-5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E
-01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079
-646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575
-07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002
-0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716
-191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E
-1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF
-E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F
-5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001
-8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901
-030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F
-1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902
-09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B
-0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D
-10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6
-FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000
-052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100
-71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D
-011406070E0123211121152111213216171E01073426272E01232111213236373E01052C
-554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C
-B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1
-021600250000000100C80000048A05D10005001F401003013504030000070F0701021403
-6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002
-000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013
-0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12
-392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705
-9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE
-9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E
-093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116
-09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33
-35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733
-350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112
-392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD
-2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01
-2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01
-0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C
-912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B
-18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051
-FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040
-3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409
-0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217
-392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607
-0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322
-06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63
-F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52
-A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818
-151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023
-0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8
-FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207
-14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133
-0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093
-40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D
-0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308
-030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18
-10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331
-305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB
-D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100
-000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500
-6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02
-1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504
-4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6
-5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A
-FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607
-0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B
-5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD
-051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F
-01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311
-210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6
-030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6
-FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216
-00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000
-000100C80000053B05D100070027401703350603010501140078090F0940095009030414
-056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA
-DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000
-FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801
-461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700
-03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40
-0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710
-FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F
-010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186
-05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1
-001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E
-150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17
-3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01
-272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107
-0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A
-8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC
-4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170
-B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C
-0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED
-392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1
-FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502
-0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33
-12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304
-EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930
-2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814
-05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333
-31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500
-000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814
-05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD
-32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC
-05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B
-1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123
-0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321
-11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01
-0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25
-2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055
-4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040
-150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D
-002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321
-113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD
-EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8
-23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416
-560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B
-ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111
-3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298
-C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061
-FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718
-34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C
-1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F
-3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E
-01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051
-F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF
-676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0
-000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C
-03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F
-6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023
-2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01
-03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC
-FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000
-04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305
-0506060F113440030103030012340F03000519150904060309045F050105120114007821
-0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD
-C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133
-04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0
-026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216
-0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039
-6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A
-223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F
-ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01
-37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE
-4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F
-B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959
-11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9
-00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37
-12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F
-35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931
-302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332
-36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E
-4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A
-045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F
-19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806
-10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009
-FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E
-1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11
-332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111
-3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101
-F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632
-045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF
-E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910
-37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E
-0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07
-0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417
-39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD
-3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711
-33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F
-1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02
-01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159
-631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D
-10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F
-06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B
-5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01
-1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534
-26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D
-49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342
-546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11
-110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02
-0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B
-0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311
-01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017
-0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102
-04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960
-190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33
-2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA
-FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6
-94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635
-1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713
-3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700
-001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239
-2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E
-01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924
-2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021
-003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303
-1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107
-0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307
-201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D
-1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503
-4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02
-030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20
-0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D
-012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2
-023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105
-0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED
-31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF
-006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005
-011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311
-210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A
-FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849
-014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00
-0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E
-013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951
-0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627
-D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000
-4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
-2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF
-003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622
-011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B
-0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E
-0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B
-33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332
-16171133113E0133321203342623220607111E0133323605112E01232206151416333236
-064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F
-2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D
-DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00
-FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B
-08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188
-0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304
-2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025
-0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902
-092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416
-171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE
-CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809
-1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED
-10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC
-045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108
-0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104
-5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121
-1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002
-000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16
-0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F
-FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E
-0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55
-FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33
-2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617
-05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025
-402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F
-3130013426272E012B0111333236373E01371406070E012321113311333216171E011333
-1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157
-334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000
-0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013
-090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F
-5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01
-037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A
-FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532
-0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313
-061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13
-03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F
-ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521
-2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314
-BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44
-000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03
-3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F
-10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206
-15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC
-D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD
-FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D
-0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603
-09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D
-ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637
-3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01
-AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C
-37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560
-250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28
-59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F
-2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6
-ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322
-0607112311233533353315211521113E01333216171416151406070602070E01232A0127
-35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303
-020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86
-FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682
-0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021
-006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037
-193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340
-090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B
-2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236
-3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E
-0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478
-021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077
-0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900
-30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409
-3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530
-35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED
-31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E
-01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B
-64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A
-183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A
-03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000
-06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8
-FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810
-F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E
-012B0111333236373E01371406070E0123211121112311331121113311333216171E0106
-3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157
-334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001
-00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201
-010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6
-ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123
-3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC
-63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682
-0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D
-FE64047F06150007001500BD404C04063406440650066006700606090307051903170546
-0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B
-0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102
-03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465
-0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933
-2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627
-331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D
-FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027
-0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A
-05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111
-330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B
-B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F
-3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9
-000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F
-0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC
-0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501
-2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015
-0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09
-0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF
-C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006
-0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED
-1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121
-0111330114062322263534363332160734262322061514163332360121152104FFF5FD72
-B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05
-D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D
-000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F
-333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F
-05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F
-ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F
-05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636
-166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130
-2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B
-86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3
-1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455
-0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF
-16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F
-121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607
-0E012322262735331E013332363534262B01353332363534262322060723353E01333216
-15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140
-964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62
-57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C
-05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F
-ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F
-0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D
-1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000
-092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322
-262735331E01333236373E01353426272E012322060711211521153E01333216171E0103
-75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634
-373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F
-000100F3023503A505DA000600414025560101030100012A020203630073000200000351
-0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D
-8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5
-021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B
-0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316
-04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01
-140623222635343637352E0135343633321615140607151E01033426232206151416171E
-01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261
-5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429
-64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D
-304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045
-0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22
-1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED
-5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207
-0E01232224272602353412373624333216171E01173E013534262735331E011514060110
-0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819
-144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863
-630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE
-DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A
-21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F
-2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31
-302B011000232200111000333216173332363534262735331E01151406071E0107342623
-22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA
-9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D
-D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03
-0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D
-050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322
-26272E01351133111416171E01333236373E0135113332363534262735331E0115140623
-052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2
-F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384
-000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509
-051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27
-050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123
-350E01232226351133111416171E0133323637113332363534262735331E011514062B01
-0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD
-8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042
-4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437
-09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523
-353E013534262322060723353E01333216034242426E2F3026211F251803134926516605
-F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144
-8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C
-001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A
-004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560
-0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217
-392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF
-00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510
-0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E
-103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303
-3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752
-0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B
-0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910
-370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104
-2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31
-30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1
-9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15
-44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040
-200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0
-40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED
-002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627
-2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A
-192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788
-912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006
-0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D
-002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2
-A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D
-0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00
-8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533
-1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55
-010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300
-13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A
-0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B
-D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623
-22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21
-42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7
-03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37
-11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED
-D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416
-33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2
-A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC
-A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016
-00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005
-020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E
-5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603
-4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600
-00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701
-0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003
-0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33
-D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327
-07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5
-F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052
-6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010
-6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102
-11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D
-71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E
-9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D
-001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E
-6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00
-0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623
-222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730
-58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022
-02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003
-CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E
-0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E
-5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714
-06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D
-231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805
-4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F
-1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003
-E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B
-0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E
-5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635
-370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C
-6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828
-2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900
-06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A
-0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011
-143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B
-5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406
-071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026
-211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF
-001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068
-FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500
-FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40
-1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A
-BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024
-00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1
-04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35
-3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100
-0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D
-030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116
-025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1
-04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35
-3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B
-3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229
-38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116
-024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82
-041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025
-0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116
-02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116
-0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236
-00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236
-0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000
-055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1
-041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500
-FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535
-FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00
-252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00
-001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068
-FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B
-002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600
-000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A
-B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C
-401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460
-068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025
-2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901
-0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A
-B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016
-400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048
-00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028
-00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF
-FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF
-00C80000053608010236002800000116025C26000013400D0201101020100200100C0203
-252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024
-2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600
-000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900
-000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026
-01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500
-5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E
-031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117
-0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000
-01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82
-02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82
-018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82
-05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82
-0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA
-080102360032000001170256009601750022400B0250340102503470340234B8FFC04009
-090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A
-E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000
-0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535
-005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C
-501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117
-024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1
-0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1
-05DA08010236003200000117025C009600000015400F0302202850288028030028240F03
-252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C
-201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000
-01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A
-FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500
-1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117
-024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D
-3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300
-212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D
-007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C
-0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236
-024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D
-35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02
-002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012
-400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116
-024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7
-008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236
-02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF
-0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF
-006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2
-FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82
-0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529
-080102360038000001170256006201750012400B01502301010023220C00252B35005D35
-FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF
-00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D
-0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160
-28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000
-0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500
-5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760
-27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062
-01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249
-00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000
-011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000
-011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116
-024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B
-FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4
-0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D
-FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025
-2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125
-2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A
-4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018
-401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236
-005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6
-07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35
-FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003
-006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524
-4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B
-2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632
-ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123
-1123350E01232202113436373E0133321617352135213533153301112E01232206151416
-3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C
-B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279
-2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498
-0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102
-24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F
-5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332
-16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9
-1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619
-17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000
-0002000000000000FF4C00780000000000000000000000000000000000000000037D0000
-01020103010401050106010701080109010A010B010C010D010E010F0110011101120113
-011401150116011701180119011A011B011C011D011E011F012001210122012301240125
-0126012701280129012A012B012C012D012E012F01300131013201330134013501360137
-01380139013A013B013C013D013E013F0140014101420143014401450146014701480149
-014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B
-015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D
-016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F
-0180018101820183018401850186018701880189018A018B018C018D018E018F01900191
-01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3
-01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5
-01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7
-01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9
-01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB
-01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD
-01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F
-0210021102120213021402150216021702180219021A021B021C021D021E021F02200221
-02220223022402250226022702280229022A022B022C022D022E022F0230023102320233
-023402350236023702380239023A023B023C023D023E023F024002410242024302440245
-0246024702480249024A024B024C024D024E024F02500251025202530254025502560257
-02580259025A025B025C025D025E025F0260026102620263026402650266026702680269
-026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B
-027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D
-028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F
-02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1
-02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3
-02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5
-02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7
-02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9
-02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B
-030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D
-031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F
-0330033103320333033403350336033703380339033A033B033C033D033E033F03400341
-03420343034403450346034703480349034A034B034C034D034E034F0350035103520353
-035403550356035703580359035A035B035C035D035E035F036003610362036303640365
-0366036703680369036A036B036C036D036E036F03700371037203730374037503760377
-03780379037A037B037C037D037E037F0380038103820383038403850386038703880389
-038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B
-039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD
-03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF
-03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1
-03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3
-03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5
-03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407
-04080409040A040B040C040D040E040F0410041104120413041404150416041704180419
-041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B
-042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D
-043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F
-0450045104520453045404550456045704580459045A045B045C045D045E045F04600461
-04620463046404650466046704680469046A046B046C046D046E046F0470047104720473
-047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E
-6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572
-7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573
-696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04
-706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03
-6F6E650374776F05746872656504666F757204666976650373697805736576656E056569
-676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07
-67726561746572087175657374696F6E0261740141014201430144014501460147014801
-49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B
-627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61
-7363696963697263756D0A756E64657273636F7265056772617665016101620163016401
-650166016701680169016A016B016C016D016E016F017001710172017301740175017601
-7701780179017A0962726163656C656674036261720A627261636572696768740A617363
-696974696C646509416469657265736973054172696E670843636564696C6C6106456163
-757465064E74696C6465094F646965726573697309556469657265736973066161637574
-65066167726176650B6163697263756D666C657809616469657265736973066174696C64
-65056172696E670863636564696C6C6106656163757465066567726176650B6563697263
-756D666C65780965646965726573697306696163757465066967726176650B6963697263
-756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176
-650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574
-65067567726176650B7563697263756D666C657809756469657265736973066461676765
-72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65
-74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F
-707972696768740974726164656D61726B056163757465086469657265736973086E6F74
-657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C
-657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961
-6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C
-0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C
-6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E
-6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D
-656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C
-697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64
-61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768
-740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67
-650979646965726573697309596469657265736973086672616374696F6E044575726F0D
-6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964
-616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261
-73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66
-6C65780B4563697263756D666C6578064161637574650945646965726573697306456772
-617665064961637574650B4963697263756D666C65780949646965726573697306496772
-617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465
-0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66
-6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E
-6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06
-4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A
-6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574
-650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065
-72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861
-6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762
-72657665066762726576650449646F740853636564696C6C610873636564696C6C610643
-61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F
-76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65
-6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E
-656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375
-7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61
-63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375
-7465065261637574650672616375746506526361726F6E06726361726F6E065361637574
-65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463
-61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465
-065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461
-0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370
-68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72
-0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563
-6F6E64096166696936313234380961666969363132383906483232303733064831383534
-3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761
-6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404
-63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445
-646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F
-740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578
-0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465
-07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E
-656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B
-636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C
-6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E
-67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564
-696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65
-7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D
-6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B
-5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B
-7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163
-757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61
-7368616375746509616E6F74656C65696106576772617665067767726176650657616375
-746506776163757465095764696572657369730977646965726573697306596772617665
-067967726176650D71756F74657265766572736564097261646963616C65780961666969
-303839343109657374696D61746564096F6E656569676874680C74687265656569676874
-68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363
-656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374
-6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F
-7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F
-730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861
-04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61
-707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553
-69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164
-696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65
-7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C
-6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105
-746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69
-63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567
-610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372
-6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969
-313030323309616669693130303531096166696931303035320961666969313030353309
-616669693130303534096166696931303035350961666969313030353609616669693130
-303537096166696931303035380961666969313030353909616669693130303630096166
-696931303036310961666969313030363209616669693130313435096166696931303031
-370961666969313030313809616669693130303139096166696931303032300961666969
-313030323109616669693130303232096166696931303032340961666969313030323509
-616669693130303236096166696931303032370961666969313030323809616669693130
-303239096166696931303033300961666969313030333109616669693130303332096166
-696931303033330961666969313030333409616669693130303335096166696931303033
-360961666969313030333709616669693130303338096166696931303033390961666969
-313030343009616669693130303431096166696931303034320961666969313030343309
-616669693130303434096166696931303034350961666969313030343609616669693130
-303437096166696931303034380961666969313030343909616669693130303635096166
-696931303036360961666969313030363709616669693130303638096166696931303036
-390961666969313030373009616669693130303732096166696931303037330961666969
-313030373409616669693130303735096166696931303037360961666969313030373709
-616669693130303738096166696931303037390961666969313030383009616669693130
-303831096166696931303038320961666969313030383309616669693130303834096166
-696931303038350961666969313030383609616669693130303837096166696931303038
-380961666969313030383909616669693130303930096166696931303039310961666969
-313030393209616669693130303933096166696931303039340961666969313030393509
-616669693130303936096166696931303039370961666969313030373109616669693130
-303939096166696931303130300961666969313031303109616669693130313032096166
-696931303130330961666969313031303409616669693130313035096166696931303130
-360961666969313031303709616669693130313038096166696931303130390961666969
-313031313009616669693130313933096166696931303035300961666969313030393809
-616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C
-74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65
-7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65
-696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068
-35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568
-6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62
-096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835
-393108676C79706835393208676C79706835393308676C79706835393408676C79706835
-393508676C79706835393608676C79706835393708676C79706835393808676C79706835
-393908676C79706836303008676C79706836303108676C79706836303208676C79706836
-303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F
-6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061
-63697263756D666C65786163757465104163697263756D666C6578677261766510616369
-7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461
-63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465
-106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F
-77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162
-7265766561637574650B41627265766567726176650B61627265766567726176650F4162
-72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665
-74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272
-657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F
-6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972
-63756D666C65786163757465106563697263756D666C6578616375746510456369726375
-6D666C65786772617665106563697263756D666C65786772617665144563697263756D66
-6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563
-697263756D666C657874696C6465106563697263756D666C657874696C64651345636972
-63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A
-49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74
-62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79
-70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861
-74616671616D617473056869726971057473657265057365676F6C057061746168067161
-6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166
-0472616665057061736571077368696E646F740673696E646F7408736F66706173757104
-616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865
-740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65
-6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C
-70650270650A66696E616C747361646905747361646903716F660472657368047368696E
-0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265
-73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F
-740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564
-686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73
-68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410
-7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174
-7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461
-6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461
-676573680974657464616765736809796F646461676573680E66696E616C6B6166646167
-657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809
-6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368
-0870656461676573680B747361646964616765736809716F666461676573680A72657368
-6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07
-62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572
-6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674
-746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338
-380961666969353734303309616669693537343037096166696935373430390961666969
-353734343009616669693537343531096166696935373435320961666969353734353309
-616669693537343534096166696935373435350961666969353734353609616669693537
-343537096166696935373435380961666969353733393209616669693537333933096166
-696935373339340961666969353733393509616669693537333936096166696935373339
-370961666969353733393809616669693537333939096166696935373430300961666969
-353734303109616669693537333831096166696935373436310961666969363331363709
-616669693537343539096166696935373534330961666969353735333409616669693537
-343934096166696936323834330961666969363238343409616669693632383435096166
-696936343234300961666969363432343109616669693633393534096166696935373338
-320961666969363432343209616669693632383831096166696935373530340961666969
-353733363909616669693537333730096166696935373337310961666969353733373209
-616669693537333733096166696935373337340961666969353733373509616669693537
-333931096166696935373437310961666969353734363009616669693532323538096166
-696935373530360961666969363239353809616669693632393536096166696935323935
-370961666969353735303509616669693632383839096166696936323838370961666969
-363238383809616669693537353037096166696936323936310961666969363239353909
-616669693632393630096166696935373530380961666969363239363209616669693537
-353637096166696936323936340961666969353233303509616669693532333036096166
-696935373530390961666969363239363709616669693632393635096166696936323936
-360961666969353735353509616669693532333634096166696936333735330961666969
-363337353409616669693633373539096166696936333736330961666969363337393509
-616669693632383931096166696936333830380961666969363239333809616669693633
-383130096166696936323934320961666969363239343709616669693633383133096166
-696936333832330961666969363338323409616669693633383333096166696936333834
-340961666969363238383209616669693632383833096166696936323838340961666969
-363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A
-4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375
-7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665
-106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F
-7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874
-696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74
-62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465
-0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68
-6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C
-64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74
-62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665>
-<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568
-6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75
-686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D
-55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832
-08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61
-626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974
-696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009
-0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6
-FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039
-FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059
-FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0
-FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6
-FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039
-FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A
-FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5
-FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB
-FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2
-FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C
-FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E
-FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052
-FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010
-FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090
-FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052
-FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0
-FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A
-FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037
-FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064
-FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6
-FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D
-FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044
-FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB
-FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037
-FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C
-FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4
-FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059
-FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010
-FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026
-FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046
-FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058
-FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090
-FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0
-FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090
-FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E
-FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C
-FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1
-FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E
-FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058
-FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0
-FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032
-FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064
-FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1
-FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E
-FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A
-FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055
-FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0
-FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2
-FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044
-FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091
-FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2
-FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C
-FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037
-FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010
-FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060
-0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059
-FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1
-FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C
-FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059
-FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C
-FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0
-FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010
-FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F
-FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0
-FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F
-FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1
-FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A
-FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2
-FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047
-FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0
-FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010
-FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054
-FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF
-FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F
-FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB
-FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB
-FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036
-FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D
-FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D
-FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036
-FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D
-FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D
-FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011
-FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056
-FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F
-FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C
-006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039
-FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C
-FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3
-06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205
-05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E
-801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608
-2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0
-3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D
-010104050030819E311F301D060355040A1316566572695369676E205472757374204E65
-74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603
-55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520
-526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544
-2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030
-30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269
-5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967
-6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D
-70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249
-4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30
-819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D
-2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A
-B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881
-1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797
-6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100
-3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F
-5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09
-16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8
-C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43
-ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30
-1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603
-55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369
-676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355
-040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572
-695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331
-3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053
-74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054
-72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920
-41434345505445442C20286329393720566572695369676E2C20496E632E311730150603
-55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E
-657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD
-8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC
-F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B
-D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265
-E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181
-006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508
-2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1
-5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E
-A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210
-7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130
-0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C
-20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20
-536F667477617265205075626C697368657273204341301E170D39383034313630303030
-30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74
-65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603
-55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075
-626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63
-6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49
-41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61
-73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E
-207632310B3009060355040613025553311330110603550408130A57617368696E67746F
-6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73
-6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420
-436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030
-8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0
-D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9
-6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765
-DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C
-4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F
-7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2
-A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64
-E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B
-0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338
-CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355
-040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967
-6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182
-0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116
-0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A
-0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E
-636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469
-66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E
-642069747320757365206973207374726963746C790A7375626A65637420746F2C207468
-6520566572695369676E2043657274696669636174696F6E205072616374696365205374
-6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65
-20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470
-733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043
-50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C
-20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C
-204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967
-6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874
-732052657365727665642E204345525441494E0A57415252414E5449455320444953434C
-41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E
-473A2054484520555345204F462054484953204345525449464943415445204953205354
-524943544C59205355424A45435420544F205448450A564552495349474E204345525449
-4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953
-5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D
-504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544
-494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52
-204649544E45535320464F52204120504152544943554C415220505552504F53452C2041
-4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54
-49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D
-414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74
-656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76
-657269666965645375626A656374417474726962757465730A657874656E73696F6E2076
-616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375
-7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941
-2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73
-69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030
-80060B6086480186F845010701013080302806082B06010505070201161C68747470733A
-2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056
-3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320
-43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20
-286329393720566572695369676E0000000000003016060A2B06010401823702011B0408
-30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B
-25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F
-AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F
-228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728
-2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713
-08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133
-3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172
-65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06
-082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401
-8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630
-1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A
-2B06010401823702010C31443042A01A801800560065007200640061006E006100200046
-006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74
-727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F
-B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7
-CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5
-E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4
-836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF
-88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F
-86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA
-0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030
-8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06
-0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504
-0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E
-2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B
-132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953
-69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608
-2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01
-0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609
-2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648
-86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA
-BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D
-41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342
-DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000>
-] def
-/CharStrings 893 dict dup begin
-/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def
-/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def
-/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def
-/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def
-/period 17 def /slash 18 def /zero 19 def /one 20 def
-/two 21 def /three 22 def /four 23 def /five 24 def
-/six 25 def /seven 26 def /eight 27 def /nine 28 def
-/colon 29 def /semicolon 30 def /less 31 def /equal 32 def
-/greater 33 def /question 34 def /at 35 def /A 36 def
-/B 37 def /C 38 def /D 39 def /E 40 def
-/F 41 def /G 42 def /H 43 def /I 44 def
-/J 45 def /K 46 def /L 47 def /M 48 def
-/N 49 def /O 50 def /P 51 def /Q 52 def
-/R 53 def /S 54 def /T 55 def /U 56 def
-/V 57 def /W 58 def /X 59 def /Y 60 def
-/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def
-/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def
-/b 69 def /c 70 def /d 71 def /e 72 def
-/f 73 def /g 74 def /h 75 def /i 76 def
-/j 77 def /k 78 def /l 79 def /m 80 def
-/n 81 def /o 82 def /p 83 def /q 84 def
-/r 85 def /s 86 def /t 87 def /u 88 def
-/v 89 def /w 90 def /x 91 def /y 92 def
-/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def
-/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def
-/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def
-/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def
-/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def
-/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def
-/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def
-/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def
-/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def
-/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def
-/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def
-/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def
-/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def
-/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def
-/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def
-/summation 153 def /product 154 def /pi1 155 def /integral 156 def
-/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def
-/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def
-/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def
-/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def
-/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def
-/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def
-/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def
-/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def
-/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def
-/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def
-/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def
-/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def
-/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def
-/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def
-/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def
-/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def
-/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def
-/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def
-/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def
-/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def
-/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def
-/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def
-/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def
-/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def
-/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def
-/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def
-/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def
-/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def
-/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def
-/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def
-/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def
-/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def
-/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def
-/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def
-/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def
-/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def
-/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def
-/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def
-/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def
-/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def
-/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def
-/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def
-/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def
-/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def
-/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def
-/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def
-/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def
-/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def
-/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def
-/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def
-/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def
-/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def
-/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def
-/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def
-/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def
-/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def
-/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def
-/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def
-/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def
-/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def
-/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def
-/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def
-/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def
-/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def
-/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def
-/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def
-/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def
-/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def
-/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def
-/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def
-/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def
-/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def
-/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def
-/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def
-/zeta 453 def /eta 454 def /theta 455 def /iota 456 def
-/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def
-/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def
-/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def
-/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def
-/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def
-/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def
-/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def
-/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def
-/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def
-/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def
-/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def
-/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def
-/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def
-/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def
-/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def
-/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def
-/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def
-/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def
-/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def
-/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def
-/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def
-/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def
-/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def
-/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def
-/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def
-/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def
-/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def
-/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def
-/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def
-/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def
-/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def
-/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def
-/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def
-/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def
-/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def
-/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def
-/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def
-/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def
-/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def
-/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def
-/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def
-/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def
-/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def
-/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def
-/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def
-/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def
-/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def
-/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def
-/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def
-/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def
-/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def
-/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def
-/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def
-/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def
-/bet 673 def /gimel 674 def /dalet 675 def /he 676 def
-/vav 677 def /zayin 678 def /het 679 def /tet 680 def
-/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def
-/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def
-/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def
-/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def
-/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def
-/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def
-/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def
-/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def
-/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def
-/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def
-/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def
-/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def
-/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def
-/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def
-/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def
-/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def
-/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def
-/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def
-/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def
-/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def
-/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def
-/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def
-/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def
-/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def
-/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def
-/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def
-/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def
-/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def
-/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def
-/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def
-/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def
-/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def
-/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def
-/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def
-/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def
-/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def
-/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def
-/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def
-/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def
-/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def
-/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def
-/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def
-/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def
-/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def
-/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def
-/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def
-/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def
-/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def
-/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def
-/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def
-/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def
-/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def
-/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def
-
-end readonly def
-FontName currentdict end definefont pop
-%%EndFont
-%%EndProlog
-mpldict begin
-13.5 175.5 translate
-585 441 0 0 clipbox
-% polygon
-1.000 setgray
-1.000 setlinewidth
-0 setlinejoin
-2 setlinecap
-[] 0 setdash
-0 0 m
-0 441 l
-585 441 l
-585 0 l
-closepath
-gsave
-fill
-grestore
-stroke
-% polygon
-0.000 setgray
-73.125 44.1 m
-73.125 396.9 l
-526.5 396.9 l
-526.5 44.1 l
-closepath
-gsave
-1.000 setgray
-fill
-grestore
-stroke
-% draw_lines
-0.000 0.000 1.000 setrgbcolor
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 341.084 m
-76.667 340.708 l
-80.209 339.574 l
-83.751 337.667 l
-87.293 334.958 l
-90.835 331.405 l
-94.377 326.949 l
-97.919 321.506 l
-101.461 314.959 l
-105.003 307.144 l
-108.545 297.819 l
-112.087 286.607 l
-115.629 272.882 l
-119.171 255.463 l
-122.713 231.623 l
-126.255 191.605 l
-129.797 103.027 l
-133.339 189.379 l
-136.881 202.932 l
-140.423 203.284 l
-143.965 191.777 l
-147.507 147.593 l
-151.049 193.483 l
-154.591 200.946 l
-158.133 199.387 l
-161.675 188.957 l
-165.217 143.486 l
-168.759 180.998 l
-172.301 191.170 l
-175.843 191.200 l
-179.385 183.119 l
-182.927 155.818 l
-186.469 166.661 l
-190.011 181.010 l
-193.553 182.971 l
-197.095 177.076 l
-200.637 157.567 l
-204.179 150.322 l
-207.721 171.053 l
-211.263 175.126 l
-214.805 171.229 l
-218.347 156.530 l
-221.889 128.062 l
-225.431 161.185 l
-228.973 167.631 l
-232.515 165.609 l
-236.057 154.358 l
-239.599 74.463 l
-243.141 151.102 l
-246.683 160.365 l
-250.225 160.169 l
-253.767 151.622 l
-257.309 119.107 l
-260.851 140.326 l
-264.393 153.187 l
-267.935 154.839 l
-271.477 148.556 l
-275.019 126.619 l
-278.561 127.980 l
-282.103 145.946 l
-285.645 149.548 l
-289.187 145.259 l
-292.729 129.081 l
-296.271 111.844 l
-299.812 138.465 l
-303.354 144.220 l
-306.896 141.769 l
-310.438 129.466 l
-313.980 80.114 l
-317.522 130.512 l
-321.064 138.774 l
-324.606 138.087 l
-328.148 128.702 l
-331.690 86.924 l
-335.232 121.741 l
-338.774 133.118 l
-342.316 134.191 l
-345.858 127.176 l
-349.400 101.638 l
-352.942 111.541 l
-356.484 127.140 l
-360.026 130.041 l
-363.568 125.064 l
-367.110 106.776 l
-370.652 98.551 l
-374.194 120.692 l
-377.736 125.577 l
-381.278 122.435 l
-384.820 108.642 l
-388.362 78.089 l
-391.904 113.570 l
-395.446 120.713 l
-398.988 119.291 l
-402.530 108.713 l
-406.072 43.008 l
-409.614 105.462 l
-413.156 115.325 l
-416.698 115.577 l
-420.240 107.501 l
-423.782 76.568 l
-427.324 95.836 l
-430.866 109.233 l
-434.408 111.171 l
-437.950 105.155 l
-441.492 83.904 l
-445.034 83.647 l
-448.576 102.154 l
-452.118 105.845 l
-455.660 101.582 l
-459.202 85.611 l
-462.744 66.167 l
-466.286 93.605 l
-469.828 99.169 l
-473.370 96.397 l
-476.912 83.814 l
-480.454 27.509 l
-483.996 82.648 l
-487.538 90.217 l
-491.080 88.573 l
-494.622 78.102 l
-498.164 37.173 l
-501.706 66.931 l
-505.248 76.324 l
-508.790 74.675 l
-512.332 64.142 l
-515.874 34.431 l
-519.416 35.180 l
-522.958 37.945 l
-stroke
-grestore
-% draw_lines
-1.000 0.000 0.000 setrgbcolor
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 344.638 m
-76.667 344.021 l
-80.209 342.148 l
-83.751 338.946 l
-87.293 334.276 l
-90.835 327.903 l
-94.377 319.427 l
-97.919 308.120 l
-101.461 292.475 l
-105.003 268.454 l
-108.545 213.072 l
-112.087 218.519 l
-115.629 259.152 l
-119.171 273.925 l
-122.713 280.520 l
-126.255 282.309 l
-129.797 280.332 l
-133.339 274.683 l
-136.881 264.621 l
-140.423 247.681 l
-143.965 212.929 l
-147.507 184.774 l
-151.049 218.234 l
-154.591 243.484 l
-158.133 254.844 l
-161.675 259.959 l
-165.217 260.773 l
-168.759 257.793 l
-172.301 250.665 l
-175.843 237.757 l
-179.385 212.685 l
-182.927 178.994 l
-186.469 -424.877 l
-190.011 217.746 l
-193.553 235.408 l
-197.095 243.801 l
-200.637 247.028 l
-204.179 246.206 l
-207.721 241.360 l
-211.263 231.429 l
-214.805 212.332 l
-218.347 138.495 l
-221.889 185.787 l
-225.431 183.612 l
-228.973 217.038 l
-232.515 229.873 l
-236.057 235.734 l
-239.599 237.005 l
-243.141 234.198 l
-246.683 226.722 l
-250.225 211.859 l
-253.767 169.476 l
-257.309 186.593 l
-260.851 173.823 l
-264.393 194.732 l
-267.935 216.079 l
-271.477 225.369 l
-275.019 228.930 l
-278.561 228.116 l
-282.103 222.822 l
-285.645 211.246 l
-289.187 183.443 l
-292.729 181.050 l
-296.271 187.513 l
-299.812 178.164 l
-303.354 199.915 l
-306.896 214.825 l
-310.438 221.217 l
-313.980 222.524 l
-317.522 219.301 l
-321.064 210.468 l
-324.606 190.157 l
-328.148 169.944 l
-331.690 189.675 l
-335.232 181.582 l
-338.774 172.547 l
-342.316 202.663 l
-345.858 213.205 l
-349.400 216.995 l
-352.942 215.878 l
-356.484 209.487 l
-360.026 194.151 l
-363.568 141.332 l
-367.110 188.290 l
-370.652 190.018 l
-374.194 168.185 l
-377.736 185.194 l
-381.278 203.994 l
-384.820 211.108 l
-388.362 212.316 l
-391.904 208.247 l
-395.446 196.681 l
-398.988 154.875 l
-402.530 184.658 l
-406.072 192.833 l
-409.614 186.663 l
-413.156 -460.889 l
-416.698 191.640 l
-420.240 204.277 l
-423.782 208.351 l
-427.324 206.663 l
-430.866 198.243 l
-434.408 172.764 l
-437.950 178.651 l
-441.492 193.308 l
-445.034 193.407 l
-448.576 179.767 l
-452.118 167.615 l
-455.660 195.351 l
-459.202 203.595 l
-462.744 204.597 l
-466.286 199.048 l
-469.828 181.359 l
-473.370 168.699 l
-476.912 192.336 l
-480.454 196.765 l
-483.996 191.640 l
-487.538 166.317 l
-491.080 180.819 l
-494.622 197.324 l
-498.164 201.811 l
-501.706 199.150 l
-505.248 186.669 l
-508.790 146.473 l
-512.332 190.158 l
-515.874 198.473 l
-519.416 197.844 l
-522.958 187.711 l
-stroke
-grestore
-% draw_lines
-0.000 0.500 0.000 setrgbcolor
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 344.646 m
-76.667 344.163 l
-80.209 342.697 l
-83.751 340.206 l
-87.293 336.608 l
-90.835 331.765 l
-94.377 325.450 l
-97.919 317.263 l
-101.461 306.406 l
-105.003 290.855 l
-108.545 260.984 l
-112.087 257.910 l
-115.629 270.113 l
-119.171 268.975 l
-122.713 260.468 l
-126.255 240.233 l
-129.797 221.580 l
-133.339 244.142 l
-136.881 246.939 l
-140.423 241.790 l
-143.965 226.836 l
-147.507 180.268 l
-151.049 224.403 l
-154.591 230.521 l
-158.133 227.898 l
-161.675 216.607 l
-165.217 170.426 l
-168.759 207.344 l
-172.301 217.011 l
-175.843 216.608 l
-179.385 208.152 l
-182.927 180.524 l
-186.469 191.080 l
-190.011 205.174 l
-193.553 206.908 l
-197.095 200.811 l
-200.637 181.119 l
-204.179 173.710 l
-207.721 194.292 l
-211.263 198.229 l
-214.805 194.208 l
-218.347 179.396 l
-221.889 150.824 l
-225.431 183.851 l
-228.973 190.209 l
-232.515 188.106 l
-236.057 176.779 l
-239.599 96.814 l
-243.141 173.388 l
-246.683 182.589 l
-250.225 182.337 l
-253.767 173.737 l
-257.309 141.172 l
-260.851 162.345 l
-264.393 175.162 l
-267.935 176.773 l
-271.477 170.451 l
-275.019 148.477 l
-278.561 149.804 l
-282.103 167.738 l
-285.645 171.309 l
-289.187 166.991 l
-292.729 150.785 l
-296.271 133.522 l
-299.812 160.118 l
-303.354 165.850 l
-306.896 163.377 l
-310.438 151.052 l
-313.980 101.679 l
-317.522 152.059 l
-321.064 160.303 l
-324.606 159.598 l
-328.148 150.196 l
-331.690 108.402 l
-335.232 143.204 l
-338.774 154.567 l
-342.316 155.626 l
-345.858 148.598 l
-349.400 123.046 l
-352.942 132.938 l
-356.484 148.525 l
-360.026 151.416 l
-363.568 146.427 l
-367.110 128.129 l
-370.652 119.895 l
-374.194 142.026 l
-377.736 146.903 l
-381.278 143.752 l
-384.820 129.951 l
-388.362 99.390 l
-391.904 134.864 l
-395.446 141.999 l
-398.988 140.570 l
-402.530 129.986 l
-406.072 64.275 l
-409.614 126.723 l
-413.156 136.580 l
-416.698 136.826 l
-420.240 128.745 l
-423.782 97.807 l
-427.324 117.071 l
-430.866 130.463 l
-434.408 132.397 l
-437.950 126.376 l
-441.492 105.122 l
-445.034 104.861 l
-448.576 123.364 l
-452.118 127.052 l
-455.660 122.786 l
-459.202 106.813 l
-462.744 87.365 l
-466.286 114.801 l
-469.828 120.363 l
-473.370 117.588 l
-476.912 105.003 l
-480.454 48.696 l
-483.996 103.833 l
-487.538 111.400 l
-491.080 109.755 l
-494.622 99.282 l
-498.164 58.352 l
-501.706 88.110 l
-505.248 97.502 l
-508.790 95.852 l
-512.332 85.318 l
-515.874 55.606 l
-519.416 56.356 l
-522.958 59.120 l
-stroke
-grestore
-% draw_lines
-0.750 0.000 0.750 setrgbcolor
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 346.280 m
-76.667 345.676 l
-80.209 343.845 l
-83.751 340.736 l
-87.293 336.248 l
-90.835 330.224 l
-94.377 322.407 l
-97.919 312.371 l
-101.461 299.341 l
-105.003 281.601 l
-108.545 253.253 l
-112.087 220.282 l
-115.629 233.441 l
-119.171 220.121 l
-122.713 198.594 l
-126.255 213.622 l
-129.797 232.741 l
-133.339 242.085 l
-136.881 243.804 l
-140.423 237.025 l
-143.965 203.960 l
-147.507 230.388 l
-151.049 244.073 l
-154.591 246.690 l
-158.133 241.191 l
-161.675 219.125 l
-165.217 223.903 l
-168.759 241.739 l
-172.301 245.662 l
-175.843 241.477 l
-179.385 224.009 l
-182.927 215.555 l
-186.469 238.476 l
-190.011 243.766 l
-193.553 240.795 l
-197.095 226.371 l
-200.637 204.635 l
-204.179 234.918 l
-207.721 241.638 l
-211.263 239.805 l
-214.805 227.701 l
-218.347 187.148 l
-221.889 231.207 l
-225.431 239.460 l
-228.973 238.716 l
-232.515 228.509 l
-236.057 142.756 l
-239.599 227.342 l
-243.141 237.284 l
-246.683 237.602 l
-250.225 229.015 l
-253.767 188.027 l
-257.309 223.261 l
-260.851 235.117 l
-264.393 236.489 l
-267.935 229.330 l
-271.477 199.520 l
-275.019 218.852 l
-278.561 232.949 l
-282.103 235.386 l
-285.645 229.515 l
-289.187 205.946 l
-292.729 213.941 l
-296.271 230.761 l
-299.812 234.290 l
-303.354 229.607 l
-306.896 210.254 l
-310.438 208.235 l
-313.980 228.529 l
-317.522 233.195 l
-321.064 229.626 l
-324.606 213.410 l
-328.148 201.185 l
-331.690 226.226 l
-335.232 232.097 l
-338.774 229.588 l
-342.316 215.852 l
-345.858 191.524 l
-349.400 223.818 l
-352.942 230.985 l
-356.484 229.500 l
-360.026 217.812 l
-363.568 174.865 l
-367.110 221.263 l
-370.652 229.851 l
-374.194 229.371 l
-377.736 219.429 l
-381.278 138.835 l
-384.820 218.509 l
-388.362 228.686 l
-391.904 229.202 l
-395.446 220.789 l
-398.988 179.721 l
-402.530 215.482 l
-406.072 227.478 l
-409.614 228.996 l
-413.156 221.953 l
-416.698 191.902 l
-420.240 212.081 l
-423.782 226.215 l
-427.324 228.754 l
-430.866 222.960 l
-434.408 199.153 l
-437.950 208.147 l
-441.492 224.884 l
-445.034 228.476 l
-448.576 223.841 l
-452.118 204.278 l
-455.660 203.420 l
-459.202 223.466 l
-462.744 228.160 l
-466.286 224.618 l
-469.828 208.221 l
-473.370 197.415 l
-476.912 221.941 l
-480.454 227.805 l
-483.996 225.308 l
-487.538 211.417 l
-491.080 189.040 l
-494.622 220.282 l
-498.164 227.408 l
-501.706 225.922 l
-505.248 214.102 l
-508.790 174.825 l
-512.332 218.457 l
-515.874 226.966 l
-519.416 226.472 l
-522.958 216.418 l
-stroke
-grestore
-% text
-0.000 setgray
-/Verdana findfont
-18.000 scalefont
-setfont
-119.312 403.956 m
-0 4 rmoveto
-(Smoothing window in frequency-domain) show
-% text
-/Verdana findfont
-14.000 scalefont
-setfont
-62.469 30.1 m
-(0.0) show
-% line
-0.500 setlinewidth
-0 setlinecap
-163.800 44.100 m 163.800 48.100 l
-stroke
-% line
-163.800 392.900 m 163.800 396.900 l
-stroke
-% text
-153.175 30.1 m
-(0.1) show
-% line
-254.475 44.100 m 254.475 48.100 l
-stroke
-% line
-254.475 392.900 m 254.475 396.900 l
-stroke
-% text
-243.85 30.1 m
-(0.2) show
-% line
-345.150 44.100 m 345.150 48.100 l
-stroke
-% line
-345.150 392.900 m 345.150 396.900 l
-stroke
-% text
-334.994 30.1 m
-(0.3) show
-% line
-435.825 44.100 m 435.825 48.100 l
-stroke
-% line
-435.825 392.900 m 435.825 396.900 l
-stroke
-% text
-424.825 30.1 m
-(0.4) show
-% text
-515.844 30.1 m
-(0.5) show
-% text
-221.875 11.1 m
-0 3 rmoveto
-(Normalized Frequency) show
-% text
-37.062 39.1 m
-(-100) show
-% line
-73.125 91.140 m 77.125 91.140 l
-stroke
-% line
-522.500 91.140 m 526.500 91.140 l
-stroke
-% text
-47.062 86.14 m
-(-80) show
-% line
-73.125 138.180 m 77.125 138.180 l
-stroke
-% line
-522.500 138.180 m 526.500 138.180 l
-stroke
-% text
-47.062 133.18 m
-(-60) show
-% line
-73.125 185.220 m 77.125 185.220 l
-stroke
-% line
-522.500 185.220 m 526.500 185.220 l
-stroke
-% text
-47.062 180.22 m
-(-40) show
-% line
-73.125 232.260 m 77.125 232.260 l
-stroke
-% line
-522.500 232.260 m 526.500 232.260 l
-stroke
-% text
-47.062 227.26 m
-(-20) show
-% line
-73.125 279.300 m 77.125 279.300 l
-stroke
-% line
-522.500 279.300 m 526.500 279.300 l
-stroke
-% text
-61.812 274.3 m
-(0) show
-% line
-73.125 326.340 m 77.125 326.340 l
-stroke
-% line
-522.500 326.340 m 526.500 326.340 l
-stroke
-% text
-53.062 321.34 m
-(20) show
-% line
-73.125 373.380 m 77.125 373.380 l
-stroke
-% line
-522.500 373.380 m 526.500 373.380 l
-stroke
-% text
-52.938 368.38 m
-(40) show
-% text
-32.062 168.461 m
-gsave
-90 rotate
-0 3 rmoveto
-(Magnitude \(dB\)) show
-grestore
-% polygon
-1.000 setlinewidth
-2 setlinecap
-346.389 279.264 m
-346.389 389.844 l
-517.433 389.844 l
-517.433 279.264 l
-closepath
-gsave
-1.000 setgray
-fill
-grestore
-stroke
-% draw_lines
-0.000 0.000 1.000 setrgbcolor
-362.443 371.629 m
-369.999 371.629 l
-377.555 371.629 l
-385.111 371.629 l
-stroke
-% draw_lines
-1.000 0.000 0.000 setrgbcolor
-362.443 349.712 m
-369.999 349.712 l
-377.555 349.712 l
-385.111 349.712 l
-stroke
-% draw_lines
-0.000 0.500 0.000 setrgbcolor
-362.443 325.795 m
-369.999 325.795 l
-377.555 325.795 l
-385.111 325.795 l
-stroke
-% draw_lines
-0.750 0.000 0.750 setrgbcolor
-362.443 299.479 m
-369.999 299.479 l
-377.555 299.479 l
-385.111 299.479 l
-stroke
-% text
-0.000 setgray
-/Verdana findfont
-24.000 scalefont
-setfont
-394.179 362.629 m
-(Blackman) show
-% text
-394.179 340.712 m
-(Bartlett) show
-% text
-394.179 314.795 m
-0 5 rmoveto
-(Hanning) show
-% text
-394.179 288.479 m
-0 5 rmoveto
-(Hamming) show
-
-end
-showpage
diff --git a/doc/numpybook/Figures/fig2bw.eps b/doc/numpybook/Figures/fig2bw.eps
deleted file mode 100644
index f6ab19621..000000000
--- a/doc/numpybook/Figures/fig2bw.eps
+++ /dev/null
@@ -1,4919 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: fig2bw.eps
-%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/
-%%CreationDate: Fri Jan 6 00:30:17 2006
-%%BoundingBox: 13 175 598 616
-%%EndComments
-%%BeginProlog
-/mpldict 7 dict def
-mpldict begin
-/m { moveto } bind def
-/l { lineto } bind def
-/r { rlineto } bind def
-/box {
-m
-1 index 0 r
-0 exch r
-neg 0 r
-closepath
-} bind def
-/clipbox {
-box
-clip
-newpath
-} bind def
-/ellipse {
-newpath
-matrix currentmatrix 7 1 roll
-translate
-scale
-0 0 1 5 3 roll arc
-setmatrix
-closepath
-} bind def
-%%BeginFont: Verdana
-%!PS-TrueType-1.0-1.0
-8 dict begin
-/FontName /Verdana def
-/FontMatrix [1 0 0 1 0 0] def
-/FontType 42 def
-/Encoding StandardEncoding def
-/FontBBox [-102 -423 2963 2049] def
-/PaintType 0 def
-/FontInfo 7 dict dup begin
-/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def
-/FamilyName (Verdana) def
-/FullName (Verdana) def
-/version (Version 2.35) def
-/isFixedPitch false def
-/UnderlinePosition -180 def
-/UnderlineThickness 120 def
-end readonly def
-/sfnts [
-<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F
-00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4
-000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198
-6670676DEE371553000021740000013867617370001700090000021000000010676C7966
-01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C
-0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444
-00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC
-6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374
-C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000
-16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801
-00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000
-00000000000000000000037D00010000037D00620007006B000500020010002F00380000
-0495013F0003000100010411019000050000059A053300000125059A0533000003A00078
-02A70800020B0604030504040204000002870000000000000000000000004D5320200040
-0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001
-FFFF00030000002801E60001000000000000004300000001000000000001000700430001
-0000000000020007004A0001000000000003002F00510001000000000004000700800001
-000000000005000C00870001000000000006000700930001000000000007002F009A0003
-000104030002000C00C90003000104050002001000D50003000104060002000C00E50003
-000104070002001000F10003000104080002001001010003000104090000008601110003
-000104090001000E01970003000104090002000E01A50003000104090003005E01B30003
-000104090004000E021100030001040900050018021F0003000104090006000E02370003
-000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003
-0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003
-000104130002001202E50003000104140002000C02F70003000104150002001003030003
-000104160002000C03130003000104190002000E031F00030001041B00020010032D0003
-0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003
-0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003
-00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064
-61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C
-6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F
-736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372
-6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264
-616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270
-6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900
-6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03
-BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400
-6100740061002000A9002000310039003900360020004D006900630072006F0073006F00
-66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00
-6C0020005200690067006800740073002000520065007300650072007600650064005600
-65007200640061006E00610052006500670075006C00610072004D006900630072006F00
-73006F00660074003A00560065007200640061006E006100200052006500670075006C00
-610072003A00560065007200730069006F006E0020003100200028004D00690063007200
-6F0073006F00660074002900560065007200640061006E00610056006500720073006900
-6F006E00200032002E0033003500560065007200640061006E0061005600650072006400
-61006E006100200069007300200061002000740072006100640065006D00610072006B00
-20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000
-6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100
-61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200
-6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100
-6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04
-47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00
-4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00
-740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00
-61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A
-000001060000010000000000000001020000000200000000000000000000000000000001
-0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324
-25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748
-494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B
-6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F
-909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2
-B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5
-D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF
-02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85
-1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116
-21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA
-25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303
-03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026
-203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202
-2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01
-FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000
-0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077
-E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74
-DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000
-000002380000023800000000000000000000023800000242026800000000000000000000
-000002B203640368037600000000000000000000000000000000036A0000036A00000000
-000000000000000000000000000000000358000003580000000000000000000000000000
-0000000000000000034400000000000300A300840085037C009600E60086008E008B009D
-00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3
-00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC
-00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A
-0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A
-0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104
-010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E
-014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A
-015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E
-01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D
-016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9
-00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125
-0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9
-00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B
-01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D
-01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7
-01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5
-01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A
-026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C
-027D027E027F028002810282028302840285028602870288034C034D034E034F03500351
-03520353035403550356035703580359035A035B035C035D035E035F0360036103620363
-036403650366036703680369036A036B036C036D036E036F037003710191019203740375
-037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087
-00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242
-0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE
-04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13
-0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE
-122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747
-17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B
-1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226
-2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C
-245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2
-2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7
-316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD
-361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03
-3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47
-3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF
-40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF
-44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8
-48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E
-4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58
-4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491
-54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8
-575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2
-5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD
-5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1
-62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589
-65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A
-67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48
-6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA
-705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE
-73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA
-78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E
-7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9
-82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD
-87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73
-8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD
-9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7
-95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759
-976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB
-98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
-98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911
-9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB
-9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22
-9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B
-0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F
-740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4
-110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D
-B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10
-010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101
-01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101
-0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D
-320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C
-111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D
-230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D
-100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01
-010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C
-111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A
-100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22
-11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11
-0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10
-282001010101010101010101010101010101010101320D320D320D320D320D320D320D32
-0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-010101010101010101010101010101010101010101010101010101010101010101010101
-01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B
-28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C
-00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D
-000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013
-0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019
-001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F
-0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025
-0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B
-002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031
-0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037
-0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D
-003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043
-0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049
-0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F
-004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055
-0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B
-005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061
-0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067
-0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D
-006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073
-0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079
-0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F
-007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085
-0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B
-008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091
-0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097
-0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D
-009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3
-00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9
-00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF
-00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5
-00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB
-00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1
-00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7
-00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD
-00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3
-00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9
-00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF
-00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5
-00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB
-00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1
-00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7
-00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD
-00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280
-B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55
-026F54019F54AF54025153170452531604535215044A4952044649370447493204484932
-04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532
-0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3
-B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3
-092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936
-4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590
-8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540
-C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914
-15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314
-480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B
-1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A
-1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10
-BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A
-0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808
-004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B
-2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861
-B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B
-2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B
-2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736
-26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258
-45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225
-45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C
-60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0
-042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820
-8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320
-468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046
-8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60
-441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010
-0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF
-00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC
-00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098
-009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF
-006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1
-0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072
-0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A
-006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A
-008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000
-045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100
-0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073
-022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2
-0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A
-0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A
-057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C
-058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086
-04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046
-03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A
-02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9
-04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056
-04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A
-05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068
-04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB
-0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1
-051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9
-0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E
-064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB
-068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071
-03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2
-0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096
-0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA
-03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A
-050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073
-064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118
-05160113051602210516012D05160161051601560516019F05160132047E001802460018
-05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D
-04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB
-0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069
-05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068
-062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB
-047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073
-04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E
-04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E
-0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A
-065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5
-047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A
-04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A
-050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8
-051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001
-035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005
-05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8
-036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1
-05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9
-0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056
-07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089
-05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100
-057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A
-057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8
-05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044
-06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1
-04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9
-04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071
-02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073
-05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006
-060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051
-060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8
-0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8
-06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9
-03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D
-059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F
-04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053
-06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005
-02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9
-080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3
-045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1
-0000020900000221000001540000021D0516013605160003051601360516012505160142
-051601420516014205160125051602090516013605160142051601420516014205160142
-051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3
-0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A
-04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A
-050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8
-04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000064C007304DB006A064C0073
-04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A
-064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073
-04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1
-060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006
-04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED
-0516008A0000001F00000380090E09000303050507070B07030404070703050304070707
-070707070707070404070707060A08070808070608080505070609080907090707070808
-090707070404040706060606060606030606030306030906060606040604060607060605
-060506070808080708090806060606060606060606060303030306060606060606060606
-07050707060507060909090606070A090907070707060607070607050507090606050707
-0707070606070808090A0907090404020207070607030604040606070302040E08070807
-070505050509090908080803060606060606060606060603070607050508060706070607
-070505050909090608060507060806080606060308060806080608070607060603060306
-040806080609060704070407060704070408060806070507050609070606050605090606
-050B09060703050B03050303050308060806080607060706070608060806080608060806
-050305030503050305030706060603080608060906090607040706070408060806080608
-06090707060308060A090906040907090709070706020607060909090902060606080809
-060908090308070607070805070809080709080706070707090905070605060306060505
-060603060606060506060506050907030606060707080608070505050A0A070707070807
-070607070906080807070908090807080707070708070909080907080907060606040606
-070506060606070606060606050609060705090907080606080606060406060303030909
-060606060505090B06050505050505050000000009060806000000000606060606060606
-060606060606060806080608060806080608060806080608060806080608060706070607
-060706070607060706070605030503000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000090609060906
-090609060906090609060906090609060906080608060806080608060806080607060706
-07060706060007000A0F0A000404040508070B0703050507080405040507070707070707
-0707070505080808060A070708080606080805050706090709070908070708070B070707
-0505050806060707050707040707030307030B0707070704060407060707060606050608
-070708060709080707070707070507070707030303030707070707070707070707050707
-060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706
-06080707090B0A070A0505030308080607040605050606070403050F0706070606050505
-050909090808080306060606060606060606060307060706050806070607070808050505
-0A0A0A060807050706080508050706040707070708070806070607060306030605070707
-0709070804080407060704070408070807070607060609090707050705090606050C0906
-0704060B0306040406040707080508050607060706070807080708070807080705030503
-0503050305030707070603070707070907090708040706070408070807080708070B0707
-060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909
-030707070607080507070907070908070707070709090507070507030707070507070307
-0607060507070507060909030707070906080608070505050B0B08070708070707060706
-0906080807070908090807080707090709070B0B080907080A0707070605060707050707
-0706070707070705050609070706090A0708060608060707050606030303090907070607
-06050A0C0705050505050505000000000907080700000000060606060606060606060606
-060606070707070707070707070707070707070707070707070707060706070607060706
-070607060706070503050300000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000009070907090709070907
-090709070907090709070907090708070807080708070807080708070706070607060706
-070007000B110B000404040509070C080305050709040504050707070707070707070705
-05090909060A080809090706090805050806090809070908080708080B08070805050509
-07070707060707040707030407030B070707070506040707090707060705070908080907
-080908070707070707060707070703030303070707070707070707070706070707060707
-0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808
-090C0B070B05050303090907070407050507070704030511080708070705050505090909
-08080803070707070707070707070603080608060509070707070709090606060B0B0B07
-090705080609060906070704080708070907090707070706030603060508070807090708
-05080508060704070408070807080608060609090707060705090707060D0A070804060C
-040704040704080709060906070707070707090709070907080708070503050305030503
-05040807070603080708070907090708050806070408070807080708070B090707030807
-0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808
-070808050808090807090807070707080909050707060703070707050707030707070706
-07070607070909030707070907090609080505050D0C090808080808080608070B070808
-08080908090807090708090809080B0C090A07090B080707070508070906070707070707
-07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D
-070606060606060600000000090708070000000007070707070707070707070707070708
-070807080708070807080708070807080708070807080707070707070707070707070707
-070707050305030000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000907090709070907090709070907
-090709070907090709070807080708070807080708070807070707070707070707000700
-0C120C00040405060A080D09030505080904050405080808080808080808080505090909
-070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808
-060808040808030407030B0808080805070508070B0707070805080A08080908090A0908
-08080808080608080808030303030808080808080808080808070808080708070C0C0C08
-08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08
-0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903
-0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508
-07090609060808040808080809090908080808070307040706090809080A080805080508
-07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404
-070408080906090608080808080809080908090809080908050305030503050305040807
-070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08
-050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905
-08080A09080A0908080707080B0A05070806080308070706080803080708070608080608
-070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09
-0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806
-07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707
-07070707000000000A080908000000000808080808080808080808080808080808080808
-080808080808080808080808080808080808080808080808080808080808080808080805
-030503000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08
-0A080A080A0809080908090809080908090809080707070707070707080008000D140D00
-050505050A080D09030606090905070506080808080808080808080606090909070D0908
-090908080909050608070B090A080A08090909090D0909090606060B0808080808080805
-0808030407030B0808080805070608080B0708070807080B09090908090A090808080808
-080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A
-0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603
-03090B080905080606080808050306140908090808050505050A0A0A0909090308080808
-08080808080807030907090707090809080808090B0707070D0D0D080908050907090809
-080808050908090809080908080808070307040706090809080A08080508050907090609
-060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908
-090809080808080808080908090809080908090805030503050305030604080707070309
-0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D
-0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09
-080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03
-0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809
-09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07
-09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707
-000000000A08090900000000080808080808080808080808080808090809080908090809
-080908090809080908090809080908080808080808080808080808080808080503050300
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08
-0A0809080908090909090909090909090908090809080908080008000E150E0005050606
-0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908
-0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305
-08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808
-0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B
-0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08
-0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909
-090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905
-0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A
-090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07
-0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B
-090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09
-080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08
-0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B
-090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A
-0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C
-090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000
-0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A
-080A080A080A080A080A0809080908090809080908090809080908050305030000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09
-0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B
-0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507
-0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09
-0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303
-0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B
-0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07
-0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803
-0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09
-0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A
-09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909
-09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A
-060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A
-0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A
-0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B
-0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10
-0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908
-0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A
-000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A
-090A090A090A090909090909090909090909090909090905030503000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A
-0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A
-0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C
-0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06
-09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A
-0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09
-090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A
-060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09
-070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A
-0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D
-0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A
-0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A
-070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010
-10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B
-0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707
-12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B
-110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A
-0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000
-0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B
-0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B
-0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806
-080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C
-0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A
-0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A
-0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A
-09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A
-0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A
-0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09
-05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B
-080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B
-0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C
-0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B
-0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05
-0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C
-0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A
-0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905
-050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B
-0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B
-0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000D0A
-0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B
-0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B
-0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C
-120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09
-0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B
-0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F
-0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B
-0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F
-0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A
-080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B
-0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B
-080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D
-0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10
-0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08
-0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C
-0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B
-0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010
-0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B
-0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B
-0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B
-0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B
-0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C
-0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D
-090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10
-0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C
-0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C
-0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808
-080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A
-1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E
-0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C
-0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806
-0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C
-0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11
-060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B
-0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C
-120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C
-0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C
-0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C
-0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C
-0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C
-0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B
-0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09
-091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910
-0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D
-0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C
-1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E
-1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010
-0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D
-100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E
-090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16
-060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806
-09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C
-1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E
-0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A
-0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F
-0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D
-0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417
-0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E
-0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D
-0C0D0C080608060000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000100C100C100C100C100C100C100C
-110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00
-152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111
-0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D
-0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D
-0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D
-0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D
-150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06
-0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E
-0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E
-0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707
-0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C
-0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D
-0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008
-0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D
-0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210
-11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B
-0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B
-0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E
-0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08
-060806000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D
-120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600
-0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F
-0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08
-0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D
-0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511
-161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06
-0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E
-0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F
-0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E
-09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D
-0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610
-0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216
-1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310
-0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206
-0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F
-0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D
-0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C
-00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F
-0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D
-120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B
-130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D
-12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608
-0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E
-0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313
-0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E
-0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F
-0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08
-100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11
-0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C
-0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12
-0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E
-0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E
-0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13
-0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310
-121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414
-0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000
-130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10
-0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F
-110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11
-060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B
-110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F
-0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606
-06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11
-14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B
-0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06
-100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E
-1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10
-0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E
-0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11
-0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F
-1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10
-15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11
-100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919
-1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D
-140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210
-000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10
-0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210
-12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11
-160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714
-15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C
-0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110
-1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F
-0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111
-0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E
-0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511
-1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516
-11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511
-15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11
-0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B
-1B061111111214180F181419071213131113140B13131714121514101211111318160B11
-110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C
-1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213
-1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011
-0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000
-111111111111111111111111111111121012101210121012101210121012101210121012
-101210111011101110111011101110111011100B070B0700000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000015101510151015101510151015101610161016101610161014111411141214121412
-141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B
-0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714
-141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211
-1811110F120D1218141414121617151111111111110F1111111109090909121212121212
-1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12
-100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C
-14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212
-11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110
-091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12
-0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612
-161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215
-12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212
-12141619101A161A091414141214160D14141816131716111412121419180D12120F1209
-1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814
-12161414141016121C12161614151816171611141212181416151E1E171B14141E141112
-110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09
-090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212
-121212121212121212121214111411141114111411141114111411141114111411141112
-1112111211121112111211121112110D090D090000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000001712
-171217121712171217121712171217121712171217121512151216131613161316131613
-121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414
-141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716
-201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311
-140F141A1616161418191713131313131311131313130909090914131313131314141414
-141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A
-141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614
-140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A
-1A1111112020201419140D16111611161114140C16131613191519141314131209120912
-0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414
-11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814
-0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417
-14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C
-111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F
-141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616
-161218141F14181816181B181918131614141A1618172121191D161621171314130F1413
-1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D
-14131314120F20261411111111111111000000001A131815000000001414141414141414
-141414141414141613161316131613161316131613161316131613161316131413141314
-13141314131413141314130D090D09000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000191319131913
-19131913191319131A131A131A131A131A13171417141815181518151815181514131413
-1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515
-1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417
-0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B
-17171715191A181414141414141114141414090909091514141414141515151515121515
-1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815
-151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D
-0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212
-212121151A150D17111711171115150C1714171419151A151415141209120A120F191519
-151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14
-180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09
-0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14
-140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E
-091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914
-1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915
-2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515
-141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415
-131021271512121212121212000000001B14191600000000151515151515151515151515
-151515171417141714171417141714171417141714171417141714151415141514151415
-141514151415140D090D0900000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000001A141A141A141A141A14
-1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414
-15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811
-111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E
-181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17
-1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817
-25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919
-1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D
-1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518
-1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A
-101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528
-0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A
-110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916
-24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A
-17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613
-16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C
-1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18
-1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B
-1814141414141414000000001E161C180000000018181818181818181818181818181819
-161916191619161916191619161916191619161916191617161716171617161716171617
-161716100A100A0000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000001D161D161D161D161D161D161D16
-1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800
-2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222
-172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A
-161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19
-191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B
-1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B
-2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C
-1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D
-161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D
-161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F
-190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19
-19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119
-132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012
-1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B
-1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320
-2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16
-151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717
-17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D
-191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912
-0C120C000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000211921192119211921192119211922192219
-2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00
-10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20
-20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10
-1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C
-1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24
-2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C
-0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D
-1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820
-181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C
-12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C
-201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22
-1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D
-262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722
-1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C
-1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20
-1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B
-1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919
-00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F
-1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C
-251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417
-292036240D17172029121712172020202020202020202017172929291B3222222327201D
-27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11
-1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E
-1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929
-202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E
-1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020
-20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012
-221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025
-20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A
-201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027
-1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F
-1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E
-221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029
-20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922
-26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C
-20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000
-281E262100000000202020202020202020202020202020221E221E221E221E221E221E22
-1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520
-2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27
-0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719
-251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522
-212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F
-0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227
-2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219
-19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F
-251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520
-2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25
-1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220
-22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126
-17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222
-27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125
-2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26
-251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838
-2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E
-2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924
-000000002222222222222222222222222222222520252025202520252025202520252025
-2025202520252022202220222022202220222022202220170F170F000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924
-29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25
-2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B
-2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419
-1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523
-2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520
-202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425
-15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E
-1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25
-232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30
-24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24
-2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24
-172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A
-3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824
-241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A
-41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729
-3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325
-1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000
-252525252525252525252525252525282328232823282328232823282328232823282328
-23282325232523252325232523252325232523180F180F00000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26
-2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18
-1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F
-2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28
-372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929
-2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029
-251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66
-2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929
-28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825
-122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A
-21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A
-322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31
-2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B
-2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12
-2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E
-29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829
-28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312
-12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B
-2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A
-282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000003529
-35293529352935293529352936293629362936293629312A312A332C332C332C332C332C
-29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030
-3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733
-4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27
-3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F
-302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D
-303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F
-2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D
-3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A
-22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F
-2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F
-1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37
-2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841
-28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22
-2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333
-332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D
-3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545
-2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030
-30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F
-2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E
-3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C
-2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535
-35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339
-26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544
-39393A343E413D3232323232322B313131311818181835323232323235353535352D3535
-352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36
-36443939415951355326261616444431331E3526263434351E16267E3934393434222222
-224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D
-53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E
-3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833
-3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218
-22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433
-31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B
-1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831
-3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34
-51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535
-31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135
-2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535
-353535393239323932393239323932393239323932393239323932343134313431343134
-313431343134312218221800000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000041324132413241324132
-41324132433243324332433243323D353D353F373F373F373F373F373331333133313331
-340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A
-2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B
-3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A
-4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39
-5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F
-48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848
-434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A
-4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840
-2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363
-1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718
-2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37
-5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41
-3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E
-383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545
-40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B
-383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C
-3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F
-373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A
-373A37271827180000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000004838483848384838483848384838
-4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00
-649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252
-37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E
-343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C
-3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240
-4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240
-642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B
-40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44
-34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44
-343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323
-3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B
-3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D
-2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A
-4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F
-3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B
-4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35
-323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636
-3636363600000000513D4C4200000000404040404040404040404040404040443C443C44
-3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A
-1B2A1B000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D
-513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100
-000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111
-2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007
-0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED
-332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1
-0304061400030007002640150206060307010F09400902032C0040000100042C072FED33
-5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD
-BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17
-7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E
-0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5
-131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F
-ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0
-C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135
-2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE
-CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178
-8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16
-70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A
-08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18
-312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031
-201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932
-2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130
-5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117
-15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362
-2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101
-7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D
-C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807
-05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908
-260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203
-031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616
-282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33
-2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633
-321625012309011406232226353436333216013426232206151416333236013426232206
-1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59
-64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC
-DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018
-004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576
-087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008
-300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D
-1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D
-3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673
-4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B
-2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633
-323601151406070123270E01232224353436373E01372E01353436373E01333216151406
-070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32
-3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102
-0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71
-F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4
-03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301
-822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803
-28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830
-000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01
-070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01
-2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D
-060306131503151326012603261326154701400340134715500350136003601379007602
-700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F
-3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49
-4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001
-00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554
-0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450
-0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B
-060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217
-392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606
-8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167
-FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D
-01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4
-FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0
-0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500
-590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09
-012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02
-01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270
-0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00
-3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116
-01250138004900440156016701770186010A011202032F02010200010000022F332F003F
-2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F
-05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15
-4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130
-5D011002212002111012212012013E01353426272E01232206070E01151416171E013332
-36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C
-02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52
-4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502
-1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED
-3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098
-03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116
-03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B
-0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F
-100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202
-101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01
-373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0
-8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223
-3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F
-290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C
-780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D
-020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10
-E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514
-06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01
-2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6
-6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C
-02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1
-233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D
-240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F
-0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39
-395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311
-3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001
-00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08
-7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F
-1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F
-ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01
-353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC
-6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3
-344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED
-0022003700644044060D160D3925333133374925423143375F01560D5020502165217531
-0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F
-2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114
-002322262726023534123736243332161715232E01232200073E01333216171E01073426
-272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50
-290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601
-E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014
-282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801
-4B0258027903070301000120020203000002034A050302080F081F087B02030300020204
-0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123
-012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028
-0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B
-592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616
-0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39
-0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F
-ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334
-26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1
-908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F
-92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912
-3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045
-0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914
-294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED
-5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627
-35331E01333212370E01232226272E01353400333216171612073426272E012322061514
-16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859
-012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C
-BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28
-15290002015A00000249045D00030007001E4010015602050656050807002D0600010101
-2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002
-00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806
-5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F
-5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03
-40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306
-540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840
-080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887
-10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75
-FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940
-09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001
-213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006
-006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01
-2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939
-5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB
-7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069
-40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870
-090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000
-172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406
-070E01071523113E01373E013534262322060723353E013332160123353303ED46393892
-52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D
-346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04
-0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05
-2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766
-3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A
-510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37
-0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00
-3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01
-23222635341233321617353311333E013534022726242322040706021514121716043332
-3637150E0123222427260235341237362433320417161201112E01232206151416333236
-074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63
-010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B
-438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A
-A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6
-A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287
-01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06
-03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C
-010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F
-39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121
-130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8
-0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07
-1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D
-10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216
-171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132
-36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E
-2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08
-1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546
-05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28
-600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C
-3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E
-012322242726023534123736243332161715232E01232206070E01151416171E01333236
-373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543
-46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D
-E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408
-03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00
-3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637
-3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE
-B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B
-003B402309350006100602060601053502030A350108040008010800730D0F0D01060914
-016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111
-21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009
-0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6
-FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79
-C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06
-130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734
-0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED
-3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021
-32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770
-01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101
-23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B
-05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D
-03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133
-11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B
-002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4
-3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804
-A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403
-09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623
-22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5
-02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075
-190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901
-3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302
-0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D
-400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87
-10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE
-FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005
-002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901
-113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138
-023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903
-050A020309000410043404440454046A04060404070B0903010708090A0B030502140078
-0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931
-30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001
-130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07
-34074507510761077107077606010F0102061F0115063406440653066B0160067F017006
-0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304
-6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121
-0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017
-002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13
-53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824
-10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412
-373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58
-01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9
-B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010
-001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309
-080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D
-10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107
-3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E
-C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002
-0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D
-59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979
-150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303
-2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31
-305D015D010E01232226270E01232224272602353412373624333216171612151002071E
-01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160
-5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D
-BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201
-3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01
-3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010
-071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019
-031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710
-7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637
-3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD
-B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030
-009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510
-4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D
-86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A
-111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F
-ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127
-2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85
-0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801
-A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28
-152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B
-0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC
-04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03
-4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10
-F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E
-01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A
-4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066
-470148020205040507065706860603061400000105070457048604030414030203080144
-014B02580273017C02060005027503010303020845004A0302020103040024003A005A00
-6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10
-F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309
-01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C
-00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329
-08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A
-0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001
-000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00
-75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187
-10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01
-390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1
-000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557
-09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201
-020514060607050407010A0B0602080302080F0D01060216022602360247020509081908
-290839084808050208070A04010406020D00160026003600470050000600660D08090619
-062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931
-30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5
-FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006
-000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619
-08270628085606590865066A08080814000100061405040502000D050200010004000703
-040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4
-ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104
-E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1
-000900594036030708060813082608360846085608660876080808B30202030707033506
-03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939
-2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603
-91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201
-0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208
-FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A
-0138014B01590168017801890109011200032F000100030100006002700202022F5D332F
-003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614
-0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521
-1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034
-3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F
-036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309
-0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003
-0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154
-051602FA068C000300244016480159026902790204500360037003030303010000022F33
-2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026
-0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A
-0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A
-001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED
-3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437
-353426272E012322060723353E01333216171E011503110E01070E01151416333236041D
-BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944
-5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C
-FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F
-3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08
-141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939
-31305D011406070E012322262707231133113E0133321203342623220607111E01333236
-04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F
-2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057
-40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155
-0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6
-3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123
-2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5
-A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002
-006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912
-0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10
-F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711
-3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E
-B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A
-FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D
-6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103
-1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E
-013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672
-E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D
-011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505
-030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037
-0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123
-22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6
-BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030
-006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05
-702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232
-1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939
-3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332
-1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55
-9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29
-276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000
-045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860
-1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123
-22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87
-262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144
-02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D
-003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59
-021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D
-4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F
-FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335
-210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28
-2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F
-011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A
-0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD
-325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0
-015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC
-1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101
-01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B
-006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110
-1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010
-801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D
-2123113426272E01232206071E01151123113426272E012322060711231133153E013332
-16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372
-9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49
-5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213
-040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED
-123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B
-4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471
-047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C
-1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110
-002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118
-C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002
-00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C
-0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD
-32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01
-33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F
-51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A
-D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20
-701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110
-F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133
-321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0
-BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2
-C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F
-05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931
-305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931
-2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602
-091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F
-6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201
-2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505
-07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01
-14062322262735331E0133323635342726272E01272E01353436373E013332161715232E
-0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B
-393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222
-221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA
-02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02
-0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F
-3333FD322F31305D250E012322263511233533113311211521111416171E013332363733
-02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E
-FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515
-09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED
-3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69
-B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000
-047F045D000600864041260429063604390646044906062905390540055105600505061A
-000100041A03020328002703380037034A00470375017A02080005027503010305020802
-010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403
-820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901
-2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636
-045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701
-58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00
-0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E
-3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901
-23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303
-5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403
-14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407
-4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230
-084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809
-06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600
-01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117
-395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309
-0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A
-01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307
-0519031705460149035800570179030902071A000100051A040304490046040200030204
-05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F
-0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931
-30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04
-5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03
-45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B
-1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F
-3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800
-000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C
-09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105
-2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426
-2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6
-AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B
-BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00
-1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467
-0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C
-010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F
-5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436
-37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B
-887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00
-000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418
-4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16
-1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322
-26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466
-5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD
-4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A
-40130320113011401170118011050200110E060725012B355D350003001A0000055E0801
-0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646
-125906561278027703082020211F02870101011400120020210387040104140505067B06
-74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813
-114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200
-5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D
-10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D
-C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334
-26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672
-7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1
-02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B
-342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D
-313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371
-2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F
-5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514
-062322262735331E01333236353426270E01232224272602353412373624333216171523
-2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A
-5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346
-BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2
-B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236
-002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8
-023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7
-075002360032FD000117008E009601750018401103002930295029702904020029240F03
-25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210
-24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000
-0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000
-01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000
-011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000
-0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35
-5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B
-3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501
-2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B
-01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08
-0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B
-20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D
-015D250E01071E011514062322262735331E01333236353426270E01232226272E013510
-003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09
-1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A
-460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7
-D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022
-21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021
-20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024
-20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330
-2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D
-FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117
-0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D
-40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108
-880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133
-023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003
-0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100
-0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001
-2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9
-0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A
-FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A
-FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A
-FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A
-FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501
-2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025
-012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225
-012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625
-012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625
-012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60
-1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104
-0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED
-173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE
-6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B
-0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00
-3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9
-A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F
-FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901
-7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18
-471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED
-2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600
-353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB
-010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16
-0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021
-00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08
-1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605
-190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239
-ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206
-1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62
-0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468
-05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132
-63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C
-10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D
-181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217
-39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406
-07151E01151406070E012322262735331E01333236353426272E01272627263534363735
-2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627
-2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7
-5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B
-845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237
-072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334
-323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A
-563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688
-0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A
-DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106
-0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F
-5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506
-BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913
-39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B
-303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED
-2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01
-333236373E0135342623353236353426272E01232206070E01151123113436373E013332
-1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C
-28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123
-421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0
-000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314
-282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19
-2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD
-06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F
-ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001
-5D005D011000212000111000212000031000212000111000212000072301231123112132
-16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01
-66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71
-63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC
-FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719
-3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C
-0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064
-146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F
-521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F
-5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021
-2000031000212000111000212000050E012322243534003332161715232E012322061514
-1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701
-36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE
-0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230
-1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379
-0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800
-000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D
-0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3
-FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516
-03C3068C000300244016470156006600760004500360037003030303010000022F332F00
-2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003
-000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F
-5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597
-04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303
-0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08
-030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00
-2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121
-0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999
-6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1
-000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414
-05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35
-0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F
-5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101
-112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68
-B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D
-0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B
-090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70
-1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04
-0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F
-ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433
-3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA
-63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240
-453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601
-216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52
-E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34
-441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821
-AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6
-ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123
-2202353412333216173E01333212052E01232206151416333236373E0125342623220607
-0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A
-9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE
-010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3
-05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB
-0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F
-5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4
-021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403
-020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303
-00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F
-2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482
-FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006
-000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837
-051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F
-5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901
-350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000
-0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10
-0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305
-0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08
-BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B
-5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C
-015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020
-080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C
-5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332
-363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752
-433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B
-410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19
-19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED
-3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623
-22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0
-F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B
-0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91
-99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601
-08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302
-03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A
-0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239
-012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001
-8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288
-FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307
-050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F
-5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD
-B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500
-093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31
-300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001
-008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A
-10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226
-2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C
-228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B
-0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E
-6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B
-2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335
-0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E
-01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D
-B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A
-300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031
-40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33
-ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332
-3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC
-AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403
-300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825
-1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C
-FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135
-26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4
-A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C
-580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9
-40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D
-6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143
-124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304
-00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939
-10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32
-31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637
-362437353426272E012322060723353E01333216173E0133321215272E01272E01232206>
-<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15
-5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525
-20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C
-242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C
-FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008
-0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825
-04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D
-1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117
-3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123
-22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674
-6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D
-E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2
-03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C
-05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303
-101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED
-331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01
-151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04
-FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203
-05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4
-FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001
-00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100
-00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001
-0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829
-08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31
-308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902
-DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C
-270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D
-020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D
-FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001
-5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337
-3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E
-2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E
-1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606
-050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23
-541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED
-3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322
-26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E
-01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C
-59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437
-607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E
-05D100030006004F403148024703025A056A050205041A000003061A010102390236036B
-0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739
-5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105
-D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037
-0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100
-000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B
-2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE
-8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476
-0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040
-1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33
-2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104
-82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01
-110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800
-2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335
-3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117
-004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000
-011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032
-0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016
-002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834
-10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F
-FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121
-152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E
-FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68
-B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C
-2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314
-5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B
-0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538
-10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130
-015D01211416171E013332363733150E01232226270E01232200111000333216173E0133
-321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62
-BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792
-92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B
-A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05
-02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC
-00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002
-FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910
-3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202
-04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE
-F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF
-E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701
-000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B
-2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001
-FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701
-00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F
-000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100
-010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506
-14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407
-0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD
-3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB
-1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B
-4804470658045706680467067F047006087F057007020705000301000330036003900304
-03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A
-19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02
-C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016
-400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C
-00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D
-35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F
-332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC
-003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00
-4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204
-00121203151827190119191D341502002833010133332F34030A272001022320292C0400
-0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED
-12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D
-331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323
-37332E013534363723373312003332161715232E01232204072107210E01151416172107
-211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050
-C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476
-152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC
-02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001
-2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4
-5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0
-400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135
-0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003
-001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14
-0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139
-10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335
-333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C
-6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000
-0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A
-000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F
-3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436
-33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41
-03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A
-0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201
-0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17
-3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D
-01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05
-000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130
-0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037
-0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B
-09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF
-E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701
-0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B
-2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007
-0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C
-073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E
-17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20
-19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016
-01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12
-3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D
-ED5D3130015D011406232226353436333216250123090114062322263534363332160134
-262322061514163332360134262322061514163332362514062322263534363332160734
-262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6
-BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658
-586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787
-FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801
-023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D
-0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000
-055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8
-0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
-FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B
-3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925
-012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04
-0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200
-104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C
-000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236
-003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801
-023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA
-08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1
-052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2
-FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF
-00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500
-000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D
-FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905
-5606690566067A0573060601020350056005700503050560030103500060007000030000
-042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101
-00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952
-0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33
-2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F
-365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724
-29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED
-31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C
-7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00
-03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E
-ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B
-0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00
-2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51
-090009300902313009015009600970090309091551030C29200030000200003000600003
-D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635
-343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875
-065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02
-1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623
-22262735331E0133323635342627331E010370B79225742D091A58326862060399020659
-A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402
-00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204
-0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE
-8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04
-1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123
-222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE
-790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902
-64016B0274017B020606050250036003700303030360020102500060007000030000032F
-332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501
-7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804
-090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11
-332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC
-52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614
-000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A
-050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735
-37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502
-0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5
-03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000
-050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D
-000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A
-FE780228061400030007002940160F094F090201060106050201050B00041F014F050105
-2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8
-64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B
-0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C
-2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01
-23211123353311213204171612073426272E012B011121152111333236373E0105BCB193
-66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE
-B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1
-0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B
-542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E
-030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F
-1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110
-00232200353400333216172E01270527372E012735211E01173717071612013E01353426
-272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D
-0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201
-08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE
-2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025
-012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025
-012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400
-0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F
-233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED
-3130015D011406070E012B011123113311333216171E01073426272E012B011133323637
-3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939
-4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013
-0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01
-1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED
-3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607
-111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C
-88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0
-02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130
-0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7
-0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709
-01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401
-B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01
-0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121
-35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C
-102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10
-651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F
-ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01
-333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42
-022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0
-002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37
-2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A
-2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F
-1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B
-01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A
-0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C
-B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5
-0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02
-010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200
-003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B
-2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600
-002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131
-003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535
-0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510
-0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD
-32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521
-1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF
-8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C
-FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089
-000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001
-0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436
-24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544
-6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40
-0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937
-3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F
-2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115
-14062322262735331E01333236353426270E012322242735331604333236353426272E01
-272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3
-9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3
-9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C
-4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E
-28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B
-3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779
-3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09
-0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F
-4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D
-1112173931305D2B011406071E011514062322262735331E01333236353426270E012322
-262735331E0133323635342726272E01272E01353436373E013332161715232E01232206
-15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46
-0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347
-4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918
-0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801
-0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3
-068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546
-0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7
-03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1
-04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908
-70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A
-01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED
-1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135
-213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE
-95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86
-9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502
-2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003
-0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B
-FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B
-3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B
-35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A
-0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E
-570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01
-0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F
-20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F
-003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D
-005D010E012322263534363703210323012101230E0115141633323637330902062B344B
-2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D
-90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478
-003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25
-703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420
-3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49
-03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112
-392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534
-3637362437353426272E012322060723353E01333216171E011511230E01151416333236
-373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601
-1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474
-7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F
-24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2
-0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1
-062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E
-34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209
-0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F
-ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01
-33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5
-6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025
-2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F
-04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516
-090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32
-5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534
-3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7
-03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7
-B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E
-34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33
-3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301
-1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F
-31305D01211416171E013332363733150E01070E011514163332363733150E0123222635
-343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102
-03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030
-5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2
-B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325
-012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025
-012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702
-0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270
-030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35
-005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102
-030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6
-32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52
-C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D
-010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204
-1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133
-0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E
-07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133
-2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9
-05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807
-2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311
-33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000
-0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051
-00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031
-0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236
-00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236
-00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471
-068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000
-059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9
-00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF
-00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500
-FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B
-3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25
-012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225
-012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01
-18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4
-5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332
-3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521
-FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046
-0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F
-18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6
-5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130
-5D250E01071E011514062322262735331E01333236353426272322263511233533113311
-211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB
-B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10
-B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000
-011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F
-0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E
-0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800
-4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD
-322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637
-331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8
-CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236
-00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00
-210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310
-21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35
-3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1
-023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529
-0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1
-FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF
-007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500
-FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B
-3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625
-012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625
-012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06
-10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073
-FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705
-53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726
-27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F
-003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624
-33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C
-5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566
-6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069
-FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532
-65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11
-12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01
-071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E
-0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F
-4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A
-524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01
-363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C
-38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205
-0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939
-3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633
-32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111
-8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086
-4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21
-1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111
-001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4
-113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637
-3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE
-F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0
-FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3
-0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418
-79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37
-2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D
-11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226
-272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01
-3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41
-40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D
-40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6
-0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15
-451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F
-1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000
-232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01
-1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609
-A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000
-4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
-2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002
-0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717
-0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A
-05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D
-ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127
-2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD
-51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145
-4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59
-051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED
-12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000
-03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005
-10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C
-3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B
-2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311
-3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254
-9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D
-00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037
-3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E
-34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A
-4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33
-7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F
-1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED
-332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127
-2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133
-32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA
-E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486
-B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E
-1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2
-45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D
-75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005
-B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023
-60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065
-B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213
-040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6
-ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E
-012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63
-B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5
-0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1
-022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366
-041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020
-0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F
-5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6
-88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D
-481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F
-29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10
-371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840
-1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D
-335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B
-2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123
-220615141633323637330901230901140623222635343633321607342623220615141633
-3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE
-B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302
-68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B
-006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612
-120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8
-FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B
-2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135
-3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D
-0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B
-A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101
-05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113
-1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017
-400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101
-CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230
-0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703
-8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606
-00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6
-0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017
-0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C
-CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00
-0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514
-06232226353436172206151416333236353426016B689393686893926949666748486766
-03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000
-011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000
-011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117
-00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116
-00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236
-00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236
-00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000
-049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6
-046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D
-0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460
-068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8
-0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A
-FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3
-05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59
-0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500
-FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35
-FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A
-23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E
-4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235
-40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27
-040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33
-2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510
-002132041715232E01272E012322001110002132363711213521110E01071E0115140623
-22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA
-FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061
-0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516
-A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D
-10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020
-112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033
-603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10
-E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31
-305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133
-321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460
-7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE
-E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6
-BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A
-B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A
-4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1
-001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304
-070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED
-1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121
-11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19
-0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030
-031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020
-02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F
-ED393931305D2123113426272E0123220607112311233533353315211521113E01333216
-15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE
-04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B
-10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201
-0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4
-332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335
-2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3
-C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898
-FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054
-40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704
-10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F
-ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617
-1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF
-81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32
-0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A
-140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31
-302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198
-98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202
-00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130
-01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B
-00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329
-12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F
-2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406
-232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898
-FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003
-0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01
-0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533
-1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998
-045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717
-13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210
-E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315
-230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141
-1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F
-024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104
-04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4
-FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534
-3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141
-13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801
-0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35
-0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A
-1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4
-5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627
-35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816
-160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00
-FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF
-00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05
-0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D
-021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802
-050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D
-11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D
-7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102
-2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507
-01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C
-ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426
-02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0
-0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104
-01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F
-2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149
-8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300
-FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016
-0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100
-2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107
-7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776
-06010F0102061F01150626013601340646014406560153066006790170060E0406015A01
-550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802
-0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172
-715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901
-330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00
-000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E
-1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD
-322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114
-062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26
-0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805
-0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F
-03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025
-2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325
-2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35
-FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001
-001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05
-1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11
-332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627
-231133153E013332161715232E012322060711331E011514062322262735333C4E285E52
-0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5
-5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000
-011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000
-011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F
-004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204
-5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111
-21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE
-528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B
-3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C
-0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00
-3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311
-331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C
-012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28
-251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D
-1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625
-2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25
-2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35
-FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35
-FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001
-00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33
-20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36
-1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31
-302B5D053436372206232226272E01351133111416171E01333236373E01351133111406
-070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C
-976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9
-037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00
-000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205
-0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B
-1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437
-350E01232226351133111416171E0133323637113311230E011514163332363733150E01
-23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C
-A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24
-FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35
-FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35
-FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35
-FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001
-00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6
-5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679
-67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E
-00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646
-125906561278027703082020211F02370187010201140012002021033704870402041405
-05060606091226062912370638124606491258127A0675120B24240C702501251651A00C
-F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF
-C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F
-0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C
-0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507
-05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12
-17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00
-5D212303210323012E013534363332161514060727342623220615141633323613090207
-2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D
-F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD
-CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E
-37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F
-4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A
-01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600
-0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD
-32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B
-5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736
-2437353426272E01232206070E010723353E01372E01353436333216151406071E011503
-110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A
-5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56
-E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D
-4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761
-5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000
-0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F
-068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA
-08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D
-3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E
-2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D
-ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117
-004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117
-004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117
-008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117
-008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117
-008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D
-355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0
-40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236
-003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF
-003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B
-090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100
-B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B
-010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000
-05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028
-00934063411253125B1A6312730273129024B603B6240923200551000810082008030808
-1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C
-1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12
-17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED
-393931305D2901353E0137233533352335333534123332161715232E012322061D012115
-21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93
-016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00
-000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37
-07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C
-1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B
-31305D01211416171E013332363733150E0123200011100021320011272E01272E012322
-06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A
-9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100
-FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C
-040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600
-003700BB02910000011702410413FDC600384026040302360A0403023900392039403980
-39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35
-3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038
-4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F
-094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600
-003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103
-01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535
-00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01
-010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD
-D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A
-0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E
-010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001
-0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303
-0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF
-090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D
-33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31
-803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024
-00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000
-059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F
-0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000
-0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F
-5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018
-010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF
-0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227
-1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037
-003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04
-4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117
-019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70
-2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D
-0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F
-370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33
-2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177
-BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E
-05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003
-00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02
-4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239
-012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127
-FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508
-05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216
-002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E
-0902390258020378017703020203020114000600020314040405490546067C0573060405
-030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504
-65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123
-09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030
-0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047
-40130535060609013502030A350908054009133704B8FFC0401609133704050504030204
-0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001
-213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0
-FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603
-010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311
-2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000
-000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B
-A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B
-0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325
-293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403
-0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209
-D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B
-71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135
-090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE
-061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000
-FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E
-021B067518011834380948096F090309192209030810030822142311141023071B180714
-108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910
-C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135
-1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34
-359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D
-2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A
-641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014
-041925140204160B341F02261835011608251202191214081502141C272222290F29010F
-291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED
-1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526
-023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D
-CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A
-0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E
-FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006
-000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05
-01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A
-B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E
-014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116
-019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D
-FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116
-019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037
-0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10
-371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00
-90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239
-2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715
-1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE
-F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120
-1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016
-A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507
-01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505
-15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D
-1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133
-0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6
-0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C
-07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133
-2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426
-2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A
-201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647
-664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828
-264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E
-05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12
-3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D
-A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1
-04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B
-2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25
-181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED
-12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612
-072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A
-252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70
-28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5
-8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8
-045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6
-18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040
-10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736
-178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37
-00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F
-FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D
-71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180
-487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100
-0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8
-FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040
-260910370C001C004B005A006A00790006008D090F090103041304440455046504760406
-04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0
-08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9
-FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C
-0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F
-3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E
-4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000
-047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E
-24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C
-030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0
-400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F
-1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01
-353436373E0137352E01353436373523352115212206070E01151416171E013B01152122
-06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89
-4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467
-211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22
-2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216
-00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315
-3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10
-F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623
-220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0
-0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64
-03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037
-3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B
-12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01
-3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA
-5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057
-AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2
-045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901
-091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133
-3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F
-5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408
-4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606
-0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10
-3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001
-8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906
-010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01
-53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047
-1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010
-7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D
-5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406
-070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360
-4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806
-343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611
-045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28
-0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A
-291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4
-2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627
-2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E
-01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A
-5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462
-5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937
-7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB
-023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500
-FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF
-00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071
-FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8
-0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
-0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F
-073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D
-1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED
-31305D011406070E012B0135333236373E01353426272E01232111231121352115211121
-3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398
-BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF
-00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804
-0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C
-0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13
-000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D
-33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736
-243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE
-EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010
-4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF
-0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000
-02E207500236002C00000117008EFF240175001940130200104010501060107010050100
-100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1
-000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503
-28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501
-3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D
-013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01
-2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01
-0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24
-401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238
-052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00
-000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120
-1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6
-FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123
-2111213236373E01371406070E0123211121112311331121113311213216171E0107B432
-35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901
-C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001
-FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01
-07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F
-5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E
-01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079
-646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575
-07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002
-0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716
-191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E
-1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF
-E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F
-5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001
-8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901
-030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F
-1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902
-09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B
-0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D
-10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6
-FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000
-052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100
-71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D
-011406070E0123211121152111213216171E01073426272E01232111213236373E01052C
-554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C
-B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1
-021600250000000100C80000048A05D10005001F401003013504030000070F0701021403
-6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002
-000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013
-0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12
-392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705
-9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE
-9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E
-093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116
-09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33
-35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733
-350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112
-392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD
-2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01
-2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01
-0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C
-912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B
-18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051
-FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040
-3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409
-0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217
-392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607
-0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322
-06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63
-F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52
-A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818
-151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023
-0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8
-FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207
-14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133
-0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093
-40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D
-0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308
-030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18
-10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331
-305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB
-D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100
-000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500
-6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02
-1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504
-4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6
-5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A
-FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607
-0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B
-5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD
-051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F
-01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311
-210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6
-030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6
-FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216
-00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000
-000100C80000053B05D100070027401703350603010501140078090F0940095009030414
-056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA
-DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000
-FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801
-461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700
-03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40
-0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710
-FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F
-010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186
-05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1
-001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E
-150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17
-3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01
-272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107
-0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A
-8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC
-4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170
-B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C
-0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED
-392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1
-FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502
-0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33
-12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304
-EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930
-2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814
-05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333
-31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500
-000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814
-05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD
-32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC
-05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B
-1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123
-0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321
-11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01
-0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25
-2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055
-4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040
-150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D
-002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321
-113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD
-EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8
-23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416
-560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B
-ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111
-3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298
-C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061
-FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718
-34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C
-1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F
-3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E
-01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051
-F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF
-676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0
-000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C
-03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F
-6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023
-2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01
-03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC
-FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000
-04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305
-0506060F113440030103030012340F03000519150904060309045F050105120114007821
-0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD
-C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133
-04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0
-026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216
-0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039
-6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A
-223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F
-ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01
-37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE
-4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F
-B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959
-11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9
-00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37
-12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F
-35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931
-302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332
-36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E
-4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A
-045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F
-19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806
-10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009
-FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E
-1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11
-332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111
-3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101
-F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632
-045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF
-E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910
-37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E
-0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07
-0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417
-39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD
-3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711
-33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F
-1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02
-01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159
-631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D
-10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F
-06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B
-5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01
-1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534
-26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D
-49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342
-546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11
-110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02
-0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B
-0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311
-01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017
-0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102
-04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960
-190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33
-2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA
-FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6
-94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635
-1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713
-3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700
-001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239
-2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E
-01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924
-2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021
-003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303
-1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107
-0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307
-201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D
-1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503
-4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02
-030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20
-0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D
-012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2
-023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105
-0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED
-31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF
-006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005
-011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311
-210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A
-FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849
-014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00
-0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E
-013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951
-0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627
-D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000
-4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
-2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF
-003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622
-011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B
-0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E
-0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B
-33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332
-16171133113E0133321203342623220607111E0133323605112E01232206151416333236
-064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F
-2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D
-DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00
-FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B
-08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188
-0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304
-2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025
-0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902
-092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416
-171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE
-CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809
-1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED
-10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC
-045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108
-0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104
-5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121
-1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002
-000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16
-0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F
-FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E
-0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55
-FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33
-2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617
-05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025
-402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F
-3130013426272E012B0111333236373E01371406070E012321113311333216171E011333
-1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157
-334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000
-0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013
-090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F
-5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01
-037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A
-FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532
-0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313
-061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13
-03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F
-ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521
-2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314
-BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44
-000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03
-3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F
-10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206
-15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC
-D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD
-FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D
-0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603
-09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D
-ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637
-3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01
-AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C
-37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560
-250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28
-59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F
-2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6
-ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322
-0607112311233533353315211521113E01333216171416151406070602070E01232A0127
-35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303
-020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86
-FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682
-0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021
-006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037
-193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340
-090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B
-2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236
-3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E
-0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478
-021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077
-0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900
-30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409
-3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530
-35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED
-31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E
-01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B
-64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A
-183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A
-03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000
-06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8
-FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810
-F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E
-012B0111333236373E01371406070E0123211121112311331121113311333216171E0106
-3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157
-334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001
-00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201
-010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6
-ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123
-3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC
-63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682
-0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D
-FE64047F06150007001500BD404C04063406440650066006700606090307051903170546
-0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B
-0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102
-03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465
-0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933
-2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627
-331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D
-FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027
-0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A
-05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111
-330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B
-B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F
-3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9
-000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F
-0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC
-0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501
-2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015
-0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09
-0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF
-C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006
-0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED
-1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121
-0111330114062322263534363332160734262322061514163332360121152104FFF5FD72
-B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05
-D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D
-000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F
-333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F
-05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F
-ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F
-05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636
-166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130
-2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B
-86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3
-1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455
-0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF
-16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F
-121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607
-0E012322262735331E013332363534262B01353332363534262322060723353E01333216
-15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140
-964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62
-57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C
-05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F
-ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F
-0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D
-1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000
-092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322
-262735331E01333236373E01353426272E012322060711211521153E01333216171E0103
-75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634
-373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F
-000100F3023503A505DA000600414025560101030100012A020203630073000200000351
-0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D
-8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5
-021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B
-0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316
-04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01
-140623222635343637352E0135343633321615140607151E01033426232206151416171E
-01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261
-5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429
-64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D
-304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045
-0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22
-1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED
-5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207
-0E01232224272602353412373624333216171E01173E013534262735331E011514060110
-0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819
-144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863
-630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE
-DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A
-21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F
-2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31
-302B011000232200111000333216173332363534262735331E01151406071E0107342623
-22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA
-9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D
-D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03
-0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D
-050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322
-26272E01351133111416171E01333236373E0135113332363534262735331E0115140623
-052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2
-F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384
-000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509
-051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27
-050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123
-350E01232226351133111416171E0133323637113332363534262735331E011514062B01
-0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD
-8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042
-4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437
-09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523
-353E013534262322060723353E01333216034242426E2F3026211F251803134926516605
-F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144
-8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C
-001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A
-004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560
-0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217
-392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF
-00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510
-0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E
-103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303
-3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752
-0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B
-0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910
-370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104
-2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31
-30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1
-9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15
-44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040
-200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0
-40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED
-002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627
-2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A
-192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788
-912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006
-0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D
-002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2
-A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D
-0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00
-8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533
-1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55
-010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300
-13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A
-0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B
-D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623
-22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21
-42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7
-03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37
-11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED
-D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416
-33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2
-A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC
-A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016
-00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005
-020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E
-5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603
-4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600
-00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701
-0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003
-0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33
-D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327
-07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5
-F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052
-6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010
-6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102
-11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D
-71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E
-9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D
-001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E
-6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00
-0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623
-222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730
-58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022
-02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003
-CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E
-0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E
-5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714
-06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D
-231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805
-4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F
-1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003
-E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B
-0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E
-5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635
-370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C
-6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828
-2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900
-06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A
-0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011
-143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B
-5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406
-071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026
-211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF
-001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068
-FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500
-FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40
-1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A
-BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024
-00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1
-04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35
-3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100
-0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D
-030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116
-025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1
-04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35
-3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B
-3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229
-38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116
-024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82
-041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025
-0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116
-02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116
-0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236
-00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236
-0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000
-055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1
-041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500
-FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535
-FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00
-252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00
-001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068
-FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B
-002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600
-000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A
-B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C
-401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460
-068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025
-2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901
-0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A
-B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016
-400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048
-00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028
-00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF
-FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF
-00C80000053608010236002800000116025C26000013400D0201101020100200100C0203
-252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024
-2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600
-000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900
-000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026
-01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500
-5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E
-031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117
-0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000
-01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82
-02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82
-018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82
-05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82
-0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA
-080102360032000001170256009601750022400B0250340102503470340234B8FFC04009
-090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A
-E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000
-0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535
-005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C
-501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117
-024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1
-0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1
-05DA08010236003200000117025C009600000015400F0302202850288028030028240F03
-252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C
-201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000
-01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A
-FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500
-1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117
-024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D
-3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300
-212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D
-007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C
-0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236
-024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D
-35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02
-002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012
-400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116
-024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7
-008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236
-02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF
-0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF
-006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2
-FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82
-0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529
-080102360038000001170256006201750012400B01502301010023220C00252B35005D35
-FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF
-00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D
-0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160
-28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000
-0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500
-5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760
-27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062
-01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249
-00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000
-011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000
-011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116
-024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B
-FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4
-0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D
-FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025
-2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125
-2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A
-4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018
-401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236
-005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6
-07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35
-FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003
-006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524
-4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B
-2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632
-ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123
-1123350E01232202113436373E0133321617352135213533153301112E01232206151416
-3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C
-B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279
-2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498
-0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102
-24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F
-5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332
-16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9
-1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619
-17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000
-0002000000000000FF4C00780000000000000000000000000000000000000000037D0000
-01020103010401050106010701080109010A010B010C010D010E010F0110011101120113
-011401150116011701180119011A011B011C011D011E011F012001210122012301240125
-0126012701280129012A012B012C012D012E012F01300131013201330134013501360137
-01380139013A013B013C013D013E013F0140014101420143014401450146014701480149
-014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B
-015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D
-016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F
-0180018101820183018401850186018701880189018A018B018C018D018E018F01900191
-01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3
-01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5
-01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7
-01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9
-01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB
-01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD
-01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F
-0210021102120213021402150216021702180219021A021B021C021D021E021F02200221
-02220223022402250226022702280229022A022B022C022D022E022F0230023102320233
-023402350236023702380239023A023B023C023D023E023F024002410242024302440245
-0246024702480249024A024B024C024D024E024F02500251025202530254025502560257
-02580259025A025B025C025D025E025F0260026102620263026402650266026702680269
-026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B
-027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D
-028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F
-02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1
-02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3
-02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5
-02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7
-02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9
-02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B
-030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D
-031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F
-0330033103320333033403350336033703380339033A033B033C033D033E033F03400341
-03420343034403450346034703480349034A034B034C034D034E034F0350035103520353
-035403550356035703580359035A035B035C035D035E035F036003610362036303640365
-0366036703680369036A036B036C036D036E036F03700371037203730374037503760377
-03780379037A037B037C037D037E037F0380038103820383038403850386038703880389
-038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B
-039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD
-03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF
-03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1
-03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3
-03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5
-03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407
-04080409040A040B040C040D040E040F0410041104120413041404150416041704180419
-041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B
-042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D
-043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F
-0450045104520453045404550456045704580459045A045B045C045D045E045F04600461
-04620463046404650466046704680469046A046B046C046D046E046F0470047104720473
-047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E
-6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572
-7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573
-696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04
-706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03
-6F6E650374776F05746872656504666F757204666976650373697805736576656E056569
-676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07
-67726561746572087175657374696F6E0261740141014201430144014501460147014801
-49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B
-627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61
-7363696963697263756D0A756E64657273636F7265056772617665016101620163016401
-650166016701680169016A016B016C016D016E016F017001710172017301740175017601
-7701780179017A0962726163656C656674036261720A627261636572696768740A617363
-696974696C646509416469657265736973054172696E670843636564696C6C6106456163
-757465064E74696C6465094F646965726573697309556469657265736973066161637574
-65066167726176650B6163697263756D666C657809616469657265736973066174696C64
-65056172696E670863636564696C6C6106656163757465066567726176650B6563697263
-756D666C65780965646965726573697306696163757465066967726176650B6963697263
-756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176
-650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574
-65067567726176650B7563697263756D666C657809756469657265736973066461676765
-72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65
-74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F
-707972696768740974726164656D61726B056163757465086469657265736973086E6F74
-657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C
-657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961
-6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C
-0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C
-6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E
-6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D
-656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C
-697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64
-61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768
-740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67
-650979646965726573697309596469657265736973086672616374696F6E044575726F0D
-6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964
-616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261
-73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66
-6C65780B4563697263756D666C6578064161637574650945646965726573697306456772
-617665064961637574650B4963697263756D666C65780949646965726573697306496772
-617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465
-0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66
-6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E
-6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06
-4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A
-6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574
-650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065
-72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861
-6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762
-72657665066762726576650449646F740853636564696C6C610873636564696C6C610643
-61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F
-76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65
-6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E
-656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375
-7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61
-63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375
-7465065261637574650672616375746506526361726F6E06726361726F6E065361637574
-65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463
-61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465
-065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461
-0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370
-68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72
-0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563
-6F6E64096166696936313234380961666969363132383906483232303733064831383534
-3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761
-6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404
-63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445
-646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F
-740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578
-0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465
-07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E
-656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B
-636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C
-6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E
-67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564
-696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65
-7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D
-6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B
-5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B
-7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163
-757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61
-7368616375746509616E6F74656C65696106576772617665067767726176650657616375
-746506776163757465095764696572657369730977646965726573697306596772617665
-067967726176650D71756F74657265766572736564097261646963616C65780961666969
-303839343109657374696D61746564096F6E656569676874680C74687265656569676874
-68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363
-656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374
-6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F
-7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F
-730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861
-04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61
-707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553
-69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164
-696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65
-7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C
-6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105
-746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69
-63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567
-610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372
-6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969
-313030323309616669693130303531096166696931303035320961666969313030353309
-616669693130303534096166696931303035350961666969313030353609616669693130
-303537096166696931303035380961666969313030353909616669693130303630096166
-696931303036310961666969313030363209616669693130313435096166696931303031
-370961666969313030313809616669693130303139096166696931303032300961666969
-313030323109616669693130303232096166696931303032340961666969313030323509
-616669693130303236096166696931303032370961666969313030323809616669693130
-303239096166696931303033300961666969313030333109616669693130303332096166
-696931303033330961666969313030333409616669693130303335096166696931303033
-360961666969313030333709616669693130303338096166696931303033390961666969
-313030343009616669693130303431096166696931303034320961666969313030343309
-616669693130303434096166696931303034350961666969313030343609616669693130
-303437096166696931303034380961666969313030343909616669693130303635096166
-696931303036360961666969313030363709616669693130303638096166696931303036
-390961666969313030373009616669693130303732096166696931303037330961666969
-313030373409616669693130303735096166696931303037360961666969313030373709
-616669693130303738096166696931303037390961666969313030383009616669693130
-303831096166696931303038320961666969313030383309616669693130303834096166
-696931303038350961666969313030383609616669693130303837096166696931303038
-380961666969313030383909616669693130303930096166696931303039310961666969
-313030393209616669693130303933096166696931303039340961666969313030393509
-616669693130303936096166696931303039370961666969313030373109616669693130
-303939096166696931303130300961666969313031303109616669693130313032096166
-696931303130330961666969313031303409616669693130313035096166696931303130
-360961666969313031303709616669693130313038096166696931303130390961666969
-313031313009616669693130313933096166696931303035300961666969313030393809
-616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C
-74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65
-7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65
-696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068
-35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568
-6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62
-096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835
-393108676C79706835393208676C79706835393308676C79706835393408676C79706835
-393508676C79706835393608676C79706835393708676C79706835393808676C79706835
-393908676C79706836303008676C79706836303108676C79706836303208676C79706836
-303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F
-6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061
-63697263756D666C65786163757465104163697263756D666C6578677261766510616369
-7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461
-63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465
-106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F
-77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162
-7265766561637574650B41627265766567726176650B61627265766567726176650F4162
-72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665
-74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272
-657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F
-6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972
-63756D666C65786163757465106563697263756D666C6578616375746510456369726375
-6D666C65786772617665106563697263756D666C65786772617665144563697263756D66
-6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563
-697263756D666C657874696C6465106563697263756D666C657874696C64651345636972
-63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A
-49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74
-62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79
-70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861
-74616671616D617473056869726971057473657265057365676F6C057061746168067161
-6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166
-0472616665057061736571077368696E646F740673696E646F7408736F66706173757104
-616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865
-740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65
-6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C
-70650270650A66696E616C747361646905747361646903716F660472657368047368696E
-0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265
-73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F
-740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564
-686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73
-68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410
-7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174
-7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461
-6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461
-676573680974657464616765736809796F646461676573680E66696E616C6B6166646167
-657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809
-6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368
-0870656461676573680B747361646964616765736809716F666461676573680A72657368
-6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07
-62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572
-6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674
-746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338
-380961666969353734303309616669693537343037096166696935373430390961666969
-353734343009616669693537343531096166696935373435320961666969353734353309
-616669693537343534096166696935373435350961666969353734353609616669693537
-343537096166696935373435380961666969353733393209616669693537333933096166
-696935373339340961666969353733393509616669693537333936096166696935373339
-370961666969353733393809616669693537333939096166696935373430300961666969
-353734303109616669693537333831096166696935373436310961666969363331363709
-616669693537343539096166696935373534330961666969353735333409616669693537
-343934096166696936323834330961666969363238343409616669693632383435096166
-696936343234300961666969363432343109616669693633393534096166696935373338
-320961666969363432343209616669693632383831096166696935373530340961666969
-353733363909616669693537333730096166696935373337310961666969353733373209
-616669693537333733096166696935373337340961666969353733373509616669693537
-333931096166696935373437310961666969353734363009616669693532323538096166
-696935373530360961666969363239353809616669693632393536096166696935323935
-370961666969353735303509616669693632383839096166696936323838370961666969
-363238383809616669693537353037096166696936323936310961666969363239353909
-616669693632393630096166696935373530380961666969363239363209616669693537
-353637096166696936323936340961666969353233303509616669693532333036096166
-696935373530390961666969363239363709616669693632393635096166696936323936
-360961666969353735353509616669693532333634096166696936333735330961666969
-363337353409616669693633373539096166696936333736330961666969363337393509
-616669693632383931096166696936333830380961666969363239333809616669693633
-383130096166696936323934320961666969363239343709616669693633383133096166
-696936333832330961666969363338323409616669693633383333096166696936333834
-340961666969363238383209616669693632383833096166696936323838340961666969
-363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A
-4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375
-7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665
-106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F
-7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874
-696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74
-62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465
-0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68
-6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C
-64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74
-62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665>
-<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568
-6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75
-686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D
-55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832
-08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61
-626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974
-696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009
-0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6
-FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039
-FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059
-FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0
-FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6
-FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039
-FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A
-FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5
-FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB
-FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2
-FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C
-FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E
-FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052
-FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010
-FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090
-FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052
-FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0
-FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A
-FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037
-FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064
-FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6
-FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D
-FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044
-FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB
-FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037
-FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C
-FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4
-FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059
-FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010
-FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026
-FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046
-FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058
-FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090
-FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0
-FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090
-FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E
-FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C
-FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1
-FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E
-FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058
-FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0
-FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032
-FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064
-FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1
-FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E
-FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A
-FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055
-FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0
-FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2
-FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044
-FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091
-FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2
-FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C
-FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037
-FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010
-FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060
-0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059
-FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1
-FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C
-FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059
-FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C
-FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0
-FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010
-FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F
-FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0
-FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F
-FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1
-FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A
-FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2
-FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047
-FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0
-FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010
-FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054
-FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF
-FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F
-FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB
-FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB
-FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036
-FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D
-FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D
-FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036
-FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D
-FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D
-FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011
-FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056
-FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F
-FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C
-006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039
-FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C
-FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3
-06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205
-05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E
-801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608
-2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0
-3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D
-010104050030819E311F301D060355040A1316566572695369676E205472757374204E65
-74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603
-55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520
-526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544
-2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030
-30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269
-5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967
-6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D
-70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249
-4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30
-819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D
-2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A
-B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881
-1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797
-6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100
-3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F
-5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09
-16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8
-C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43
-ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30
-1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603
-55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369
-676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355
-040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572
-695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331
-3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053
-74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054
-72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920
-41434345505445442C20286329393720566572695369676E2C20496E632E311730150603
-55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E
-657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD
-8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC
-F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B
-D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265
-E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181
-006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508
-2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1
-5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E
-A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210
-7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130
-0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C
-20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20
-536F667477617265205075626C697368657273204341301E170D39383034313630303030
-30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74
-65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603
-55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075
-626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63
-6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49
-41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61
-73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E
-207632310B3009060355040613025553311330110603550408130A57617368696E67746F
-6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73
-6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420
-436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030
-8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0
-D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9
-6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765
-DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C
-4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F
-7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2
-A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64
-E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B
-0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338
-CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355
-040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967
-6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182
-0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116
-0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A
-0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E
-636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469
-66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E
-642069747320757365206973207374726963746C790A7375626A65637420746F2C207468
-6520566572695369676E2043657274696669636174696F6E205072616374696365205374
-6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65
-20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470
-733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043
-50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C
-20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C
-204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967
-6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874
-732052657365727665642E204345525441494E0A57415252414E5449455320444953434C
-41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E
-473A2054484520555345204F462054484953204345525449464943415445204953205354
-524943544C59205355424A45435420544F205448450A564552495349474E204345525449
-4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953
-5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D
-504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544
-494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52
-204649544E45535320464F52204120504152544943554C415220505552504F53452C2041
-4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54
-49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D
-414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74
-656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76
-657269666965645375626A656374417474726962757465730A657874656E73696F6E2076
-616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375
-7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941
-2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73
-69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030
-80060B6086480186F845010701013080302806082B06010505070201161C68747470733A
-2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056
-3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320
-43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20
-286329393720566572695369676E0000000000003016060A2B06010401823702011B0408
-30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B
-25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F
-AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F
-228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728
-2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713
-08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133
-3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172
-65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06
-082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401
-8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630
-1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A
-2B06010401823702010C31443042A01A801800560065007200640061006E006100200046
-006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74
-727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F
-B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7
-CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5
-E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4
-836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF
-88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F
-86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA
-0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030
-8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06
-0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504
-0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E
-2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B
-132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953
-69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608
-2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01
-0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609
-2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648
-86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA
-BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D
-41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342
-DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000>
-] def
-/CharStrings 893 dict dup begin
-/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def
-/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def
-/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def
-/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def
-/period 17 def /slash 18 def /zero 19 def /one 20 def
-/two 21 def /three 22 def /four 23 def /five 24 def
-/six 25 def /seven 26 def /eight 27 def /nine 28 def
-/colon 29 def /semicolon 30 def /less 31 def /equal 32 def
-/greater 33 def /question 34 def /at 35 def /A 36 def
-/B 37 def /C 38 def /D 39 def /E 40 def
-/F 41 def /G 42 def /H 43 def /I 44 def
-/J 45 def /K 46 def /L 47 def /M 48 def
-/N 49 def /O 50 def /P 51 def /Q 52 def
-/R 53 def /S 54 def /T 55 def /U 56 def
-/V 57 def /W 58 def /X 59 def /Y 60 def
-/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def
-/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def
-/b 69 def /c 70 def /d 71 def /e 72 def
-/f 73 def /g 74 def /h 75 def /i 76 def
-/j 77 def /k 78 def /l 79 def /m 80 def
-/n 81 def /o 82 def /p 83 def /q 84 def
-/r 85 def /s 86 def /t 87 def /u 88 def
-/v 89 def /w 90 def /x 91 def /y 92 def
-/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def
-/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def
-/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def
-/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def
-/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def
-/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def
-/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def
-/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def
-/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def
-/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def
-/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def
-/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def
-/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def
-/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def
-/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def
-/summation 153 def /product 154 def /pi1 155 def /integral 156 def
-/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def
-/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def
-/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def
-/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def
-/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def
-/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def
-/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def
-/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def
-/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def
-/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def
-/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def
-/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def
-/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def
-/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def
-/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def
-/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def
-/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def
-/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def
-/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def
-/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def
-/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def
-/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def
-/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def
-/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def
-/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def
-/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def
-/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def
-/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def
-/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def
-/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def
-/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def
-/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def
-/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def
-/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def
-/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def
-/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def
-/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def
-/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def
-/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def
-/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def
-/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def
-/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def
-/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def
-/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def
-/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def
-/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def
-/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def
-/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def
-/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def
-/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def
-/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def
-/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def
-/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def
-/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def
-/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def
-/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def
-/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def
-/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def
-/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def
-/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def
-/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def
-/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def
-/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def
-/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def
-/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def
-/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def
-/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def
-/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def
-/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def
-/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def
-/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def
-/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def
-/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def
-/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def
-/zeta 453 def /eta 454 def /theta 455 def /iota 456 def
-/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def
-/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def
-/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def
-/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def
-/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def
-/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def
-/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def
-/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def
-/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def
-/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def
-/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def
-/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def
-/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def
-/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def
-/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def
-/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def
-/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def
-/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def
-/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def
-/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def
-/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def
-/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def
-/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def
-/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def
-/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def
-/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def
-/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def
-/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def
-/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def
-/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def
-/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def
-/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def
-/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def
-/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def
-/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def
-/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def
-/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def
-/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def
-/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def
-/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def
-/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def
-/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def
-/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def
-/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def
-/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def
-/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def
-/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def
-/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def
-/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def
-/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def
-/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def
-/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def
-/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def
-/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def
-/bet 673 def /gimel 674 def /dalet 675 def /he 676 def
-/vav 677 def /zayin 678 def /het 679 def /tet 680 def
-/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def
-/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def
-/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def
-/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def
-/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def
-/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def
-/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def
-/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def
-/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def
-/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def
-/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def
-/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def
-/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def
-/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def
-/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def
-/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def
-/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def
-/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def
-/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def
-/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def
-/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def
-/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def
-/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def
-/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def
-/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def
-/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def
-/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def
-/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def
-/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def
-/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def
-/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def
-/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def
-/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def
-/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def
-/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def
-/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def
-/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def
-/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def
-/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def
-/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def
-/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def
-/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def
-/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def
-/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def
-/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def
-/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def
-/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def
-/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def
-/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def
-/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def
-/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def
-/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def
-/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def
-
-end readonly def
-FontName currentdict end definefont pop
-%%EndFont
-%%EndProlog
-mpldict begin
-13.5 175.5 translate
-585 441 0 0 clipbox
-% polygon
-1.000 setgray
-1.000 setlinewidth
-0 setlinejoin
-2 setlinecap
-[] 0 setdash
-0 0 m
-0 441 l
-585 441 l
-585 0 l
-closepath
-gsave
-fill
-grestore
-stroke
-% polygon
-0.000 setgray
-73.125 44.1 m
-73.125 396.9 l
-526.5 396.9 l
-526.5 44.1 l
-closepath
-gsave
-1.000 setgray
-fill
-grestore
-stroke
-% draw_lines
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 341.084 m
-76.667 340.708 l
-80.209 339.574 l
-83.751 337.667 l
-87.293 334.958 l
-90.835 331.405 l
-94.377 326.949 l
-97.919 321.506 l
-101.461 314.959 l
-105.003 307.144 l
-108.545 297.819 l
-112.087 286.607 l
-115.629 272.882 l
-119.171 255.463 l
-122.713 231.623 l
-126.255 191.605 l
-129.797 103.027 l
-133.339 189.379 l
-136.881 202.932 l
-140.423 203.284 l
-143.965 191.777 l
-147.507 147.593 l
-151.049 193.483 l
-154.591 200.946 l
-158.133 199.387 l
-161.675 188.957 l
-165.217 143.486 l
-168.759 180.998 l
-172.301 191.170 l
-175.843 191.200 l
-179.385 183.119 l
-182.927 155.818 l
-186.469 166.661 l
-190.011 181.010 l
-193.553 182.971 l
-197.095 177.076 l
-200.637 157.567 l
-204.179 150.322 l
-207.721 171.053 l
-211.263 175.126 l
-214.805 171.229 l
-218.347 156.530 l
-221.889 128.062 l
-225.431 161.185 l
-228.973 167.631 l
-232.515 165.609 l
-236.057 154.358 l
-239.599 74.463 l
-243.141 151.102 l
-246.683 160.365 l
-250.225 160.169 l
-253.767 151.622 l
-257.309 119.107 l
-260.851 140.326 l
-264.393 153.187 l
-267.935 154.839 l
-271.477 148.556 l
-275.019 126.619 l
-278.561 127.980 l
-282.103 145.946 l
-285.645 149.548 l
-289.187 145.259 l
-292.729 129.081 l
-296.271 111.844 l
-299.812 138.465 l
-303.354 144.220 l
-306.896 141.769 l
-310.438 129.466 l
-313.980 80.114 l
-317.522 130.512 l
-321.064 138.774 l
-324.606 138.087 l
-328.148 128.702 l
-331.690 86.924 l
-335.232 121.741 l
-338.774 133.118 l
-342.316 134.191 l
-345.858 127.176 l
-349.400 101.638 l
-352.942 111.541 l
-356.484 127.140 l
-360.026 130.041 l
-363.568 125.064 l
-367.110 106.776 l
-370.652 98.551 l
-374.194 120.692 l
-377.736 125.577 l
-381.278 122.435 l
-384.820 108.642 l
-388.362 78.089 l
-391.904 113.570 l
-395.446 120.713 l
-398.988 119.291 l
-402.530 108.713 l
-406.072 43.008 l
-409.614 105.462 l
-413.156 115.325 l
-416.698 115.577 l
-420.240 107.501 l
-423.782 76.568 l
-427.324 95.836 l
-430.866 109.233 l
-434.408 111.171 l
-437.950 105.155 l
-441.492 83.904 l
-445.034 83.647 l
-448.576 102.154 l
-452.118 105.845 l
-455.660 101.582 l
-459.202 85.611 l
-462.744 66.167 l
-466.286 93.605 l
-469.828 99.169 l
-473.370 96.397 l
-476.912 83.814 l
-480.454 27.509 l
-483.996 82.648 l
-487.538 90.217 l
-491.080 88.573 l
-494.622 78.102 l
-498.164 37.173 l
-501.706 66.931 l
-505.248 76.324 l
-508.790 74.675 l
-512.332 64.142 l
-515.874 34.431 l
-519.416 35.180 l
-522.958 37.945 l
-stroke
-grestore
-% draw_lines
-0 setlinecap
-[6 6] 0 setdash
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 344.638 m
-76.667 344.021 l
-80.209 342.148 l
-83.751 338.946 l
-87.293 334.276 l
-90.835 327.903 l
-94.377 319.427 l
-97.919 308.120 l
-101.461 292.475 l
-105.003 268.454 l
-108.545 213.072 l
-112.087 218.519 l
-115.629 259.152 l
-119.171 273.925 l
-122.713 280.520 l
-126.255 282.309 l
-129.797 280.332 l
-133.339 274.683 l
-136.881 264.621 l
-140.423 247.681 l
-143.965 212.929 l
-147.507 184.774 l
-151.049 218.234 l
-154.591 243.484 l
-158.133 254.844 l
-161.675 259.959 l
-165.217 260.773 l
-168.759 257.793 l
-172.301 250.665 l
-175.843 237.757 l
-179.385 212.685 l
-182.927 178.994 l
-186.469 -424.877 l
-190.011 217.746 l
-193.553 235.408 l
-197.095 243.801 l
-200.637 247.028 l
-204.179 246.206 l
-207.721 241.360 l
-211.263 231.429 l
-214.805 212.332 l
-218.347 138.495 l
-221.889 185.787 l
-225.431 183.612 l
-228.973 217.038 l
-232.515 229.873 l
-236.057 235.734 l
-239.599 237.005 l
-243.141 234.198 l
-246.683 226.722 l
-250.225 211.859 l
-253.767 169.476 l
-257.309 186.593 l
-260.851 173.823 l
-264.393 194.732 l
-267.935 216.079 l
-271.477 225.369 l
-275.019 228.930 l
-278.561 228.116 l
-282.103 222.822 l
-285.645 211.246 l
-289.187 183.443 l
-292.729 181.050 l
-296.271 187.513 l
-299.812 178.164 l
-303.354 199.915 l
-306.896 214.825 l
-310.438 221.217 l
-313.980 222.524 l
-317.522 219.301 l
-321.064 210.468 l
-324.606 190.157 l
-328.148 169.944 l
-331.690 189.675 l
-335.232 181.582 l
-338.774 172.547 l
-342.316 202.663 l
-345.858 213.205 l
-349.400 216.995 l
-352.942 215.878 l
-356.484 209.487 l
-360.026 194.151 l
-363.568 141.332 l
-367.110 188.290 l
-370.652 190.018 l
-374.194 168.185 l
-377.736 185.194 l
-381.278 203.994 l
-384.820 211.108 l
-388.362 212.316 l
-391.904 208.247 l
-395.446 196.681 l
-398.988 154.875 l
-402.530 184.658 l
-406.072 192.833 l
-409.614 186.663 l
-413.156 -460.889 l
-416.698 191.640 l
-420.240 204.277 l
-423.782 208.351 l
-427.324 206.663 l
-430.866 198.243 l
-434.408 172.764 l
-437.950 178.651 l
-441.492 193.308 l
-445.034 193.407 l
-448.576 179.767 l
-452.118 167.615 l
-455.660 195.351 l
-459.202 203.595 l
-462.744 204.597 l
-466.286 199.048 l
-469.828 181.359 l
-473.370 168.699 l
-476.912 192.336 l
-480.454 196.765 l
-483.996 191.640 l
-487.538 166.317 l
-491.080 180.819 l
-494.622 197.324 l
-498.164 201.811 l
-501.706 199.150 l
-505.248 186.669 l
-508.790 146.473 l
-512.332 190.158 l
-515.874 198.473 l
-519.416 197.844 l
-522.958 187.711 l
-stroke
-grestore
-% draw_lines
-[3 5 1 5] 0 setdash
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 344.646 m
-76.667 344.163 l
-80.209 342.697 l
-83.751 340.206 l
-87.293 336.608 l
-90.835 331.765 l
-94.377 325.450 l
-97.919 317.263 l
-101.461 306.406 l
-105.003 290.855 l
-108.545 260.984 l
-112.087 257.910 l
-115.629 270.113 l
-119.171 268.975 l
-122.713 260.468 l
-126.255 240.233 l
-129.797 221.580 l
-133.339 244.142 l
-136.881 246.939 l
-140.423 241.790 l
-143.965 226.836 l
-147.507 180.268 l
-151.049 224.403 l
-154.591 230.521 l
-158.133 227.898 l
-161.675 216.607 l
-165.217 170.426 l
-168.759 207.344 l
-172.301 217.011 l
-175.843 216.608 l
-179.385 208.152 l
-182.927 180.524 l
-186.469 191.080 l
-190.011 205.174 l
-193.553 206.908 l
-197.095 200.811 l
-200.637 181.119 l
-204.179 173.710 l
-207.721 194.292 l
-211.263 198.229 l
-214.805 194.208 l
-218.347 179.396 l
-221.889 150.824 l
-225.431 183.851 l
-228.973 190.209 l
-232.515 188.106 l
-236.057 176.779 l
-239.599 96.814 l
-243.141 173.388 l
-246.683 182.589 l
-250.225 182.337 l
-253.767 173.737 l
-257.309 141.172 l
-260.851 162.345 l
-264.393 175.162 l
-267.935 176.773 l
-271.477 170.451 l
-275.019 148.477 l
-278.561 149.804 l
-282.103 167.738 l
-285.645 171.309 l
-289.187 166.991 l
-292.729 150.785 l
-296.271 133.522 l
-299.812 160.118 l
-303.354 165.850 l
-306.896 163.377 l
-310.438 151.052 l
-313.980 101.679 l
-317.522 152.059 l
-321.064 160.303 l
-324.606 159.598 l
-328.148 150.196 l
-331.690 108.402 l
-335.232 143.204 l
-338.774 154.567 l
-342.316 155.626 l
-345.858 148.598 l
-349.400 123.046 l
-352.942 132.938 l
-356.484 148.525 l
-360.026 151.416 l
-363.568 146.427 l
-367.110 128.129 l
-370.652 119.895 l
-374.194 142.026 l
-377.736 146.903 l
-381.278 143.752 l
-384.820 129.951 l
-388.362 99.390 l
-391.904 134.864 l
-395.446 141.999 l
-398.988 140.570 l
-402.530 129.986 l
-406.072 64.275 l
-409.614 126.723 l
-413.156 136.580 l
-416.698 136.826 l
-420.240 128.745 l
-423.782 97.807 l
-427.324 117.071 l
-430.866 130.463 l
-434.408 132.397 l
-437.950 126.376 l
-441.492 105.122 l
-445.034 104.861 l
-448.576 123.364 l
-452.118 127.052 l
-455.660 122.786 l
-459.202 106.813 l
-462.744 87.365 l
-466.286 114.801 l
-469.828 120.363 l
-473.370 117.588 l
-476.912 105.003 l
-480.454 48.696 l
-483.996 103.833 l
-487.538 111.400 l
-491.080 109.755 l
-494.622 99.282 l
-498.164 58.352 l
-501.706 88.110 l
-505.248 97.502 l
-508.790 95.852 l
-512.332 85.318 l
-515.874 55.606 l
-519.416 56.356 l
-522.958 59.120 l
-stroke
-grestore
-% draw_lines
-[1 3] 0 setdash
-gsave
-453.375 352.800 73.125 44.100 clipbox
-73.125 346.280 m
-76.667 345.676 l
-80.209 343.845 l
-83.751 340.736 l
-87.293 336.248 l
-90.835 330.224 l
-94.377 322.407 l
-97.919 312.371 l
-101.461 299.341 l
-105.003 281.601 l
-108.545 253.253 l
-112.087 220.282 l
-115.629 233.441 l
-119.171 220.121 l
-122.713 198.594 l
-126.255 213.622 l
-129.797 232.741 l
-133.339 242.085 l
-136.881 243.804 l
-140.423 237.025 l
-143.965 203.960 l
-147.507 230.388 l
-151.049 244.073 l
-154.591 246.690 l
-158.133 241.191 l
-161.675 219.125 l
-165.217 223.903 l
-168.759 241.739 l
-172.301 245.662 l
-175.843 241.477 l
-179.385 224.009 l
-182.927 215.555 l
-186.469 238.476 l
-190.011 243.766 l
-193.553 240.795 l
-197.095 226.371 l
-200.637 204.635 l
-204.179 234.918 l
-207.721 241.638 l
-211.263 239.805 l
-214.805 227.701 l
-218.347 187.148 l
-221.889 231.207 l
-225.431 239.460 l
-228.973 238.716 l
-232.515 228.509 l
-236.057 142.756 l
-239.599 227.342 l
-243.141 237.284 l
-246.683 237.602 l
-250.225 229.015 l
-253.767 188.027 l
-257.309 223.261 l
-260.851 235.117 l
-264.393 236.489 l
-267.935 229.330 l
-271.477 199.520 l
-275.019 218.852 l
-278.561 232.949 l
-282.103 235.386 l
-285.645 229.515 l
-289.187 205.946 l
-292.729 213.941 l
-296.271 230.761 l
-299.812 234.290 l
-303.354 229.607 l
-306.896 210.254 l
-310.438 208.235 l
-313.980 228.529 l
-317.522 233.195 l
-321.064 229.626 l
-324.606 213.410 l
-328.148 201.185 l
-331.690 226.226 l
-335.232 232.097 l
-338.774 229.588 l
-342.316 215.852 l
-345.858 191.524 l
-349.400 223.818 l
-352.942 230.985 l
-356.484 229.500 l
-360.026 217.812 l
-363.568 174.865 l
-367.110 221.263 l
-370.652 229.851 l
-374.194 229.371 l
-377.736 219.429 l
-381.278 138.835 l
-384.820 218.509 l
-388.362 228.686 l
-391.904 229.202 l
-395.446 220.789 l
-398.988 179.721 l
-402.530 215.482 l
-406.072 227.478 l
-409.614 228.996 l
-413.156 221.953 l
-416.698 191.902 l
-420.240 212.081 l
-423.782 226.215 l
-427.324 228.754 l
-430.866 222.960 l
-434.408 199.153 l
-437.950 208.147 l
-441.492 224.884 l
-445.034 228.476 l
-448.576 223.841 l
-452.118 204.278 l
-455.660 203.420 l
-459.202 223.466 l
-462.744 228.160 l
-466.286 224.618 l
-469.828 208.221 l
-473.370 197.415 l
-476.912 221.941 l
-480.454 227.805 l
-483.996 225.308 l
-487.538 211.417 l
-491.080 189.040 l
-494.622 220.282 l
-498.164 227.408 l
-501.706 225.922 l
-505.248 214.102 l
-508.790 174.825 l
-512.332 218.457 l
-515.874 226.966 l
-519.416 226.472 l
-522.958 216.418 l
-stroke
-grestore
-% text
-/Verdana findfont
-18.000 scalefont
-setfont
-119.312 403.956 m
-0 4 rmoveto
-(Smoothing window in frequency-domain) show
-% text
-/Verdana findfont
-14.000 scalefont
-setfont
-62.469 30.1 m
-(0.0) show
-% line
-0.500 setlinewidth
-[] 0 setdash
-163.800 44.100 m 163.800 48.100 l
-stroke
-% line
-163.800 392.900 m 163.800 396.900 l
-stroke
-% text
-153.175 30.1 m
-(0.1) show
-% line
-254.475 44.100 m 254.475 48.100 l
-stroke
-% line
-254.475 392.900 m 254.475 396.900 l
-stroke
-% text
-243.85 30.1 m
-(0.2) show
-% line
-345.150 44.100 m 345.150 48.100 l
-stroke
-% line
-345.150 392.900 m 345.150 396.900 l
-stroke
-% text
-334.994 30.1 m
-(0.3) show
-% line
-435.825 44.100 m 435.825 48.100 l
-stroke
-% line
-435.825 392.900 m 435.825 396.900 l
-stroke
-% text
-424.825 30.1 m
-(0.4) show
-% text
-515.844 30.1 m
-(0.5) show
-% text
-221.875 11.1 m
-0 3 rmoveto
-(Normalized Frequency) show
-% text
-37.062 39.1 m
-(-100) show
-% line
-73.125 91.140 m 77.125 91.140 l
-stroke
-% line
-522.500 91.140 m 526.500 91.140 l
-stroke
-% text
-47.062 86.14 m
-(-80) show
-% line
-73.125 138.180 m 77.125 138.180 l
-stroke
-% line
-522.500 138.180 m 526.500 138.180 l
-stroke
-% text
-47.062 133.18 m
-(-60) show
-% line
-73.125 185.220 m 77.125 185.220 l
-stroke
-% line
-522.500 185.220 m 526.500 185.220 l
-stroke
-% text
-47.062 180.22 m
-(-40) show
-% line
-73.125 232.260 m 77.125 232.260 l
-stroke
-% line
-522.500 232.260 m 526.500 232.260 l
-stroke
-% text
-47.062 227.26 m
-(-20) show
-% line
-73.125 279.300 m 77.125 279.300 l
-stroke
-% line
-522.500 279.300 m 526.500 279.300 l
-stroke
-% text
-61.812 274.3 m
-(0) show
-% line
-73.125 326.340 m 77.125 326.340 l
-stroke
-% line
-522.500 326.340 m 526.500 326.340 l
-stroke
-% text
-53.062 321.34 m
-(20) show
-% line
-73.125 373.380 m 77.125 373.380 l
-stroke
-% line
-522.500 373.380 m 526.500 373.380 l
-stroke
-% text
-52.938 368.38 m
-(40) show
-% text
-32.062 168.461 m
-gsave
-90 rotate
-0 3 rmoveto
-(Magnitude \(dB\)) show
-grestore
-% polygon
-1.000 setlinewidth
-2 setlinecap
-346.389 279.264 m
-346.389 389.844 l
-517.433 389.844 l
-517.433 279.264 l
-closepath
-gsave
-1.000 setgray
-fill
-grestore
-stroke
-% draw_lines
-362.443 371.629 m
-369.999 371.629 l
-377.555 371.629 l
-385.111 371.629 l
-stroke
-% draw_lines
-0 setlinecap
-[6 6] 0 setdash
-362.443 349.712 m
-369.999 349.712 l
-377.555 349.712 l
-385.111 349.712 l
-stroke
-% draw_lines
-[3 5 1 5] 0 setdash
-362.443 325.795 m
-369.999 325.795 l
-377.555 325.795 l
-385.111 325.795 l
-stroke
-% draw_lines
-[1 3] 0 setdash
-362.443 299.479 m
-369.999 299.479 l
-377.555 299.479 l
-385.111 299.479 l
-stroke
-% text
-/Verdana findfont
-24.000 scalefont
-setfont
-394.179 362.629 m
-(Blackman) show
-% text
-394.179 340.712 m
-(Bartlett) show
-% text
-394.179 314.795 m
-0 5 rmoveto
-(Hanning) show
-% text
-394.179 288.479 m
-0 5 rmoveto
-(Hamming) show
-
-end
-showpage
diff --git a/doc/numpybook/Figures/hierarchy.dia b/doc/numpybook/Figures/hierarchy.dia
deleted file mode 100644
index 65379b880..000000000
--- a/doc/numpybook/Figures/hierarchy.dia
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/Figures/hierarchy.eps b/doc/numpybook/Figures/hierarchy.eps
deleted file mode 100644
index f7538c764..000000000
--- a/doc/numpybook/Figures/hierarchy.eps
+++ /dev/null
@@ -1,5596 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: hierarchy.dia
-%%Creator: Dia v0.94
-%%CreationDate: Wed Jan 4 16:44:07 2006
-%%For: oliphant
-%%Orientation: Portrait
-%%Magnification: 1.0000
-%%BoundingBox: 0 0 743 584
-%%BeginSetup
-%%EndSetup
-%%EndComments
-%%BeginProlog
-[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
-/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
-/two /three /four /five /six /seven /eight /nine /colon /semicolon
-/less /equal /greater /question /at /A /B /C /D /E
-/F /G /H /I /J /K /L /M /N /O
-/P /Q /R /S /T /U /V /W /X /Y
-/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
-/d /e /f /g /h /i /j /k /l /m
-/n /o /p /q /r /s /t /u /v /w
-/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
-/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
-/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
-/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
-/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
-/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
-/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
-/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
-/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
-/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
-/cp {closepath} bind def
-/c {curveto} bind def
-/f {fill} bind def
-/a {arc} bind def
-/ef {eofill} bind def
-/ex {exch} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth pop} bind def
-/tr {translate} bind def
-
-/ellipsedict 8 dict def
-ellipsedict /mtrx matrix put
-/ellipse
-{ ellipsedict begin
- /endangle exch def
- /startangle exch def
- /yrad exch def
- /xrad exch def
- /y exch def
- /x exch def /savematrix mtrx currentmatrix def
- x y tr xrad yrad sc
- 0 0 1 startangle endangle arc
- savematrix setmatrix
- end
-} def
-
-/mergeprocs {
-dup length
-3 -1 roll
-dup
-length
-dup
-5 1 roll
-3 -1 roll
-add
-array cvx
-dup
-3 -1 roll
-0 exch
-putinterval
-dup
-4 2 roll
-putinterval
-} bind def
-/dpi_x 300 def
-/dpi_y 300 def
-/conicto {
- /to_y exch def
- /to_x exch def
- /conic_cntrl_y exch def
- /conic_cntrl_x exch def
- currentpoint
- /p0_y exch def
- /p0_x exch def
- /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def
- /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def
- /p2_x p1_x to_x p0_x sub 1 3 div mul add def
- /p2_y p1_y to_y p0_y sub 1 3 div mul add def
- p1_x p1_y p2_x p2_y to_x to_y curveto
-} bind def
-/start_ol { gsave 1.1 dpi_x div dup scale} bind def
-/end_ol { closepath fill grestore } bind def
-28.346000 -28.346000 scale
--1.702375 -22.793875 translate
-%%EndProlog
-
-
-0.095250 slw
-[1.000000] 0 sd
-[0.127000] 0 sd
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 11.500000 2.250000 m 11.500000 3.750000 l 14.357500 3.750000 l 14.357500 2.250000 l cp s
-gsave 12.000000 3.250000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 12.330200 3.250000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 12.660400 3.250000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 12.990600 3.250000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 13.320800 3.250000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 13.507067 3.250000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 13.642533 3.250000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-0.095250 slw
-[0.127000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 12.500000 6.000000 m 12.500000 7.500000 l 15.357500 7.500000 l 15.357500 6.000000 l cp s
-gsave 13.000000 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 13.330200 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-1792 0 moveto
-1792 314 lineto
-1521 -64 1053 -64 conicto
-847 -64 668 11 conicto
-489 87 402 201 conicto
-316 316 280 490 conicto
-256 606 256 859 conicto
-256 2304 lineto
-655 2304 lineto
-655 1010 lineto
-655 701 679 593 conicto
-717 437 837 348 conicto
-957 259 1135 259 conicto
-1312 259 1467 350 conicto
-1622 441 1686 598 conicto
-1751 755 1751 1054 conicto
-1751 2304 lineto
-2112 2304 lineto
-2112 0 lineto
-1792 0 lineto
-end_ol grestore
-gsave 13.651933 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2008 lineto
-749 2165 930 2266 conicto
-1112 2368 1344 2368 conicto
-1602 2368 1767 2263 conicto
-1932 2159 2001 1979 conicto
-2280 2368 2728 2368 conicto
-3079 2368 3267 2177 conicto
-3456 1986 3456 1589 conicto
-3456 0 lineto
-3057 0 lineto
-3057 1471 lineto
-3057 1709 3018 1813 conicto
-2979 1918 2877 1981 conicto
-2775 2045 2638 2045 conicto
-2390 2045 2226 1881 conicto
-2063 1717 2063 1357 conicto
-2063 0 lineto
-1664 0 lineto
-1664 1517 lineto
-1664 1781 1568 1913 conicto
-1472 2045 1254 2045 conicto
-1088 2045 947 1957 conicto
-807 1869 744 1699 conicto
-681 1530 681 1212 conicto
-681 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 14.143000 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-719 0 moveto
-320 0 lineto
-320 3200 lineto
-747 3200 lineto
-747 2056 lineto
-984 2368 1357 2368 conicto
-1563 2368 1747 2281 conicto
-1931 2194 2050 2038 conicto
-2169 1882 2236 1660 conicto
-2304 1438 2304 1186 conicto
-2304 588 2019 262 conicto
-1735 -64 1337 -64 conicto
-942 -64 719 279 conicto
-719 0 lineto
-719 1170 moveto
-719 751 827 564 conicto
-1003 259 1304 259 conicto
-1549 259 1727 484 conicto
-1905 709 1905 1155 conicto
-1905 1610 1734 1827 conicto
-1563 2045 1320 2045 conicto
-1075 2045 897 1820 conicto
-719 1595 719 1170 conicto
-end_ol grestore
-gsave 14.473200 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 14.803400 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-0.095250 slw
-[0.127000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 22.000000 6.000000 m 22.000000 7.500000 l 24.765000 7.500000 l 24.765000 6.000000 l cp s
-0.095250 slw
-[0.127000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 21.500000 9.500000 m 21.500000 11.000000 l 24.357500 11.000000 l 24.357500 9.500000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 25.000000 9.500000 m 25.000000 10.943875 l 27.857500 10.943875 l 27.857500 9.500000 l cp s
-0.095250 slw
-[1.000000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 6.000000 9.500000 m 6.000000 11.000000 l 8.750000 11.000000 l 8.750000 9.500000 l cp s
-0.095250 slw
-[0.127000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 12.750000 11.500000 m 12.750000 13.000000 l 15.607500 13.000000 l 15.607500 11.500000 l cp s
-0.095250 slw
-[0.127000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 16.700000 11.500000 m 16.700000 13.052375 l 21.227375 13.052375 l 21.227375 11.500000 l cp s
-gsave 22.500000 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-384 0 moveto
-384 1984 lineto
-64 1984 lineto
-64 2307 lineto
-384 2307 lineto
-384 2552 lineto
-384 2785 425 2889 conicto
-481 3029 622 3116 conicto
-764 3203 1018 3203 conicto
-1182 3203 1380 3168 conicto
-1322 2858 lineto
-1201 2880 1096 2880 conicto
-925 2880 854 2804 conicto
-783 2728 783 2520 conicto
-783 2307 lineto
-1216 2307 lineto
-1216 1984 lineto
-783 1984 lineto
-783 0 lineto
-384 0 lineto
-end_ol grestore
-gsave 22.660867 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 22.787867 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 23.118067 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-32 0 moveto
-870 1198 lineto
-95 2304 lineto
-581 2304 lineto
-932 1763 lineto
-1032 1610 1092 1506 conicto
-1187 1649 1267 1759 conicto
-1653 2304 lineto
-2117 2304 lineto
-1325 1219 lineto
-2178 0 lineto
-1701 0 lineto
-1230 716 lineto
-1105 909 lineto
-503 0 lineto
-32 0 lineto
-end_ol grestore
-gsave 23.414400 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 23.549867 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-719 0 moveto
-320 0 lineto
-320 3200 lineto
-747 3200 lineto
-747 2056 lineto
-984 2368 1357 2368 conicto
-1563 2368 1747 2281 conicto
-1931 2194 2050 2038 conicto
-2169 1882 2236 1660 conicto
-2304 1438 2304 1186 conicto
-2304 588 2019 262 conicto
-1735 -64 1337 -64 conicto
-942 -64 719 279 conicto
-719 0 lineto
-719 1170 moveto
-719 751 827 564 conicto
-1003 259 1304 259 conicto
-1549 259 1727 484 conicto
-1905 709 1905 1155 conicto
-1905 1610 1734 1827 conicto
-1563 2045 1320 2045 conicto
-1075 2045 897 1820 conicto
-719 1595 719 1170 conicto
-end_ol grestore
-gsave 23.880067 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 24.007067 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 6.500000 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 6.635467 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 6.965667 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 7.126533 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 7.456733 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 7.786933 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 8.117133 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 13.250000 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-423 0 moveto
-423 2048 lineto
-64 2048 lineto
-64 2379 lineto
-423 2379 lineto
-423 2644 lineto
-423 2894 465 3003 conicto
-522 3148 668 3238 conicto
-814 3328 1076 3328 conicto
-1244 3328 1448 3292 conicto
-1389 2974 lineto
-1265 2997 1157 2997 conicto
-980 2997 906 2915 conicto
-832 2833 832 2608 conicto
-832 2379 lineto
-1280 2379 lineto
-1280 2048 lineto
-832 2048 lineto
-832 0 lineto
-423 0 lineto
-end_ol grestore
-gsave 13.419333 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 3264 lineto
-729 3264 lineto
-729 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 13.554800 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-128 1184 moveto
-128 1847 491 2166 conicto
-794 2432 1230 2432 conicto
-1714 2432 2021 2109 conicto
-2329 1786 2329 1218 conicto
-2329 757 2193 492 conicto
-2057 228 1797 82 conicto
-1537 -64 1230 -64 conicto
-737 -64 432 258 conicto
-128 580 128 1184 conicto
-537 1185 moveto
-537 724 734 495 conicto
-931 267 1230 267 conicto
-1526 267 1723 497 conicto
-1920 727 1920 1198 conicto
-1920 1643 1722 1872 conicto
-1524 2101 1230 2101 conicto
-931 2101 734 1873 conicto
-537 1646 537 1185 conicto
-end_ol grestore
-gsave 13.885000 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-1865 298 moveto
-1640 105 1435 20 conicto
-1230 -64 995 -64 conicto
-608 -64 400 129 conicto
-192 323 192 624 conicto
-192 801 269 946 conicto
-347 1091 472 1179 conicto
-597 1268 754 1314 conicto
-869 1345 1109 1374 conicto
-1599 1432 1831 1513 conicto
-1831 1596 1831 1618 conicto
-1831 1864 1716 1964 conicto
-1562 2101 1256 2101 conicto
-971 2101 835 2001 conicto
-700 1902 635 1649 conicto
-258 1703 lineto
-311 1955 434 2110 conicto
-557 2265 788 2348 conicto
-1020 2432 1325 2432 conicto
-1628 2432 1817 2360 conicto
-2006 2289 2095 2181 conicto
-2185 2073 2220 1908 conicto
-2240 1806 2240 1537 conicto
-2240 1001 lineto
-2240 439 2265 289 conicto
-2291 139 2366 0 conicto
-1946 0 lineto
-1883 127 1865 298 conicto
-1831 1197 moveto
-1611 1108 1170 1045 conicto
-920 1010 817 965 conicto
-714 921 657 834 conicto
-601 748 601 643 conicto
-601 482 723 374 conicto
-846 267 1082 267 conicto
-1316 267 1498 369 conicto
-1681 471 1766 648 conicto
-1831 783 1831 1050 conicto
-1831 1197 lineto
-end_ol grestore
-gsave 14.223667 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-1152 400 moveto
-1209 37 lineto
-1042 0 909 0 conicto
-694 0 575 70 conicto
-456 141 407 257 conicto
-359 373 359 735 conicto
-359 2101 lineto
-64 2101 lineto
-64 2432 lineto
-359 2432 lineto
-359 3021 lineto
-768 3263 lineto
-768 2432 lineto
-1152 2432 lineto
-1152 2101 lineto
-768 2101 lineto
-768 713 lineto
-768 541 788 491 conicto
-808 442 853 413 conicto
-899 384 984 384 conicto
-1048 384 1152 400 conicto
-end_ol grestore
-gsave 14.384533 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 2816 moveto
-320 3264 lineto
-729 3264 lineto
-729 2816 lineto
-320 2816 lineto
-320 0 moveto
-320 2368 lineto
-729 2368 lineto
-729 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 14.520000 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2368 lineto
-704 2368 lineto
-704 2058 lineto
-958 2432 1443 2432 conicto
-1654 2432 1831 2354 conicto
-2008 2277 2095 2151 conicto
-2183 2026 2218 1854 conicto
-2240 1742 2240 1462 conicto
-2240 0 lineto
-1831 0 lineto
-1831 1459 lineto
-1831 1708 1785 1831 conicto
-1740 1955 1624 2028 conicto
-1508 2101 1353 2101 conicto
-1105 2101 924 1936 conicto
-744 1771 744 1310 conicto
-744 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 14.858667 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-183 -196 moveto
-594 -254 lineto
-618 -435 726 -517 conicto
-872 -629 1124 -629 conicto
-1396 -629 1543 -518 conicto
-1691 -407 1743 -206 conicto
-1773 -83 1773 309 conicto
-1516 0 1131 0 conicto
-653 0 390 354 conicto
-128 708 128 1202 conicto
-128 1543 248 1830 conicto
-368 2118 596 2275 conicto
-825 2432 1134 2432 conicto
-1545 2432 1811 2094 conicto
-1811 2368 lineto
-2176 2368 lineto
-2176 321 lineto
-2176 -231 2064 -461 conicto
-1953 -692 1711 -826 conicto
-1470 -960 1117 -960 conicto
-698 -960 440 -769 conicto
-183 -579 183 -196 conicto
-537 1231 moveto
-537 762 718 546 conicto
-900 331 1174 331 conicto
-1444 331 1627 545 conicto
-1811 759 1811 1218 conicto
-1811 1656 1622 1878 conicto
-1433 2101 1167 2101 conicto
-905 2101 721 1882 conicto
-537 1663 537 1231 conicto
-end_ol grestore
-gsave 16.950000 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 17.246333 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 17.568067 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2008 lineto
-749 2165 930 2266 conicto
-1112 2368 1344 2368 conicto
-1602 2368 1767 2263 conicto
-1932 2159 2001 1979 conicto
-2280 2368 2728 2368 conicto
-3079 2368 3267 2177 conicto
-3456 1986 3456 1589 conicto
-3456 0 lineto
-3057 0 lineto
-3057 1471 lineto
-3057 1709 3018 1813 conicto
-2979 1918 2877 1981 conicto
-2775 2045 2638 2045 conicto
-2390 2045 2226 1881 conicto
-2063 1717 2063 1357 conicto
-2063 0 lineto
-1664 0 lineto
-1664 1517 lineto
-1664 1781 1568 1913 conicto
-1472 2045 1254 2045 conicto
-1088 2045 947 1957 conicto
-807 1869 744 1699 conicto
-681 1530 681 1212 conicto
-681 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 18.059133 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 -896 moveto
-320 2304 lineto
-704 2304 lineto
-704 1999 lineto
-827 2178 981 2273 conicto
-1136 2368 1355 2368 conicto
-1641 2368 1860 2214 conicto
-2080 2060 2192 1781 conicto
-2304 1502 2304 1169 conicto
-2304 812 2181 526 conicto
-2058 241 1822 88 conicto
-1586 -64 1327 -64 conicto
-1137 -64 986 19 conicto
-835 102 739 228 conicto
-739 -896 lineto
-320 -896 lineto
-704 1132 moveto
-704 686 877 472 conicto
-1050 259 1297 259 conicto
-1548 259 1726 480 conicto
-1905 701 1905 1164 conicto
-1905 1606 1731 1825 conicto
-1557 2045 1314 2045 conicto
-1074 2045 889 1811 conicto
-704 1577 704 1132 conicto
-end_ol grestore
-gsave 18.389333 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 18.516333 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 18.846533 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-32 0 moveto
-870 1198 lineto
-95 2304 lineto
-581 2304 lineto
-932 1763 lineto
-1032 1610 1092 1506 conicto
-1187 1649 1267 1759 conicto
-1653 2304 lineto
-2117 2304 lineto
-1325 1219 lineto
-2178 0 lineto
-1701 0 lineto
-1230 716 lineto
-1105 909 lineto
-503 0 lineto
-32 0 lineto
-end_ol grestore
-gsave 19.142867 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-384 0 moveto
-384 1984 lineto
-64 1984 lineto
-64 2307 lineto
-384 2307 lineto
-384 2552 lineto
-384 2785 425 2889 conicto
-481 3029 622 3116 conicto
-764 3203 1018 3203 conicto
-1182 3203 1380 3168 conicto
-1322 2858 lineto
-1201 2880 1096 2880 conicto
-925 2880 854 2804 conicto
-783 2728 783 2520 conicto
-783 2307 lineto
-1216 2307 lineto
-1216 1984 lineto
-783 1984 lineto
-783 0 lineto
-384 0 lineto
-end_ol grestore
-gsave 19.303733 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 19.430733 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 19.752467 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-1746 289 moveto
-1529 102 1331 19 conicto
-1133 -64 905 -64 conicto
-530 -64 329 124 conicto
-128 312 128 605 conicto
-128 777 203 919 conicto
-278 1062 399 1148 conicto
-521 1234 672 1278 conicto
-785 1309 1017 1337 conicto
-1490 1394 1713 1472 conicto
-1713 1553 1713 1575 conicto
-1713 1814 1603 1912 conicto
-1453 2045 1158 2045 conicto
-884 2045 753 1948 conicto
-622 1851 560 1605 conicto
-192 1657 lineto
-243 1902 362 2053 conicto
-481 2204 705 2286 conicto
-930 2368 1225 2368 conicto
-1519 2368 1702 2298 conicto
-1886 2229 1972 2124 conicto
-2058 2019 2093 1858 conicto
-2112 1758 2112 1496 conicto
-2112 973 lineto
-2112 427 2137 281 conicto
-2162 135 2235 0 conicto
-1825 0 lineto
-1763 123 1746 289 conicto
-1713 1165 moveto
-1501 1078 1076 1017 conicto
-835 982 735 938 conicto
-635 895 581 811 conicto
-527 727 527 624 conicto
-527 468 645 363 conicto
-763 259 991 259 conicto
-1216 259 1391 358 conicto
-1567 457 1650 630 conicto
-1713 762 1713 1021 conicto
-1713 1165 lineto
-end_ol grestore
-gsave 20.074200 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 20.235067 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 20.370533 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 20.700733 12.500000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 25.750000 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-132 2432 moveto
-552 2432 lineto
-1308 391 lineto
-2063 2432 lineto
-2484 2432 lineto
-1578 0 lineto
-1038 0 lineto
-132 2432 lineto
-end_ol grestore
-gsave 26.097133 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1362 2157 moveto
-1044 2157 859 1905 conicto
-675 1654 675 1216 conicto
-675 779 858 527 conicto
-1042 275 1362 275 conicto
-1678 275 1863 528 conicto
-2048 781 2048 1216 conicto
-2048 1649 1863 1903 conicto
-1678 2157 1362 2157 conicto
-1362 2496 moveto
-1878 2496 2172 2156 conicto
-2467 1817 2467 1215 conicto
-2467 617 2172 276 conicto
-1878 -64 1361 -64 conicto
-843 -64 549 276 conicto
-256 617 256 1215 conicto
-256 1817 549 2156 conicto
-843 2496 1362 2496 conicto
-end_ol grestore
-gsave 26.452733 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-448 2432 moveto
-867 2432 lineto
-867 0 lineto
-448 0 lineto
-448 2432 lineto
-448 3392 moveto
-867 3392 lineto
-867 2880 lineto
-448 2880 lineto
-448 3392 lineto
-end_ol grestore
-gsave 26.622067 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-2013 2064 moveto
-2013 3392 lineto
-2432 3392 lineto
-2432 0 lineto
-2013 0 lineto
-2013 368 lineto
-1889 150 1698 43 conicto
-1508 -64 1241 -64 conicto
-804 -64 530 288 conicto
-256 641 256 1215 conicto
-256 1791 530 2143 conicto
-804 2496 1241 2496 conicto
-1508 2496 1698 2390 conicto
-1888 2284 2013 2064 conicto
-675 1216 moveto
-675 776 853 525 conicto
-1031 275 1343 275 conicto
-1654 275 1833 525 conicto
-2013 776 2013 1216 conicto
-2013 1656 1833 1906 conicto
-1654 2157 1343 2157 conicto
-1031 2157 853 1906 conicto
-675 1656 675 1216 conicto
-end_ol grestore
-gsave 21.750000 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 22.046333 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 3200 lineto
-719 3200 lineto
-719 2064 lineto
-987 2368 1400 2368 conicto
-1655 2368 1842 2266 conicto
-2029 2165 2110 1986 conicto
-2191 1807 2191 1467 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1478 lineto
-1792 1775 1667 1910 conicto
-1543 2045 1316 2045 conicto
-1146 2045 996 1954 conicto
-846 1863 782 1707 conicto
-719 1551 719 1276 conicto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 22.376533 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1746 289 moveto
-1529 102 1331 19 conicto
-1133 -64 905 -64 conicto
-530 -64 329 124 conicto
-128 312 128 605 conicto
-128 777 203 919 conicto
-278 1062 399 1148 conicto
-521 1234 672 1278 conicto
-785 1309 1017 1337 conicto
-1490 1394 1713 1472 conicto
-1713 1553 1713 1575 conicto
-1713 1814 1603 1912 conicto
-1453 2045 1158 2045 conicto
-884 2045 753 1948 conicto
-622 1851 560 1605 conicto
-192 1657 lineto
-243 1902 362 2053 conicto
-481 2204 705 2286 conicto
-930 2368 1225 2368 conicto
-1519 2368 1702 2298 conicto
-1886 2229 1972 2124 conicto
-2058 2019 2093 1858 conicto
-2112 1758 2112 1496 conicto
-2112 973 lineto
-2112 427 2137 281 conicto
-2162 135 2235 0 conicto
-1825 0 lineto
-1763 123 1746 289 conicto
-1713 1165 moveto
-1501 1078 1076 1017 conicto
-835 982 735 938 conicto
-635 895 581 811 conicto
-527 727 527 624 conicto
-527 468 645 363 conicto
-763 259 991 259 conicto
-1216 259 1391 358 conicto
-1567 457 1650 630 conicto
-1713 762 1713 1021 conicto
-1713 1165 lineto
-end_ol grestore
-gsave 22.698267 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 22.884533 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1746 289 moveto
-1529 102 1331 19 conicto
-1133 -64 905 -64 conicto
-530 -64 329 124 conicto
-128 312 128 605 conicto
-128 777 203 919 conicto
-278 1062 399 1148 conicto
-521 1234 672 1278 conicto
-785 1309 1017 1337 conicto
-1490 1394 1713 1472 conicto
-1713 1553 1713 1575 conicto
-1713 1814 1603 1912 conicto
-1453 2045 1158 2045 conicto
-884 2045 753 1948 conicto
-622 1851 560 1605 conicto
-192 1657 lineto
-243 1902 362 2053 conicto
-481 2204 705 2286 conicto
-930 2368 1225 2368 conicto
-1519 2368 1702 2298 conicto
-1886 2229 1972 2124 conicto
-2058 2019 2093 1858 conicto
-2112 1758 2112 1496 conicto
-2112 973 lineto
-2112 427 2137 281 conicto
-2162 135 2235 0 conicto
-1825 0 lineto
-1763 123 1746 289 conicto
-1713 1165 moveto
-1501 1078 1076 1017 conicto
-835 982 735 938 conicto
-635 895 581 811 conicto
-527 727 527 624 conicto
-527 468 645 363 conicto
-763 259 991 259 conicto
-1216 259 1391 358 conicto
-1567 457 1650 630 conicto
-1713 762 1713 1021 conicto
-1713 1165 lineto
-end_ol grestore
-gsave 23.206267 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 23.502600 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 23.663467 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 23.993667 10.500000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 5.500000 6.000000 m 5.500000 7.417500 l 8.437500 7.417500 l 8.437500 6.000000 l cp s
-gsave 6.000000 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 6.321733 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-719 0 moveto
-320 0 lineto
-320 3200 lineto
-747 3200 lineto
-747 2056 lineto
-984 2368 1357 2368 conicto
-1563 2368 1747 2281 conicto
-1931 2194 2050 2038 conicto
-2169 1882 2236 1660 conicto
-2304 1438 2304 1186 conicto
-2304 588 2019 262 conicto
-1735 -64 1337 -64 conicto
-942 -64 719 279 conicto
-719 0 lineto
-719 1170 moveto
-719 751 827 564 conicto
-1003 259 1304 259 conicto
-1549 259 1727 484 conicto
-1905 709 1905 1155 conicto
-1905 1610 1734 1827 conicto
-1563 2045 1320 2045 conicto
-1075 2045 897 1820 conicto
-719 1595 719 1170 conicto
-end_ol grestore
-gsave 6.651933 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
--172 -921 moveto
--98 -606 lineto
-18 -637 85 -637 conicto
-204 -637 262 -557 conicto
-320 -478 320 -160 conicto
-320 2273 lineto
-719 2273 lineto
-719 -168 lineto
-719 -596 606 -756 conicto
-462 -960 134 -960 conicto
--24 -960 -172 -921 conicto
-end_ol grestore
-gsave 6.787400 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 7.117600 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 7.413933 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 7.574800 7.000000 translate 0.035278 -0.035278 scale
-start_ol
--64 -896 moveto
--64 -640 lineto
-2496 -640 lineto
-2496 -896 lineto
--64 -896 lineto
-end_ol grestore
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 1.750000 6.000000 m 1.750000 7.500000 l 4.627500 7.500000 l 4.627500 6.000000 l cp s
-gsave 2.502510 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-729 0 moveto
-320 0 lineto
-320 3264 lineto
-757 3264 lineto
-757 2112 lineto
-1003 2432 1389 2432 conicto
-1602 2432 1792 2343 conicto
-1983 2254 2106 2093 conicto
-2229 1933 2298 1705 conicto
-2368 1478 2368 1220 conicto
-2368 606 2074 271 conicto
-1781 -64 1369 -64 conicto
-960 -64 729 287 conicto
-729 0 lineto
-729 1202 moveto
-729 771 841 580 conicto
-1024 267 1336 267 conicto
-1590 267 1774 498 conicto
-1959 729 1959 1186 conicto
-1959 1655 1781 1878 conicto
-1604 2101 1353 2101 conicto
-1099 2101 914 1870 conicto
-729 1639 729 1202 conicto
-end_ol grestore
-gsave 2.841177 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-128 1184 moveto
-128 1847 491 2166 conicto
-794 2432 1230 2432 conicto
-1714 2432 2021 2109 conicto
-2329 1786 2329 1218 conicto
-2329 757 2193 492 conicto
-2057 228 1797 82 conicto
-1537 -64 1230 -64 conicto
-737 -64 432 258 conicto
-128 580 128 1184 conicto
-537 1185 moveto
-537 724 734 495 conicto
-931 267 1230 267 conicto
-1526 267 1723 497 conicto
-1920 727 1920 1198 conicto
-1920 1643 1722 1872 conicto
-1524 2101 1230 2101 conicto
-931 2101 734 1873 conicto
-537 1646 537 1185 conicto
-end_ol grestore
-gsave 3.171377 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-128 1184 moveto
-128 1847 491 2166 conicto
-794 2432 1230 2432 conicto
-1714 2432 2021 2109 conicto
-2329 1786 2329 1218 conicto
-2329 757 2193 492 conicto
-2057 228 1797 82 conicto
-1537 -64 1230 -64 conicto
-737 -64 432 258 conicto
-128 580 128 1184 conicto
-537 1185 moveto
-537 724 734 495 conicto
-931 267 1230 267 conicto
-1526 267 1723 497 conicto
-1920 727 1920 1198 conicto
-1920 1643 1722 1872 conicto
-1524 2101 1230 2101 conicto
-931 2101 734 1873 conicto
-537 1646 537 1185 conicto
-end_ol grestore
-gsave 3.501577 7.000000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 3264 lineto
-729 3264 lineto
-729 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 3.637043 7.000000 translate 0.035278 -0.035278 scale
-start_ol
--64 -896 moveto
--64 -576 lineto
-2560 -576 lineto
-2560 -896 lineto
--64 -896 lineto
-end_ol grestore
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 12.928800 3.750000 m 12.928800 4.875000 l 6.968750 4.875000 l 6.968750 5.513197 l s
-[] 0 sd
-0 slj
-0 slc
-n 6.968750 5.888197 m 6.718750 5.388197 l 6.968750 5.513197 l 7.218750 5.388197 l ef
-n 6.968750 5.888197 m 6.718750 5.388197 l 6.968750 5.513197 l 7.218750 5.388197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 12.928800 3.750000 m 12.928800 4.875000 l 3.188750 4.875000 l 3.188750 5.513197 l s
-[] 0 sd
-0 slj
-0 slc
-n 3.188750 5.888197 m 2.938750 5.388197 l 3.188750 5.513197 l 3.438750 5.388197 l ef
-n 3.188750 5.888197 m 2.938750 5.388197 l 3.188750 5.513197 l 3.438750 5.388197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 12.928800 3.750000 m 12.928800 4.875000 l 13.928800 4.875000 l 13.928800 5.513197 l s
-[] 0 sd
-0 slj
-0 slc
-n 13.928800 5.888197 m 13.678800 5.388197 l 13.928800 5.513197 l 14.178800 5.388197 l ef
-n 13.928800 5.888197 m 13.678800 5.388197 l 13.928800 5.513197 l 14.178800 5.388197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 12.928800 3.750000 m 12.928800 4.875000 l 23.382500 4.875000 l 23.382500 5.513197 l s
-[] 0 sd
-0 slj
-0 slc
-n 23.382500 5.888197 m 23.132500 5.388197 l 23.382500 5.513197 l 23.632500 5.388197 l ef
-n 23.382500 5.888197 m 23.132500 5.388197 l 23.382500 5.513197 l 23.632500 5.388197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 23.382500 7.500000 m 23.382500 8.500000 l 26.428800 8.500000 l 26.428800 9.013197 l s
-[] 0 sd
-0 slj
-0 slc
-n 26.428800 9.388197 m 26.178800 8.888197 l 26.428800 9.013197 l 26.678800 8.888197 l ef
-n 26.428800 9.388197 m 26.178800 8.888197 l 26.428800 9.013197 l 26.678800 8.888197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 13.928800 7.500000 m 13.928800 8.500000 l 7.375000 8.500000 l 7.375000 9.013197 l s
-[] 0 sd
-0 slj
-0 slc
-n 7.375000 9.388197 m 7.125000 8.888197 l 7.375000 9.013197 l 7.625000 8.888197 l ef
-n 7.375000 9.388197 m 7.125000 8.888197 l 7.375000 9.013197 l 7.625000 8.888197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 23.382500 7.500000 m 23.382500 8.500000 l 22.928800 8.500000 l 22.928800 9.013197 l s
-[] 0 sd
-0 slj
-0 slc
-n 22.928800 9.388197 m 22.678800 8.888197 l 22.928800 9.013197 l 23.178800 8.888197 l ef
-n 22.928800 9.388197 m 22.678800 8.888197 l 22.928800 9.013197 l 23.178800 8.888197 l cp s
-0.095250 slw
-[1.000000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 3.000000 11.500000 m 3.000000 13.002375 l 6.752375 13.002375 l 6.752375 11.500000 l cp s
-0.095250 slw
-[0.127000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 7.750000 11.500000 m 7.750000 13.002375 l 12.102375 13.002375 l 12.102375 11.500000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 14.200000 15.500000 m 14.200000 16.996250 l 17.057500 16.996250 l 17.057500 15.500000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 14.200000 17.250000 m 14.200000 18.746250 l 17.057500 18.746250 l 17.057500 17.250000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 14.200000 19.000000 m 14.200000 20.496250 l 17.450000 20.496250 l 17.450000 19.000000 l cp s
-gsave 3.100000 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-127 682 moveto
-531 744 lineto
-566 509 713 384 conicto
-861 259 1125 259 conicto
-1391 259 1520 370 conicto
-1649 481 1649 630 conicto
-1649 764 1536 841 conicto
-1456 893 1140 974 conicto
-715 1084 542 1164 conicto
-370 1244 281 1385 conicto
-192 1527 192 1698 conicto
-192 1853 266 1986 conicto
-341 2119 469 2207 conicto
-566 2274 722 2321 conicto
-878 2368 1057 2368 conicto
-1325 2368 1528 2289 conicto
-1732 2211 1828 2076 conicto
-1925 1941 1962 1716 conicto
-1582 1663 lineto
-1557 1843 1433 1944 conicto
-1310 2045 1085 2045 conicto
-819 2045 705 1955 conicto
-591 1865 591 1744 conicto
-591 1668 638 1606 conicto
-685 1543 786 1501 conicto
-844 1479 1128 1400 conicto
-1537 1288 1700 1216 conicto
-1863 1145 1955 1009 conicto
-2048 874 2048 672 conicto
-2048 475 1934 300 conicto
-1820 126 1604 31 conicto
-1389 -64 1116 -64 conicto
-665 -64 429 124 conicto
-193 313 127 682 conicto
-end_ol grestore
-gsave 3.396333 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 3.531800 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 3.862000 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 4.192200 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 4.522400 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-1752 0 moveto
-1752 281 lineto
-1534 -64 1112 -64 conicto
-838 -64 609 89 conicto
-380 243 254 517 conicto
-128 792 128 1149 conicto
-128 1498 242 1782 conicto
-357 2066 585 2217 conicto
-813 2368 1095 2368 conicto
-1302 2368 1463 2280 conicto
-1625 2192 1726 2052 conicto
-1726 3200 lineto
-2127 3200 lineto
-2127 0 lineto
-1752 0 lineto
-527 1150 moveto
-527 703 711 481 conicto
-896 259 1146 259 conicto
-1399 259 1575 471 conicto
-1752 683 1752 1118 conicto
-1752 1597 1572 1821 conicto
-1392 2045 1129 2045 conicto
-872 2045 699 1829 conicto
-527 1614 527 1150 conicto
-end_ol grestore
-gsave 4.844133 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 4.979600 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 5.309800 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 5.470667 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 5.800867 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 6.131067 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 6.461267 12.450000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 7.852380 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-1792 0 moveto
-1792 314 lineto
-1521 -64 1053 -64 conicto
-847 -64 668 11 conicto
-489 87 402 201 conicto
-316 316 280 490 conicto
-256 606 256 859 conicto
-256 2304 lineto
-655 2304 lineto
-655 1010 lineto
-655 701 679 593 conicto
-717 437 837 348 conicto
-957 259 1135 259 conicto
-1312 259 1467 350 conicto
-1622 441 1686 598 conicto
-1751 755 1751 1054 conicto
-1751 2304 lineto
-2112 2304 lineto
-2112 0 lineto
-1792 0 lineto
-end_ol grestore
-gsave 8.174113 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 8.504313 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-127 682 moveto
-531 744 lineto
-566 509 713 384 conicto
-861 259 1125 259 conicto
-1391 259 1520 370 conicto
-1649 481 1649 630 conicto
-1649 764 1536 841 conicto
-1456 893 1140 974 conicto
-715 1084 542 1164 conicto
-370 1244 281 1385 conicto
-192 1527 192 1698 conicto
-192 1853 266 1986 conicto
-341 2119 469 2207 conicto
-566 2274 722 2321 conicto
-878 2368 1057 2368 conicto
-1325 2368 1528 2289 conicto
-1732 2211 1828 2076 conicto
-1925 1941 1962 1716 conicto
-1582 1663 lineto
-1557 1843 1433 1944 conicto
-1310 2045 1085 2045 conicto
-819 2045 705 1955 conicto
-591 1865 591 1744 conicto
-591 1668 638 1606 conicto
-685 1543 786 1501 conicto
-844 1479 1128 1400 conicto
-1537 1288 1700 1216 conicto
-1863 1145 1955 1009 conicto
-2048 874 2048 672 conicto
-2048 475 1934 300 conicto
-1820 126 1604 31 conicto
-1389 -64 1116 -64 conicto
-665 -64 429 124 conicto
-193 313 127 682 conicto
-end_ol grestore
-gsave 8.800647 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 8.936113 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 9.266313 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 9.596513 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 9.926713 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-1752 0 moveto
-1752 281 lineto
-1534 -64 1112 -64 conicto
-838 -64 609 89 conicto
-380 243 254 517 conicto
-128 792 128 1149 conicto
-128 1498 242 1782 conicto
-357 2066 585 2217 conicto
-813 2368 1095 2368 conicto
-1302 2368 1463 2280 conicto
-1625 2192 1726 2052 conicto
-1726 3200 lineto
-2127 3200 lineto
-2127 0 lineto
-1752 0 lineto
-527 1150 moveto
-527 703 711 481 conicto
-896 259 1146 259 conicto
-1399 259 1575 471 conicto
-1752 683 1752 1118 conicto
-1752 1597 1572 1821 conicto
-1392 2045 1129 2045 conicto
-872 2045 699 1829 conicto
-527 1614 527 1150 conicto
-end_ol grestore
-gsave 10.248447 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 10.383913 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 10.714113 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 10.874980 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 11.205180 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 11.535380 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 11.865580 12.502400 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 4.000000 14.250000 m 4.000000 15.746250 l 6.857500 15.746250 l 6.857500 14.250000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 4.000000 16.000000 m 4.000000 17.496250 l 6.857500 17.496250 l 6.857500 16.000000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 4.000000 17.750000 m 4.000000 19.246250 l 6.857500 19.246250 l 6.857500 17.750000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 4.000000 19.500000 m 4.000000 20.996250 l 6.857500 20.996250 l 6.857500 19.500000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 4.000000 21.250000 m 4.000000 22.746250 l 6.857500 22.746250 l 6.857500 21.250000 l cp s
-gsave 4.750000 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-719 0 moveto
-320 0 lineto
-320 3200 lineto
-747 3200 lineto
-747 2056 lineto
-984 2368 1357 2368 conicto
-1563 2368 1747 2281 conicto
-1931 2194 2050 2038 conicto
-2169 1882 2236 1660 conicto
-2304 1438 2304 1186 conicto
-2304 588 2019 262 conicto
-1735 -64 1337 -64 conicto
-942 -64 719 279 conicto
-719 0 lineto
-719 1170 moveto
-719 751 827 564 conicto
-1003 259 1304 259 conicto
-1549 259 1727 484 conicto
-1905 709 1905 1155 conicto
-1905 1610 1734 1827 conicto
-1563 2045 1320 2045 conicto
-1075 2045 897 1820 conicto
-719 1595 719 1170 conicto
-end_ol grestore
-gsave 5.080200 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-274 -912 moveto
-231 -541 lineto
-358 -576 453 -576 conicto
-583 -576 660 -532 conicto
-738 -489 788 -410 conicto
-824 -352 906 -118 conicto
-917 -86 941 -22 conicto
-71 2297 lineto
-490 2297 lineto
-967 956 lineto
-1060 701 1133 420 conicto
-1200 690 1293 947 conicto
-1783 2297 lineto
-2171 2297 lineto
-1299 -57 lineto
-1159 -439 1081 -583 conicto
-978 -778 844 -869 conicto
-710 -960 524 -960 conicto
-412 -960 274 -912 conicto
-end_ol grestore
-gsave 5.376533 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 5.537400 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 4.750000 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-127 682 moveto
-531 744 lineto
-566 509 713 384 conicto
-861 259 1125 259 conicto
-1391 259 1520 370 conicto
-1649 481 1649 630 conicto
-1649 764 1536 841 conicto
-1456 893 1140 974 conicto
-715 1084 542 1164 conicto
-370 1244 281 1385 conicto
-192 1527 192 1698 conicto
-192 1853 266 1986 conicto
-341 2119 469 2207 conicto
-566 2274 722 2321 conicto
-878 2368 1057 2368 conicto
-1325 2368 1528 2289 conicto
-1732 2211 1828 2076 conicto
-1925 1941 1962 1716 conicto
-1582 1663 lineto
-1557 1843 1433 1944 conicto
-1310 2045 1085 2045 conicto
-819 2045 705 1955 conicto
-591 1865 591 1744 conicto
-591 1668 638 1606 conicto
-685 1543 786 1501 conicto
-844 1479 1128 1400 conicto
-1537 1288 1700 1216 conicto
-1863 1145 1955 1009 conicto
-2048 874 2048 672 conicto
-2048 475 1934 300 conicto
-1820 126 1604 31 conicto
-1389 -64 1116 -64 conicto
-665 -64 429 124 conicto
-193 313 127 682 conicto
-end_ol grestore
-gsave 5.046333 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 3200 lineto
-719 3200 lineto
-719 2064 lineto
-987 2368 1400 2368 conicto
-1655 2368 1842 2266 conicto
-2029 2165 2110 1986 conicto
-2191 1807 2191 1467 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1478 lineto
-1792 1775 1667 1910 conicto
-1543 2045 1316 2045 conicto
-1146 2045 996 1954 conicto
-846 1863 782 1707 conicto
-719 1551 719 1276 conicto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 5.376533 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 5.698267 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 5.884533 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 4.900000 18.650000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 5.035467 18.650000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 5.365667 18.650000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 5.526533 18.650000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 4.700000 20.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 4.835467 20.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 5.165667 20.500000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 5.326533 20.500000 translate 0.035278 -0.035278 scale
-start_ol
--64 -896 moveto
--64 -640 lineto
-2496 -640 lineto
-2496 -896 lineto
--64 -896 lineto
-end_ol grestore
-gsave 4.400000 22.250000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 4.527000 22.250000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 4.848733 22.250000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 5.178933 22.250000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 5.509133 22.250000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 5.636133 22.250000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 5.957867 22.250000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 6.288067 22.250000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 9.250000 14.250000 m 9.250000 15.746250 l 12.107500 15.746250 l 12.107500 14.250000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 9.250000 16.000000 m 9.250000 17.496250 l 12.107500 17.496250 l 12.107500 16.000000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 9.250000 17.750000 m 9.250000 19.246250 l 12.107500 19.246250 l 12.107500 17.750000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 9.250000 19.500000 m 9.250000 20.996250 l 12.107500 20.996250 l 12.107500 19.500000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 9.250000 21.250000 m 9.250000 22.746250 l 12.107500 22.746250 l 12.107500 21.250000 l cp s
-gsave 10.000000 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-1792 0 moveto
-1792 314 lineto
-1521 -64 1053 -64 conicto
-847 -64 668 11 conicto
-489 87 402 201 conicto
-316 316 280 490 conicto
-256 606 256 859 conicto
-256 2304 lineto
-655 2304 lineto
-655 1010 lineto
-655 701 679 593 conicto
-717 437 837 348 conicto
-957 259 1135 259 conicto
-1312 259 1467 350 conicto
-1622 441 1686 598 conicto
-1751 755 1751 1054 conicto
-1751 2304 lineto
-2112 2304 lineto
-2112 0 lineto
-1792 0 lineto
-end_ol grestore
-gsave 10.321733 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-719 0 moveto
-320 0 lineto
-320 3200 lineto
-747 3200 lineto
-747 2056 lineto
-984 2368 1357 2368 conicto
-1563 2368 1747 2281 conicto
-1931 2194 2050 2038 conicto
-2169 1882 2236 1660 conicto
-2304 1438 2304 1186 conicto
-2304 588 2019 262 conicto
-1735 -64 1337 -64 conicto
-942 -64 719 279 conicto
-719 0 lineto
-719 1170 moveto
-719 751 827 564 conicto
-1003 259 1304 259 conicto
-1549 259 1727 484 conicto
-1905 709 1905 1155 conicto
-1905 1610 1734 1827 conicto
-1563 2045 1320 2045 conicto
-1075 2045 897 1820 conicto
-719 1595 719 1170 conicto
-end_ol grestore
-gsave 10.651933 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-274 -912 moveto
-231 -541 lineto
-358 -576 453 -576 conicto
-583 -576 660 -532 conicto
-738 -489 788 -410 conicto
-824 -352 906 -118 conicto
-917 -86 941 -22 conicto
-71 2297 lineto
-490 2297 lineto
-967 956 lineto
-1060 701 1133 420 conicto
-1200 690 1293 947 conicto
-1783 2297 lineto
-2171 2297 lineto
-1299 -57 lineto
-1159 -439 1081 -583 conicto
-978 -778 844 -869 conicto
-710 -960 524 -960 conicto
-412 -960 274 -912 conicto
-end_ol grestore
-gsave 10.948267 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 11.109133 15.250000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 10.000000 18.750000 translate 0.035278 -0.035278 scale
-start_ol
-1792 0 moveto
-1792 314 lineto
-1521 -64 1053 -64 conicto
-847 -64 668 11 conicto
-489 87 402 201 conicto
-316 316 280 490 conicto
-256 606 256 859 conicto
-256 2304 lineto
-655 2304 lineto
-655 1010 lineto
-655 701 679 593 conicto
-717 437 837 348 conicto
-957 259 1135 259 conicto
-1312 259 1467 350 conicto
-1622 441 1686 598 conicto
-1751 755 1751 1054 conicto
-1751 2304 lineto
-2112 2304 lineto
-2112 0 lineto
-1792 0 lineto
-end_ol grestore
-gsave 10.321733 18.750000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 10.457200 18.750000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 10.787400 18.750000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 10.948267 18.750000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 10.202400 20.502400 translate 0.035278 -0.035278 scale
-start_ol
-1792 0 moveto
-1792 314 lineto
-1521 -64 1053 -64 conicto
-847 -64 668 11 conicto
-489 87 402 201 conicto
-316 316 280 490 conicto
-256 606 256 859 conicto
-256 2304 lineto
-655 2304 lineto
-655 1010 lineto
-655 701 679 593 conicto
-717 437 837 348 conicto
-957 259 1135 259 conicto
-1312 259 1467 350 conicto
-1622 441 1686 598 conicto
-1751 755 1751 1054 conicto
-1751 2304 lineto
-2112 2304 lineto
-2112 0 lineto
-1792 0 lineto
-end_ol grestore
-gsave 10.524133 20.502400 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 10.659600 20.502400 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 10.989800 20.502400 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 9.452370 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-1792 0 moveto
-1792 314 lineto
-1521 -64 1053 -64 conicto
-847 -64 668 11 conicto
-489 87 402 201 conicto
-316 316 280 490 conicto
-256 606 256 859 conicto
-256 2304 lineto
-655 2304 lineto
-655 1010 lineto
-655 701 679 593 conicto
-717 437 837 348 conicto
-957 259 1135 259 conicto
-1312 259 1467 350 conicto
-1622 441 1686 598 conicto
-1751 755 1751 1054 conicto
-1751 2304 lineto
-2112 2304 lineto
-2112 0 lineto
-1792 0 lineto
-end_ol grestore
-gsave 9.774103 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 9.901103 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 10.222837 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 10.553037 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 10.883237 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 11.010237 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 11.331970 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 11.662170 22.252400 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 10.000000 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-1792 0 moveto
-1792 314 lineto
-1521 -64 1053 -64 conicto
-847 -64 668 11 conicto
-489 87 402 201 conicto
-316 316 280 490 conicto
-256 606 256 859 conicto
-256 2304 lineto
-655 2304 lineto
-655 1010 lineto
-655 701 679 593 conicto
-717 437 837 348 conicto
-957 259 1135 259 conicto
-1312 259 1467 350 conicto
-1622 441 1686 598 conicto
-1751 755 1751 1054 conicto
-1751 2304 lineto
-2112 2304 lineto
-2112 0 lineto
-1792 0 lineto
-end_ol grestore
-gsave 10.321733 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-127 682 moveto
-531 744 lineto
-566 509 713 384 conicto
-861 259 1125 259 conicto
-1391 259 1520 370 conicto
-1649 481 1649 630 conicto
-1649 764 1536 841 conicto
-1456 893 1140 974 conicto
-715 1084 542 1164 conicto
-370 1244 281 1385 conicto
-192 1527 192 1698 conicto
-192 1853 266 1986 conicto
-341 2119 469 2207 conicto
-566 2274 722 2321 conicto
-878 2368 1057 2368 conicto
-1325 2368 1528 2289 conicto
-1732 2211 1828 2076 conicto
-1925 1941 1962 1716 conicto
-1582 1663 lineto
-1557 1843 1433 1944 conicto
-1310 2045 1085 2045 conicto
-819 2045 705 1955 conicto
-591 1865 591 1744 conicto
-591 1668 638 1606 conicto
-685 1543 786 1501 conicto
-844 1479 1128 1400 conicto
-1537 1288 1700 1216 conicto
-1863 1145 1955 1009 conicto
-2048 874 2048 672 conicto
-2048 475 1934 300 conicto
-1820 126 1604 31 conicto
-1389 -64 1116 -64 conicto
-665 -64 429 124 conicto
-193 313 127 682 conicto
-end_ol grestore
-gsave 10.618067 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 3200 lineto
-719 3200 lineto
-719 2064 lineto
-987 2368 1400 2368 conicto
-1655 2368 1842 2266 conicto
-2029 2165 2110 1986 conicto
-2191 1807 2191 1467 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1478 lineto
-1792 1775 1667 1910 conicto
-1543 2045 1316 2045 conicto
-1146 2045 996 1954 conicto
-846 1863 782 1707 conicto
-719 1551 719 1276 conicto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 10.948267 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 11.270000 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 2304 lineto
-576 2304 lineto
-576 1986 lineto
-709 2209 822 2288 conicto
-936 2368 1072 2368 conicto
-1268 2368 1471 2237 conicto
-1337 1898 lineto
-1195 1984 1053 1984 conicto
-925 1984 823 1905 conicto
-722 1827 679 1689 conicto
-614 1477 614 1226 conicto
-614 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 11.456267 17.000000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 14.600000 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-127 682 moveto
-531 744 lineto
-566 509 713 384 conicto
-861 259 1125 259 conicto
-1391 259 1520 370 conicto
-1649 481 1649 630 conicto
-1649 764 1536 841 conicto
-1456 893 1140 974 conicto
-715 1084 542 1164 conicto
-370 1244 281 1385 conicto
-192 1527 192 1698 conicto
-192 1853 266 1986 conicto
-341 2119 469 2207 conicto
-566 2274 722 2321 conicto
-878 2368 1057 2368 conicto
-1325 2368 1528 2289 conicto
-1732 2211 1828 2076 conicto
-1925 1941 1962 1716 conicto
-1582 1663 lineto
-1557 1843 1433 1944 conicto
-1310 2045 1085 2045 conicto
-819 2045 705 1955 conicto
-591 1865 591 1744 conicto
-591 1668 638 1606 conicto
-685 1543 786 1501 conicto
-844 1479 1128 1400 conicto
-1537 1288 1700 1216 conicto
-1863 1145 1955 1009 conicto
-2048 874 2048 672 conicto
-2048 475 1934 300 conicto
-1820 126 1604 31 conicto
-1389 -64 1116 -64 conicto
-665 -64 429 124 conicto
-193 313 127 682 conicto
-end_ol grestore
-gsave 14.896333 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 15.031800 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 15.362000 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 15.692200 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 15.819200 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 14.700000 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-384 0 moveto
-384 1984 lineto
-64 1984 lineto
-64 2307 lineto
-384 2307 lineto
-384 2552 lineto
-384 2785 425 2889 conicto
-481 3029 622 3116 conicto
-764 3203 1018 3203 conicto
-1182 3203 1380 3168 conicto
-1322 2858 lineto
-1201 2880 1096 2880 conicto
-925 2880 854 2804 conicto
-783 2728 783 2520 conicto
-783 2307 lineto
-1216 2307 lineto
-1216 1984 lineto
-783 1984 lineto
-783 0 lineto
-384 0 lineto
-end_ol grestore
-gsave 14.860867 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 14.987867 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 15.309600 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-1746 289 moveto
-1529 102 1331 19 conicto
-1133 -64 905 -64 conicto
-530 -64 329 124 conicto
-128 312 128 605 conicto
-128 777 203 919 conicto
-278 1062 399 1148 conicto
-521 1234 672 1278 conicto
-785 1309 1017 1337 conicto
-1490 1394 1713 1472 conicto
-1713 1553 1713 1575 conicto
-1713 1814 1603 1912 conicto
-1453 2045 1158 2045 conicto
-884 2045 753 1948 conicto
-622 1851 560 1605 conicto
-192 1657 lineto
-243 1902 362 2053 conicto
-481 2204 705 2286 conicto
-930 2368 1225 2368 conicto
-1519 2368 1702 2298 conicto
-1886 2229 1972 2124 conicto
-2058 2019 2093 1858 conicto
-2112 1758 2112 1496 conicto
-2112 973 lineto
-2112 427 2137 281 conicto
-2162 135 2235 0 conicto
-1825 0 lineto
-1763 123 1746 289 conicto
-1713 1165 moveto
-1501 1078 1076 1017 conicto
-835 982 735 938 conicto
-635 895 581 811 conicto
-527 727 527 624 conicto
-527 468 645 363 conicto
-763 259 991 259 conicto
-1216 259 1391 358 conicto
-1567 457 1650 630 conicto
-1713 762 1713 1021 conicto
-1713 1165 lineto
-end_ol grestore
-gsave 15.631333 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-gsave 15.792200 18.250000 translate 0.035278 -0.035278 scale
-start_ol
--64 -896 moveto
--64 -640 lineto
-2496 -640 lineto
-2496 -896 lineto
--64 -896 lineto
-end_ol grestore
-gsave 14.650000 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 14.777000 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 15.098733 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 15.428933 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 15.759133 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-384 0 moveto
-384 1984 lineto
-64 1984 lineto
-64 2307 lineto
-384 2307 lineto
-384 2552 lineto
-384 2785 425 2889 conicto
-481 3029 622 3116 conicto
-764 3203 1018 3203 conicto
-1182 3203 1380 3168 conicto
-1322 2858 lineto
-1201 2880 1096 2880 conicto
-925 2880 854 2804 conicto
-783 2728 783 2520 conicto
-783 2307 lineto
-1216 2307 lineto
-1216 1984 lineto
-783 1984 lineto
-783 0 lineto
-384 0 lineto
-end_ol grestore
-gsave 15.920000 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 16.047000 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 16.368733 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-1746 289 moveto
-1529 102 1331 19 conicto
-1133 -64 905 -64 conicto
-530 -64 329 124 conicto
-128 312 128 605 conicto
-128 777 203 919 conicto
-278 1062 399 1148 conicto
-521 1234 672 1278 conicto
-785 1309 1017 1337 conicto
-1490 1394 1713 1472 conicto
-1713 1553 1713 1575 conicto
-1713 1814 1603 1912 conicto
-1453 2045 1158 2045 conicto
-884 2045 753 1948 conicto
-622 1851 560 1605 conicto
-192 1657 lineto
-243 1902 362 2053 conicto
-481 2204 705 2286 conicto
-930 2368 1225 2368 conicto
-1519 2368 1702 2298 conicto
-1886 2229 1972 2124 conicto
-2058 2019 2093 1858 conicto
-2112 1758 2112 1496 conicto
-2112 973 lineto
-2112 427 2137 281 conicto
-2162 135 2235 0 conicto
-1825 0 lineto
-1763 123 1746 289 conicto
-1713 1165 moveto
-1501 1078 1076 1017 conicto
-835 982 735 938 conicto
-635 895 581 811 conicto
-527 727 527 624 conicto
-527 468 645 363 conicto
-763 259 991 259 conicto
-1216 259 1391 358 conicto
-1567 457 1650 630 conicto
-1713 762 1713 1021 conicto
-1713 1165 lineto
-end_ol grestore
-gsave 16.690467 19.950000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 14.998100 l 3.513197 14.998100 l s
-[] 0 sd
-0 slj
-0 slc
-n 3.888197 14.998100 m 3.388197 15.248100 l 3.513197 14.998100 l 3.388197 14.748100 l ef
-n 3.888197 14.998100 m 3.388197 15.248100 l 3.513197 14.998100 l 3.388197 14.748100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 16.748100 l 3.513197 16.748100 l s
-[] 0 sd
-0 slj
-0 slc
-n 3.888197 16.748100 m 3.388197 16.998100 l 3.513197 16.748100 l 3.388197 16.498100 l ef
-n 3.888197 16.748100 m 3.388197 16.998100 l 3.513197 16.748100 l 3.388197 16.498100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 18.498100 l 3.513197 18.498100 l s
-[] 0 sd
-0 slj
-0 slc
-n 3.888197 18.498100 m 3.388197 18.748100 l 3.513197 18.498100 l 3.388197 18.248100 l ef
-n 3.888197 18.498100 m 3.388197 18.748100 l 3.513197 18.498100 l 3.388197 18.248100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 20.248100 l 3.513197 20.248100 l s
-[] 0 sd
-0 slj
-0 slc
-n 3.888197 20.248100 m 3.388197 20.498100 l 3.513197 20.248100 l 3.388197 19.998100 l ef
-n 3.888197 20.248100 m 3.388197 20.498100 l 3.513197 20.248100 l 3.388197 19.998100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 21.998100 l 3.513197 21.998100 l s
-[] 0 sd
-0 slj
-0 slc
-n 3.888197 21.998100 m 3.388197 22.248100 l 3.513197 21.998100 l 3.388197 21.748100 l ef
-n 3.888197 21.998100 m 3.388197 22.248100 l 3.513197 21.998100 l 3.388197 21.748100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 14.998100 l 8.763197 14.998100 l s
-[] 0 sd
-0 slj
-0 slc
-n 9.138197 14.998100 m 8.638197 15.248100 l 8.763197 14.998100 l 8.638197 14.748100 l ef
-n 9.138197 14.998100 m 8.638197 15.248100 l 8.763197 14.998100 l 8.638197 14.748100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 16.748100 l 8.763197 16.748100 l s
-[] 0 sd
-0 slj
-0 slc
-n 9.138197 16.748100 m 8.638197 16.998100 l 8.763197 16.748100 l 8.638197 16.498100 l ef
-n 9.138197 16.748100 m 8.638197 16.998100 l 8.763197 16.748100 l 8.638197 16.498100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 18.498100 l 8.763197 18.498100 l s
-[] 0 sd
-0 slj
-0 slc
-n 9.138197 18.498100 m 8.638197 18.748100 l 8.763197 18.498100 l 8.638197 18.248100 l ef
-n 9.138197 18.498100 m 8.638197 18.748100 l 8.763197 18.498100 l 8.638197 18.248100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 20.248100 l 8.763197 20.248100 l s
-[] 0 sd
-0 slj
-0 slc
-n 9.138197 20.248100 m 8.638197 20.498100 l 8.763197 20.248100 l 8.638197 19.998100 l ef
-n 9.138197 20.248100 m 8.638197 20.498100 l 8.763197 20.248100 l 8.638197 19.998100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 21.998100 l 8.763197 21.998100 l s
-[] 0 sd
-0 slj
-0 slc
-n 9.138197 21.998100 m 8.638197 22.248100 l 8.763197 21.998100 l 8.638197 21.748100 l ef
-n 9.138197 21.998100 m 8.638197 22.248100 l 8.763197 21.998100 l 8.638197 21.748100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 16.248100 l 13.713197 16.248100 l s
-[] 0 sd
-0 slj
-0 slc
-n 14.088197 16.248100 m 13.588197 16.498100 l 13.713197 16.248100 l 13.588197 15.998100 l ef
-n 14.088197 16.248100 m 13.588197 16.498100 l 13.713197 16.248100 l 13.588197 15.998100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 17.998100 l 13.713197 17.998100 l s
-[] 0 sd
-0 slj
-0 slc
-n 14.088197 17.998100 m 13.588197 18.248100 l 13.713197 17.998100 l 13.588197 17.748100 l ef
-n 14.088197 17.998100 m 13.588197 18.248100 l 13.713197 17.998100 l 13.588197 17.748100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 19.748100 l 13.713197 19.748100 l s
-[] 0 sd
-0 slj
-0 slc
-n 14.088197 19.748100 m 13.588197 19.998100 l 13.713197 19.748100 l 13.588197 19.498100 l ef
-n 14.088197 19.748100 m 13.588197 19.998100 l 13.713197 19.748100 l 13.588197 19.498100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 16.248100 l 18.713197 16.248100 l s
-[] 0 sd
-0 slj
-0 slc
-n 19.088197 16.248100 m 18.588197 16.498100 l 18.713197 16.248100 l 18.588197 15.998100 l ef
-n 19.088197 16.248100 m 18.588197 16.498100 l 18.713197 16.248100 l 18.588197 15.998100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 17.998100 l 18.713197 17.998100 l s
-[] 0 sd
-0 slj
-0 slc
-n 19.088197 17.998100 m 18.588197 18.248100 l 18.713197 17.998100 l 18.588197 17.748100 l ef
-n 19.088197 17.998100 m 18.588197 18.248100 l 18.713197 17.998100 l 18.588197 17.748100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 19.748100 l 18.713197 19.748100 l s
-[] 0 sd
-0 slj
-0 slc
-n 19.088197 19.748100 m 18.588197 19.998100 l 18.713197 19.748100 l 18.588197 19.498100 l ef
-n 19.088197 19.748100 m 18.588197 19.998100 l 18.713197 19.748100 l 18.588197 19.498100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 22.928800 11.000000 m 22.928800 12.498100 l 24.013197 12.498100 l s
-[] 0 sd
-0 slj
-0 slc
-n 24.388197 12.498100 m 23.888197 12.748100 l 24.013197 12.498100 l 23.888197 12.248100 l ef
-n 24.388197 12.498100 m 23.888197 12.748100 l 24.013197 12.498100 l 23.888197 12.248100 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 22.928800 11.000000 m 22.928800 14.248100 l 24.013197 14.248100 l s
-[] 0 sd
-0 slj
-0 slc
-n 24.388197 14.248100 m 23.888197 14.498100 l 24.013197 14.248100 l 23.888197 13.998100 l ef
-n 24.388197 14.248100 m 23.888197 14.498100 l 24.013197 14.248100 l 23.888197 13.998100 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 24.500000 11.750000 m 24.500000 13.246250 l 27.357500 13.246250 l 27.357500 11.750000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 24.500000 13.500000 m 24.500000 14.996250 l 27.357500 14.996250 l 27.357500 13.500000 l cp s
-gsave 24.800000 14.500000 translate 0.035278 -0.035278 scale
-start_ol
-1792 0 moveto
-1792 314 lineto
-1521 -64 1053 -64 conicto
-847 -64 668 11 conicto
-489 87 402 201 conicto
-316 316 280 490 conicto
-256 606 256 859 conicto
-256 2304 lineto
-655 2304 lineto
-655 1010 lineto
-655 701 679 593 conicto
-717 437 837 348 conicto
-957 259 1135 259 conicto
-1312 259 1467 350 conicto
-1622 441 1686 598 conicto
-1751 755 1751 1054 conicto
-1751 2304 lineto
-2112 2304 lineto
-2112 0 lineto
-1792 0 lineto
-end_ol grestore
-gsave 25.121733 14.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 25.451933 14.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 25.587400 14.500000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 25.883733 14.500000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 26.205467 14.500000 translate 0.035278 -0.035278 scale
-start_ol
-1752 0 moveto
-1752 281 lineto
-1534 -64 1112 -64 conicto
-838 -64 609 89 conicto
-380 243 254 517 conicto
-128 792 128 1149 conicto
-128 1498 242 1782 conicto
-357 2066 585 2217 conicto
-813 2368 1095 2368 conicto
-1302 2368 1463 2280 conicto
-1625 2192 1726 2052 conicto
-1726 3200 lineto
-2127 3200 lineto
-2127 0 lineto
-1752 0 lineto
-527 1150 moveto
-527 703 711 481 conicto
-896 259 1146 259 conicto
-1399 259 1575 471 conicto
-1752 683 1752 1118 conicto
-1752 1597 1572 1821 conicto
-1392 2045 1129 2045 conicto
-872 2045 699 1829 conicto
-527 1614 527 1150 conicto
-end_ol grestore
-gsave 26.527200 14.500000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 26.857400 14.500000 translate 0.035278 -0.035278 scale
-start_ol
--64 -896 moveto
--64 -640 lineto
-2496 -640 lineto
-2496 -896 lineto
--64 -896 lineto
-end_ol grestore
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 19.200000 15.500000 m 19.200000 16.996250 l 22.057500 16.996250 l 22.057500 15.500000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 19.200000 17.250000 m 19.200000 18.746250 l 22.057500 18.746250 l 22.057500 17.250000 l cp s
-0.095250 slw
-[] 0 sd
-[] 0 sd
-0 slj
-n 19.200000 19.000000 m 19.200000 20.496250 l 22.700000 20.496250 l 22.700000 19.000000 l cp s
-gsave 19.650000 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 19.946333 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-127 682 moveto
-531 744 lineto
-566 509 713 384 conicto
-861 259 1125 259 conicto
-1391 259 1520 370 conicto
-1649 481 1649 630 conicto
-1649 764 1536 841 conicto
-1456 893 1140 974 conicto
-715 1084 542 1164 conicto
-370 1244 281 1385 conicto
-192 1527 192 1698 conicto
-192 1853 266 1986 conicto
-341 2119 469 2207 conicto
-566 2274 722 2321 conicto
-878 2368 1057 2368 conicto
-1325 2368 1528 2289 conicto
-1732 2211 1828 2076 conicto
-1925 1941 1962 1716 conicto
-1582 1663 lineto
-1557 1843 1433 1944 conicto
-1310 2045 1085 2045 conicto
-819 2045 705 1955 conicto
-591 1865 591 1744 conicto
-591 1668 638 1606 conicto
-685 1543 786 1501 conicto
-844 1479 1128 1400 conicto
-1537 1288 1700 1216 conicto
-1863 1145 1955 1009 conicto
-2048 874 2048 672 conicto
-2048 475 1934 300 conicto
-1820 126 1604 31 conicto
-1389 -64 1116 -64 conicto
-665 -64 429 124 conicto
-193 313 127 682 conicto
-end_ol grestore
-gsave 20.242667 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 20.378133 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 20.708333 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 21.038533 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 21.165533 16.500000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 19.529300 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 19.825633 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 20.147367 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2008 lineto
-749 2165 930 2266 conicto
-1112 2368 1344 2368 conicto
-1602 2368 1767 2263 conicto
-1932 2159 2001 1979 conicto
-2280 2368 2728 2368 conicto
-3079 2368 3267 2177 conicto
-3456 1986 3456 1589 conicto
-3456 0 lineto
-3057 0 lineto
-3057 1471 lineto
-3057 1709 3018 1813 conicto
-2979 1918 2877 1981 conicto
-2775 2045 2638 2045 conicto
-2390 2045 2226 1881 conicto
-2063 1717 2063 1357 conicto
-2063 0 lineto
-1664 0 lineto
-1664 1517 lineto
-1664 1781 1568 1913 conicto
-1472 2045 1254 2045 conicto
-1088 2045 947 1957 conicto
-807 1869 744 1699 conicto
-681 1530 681 1212 conicto
-681 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 20.638433 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-320 -896 moveto
-320 2304 lineto
-704 2304 lineto
-704 1999 lineto
-827 2178 981 2273 conicto
-1136 2368 1355 2368 conicto
-1641 2368 1860 2214 conicto
-2080 2060 2192 1781 conicto
-2304 1502 2304 1169 conicto
-2304 812 2181 526 conicto
-2058 241 1822 88 conicto
-1586 -64 1327 -64 conicto
-1137 -64 986 19 conicto
-835 102 739 228 conicto
-739 -896 lineto
-320 -896 lineto
-704 1132 moveto
-704 686 877 472 conicto
-1050 259 1297 259 conicto
-1548 259 1726 480 conicto
-1905 701 1905 1164 conicto
-1905 1606 1731 1825 conicto
-1557 2045 1314 2045 conicto
-1074 2045 889 1811 conicto
-704 1577 704 1132 conicto
-end_ol grestore
-gsave 20.968633 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 21.095633 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 21.425833 18.250000 translate 0.035278 -0.035278 scale
-start_ol
-32 0 moveto
-870 1198 lineto
-95 2304 lineto
-581 2304 lineto
-932 1763 lineto
-1032 1610 1092 1506 conicto
-1187 1649 1267 1759 conicto
-1653 2304 lineto
-2117 2304 lineto
-1325 1219 lineto
-2178 0 lineto
-1701 0 lineto
-1230 716 lineto
-1105 909 lineto
-503 0 lineto
-32 0 lineto
-end_ol grestore
-gsave 21.722167 18.250000 translate 0.035278 -0.035278 scale
-start_ol
--64 -896 moveto
--64 -640 lineto
-2496 -640 lineto
-2496 -896 lineto
--64 -896 lineto
-end_ol grestore
-gsave 19.550000 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 19.846333 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 19.973333 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 20.295067 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 20.625267 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-204 -201 moveto
-583 -259 lineto
-607 -441 714 -525 conicto
-859 -637 1109 -637 conicto
-1379 -637 1526 -526 conicto
-1673 -415 1724 -215 conicto
-1755 -93 1755 298 conicto
-1500 -3 1120 -3 conicto
-646 -3 387 342 conicto
-128 687 128 1169 conicto
-128 1501 247 1781 conicto
-366 2062 591 2215 conicto
-817 2368 1122 2368 conicto
-1528 2368 1792 2038 conicto
-1792 2304 lineto
-2176 2304 lineto
-2176 297 lineto
-2176 -245 2066 -471 conicto
-1956 -697 1717 -828 conicto
-1479 -960 1130 -960 conicto
-714 -960 459 -771 conicto
-204 -582 204 -201 conicto
-527 1198 moveto
-527 740 707 530 conicto
-887 320 1158 320 conicto
-1427 320 1609 529 conicto
-1792 738 1792 1185 conicto
-1792 1611 1604 1828 conicto
-1417 2045 1151 2045 conicto
-891 2045 709 1831 conicto
-527 1618 527 1198 conicto
-end_ol grestore
-gsave 20.955467 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-384 0 moveto
-384 1984 lineto
-64 1984 lineto
-64 2307 lineto
-384 2307 lineto
-384 2552 lineto
-384 2785 425 2889 conicto
-481 3029 622 3116 conicto
-764 3203 1018 3203 conicto
-1182 3203 1380 3168 conicto
-1322 2858 lineto
-1201 2880 1096 2880 conicto
-925 2880 854 2804 conicto
-783 2728 783 2520 conicto
-783 2307 lineto
-1216 2307 lineto
-1216 1984 lineto
-783 1984 lineto
-783 0 lineto
-384 0 lineto
-end_ol grestore
-gsave 21.116333 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-256 0 moveto
-256 3200 lineto
-655 3200 lineto
-655 0 lineto
-256 0 lineto
-end_ol grestore
-gsave 21.243333 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-128 1152 moveto
-128 1798 479 2109 conicto
-771 2368 1192 2368 conicto
-1661 2368 1958 2053 conicto
-2255 1739 2255 1184 conicto
-2255 735 2123 477 conicto
-1992 220 1740 78 conicto
-1489 -64 1192 -64 conicto
-715 -64 421 249 conicto
-128 562 128 1152 conicto
-527 1154 moveto
-527 705 716 482 conicto
-905 259 1192 259 conicto
-1478 259 1667 483 conicto
-1856 707 1856 1167 conicto
-1856 1599 1666 1822 conicto
-1476 2045 1192 2045 conicto
-905 2045 716 1823 conicto
-527 1601 527 1154 conicto
-end_ol grestore
-gsave 21.565067 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-1746 289 moveto
-1529 102 1331 19 conicto
-1133 -64 905 -64 conicto
-530 -64 329 124 conicto
-128 312 128 605 conicto
-128 777 203 919 conicto
-278 1062 399 1148 conicto
-521 1234 672 1278 conicto
-785 1309 1017 1337 conicto
-1490 1394 1713 1472 conicto
-1713 1553 1713 1575 conicto
-1713 1814 1603 1912 conicto
-1453 2045 1158 2045 conicto
-884 2045 753 1948 conicto
-622 1851 560 1605 conicto
-192 1657 lineto
-243 1902 362 2053 conicto
-481 2204 705 2286 conicto
-930 2368 1225 2368 conicto
-1519 2368 1702 2298 conicto
-1886 2229 1972 2124 conicto
-2058 2019 2093 1858 conicto
-2112 1758 2112 1496 conicto
-2112 973 lineto
-2112 427 2137 281 conicto
-2162 135 2235 0 conicto
-1825 0 lineto
-1763 123 1746 289 conicto
-1713 1165 moveto
-1501 1078 1076 1017 conicto
-835 982 735 938 conicto
-635 895 581 811 conicto
-527 727 527 624 conicto
-527 468 645 363 conicto
-763 259 991 259 conicto
-1216 259 1391 358 conicto
-1567 457 1650 630 conicto
-1713 762 1713 1021 conicto
-1713 1165 lineto
-end_ol grestore
-gsave 21.886800 20.000000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 6.000000 10.250000 m 4.876190 10.250000 l 4.876190 11.013197 l s
-[] 0 sd
-0 slj
-0 slc
-n 4.876190 11.388197 m 4.626190 10.888197 l 4.876190 11.013197 l 5.126190 10.888197 l ef
-n 4.876190 11.388197 m 4.626190 10.888197 l 4.876190 11.013197 l 5.126190 10.888197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 8.750000 10.250000 m 9.926190 10.250000 l 9.926190 11.013197 l s
-[] 0 sd
-0 slj
-0 slc
-n 9.926190 11.388197 m 9.676190 10.888197 l 9.926190 11.013197 l 10.176190 10.888197 l ef
-n 9.926190 11.388197 m 9.676190 10.888197 l 9.926190 11.013197 l 10.176190 10.888197 l cp s
-0.095250 slw
-[1.000000] 0 sd
-[0.127000] 0 sd
-0 slj
-n 15.202400 9.535000 m 15.202400 11.102375 l 17.752400 11.102375 l 17.752400 9.535000 l cp s
-gsave 15.555000 10.535000 translate 0.035278 -0.035278 scale
-start_ol
-320 2752 moveto
-320 3200 lineto
-719 3200 lineto
-719 2752 lineto
-320 2752 lineto
-320 0 moveto
-320 2304 lineto
-719 2304 lineto
-719 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 15.690467 10.535000 translate 0.035278 -0.035278 scale
-start_ol
-320 0 moveto
-320 2304 lineto
-640 2304 lineto
-640 2003 lineto
-898 2368 1387 2368 conicto
-1600 2368 1778 2292 conicto
-1956 2217 2045 2095 conicto
-2134 1973 2168 1805 conicto
-2191 1696 2191 1424 conicto
-2191 0 lineto
-1792 0 lineto
-1792 1421 lineto
-1792 1662 1746 1782 conicto
-1700 1903 1581 1974 conicto
-1463 2045 1303 2045 conicto
-1048 2045 863 1884 conicto
-679 1724 679 1275 conicto
-679 0 lineto
-320 0 lineto
-end_ol grestore
-gsave 16.020667 10.535000 translate 0.035278 -0.035278 scale
-start_ol
-1877 721 moveto
-2278 672 lineto
-2184 322 1928 129 conicto
-1673 -64 1277 -64 conicto
-777 -64 484 250 conicto
-192 564 192 1132 conicto
-192 1719 487 2043 conicto
-782 2368 1254 2368 conicto
-1710 2368 1999 2043 conicto
-2289 1719 2289 1132 conicto
-2289 1096 2289 1024 conicto
-591 1024 lineto
-591 654 784 456 conicto
-978 259 1268 259 conicto
-1484 259 1636 369 conicto
-1788 479 1877 721 conicto
-610 1347 moveto
-1881 1347 lineto
-1855 1654 1734 1807 conicto
-1549 2045 1251 2045 conicto
-979 2045 794 1855 conicto
-610 1665 610 1347 conicto
-end_ol grestore
-gsave 16.350867 10.535000 translate 0.035278 -0.035278 scale
-start_ol
-32 0 moveto
-870 1198 lineto
-95 2304 lineto
-581 2304 lineto
-932 1763 lineto
-1032 1610 1092 1506 conicto
-1187 1649 1267 1759 conicto
-1653 2304 lineto
-2117 2304 lineto
-1325 1219 lineto
-2178 0 lineto
-1701 0 lineto
-1230 716 lineto
-1105 909 lineto
-503 0 lineto
-32 0 lineto
-end_ol grestore
-gsave 16.647200 10.535000 translate 0.035278 -0.035278 scale
-start_ol
-1746 289 moveto
-1529 102 1331 19 conicto
-1133 -64 905 -64 conicto
-530 -64 329 124 conicto
-128 312 128 605 conicto
-128 777 203 919 conicto
-278 1062 399 1148 conicto
-521 1234 672 1278 conicto
-785 1309 1017 1337 conicto
-1490 1394 1713 1472 conicto
-1713 1553 1713 1575 conicto
-1713 1814 1603 1912 conicto
-1453 2045 1158 2045 conicto
-884 2045 753 1948 conicto
-622 1851 560 1605 conicto
-192 1657 lineto
-243 1902 362 2053 conicto
-481 2204 705 2286 conicto
-930 2368 1225 2368 conicto
-1519 2368 1702 2298 conicto
-1886 2229 1972 2124 conicto
-2058 2019 2093 1858 conicto
-2112 1758 2112 1496 conicto
-2112 973 lineto
-2112 427 2137 281 conicto
-2162 135 2235 0 conicto
-1825 0 lineto
-1763 123 1746 289 conicto
-1713 1165 moveto
-1501 1078 1076 1017 conicto
-835 982 735 938 conicto
-635 895 581 811 conicto
-527 727 527 624 conicto
-527 468 645 363 conicto
-763 259 991 259 conicto
-1216 259 1391 358 conicto
-1567 457 1650 630 conicto
-1713 762 1713 1021 conicto
-1713 1165 lineto
-end_ol grestore
-gsave 16.968933 10.535000 translate 0.035278 -0.035278 scale
-start_ol
-1806 840 moveto
-2188 790 lineto
-2125 389 1867 162 conicto
-1610 -64 1234 -64 conicto
-764 -64 478 248 conicto
-192 560 192 1143 conicto
-192 1520 315 1802 conicto
-438 2085 689 2226 conicto
-941 2368 1236 2368 conicto
-1610 2368 1847 2176 conicto
-2084 1985 2151 1633 conicto
-1774 1573 lineto
-1720 1808 1583 1926 conicto
-1446 2045 1251 2045 conicto
-958 2045 774 1831 conicto
-591 1617 591 1155 conicto
-591 685 768 472 conicto
-945 259 1230 259 conicto
-1458 259 1611 401 conicto
-1765 544 1806 840 conicto
-end_ol grestore
-gsave 17.265267 10.535000 translate 0.035278 -0.035278 scale
-start_ol
-1152 399 moveto
-1209 37 lineto
-1034 0 895 0 conicto
-670 0 545 71 conicto
-421 142 370 257 conicto
-320 373 320 724 conicto
-320 2045 lineto
-64 2045 lineto
-64 2368 lineto
-320 2368 lineto
-320 2942 lineto
-719 3177 lineto
-719 2368 lineto
-1152 2368 lineto
-1152 2045 lineto
-719 2045 lineto
-719 702 lineto
-719 535 742 487 conicto
-765 440 816 412 conicto
-868 384 963 384 conicto
-1035 384 1152 399 conicto
-end_ol grestore
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 13.928800 7.500000 m 13.928800 8.517500 l 16.477400 8.517500 l 16.477400 9.048197 l s
-[] 0 sd
-0 slj
-0 slc
-n 16.477400 9.423197 m 16.227400 8.923197 l 16.477400 9.048197 l 16.727400 8.923197 l ef
-n 16.477400 9.423197 m 16.227400 8.923197 l 16.477400 9.048197 l 16.727400 8.923197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 15.202400 10.318700 m 14.178700 10.318700 l 14.178700 11.013197 l s
-[] 0 sd
-0 slj
-0 slc
-n 14.178700 11.388197 m 13.928700 10.888197 l 14.178700 11.013197 l 14.428700 10.888197 l ef
-n 14.178700 11.388197 m 13.928700 10.888197 l 14.178700 11.013197 l 14.428700 10.888197 l cp s
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-n 17.752400 10.318700 m 18.963700 10.318700 l 18.963700 11.013197 l s
-[] 0 sd
-0 slj
-0 slc
-n 18.963700 11.388197 m 18.713700 10.888197 l 18.963700 11.013197 l 19.213700 10.888197 l ef
-n 18.963700 11.388197 m 18.713700 10.888197 l 18.963700 11.013197 l 19.213700 10.888197 l cp s
-gsave 25.352400 12.802400 translate 0.035278 -0.035278 scale
-start_ol
-2034 2424 moveto
-2034 2034 lineto
-1849 2123 1665 2167 conicto
-1482 2212 1285 2212 conicto
-985 2212 835 2118 conicto
-685 2025 685 1839 conicto
-685 1697 791 1615 conicto
-898 1534 1219 1462 conicto
-1355 1430 lineto
-1785 1337 1971 1166 conicto
-2157 995 2157 690 conicto
-2157 342 1882 139 conicto
-1608 -64 1128 -64 conicto
-928 -64 710 -24 conicto
-493 15 253 94 conicto
-253 519 lineto
-483 402 701 343 conicto
-920 284 1133 284 conicto
-1420 284 1574 383 conicto
-1728 482 1728 661 conicto
-1728 829 1618 917 conicto
-1509 1006 1138 1088 conicto
-999 1121 lineto
-622 1201 439 1367 conicto
-256 1533 256 1823 conicto
-256 2176 509 2368 conicto
-762 2560 1226 2560 conicto
-1457 2560 1660 2526 conicto
-1863 2492 2034 2424 conicto
-end_ol grestore
-gsave 25.665667 12.802400 translate 0.035278 -0.035278 scale
-start_ol
-832 3213 moveto
-832 2524 lineto
-1664 2524 lineto
-1664 2176 lineto
-832 2176 lineto
-832 825 lineto
-832 521 914 434 conicto
-997 348 1249 348 conicto
-1664 348 lineto
-1664 0 lineto
-1241 0 lineto
-765 0 584 179 conicto
-403 359 403 826 conicto
-403 2176 lineto
-128 2176 lineto
-128 2524 lineto
-403 2524 lineto
-403 3213 lineto
-832 3213 lineto
-end_ol grestore
-gsave 25.902733 12.802400 translate 0.035278 -0.035278 scale
-start_ol
-1853 2133 moveto
-1787 2174 1706 2193 conicto
-1626 2212 1529 2212 conicto
-1183 2212 998 1983 conicto
-813 1755 813 1328 conicto
-813 0 lineto
-384 0 lineto
-384 2496 lineto
-813 2496 lineto
-813 2129 lineto
-941 2347 1146 2453 conicto
-1352 2560 1647 2560 conicto
-1689 2560 1740 2553 conicto
-1791 2547 1853 2536 conicto
-1853 2133 lineto
-end_ol grestore
-gsave 26.148267 12.802400 translate 0.035278 -0.035278 scale
-start_ol
-2304 -740 moveto
-2304 -1088 lineto
--64 -1088 lineto
--64 -740 lineto
-2304 -740 lineto
-end_ol grestore
-showpage
diff --git a/doc/numpybook/Figures/hierarchy.fig b/doc/numpybook/Figures/hierarchy.fig
deleted file mode 100644
index 178555da0..000000000
--- a/doc/numpybook/Figures/hierarchy.fig
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/Figures/hierarchy.pdf b/doc/numpybook/Figures/hierarchy.pdf
deleted file mode 100644
index 7ab56ee97..000000000
--- a/doc/numpybook/Figures/hierarchy.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/Figures/hierarchy.png b/doc/numpybook/Figures/hierarchy.png
deleted file mode 100644
index 50dd7474d..000000000
--- a/doc/numpybook/Figures/hierarchy.png
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/Figures/threefundamental.eps b/doc/numpybook/Figures/threefundamental.eps
deleted file mode 100644
index 22eedc4f1..000000000
--- a/doc/numpybook/Figures/threefundamental.eps
+++ /dev/null
@@ -1,246 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: threefundamental.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 4
-%%CreationDate: Mon Jan 16 15:40:51 2006
-%%For: oliphant@den.local.net (Travis Oliphant)
-%%BoundingBox: 0 0 438 162
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 162 moveto 0 0 lineto 438 0 lineto 438 162 lineto closepath clip newpath
--30.8 237.8 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
- bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
- 4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode
-/Times-Bold /Times-Bold-iso isovec ReEncode
-/Helvetica /Helvetica-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-10 setmiterlimit
-0 slj 0 slc
- 0.06000 0.06000 sc
-%
-% Fig objects follow
-%
-%
-% here starts figure with depth 50
-% Polyline
-7.500 slw
-n 1950 2850 m 4350 2850 l 4350 3450 l 1950 3450 l
- cp gs col0 s gr
-% Polyline
-n 2550 2850 m
- 2550 3450 l gs col0 s gr
-% Polyline
-n 3150 2850 m
- 3150 3450 l gs col0 s gr
-% Polyline
-n 3750 2850 m
- 3750 3450 l gs col0 s gr
-% Polyline
-n 5100 2850 m 7500 2850 l 7500 3450 l 5100 3450 l
- cp gs col0 s gr
-% Polyline
-n 5700 2850 m
- 5700 3450 l gs col0 s gr
-% Polyline
-n 6300 2850 m
- 6300 3450 l gs col0 s gr
-% Polyline
-n 6900 2850 m
- 6900 3450 l gs col0 s gr
-% Polyline
-n 630 2700 m 525 2700 525 3495 105 arcto 4 {pop} repeat
- 525 3600 7695 3600 105 arcto 4 {pop} repeat
- 7800 3600 7800 2805 105 arcto 4 {pop} repeat
- 7800 2700 630 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr
-% Polyline
-n 675 2850 m 1725 2850 l 1725 3450 l 675 3450 l
- cp gs col0 s gr
-% Polyline
-45.000 slw
-n 5700 2850 m 6300 2850 l 6300 3450 l 5700 3450 l
- cp gs col0 s gr
-% Polyline
-n 5700 1725 m 6300 1725 l 6300 2325 l 5700 2325 l
- cp gs col0 s gr
-% Polyline
-7.500 slw
-n 5655 1275 m 5550 1275 5550 2370 105 arcto 4 {pop} repeat
- 5550 2475 6345 2475 105 arcto 4 {pop} repeat
- 6450 2475 6450 1380 105 arcto 4 {pop} repeat
- 6450 1275 5655 1275 105 arcto 4 {pop} repeat
- cp gs col0 s gr
-% Polyline
-n 5700 1350 m 6300 1350 l 6300 1575 l 5700 1575 l
- cp gs col0 s gr
-% Polyline
-gs clippath
-1590 1905 m 1590 1845 l 1405 1845 l 1555 1875 l 1405 1905 l cp
-eoclip
-n 900 2850 m 900 1875 l
- 1575 1875 l gs col0 s gr gr
-
-% arrowhead
-n 1405 1905 m 1555 1875 l 1405 1845 l 1435 1875 l 1405 1905 l
- cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-5565 1830 m 5565 1770 l 5380 1770 l 5530 1800 l 5380 1830 l cp
-eoclip
-n 3375 1800 m
- 5550 1800 l gs col0 s gr gr
-
-% arrowhead
-n 5380 1830 m 5530 1800 l 5380 1770 l 5410 1800 l 5380 1830 l
- cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-6030 2310 m 5970 2310 l 5970 2495 l 6000 2345 l 6030 2495 l cp
-eoclip
-n 6000 2850 m
- 6000 2325 l gs col0 s gr gr
-
-% arrowhead
-n 6030 2495 m 6000 2345 l 5970 2495 l 6000 2465 l 6030 2495 l
- cp gs 0.00 setgray ef gr col0 s
-% Polyline
-n 1680 1575 m 1575 1575 1575 1995 105 arcto 4 {pop} repeat
- 1575 2100 3270 2100 105 arcto 4 {pop} repeat
- 3375 2100 3375 1680 105 arcto 4 {pop} repeat
- 3375 1575 1680 1575 105 arcto 4 {pop} repeat
- cp gs col0 s gr
-/Helvetica-Bold-iso ff 210.00 scf sf
-825 3225 m
-gs 1 -1 sc (header) col0 sh gr
-/Times-Bold-iso ff 600.00 scf sf
-4500 3225 m
-gs 1 -1 sc (...) col0 sh gr
-/Helvetica-Bold-iso ff 210.00 scf sf
-3600 3900 m
-gs 1 -1 sc (ndarray) col0 sh gr
-/Helvetica-Bold-iso ff 210.00 scf sf
-6600 2175 m
-gs 1 -1 sc (scalar) col0 sh gr
-/Helvetica-Bold-iso ff 210.00 scf sf
-6600 1950 m
-gs 1 -1 sc (array) col0 sh gr
-/Helvetica-iso ff 180.00 scf sf
-5775 1500 m
-gs 1 -1 sc (head) col0 sh gr
-/Helvetica-Bold-iso ff 210.00 scf sf
-1950 1875 m
-gs 1 -1 sc (data-type) col0 sh gr
-% here ends figure;
-$F2psEnd
-rs
-showpage
diff --git a/doc/numpybook/Figures/threefundamental.fig b/doc/numpybook/Figures/threefundamental.fig
deleted file mode 100644
index 79760c410..000000000
--- a/doc/numpybook/Figures/threefundamental.fig
+++ /dev/null
@@ -1,57 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-6 1950 2850 4350 3450
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 1950 2850 4350 2850 4350 3450 1950 3450 1950 2850
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 2550 2850 2550 3450
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3150 2850 3150 3450
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3750 2850 3750 3450
--6
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 5100 2850 7500 2850 7500 3450 5100 3450 5100 2850
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 5700 2850 5700 3450
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6300 2850 6300 3450
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6900 2850 6900 3450
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
- 7800 3600 7800 2700 525 2700 525 3600 7800 3600
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 675 2850 1725 2850 1725 3450 675 3450 675 2850
-2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 5700 2850 6300 2850 6300 3450 5700 3450 5700 2850
-2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 5700 1725 6300 1725 6300 2325 5700 2325 5700 1725
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
- 6450 2475 6450 1275 5550 1275 5550 2475 6450 2475
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 5700 1350 6300 1350 6300 1575 5700 1575 5700 1350
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
- 2 1 1.00 60.00 120.00
- 900 2850 900 1875 1575 1875
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
- 2 1 1.00 60.00 120.00
- 3375 1800 5550 1800
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
- 2 1 1.00 60.00 120.00
- 6000 2850 6000 2325
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
- 3375 2100 3375 1575 1575 1575 1575 2100 3375 2100
-4 0 0 50 -1 18 14 0.0000 4 165 720 825 3225 header\001
-4 0 0 50 -1 2 40 0.0000 4 105 450 4500 3225 ...\001
-4 0 0 50 -1 18 14 0.0000 4 210 810 3600 3900 ndarray\001
-4 0 0 50 -1 18 14 0.0000 4 165 630 6600 2175 scalar\001
-4 0 0 50 -1 18 14 0.0000 4 165 540 6600 1950 array\001
-4 0 0 50 -1 16 12 0.0000 4 135 420 5775 1500 head\001
-4 0 0 50 -1 18 14 0.0000 4 210 975 1950 1875 data-type\001
diff --git a/doc/numpybook/Figures/threefundamental.png b/doc/numpybook/Figures/threefundamental.png
deleted file mode 100644
index f4d4d950d..000000000
--- a/doc/numpybook/Figures/threefundamental.png
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/capi.lyx b/doc/numpybook/capi.lyx
deleted file mode 100644
index b14d5c4f5..000000000
--- a/doc/numpybook/capi.lyx
+++ /dev/null
@@ -1,24240 +0,0 @@
-#LyX 1.5.1 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
-\begin_document
-\begin_header
-\textclass mybook
-\language english
-\inputencoding auto
-\font_roman default
-\font_sans default
-\font_typewriter default
-\font_default_family default
-\font_sc false
-\font_osf false
-\font_sf_scale 100
-\font_tt_scale 100
-\graphics default
-\paperfontsize default
-\spacing onehalf
-\papersize default
-\use_geometry true
-\use_amsmath 2
-\use_esint 0
-\cite_engine basic
-\use_bibtopic false
-\paperorientation portrait
-\leftmargin 1in
-\topmargin 1in
-\rightmargin 1in
-\bottommargin 1in
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\defskip medskip
-\quotes_language english
-\papercolumns 1
-\papersides 1
-\paperpagestyle default
-\tracking_changes false
-\output_changes false
-\author ""
-\author ""
-\end_header
-
-\begin_body
-
-\begin_layout Part
-C-API
-\end_layout
-
-\begin_layout Chapter
-New Python Types and C-Structures
-\end_layout
-
-\begin_layout Quotation
-Beware of the man who won't be bothered with details.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-William Feather, Sr.
-\end_layout
-
-\begin_layout Quotation
-The truth is out there.
-\end_layout
-
-\begin_layout Right Address
----Chris Carter, The X Files
-\end_layout
-
-\begin_layout Standard
-NumPy provides a C-API to enable users to extend the system and get access
- to the array object for use in other routines.
- The best way to truly understand the C-API is to read the source code.
- If you are unfamiliar with (C) source code, however, this can be a daunting
- experience at first.
- Be assured that the task becomes easier with practice, and you may be surprised
- at how simple the C-code can be to understand.
- Even if you don't think you can write C-code from scratch, it is much easier
- to understand and modify already-written source code then create it
-\emph on
-de novo
-\emph default
-.
-
-\end_layout
-
-\begin_layout Standard
-Python extensions are especially straightforward to understand because they
- all have a very similar structure.
- Admittedly, NumPy is not a trivial extension to Python, and may take a
- little more snooping to grasp.
- This is especially true because of the code-generation techniques, which
- simplify maintenance of very similar code, but can make the code a little
- less readable to beginners.
- Still, with a little persistence, the code can be opened to your understanding.
- It is my hope, that this guide to the C-API can assist in the process of
- becoming familiar with the compiled-level work that can be done with NumPy
- in order to squeeze that last bit of necessary speed out of your code.
-\end_layout
-
-\begin_layout Standard
-Several new types are defined in the C-code.
- Most of these are accessible from Python, but a few are not exposed due
- to their limited use.
- Every new Python type has an associated PyObject * with an internal structure
- that includes a pointer to a
-\begin_inset Quotes eld
-\end_inset
-
-method table
-\begin_inset Quotes erd
-\end_inset
-
- that defines how the new object behaves in Python.
- When you receive a Python object into C code, you always get a pointer
- to a
-\family typewriter
-PyObject
-\family default
- structure.
- Because a
-\family typewriter
-PyObject
-\family default
- structure is very generic and defines only
-\family typewriter
-PyObject_HEAD
-\family default
-, by itself it is not very interesting.
- However, different objects contain more details after the
-\family typewriter
-PyObject_HEAD
-\family default
- (but you have to cast to the correct type to access them --- or use accessor
- functions or macros).
-
-\end_layout
-
-\begin_layout Section
-New Python Types Defined
-\end_layout
-
-\begin_layout Standard
-Python types are the functional equivalent in C of classes in Python.
- By constructing a new Python type you make available a new object for Python.
- The ndarray object is an example of a new type defined in C.
- New types are defined in C by two basic steps:
-\end_layout
-
-\begin_layout Enumerate
-creating a C-structure (usually named Py<Name>Object) that is binary-compatible
- with the
-\family typewriter
-PyObject
-\family default
- structure itself but holds the additional information needed for that particula
-r object;
-\end_layout
-
-\begin_layout Enumerate
-populating the
-\family typewriter
-PyTypeObject
-\family default
- table (pointed to by the ob_type member of the
-\family typewriter
-PyObject
-\family default
- structure) with pointers to functions that implement the desired behavior
- for the type.
-
-\end_layout
-
-\begin_layout Standard
-Instead of special method names which define behavior for Python classes,
- there are
-\begin_inset Quotes eld
-\end_inset
-
-function tables
-\begin_inset Quotes erd
-\end_inset
-
- which point to functions that implement the desired results.
- Since Python 2.2, the PyTypeObject itself has become dynamic which allows
- C types that can be
-\begin_inset Quotes eld
-\end_inset
-
-sub-typed
-\begin_inset Quotes erd
-\end_inset
-
- from other C-types in C, and sub-classed in Python.
- The children types inherit the attributes and methods from their parent(s).
-
-\end_layout
-
-\begin_layout Standard
-There are two major new types: the ndarray (
-\family typewriter
-PyArray_Type
-\family default
-) and the ufunc (
-\family typewriter
-PyUFunc_Type
-\family default
-).
- Additional types play a supportive role: the
-\family typewriter
-PyArrayIter_Type
-\family default
-, the
-\family typewriter
-PyArrayMultiIter_Type
-\family default
-, and the
-\family typewriter
-PyArrayDescr_Type
-\family default
-.
- The
-\family typewriter
-PyArrayIter_Type
-\family default
- is the type for a flat iterator for an ndarray (the object that is returned
- when getting the flat attribute).
- The
-\family typewriter
-PyArrayMultiIter_Type
-\family default
- is the type of the object returned when calling
-\family typewriter
-broadcast
-\family default
-().
- It handles iteration and broadcasting over a collection of nested sequences.
- Also, the
-\family typewriter
-PyArrayDescr_Type
-\family default
- is the data-type-descriptor type whose instances describe the data.
- Finally, there are 21 new scalar-array types which are new Python scalars
- corresponding to each of the fundamental data types available for arrays.
- An additional 10 other types are place holders that allow the array scalars
- to fit into a hierarchy of actual Python types.
-
-\end_layout
-
-\begin_layout Subsection
-PyArray_Type
-\end_layout
-
-\begin_layout Standard
-The Python type of the ndarray is
-\family typewriter
-PyArray_Type
-\family default
-
-\begin_inset LatexCommand index
-name "PyArray\\_Type"
-
-\end_inset
-
-.
- In C, every ndarray is a pointer to a
-\family typewriter
-PyArrayObject
-\family default
- structure.
- The ob_type member of this structure contains a pointer to the
-\family typewriter
-PyArray_Type
-\family default
- typeobject.
-
-\end_layout
-
-\begin_layout Standard
-The
-\family typewriter
-PyArrayObject
-\family default
- C-structure contains all of the required information for an array.
- All instances of an ndarray (and its subclasses) will have this structure.
- For future compatibility, these structure members should normally be accessed
- using the provided macros.
- If you need a shorter name, then you can make use of
-\family typewriter
-NPY_AO
-\family default
- which is defined to be equivalent to
-\family typewriter
-PyArrayObject
-\family default
-.
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct PyArrayObject {
-\end_layout
-
-\begin_layout LyX-Code
- PyObject_HEAD
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char *
-\emph default
-data;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- nd;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp *
-\emph default
-dimensions;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp *
-\emph default
-strides;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyObject *
-\emph default
-base;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_Descr *
-\emph default
-descr;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- flags;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyObject *
-\emph default
-weakreflist;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArrayObject
-\emph default
-;
-\end_layout
-
-\begin_layout Description
-PyObject_HEAD This is needed by all Python objects.
- It consists of (at least) a reference count member (
-\family typewriter
-ob_refcnt
-\family default
-) and a pointer to the typeobject (
-\family typewriter
-ob_type
-\family default
-).
- (Other elements may also be present if Python was compiled with special
- options see Include/object.h in the Python source tree for more information).
- The ob_type member points to a Python type object.
-
-\end_layout
-
-\begin_layout Description
-data A pointer to the first element of the array.
- This pointer can (and normally should) be recast to the data type of the
- array.
-
-\end_layout
-
-\begin_layout Description
-nd An integer providing the number of dimensions for this array.
- When nd is 0, the array is sometimes called a rank-0 array.
- Such arrays have undefined dimensions and strides and cannot be accessed.
-
-\family typewriter
-NPY_MAXDIMS
-\family default
- is the largest number of dimensions for any array.
-\end_layout
-
-\begin_layout Description
-dimensions An array of integers providing the shape in each dimension as
- long as nd
-\begin_inset Formula $\geq$
-\end_inset
-
-1.
- The integer is always large enough to hold a pointer on the platform, so
- the dimension size is only limited by memory.
-
-\end_layout
-
-\begin_layout Description
-strides An array of integers providing for each dimension the number of
- bytes that must be skipped to get to the next element in that dimension.
-
-\end_layout
-
-\begin_layout Description
-base This member is used to hold a pointer to another Python object that
- is related to this array.
- There are two use cases: 1) If this array does not own its own memory,
- then base points to the Python object that owns it (perhaps another array
- object), 2) If this array has the
-\family typewriter
-NPY_UPDATEIFCOPY
-\family default
- flag set, then this array is a working copy of a
-\begin_inset Quotes eld
-\end_inset
-
-misbehaved
-\begin_inset Quotes erd
-\end_inset
-
- array.
- As soon as this array is deleted, the array pointed to by base will be
- updated with the contents of this array.
-
-\end_layout
-
-\begin_layout Description
-descr A pointer to a data-type descriptor object (see below).
- The data-type descriptor object is an instance of a new built-in type which
- allows a generic description of memory.
- There is a descriptor structure for each data type supported.
- This descriptor structure contains useful information about the type as
- well as a pointer to a table of function pointers to implement specific
- functionality.
-\end_layout
-
-\begin_layout Description
-flags Flags indicating how the memory pointed to by data is to be interpreted.
- Possible flags are
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
-,
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
-,
-\family typewriter
-NPY_OWNDATA
-\family default
-,
-\family typewriter
-NPY_ALIGNED
-\family default
-,
-\family typewriter
-NPY_WRITEABLE
-\family default
-, and
-\family typewriter
-NPY_UPDATEIFCOPY
-\family default
-.
-\end_layout
-
-\begin_layout Description
-weakreflist This member allows array objects to have weak references (using
- the weakref module).
-
-\end_layout
-
-\begin_layout Subsection
-PyArrayDescr_Type
-\end_layout
-
-\begin_layout Standard
-The
-\family typewriter
-PyArrayDescr_Type
-\family default
-
-\begin_inset LatexCommand index
-name "PyArrayDescr\\_Type"
-
-\end_inset
-
- is the built-in type of the data-type-descriptor objects used to describe
- how the bytes comprising the array are to be interpreted.
- There are 21 statically-defined
-\family typewriter
-PyArray_Descr
-\family default
- objects for the built-in data-types.
- While these participate in reference counting, their reference count should
- never reach zero.
- There is also a dynamic table of user-defined
-\family typewriter
-PyArray_Descr
-\family default
- objects that is also maintained.
- Once a data-type-descriptor object is
-\begin_inset Quotes eld
-\end_inset
-
-registered
-\begin_inset Quotes erd
-\end_inset
-
- it should never be deallocated either.
- The function
-\family typewriter
-PyArray_DescrFromType
-\family default
-(...) can be used to retrieve a
-\family typewriter
-PyArray_Descr
-\family default
- object from an enumerated type-number (either built-in or user-defined).
- The format of the structure that lies at the heart of the
-\family typewriter
-PyArrayDescr_Type
-\family default
- is.
-
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
- PyObject_HEAD
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyTypeObject *
-\emph default
-typeobj;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char
-\emph default
- kind;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char
-\emph default
- type;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char
-\emph default
- byteorder;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char
-\emph default
- unused;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- flags;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- type_num;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- elsize;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- alignment;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_ArrayDescr
-\emph default
- *subarray;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyObject
-\emph default
- *fields;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_ArrFuncs
-\emph default
- *f;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArray_Descr
-\emph default
-;
-\end_layout
-
-\begin_layout Description
-typeobj Pointer to a typeobject that is the corresponding Python type for
- the elements of this array.
- For the builtin types, this points to the corresponding array scalar.
- For user-defined types, this should point to a user-defined typeobject.
- This typeobject can either inherit from array scalars or not.
- If it does not inherit from array scalars, then the
-\family typewriter
-NPY_USE_GETITEM
-\family default
- and
-\family typewriter
-NPY_USE_SETITEM
-\family default
- flags should be set in the
-\family typewriter
-flags
-\family default
- member.
-\end_layout
-
-\begin_layout Description
-kind A character code indicating the kind of array (using the array interface
- typestring notation).
- A 'b' represents Boolean, a 'i' represents signed integer, a 'u' represents
- unsigned integer, 'f' represents floating point, 'c' represents complex
- floating point, 'S' represents 8-bit character string, 'U' represents 32-bit/ch
-aracter unicode string, and 'V' repesents arbitrary.
-
-\end_layout
-
-\begin_layout Description
-type A traditional character code indicating the data type.
-
-\end_layout
-
-\begin_layout Description
-byteorder A character indicating the byte-order: '>' (big-endian), '<' (little-e
-ndian), '=' (native), '|' (irrelevant, ignore).
- All builtin data-types have byteorder '='.
-
-\end_layout
-
-\begin_layout Description
-flags A data-type bit-flag that determines if the data-type exhibits
- object-array like behavior.
- Each bit in this member is a flag which are named as:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-NPY_ITEM_REFCOUNT\InsetSpace ~
-(NPY_ITEM_HASOBJECT) Indicates that items of this data-type
- must be reference counted (using
-\family typewriter
-Py_INCREF
-\family default
- and
-\family typewriter
-Py_DECREF
-\family default
-).
-
-\end_layout
-
-\begin_layout Description
-NPY_ITEM_LISTPICKLE Indicates arrays of this data-type must be converted
- to a list before pickling.
-
-\end_layout
-
-\begin_layout Description
-NPY_ITEM_IS_POINTER Indicates the item is a pointer to some other data-type
-\end_layout
-
-\begin_layout Description
-NPY_NEEDS_INIT Indicates memory for this data-type must be initialized (set
- to 0) on creation.
-
-\end_layout
-
-\begin_layout Description
-NPY_NEEDS_PYAPI Indicates this data-type requires the Python C-API during
- access (so don't give up the GIL if array access is going to be needed).
-
-\end_layout
-
-\begin_layout Description
-NPY_USE_GETITEM On array access use the
-\family typewriter
-f->getitem
-\family default
- function pointer instead of the standard conversion to an array scalar.
- Must use if you don't define an array scalar to go along with the data-type.
-
-\end_layout
-
-\begin_layout Description
-NPY_USE_SETITEM When creating a 0-d array from an array scalar use
-\family typewriter
-f->setitem
-\family default
- instead of the standard copy from an array scalar.
- Must use if you don't define an array scalar to go along with the data-type.
-
-\end_layout
-
-\begin_layout Description
-NPY_FROM_FIELDS The bits that are inherited for the parent data-type if
- these bits are set in any field of the data-type.
- Currently (
-\family typewriter
-NPY_NEEDS_INIT
-\family default
- |
-\family typewriter
-NPY_LIST_PICKLE
-\family default
- |
-\family typewriter
-NPY_ITEM_REFCOUNT
-\family default
- |
-\family typewriter
-NPY_NEEDS_PYAPI
-\family default
-).
-
-\end_layout
-
-\begin_layout Description
-NPY_OBJECT_DTYPE_FLAGS Bits set for the object data-type: (
-\family typewriter
-NPY_LIST_PICKLE
-\family default
- |
-\family typewriter
-NPY_USE_GETITEM
-\family default
- |
-\family typewriter
-NPY_ITEM_IS_POINTER
-\family default
- |
-\family typewriter
-NPY_REFCOUNT
-\family default
- |
-\family typewriter
-NPY_NEEDS_INIT
-\family default
- |
-\family typewriter
-NPY_NEEDS_PYAPI
-\family default
-).
-
-\end_layout
-
-\begin_layout Description
-PyDataType_FLAGCHK (
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-int
-\family default
- flags) Return true if all the given flags are set for the data-type object.
-
-\end_layout
-
-\begin_layout Description
-PyDataType_REFCHK (
-\family typewriter
-PyArray_Descr*
-\family default
- dtype) Equivalent to
-\family typewriter
-PyDataType_FLAGCHK
-\family default
-(
-\emph on
-dtype
-\emph default
-,
-\family typewriter
-NPY_ITEM_REFCOUNT
-\family default
-).
-\end_layout
-
-\end_deeper
-\begin_layout Description
-type_num A number that uniquely identifies the data type.
- For new data-types, this number is assigned when the data-type is registered.
-\end_layout
-
-\begin_layout Description
-elsize For data types that are always the same size (such as long), this
- holds the size of the data type.
- For flexible data types where different arrays can have a different elementsize
-, this should be 0.
-\end_layout
-
-\begin_layout Description
-alignment A number providing alignment information for this data type.
- Specifically, it shows how far from the start of a 2-element structure
- (whose first element is a
-\family typewriter
-char
-\family default
-), the compiler places an item of this type:
-\family typewriter
-offsetof(struct {char c; type v;}, v)
-\end_layout
-
-\begin_layout Description
-subarray If this is non-
-\family typewriter
-NULL
-\family default
-, then this data-type descriptor is a C-style contiguous array of another
- data-type descriptor.
- In other-words, each element that this descriptor describes is actually
- an array of some other base descriptor.
- This is most useful as the data-type descriptor for a field in another
- data-type descriptor.
- The fields member should be
-\family typewriter
-NULL
-\family default
- if this is non-
-\family typewriter
-NULL
-\family default
- (the fields member of the base descriptor can be non-
-\family typewriter
-NULL
-\family default
- however).
- The
-\family typewriter
-PyArray_ArrayDescr
-\family default
- structure is defined using
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_Descr
-\emph default
- *base;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyObject
-\emph default
- *shape;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArray_ArrayDescr;
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The elements of this structure are:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-base The data-type-descriptor object of the base-type.
-
-\end_layout
-
-\begin_layout Description
-shape The shape (always C-style contiguous) of the sub-array as a Python
- tuple.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-fields If this is non-NULL, then this data-type-descriptor has fields described
- by a Python dictionary whose keys are names (and also titles if given)
- and whose values are tuples that describe the fields.
- Recall that a data-type-descriptor always describes a fixed-length set
- of bytes.
- A field is a named sub-region of that total, fixed-length collection.
- A field is described by a tuple composed of another data-type-descriptor
- and a byte offset.
- Optionally, the tuple may contain a title which is normally a Python string.
- These tuples are placed in this dictionary keyed by name (and also title
- if given).
-
-\end_layout
-
-\begin_layout Description
-f A pointer to a structure containing functions that the type needs to implement
- internal features.
- These functions are not the same thing as the universal functions (ufuncs)
- described later.
- Their signatures can vary arbitrarily.
- Not all of these function pointers must be defined for a given type.
- The required members are
-\family typewriter
-nonzero
-\family default
-,
-\family typewriter
-copyswap
-\family default
-,
-\family typewriter
-copyswapn
-\family default
-,
-\family typewriter
-setitem
-\family default
-,
-\family typewriter
-getitem
-\family default
-, and
-\family typewriter
-cast
-\family default
-.
- These are assumed to be non-
-\family typewriter
-NULL
-\family default
- and
-\family typewriter
-NULL
-\family default
- entries will cause a program crash.
- The other functions may be
-\family typewriter
-NULL
-\family default
- which will just mean reduced functionality for that data-type.
- (Also, the nonzero function will be filled in with a default function if
- it is
-\family typewriter
-NULL
-\family default
- when you register a user-defined data-type).
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
- PyArray_VectorUnaryFunc
-\emph default
-
-\emph on
-*
-\emph default
-cast[NPY_NTYPES];
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_GetItemFunc *
-\emph default
-getitem;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_SetItemFunc *
-\emph default
-setitem;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_CopySwapNFunc *
-\emph default
-copyswapn;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_CopySwapFunc *
-\emph default
-copyswap;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_CompareFunc *
-\emph default
-compare;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_ArgFunc *
-\emph default
-argmax;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_DotFunc *
-\emph default
-dotfunc;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_ScanFunc *
-\emph default
-scanfunc;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_FromStrFunc
-\emph default
- *fromstr;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_NonzeroFunc *
-\emph default
-nonzero;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_FillFunc
-\emph default
- *fill;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_FillWithScalarFunc
-\emph default
- *fillwithscalar;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_SortFunc
-\emph default
- *sort[NPY_NSORTS];
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_ArgSortFunc
-\emph default
- *argsort[NPY_NSORTS];
-\newline
-
-\emph on
-PyObject
-\emph default
- *castdict;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArray_ScalarKindFunc
-\emph default
- *scalarkind;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- **cancastscalarkindto;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- *cancastto;
-\end_layout
-
-\begin_layout LyX-Code
-
-\shape italic
-int
-\shape default
- listpickle
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArray_ArrFuncs
-\emph default
-;
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The concept of a behaved segment is used in the description of the function
- pointers.
- A behaved segment is one that is aligned and in native machine byte-order
- for the data-type.
- The
-\family typewriter
-nonzero
-\family default
-,
-\family typewriter
-copyswap
-\family default
-,
-\family typewriter
-copyswapn
-\family default
-,
-\family typewriter
-getitem
-\family default
-, and
-\family typewriter
-setitem
-\family default
- functions can (and must) deal with mis-behaved arrays.
- The other functions require behaved memory segments.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-cast (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-void*
-\family default
- from,
-\family typewriter
-void*
-\family default
- to,
-\family typewriter
-npy_intp
-\family default
- n,
-\family typewriter
-void*
-\family default
- fromarr,
-\family typewriter
-void*
-\family default
- toarr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- An array of function pointers to cast from the current type to all of the
- other builtin types.
- Each function casts a contiguous, aligned, and notswapped buffer pointed
- at by
-\emph on
-from
-\emph default
- to a contiguous, aligned, and notswapped buffer pointed at by
-\emph on
-to
-\emph default
- The number of items to cast is given by
-\emph on
-n
-\emph default
-, and the arguments
-\emph on
-fromarr
-\emph default
- and
-\emph on
-toarr
-\emph default
- are interpreted as PyArrayObjects for flexible arrays to get itemsize informati
-on.
-\end_layout
-
-\begin_layout Description
-getitem (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that returns a standard Python object from a single
- element of the array object
-\emph on
-arr
-\emph default
- pointed to by
-\emph on
-data
-\emph default
-.
- This function must be able to deal with
-\begin_inset Quotes eld
-\end_inset
-
-misbehaved
-\begin_inset Quotes erd
-\end_inset
-
- (misaligned and/or swapped) arrays correctly.
-
-\end_layout
-
-\begin_layout Description
-setitem (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- item,
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that sets the Python object
-\emph on
-item
-\emph default
- into the array,
-\emph on
-arr
-\emph default
-, at the position pointed to by
-\emph on
-data
-\emph default
-.
- This function deals with
-\begin_inset Quotes eld
-\end_inset
-
-misbehaved
-\begin_inset Quotes erd
-\end_inset
-
- arrays.
- If successful, a zero is returned, otherwise, a negative one is returned
- (and a Python error set).
-
-\end_layout
-
-\begin_layout Description
-copyswapn (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-void*
-\family default
- dest,
-\family typewriter
-npy_intp
-\family default
- dstride,
-\family typewriter
-void*
-\family default
- src,
-\family typewriter
-npy_intp
-\family default
- sstride,
-\family typewriter
-npy_intp
-\family default
- n,
-\family typewriter
-int
-\family default
- swap, void *arr)
-\end_layout
-
-\begin_layout Description
-copyswap (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-void*
-\family default
- dest,
-\family typewriter
-void*
-\family default
- src,
-\family typewriter
-int
-\family default
- swap, void *arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These members are both pointers to functions to copy data from
-\emph on
-src
-\emph default
- to
-\emph on
-dest
-\emph default
- and
-\emph on
-swap
-\emph default
- if indicated.
- The value of arr is only used for flexible (
-\family typewriter
-NPY_STRING
-\family default
-,
-\family typewriter
-NPY_UNICODE
-\family default
-, and
-\family typewriter
-NPY_VOID
-\family default
-) arrays (and is obtained from
-\family typewriter
-arr->descr->elsize
-\family default
-).
- The second function copies a single value, while the first loops over n
- values with the provided strides.
- These functions can deal with misbehaved
-\emph on
-src
-\emph default
- data.
- If
-\emph on
-src
-\emph default
- is NULL then no copy is performed.
- If
-\emph on
-swap
-\emph default
- is 0, then no byteswapping occurs.
- It is assumed that
-\emph on
-dest
-\emph default
- and
-\emph on
-src
-\emph default
- do not overlap.
- If they overlap, then use
-\family typewriter
-memmove
-\family default
-(...) first followed by
-\family typewriter
-copyswap(n)
-\family default
- with NULL valued
-\family typewriter
-src
-\family default
-.
-\end_layout
-
-\begin_layout Description
-compare (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-const void*
-\family default
- d1,
-\family typewriter
-const void*
-\family default
- d2,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that compares two elements of the array,
-\family typewriter
-arr
-\family default
-, pointed to by
-\family typewriter
-d1
-\family default
- and
-\family typewriter
-d2
-\family default
-.
- This function requires behaved arrays.
- The return value is 1 if *
-\family typewriter
-d1
-\family default
- > *
-\family typewriter
-d2
-\family default
-, 0 if *
-\family typewriter
-d1
-\family default
- == *
-\family typewriter
-d2
-\family default
-, and -1 if *
-\family typewriter
-d1
-\family default
- < *
-\family typewriter
-d2
-\family default
-.
- The array object arr is used to retrieve itemsize and field information
- for flexible arrays.
-\end_layout
-
-\begin_layout Description
-argmax (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-npy_intp
-\family default
- n,
-\family typewriter
-npy_intp*
-\family default
- max_ind,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that retrieves the index of the largest of
-\family typewriter
-n
-\family default
- elements in
-\family typewriter
-arr
-\family default
- beginning at the element pointed to by
-\family typewriter
-data
-\family default
-.
- This function requires that the memory segment be contiguous and behaved.
- The return value is always 0.
- The index of the largest element is returned in
-\family typewriter
-max_ind
-\family default
-.
-\end_layout
-
-\begin_layout Description
-dotfunc (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-void*
-\family default
- ip1,
-\family typewriter
-npy_intp
-\family default
- is1,
-\family typewriter
-void*
-\family default
- ip2,
-\family typewriter
-npy_intp
-\family default
- is2,
-\family typewriter
-void*
-\family default
- op,
-\family typewriter
-npy_intp
-\family default
- n,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that multiplies two
-\family typewriter
-n
-\family default
--length sequences together, adds them, and places the result in element
- pointed to by
-\family typewriter
-op
-\family default
- of
-\family typewriter
-arr
-\family default
-.
- The start of the two sequences are pointed to by
-\family typewriter
-ip1
-\family default
- and
-\family typewriter
-ip2
-\family default
-.
- To get to the next element in each sequence requires a jump of
-\family typewriter
-is1
-\family default
- and
-\family typewriter
-is2
-\family default
-
-\emph on
-bytes
-\emph default
-, respectively.
- This function requires behaved (though not necessarily contiguous) memory.
-
-\end_layout
-
-\begin_layout Description
-scanfunc (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-FILE*
-\family default
- fd,
-\family typewriter
-void*
-\family default
- ip ,
-\family typewriter
-void*
-\family default
- sep ,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that scans (scanf style) one element of the correspondi
-ng type from the file descriptor
-\family typewriter
-fd
-\family default
- into the array memory pointed to by
-\family typewriter
-ip
-\family default
-.
- The array is assumed to be behaved.
- If
-\family typewriter
-sep
-\family default
- is not NULL, then a separator string is also scanned from the file before
- returning.
- The last argument
-\family typewriter
-arr
-\family default
- is the array to be scanned into.
- A 0 is returned if the scan is successful.
- A negative number indicates something went wrong: -1 means the end of file
- was reached before the separator string could be scanned, -4 means that
- the end of file was reached before the element could be scanned, and -3
- means that the element could not be interpreted from the format string.
- Requires a behaved array.
-\end_layout
-
-\begin_layout Description
-fromstr (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-char*
-\family default
- str,
-\family typewriter
-void*
-\family default
- ip,
-\family typewriter
-char**
-\family default
- endptr,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that converts the string pointed to by
-\family typewriter
-str
-\family default
- to one element of the corresponding type and places it in the memory location
- pointed to by
-\family typewriter
-ip
-\family default
-.
- After the conversion is completed,
-\family typewriter
-*endptr
-\family default
- points to the rest of the string.
- The last argument
-\family typewriter
-arr
-\family default
- is the array into which ip points (needed for variable-size data-types).
- Returns 0 on success or -1 on failure.
- Requires a behaved array.
-\end_layout
-
-\begin_layout Description
-nonzero (
-\family typewriter
-Bool
-\family default
-) (
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that returns TRUE if the item of
-\family typewriter
-arr
-\family default
- pointed to by
-\family typewriter
-data
-\family default
- is nonzero.
- This function can deal with misbehaved arrays.
-
-\end_layout
-
-\begin_layout Description
-fill (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-npy_intp
-\family default
- length,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that fills a contiguous array of given length with
- data.
- The first two elements of the array must already be filled-in.
- From these two values, a delta will be computed and the values from item
- 3 to the end will be computed by repeatedly adding this computed delta.
- The data buffer must be well-behaved.
-\end_layout
-
-\begin_layout Description
-fillwithscalar (
-\family typewriter
-void
-\family default
-)(
-\family typewriter
-void*
-\family default
- buffer,
-\family typewriter
-npy_intp
-\family default
- length,
-\family typewriter
-void*
-\family default
- value,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to a function that fills a contiguous
-\family typewriter
-buffer
-\family default
- of the given
-\family typewriter
-length
-\family default
- with a single scalar
-\family typewriter
-value
-\family default
- whose address is given.
- The final argument is the array which is needed to get the itemsize for
- variable-length arrays.
-
-\end_layout
-
-\begin_layout Description
-sort (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-void*
-\family default
- start,
-\family typewriter
-npy_intp
-\family default
- length,
-\family typewriter
-void*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- An array of function pointers to a particular sorting algorithms.
- A particular sorting algorithm is obtained using a key (so far
-\family typewriter
-NPY_QUICKSORT
-\family default
-,
-\family typewriter
-NPY_HEAPSORT
-\family default
-, and
-\family typewriter
-NPY_MERGESORT
-\family default
- are defined).
- These sorts are done in-place assuming contiguous and aligned data.
-
-\end_layout
-
-\begin_layout Description
-argsort (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-void*
-\family default
- start,
-\family typewriter
-npy_intp*
-\family default
- result,
-\family typewriter
-npy_intp
-\family default
- length, void *arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- An array of function pointers to sorting algorithms for this data type.
- The same sorting algorithms as for sort are available.
- The indices producing the sort are returned in result (which must be initialize
-d with indices 0 to length-1 inclusive).
-
-\end_layout
-
-\begin_layout Description
-castdict
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Either
-\family typewriter
-NULL
-\family default
- or a dictionary containing low-level casting functions for user-defined
- data-types.
- Each function is wrapped in a
-\family typewriter
-PyCObject*
-\family default
- and keyed by the data-type number.
-
-\end_layout
-
-\begin_layout Description
-scalarkind (
-\family typewriter
-NPY_SCALARKIND
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A function to determine how scalars of this type should be interpreted.
- The argument is
-\family typewriter
-NULL
-\family default
- or a 0-dimensional array containing the data (if that is needed to determine
- the kind of scalar).
- The return value must be of type
-\family typewriter
-NPY_SCALARKIND
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-cancastscalarkindto
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Either
-\family typewriter
-NULL
-\family default
- or an array of
-\family typewriter
-NPY_NSCALARKINDS
-\family default
- pointers.
- These pointers should each be either
-\family typewriter
-NULL
-\family default
- or a pointer to an array of integers (terminated by
-\family typewriter
-NPY_NOTYPE
-\family default
-) indicating data-types that a scalar of this data-type of the specified
- kind can be cast to safely (this usually means without losing precision).
-\end_layout
-
-\begin_layout Description
-cancastto
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Either
-\family typewriter
-NULL
-\family default
- or an array of integers (terminated by
-\family typewriter
-NPY_NOTYPE
-\family default
-) indicated data-types that this data-type can be cast to safely (this usually
- means without losing precision).
-\end_layout
-
-\begin_layout Description
-listpickle
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Unused.
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-The
-\family typewriter
-PyArray_Type
-\family default
- typeobject implements many of the features of Python objects including
- the tp_as_number, tp_as_sequence, tp_as_mapping, and tp_as_buffer interfaces.
- The rich comparison (tp_richcompare) is also used along with new-style
- attribute lookup for methods (tp_methods) and properties (tp_getset).
- The
-\family typewriter
-PyArray_Type
-\family default
- can also be sub-typed.
-
-\end_layout
-
-\begin_layout Tip
-The tp_as_number methods use a generic approach to call whatever function
- has been registered for handling the operation.
- The function PyNumeric_SetOps(..) can be used to register functions to handle
- particular mathematical operations (for all arrays).
- When the umath module is imported, it sets the numeric operations for all
- arrays to the corresponding ufuncs.
-
-\newline
-The tp_str and tp_repr methods can also be altered using PyString_SetStringFunc
-tion(...).
-\end_layout
-
-\begin_layout Subsection
-PyUFunc_Type
-\end_layout
-
-\begin_layout Standard
-The ufunc object is implemented by creation of the
-\family typewriter
-PyUFunc_Type
-\family default
-
-\begin_inset LatexCommand index
-name "PyUFunc\\_Type"
-
-\end_inset
-
-.
- It is a very simple type that implements only basic getattribute behavior,
- printing behavior, and has call behavior which allows these objects to
- act like functions.
- The basic idea behind the ufunc is to hold a reference to fast 1-dimensional
- (vector) loops for each data type that supports the operation.
- These one-dimensional loops all have the same signature and are the key
- to creating a new ufunc.
- They are called by the generic looping code as appropriate to implement
- the N-dimensional function.
- There are also some generic 1-d loops defined for floating and complexfloating
- arrays that allow you to define a ufunc using a single scalar function
- (
-\emph on
-e.g.
-
-\emph default
- atanh).
-
-\end_layout
-
-\begin_layout Standard
-The core of the ufunc is the
-\family typewriter
-PyUFuncObject
-\family default
- which contains all the information needed to call the underlying C-code
- loops that perform the actual work.
- It has the following structure.
-
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
- PyObject_HEAD
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- nin;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- nout;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- nargs;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- identity;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyUFuncGenericFunction *
-\emph default
-functions;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-void **
-\emph default
-data;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- ntypes;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- check_return;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char *
-\emph default
-name;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char *
-\emph default
-types;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char *
-\emph default
-doc;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-void *
-\emph default
-ptr;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyObject *
-\emph default
-obj;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyObject *
-\emph default
-userloops;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyUFuncObject
-\emph default
-;
-\end_layout
-
-\begin_layout Description
-PyObject_HEAD required for all Python objects.
-\end_layout
-
-\begin_layout Description
-nin The number of input arguments.
-\end_layout
-
-\begin_layout Description
-nout The number of output arguments.
-\end_layout
-
-\begin_layout Description
-nargs The total number of arguments (
-\emph on
-nin
-\emph default
-+
-\emph on
-nout
-\emph default
-).
- This must be less than
-\family typewriter
-NPY_MAXARGS
-\family default
-.
-\end_layout
-
-\begin_layout Description
-identity Either
-\family typewriter
-PyUFunc_One
-\family default
-,
-\family typewriter
-PyUFunc_Zero
-\family default
-, or
-\family typewriter
-PyUFunc_None
-\family default
- to indicate the identity for this operation.
- It is only used for a reduce-like call on an empty array.
-\end_layout
-
-\begin_layout Description
-functions (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- extradata )
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- An array of function pointers --- one for each data type supported by the
- ufunc.
- This is the vector loop that is called to implement the underlying function
-
-\emph on
-dims
-\emph default
-[0] times.
- The first argument,
-\emph on
-args
-\emph default
-, is an array of
-\emph on
-nargs
-\emph default
- pointers to behaved memory.
- Pointers to the data for the input arguments are first, followed by the
- pointers to the data for the output arguments.
- How many bytes must be skipped to get to the next element in the sequence
- is specified by the corresponding entry in the
-\emph on
-steps
-\emph default
- array.
- The last argument allows the loop to receive extra information.
- This is commonly used so that a single, generic vector loop can be used
- for multiple functions.
- In this case, the actual scalar function to call is passed in as
-\emph on
-extradata
-\emph default
-.
- The size of this function pointer array is ntypes.
-
-\end_layout
-
-\begin_layout Description
-data Extra data to be passed to the 1-d vector loops or
-\family typewriter
-NULL
-\family default
- if no extra-data is needed.
- This C-array must be the same size (
-\emph on
-i.e.
-
-\emph default
- ntypes) as the functions array.
-
-\family typewriter
-NULL
-\family default
- is used if extra_data is not needed.
- Several C-API calls for UFuncs are just 1-d vector loops that make use
- of this extra data to receive a pointer to the actual function to call.
-
-\end_layout
-
-\begin_layout Description
-ntypes The number of supported data types for the ufunc.
- This number specifies how many different 1-d loops (of the builtin data
- types) are available.
-
-\end_layout
-
-\begin_layout Description
-check_return Obsolete and unused.
- However, it is set by the corresponding entry in the main ufunc creation
- routine:
-\family typewriter
-PyUFunc_FromFuncAndData
-\family default
-(...).
-\end_layout
-
-\begin_layout Description
-name A string name for the ufunc.
- This is used dynamically to build the __doc__ attribute of ufuncs.
-\end_layout
-
-\begin_layout Description
-types An array of
-\emph on
-nargs
-\series bold
-\emph default
-
-\begin_inset Formula $\times$
-\end_inset
-
-
-\series default
-\emph on
-ntypes
-\emph default
- 8-bit type_numbers which contains the type signature for the function for
- each of the supported (builtin) data types.
- For each of the
-\emph on
-ntypes
-\emph default
- functions, the corresponding set of type numbers in this array shows how
- the
-\emph on
-args
-\emph default
- argument should be interpreted in the 1-d vector loop.
- These type numbers do not have to be the same type and mixed-type ufuncs
- are supported.
-
-\end_layout
-
-\begin_layout Description
-doc Documentation for the ufunc.
- Should not contain the function signature as this is generated dynamically
- when __doc__ is retrieved.
-\end_layout
-
-\begin_layout Description
-ptr Any dynamically allocated memory.
- Currently, this is used for dynamic ufuncs created from a python function
- to store room for the types, data, and name members.
-\end_layout
-
-\begin_layout Description
-obj For ufuncs dynamically created from python functions, this member holds
- a reference to the underlying Python function.
-\end_layout
-
-\begin_layout Description
-userloops A dictionary of user-defined 1-d vector loops (stored as CObject
- ptrs) for user-defined types.
- A loop may be registered by the user for any user-defined type.
- It is retrieved by type number.
- User defined type numbers are always larger than
-\family typewriter
-NPY_USERDEF
-\family default
-.
-
-\end_layout
-
-\begin_layout Subsection
-PyArrayIter_Type
-\end_layout
-
-\begin_layout Standard
-This
-\begin_inset LatexCommand index
-name "PyArrayIter\\_Type"
-
-\end_inset
-
- is an iterator object that makes it easy to loop over an N-dimensional
- array.
- It is the object returned from the flat attribute of an ndarray.
- It is also used extensively throughout the implementation internals to
- loop over an N-dimensional array.
- The tp_as_mapping interface is implemented so that the iterator object
- can be indexed (using 1-d indexing), and a few methods are implemented
- through the tp_methods table.
- This object implements the next method and can be used anywhere an iterator
- can be used in Python.
-\end_layout
-
-\begin_layout Standard
-The C-structure corresponding to an object of
-\family typewriter
-PyArrayIter_Type
-\family default
- is the
-\family typewriter
-PyArrayIterObject
-\family default
-.
- The
-\family typewriter
-PyArrayIterObject
-\family default
- is used to keep track of a pointer into an N-dimensional array.
- It contains associated information used to quickly march through the array.
- The pointer can be adjusted in three basic ways: 1) advance to the
-\begin_inset Quotes eld
-\end_inset
-
-next
-\begin_inset Quotes erd
-\end_inset
-
- position in the array in a C-style contiguous fashion, 2) advance to an
- arbitrary N-dimensional coordinate in the array, and 3) advance to an arbitrary
- one-dimensional index into the array.
- The members of the
-\family typewriter
-PyArrayIterObject
-\family default
- structure are used in these calculations.
- Iterator objects keep their own dimension and strides information about
- an array.
- This can be adjusted as needed for
-\begin_inset Quotes eld
-\end_inset
-
-broadcasting,
-\begin_inset Quotes erd
-\end_inset
-
- or to loop over only specific dimensions.
-
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
- PyObject_HEAD
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- nd_m1;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- index;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- size;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- coordinates
-\emph on
-[NPY_MAXDIMS]
-\emph default
-;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- dims_m1
-\emph on
-[NPY_MAXDIMS]
-\emph default
-;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- strides
-\emph on
-[NPY_MAXDIMS]
-\emph default
-;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- backstrides
-\emph on
-[NPY_MAXDIMS]
-\emph default
-;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- factors
-\emph on
-[NPY_MAXDIMS]
-\emph default
-;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArrayObject *
-\emph default
-ao;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char *
-\emph default
-dataptr;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-Bool
-\emph default
- contiguous;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArrayIterObject
-\emph default
-;
-\end_layout
-
-\begin_layout Description
-nd_m1
-\begin_inset Formula $N-1$
-\end_inset
-
- where
-\begin_inset Formula $N$
-\end_inset
-
- is the number of dimensions in the underlying array.
-\end_layout
-
-\begin_layout Description
-index The current 1-d index into the array.
-\end_layout
-
-\begin_layout Description
-size The total size of the underlying array.
-\end_layout
-
-\begin_layout Description
-coordinates An
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index into the array.
-\end_layout
-
-\begin_layout Description
-dims_m1 The size of the array minus 1 in each dimension.
-\end_layout
-
-\begin_layout Description
-strides The strides of the array.
- How many bytes needed to jump to the next element in each dimension.
-
-\end_layout
-
-\begin_layout Description
-backstrides How many bytes needed to jump from the end of a dimension back
- to its beginning.
- Note that
-\emph on
-backstrides
-\emph default
-[k]=
-\emph on
-strides
-\emph default
-[k]*d
-\emph on
-ims_m1
-\emph default
-[k], but it is stored here as an optimization.
-\end_layout
-
-\begin_layout Description
-factors This array is used in computing an N-d index from a 1-d index.
- It contains needed products of the dimensions.
-
-\end_layout
-
-\begin_layout Description
-ao A pointer to the underlying ndarray this iterator was created to represent.
-\end_layout
-
-\begin_layout Description
-dataptr This member points to an element in the ndarray indicated by the
- index.
-\end_layout
-
-\begin_layout Description
-contiguous This flag is true if the underlying array is
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
-.
- It is used to simplify calculations when possible.
-
-\end_layout
-
-\begin_layout Standard
-How to use an array iterator on a C-level is explained more fully in later
- sections.
- Typically, you do not need to concern yourself with the internal structure
- of the iterator object, and merely interact with it through the use of
- the macros
-\family typewriter
-PyArray_ITER_NEXT
-\family default
-(it),
-\family typewriter
-PyArray_ITER_GOTO
-\family default
-(it, dest), or
-\family typewriter
-PyArray_ITER_GOTO1D
-\family default
-(it, index).
- All of these macros require the argument
-\emph on
-it
-\emph default
- to be a
-\family typewriter
-PyArrayIterObject*
-\family default
-.
-
-\end_layout
-
-\begin_layout Subsection
-PyArrayMultiIter_Type
-\end_layout
-
-\begin_layout Standard
-This type provides an iterator that encapsulates the concept of broadcasting.
- It allows
-\begin_inset Formula $N$
-\end_inset
-
- arrays to be broadcast together so that the loop progresses in C-style
- contiguous fashion over the broadcasted array.
- The corresponding C-structure is the
-\family typewriter
-PyArrayMultiIterObject
-\family default
- whose memory layout must begin any object,
-\emph on
-obj
-\emph default
-, passed in to the
-\family typewriter
-PyArray_Broadcast
-\family default
-(obj) function.
- Broadcasting is performed by adjusting array iterators so that each iterator
- represents the broadcasted shape and size, but has its strides adjusted
- so that the correct element from the array is used at each iteration.
-
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
- PyObject_HEAD
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- numiter;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- size;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- index;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- nd;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- dimensions
-\emph on
-[NPY_MAXDIMS]
-\emph default
-;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyArrayIterObject *
-\emph default
-iters
-\emph on
-[NPY_MAXDIMS]
-\emph default
-;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArrayMultiIterObject
-\emph default
-;
-\end_layout
-
-\begin_layout Description
-PyObject_HEAD Needed at the start of every Python object (holds reference
- count and type identification).
-\end_layout
-
-\begin_layout Description
-numiter The number of arrays that need to be broadcast to the same shape.
-\end_layout
-
-\begin_layout Description
-size The total broadcasted size.
-\end_layout
-
-\begin_layout Description
-index The current (1-d) index into the broadcasted result.
-\end_layout
-
-\begin_layout Description
-nd The number of dimensions in the broadcasted result.
-\end_layout
-
-\begin_layout Description
-dimensions The shape of the broadcasted result (only
-\family typewriter
-nd
-\family default
- slots are used).
-\end_layout
-
-\begin_layout Description
-iters An array of iterator objects that holds the iterators for the arrays
- to be broadcast together.
- On return, the iterators are adjusted for broadcasting.
-
-\end_layout
-
-\begin_layout Subsection
-PyArrayFlags_Type
-\end_layout
-
-\begin_layout Standard
-When the flags attribute is retrieved from Python, a special builtin object
- of this type is constructed.
- This special type makes it easier to work with the different flags by accessing
- them as attributes or by accessing them as if the object were a dictionary
- with the flag names as entries.
-
-\end_layout
-
-\begin_layout Subsection
-ScalarArrayTypes
-\end_layout
-
-\begin_layout Standard
-There is a Python type for each of the different built-in data types that
- can be present in the array Most of these are simple wrappers around the
- corresponding data type in C.
- The C-names for these types are
-\series bold
-Py
-\series default
-<TYPE>
-\series bold
-ArrType_Type
-\series default
- where <TYPE> can be
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-Bool
-\series default
-,
-\series bold
-Byte
-\series default
-,
-\series bold
-Short
-\series default
-,
-\series bold
-Int
-\series default
-,
-\series bold
-Long
-\series default
-,
-\series bold
-LongLong
-\series default
-,
-\series bold
-UByte
-\series default
-,
-\series bold
-UShort
-\series default
-,
-\series bold
-UInt
-\series default
-,
-\series bold
-ULong
-\series default
-,
-\series bold
-ULongLong
-\series default
-,
-\series bold
-Float
-\series default
-,
-\series bold
-Double
-\series default
-,
-\series bold
-LongDouble
-\series default
-,
-\series bold
-CFloat
-\series default
-,
-\series bold
-CDouble
-\series default
-,
-\series bold
-CLongDouble
-\series default
-,
-\series bold
-String
-\series default
-,
-\series bold
-Unicode
-\series default
-,
-\series bold
-Void
-\series default
-, and
-\series bold
-Object
-\series default
-.
-
-\end_layout
-
-\begin_layout Standard
-These type names are part of the C-API and can therefore be created in extension
- C-code.
- There is also a
-\family typewriter
-PyIntpArrType_Type
-\family default
- and a
-\family typewriter
-PyUIntpArrType_Type
-\family default
- that are simple substitutes for one of the integer types that can hold
- a pointer on the platform.
- The structure of these scalar objects is not exposed to C-code.
- The function
-\family typewriter
-PyArray_ScalarAsCtype
-\family default
-(..) can be used to extract the C-type value from the array scalar and the
- function
-\family typewriter
-PyArray_Scalar
-\family default
-(...) can be used to construct an array scalar from a C-value.
-
-\end_layout
-
-\begin_layout Section
-Other C-Structures
-\end_layout
-
-\begin_layout Standard
-A few new C-structures were found to be useful in the development of NumPy.
- These C-structures are used in at least one C-API call and are therefore
- documented here.
- The main reason these structures were defined is to make it easy to use
- the Python ParseTuple C-API to convert from Python objects to a useful
- C-Object.
-
-\end_layout
-
-\begin_layout Subsection
-PyArray_Dims
-\end_layout
-
-\begin_layout Standard
-This structure is very useful when shape and/or strides information is supposed
- to be interpreted.
- The structure is
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp *
-\emph default
-ptr;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- len;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArray_Dims
-\emph default
-;
-\end_layout
-
-\begin_layout Standard
-The members of this structure are
-\end_layout
-
-\begin_layout Description
-ptr A pointer to a list of (
-\family typewriter
-npy_intp
-\family default
-) integers which usually represent array shape or array strides.
-
-\end_layout
-
-\begin_layout Description
-len The length of the list of integers.
- It is assumed safe to access
-\emph on
-ptr
-\emph default
-[0] to
-\emph on
-ptr
-\emph default
-[len-1].
-
-\end_layout
-
-\begin_layout Subsection
-PyArray_Chunk
-\end_layout
-
-\begin_layout Standard
-This is equivalent to the buffer object structure in Python up to the ptr
- member.
- On 32-bit platforms (
-\emph on
-i.e.
-
-\emph default
- if
-\family typewriter
-NPY_SIZEOF_INT
-\family default
-==
-\family typewriter
-NPY_SIZEOF_INTP
-\family default
-) or in Python 2.5, the len member also matches an equivalent member of the
- buffer object.
- It is useful to represent a generic single-segment chunk of memory.
-
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
- PyObject_HEAD
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-PyObject *
-\emph default
-base;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-void *
-\emph default
-ptr;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp
-\emph default
- len;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- flags;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArray_Chunk
-\emph default
-;
-\end_layout
-
-\begin_layout Standard
-The members are
-\end_layout
-
-\begin_layout Description
-PyObject_HEAD Necessary for all Python objects.
- Included here so that the
-\family typewriter
-PyArray_Chunk
-\family default
- structure matches that of the buffer object (at least to the len member).
-
-\end_layout
-
-\begin_layout Description
-base The Python object this chunk of memory comes from.
- Needed so that memory can be accounted for properly.
-\end_layout
-
-\begin_layout Description
-ptr A pointer to the start of the single-segment chunk of memory.
-
-\end_layout
-
-\begin_layout Description
-len The length of the segment in bytes.
-\end_layout
-
-\begin_layout Description
-flags Any data flags (
-\emph on
-e.g.
-
-\emph default
-
-\family typewriter
-NPY_WRITEABLE
-\family default
-) that should be used to interpret the memory.
-
-\end_layout
-
-\begin_layout Subsection
-PyArrayInterface
-\end_layout
-
-\begin_layout Standard
-The
-\family typewriter
-PyArrayInterface
-\family default
-
-\begin_inset LatexCommand index
-name "PyArrayInterface"
-
-\end_inset
-
- structure is defined so that NumPy and other extension modules can use
- the rapid array interface protocol.
- The
-\series bold
-__array_struct__
-\series default
- method of an object that supports the rapid array interface protocol should
- return a
-\family typewriter
-PyCObject
-\family default
- that contains a pointer to a
-\family typewriter
-PyArrayInterface
-\family default
- structure with the relevant details of the array.
- After the new array is created, the attribute should be
-\family typewriter
-DECREF
-\family default
-'d which will free the
-\family typewriter
-PyArrayInterface
-\family default
- structure.
- Remember to
-\family typewriter
-INCREF
-\family default
- the object (whose
-\series bold
-__array_struct__
-\series default
- attribute was retrieved) and point the base member of the new
-\family typewriter
-PyArrayObject
-\family default
- to this same object.
- In this way the memory for the array will be managed correctly.
-
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- two;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- nd;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-char
-\emph default
- typekind;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- itemsize;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-int
-\emph default
- flags;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp *
-\emph default
-shape;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-npy_intp *
-\emph default
-strides;
-\end_layout
-
-\begin_layout LyX-Code
-
-\emph on
-void *
-\emph default
-data;
-\end_layout
-
-\begin_layout LyX-Code
- PyObject *descr;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\emph on
-PyArrayInterface
-\emph default
-;
-\end_layout
-
-\begin_layout Description
-two the integer 2 as a sanity check.
-\end_layout
-
-\begin_layout Description
-nd the number of dimensions in the array.
-\end_layout
-
-\begin_layout Description
-typekind A character indicating what kind of array is present according
- to the typestring convention with 't' -> bitfield, 'b' -> Boolean, 'i'
- -> signed integer, 'u' -> unsigned integer, 'f' -> floating point, 'c'
- -> complex floating point, 'O' -> object, 'S' -> string, 'U' -> unicode,
- 'V' -> void.
-\end_layout
-
-\begin_layout Description
-itemsize the number of bytes each item in the array requires.
-\end_layout
-
-\begin_layout Description
-flags any of the bits
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
- (1),
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- (2),
-\family typewriter
-NPY_ALIGNED
-\family default
- (0x100),
-\family typewriter
-NPY_NOTSWAPPED
-\family default
- (0x200), or
-\family typewriter
-NPY_WRITEABLE
-\family default
- (0x400) to indicate something about the data.
- The
-\family typewriter
-NPY_ALIGNED
-\family default
-,
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
-, and
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- flags can actually be determined from the other parameters.
- The flag
-\family typewriter
-NPY_ARR_HAS_DESCR
-\family default
- (0x800) can also be set to indicate to objects consuming the version 3
- array interface that the descr member of the structure is present (it will
- be ignored by objects consuming version 2 of the array interface).
-
-\end_layout
-
-\begin_layout Description
-shape An array containing the size of the array in each dimension.
-\end_layout
-
-\begin_layout Description
-strides An array containing the number of bytes to jump to get to the next
- element in each dimension.
-\end_layout
-
-\begin_layout Description
-data A pointer
-\emph on
-to
-\emph default
- the first element of the array.
-\end_layout
-
-\begin_layout Description
-descr A Python object describing the data-type in more detail (currently
- an array_description list of tuples).
- This can be
-\family typewriter
-NULL
-\family default
- if
-\emph on
-typekind
-\emph default
- and
-\emph on
-itemsize
-\emph default
- provide enough information.
-
-\end_layout
-
-\begin_layout Subsection
-Internally used structures
-\end_layout
-
-\begin_layout Standard
-Internally, the code uses some additional Python objects primarily for memory
- management.
- These types are not accessible directly from Python, and are not exposed
- to the C-API.
- They are included here only for completeness and assistance in understanding
- the code.
-
-\end_layout
-
-\begin_layout Subsubsection
-PyUFuncLoopObject
-\end_layout
-
-\begin_layout Standard
-A loose wrapper for a C-structure that contains the information needed for
- looping.
- This is useful if you are trying to understand the ufunc looping code.
- The
-\family typewriter
-PyUFuncLoopObject
-\family default
- is the associated C-structure.
- It is defined in the
-\family typewriter
-ufuncobject.h
-\family default
- header.
-\end_layout
-
-\begin_layout Subsubsection
-PyUFuncReduceObject
-\end_layout
-
-\begin_layout Standard
-A loose wrapper for the C-structure that contains the information needed
- for reduce-like methods of ufuncs.
- This is useful if you are trying to understand the reduce, accumulate,
- and reduce-at code.
- The
-\family typewriter
-PyUFuncReduceObject
-\family default
- is the associated C-structure.
- It is defined in the
-\family typewriter
-ufuncobject.h
-\family default
- header.
-\end_layout
-
-\begin_layout Subsubsection
-PyUFunc_Loop1d
-\end_layout
-
-\begin_layout Standard
-A simple linked-list of C-structures containing the information needed to
- define a 1-d loop for a ufunc for every defined signature of a user-defined
- data-type.
-
-\end_layout
-
-\begin_layout Subsubsection
-PyArrayMapIter_Type
-\end_layout
-
-\begin_layout Standard
-Advanced indexing is handled with this Python type.
- It is simply a loose wrapper around the C-structure containing the variables
- needed for advanced array indexing.
- The associated C-structure,
-\family typewriter
-PyArrayMapIterObject
-\family default
-, is useful if you are trying to understand the advanced-index mapping code.
- It is defined in the
-\family typewriter
-arrayobject.h
-\family default
- header.
- This type is not exposed to Python and could be replaced with a C-structure.
- As a Python type it takes advantage of reference-counted memory management.
-\end_layout
-
-\begin_layout Chapter
-Complete API
-\end_layout
-
-\begin_layout Quotation
-The test of a first-rate intelligence is the ability to hold two opposed
- ideas in the mind at the same time, and still retain the ability to function.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-F.
- Scott Fitzgerald
-\end_layout
-
-\begin_layout Quotation
-For a successful technology, reality must take precedence over public relations,
- for Nature cannot be fooled.
-
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Richard P.
- Feynman
-\end_layout
-
-\begin_layout Section
-Configuration defines
-\end_layout
-
-\begin_layout Standard
-When NumPy is built, a configuration file is constructed and placed as config.h
- in the NumPy include directory.
- This configuration file ensures that specific macros are defined and defines
- other macros based on whether or not your system has certain features.
- It is included by the arrayobject.h file.
-
-\end_layout
-
-\begin_layout Subsection
-Guaranteed to be defined
-\end_layout
-
-\begin_layout Standard
-The
-\series bold
-SIZEOF_
-\series default
-<CTYPE> constants are defined so that sizeof information is available to
- the pre-processor.
-
-\end_layout
-
-\begin_layout Description
-CHAR_BIT The number of bits of a char.
- The char is the unit of all sizeof definitions
-\end_layout
-
-\begin_layout Description
-SIZEOF_SHORT sizeof(short)
-\end_layout
-
-\begin_layout Description
-SIZEOF_INT sizeof(int)
-\end_layout
-
-\begin_layout Description
-SIZEOF_LONG sizeof(long)
-\end_layout
-
-\begin_layout Description
-SIZEOF_LONG_LONG sizeof(longlong) where longlong is defined appropriately
- on the platform (A macro defines
-\series bold
-SIZEOF_LONGLONG
-\series default
- as well.)
-\end_layout
-
-\begin_layout Description
-SIZEOF_PY_LONG_LONG
-\end_layout
-
-\begin_layout Description
-SIZEOF_FLOAT sizeof(float)
-\end_layout
-
-\begin_layout Description
-SIZEOF_DOUBLE sizeof(double)
-\end_layout
-
-\begin_layout Description
-SIZEOF_LONG_DOUBLE sizeof(longdouble) (A macro defines
-\series bold
-SIZEOF_LONGDOUBLE
-\series default
- as well.)
-\end_layout
-
-\begin_layout Description
-SIZEOF_PY_INTPTR_T Size of a pointer on this platform (sizeof(void *)) (A
- macro defines SIZEOF_INTP as well.)
-\end_layout
-
-\begin_layout Subsection
-Possible defines
-\end_layout
-
-\begin_layout Standard
-These defines will cause the compilation to ignore compatibility code that
- is placed in NumPy and use the system code instead.
- If they are not defined, then the system does not have that capability.
-\end_layout
-
-\begin_layout Description
-HAVE_LONGDOUBLE_FUNCS System has C99 long double math functions.
-\end_layout
-
-\begin_layout Description
-HAVE_FLOAT_FUNCS System has C99 float math functions.
-\end_layout
-
-\begin_layout Description
-HAVE_INVERSE_HYPERBOLIC System has inverse hyperbolic functions: asinh,
- acosh, and atanh.
-\end_layout
-
-\begin_layout Description
-HAVE_INVERSE_HYPERBOLIC_FLOAT System has C99 float extensions to inverse
- hyperbolic functions: asinhf, acoshf, atanhf
-\end_layout
-
-\begin_layout Description
-HAVE_INVERSE_HYPERBOLIC_LONGDOUBLE System has C99 long double extensions
- to inverse hyperbolic functions: asinhl, acoshl, atanhl.
-\end_layout
-
-\begin_layout Description
-HAVE_ISNAN System has an isnan function.
-\end_layout
-
-\begin_layout Description
-HAVE_ISINF System has an isinf function.
-
-\end_layout
-
-\begin_layout Description
-HAVE_LOG1P System has the log1p function:
-\begin_inset Formula $\log\left(x+1\right)$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-HAVE_EXPM1 System has the expm1 function:
-\begin_inset Formula $\exp\left(x\right)-1$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-HAVE_RINT System has the rint function.
-
-\end_layout
-
-\begin_layout Section
-Array Data Types
-\end_layout
-
-\begin_layout Standard
-The standard array can have 21 different data types (and has some support
- for adding your own types).
- These data types all have an enumerated type, an enumerated type-character,
- and a corresponding array scalar Python type object (placed in a hierarchy).
- There are also standard C typedefs to make it easier to manipulate elements
- of the given data type.
- For the numeric types, there are also bit-width equivalent C typedefs and
- named typenumbers that make it easier to select the precision desired.
-
-\end_layout
-
-\begin_layout Warning
-The names for the types in c code follows c naming conventions more closely.
- The Python names for these types follow Python conventions.
- Thus, NPY_FLOAT picks up a 32-bit float in C, but
-\begin_inset Quotes eld
-\end_inset
-
-float_
-\begin_inset Quotes erd
-\end_inset
-
- in python corresponds to a 64-bit double.
- The bit-width names can be used in both Python and C for clarity.
-\end_layout
-
-\begin_layout Subsection
-Enumerated Types
-\end_layout
-
-\begin_layout Standard
-There is a list of enumerated types defined providing the basic 21 data
- types plus some useful generic names.
- Whenever the code requires a type number, one of these enumerated types
- is requested.
- The types are all called
-\series bold
-NPY_
-\series default
-<NAME> where <NAME> can be
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-BOOL
-\series default
-,
-\series bold
-BYTE
-\series default
-,
-\series bold
-UBYTE
-\series default
-,
-\series bold
-SHORT
-\series default
-,
-\series bold
-USHORT
-\series default
-,
-\series bold
-INT
-\series default
-,
-\series bold
-UINT
-\series default
-,
-\series bold
-LONG
-\series default
-,
-\series bold
-ULONG
-\series default
-,
-\series bold
-LONGLONG
-\series default
-,
-\series bold
-ULONGLONG
-\series default
-,
-\series bold
-FLOAT
-\series default
-,
-\series bold
-DOUBLE
-\series default
-,
-\series bold
-LONGDOUBLE
-\series default
-,
-\series bold
-CFLOAT
-\series default
-,
-\series bold
-CDOUBLE
-\series default
-,
-\series bold
-CLONGDOUBLE
-\series default
-,
-\series bold
-OBJECT
-\series default
-,
-\series bold
-STRING
-\series default
-,
-\series bold
-UNICODE
-\series default
-,
-\series bold
-VOID
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-NTYPES
-\series default
-,
-\series bold
-NOTYPE
-\series default
-,
-\series bold
-USERDEF
-\series default
-,
-\series bold
-DEFAULT_TYPE
-\end_layout
-
-\begin_layout Standard
-The various character codes indicating certain types are also part of an
- enumerated list.
- References to type characters (should they be needed at all) should always
- use these enumerations.
- The form of them is
-\series bold
-NPY_
-\series default
-<NAME>
-\series bold
-LTR
-\series default
- where <NAME> can be
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-BOOL
-\series default
-,
-\series bold
-BYTE
-\series default
-,
-\series bold
-UBYTE
-\series default
-,
-\series bold
-SHORT
-\series default
-,
-\series bold
-USHORT
-\series default
-,
-\series bold
-INT
-\series default
-,
-\series bold
-UINT
-\series default
-,
-\series bold
-LONG
-\series default
-,
-\series bold
-ULONG
-\series default
-,
-\series bold
-LONGLONG
-\series default
-,
-\series bold
-ULONGLONG
-\series default
-,
-\series bold
-FLOAT
-\series default
-,
-\series bold
-DOUBLE
-\series default
-,
-\series bold
-LONGDOUBLE
-\series default
-,
-\series bold
-CFLOAT
-\series default
-,
-\series bold
-CDOUBLE
-\series default
-,
-\series bold
-CLONGDOUBLE
-\series default
-,
-\series bold
-OBJECT
-\series default
-,
-\series bold
-STRING
-\series default
-,
-\series bold
-VOID
-\series default
-
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-INTP
-\series default
-,
-\series bold
-UINTP
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-GENBOOL
-\series default
-,
-\series bold
-SIGNED
-\series default
-,
-\series bold
-UNSIGNED
-\series default
-,
-\series bold
-FLOATING
-\series default
-,
-\series bold
-COMPLEX
-\end_layout
-
-\begin_layout Standard
-The latter group of <NAME>s corresponds to letters used in the array interface
- typestring specification.
-
-\end_layout
-
-\begin_layout Subsection
-Defines
-\end_layout
-
-\begin_layout Subsubsection
-Max and min values for integers
-\end_layout
-
-\begin_layout Description
-NPY_MAX_INT
-\series medium
-<bits>
-\end_layout
-
-\begin_layout Description
-NPY_MAX_UINT
-\series medium
-<bits>
-\end_layout
-
-\begin_layout Description
-NPY_MIN_INT
-\series medium
-<bits>
-\series default
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These are defined for <bits> = 8, 16, 32, 64, 128, and 256 and provide
- the maximum (minimum) value of the corresponding (unsigned) integer type.
- Note: the actual integer type may not be available on all platforms (i.e.
- 128-bit and 256-bit integers are rare).
-
-\end_layout
-
-\begin_layout Description
-NPY_MIN_
-\series medium
-<type>
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is defined for <type> =
-\series bold
-BYTE
-\series default
-,
-\series bold
-SHORT
-\series default
-,
-\series bold
-INT
-\series default
-,
-\series bold
-LONG
-\series default
-,
-\series bold
-LONGLONG
-\series default
-,
-\series bold
-INTP
-\end_layout
-
-\begin_layout Description
-NPY_MAX_
-\series medium
-<type>
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is defined for all defined for <type> =
-\series bold
-BYTE
-\series default
-,
-\series bold
-UBYTE
-\series default
-,
-\series bold
-SHORT
-\series default
-,
-\series bold
-USHORT
-\series default
-,
-\series bold
-INT
-\series default
-,
-\series bold
-UINT
-\series default
-,
-\series bold
-LONG
-\series default
-,
-\series bold
-ULONG
-\series default
-,
-\series bold
-LONGLONG
-\series default
-,
-\series bold
-ULONGLONG
-\series default
-,
-\series bold
-INTP
-\series default
-,
-\series bold
-UINTP
-\end_layout
-
-\begin_layout Subsubsection
-Number of bits in data types
-\end_layout
-
-\begin_layout Standard
-All
-\series bold
-NPY_SIZEOF_
-\series default
-<CTYPE> constants have corresponding
-\series bold
-NPY_BITSOF_
-\series default
-<CTYPE> constants defined.
- The
-\series bold
-NPY_BITSOF_
-\series default
-<CTYPE> constants provide the number of bits in the data type.
- Specifically, the available <CTYPE>s are
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-BOOL
-\series default
-,
-\series bold
-CHAR
-\series default
-,
-\series bold
-SHORT
-\series default
-,
-\series bold
-INT
-\series default
-,
-\series bold
-LONG
-\series default
-,
-\series bold
-LONGLONG
-\series default
-,
-\series bold
-FLOAT
-\series default
-,
-\series bold
-DOUBLE
-\series default
-,
-\series bold
-LONGDOUBLE
-\end_layout
-
-\begin_layout Subsubsection
-Bit-width references to enumerated typenums
-\end_layout
-
-\begin_layout Standard
-All of the numeric data types (integer, floating point, and complex) have
- constants that are defined to be a specific enumerated type number.
- Exactly which enumerated type a bit-width type refers to is platform dependent.
- In particular, the constants available are
-\series bold
-PyArray_
-\series default
-<NAME><BITS> where <NAME> is
-\series bold
-INT
-\series default
-,
-\series bold
-UINT
-\series default
-,
-\series bold
-FLOAT
-\series default
-,
-\series bold
-COMPLEX
-\series default
- and <BITS> can be 8, 16, 32, 64, 80, 96, 128, 160, 192, 256, and 512.
- Obviously not all bit-widths are available on all platforms for all the
- kinds of numeric types.
- Commonly 8-, 16-, 32-, 64-bit integers; 32-, 64-bit floats; and 64-, 128-bit
- complex types are available.
-
-\end_layout
-
-\begin_layout Subsubsection
-Integer that can hold a pointer
-\end_layout
-
-\begin_layout Standard
-The constants
-\series bold
-NPY_INTP
-\series default
- and
-\series bold
-NPY_UINTP
-\series default
- refer to an enumerated integer type that is large enough to hold a pointer
- on the platform.
- Index arrays should always be converted to
-\series bold
-NPY_INTP
-\series default
-, because the dimension of the array is of type npy_intp.
-
-\end_layout
-
-\begin_layout Subsection
-C-type names
-\end_layout
-
-\begin_layout Standard
-There are standard variable types for each of the numeric data types and
- the bool data type.
- Some of these are already available in the C-specification.
- You can create variables in extension code with these types.
-
-\end_layout
-
-\begin_layout Subsubsection
-Boolean
-\end_layout
-
-\begin_layout Description
-npy_bool unsigned char; The constants NPY_FALSE and NPY_TRUE are also defined.
-
-\end_layout
-
-\begin_layout Subsubsection
-(Un)Signed Integer
-\end_layout
-
-\begin_layout Standard
-Unsigned versions of the integers can be defined by pre-pending a 'u' to
- the front of the integer name.
-
-\end_layout
-
-\begin_layout Description
-npy_(u)byte (unsigned) char
-\end_layout
-
-\begin_layout Description
-npy_(u)short (unsigned) short
-\end_layout
-
-\begin_layout Description
-npy_(u)int (unsigned) int
-\end_layout
-
-\begin_layout Description
-npy_(u)long (unsigned) long int
-\end_layout
-
-\begin_layout Description
-npy_(u)longlong (unsigned long long int)
-\end_layout
-
-\begin_layout Description
-npy_(u)intp (unsigned) Py_intptr_t (an integer that is the size of a pointer
- on the platform).
-
-\end_layout
-
-\begin_layout Subsubsection
-(Complex) Floating point
-\end_layout
-
-\begin_layout Description
-npy_(c)float float
-\end_layout
-
-\begin_layout Description
-npy_(c)double double
-\end_layout
-
-\begin_layout Description
-npy_(c)longdouble long double
-\end_layout
-
-\begin_layout Standard
-complex types are structures with
-\series bold
-.real
-\series default
- and
-\series bold
-.imag
-\series default
- members (in that order).
-\end_layout
-
-\begin_layout Subsubsection
-Bit-width names
-\end_layout
-
-\begin_layout Standard
-There are also typedefs for signed integers, unsigned integers, floating
- point, and complex floating point types of specific bit-widths.
- The available type names are
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-npy_int
-\series default
-<bits>,
-\series bold
-npy_uint
-\series default
-<bits>,
-\series bold
-npy_float
-\series default
-<bits>, and
-\series bold
-npy_complex
-\series default
-<bits>
-\end_layout
-
-\begin_layout Standard
-where <bits> is the number of bits in the type and can be
-\series bold
-8
-\series default
-,
-\series bold
-16
-\series default
-,
-\series bold
-32
-\series default
-,
-\series bold
-64
-\series default
-, 128, and 256 for integer types; 16,
-\series bold
-32
-\series default
-,
-\series bold
-64
-\series default
-, 80, 96, 128, and 256 for floating-point types; and 32,
-\series bold
-64
-\series default
-,
-\series bold
-128
-\series default
-, 160, 192, and 512 for complex-valued types.
- Which bit-widths are available is platform dependent.
- The bolded bit-widths are usually available on all platforms.
-
-\end_layout
-
-\begin_layout Subsection
-Printf Formatting
-\end_layout
-
-\begin_layout Standard
-For help in printing, the following strings are defined as the correct format
- specifier in printf and related commands.
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-NPY_LONGLONG_FMT
-\series default
-,
-\series bold
-NPY_ULONGLONG_FMT
-\series default
-,
-\series bold
-NPY_INTP_FMT
-\series default
-,
-\series bold
-NPY_UINTP_FMT
-\series default
-,
-\series bold
-NPY_LONGDOUBLE_FMT
-\end_layout
-
-\begin_layout Section
-Array API
-\begin_inset LatexCommand index
-name "ndarray!C-API|("
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "C-API!array|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Array structure and data access
-\end_layout
-
-\begin_layout Standard
-These macros all access the PyArrayObject structure members.
- The input argument, obj, can be any
-\family typewriter
-PyObject*
-\family default
- that is directly interpretable as a
-\family typewriter
-PyArrayObject*
-\family default
- (any instance of the
-\series bold
-PyArray_Type
-\series default
- and its sub-types).
-
-\end_layout
-
-\begin_layout Description
-PyArray_DATA (
-\family typewriter
-void*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-PyArray_BYTES (
-\family typewriter
-char*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These two macros are similar and obtain the pointer to the data-buffer
- for the array.
- The first macro can (and should be) assigned to a particular pointer where
- the second is for generic processing.
- If you have not guaranteed a contiguous and/or aligned array then be sure
- you understand how to access the data in the array to avoid memory and/or
- alignment problems.
-
-\end_layout
-
-\begin_layout Description
-PyArray_DIMS (
-\family typewriter
-npy_intp*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-PyArray_STRIDES (
-\family typewriter
-npy_intp*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-PyArray_DIM (
-\family typewriter
-npy_intp
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr,
-\family typewriter
-int
-\family default
- n)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the shape in the
-\emph on
-n
-\emph default
-
-\begin_inset Formula $^{\textrm{th}}$
-\end_inset
-
- dimension.
-\end_layout
-
-\begin_layout Description
-PyArray_STRIDE (
-\family typewriter
-npy_intp
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr,
-\family typewriter
-int
-\family default
- n)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the stride in the
-\emph on
-n
-\emph default
-
-\begin_inset Formula $^{\textrm{th}}$
-\end_inset
-
- dimension.
-\end_layout
-
-\begin_layout Description
-PyArray_BASE (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-PyArray_DESCR (
-\family typewriter
-PyArray_Descr*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-PyArray_FLAGS (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-PyArray_ITEMSIZE (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the itemsize for the elements of this array.
-\end_layout
-
-\begin_layout Description
-PyArray_TYPE (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (builtin) typenumber for the elements of this array.
-
-\end_layout
-
-\begin_layout Description
-PyArray_GETITEM (
-\family typewriter
-PyObject
-\family default
- *) (
-\family typewriter
-PyObject*
-\family default
- arr,
-\family typewriter
-void*
-\family default
- itemptr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Get a Python object from the ndarray,
-\emph on
-arr
-\emph default
-, at the location pointed to by itemptr.
- Return
-\family typewriter
-NULL
-\family default
- on failure.
-
-\end_layout
-
-\begin_layout Description
-PyArray_SETITEM (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr,
-\family typewriter
-void*
-\family default
- itemptr,
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert obj and place it in the ndarray,
-\emph on
-arr
-\emph default
-, at the place pointed to by itemptr.
- Return -1 if an error occurs or 0 on success.
-
-\end_layout
-
-\begin_layout Description
-PyArray_SIZE (
-\family typewriter
-npy_intp
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the total size (in number of elements) of the array.
-\end_layout
-
-\begin_layout Description
-PyArray_Size (
-\family typewriter
-npy_intp
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns 0 if
-\emph on
-obj
-\emph default
- is not a sub-class of bigndarray.
- Otherwise, returns the total number of elements in the array.
- Safer version of
-\family typewriter
-PyArray_SIZE
-\family default
-(
-\emph on
-obj
-\emph default
-).
-\end_layout
-
-\begin_layout Description
-PyArray_NBYTES (
-\family typewriter
-npy_intp
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the total number of bytes consumed by the array.
-
-\end_layout
-
-\begin_layout Subsubsection
-Data access
-\end_layout
-
-\begin_layout Standard
-These functions and macros provide easy access to elements of the ndarray
- from C.
- These work for all arrays.
- You may need to take care when accessing the data in the array, however,
- if it is not in machine byte-order, misaligned, or not writeable.
- In other words, be sure to respect the state of the flags unless you know
- what you are doing, or have previously guaranteed an array that is writeable,
- aligned, and in machine byte-order using PyArray_FromAny.
- If you wish to handle all types of arrays, the copyswap function for each
- type is useful for handling misbehaved arrays.
- Some platforms (e.g.
- Solaris) do not like misaligned data and will crash if you de-reference
- a misaligned pointer.
- Other platforms (e.g.
- x86 Linux) will just work more slowly with misaligned data.
-
-\end_layout
-
-\begin_layout Description
-PyArray_GetPtr (
-\family typewriter
-void*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- aobj,
-\family typewriter
-npy_intp*
-\family default
- ind)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a pointer to the data of the ndarray,
-\emph on
-aobj
-\emph default
-, at the N-dimensional index given by the c-array,
-\emph on
-ind
-\emph default
-, (which must be at least
-\emph on
-aobj
-\emph default
-->nd in size).
- You may want to typecast the returned pointer to the data type of the ndarray.
-\end_layout
-
-\begin_layout Description
-PyArray_GETPTR1 (
-\family typewriter
-void*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-<npy_intp>
-\family default
- i)
-\end_layout
-
-\begin_layout Description
-PyArray_GETPTR2 (
-\family typewriter
-void*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-<npy_intp>
-\family default
- i,
-\family typewriter
-<npy_intp>
-\family default
- j)
-\end_layout
-
-\begin_layout Description
-PyArray_GETPTR3 (
-\family typewriter
-void*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-<npy_intp>
-\family default
- i,
-\family typewriter
-<npy_intp>
-\family default
- j,
-\family typewriter
-<npy_intp>
-\family default
- k)
-\end_layout
-
-\begin_layout Description
-PyArray_GETPTR4 (
-\family typewriter
-void*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-<npy_intp>
-\family default
- i,
-\family typewriter
-<npy_intp>
-\family default
- j,
-\family typewriter
-<npy_intp>
-\family default
- k,
-\family typewriter
-<npy_intp>
-\family default
- l)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Quick, inline access to the element at the given coordinates in the ndarray,
-
-\emph on
-obj
-\emph default
-, which must have respectively 1, 2, 3, or 4 dimensions (this is not checked).
- The corresponding
-\emph on
-i
-\emph default
-,
-\emph on
-j
-\emph default
-,
-\emph on
-k
-\emph default
-, and
-\emph on
-l
-\emph default
- coordinates can be any integer but will be interpreted as
-\family typewriter
-npy_intp
-\family default
-.
- You may want to typecast the returned pointer to the data type of the ndarray.
-
-\end_layout
-
-\begin_layout Subsection
-Creating arrays
-\end_layout
-
-\begin_layout Subsubsection
-From scratch
-\end_layout
-
-\begin_layout Description
-PyArray_NewFromDescr (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyTypeObject*
-\family default
- subtype,
-\family typewriter
-PyArray_Descr*
-\family default
- descr,
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-npy_intp*
-\family default
- strides,
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-int
-\family default
- flags,
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is the main array creation function.
- Most new arrays are created with this flexible function.
- The returned object is an object of Python-type
-\emph on
-subtype
-\emph default
-, which must be a subtype of
-\family typewriter
-PyArray_Type
-\family default
-.
- The array has
-\emph on
-nd
-\emph default
- dimensions, described by
-\emph on
-dims
-\emph default
-.
- The data-type descriptor of the new array is
-\emph on
-descr
-\emph default
-.
- If
-\emph on
-subtype
-\emph default
- is not
-\family typewriter
-&PyArray_Type
-\family default
- (
-\emph on
-e.g.
-
-\emph default
- a Python subclass of the ndarray), then
-\emph on
-obj
-\emph default
- is the object to pass to the
-\series bold
-__array_finalize__
-\series default
- method of the subclass.
- If
-\emph on
-data
-\emph default
- is
-\family typewriter
-NULL
-\family default
-, then new memory will be allocated and
-\emph on
-flags
-\emph default
- can be non-zero to indicate a Fortran-style contiguous array.
- If
-\emph on
-data
-\emph default
- is not
-\family typewriter
-NULL
-\family default
-, then it is assumed to point to the memory to be used for the array and
- the
-\emph on
-flags
-\emph default
- argument is used as the new flags for the array (except the state of
-\family typewriter
-NPY_OWNDATA
-\family default
- and
-\family typewriter
-UPDATEIFCOPY
-\family default
- flags of the new array will be reset).
- In addition, if
-\emph on
-data
-\emph default
- is non-NULL, then
-\emph on
-strides
-\emph default
- can also be provided.
- If
-\emph on
-strides
-\emph default
- is
-\family typewriter
-NULL
-\family default
-, then the array strides are computed as C-style contiguous (default) or
- Fortran-style contiguous (
-\emph on
-flags
-\emph default
- is nonzero for
-\emph on
-data
-\emph default
-=
-\family typewriter
-NULL
-\family default
- or
-\emph on
-flags
-\emph default
- &
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- is nonzero non-NULL
-\emph on
-data
-\emph default
-).
- Any provided
-\emph on
-dims
-\emph default
- and
-\emph on
-strides
-\emph default
- are copied into newly allocated dimension and strides arrays for the new
- array object.
-\end_layout
-
-\begin_layout Description
-PyArray_New (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyTypeObject*
-\family default
- subtype,
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-int
-\family default
- type_num,
-\family typewriter
-npy_intp*
-\family default
- strides,
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-int
-\family default
- itemsize,
-\family typewriter
-int
-\family default
- flags,
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is similar to
-\family typewriter
-PyArray
-\family default
-\series bold
-_
-\family typewriter
-\series default
-DescrNew
-\family default
-(...) except you specify the data-type descriptor with
-\emph on
-type_num
-\emph default
- and
-\emph on
-itemsize
-\emph default
-, where
-\emph on
-type_num
-\emph default
- corresponds to a builtin (or user-defined) type.
- If the type always has the same number of bytes, then itemsize is ignored.
- Otherwise, itemsize specifies the particular size of this array.
-
-\end_layout
-
-\begin_layout Warning
-If data is passed to
-\family typewriter
-PyArray_NewFromDescr
-\family default
- or
-\family typewriter
-PyArray_New
-\family default
-, this memory must not be deallocated until the new array is deleted.
- If this data came from another Python object, this can be accomplished
- using
-\family typewriter
-Py_INCREF
-\family default
- on that object and setting the base member of the new array to point to
- that object.
- If strides are passed in they must be consistent with the dimensions, the
- itemsize, and the data of the array.
-\end_layout
-
-\begin_layout Description
-PyArray_SimpleNew (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-int
-\family default
- typenum)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new unitialized array of type,
-\emph on
-typenum
-\emph default
-, whose size in each of
-\emph on
-nd
-\emph default
- dimensions is given by the integer array,
-\emph on
-dims
-\emph default
-.
- This function cannot be used to create a flexible-type array (no itemsize
- given).
-\end_layout
-
-\begin_layout Description
-PyArray_SimpleNewFromData (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-void*
-\family default
- data)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create an array wrapper around
-\emph on
-data
-\emph default
- pointed to by the given pointer.
- The array flags will have a default that the data area is well-behaved
- and C-style contiguous.
- The shape of the array is given by the
-\emph on
-dims
-\emph default
- c-array of length
-\emph on
-nd
-\emph default
-.
- The data-type of the array is indicated by
-\emph on
-typenum
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_SimpleNewFromDescr (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-PyArray_Descr*
-\family default
- descr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new array with the provided data-type descriptor,
-\emph on
-descr
-\emph default
-, of the shape deteremined by
-\emph on
-nd
-\emph default
- and
-\emph on
-dims
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_FILLWBYTE (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-int
-\family default
- val)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Fill the array pointed to by
-\emph on
-obj
-\emph default
----which must be a (subclass of) bigndarray---with the contents of
-\emph on
-val
-\emph default
- (evaluated as a byte).
-\end_layout
-
-\begin_layout Description
-PyArray_Zeros (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-int
-\family default
- fortran)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a new
-\emph on
-nd
-\emph default
--dimensional array with shape given by
-\emph on
-dims
-\emph default
- and data type given by
-\emph on
-dtype
-\emph default
-.
- If
-\emph on
-fortran
-\emph default
- is non-zero, then a Fortran-order array is created, otherwise a C-order
- array is created.
- Fill the memory with zeros (or the 0 object if
-\emph on
-dtype
-\emph default
- corresponds to
-\family typewriter
-NPY_OBJECT
-\family default
-).
-
-\end_layout
-
-\begin_layout Description
-PyArray_ZEROS (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-int
-\family default
- type_num,
-\family typewriter
-int
-\family default
- fortran)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Macro form of
-\family typewriter
-PyArray_Zeros
-\family default
- which takes a type-number instead of a data-type object.
-\end_layout
-
-\begin_layout Description
-PyArray_Empty (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-int
-\family default
- fortran)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a new
-\emph on
-nd
-\emph default
--dimensional array with shape given by
-\emph on
-dims
-\emph default
- and data type given by
-\emph on
-dtype
-\emph default
-.
- If
-\emph on
-fortran
-\emph default
- is non-zero, then a Fortran-order array is created, otherwise a C-order
- array is created.
- The array is uninitialized unless the data type corresponds to
-\family typewriter
-NPY_OBJECT
-\family default
- in which case the array is filled with
-\family typewriter
-Py_None
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_EMPTY (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-int
-\family default
- fortran)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Macro form of
-\family typewriter
-PyArray_Empty
-\family default
- which takes a type-number,
-\emph on
-typenum
-\emph default
-, instead of a data-type object.
-\end_layout
-
-\begin_layout Description
-PyArray_Arange (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-double
-\family default
- start,
-\family typewriter
-double
-\family default
- stop,
-\family typewriter
-double
-\family default
- step,
-\family typewriter
-int
-\family default
- typenum)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a new 1-dimensional array of data-type,
-\emph on
-typenum
-\emph default
-, that ranges from
-\emph on
-start
-\emph default
- to
-\emph on
-stop
-\emph default
- (exclusive) in increments of
-\emph on
-step
-\emph default
-.
- Equivalent to
-\series bold
-arange
-\series default
-(
-\emph on
-start
-\emph default
-,
-\emph on
-stop
-\emph default
-,
-\emph on
-step
-\emph default
-, dtype).
-\end_layout
-
-\begin_layout Description
-PyArray_ArangeObj (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- start,
-\family typewriter
-PyObject*
-\family default
- stop,
-\family typewriter
-PyObject*
-\family default
- step,
-\family typewriter
-PyArray_Descr*
-\family default
- descr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a new 1-dimensional array of data-type determined by
-\family typewriter
-descr
-\family default
-, that ranges from
-\family typewriter
-start
-\family default
- to
-\family typewriter
-stop
-\family default
- (exclusive) in increments of
-\family typewriter
-step
-\family default
-.
- Equivalent to arange(
-\family typewriter
-start
-\family default
-,
-\family typewriter
-stop
-\family default
-,
-\family typewriter
-step
-\family default
-,
-\family typewriter
-typenum
-\family default
-).
-
-\end_layout
-
-\begin_layout Subsubsection
-From other objects
-\end_layout
-
-\begin_layout Description
-PyArray_FromAny (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-int
-\family default
- min_depth,
-\family typewriter
-int
-\family default
- max_depth,
-\family typewriter
-int
-\family default
- requirements,
-\family typewriter
-PyObject*
-\family default
- context)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is the main function used to obtain an array from any nested sequence,
- or object that exposes the array interface,
-\family typewriter
-op
-\family default
-.
- The parameters allow specification of the required
-\emph on
-type
-\emph default
-, the minimum (
-\emph on
-min_depth
-\emph default
-) and maximum (
-\emph on
-max_depth
-\emph default
-) number of dimensions acceptable, and other
-\emph on
-requirements
-\emph default
- for the array.
- The
-\emph on
-dtype
-\emph default
- argument needs to be a
-\family typewriter
-PyArray_Descr
-\family default
- structure indicating the desired data-type (including required byteorder).
- The
-\emph on
-dtype
-\emph default
- argument may be NULL, indicating that any data-type (and byteorder) is
- acceptable.
- If you want to use
-\family typewriter
-NULL
-\family default
- for the
-\emph on
-dtype
-\emph default
- and ensure the array is notswapped then use
-\family typewriter
-PyArray_CheckFromAny
-\family default
-.
- A value of 0 for either of the depth parameters causes the parameter to
- be ignored.
- Any of the following array flags can be added (
-\emph on
-e.g.
-
-\emph default
- using |) to get the
-\emph on
-requirements
-\emph default
- argument.
- If your code can handle general (
-\emph on
-e.g.
-
-\emph default
- strided, byte-swapped, or unaligned arrays) then
-\emph on
-requirements
-\emph default
- may be 0.
- Also, if
-\emph on
-op
-\emph default
- is not already an array (or does not expose the array interface), then
- a new array will be created (and filled from
-\emph on
-op
-\emph default
- using the sequence protocol).
- The new array will have
-\family typewriter
-NPY_DEFAULT
-\family default
- as its flags member.
- The
-\emph on
-context
-\emph default
- argument is passed to the
-\series bold
-__array__
-\series default
- method of
-\emph on
-op
-\emph default
- and is only used if the array is constructed that way.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-NPY_C_CONTIGUOUS Make sure the returned array is C-style contiguous
-\end_layout
-
-\begin_layout Description
-NPY_F_CONTIGUOUS Make sure the returned array is Fortran-style contiguous.
-
-\end_layout
-
-\begin_layout Description
-NPY_ALIGNED Make sure the returned array is aligned on proper boundaries
- for its data type.
- An aligned array has the data pointer and every strides factor as a multiple
- of the alignment factor for the data-type-descriptor.
-\end_layout
-
-\begin_layout Description
-NPY_WRITEABLE Make sure the returned array can be written to.
-
-\end_layout
-
-\begin_layout Description
-NPY_ENSURECOPY Make sure a copy is made of
-\emph on
-op
-\emph default
-.
- If this flag is not present, data is not copied if it can be avoided.
-
-\end_layout
-
-\begin_layout Description
-NPY_ENSUREARRAY Make sure the result is a base-class ndarray or bigndarray.
- By default, if
-\emph on
-op
-\emph default
- is an instance of a subclass of the bigndarray, an instance of that same
- subclass is returned.
- If this flag is set, an ndarray object will be returned instead.
-\end_layout
-
-\begin_layout Description
-NPY_FORCECAST Force a cast to the output type even if it cannot be done
- safely.
- Without this flag, a data cast will occur only if it can be done safely,
- otherwise an error is reaised.
-
-\end_layout
-
-\begin_layout Description
-NPY_UPDATEIFCOPY If
-\emph on
-op
-\emph default
- is already an array, but does not satisfy the requirements, then a copy
- is made (which will satisfy the requirements).
- If this flag is present and a copy (of an object that is already an array)
- must be made, then the corresponding
-\family typewriter
-NPY_UPDATEIFCOPY
-\family default
- flag is set in the returned copy and
-\emph on
-op
-\emph default
- is made to be read-only.
- When the returned copy is deleted (presumably after your calculations are
- complete), its contents will be copied back into
-\emph on
-op
-\emph default
- and the
-\emph on
-op
-\emph default
- array will be made writeable again.
- If
-\emph on
-op
-\emph default
- is not writeable to begin with, then an error is raised.
- If
-\emph on
-op
-\emph default
- is not already an array, then this flag has no effect.
-\end_layout
-
-\begin_layout Description
-NPY_BEHAVED
-\family typewriter
-NPY_ALIGNED
-\family default
- |
-\family typewriter
-NPY_WRITEABLE
-\end_layout
-
-\begin_layout Description
-NPY_CARRAY
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_BEHAVED
-\end_layout
-
-\begin_layout Description
-NPY_CARRAY_RO
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Description
-NPY_FARRAY
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_BEHAVED
-\end_layout
-
-\begin_layout Description
-NPY_FARRAY_RO
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Description
-NPY_DEFAULT
-\family typewriter
-NPY_CARRAY
-\end_layout
-
-\begin_layout Description
-NPY_IN_ARRAY
-\family typewriter
-NPY_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Description
-NPY_IN_FARRAY
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Description
-NPY_INOUT_ARRAY
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_WRITEABLE
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Description
-NPY_INOUT_FARRAY
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_WRITEABLE
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Description
-NPY_OUT_ARRAY
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_WRITEABLE
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\family default
- |
-\family typewriter
-NPY_UPDATEIFCOPY
-\end_layout
-
-\begin_layout Description
-NPY_OUT_FARRAY
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_WRITEABLE
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\family default
- |
-\family typewriter
-UPDATEIFCOPY
-\end_layout
-
-\end_deeper
-\begin_layout Description
-PyArray_CheckFromAny (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-int
-\family default
- min_depth,
-\family typewriter
-int
-\family default
- max_depth,
-\family typewriter
-int
-\family default
- requirements,
-\family typewriter
-PyObject*
-\family default
- context)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Nearly identical to
-\family typewriter
-PyArray_FromAny
-\family default
-(...) except
-\emph on
-requirements
-\emph default
- can contain
-\family typewriter
-NPY_NOTSWAPPED
-\family default
- (over-riding the specification in
-\emph on
-dtype
-\emph default
-) and
-\family typewriter
-NPY_ELEMENTSTRIDES
-\family default
- which indicates that the array should be aligned in the sense that the
- strides are multiples of the element size.
-
-\end_layout
-
-\begin_layout Description
-NPY_NOTSWAPPED Make sure the returned array has a data-type descriptor that
- is in machine byte-order, over-riding any specification in the
-\emph on
-dtype
-\emph default
- argument.
- Normally, the byte-order requirement is determined by the
-\emph on
-dtype
-\emph default
- argument.
- If this flag is set and the dtype argument does not indicate a machine
- byte-order descriptor (or is NULL and the object is already an array with
- a data-type descriptor that is not in machine byte-order), then a new data-type
- descriptor is created and used with its byte-order field set to native.
-\end_layout
-
-\begin_layout Description
-NPY_BEHAVED_NS
-\family typewriter
-NPY_ALIGNED
-\family default
- |
-\family typewriter
-NPY_WRITEABLE
-\family default
- |
-\family typewriter
-NPY_NOTSWAPPED
-\end_layout
-
-\begin_layout Description
-NPY_ELEMENTSTRIDES Make sure the returned array has strides that are multiples
- of the element size.
-
-\end_layout
-
-\begin_layout Description
-PyArray_FromArray (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- op,
-\family typewriter
-PyArray_Descr*
-\family default
- newtype,
-\family typewriter
-int
-\family default
- requirements)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Special case of
-\family typewriter
-PyArray_FromAny
-\family default
- for when
-\emph on
-op
-\emph default
- is already an array but it needs to be of a specific
-\emph on
-newtype
-\emph default
- (including byte-order) or has certain
-\emph on
-requirements
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_FromStructInterface (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an ndarray object from a Python object that exposes the
-\series bold
-__array_struct__
-\series default
- method and follows the array interface protocol.
- If the object does not contain this method then a borrowed reference to
-
-\family typewriter
-Py_NotImplemented
-\family default
- is returned.
-\end_layout
-
-\begin_layout Description
-PyArray_FromInterface (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an ndarray object from a Python object that exposes the
-\series bold
-__array_shape__
-\series default
- and
-\series bold
-__array_typestr__
-\series default
- methods following the array interface protocol.
- If the object does not contain one of these method then a borrowed reference
- to
-\family typewriter
-Py_NotImplemented
-\family default
- is returned.
-\end_layout
-
-\begin_layout Description
-PyArray_FromArrayAttr (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-PyObject*
-\family default
- context)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an ndarray object from a Python object that exposes the
-\series bold
-__array__
-\series default
- method.
- The
-\series bold
-__array__
-\series default
- method can take 0, 1, or 2 arguments ([dtype, context]) where
-\emph on
-context
-\emph default
- is used to pass information about where the
-\series bold
-__array__
-\series default
- method is being called from (currently only used in ufuncs).
-
-\end_layout
-
-\begin_layout Description
-PyArray_ContiguousFromAny (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-int
-\family default
- min_depth,
-\family typewriter
-int
-\family default
- max_depth)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function returns a (C-style) contiguous and behaved function array
- from any nested sequence or array interface exporting object,
-\emph on
-op
-\emph default
-, of (non-flexible) type given by the enumerated
-\emph on
-typenum
-\emph default
-, of minimum depth
-\emph on
-min_depth
-\emph default
-, and of maximum depth
-\emph on
-max_depth
-\emph default
-.
- Equivalent to a call to
-\family typewriter
-PyArray_FromAny
-\family default
- with requirements set to
-\family typewriter
-NPY_DEFAULT
-\family default
- and the type_num member of the type argument set to
-\emph on
-typenum
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_FromObject (PyObject *) (PyObject * op, int typenum, int min_depth,
- int max_depth)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an aligned and in native-byteorder array from any nested sequence
- or array-interface exporting object, op, of a type given by the enumerated
- typenum.
- The minimum number of dimensions the array can have is given by min_depth
- while the maximum is max_depth.
- This is equivalent to a call to PyArray_FromAny with requirements set to
- BEHAVED.
-
-\end_layout
-
-\begin_layout Description
-PyArray_EnsureArray (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function
-\series bold
-steals a reference
-\series default
- to
-\family typewriter
-op
-\family default
- and makes sure that
-\family typewriter
-op
-\family default
- is a base-class ndarray.
- It special cases array scalars, but otherwise calls
-\series bold
-PyArray_FromAny
-\series default
-(
-\family typewriter
-op
-\family default
-, NULL, 0, 0, NPY_ENSUREARRAY).
-\end_layout
-
-\begin_layout Description
-PyArray_FromString (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-char*
-\family default
- string,
-\family typewriter
-npy_intp
-\family default
- slen,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-npy_intp
-\family default
- num,
-\family typewriter
-char*
-\family default
- sep)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a one-dimensional ndarray of a single type from a binary or (ASCII)
- text
-\family typewriter
-string
-\family default
- of length
-\family typewriter
-slen
-\family default
-.
- The data-type of the array to-be-created is given by
-\family typewriter
-dtype
-\family default
-.
- If num is -1, then
-\series bold
-copy
-\series default
- the entire string and return an appropriately sized array, otherwise,
-\family typewriter
-num
-\family default
- is the number of items to
-\series bold
-copy
-\series default
- from the string.
- If
-\family typewriter
-sep
-\family default
- is NULL (or
-\begin_inset Quotes eld
-\end_inset
-
-
-\begin_inset Quotes erd
-\end_inset
-
-), then interpret the string as bytes of binary data, otherwise convert
- the sub-strings separated by
-\family typewriter
-sep
-\family default
- to items of data-type
-\family typewriter
-dtype
-\family default
-.
- Some data-types may not be readable in text mode and an error will be raised
- if that occurs.
- All errors return NULL.
-
-\end_layout
-
-\begin_layout Description
-PyArray_FromFile (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-FILE*
-\family default
- fp,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-npy_intp
-\family default
- num,
-\family typewriter
-char*
-\family default
- sep)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a one-dimensional ndarray of a single type from a binary or text
- file.
- The open file pointer is
-\family typewriter
-fp
-\family default
-, the data-type of the array to be created is given by
-\family typewriter
-dtype
-\family default
-.
- This must match the data in the file.
- If
-\family typewriter
-num
-\family default
- is -1, then read until the end of the file and return an appropriately
- sized array, otherwise,
-\family typewriter
-num
-\family default
- is the number of items to read.
- If
-\family typewriter
-sep
-\family default
- is NULL (or
-\begin_inset Quotes eld
-\end_inset
-
-
-\begin_inset Quotes erd
-\end_inset
-
-), then read from the file in binary mode, otherwise read from the file
- in text mode with
-\family typewriter
-sep
-\family default
- providing the item separator.
- Some array types cannot be read in text mode in which case an error is
- raised.
-\end_layout
-
-\begin_layout Description
-PyArray_FromBuffer (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- buf,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-npy_intp
-\family default
- count,
-\family typewriter
-npy_intp
-\family default
- offset)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a one-dimensional ndarray of a single type from an object,
-\family typewriter
-buf
-\family default
-, that exports the (single-segment) buffer protocol (or has an attribute
- __buffer__ that returns an object that exports the buffer protocol).
- A writeable buffer will be tried first followed by a read-only buffer.
- The NPY_WRITEABLE flag of the returned array will reflect which one was
- successful.
- The data is assumed to start at
-\family typewriter
-offset
-\family default
- bytes from the start of the memory location for the object.
- The type of the data in the buffer will be interpreted depending on the
- data-type descriptor,
-\family typewriter
-dtype.
-
-\family default
- If
-\family typewriter
-count
-\family default
- is negative then it will be determined from the size of the buffer and
- the requested itemsize, otherwise,
-\family typewriter
-count
-\family default
- represents how many elements should be converted from the buffer.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CopyInto (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- dest,
-\family typewriter
-PyArrayObject*
-\family default
- src)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Copy from the source array,
-\family typewriter
-src
-\family default
-, into the destination array,
-\family typewriter
-dest
-\family default
-, performing a data-type conversion if necessary.
- If an error occurs return -1 (otherwise 0).
- The shape of
-\family typewriter
-src
-\family default
- must be broadcastable to the shape of
-\family typewriter
-dest
-\family default
-.
- The data areas of dest and src must not overlap.
-
-\end_layout
-
-\begin_layout Description
-PyArray_MoveInto (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- dest,
-\family typewriter
-PyArrayObject*
-\family default
- src)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Move data from the source array,
-\family typewriter
-src
-\family default
-, into the destination array,
-\family typewriter
-dest
-\family default
-, performing a data-type conversion if necessary.
- If an error occurs return -1 (otherwise 0).
- The shape of
-\family typewriter
-src
-\family default
- must be broadcastable to the shape of
-\family typewriter
-dest
-\family default
-.
- The data areas of dest and src may overlap.
-
-\end_layout
-
-\begin_layout Description
-PyArray_GETCONTIGUOUS (
-\family typewriter
-PyArrayObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If
-\family typewriter
-op
-\family default
- is already (C-style) contiguous and well-behaved then just return a reference,
- otherwise return a (contiguous and well-behaved) copy of the array.
- The parameter op must be a (sub-class of an) ndarray and no checking for
- that is done.
-\end_layout
-
-\begin_layout Description
-PyArray_FROM_O (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert
-\family typewriter
-obj
-\family default
- to an ndarray.
- The argument can be any nested sequence or object that exports the array
- interface.
- This is a macro form of
-\family typewriter
-PyArray_FromAny
-\family default
- using
-\family typewriter
-NULL
-\family default
-, 0, 0, 0 for the other arguments.
- Your code must be able to handle any data-type descriptor and any combination
- of data-flags to use this macro.
-
-\end_layout
-
-\begin_layout Description
-PyArray_FROM_OF (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-int
-\family default
- requirements)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Similar to
-\family typewriter
-PyArray_FROM_O
-\family default
- except it can take an argument of
-\emph on
-requirements
-\emph default
- indicating properties the resulting array must have.
- Available requirements that can be enforced are
-\family typewriter
-NPY_CONTIGUOUS
-\family default
-,
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
-,
-\family typewriter
-NPY_ALIGNED
-\family default
-,
-\family typewriter
-NPY_WRITEABLE
-\family default
-,
-\family typewriter
-NPY_NOTSWAPPED
-\family default
-,
-\family typewriter
-NPY_ENSURECOPY
-\family default
-,
-\family typewriter
-NPY_UPDATEIFCOPY
-\family default
-,
-\family typewriter
-NPY_FORCECAST
-\family default
-, and
-\family typewriter
-NPY_ENSUREARRAY
-\family default
-.
- Standard combinations of flags can also be used:
-\end_layout
-
-\begin_layout Description
-PyArray_FROM_OT (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-int
-\family default
- typenum)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Similar to
-\family typewriter
-PyArray_FROM_O
-\family default
- except it can take an argument of
-\emph on
-typenum
-\emph default
- specifying the type-number the returned array.
-\end_layout
-
-\begin_layout Description
-PyArray_FROM_OTF (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-int
-\family default
- requirements)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Combination of
-\family typewriter
-PyArray_FROM_OF
-\family default
- and
-\family typewriter
-PyArray_FROM_OT
-\family default
- allowing both a
-\emph on
-typenum
-\emph default
- and a
-\emph on
-flags
-\emph default
- argument to be provided..
-\end_layout
-
-\begin_layout Description
-PyArray_FROMANY (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-int
-\family default
- min,
-\family typewriter
-int
-\family default
- max,
-\family typewriter
-int
-\family default
- requirements)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Similar to
-\family typewriter
-PyArray_FromAny
-\family default
- except the data-type is specified using a typenumber.
-
-\family typewriter
-PyArray_DescrFromType
-\family default
-(
-\emph on
-typenum
-\emph default
-) is passed directly to
-\family typewriter
-PyArray_FromAny
-\family default
-.
- This macro also adds
-\family typewriter
-NPY_DEFAULT
-\family default
- to requirements if
-\family typewriter
-NPY_ENSURECOPY
-\family default
- is passed in as requirements.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CheckAxis (
-\family typewriter
-PyObject*
-\family default
-)(
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-int*
-\family default
- axis,
-\family typewriter
-int
-\family default
- requirements)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Encapsulate the functionality of functions and methods that take the axis=
- keyword and work properly with None as the axis argument.
- The input array is
-\family typewriter
-obj
-\family default
-, while
-\family typewriter
-*axis
-\family default
- is a converted integer (so that >=MAXDIMS is the None value), and
-\family typewriter
-requirements
-\family default
- gives the needed properties of
-\family typewriter
-obj
-\family default
-.
- The output is a converted version of the input so that requirements are
- met and if needed a flattening has occurred.
- On output negative values of
-\family typewriter
-*axis
-\family default
- are converted and the new value is checked to ensure consistency with the
- shape of
-\family typewriter
-obj
-\family default
-.
-\end_layout
-
-\begin_layout Subsection
-Dealing with types
-\end_layout
-
-\begin_layout Subsubsection
-General check of Python Type
-\end_layout
-
-\begin_layout Description
-PyArray_Check (op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-op
-\emph default
- is a Python object whose type is a sub-type of
-\family typewriter
-PyArray_Type
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CheckExact (op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-op
-\emph default
- is a Python object with type
-\family typewriter
-PyArray_Type
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_HasArrayInterface (op, out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If
-\family typewriter
-op
-\family default
- implements any part of the array interface, then
-\family typewriter
-out
-\family default
- will contain a new reference to the newly created ndarray using the interface
- or
-\family typewriter
-out
-\family default
- will contain
-\family typewriter
-NULL
-\family default
- if an error during conversion occurs.
- Otherwise, out will contain a borrowed reference to
-\family typewriter
-Py_NotImplemented
-\family default
- and no error condition is set.
-
-\end_layout
-
-\begin_layout Description
-PyArray_HasArrayInterfaceType (op, type, context, out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If
-\family typewriter
-op
-\family default
- implements any part of the array interface, then
-\family typewriter
-out
-\family default
- will contain a new reference to the newly created ndarray using the interface
- or
-\family typewriter
-out
-\family default
- will contain
-\family typewriter
-NULL
-\family default
- if an error during conversion occurs.
- Otherwise, out will contain a borrowed reference to Py_NotImplemented and
- no error condition is set.
- This version allows setting of the type and context in the part of the
- array interface that looks for the
-\series bold
-__array__
-\series default
- attribute.
-
-\end_layout
-
-\begin_layout Description
-PyArray_IsZeroDim (op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-op
-\emph default
- is an instance of (a subclass of)
-\family typewriter
-PyArray_Type
-\family default
- and has 0 dimensions.
-\end_layout
-
-\begin_layout Description
-PyArray_IsScalar (op, cls)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-op
-\emph default
- is an instance of
-\family typewriter
-Py<cls>ArrType_Type
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_CheckScalar (op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-op
-\emph default
- is either an array scalar (an instance of a sub-type of
-\family typewriter
-PyGenericArr_Type
-\family default
-), or an instance of (a sub-class of)
-\family typewriter
-PyArray_Type
-\family default
- whose dimensionality is 0.
-\end_layout
-
-\begin_layout Description
-PyArray_IsPythonScalar (op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-op
-\emph default
- is a builtin Python
-\begin_inset Quotes eld
-\end_inset
-
-scalar
-\begin_inset Quotes erd
-\end_inset
-
- object (int, float, complex, str, unicode, long, bool).
-\end_layout
-
-\begin_layout Description
-PyArray_IsAnyScalar (op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-op
-\emph default
- is either a Python scalar or an array scalar (an instance of a sub-type
- of
-\family typewriter
-PyGenericArr_Type
-\family default
-).
-
-\end_layout
-
-\begin_layout Subsubsection
-Data-type checking
-\end_layout
-
-\begin_layout Standard
-For the typenum macros, the argument is an integer representing an enumerated
- array data type.
- For the array type checking macros the argument must be a
-\family typewriter
-PyObject*
-\family default
- that can be directly interpreted as a
-\family typewriter
-PyArrayObject*
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISUNSIGNED (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISUNSIGNED (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISUNSIGNED (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents an unsigned integer.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISSIGNED (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISSIGNED (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISSIGNED (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents a signed integer.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISINTEGER (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISINTEGER (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISINTEGER (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents any integer.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISFLOAT (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISFLOAT (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISFLOAT (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents any floating point number.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISCOMPLEX (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISCOMPLEX (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISCOMPLEX (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents any complex floating point number.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISNUMBER (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISNUMBER (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISNUMBER (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents any integer, floating point, or complex floating point
- number.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISSTRING (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISSTRING (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISSTRING (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents a string data type.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISPYTHON (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISPYTHON (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISPYTHON (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents an enumerated type corresponding to one of the standard
- Python scalar (bool, int, float, or complex).
-
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISFLEXIBLE (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISFLEXIBLE (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISFLEXIBLE (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents one of the flexible array types (
-\family typewriter
-NPY_STRING
-\family default
-,
-\family typewriter
-NPY_UNICODE
-\family default
-, or
-\family typewriter
-NPY_VOID
-\family default
-).
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISUSERDEF (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISUSERDEF (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISUSERDEF (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents a user-defined type.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISEXTENDED (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISEXTENDED (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISEXTENDED (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type is either flexible or user-defined.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISOBJECT (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISOBJECT (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISOBJECT (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents object data type.
-\end_layout
-
-\begin_layout Description
-PyTypeNum_ISBOOL (num)
-\end_layout
-
-\begin_layout Description
-PyDataType_ISBOOL (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_ISBOOL (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type represents Boolean data type.
-\end_layout
-
-\begin_layout Description
-PyDataType_HASFIELDS (descr)
-\end_layout
-
-\begin_layout Description
-PyArray_HASFIELDS (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type has fields associated with it.
-\end_layout
-
-\begin_layout Description
-PyArray_ISNOTSWAPPED (m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of the ndarray
-\emph on
-m
-\emph default
- is in machine byte-order according to the array's data-type descriptor.
-\end_layout
-
-\begin_layout Description
-PyArray_ISBYTESWAPPED (m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of the ndarray
-\emph on
-m
-\emph default
- is
-\series bold
-not
-\series default
- in machine byte-order according to the array's data-type descriptor.
-
-\end_layout
-
-\begin_layout Description
-PyArray_EquivTypes (
-\family typewriter
-Bool
-\family default
-) (
-\family typewriter
-PyArray_Descr*
-\family default
- type1,
-\family typewriter
-PyArray_Descr*
-\family default
- type2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return
-\family typewriter
-NPY_TRUE
-\family default
- if
-\emph on
-type1
-\emph default
- and
-\emph on
-type2
-\emph default
- actually represent equivalent types for this platform (the fortran member
- of each type is ignored).
- For example, on 32-bit platforms,
-\family typewriter
-NPY_LONG
-\family default
- and
-\family typewriter
-NPY_INT
-\family default
- are equivalent.
- Otherwise return
-\family typewriter
-NPY_FALSE
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_EquivArrTypes (
-\family typewriter
-Bool
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- a1,
-\family typewriter
-PyArrayObject
-\family default
-* a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return
-\family typewriter
-NPY_TRUE
-\family default
- if
-\emph on
-a1
-\emph default
- and
-\emph on
-a2
-\emph default
- are arrays with equivalent types for this platform.
-
-\end_layout
-
-\begin_layout Description
-PyArray_EquivTypenums (
-\family typewriter
-Bool
-\family default
-) (
-\family typewriter
-int
-\family default
- typenum1,
-\family typewriter
-int
-\family default
- typenum2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Special case of
-\family typewriter
-PyArray_EquivTypes
-\family default
-(...) that does not accept flexible data types but may be easier to call.
-
-\end_layout
-
-\begin_layout Description
-PyArray_EquivByteorders (int) (<byteorder> b1, <byteorder> b2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if byteorder characters (
-\family typewriter
-NPY_LITTLE
-\family default
-,
-\family typewriter
-NPY_BIG
-\family default
-,
-\family typewriter
-NPY_NATIVE
-\family default
-,
-\family typewriter
-NPY_IGNORE
-\family default
-) are either equal or equivalent as to their specification of a native byte
- order.
- Thus, on a little-endian machine
-\family typewriter
-NPY_LITTLE
-\family default
- and
-\family typewriter
-NPY_NATIVE
-\family default
- are equivalent where they are not equivalent on a big-endian machine.
-
-\end_layout
-
-\begin_layout Subsubsection
-Converting data types
-\end_layout
-
-\begin_layout Description
-PyArray_Cast (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr,
-\family typewriter
-int
-\family default
- typenum)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Mainly for backwards compatibility to the Numeric C-API and for simple
- casts to non-flexible types.
- Return a new array object with the elements of
-\emph on
-arr
-\emph default
- cast to the data-type
-\emph on
-typenum
-\emph default
- which must be one of the enumerated types and not a flexible type.
-\end_layout
-
-\begin_layout Description
-PyArray_CastToType (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr,
-\family typewriter
-PyArray_Descr*
-\family default
- type,
-\family typewriter
-int
-\family default
- fortran)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array of the
-\emph on
-type
-\emph default
- specified, casting the elements of
-\emph on
-arr
-\emph default
- as appropriate.
- The fortran argument specifies the ordering of the output array.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CastTo (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- out,
-\family typewriter
-PyArrayObject*
-\family default
- in)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Cast the elements of the array
-\emph on
-in
-\emph default
- into the array
-\emph on
-out
-\emph default
-.
- The output array should be writeable, have an integer-multiple of the number
- of elements in the input array (more than one copy can be placed in out),
- and have a data type that is one of the builtin types.
- Returns 0 on success and -1 if an error occurs.
-\end_layout
-
-\begin_layout Description
-PyArray_GetCastFunc (
-\family typewriter
-PyArray_VectorUnaryFunc*
-\family default
-) (
-\family typewriter
-PyArray_Descr*
-\family default
- from,
-\family typewriter
-int
-\family default
- totype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the low-level casting function to cast from the given descriptor
- to the builtin type number.
- If no casting function exists return
-\family typewriter
-NULL
-\family default
- and set an error.
- Using this function instead of direct access to
-\emph on
-from
-\emph default
-->f->cast will allow support of any user-defined casting functions added
- to a descriptors casting dictionary.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CanCastSafely (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-int
-\family default
- fromtype,
-\family typewriter
-int
-\family default
- totype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns non-zero if an array of data type
-\emph on
-fromtype
-\emph default
- can be cast to an array of data type
-\emph on
-totype
-\emph default
- without losing information.
- An exception is that 64-bit integers are allowed to be cast to 64-bit floating
- point values even though this can lose precision on large integers so as
- not to proliferate the use of long doubles without explict requests.
- Flexible array types are not checked according to their lengths with this
- function.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CanCastTo (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArray_Descr*
-\family default
- fromtype,
-\family typewriter
-PyArray_Descr*
-\family default
- totype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns non-zero if an array of data type
-\emph on
-fromtype
-\emph default
- (which can include flexible types) can be cast safely to an array of data
- type
-\emph on
-totype
-\emph default
- (which can include flexible types).
- This is basically a wrapper around
-\family typewriter
-PyArray_CanCastSafely
-\family default
- with additional support for size checking if
-\emph on
-fromtype
-\emph default
- and
-\emph on
-totype
-\emph default
- are
-\family typewriter
-NPY_STRING
-\family default
- or
-\family typewriter
-NPY_UNICODE
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_ObjectType (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-int
-\family default
- mintype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function is useful for determining a common type that two or more
- arrays can be converted to.
- It only works for non-flexible array types as no itemsize information is
- passed.
- The
-\emph on
-mintype
-\emph default
- argument represents the minimum type acceptable, and
-\emph on
-op
-\emph default
- represents the object that will be converted to an array.
- The return value is the enumerated typenumber that represents the data-type
- that
-\emph on
-op
-\emph default
- should have.
-\end_layout
-
-\begin_layout Description
-PyArray_ArrayType (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-PyArray_Descr*
-\family default
- mintype,
-\family typewriter
-PyArray_Descr*
-\family default
- outtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function works similarly to
-\family typewriter
-PyArray_ObjectType
-\family default
-(...) except it handles flexible arrays.
- The
-\emph on
-mintype
-\emph default
- argument can have an itemsize member and the
-\emph on
-outtype
-\emph default
- argument will have an itemsize member at least as big but perhaps bigger
- depending on the object
-\emph on
-op
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ConvertToCommonType (
-\family typewriter
-PyArrayObject**
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-int*
-\family default
- n)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert a sequence of Python objects contained in
-\emph on
-op
-\emph default
- to an array of ndarrays each having the same data type.
- The type is selected based on the typenumber (larger type number is chosen
- over a smaller one) ignoring objects that are only scalars.
- The length of the sequence is returned in
-\emph on
-n
-\emph default
-, and an
-\emph on
-n
-\emph default
--length array of
-\family typewriter
-PyArrayObject
-\family default
- pointers is the return value (or
-\family typewriter
-NULL
-\family default
- if an error occurs).
- The returned array must be freed by the caller of this routine (using
-\family typewriter
-PyDataMem_FREE
-\family default
-) and all the array objects in it
-\family typewriter
-DECREF
-\family default
-'d or a memory-leak will occur.
- The example template-code below shows a typically usage.
-\end_layout
-
-\begin_layout LyX-Code
-mps = PyArray_ConvertToCommonType(obj, &n);
-\end_layout
-
-\begin_layout LyX-Code
-if (mps==NULL) return NULL;
-\end_layout
-
-\begin_layout LyX-Code
-<code>
-\end_layout
-
-\begin_layout LyX-Code
-<before return>
-\end_layout
-
-\begin_layout LyX-Code
-for (i=0; i<n; i++) Py_DECREF(mps[i]);
-\end_layout
-
-\begin_layout LyX-Code
-PyDataMem_FREE(mps);
-\end_layout
-
-\begin_layout LyX-Code
-<return>
-\end_layout
-
-\begin_layout Description
-PyArray_Zero (
-\family typewriter
-char*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to newly created memory of size
-\emph on
-arr
-\emph default
-->itemsize that holds the representation of 0 for that type.
- The returned pointer,
-\emph on
-ret
-\emph default
-,
-\series bold
-must be freed
-\series default
- using
-\family typewriter
-\emph on
-PyDataMem_FREE
-\family default
-\emph default
-(ret) when it is not needed anymore.
-\end_layout
-
-\begin_layout Description
-PyArray_One (
-\family typewriter
-char*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to newly created memory of size
-\emph on
-arr
-\emph default
-->itemsize that holds the representation of 1 for that type.
- The returned pointer,
-\emph on
-ret
-\emph default
-,
-\series bold
-must be freed
-\series default
- using
-\family typewriter
-PyDataMem_FREE
-\family default
-(ret) when it is not needed anymore.
-\end_layout
-
-\begin_layout Description
-PyArray_ValidType (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-int
-\family default
- typenum)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns
-\family typewriter
-NPY_TRUE
-\family default
- if
-\family typewriter
-\emph on
-typenum
-\family default
-\emph default
- represents a valid type-number (builtin or user-defined or character code).
- Otherwise, this function returns
-\family typewriter
-NPY_FALSE
-\family default
-.
-\end_layout
-
-\begin_layout Subsubsection
-New data types
-\end_layout
-
-\begin_layout Description
-PyArray_InitArrFuncs (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyArray_ArrFuncs*
-\family default
- f)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Initialize all function pointers and members to
-\family typewriter
-NULL
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_RegisterDataType (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArray_Descr*
-\family default
- dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Register a data-type as a new user-defined data type for arrays.
- The type must have most of its entries filled in.
- This is not always checked and errors can produce segfaults.
- In particular, the typeobj member of the
-\family typewriter
-dtype
-\family default
- structure must be filled with a Python type that has a fixed-size element-size
- that corresponds to the elsize member of
-\emph on
-dtype
-\emph default
-.
- Also the
-\family typewriter
-f
-\family default
- member must have the required functions: nonzero, copyswap, copyswapn,
- getitem, setitem, and cast (some of the cast functions may be
-\family typewriter
-NULL
-\family default
- if no support is desired).
- To avoid confusion, you should choose a unique character typecode but this
- is not enforced and not relied on internally.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A user-defined type number is returned that uniquely identifies the type.
- A pointer to the new structure can then be obtained from
-\family typewriter
-PyArray_DescrFromType
-\family default
- using the returned type number.
- A -1 is returned if an error occurs.
- If this
-\family typewriter
-\emph on
-dtype
-\family default
-\emph default
- has already been registered (checked only by the address of the pointer),
- then return the previously-assigned type-number.
-
-\end_layout
-
-\begin_layout Description
-PyArray_RegisterCastFunc (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArray_Descr*
-\family default
- descr,
-\family typewriter
-int
-\family default
- totype,
-\family typewriter
-PyArray_VectorUnaryFunc*
-\family default
- castfunc)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Register a low-level casting function,
-\emph on
-castfunc
-\emph default
-, to convert from the data-type,
-\emph on
-descr
-\emph default
-, to the given data-type number,
-\emph on
-totype
-\emph default
-.
- Any old casting function is over-written.
- A
-\family typewriter
-0
-\family default
- is returned on success or a
-\family typewriter
--1
-\family default
- on failure.
-
-\end_layout
-
-\begin_layout Description
-PyArray_RegisterCanCast (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArray_Descr*
-\family default
- descr,
-\family typewriter
-int
-\family default
- totype,
-\family typewriter
-NPY_SCALARKIND
-\family default
- scalar)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Register the data-type number,
-\emph on
-totype
-\emph default
-, as castable from data-type object,
-\emph on
-descr
-\emph default
-, of the given
-\emph on
-scalar
-\emph default
- kind.
- Use
-\emph on
-scalar
-\emph default
- =
-\family typewriter
-NPY_NOSCALAR
-\family default
- to register that an array of data-type
-\emph on
-descr
-\emph default
- can be cast safely to a data-type whose type_number is
-\emph on
-totype
-\emph default
-.
-
-\end_layout
-
-\begin_layout Subsubsection
-Special functions for NPY_OBJECT
-\end_layout
-
-\begin_layout Description
-PyArray_INCREF (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Used for an array,
-\emph on
-op
-\emph default
-, that contains any Python objects.
- It increments the reference count of every object in the array according
- to the data-type of
-\emph on
-op
-\emph default
-.
- A -1 is returned if an error occurs, otherwise 0 is returned.
-\end_layout
-
-\begin_layout Description
-PyArray_Item_INCREF (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char*
-\family default
- ptr,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A function to INCREF all the objects at the location
-\emph on
-ptr
-\emph default
- according to the data-type
-\emph on
-dtype
-\emph default
-.
- If
-\emph on
-ptr
-\emph default
- is the start of a record with an object at any offset, then this will (recursiv
-ely) increment the reference count of all object-like items in the record.
-\end_layout
-
-\begin_layout Description
-PyArray_XDECREF (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Used for an array,
-\emph on
-op
-\emph default
-, that contains any Python objects.
- It decrements the reference count of every object in the array according
- to the data-type of
-\emph on
-op
-\emph default
-.
- Normal return value is 0.
- A -1 is returned if an error occurs.
-\end_layout
-
-\begin_layout Description
-PyArray_Item_XDECREF (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char*
-\family default
- ptr,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A function to XDECREF all the object-like items at the loacation
-\emph on
-ptr
-\emph default
- as recorded in the data-type,
-\emph on
-dtype
-\emph default
-.
- This works recursively so that if
-\family typewriter
-dtype
-\family default
- itself has fields with data-types that contain object-like items, all the
- object-like fields will be XDECREF
-\family typewriter
-'d
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_FillObjectArray (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr,
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Fill a newly created array with a single value obj at all locations in
- the structure with object data-types.
- No checking is performed but
-\emph on
-arr
-\emph default
- must be of data-type
-\family typewriter
-NPY_OBJECT
-\family default
- and be single-segment and uninitialized (no previous objects in position).
- Use
-\family typewriter
-PyArray_DECREF
-\family default
-(
-\emph on
-arr
-\emph default
-) if you need to decrement all the items in the object array prior to calling
- this function.
-
-\end_layout
-
-\begin_layout Subsection
-Array flags
-\end_layout
-
-\begin_layout Subsubsection
-Basic Array Flags
-\end_layout
-
-\begin_layout Standard
-An ndarray can have a data segment that is not a simple contiguous chunk
- of well-behaved memory you can manipulate.
- It may not be aligned with word boundaries (very important on some platforms).
- It might have its data in a different byte-order than the machine recognizes.
- It might not be writeable.
- It might be in Fortan-contiguous order.
- The array flags are used to indicate what can be said about data associated
- with an array.
-\end_layout
-
-\begin_layout Description
-NPY_C_CONTIGUOUS The data area is in C-style contiguous order (last index
- varies the fastest).
-\end_layout
-
-\begin_layout Description
-NPY_F_CONTIGUOUS The data area is in Fortran-style contiguous order (first
- index varies the fastest).
-\end_layout
-
-\begin_layout Description
-NPY_OWNDATA The data area is owned by this array.
-\end_layout
-
-\begin_layout Description
-NPY_ALIGNED The data area is aligned appropriately (for all strides).
-\end_layout
-
-\begin_layout Description
-NPY_WRITEABLE The data area can be written to.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Notice that the above 3 flags are are defined so that a new, well-behaved
- array has these flags defined as true.
-
-\end_layout
-
-\begin_layout Description
-NPY_UPDATEIFCOPY The data area represents a (well-behaved) copy whose informatio
-n should be transferred back to the original when this array is deleted.
-\end_layout
-
-\begin_layout Subsubsection
-Combinations of array flags
-\end_layout
-
-\begin_layout Description
-NPY_BEHAVED
-\family typewriter
-NPY_ALIGNED
-\family default
- |
-\family typewriter
-NPY_WRITEABLE
-\end_layout
-
-\begin_layout Description
-NPY_CARRAY
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_BEHAVED
-\end_layout
-
-\begin_layout Description
-NPY_CARRAY_RO
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Description
-NPY_FARRAY
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_BEHAVED
-\end_layout
-
-\begin_layout Description
-NPY_FARRAY_RO
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Description
-NPY_DEFAULT
-\family typewriter
-NPY_CARRAY
-\end_layout
-
-\begin_layout Description
-NPY_UPDATE_ALL
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- |
-\family typewriter
-NPY_ALIGNED
-\end_layout
-
-\begin_layout Subsubsection
-Flag-like constants
-\end_layout
-
-\begin_layout Standard
-These constants are used in PyArray_FromAny (and its macro forms) to specify
- desired properties of the new array.
-\end_layout
-
-\begin_layout Description
-NPY_FORCECAST Cast to the desired type, even if it can't be done without
- losing information.
-\end_layout
-
-\begin_layout Description
-NPY_ENSURECOPY Make sure the resulting array is a copy of the original.
-\end_layout
-
-\begin_layout Description
-NPY_ENSUREARRAY Make sure the resulting object is an actual ndarray (or
- bigndarray), and not a sub-class.
-\end_layout
-
-\begin_layout Description
-NPY_NOTSWAPPED Only used in
-\family typewriter
-PyArray_CheckFromAny
-\family default
- to over-ride the byteorder of the data-type object passed in.
-
-\end_layout
-
-\begin_layout Description
-NPY_BEHAVED_NS
-\family typewriter
-NPY_ALIGNED
-\family default
- |
-\family typewriter
-NPY_WRITEABLE
-\family default
- |
-\family typewriter
-NPY_NOTSWAPPED
-\end_layout
-
-\begin_layout Subsubsection
-Flag checking
-\end_layout
-
-\begin_layout Standard
-For all of these macros
-\emph on
-arr
-\emph default
- must be an instance of a (subclass of)
-\family typewriter
-PyArray_Type
-\family default
-, but no checking is done.
-\end_layout
-
-\begin_layout Description
-PyArray_CHKFLAGS (arr, flags)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The first parameter, arr, must be an ndarray or subclass.
- The parameter,
-\emph on
-flags
-\emph default
-, should be an integer consisting of bitwise combinations of the possible
- flags an array can have:
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
-,
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
-,
-\family typewriter
-NPY_OWNDATA
-\family default
-,
-\family typewriter
-NPY_ALIGNED
-\family default
-,
-\family typewriter
-NPY_WRITEABLE
-\family default
-,
-\family typewriter
-NPY_UPDATEIFCOPY
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_ISCONTIGUOUS (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-arr
-\emph default
- is C-style contiguous.
-\end_layout
-
-\begin_layout Description
-PyArray_ISFORTRAN (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-arr
-\emph default
- is Fortran-style contiguous.
-\end_layout
-
-\begin_layout Description
-PyArray_ISWRITEABLE (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of
-\emph on
-arr
-\emph default
- can be written to
-\end_layout
-
-\begin_layout Description
-PyArray_ISALIGNED (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of
-\emph on
-arr
-\emph default
- is properly aligned on the machine.
-\end_layout
-
-\begin_layout Description
-PyArray_ISBEHAVED (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evalutes true if the data area of
-\emph on
-arr
-\emph default
- is aligned and writeable and in machine byte-order according to its descriptor.
-\end_layout
-
-\begin_layout Description
-PyArray_ISBEHAVED_RO (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of
-\emph on
-arr
-\emph default
- is aligned and in machine byte-order.
-\end_layout
-
-\begin_layout Description
-PyArray_ISCARRAY (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of
-\emph on
-arr
-\emph default
- is C-style contiguous, and
-\family typewriter
-PyArray_ISBEHAVED
-\family default
-(
-\emph on
-arr
-\emph default
-) is true.
-\end_layout
-
-\begin_layout Description
-PyArray_ISFARRAY (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of
-\emph on
-arr
-\emph default
- is Fortran-style contiguous and
-\family typewriter
-PyArray_ISBEHAVED
-\family default
-(
-\emph on
-arr
-\emph default
-) is true.
-\end_layout
-
-\begin_layout Description
-PyArray_ISCARRAY_RO (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of
-\emph on
-arr
-\emph default
- is C-style contiguous, aligned, and in machine byte-order.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ISFARRAY_RO (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of
-\emph on
-arr
-\emph default
- is Fortran-style contiguous, aligned, and in machine byte-order
-\series bold
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ISONESEGMENT (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if the data area of
-\emph on
-arr
-\emph default
- consists of a single (C-style or Fortran-style) contiguous segment.
-\end_layout
-
-\begin_layout Description
-PyArray_UpdateFlags (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr,
-\family typewriter
-int
-\family default
- flagmask)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The
-\family typewriter
-NPY_C_CONTIGUOUS
-\family default
-,
-\family typewriter
-NPY_ALIGNED
-\family default
-, and
-\family typewriter
-NPY_F_CONTIGUOUS
-\family default
- array flags can be
-\begin_inset Quotes eld
-\end_inset
-
-calculated
-\begin_inset Quotes erd
-\end_inset
-
- from the array object itself.
- This routine updates one or more of these flags of
-\emph on
-arr
-\emph default
- as specified in
-\emph on
-flagmask
-\emph default
- by performing the required calculation.
-
-\end_layout
-
-\begin_layout Warning
-It is important to keep the flags updated (using PyArray_UpdateFlags can
- help) whenever a manipulation with an array is performed that might cause
- them to change.
- Later calculations in NumPy that rely on the state of these flags do not
- repeat the calculation to update them.
-
-\end_layout
-
-\begin_layout Subsection
-Array method alternative API
-\end_layout
-
-\begin_layout Subsubsection
-Conversion
-\end_layout
-
-\begin_layout Description
-PyArray_GetField (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-int
-\family default
- offset)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-getfield
-\series default
-(
-\emph on
-dtype
-\emph default
-,
-\emph on
-offset
-\emph default
-).
- Return a new array of the given
-\emph on
-dtype
-\emph default
- using the data in the current array at a specified
-\emph on
-offset
-\emph default
- in bytes.
- The
-\emph on
-offset
-\emph default
- plus the itemsize of the new array type must be less than
-\emph on
-self
-\emph default
-->descr->elsize or an error is raised.
- The same shape and strides as the original array are used.
- Therefore, this function has the effect of returning a field from a record
- array.
- But, it can also be used to select specific bytes or groups of bytes from
- any array type.
-
-\end_layout
-
-\begin_layout Description
-PyArray_SetField (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-int
-\family default
- offset,
-\family typewriter
-PyObject*
-\family default
- val)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-setfield
-\series default
-(
-\emph on
-val
-\emph default
-,
-\emph on
-dtype
-\emph default
-,
-\emph on
-offset
-\emph default
-).
- Set the field starting at
-\emph on
-offset
-\emph default
- in bytes and of the given
-\emph on
-dtype
-\emph default
- to
-\emph on
-val
-\emph default
-.
- The
-\emph on
-offset
-\emph default
- plus
-\emph on
-dtype
-\emph default
-->elsize must be less than
-\emph on
-self
-\emph default
-->descr->elsize or an error is raised.
- Otherwise, the
-\emph on
-val
-\emph default
- argument is converted to an array and copied into the field pointed to.
- If necessary, the elements of
-\emph on
-val
-\emph default
- are repeated to fill the destination array, But, the number of elements
- in the destination must be an integer multiple of the number of elements
- in
-\emph on
-val
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Byteswap (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-Bool
-\family default
- inplace)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-byteswap
-\series default
-(
-\emph on
-inplace
-\emph default
-).
- Return an array whose data area is byteswapped.
- If
-\emph on
-inplace
-\emph default
- is non-zero, then do the byteswap inplace and return a reference to self.
- Otherwise, create a byteswapped copy and leave self unchanged.
-\end_layout
-
-\begin_layout Description
-PyArray_NewCopy (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- old,
-\family typewriter
-NPY_ORDER
-\family default
- order)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-copy
-\series default
-(
-\emph on
-fortran
-\emph default
-).
- Make a copy of the
-\emph on
-old
-\emph default
- array.
- The returned array is always aligned and writeable with data interpreted
- the same as the old array.
- If
-\emph on
-order
-\emph default
- is
-\family typewriter
-NPY_CORDER
-\family default
-, then a C-style contiguous array is returned.
- If
-\emph on
-order
-\emph default
- is
-\family typewriter
-NPY_FORTRANORDER
-\family default
-, then a Fortran-style contiguous array is returned.
- If
-\emph on
-order is
-\emph default
-
-\family typewriter
-NPY_ANYORDER
-\family default
-, then the array returned is Fortran-style contiguous only if the old one
- is; otherwise, it is C-style contiguous.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ToList (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-tolist
-\series default
-().
- Return a nested Python list from
-\emph on
-self
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ToString (PyObject*) (PyArrayObject* self, NPY_ORDER order)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-tobytes
-\series default
-(
-\emph on
-order
-\emph default
-).
- Return the bytes of this array in a Python string.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ToFile (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-FILE*
-\family default
- fp,
-\family typewriter
-char*
-\family default
- sep,
-\family typewriter
-char*
-\family default
- format)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Write the contents of
-\emph on
-self
-\emph default
- to the file pointer
-\emph on
-fp
-\emph default
- in C-style contiguous fashion.
- Write the data as binary bytes if
-\family typewriter
-\emph on
-sep
-\family default
-\emph default
- is the string
-\begin_inset Quotes eld
-\end_inset
-
-
-\begin_inset Quotes erd
-\end_inset
-
- or
-\family typewriter
-NULL
-\family default
-.
- Otherwise, write the contents of
-\emph on
-self
-\emph default
- as text using the
-\family typewriter
-\emph on
-sep
-\family default
-\emph default
- string as the item separator.
- Each item will be printed to the file.
- If the
-\emph on
-format
-\emph default
- string is not
-\family typewriter
-NULL
-\family default
- or
-\begin_inset Quotes eld
-\end_inset
-
-
-\begin_inset Quotes erd
-\end_inset
-
-, then it is a Python print statement format string showing how the items
- are to be written.
-\end_layout
-
-\begin_layout Description
-PyArray_Dump (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- file,
-\family typewriter
-int
-\family default
- protocol)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Pickle the object in
-\emph on
-self
-\emph default
- to the given
-\emph on
-file
-\emph default
- (either a string or a Python file object).
- If
-\emph on
-file
-\emph default
- is a Python string it is considered to be the name of a file which is then
- opened in binary mode.
- The given
-\emph on
-protocol
-\emph default
- is used (if
-\emph on
-protocol
-\emph default
- is negative, or the highest available is used).
- This is a simple wrapper around cPickle.dump(
-\emph on
-self
-\emph default
-,
-\emph on
-file
-\emph default
-,
-\emph on
-protocol
-\emph default
-).
-\end_layout
-
-\begin_layout Description
-PyArray_Dumps (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- protocol)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Pickle the object in
-\emph on
-self
-\emph default
- to a Python string and return it.
- Use the Pickle
-\emph on
-protocol
-\emph default
- provided (or the highest available if
-\emph on
-protocol
-\emph default
- is negative).
-
-\end_layout
-
-\begin_layout Description
-PyArray_FillWithScalar (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr,
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Fill the array,
-\emph on
-arr
-\emph default
-, with the given scalar object,
-\emph on
-obj
-\emph default
-.
- The object is first converted to the data type of
-\emph on
-arr
-\emph default
-, and then copied into every location.
- A -1 is returned if an error occurs, otherwise 0 is returned.
-\end_layout
-
-\begin_layout Description
-PyArray_View (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-view
-\series default
-(
-\emph on
-dtype
-\emph default
-).
- Return a new view of the array
-\emph on
-self
-\emph default
- as possibly a different data-type,
-\emph on
-dtype
-\emph default
-.
- If
-\emph on
-dtype
-\emph default
- is
-\family typewriter
-NULL
-\family default
-, then the returned array will have the same data type as
-\emph on
-self
-\emph default
-.
- The new data-type must be consistent with the size of
-\emph on
-self
-\emph default
-.
- Either the itemsizes must be identical, or
-\emph on
-self
-\emph default
- must be single-segment and the total number of bytes must be the same.
- In the latter case the dimensions of the returned array will be altered
- in the last (or first for Fortran-style contiguous arrays) dimension.
- The data area of the returned array and self is exactly the same.
-\end_layout
-
-\begin_layout Subsubsection
-Shape Manipulation
-\end_layout
-
-\begin_layout Description
-PyArray_Newshape (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyArray_Dims*
-\family default
- newshape)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Result will be a new array (pointing to the same memory location as
-\emph on
-self
-\emph default
- if possible), but having a shape given by
-\emph on
-newshape
-\emph default
-.
- If the new shape is not compatible with the strides of
-\emph on
-self
-\emph default
-, then a copy of the array with the new specified shape will be returned.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Reshape (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- shape)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\family typewriter
-\emph on
-self
-\family default
-\emph default
-.
-\series bold
-reshape
-\series default
-(
-\family typewriter
-\emph on
-shape
-\family default
-\emph default
-) where
-\emph on
-shape
-\emph default
- is a sequence.
- Converts
-\emph on
-shape
-\emph default
- to a
-\family typewriter
-PyArray_Dims
-\family default
- structure and calls
-\family typewriter
-PyArray_Newshape
-\family default
- internally.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Squeeze (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-squeeze
-\series default
-().
- Return a new view of
-\emph on
-self
-\emph default
- with all of the dimensions of length 1 removed from the shape.
-
-\end_layout
-
-\begin_layout Warning
-matrix objects are always 2-dimensional.
- Therefore,
-\family typewriter
-PyArray_Squeeze
-\family default
- has no effect on arrays of matrix sub-class.
-
-\end_layout
-
-\begin_layout Description
-PyArray_SwapAxes (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- a1,
-\family typewriter
-int
-\family default
- a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-swapaxes
-\series default
-(
-\emph on
-a1
-\emph default
-,
-\emph on
-a2
-\emph default
-).
- The returned array is a new view of the data in
-\emph on
-self
-\emph default
- with the given axes,
-\emph on
-a1
-\emph default
- and
-\emph on
-a2
-\emph default
-, swapped.
-\end_layout
-
-\begin_layout Description
-PyArray_Resize (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyArray_Dims*
-\family default
- newshape,
-\family typewriter
-int
-\family default
- refcheck, NPY_ORDER fortran)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-resize
-\series default
-(
-\emph on
-newshape
-\emph default
-, refcheck
-\family typewriter
-=
-\family default
-\emph on
-refcheck
-\emph default
-, order=
-\shape italic
-fortran
-\shape default
-).
- This function only works on single-segment arrays.
- It changes the shape of
-\emph on
-self
-\emph default
- inplace and will reallocate the memory for
-\emph on
-self
-\emph default
- if
-\emph on
-newshape
-\emph default
- has a different total number of elements then the old shape.
- If reallocation is necessary, then
-\emph on
-self
-\emph default
- must own its data, have
-\emph on
-self
-\emph default
--
-\family typewriter
->base==NULL
-\family default
-, have
-\emph on
-self
-\emph default
--
-\family typewriter
->weakrefs==NULL
-\family default
-, and (unless refcheck is 0) not be referenced by any other array.
- A reference to the new array is returned.
- The
-\shape italic
-fortran
-\shape default
- argument can be NPY_ANYORDER, NPY_CORDER, or NPY_FORTRANORDER.
- This argument is used if the number of dimension is (or is being resized
- to be) greater than 2.
- It currently has no effect.
- Eventually it could be used to determine how the resize operation should
- view the data when constructing a differently-dimensioned array.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Transpose (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyArray_Dims*
-\family default
- permute)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-transpose
-\series default
-(
-\emph on
-permute
-\emph default
-).
- Permute the axes of the ndarray object
-\emph on
-self
-\emph default
- according to the data structure
-\emph on
-permute
-\emph default
- and return the result.
- If
-\emph on
-permute
-\emph default
- is
-\family typewriter
-NULL
-\family default
-, then the resulting array has its axes reversed.
- For example if
-\emph on
-self
-\emph default
- has shape
-\begin_inset Formula $10\times20\times30$
-\end_inset
-
-, and
-\emph on
-permute
-\family typewriter
-\emph default
-.ptr
-\family default
- is (0,2,1) the shape of the result is
-\begin_inset Formula $10\times30\times20.$
-\end_inset
-
- If
-\emph on
-permute
-\emph default
- is
-\family typewriter
-NULL
-\family default
-, the shape of the result is
-\begin_inset Formula $30\times20\times10.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-PyArray_Flatten (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-NPY_ORDER
-\family default
- order)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-flatten
-\series default
-(
-\emph on
-order
-\emph default
-).
- Return a 1-d copy of the array.
- If
-\emph on
-order
-\emph default
- is
-\family typewriter
-NPY_FORTRANORDER
-\family default
- the elements are scanned out in Fortran order (first-dimension varies the
- fastest).
- If
-\emph on
-order
-\emph default
- is
-\family typewriter
-NPY_CORDER
-\family default
-, the elements of
-\family typewriter
-self
-\family default
- are scanned in C-order (last dimension varies the fastest).
- If
-\emph on
-order
-\emph default
-
-\family typewriter
-NPY_ANYORDER
-\family default
-, then the result of
-\family typewriter
-PyArray_ISFORTRAN
-\family default
-(
-\emph on
-self
-\emph default
-) is used to determine which order to flatten.
-\end_layout
-
-\begin_layout Description
-PyArray_Ravel (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-NPY_ORDER
-\family default
- order)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.ravel(
-\emph on
-order
-\emph default
-).
- Same basic functionality as
-\family typewriter
-PyArray_Flatten
-\family default
-(
-\emph on
-self
-\emph default
-,
-\emph on
-order
-\emph default
-) except if
-\emph on
-order
-\emph default
- is 0 and
-\emph on
-self
-\emph default
- is C-style contiguous, the shape is altered but no copy is performed.
-\end_layout
-
-\begin_layout Subsubsection
-Item selection and manipulation
-\end_layout
-
-\begin_layout Description
-PyArray_TakeFrom (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- indices,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-PyArrayObject*
-\family default
- ret,
-\family typewriter
-NPY_CLIPMODE
-\family default
- clipmode)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-take
-\series default
-(
-\emph on
-indices
-\emph default
-,
-\emph on
-axis
-\emph default
-,
-\emph on
-ret
-\emph default
-,
-\emph on
-clipmode
-\emph default
-) except
-\emph on
-axis
-\emph default
-=None in Python is obtained by setting
-\emph on
-axis
-\emph default
-=
-\family typewriter
-NPY_MAXDIMS
-\family default
- in C.
- Extract the items from self indicated by the integer-valued
-\emph on
-indices
-\emph default
- along the given
-\emph on
-axis.
-
-\emph default
- The clipmode argument can be
-\family typewriter
-NPY_RAISE
-\family default
-,
-\family typewriter
-NPY_WRAP
-\family default
-, or
-\family typewriter
-NPY_CLIP
-\family default
- to indicate what to do with out-of-bound indices.
- The
-\emph on
-ret
-\emph default
- argument can specify an output array rather than having one created internally.
-
-\end_layout
-
-\begin_layout Description
-PyArray_PutTo (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- values,
-\family typewriter
-PyObject*
-\family default
- indices,
-\family typewriter
-NPY_CLIPMODE
-\family default
- clipmode)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.put(
-\emph on
-values
-\emph default
-,
-\emph on
-indices
-\emph default
-,
-\emph on
-clipmode
-\emph default
-).
- Put
-\emph on
-values
-\emph default
- into
-\emph on
-self
-\emph default
- at the corresponding (flattened)
-\emph on
-indices
-\emph default
-.
- If
-\emph on
-values
-\emph default
- is too small it will be repeated as necessary.
-
-\end_layout
-
-\begin_layout Description
-PyArray_PutMask (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- values,
-\family typewriter
-PyObject*
-\family default
- mask)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Place the
-\emph on
-values
-\emph default
- in
-\emph on
-self
-\emph default
- wherever corresponding positions (using a flattened context) in
-\emph on
-mask
-\emph default
- are true.
- The
-\emph on
-mask
-\emph default
- and
-\emph on
-self
-\emph default
- arrays must have the same total number of elements.
- If
-\emph on
-values
-\emph default
- is too small, it will be repeated as necessary.
-\end_layout
-
-\begin_layout Description
-PyArray_Repeat (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-int
-\family default
- axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-repeat
-\series default
-(
-\emph on
-op
-\emph default
-,
-\emph on
-axis
-\emph default
-).
- Copy the elements of
-\emph on
-self
-\emph default
-,
-\emph on
-op
-\emph default
- times along the given
-\emph on
-axis
-\emph default
-.
- Either
-\emph on
-op
-\emph default
- is a scalar integer or a sequence of length
-\emph on
-self
-\emph default
-->dimensions[
-\emph on
-axis
-\emph default
-] indicating how many times to repeat each item along the axis.
-\end_layout
-
-\begin_layout Description
-PyArray_Choose (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-PyArrayObject*
-\family default
- ret,
-\family typewriter
-NPY_CLIPMODE
-\family default
- clipmode)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-choose
-\series default
-(
-\emph on
-op
-\emph default
-,
-\emph on
-ret
-\emph default
-,
-\emph on
-clipmode
-\emph default
-).
- Create a new array by selecting elements from the sequence of arrays in
-
-\emph on
-op
-\emph default
- based on the integer values in
-\emph on
-self
-\emph default
-.
- The arrays must all be broadcastable to the same shape and the entries
- in
-\emph on
-self
-\emph default
- should be between 0 and len(
-\emph on
-op
-\emph default
-).
- The output is placed in
-\emph on
-ret
-\emph default
- unless it is
-\family typewriter
-NULL
-\family default
- in which case a new output is created.
- The
-\emph on
-clipmode
-\emph default
- argument determines behavior for when entries in
-\emph on
-self
-\emph default
- are not between 0 and len(
-\emph on
-op
-\emph default
-).
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-NPY_RAISE raise a ValueError;
-\end_layout
-
-\begin_layout Description
-NPY_WRAP wrap values <0 by adding len(
-\emph on
-op
-\emph default
-) and values >=len(
-\emph on
-op
-\emph default
-) by subtracting len(
-\emph on
-op
-\emph default
-) until they are in range;
-\end_layout
-
-\begin_layout Description
-NPY_CLIP all values are clipped to the region [0, len(
-\emph on
-op
-\emph default
-) ).
-\end_layout
-
-\end_deeper
-\begin_layout Description
-PyArray_Sort (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-sort
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return an array with the items of
-\emph on
-self
-\emph default
- sorted along
-\emph on
-axis
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_ArgSort (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-argsort
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return an array of indices such that selection of these indices along the
- given
-\family typewriter
-axis
-\family default
- would return a sorted version of
-\emph on
-self
-\emph default
-.
- If
-\emph on
-self
-\emph default
-->descr is a data-type with fields defined, then self->descr->names is used
- to determine the sort order.
- A comparison where the first field is equal will use the second field and
- so on.
- To alter the sort order of a record array, create a new data-type with
- a different order of names and construct a view of the array with that
- new data-type.
-
-\end_layout
-
-\begin_layout Description
-PyArray_LexSort (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- sort_keys,
-\family typewriter
-int
-\family default
- axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Given a sequence of arrays (
-\emph on
-sort_keys
-\emph default
-) of the same shape, return an array of indices (similar to
-\family typewriter
-PyArray_ArgSort
-\family default
-(...)) that would sort the arrays lexicographically.
- A lexicographic sort specifies that when two keys are found to be equal,
- the order is based on comparison of subsequent keys.
- A merge sort (which leaves equal entries unmoved) is required to be defined
- for the types.
- The sort is accomplished by sorting the indices first using the first
-\emph on
-sort_key
-\emph default
- and then using the second
-\emph on
-sort_key
-\emph default
- and so forth.
- This is equivalent to the lexsort(
-\emph on
-sort_keys
-\emph default
-,
-\emph on
-axis
-\emph default
-) Python command.
- Because of the way the merge-sort works, be sure to understand the order
- the
-\emph on
-sort_keys
-\emph default
- must be in (reversed from the order you would use when comparing two elements).
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If these arrays are all collected in a record array, then
-\family typewriter
-PyArray_Sort
-\family default
-(...) can also be used to sort the array directly.
-
-\end_layout
-
-\begin_layout Description
-PyArray_SearchSorted (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- values)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-searchsorted
-\series default
-(
-\emph on
-values
-\emph default
-).
- Assuming
-\emph on
-self
-\emph default
- is a 1-d array in ascending order representing bin boundaries then the
- output is an array the same shape as
-\emph on
-values
-\emph default
- of bin numbers, giving the bin into which each item in
-\emph on
-values
-\emph default
- would be placed.
- No checking is done on whether or not self is in ascending order.
-\end_layout
-
-\begin_layout Description
-PyArray_Diagonal (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- offset,
-\family typewriter
-int
-\family default
- axis1,
-\family typewriter
-int
-\family default
- axis2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-diagonal
-\series default
-(
-\emph on
-offset
-\emph default
-,
-\emph on
-axis1
-\emph default
-,
-\emph on
-axis2
-\emph default
-).
- Return the
-\emph on
-offset
-\emph default
- diagonals of the 2-d arrays defined by
-\emph on
-axis1
-\emph default
- and
-\emph on
-axis2
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Nonzero (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-nonzero
-\series default
-().
- Returns a tuple of index arrays that select elements of
-\emph on
-self
-\emph default
- that are nonzero.
- If (nd=
-\family typewriter
-PyArray_NDIM
-\family default
-(
-\family typewriter
-self
-\family default
-))==1, then a single index array is returned.
- The index arrays have data type
-\family typewriter
-NPY_INTP
-\family default
-.
- If a tuple is returned (nd
-\begin_inset Formula $\neq$
-\end_inset
-
-1), then its length is nd.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Compress (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- condition,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-compress
-\series default
-(
-\emph on
-condition
-\emph default
-,
-\emph on
-axis
-\emph default
-).
- Return the elements along
-\emph on
-axis
-\emph default
- corresponding to elements of
-\emph on
-condition
-\emph default
- that are true.
-
-\end_layout
-
-\begin_layout Subsubsection
-Calculation
-\end_layout
-
-\begin_layout Tip
-Pass in NPY_MAXDIMS for axis in order to achieve the same effect that is
- obtained by passing in axis = None in Python (treating the array as a 1-d
- array).
-
-\end_layout
-
-\begin_layout Description
-PyArray_ArgMax (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-argmax
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return the index of the largest element of
-\emph on
-self
-\emph default
- along
-\emph on
-axis
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_ArgMin (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-argmin
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return the index of the smallest element of
-\emph on
-self
-\emph default
- along
-\emph on
-axis
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_Max (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-max
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return the largest element of
-\emph on
-self
-\emph default
- along the given
-\emph on
-axis
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_Min (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-min
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return the smallest element of
-\emph on
-self
-\emph default
- along the given
-\emph on
-axis
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_Ptp (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-ptp
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return the difference between the largest element of
-\emph on
-self
-\emph default
- along
-\emph on
-axis
-\emph default
- and the smallest element of
-\emph on
-self
-\emph default
- along
-\emph on
-axis
-\emph default
-.
-\end_layout
-
-\begin_layout Note
-The rtype argument specifies the data-type the reduction should take place
- over.
- This is important if the data-type of the array is not
-\begin_inset Quotes eld
-\end_inset
-
-large
-\begin_inset Quotes erd
-\end_inset
-
- enough to handle the output.
- By default, all integer data-types are made at least as large as NPY_LONG
- for the
-\begin_inset Quotes eld
-\end_inset
-
-add
-\begin_inset Quotes erd
-\end_inset
-
- and
-\begin_inset Quotes eld
-\end_inset
-
-multiply
-\begin_inset Quotes erd
-\end_inset
-
- ufuncs (which form the basis for mean, sum, cumsum, prod, and cumprod functions
-).
-\end_layout
-
-\begin_layout Description
-PyArray_Mean (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-int
-\family default
- rtype,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-mean
-\series default
-(
-\emph on
-axis
-\emph default
-,
-\emph on
-rtype
-\emph default
-).
- Returns the mean of the elements along the given
-\emph on
-axis
-\emph default
-, using the enumerated type
-\emph on
-rtype
-\emph default
- as the data type to sum in.
- Default sum behavior is obtained using
-\family typewriter
-NPY_NOTYPE
-\family default
- for
-\emph on
-rtype
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_Trace (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- offset,
-\family typewriter
-int
-\family default
- axis1,
-\family typewriter
-int
-\family default
- axis2,
-\family typewriter
-int
-\family default
- rtype,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-trace
-\series default
-(
-\emph on
-offset
-\emph default
-,
-\emph on
-axis1
-\emph default
-,
-\emph on
-axis2
-\emph default
-,
-\emph on
-rtype
-\emph default
-).
- Return the sum (using
-\emph on
-rtype
-\emph default
- as the data type of summation) over the
-\emph on
-offset
-\emph default
- diagonal elements of the 2-d arrays defined by
-\emph on
-axis1
-\emph default
- and
-\emph on
-axis2
-\emph default
- variables.
- A positive offset chooses diagonals above the main diagonal.
- A negative offset selects diagonals below the main diagonal.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Clip (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- min,
-\family typewriter
-PyObject*
-\family default
- max)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-clip
-\series default
-(
-\emph on
-min
-\emph default
-,
-\emph on
-max
-\emph default
-).
- Clip an array,
-\emph on
-self
-\emph default
-, so that values larger than
-\emph on
-max
-\emph default
- are fixed to
-\emph on
-max
-\emph default
- and values less than
-\emph on
-min
-\emph default
- are fixed to
-\emph on
-min
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_Conjugate (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-conjugate
-\series default
-() and
-\emph on
-self
-\emph default
-.
-\series bold
-conj
-\series default
-() Return the complex conjugate of
-\emph on
-self
-\emph default
-.
- If
-\emph on
-self
-\emph default
- is not of complex data type, then return
-\emph on
-self
-\emph default
- with an reference.
-\end_layout
-
-\begin_layout Description
-PyArray_Round (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- decimals,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-round
-\series default
-(
-\emph on
-decimals
-\emph default
-,
-\emph on
-out
-\emph default
-).
- Returns the array with elements rounded to the nearest decimal place.
- The decimal place is defined as the
-\begin_inset Formula $10^{-\textrm{decimals}}$
-\end_inset
-
- digit so that negative
-\emph on
-decimals
-\emph default
- cause rounding to the nearest 10's, 100's, etc.
- If out is
-\family typewriter
-NULL
-\family default
-, then the output array is created, otherwise the output is placed in
-\family typewriter
-\emph on
-out
-\family default
-\emph default
- which must be the correct size and type.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Std (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-int
-\family default
- rtype,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-std
-\series default
-(
-\emph on
-axis
-\emph default
-,
-\emph on
-rtype
-\emph default
-).
- Return the standard deviation using data along
-\emph on
-axis
-\emph default
- converted to data type
-\emph on
-rtype
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Sum (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-int
-\family default
- rtype,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-sum
-\series default
-(
-\family typewriter
-\emph on
-axis
-\family default
-\emph default
-,
-\family typewriter
-\emph on
-rtype
-\family default
-\emph default
-).
- Return 1-d vector sums of elements in
-\emph on
-self
-\emph default
- along
-\emph on
-axis
-\emph default
-.
- Perform the sum after converting data to data type
-\emph on
-rtype
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_CumSum (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-int
-\family default
- rtype,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-cumsum
-\series default
-(
-\family typewriter
-\emph on
-axis
-\family default
-\emph default
-,
-\family typewriter
-\emph on
-rtype
-\family default
-\emph default
-).
- Return cumulative 1-d sums of elements in
-\emph on
-self
-\emph default
- along
-\emph on
-axis
-\emph default
-.
- Perform the sum after converting data to data type
-\emph on
-rtype
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_Prod (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-int
-\family default
- rtype,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-prod
-\series default
-(
-\emph on
-axis
-\emph default
-,
-\emph on
-rtype
-\emph default
-).
- Return 1-d products of elements in
-\emph on
-self
-\emph default
- along
-\emph on
-axis
-\emph default
-.
- Perform the product after converting data to data type
-\emph on
-rtype
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_CumProd (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-int
-\family default
- rtype,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-cumprod
-\series default
-(
-\emph on
-axis
-\emph default
-,
-\emph on
-rtype
-\emph default
-).
- Return 1-d cumulative products of elements in
-\family typewriter
-self
-\family default
- along
-\family typewriter
-axis
-\family default
-.
- Perform the product after converting data to data type
-\family typewriter
-rtype
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_All (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-all
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return an array with True elements for every 1-d sub-array of
-\family typewriter
-self
-\family default
- defined by
-\family typewriter
-axis
-\family default
- in which all the elements are True.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Any (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- self,
-\family typewriter
-int
-\family default
- axis,
-\family typewriter
-PyArrayObject*
-\family default
- out)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\emph on
-self
-\emph default
-.
-\series bold
-any
-\series default
-(
-\emph on
-axis
-\emph default
-).
- Return an array with True elements for every 1-d sub-array of
-\emph on
-self
-\emph default
- defined by
-\emph on
-axis
-\emph default
- in which any of the elements are True.
-
-\end_layout
-
-\begin_layout Subsection
-Functions
-\end_layout
-
-\begin_layout Subsubsection
-Array Functions
-\end_layout
-
-\begin_layout Description
-PyArray_AsCArray (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject**
-\family default
- op,
-\family typewriter
-void*
-\family default
- ptr,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-int
-\family default
- itemsize)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Sometimes it is useful to access a multidimensional array as a C-style
- multi-dimensional array so that algorithms can be implemented using C's
- a[i][j][k] syntax.
- This routine returns a pointer,
-\emph on
-ptr
-\emph default
-, that simulates this kind of C-style array, for 1-, 2-, and 3-d ndarrays.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-op The address to any Python object.
- This Python object will be replaced with an equivalent well-behaved, C-style
- contiguous, ndarray of the given data type specifice by the last two arguments.
- Be sure that stealing a reference in this way to the input object is justified.
-
-\end_layout
-
-\begin_layout Description
-ptr The address to a (ctype* for 1-d, ctype** for 2-d or ctype*** for 3-d)
- variable where ctype is the equivalent C-type for the data type.
- On return,
-\emph on
-ptr
-\emph default
- will be addressable as a 1-d, 2-d, or 3-d array.
-
-\end_layout
-
-\begin_layout Description
-dims An output array that contains the shape of the array object.
- This array gives boundaries on any looping that will take place.
-
-\end_layout
-
-\begin_layout Description
-nd The dimensionality of the array (1, 2, or 3).
-
-\end_layout
-
-\begin_layout Description
-typenum The expected data type of the array.
-
-\end_layout
-
-\begin_layout Description
-itemsize This argument is only needed when
-\emph on
-typenum
-\emph default
- represents a flexible array.
- Otherwise it should be 0.
-
-\end_layout
-
-\end_deeper
-\begin_layout Note
-The simulation of a C-style array is not complete for 2-d and 3-d arrays.
- For example, the simulated arrays of pointers cannot be passed to subroutines
- expecting specific, statically-defined 2-d and 3-d arrays.
- To pass to functions requiring those kind of inputs, you must statically
- define the required array and copy data.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Free (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-void*
-\family default
- ptr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Must be called with the same objects and memory locations returned from
-
-\family typewriter
-PyArray_AsCArray
-\family default
-(...).
- This function cleans up memory that otherwise would get leaked.
-\end_layout
-
-\begin_layout Description
-PyArray_Concatenate (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-int
-\family default
- axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Join the sequence of objects in
-\emph on
-obj
-\emph default
- together along
-\emph on
-axis
-\emph default
- into a single array.
- If the dimensions or types are not compatible an error is raised.
-\end_layout
-
-\begin_layout Description
-PyArray_InnerProduct (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj1,
-\family typewriter
-PyObject*
-\family default
- obj2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute a product-sum over the last dimensions of
-\emph on
-obj1
-\emph default
- and
-\emph on
-obj2
-\emph default
-.
- Neither array is conjugated.
-
-\end_layout
-
-\begin_layout Description
-PyArray_MatrixProduct (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj1,
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute a product-sum over the last dimension of
-\emph on
-obj1
-\emph default
- and the second-to-last dimension of
-\emph on
-obj2
-\emph default
-.
- For 2-d arrays this is a matrix-product.
- Neither array is conjugated.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CopyAndTranspose (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject
-\family default
-* op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A specialized copy and transpose function that works only for 2-d arrays.
- The returned array is a transposed copy of
-\emph on
-op
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_Correlate (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op1,
-\family typewriter
-PyObject*
-\family default
- op2,
-\family typewriter
-int
-\family default
- mode)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the 1-d correlation of the 1-d arrays
-\emph on
-op1
-\emph default
- and
-\emph on
-op2
-\emph default
-.
- The correlation is computed at each output point by multiplying
-\emph on
-op1
-\emph default
- by a shifted version of
-\emph on
-op2
-\emph default
- and summing the result.
- As a result of the shift, needed values outside of the defined range of
-
-\emph on
-op1
-\emph default
- and
-\emph on
-op2
-\emph default
- are interpreted as zero.
- The mode determines how many shifts to return: 0 - return only shifts that
- did not need to assume zero-values; 1 - return an object that is the same
- size as
-\emph on
-op1
-\emph default
-, 2 - return all possible shifts (any overlap at all is accepted).
-
-\end_layout
-
-\begin_layout Description
-PyArray_Where (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- condition,
-\family typewriter
-PyObject*
-\family default
- x,
-\family typewriter
-PyObject*
-\family default
- y)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If both
-\family typewriter
-x
-\family default
- and
-\family typewriter
-y
-\family default
- are
-\family typewriter
-NULL
-\family default
-, then return
-\family typewriter
-PyArray_Nonzero
-\family default
-(
-\family typewriter
-\emph on
-condition
-\family default
-\emph default
-).
- Otherwise, both
-\emph on
-x
-\emph default
- and
-\emph on
-y
-\emph default
- must be given and the object returned is shaped like
-\emph on
-condition
-\emph default
- and has elements of
-\emph on
-x
-\emph default
- and
-\emph on
-y
-\emph default
- where
-\emph on
-condition
-\emph default
- is respectively True or False.
-
-\end_layout
-
-\begin_layout Subsubsection
-Other functions
-\end_layout
-
-\begin_layout Description
-PyArray_CheckStrides (
-\family typewriter
-Bool
-\family default
-) (
-\family typewriter
-int
-\family default
- elsize,
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp
-\family default
- numbytes,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-npy_intp*
-\family default
- newstrides)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Determine if
-\emph on
-newstrides
-\emph default
- is a strides array consistent with the memory of an
-\emph on
-nd
-\emph default
--dimensional array with shape
-\family typewriter
-dims
-\family default
- and element-size,
-\emph on
-elsize
-\emph default
-.
- The
-\emph on
-newstrides
-\emph default
- array is checked to see if jumping by the provided number of bytes in each
- direction will ever mean jumping more than
-\emph on
-numbytes
-\emph default
- which is the assumed size of the available memory segment.
- If
-\emph on
-numbytes
-\emph default
- is 0, then an equivalent
-\emph on
-numbytes
-\emph default
- is computed assuming
-\emph on
-nd
-\emph default
-,
-\emph on
-dims
-\emph default
-, and
-\emph on
-elsize
-\emph default
- refer to a single-segment array.
- Return
-\family typewriter
-NPY_TRUE
-\family default
- if
-\emph on
-newstrides
-\emph default
- is acceptable, otherwise return
-\family typewriter
-NPY_FALSE
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_MultiplyList (
-\family typewriter
-npy_intp
-\family default
-) (
-\family typewriter
-npy_intp*
-\family default
- seq,
-\family typewriter
-int
-\family default
- n)
-\end_layout
-
-\begin_layout Description
-PyArray_MultiplyIntList (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-int*
-\family default
- seq,
-\family typewriter
-int
-\family default
- n)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Both of these routines multiply an
-\emph on
-n
-\emph default
--length array,
-\emph on
-seq
-\emph default
-, of integers and return the result.
- No overflow checking is performed.
-\end_layout
-
-\begin_layout Description
-PyArray_CompareLists (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-npy_intp*
-\family default
- l1,
-\family typewriter
-npy_intp*
-\family default
- l2,
-\family typewriter
-int
-\family default
- n)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Given two
-\emph on
-n
-\emph default
--length arrays of integers,
-\emph on
-l1
-\emph default
-, and
-\emph on
-l2
-\emph default
-, return 1 if the lists are identical; otherwise, return 0.
-
-\end_layout
-
-\begin_layout Subsection
-Array Iterators
-\end_layout
-
-\begin_layout Standard
-An array iterator is a simple way to access the elements of an N-dimensional
- array quickly and efficiently.
- Section
-\begin_inset LatexCommand ref
-reference "sec:array_iterator"
-
-\end_inset
-
- provides more description and examples of this useful approach to looping
- over an array.
-
-\end_layout
-
-\begin_layout Description
-PyArray_IterNew (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array iterator object from the array,
-\emph on
-arr
-\emph default
-.
- This is equivalent to
-\emph on
-arr
-\emph default
-.
-\series bold
-flat
-\series default
-.
- The array iterator object makes it easy to loop over an N-dimensional non-conti
-guous array in C-style contiguous fashion.
-
-\end_layout
-
-\begin_layout Description
-PyArray_IterAllButAxis (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- arr,
-\family typewriter
-int
-\family default
- *axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array iterator that will iterate over all axes but the one provided
- in
-\emph on
-*axis
-\emph default
-.
- The returned iterator cannot be used with
-\family typewriter
-PyArray_ITER_GOTO1D
-\family default
-.
- This iterator could be used to write something similar to what ufuncs do
- wherein the loop over the largest axis is done by a separate sub-routine.
- If
-\emph on
-*axis
-\emph default
- is negative then
-\emph on
-*axis
-\emph default
- will be set to the axis having the smallest stride and that axis will be
- used.
-
-\end_layout
-
-\begin_layout Description
-PyArray_BroadcastToShape (
-\family typewriter
-PyObject*
-\family default
-)(
-\family typewriter
-PyObject*
-\family default
- arr,
-\family typewriter
-npy_intp
-\family default
- *dimensions,
-\family typewriter
-int
-\family default
- nd)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array iterator that is broadcast to iterate as an array of the
- shape provided by
-\emph on
-dimensions
-\emph default
- and
-\emph on
-nd
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArrayIter_Check (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates true if
-\emph on
-op
-\emph default
- is an array iterator (or instance of a subclass of the array iterator type).
-
-\end_layout
-
-\begin_layout Description
-PyArray_ITER_RESET (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- iterator)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Reset an
-\emph on
-iterator
-\emph default
- to the beginning of the array.
-\end_layout
-
-\begin_layout Description
-PyArray_ITER_NEXT (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- iterator)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Incremement the index and the dataptr members of the
-\emph on
-iterator
-\emph default
- to point to the next element of the array.
- If the array is not (C-style) contiguous, also increment the N-dimensional
- coordinates array.
-\end_layout
-
-\begin_layout Description
-PyArray_ITER_DATA (
-\family typewriter
-void*
-\family default
-)(
-\family typewriter
-PyObject*
-\family default
- iterator)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A pointer to the current element of the array.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ITER_GOTO (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- iterator,
-\family typewriter
-npy_intp*
-\family default
- destination)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the
-\emph on
-iterator
-\emph default
- index, dataptr, and coordinates members to the location in the array indicated
- by the N-dimensional c-array,
-\emph on
-destination
-\emph default
-, which must have size at least
-\emph on
-iterator
-\emph default
-->nd_m1+1.
-\end_layout
-
-\begin_layout Description
-PyArray_ITER_GOTO1D (
-\family typewriter
-PyObject*
-\family default
- iterator,
-\family typewriter
-npy_intp
-\family default
- index)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the
-\emph on
-iterator
-\emph default
- index and dataptr to the location in the array indicated by the integer
-
-\emph on
-index
-\emph default
- which points to an element in the C-styled flattened array.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ITER_NOTDONE (
-\family typewriter
-int
-\family default
-)(
-\family typewriter
-PyObject*
-\family default
- iterator)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates TRUE as long as the iterator has not looped through all of the
- elements, otherwise it evaluates FALSE.
-
-\end_layout
-
-\begin_layout Subsection
-Broadcasting (multi-iterators)
-\end_layout
-
-\begin_layout Description
-PyArray_MultiIterNew (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- num, ...)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A simplified interface to broadcasting.
- This function takes the number of arrays to broadcast and then
-\emph on
-num
-\emph default
- extra (
-\family typewriter
-PyObject*
-\family default
-) arguments.
- These arguments are converted to arrays and iterators are created.
-
-\family typewriter
-PyArray_Broadcast
-\family default
- is then called on the resulting multi-iterator object.
- The resulting, broadcasted mult-iterator object is then returned.
- A broadcasted operation can then be performed using a single loop and using
-
-\family typewriter
-PyArray_MultiIter_NEXT
-\family default
-(..)
-\end_layout
-
-\begin_layout Description
-PyArray_MultiIter_RESET (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- multi)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Reset all the iterators to the beginning in a multi-iterator object,
-\emph on
-multi
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_MultiIter_NEXT (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- multi)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Advance each iterator in a multi-iterator object,
-\emph on
-multi
-\emph default
-, to its next (broadcasted) element.
-\end_layout
-
-\begin_layout Description
-PyArray_MultiIter_DATA (
-\family typewriter
-void*
-\family default
-)(
-\family typewriter
-PyObject*
-\family default
- multi,
-\family typewriter
-int
-\family default
- i)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the data-pointer of the
-\emph on
-i
-\emph default
-
-\begin_inset Formula $^{\textrm{th}}$
-\end_inset
-
- iterator in a multi-iterator object.
-
-\end_layout
-
-\begin_layout Description
-PyArray_MultiIter_NEXTi (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- multi,
-\family typewriter
-int
-\family default
- i)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Advance the pointer of only the
-\emph on
-i
-\emph default
-
-\begin_inset Formula $^{\textrm{th}}$
-\end_inset
-
- iterator.
-\end_layout
-
-\begin_layout Description
-PyArray_MultiIter_GOTO (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- multi,
-\family typewriter
-npy_intp*
-\family default
- destination)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Advance each iterator in a multi-iterator object,
-\emph on
-multi
-\emph default
-, to the given
-\begin_inset Formula $N$
-\end_inset
-
--dimensional
-\emph on
-destination
-\emph default
- where
-\begin_inset Formula $N$
-\end_inset
-
- is the number of dimensions in the broadcasted array.
-
-\end_layout
-
-\begin_layout Description
-PyArray_MultiIter_GOTO1D (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- multi,
-\family typewriter
-npy_intp
-\family default
- index)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Advance each iterator in a multi-iterator object,
-\emph on
-multi
-\emph default
-, to the corresponding location of the
-\emph on
-index
-\emph default
- into the flattened broadcasted array.
-
-\end_layout
-
-\begin_layout Description
-PyArray_MultiIter_NOTDONE (
-\family typewriter
-int
-\family default
-)(
-\family typewriter
-PyObject*
-\family default
- multi)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates TRUE as long as the multi-iterator has not looped through all
- of the elements (of the broadcasted result), otherwise it evaluates FALSE.
-
-\end_layout
-
-\begin_layout Description
-PyArray_Broadcast (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayMultiIterObject*
-\family default
- mit)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function encapsulates the broadcasting rules.
- The
-\emph on
-mit
-\emph default
- container should already contain iterators for all the arrays that need
- to be broadcast.
- On return, these iterators will be adjusted so that iteration over each
- simultaneously will accomplish the broadcasting.
- A negative number is returned if an error occurs.
-
-\end_layout
-
-\begin_layout Description
-PyArray_RemoveSmallest (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyArrayMultiIterObject*
-\family default
- mit)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function takes a multi-iterator object that has been previously
-\begin_inset Quotes eld
-\end_inset
-
-broadcasted,
-\begin_inset Quotes erd
-\end_inset
-
- finds the dimension with the smallest
-\begin_inset Quotes eld
-\end_inset
-
-sum of strides
-\begin_inset Quotes erd
-\end_inset
-
- in the broadcasted result and adapts all the iterators so as not to iterate
- over that dimension (by effectively making them of length-1 in that dimension).
- The corresponding dimension is returned unless
-\emph on
-mit
-\emph default
-->nd is 0, then -1 is returned.
- This function is useful for constructing ufunc-like routines that broadcast
- their inputs correctly and then call a strided 1-d version of the routine
- as the inner-loop.
- This 1-d version is usually optimized for speed and for this reason the
- loop should be performed over the axis that won't require large stride
- jumps.
-
-\end_layout
-
-\begin_layout Subsection
-Array Scalars
-\end_layout
-
-\begin_layout Description
-PyArray_Return (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyArrayObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function checks to see if
-\emph on
-arr
-\emph default
- is a 0-dimensional array and, if so, returns the appropriate array scalar.
- It should be used whenever 0-dimensional arrays could be returned to Python.
-\end_layout
-
-\begin_layout Description
-PyArray_Scalar (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-PyArray_Descr*
-\family default
- dtype,
-\family typewriter
-PyObject*
-\family default
- itemsize)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array scalar object of the given enumerated
-\emph on
-typenum
-\emph default
- and
-\emph on
-itemsize
-\emph default
- by
-\series bold
-copying
-\series default
- from memory pointed to by
-\emph on
-data
-\emph default
-.
- If
-\emph on
-swap
-\emph default
- is nonzero then this function will byteswap the data if appropriate to
- the data-type because array scalars are always in correct machine-byte
- order.
-\end_layout
-
-\begin_layout Description
-PyArray_ToScalar (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-void*
-\family default
- data,
-\family typewriter
-PyArrayObject*
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array scalar object of the type and itemsize indicated by the
- array object
-\emph on
-arr
-\emph default
- copied from the memory pointed to by
-\emph on
-data
-\emph default
- and swapping if the data in
-\emph on
-arr
-\emph default
- is not in machine byte-order.
-\end_layout
-
-\begin_layout Description
-PyArray_FromScalar (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- scalar,
-\family typewriter
-PyArray_Descr*
-\family default
- outcode)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 0-dimensional array of type determined by
-\emph on
-outcode
-\emph default
- from
-\emph on
-scalar
-\emph default
- which should be an array-scalar object.
- If
-\emph on
-outcode
-\emph default
- is NULL, then the type is determined from
-\family typewriter
-\emph on
-scalar
-\family default
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_ScalarAsCtype (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- scalar,
-\family typewriter
-void*
-\family default
- ctypeptr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return in
-\emph on
-ctypeptr
-\emph default
- a pointer to the actual value in an array scalar.
- There is no error checking so
-\emph on
-scalar
-\emph default
- must be an array-scalar object, and ctypeptr must have enough space to
- hold the correct type.
- For flexible-sized types, a pointer to the data is copied into the memory
- of
-\emph on
-ctypeptr
-\emph default
-, for all other types, the actual data is copied into the address pointed
- to by
-\emph on
-ctypeptr
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CastScalarToCtype (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- scalar,
-\family typewriter
-void*
-\family default
- ctypeptr,
-\family typewriter
-PyArray_Descr*
-\family default
- outcode)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the data (cast to the data type indicated by
-\emph on
-outcode
-\emph default
-) from the array-scalar,
-\emph on
-scalar
-\emph default
-, into the memory pointed to by
-\emph on
-ctypeptr
-\emph default
- (which must be large enough to handle the incoming memory).
-
-\end_layout
-
-\begin_layout Description
-PyArray_TypeObjectFromType (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- type)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a scalar type-object from a type-number,
-\emph on
-type
-\emph default
-.
- Equivalent to
-\family typewriter
-PyArray_DescrFromType
-\family default
-(
-\emph on
-type
-\emph default
-)->typeobj except for reference counting and error-checking.
- Returns a new reference to the typeobject on success or
-\family typewriter
-NULL
-\family default
- on failure.
-\end_layout
-
-\begin_layout Description
-PyArray_ScalarKind (
-\family typewriter
-NPY_SCALARKIND
-\family default
-) (
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-PyArrayObject**
-\family default
- arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the kind of scalar represented by
-\emph on
-typenum
-\emph default
- and the array in
-\emph on
-*arr
-\emph default
- (if
-\emph on
-arr
-\emph default
- is not
-\family typewriter
-NULL
-\family default
-).
- The array is assumed to be rank-0 and only used if
-\emph on
-typenum
-\emph default
- represents a signed integer.
- If
-\emph on
-arr
-\emph default
- is not
-\family typewriter
-NULL
-\family default
- and the first element is negative then
-\family typewriter
-NPY_INTNEG_SCALAR
-\family default
- is returned, otherwise
-\family typewriter
-NPY_INTPOS_SCALAR
-\family default
- is returned.
- The possible return values are
-\family typewriter
-NPY_
-\family default
-<kind>
-\family typewriter
-_SCALAR
-\family default
- where <kind> can be
-\series bold
-INTPOS
-\series default
-,
-\series bold
-INTNEG
-\series default
-,
-\series bold
-FLOAT
-\series default
-,
-\series bold
-COMPLEX
-\series default
-,
-\series bold
-BOOL
-\series default
-, or
-\series bold
-OBJECT
-\series default
-.
-
-\family typewriter
-NPY_NOSCALAR
-\family default
- is also an enumerated value
-\family typewriter
-NPY_SCALARKIND
-\family default
- variables can take on.
-
-\end_layout
-
-\begin_layout Description
-PyArray_CanCoerceScalar (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-char
-\family default
- thistype,
-\family typewriter
-char
-\family default
- neededtype,
-\family typewriter
-NPY_SCALARKIND
-\family default
- scalar)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Implements the rules for scalar coercion.
- Scalars are only silently coerced from thistype to neededtype if this function
- returns nonzero.
- If scalar is
-\family typewriter
-NPY_NOSCALAR
-\family default
-, then this function is equivalent to
-\family typewriter
-PyArray_CanCastSafely
-\family default
-.
- The rule is that scalars of the same KIND can be coerced into arrays of
- the same KIND.
- This rule means that high-precision scalars will never cause low-precision
- arrays of the same KIND to be upcast.
-
-\end_layout
-
-\begin_layout Subsection
-Data-type descriptors
-\end_layout
-
-\begin_layout Warning
-Data-type objects must be reference counted so be aware of the action on
- the data-type reference of different C-API calls.
- The standard rule is that when a data-type object is returned it is a new
- reference.
- Functions that take
-\family typewriter
-PyArray_Descr*
-\family default
- objects and return arrays steal references to the data-type their inputs
- unless otherwise noted.
- Therefore, you must own a reference to any data-type object used as input
- to such a function.
-
-\end_layout
-
-\begin_layout Description
-PyArray_DescrCheck (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates as true if
-\emph on
-obj
-\emph default
- is a data-type object (
-\family typewriter
-PyArray_Descr*
-\family default
-).
-\end_layout
-
-\begin_layout Description
-PyArray_DescrNew (
-\family typewriter
-PyArray_Descr*
-\family default
-) (
-\family typewriter
-PyArray_Descr*
-\family default
- obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new data-type object copied from
-\emph on
-obj
-\emph default
- (the fields reference is just updated so that the new object points to
- the same fields dictionary if any).
-
-\end_layout
-
-\begin_layout Description
-PyArray_DescrNewFromType (
-\family typewriter
-PyArray_Descr*
-\family default
-) (
-\family typewriter
-int
-\family default
- typenum)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new data-type object from the built-in (or user-registered) data-type
- indicated by
-\emph on
-typenum
-\emph default
-.
- All builtin types should not have any of their fields changed.
- This creates a new copy of the
-\family typewriter
-PyArray_Descr
-\family default
- structure so that you can fill it in as appropriate.
- This function is especially needed for flexible data-types which need to
- have a new elsize member in order to be meaningful in array construction.
-
-\end_layout
-
-\begin_layout Description
-PyArray_DescrNewByteorder (
-\family typewriter
-PyArray_Descr*
-\family default
-) (
-\family typewriter
-PyArray_Descr*
-\family default
- obj,
-\family typewriter
-char
-\family default
- newendian)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new data-type object with the byteorder set according to
-\emph on
-newendian
-\emph default
-.
- All referenced data-type objects (in subdescr and fields members of the
- data-type object) are also changed (recursively).
- If a byteorder of
-\family typewriter
-NPY_IGNORE
-\family default
- is encountered it is left alone.
- If newendian is
-\family typewriter
-NPY_SWAP
-\family default
-, then all byte-orders are swapped.
- Other valid newendian values are
-\family typewriter
-NPY_NATIVE
-\family default
-,
-\family typewriter
-NPY_LITTLE
-\family default
-, and
-\family typewriter
-NPY_BIG
-\family default
- which all cause the returned data-typed descriptor (and all it's referenced
- data-type descriptors) to have the corresponding byte-order.
-\end_layout
-
-\begin_layout Description
-PyArray_DescrFromObject (
-\family typewriter
-PyArray_Descr*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-PyArray_Descr*
-\family default
- mintype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Determine an appropriate data-type object from the object
-\emph on
-op
-\emph default
- (which should be a
-\begin_inset Quotes eld
-\end_inset
-
-nested
-\begin_inset Quotes erd
-\end_inset
-
- sequence object) and the minimum data-type descriptor mintype (which can
- be
-\family typewriter
-NULL
-\family default
-).
- Similar in behavior to array(
-\emph on
-op
-\emph default
-).dtype.
- Don't confuse this function with
-\family typewriter
-PyArray_DescrConverter
-\family default
-.
- This function essentially looks at all the objects in the (nested) sequence
- and determines the data-type from the elements it finds.
-
-\end_layout
-
-\begin_layout Description
-PyArray_DescrFromScalar (
-\family typewriter
-PyArray_Descr*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- scalar)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a data-type object from an array-scalar object.
- No checking is done to be sure that
-\emph on
-scalar
-\emph default
- is an array scalar.
- If no suitable data-type can be determined, then a data-type of NPY_OBJECT
- is returned by default.
-
-\end_layout
-
-\begin_layout Description
-PyArray_DescrFromType (
-\family typewriter
-PyArray_Descr*
-\family default
-) (
-\family typewriter
-int
-\family default
- typenum)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a data-type object corresponding to
-\emph on
-typenum
-\emph default
-.
- The
-\emph on
-typenum
-\emph default
- can be one of the enumerated types, a character code for one of the enumerated
- types, or a user-defined type.
-
-\end_layout
-
-\begin_layout Description
-PyArray_DescrConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-PyArray_Descr**
-\family default
- dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert any compatible Python object,
-\emph on
-obj
-\emph default
-, to a data-type object in
-\emph on
-dtype
-\emph default
-.
- A large number of Python objects can be converted to data-type objects.
- See Chapter
-\begin_inset LatexCommand ref
-reference "cha:Data-descriptor-objects"
-
-\end_inset
-
- for a complete description.
- This version of the converter converts None objects to a
-\family typewriter
-NPY_DEFAULT_TYPE
-\family default
- data-type object.
- This function can be used with the
-\begin_inset Quotes eld
-\end_inset
-
-O&
-\begin_inset Quotes erd
-\end_inset
-
- character code in PyArg_ParseTuple processing.
-
-\end_layout
-
-\begin_layout Description
-PyArray_DescrConverter2 (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-PyArray_Descr**
-\family default
- dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert any compatible Python object,
-\emph on
-obj
-\emph default
-, to a data-type object in
-\emph on
-dtype
-\emph default
-.
- This version of the converter converts None objects so that the returned
- data-type is
-\family typewriter
-NULL
-\family default
-.
- This function can also be used with the
-\begin_inset Quotes eld
-\end_inset
-
-O&
-\begin_inset Quotes erd
-\end_inset
-
- character in PyArg_ParseTuple processing.
-\end_layout
-
-\begin_layout Description
-Pyarray_DescrAlignConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-PyArray_Descr**
-\family default
- dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Like
-\family typewriter
-PyArray_DescrConverter
-\family default
- except it aligns C-struct-like objects on word-boundaries as the compiler
- would.
-\end_layout
-
-\begin_layout Description
-Pyarray_DescrAlignConverter2 (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-PyArray_Descr**
-\family default
- dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Like
-\family typewriter
-PyArray_DescrConverter2
-\family default
- except it aligns C-struct-like objects on word-boundaries as the compiler
- would.
-\end_layout
-
-\begin_layout Description
-PyArray_FieldNames (
-\family typewriter
-PyObject*
-\family default
-)(
-\family typewriter
-PyObject*
-\family default
- dict)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Take the fields dictionary,
-\family typewriter
-\emph on
-dict
-\family default
-\emph default
-, such as the one attached to a data-type object and construct an ordered-list
- of field names such as is stored in the names field of the
-\family typewriter
-PyArray_Descr
-\family default
- object.
-
-\end_layout
-
-\begin_layout Subsection
-Conversion Utilities
-\end_layout
-
-\begin_layout Subsubsection
-For use with
-\family typewriter
-PyArg_ParseTuple
-\end_layout
-
-\begin_layout Standard
-All of these functions can be used in
-\family typewriter
-PyArg_ParseTuple
-\family default
-(...) with the
-\begin_inset Quotes eld
-\end_inset
-
-O&
-\begin_inset Quotes erd
-\end_inset
-
- format specifier to automatically convert any Python object to the required
- C-object.
- All of these functions return
-\family typewriter
-NPY_SUCCEED
-\family default
- if successful and
-\family typewriter
-NPY_FAIL
-\family default
- if not.
- The first argument to all of these function is a Python object.
- The second argument is the
-\series bold
-address
-\series default
- of the C-type to convert the Python object to.
-
-\end_layout
-
-\begin_layout Warning
-Be sure to understand what steps you should take to manage the memory when
- using these conversion functions.
- These functions can require freeing memory, and/or altering the reference
- counts of specific objects based on your use.
-\end_layout
-
-\begin_layout Description
-PyArray_Converter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-PyObject**
-\family default
- address)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert any Python object to a
-\family typewriter
-PyArrayObject
-\family default
-.
- If
-\family typewriter
-PyArray_Check
-\family default
-(
-\family typewriter
-\emph on
-obj
-\family default
-\emph default
-) is TRUE then its reference count is incremented and a reference placed
- in
-\emph on
-address
-\emph default
-.
- If
-\emph on
-obj
-\emph default
- is not an array, then convert it to an array using
-\family typewriter
-PyArray_FromAny
-\family default
-.
- No matter what is returned, you must DECREF the object returned by this
- routine in
-\emph on
-address
-\emph default
- when you are done with it.
-
-\end_layout
-
-\begin_layout Description
-PyArray_OutputConverter (
-\family typewriter
-int
-\family default
-)(
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-PyArrayObject**
-\family default
- address)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is a default converter for output arrays given to functions.
- If
-\emph on
-obj
-\emph default
- is
-\family typewriter
-Py_None
-\family default
- or
-\family typewriter
-NULL
-\family default
-, then
-\emph on
-*address
-\emph default
- will be
-\family typewriter
-NULL
-\family default
- but the call will succeed.
- If
-\family typewriter
-PyArray_Check
-\family default
-(
-\emph on
-obj
-\emph default
-) is TRUE then it is returned in
-\emph on
-*address
-\emph default
- without incrementing its reference count.
-
-\end_layout
-
-\begin_layout Description
-PyArray_IntpConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-PyArray_Dims*
-\family default
- seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert any Python sequence,
-\emph on
-obj
-\emph default
-, smaller than
-\family typewriter
-NPY_MAXDIMS
-\family default
- to a C-array of
-\family typewriter
-npy_intp
-\family default
-.
- The Python object could also be a single number.
- The
-\emph on
-seq
-\emph default
- variable is a pointer to a structure with members ptr and len.
- On successful return,
-\emph on
-seq
-\emph default
-->ptr contains a pointer to memory that must be freed to avoid a memory
- leak.
- The restriction on memory size allows this converter to be conveniently
- used for sequences intended to be interpreted as array shapes.
-
-\end_layout
-
-\begin_layout Description
-PyArray_BufferConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-PyArray_Chunk*
-\family default
- buf)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert any Python object,
-\emph on
-obj
-\emph default
-, with a (single-segment) buffer interface to a variable with members that
- detail the object's use of its chunk of memory.
- The
-\emph on
-buf
-\emph default
- variable is a pointer to a structure with base, ptr, len, and flags members.
- The
-\family typewriter
-PyArray_Chunk
-\family default
- structure is binary compatibile with the Python's buffer object (through
- its len member on 32-bit platforms and its ptr member on 64-bit platforms
- or in Python 2.5).
- On return, the base member is set to
-\emph on
-obj
-\emph default
- (or its base if
-\emph on
-obj
-\emph default
- is already a buffer object pointing to another object).
- If you need to hold on to the memory be sure to INCREF the base member.
- The chunk of memory is pointed to by
-\emph on
-buf
-\emph default
-->ptr member and has length
-\emph on
-buf
-\emph default
-->len.
- The flags member of
-\emph on
-buf
-\emph default
- is
-\family typewriter
-NPY_BEHAVED_RO
-\family default
- with the
-\family typewriter
-NPY_WRITEABLE
-\family default
- flag set if
-\emph on
-obj
-\emph default
- has a writeable buffer interface.
-
-\end_layout
-
-\begin_layout Description
-PyArray_AxisConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject
-\family default
-* obj,
-\family typewriter
-int*
-\family default
- axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert a Python object,
-\emph on
-obj
-\emph default
-, representing an axis argument to the proper value for passing to the functions
- that take an integer axis.
- Specifically, if
-\emph on
-obj
-\emph default
- is None,
-\emph on
-axis
-\emph default
- is set to
-\family typewriter
-NPY_MAXDIMS
-\family default
- which is interpreted correctly by the C-API functions that take axis arguments.
-\end_layout
-
-\begin_layout Description
-PyArray_BoolConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-Bool*
-\family default
- value)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert any Python object,
-\emph on
-obj
-\emph default
-, to
-\family typewriter
-NPY_TRUE
-\family default
- or
-\family typewriter
-NPY_FALSE
-\family default
-, and place the result in
-\emph on
-value
-\emph default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_ByteorderConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-char*
-\family default
- endian)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert Python strings into the corresponding byte-order character: '>',
- '<', 's', '=', or '|'.
-
-\end_layout
-
-\begin_layout Description
-PyArray_SortkindConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-NPY_SORTKIND*
-\family default
- sort)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert Python strings into one of
-\family typewriter
-NPY_QUICKSORT
-\family default
- (starts with 'q' or 'Q') ,
-\family typewriter
-NPY_HEAPSORT
-\family default
- (starts with 'h' or 'H'), or
-\family typewriter
-NPY_MERGESORT
-\family default
- (starts with 'm' or 'M').
-
-\end_layout
-
-\begin_layout Description
-PyArray_SearchsideConverter (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-NPY_SEARCHSIDE*
-\family default
- side)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert Python strings into one of
-\family typewriter
-NPY_SEARCHLEFT
-\family default
- (starts with 'l' or 'L'), or
-\family typewriter
-NPY_SEARCHRIGHT
-\family default
- (starts with 'r' or 'R').
-
-\end_layout
-
-\begin_layout Subsubsection
-Other conversions
-\end_layout
-
-\begin_layout Description
-PyArray_PyIntAsInt (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert all kinds of Python objects (including arrays and array scalars)
- to a standard integer.
- On error, -1 is returned and an exception set.
- You may find useful the macro:
-\end_layout
-
-\begin_layout LyX-Code
-#define error_converting(x) (((x) == -1) && PyErr_Occurred()
-\end_layout
-
-\begin_layout Description
-PyArray_PyIntAsIntp (
-\family typewriter
-npy_intp
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert all kinds of Python objects (including arrays and array scalars)
- to a (platform-pointer-sized) integer.
- On error, -1 is returned and an exception set.
-
-\end_layout
-
-\begin_layout Description
-PyArray_IntpFromSequence (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- seq,
-\family typewriter
-npy_intp*
-\family default
- vals,
-\family typewriter
-int
-\family default
- maxvals)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert any Python sequence (or single Python number) passed in as
-\emph on
-seq
-\emph default
- to (up to)
-\emph on
-maxvals
-\emph default
- pointer-sized integers and place them in the
-\emph on
-vals
-\emph default
- array.
- The sequence can be smaller then
-\emph on
-maxvals
-\emph default
- as the number of converted objects is returned.
-
-\end_layout
-
-\begin_layout Description
-PyArray_TypestrConvert (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-int
-\family default
- itemsize,
-\family typewriter
-int
-\family default
- gentype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert typestring characters (with
-\emph on
-itemsize
-\emph default
-) to basic enumerated data types.
- The typestring character corresponding to signed and unsigned integers,
- floating point numbers, and complex-floating point numbers are recognized
- and converted.
- Other values of gentype are returned.
- This function can be used to convert, for example, the string 'f4' to
-\family typewriter
-NPY_FLOAT32
-\family default
-.
-
-\end_layout
-
-\begin_layout Subsection
-Miscellaneous
-\end_layout
-
-\begin_layout Subsubsection
-Importing the API
-\end_layout
-
-\begin_layout Standard
-In order to make use of the C-API from another extension module, the
-\family typewriter
-import_array
-\family default
-() command must be used.
- If the extension module is self-contained in a single .c file, then that
- is all that needs to be done.
- If, however, the extension module involves multiple files where the C-API
- is needed then some additional steps must be taken.
-\end_layout
-
-\begin_layout Description
-import_array (void) (void)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function must be called in the initialization section of a module
- that will make use of the C-API.
- It imports the module where the function-pointer table is stored and points
- the correct variable to it.
-
-\end_layout
-
-\begin_layout Description
-PY_ARRAY_UNIQUE_SYMBOL
-\end_layout
-
-\begin_layout Description
-NO_IMPORT_ARRAY
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Using these #defines you can use the C-API in multiple files for a single
- extension module.
- In each file you must define
-\family typewriter
-PY_ARRAY_UNIQUE_SYMBOL
-\family default
- to some name that will hold the C-API (
-\emph on
-e.g.
-
-\emph default
- myextension_ARRAY_API).
- This must be done
-\series bold
-before
-\series default
- including the numpy/arrayobject.h file.
- In the module intialization routine you call
-\family typewriter
-import_array
-\family default
-().
- In addition, in the files that do not have the module initialization sub_routin
-e define
-\family typewriter
-NO_IMPORT_ARRAY
-\family default
- prior to including numpy/arrayobject.h.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Suppose I have two files coolmodule.c and coolhelper.c which need to be compiled
- and linked into a single extension module.
- Suppose coolmodule.c contains the required initcool module initialization
- function (with the import_array() function called).
- Then, coolmodule.c would have at the top:
-\end_layout
-
-\begin_layout LyX-Code
-#define PY_ARRAY_UNIQUE_SYMBOL cool_ARRAY_API
-\end_layout
-
-\begin_layout LyX-Code
-#include numpy/arrayobject.h
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- On the other hand, coolhelper.c would contain at the top:
-\end_layout
-
-\begin_layout LyX-Code
-#define PY_ARRAY_UNIQUE_SYMBOL cool_ARRAY_API
-\end_layout
-
-\begin_layout LyX-Code
-#define NO_IMPORT_ARRAY
-\end_layout
-
-\begin_layout LyX-Code
-#include numpy/arrayobject.h
-\end_layout
-
-\begin_layout Description
-PyArray_GetNDArrayCVersion (
-\family typewriter
-unsigned
-\family default
-
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-void
-\family default
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This just returns the value
-\family typewriter
-NPY_VERSION
-\family default
-.
- Because it is in the C-API, however, comparing the output of this function
- from the value defined in the current header gives a way to test if the
- C-API has changed thus requiring a re-compilation of extension modules
- that use the C-API.
-
-\end_layout
-
-\begin_layout Subsubsection
-Internal Flexibility
-\end_layout
-
-\begin_layout Description
-PyArray_SetNumericOps (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- dict)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- NumPy stores an internal table of Python callable objects that are used
- to implement arithmetic operations for arrays as well as certain array
- calculation methods.
- This function allows the user to replace any or all of these Python objects
- with their own versions.
- The keys of the dictionary,
-\emph on
-dict
-\emph default
-, are the named functions to replace and the paired value is the Python
- callable object to use.
- Care should be taken that the function used to replace an internal array
- operation does not itself call back to that internal array operation (unless
- you have designed the function to handle that), or an unchecked infinite
- recursion can result (possibly causing program crash).
- The key names that represent operations that can be replaced are:
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-add
-\series default
-,
-\series bold
-subtract
-\series default
-,
-\series bold
-multiply
-\series default
-,
-\series bold
-divide
-\series default
-,
-\series bold
-remainder
-\series default
-,
-\series bold
-power
-\series default
-,
-\series bold
-square, reciprocal, ones_like, sqrt
-\series default
-,
-\series bold
-negative
-\series default
-,
-\series bold
-absolute
-\series default
-,
-\series bold
-invert
-\series default
-,
-\series bold
-left_shift
-\series default
-,
-\series bold
-right_shift
-\series default
-,
-\series bold
-bitwise_and
-\series default
-,
-\series bold
-bitwise_xor
-\series default
-,
-\series bold
-bitwise_or
-\series default
-,
-\series bold
-less
-\series default
-,
-\series bold
-less_equal
-\series default
-,
-\series bold
-equal
-\series default
-,
-\series bold
-not_equal
-\series default
-,
-\series bold
-greater
-\series default
-,
-\series bold
-greater_equal
-\series default
-,
-\series bold
-floor_divide
-\series default
-,
-\series bold
-true_divide
-\series default
-,
-\series bold
-logical_or
-\series default
-,
-\series bold
-logical_and
-\series default
-,
-\series bold
-floor
-\series default
-,
-\series bold
-ceil
-\series default
-,
-\series bold
-maximum
-\series default
-,
-\series bold
-minimum
-\series default
-,
-\series bold
-rint
-\series default
-.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are included here because they are used at least once in
- the array object's methods.
- The function returns -1 (without setting a Python Error) if one of the
- objects being assigned is not callable.
-\end_layout
-
-\begin_layout Description
-PyArray_GetNumericOps (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-void
-\family default
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a Python dictionary containing the callable Python objects stored
- in the the internal arithmetic operation table.
- The keys of this dictionary are given in the explanation for
-\family typewriter
-PyArray_SetNumericOps
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyArray_SetStringFunction (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- op,
-\family typewriter
-int
-\family default
- repr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function allows you to alter the tp_str and tp_repr methods of the
- array object to any Python function.
- Thus you can alter what happens for all arrays when str(arr) or repr(arr)
- is called from Python.
- The function to be called is passed in as
-\emph on
-op
-\emph default
-.
- If
-\emph on
-repr
-\emph default
- is non-zero, then this function will be called in response to repr(arr),
- otherwise the function will be called in response to str(arr).
- No check on whether or not
-\emph on
-op
-\emph default
- is callable is performed.
- The callable passed in to
-\emph on
-op
-\emph default
- should expect an array argument and should return a string to be printed.
-\end_layout
-
-\begin_layout Subsubsection
-Memory management
-\end_layout
-
-\begin_layout Description
-PyDataMem_NEW (
-\family typewriter
-char*
-\family default
-) (
-\family typewriter
-size_t
-\family default
- nbytes)
-\end_layout
-
-\begin_layout Description
-PyDataMem_FREE (
-\family typewriter
-char*
-\family default
- ptr)
-\end_layout
-
-\begin_layout Description
-PyDataMem_RENEW (
-\family typewriter
-char*
-\family default
-) (
-\family typewriter
-void *
-\family default
- ptr,
-\family typewriter
-size_t
-\family default
- newbytes)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Macros to allocate, free, and reallocate memory.
- These macros are used internally to create arrays.
-\end_layout
-
-\begin_layout Description
-PyDimMem_NEW (
-\family typewriter
-npy_intp*
-\family default
-) (nd)
-\end_layout
-
-\begin_layout Description
-PyDimMem_FREE (
-\family typewriter
-npy_intp*
-\family default
- ptr)
-\end_layout
-
-\begin_layout Description
-PyDimMem_RENEW (
-\family typewriter
-npy_intp*
-\family default
-) (
-\family typewriter
-npy_intp*
-\family default
- ptr,
-\family typewriter
-npy_intp
-\family default
- newnd)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Macros to allocate, free, and reallocate dimension and strides memory.
-\end_layout
-
-\begin_layout Description
-PyArray_malloc (nbytes)
-\end_layout
-
-\begin_layout Description
-PyArray_free (ptr)
-\end_layout
-
-\begin_layout Description
-PyArray_realloc (ptr, nbytes)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These macros use different memory allocators, depending on the constant
-
-\family typewriter
-NPY_USE_PYMEM
-\family default
-.
- The system malloc is used when NPY_USE_PYMEM is 0, if NPY_USE_PYMEM is
- 1, then the Python memory allocator is used.
-
-\end_layout
-
-\begin_layout Subsubsection
-Threading support
-\end_layout
-
-\begin_layout Standard
-These macros are only meaningful if
-\family typewriter
-NPY_ALLOW_THREADS
-\family default
- evaluates True during compilation of the extension module.
- Otherwise, these macros are equivalent to whitespace.
- Python uses a single Global Interpreter Lock (GIL) for each Python process
- so that only a single thread may excecute at a time (even on multi-cpu
- machines).
- When calling out to a compiled function that may take time to compute (and
- does not have side-effects for other threads like updated global variables),
- the GIL should be released so that other Python threads can run while the
- time-consuming calculations are performed.
- This can be accomplished using two groups of macros.
- Typically, if one macro in a group is used in a code block, all of them
- must be used in the same code block.
- Currently,
-\family typewriter
-NPY_ALLOW_THREADS
-\family default
- is defined to the python-defined
-\family typewriter
-WITH_THREADS
-\family default
- constant unless the environment variable
-\family typewriter
-NPY_NOSMP
-\family default
- is set in which case
-\family typewriter
-NPY_ALLOW_THREADS
-\family default
- is defined to be 0.
-
-\end_layout
-
-\begin_layout Description
-Group\InsetSpace ~
-1 This group is used to call code that may take some time but does
- not use any Python C-API calls.
- Thus, the GIL should be released during its calculation.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-NPY_BEGIN_ALLOW_THREADS Equivalent to
-\family typewriter
-Py_BEGIN_ALLOW_THREADS
-\family default
- except it uses
-\family typewriter
-NPY_ALLOW_THREADS
-\family default
- to determine if the macro if replaced with white-space or not.
-
-\end_layout
-
-\begin_layout Description
-NPY_END_ALLOW_THREADS Equivalent to
-\family typewriter
-Py_END_ALLOW_THREADS
-\family default
- except it uses
-\family typewriter
-NPY_ALLOW_THREADS
-\family default
- to determine if the macro if replaced with white-space or not.
-
-\end_layout
-
-\begin_layout Description
-NPY_BEGIN_THREADS_DEF Place in the variable declaration area.
- This macro sets up the variable needed for storing the Python state.
-\end_layout
-
-\begin_layout Description
-NPY_BEGIN_THREADS Place right before code that does not need the Python
- interpreter (no Python C-API calls).
- This macro saves the Python state and releases the GIL.
-\end_layout
-
-\begin_layout Description
-NPY_END_THREADS Place right after code that does not need the Python interpreter.
- This macro acquires the GIL and restores the Python state from the saved
- variable.
-\end_layout
-
-\begin_layout Description
-NPY_BEGIN_THREADS_DESCR (
-\family typewriter
-PyArray_Descr*
-\family default
- dtype) Useful to release the GIL only if
-\emph on
-dtype
-\emph default
- does not contain arbitrary Python objects which may need the Python interpreter
- during execution of the loop.
- Equivalent to
-\end_layout
-
-\begin_layout Description
-NPY_END_THREADS_DESCR (
-\family typewriter
-PyArray_Descr*
-\family default
- dtype) Useful to regain the GIL in situations where it was released using
- the BEGIN form of this macro.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-Group\InsetSpace ~
-2 This group is used to re-acquire the Python GIL after it has been
- released.
- For example, suppose the GIL has been released (using the previous calls),
- and then some path in the code (perhaps in a different subroutine) requires
- use of the Python C-API, then these macros are useful to acquire the GIL.
- These macros accomplish essentially a reverse of the previous three (acquire
- the LOCK saving what state it had) and then re-release it with the saved
- state.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-NPY_ALLOW_C_API_DEF Place in the variable declaration area to set up the
- necessary variable.
-
-\end_layout
-
-\begin_layout Description
-NPY_ALLOW_C_API Place before code that needs to call the Python C-API (when
- it is known that the GIL has already been released).
-
-\end_layout
-
-\begin_layout Description
-NPY_DISABLE_C_API Place after code that needs to call the Python C-API (to
- re-release the GIL).
-
-\end_layout
-
-\end_deeper
-\begin_layout Tip
-Never use semicolons after the threading support macros.
-\end_layout
-
-\begin_layout Subsubsection
-Priority
-\end_layout
-
-\begin_layout Description
-NPY_PRIOIRTY Default priority for arrays.
-\end_layout
-
-\begin_layout Description
-NPY_SUBTYPE_PRIORITY Default subtype priority.
-\end_layout
-
-\begin_layout Description
-NPY_SCALAR_PRIORITY Default scalar priority (very small)
-\end_layout
-
-\begin_layout Description
-PyArray_GetPriority (
-\family typewriter
-double
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-double
-\family default
- def)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\series bold
-__array_priority__
-\series default
- attribute (converted to a double) of
-\emph on
-obj
-\emph default
- or
-\emph on
-def
-\emph default
- if no attribute of that name exists.
- Fast returns that avoid the attribute lookup are provided for objects of
- type
-\family typewriter
-PyArray_Type
-\family default
-.
-
-\end_layout
-
-\begin_layout Subsubsection
-Default buffers
-\end_layout
-
-\begin_layout Description
-NPY_BUFSIZE Default size of the user-settable internal buffers.
-\end_layout
-
-\begin_layout Description
-NPY_MIN_BUFSIZE Smallest size of user-settable internal buffers.
-\end_layout
-
-\begin_layout Description
-NPY_MAX_BUFSIZE Largest size allowed for the user-settable buffers.
-\end_layout
-
-\begin_layout Subsubsection
-Other constants
-\end_layout
-
-\begin_layout Description
-NPY_NUM_FLOATTYPE The number of floating-point types
-\end_layout
-
-\begin_layout Description
-NPY_MAXDIMS The maximum number of dimensions allowed in arrays.
-\end_layout
-
-\begin_layout Description
-NPY_VERSION The current version of the ndarray object (check to see if this
- variable is defined to guarantee the numpy/arrayobject.h header is being
- used).
-
-\end_layout
-
-\begin_layout Description
-NPY_FALSE Defined as 0 for use with Bool.
-\end_layout
-
-\begin_layout Description
-NPY_TRUE Defined as 1 for use with Bool.
-\end_layout
-
-\begin_layout Description
-NPY_FAIL The return value of failed converter functions which are called
- using the
-\begin_inset Quotes eld
-\end_inset
-
-O&
-\begin_inset Quotes erd
-\end_inset
-
- syntax in PyArg_ParseTuple-like functions.
-\end_layout
-
-\begin_layout Description
-NPY_SUCCEED The return value of successful converter functions which are
- called using the
-\begin_inset Quotes eld
-\end_inset
-
-O&
-\begin_inset Quotes erd
-\end_inset
-
- syntax in PyArg_ParseTuple-like functions.
-\end_layout
-
-\begin_layout Subsubsection
-Miscellaneous Macros
-\end_layout
-
-\begin_layout Description
-PyArray_SAMESHAPE (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluates as True if arrays
-\emph on
-a1
-\emph default
- and
-\emph on
-a2
-\emph default
- have the same shape.
-
-\end_layout
-
-\begin_layout Description
-PyArray_MAX (a,b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the maximum of
-\emph on
-a
-\emph default
- and
-\emph on
-b
-\emph default
-.
- If (
-\emph on
-a
-\emph default
-) or (
-\emph on
-b
-\emph default
-) are expressions they are evaluated twice.
-\end_layout
-
-\begin_layout Description
-PyArray_MIN (a,b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the minimum of
-\emph on
-a
-\emph default
- and
-\emph on
-b
-\emph default
-.
- If (
-\emph on
-a
-\emph default
-) or (
-\emph on
-b
-\emph default
-) are expressions they are evaluated twice.
-\end_layout
-
-\begin_layout Description
-PyArray_CLT (a,b)
-\end_layout
-
-\begin_layout Description
-PyArray_CGT (a,b)
-\end_layout
-
-\begin_layout Description
-PyArray_CLE (a,b)
-\end_layout
-
-\begin_layout Description
-PyArray_CGE (a,b)
-\end_layout
-
-\begin_layout Description
-PyArray_CEQ (a,b)
-\end_layout
-
-\begin_layout Description
-PyArray_CNE (a,b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Implements the complex comparisons between two complex numbers (structures
- with a real and imag member) using NumPy's definition of the ordering which
- is lexicographic: comparing the real parts first and then the complex parts
- if the real parts are equal.
-
-\end_layout
-
-\begin_layout Description
-PyArray_REFCOUNT (
-\family typewriter
-PyObject*
-\family default
- op)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the reference count of any Python object.
-
-\end_layout
-
-\begin_layout Description
-PyArray_XDECREF_ERR (PyObject *obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- DECREF's an array object which may have the
-\family typewriter
-NPY_UPDATEIFCOPY
-\family default
- flag set without causing the contents to be copied back into the original
- array.
- Resets the
-\family typewriter
-NPY_WRITEABLE
-\family default
- flag on the base object.
- This is useful for recovering from an error condition when
-\family typewriter
-NPY_UPDATEIFCOPY
-\family default
- is used.
-
-\end_layout
-
-\begin_layout Subsubsection
-Enumerated Types
-\end_layout
-
-\begin_layout Description
-NPY_SORTKIND A special variable-type which can take on the values
-\series bold
-NPY_
-\series default
-<KIND> where <KIND> is
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-QUICKSORT
-\series default
-,
-\series bold
-HEAPSORT
-\series default
-,
-\series bold
-MERGESORT
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\series bold
-NPY_NSORTS
-\series default
- is defined to be the number of sorts.
-\end_layout
-
-\begin_layout Description
-NPY_SCALARKIND A special variable type indicating the number of
-\begin_inset Quotes eld
-\end_inset
-
-kinds
-\begin_inset Quotes erd
-\end_inset
-
- of scalars distinguished in determining scalar-coercion rules.
- This variable can take on the values NPY_<KIND> where <KIND> can be
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-NOSCALAR
-\series default
-,
-\series bold
-BOOL_SCALAR
-\series default
-,
-\series bold
-INTPOS_SCALAR
-\series default
-,
-\series bold
-INTNEG_SCALAR
-\series default
-,
-\series bold
-FLOAT_SCALAR
-\series default
-,
-\series bold
-COMPLEX_SCALAR
-\series default
-,
-\series bold
-OBJECT_SCALAR
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\series bold
-NPY_NSCALARKINDS
-\series default
- is defined to be the number of scalar kinds (not including
-\family typewriter
-NPY_NOSCALAR
-\family default
-).
-
-\end_layout
-
-\begin_layout Description
-NPY_ORDER A variable type indicating the order that an array should be interpret
-ed in.
- The value of a variable of this type can be
-\series bold
-NPY_
-\series default
-<ORDER> where <ORDER> is
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-ANYORDER
-\series default
-,
-\series bold
-CORDER
-\series default
-,
-\series bold
-FORTRANORDER
-\end_layout
-
-\begin_layout Description
-NPY_CLIPMODE A variable type indicating the kind of clipping that should
- be applied in certain functions.
- The value of a variable of this type can be
-\series bold
-NPY_
-\series default
-<MODE> where <MODE> is
-\end_layout
-
-\begin_layout Quote
-
-\series bold
-CLIP
-\series default
-,
-\series bold
-WRAP
-\series default
-,
-\series bold
-RAISE
-\begin_inset LatexCommand index
-name "ndarray!C-API|)"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "C-API!array|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-UFunc API
-\begin_inset LatexCommand index
-name "ufunc!C-API|("
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "C-API!ufunc|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Constants
-\end_layout
-
-\begin_layout Description
-UFUNC_ERR_<HANDLER>
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- <HANDLER> can be
-\series bold
-IGNORE
-\series default
-,
-\series bold
-WARN
-\series default
-,
-\series bold
-RAISE
-\series default
-, or
-\series bold
-CALL
-\end_layout
-
-\begin_layout Description
-UFUNC_<THING>_<ERR>
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- <THING> can be
-\series bold
-MASK
-\series default
-,
-\series bold
-SHIFT
-\series default
-, or
-\series bold
-FPE
-\series default
-, and <ERR> can be
-\series bold
-DIVIDEBYZERO
-\series default
-,
-\series bold
-OVERFLOW
-\series default
-,
-\series bold
-UNDERFLOW
-\series default
-, and
-\series bold
-INVALID
-\series default
-.
-\end_layout
-
-\begin_layout Description
-PyUFunc_<VALUE> <VALUE> can be
-\series bold
-One
-\series default
- (1),
-\series bold
-Zero
-\series default
- (0), or
-\series bold
-None
-\series default
- (-1)
-\end_layout
-
-\begin_layout Subsection
-Macros
-\end_layout
-
-\begin_layout Description
-NPY_LOOP_BEGIN_THREADS
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Used in universal function code to only release the Python GIL if loop->obj
- is not true (
-\emph on
-i.e.
-
-\emph default
- this is not an OBJECT array loop).
- Requires use of
-\family typewriter
-NPY_BEGIN_THREADS_DEF
-\family default
- in variable declaration area.
-\end_layout
-
-\begin_layout Description
-NPY_LOOP_END_THREADS
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Used in universal function code to re-acquire the Python GIL if it was
- released (because loop->obj was not true).
-
-\end_layout
-
-\begin_layout Description
-UFUNC_CHECK_ERROR (loop)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A macro used internally to check for errors and goto fail if found.
- This macro requires a fail label in the current code block.
- The
-\emph on
-loop
-\emph default
- variable must have at least members (obj, errormask, and errorobj).
- If
-\emph on
-loop
-\emph default
-->obj is nonzero, then
-\family typewriter
-PyErr_Occurred
-\family default
-() is called (meaning the GIL must be held).
- If
-\emph on
-loop
-\emph default
-->obj is zero, then if
-\emph on
-loop
-\emph default
-->errormask is nonzero,
-\family typewriter
-PyUFunc_checkfperr
-\family default
- is called with arguments
-\emph on
-loop
-\emph default
-->errormask and
-\emph on
-loop
-\emph default
-->errobj.
- If the result of this check of the IEEE floating point registers is true
- then the code redirects to the fail label which must be defined.
-\end_layout
-
-\begin_layout Description
-UFUNC_CHECK_STATUS (
-\emph on
-ret
-\emph default
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A macro that expands to platform-dependent code.
- The
-\emph on
-ret
-\emph default
- variable can can be any integer.
- The
-\family typewriter
-UFUNC_FPE_
-\family default
-<ERR> bits are set in
-\emph on
-ret
-\emph default
- according to the status of the corresponding error flags of the floating
- point processor.
-
-\end_layout
-
-\begin_layout Subsection
-Functions
-\end_layout
-
-\begin_layout Description
-PyUFunc_FromFuncAndData (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyUFuncGenericFunction*
-\family default
- func,
-\family typewriter
-void**
-\family default
- data,
-\family typewriter
-char*
-\family default
- types,
-\family typewriter
-int
-\family default
- ntypes,
-\family typewriter
-int
-\family default
- nin,
-\family typewriter
-int
-\family default
- nout,
-\family typewriter
-int
-\family default
- identity,
-\family typewriter
-char*
-\family default
- name,
-\family typewriter
-char*
-\family default
- doc,
-\family typewriter
-int
-\family default
- check_return)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new broadcasting universal function from required variables.
- Each ufunc builds around the notion of an element-by-element operation.
- Each ufunc object contains pointers to 1-d loops implementing the basic
- functionality for each supported type.
-
-\end_layout
-
-\begin_layout Description
-nin The number of inputs to this operation.
-\end_layout
-
-\begin_layout Description
-nout The number of outputs
-\end_layout
-
-\begin_layout Description
-ntypes How many different data-type
-\begin_inset Quotes eld
-\end_inset
-
-signatures
-\begin_inset Quotes erd
-\end_inset
-
- the ufunc has implemented.
-
-\end_layout
-
-\begin_layout Description
-func Must to an array of length
-\emph on
-ntypes
-\emph default
- containing
-\family typewriter
-PyUFuncGenericFunction
-\family default
- items.
- These items are pointers to functions that acutally implement the underlying
- (element-by-element) function
-\begin_inset Formula $N$
-\end_inset
-
- times.
- T
-\end_layout
-
-\begin_layout Description
-types Must be of length (
-\emph on
-nin
-\emph default
-+
-\emph on
-nout
-\emph default
-)
-\emph on
-*ntypes
-\emph default
-, and it contains the data-types (built-in only) that the corresponding
- function in the
-\emph on
-func
-\emph default
- array can deal with.
-
-\end_layout
-
-\begin_layout Description
-data Should be
-\family typewriter
-NULL
-\family default
- or a pointer to an array of size
-\emph on
-ntypes
-\emph default
-.
- This array may contain arbitrary extra-data to be passed to the corresponding
- 1-d loop function in the func array.
-
-\end_layout
-
-\begin_layout Description
-name The name for the ufunc.
-
-\end_layout
-
-\begin_layout Description
-doc Allows passing in a documentation string to be stored with the ufunc.
- The documentation string should not contain the name of the function or
- the calling signature as that will be dynamically determined from the object
- and available when accessing the
-\series bold
-__doc__
-\series default
- attribute of the ufunc.
-
-\end_layout
-
-\begin_layout Description
-check_return Unused and present for backwards compatibility of the C-API.
- A corresponding
-\emph on
-check_return
-\emph default
- integer does exist in the ufunc structure and it does get set with this
- value when the ufunc object is created.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_RegisterLoopForType (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyUFuncObject*
-\family default
- ufunc,
-\family typewriter
-int
-\family default
- usertype,
-\family typewriter
-PyUFuncGenericFunction
-\family default
- function,
-\family typewriter
-int*
-\family default
- arg_types,
-\family typewriter
-void*
-\family default
- data)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function allows the user to register a 1-d loop with an already-created
- ufunc to be used whenever the ufunc is called with any of its input arguments
- as the user-defined data-type.
- This is needed in order to make ufuncs work with built-in data-types.
- The data-type must have been previously registered with the numpy system.
- The loop is passed in as
-\emph on
-function
-\emph default
-.
- This loop can take arbitrary data which should be passed in as
-\emph on
-data
-\emph default
-.
- The data-types the loop requires are passed in as
-\emph on
-arg_types
-\emph default
- which must be a pointer to memory at least as large as ufunc->nargs.
-\end_layout
-
-\begin_layout Description
-PyUFunc_ReplaceLoopBySignature (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyUFuncObject*
-\family default
- ufunc,
-\family typewriter
-PyUFuncGenericFunction
-\family default
- newfunc,
-\family typewriter
-int*
-\family default
- signature,
-\family typewriter
-PyUFuncGenericFunction*
-\family default
- oldfunc)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Replace a 1-d loop matching the given
-\emph on
-signature
-\emph default
- in the already-created
-\emph on
-ufunc
-\emph default
- with the new 1-d loop newfunc.
- Return the old 1-d loop function in
-\emph on
-oldfunc
-\emph default
-.
- Return 0 on success and -1 on failure.
- This function works only with built-in types (use
-\family typewriter
-PyUFunc_RegisterLoopForType
-\family default
- for user-defined types).
- A signature is an array of data-type numbers indicating the inputs followed
- by the outputs assumed by the 1-d loop.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_GenericFunction (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyUFuncObject*
-\family default
- self,
-\family typewriter
-PyObject*
-\family default
- args,
-\family typewriter
-PyArrayObject**
-\family default
- mps)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A generic ufunc call.
- The ufunc is passed in as
-\emph on
-self
-\emph default
-, the arguments to the ufunc as
-\emph on
-args
-\emph default
-.
- The
-\emph on
-mps
-\emph default
- argument is an array of
-\family typewriter
-PyArrayObject
-\family default
- pointers containing the converted input arguments as well as the ufunc
- outputs on return.
- The user is responsible for managing this array and receives a new reference
- for each array in
-\emph on
-mps
-\emph default
-.
- The total number of arrays in
-\emph on
-mps
-\emph default
- is given by
-\emph on
-self
-\emph default
-->nin +
-\emph on
-self
-\emph default
-->nout.
-\end_layout
-
-\begin_layout Description
-PyUFunc_checkfperr (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-int
-\family default
- errmask,
-\family typewriter
-PyObject*
-\family default
- errobj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A simple interface to the IEEE error-flag checking support.
- The
-\emph on
-errmask
-\emph default
- argument is a mask of
-\family typewriter
-UFUNC_MASK_<ERR>
-\family default
- bitmasks indicating which errors to check for (and how to check for them).
- The
-\emph on
-errobj
-\emph default
- must be a Python tuple with two elements: a string containing the name
- which will be used in any communication of error and either a callable
- Python object (call-back function) or
-\family typewriter
-Py_None
-\family default
-.
- The callable object will only be used if
-\family typewriter
-UFUNC_ERR_CALL
-\family default
- is set as the desired error checking method.
- This routine manages the GIL and is safe to call even after releasing the
- GIL.
- If an error in the IEEE-compatibile hardware is determined a -1 is returned,
- otherwise a 0 is returned.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_clearfperr (
-\family typewriter
-void
-\family default
-) ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Clear the IEEE error flags.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_GetPyValues (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char*
-\family default
- name,
-\family typewriter
-int*
-\family default
- bufsize,
-\family typewriter
-int*
-\family default
- errmask,
-\family typewriter
-PyObject**
-\family default
- errobj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Get the Python values used for ufunc processing from the thread-local storage
- area unless the defaults have been set in which case the name lookup is
- bypassed.
- The name is placed as a string in the first element of
-\emph on
-*errobj
-\emph default
-.
- The second element is the looked-up function to call on error callback.
- The value of the looked-up buffer-size to use is passed into
-\emph on
-bufsize
-\emph default
-, and the value of the error mask is placed into
-\emph on
-errmask
-\emph default
-.
-
-\end_layout
-
-\begin_layout Subsection
-Generic functions
-\end_layout
-
-\begin_layout Standard
-At the core of every ufunc is a collection of type-specific functions that
- defines the basic functionality for each of the supported types.
- These functions must evaluate the underlying function
-\begin_inset Formula $N\geq1$
-\end_inset
-
- times.
- Extra-data may be passed in that may be used during the calculation.
- This feature allows some general functions to be used as these basic looping
- functions.
- The general function has all the code needed to point variables to the
- right place and set up a function call.
- The general function assumes that the actual function to call is passed
- in as the extra data and calls it with the correct values.
- All of these functions are suitable for placing directly in the array of
- functions stored in the functions member of the PyUFuncObject structure.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_f_f_As_d_d (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_d_d (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_f_f (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_g_g (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_F_F_As_D_D (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_F_F (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_D_D (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_G_G (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type specific, core 1-d functions for ufuncs where each calculation is
- obtained by calling a function taking one input argument and returning
- one output.
- This function is passed in
-\family typewriter
-func
-\family default
-.
- The letters correspond to dtypechar's of the supported data types (
-\family typewriter
-f
-\family default
- - float,
-\family typewriter
-d
-\family default
- - double,
-\family typewriter
-g
-\family default
- - long double,
-\family typewriter
-F
-\family default
- - cfloat,
-\family typewriter
-D
-\family default
- - cdouble,
-\family typewriter
-G
-\family default
- - clongdouble).
- The argument
-\emph on
-func
-\emph default
- must support the same signature.
- The _As_X_X variants assume ndarray's of one data type but cast the values
- to use an underlying function that takes a different data type.
- Thus,
-\family typewriter
-PyUFunc_f_f_As_d_d
-\family default
- uses ndarrays of data type
-\family typewriter
-NPY_FLOAT
-\family default
- but calls out to a C-function that takes double and returns double.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_ff_f_As_dd_d (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_ff_f (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_dd_d (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_gg_g (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_FF_F_As_DD_D (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_DD_D (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_FF_F (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_GG_G (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Type specific, core 1-d functions for ufuncs where each calculation is
- obtained by calling a function taking two input arguments and returning
- one output.
- The underlying function to call is passed in as
-\emph on
-func
-\emph default
-.
- The letters correspond to dtypechar's of the specific data type supported
- by the general-purpose function.
- The argument
-\family typewriter
-func
-\family default
- must support the corresponding signature.
- The
-\family typewriter
-_As_XX_X
-\family default
- variants assume ndarrays of one data type but cast the values at each iteration
- of the loop to use the underlying function that takes a different data
- type.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_O_O (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-PyUFunc_OO_O (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- One-input, one-output, and two-input, one-output core 1-d functions for
- the
-\family typewriter
-NPY_OBJECT
-\family default
- data type.
- These functions handle reference count issues and return early on error.
- The actual function to call is
-\emph on
-func
-\emph default
- and it must accept calls with the signature (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
-) for
-\family typewriter
-PyUFunc_O_O
-\family default
- or (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject
-\family default
- *,
-\family typewriter
-PyObject
-\family default
- *) for
-\family typewriter
-PyUFunc_OO_O
-\family default
-.
-\end_layout
-
-\begin_layout Description
-PyUFunc_O_O_method (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This general purpose 1-d core function assumes that
-\emph on
-func
-\emph default
- is a string representing a method of the input object.
- For each iteration of the loop, the Python obejct is extracted from the
- array and its
-\emph on
-func
-\emph default
- method is called returning the result to the output array.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_OO_O_method (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This general purpose 1-d core function assumes that
-\emph on
-func
-\emph default
- is a string representing a method of the input object that takes one argument.
- The first argument in
-\emph on
-args
-\emph default
- is the method whose function is called, the second argument in
-\emph on
-args
-\emph default
- is the argument passed to the function.
- The output of the function is stored in the third entry of
-\emph on
-args
-\emph default
-.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_On_Om (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- func)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is the 1-d core function used by the dynamic ufuncs created by umath.frompy
-func(function, nin, nout).
- In this case
-\emph on
-func
-\emph default
- is a pointer to a
-\family typewriter
-PyUFunc_PyFuncData
-\family default
- structure which has definition {
-\family typewriter
-int
-\family default
- nin;
-\family typewriter
-int
-\family default
- nout;
-\family typewriter
-PyObject*
-\family default
- callable}.
- At each iteration of the loop, the
-\emph on
-nin
-\emph default
- input objects are exctracted from their object arrays and placed into an
- argument tuple, the Python
-\emph on
-callable
-\emph default
- is called with the input arguments, and the nout outputs are placed into
- their object arrays.
-
-\end_layout
-
-\begin_layout Section
-Importing the API
-\end_layout
-
-\begin_layout Description
-PY_UFUNC_UNIQUE_SYMBOL
-\end_layout
-
-\begin_layout Description
-NO_IMPORT_UFUNC
-\end_layout
-
-\begin_layout Description
-import_ufunc (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-void
-\family default
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These are the constants and functions for accessing the ufunc C-API from
- extension modules in precisely the same way as the array C-API can be accessed.
- The
-\family typewriter
-import_ufunc
-\family default
-() function must always be called (in the initialization subroutine of the
- extension module).
- If your extension module is in one file then that is all that is required.
- The other two constants are useful if your extension module makes use of
- multiple files.
- In that case, define
-\family typewriter
-PY_UFUNC_UNIQUE_SYMBOL
-\family default
- to something unique to your code and then in source files that do not contain
- the module initialization function but still need access to the UFUNC API,
- define
-\family typewriter
-PY_UFUNC_UNIQUE_SYMBOL
-\family default
- to the same name used previously and also define
-\family typewriter
-NO_IMPORT_UFUNC
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The C-API is actually an array of function pointers.
- This array is created (and pointed to by a global variable) by import_ufunc.
- The global variable is either statically defined or allowed to be seen
- by other files depending on the state of
-\family typewriter
-Py_UFUNC_UNIQUE_SYMBOL
-\family default
- and
-\family typewriter
-NO_IMPORT_UFUNC
-\family default
-.
-
-\begin_inset LatexCommand index
-name "ufunc!C-API|)"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "C-API!ufunc|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Chapter
-How to extend NumPy
-\end_layout
-
-\begin_layout Quotation
-That which is static and repetitive is boring.
- That which is dynamic and random is confusing.
- In between lies art.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-John A.
- Locke
-\end_layout
-
-\begin_layout Quotation
-Science is a differential equation.
- Religion is a boundary condition.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Alan Turing
-\end_layout
-
-\begin_layout Section
-Writing an extension module
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "sec:Writing-an-extension"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "extension module|("
-
-\end_inset
-
-While the ndarray object is designed to allow rapid computation in Python,
- it is also designed to be general-purpose and satisfy a wide-variety of
- computational needs.
- As a result, if absolute speed is essential, there is no replacement for
- a well-crafted, compiled loop specific to your application and hardware.
- This is one of the reasons that numpy includes f2py so that an easy-to-use
- mechanisms for linking (simple) C/C++ and (arbitrary) Fortran code directly
- into Python are available.
- You are encouraged to use and improve this mechanism.
- The purpose of this section is not to document this tool but to document
- the more basic steps to writing an extension module that this tool depends
- on.
-
-\end_layout
-
-\begin_layout Standard
-When an extension module is written, compiled, and installed to somewhere
- in the Python path (sys.path), the code can then be imported into Python
- as if it were a standard python file.
- It will contain objects and methods that have been defined and compiled
- in C code.
- The basic steps for doing this in Python are well-documented and you can
- find more information in the documentation for Python itself available
- online at
-\begin_inset LatexCommand url
-name "www.python.org"
-target "http://www.python.org"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-In addition to the Python C-API, there is a full and rich C-API for NumPy
- allowing sophisticated manipulations on a C-level.
- However, for most applications, only a few API calls will typically be
- used.
- If all you need to do is extract a pointer to memory along with some shape
- information to pass to another calculation routine, then you will use very
- different calls, then if you are trying to create a new array-like type
- or add a new data type for ndarrays.
- This chapter documents the API calls and macros that are most commonly
- used.
-\end_layout
-
-\begin_layout Section
-Required subroutine
-\end_layout
-
-\begin_layout Standard
-There is exactly one function that must be defined in your C-code in order
- for Python to use it as an extension module.
- The function must be called init<name> where <name> is the name of the
- module from Python.
- This function must be declared so that it is visible to code outside of
- the routine.
- Besides adding the methods and constants you desire, this subroutine must
- also contain calls to import_array() and/or import_ufunc() depending on
- which C-API is needed.
- Forgetting to place these commands will show itself as an ugly segmentation
- fault (crash) as soon as any C-API subroutine is actually called.
- It is actually possible to have multiple init<name> functions in a single
- file in which case multiple modules will be defined by that file.
- However, there are some tricks to get that to work correctly and it is
- not covered here.
-\end_layout
-
-\begin_layout Standard
-A minimal init<name> method looks like
-\end_layout
-
-\begin_layout LyX-Code
-PyMODINIT_FUNC
-\newline
-init<name>(void)
-\newline
-{
-\newline
- (void)Py_InitModule(
-\begin_inset Quotes erd
-\end_inset
-
-<name>
-\begin_inset Quotes erd
-\end_inset
-
-, mymethods);
-\newline
- import_array();
-\newline
-}
-\end_layout
-
-\begin_layout Standard
-The mymethods must be an array (usually statically declared) of PyMethodDef
- structures which contain method names, actual C-functions, a variable indicatin
-g whether the method uses keyword arguments or not, and docstrings.
- These are explained in the next section.
- If you want to add constants to the module, then you store the returned
- value from Py_InitModule which is a module object.
- The most general way to add itmes to the module is to get the module dictionary
- using PyModule_GetDict(module).
- With the module dictionary, you can add whatever you like to the module
- manually.
- An easier way to add objects to the module is to use one of three additional
- Python C-API calls that do not require a separate extraction of the module
- dictionary.
- These are documented in the Python documentation, but repeated here for
- convenience:
-\end_layout
-
-\begin_layout Description
-PyModule_AddObject (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- module,
-\family typewriter
-char*
-\family default
- name,
-\family typewriter
-PyObject*
-\family default
- value)
-\end_layout
-
-\begin_layout Description
-PyModule_AddIntConstant (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- module,
-\family typewriter
-char*
-\family default
- name,
-\family typewriter
-long
-\family default
- value)
-\end_layout
-
-\begin_layout Description
-PyModule_AddStringConstant (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- module,
-\family typewriter
-char*
-\family default
- name,
-\family typewriter
-char*
-\family default
- value)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- All three of these functions require the
-\family typewriter
-module
-\family default
- object (the return value of Py_InitModule).
- The
-\family typewriter
-name
-\family default
- is a string that labels the value in the module.
- Depending on which function is called, the
-\family typewriter
-value
-\family default
- argument is either a general object (PyModule_AddObject steals a reference
- to it), an integer constant, or a string constant.
-\end_layout
-
-\begin_layout Section
-Defining functions
-\end_layout
-
-\begin_layout Standard
-The second argument passed in to the Py_InitModule function is a structure
- that makes it easy to to define functions in the module.
- In the example given above, the mymethods structure would have been defined
- earlier in the file (usually right before the init<name> subroutine) to
-
-\end_layout
-
-\begin_layout LyX-Code
-static PyMethodDef mymethods[] = {
-\newline
-{
-\begin_inset Quotes erd
-\end_inset
-
-nokeywordfunc
-\begin_inset Quotes erd
-\end_inset
-
-,nokeyword_cfunc,
-\newline
-METH_VARARGS,
-\newline
-
-\begin_inset Quotes erd
-\end_inset
-
-Doc string
-\begin_inset Quotes erd
-\end_inset
-
-},
-\newline
-{
-\begin_inset Quotes erd
-\end_inset
-
-keywordfunc
-\begin_inset Quotes erd
-\end_inset
-
-, keyword_cfunc,
-\end_layout
-
-\begin_layout LyX-Code
-METH_VARARGS|METH_KEYWORDS,
-\newline
-
-\begin_inset Quotes erd
-\end_inset
-
-Doc string
-\begin_inset Quotes erd
-\end_inset
-
-},
-\newline
-{NULL, NULL, 0, NULL} /* Sentinel */
-\newline
-}
-\end_layout
-
-\begin_layout Standard
-Each entry in the mymethods array is a PyMethodDef structure containing
- 1) the Python name, 2) the C-function that implements the function, 3)
- flags indicating whether or not keywords are accepted for this function,
- and 4) The docstring for the function.
- Any number of functions may be defined for a single module by adding more
- entries to this table.
- The last entry must be all NULL as shown to act as a sentinel.
- Python looks for this entry to know that all of the functions for the module
- have been defined.
-
-\end_layout
-
-\begin_layout Standard
-The last thing that must be done to finish the extension module is to actually
- write the code that performs the desired functions.
- There are two kinds of functions: those that don't accept keyword arguments,
- and those that do.
-\end_layout
-
-\begin_layout Subsection
-Functions without keyword arguments
-\end_layout
-
-\begin_layout Standard
-Functions that don't accept keyword arguments should be written as
-\end_layout
-
-\begin_layout LyX-Code
-static PyObject*
-\newline
-nokeyword_cfunc (PyObject *dummy, PyObject *args)
-\newline
-{
-\newline
- /*
- convert Python arguments */
-\newline
- /* do function */
-\end_layout
-
-\begin_layout LyX-Code
- /* return something */
-\end_layout
-
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Standard
-The dummy argument is not used in this context and can be safely ignored.
- The
-\emph on
-args
-\emph default
- argument contains all of the arguments passed in to the function as a tuple.
- You can do anything you want at this point, but usually the easiest way
- to manage the input arguments is to call
-\family typewriter
-PyArg_ParseTuple
-\family default
- (args, format_string, addresses_to_C_variables...) or
-\family typewriter
-PyArg_UnpackTuple
-\family default
- (tuple,
-\begin_inset Quotes eld
-\end_inset
-
-name
-\begin_inset Quotes erd
-\end_inset
-
-, min, max, ...).
- A good description of how to use the first function is contained in the
- Python C-API reference manual under section 5.5 (Parsing arguments and building
- values).
- You should pay particular attention to the
-\begin_inset Quotes eld
-\end_inset
-
-O&
-\begin_inset Quotes erd
-\end_inset
-
- format which uses converter functions to go between the Python object and
- the C object.
- All of the other format functions can be (mostly) thought of as special
- cases of this general rule.
- There are several converter functions defined in the NumPy C-API that may
- be of use.
- In particular, the
-\family typewriter
-PyArray_DescrConverter
-\family default
- function is very useful to support arbitrary data-type specification.
- This function transforms any valid data-type Python object into a
-\family typewriter
-PyArray_Descr*
-\family default
- object.
- Remember to pass in the address of the C-variables that should be filled
- in.
-\end_layout
-
-\begin_layout Standard
-There are lots of examples of how to use
-\family typewriter
-PyArg_ParseTuple
-\family default
- throughout the NumPy source code.
- The standard usage is like this:
-\end_layout
-
-\begin_layout LyX-Code
-PyObject *input;
-\end_layout
-
-\begin_layout LyX-Code
-PyArray_Descr *dtype;
-\end_layout
-
-\begin_layout LyX-Code
-if (!PyArg_ParseTuple(args, "OO&", &input,
-\newline
- PyArray_DescrCon
-verter,
-\newline
- &dtype)) return NULL;
-\end_layout
-
-\begin_layout Standard
-It is important to keep in mind that you get a
-\emph on
-borrowed
-\emph default
- reference to the object when using the
-\begin_inset Quotes eld
-\end_inset
-
-O
-\begin_inset Quotes erd
-\end_inset
-
- format string.
- However, the converter functions usually require some form of memory handling.
- In this example, if the conversion is successful,
-\emph on
-dtype
-\emph default
- will hold a new reference to a
-\family typewriter
-PyArray_Descr*
-\family default
- object, while
-\emph on
-input
-\emph default
- will hold a borrowed reference.
- Therefore, if this conversion were mixed with another conversion (say to
- an integer) and the data-type conversion was successful but the integer
- conversion failed, then you would need to release the reference count to
- the data-type object before returning.
- A typical way to do this is to set
-\emph on
-dtype
-\emph default
- to
-\family typewriter
-NULL
-\family default
- before calling PyArg_ParseTuple and then use
-\family typewriter
-Py_XDECREF
-\family default
- on
-\emph on
-dtype
-\emph default
- before returning.
-
-\end_layout
-
-\begin_layout Standard
-After the input arguments are processed, the code that actually does the
- work is written (likely calling other functions as needed).
- The final step of the C-function is to return something.
- If an error is encountered then
-\family typewriter
-NULL
-\family default
- should be returned (making sure an error has actually been set).
- If nothing should be returned then increment
-\family typewriter
-Py_None
-\family default
- and return it.
- If a single object should be returned then it is returned (ensuring that
- you own a reference to it first).
- If multiple objects should be returned then you need to return a tuple.
- The
-\family typewriter
-Py_BuildValue
-\family default
- (format_string, c_variables...) function makes it easy to build tuples of
- Python objects from C variables.
- Pay special attention to the difference between 'N' and 'O' in the format
- string or you can easily create memory leaks.
- The 'O' format string increments the reference count of the
-\family typewriter
-PyObject*
-\family default
- C-variable it corresponds to, while the 'N' format string steals a reference
- to the corresponding
-\family typewriter
-PyObject*
-\family default
- C-variable.
- You should use 'N' if you ave already created a reference for the object
- and just want to give that reference to the tuple.
- You should use 'O' if you only have a borrowed reference to an object and
- need to create one to provide for the tuple.
-
-\end_layout
-
-\begin_layout Subsection
-Functions with keyword arguments
-\end_layout
-
-\begin_layout Standard
-These functions are very similar to functions without keyword arguments.
- The only difference is that the function signature is
-\end_layout
-
-\begin_layout LyX-Code
-static PyObject*
-\newline
-keyword_cfunc (PyObject *dummy, PyObject *args, PyObject
- *kwds)
-\newline
-{
-\newline
-...
-\newline
-}
-\end_layout
-
-\begin_layout Standard
-The kwds argument holds a Python dictionary whose keys are the names of
- the keyword arguments and whose values are the corresponding keyword-argument
- values.
- This dictionary can be processed however you see fit.
- The easiest way to handle it, however, is to replace the
-\family typewriter
-PyArg_ParseTuple
-\family default
- (args, format_string, addresses...) function with a call to
-\family typewriter
-PyArg_ParseTupleAndKeywords
-\family default
- (args, kwds, format_string, char *kwlist[], addresses...).
- The kwlist parameter to this function is a
-\family typewriter
-NULL
-\family default
--terminated array of strings providing the expected keyword arguments.
- There should be one string for each entry in the format_string.
- Using this function will raise a TypeError if invalid keyword arguments
- are passed in.
-
-\end_layout
-
-\begin_layout Standard
-For more help on this function please see section 1.8 (Keyword Paramters
- for Extension Functions) of the Extending and Embedding tutorial in the
- Python documentation.
-\end_layout
-
-\begin_layout Subsection
-Reference counting
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "reference counting|("
-
-\end_inset
-
-The biggest difficulty when writing extension modules is reference counting.
- It is an important reason for the popularity of f2py, weave, pyrex, ctypes,
- etc....
- If you mis-handle reference counts you can get problems from memory-leaks
- to segmentation faults.
- The only strategy I know of to handle reference counts correctly is blood,
- sweat, and tears.
- First, you force it into your head that every Python variable has a reference
- count.
- Then, you understand exactly what each function does to the reference count
- of your objects, so that you can properly use DECREF and INCREF when you
- need them.
- Reference counting can really test the amount of patience and diligence
- you have towards your programming craft.
- Despite the grim depiction, most cases of reference counting are quite
- straightforward with the most common difficulty being not using DECREF
- on objects before exiting early from a routine due to some error.
- In second place, is the common error of not owning the reference on an
- object that is passed to a function or macro that is going to steal the
- reference (
-\emph on
-e.g.
-
-\emph default
-
-\family typewriter
-PyTuple_SET_ITEM
-\family default
-, and most functions that take
-\family typewriter
-PyArray_Descr
-\family default
- objects).
-
-\end_layout
-
-\begin_layout Standard
-Typically you get a new reference to a variable when it is created or is
- the return value of some function (there are some prominent exceptions,
- however --- such as getting an item out of a tuple or a dictionary).
- When you own the reference, you are responsible to make sure that
-\family typewriter
-Py_DECREF
-\family default
-(var) is called when the variable is no longer necessary (and no other function
- has
-\begin_inset Quotes eld
-\end_inset
-
-stolen
-\begin_inset Quotes erd
-\end_inset
-
- its reference).
- Also, if you are passing a Python object to a function that will
-\begin_inset Quotes eld
-\end_inset
-
-steal
-\begin_inset Quotes erd
-\end_inset
-
- the reference, then you need to make sure you own it (or use
-\family typewriter
-Py_INCREF
-\family default
- to get your own reference).
- You will also encounter the notion of borrowing a reference.
- A function that borrows a reference does not alter the reference count
- of the object and does not expect to
-\begin_inset Quotes eld
-\end_inset
-
-hold on
-\begin_inset Quotes erd
-\end_inset
-
- to the reference.
- It's just going to use the object temporarily.
- When you use
-\family typewriter
-PyArg_ParseTuple
-\family default
- or
-\family typewriter
-PyArg_UnpackTuple
-\family default
- you receive a borrowed reference to the objects in the tuple and should
- not alter their reference count inside your function.
- With practice, you can learn to get reference counting right, but it can
- be frustrating at first.
-
-\end_layout
-
-\begin_layout Standard
-One common source of reference-count errors is the
-\family typewriter
-Py_BuildValue
-\family default
- function.
- Pay careful attention to the difference between the 'N' format character
- and the 'O' format character.
- If you create a new object in your subroutine (such as an output array),
- and you are passing it back in a tuple of return values, then you should
- most-likely use the 'N' format character in
-\family typewriter
-Py_BuildValue
-\family default
-.
- The 'O' character will increase the reference count by one.
- This will leave the caller with two reference counts for a brand-new array.
- When the variable is deleted and the reference count decremented by one,
- there will still be that extra reference count, and the array will never
- be deallocated.
- You will have a reference-counting induced memory leak.
- Using the 'N' character will avoid this situation as it will return to
- the caller an object (inside the tuple) with a single reference count.
-
-\begin_inset LatexCommand index
-name "reference counting|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Dealing with array objects
-\end_layout
-
-\begin_layout Standard
-Most extension modules for NumPy will need to access the memory for an ndarray
- object (or one of it's sub-classes).
- The easiest way to do this doesn't require you to know much about the internals
- of NumPy.
- The method is to
-\end_layout
-
-\begin_layout Enumerate
-Ensure you are dealing with a well-behaved array (aligned, in machine byte-order
- and single-segment) of the correct type and number of dimensions.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-By converting it from some Python object using
-\family typewriter
-PyArray_FromAny
-\family default
- or a macro built on it.
-
-\end_layout
-
-\begin_layout Enumerate
-By constructing a new ndarray of your desired shape and type using
-\family typewriter
-PyArray_NewFromDescr
-\family default
- or a simpler macro or function based on it.
-
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Get the shape of the array and a pointer to its actual data.
-
-\end_layout
-
-\begin_layout Enumerate
-Pass the data and shape information on to a subroutine or other section
- of code that actually performs the computation.
-
-\end_layout
-
-\begin_layout Enumerate
-If you are writing the algorithm, then I recommend that you use the stride
- information contained in the array to access the elements of the array
- (the
-\family typewriter
-PyArray_GETPTR
-\family default
- macros make this painless).
- Then, you can relax your requirements so as not to force a single-segment
- array and the data-copying that might result.
-
-\end_layout
-
-\begin_layout Standard
-Each of these sub-topics is covered in the following sub-sections.
-\end_layout
-
-\begin_layout Subsection
-Converting an arbitrary sequence object
-\end_layout
-
-\begin_layout Standard
-The main routine for obtaining an array from any Python object that can
- be converted to an array is
-\family typewriter
-PyArray_FromAny
-\family default
-.
- This function is very flexible with many input arguments.
- Several macros make it easier to use the basic function.
-
-\family typewriter
-PyArray_FROM_OTF
-\family default
- is arguably the most useful of these macros for the most common uses.
- It allows you to convert an arbitrary Python object to an array of a specific
- builtin data-type (
-\emph on
-e.g.
-
-\emph default
- float), while specifying a particular set of requirements (
-\emph on
-e.g.
-
-\emph default
- contiguous, aligned, and writeable).
- The syntax is
-\end_layout
-
-\begin_layout Description
-PyArray_FROM_OTF (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyObject*
-\family default
- obj,
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-int
-\family default
- requirements)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an ndarray from any Python object,
-\emph on
-obj
-\emph default
-, that can be converted to an array.
- The number of dimensions in the returned array is determined by the object.
- The desired data-type of the returned array is provided in
-\emph on
-typenum
-\emph default
- which should be one of the enumerated types.
- The
-\emph on
-requirements
-\emph default
- for the returned array can be any combination of standard array flags.
- Each of these arguments is explained in more detail below.
- You receive a new reference to the array on success.
- On failure,
-\family typewriter
-NULL
-\family default
- is returned and an exception is set.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-obj The object can be any Python object convertable to an ndarray.
- If the object is already (a subclass of) the ndarray that satisfies the
- requirements then a new reference is returned.
- Otherwise, a new array is constructed.
- The contents of
-\emph on
-obj
-\emph default
- are copied to the new array unless the array interface is used so that
- data does not have to be copied.
- Objects that can be converted to an array include: 1) any nested sequence
- object, 2) any object exposing the array interface, 3) any object with
- an
-\series bold
-__array__
-\series default
- method (which should return an ndarray), and 4) any scalar object (becomes
- a zero-dimensional array).
- Sub-classes of the ndarray that otherwise fit the requirements will be
- passed through.
- If you want to ensure a base-class ndarray, then use
-\family typewriter
-NPY_ENSUREARRAY
-\family default
- in the requirements flag.
- A copy is made only if necessary.
- If you want to guarantee a copy, then pass in
-\family typewriter
-NPY_ENSURECOPY
-\family default
- to the requirements flag.
-
-\end_layout
-
-\begin_layout Description
-typenum One of the enumerated types or
-\family typewriter
-NPY_NOTYPE
-\family default
- if the data-type should be determined from the object itself.
- The C-based names can be used:
-\end_layout
-
-\begin_deeper
-\begin_layout Quote
-
-\family typewriter
-NPY_BOOL
-\family default
-,
-\family typewriter
-NPY_BYTE
-\family default
-,
-\family typewriter
-NPY_UBYTE
-\family default
-,
-\family typewriter
-NPY_SHORT
-\family default
-,
-\family typewriter
-NPY_USHORT
-\family default
-,
-\family typewriter
-NPY_INT
-\family default
-,
-\family typewriter
-NPY_UINT
-\family default
-,
-\family typewriter
-NPY_LONG
-\family default
-,
-\family typewriter
-NPY_ULONG
-\family default
-,
-\family typewriter
-NPY_LONGLONG
-\family default
-,
-\family typewriter
-NPY_ULONGLONG
-\family default
-,
-\family typewriter
-NPY_DOUBLE
-\family default
-,
-\family typewriter
-NPY_LONGDOUBLE
-\family default
-,
-\family typewriter
-NPY_CFLOAT
-\family default
-,
-\family typewriter
-NPY_CDOUBLE
-\family default
-,
-\family typewriter
-NPY_CLONGDOUBLE
-\family default
-,
-\family typewriter
-NPY_OBJECT
-\family default
-.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- Alternatively, the bit-width names can be used as supported on the platform.
- For example:
-\end_layout
-
-\begin_deeper
-\begin_layout Quote
-
-\family typewriter
-NPY_INT8
-\family default
-,
-\family typewriter
-NPY_INT16
-\family default
-,
-\family typewriter
-NPY_INT32
-\family default
-,
-\family typewriter
-NPY_INT64
-\family default
-,
-\family typewriter
-NPY_UINT8
-\family default
-,
-\family typewriter
-NPY_UINT16
-\family default
-,
-\family typewriter
-NPY_UINT32
-\family default
-,
-\family typewriter
-NPY_UINT64
-\family default
-,
-\family typewriter
-NPY_FLOAT32
-\family default
-,
-\family typewriter
-NPY_FLOAT64
-\family default
-,
-\family typewriter
-NPY_COMPLEX64
-\family default
-,
-\family typewriter
-NPY_COMPLEX128
-\family default
-.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- The object will be converted to the desired type only if it can be done
- without losing precision.
- Otherwise
-\family typewriter
-NULL
-\family default
- will be returned and an error raised.
- Use
-\family typewriter
-NPY_FORCECAST
-\family default
- in the requirements flag to override this behavior.
-
-\end_layout
-
-\begin_layout Description
-requirements The memory model for an ndarray admits arbitrary strides in
- each dimension to advance to the next element of the array.
- Often, however, you need to interface with code that expects a C-contiguous
- or a Fortran-contiguous memory layout.
- In addition, an ndarray can be misaligned (the address of an element is
- not at an integral multiple of the size of the element) which can cause
- your program to crash (or at least work more slowly) if you try and dereference
- a pointer into the array data.
- Both of these problems can be solved by converting the Python object into
- an array that is more
-\begin_inset Quotes eld
-\end_inset
-
-well-behaved
-\begin_inset Quotes erd
-\end_inset
-
- for your specific usage.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The requirements flag allows specification of what kind of array is acceptable.
- If the object passed in does not satisfy this requirements then a copy
- is made so that thre returned object will satisfy the requirements.
- these ndarray can use a very generic pointer to memory.
- This flag allows specification of the desired properties of the returned
- array object.
- All of the flags are explained in the detailed API chapter.
- The flags most commonly needed are NPY_IN_ARRAY, NPY_OUT_ARRAY, and NPY_INOUT_A
-RRAY:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-NPY_IN_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED.
- This combination of flags is useful for arrays that must be in C-contiguous
- order and aligned.
- These kinds of arrays are usually input arrays for some algorithm.
-\end_layout
-
-\begin_layout Description
-NPY_OUT_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED | NPY_WRITEABLE.
- This combination of flags is useful to specify an array that is in C-contiguous
- order, is aligned, and can be written to as well.
- Such an array is usually returned as output (although normally such output
- arrays are created from scratch).
-
-\end_layout
-
-\begin_layout Description
-NPY_INOUT_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED | NPY_WRITEABLE
- | NPY_UPDATEIFCOPY.
- This combination of flags is useful to specify an array that will be used
- for both input and output.
- If a copy is needed, then when the temporary is deleted (by your use of
- Py_DECREF at the end of the interface routine), the temporary array will
- be copied back into the original array passed in.
- Use of the UPDATEIFCOPY flag requires that the input object is already
- an array (because other objects cannot be automatically updated in this
- fashion).
- If an error occurs use
-\series bold
-PyArray_DECREF_ERR
-\series default
-(obj) on an array with the NPY_UPDATEIFCOPY flag set.
- This will delete the array without causing the contents to be copied back
- into the original array.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- Other useful flags that can be OR'd as additional requirements are:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-NPY_FORCECAST Cast to the desired type, even if it can't be done without
- losing information.
-\end_layout
-
-\begin_layout Description
-NPY_ENSURECOPY Make sure the resulting array is a copy of the original.
-\end_layout
-
-\begin_layout Description
-NPY_ENSUREARRAY Make sure the resulting object is an actual ndarray and
- not a sub-class.
-\end_layout
-
-\end_deeper
-\end_deeper
-\begin_layout Note
-Whether or not an array is byte-swapped is determined by the data-type of
- the array.
- Native byte-order arrays are always requested by PyArray_FROM_OTF and so
- there is no need for a NPY_NOTSWAPPED flag in the requirements argument.
- There is also no way to get a byte-swapped array from this routine.
-\end_layout
-
-\begin_layout Subsection
-Creating a brand-new ndarray
-\end_layout
-
-\begin_layout Standard
-Quite often new arrays must be created from within extension-module code.
- Perhaps an output array is needed and you don't want the caller to have
- to supply it.
- Perhaps only a temporary array is needed to hold an intermediate calculation.
- Whatever the need there are simple ways to get an ndarray object of whatever
- data-type is needed.
- The most general function for doing this is PyArray_NewFromDescr.
- All array creation functions go through this heavily re-used code.
- Because of its flexibility, it can be somewhat confusing to use.
- As a result, simpler forms exist that are easier to use.
-
-\end_layout
-
-\begin_layout Description
-PyArray_SimpleNew (
-\family typewriter
-PyObject*
-\family default
-)(
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-int
-\family default
- typenum)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function allocates new memory and places it in an ndarray with
-\family typewriter
-nd
-\family default
- dimensions whose shape is determined by the array of at least
-\family typewriter
-nd
-\family default
- items pointed to by
-\family typewriter
-dims
-\family default
-.
- The memory for the array is uninitialized (unless typenum is
-\series bold
-NPY_OBJECT
-\series default
- in which case each element in the array is set to NULL).
- The
-\family typewriter
-typenum
-\family default
- argument allows specification of any of the builtin data-types such as
-
-\series bold
-NPY_FLOAT
-\series default
- or
-\series bold
-NPY_LONG
-\series default
-.
- The memory for the array can be set to zero if desired using
-\series bold
-PyArray_FILLWBYTE
-\series default
-(return_object, 0).
-
-\end_layout
-
-\begin_layout Description
-PyArray_SimpleNewFromData (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-int
-\family default
- nd,
-\family typewriter
-npy_intp*
-\family default
- dims,
-\family typewriter
-int
-\family default
- typenum,
-\family typewriter
-void*
-\family default
- data)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Sometimes, you want to wrap memory allocated elsewhere into an ndarray
- object for downstream use.
- This routine makes it straightforward to do that.
- The first three arguments are the same as in
-\series bold
-PyArray_SimpleNew
-\series default
-, the final argument is a pointer to a block of contiguous memory that the
- ndarray should use as it's data-buffer which will be interpreted in C-style
- contiguous fashion.
- A new reference to an ndarray is returned, but the ndarray will not own
- its data.
- When this ndarray is deallocated, the pointer will not be freed.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- You should ensure that the provided memory is not freed while the returned
- array is in existence.
- The easiest way to handle this is if data comes from another reference-counted
- Python object.
- The reference count on this object should be increased after the pointer
- is passed in, and the base member of the returned ndarray should point
- to the Python object that owns the data.
- Then, when the ndarray is deallocated, the base-member will be DECREF'd
- appropriately.
- If you want the memory to be freed as soon as the ndarray is deallocated
- then simply set the OWNDATA flag on the returned ndarray.
-
-\end_layout
-
-\begin_layout Subsection
-Getting at ndarray memory and accessing elements of the ndarray
-\end_layout
-
-\begin_layout Standard
-If obj is an ndarray (PyArrayObject *), then the data-area of the ndarray
- is pointed to by the void* pointer
-\series bold
-PyArray_DATA
-\series default
-(obj) or the char* pointer
-\series bold
-PyArray_BYTES
-\series default
-(obj).
- Remember that (in general) this data-area may not be aligned according
- to the data-type, it may represent byte-swapped data, and/or it may not
- be writeable.
- If the data area is aligned and in native byte-order, then how to get at
- a specific element of the array is determined only by the array of npy_intp
- variables,
-\series bold
-PyArray_STRIDES
-\series default
-(obj).
- In particular, this c-array of integers shows how many
-\series bold
-bytes
-\series default
- must be added to the current element pointer to get to the next element
- in each dimension.
- For arrays less than 4-dimensions there are
-\series bold
-PyArray_GETPTR<k>
-\series default
-(obj, ...) macros where <k> is the integer 1, 2, 3, or 4 that make using the
- array strides easier.
- The arguments ....
- represent <k> non-negative integer indices into the array.
- For example, suppose
-\family typewriter
-E
-\family default
- is a 3-dimensional ndarray.
- A (void*) pointer to the element
-\family typewriter
-E[i,j,k]
-\family default
- is obtained as PyArray_GETPTR3(E, i, j, k).
-
-\end_layout
-
-\begin_layout Standard
-As explained previously, C-style contiguous arrays and Fortran-style contiguous
- arrays have particular striding patterns.
- Two array flags (NPY_C_CONTIGUOUS and NPY_F_CONTIGUOUS) indicate whether
- or not the striding pattern of a particular array matches the C-style contiguou
-s or Fortran-style contiguous or neither.
- Whether or not the striding pattern matches a standard C or Fortran one
- can be tested Using
-\family typewriter
-PyArray_ISCONTIGUOUS
-\family default
-(obj) and
-\family typewriter
-PyArray_ISFORTRAN
-\family default
-(obj) respectively.
- Most third-party libraries expect contiguous arrays.
- But, often it is not difficult to support general-purpose striding.
- I encourage you to use the striding information in your own code whenever
- possible, and reserve single-segment requirements for wrapping third-party
- code.
- Using the striding information provided with the ndarray rather than requiring
- a contiguous striding reduces copying that otherwise must be made.
-
-\end_layout
-
-\begin_layout Section
-Example
-\end_layout
-
-\begin_layout Standard
-The following example shows how you might write a wrapper that accepts two
- input arguments (that will be converted to an array) and an output argument
- (that must be an array).
- The function returns None and updates the output array.
-
-\begin_inset LatexCommand index
-name "extension module|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout LyX-Code
-static PyObject *
-\end_layout
-
-\begin_layout LyX-Code
-example_wrapper(PyObject *dummy, PyObject *args)
-\end_layout
-
-\begin_layout LyX-Code
-{
-\end_layout
-
-\begin_layout LyX-Code
- PyObject *arg1=NULL, *arg2=NULL, *out=NULL;
-\end_layout
-
-\begin_layout LyX-Code
- PyObject *arr1=NULL, *arr2=NULL, *oarr=NULL;
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
- if (!PyArg_ParseTuple(args,
-\begin_inset Quotes eld
-\end_inset
-
-OOO&
-\begin_inset Quotes erd
-\end_inset
-
-, &arg1, *arg2,
-\end_layout
-
-\begin_layout LyX-Code
- &PyArrayType, *out)) return NULL;
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
- arr1 = PyArray_FROM_OTF(arg1, NPY_DOUBLE, NPY_IN_ARRAY);
-\end_layout
-
-\begin_layout LyX-Code
- if (arr1 == NULL) return NULL;
-\end_layout
-
-\begin_layout LyX-Code
- arr2 = PyArray_FROM_OTF(arg2, NPY_DOUBLE, NPY_IN_ARRAY);
-\end_layout
-
-\begin_layout LyX-Code
- if (arr2 == NULL) goto fail;
-\end_layout
-
-\begin_layout LyX-Code
- oarr = PyArray_FROM_OTF(out, NPY_DOUBLE, NPY_INOUT_ARRAY);
-\end_layout
-
-\begin_layout LyX-Code
- if (oarr == NULL) goto fail;
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
- /* code that makes use of arguments */
-\end_layout
-
-\begin_layout LyX-Code
- /* You will probably need at least
-\end_layout
-
-\begin_layout LyX-Code
- nd = PyArray_NDIM(<..>) -- number of dimensions
-\end_layout
-
-\begin_layout LyX-Code
- dims = PyArray_DIMS(<..>) -- npy_intp array of length nd
-\end_layout
-
-\begin_layout LyX-Code
- showing length in each dim.
-\end_layout
-
-\begin_layout LyX-Code
- dptr = (double *)PyArray_DATA(<..>) -- pointer to data.
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
- If an error occurs goto fail.
-\end_layout
-
-\begin_layout LyX-Code
- */
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
- Py_DECREF(arr1);
-\end_layout
-
-\begin_layout LyX-Code
- Py_DECREF(arr2);
-\end_layout
-
-\begin_layout LyX-Code
- Py_DECREF(oarr);
-\end_layout
-
-\begin_layout LyX-Code
- Py_INCREF(Py_None);
-\end_layout
-
-\begin_layout LyX-Code
- return Py_None;
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
- fail:
-\end_layout
-
-\begin_layout LyX-Code
- Py_XDECREF(arr1);
-\end_layout
-
-\begin_layout LyX-Code
- Py_XDECREF(arr2);
-\end_layout
-
-\begin_layout LyX-Code
- PyArray_XDECREF_ERR(oarr);
-\end_layout
-
-\begin_layout LyX-Code
- return NULL;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Chapter
-Beyond the Basics
-\end_layout
-
-\begin_layout Quotation
-The voyage of discovery is not in seeking new landscapes but in having new
- eyes.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Marcel Proust
-\end_layout
-
-\begin_layout Quotation
-Discovery is seeing what everyone else has seen and thinking what no one
- else has thought.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Albert Szent-Gyorgi
-\end_layout
-
-\begin_layout Section
-Iterating over elements in the array
-\end_layout
-
-\begin_layout Subsection
-Basic Iteration
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "sec:array_iterator"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "array iterator|("
-
-\end_inset
-
-One common algorithmic requirement is to be able to walk over all elements
- in a multidimensional array.
- The array iterator object makes this easy to do in a generic way that works
- for arrays of any dimension.
- Naturally, if you know the number of dimensions you will be using, then
- you can always write nested for loops to accomplish the iteration.
- If, however, you want to write code that works with any number of dimensions,
- then you can make use of the array iterator.
- An array iterator object is returned when accessing the .flat attribute
- of an array.
-
-\end_layout
-
-\begin_layout Standard
-Basic usage is to call
-\series bold
-PyArray_IterNew
-\series default
- (
-\family typewriter
-array
-\family default
-) where array is an ndarray object (or one of its sub-classes).
- The returned object is an array-iterator object (the same object returned
- by the .flat attribute of the ndarray).
- This object is usually cast to PyArrayIterObject* so that its members can
- be accessed.
- The only members that are needed are
-\family typewriter
-iter->size
-\family default
- which contains the total size of the array,
-\family typewriter
-iter->index
-\family default
-, which contains the current 1-d index into the array, and
-\family typewriter
-iter->dataptr
-\family default
- which is a pointer to the data for the current element of the array.
- Sometimes it is also useful to access
-\family typewriter
-iter->ao
-\family default
- which is a pointer to the underlying ndarray object.
-
-\end_layout
-
-\begin_layout Standard
-After processing data at the current element of the array, the next element
- of the array can be obtained using the macro
-\series bold
-PyArray_ITER_NEXT
-\series default
-(
-\family typewriter
-iter
-\family default
-).
- The iteration always proceeds in a C-style contiguous fashion (last index
- varying the fastest).
- The
-\series bold
-PyArray_ITER_GOTO
-\series default
-(
-\family typewriter
-iter
-\family default
-,
-\family typewriter
-destination
-\family default
-) can be used to jump to a particular point in the array, where
-\family typewriter
-destination
-\family default
- is an array of npy_intp data-type with space to handle at least the number
- of dimensions in the underlying array.
- Occasionally it is useful to use
-\series bold
-PyArray_ITER_GOTO1D
-\series default
-(
-\family typewriter
-iter
-\family default
-,
-\family typewriter
-index
-\family default
-) which will jump to the 1-d index given by the value of
-\family typewriter
-index
-\family default
-.
- The most common usage, however, is given in the following example.
-
-\end_layout
-
-\begin_layout LyX-Code
-PyObject *obj; /* assumed to be some ndarray object */
-\end_layout
-
-\begin_layout LyX-Code
-PyArrayIterObject *iter;
-\end_layout
-
-\begin_layout LyX-Code
-...
-\end_layout
-
-\begin_layout LyX-Code
-iter = (PyArrayIterObject *)PyArray_IterNew(obj);
-\end_layout
-
-\begin_layout LyX-Code
-if (iter == NULL) goto fail; /* Assume fail has clean-up code */
-\end_layout
-
-\begin_layout LyX-Code
-while (iter->index < iter->size) {
-\end_layout
-
-\begin_layout LyX-Code
- /* do something with the data at it->dataptr */
-\end_layout
-
-\begin_layout LyX-Code
- PyArray_ITER_NEXT(it);
-\end_layout
-
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout LyX-Code
-...
-\end_layout
-
-\begin_layout Standard
-You can also use
-\series bold
-PyArrayIter_Check
-\series default
-(
-\family typewriter
-obj
-\family default
-) to ensure you have an iterator object and
-\series bold
-PyArray_ITER_RESET
-\series default
-(
-\family typewriter
-iter
-\family default
-) to reset an iterator object back to the beginning of the array.
-
-\end_layout
-
-\begin_layout Standard
-It should be emphasized at this point that you may not need the array iterator
- if your array is already contiguous (using an array iterator will work
- but will be slower than the fastest code you could write).
- The major purpose of array iterators is to encapsulate iteration over N-dimensi
-onal arrays with arbitrary strides.
- They are used in many, many places in the NumPy source code itself.
- If you already know your array is contiguous (Fortran or C), then simply
- adding the element-size to a running pointer variable will step you through
- the array very efficiently.
- In other words, code like this will probably be faster for you in the contiguou
-s case (assuming doubles).
-
-\end_layout
-
-\begin_layout LyX-Code
-npy_intp size;
-\end_layout
-
-\begin_layout LyX-Code
-double *dptr; /* could make this any variable type */
-\end_layout
-
-\begin_layout LyX-Code
-size = PyArray_SIZE(obj);
-\end_layout
-
-\begin_layout LyX-Code
-dptr = PyArray_DATA(obj);
-\end_layout
-
-\begin_layout LyX-Code
-while(size--) {
-\end_layout
-
-\begin_layout LyX-Code
- /* do something with the data at dptr */
-\end_layout
-
-\begin_layout LyX-Code
- dptr++;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Subsection
-Iterating over all but one axis
-\end_layout
-
-\begin_layout Standard
-A common algorithm is to loop over all elements of an array and perform
- some function with each element by issuing a function call.
- As function calls can be time consuming, one way to speed up this kind
- of algorithm is to write the function so it takes a vector of data and
- then write the iteration so the function call is performed for an entire
- dimension of data at a time.
- This increases the amount of work done per function call, thereby reducing
- the function-call over-head to a small(er) fraction of the total time.
- Even if the interior of the loop is performed without a function call it
- can be advantageous to perform the inner loop over the dimension with the
- highest number of elements to take advantage of speed enhancements available
- on micro-processors that use pipelining to enhance fundmental operations.
-
-\end_layout
-
-\begin_layout Standard
-The
-\series bold
-PyArray_IterAllButAxis
-\series default
-(
-\family typewriter
-array
-\family default
-,
-\family typewriter
-&dim
-\family default
-) constructs an iterator object that is modified so that it will not iterate
- over the dimension indicated by dim.
- The only restriction on this iterator object, is that the
-\series bold
-PyArray_Iter_GOTO1D
-\series default
-(
-\family typewriter
-it
-\family default
-,
-\family typewriter
-ind
-\family default
-) macro cannot be used (thus flat indexing won't work either if you pass
- this object back to Python --- so you shouldn't do this).
- Note that the returned object from this routine is still usually cast to
- PyArrayIterObject *.
- All that's been done is to modify the strides and dimensions of the returned
- iterator to simulate iterating over array[...,0,...] where 0 is placed on the
-
-\begin_inset Formula $\textrm{dim}^{\textrm{th}}$
-\end_inset
-
- dimension.
- If dim is negative, then the dimension with the largest axis is found and
- used.
-
-\end_layout
-
-\begin_layout Subsection
-Iterating over multiple arrays
-\end_layout
-
-\begin_layout Standard
-Very often, it is desireable to iterate over several arrays at the same
- time.
- The universal functions are an example of this kind of behavior.
- If all you want to do is iterate over arrays with the same shape, then
- simply creating several iterator objects is the standard procedure.
- For example, the following code iterates over two arrays assumed to be
- the same shape and size (actually obj1 just has to have at least as many
- total elements as does obj2):
-\end_layout
-
-\begin_layout LyX-Code
-/* It is already assumed that obj1 and obj2
-\end_layout
-
-\begin_layout LyX-Code
- are ndarrays of the same shape and size.
-\end_layout
-
-\begin_layout LyX-Code
-*/
-\end_layout
-
-\begin_layout LyX-Code
-iter1 = (PyArrayIterObject *)PyArray_IterNew(obj1);
-\end_layout
-
-\begin_layout LyX-Code
-if (iter1 == NULL) goto fail;
-\end_layout
-
-\begin_layout LyX-Code
-iter2 = (PyArrayIterObject *)PyArray_IterNew(obj2);
-\end_layout
-
-\begin_layout LyX-Code
-if (iter2 == NULL) goto fail; /* assume iter1 is DECREF'd at fail */
-\end_layout
-
-\begin_layout LyX-Code
-while (iter2->index < iter2->size) {
-\end_layout
-
-\begin_layout LyX-Code
- /* process with iter1->dataptr and iter2->dataptr */
-\end_layout
-
-\begin_layout LyX-Code
- PyArray_ITER_NEXT(iter1);
-\end_layout
-
-\begin_layout LyX-Code
- PyArray_ITER_NEXT(iter2);
-\end_layout
-
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Subsection
-Broadcasting over multiple arrays
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "broadcasting"
-
-\end_inset
-
-When multiple arrays are involved in an operation, you may want to use the
- same broadcasting rules that the math operations (
-\emph on
-i.e.
-
-\emph default
- the ufuncs) use.
- This can be done easily using the PyArrayMultiIterObject.
- This is the object returned from the Python command numpy.broadcast and
- it is almost as easy to use from C.
- The function
-\series bold
-PyArray_MultiIterNew
-\series default
- (
-\family typewriter
-n
-\family default
-,
-\family typewriter
-...
-\family default
-) is used (with
-\family typewriter
-n
-\family default
- input objects in place of
-\family typewriter
-...
-\family default
-).
- The input objects can be arrays or anything that can be converted into
- an array.
- A pointer to a PyArrayMultiIterObject is returned.
- Broadcasting has already been accomplished which adjusts the iterators
- so that all that needs to be done to advance to the next element in each
- array is for PyArray_ITER_NEXT to be called for each of the inputs.
- This incrementing is automatically performed by
-\series bold
-PyArray_MultiIter_NEXT
-\series default
-(
-\family typewriter
-obj
-\family default
-) macro (which can handle a multiterator
-\family typewriter
-obj
-\family default
- as either a PyArrayMultiObject* or a PyObject*).
- The data from input number
-\family typewriter
-i
-\family default
- is available using
-\series bold
-PyArray_MultiIter_DATA
-\series default
-(
-\family typewriter
-obj
-\family default
-,
-\family typewriter
-i
-\family default
-) and the total (broadcasted) size as
-\series bold
-PyArray_MultiIter_SIZE
-\series default
-(
-\family typewriter
-obj
-\family default
-).
- An example of using this feature follows.
-\end_layout
-
-\begin_layout LyX-Code
-mobj = PyArray_MultiIterNew(2, obj1, obj2);
-\end_layout
-
-\begin_layout LyX-Code
-size = PyArray_MultiIter_SIZE(obj);
-\end_layout
-
-\begin_layout LyX-Code
-while(size--) {
-\end_layout
-
-\begin_layout LyX-Code
- ptr1 = PyArray_MultiIter_DATA(mobj, 0);
-\end_layout
-
-\begin_layout LyX-Code
- ptr2 = PyArray_MultiIter_DATA(mobj, 1);
-\end_layout
-
-\begin_layout LyX-Code
- /* code using contents of ptr1 and ptr2 */
-\end_layout
-
-\begin_layout LyX-Code
- PyArray_MultiIter_NEXT(mobj);
-\end_layout
-
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Standard
-The function
-\series bold
-PyArray_RemoveSmallest
-\series default
-(
-\family typewriter
-multi
-\family default
-) can be used to take a multi-iterator object and adjust all the iterators
- so that iteration does not take place over the largest dimension (it makes
- that dimension of size 1).
- The code being looped over that makes use of the pointers will very-likely
- also need the strides data for each of the iterators.
- This information is stored in multi->iters[i]->strides.
-\end_layout
-
-\begin_layout Standard
-There are several examples of using the multi-iterator in the NumPy source
- code as it makes N-dimensional broadcasting-code very simple to write.
- Browse the source for more examples.
-
-\begin_inset LatexCommand index
-name "array iterator|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Creating a new universal function
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "sec:Creating-a-new"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "ufunc!adding new|("
-
-\end_inset
-
-The umath module is a computer-generated C-module that creates many ufuncs.
- It provides a great many examples of how to create a universal function.
- Creating your own ufunc that will make use of the ufunc machinery is not
- difficult either.
- Suppose you have a function that you want to operate element-by-element
- over its inputs.
- By creating a new ufunc you will obtain a function that handles
-\end_layout
-
-\begin_layout Itemize
-broadcasting
-\end_layout
-
-\begin_layout Itemize
-N-dimensional looping
-\end_layout
-
-\begin_layout Itemize
-automatic type-conversions with minimal memory usage
-\end_layout
-
-\begin_layout Itemize
-optional output arrays
-\end_layout
-
-\begin_layout Standard
-It is not difficult to create your own ufunc.
- All that is required is a 1-d loop for each data-type you want to support.
- Each 1-d loop must have a specific signature, and only ufuncs for fixed-size
- data-types can be used.
- The function call used to create a new ufunc to work on built-in data-types
- is given below.
- A different mechanism is used to register ufuncs for user-defined data-types.
-\end_layout
-
-\begin_layout Description
-PyUFunc_FromFuncAndData (
-\family typewriter
-PyObject*
-\family default
-) (
-\family typewriter
-PyUFuncGenericFunction*
-\family default
- func,
-\family typewriter
-void**
-\family default
- data,
-\family typewriter
-char*
-\family default
- types,
-\family typewriter
-int
-\family default
- ntypes,
-\family typewriter
-int
-\family default
- nin,
-\family typewriter
-int
-\family default
- nout,
-\family typewriter
-int
-\family default
- identity,
-\family typewriter
-char*
-\family default
- name,
-\family typewriter
-char*
-\family default
- doc,
-\family typewriter
-int
-\family default
- check_return)
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-func A pointer to an array of 1-d functions to use.
- This array must be at least ntypes long.
- Each entry in the array must be a
-\family typewriter
-PyUFuncGenericFunction
-\family default
- function.
- This function has the following signature.
- An example of a valid 1d loop function is also given.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\family typewriter
-void
-\family default
- loop1d (
-\family typewriter
-char**
-\family default
- args,
-\family typewriter
-npy_intp*
-\family default
- dimensions,
-\family typewriter
-npy_intp*
-\family default
- steps,
-\family typewriter
-void*
-\family default
- data)
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-args An array of pointers to the actual data for the input and output arrays.
- The input arguments are given first followed by the output arguments.
-\end_layout
-
-\begin_layout Description
-dimensions A pointer to the size of the dimension over which this function
- is looping.
-
-\end_layout
-
-\begin_layout Description
-steps A pointer to the number of bytes to jump to get to the next element
- in this dimension for each of the input and output arguments.
-
-\end_layout
-
-\begin_layout Description
-data Arbitrary data (extra arguments, function names,
-\emph on
-etc.
-\emph default
-) that can be stored with the ufunc and will be passed in when it is called.
-
-\end_layout
-
-\end_deeper
-\begin_layout LyX-Code
-static void
-\newline
-double_add(char *args, npy_intp *dimensions, npy_intp *steps,
- void *extra)
-\newline
-{
-\newline
- npy_intp i;
-\newline
- npy_intp is1=steps[0], is2=steps[1];
-\newline
-
- npy_intp os=steps[2], n=dimensions[0];
-\newline
- char *i1=args[0], *i2=args[1],
- *op=args[2];
-\newline
- for (i=0; i<n; i++) {
-\newline
- *((double *)op) = *((double
- *)i1) +
-\backslash
-
-\newline
- *((double *)i2);
-\newline
- i1 += is1; i2 += is2;
- op += os;
-\newline
- }
-\newline
-}
-\end_layout
-
-\begin_layout Description
-data An array of data.
- There should be ntypes entries (or NULL) --- one for every loop function
- defined for this ufunc.
- This data will be passed in to the 1-d loop.
- One common use of this data variable is to pass in an actual function to
- call to compute the result when a generic 1-d loop (e.g.
- PyUFunc_d_d) is being used.
-
-\end_layout
-
-\begin_layout Description
-types An array of type-number signatures (type
-\family typewriter
-char
-\family default
-).
- This array should be of size (nin+nout)*ntypes and contain the data-types
- for the corresponding 1-d loop.
- The inputs should be first followed by the outputs.
- For example, suppose I have a ufunc that supports 1 integer and 1 double
- 1-d loop (length-2 func and data arrays) that takes 2 inputs and returns
- 1 output that is always a complex double, then the types array would be
-\end_layout
-
-\begin_layout LyX-Code
-char my_sigs[] =
-\backslash
-
-\newline
-{NPY_INT, NPY_INT, NPY_CDOUBLE,
-\newline
-NPY_DOUBLE, NPY_DOUBLE, NPY_CDOUBLE};
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The bit-width names can also be used (e.g.
-
-\family typewriter
-NPY_INT32
-\family default
-,
-\family typewriter
-NPY_COMPLEX128
-\family default
-) if desired.
-
-\end_layout
-
-\begin_layout Description
-ntypes The number of data-types supported.
- This is equal to the number of 1-d loops provided.
-
-\end_layout
-
-\begin_layout Description
-nin The number of input arguments.
-\end_layout
-
-\begin_layout Description
-nout The number of output arguments.
-\end_layout
-
-\begin_layout Description
-identity Either
-\series bold
-PyUFunc_One
-\series default
-,
-\series bold
-PyUFunc_Zero
-\series default
-,
-\series bold
-PyUFunc_None
-\series default
-.
- This specifies what should be returned when an empty array is passed to
- the reduce method of the ufunc.
-
-\end_layout
-
-\begin_layout Description
-name A
-\family typewriter
-NULL
-\family default
--terminated string providing the name of this ufunc (should be the Python
- name it will be called).
-
-\end_layout
-
-\begin_layout Description
-doc A documentation string for this ufunc (will be used in generating the
- response to <ufunc_name>.__doc__).
- Do not include the function signature or the name as this is generated
- automatically.
-
-\end_layout
-
-\begin_layout Description
-check_return Not presently used, but this integer value does get set in
- the structure-member of similar name.
-
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-The returned ufunc object is a callable Python object.
- It should be placed in a (module) dictionary under the same name as was
- used in the name argument to the ufunc-creation routine.
- The following example is adapted from the umath module:
-\begin_inset LatexCommand index
-name "ufunc!adding new|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout LyX-Code
-static PyUFuncGenericFunction atan2_functions[]=
-\backslash
-
-\newline
- {PyUFunc_ff_f, PyUFunc_dd_d,
-\newline
- PyUFunc_gg_g, PyUFunc_OO_O_method};
-\newline
-static
- void* atan2_data[]=
-\backslash
-
-\newline
- {(void *)atan2f,(void *) atan2,
-\newline
- (void *)atan2l,(void *)"arctan2"};
-\newline
-stati
-c char atan2_signatures[]=
-\backslash
-
-\newline
- {NPY_FLOAT, NPY_FLOAT, NPY_FLOAT,
-\newline
- NPY_DOUBLE, NPY_DOUBLE,
-\newline
- NPY_DOUBLE
-, NPY_LONGDOUBLE,
-\newline
- NPY_LONGDOUBLE, NPY_LONGDOUBLE
-\newline
- NPY_OBJECT, NPY_OBJECT,
-
-\newline
- NPY_OBJECT};
-\newline
-...
-\newline
-/* in the module initialization code */
-\newline
-PyObject *f, *dict,
- *module;
-\newline
-...
-\newline
-dict = PyModule_GetDict(module);
-\newline
-...
-\newline
-f = PyUFunc_FromFuncAndData(atan2_funct
-ions,
-\newline
- atan2_data, atan2_signatures, 4, 2, 1,
-\newline
- PyUFunc_None, "arctan2",
-
-\newline
- "a safe and correct arctan(x1/x2)", 0);
-\newline
-PyDict_SetItemString(dict, "arctan2"
-, f);
-\newline
-Py_DECREF(f);
-\newline
-...
-\end_layout
-
-\begin_layout Section
-User-defined data-types
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "dtype!adding new|("
-
-\end_inset
-
-NumPy comes with 21 builtin data-types.
- While this covers a large majority of possible use cases, it is conceivable
- that a user may have a need for an additional data-type.
- There is some support for adding an additional data-type into the NumPy
- system.
- This additional data-type will behave much like a regular data-type except
- ufuncs must have 1-d loops registered to handle it separately.
- Also checking for whether or not other data-types can be cast
-\begin_inset Quotes eld
-\end_inset
-
-safely
-\begin_inset Quotes erd
-\end_inset
-
- to and from this new type or not will always return
-\begin_inset Quotes eld
-\end_inset
-
-can cast
-\begin_inset Quotes erd
-\end_inset
-
- unless you also register which types your new data-type can be cast to
- and from.
- Adding data-types is one of the less well-tested areas for NumPy 1.0, so
- there may be bugs remaining in the approach.
- Only add a new data-type if you can't do what you want to do using the
- OBJECT or VOID data-types that are already available.
- As an example of what I consider a useful application of the ability to
- add data-types is the possibility of adding a data-type of arbitrary precision
- floats to NumPy.
-
-\end_layout
-
-\begin_layout Subsection
-Adding the new data-type
-\end_layout
-
-\begin_layout Standard
-To begin to make use of the new data-type, you need to first define a new
- Python type to hold the scalars of your new data-type.
- It should be acceptable to inherit from one of the array scalars if your
- new type has a binary compatible layout.
- This will allow your new data type to have the methods and attributes of
- array scalars.
- New data-types must have a fixed memory size (if you want to define a data-type
- that needs a flexible representation, like a variable-precision number,
- then use a pointer to the object as the data-type).
- The memory layout of the object structure for the new Python type must
- be PyObject_HEAD followed by the fixed-size memory needed for the data-type.
- For example, a suitable structure for the new Python type is:
-\end_layout
-
-\begin_layout LyX-Code
-typedef struct {
-\end_layout
-
-\begin_layout LyX-Code
- PyObject_HEAD;
-\end_layout
-
-\begin_layout LyX-Code
- some_data_type obval;
-\end_layout
-
-\begin_layout LyX-Code
- /* the name can be whatever you want */
-\end_layout
-
-\begin_layout LyX-Code
-} PySomeDataTypeObject;
-\end_layout
-
-\begin_layout Standard
-After you have defined a new Python type object, you must then define a
- new PyArray_Descr structure whose typeobject member will contain a pointer
- to the data-type you've just defined.
- In addition, the required functions in the
-\begin_inset Quotes eld
-\end_inset
-
-.f
-\begin_inset Quotes erd
-\end_inset
-
- member must be defined: nonzero, copyswap, copyswapn, setitem, getitem,
- and cast.
- The more functions in the
-\begin_inset Quotes eld
-\end_inset
-
-.f
-\begin_inset Quotes erd
-\end_inset
-
- member you define, however, the more useful the new data-type will be.
- It is very important to intialize unused functions to NULL.
- This can be achieved using
-\series bold
-PyArray_InitArrFuncs
-\series default
-(f).
-\end_layout
-
-\begin_layout Standard
-Once a new PyArray_Descr structure is created and filled with the needed
- information and useful functions you call
-\series bold
-PyArray_RegisterDataType
-\series default
-(new_descr).
- The return value from this call is an integer providing you with a unique
- type_number that specifies your data-type.
- This type number should be stored and made available by your module so
- that other modules can use it to recognize your data-type (the other mechanism
- for finding a user-defined data-type number is to search based on the name
- of the type-object associated with the data-type using
-\series bold
-PyArray_TypeNumFromName
-\series default
-).
-
-\end_layout
-
-\begin_layout Subsection
-Registering a casting function
-\end_layout
-
-\begin_layout Standard
-You may want to allow builtin (and other user-defined) data-types to be
- cast automatically to your data-type.
- In order to make this possible, you must register a casting function with
- the data-type you want to be able to cast from.
- This requires writing low-level casting functions for each conversion you
- want to support and then registering these functions with the data-type
- descriptor.
- A low-level casting function has the signature.
-
-\end_layout
-
-\begin_layout Description
-castfunc (
-\family typewriter
-void
-\family default
-) (
-\family typewriter
-void*
-\family default
- from,
-\family typewriter
-void*
-\family default
- to,
-\family typewriter
-npy_intp
-\family default
- n,
-\family typewriter
-void*
-\family default
- fromarr,
-\family typewriter
-void*
-\family default
- toarr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Cast
-\family typewriter
-n
-\family default
- elements
-\family typewriter
-from
-\family default
- one type
-\family typewriter
-to
-\family default
- another.
- The data to cast from is in a contiguous, correctly-swapped and aligned
- chunk of memory pointed to by from.
- The buffer to cast to is also contiguous, correctly-swapped and aligned.
- The fromarr and toarr arguments should only be used for flexible-element-sized
- arrays (string, unicode, void).
-
-\end_layout
-
-\begin_layout Standard
-An example castfunc is
-\end_layout
-
-\begin_layout LyX-Code
-static void
-\end_layout
-
-\begin_layout LyX-Code
-double_to_float(double *from, float* to, npy_intp n,
-\newline
- void* ig1, void*
- ig2);
-\newline
-while (n--) {
-\newline
- (*to++) = (double) *(from++);
-\newline
-}
-\end_layout
-
-\begin_layout Standard
-This could then be registered to convert doubles to floats using the code
-\end_layout
-
-\begin_layout LyX-Code
-doub = PyArray_DescrFromType(NPY_DOUBLE);
-\newline
-PyArray_RegisterCastFunc(doub,
- NPY_FLOAT,
-\newline
- (PyArray_VectorUnaryFunc *)double_to_float);
-\newline
-Py_DECREF(doub);
-\end_layout
-
-\begin_layout Subsection
-Registering coercion rules
-\end_layout
-
-\begin_layout Standard
-By default, all user-defined data-types are not presumed to be safely castable
- to any builtin data-types.
- In addition builtin data-types are not presumed to be safely castable to
- user-defined data-types.
- This situation limits the ability of user-defined data-types to participate
- in the coercion system used by ufuncs and other times when automatic coercion
- takes place in NumPy.
- This can be changed by registering data-types as safely castable from a
- particlar data-type object.
- The function
-\series bold
-PyArray_RegisterCanCast
-\series default
- (from_descr, totype_number, scalarkind) should be used to specify that
- the data-type object from_descr can be cast to the data-type with type
- number totype_number.
- If you are not trying to alter scalar coercion rules, then use
-\series bold
-NPY_NOSCALAR
-\series default
- for the scalarkind argument.
-\end_layout
-
-\begin_layout Standard
-If you want to allow your new data-type to also be able to share in the
- scalar coercion rules, then you need to specify the scalarkind function
- in the data-type object's
-\begin_inset Quotes eld
-\end_inset
-
-.f
-\begin_inset Quotes erd
-\end_inset
-
- member to return the kind of scalar the new data-type should be seen as
- (the value of the scalar is available to that function).
- Then, you can register data-types that can be cast to separately for each
- scalar kind that may be returned from your user-defined data-type.
- If you don't register scalar coercion handling, then all of your user-defined
- data-types will be seen as
-\series bold
-NPY_NOSCALAR
-\series default
-.
-
-\end_layout
-
-\begin_layout Subsection
-Registering a ufunc loop
-\end_layout
-
-\begin_layout Standard
-You may also want to register low-level ufunc loops for your data-type so
- that an ndarray of your data-type can have math applied to it seamlessly.
- Registering a new loop with exactly the same arg_types signature, silently
- replaces any previously registered loops for that data-type.
-
-\end_layout
-
-\begin_layout Standard
-Before you can register a 1-d loop for a ufunc, the ufunc must be previously
- created.
- Then you call
-\series bold
-PyUFunc_RegisterLoopForType
-\series default
-(...) with the information needed for the loop.
- The return value of this function is
-\family typewriter
-0
-\family default
- if the process was successful and
-\family typewriter
--1
-\family default
- with an error condition set if it was not successful.
-
-\end_layout
-
-\begin_layout Description
-PyUFunc_RegisterLoopForType (
-\family typewriter
-int
-\family default
-) (
-\family typewriter
-PyUFuncObject*
-\family default
- ufunc,
-\family typewriter
-int
-\family default
- usertype,
-\family typewriter
-PyUFuncGenericFunction
-\family default
- function,
-\family typewriter
-int*
-\family default
- arg_types,
-\family typewriter
-void*
-\family default
- data)
-\end_layout
-
-\begin_layout Description
-ufunc The ufunc to attach this loop to.
-\end_layout
-
-\begin_layout Description
-usertype The user-defined type this loop should be indexed under.
- This number must be a user-defined type or an error occurs.
-
-\end_layout
-
-\begin_layout Description
-function The ufunc inner 1-d loop.
- This function must have the signature as explained in Section
-\begin_inset LatexCommand ref
-reference "sec:Creating-a-new"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-arg_types (optional) If given, this should contain an array of integers
- of at least size ufunc.nargs containing the data-types expected by the loop
- function.
- The data will be copied into a NumPy-managed structure so the memory for
- this argument should be deleted after calling this function.
- If this is NULL, then it will be assumed that all data-types are of type
- usertype.
-\end_layout
-
-\begin_layout Description
-data (optional) Specify any optional data needed by the function which will
- be passed when the function is called.
-
-\begin_inset LatexCommand index
-name "dtype!adding new|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Subtyping the ndarray in C
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ndarray!subtyping|("
-
-\end_inset
-
-One of the lesser-used features that has been lurking in Python since 2.2
- is the ability to sub-class types in C.
- This facility is one of the important reasons for basing NumPy off of the
- Numeric code-base which was already in C.
- A sub-type in C allows much more flexibility with regards to memory management.
- Sub-typing in C is not difficult even if you have only a rudimentary understand
-ing of how to create new types for Python.
- While it is easiest to sub-type from a single parent type, sub-typing from
- multiple parent types is also possible.
- Multiple inheritence in C is generally less useful than it is in Python
- because a restriction on Python sub-types is that they have a binary compatible
- memory layout.
- Perhaps for this reason, it is somewhat easier to sub-type from a single
- parent type.
-
-\end_layout
-
-\begin_layout Standard
-All C-structures corresponding to Python objects must begin with PyObject_HEAD
- (or PyObject_VAR_HEAD).
- In the same way, any sub-type must have a C-structure that begins with
- exactly the same memory layout as the parent type (or all of the parent
- types in the case of multiple-inheritance).
- The reason for this is that Python may attempt to access a member of the
- sub-type structure as if it had the parent structure (
-\emph on
-i.e.
-
-\emph default
- it will cast a given pointer to a pointer to the parent structure and then
- dereference one of it's members).
- If the memory layouts are not compatible, then this attempt will cause
- unpredictable behavior (eventually leading to a memory violation and program
- crash).
-
-\end_layout
-
-\begin_layout Standard
-One of the elements in PyObject_HEAD is a pointer to a type-object structure.
- A new Python type is created by creating a new type-object structure and
- populating it with functions and pointers to describe the desired behavior
- of the type.
- Typically, a new C-structure is also created to contain the instance-specific
- information needed for each object of the type as well.
- For example, &PyArray_Type is a pointer to the type-object table for the
- ndarray while a PyArrayObject* variable is a pointer to a particular instance
- of an ndarray (one of the members of the ndarray structure is, in turn,
- a pointer to the type-object table &PyArray_Type).
- Finally
-\series bold
-PyType_Ready
-\series default
-(<pointer_to_type_object>) must be called for every new Python type.
-
-\end_layout
-
-\begin_layout Subsection
-Creating sub-types
-\end_layout
-
-\begin_layout Standard
-To create a sub-type, a similar proceedure must be followed except only
- behaviors that are different require new entries in the type-object structure.
- All other entires can be NULL and will be filled in by
-\series bold
-PyType_Ready
-\series default
- with appropriate functions from the parent type(s).
- In particular, to create a sub-type in C follow these steps:
-\end_layout
-
-\begin_layout Enumerate
-If needed create a new C-structure to handle each instance of your type.
- A typical C-structure would be
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-typedef _new_struct {
-\newline
- PyArrayObject base;
-\newline
- /* new things here */
-\newline
-} NewArrayO
-bject;
-\end_layout
-
-\begin_layout Standard
-Notice that the full PyArrayObject is used as the first entry in order to
- ensure that the binary layout of instances of the new type is identical
- to the PyArrayObject.
-
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Fill in a new Python type-object structure with pointers to new functions
- that will over-ride the default behavior while leaving any function that
- should remain the same unfilled (or NULL).
- The tp_name element should be different.
-\end_layout
-
-\begin_layout Enumerate
-Fill in the tp_base member of the new type-object structure with a pointer
- to the (main) parent type object.
- For multiple-inheritance, also fill in the tp_bases member with a tuple
- containing all of the parent objects in the order they should be used to
- define inheritance.
- Remember, all parent-types must have the same C-structure for multiple
- inheritance to work properly.
-
-\end_layout
-
-\begin_layout Enumerate
-Call
-\series bold
-PyType_Ready
-\series default
-(<pointer_to_new_type>).
- If this function returns a negative number, a failure occurred and the
- type is not initialized.
- Otherwise, the type is ready to be used.
- It is generally important to place a reference to the new type into the
- module dictionary so it can be accessed from Python.
-
-\end_layout
-
-\begin_layout Standard
-More information on creating sub-types in C can be learned by reading PEP
- 253 (available at http://www.python.org/dev/peps/pep-0253).
-\end_layout
-
-\begin_layout Subsection
-Specific features of ndarray sub-typing
-\end_layout
-
-\begin_layout Standard
-Some special methods and attributes are used by arrays in order to facilitate
- the interoperation of sub-types with the base ndarray type.
-
-\end_layout
-
-\begin_layout Subsubsection
-The __array_finalize__ method
-\end_layout
-
-\begin_layout Standard
-Several array-creation functions of the ndarray allow specification of a
- particular sub-type to be created.
- This allows sub-types to be handled seamlessly in many routines.
- When a sub-type is created in such a fashion, however, neither the __new__
- method nor the __init__ method gets called.
- Instead, the sub-type is allocated and the appropriate instance-structure
- members are filled in.
- Finally, the
-\series bold
-__array_finalize__
-\series default
- attribute is looked-up in the object dictionary.
- If it is present and not None, then it can be either a CObject containing
- a pointer to a
-\series bold
-PyArray_FinalizeFunc
-\series default
- or it can be a method taking a single argument (which could be None).
-
-\end_layout
-
-\begin_layout Standard
-If the
-\series bold
-__array_finalize__
-\series default
- attribute is a CObject, then the pointer must be a pointer to a function
- with the signature:
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- (int) (PyArrayObject *, PyObject *)
-\end_layout
-
-\begin_layout Standard
-The first argument is the newly created sub-type.
- The second argument (if not NULL) is the
-\begin_inset Quotes eld
-\end_inset
-
-parent
-\begin_inset Quotes erd
-\end_inset
-
- array (if the array was created using slicing or some other operation where
- a clearly-distinguishable parent is present).
- This routine can do anything it wants to.
- It should return a -1 on error and 0 otherwise.
-
-\end_layout
-
-\begin_layout Standard
-If the
-\series bold
-__array_finalize__
-\series default
- attribute is not None nor a CObject, then it must be a Python method that
- takes the parent array as an argument (which could be None if there is
- no parent), and returns nothing.
- Errors in this method will be caught and handled.
-
-\end_layout
-
-\begin_layout Subsubsection
-The __array_priority__ attribute
-\end_layout
-
-\begin_layout Standard
-This attribute allows simple but flexible determination of which sub-type
- should be considered
-\begin_inset Quotes eld
-\end_inset
-
-primary
-\begin_inset Quotes erd
-\end_inset
-
- when an operation involving two or more sub-types arises.
- In operations where different sub-types are being used, the sub-type with
- the largest
-\series bold
-__array_priority__
-\series default
- attribute will determine the sub-type of the output(s).
- If two sub-types have the same
-\series bold
-__array_prioirty__
-\series default
- then the sub-type of the first argument determines the output.
- The default
-\series bold
-__array_priority__
-\series default
- attribute returns a value of 0.0 for the base ndarray type and 1.0 for a
- sub-type.
- This attribute can also be defined by objects that are not sub-types of
- the ndarray and can be used to determine which
-\series bold
-__array_wrap__
-\series default
- method should be called for the return output.
-
-\end_layout
-
-\begin_layout Subsubsection
-The __array_wrap__ method
-\end_layout
-
-\begin_layout Standard
-Any class or type can define this method which should take an ndarray argument
- and return an instance of the type.
- It can be seen as the opposite of the
-\series bold
-__array__
-\series default
- method.
- This method is used by the ufuncs (and other NumPy functions) to allow
- other objects to pass through.
- For Python >2.4, it can also be used to write a decorator that converts
- a function that works only with ndarrays to one that works with any type
- with
-\series bold
-__array__
-\series default
- and
-\series bold
-__array_wrap__
-\series default
- methods.
-
-\begin_inset LatexCommand index
-name "ndarray!subtyping|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Chapter
-Using Python as glue
-\end_layout
-
-\begin_layout Quotation
-There is no conversation more boring than the one where everybody agrees.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Michel de Montaigne
-\end_layout
-
-\begin_layout Quotation
-Duct tape is like the force.
- It has a light side, and a dark side, and it holds the universe together.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Carl Zwanzig
-\end_layout
-
-\begin_layout Standard
-Many people like to say that Python is a fantastic glue language.
- Hopefully, this Chapter will convince you that this is true.
- The first adopters of Python for science were typically people who used
- it to glue together large applicaton codes running on super-computers.
- Not only was it much nicer to code in Python than in a shell script or
- Perl, in addition, the ability to easily extend Python made it relatively
- easy to create new classes and types specifically adapted to the problems
- being solved.
- From the interactions of these early contributors, Numeric emerged as an
- array-like object that could be used to pass data between these applications.
-\end_layout
-
-\begin_layout Standard
-As Numeric has matured and developed into NumPy, people have been able to
- write more code directly in NumPy.
- Often this code is fast-enough for production use, but there are still
- times that there is a need to access compiled code.
- Either to get that last bit of efficiency out of the algorithm or to make
- it easier to access widely-available codes written in C/C++ or Fortran.
-
-\end_layout
-
-\begin_layout Standard
-This chapter will review many of the tools that are available for the purpose
- of accessing code written in other compiled languages.
- There are many resources available for learning to call other compiled
- libraries from Python and the purpose of this Chapter is not to make you
- an expert.
- The main goal is to make you aware of some of the possibilities so that
- you will know what to
-\begin_inset Quotes eld
-\end_inset
-
-Google
-\begin_inset Quotes erd
-\end_inset
-
- in order to learn more.
-
-\end_layout
-
-\begin_layout Standard
-The http://www.scipy.org website also contains a great deal of useful information
- about many of these tools.
- For example, there is a nice description of using several of the tools
- explained in this chapter at http://www.scipy.org/PerformancePython.
- This link provides several ways to solve the same problem showing how to
- use and connect with compiled code to get the best performance.
- In the process you can get a taste for several of the approaches that will
- be discussed in this chapter.
-
-\end_layout
-
-\begin_layout Section
-Calling other compiled libraries from Python
-\end_layout
-
-\begin_layout Standard
-While Python is a great language and a pleasure to code in, its dynamic
- nature results in overhead that can cause some code (
-\emph on
-i.e.
-
-\emph default
- raw computations inside of for loops) to be up 10-100 times slower than
- equivalent code written in a static compiled language.
- In addition, it can cause memory usage to be larger than necessary as temporary
- arrays are created and destroyed during computation.
- For many types of computing needs the extra slow-down and memory consumption
- can often not be spared (at least for time- or memory-critical portions
- of your code).
- Therefore one of the most common needs is to call out from Python code
- to a fast, machine-code routine (e.g.
- compiled using C/C++ or Fortran).
- The fact that this is relatively easy to do is a big reason why Python
- is such an excellent high-level language for scientific and engineering
- programming.
-
-\end_layout
-
-\begin_layout Standard
-Their are two basic approaches to calling compiled code: writing an extension
- module that is then imported to Python using the import command, or calling
- a shared-library subroutine directly from Python using the ctypes module
- (included in the standard distribution with Python 2.5).
- The first method is the most common (but with the inclusion of ctypes into
- Python 2.5 this status may change).
-\end_layout
-
-\begin_layout Warning
-Calling C-code from Python can result in Python crashes if you are not careful.
- None of the approaches in this chapter are immune.
- You have to know something about the way data is handled by both NumPy
- and by the third-party library being used.
-
-\end_layout
-
-\begin_layout Section
-Hand-generated wrappers
-\end_layout
-
-\begin_layout Standard
-Extension modules were discussed in Chapter
-\begin_inset LatexCommand ref
-reference "sec:Writing-an-extension"
-
-\end_inset
-
-.
- The most basic way to interface with compiled code is to write an extension
- module and construct a module method that calls the compiled code.
- For improved readability, your method should take advantage of the PyArg_ParseT
-uple call to convert between Python objects and C data-types.
- For standard C data-types there is probably already a built-in converter.
- For others you may need to write your own converter and use the
-\begin_inset Quotes eld
-\end_inset
-
-O&
-\begin_inset Quotes erd
-\end_inset
-
- format string which allows you to specify a function that will be used
- to perform the conversion from the Python object to whatever C-structures
- are needed.
-
-\end_layout
-
-\begin_layout Standard
-Once the conversions to the appropriate C-structures and C data-types have
- been performed, the next step in the wrapper is to call the underlying
- function.
- This is straightforward if the underlying function is in C or C++.
- However, in order to call Fortran code you must be familiar with how Fortran
- subroutines are called from C/C++ using your compiler and platform.
- This can vary somewhat platforms and compilers (which is another reason
- f2py makes life much simpler for interfacing Fortran code) but generally
- involves underscore mangling of the name and the fact that all variables
- are passed by reference (i.e.
- all arguments are pointers).
-
-\end_layout
-
-\begin_layout Standard
-The advantage of the hand-generated wrapper is that you have complete control
- over how the C-library gets used and called which can lead to a lean and
- tight interface with minimal over-head.
- The disadvantage is that you have to write, debug, and maintain C-code,
- although most of it can be adapted using the time-honored technique of
-
-\begin_inset Quotes eld
-\end_inset
-
-cutting-pasting-and-modifying
-\begin_inset Quotes erd
-\end_inset
-
- from other extension modules.
- Because, the procedure of calling out to additional C-code is fairly regimented
-, code-generation procedures have been developed to make this process easier.
- One of these code-generation techniques is distributed with NumPy and allows
- easy integration with Fortran and (simple) C code.
- This package, f2py, will be covered briefly in the next session.
-
-\end_layout
-
-\begin_layout Section
-f2py
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "f2py|("
-
-\end_inset
-
-F2py allows you to automatically construct an extension module that interfaces
- to routines in Fortran 77/90/95 code.
- It has the ability to parse Fortran 77/90/95 code and automatically generate
- Python signatures for the subroutines it encounters, or you can guide how
- the subroutine interfaces with Python by constructing an interface-defintion-fi
-le (or modifying the f2py-produced one).
-
-\end_layout
-
-\begin_layout Subsection
-Creating source for a basic extension module
-\end_layout
-
-\begin_layout Standard
-Probably the easiest way to introduce f2py is to offer a simple example.
- Here is one of the subroutines contained in a file named add.f
-\end_layout
-
-\begin_layout LyX-Code
-C
-\newline
- SUBROUTINE ZADD(A,B,C,N)
-\newline
-C
-\newline
- DOUBLE COMPLEX A(*)
-\newline
- DOUBLE COMPLEX
- B(*)
-\newline
- DOUBLE COMPLEX C(*)
-\newline
- INTEGER N
-\newline
- DO 20 J = 1, N
-\newline
-
- C(J) = A(J)+B(J)
-\newline
- 20 CONTINUE
-\newline
- END
-\end_layout
-
-\begin_layout Standard
-This routine simply adds the elements in two contiguous arrays and places
- the result in a third.
- The memory for all three arrays must be provided by the calling routine.
- A very basic interface to this routine can be automatically generated by
- f2py:
-\end_layout
-
-\begin_layout LyX-Code
-f2py -m add add.f
-\end_layout
-
-\begin_layout Standard
-You should be able to run this command assuming your search-path is set-up
- properly.
- This command will produce an extension module named addmodule.c in the current
- directory.
- This extension module can now be compiled and used from Python just like
- any other extension module.
-
-\end_layout
-
-\begin_layout Subsection
-Creating a compiled extension module
-\end_layout
-
-\begin_layout Standard
-You can also get f2py to compile add.f and also compile its produced extension
- module leaving only a shared-library extension file that can be imported
- from Python:
-\end_layout
-
-\begin_layout LyX-Code
-f2py -c -m add add.f
-\end_layout
-
-\begin_layout Standard
-This command leaves a file named add.<ext> in the current directory (where
- <ext> is the appropriate extension for a python extension module on your
- platform --- so, pyd,
-\emph on
-etc.
-\emph default
-).
- This module may then be imported from Python.
- It will contain a method for each subroutin in add (zadd, cadd, dadd, sadd).
- The docstring of each method contains information about how the module
- method may be called:
-\end_layout
-
-\begin_layout LyX-Code
->>> import add
-\newline
->>> print add.zadd.__doc__
-\newline
-zadd - Function signature:
-\newline
- zadd(a,b,c,n)
-\newline
-
-Required arguments:
-\newline
- a : input rank-1 array('D') with bounds (*)
-\newline
- b : input
- rank-1 array('D') with bounds (*)
-\newline
- c : input rank-1 array('D') with bounds
- (*)
-\newline
- n : input int
-\end_layout
-
-\begin_layout Subsection
-Improving the basic interface
-\end_layout
-
-\begin_layout Standard
-The default interface is a very literal translation of the fortran code
- into Python.
- The Fortran array arguments must now be NumPy arrays and the integer argument
- should be an integer.
- The interface will attempt to convert all arguments to their required types
- (and shapes) and issue an error if unsuccessful.
- However, because it knows nothing about the semantics of the arguments
- (such that C is an output and n should really match the array sizes), it
- is possible to abuse this function in ways that can cause Python to crash.
- For example
-\end_layout
-
-\begin_layout LyX-Code
->>> add.zadd([1,2,3],[1,2],[3,4],1000)
-\end_layout
-
-\begin_layout Standard
-will cause a program crash on most systems.
- Under the covers, the lists are being converted to proper arrays but then
- the underlying add loop is told to cycle way beyond the borders of the
- allocated memory.
-
-\end_layout
-
-\begin_layout Standard
-In order to improve the interface, directives should be provided.
- This is accomplished by constructing an interface definition file.
- It is usually best to start from the interface file that f2py can produce
- (where it gets its default behavior from).
- To get f2py to generate the interface file use the -h option:
-\end_layout
-
-\begin_layout LyX-Code
-f2py -h add.pyf -m add add.f
-\end_layout
-
-\begin_layout Standard
-This command leaves the file add.pyf in the current directory.
- The section of this file corresponding to zadd is:
-\end_layout
-
-\begin_layout LyX-Code
-subroutine zadd(a,b,c,n) ! in :add:add.f
-\newline
- double complex dimension(*) ::
- a
-\newline
- double complex dimension(*) :: b
-\newline
- double complex dimension(*) ::
- c
-\newline
- integer :: n
-\newline
-end subroutine zadd
-\end_layout
-
-\begin_layout Standard
-By placing intent directives and checking code, the interface can be cleaned
- up quite a bit until the Python module method is both easier to use and
- more robust.
-
-\end_layout
-
-\begin_layout LyX-Code
-subroutine zadd(a,b,c,n) ! in :add:add.f
-\newline
- double complex dimension(n) ::
- a
-\newline
- double complex dimension(n) :: b
-\newline
- double complex intent(out),dimension(n
-) :: c
-\newline
- integer intent(hide),depend(a) :: n=len(a)
-\newline
-end subroutine zadd
-\end_layout
-
-\begin_layout Standard
-The intent directive, intent(out) is used to tell f2py that
-\family typewriter
-c
-\family default
- is an output variable and should be created by the interface before being
- passed to the underlying code.
- The intent(hide) directive tells f2py to not allow the user to specify
- the variable,
-\family typewriter
-n
-\family default
-, but instead to get it from the size of
-\family typewriter
-a
-\family default
-.
- The depend(
-\family typewriter
-a
-\family default
-) directive is necessary to tell f2py that the value of n depends on the
- input a (so that it won't try to create the variable n until the variable
- a is created).
-
-\end_layout
-
-\begin_layout Standard
-The new interface has docstring:
-\end_layout
-
-\begin_layout LyX-Code
->>> print add.zadd.__doc__
-\newline
-zadd - Function signature:
-\newline
- c = zadd(a,b)
-\newline
-Required
- arguments:
-\newline
- a : input rank-1 array('D') with bounds (n)
-\newline
- b : input rank-1
- array('D') with bounds (n)
-\newline
-Return objects:
-\newline
- c : rank-1 array('D') with
- bounds (n)
-\end_layout
-
-\begin_layout Standard
-Now, the function can be called in a much more robust way:
-\end_layout
-
-\begin_layout LyX-Code
->>> add.zadd([1,2,3],[4,5,6])
-\newline
-array([ 5.+0.j, 7.+0.j, 9.+0.j])
-\end_layout
-
-\begin_layout Standard
-Notice the automatic conversion to the correct format that occurred.
-
-\end_layout
-
-\begin_layout Subsection
-Inserting directives in Fortran source
-\end_layout
-
-\begin_layout Standard
-The nice interface can also be generated automatically by placing the variable
- directives as special comments in the original fortran code.
- Thus, if I modify the source code to contain:
-\end_layout
-
-\begin_layout LyX-Code
-C
-\newline
- SUBROUTINE ZADD(A,B,C,N)
-\newline
-C
-\newline
-CF2PY INTENT(OUT) :: C
-\newline
-CF2PY INTENT(HIDE)
- :: N
-\newline
-CF2PY DOUBLE COMPLEX :: A(N)
-\newline
-CF2PY DOUBLE COMPLEX :: B(N)
-\newline
-CF2PY DOUBLE
- COMPLEX :: C(N)
-\newline
- DOUBLE COMPLEX A(*)
-\newline
- DOUBLE COMPLEX B(*)
-\newline
-
- DOUBLE COMPLEX C(*)
-\newline
- INTEGER N
-\newline
- DO 20 J = 1, N
-\newline
- C(J) = A(J)
- + B(J)
-\newline
- 20 CONTINUE
-\newline
- END
-\end_layout
-
-\begin_layout Standard
-Then, I can compile the extension module using
-\end_layout
-
-\begin_layout LyX-Code
-f2py -c -m add add.f
-\end_layout
-
-\begin_layout Standard
-The resulting signature for the function add.zadd is exactly the same one
- that was created previously.
- If the original source code had contained A(N) instead of A(*) and so forth
- with B and C, then I could obtain (nearly) the same interface simply by
- placing the INTENT(OUT) :: C comment line in the source code.
- The only difference is that N would be an optional input that would default
- to the length of A.
-
-\end_layout
-
-\begin_layout Subsection
-A filtering example
-\end_layout
-
-\begin_layout Standard
-For comparison with the other methods to be discussed.
- Here is another example of a function that filters a two-dimensional array
- of double precision floating-point numbers using a fixed averaging filter.
- The advantage of using Fortran to index into multi-dimensional arrays should
- be clear from this example.
-
-\end_layout
-
-\begin_layout LyX-Code
- SUBROUTINE DFILTER2D(A,B,M,N)
-\newline
-C
-\newline
- DOUBLE PRECISION A(M,N)
-\newline
- DOUBLE
- PRECISION B(M,N)
-\newline
- INTEGER N, M
-\newline
-CF2PY INTENT(OUT) :: B
-\newline
-CF2PY INTENT(HIDE)
- :: N
-\newline
-CF2PY INTENT(HIDE) :: M
-\newline
- DO 20 I = 2,M-1
-\newline
- DO 40 J=2,N-1
-\newline
-
- B(I,J) = A(I,J) +
-\newline
- $ (A(I-1,J)+A(I+1,J) +
-\newline
-
- $ A(I,J-1)+A(I,J+1) )*0.5D0 +
-\newline
- $ (A(I-1,J-1) + A(I-1,J+1
-) +
-\newline
- $ A(I+1,J-1) + A(I+1,J+1))*0.25D0
-\newline
- 40 CONTINUE
-\newline
- 20
- CONTINUE
-\newline
- END
-\end_layout
-
-\begin_layout Standard
-This code can be compiled and linked into an extension module named filter
- using
-\end_layout
-
-\begin_layout LyX-Code
-f2py -c -m filter filter.f
-\end_layout
-
-\begin_layout Standard
-This will produce an extension module named filter.so in the current directory
- with a method named dfilter2d that returns a filtered version of the input.
-
-\end_layout
-
-\begin_layout Subsection
-Calling f2py from Python
-\end_layout
-
-\begin_layout Standard
-The f2py program is written in Python and can be run from inside your module.
- This provides a facility that is somewhat similar to the use of weave.ext_tools
- described below.
- An example of the final interface executed using Python code is
-\end_layout
-
-\begin_layout LyX-Code
-import numpy.f2py as f2py
-\end_layout
-
-\begin_layout LyX-Code
-fid = open('add.f')
-\end_layout
-
-\begin_layout LyX-Code
-source = fid.read()
-\end_layout
-
-\begin_layout LyX-Code
-fid.close()
-\end_layout
-
-\begin_layout LyX-Code
-f2py.compile(source, modulename='add')
-\end_layout
-
-\begin_layout LyX-Code
-import add
-\end_layout
-
-\begin_layout Standard
-The source string can be any valid Fortran code.
- If you want to save the extension-module source code then a suitable file-name
- can be provided by the source_fn keyword to the compile function.
-
-\end_layout
-
-\begin_layout Subsection
-Automatic extension module generation
-\end_layout
-
-\begin_layout Standard
-If you want to distribute your f2py extension module, then you only need
- to include the .pyf file and the Fortran code.
- The distutils extensions in NumPy allow you to define an extension module
- entirely in terms of this interface file.
- A valid setup.py file allowing distribution of the add.f module (as part
- of the package f2py_examples so that it would be loaded as f2py_examples.add)
- is
-\end_layout
-
-\begin_layout LyX-Code
-def configuration(parent_package='', top_path=None)
-\newline
- from numpy.distutils.misc_u
-til import Configuration
-\newline
- config = Configuration('f2py_examples',parent_packag
-e, top_path)
-\newline
- config.add_extension('add', sources=['add.pyf','add.f'])
-\newline
-
- return config
-\newline
-
-\newline
-if __name__ == '__main__':
-\newline
- from numpy.distutils.core import
- setup
-\newline
- setup(**configuration(top_path='').todict())
-\end_layout
-
-\begin_layout Standard
-Installation of the new package is easy using
-\end_layout
-
-\begin_layout LyX-Code
-python setup.py install
-\end_layout
-
-\begin_layout Standard
-assuming you have the proper permissions to write to the main site-packages
- directory for the version of Python you are using.
- For the resulting package to work, you need to create a file named __init__.py
- (in the same directory as add.pyf).
- Notice the extension module is defined entirely in terms of the
-\begin_inset Quotes eld
-\end_inset
-
-add.pyf
-\begin_inset Quotes erd
-\end_inset
-
- and
-\begin_inset Quotes eld
-\end_inset
-
-add.f
-\begin_inset Quotes erd
-\end_inset
-
- files.
- The conversion of the .pyf file to a .c file is handled by numpy.disutils.
-
-\end_layout
-
-\begin_layout Subsection
-Conclusion
-\end_layout
-
-\begin_layout Standard
-The interface definition file (.pyf) is how you can fine-tune the interface
- between Python and Fortran.
- There is decent documentation for f2py found in the numpy/f2py/docs directory
- where-ever NumPy is installed on your system (usually under site-packages).
- There is also more information on using f2py (including how to use it to
- wrap C codes) at http://www.scipy.org/Cookbook under the
-\begin_inset Quotes eld
-\end_inset
-
-Using NumPy with Other Languages
-\begin_inset Quotes erd
-\end_inset
-
- heading.
-
-\end_layout
-
-\begin_layout Standard
-The f2py method of linking compiled code is currently the most sophisticated
- and integrated approach.
- It allows clean separation of Python with compiled code while still allowing
- for separate distribution of the extension module.
- The only draw-back is that it requires the existence of a Fortran compiler
- in order for a user to install the code.
- However, with the existence of the free-compilers g77, gfortran, and g95,
- as well as high-quality commerical compilers, this restriction is not particula
-rly onerous.
- In my opinion, Fortran is still the easiest way to write fast and clear
- code for scientific computing.
- It handles complex numbers, and multi-dimensional indexing in the most
- straightforward way.
- Be aware, however, that some Fortran compilers will not be able to optimize
- code as well as good hand-written C-code.
-
-\begin_inset LatexCommand index
-name "f2py|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-weave
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "weave|("
-
-\end_inset
-
-Weave is a scipy package that can be used to automate the process of extending
- Python with C/C++ code.
- It can be used to speed up evaluation of an array expression that would
- otherwise create temporary variables, to directly
-\begin_inset Quotes eld
-\end_inset
-
-inline
-\begin_inset Quotes erd
-\end_inset
-
- C/C++ code into Python, or to create a fully-named extension module.
- You must either install scipy or get the weave package separately and install
- it using the standard python setup.py install.
- You must also have a C/C++-compiler installed and useable by Python distutils
- in order to use weave.
-\end_layout
-
-\begin_layout Standard
-Somewhat dated, but still useful documentation for weave can be found at
- the link http://www.scipy/Weave.
- There are also many examples found in the examples directory which is installed
- under the weave directory in the place where weave is installed on your
- system.
-\end_layout
-
-\begin_layout Subsection
-Speed up code involving arrays (also see scipy.numexpr)
-\end_layout
-
-\begin_layout Standard
-This is the easiest way to use weave and requires minimal changes to your
- Python code.
- It involves placing quotes around the expression of interest and calling
- weave.blitz.
- Weave will parse the code and generate C++ code using Blitz C++ arrays.
- It will then compile the code and catalog the shared library so that the
- next time this exact string is asked for (and the array types are the same),
- the already-compiled shared library will be loaded and used.
- Because Blitz makes extensive use of C++ templating, it can take a long
- time to compile the first time.
- After that, however, the code should evaluate more quickly than the equivalent
- NumPy expression.
- This is especially true if your array sizes are large and the expression
- would require NumPy to create several temporaries.
- Only expressions involving basic arithmetic operations and basic array
- slicing can be converted to Blitz C++ code.
-
-\end_layout
-
-\begin_layout Standard
-For example, consider the expression
-\end_layout
-
-\begin_layout LyX-Code
-d = 4*a + 5*a*b + 6*b*c
-\end_layout
-
-\begin_layout Standard
-where a, b, and c are all arrays of the same type and shape.
- When the data-type is double-precision and the size is 1000x1000, this
- expression takes about 0.5 seconds to compute on an 1.1Ghz AMD Athlon machine.
- When this expression is executed instead using blitz:
-\end_layout
-
-\begin_layout LyX-Code
-d = empty(a.shape, 'd'); weave.blitz(expr)
-\end_layout
-
-\begin_layout Standard
-execution time is only about 0.20 seconds (about 0.14 seconds spent in weave
- and the rest in allocating space for d).
- Thus, we've sped up the code by a factor of 2 using only a simnple command
- (weave.blitz).
- Your mileage may vary, but factors of 2-8 speed-ups are possible with this
- very simple technique.
-
-\end_layout
-
-\begin_layout Standard
-If you are interested in using weave in this way, then you should also look
- at scipy.numexpr which is another similar way to speed up expressions by
- eliminating the need for temporary variables.
- Using numexpr does not require a C/C++ compiler.
-
-\end_layout
-
-\begin_layout Subsection
-Inline C-code
-\end_layout
-
-\begin_layout Standard
-Probably the most widely-used method of employing weave is to
-\begin_inset Quotes eld
-\end_inset
-
-in-line
-\begin_inset Quotes erd
-\end_inset
-
- C/C++ code into Python in order to speed up a time-critical section of
- Python code.
- In this method of using weave, you define a string containing useful C-code
- and then pass it to the function
-\series bold
-weave.inline
-\series default
-(
-\family typewriter
-code_string
-\family default
-,
-\family typewriter
-variables
-\family default
-), where code_string is a string of valid C/C++ code and variables is a
- list of variables that should be passed in from Python.
- The C/C++ code should refer to the variables with the same names as they
- are defined with in Python.
- If weave.line should return anything the the special value return_val should
- be set to whatever object should be returned.
- The following example shows how to use weave on basic Python objects
-\end_layout
-
-\begin_layout LyX-Code
-code = r"""
-\newline
-int i;
-\newline
-py::tuple results(2);
-\newline
-for (i=0; i<a.length(); i++) {
-\newline
-
- a[i] = i;
-\newline
-}
-\newline
-results[0] = 3.0;
-\newline
-results[1] = 4.0;
-\newline
-return_val = results;
-\newline
-"""
-
-\newline
-a = [None]*10
-\newline
-res = weave.inline(code,['a'])
-\end_layout
-
-\begin_layout Standard
-The C++ code shown in the code string uses the name 'a' to refer to the
- Python list that is passed in.
- Because the Python List is a mutable type, the elements of the list itself
- are modified by the C++ code.
- A set of C++ classes are used to access Python objects using simple syntax.
-
-\end_layout
-
-\begin_layout Standard
-The main advantage of using C-code, however, is to speed up processing on
- an array of data.
- Accessing a NumPy array in C++ code using weave, depends on what kind of
- type converter is chosen in going from NumPy arrays to C++ code.
- The default converter creates 5 variables for the C-code for every NumPy
- array passed in to weave.inline.
- The following table shows these variables which can all be used in the
- C++ code.
- The table assumes that
-\family typewriter
-myvar
-\family default
- is the name of the array in Python with data-type <dtype> (i.e.
- float64, float32, int8, etc.)
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="6" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Variable
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Type
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Contents
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-myvar
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-<dtype>*
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Pointer to the first element of the array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Nmyvar
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-npy_intp*
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-A pointer to the dimensions array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Smyvar
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-npy_intp*
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-A pointer to the strides array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Dmyvar
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-int
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-The number of dimensions
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-myvar_array
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-PyArrayObject*
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-The entire structure for the array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The in-lined code can contain references to any of these variables as well
- as to the standard macros MYVAR1(i), MYVAR2(i,j), MYVAR3(i,j,k), and MYVAR4(i,j
-,k,l).
- These name-based macros (they are the Python name capitalized followed
- by the number of dimensions needed) will de-reference the memory for the
- array at the given location with no error checking (be-sure to use the
- correct macro and ensure the array is aligned and in correct byte-swap
- order in order to get useful results).
- The following code shows how you might use these variables and macros to
- code a loop in C that computes a simple 2-d weighted averaging filter.
-\end_layout
-
-\begin_layout LyX-Code
-int i,j;
-\newline
-for(i=1;i<Na[0]-1;i++) {
-\newline
- for(j=1;j<Na[1]-1;j++) {
-\newline
- B2(i,j)
- = A2(i,j) + (A2(i-1,j) +
-\newline
- A2(i+1,j)+A2(i,j-1)
-\newline
-
- + A2(i,j+1))*0.5
-\newline
- + (A2(i-1,j-1)
-\newline
- +
- A2(i-1,j+1)
-\newline
- + A2(i+1,j-1)
-\newline
- + A2(i+1,j+1))*0.25
-\newline
-
- }
-\end_layout
-
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout Standard
-The above code doesn't have any error checking and so could fail with a
- Python crash if,
-\family typewriter
-a
-\family default
- had the wrong number of dimensions, or
-\family typewriter
-b
-\family default
- did not have the same shape as
-\family typewriter
-a
-\family default
-.
- However, it could be placed inside a standard Python function with the
- necessary error checking to produce a robust but fast subroutine.
-\end_layout
-
-\begin_layout Standard
-One final note about weave.inline: if you have additional code you want to
- include in the final extension module such as supporting function calls,
- include statments, etc.
- you can pass this code in as a string using the keyword support_code:
-\family typewriter
-weave.inline(code, variables, support_code=support)
-\family default
-.
- If you need the extension module to link against an additional library
- then you can also pass in distutils-style keyword arguments such as library_dir
-s, libraries, and/or runtime_library_dirs which point to the appropriate
- libraries and directories.
-
-\end_layout
-
-\begin_layout Subsection
-Simplify creation of an extension module
-\end_layout
-
-\begin_layout Standard
-The inline function creates one extension module for each function to-be
- inlined.
- It also generates a lot of intermediate code that is duplicated for each
- extension module.
- If you have several related codes to execute in C, it would be better to
- make them all separate functions in a single extension module with multiple
- functions.
- You can also use the tools weave provides to produce this larger extension
- module.
- In fact, the weave.inline function just uses these more general tools to
- do its work.
-
-\end_layout
-
-\begin_layout Standard
-The approach is to:
-\end_layout
-
-\begin_layout Enumerate
-construct a extension module object using ext_tools.ext_module(
-\family typewriter
-module_name
-\family default
-);
-\end_layout
-
-\begin_layout Enumerate
-create function objects using ext_tools.ext_function(
-\family typewriter
-func_name
-\family default
-,
-\family typewriter
-code
-\family default
-,
-\family typewriter
-variables
-\family default
-);
-\end_layout
-
-\begin_layout Enumerate
-(optional) add support code to the function using the .customize.add_support_code(
-\family typewriter
-support_code
-\family default
-) method of the function object;
-\end_layout
-
-\begin_layout Enumerate
-add the functions to the extension module object using the .add_function(
-\family typewriter
-func
-\family default
-) method;
-\end_layout
-
-\begin_layout Enumerate
-when all the functions are added, compile the extension with its .compile()
- method.
-\end_layout
-
-\begin_layout Standard
-Several examples are available in the examples directory where weave is
- installed on your system.
- Look particularly at ramp2.py, increment_example.py and fibonacii.py
-\end_layout
-
-\begin_layout Subsection
-Conclusion
-\end_layout
-
-\begin_layout Standard
-Weave is a useful tool for quickly routines in C/C++ and linking them into
- Python.
- It's caching-mechanism allows for on-the-fly compilation which makes it
- particularly attractive for in-house code.
- Because of the requirement that the user have a C++-compiler, it can be
- difficult (but not impossible) to distribute a package that uses weave
- to other users who don't have a compiler installed.
- Of course, weave could be used to construct an extension module which is
- then distributed in the normal way
-\emph on
-(
-\emph default
-using a setup.py file).
- While you can use weave to build larger extension modules with many methods,
- creating methods with a variable-number of arguments is not possible.
- Thus, for a more sophisticated module, you will still probably want a Python-la
-yer that calls the weave-produced extension.
-
-\begin_inset LatexCommand index
-name "weave|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Pyrex
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "pyrex|("
-
-\end_inset
-
-Pyrex is a way to write C-extension modules using Python-like syntax.
- It is an interesting way to generate extension modules that is growing
- in popularity, particularly among people who have rusty or non-existent
- C-skills.
- It does require the user to write the
-\begin_inset Quotes eld
-\end_inset
-
-interface
-\begin_inset Quotes erd
-\end_inset
-
- code and so is more time-consuming than SWIG or f2py if you are trying
- to interface to a large library of code.
- However, if you are writing an extension module that will include quite
- a bit of your own algorithmic code, as well, then Pyrex is a good match.
- A big weakness perhaps is the inability to easily and quickly access the
- elements of a multidimensional array.
-
-\end_layout
-
-\begin_layout Standard
-Notice that Pyrex is an extension-module generator only.
- Unlike weave or f2py, it includes no automatic facility for compiling and
- linking the extension module (which must be done in the usual fashion).
- It does provide a modified distutils class called build_ext which lets
- you build an extension module from a .pyx source.
- Thus, you could write in a setup.py file
-\end_layout
-
-\begin_layout LyX-Code
-from Pyrex.Distutils import build_ext
-\newline
-from distutils.extension import Extension
-\newline
-from
- distutils.core import setup
-\newline
-
-\newline
-import numpy
-\newline
-py_ext = Extension('mine', ['mine.pyx'],
-\newline
-
- include_dirs=[numpy.get_include()])
-\newline
-
-\newline
-setup(name='mine', description='Nothi
-ng',
-\newline
- ext_modules=[pyx_ext],
-\newline
- cmdclass = {'build_ext':build_ext})
-\end_layout
-
-\begin_layout Standard
-Adding the NumPy include directory is, of course, only necessary if you
- are using NumPy arrays in the extension module (which is what I assume
- you are using Pyrex for).
- The distutils extensions in NumPy also include support for automatically
- producing the extension-module and linking it from a
-\family typewriter
-.pyx
-\family default
- file.
- It works so that if the user does not have Pyrex installed, then it looks
- for a file with the same file-name but a
-\family typewriter
-.c
-\family default
- extension which it then uses instead of trying to produce the
-\family typewriter
-.c
-\family default
- file again.
-
-\end_layout
-
-\begin_layout Standard
-Pyrex does not natively understand NumPy arrays.
- However, it is not difficult to include information that lets Pyrex deal
- with them usefully.
- In fact, the numpy.random.mtrand module was written using Pyrex so an example
- of Pyrex usage is already included in the NumPy source distribution.
- That experience led to the creation of a standard c_numpy.pxd file that
- you can use to simplify interacting with NumPy array objects in a Pyrex-written
- extension.
- The file may not be complete (it wasn't at the time of this writing).
- If you have additions you'd like to contribute, please send them.
- The file is located in the .../site-packages/numpy/doc/pyrex directory where
- you have Python installed.
- There is also an example in that directory of using Pyrex to construct
- a simple extension module.
- It shows that Pyrex looks a lot like Python but also contains some new
- syntax that is necessary in order to get C-like speed.
-
-\end_layout
-
-\begin_layout Standard
-If you just use Pyrex to compile a standard Python module, then you will
- get a C-extension module that runs either as fast or, possibly, more slowly
- than the equivalent Python module.
- Speed increases are possible only when you use cdef to statically define
- C variables and use a special construct to create for loops:
-\end_layout
-
-\begin_layout LyX-Code
-cdef int i
-\newline
-for i from start <= i < stop
-\end_layout
-
-\begin_layout Standard
-Let's look at two examples we've seen before to see how they might be implemente
-d using Pyrex.
- These examples were compiled into extension modules using Pyrex-0.9.3.1.
-\end_layout
-
-\begin_layout Subsection
-Pyrex-add
-\end_layout
-
-\begin_layout Standard
-Here is part of a Pyrex-file I named add.pyx which implements the add functions
- we previously implemented using f2py:
-\end_layout
-
-\begin_layout LyX-Code
-cimport c_numpy
-\newline
-from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble
-,
-\backslash
-
-\newline
- npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT,
-\backslash
-
-\newline
- NPY_CFLOAT
-\newline
-
-\newline
-#We need to initialize NumPy
-\newline
-import_array()
-\newline
-
-\newline
-def zadd(object
- ao, object bo):
-\newline
- cdef ndarray c, a, b
-\newline
- cdef npy_intp i
-\newline
- a = c_numpy.PyArra
-y_ContiguousFromAny(ao,
-\newline
- NPY_CDOUBLE, 1, 1)
-\newline
- b = c_numpy.PyArr
-ay_ContiguousFromAny(bo,
-\newline
- NPY_CDOUBLE, 1, 1)
-\newline
- c = c_numpy.PyAr
-ray_SimpleNew(a.nd, a.dimensions,
-\newline
- a.descr.type_num)
-\newline
- for i
- from 0 <= i < a.dimensions[0]:
-\newline
- (<npy_cdouble *>c.data)[i].real =
-\backslash
-
-\newline
- (<npy_cdouble *>a.data)[i].real +
-\backslash
-
-\newline
- (<npy_cdouble *>b.data)[i].real
-\newline
- (<npy_cdouble *>c.data)[i].imag
- =
-\backslash
-
-\newline
- (<npy_cdouble *>a.data)[i].imag +
-\backslash
-
-\newline
- (<npy_cdouble *>b.data)[i].imag
-\newline
- return c
-\end_layout
-
-\begin_layout Standard
-This module shows use of the
-\family typewriter
-cimport
-\family default
- statement to load the definitions from the c_numpy.pxd file.
- As shown, both versions of the import statement are supported.
- It also shows use of the NumPy C-API to construct NumPy arrays from arbitrary
- input objects.
- The array c is created using PyArray_SimpleNew.
- Then the c-array is filled by addition.
- Casting to a particiular data-type is accomplished using <cast *>.
- Pointers are de-referenced with bracket notation and members of structures
- are accessed using '.' notation even if the object is techinically a pointer
- to a structure.
- The use of the special for loop construct ensures that the underlying code
- will have a similar C-loop so the addition calculation will proceed quickly.
- Notice that we have not checked for NULL after calling to the C-API ---
- a cardinal sin when writing C-code.
- For routines that return Python objects, Pyrex inserts the checks for NULL
- into the C-code for you and returns with failure if need be.
- There is also a way to get Pyrex to automatically check for exceptions
- when you call functions that don't return Python objects.
- See the documentation of Pyrex for details.
-
-\end_layout
-
-\begin_layout Subsection
-Pyrex-filter
-\end_layout
-
-\begin_layout Standard
-The two-dimensional example we created using weave is a bit uglierto implement
- in Pyrex because two-dimensional indexing using Pyrex is not as simple.
- But, it is straightforward (and possibly faster because of pre-computed
- indices).
- Here is the Pyrex-file I named image.pyx.
-\end_layout
-
-\begin_layout LyX-Code
-cimport c_numpy
-\newline
-from c_numpy cimport import_array, ndarray, npy_intp,
-\backslash
-
-\newline
- NPY_DOUBLE, NPY_CDOUBLE,
-\backslash
-
-\newline
- NPY_FLOAT, NPY_CFLOAT, NPY_ALIGNED
-\backslash
-
-\newline
-
-\newline
-#We need to initialize NumPy
-\newline
-import_array()
-\newline
-def filter(object ao):
-\newline
- cdef
- ndarray a, b
-\newline
- cdef npy_intp i, j, M, N, oS
-\newline
- cdef npy_intp r,rm1,rp1,c,cm1,c
-p1
-\newline
- cdef double value
-\newline
- # Require an ALIGNED array
-\newline
- # (but not necessarily
- contiguous)
-\newline
- # We will use strides to access the elements.
-\newline
- a = c_numpy.PyAr
-ray_FROMANY(ao, NPY_DOUBLE,
-\backslash
-
-\newline
- 2, 2, NPY_ALIGNED)
-\newline
- b = c_numpy.PyArray_SimpleNew(a.nd,a.dimensio
-ns,
-\backslash
-
-\newline
- a.descr.type_num)
-\newline
- M = a.dimensions[0]
-\newline
-
- N = a.dimensions[1]
-\newline
- S0 = a.strides[0]
-\newline
- S1 = a.strides[1]
-\newline
- for i
- from 1 <= i < M-1:
-\newline
- r = i*S0
-\newline
- rm1 = r-S0
-\newline
- rp1 = r+S0
-\newline
-
- oS = i*N
-\newline
- for j from 1 <= j < N-1:
-\newline
- c = j*S1
-\newline
-
- cm1 = c-S1
-\newline
- cp1 = c+S1
-\newline
- (<double *>b.data)[oS+j]
- =
-\backslash
-
-\newline
- (<double *>(a.data+r+c))[0] +
-\backslash
-
-\newline
- ((<double *>(a.data+rm1+c))[0] +
-\backslash
-
-\newline
- (<double *>(a.data+rp1+c))[0] +
-\backslash
-
-\newline
- (<double *>(a.data+r+cm1))[0] +
-\backslash
-
-\newline
- (<double *>(a.data+r+cp1))[0])*0.5 +
-\backslash
-
-\newline
- ((<double *>(a.data+rm1+cm1))[0] +
-\backslash
-
-\newline
- (<double *>(a.data+rp1+cm1))[0] +
-\backslash
-
-\newline
- (<double *>(a.data+rp1+cp1))[0] +
-\backslash
-
-\newline
- (<double *>(a.data+rm1+cp1))[0])*0.25
-\newline
- return b
-\end_layout
-
-\begin_layout Standard
-This 2-d averaging filter runs quickly because the loop is in C and the
- pointer computations are done only as needed.
- However, it is not particularly easy to understand what is happening.
- A 2-d image,
-\family typewriter
-in
-\family default
-, can be filtered using this code very quickly using
-\end_layout
-
-\begin_layout LyX-Code
-import image
-\end_layout
-
-\begin_layout LyX-Code
-out = image.filter(in)
-\end_layout
-
-\begin_layout Subsection
-Conclusion
-\end_layout
-
-\begin_layout Standard
-There are several disadvantages of using Pyrex:
-\end_layout
-
-\begin_layout Enumerate
-The syntax for Pyrex can get a bit bulky, and it can be confusing at first
- to understand what kind of objects you are getting and how to interface
- them with C-like constructs.
-
-\end_layout
-
-\begin_layout Enumerate
-Inappropriate Pyrex syntax or incorrect calls to C-code or type-mismatches
- can result in failures such as
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-Pyrex failing to generate the extension module source code,
-\end_layout
-
-\begin_layout Enumerate
-Compiler failure while generating the extension module binary due to incorrect
- C syntax,
-\end_layout
-
-\begin_layout Enumerate
-Python failure when trying to use the module.
-
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-It is easy to lose a clean separation between Python and C which makes re-using
- your C-code for other non-Python-related projects more difficult.
-\end_layout
-
-\begin_layout Enumerate
-Multi-dimensional arrays are
-\begin_inset Quotes eld
-\end_inset
-
-bulky
-\begin_inset Quotes erd
-\end_inset
-
- to index (appropriate macros may be able to fix this).
-
-\end_layout
-
-\begin_layout Enumerate
-The C-code generated by Prex is hard to read and modify (and typically compiles
- with annoying but harmless warnings).
-
-\end_layout
-
-\begin_layout Standard
-Writing a good Pyrex extension module still takes a bit of effort because
- not only does it require (a little) familiarity with C, but also with Pyrex's
- brand of Python-mixed-with C.
- One big advantage of Pyrex-generated extension modules is that they are
- easy to distribute using distutils.
- In summary, Pyrex is a very capable tool for either gluing C-code or generating
- an extension module quickly and should not be over-looked.
- It is especially useful for people that can't or won't write C-code or
- Fortran code.
- But, if you are already able to write simple subroutines in C or Fortran,
- then I would use one of the other approaches such as f2py (for Fortran),
- ctypes (for C shared-libraries), or weave (for inline C-code).
-\begin_inset LatexCommand index
-name "pyrex|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-ctypes
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ctypes|("
-
-\end_inset
-
-Ctypes is a python extension module (downloaded separately for Python <2.5
- and included with Python 2.5) that allows you to call an arbitrary function
- in a shared library directly from Python.
- This approach allows you to interface with C-code directly from Python.
- This opens up an enormous number of libraries for use from Python.
- The drawback, however, is that coding mistakes can lead to ugly program
- crashes very easily (just as can happen in C) because there is little type
- or bounds checking done on the parameters.
- This is especially true when array data is passed in as a pointer to a
- raw memory location.
- The responsibility is then on you that the subroutine will not access memory
- outside the actual array area.
- But, if you don't mind living a little dangerously ctypes can be an effective
- tool for quickly taking advantage of a large shared library (or writing
- extended functionality in your own shared library).
-\end_layout
-
-\begin_layout Standard
-Because the ctypes approach exposes a raw interface to the compiled code
- it is not always tolerant of user mistakes.
- Robust use of the ctypes module typically involves an additional layer
- of Python code in order to check the data types and array bounds of objects
- passed to the underlying subroutine.
- This additional layer of checking (not to mention the conversion from ctypes
- objects to C-data-types that ctypes itself performs), will make the interface
- slower than a hand-written extension-module interface.
- However, this overhead should be neglible if the C-routine being called
- is doing any significant amount of work.
- If you are a great Python programmer with weak C-skills, ctypes is an easy
- way to write a useful interface to a (shared) library of compiled code.
-
-\end_layout
-
-\begin_layout Standard
-To use c-types you must
-\end_layout
-
-\begin_layout Enumerate
-Have a shared library.
-\end_layout
-
-\begin_layout Enumerate
-Load the shared library.
-\end_layout
-
-\begin_layout Enumerate
-Convert the python objects to ctypes-understood arguments.
-\end_layout
-
-\begin_layout Enumerate
-Call the function from the library with the ctypes arguments.
-\end_layout
-
-\begin_layout Subsection
-Having a shared library
-\end_layout
-
-\begin_layout Standard
-There are several requirements for a shared library that can be used with
- c-types that are platform specific.
- This guide assumes you have some familiarity with making a shared library
- on your system (or simply have a shared library available to you).
- Items to remember are:
-\end_layout
-
-\begin_layout Itemize
-A shared library must be compiled in a special way (
-\emph on
-e.g.
-
-\emph default
- using the -shared flag with gcc).
-\end_layout
-
-\begin_layout Itemize
-On some platforms (
-\emph on
-e.g.
-
-\emph default
- Windows) , a shared library requires a .def file that specifies the functions
- to be exported.
- For example a mylib.def file might contain.
-
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-LIBRARY mylib.dll
-\newline
-EXPORTS
-\newline
-cool_function1
-\newline
-cool_function2
-\end_layout
-
-\begin_layout Standard
-Alternatively, you may be able to use the storage-class specifier __declspec(dll
-export) in the C-definition of the function to avoid the need for this .def
- file.
-
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-There is no standard way in Python distutils to create a standard shared
- library (an extension module is a
-\begin_inset Quotes eld
-\end_inset
-
-special
-\begin_inset Quotes erd
-\end_inset
-
- shared library Python understands) in a cross-platform manner.
- Thus, a big disadvantage of ctypes at the time of writing this book is
- that it is difficult to distribute in a cross-platform manner a Python
- extension that uses c-types and includes your own code which should be
- compiled as a shared library on the users system.
-
-\end_layout
-
-\begin_layout Subsection
-Loading the shared library
-\end_layout
-
-\begin_layout Standard
-A simple, but robust way to load the shared library is to get the absolute
- path name and load it using the cdll object of ctypes.
-
-\end_layout
-
-\begin_layout LyX-Code
-lib = ctypes.cdll[<full_path_name>]
-\end_layout
-
-\begin_layout Standard
-However, on Windows accessing an attribute of the cdll method will load
- the first DLL by that name found in the current directory or on the PATH.
- Loading the absolute path name requires a little finesse for cross-platform
- work since the extension of shared libraries varies.
- There is a
-\family typewriter
-ctypes.util.find_library
-\family default
- utility available that can simplify the process of finding the library
- to load but it is not foolproof.
- Complicating matters, different platforms have different default extensions
- used by shared libraries (e.g.
- .dll -- Windows, .so -- Linux, .dylib -- Mac OS X).
- This must also be taken into account if you are using c-types to wrap code
- that needs to work on several platforms.
-
-\end_layout
-
-\begin_layout Standard
-NumPy provides a convenience function called
-\series bold
-ctypeslib.load_library
-\series default
-(name, path).
- This function takes the name of the shared library (including any prefix
- like 'lib' but excluding the extension) and a path where the shared library
- can be located.
- It returns a ctypes library object or raises an OSError if the library
- cannot be found or raises an ImportError if the ctypes module is not available.
- (Windows users: the ctypes library object loaded using
-\series bold
-load_library
-\series default
- is always loaded assuming cdecl calling convention.
- See the ctypes documentation under ctypes.windll and/or ctypes.oledll for
- ways to load libraries under other calling conventions).
-
-\end_layout
-
-\begin_layout Standard
-The functions in the shared library are available as attributes of the ctypes
- library object (returned from
-\series bold
-ctypeslib.load_library
-\series default
-) or as items using lib['func_name'] syntax.
- The latter method for retrieving a function name is particularly useful
- if the function name contains characters that are not allowable in Python
- variable names.
-
-\end_layout
-
-\begin_layout Subsection
-Converting arguments
-\end_layout
-
-\begin_layout Standard
-Python ints/longs, strings, and unicode objects are automatically converted
- as needed to equivalent c-types arguments The None object is also converted
- automatically to a NULL pointer.
- All other Python objects must be converted to ctypes-specific types.
- There are two ways around this restriction that allow c-types to integrate
- with other objects.
-
-\end_layout
-
-\begin_layout Enumerate
-Don't set the argtypes attribute of the function object and define an _as_parame
-ter_ method for the object you want to pass in.
- The _as_parameter_ method must return a Python int which will be passed
- directly to the function.
-
-\end_layout
-
-\begin_layout Enumerate
-Set the argtypes attribute to a list whose entries contain objects with
- a classmethod named from_param that knows how to convert your object to
- an object that ctypes can understand (an int/long, string, unicode, or
- object with the _as_parameter_ attribute).
-
-\end_layout
-
-\begin_layout Standard
-NumPy uses both methods with a preference for the second method because
- it can be safer.
- The ctypes attribute of the ndarray returns an object that has an _as_parameter
-_ attribute which returns an integer representing the address of the ndarray
- to which it is associated.
- As a result, one can pass this ctypes attribute object directly to a function
- expecting a pointer to the data in your ndarray.
- The caller must be sure that the ndarray object is of the correct type,
- shape, and has the correct flags set or risk nasty crashes if the data-pointer
- to inappropriate arrays are passsed in.
-
-\end_layout
-
-\begin_layout Standard
-To implement the second method, NumPy provides the class-factory function
-
-\series bold
-ndpointer
-\series default
- in the
-\series bold
-ctypeslib
-\series default
- module.
- This class-factory function produces an appropriate class that can be placed
- in an argtypes attribute entry of a ctypes function.
- The class will contain a from_param method which ctypes will use to convert
- any ndarray passed in to the function to a ctypes-recognized object.
- In the process, the conversion will perform checking on any properties
- of the ndarray that were specified by the user in the call to ndpointer.
- Aspects of the ndarray that can be checked include the data-type, the number-of
--dimensions, the shape, and/or the state of the flags on any array passed.
- The return value of the from_param method is the ctypes attribute of the
- array which (because it contains the _as_parameter_ attribute pointing
- to the array data area) can be used by ctypes directly.
-
-\end_layout
-
-\begin_layout Standard
-The ctypes attribute of an ndarray is also endowed with additional attributes
- that may be convenient when passing additional information about the array
- into a ctypes function.
- The attributes
-\series bold
-data
-\series default
-,
-\series bold
-shape
-\series default
-, and
-\series bold
-strides
-\series default
- can provide c-types compatible types corresponding to the data-area, the
- shape, and the strides of the array.
- The data attribute reutrns a
-\family typewriter
-c_void_p
-\family default
- representing a pointer to the data area.
- The shape and strides attributes each return an array of ctypes integers
- (or None representing a NULL pointer, if a 0-d array).
- The base ctype of the array is a ctype integer of the same size as a pointer
- on the platform.
- There are also methods data_as(<ctype>), shape_as(<base ctype>), and strides_as
-(<base ctype>).
- These return the data as a ctype object of your choice and the shape/strides
- arrays using an underlying base type of your choice.
- For convenience, the
-\series bold
-ctypeslib
-\series default
- module also contains
-\series bold
-c_intp
-\series default
- as a ctypes integer data-type whose size is the same as the size of
-\family typewriter
-c_void_p
-\family default
- on the platform (it's value is None if ctypes is not installed).
-
-\end_layout
-
-\begin_layout Subsection
-Calling the function
-\end_layout
-
-\begin_layout Standard
-The function is accessed as an attribute of or an item from the loaded shared-li
-brary.
- Thus, if
-\begin_inset Quotes eld
-\end_inset
-
-./mylib.so
-\begin_inset Quotes erd
-\end_inset
-
- has a function named
-\begin_inset Quotes eld
-\end_inset
-
-cool_function1
-\begin_inset Quotes erd
-\end_inset
-
-, I could access this function either as
-\end_layout
-
-\begin_layout LyX-Code
-lib = numpy.ctypeslib.load_library('mylib','.')
-\newline
-func1 = lib.cool_function1 #
- or equivalently
-\newline
-func1 = lib['cool_function1']
-\end_layout
-
-\begin_layout Standard
-In ctypes, the return-value of a function is set to be 'int' by default.
- This behavior can be changed by setting the restype attribute of the function.
- Use None for the restype if the function has no return value ('void'):
-\end_layout
-
-\begin_layout LyX-Code
-func1.restype = None
-\end_layout
-
-\begin_layout Standard
-As previously discussed, you can also set the argtypes attribute of the
- function in order to have ctypes check the types of the input arguments
- when the function is called.
- Use the ndpointer factory function to generate a ready-made class for data-type
-, shape, and flags checking on your new function.
- The ndpointer function has the signature
-\end_layout
-
-\begin_layout Description
-ndpointer (dtype=None, ndim=None, shape=None, flags=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Keyword arguments with the value
-\family typewriter
-None
-\family default
- are not checked.
- Specifying a keyword enforces checking of that aspect of the ndarray on
- conversion to a ctypes-compatible object.
- The dtype keyword can be any object understood as a data-type object.
- The ndim keyword should be an integer, and the shape keyword should be
- an integer or a sequence of integers.
- The flags keyword specifies the minimal flags that are required on any
- array passed in.
- This can be specified as a string of comma separated requirements, an integer
- indicating the requirement bits OR'd together, or a flags object returned
- from the flags attribute of an array with the necessary requirements.
-
-\end_layout
-
-\begin_layout Standard
-Using an ndpointer class in the argtypes method can make it significantly
- safer to call a C-function using ctypes and the data-area of an ndarray.
- You may still want to wrap the function in an additional Python wrapper
- to make it user-friendly (hiding some obvious arguments and making some
- arguments output arguments).
- In this process, the
-\series bold
-requires
-\series default
- function in NumPy may be useful to return the right kind of array from
- a given input.
-
-\end_layout
-
-\begin_layout Subsection
-Complete example
-\end_layout
-
-\begin_layout Standard
-In this example, I will show how the addition function and the filter function
- implemented previously using the other approaches can be implemented using
- ctypes.
- First, the C-code which implements the algorithms contains the functions
- zadd, dadd, sadd, cadd, and dfilter2d.
- The zadd function is
-\end_layout
-
-\begin_layout LyX-Code
-/* Add arrays of contiguous data */
-\newline
-typedef struct {double real; double imag;}
- cdouble;
-\newline
-typedef struct {float real; float imag;} cfloat;
-\newline
-void zadd(cdouble
- *a, cdouble *b, cdouble *c, long n)
-\newline
-{
-\newline
- while (n--) {
-\newline
- c->real =
- a->real + b->real;
-\newline
- c->imag = a->imag + b->imag;
-\newline
- a++; b++;
- c++;
-\newline
- }
-\newline
-}
-\end_layout
-
-\begin_layout Standard
-with similar code for cadd, dadd, and sadd that handles complex float, double,
- and float data-types, respectively:
-\end_layout
-
-\begin_layout LyX-Code
-void cadd(cfloat *a, cfloat *b, cfloat *c, long n)
-\newline
-{
-\newline
- while (n--) {
-\newline
-
- c->real = a->real + b->real;
-\newline
- c->imag = a->imag
- + b->imag;
-\newline
- a++; b++; c++;
-\newline
- }
-\newline
-}
-\newline
-void dadd(double
- *a, double *b, double *c, long n)
-\newline
-{
-\newline
- while (n--) {
-\newline
-
- *c++ = *a++ + *b++;
-\newline
- }
-\newline
-}
-\newline
-void sadd(float *a, float *b, float
- *c, long n)
-\newline
-{
-\newline
- while (n--) {
-\newline
- *c++ = *a++ + *b++;
-\newline
-
- }
-\newline
-}
-\end_layout
-
-\begin_layout Standard
-The code.c file also contains the function dfilter2d:
-\end_layout
-
-\begin_layout LyX-Code
-/* Assumes b is contiguous and
-\newline
- a has strides that are multiples of sizeof(dou
-ble)
-\newline
-*/
-\newline
-void
-\newline
-dfilter2d(double *a, double *b, int *astrides, int *dims)
-\newline
-{
-\newline
-
- int i, j, M, N, S0, S1;
-\newline
- int r, c, rm1, rp1, cp1, cm1;
-\newline
-
-\newline
- M = dims[0];
- N = dims[1];
-\newline
- S0 = astrides[0]/sizeof(double);
-\newline
- S1=astrides[1]/sizeof(doub
-le);
-\newline
- for (i=1; i<M-1; i++) {
-\newline
- r = i*S0; rp1 = r+S0; rm1 = r-S0;
-\newline
-
- for (j=1; j<N-1; j++) {
-\newline
- c = j*S1; cp1 = j+S1; cm1 = j-S1;
-\newline
-
- b[i*N+j] = a[r+c] +
-\backslash
-
-\newline
- (a[rp1+c] + a[rm1+c] +
-\backslash
-
-\newline
- a[r+cp1] + a[r+cm1])*0.5 +
-\backslash
-
-\newline
- (a[rp1+cp1] + a[rp1+cm1] +
-\backslash
-
-\newline
- a[rm1+cp1] + a[rm1+cp1])*0.25;
-\newline
- }
-\newline
- }
-\newline
-}
-\end_layout
-
-\begin_layout Standard
-A possible advantage this code has over the Fortran-equivalent code is that
- it takes arbitrarily strided (i.e.
- non-contiguous arrays) and may also run faster depending on the optimization
- capability of your compiler.
- But, it is a obviously more complicated than the simple code in filter.f.
- This code must be compiled into a shared library.
- On my Linux system this is accomplished using
-\end_layout
-
-\begin_layout LyX-Code
-gcc -o code.so -shared code.c
-\end_layout
-
-\begin_layout Standard
-Which creates a shared_library named code.so in the current directory.
- On Windows don't forget to either add __declspec(dllexport) in front of
- void on the line preceeding each function definition, or write a code.def
- file that lists the names of the functions to be exported.
-
-\end_layout
-
-\begin_layout Standard
-A suitable Python interface to this shared library should be constructed.
- To do this create a file named interface.py with the following lines at
- the top:
-\end_layout
-
-\begin_layout LyX-Code
-__all__ = ['add', 'filter2d']
-\newline
-
-\newline
-import numpy as N
-\newline
-import os
-\newline
-
-\newline
-_path = os.path.dirname('__
-file__')
-\newline
-lib = N.ctypeslib.load_library('code', _path)
-\newline
-_typedict = {'zadd' :
- complex, 'sadd' : N.single,
-\newline
- 'cadd' : N.csingle, 'dadd' : float}
-\newline
-for
- name in _typedict.keys():
-\newline
- val = getattr(lib, name)
-\newline
- val.restype = None
-\newline
-
- _type = _typedict[name]
-\newline
- val.argtypes = [N.ctypeslib.ndpointer(_type,
-
-\newline
- flags='aligned, contiguous'),
-\newline
-
- N.ctypeslib.ndpointer(_type,
-\newline
- flags='aligned, contiguous'),
-\newline
-
- N.ctypeslib.ndpointer(_type,
-\newline
- flags='alig
-ned, contiguous,'
-\backslash
-
-\newline
- 'writeable'),
-\newline
- N.ctypeslib.c_intp]
-\end_layout
-
-\begin_layout Standard
-This code loads the shared library named code.<ext> located in the same path
- as this file.
- It then adds a return type of void to the functions contained in the library.
- It also adds argument checking to the functions in the library so that
- ndarrays can be passed as the first three arguments along with an integer
- (large enough to hold a pointer on the platform) as the fourth argument.
-
-\end_layout
-
-\begin_layout Standard
-Setting up the filtering function is similar and allows the filtering function
- to be called with ndarray arguments as the first two arguments and with
- pointers to integers (large enough to handle the strides and shape of an
- ndarray) as the last two arguments.
-
-\end_layout
-
-\begin_layout LyX-Code
-lib.dfilter2d.restype=None
-\newline
-lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float,
- ndim=2,
-\newline
- flags='aligned'),
-\newline
-
- N.ctypeslib.ndpointer(float, ndim=2,
-\newline
-
- flags='aligned, contiguous,'
-\backslash
-
-\newline
- 'writeable'),
-\newline
-
- ctypes.POINTER(N.ctypeslib.c_intp),
-\newline
- ctypes.POINTER
-(N.ctypeslib.c_intp)]
-\end_layout
-
-\begin_layout Standard
-Next, define a simple selection function that chooses which addition function
- to call in the shared library based on the data-type:
-\end_layout
-
-\begin_layout LyX-Code
-def select(dtype):
-\newline
- if dtype.char in ['?bBhHf']:
-\newline
- return lib.sadd,
- single
-\newline
- elif dtype.char in ['F']:
-\newline
- return lib.cadd, csingle
-\newline
- elif
- dtype.char in ['DG']:
-\newline
- return lib.zadd, complex
-\newline
- else:
-\newline
- return
- lib.dadd, float
-\newline
- return func, ntype
-\end_layout
-
-\begin_layout Standard
-Finally, the two functions to be exported by the interface can be written
- simply as
-\end_layout
-
-\begin_layout LyX-Code
-def add(a, b):
-\newline
- requires = ['CONTIGUOUS', 'ALIGNED']
-\newline
- a = N.asanyarray(a)
-\newline
-
- func, dtype = select(a.dtype)
-\newline
- a = N.require(a, dtype, requires)
-\newline
-
- b = N.require(b, dtype, requires)
-\newline
- c = N.empty_like(a)
-\newline
- func(a,b,c,a.size)
-\newline
-
- return c
-\end_layout
-
-\begin_layout Standard
-and
-\end_layout
-
-\begin_layout LyX-Code
-def filter2d(a):
-\newline
- a = N.require(a, float, ['ALIGNED'])
-\newline
- b = N.zeros_like(a)
-\newline
-
- lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape)
-\newline
- return b
-\end_layout
-
-\begin_layout Subsection
-Conclusion
-\end_layout
-
-\begin_layout Standard
-Using ctypes is a powerful way to connect Python with arbitrary C-code.
- It's advantages for extending Python include
-\end_layout
-
-\begin_layout Itemize
-clean separation of C-code from Python code
-\end_layout
-
-\begin_deeper
-\begin_layout Itemize
-no need to learn a new syntax except Python and C
-\end_layout
-
-\begin_layout Itemize
-allows re-use of C-code
-\end_layout
-
-\begin_layout Itemize
-functionality in shared libraries written for other purposes can be obtained
- with a simple Python wrapper and search for the library.
-
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-easy integration with NumPy through the ctypes attribute
-\end_layout
-
-\begin_layout Itemize
-full argument checking with the ndpointer class factory
-\end_layout
-
-\begin_layout Standard
-It's disadvantages include
-\end_layout
-
-\begin_layout Itemize
-It is difficult to distribute an extension module made using ctypes because
- of a lack of support for building shared libraries in distutils (but I
- suspect this will change in time).
-
-\end_layout
-
-\begin_layout Itemize
-You must have shared-libraries of your code (no static libraries).
-
-\end_layout
-
-\begin_layout Itemize
-Very little support for C++ code and it's different library-calling conventions.
- You will probably need a C-wrapper around C++ code to use with ctypes (or
- just use Boost.Python instead).
-\end_layout
-
-\begin_layout Standard
-Because of the difficulty in distributing an extension module made using
- ctypes, f2py is still the easiest way to extend Python for package creation.
- However, ctypes is a close second and will probably be growing in popularity
- now that it is part of the Python distribution.
- This should bring more features to ctypes that should eliminate the difficulty
- in extending Python and distributing the extension using ctypes.
-
-\begin_inset LatexCommand index
-name "ctypes|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Additional tools you may find useful
-\end_layout
-
-\begin_layout Standard
-These tools have been found useful by others using Python and so are included
- here.
- They are discussed separately because I see them as either older ways to
- do things more modernly handled by f2py, weave, Pyrex, or ctypes (SWIG,
- PyFort, PyInline) or because I don't know much about them (SIP, Boost,
- Instant).
- I have not added links to these methods because my experience is that you
- can find the most relevant link faster using Google or some other search
- engine, and any links provided here would be quickly dated.
- Do not assume that just because it is included in this list, I don't think
- the package deserves your attention.
- I'm including information about these packages because many people have
- found them useful and I'd like to give you as many options as possible
- for tackling the problem of easily integrating your code.
-
-\end_layout
-
-\begin_layout Subsection
-SWIG
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "swig"
-
-\end_inset
-
-Simplified Wrapper and Interface Generator (SWIG) is an old and fairly stable
- method for wrapping C/C++-libraries to a large variety of other languages.
- It does not specifically understand NumPy arrays but can be made useable
- with NumPy through the use of typemaps.
- There are some sample typemaps in the numpy/doc/swig directory under numpy.i
- along with an example module that makes use of them.
- SWIG excels at wrapping large C/C++ libraries because it can (almost) parse
- their headers and auto-produce an interface.
- Technically, you need to generate a
-\family typewriter
-.i
-\family default
- file that defines the interface.
- Often, however, this
-\family typewriter
-.i
-\family default
- file can be parts of the header itself.
- The interface usually needs a bit of tweaking to be very useful.
- This ability to parse C/C++ headers and auto-generate the interface still
- makes SWIG a useful approach to adding functionalilty from C/C++ into Python,
- despite the other methods that have emerged that are more targeted to Python.
- SWIG can actually target extensions for several languages, but the typemaps
- usually have to be language-specific.
- Nonetheless, with modifications to the Python-specific typemaps, SWIG can
- be used to interface a library with other languages such as Perl, Tcl,
- and Ruby.
-
-\end_layout
-
-\begin_layout Standard
-My experience with SWIG has been generally positive in that it is relatively
- easy to use and quite powerful.
- I used to use it quite often before becoming more proficient at writing
- C-extensions.
- However, I struggled writing custom interfaces with SWIG because it must
- be done using the concept of typemaps which are not Python specific and
- are written in a C-like syntax.
- Therefore, I tend to prefer other gluing strategies and would only attempt
- to use SWIG to wrap a very-large C/C++ library.
- Nonetheless, there are others who use SWIG quite happily.
-
-\end_layout
-
-\begin_layout Subsection
-SIP
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "SIP"
-
-\end_inset
-
-SIP is another tool for wrapping C/C++ libraries that is Python specific
- and appears to have very good support for C++.
- Riverbank Computing developed SIP in order to create Python bindings to
- the QT library.
- An interface file must be written to generate the binding, but the interface
- file looks a lot like a C/C++ header file.
- While SIP is not a full C++ parser, it understands quite a bit of C++ syntax
- as well as its own special directives that allow modification of how the
- Python binding is accomplished.
- It also allows the user to define mappings between Python types and C/C++
- structrues and classes.
-
-\end_layout
-
-\begin_layout Subsection
-Boost Python
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "Boost.Python"
-
-\end_inset
-
-Boost is a repository of C++ libraries and Boost.Python is one of those libraries
- which provides a concise interface for binding C++ classes and functions
- to Python.
- The amazing part of the Boost.Python approach is that it works entirely
- in pure C++ without introducing a new syntax.
- Many users of C++ report that Boost.Python makes it possible to combine
- the best of both worlds in a seamless fashion.
- I have not used Boost.Python because I am not a big user of C++ and using
- Boost to wrap simple C-subroutines is usually over-kill.
- It's primary purpose is to make C++ classes available in Python.
- So, if you have a set of C++ classes that need to be integrated cleanly
- into Python, consider learning about and using Boost.Python.
-\end_layout
-
-\begin_layout Subsection
-Instant
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "Instant"
-
-\end_inset
-
-This is a relatively new package (called pyinstant at sourceforge) that
- builds on top of SWIG to make it easy to inline C and C++ code in Python
- very much like weave.
- However, Instant builds extension modules on the fly with specific module
- names and specific method names.
- In this repsect it is more more like f2py in its behavior.
- The extension modules are built on-the fly (as long as the SWIG is installed).
- They can then be imported.
- Here is an example of using Instant with NumPy arrays (adapted from the
- test2 included in the Instant distribution):
-\end_layout
-
-\begin_layout LyX-Code
-code="""
-\end_layout
-
-\begin_layout LyX-Code
-PyObject* add(PyObject* a_, PyObject* b_){
-\end_layout
-
-\begin_layout LyX-Code
- /*
-\end_layout
-
-\begin_layout LyX-Code
- various checks
-\end_layout
-
-\begin_layout LyX-Code
- */
-\end_layout
-
-\begin_layout LyX-Code
- PyArrayObject* a=(PyArrayObject*) a_;
-\end_layout
-
-\begin_layout LyX-Code
- PyArrayObject* b=(PyArrayObject*) b_;
-\end_layout
-
-\begin_layout LyX-Code
- int n = a->dimensions[0];
-\end_layout
-
-\begin_layout LyX-Code
- int dims[1];
-\end_layout
-
-\begin_layout LyX-Code
- dims[0] = n;
-\end_layout
-
-\begin_layout LyX-Code
- PyArrayObject* ret;
-\end_layout
-
-\begin_layout LyX-Code
- ret = (PyArrayObject*) PyArray_FromDims(1, dims, NPY_DOUBLE);
-\end_layout
-
-\begin_layout LyX-Code
- int i;
-\end_layout
-
-\begin_layout LyX-Code
- char *aj=a->data;
-\end_layout
-
-\begin_layout LyX-Code
- char *bj=b->data;
-\end_layout
-
-\begin_layout LyX-Code
- double *retj = (double *)ret->data;
-\end_layout
-
-\begin_layout LyX-Code
- for (i=0; i < n; i++) {
-\end_layout
-
-\begin_layout LyX-Code
- *retj++ = *((double *)aj) + *((double *)bj);
-\end_layout
-
-\begin_layout LyX-Code
- aj += a->strides[0];
-\end_layout
-
-\begin_layout LyX-Code
- bj += b->strides[0];
-\end_layout
-
-\begin_layout LyX-Code
- }
-\end_layout
-
-\begin_layout LyX-Code
-return (PyObject *)ret;
-\end_layout
-
-\begin_layout LyX-Code
-}
-\end_layout
-
-\begin_layout LyX-Code
-"""
-\end_layout
-
-\begin_layout LyX-Code
-import Instant, numpy
-\end_layout
-
-\begin_layout LyX-Code
-ext = Instant.Instant()
-\end_layout
-
-\begin_layout LyX-Code
-ext.create_extension(code=s, headers=["numpy/arrayobject.h"],
- include_dirs=[numpy.get_include()],
- init_code='import_array();', module="test2b_ext
-")
-\end_layout
-
-\begin_layout LyX-Code
-import test2b_ext
-\end_layout
-
-\begin_layout LyX-Code
-a = numpy.arange(1000)
-\end_layout
-
-\begin_layout LyX-Code
-b = numpy.arange(1000)
-\end_layout
-
-\begin_layout LyX-Code
-d = test2b_ext.add(a,b)
-\end_layout
-
-\begin_layout Standard
-Except perhaps for the dependence on SWIG, Instant is a straightforward
- utility for writing extension modules.
-
-\end_layout
-
-\begin_layout Subsection
-PyInline
-\end_layout
-
-\begin_layout Standard
-This is a much older module that allows automatic building of extension
- modules so that C-code can be included with Python code.
- It's latest release (version 0.03) was in 2001, and it appears that it is
- not being updated.
-
-\end_layout
-
-\begin_layout Subsection
-PyFort
-\end_layout
-
-\begin_layout Standard
-PyFort is a nice tool for wrapping Fortran and Fortran-like C-code into
- Python with support for Numeric arrays.
- It was written by Paul Dubois, a distinguished computer scientist and the
- very first maintainer of Numeric (now retired).
- It is worth mentioning in the hopes that somebody will update PyFort to
- work with NumPy arrays as well which now support either Fortran or C-style
- contiguous arrays.
-
-\end_layout
-
-\begin_layout Chapter
-Code Explanations
-\end_layout
-
-\begin_layout Quotation
-Fanaticism consists of redoubling your efforts when you have forgotten your
- aim.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-George Santayana
-\end_layout
-
-\begin_layout Quotation
-An authority is a person who can tell you more about something than you
- really care to know.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Unknown
-\end_layout
-
-\begin_layout Standard
-This Chapter attempts to explain the logic behind some of the new pieces
- of code.
- The purpose behind these explanations is to enable somebody to be able
- to understand the ideas behind the implementation somewhat more easily
- than just staring at the code.
- Perhaps in this way, the algorithms can be improved on, borrowed from,
- and/or optimized.
-
-\end_layout
-
-\begin_layout Section
-Memory model
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ndarray!memory model"
-
-\end_inset
-
-One fundamental aspect of the ndarray is that an array is seen as a
-\begin_inset Quotes eld
-\end_inset
-
-chunk
-\begin_inset Quotes erd
-\end_inset
-
- of memory starting at some location.
- The interpretation of this memory depends on the stride information.
- For each dimension in an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array, an integer (stride) dictates how many bytes must be
- skipped to get to the next element in that dimension.
- Unless you have a single-segment array, this stride information must be
- consulted when traversing through an array.
- It is not difficult to write code that accepts strides, you just have to
- use (char *) pointers because strides are in units of bytes.
- Keep in mind also that strides do not have to be unit-multiples of the
- element size.
- Also, remember that if the number of dimensions of the array is 0 (sometimes
- called a rank-0 array), then the strides and dimensions variables are NULL.
-
-\end_layout
-
-\begin_layout Standard
-Besides the structural information contained in the strides and dimensions
- members of the PyArrayObject, the flags contain important information about
- how the data may be accessed.
- In particular, the NPY_ALIGNED flag is set when the memory is on a suitable
- boundary according to the data-type array.
- Even if you have a contiguous chunk of memory, you cannot just assume it
- is safe to dereference a data-type-specific pointer to an element.
- Only if the NPY_ALIGNED flag is set is this a safe operation (on some platforms
- it will work but on others, like Solaris, it will cause a bus error).
- The NPY_WRITEABLE should also be ensured if you plan on writing to the
- memory area of the array.
- It is also possible to obtain a pointer to an unwriteable memory area.
- Sometimes, writing to the memory area when the NPY_WRITEABLE flag is not
- set will just be rude.
- Other times it can cause program crashes (
-\emph on
-e.g.
-
-\emph default
- a data-area that is a read-only memory-mapped file).
-\end_layout
-
-\begin_layout Section
-Data-type encapsulation
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "dtype"
-
-\end_inset
-
-The data-type is an important abstraction of the ndarray.
- Operations will look to the data-type to provide the key functionality
- that is needed to operate on the array.
- This functionality is provided in the list of function pointers pointed
- to by the 'f' member of the PyArray_Descr structure.
- In this way, the number of data-types can be extended simply by providing
- a PyArray_Descr structure with suitable function pointers in the 'f' member.
- For built-in types there are some optimizations that by-pass this mechanism,
- but the point of the data-type abstraction is to allow new data-types to
- be added.
-\end_layout
-
-\begin_layout Standard
-One of the built-in data-types, the void data-type allows for arbitrary
- records containing 1 or more fields as elements of the array.
- A field is simply another data-type object along with an offset into the
- current record.
- In order to support arbitrarily nested fields, several recursive implementation
-s of data-type access are implemented for the void type.
- A common idiom is to cycle through the elements of the dictionary and perform
- a specific operation based on the data-type object stored at the given
- offset.
- These offsets can be arbitrary numbers.
- Therefore, the possibility of encountering mis-aligned data must be recognized
- and taken into account if necessary.
-
-\end_layout
-
-\begin_layout Section
-N-D Iterators
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "array iterator"
-
-\end_inset
-
-A very common operation in much of NumPy code is the need to iterate over
- all the elements of a general, strided, N-dimensional array.
- This operation of a general-purpose N-dimensional loop is abstracted in
- the notion of an iterator object.
- To write an N-dimensional loop, you only have to create an iterator object
- from an ndarray, work with the dataptr member of the iterator object structure
- and call the macro PyArray_ITER_NEXT(it) on the iterator object to move
- to the next element.
- The
-\begin_inset Quotes eld
-\end_inset
-
-next
-\begin_inset Quotes erd
-\end_inset
-
- element is always in C-contiguous order.
- The macro works by first special casing the C-contiguous, 1-d, and 2-d
- cases which work very simply.
-
-\end_layout
-
-\begin_layout Standard
-For the general case, the iteration works by keeping track of a list of
- coordinate counters in the iterator object.
- At each iteration, the last coordinate counter is increased (starting from
- 0).
- If this counter is smaller then one less than the size of the array in
- that dimension (a pre-computed and stored value), then the counter is increased
- and the dataptr member is increased by the strides in that dimension and
- the macro ends.
- If the end of a dimension is reached, the counter for the last dimension
- is reset to zero and the dataptr is moved back to the beginning of that
- dimension by subtracting the strides value times one less than the number
- of elements in that dimension (this is also pre-computed and stored in
- the backstrides member of the iterator object).
- In this case, the macro does not end, but a local dimension counter is
- decremented so that the next-to-last dimension replaces the role that the
- last dimension played and the previously-described tests are executed again
- on the next-to-last dimension.
- In this way, the dataptr is adjusted appropriately for arbitrary striding.
-
-\end_layout
-
-\begin_layout Standard
-The coordinates member of the PyArrayIterObject structure maintains the
- current N-d counter unless the underlying array is C-contiguous in which
- case the coordinate counting is by-passed.
- The index member of the PyArrayIterObject keeps track of the current flat
- index of the iterator.
- It is updated by the PyArray_ITER_NEXT macro.
-
-\end_layout
-
-\begin_layout Section
-Broadcasting
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "broadcasting"
-
-\end_inset
-
-In Numeric, broadcasting was implemented in several lines of code buried
- deep in ufuncobject.c.
- In NumPy, the notion of broadcasting has been abstracted so that it can
- be performed in multiple places.
- Broadcasting is handled by the function PyArray_Broadcast.
- This function requires a PyArrayMultiIterObject (or something that is a
- binary equivalent) to be passed in.
- The PyArrayMultiIterObject keeps track of the broadcasted number of dimensions
- and size in each dimension along with the total size of the broadcasted
- result.
- It also keeps track of the number of arrays being broadcast and a pointer
- to an iterator for each of the arrays being broadcasted.
-
-\end_layout
-
-\begin_layout Standard
-The PyArray_Broadcast function takes the iterators that have already been
- defined and uses them to determine the broadcast shape in each dimension
- (to create the iterators at the same time that broadcasting occurs then
- use the PyMuliIter_New function).
- Then, the iterators are adjusted so that each iterator thinks it is iterating
- over an array with the broadcasted size.
- This is done by adjusting the iterators number of dimensions, and the shape
- in each dimension.
- This works because the iterator strides are also adjusted.
- Broadcasting only adjusts (or adds) length-1 dimensions.
- For these dimensions, the strides variable is simply set to 0 so that the
- data-pointer for the iterator over that array doesn't move as the broadcasting
- operation operates over the extended dimension.
-
-\end_layout
-
-\begin_layout Standard
-Broadcasting was always implemented in Numeric using 0-valued strides for
- the extended dimensions.
- It is done in exactly the same way in NumPy.
- The big difference is that now the array of strides is kept track of in
- a PyArrayIterObject, the iterators involved in a broadcasted result are
- kept track of in a PyArrayMultiIterObject, and the PyArray_BroadCast call
- implements the broad-casting rules.
-
-\end_layout
-
-\begin_layout Section
-Array Scalars
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "array scalars"
-
-\end_inset
-
-The array scalars offer a hierarchy of Python types that allow a one-to-one
- correspondence between the data-type stored in an array and the Python-type
- that is returned when an element is extracted from the array.
- An exception to this rule was made with object arrays.
- Object arrays are heterogeneous collections of arbitrary Python objects.
- When you select an item from an object array, you get back the original
- Python object (and not an object array scalar which does exist but is rarely
- used for practical purposes).
-\end_layout
-
-\begin_layout Standard
-The array scalars also offer the same methods and attributes as arrays with
- the intent that the same code can be used to support arbitrary dimensions
- (including 0-dimensions).
- The array scalars are read-only (immutable) with the exception of the void
- scalar which can also be written to so that record-array field setting
- works more naturally (a[0]['f1'] =
-\family typewriter
-value
-\family default
-).
-\end_layout
-
-\begin_layout Section
-Advanced (
-\begin_inset Quotes eld
-\end_inset
-
-Fancy
-\begin_inset Quotes erd
-\end_inset
-
-) Indexing
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "indexing"
-
-\end_inset
-
-The implementation of advanced indexing represents some of the most difficult
- code to write and explain.
- In fact, there are two implementations of advanced indexing.
- The first works only with 1-d arrays and is implemented to handle expressions
- involving a.flat[obj].
- The second is general-purpose that works for arrays of
-\begin_inset Quotes eld
-\end_inset
-
-arbitrary dimension
-\begin_inset Quotes erd
-\end_inset
-
- (up to a fixed maximum).
- The one-dimensional indexing approaches were implemented in a rather straightfo
-rward fashion, and so it is the general-purpose indexing code that will
- be the focus of this section.
-
-\end_layout
-
-\begin_layout Standard
-There is a multi-layer approach to indexing because the indexing code can
- at times return an array scalar and at other times return an array.
- The functions with
-\begin_inset Quotes eld
-\end_inset
-
-_nice
-\begin_inset Quotes erd
-\end_inset
-
- appended to their name do this special handling while the function without
- the _nice appendage always return an array (perhaps a 0-dimensional array).
- Some special-case optimizations (the index being an integer scalar, and
- the index being a tuple with as many dimensions as the array) are handled
- in array_subscript_nice function which is what Python calls when presented
- with the code
-\begin_inset Quotes eld
-\end_inset
-
-a[obj].
-\begin_inset Quotes erd
-\end_inset
-
- These optimizations allow fast single-integer indexing, and also ensure
- that a 0-dimensional array is not created only to be discarded as the array
- scalar is returned instead.
- This provides significant speed-up for code that is selecting many scalars
- out of an array (such as in a loop).
- However, it is still not faster than simply using a list to store standard
- Python scalars, because that is optimized by the Python interpreter itself.
-
-\end_layout
-
-\begin_layout Standard
-After these optimizations, the array_subscript function itself is called.
- This function first checks for field selection which occurs when a string
- is passed as the indexing object.
- Then, 0-d arrays are given special-case consideration.
- Finally, the code determines whether or not advanced, or fancy, indexing
- needs to be performed.
- If fancy indexing is not needed, then standard view-based indexing is performed
- using code borrowed from Numeric which parses the indexing object and returns
- the offset into the data-buffer and the dimensions necessary to create
- a new view of the array.
- The strides are also changed by multiplying each stride by the step-size
- requested along the corresponding dimension.
-
-\end_layout
-
-\begin_layout Subsection
-Fancy-indexing check
-\end_layout
-
-\begin_layout Standard
-The fancy_indexing_check routine determines whether or not to use standard
- view-based indexing or new copy-based indexing.
- If the indexing object is a tuple, then view-based indexing is assumed
- by default.
- Only if the tuple contains an array object or a sequence object is fancy-indexi
-ng assumed.
- If the indexing object is an array, then fancy indexing is automatically
- assumed.
- If the indexing object is any other kind of sequence, then fancy-indexing
- is assumed by default.
- This is over-ridden to simple indexing if the sequence contains any slice,
- newaxis, or Ellipsis objects, and no arrays or additional sequences are
- also contained in the sequence.
- The purpose of this is to allow the construction of
-\begin_inset Quotes eld
-\end_inset
-
-slicing
-\begin_inset Quotes erd
-\end_inset
-
- sequences which is a common technique for building up code that works in
- arbitrary numbers of dimensions.
-
-\end_layout
-
-\begin_layout Subsection
-Fancy-indexing implementation
-\end_layout
-
-\begin_layout Standard
-The concept of indexing was also abstracted using the idea of an iterator.
- If fancy indexing is performed, then a PyArrayMapIterObject is created.
- This internal object is not exposed to Python.
- It is created in order to handle the fancy-indexing at a high-level.
- Both get and set fancy-indexing operations are implemented using this object.
- Fancy indexing is abstracted into three separate operations: (1) creating
- the PyArrayMapIterObject from the indexing object, (2) binding the PyArrayMapIt
-erObject to the array being indexed, and (3) getting (or setting) the items
- determined by the indexing object.
- There is an optimization implemented so that the PyArrayIterObject (which
- has it's own less complicated fancy-indexing) is used for indexing when
- possible.
-
-\end_layout
-
-\begin_layout Subsubsection
-Creating the mapping object
-\end_layout
-
-\begin_layout Standard
-The first step is to convert the indexing objects into a standard form where
- iterators are created for all of the index array inputs and all Boolean
- arrays are converted to equivalent integer index arrays (as if nonzero(arr)
- had been called).
- Finally, all integer arrays are replaced with the integer 0 in the indexing
- object and all of the index-array iterators are
-\begin_inset Quotes eld
-\end_inset
-
-broadcast
-\begin_inset Quotes erd
-\end_inset
-
- to the same shape.
-
-\end_layout
-
-\begin_layout Subsubsection
-Binding the mapping object
-\end_layout
-
-\begin_layout Standard
-When the mapping object is created it does not know which array it will
- be used with so once the index iterators are constructed during mapping-object
- creation, the next step is to associate these iterators with a particular
- ndarray.
- This process interprets any ellipsis and slice objects so that the index
- arrays are associated with the appropriate axis (the axis indicated by
- the iteraxis entry corresponding to the iterator for the integer index
- array).
- This information is then used to check the indices to be sure they are
- within range of the shape of the array being indexed.
- The presence of ellipsis and/or slice objects implies a sub-space iteration
- that is accomplished by extracting a sub-space view of the array (using
- the index object resulting from replacing all the integer index arrays
- with 0) and storing the information about where this sub-space starts in
- the mapping object.
- This is used later during mapping-object iteration to select the correct
- elements from the underlying array.
-
-\end_layout
-
-\begin_layout Subsubsection
-Getting (or Setting)
-\end_layout
-
-\begin_layout Standard
-After the mapping object is successfully bound to a particular array, the
- mapping object contains the shape of the resulting item as well as iterator
- objects that will walk through the currently-bound array and either get
- or set its elements as needed.
- The walk is implemented using the PyArray_MapIterNext function.
- This function sets the coordinates of an iterator object into the current
- array to be the next coordinate location indicated by all of the indexing-objec
-t iterators while adjusting, if necessary, for the presence of a sub-space.
- The result of this function is that the dataptr member of the mapping object
- structure is pointed to the next position in the array that needs to be
- copied out or set to some value.
-
-\end_layout
-
-\begin_layout Standard
-When advanced indexing is used to extract an array, an iterator for the
- new array is constructed and advanced in phase with the mapping object
- iterator.
- When advanced indexing is used to place values in an array, a special
-\begin_inset Quotes eld
-\end_inset
-
-broadcasted
-\begin_inset Quotes erd
-\end_inset
-
- iterator is constructed from the object being placed into the array so
- that it will only work if the values used for setting have a shape that
- is
-\begin_inset Quotes eld
-\end_inset
-
-broadcastable
-\begin_inset Quotes erd
-\end_inset
-
- to the shape implied by the indexing object.
-
-\end_layout
-
-\begin_layout Section
-Universal Functions
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc|("
-
-\end_inset
-
-Universal functions are callable objects that take
-\begin_inset Formula $N$
-\end_inset
-
- inputs and produce
-\begin_inset Formula $M$
-\end_inset
-
- outputs by wrapping basic 1-d loops that work element-by-element into full
- easy-to use functions that seamlessly implement broadcasting, type-checking
- and buffered coercion, and output-argument handling.
- New universal functions are normally created in C, although there is a
- mechanism for creating ufuncs from Python functions (
-\series bold
-frompyfunc
-\series default
-).
- The user must supply a 1-d loop that implements the basic function taking
- the input scalar values and placing the resulting scalars into the appropriate
- output slots as explaine n implementation.
-
-\end_layout
-
-\begin_layout Subsection
-Setup
-\end_layout
-
-\begin_layout Standard
-Every ufunc calculation involves some overhead related to setting up the
- calculation.
- The practical significance of this overhead is that even though the actual
- calculation of the ufunc is very fast, you will be able to write array
- and type-specific code that will work faster for small arrays than the
- ufunc.
- In particular, using ufuncs to perform many calculations on 0-d arrays
- will be slower than other Python-based solutions (the silently-imported
- scalarmath module exists precisely to give array scalars the look-and-feel
- of ufunc-based calculations with significantly reduced overhead).
-
-\end_layout
-
-\begin_layout Standard
-When a ufunc is called, many things must be done.
- The information collected from these setup operations is stored in a loop-objec
-t.
- This loop object is a C-structure (that could become a Python object but
- is not initialized as such because it is only used internally).
- This loop object has the layout needed to be used with PyArray_Broadcast
- so that the broadcasting can be handled in the same way as it is handled
- in other sections of code.
-
-\end_layout
-
-\begin_layout Standard
-The first thing done is to look-up in the thread-specific global dictionary
- the current values for the buffer-size, the error mask, and the associated
- error object.
- The state of the error mask controls what happens when an error-condiction
- is found.
- It should be noted that checking of the hardware error flags is only performed
- after each 1-d loop is executed.
- This means that if the input and output arrays are contiguous and of the
- correct type so that a single 1-d loop is performed, then the flags may
- not be checked until all elements of the array have been calcluated.
- Looking up these values in a thread-specific dictionary takes time which
- is easily ignored for all but very small arrays.
-
-\end_layout
-
-\begin_layout Standard
-After checking, the thread-specific global variables, the inputs are evaluated
- to determine how the ufunc should proceed and the input and output arrays
- are constructed if necessary.
- Any inputs which are not arrays are converted to arrays (using context
- if necessary).
- Which of the inputs are scalars (and therefore converted to 0-d arrays)
- is noted.
-
-\end_layout
-
-\begin_layout Standard
-Next, an appropriate 1-d loop is selected from the 1-d loops available to
- the ufunc based on the input array types.
- This 1-d loop is selected by trying to match the signature of the data-types
- of the inputs against the available signatures.
- The signatures corresponding to built-in types are stored in the types
- member of the ufunc structure.
- The signatures corresponding to user-defined types are stored in a linked-list
- of function-information with the head element stored as a
-\family typewriter
-CObject
-\family default
- in the userloops dictionary keyed by the data-type number (the first user-defin
-ed type in the argument list is used as the key).
- The signatures are searched until a signature is found to which the input
- arrays can all be cast safely (ignoring any scalar arguments which are
- not allowed to determine the type of the result).
- The implication of this search procedure is that
-\begin_inset Quotes eld
-\end_inset
-
-lesser types
-\begin_inset Quotes erd
-\end_inset
-
- should be placed below
-\begin_inset Quotes eld
-\end_inset
-
-larger types
-\begin_inset Quotes erd
-\end_inset
-
- when the signatures are stored.
- If no 1-d loop is found, then an error is reported.
- Otherwise, the argument_list is updated with the stored signature --- in
- case casting is necessary and to fix the output types assumed by the 1-d
- loop.
-\end_layout
-
-\begin_layout Standard
-If the ufunc has 2 inputs and 1 output and the second input is an Object
- array then a special-case check is performed so that NotImplemented is
- returned if the second input is not an ndarray, has the __array_priority__
- attribute, and has an __r<op>__ special method.
- In this way, Python is signaled to give the other object a chance to complete
- the operation instead of using generic object-array calculations.
- This allows (for example) sparse matrices to override the multiplication
- operator 1-d loop.
-
-\end_layout
-
-\begin_layout Standard
-For input arrays that are smaller than the specified buffer size, copies
- are made of all non-contiguous, mis-aligned, or out-of-byteorder arrays
- to ensure that for small arrays, a single-loop is used.
- Then, array iterators are created for all the input arrays and the resulting
- collection of iterators is broadcast to a single shape.
-
-\end_layout
-
-\begin_layout Standard
-The output arguments (if any) are then processed and any missing return
- arrays are constructed.
- If any provided output array doesn't have the correct type (or is mis-aligned)
- and is smaller than the buffer size, then a new output array is constructed
- with the special UPDATEIFCOPY flag set so that when it is DECREF'd on completio
-n of the function, it's contents will be copied back into the output array.
- Iterators for the output arguments are then processed.
-
-\end_layout
-
-\begin_layout Standard
-Finally, the decision is made about how to execute the looping mechanism
- to ensure that all elements of the input arrays are combined to produce
- the output arrays of the correct type.
- The options for loop execution are one-loop (for contiguous, aligned, and
- correct data-type), strided-loop (for non-contiguous but still aligned
- and correct data-type), and a buffered loop (for mis-aligned or incorrect
- data-type situations).
- Depending on which execution method is called for, the loop is then setup
- and computed.
-
-\end_layout
-
-\begin_layout Subsection
-Function call
-\end_layout
-
-\begin_layout Standard
-This section describes how the basic universal function computation loop
- is setup and executed for each of the three different kinds of execution
- possibilities.
- If NPY_ALLOW_THREADS is defined during compilation, then the Python Global
- Interpreter Lock (GIL) is released prior to calling all of these loops
- (as long as they don't involve object arrays).
- It is re-acquired if necessary to handle error conditions.
- The hardware error flags are checked only after the 1-d loop is calcluated.
-
-\end_layout
-
-\begin_layout Subsubsection
-One Loop
-\end_layout
-
-\begin_layout Standard
-This is the simplest case of all.
- The ufunc is executed by calling the underlying 1-d loop exactly once.
- This is possible only when we have aligned data of the correct type (including
- byte-order) for both input and output and all arrays have uniform strides
- (either contiguous, 0-d, or 1-d).
- In this case, the 1-d computational loop is called once to compute the
- calculation for the entire array.
- Note that the hardware error flags are only checked after the entire calculatio
-n is complete.
-
-\end_layout
-
-\begin_layout Subsubsection
-Strided Loop
-\end_layout
-
-\begin_layout Standard
-When the input and output arrays are aligned and of the correct type, but
- the striding is not uniform (non-contiguous and 2-d or larger), then a
- second looping structure is employed for the calculation.
- This approach converts all of the iterators for the input and output arguments
- to iterate over all but the largest dimension.
- The inner loop is then handled by the underlying 1-d computational loop.
- The outer loop is a standard iterator loop on the converted iterators.
- The hardware error flags are checked after each 1-d loop is completed.
-
-\end_layout
-
-\begin_layout Subsubsection
-Buffered Loop
-\end_layout
-
-\begin_layout Standard
-This is the code that handles the situation whenever the input and/or output
- arrays are either misaligned or of the wrong data-type (including being
- byte-swapped) from what the underlying 1-d loop expects.
- The arrays are also assumed to be non-contiguous.
- The code works very much like the strided loop except for the inner 1-d
- loop is modified so that pre-processing is performed on the inputs and
- post-processing is performed on the outputs in bufsize chunks (where bufsize
- is a user-settable parameter).
- The underlying 1-d computational loop is called on data that is copied
- over (if it needs to be).
- The setup code and the loop code is considerably more complicated in this
- case because it has to handle:
-\end_layout
-
-\begin_layout Itemize
-memory allocation of the temporary buffers
-\end_layout
-
-\begin_layout Itemize
-deciding whether or not to use buffers on the input and output data (mis-aligned
- and/or wrong data-type)
-\end_layout
-
-\begin_layout Itemize
-copying and possibly casting data for any inputs or outputs for which buffers
- are necessary.
-\end_layout
-
-\begin_layout Itemize
-special-casing Object arrays so that reference counts are properly handled
- when copies and/or casts are necessary.
-
-\end_layout
-
-\begin_layout Itemize
-breaking up the inner 1-d loop into bufsize chunks (with a possible remainder).
-
-\end_layout
-
-\begin_layout Standard
-Again, the hardware error flags are checked at the end of each 1-d loop.
-\end_layout
-
-\begin_layout Subsection
-Final output manipulation
-\end_layout
-
-\begin_layout Standard
-Ufuncs allow other array-like classes to be passed seamlessly through the
- interface in that inputs of a particular class will induce the outputs
- to be of that same class.
- The mechanism by which this works is the following.
- If any of the inputs are not ndarrays and define the
-\series bold
-__array_wrap__
-\series default
- method, then the class with the largest
-\series bold
-__array_priority__
-\series default
- attribute determines the type of all the outputs (with the exception of
- any output arrays passed in).
- The
-\series bold
-__array_wrap__
-\series default
- method of the input array will be called with the ndarray being returned
- from the ufunc as it's input.
- There are two calling styles of the
-\series bold
-__array_wrap__
-\series default
- function supported.
- The first takes the ndarray as the first argument and a tuple of
-\begin_inset Quotes eld
-\end_inset
-
-context
-\begin_inset Quotes erd
-\end_inset
-
- as the second argument.
- The context is (ufunc, arguments, output argument number).
- This is the first call tried.
- If a TypeError occurs, then the function is called with just the ndarray
- as the first argument.
-
-\end_layout
-
-\begin_layout Subsection
-Methods
-\end_layout
-
-\begin_layout Standard
-Their are three methods of ufuncs that require calculation similar to the
- general-purpose ufuncs.
- These are reduce, accumulate, and reduceat.
- Each of these methods requires a setup command followed by a loop.
- There are four loop styles possible for the methods corresponding to no-element
-s, one-element, strided-loop, and buffered-loop.
- These are the same basic loop styles as implemented for the general purpose
- function call except for the no-element and one-element cases which are
- special-cases occurring when the input array objects have 0 and 1 elements
- respectively.
-
-\end_layout
-
-\begin_layout Subsubsection
-Setup
-\end_layout
-
-\begin_layout Standard
-The setup function for all three methods is
-\family typewriter
-construct_reduce
-\family default
-.
- This function creates a reducing loop object and fills it with parameters
- needed to complete the loop.
- All of the methods only work on ufuncs that take 2-inputs and return 1
- output.
- Therefore, the underlying 1-d loop is selected assuming a signature of
- [
-\family typewriter
-otype
-\family default
-,
-\family typewriter
-otype
-\family default
-,
-\family typewriter
-otype
-\family default
-] where
-\family typewriter
-otype
-\family default
- is the requested reduction data-type.
- The buffer size and error handling is then retrieved from (per-thread)
- global storage.
- For small arrays that are mis-aligned or have incorrect data-type, a copy
- is made so that the un-buffered section of code is used.
- Then, the looping strategy is selected.
- If there is 1 element or 0 elements in the array, then a simple looping
- method is selected.
- If the array is not mis-aligned and has the correct data-type, then strided
- looping is selected.
- Otherwise, buffered looping must be performed.
- Looping parameters are then established, and the return array is constructed.
- The output array is of a different shape depending on whether the method
- is reduce, accumulate, or reduceat.
- If an output array is already provided, then it's shape is checked.
- If the output array is not C-contiguous, aligned, and of the correct data
- type, then a temporary copy is made with the UPDATEIFCOPY flag set.
- In this way, the methods will be able to work with a well-behaved output
- array but the result will be copied back into the true output array when
- the method computation is complete.
- Finally, iterators are set up to loop over the correct axis (depending
- on the value of axis provided to the method) and the setup routine returns
- to the actual computation routine.
-
-\end_layout
-
-\begin_layout Subsubsection
-Reduce
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!methods!reduce"
-
-\end_inset
-
-All of the ufunc methods use the same underlying 1-d computational loops
- with input and output arguments adjusted so that the appropriate reduction
- takes place.
- For example, the key to the functioning of reduce is that the 1-d loop
- is called with the output and the second input pointing to the same position
- in memory and both having a step-size of 0.
- The first input is pointing to the input array with a step-size given by
- the appropriate stride for the selected axis.
- In this way, the operation performed is
-\begin_inset Formula \begin{eqnarray*}
-o & = & i[0]\\
-o & = & i[k]\textrm{ <op> }o\quad k=1\ldots N\end{eqnarray*}
-
-\end_inset
-
- where
-\begin_inset Formula $N+1$
-\end_inset
-
- is the number of elements in the input,
-\begin_inset Formula $i$
-\end_inset
-
-,
-\begin_inset Formula $o$
-\end_inset
-
- is the output, and
-\begin_inset Formula $i[k]$
-\end_inset
-
- is the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- element of
-\begin_inset Formula $i$
-\end_inset
-
- along the selected axis.
- This basic operations is repeated for arrays with greater than 1 dimension
- so that the reduction takes place for every 1-d sub-array along the selected
- axis.
- An iterator with the selected dimension removed handles this looping.
-
-\end_layout
-
-\begin_layout Standard
-For buffered loops, care must be taken to copy and cast data before the
- loop function is called because the underlying loop expects aligned data
- of the correct data-type (including byte-order).
- The buffered loop must handle this copying and casting prior to calling
- the loop function on chunks no greater than the user-specified bufsize.
-
-\end_layout
-
-\begin_layout Subsubsection
-Accumulate
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!methods!accumulate"
-
-\end_inset
-
-The accumulate function is very similar to the reduce function in that the
- output and the second input both point to the output.
- The difference is that the second input points to memory one stride behind
- the current output pointer.
- Thus, the operation performed is
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{eqnarray*}
-o[0] & = & i[0]\\
-o[k] & = & i[k]\textrm{ <op> }o[k-1]\quad k=1\ldots N.\end{eqnarray*}
-
-\end_inset
-
- The output has the same shape as the input and each 1-d loop operates over
-
-\begin_inset Formula $N$
-\end_inset
-
- elements when the shape in the selected axis is
-\begin_inset Formula $N+1$
-\end_inset
-
-.
- Again, buffered loops take care to copy and cast the data before calling
- the underlying 1-d computational loop.
-
-\end_layout
-
-\begin_layout Subsubsection
-Reduceat
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!methods!reduceat"
-
-\end_inset
-
-The reduceat function is a generalization of both the reduce and accumulate
- functions.
- It implements a reduce over ranges of the input array specified by indices.
- The extra indices argument is checked to be sure that every input is not
- too large for the input array along the selected dimension before the loop
- calculations take place.
- The loop implementation is handled using code that is very similar to the
- reduce code repeated as many times as there are elements in the indices
- input.
- In particular: the first input pointer passed to the underlying 1-d computation
-al loop points to the input array at the correct location indicated by the
- index array.
- In addition, the output pointer and the second input pointer passed to
- the underlying 1-d loop point to the same position in memory.
- The size of the 1-d computational loop is fixed to be the difference between
- the current index and the next index (when the current index is the last
- index, then the next index is assumed to be the length of the array along
- the selected dimension).
- In this way, the 1-d loop will implement a reduce over the specified indices.
-
-\end_layout
-
-\begin_layout Standard
-Mis-aligned or a loop data-type that does not match the input and/or output
- data-type is handled using buffered code where-in data is copied to a temporary
- buffer and cast to the correct data-type if necessary prior to calling
- the underlying 1-d function.
- The temporary buffers are created in (element) sizes no bigger than the
- user settable buffer-size value.
- Thus, the loop must be flexible enough to call the underlying 1-d computational
- loop enough times to complete the total calculation in chunks no bigger
- than the buffer-size.
-
-\begin_inset LatexCommand index
-name "ufunc|)"
-
-\end_inset
-
-
-\end_layout
-
-\end_body
-\end_document
diff --git a/doc/numpybook/comparison/ctypes/code.c b/doc/numpybook/comparison/ctypes/code.c
deleted file mode 100644
index 0927a7ed3..000000000
--- a/doc/numpybook/comparison/ctypes/code.c
+++ /dev/null
@@ -1,60 +0,0 @@
-
-typedef struct {double real; double imag;} cdouble;
-typedef struct {double real; double imag;} cfloat;
-
-/* Add arrays of contiguous data */
-void zadd(cdouble *a, cdouble *b, cdouble *c, long n)
-{
- while (n--) {
- c->real = a->real + b->real;
- c->imag = a->imag + b->imag;
- a++; b++; c++;
- }
-}
-
-void cadd(cfloat *a, cfloat *b, cfloat *c, long n)
-{
- while (n--) {
- c->real = a->real + b->real;
- c->imag = a->imag + b->imag;
- a++; b++; c++;
- }
-}
-
-void dadd(double *a, double *b, double *c, long n)
-{
- while (n--) {
- *c++ = *a++ + *b++;
- }
-}
-
-void sadd(float *a, float *b, float *c, long n)
-{
- while (n--) {
- *c++ = *a++ + *b++;
- }
-}
-
-/* Assumes b is contiguous and
- a has strides that are multiples of sizeof(double)
-*/
-void dfilter2d(double *a, double *b, int *astrides, int *dims)
-{
- int i, j, M, N, S0, S1;
- int r, c, rm1, rp1, cp1, cm1;
-
- M = dims[0]; N = dims[1];
- S0 = astrides[0]/sizeof(double);
- S1=astrides[1]/sizeof(double);
- for (i=1; i<M-1; i++) {
- r = i*S0; rp1 = r+S0; rm1 = r-S0;
- for (j=1; j<N-1; j++) {
- c = j*S1; cp1 = j+S1; cm1 = j-S1;
- b[i*N+j] = a[r+c] + \
- (a[rp1+c] + a[rm1+c] + \
- a[r+cp1] + a[r+cm1])*0.5 + \
- (a[rp1+cp1] + a[rp1+cm1] + \
- a[rm1+cp1] + a[rm1+cp1])*0.25;
- }
- }
-}
diff --git a/doc/numpybook/comparison/ctypes/filter.py b/doc/numpybook/comparison/ctypes/filter.py
deleted file mode 100644
index 13d768027..000000000
--- a/doc/numpybook/comparison/ctypes/filter.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from __future__ import division, absolute_import, print_function
-
-__all__ = ['filter2d']
-
-import numpy as N
-import os
-import ctypes
-
-_path = os.path.dirname('__file__')
-lib = N.ctypeslib.load_library('code', _path)
-
-lib.dfilter2d.restype = None
-lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2,
- flags='aligned'),
- N.ctypeslib.ndpointer(float, ndim=2,
- flags='aligned, contiguous,'\
- 'writeable'),
- ctypes.POINTER(N.ctypeslib.c_intp),
- ctypes.POINTER(N.ctypeslib.c_intp)]
-
-def filter2d(a):
- a = N.require(a, float, ['ALIGNED'])
- b = N.zeros_like(a)
- lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape)
- return b
diff --git a/doc/numpybook/comparison/ctypes/interface.py b/doc/numpybook/comparison/ctypes/interface.py
deleted file mode 100644
index 1fabe3170..000000000
--- a/doc/numpybook/comparison/ctypes/interface.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from __future__ import division, absolute_import, print_function
-
-__all__ = ['add', 'filter2d']
-
-import numpy as N
-import os
-import ctypes
-
-_path = os.path.dirname('__file__')
-lib = N.ctypeslib.load_library('code', _path)
-_typedict = {'zadd' : complex,
- 'sadd' : N.single,
- 'cadd' : N.csingle,
- 'dadd' : float}
-for name in _typedict.keys():
- val = getattr(lib, name)
- val.restype = None
- _type = _typedict[name]
- val.argtypes = [N.ctypeslib.ndpointer(_type, flags='aligned, contiguous'),
- N.ctypeslib.ndpointer(_type, flags='aligned, contiguous'),
- N.ctypeslib.ndpointer(_type, flags='aligned, contiguous,'\
- 'writeable'),
- N.ctypeslib.c_intp]
-
-lib.dfilter2d.restype=None
-lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2,
- flags='aligned'),
- N.ctypeslib.ndpointer(float, ndim=2,
- flags='aligned, contiguous,'\
- 'writeable'),
- ctypes.POINTER(N.ctypeslib.c_intp),
- ctypes.POINTER(N.ctypeslib.c_intp)]
-
-def select(dtype):
- if dtype.char in ['?bBhHf']:
- return lib.sadd, N.single
- elif dtype.char in ['F']:
- return lib.cadd, N.csingle
- elif dtype.char in ['DG']:
- return lib.zadd, complex
- else:
- return lib.dadd, float
- return func, ntype
-
-def add(a, b):
- requires = ['CONTIGUOUS', 'ALIGNED']
- a = N.asanyarray(a)
- func, dtype = select(a.dtype)
- a = N.require(a, dtype, requires)
- b = N.require(b, dtype, requires)
- c = N.empty_like(a)
- func(a, b, c, a.size)
- return c
-
-def filter2d(a):
- a = N.require(a, float, ['ALIGNED'])
- b = N.zeros_like(a)
- lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape)
- return b
diff --git a/doc/numpybook/comparison/ctypes/newfile.dat b/doc/numpybook/comparison/ctypes/newfile.dat
deleted file mode 100644
index d3899c294..000000000
--- a/doc/numpybook/comparison/ctypes/newfile.dat
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/comparison/ctypes/timeme b/doc/numpybook/comparison/ctypes/timeme
deleted file mode 100755
index 2f7cd297f..000000000
--- a/doc/numpybook/comparison/ctypes/timeme
+++ /dev/null
@@ -1,2 +0,0 @@
-python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)"
-
diff --git a/doc/numpybook/comparison/f2py/add.f b/doc/numpybook/comparison/f2py/add.f
deleted file mode 100644
index 26e45da34..000000000
--- a/doc/numpybook/comparison/f2py/add.f
+++ /dev/null
@@ -1,45 +0,0 @@
-C
- SUBROUTINE ZADD(A,B,C,N)
-C
- DOUBLE COMPLEX A(*)
- DOUBLE COMPLEX B(*)
- DOUBLE COMPLEX C(*)
- INTEGER N
- DO 20 J = 1, N
- C(J) = A(J) + B(J)
- 20 CONTINUE
- END
-
- SUBROUTINE CADD(A,B,C,N)
-C
- COMPLEX A(*)
- COMPLEX B(*)
- COMPLEX C(*)
- INTEGER N
- DO 20 J = 1, N
- C(J) = A(J) + B(J)
- 20 CONTINUE
- END
-
- SUBROUTINE DADD(A,B,C,N)
-C
- DOUBLE PRECISION A(*)
- DOUBLE PRECISION B(*)
- DOUBLE PRECISION C(*)
- INTEGER N
- DO 20 J = 1, N
- C(J) = A(J) + B(J)
- 20 CONTINUE
- END
-
- SUBROUTINE SADD(A,B,C,N)
-C
- REAL A(*)
- REAL B(*)
- REAL C(*)
- INTEGER N
- DO 20 J = 1, N
- C(J) = A(J) + B(J)
- 20 CONTINUE
- END
-
diff --git a/doc/numpybook/comparison/f2py/add.pyf b/doc/numpybook/comparison/f2py/add.pyf
deleted file mode 100644
index 1a9ac2c9e..000000000
--- a/doc/numpybook/comparison/f2py/add.pyf
+++ /dev/null
@@ -1,34 +0,0 @@
-! -*- f90 -*-
-! Note: the context of this file is case sensitive.
-
-python module add ! in
- interface ! in :add
- subroutine zadd(a,b,c,n) ! in :add:add.f
- double complex dimension(n) :: a
- double complex dimension(n) :: b
- double complex intent(out), dimension(n) :: c
- integer intent(hide), depend(a) :: n = len(a)
- end subroutine zadd
- subroutine cadd(a,b,c,n) ! in :add:add.f
- complex dimension(*) :: a
- complex dimension(*) :: b
- complex dimension(*) :: c
- integer :: n
- end subroutine cadd
- subroutine dadd(a,b,c,n) ! in :add:add.f
- double precision dimension(*) :: a
- double precision dimension(*) :: b
- double precision dimension(*) :: c
- integer :: n
- end subroutine dadd
- subroutine sadd(a,b,c,n) ! in :add:add.f
- real dimension(*) :: a
- real dimension(*) :: b
- real dimension(*) :: c
- integer :: n
- end subroutine sadd
- end interface
-end python module add
-
-! This file was auto-generated with f2py (version:2_2694).
-! See http://cens.ioc.ee/projects/f2py2e/
diff --git a/doc/numpybook/comparison/f2py/filter.f b/doc/numpybook/comparison/f2py/filter.f
deleted file mode 100644
index a817a866f..000000000
--- a/doc/numpybook/comparison/f2py/filter.f
+++ /dev/null
@@ -1,20 +0,0 @@
-
- SUBROUTINE DFILTER2D(A,B,M,N)
-C
- DOUBLE PRECISION A(M,N)
- DOUBLE PRECISION B(M,N)
- INTEGER N, M
-CF2PY INTENT(OUT) :: B
-CF2PY INTENT(HIDE) :: N
-CF2PY INTENT(HIDE) :: M
- DO 20 I = 2,M-1
- DO 40 J=2,N-1
- B(I,J) = A(I,J) +
- $ (A(I-1,J)+A(I+1,J) +
- $ A(I,J-1)+A(I,J+1) )*0.5D0 +
- $ (A(I-1,J-1) + A(I-1,J+1) +
- $ A(I+1,J-1) + A(I+1,J+1))*0.25D0
- 40 CONTINUE
- 20 CONTINUE
- END
-
diff --git a/doc/numpybook/comparison/f2py/filter.pyf b/doc/numpybook/comparison/f2py/filter.pyf
deleted file mode 100644
index 1e4bc37f4..000000000
--- a/doc/numpybook/comparison/f2py/filter.pyf
+++ /dev/null
@@ -1,16 +0,0 @@
-! -*- f90 -*-
-! Note: the context of this file is case sensitive.
-
-python module filter ! in
- interface ! in :filter
- subroutine dfilter2d(a,b,m,n) ! in :filter:filter.f
- double precision dimension(m,n) :: a
- double precision dimension(m,n),intent(out),depend(m,n) :: b
- integer optional,intent(hide),check(shape(a,0)==m),depend(a) :: m=shape(a,0)
- integer optional,intent(hide),check(shape(a,1)==n),depend(a) :: n=shape(a,1)
- end subroutine dfilter2d
- end interface
-end python module filter
-
-! This file was auto-generated with f2py (version:2_3032).
-! See http://cens.ioc.ee/projects/f2py2e/
diff --git a/doc/numpybook/comparison/f2py/filtermodule.c b/doc/numpybook/comparison/f2py/filtermodule.c
deleted file mode 100644
index 3851dfe86..000000000
--- a/doc/numpybook/comparison/f2py/filtermodule.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/* File: filtermodule.c
- * This file is auto-generated with f2py (version:2_3032).
- * f2py is a Fortran to Python Interface Generator (FPIG), Second Edition,
- * written by Pearu Peterson <pearu@cens.ioc.ee>.
- * See http://cens.ioc.ee/projects/f2py2e/
- * Generation date: Thu Aug 17 12:03:28 2006
- * $Revision:$
- * $Date:$
- * Do not edit this file directly unless you know what you are doing!!!
- */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************** See f2py2e/cfuncs.py: includes ***********************/
-#include "Python.h"
-#include "fortranobject.h"
-#include <math.h>
-
-/**************** See f2py2e/rules.py: mod_rules['modulebody'] ****************/
-static PyObject *filter_error;
-static PyObject *filter_module;
-
-/*********************** See f2py2e/cfuncs.py: typedefs ***********************/
-/*need_typedefs*/
-
-/****************** See f2py2e/cfuncs.py: typedefs_generated ******************/
-/*need_typedefs_generated*/
-
-/********************** See f2py2e/cfuncs.py: cppmacros **********************/
-#if defined(PREPEND_FORTRAN)
-#if defined(NO_APPEND_FORTRAN)
-#if defined(UPPERCASE_FORTRAN)
-#define F_FUNC(f,F) _##F
-#else
-#define F_FUNC(f,F) _##f
-#endif
-#else
-#if defined(UPPERCASE_FORTRAN)
-#define F_FUNC(f,F) _##F##_
-#else
-#define F_FUNC(f,F) _##f##_
-#endif
-#endif
-#else
-#if defined(NO_APPEND_FORTRAN)
-#if defined(UPPERCASE_FORTRAN)
-#define F_FUNC(f,F) F
-#else
-#define F_FUNC(f,F) f
-#endif
-#else
-#if defined(UPPERCASE_FORTRAN)
-#define F_FUNC(f,F) F##_
-#else
-#define F_FUNC(f,F) f##_
-#endif
-#endif
-#endif
-#if defined(UNDERSCORE_G77)
-#define F_FUNC_US(f,F) F_FUNC(f##_,F##_)
-#else
-#define F_FUNC_US(f,F) F_FUNC(f,F)
-#endif
-
-#define rank(var) var ## _Rank
-#define shape(var,dim) var ## _Dims[dim]
-#define old_rank(var) (((PyArrayObject *)(capi_ ## var ## _tmp))->nd)
-#define old_shape(var,dim) (((PyArrayObject *)(capi_ ## var ## _tmp))->dimensions[dim])
-#define fshape(var,dim) shape(var,rank(var)-dim-1)
-#define len(var) shape(var,0)
-#define flen(var) fshape(var,0)
-#define size(var) PyArray_SIZE((PyArrayObject *)(capi_ ## var ## _tmp))
-/* #define index(i) capi_i ## i */
-#define slen(var) capi_ ## var ## _len
-
-#define CHECKSCALAR(check,tcheck,name,show,var)\
- if (!(check)) {\
- PyErr_SetString(filter_error,"("tcheck") failed for "name);\
- fprintf(stderr,show"\n",var);\
- /*goto capi_fail;*/\
- } else
-#ifdef DEBUGCFUNCS
-#define CFUNCSMESS(mess) fprintf(stderr,"debug-capi:"mess);
-#define CFUNCSMESSPY(mess,obj) CFUNCSMESS(mess) \
- PyObject_Print((PyObject *)obj,stderr,Py_PRINT_RAW);\
- fprintf(stderr,"\n");
-#else
-#define CFUNCSMESS(mess)
-#define CFUNCSMESSPY(mess,obj)
-#endif
-
-#ifndef MAX
-#define MAX(a,b) ((a > b) ? (a) : (b))
-#endif
-#ifndef MIN
-#define MIN(a,b) ((a < b) ? (a) : (b))
-#endif
-
-
-/************************ See f2py2e/cfuncs.py: cfuncs ************************/
-/*need_cfuncs*/
-
-/********************* See f2py2e/cfuncs.py: userincludes *********************/
-/*need_userincludes*/
-
-/********************* See f2py2e/capi_rules.py: usercode *********************/
-
-
-/* See f2py2e/rules.py */
-extern void F_FUNC(dfilter2d,DFILTER2D)(double*,double*,int*,int*);
-/*eof externroutines*/
-
-/******************** See f2py2e/capi_rules.py: usercode1 ********************/
-
-
-/******************* See f2py2e/cb_rules.py: buildcallback *******************/
-/*need_callbacks*/
-
-/*********************** See f2py2e/rules.py: buildapi ***********************/
-
-/********************************* dfilter2d *********************************/
-static char doc_f2py_rout_filter_dfilter2d[] = "\
-Function signature:\n\
- b = dfilter2d(a)\n\
-Required arguments:\n"
-" a : input rank-2 array('d') with bounds (m,n)\n"
-"Return objects:\n"
-" b : rank-2 array('d') with bounds (m,n)";
-/* extern void F_FUNC(dfilter2d,DFILTER2D)(double*,double*,int*,int*); */
-static PyObject *f2py_rout_filter_dfilter2d(const PyObject *capi_self,
- PyObject *capi_args,
- PyObject *capi_keywds,
- void (*f2py_func)(double*,double*,int*,int*)) {
- PyObject * volatile capi_buildvalue = NULL;
- volatile int f2py_success = 1;
-/*decl*/
-
- double *a = NULL;
- npy_intp a_Dims[2] = {-1, -1};
- const int a_Rank = 2;
- PyArrayObject *capi_a_tmp = NULL;
- int capi_a_intent = 0;
- PyObject *a_capi = Py_None;
- double *b = NULL;
- npy_intp b_Dims[2] = {-1, -1};
- const int b_Rank = 2;
- PyArrayObject *capi_b_tmp = NULL;
- int capi_b_intent = 0;
- int m = 0;
- int n = 0;
- static char *capi_kwlist[] = {"a",NULL};
-
-/*routdebugenter*/
-#ifdef F2PY_REPORT_ATEXIT
-f2py_start_clock();
-#endif
- if (!PyArg_ParseTupleAndKeywords(capi_args,capi_keywds,\
- "O|:filter.dfilter2d",\
- capi_kwlist,&a_capi))
- return NULL;
-/*frompyobj*/
- /* Processing variable a */
- ;
- capi_a_intent |= F2PY_INTENT_IN;
- capi_a_tmp = array_from_pyobj(NPY_DOUBLE,a_Dims,a_Rank,capi_a_intent,a_capi);
- if (capi_a_tmp == NULL) {
- if (!PyErr_Occurred())
- PyErr_SetString(filter_error,"failed in converting 1st argument `a' of filter.dfilter2d to C/Fortran array" );
- } else {
- a = (double *)(capi_a_tmp->data);
-
- /* Processing variable m */
- m = shape(a,0);
- CHECKSCALAR(shape(a,0)==m,"shape(a,0)==m","hidden m","dfilter2d:m=%d",m) {
- /* Processing variable n */
- n = shape(a,1);
- CHECKSCALAR(shape(a,1)==n,"shape(a,1)==n","hidden n","dfilter2d:n=%d",n) {
- /* Processing variable b */
- b_Dims[0]=m,b_Dims[1]=n;
- capi_b_intent |= F2PY_INTENT_OUT|F2PY_INTENT_HIDE;
- capi_b_tmp = array_from_pyobj(NPY_DOUBLE,b_Dims,b_Rank,capi_b_intent,Py_None);
- if (capi_b_tmp == NULL) {
- if (!PyErr_Occurred())
- PyErr_SetString(filter_error,"failed in converting hidden `b' of filter.dfilter2d to C/Fortran array" );
- } else {
- b = (double *)(capi_b_tmp->data);
-
-/*end of frompyobj*/
-#ifdef F2PY_REPORT_ATEXIT
-f2py_start_call_clock();
-#endif
-/*callfortranroutine*/
- (*f2py_func)(a,b,&m,&n);
-if (PyErr_Occurred())
- f2py_success = 0;
-#ifdef F2PY_REPORT_ATEXIT
-f2py_stop_call_clock();
-#endif
-/*end of callfortranroutine*/
- if (f2py_success) {
-/*pyobjfrom*/
-/*end of pyobjfrom*/
- CFUNCSMESS("Building return value.\n");
- capi_buildvalue = Py_BuildValue("N",capi_b_tmp);
-/*closepyobjfrom*/
-/*end of closepyobjfrom*/
- } /*if (f2py_success) after callfortranroutine*/
-/*cleanupfrompyobj*/
- } /*if (capi_b_tmp == NULL) ... else of b*/
- /* End of cleaning variable b */
- } /*CHECKSCALAR(shape(a,1)==n)*/
- /* End of cleaning variable n */
- } /*CHECKSCALAR(shape(a,0)==m)*/
- /* End of cleaning variable m */
- if((PyObject *)capi_a_tmp!=a_capi) {
- Py_XDECREF(capi_a_tmp); }
- } /*if (capi_a_tmp == NULL) ... else of a*/
- /* End of cleaning variable a */
-/*end of cleanupfrompyobj*/
- if (capi_buildvalue == NULL) {
-/*routdebugfailure*/
- } else {
-/*routdebugleave*/
- }
- CFUNCSMESS("Freeing memory.\n");
-/*freemem*/
-#ifdef F2PY_REPORT_ATEXIT
-f2py_stop_clock();
-#endif
- return capi_buildvalue;
-}
-/****************************** end of dfilter2d ******************************/
-/*eof body*/
-
-/******************* See f2py2e/f90mod_rules.py: buildhooks *******************/
-/*need_f90modhooks*/
-
-/************** See f2py2e/rules.py: module_rules['modulebody'] **************/
-
-/******************* See f2py2e/common_rules.py: buildhooks *******************/
-
-/*need_commonhooks*/
-
-/**************************** See f2py2e/rules.py ****************************/
-
-static FortranDataDef f2py_routine_defs[] = {
- {"dfilter2d",-1,{{-1}},0,(char *)F_FUNC(dfilter2d,DFILTER2D),(f2py_init_func)f2py_rout_filter_dfilter2d,doc_f2py_rout_filter_dfilter2d},
-
-/*eof routine_defs*/
- {NULL}
-};
-
-static PyMethodDef f2py_module_methods[] = {
-
- {NULL,NULL}
-};
-
-PyMODINIT_FUNC initfilter(void) {
- int i;
- PyObject *m,*d, *s;
- m = filter_module = Py_InitModule("filter", f2py_module_methods);
- PyFortran_Type.ob_type = &PyType_Type;
- import_array();
- if (PyErr_Occurred())
- Py_FatalError("can't initialize module filter (failed to import numpy)");
- d = PyModule_GetDict(m);
- s = PyString_FromString("$Revision: $");
- PyDict_SetItemString(d, "__version__", s);
- s = PyString_FromString("This module 'filter' is auto-generated with f2py (version:2_3032).\nFunctions:\n"
-" b = dfilter2d(a)\n"
-".");
- PyDict_SetItemString(d, "__doc__", s);
- filter_error = PyErr_NewException ("filter.error", NULL, NULL);
- Py_DECREF(s);
- for(i=0;f2py_routine_defs[i].name!=NULL;i++)
- PyDict_SetItemString(d, f2py_routine_defs[i].name,PyFortranObject_NewAsAttr(&f2py_routine_defs[i]));
-
-/*eof initf2pywraphooks*/
-/*eof initf90modhooks*/
-
-/*eof initcommonhooks*/
-
-
-#ifdef F2PY_REPORT_ATEXIT
- if (! PyErr_Occurred())
- on_exit(f2py_report_on_exit,(void*)"filter");
-#endif
-
-}
-#ifdef __cplusplus
-}
-#endif
diff --git a/doc/numpybook/comparison/f2py/timeme b/doc/numpybook/comparison/f2py/timeme
deleted file mode 100755
index d6ac5741e..000000000
--- a/doc/numpybook/comparison/f2py/timeme
+++ /dev/null
@@ -1 +0,0 @@
-python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b=N.zeros_like(a); none = filter.DFILTER2D(a,b)"
diff --git a/doc/numpybook/comparison/pyrex/add.c b/doc/numpybook/comparison/pyrex/add.c
deleted file mode 100644
index d5e3bd725..000000000
--- a/doc/numpybook/comparison/pyrex/add.c
+++ /dev/null
@@ -1,560 +0,0 @@
-/* Generated by Pyrex 0.9.4.1 on Thu Aug 17 02:11:41 2006 */
-
-#include "Python.h"
-#include "structmember.h"
-#ifndef PY_LONG_LONG
- #define PY_LONG_LONG LONG_LONG
-#endif
-#ifdef __cplusplus
-#define __PYX_EXTERN_C extern "C"
-#else
-#define __PYX_EXTERN_C extern
-#endif
-__PYX_EXTERN_C double pow(double, double);
-#include "numpy/arrayobject.h"
-
-
-typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
-typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/
-static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/
-static int __Pyx_EndUnpack(PyObject *, int); /*proto*/
-static int __Pyx_PrintItem(PyObject *); /*proto*/
-static int __Pyx_PrintNewline(void); /*proto*/
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
-static void __Pyx_ReRaise(void); /*proto*/
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
-static PyObject *__Pyx_GetExcValue(void); /*proto*/
-static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/
-static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
-static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/
-static void __Pyx_WriteUnraisable(char *name); /*proto*/
-static void __Pyx_AddTraceback(char *funcname); /*proto*/
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/
-static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
-static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/
-static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/
-static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
-
-static PyObject *__pyx_m;
-static PyObject *__pyx_b;
-static int __pyx_lineno;
-static char *__pyx_filename;
-static char **__pyx_f;
-
-/* Declarations from c_numpy */
-
-static PyTypeObject *__pyx_ptype_7c_numpy_dtype = 0;
-static PyTypeObject *__pyx_ptype_7c_numpy_ndarray = 0;
-
-/* Declarations from add */
-
-
-/* Implementation of add */
-
-static PyObject *__pyx_n_c_numpy;
-static PyObject *__pyx_n_zadd;
-static PyObject *__pyx_n_cadd;
-static PyObject *__pyx_n_dadd;
-static PyObject *__pyx_n_sadd;
-
-static PyObject *__pyx_f_3add_zadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_3add_zadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
- PyObject *__pyx_v_ao = 0;
- PyObject *__pyx_v_bo = 0;
- PyArrayObject *__pyx_v_c;
- PyArrayObject *__pyx_v_a;
- PyArrayObject *__pyx_v_b;
- npy_intp __pyx_v_i;
- PyObject *__pyx_r;
- PyObject *__pyx_1 = 0;
- npy_intp __pyx_2;
- static char *__pyx_argnames[] = {"ao","bo",0};
- if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0;
- Py_INCREF(__pyx_v_ao);
- Py_INCREF(__pyx_v_bo);
- __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":15 */
- __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_CDOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_a));
- __pyx_v_a = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":16 */
- __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_CDOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_b));
- __pyx_v_b = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":18 */
- __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_c));
- __pyx_v_c = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":21 */
- __pyx_2 = (__pyx_v_a->dimensions[0]);
- for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":22 */
- (((npy_cdouble (*))__pyx_v_c->data)[__pyx_v_i]).real = ((((npy_cdouble (*))__pyx_v_a->data)[__pyx_v_i]).real + (((npy_cdouble (*))__pyx_v_b->data)[__pyx_v_i]).real);
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":24 */
- (((npy_cdouble (*))__pyx_v_c->data)[__pyx_v_i]).imag = ((((npy_cdouble (*))__pyx_v_a->data)[__pyx_v_i]).imag + (((npy_cdouble (*))__pyx_v_b->data)[__pyx_v_i]).imag);
- __pyx_L2:;
- }
- __pyx_L3:;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":26 */
- Py_INCREF(((PyObject *)__pyx_v_c));
- __pyx_r = ((PyObject *)__pyx_v_c);
- goto __pyx_L0;
-
- __pyx_r = Py_None; Py_INCREF(Py_None);
- goto __pyx_L0;
- __pyx_L1:;
- Py_XDECREF(__pyx_1);
- __Pyx_AddTraceback("add.zadd");
- __pyx_r = 0;
- __pyx_L0:;
- Py_DECREF(__pyx_v_c);
- Py_DECREF(__pyx_v_a);
- Py_DECREF(__pyx_v_b);
- Py_DECREF(__pyx_v_ao);
- Py_DECREF(__pyx_v_bo);
- return __pyx_r;
-}
-
-static PyObject *__pyx_f_3add_cadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_3add_cadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
- PyObject *__pyx_v_ao = 0;
- PyObject *__pyx_v_bo = 0;
- PyArrayObject *__pyx_v_c;
- PyArrayObject *__pyx_v_a;
- PyArrayObject *__pyx_v_b;
- npy_intp __pyx_v_i;
- PyObject *__pyx_r;
- PyObject *__pyx_1 = 0;
- npy_intp __pyx_2;
- static char *__pyx_argnames[] = {"ao","bo",0};
- if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0;
- Py_INCREF(__pyx_v_ao);
- Py_INCREF(__pyx_v_bo);
- __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":32 */
- __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_CFLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_a));
- __pyx_v_a = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":33 */
- __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_CFLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_b));
- __pyx_v_b = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":35 */
- __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_c));
- __pyx_v_c = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":38 */
- __pyx_2 = (__pyx_v_a->dimensions[0]);
- for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":39 */
- (((npy_cfloat (*))__pyx_v_c->data)[__pyx_v_i]).real = ((((npy_cfloat (*))__pyx_v_a->data)[__pyx_v_i]).real + (((npy_cfloat (*))__pyx_v_b->data)[__pyx_v_i]).real);
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":41 */
- (((npy_cfloat (*))__pyx_v_c->data)[__pyx_v_i]).imag = ((((npy_cfloat (*))__pyx_v_a->data)[__pyx_v_i]).imag + (((npy_cfloat (*))__pyx_v_b->data)[__pyx_v_i]).imag);
- __pyx_L2:;
- }
- __pyx_L3:;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":43 */
- Py_INCREF(((PyObject *)__pyx_v_c));
- __pyx_r = ((PyObject *)__pyx_v_c);
- goto __pyx_L0;
-
- __pyx_r = Py_None; Py_INCREF(Py_None);
- goto __pyx_L0;
- __pyx_L1:;
- Py_XDECREF(__pyx_1);
- __Pyx_AddTraceback("add.cadd");
- __pyx_r = 0;
- __pyx_L0:;
- Py_DECREF(__pyx_v_c);
- Py_DECREF(__pyx_v_a);
- Py_DECREF(__pyx_v_b);
- Py_DECREF(__pyx_v_ao);
- Py_DECREF(__pyx_v_bo);
- return __pyx_r;
-}
-
-static PyObject *__pyx_f_3add_dadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_3add_dadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
- PyObject *__pyx_v_ao = 0;
- PyObject *__pyx_v_bo = 0;
- PyArrayObject *__pyx_v_c;
- PyArrayObject *__pyx_v_a;
- PyArrayObject *__pyx_v_b;
- npy_intp __pyx_v_i;
- PyObject *__pyx_r;
- PyObject *__pyx_1 = 0;
- npy_intp __pyx_2;
- static char *__pyx_argnames[] = {"ao","bo",0};
- if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0;
- Py_INCREF(__pyx_v_ao);
- Py_INCREF(__pyx_v_bo);
- __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":50 */
- __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_a));
- __pyx_v_a = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":51 */
- __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_b));
- __pyx_v_b = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":53 */
- __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_c));
- __pyx_v_c = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":56 */
- __pyx_2 = (__pyx_v_a->dimensions[0]);
- for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":57 */
- (((double (*))__pyx_v_c->data)[__pyx_v_i]) = ((((double (*))__pyx_v_a->data)[__pyx_v_i]) + (((double (*))__pyx_v_b->data)[__pyx_v_i]));
- __pyx_L2:;
- }
- __pyx_L3:;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":59 */
- Py_INCREF(((PyObject *)__pyx_v_c));
- __pyx_r = ((PyObject *)__pyx_v_c);
- goto __pyx_L0;
-
- __pyx_r = Py_None; Py_INCREF(Py_None);
- goto __pyx_L0;
- __pyx_L1:;
- Py_XDECREF(__pyx_1);
- __Pyx_AddTraceback("add.dadd");
- __pyx_r = 0;
- __pyx_L0:;
- Py_DECREF(__pyx_v_c);
- Py_DECREF(__pyx_v_a);
- Py_DECREF(__pyx_v_b);
- Py_DECREF(__pyx_v_ao);
- Py_DECREF(__pyx_v_bo);
- return __pyx_r;
-}
-
-static PyObject *__pyx_f_3add_sadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_3add_sadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
- PyObject *__pyx_v_ao = 0;
- PyObject *__pyx_v_bo = 0;
- PyArrayObject *__pyx_v_c;
- PyArrayObject *__pyx_v_a;
- PyArrayObject *__pyx_v_b;
- npy_intp __pyx_v_i;
- PyObject *__pyx_r;
- PyObject *__pyx_1 = 0;
- npy_intp __pyx_2;
- static char *__pyx_argnames[] = {"ao","bo",0};
- if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0;
- Py_INCREF(__pyx_v_ao);
- Py_INCREF(__pyx_v_bo);
- __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":66 */
- __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_FLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_a));
- __pyx_v_a = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":67 */
- __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_FLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_b));
- __pyx_v_b = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":69 */
- __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_c));
- __pyx_v_c = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":72 */
- __pyx_2 = (__pyx_v_a->dimensions[0]);
- for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":73 */
- (((float (*))__pyx_v_c->data)[__pyx_v_i]) = ((((float (*))__pyx_v_a->data)[__pyx_v_i]) + (((float (*))__pyx_v_b->data)[__pyx_v_i]));
- __pyx_L2:;
- }
- __pyx_L3:;
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":75 */
- Py_INCREF(((PyObject *)__pyx_v_c));
- __pyx_r = ((PyObject *)__pyx_v_c);
- goto __pyx_L0;
-
- __pyx_r = Py_None; Py_INCREF(Py_None);
- goto __pyx_L0;
- __pyx_L1:;
- Py_XDECREF(__pyx_1);
- __Pyx_AddTraceback("add.sadd");
- __pyx_r = 0;
- __pyx_L0:;
- Py_DECREF(__pyx_v_c);
- Py_DECREF(__pyx_v_a);
- Py_DECREF(__pyx_v_b);
- Py_DECREF(__pyx_v_ao);
- Py_DECREF(__pyx_v_bo);
- return __pyx_r;
-}
-
-static __Pyx_InternTabEntry __pyx_intern_tab[] = {
- {&__pyx_n_c_numpy, "c_numpy"},
- {&__pyx_n_cadd, "cadd"},
- {&__pyx_n_dadd, "dadd"},
- {&__pyx_n_sadd, "sadd"},
- {&__pyx_n_zadd, "zadd"},
- {0, 0}
-};
-
-static struct PyMethodDef __pyx_methods[] = {
- {"zadd", (PyCFunction)__pyx_f_3add_zadd, METH_VARARGS|METH_KEYWORDS, 0},
- {"cadd", (PyCFunction)__pyx_f_3add_cadd, METH_VARARGS|METH_KEYWORDS, 0},
- {"dadd", (PyCFunction)__pyx_f_3add_dadd, METH_VARARGS|METH_KEYWORDS, 0},
- {"sadd", (PyCFunction)__pyx_f_3add_sadd, METH_VARARGS|METH_KEYWORDS, 0},
- {0, 0, 0, 0}
-};
-
-static void __pyx_init_filenames(void); /*proto*/
-
-PyMODINIT_FUNC initadd(void); /*proto*/
-PyMODINIT_FUNC initadd(void) {
- __pyx_init_filenames();
- __pyx_m = Py_InitModule4("add", __pyx_methods, 0, 0, PYTHON_API_VERSION);
- if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
- __pyx_b = PyImport_AddModule("__builtin__");
- if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
- if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
- if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
- __pyx_ptype_7c_numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (!__pyx_ptype_7c_numpy_dtype) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 74; goto __pyx_L1;}
- __pyx_ptype_7c_numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (!__pyx_ptype_7c_numpy_ndarray) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 79; goto __pyx_L1;}
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":9 */
- import_array();
-
- /* "/Users/oliphant/numpybook/pyrex/add.pyx":62 */
- return;
- __pyx_L1:;
- __Pyx_AddTraceback("add");
-}
-
-static char *__pyx_filenames[] = {
- "add.pyx",
- "c_numpy.pxd",
-};
-
-/* Runtime support code */
-
-static void __pyx_init_filenames(void) {
- __pyx_f = __pyx_filenames;
-}
-
-static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
- if (!type) {
- PyErr_Format(PyExc_SystemError, "Missing type object");
- return 0;
- }
- if (obj == Py_None || PyObject_TypeCheck(obj, type))
- return 1;
- PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s",
- obj->ob_type->tp_name, type->tp_name);
- return 0;
-}
-
-static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) {
- while (t->p) {
- *t->p = PyString_InternFromString(t->s);
- if (!*t->p)
- return -1;
- ++t;
- }
- return 0;
-}
-
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name,
- long size)
-{
- PyObject *py_module_name = 0;
- PyObject *py_class_name = 0;
- PyObject *py_name_list = 0;
- PyObject *py_module = 0;
- PyObject *result = 0;
-
- py_module_name = PyString_FromString(module_name);
- if (!py_module_name)
- goto bad;
- py_class_name = PyString_FromString(class_name);
- if (!py_class_name)
- goto bad;
- py_name_list = PyList_New(1);
- if (!py_name_list)
- goto bad;
- Py_INCREF(py_class_name);
- if (PyList_SetItem(py_name_list, 0, py_class_name) < 0)
- goto bad;
- py_module = __Pyx_Import(py_module_name, py_name_list);
- if (!py_module)
- goto bad;
- result = PyObject_GetAttr(py_module, py_class_name);
- if (!result)
- goto bad;
- if (!PyType_Check(result)) {
- PyErr_Format(PyExc_TypeError,
- "%s.%s is not a type object",
- module_name, class_name);
- goto bad;
- }
- if (((PyTypeObject *)result)->tp_basicsize != size) {
- PyErr_Format(PyExc_ValueError,
- "%s.%s does not appear to be the correct type object",
- module_name, class_name);
- goto bad;
- }
- goto done;
-bad:
- Py_XDECREF(result);
- result = 0;
-done:
- Py_XDECREF(py_module_name);
- Py_XDECREF(py_class_name);
- Py_XDECREF(py_name_list);
- return (PyTypeObject *)result;
-}
-
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
- PyObject *__import__ = 0;
- PyObject *empty_list = 0;
- PyObject *module = 0;
- PyObject *global_dict = 0;
- PyObject *empty_dict = 0;
- PyObject *list;
- __import__ = PyObject_GetAttrString(__pyx_b, "__import__");
- if (!__import__)
- goto bad;
- if (from_list)
- list = from_list;
- else {
- empty_list = PyList_New(0);
- if (!empty_list)
- goto bad;
- list = empty_list;
- }
- global_dict = PyModule_GetDict(__pyx_m);
- if (!global_dict)
- goto bad;
- empty_dict = PyDict_New();
- if (!empty_dict)
- goto bad;
- module = PyObject_CallFunction(__import__, "OOOO",
- name, global_dict, empty_dict, list);
-bad:
- Py_XDECREF(empty_list);
- Py_XDECREF(__import__);
- Py_XDECREF(empty_dict);
- return module;
-}
-
-#include "compile.h"
-#include "frameobject.h"
-#include "traceback.h"
-
-static void __Pyx_AddTraceback(char *funcname) {
- PyObject *py_srcfile = 0;
- PyObject *py_funcname = 0;
- PyObject *py_globals = 0;
- PyObject *empty_tuple = 0;
- PyObject *empty_string = 0;
- PyCodeObject *py_code = 0;
- PyFrameObject *py_frame = 0;
-
- py_srcfile = PyString_FromString(__pyx_filename);
- if (!py_srcfile) goto bad;
- py_funcname = PyString_FromString(funcname);
- if (!py_funcname) goto bad;
- py_globals = PyModule_GetDict(__pyx_m);
- if (!py_globals) goto bad;
- empty_tuple = PyTuple_New(0);
- if (!empty_tuple) goto bad;
- empty_string = PyString_FromString("");
- if (!empty_string) goto bad;
- py_code = PyCode_New(
- 0, /*int argcount,*/
- 0, /*int nlocals,*/
- 0, /*int stacksize,*/
- 0, /*int flags,*/
- empty_string, /*PyObject *code,*/
- empty_tuple, /*PyObject *consts,*/
- empty_tuple, /*PyObject *names,*/
- empty_tuple, /*PyObject *varnames,*/
- empty_tuple, /*PyObject *freevars,*/
- empty_tuple, /*PyObject *cellvars,*/
- py_srcfile, /*PyObject *filename,*/
- py_funcname, /*PyObject *name,*/
- __pyx_lineno, /*int firstlineno,*/
- empty_string /*PyObject *lnotab*/
- );
- if (!py_code) goto bad;
- py_frame = PyFrame_New(
- PyThreadState_Get(), /*PyThreadState *tstate,*/
- py_code, /*PyCodeObject *code,*/
- py_globals, /*PyObject *globals,*/
- 0 /*PyObject *locals*/
- );
- if (!py_frame) goto bad;
- py_frame->f_lineno = __pyx_lineno;
- PyTraceBack_Here(py_frame);
-bad:
- Py_XDECREF(py_srcfile);
- Py_XDECREF(py_funcname);
- Py_XDECREF(empty_tuple);
- Py_XDECREF(empty_string);
- Py_XDECREF(py_code);
- Py_XDECREF(py_frame);
-}
diff --git a/doc/numpybook/comparison/pyrex/add.pyx b/doc/numpybook/comparison/pyrex/add.pyx
deleted file mode 100644
index 63c231641..000000000
--- a/doc/numpybook/comparison/pyrex/add.pyx
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- Mode: Python -*- Not really, but close enough
-
-cimport c_numpy
-from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble, \
- npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \
- NPY_CFLOAT
-
-#We need to initialize NumPy
-import_array()
-
-def zadd(object ao, object bo):
- cdef ndarray c, a, b
- cdef npy_intp i
-
- a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_CDOUBLE, 1, 1)
- b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_CDOUBLE, 1, 1)
-
- c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
- a.descr.type_num)
-
- for i from 0 <= i < a.dimensions[0]:
- (<npy_cdouble *>c.data)[i].real = (<npy_cdouble *>a.data)[i].real + \
- (<npy_cdouble *>b.data)[i].real
- (<npy_cdouble *>c.data)[i].imag = (<npy_cdouble *>a.data)[i].imag + \
- (<npy_cdouble *>b.data)[i].imag
- return c
-
-def cadd(object ao, object bo):
- cdef ndarray c, a, b
- cdef npy_intp i
-
- a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_CFLOAT, 1, 1)
- b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_CFLOAT, 1, 1)
-
- c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
- a.descr.type_num)
-
- for i from 0 <= i < a.dimensions[0]:
- (<npy_cfloat *>c.data)[i].real = (<npy_cfloat *>a.data)[i].real + \
- (<npy_cfloat *>b.data)[i].real
- (<npy_cfloat *>c.data)[i].imag = (<npy_cfloat *>a.data)[i].imag + \
- (<npy_cfloat *>b.data)[i].imag
- return c
-
-
-def dadd(object ao, object bo):
- cdef ndarray c, a, b
- cdef npy_intp i
-
- a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_DOUBLE, 1, 1)
- b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_DOUBLE, 1, 1)
-
- c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
- a.descr.type_num)
-
- for i from 0 <= i < a.dimensions[0]:
- (<double *>c.data)[i] = (<double *>a.data)[i] + \
- (<double *>b.data)[i]
- return c
-
-
-def sadd(object ao, object bo):
- cdef ndarray c, a, b
- cdef npy_intp i
-
- a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_FLOAT, 1, 1)
- b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_FLOAT, 1, 1)
-
- c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
- a.descr.type_num)
-
- for i from 0 <= i < a.dimensions[0]:
- (<float *>c.data)[i] = (<float *>a.data)[i] + \
- (<float *>b.data)[i]
- return c
diff --git a/doc/numpybook/comparison/pyrex/c_numpy.pxd b/doc/numpybook/comparison/pyrex/c_numpy.pxd
deleted file mode 100644
index 66e77e294..000000000
--- a/doc/numpybook/comparison/pyrex/c_numpy.pxd
+++ /dev/null
@@ -1,107 +0,0 @@
-# :Author: Robert Kern
-# :Copyright: 2004, Enthought, Inc.
-# :License: BSD Style
-
-
-cdef extern from "numpy/arrayobject.h":
-
- cdef enum NPY_TYPES:
- NPY_BOOL
- NPY_BYTE
- NPY_UBYTE
- NPY_SHORT
- NPY_USHORT
- NPY_INT
- NPY_UINT
- NPY_LONG
- NPY_ULONG
- NPY_LONGLONG
- NPY_ULONGLONG
- NPY_FLOAT
- NPY_DOUBLE
- NPY_LONGDOUBLE
- NPY_CFLOAT
- NPY_CDOUBLE
- NPY_CLONGDOUBLE
- NPY_OBJECT
- NPY_STRING
- NPY_UNICODE
- NPY_VOID
- NPY_NTYPES
- NPY_NOTYPE
-
- cdef enum requirements:
- NPY_CONTIGUOUS
- NPY_FORTRAN
- NPY_OWNDATA
- NPY_FORCECAST
- NPY_ENSURECOPY
- NPY_ENSUREARRAY
- NPY_ELEMENTSTRIDES
- NPY_ALIGNED
- NPY_NOTSWAPPED
- NPY_WRITEABLE
- NPY_UPDATEIFCOPY
- NPY_ARR_HAS_DESCR
-
- NPY_BEHAVED
- NPY_BEHAVED_NS
- NPY_CARRAY
- NPY_CARRAY_RO
- NPY_FARRAY
- NPY_FARRAY_RO
- NPY_DEFAULT
-
- NPY_IN_ARRAY
- NPY_OUT_ARRAY
- NPY_INOUT_ARRAY
- NPY_IN_FARRAY
- NPY_OUT_FARRAY
- NPY_INOUT_FARRAY
-
- NPY_UPDATE_ALL
-
- ctypedef struct npy_cdouble:
- double real
- double imag
-
- ctypedef struct npy_cfloat:
- double real
- double imag
-
- ctypedef int npy_intp
-
- ctypedef extern class numpy.dtype [object PyArray_Descr]:
- cdef int type_num, elsize, alignment
- cdef char type, kind, byteorder
- cdef int flags
- cdef object fields, typeobj
-
- ctypedef extern class numpy.ndarray [object PyArrayObject]:
- cdef char *data
- cdef int nd
- cdef npy_intp *dimensions
- cdef npy_intp *strides
- cdef object base
- cdef dtype descr
- cdef int flags
-
- object PyArray_ZEROS(int ndims, npy_intp* dims, NPY_TYPES type_num, int fortran)
- object PyArray_EMPTY(int ndims, npy_intp* dims, NPY_TYPES type_num, int fortran)
- dtype PyArray_DescrFromTypeNum(NPY_TYPES type_num)
- object PyArray_SimpleNew(int ndims, npy_intp* dims, NPY_TYPES type_num)
- int PyArray_Check(object obj)
- object PyArray_ContiguousFromAny(object obj, NPY_TYPES type,
- int mindim, int maxdim)
- npy_intp PyArray_SIZE(ndarray arr)
- npy_intp PyArray_NBYTES(ndarray arr)
- void *PyArray_DATA(ndarray arr)
- object PyArray_FromAny(object obj, dtype newtype, int mindim, int maxdim,
- int requirements, object context)
- object PyArray_FROMANY(object obj, NPY_TYPES type_num, int min,
- int max, int requirements)
- object PyArray_NewFromDescr(object subtype, dtype newtype, int nd,
- npy_intp* dims, npy_intp* strides, void* data,
- int flags, object parent)
-
- void import_array()
diff --git a/doc/numpybook/comparison/pyrex/filter.c b/doc/numpybook/comparison/pyrex/filter.c
deleted file mode 100644
index 1c25eb677..000000000
--- a/doc/numpybook/comparison/pyrex/filter.c
+++ /dev/null
@@ -1,388 +0,0 @@
-/* Generated by Pyrex 0.9.4.1 on Thu Aug 17 02:11:42 2006 */
-
-#include "Python.h"
-#include "structmember.h"
-#ifndef PY_LONG_LONG
- #define PY_LONG_LONG LONG_LONG
-#endif
-#ifdef __cplusplus
-#define __PYX_EXTERN_C extern "C"
-#else
-#define __PYX_EXTERN_C extern
-#endif
-__PYX_EXTERN_C double pow(double, double);
-#include "numpy/arrayobject.h"
-
-
-typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
-typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/
-static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/
-static int __Pyx_EndUnpack(PyObject *, int); /*proto*/
-static int __Pyx_PrintItem(PyObject *); /*proto*/
-static int __Pyx_PrintNewline(void); /*proto*/
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
-static void __Pyx_ReRaise(void); /*proto*/
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
-static PyObject *__Pyx_GetExcValue(void); /*proto*/
-static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/
-static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
-static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/
-static void __Pyx_WriteUnraisable(char *name); /*proto*/
-static void __Pyx_AddTraceback(char *funcname); /*proto*/
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/
-static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
-static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/
-static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/
-static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
-
-static PyObject *__pyx_m;
-static PyObject *__pyx_b;
-static int __pyx_lineno;
-static char *__pyx_filename;
-static char **__pyx_f;
-
-/* Declarations from c_numpy */
-
-static PyTypeObject *__pyx_ptype_7c_numpy_dtype = 0;
-static PyTypeObject *__pyx_ptype_7c_numpy_ndarray = 0;
-
-/* Declarations from filter */
-
-
-/* Implementation of filter */
-
-static PyObject *__pyx_n_c_numpy;
-static PyObject *__pyx_n_filter;
-
-static PyObject *__pyx_f_6filter_filter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_6filter_filter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
- PyObject *__pyx_v_ao = 0;
- PyArrayObject *__pyx_v_a;
- PyArrayObject *__pyx_v_b;
- npy_intp __pyx_v_i;
- npy_intp __pyx_v_j;
- npy_intp __pyx_v_M;
- npy_intp __pyx_v_N;
- npy_intp __pyx_v_S0;
- npy_intp __pyx_v_S1;
- npy_intp __pyx_v_r;
- npy_intp __pyx_v_rm1;
- npy_intp __pyx_v_rp1;
- npy_intp __pyx_v_c;
- npy_intp __pyx_v_cm1;
- npy_intp __pyx_v_cp1;
- PyObject *__pyx_v_oS;
- PyObject *__pyx_r;
- PyObject *__pyx_1 = 0;
- long __pyx_2;
- long __pyx_3;
- PyObject *__pyx_4 = 0;
- int __pyx_5;
- static char *__pyx_argnames[] = {"ao",0};
- if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_ao)) return 0;
- Py_INCREF(__pyx_v_ao);
- __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
- __pyx_v_oS = Py_None; Py_INCREF(Py_None);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":18 */
- __pyx_1 = PyArray_FROMANY(__pyx_v_ao,NPY_DOUBLE,2,2,NPY_ALIGNED); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_a));
- __pyx_v_a = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":19 */
- __pyx_1 = PyArray_ZEROS(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num,0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;}
- if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;}
- Py_DECREF(((PyObject *)__pyx_v_b));
- __pyx_v_b = ((PyArrayObject *)__pyx_1);
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":20 */
- __pyx_v_M = (__pyx_v_a->dimensions[0]);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":21 */
- __pyx_v_N = (__pyx_v_a->dimensions[1]);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":22 */
- __pyx_v_S0 = (__pyx_v_a->strides[0]);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":23 */
- __pyx_v_S1 = (__pyx_v_a->strides[1]);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":24 */
- __pyx_2 = (__pyx_v_M - 1);
- for (__pyx_v_i = 1; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":25 */
- __pyx_v_r = (__pyx_v_i * __pyx_v_S0);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":26 */
- __pyx_v_rm1 = (__pyx_v_r - __pyx_v_S0);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":27 */
- __pyx_v_rp1 = (__pyx_v_r + __pyx_v_S0);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":28 */
- __pyx_1 = PyInt_FromLong((__pyx_v_i * __pyx_v_N)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; goto __pyx_L1;}
- Py_DECREF(__pyx_v_oS);
- __pyx_v_oS = __pyx_1;
- __pyx_1 = 0;
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":29 */
- __pyx_3 = (__pyx_v_N - 1);
- for (__pyx_v_j = 1; __pyx_v_j < __pyx_3; ++__pyx_v_j) {
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":30 */
- __pyx_v_c = (__pyx_v_j * __pyx_v_S1);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":31 */
- __pyx_v_cm1 = (__pyx_v_c - __pyx_v_S1);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":32 */
- __pyx_v_cp1 = (__pyx_v_c + __pyx_v_S1);
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":38 */
- __pyx_1 = PyInt_FromLong(__pyx_v_j); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
- __pyx_4 = PyNumber_Add(__pyx_v_oS, __pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
- Py_DECREF(__pyx_1); __pyx_1 = 0;
- __pyx_5 = PyInt_AsLong(__pyx_4); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
- Py_DECREF(__pyx_4); __pyx_4 = 0;
- (((double (*))__pyx_v_b->data)[__pyx_5]) = (((((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_c))[0]) + (((((((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_c))[0]) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_c))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_cm1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_cp1))[0])) * 0.5)) + (((((((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_cm1))[0]) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_cm1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_cp1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_cp1))[0])) * 0.25));
- __pyx_L4:;
- }
- __pyx_L5:;
- __pyx_L2:;
- }
- __pyx_L3:;
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":43 */
- Py_INCREF(((PyObject *)__pyx_v_b));
- __pyx_r = ((PyObject *)__pyx_v_b);
- goto __pyx_L0;
-
- __pyx_r = Py_None; Py_INCREF(Py_None);
- goto __pyx_L0;
- __pyx_L1:;
- Py_XDECREF(__pyx_1);
- Py_XDECREF(__pyx_4);
- __Pyx_AddTraceback("filter.filter");
- __pyx_r = 0;
- __pyx_L0:;
- Py_DECREF(__pyx_v_a);
- Py_DECREF(__pyx_v_b);
- Py_DECREF(__pyx_v_oS);
- Py_DECREF(__pyx_v_ao);
- return __pyx_r;
-}
-
-static __Pyx_InternTabEntry __pyx_intern_tab[] = {
- {&__pyx_n_c_numpy, "c_numpy"},
- {&__pyx_n_filter, "filter"},
- {0, 0}
-};
-
-static struct PyMethodDef __pyx_methods[] = {
- {"filter", (PyCFunction)__pyx_f_6filter_filter, METH_VARARGS|METH_KEYWORDS, 0},
- {0, 0, 0, 0}
-};
-
-static void __pyx_init_filenames(void); /*proto*/
-
-PyMODINIT_FUNC initfilter(void); /*proto*/
-PyMODINIT_FUNC initfilter(void) {
- __pyx_init_filenames();
- __pyx_m = Py_InitModule4("filter", __pyx_methods, 0, 0, PYTHON_API_VERSION);
- if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
- __pyx_b = PyImport_AddModule("__builtin__");
- if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
- if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
- if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
- __pyx_ptype_7c_numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (!__pyx_ptype_7c_numpy_dtype) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 74; goto __pyx_L1;}
- __pyx_ptype_7c_numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (!__pyx_ptype_7c_numpy_ndarray) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 79; goto __pyx_L1;}
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":9 */
- import_array();
-
- /* "/Users/oliphant/numpybook/pyrex/filter.pyx":11 */
- return;
- __pyx_L1:;
- __Pyx_AddTraceback("filter");
-}
-
-static char *__pyx_filenames[] = {
- "filter.pyx",
- "c_numpy.pxd",
-};
-
-/* Runtime support code */
-
-static void __pyx_init_filenames(void) {
- __pyx_f = __pyx_filenames;
-}
-
-static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
- if (!type) {
- PyErr_Format(PyExc_SystemError, "Missing type object");
- return 0;
- }
- if (obj == Py_None || PyObject_TypeCheck(obj, type))
- return 1;
- PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s",
- obj->ob_type->tp_name, type->tp_name);
- return 0;
-}
-
-static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) {
- while (t->p) {
- *t->p = PyString_InternFromString(t->s);
- if (!*t->p)
- return -1;
- ++t;
- }
- return 0;
-}
-
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name,
- long size)
-{
- PyObject *py_module_name = 0;
- PyObject *py_class_name = 0;
- PyObject *py_name_list = 0;
- PyObject *py_module = 0;
- PyObject *result = 0;
-
- py_module_name = PyString_FromString(module_name);
- if (!py_module_name)
- goto bad;
- py_class_name = PyString_FromString(class_name);
- if (!py_class_name)
- goto bad;
- py_name_list = PyList_New(1);
- if (!py_name_list)
- goto bad;
- Py_INCREF(py_class_name);
- if (PyList_SetItem(py_name_list, 0, py_class_name) < 0)
- goto bad;
- py_module = __Pyx_Import(py_module_name, py_name_list);
- if (!py_module)
- goto bad;
- result = PyObject_GetAttr(py_module, py_class_name);
- if (!result)
- goto bad;
- if (!PyType_Check(result)) {
- PyErr_Format(PyExc_TypeError,
- "%s.%s is not a type object",
- module_name, class_name);
- goto bad;
- }
- if (((PyTypeObject *)result)->tp_basicsize != size) {
- PyErr_Format(PyExc_ValueError,
- "%s.%s does not appear to be the correct type object",
- module_name, class_name);
- goto bad;
- }
- goto done;
-bad:
- Py_XDECREF(result);
- result = 0;
-done:
- Py_XDECREF(py_module_name);
- Py_XDECREF(py_class_name);
- Py_XDECREF(py_name_list);
- return (PyTypeObject *)result;
-}
-
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
- PyObject *__import__ = 0;
- PyObject *empty_list = 0;
- PyObject *module = 0;
- PyObject *global_dict = 0;
- PyObject *empty_dict = 0;
- PyObject *list;
- __import__ = PyObject_GetAttrString(__pyx_b, "__import__");
- if (!__import__)
- goto bad;
- if (from_list)
- list = from_list;
- else {
- empty_list = PyList_New(0);
- if (!empty_list)
- goto bad;
- list = empty_list;
- }
- global_dict = PyModule_GetDict(__pyx_m);
- if (!global_dict)
- goto bad;
- empty_dict = PyDict_New();
- if (!empty_dict)
- goto bad;
- module = PyObject_CallFunction(__import__, "OOOO",
- name, global_dict, empty_dict, list);
-bad:
- Py_XDECREF(empty_list);
- Py_XDECREF(__import__);
- Py_XDECREF(empty_dict);
- return module;
-}
-
-#include "compile.h"
-#include "frameobject.h"
-#include "traceback.h"
-
-static void __Pyx_AddTraceback(char *funcname) {
- PyObject *py_srcfile = 0;
- PyObject *py_funcname = 0;
- PyObject *py_globals = 0;
- PyObject *empty_tuple = 0;
- PyObject *empty_string = 0;
- PyCodeObject *py_code = 0;
- PyFrameObject *py_frame = 0;
-
- py_srcfile = PyString_FromString(__pyx_filename);
- if (!py_srcfile) goto bad;
- py_funcname = PyString_FromString(funcname);
- if (!py_funcname) goto bad;
- py_globals = PyModule_GetDict(__pyx_m);
- if (!py_globals) goto bad;
- empty_tuple = PyTuple_New(0);
- if (!empty_tuple) goto bad;
- empty_string = PyString_FromString("");
- if (!empty_string) goto bad;
- py_code = PyCode_New(
- 0, /*int argcount,*/
- 0, /*int nlocals,*/
- 0, /*int stacksize,*/
- 0, /*int flags,*/
- empty_string, /*PyObject *code,*/
- empty_tuple, /*PyObject *consts,*/
- empty_tuple, /*PyObject *names,*/
- empty_tuple, /*PyObject *varnames,*/
- empty_tuple, /*PyObject *freevars,*/
- empty_tuple, /*PyObject *cellvars,*/
- py_srcfile, /*PyObject *filename,*/
- py_funcname, /*PyObject *name,*/
- __pyx_lineno, /*int firstlineno,*/
- empty_string /*PyObject *lnotab*/
- );
- if (!py_code) goto bad;
- py_frame = PyFrame_New(
- PyThreadState_Get(), /*PyThreadState *tstate,*/
- py_code, /*PyCodeObject *code,*/
- py_globals, /*PyObject *globals,*/
- 0 /*PyObject *locals*/
- );
- if (!py_frame) goto bad;
- py_frame->f_lineno = __pyx_lineno;
- PyTraceBack_Here(py_frame);
-bad:
- Py_XDECREF(py_srcfile);
- Py_XDECREF(py_funcname);
- Py_XDECREF(empty_tuple);
- Py_XDECREF(empty_string);
- Py_XDECREF(py_code);
- Py_XDECREF(py_frame);
-}
diff --git a/doc/numpybook/comparison/pyrex/filter.pyx b/doc/numpybook/comparison/pyrex/filter.pyx
deleted file mode 100644
index 492bc43de..000000000
--- a/doc/numpybook/comparison/pyrex/filter.pyx
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- Mode: Python -*- Not really, but close enough
-
-cimport c_numpy
-from c_numpy cimport import_array, ndarray, npy_intp,\
- NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \
- NPY_CFLOAT, NPY_ALIGNED
-
-#We need to initialize NumPy
-import_array()
-
-def filter(object ao):
- cdef ndarray a, b
- cdef npy_intp i, j, M, N, S0, S1
- cdef npy_intp r,rm1,rp1,c,cm1,cp1
-
- # Require an ALIGNED array (but not necessarily contiguous)
- # We will use strides to access the elements.
- a = c_numpy.PyArray_FROMANY(ao, NPY_DOUBLE, 2, 2, NPY_ALIGNED)
- b = c_numpy.PyArray_ZEROS(a.nd, a.dimensions, a.descr.type_num, 0)
- M = a.dimensions[0]
- N = a.dimensions[1]
- S0 = a.strides[0]
- S1 = a.strides[1]
- for i from 1 <= i < M-1:
- r = i*S0
- rm1 = r-S0
- rp1 = r+S0
- oS = i*N
- for j from 1 <= j < N-1:
- c = j*S1
- cm1 = c-S1
- cp1 = c+S1
- (<double *>b.data)[oS+j] = \
- (<double *>(a.data+r+c))[0] + \
- ((<double *>(a.data+rm1+c))[0] + \
- (<double *>(a.data+rp1+c))[0] + \
- (<double *>(a.data+r+cm1))[0] + \
- (<double *>(a.data+r+cp1))[0])*0.5 + \
- ((<double *>(a.data+rm1+cm1))[0] + \
- (<double *>(a.data+rp1+cm1))[0] + \
- (<double *>(a.data+rp1+cp1))[0] + \
- (<double *>(a.data+rm1+cp1))[0])*0.25
- return b
-
diff --git a/doc/numpybook/comparison/pyrex/setup.py b/doc/numpybook/comparison/pyrex/setup.py
deleted file mode 100644
index 3fb69a705..000000000
--- a/doc/numpybook/comparison/pyrex/setup.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-from __future__ import division, print_function
-
-from distutils.core import setup
-from distutils.extension import Extension
-
-import numpy
-
-# Define a pyrex-based extension module, using the generated sources if pyrex
-from Pyrex.Distutils import build_ext
-pyx_sources = ['add.pyx']
-cmdclass = {'build_ext': build_ext}
-
-
-pyx_ext = Extension('add',
- pyx_sources,
- include_dirs = [numpy.get_include()])
-
-pyx_ext2 = Extension('blur',
- ['blur.pyx'],
- include_dirs = [numpy.get_include()])
-
-
-# Call the routine which does the real work
-setup(name = 'add',
- description = 'Small example on using Pyrex to write a Numpy extension',
- url = 'http://www.scipy.org/Cookbook/Pyrex_and_NumPy',
- ext_modules = [pyx_ext, pyx_ext2],
- cmdclass = cmdclass,
- )
diff --git a/doc/numpybook/comparison/pyrex/timeme b/doc/numpybook/comparison/pyrex/timeme
deleted file mode 100755
index 2f7cd297f..000000000
--- a/doc/numpybook/comparison/pyrex/timeme
+++ /dev/null
@@ -1,2 +0,0 @@
-python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)"
-
diff --git a/doc/numpybook/comparison/timing.py b/doc/numpybook/comparison/timing.py
deleted file mode 100644
index 1c70b48ac..000000000
--- a/doc/numpybook/comparison/timing.py
+++ /dev/null
@@ -1,62 +0,0 @@
-from __future__ import division, absolute_import, print_function
-
-import timeit
-
-pyrex_pre = """
-import numpy as N
-a = N.random.rand(%d,%d)
-import filter
-"""
-
-pyrex_run = """
-b = filter.filter(a)
-"""
-
-weave_pre = """
-import numpy as N
-a = N.random.rand(%d,%d)
-import filter
-"""
-
-weave_run = """
-b = filter.filter(a)
-"""
-
-ctypes_pre = """
-import numpy as N
-a = N.random.rand(%d,%d)
-import filter
-"""
-
-ctypes_run = """
-b = filter.filter(a)
-"""
-
-f2py_pre = """
-import numpy as N
-a = N.random.rand(%d, %d).T
-import filter
-"""
-
-f2py_run = """
-b = N.zeros_like(a)
-filter.DFILTER2D(a,b)
-"""
-
-N = [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
-
-res = {}
-
-import os
-import sys
-path = sys.path
-
-for kind in ['f2py']:#['ctypes', 'pyrex', 'weave', 'f2py']:
- res[kind] = []
- sys.path = ['/Users/oliphant/numpybook/%s' % (kind,)] + path
- print(sys.path)
- for n in N:
- print("%s - %d" % (kind, n))
- t = timeit.Timer(eval('%s_run'%kind), eval('%s_pre %% (%d,%d)'%(kind, n, n)))
- mytime = min(t.repeat(3, 100))
- res[kind].append(mytime)
diff --git a/doc/numpybook/comparison/weave/filter.py b/doc/numpybook/comparison/weave/filter.py
deleted file mode 100644
index 309764c29..000000000
--- a/doc/numpybook/comparison/weave/filter.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import division, absolute_import, print_function
-
-from scipy import weave, zeros_like
-
-def filter(a):
- if a.ndim != 2:
- raise ValueError("a must be 2-d")
- code = r"""
- int i,j;
- for(i=1;i<Na[0]-1;i++) {
- for(j=1;j<Na[1]-1;j++) {
- B2(i,j) = A2(i,j) + (A2(i-1,j) +
- A2(i+1,j) + A2(i,j-1)
- + A2(i,j+1))*0.5
- + (A2(i-1,j-1)
- + A2(i-1,j+1)
- + A2(i+1,j-1)
- + A2(i+1,j+1))*0.25;
- }
- }
- """
- b = zeros_like(a)
- weave.inline(code, ['a', 'b'])
- return b
diff --git a/doc/numpybook/comparison/weave/inline.py b/doc/numpybook/comparison/weave/inline.py
deleted file mode 100644
index 6e98e6997..000000000
--- a/doc/numpybook/comparison/weave/inline.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from __future__ import division, absolute_import, print_function
-
-from scipy import weave
-from numpy import rand, zeros_like
-
-def example1(a):
- if not isinstance(a, list):
- raise ValueError("argument must be a list")
- code = r"""
- int i;
- py::tuple results(2);
- for (i=0; i<a.length(); i++) {
- a[i] = i;
- }
- results[0] = 3.0;
- results[1] = 4.0;
- return_val = results;
- """
- return weave.inline(code, ['a'])
-
-def arr(a):
- if a.ndim != 2:
- raise ValueError("a must be 2-d")
- code = r"""
- int i,j;
- for(i=1;i<Na[0]-1;i++) {
- for(j=1;j<Na[1]-1;j++) {
- B2(i,j) = A2(i,j) + A2(i-1,j)*0.5 +
- A2(i+1,j)*0.5 + A2(i,j-1)*0.5
- + A2(i,j+1)*0.5
- + A2(i-1,j-1)*0.25
- + A2(i-1,j+1)*0.25
- + A2(i+1,j-1)*0.25
- + A2(i+1,j+1)*0.25;
- }
- }
- """
- b = zeros_like(a)
- weave.inline(code, ['a', 'b'])
- return b
-
-a = [None]*10
-print(example1(a))
-print(a)
-
-a = rand(512, 512)
-b = arr(a)
-
-h = [[0.25, 0.5, 0.25], [0.5, 1, 0.5], [0.25, 0.5, 0.25]]
-import scipy.signal as ss
-b2 = ss.convolve(h, a, 'same')
diff --git a/doc/numpybook/comparison/weave/timeme b/doc/numpybook/comparison/weave/timeme
deleted file mode 100755
index 2f7cd297f..000000000
--- a/doc/numpybook/comparison/weave/timeme
+++ /dev/null
@@ -1,2 +0,0 @@
-python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)"
-
diff --git a/doc/numpybook/graphics/note.eps b/doc/numpybook/graphics/note.eps
deleted file mode 100644
index 6dc22e31c..000000000
--- a/doc/numpybook/graphics/note.eps
+++ /dev/null
@@ -1,116 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: note.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 4
-%%CreationDate: Wed Aug 24 03:03:42 2005
-%%For: oliphant@den.local.net (Travis Oliphant)
-%%BoundingBox: 0 0 88 88
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-/col32 {0.875 0.953 0.996 srgb} bind def
-/col33 {0.996 0.820 0.820 srgb} bind def
-/col34 {0.984 0.961 0.859 srgb} bind def
-
-end
-save
-newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath
-% Fill background color
-0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto
-closepath 0.98 0.96 0.86 setrgbcolor fill
-
--172.1 187.9 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
- bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
- 4 -2 roll mul srgb} bind def
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-10 setmiterlimit
-0 slj 0 slc
- 0.06000 0.06000 sc
-%
-% Fig objects follow
-%
-%
-% here starts figure with depth 52
-% Polyline
-7.500 slw
-n 3600 1680 m 2880 2400 l 3600 3120 l 4320 2400 l
- cp gs col31 1.00 shd ef gr gs col31 s gr
-% here ends figure;
-%
-% here starts figure with depth 50
-% Polyline
-60.000 slw
-n 3600 1860 m 3060 2400 l 3600 2940 l 4140 2400 l
- cp gs col0 s gr
-% here ends figure;
-$F2psEnd
-rs
-showpage
diff --git a/doc/numpybook/graphics/note.fig b/doc/numpybook/graphics/note.fig
deleted file mode 100644
index 3a193a52c..000000000
--- a/doc/numpybook/graphics/note.fig
+++ /dev/null
@@ -1,16 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-0 32 #e0f4ff
-0 33 #ffd2d2
-0 34 #fcf6dc
-2 3 0 1 31 31 52 -1 20 0.000 0 0 -1 0 0 5
- 3600 1680 2880 2400 3600 3120 4320 2400 3600 1680
-2 3 0 5 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 3600 1860 3060 2400 3600 2940 4140 2400 3600 1860
diff --git a/doc/numpybook/graphics/note.png b/doc/numpybook/graphics/note.png
deleted file mode 100644
index bea5b70be..000000000
--- a/doc/numpybook/graphics/note.png
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/graphics/tip.eps b/doc/numpybook/graphics/tip.eps
deleted file mode 100644
index b87fd662c..000000000
--- a/doc/numpybook/graphics/tip.eps
+++ /dev/null
@@ -1,127 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: tip.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 4
-%%CreationDate: Tue Aug 23 23:51:46 2005
-%%For: oliphant@den.local.net (Travis Oliphant)
-%%BoundingBox: 0 0 88 88
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-/col32 {0.875 0.953 0.996 srgb} bind def
-/col33 {0.000 0.000 0.000 srgb} bind def
-
-end
-save
-newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath
-% Fill background color
-0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto
-closepath 0.88 0.95 1.00 setrgbcolor fill
-
--172.3 187.6 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
- bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
- 4 -2 roll mul srgb} bind def
- /DrawEllipse {
- /endangle exch def
- /startangle exch def
- /yrad exch def
- /xrad exch def
- /y exch def
- /x exch def
- /savematrix mtrx currentmatrix def
- x y tr xrad yrad sc 0 0 1 startangle endangle arc
- closepath
- savematrix setmatrix
- } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-10 setmiterlimit
-0 slj 0 slc
- 0.06000 0.06000 sc
-%
-% Fig objects follow
-%
-%
-% here starts figure with depth 51
-% Ellipse
-7.500 slw
-n 3600 2400 720 720 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col7 s gr
-
-% Ellipse
-n 3600 2400 660 660 0 360 DrawEllipse gs col1 1.00 shd ef gr gs col1 s gr
-
-/Times-Bold ff 1650.00 scf sf
-3384 2940 m
-gs 1 -1 sc (i) col7 sh gr
-% here ends figure;
-$F2psEnd
-rs
-showpage
diff --git a/doc/numpybook/graphics/tip.fig b/doc/numpybook/graphics/tip.fig
deleted file mode 100644
index 77db02fe1..000000000
--- a/doc/numpybook/graphics/tip.fig
+++ /dev/null
@@ -1,14 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-0 32 #e0f4ff
-0 33 #000000
-1 3 0 1 1 1 50 -1 20 0.000 1 0.0000 3600 2400 660 660 3600 2400 4260 2400
-1 3 0 1 7 7 51 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400
-4 0 7 50 -1 2 110 0.0000 4 1140 465 3384 2940 i\001
diff --git a/doc/numpybook/graphics/tip.png b/doc/numpybook/graphics/tip.png
deleted file mode 100644
index 6a63550e2..000000000
--- a/doc/numpybook/graphics/tip.png
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/graphics/tip.xfig.fig b/doc/numpybook/graphics/tip.xfig.fig
deleted file mode 100644
index ede65f7c4..000000000
--- a/doc/numpybook/graphics/tip.xfig.fig
+++ /dev/null
@@ -1,12 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-1 3 0 1 1 1 50 -1 20 0.000 1 0.0000 3600 2400 660 660 3600 2400 4260 2400
-1 3 0 1 7 7 51 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400
-4 0 7 50 -1 2 92 0.0000 4 960 390 3450 2850 i\001
diff --git a/doc/numpybook/graphics/warning.eps b/doc/numpybook/graphics/warning.eps
deleted file mode 100644
index d854a99ff..000000000
--- a/doc/numpybook/graphics/warning.eps
+++ /dev/null
@@ -1,125 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: warning.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 4
-%%CreationDate: Wed Aug 24 00:00:52 2005
-%%For: oliphant@den.local.net (Travis Oliphant)
-%%BoundingBox: 0 0 88 88
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-/col32 {0.875 0.953 0.996 srgb} bind def
-/col33 {0.996 0.820 0.820 srgb} bind def
-/col34 {0.984 0.961 0.859 srgb} bind def
-
-end
-save
-newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath
-% Fill background color
-0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto
-closepath 1.00 0.82 0.82 setrgbcolor fill
-
--172.3 187.6 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
- bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
- 4 -2 roll mul srgb} bind def
- /DrawEllipse {
- /endangle exch def
- /startangle exch def
- /yrad exch def
- /xrad exch def
- /y exch def
- /x exch def
- /savematrix mtrx currentmatrix def
- x y tr xrad yrad sc 0 0 1 startangle endangle arc
- closepath
- savematrix setmatrix
- } def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-10 setmiterlimit
-0 slj 0 slc
- 0.06000 0.06000 sc
-%
-% Fig objects follow
-%
-%
-% here starts figure with depth 50
-% Ellipse
-7.500 slw
-n 3600 2400 720 720 0 360 DrawEllipse gs col20 1.00 shd ef gr gs col20 s gr
-
-% Polyline
-n 3096 2268 m 4104 2268 l 4104 2532 l 3096 2532 l
- cp gs col7 1.00 shd ef gr gs col7 s gr
-% here ends figure;
-$F2psEnd
-rs
-showpage
diff --git a/doc/numpybook/graphics/warning.fig b/doc/numpybook/graphics/warning.fig
deleted file mode 100644
index 89424d5ba..000000000
--- a/doc/numpybook/graphics/warning.fig
+++ /dev/null
@@ -1,15 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-0 32 #e0f4ff
-0 33 #ffd2d2
-0 34 #fcf6dc
-1 3 0 1 20 20 50 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400
-2 2 0 1 7 7 50 -1 20 0.000 0 0 -1 0 0 5
- 3096 2268 4104 2268 4104 2532 3096 2532 3096 2268
diff --git a/doc/numpybook/graphics/warning.png b/doc/numpybook/graphics/warning.png
deleted file mode 100644
index 12f105160..000000000
--- a/doc/numpybook/graphics/warning.png
+++ /dev/null
Binary files differ
diff --git a/doc/numpybook/mybook.layout b/doc/numpybook/mybook.layout
deleted file mode 100644
index 588384dd3..000000000
--- a/doc/numpybook/mybook.layout
+++ /dev/null
@@ -1,177 +0,0 @@
-#% Do not delete the line below; configure depends on this
-# \DeclareLaTeXClass[book]{Stylish Book}
-# Book textclass definition file. Taken from initial LyX source code
-# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
-# Transposed by Pascal André <andre@via.ecp.fr>
-# Heavily modifed and enhanced by serveral developers.
-
-# Input general definitions
-Input stdclass.inc
-
-# Global parameters.
-Sides 2
-PageStyle Headings
-
-# There is no abstract environment in book.cls
-NoStyle Abstract
-
-# a few changes to the bibliography
-Style Bibliography
- TopSep 4
- LabelString Bibliography
- # label font definition
- LabelFont
- Series Bold
- Size Huge
- EndFont
-End
-
-
-Style Note
- LatexType Command
- LatexName notel
-
- LabelType Centered_Top_Environment
- LabelString "NOTE"
- AlignPossible Left
- LeftMargin "MMMMM"
- RightMargin "MMMMM"
- ParSkip 0.7
- ParSep 0.7
- TopSep 0.7
- BottomSep 0.7
-
- Font
- Shape SmallCaps
- Color Magenta
- EndFont
- Preamble
- \usepackage{color}
- \setlength{\fboxrule}{2pt}
- \definecolor{noteback}{rgb}{0.988235, 0.964706, 0.862745}
- \newcommand{\notel}[1]{%
- \begin{center}%
- \fcolorbox{black}{noteback}{%
- \begin{minipage}{0.8\textwidth}%
- \includegraphics[height=0.3in]{graphics/note.eps}%
- \vskip-0.3in\hskip1.65in{\large\bf NOTE} \\[0.2cm]%
- #1%
- \end{minipage}%
- }%
- \end{center}%
- }
- EndPreamble
-End
-
-
-Style Warning
- LatexType Command
- LatexName warnl
-
- LabelType Centered_Top_Environment
- LabelString "WARNING"
- AlignPossible Left
- LeftMargin "MMMMM"
- RightMargin "MMMMM"
- ParSkip 0.7
- ParSep 0.7
- TopSep 0.7
- BottomSep 0.7
-
- Font
- Shape SmallCaps
- Color Red
- EndFont
- Preamble
- \usepackage{color}
- \setlength{\fboxrule}{2pt}
- \definecolor{warnback}{rgb}{1.0, 0.8235294, 0.8235294}
- \newcommand{\warnl}[1]{%
- \begin{center}%
- \fcolorbox{black}{warnback}{%
- \begin{minipage}{0.8\textwidth}%
- \includegraphics[height=0.3in]{graphics/warning.eps}%
- \vskip-0.3in\hskip1.5in{\large\bf WARNING} \\[0.2cm]%
- #1%
- \end{minipage}%
- }%
- \end{center}%
- }
- EndPreamble
-End
-
-
-Style Tip
- LatexType Command
- LatexName tipl
-
- LabelType Centered_Top_Environment
- LabelString "TIP"
- AlignPossible Left
- LeftMargin "MMMMM"
- RightMargin "MMMMM"
- ParSkip 0.7
- ParSep 0.7
- TopSep 0.7
- BottomSep 0.7
-
- Font
- Shape SmallCaps
- Color Blue
- EndFont
- Preamble
- \usepackage{color}
- \setlength{\fboxrule}{2pt}
- \definecolor{tipback}{rgb}{0.87843, 0.95686, 1.0}
- \newcommand{\tipl}[1]{%
- \begin{center}%
- \fcolorbox{black}{tipback}{%
- \begin{minipage}{0.8\textwidth}%
- \includegraphics[height=0.3in]{graphics/tip.eps}%
- \vskip-0.3in\hskip1.8in{\large\bf TIP} \\[0.2cm]%
- #1%
- \end{minipage}%
- }%
- \end{center}%
- }
- EndPreamble
-End
-
-Style MyCode
- Margin Static
- LatexType Environment
- LatexName mycode
- NextNoIndent 1
- LeftMargin MMM
- RightMargin MMM
- TopSep 0.5
- BottomSep 0.5
- Align Left
- AlignPossible Block, Left, Right, Center
- LabelType No_Label
- FreeSpacing 1
-
- # define the environment lyxcode
- Preamble
- \usepackage{color}
- \setlength{\fboxrule}{2pt}
- \definecolor{codeback}{rgb}{0.94118,0.94118,0.94118}
- \newsavebox{\mycodesavebox}
- \newenvironment{mycode}
- {\begin{lrbox}{\mycodesavebox}%
- \begin{minipage}{0.95\linewidth}%
- \begin{trivlist}
- \setlength{\itemsep}{0pt}
- \setlength{\parsep}{0pt}
- \normalfont\ttfamily
- \item[] }
- {\end{trivlist}\end{minipage}\end{lrbox}%
- \vskip 0.5em \begin{center}\fcolorbox{black}{codeback}{\usebox{\mycodesavebox}}\end{center}\par \vskip 0.5em}
- EndPreamble
-
- # standard font definition
- Font
- Family Typewriter
- EndFont
-
-End
diff --git a/doc/numpybook/numpybook.lyx b/doc/numpybook/numpybook.lyx
deleted file mode 100644
index 65185a2be..000000000
--- a/doc/numpybook/numpybook.lyx
+++ /dev/null
@@ -1,27837 +0,0 @@
-#LyX 1.5.1 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
-\begin_document
-\begin_header
-\textclass mybook
-\begin_preamble
-
-
-
-\usepackage{array}
-
-% This gives us a better font in URL links (otherwise the default
-% MonoSpace font is bitmapped, and it looks horrible in PDF)
-\usepackage{courier}
-
-\usepackage{fullpage}
-
-\usepackage{color} % so we can use red for the fixme warnings
-
-% The hyperref package gives us a pdf with properly built
-% internal navigation ('pdf bookmarks' for the table of contents,
-% internal cross-reference links, web links for URLs, etc.)
-
-% A few colors to replace the defaults for certain link types
-\definecolor{darkorange}{rgb}{.71,0.21,0.01}
-\definecolor{darkgreen}{rgb}{.12,.54,.11}
-
-\usepackage[
- %pdftex, % needed for pdflatex
- breaklinks=true, % so long urls are correctly broken across lines
- colorlinks=true,
- urlcolor=blue,
- linkcolor=darkorange,
- citecolor=darkgreen,
- ]{hyperref}
-
-% This helps prevent overly long lines that stretch beyond the margins
-\sloppy
-
-% Define a \fixme command to mark visually things needing fixing in the draft.
-% For final printing or to simply disable these bright warnings, simply
-% uncomment the \renewcommand redefinition below
-
-\newcommand{\fixme}[1] {
-\textcolor{red}{
-{\fbox{ {\bf FIX}
-\ensuremath{\blacktriangleright \blacktriangleright \blacktriangleright}}
-{\bf #1}
-\fbox{\ensuremath{ \blacktriangleleft \blacktriangleleft \blacktriangleleft }
-} } }
-}
-% Uncomment the next line to make the \fixme command be a no-op
-%\renewcommand{\fixme}[1]{}
-
-%%% If you also want to use the listings package for nicely formatted
-%%% Python source code, this configuration produces good on-paper and
-%%% on-screen results:
-
-\definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
-% Use and configure listings package for nicely formatted code
-\usepackage{listings}
-\lstset{
- language=Python,
- basicstyle=\small\ttfamily,
- commentstyle=\ttfamily\color{blue},
- stringstyle=\ttfamily\color{orange},
- showstringspaces=false,
- breaklines=true,
- postbreak = \space\dots
-}
-\end_preamble
-\language english
-\inputencoding auto
-\font_roman default
-\font_sans default
-\font_typewriter default
-\font_default_family default
-\font_sc false
-\font_osf false
-\font_sf_scale 100
-\font_tt_scale 100
-\graphics default
-\paperfontsize 10
-\spacing onehalf
-\papersize custom
-\use_geometry true
-\use_amsmath 2
-\use_esint 0
-\cite_engine basic
-\use_bibtopic false
-\paperorientation portrait
-\paperwidth 7in
-\paperheight 9in
-\leftmargin 1in
-\topmargin 1in
-\rightmargin 1in
-\bottommargin 1in
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\defskip medskip
-\quotes_language english
-\papercolumns 1
-\papersides 1
-\paperpagestyle headings
-\tracking_changes false
-\output_changes false
-\author ""
-\author ""
-\end_header
-
-\begin_body
-
-\begin_layout Standard
-\begin_inset VSpace 2in*
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-
-\family sans
-\series bold
-\size giant
-Guide to NumPy
-\end_layout
-
-\begin_layout Standard
-\align center
-
-\family sans
-\size larger
-Travis E.
- Oliphant, PhD
-\newline
-August 21, 2008
-\end_layout
-
-\begin_layout Standard
-\begin_inset VSpace vfill
-\end_inset
-
-This book was released from a restricted distribution using a Market-Determined,
- Temporary, Distribution-Restriction (MDTDR) system (see http://www.trelgol.com)
- on August 21, 2008.
- It is now released to the public domain and can be used as source material
- for other works.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand tableofcontents
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset FloatList table
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Part
-NumPy from Python
-\end_layout
-
-\begin_layout Chapter
-Origins of NumPy
-\end_layout
-
-\begin_layout Quotation
-A complex system that works is invariably found to have evolved from a simple
- system that worked
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-John Gall
-\end_layout
-
-\begin_layout Quotation
-Copy from one, it's plagiarism; copy from two, it's research.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Wilson Mizner
-\end_layout
-
-\begin_layout Standard
-NumPy builds on (and is a successor to) the successful Numeric array object.
- Its goal is to create the corner-stone for a useful environment for scientific
- computing.
- In order to better understand the people surrounding NumPy and (its library-pac
-kage) SciPy, I will explain a little about how SciPy and (current) NumPy
- originated.
- In 1998, as a graduate student studying biomedical imaging at the Mayo
- Clinic in Rochester, MN, I came across Python and its numerical extension
- (Numeric) while I was looking for ways to analyze large data sets for Magnetic
- Resonance Imaging and Ultrasound using a high-level language.
- I quickly fell in love with Python programming which is a remarkable statement
- to make about a programming language.
- If I had not seen others with the same view, I might have seriously doubted
- my sanity.
- I became rather involved in the Numeric Python community, adding the C-API
- chapter to the Numeric documentation (for which Paul Dubois graciously
- made me a co-author).
-
-\end_layout
-
-\begin_layout Standard
-As I progressed with my thesis work, programming in Python was so enjoyable
- that I felt inhibited when I worked with other programming frameworks.
- As a result, when a task I needed to perform was not available in the core
- language, or in the Numeric extension, I looked around and found C or Fortran
- code that performed the needed task, wrapped it into Python (either by
- hand or using SWIG), and used the new functionality in my programs.
-
-\end_layout
-
-\begin_layout Standard
-Along the way, I learned a great deal about the underlying structure of
- Numeric and grew to admire it's simple but elegant structures that grew
- out of the mechanism by which Python allows itself to be extended.
-
-\end_layout
-
-\begin_layout Note
-Numeric was originally written in 1995 based off of an earlier Matrix Object
- design by Jim Fulton which was released in 1994.
- Most of the code was written by Jim Hugunin while he was a graduate student
- at MIT.
- He received help from many people including Jim Fulton, David Ascher, Paul
- Dubois, and Konrad Hinsen.
- These individuals and many others added comments, criticisms, and code
- which helped the Numeric extension reach stability.
- Jim Hugunin did not stay long as an active member of the community ---
- moving on to write Jython and, later, Iron Python.
-\end_layout
-
-\begin_layout Standard
-By operating in this need-it-make-it fashion I ended up with a substantial
- library of extension modules that helped Python + Numeric become easier
- to use in a scientific setting.
- These early modules included raw input-output functions, a special function
- library, an integration library, an ordinary differential equation solver,
- some least-squares optimizers, and sparse matrix solvers.
- While I was doing this laborious work, Pearu Peterson noticed that a lot
- of the routines I was wrapping were written in Fortran, and there was no
- simplified wrapping mechanism for Fortran subroutines (like SWIG for C).
- He began the task of writing f2py which made it possible to easily wrap
- Fortran programs into Python.
- I helped him a little bit, mostly with testing and contributing early function-
-call-back code, but he put forth the brunt of the work.
- His result was simply amazing to me.
- I've always been impressed with f2py, especially because I knew how much
- effort writing and maintaining extension modules could be.
- Anybody serious about scientific computing with Python will appreciate
- that f2py is distributed along with NumPy.
-\end_layout
-
-\begin_layout Standard
-When I finished my Ph.D.
- in 2001, Eric Jones (who had recently completed his Ph.D.
- at Duke) contacted me because he had a collection of Python modules he
- had developed as part of his thesis work as well.
- He wanted to combine his modules with mine into one super package.
- Together with Pearu Peterson we joined our efforts, and SciPy was born
- in 2001.
- Since then, many people have contributed module code to SciPy including
- Ed Schofield, Robert Cimrman, David M.
- Cooke, Charles (Chuck) Harris, Prabhu Ramachandran, Gary Strangman, Jean-Sebast
-ien Roy, and Fernando Perez.
- Others such as Travis Vaught, David Morrill, Jeff Whitaker, and Louis Luangkeso
-rn have contributed testing and build support.
-
-\end_layout
-
-\begin_layout Standard
-At the start of 2005, SciPy was at release 0.3 and relatively stable for
- an early version number.
- Part of the reason it was difficult to stabilize SciPy was that the array
- object upon which SciPy builds was undergoing a bit of an upheaval.
- At about the same time as SciPy was being built, some Numeric users were
- hitting up against the limited capabilities of Numeric.
- In particular, the ability to deal with memory mapped files (and associated
- alignment and swapping issues), record arrays, and altered error checking
- modes were important but limited or non-existent in Numeric.
- As a result, numarray was created by Perry Greenfield, Todd Miller, and
- Rick White at the Space Science Telescope Institute as a replacement for
- Numeric.
- Numarray used a very different implementation scheme as a mix of Python
- classes and C code (which led to slow downs in certain common uses).
- While improving some capabilities, it was slow to pick up on the more advanced
- features of Numeric's universal functions (ufuncs) --- never re-creating
- the C-API that SciPy depended on.
- This made it difficult for SciPy to
-\begin_inset Quotes eld
-\end_inset
-
-convert
-\begin_inset Quotes erd
-\end_inset
-
- to numarray.
-
-\end_layout
-
-\begin_layout Standard
-Many newcomers to scientific computing with Python were told that numarray
- was the future and started developing for it.
- Very useful tools were developed that could not be used with Numeric (because
- of numarray's change in C-API), and therefore could not be used easily
- in SciPy.
- This state of affairs was very discouraging for me personally as it left
- the community fragmented.
- Some developed for numarray, others developed as part of SciPy.
- A few people even rejected adopting Python for scientific computing entirely
- because of the split.
- In addition, I estimate that quite a few Python users simply stayed away
- from both SciPy and numarray, leaving the community smaller than it could
- have been given the number of people that use Python for science and engineerin
-g purposes.
-
-\end_layout
-
-\begin_layout Standard
-It should be recognized that the split was not intentional, but simply an
- outgrowth of the different and exacting demands of scientific computing
- users.
- My describing these events should not be construed as assigning blame to
- anyone.
- I very much admire and appreciate everyone I've met who is involved with
- scientific computing and Python.
- Using a stretched biological metaphor, it is only through the process of
- dividing and merging that better results are born.
- I think this concept applies to NumPy.
-\end_layout
-
-\begin_layout Standard
-In early 2005, I decided to begin an effort to help bring the diverging
- community together under a common framework if it were possible.
- I first looked at numarray to see what could be done to add the missing
- features to make SciPy work with it as a core array object.
- After a couple of days of studying numarray, I was not enthusiastic about
- this approach.
- My familiarity with the Numeric code base no doubt biased my opinion, but
- it seemed to me that the features of Numarray could be added back to Numeric
- with a few fundamental changes to the core object.
- This would make the transition of SciPy to a more enhanced array object
- much easier in my mind.
-
-\end_layout
-
-\begin_layout Standard
-Therefore, I began to construct this hybrid array object complete with an
- enhanced set of universal (broadcasting) functions that could deal with
- it.
- Along the way, quite a few new features and significant enhancements were
- added to the array object and its surrounding infrastructure.
- This book describes the result of that year-and-a-half-long effort which
- culminated with the release of NumPy 0.9.2 in early 2006 and NumPy 1.0 in
- late 2006.
- I first named the new package, SciPy Core, and used the scipy namespace.
- However, after a few months of testing under that name, it became clear
- that a separate namespace was needed for the new package.
- As a result, a rapid search for a new name resulted in actually coming
- back to the NumPy name which was the unofficial name of Numerical Python
- but never the actual namespace.
- Because the new package builds on the code-base of and is a successor to
- Numeric, I think the NumPy name is fitting and hopefully not too confusing
- to new users.
-\end_layout
-
-\begin_layout Standard
-This book only briefly outlines some of the infrastructure that surrounds
- the basic objects in NumPy to provide the additional functionality contained
- in the older Numeric package (
-\emph on
-i.e.
-
-\emph default
- LinearAlgebra, RandomArray, FFT).
- This infrastructure in NumPy includes basic linear algebra routines, Fourier
- transform capabilities, and random number generators.
- In addition, the f2py module is described in its own documentation, and
- so is only briefly mentioned in the second part of the book.
- There are also extensions to the standard Python distutils and testing
- frameworks included with NumPy that are useful in constructing your own
- packages built on top of NumPy.
- The central purpose of this book, however, is to describe and document
- the basic NumPy system that is available under the numpy namespace.
-\end_layout
-
-\begin_layout Note
-The numpy namespace includes all names under the numpy.core and numpy.lib
- namespaces as well.
- Thus,
-\family typewriter
-import numpy
-\family default
- will also import the names from numpy.core and numpy.lib.
- This is the recommended way to use numpy.
-\end_layout
-
-\begin_layout Standard
-The following table gives a brief outline of the sub-packages contained
- in numpy package.
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="9" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="1in">
-<column alignment="center" valignment="top" leftline="true" width="2in">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="2in">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Package
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Purpose
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Comments
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-core
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-basic objects
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-all names exported to numpy
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-lib
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-additional utilities
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-all names exported to numpy
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-linalg
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-basic linear algebra
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-old LinearAlgebra from Numeric
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-fft
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-discrete Fourier transforms
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-old FFT from Numeric
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-random
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-random number generators
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-old RandomArray from Numeric
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-distutils
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-enhanced build and distribution
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-improvements built on standard distutils
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-testing
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-unit-testing
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-utility functions useful for testing
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-f2py
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-automatic wrapping of Fortran code
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-a useful utility needed by SciPy
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Chapter
-Object Essentials
-\end_layout
-
-\begin_layout Quotation
-Our programs last longer if we manage to build simple abstractions for ourselves...
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Ron Jeffries
-\end_layout
-
-\begin_layout Quotation
-I will tell you the truth as soon as I figure it out.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Wayne Birmingham
-\end_layout
-
-\begin_layout Standard
-NumPy provides two fundamental objects: an N-dimensional array object (
-\family typewriter
-ndarray
-\family default
-) and a universal function object (
-\family typewriter
-ufunc
-\family default
-).
- In addition, there are other objects that build on top of these which you
- may find useful in your work, and these will be discussed later.
- The current chapter will provide background information on just the
-\family typewriter
-ndarray
-\family default
- and the
-\family typewriter
-ufunc
-\family default
- that will be important for understanding the attributes and methods to
- be discussed later.
-
-\end_layout
-
-\begin_layout Standard
-An N-dimensional array is a homogeneous collection of
-\begin_inset Quotes eld
-\end_inset
-
-items
-\begin_inset Quotes erd
-\end_inset
-
- indexed using
-\begin_inset Formula $N$
-\end_inset
-
- integers.
- There are two essential pieces of information that define an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array: 1) the shape of the array, and 2) the kind of item the
- array is composed of.
- The shape of the array is a tuple of
-\begin_inset Formula $N$
-\end_inset
-
- integers (one for each dimension) that provides information on how far
- the index can vary along that dimension.
- The other important information describing an array is the kind of item
- the array is composed of.
- Because every
-\family typewriter
-ndarray
-\family default
- is a homogeneous collection of exactly the same data-type, every item takes
- up the same size block of memory, and each block of memory in the array
- is interpreted in exactly the same way
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-By using OBJECT arrays, one can effectively have heterogeneous arrays, but
- the system still sees each element of the array as exactly the same thing
- (a reference to a Python object).
-\end_layout
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Tip
-All arrays in NumPy are indexed starting at 0 and ending at M-1 following
- the Python convention.
-\end_layout
-
-\begin_layout Standard
-For example, consider the following piece of code:
-\end_layout
-
-\begin_layout MyCode
->>> a = array([[1,2,3],[4,5,6]])
-\newline
->>> a.shape
-\newline
-(2, 3)
-\newline
->>> a.dtype
-\newline
-dtype('int32')
-\end_layout
-
-\begin_layout Note
-for all code in this book it is assumed that you have first entered
-\family typewriter
-from numpy import *
-\family default
-.
- In addition, any previously defined arrays are still defined for subsequent
- examples.
-\end_layout
-
-\begin_layout Standard
-This code defines an array of size
-\begin_inset Formula $2\times3$
-\end_inset
-
- composed of 4-byte (little-endian) integer elements (on my 32-bit platform).
- We can index into this two-dimensional array using two integers: the first
- integer running from 0 to 1 inclusive and the second from 0 to 2 inclusive.
- For example, index
-\begin_inset Formula $\left(1,1\right)$
-\end_inset
-
- selects the element with value 5:
-\end_layout
-
-\begin_layout MyCode
->>> a[1,1]
-\newline
-5
-\end_layout
-
-\begin_layout Standard
-All code shown in the shaded-boxes in this book has been (automatically)
- executed on a particular version of NumPy.
- The output of the code shown below shows which version of NumPy was used
- to create all of the output in your copy of this book.
-\end_layout
-
-\begin_layout MyCode
->>> import numpy; print numpy.__version__
-\newline
-1.0.2.dev3478
-\end_layout
-
-\begin_layout Section
-Data-Type Descriptors
-\end_layout
-
-\begin_layout Standard
-In NumPy, an ndarray is an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array of items where each item takes up a fixed number of bytes.
- Typically, this fixed number of bytes represents a number (
-\emph on
-e.g.
-
-\emph default
- integer or floating-point).
- However, this fixed number of bytes could also represent an arbitrary record
- made up of any collection of other data types.
- NumPy achieves this flexibility through the use of a data-type (dtype)
- object.
- Every array has an associated dtype object which describes the layout of
- the array data.
- Every dtype
-\begin_inset LatexCommand index
-name "dtype"
-
-\end_inset
-
- object, in turn, has an associated Python type-object that determines exactly
- what type of Python object is returned when an element of the array is
- accessed.
- The dtype objects are flexible enough to contain references to arrays of
- other dtype objects and, therefore, can be used to define nested records.
- This advanced functionality will be described in better detail later as
- it is mainly useful for the recarray (record array) subclass that will
- also be defined later.
- However, all ndarrays can enjoy the flexibility provided by the dtype objects.
- Figure
-\begin_inset LatexCommand ref
-reference "cap:Conceptual-diagram-showing"
-
-\end_inset
-
- provides a conceptual diagram showing the relationship between the ndarray,
- its associated data-type object, and an array-scalar that is returned when
- a single-element of the array is accessed.
- Note that the data-type points to the type-object of the array scalar
-\begin_inset LatexCommand index
-name "array scalars"
-
-\end_inset
-
-.
- An array scalar is returned using the type-object and a particular element
- of the ndarray.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\align center
-\begin_inset Graphics
- filename Figures/threefundamental.eps
- width 90text%
- keepAspectRatio
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Conceptual-diagram-showing"
-
-\end_inset
-
-Conceptual diagram showing the relationship between the three fundamental
- objects used to describe the data in an array: 1) the ndarray itself, 2)
- the data-type object that describes the layout of a single fixed-size element
- of the array, 3) the array-scalar Python object that is returned when a
- single element of the array is accessed.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Every dtype object is based on one of 21 built-in dtype objects.
- These built-in objects allow numeric operations on a wide-variety of integer,
- floating-point, and complex data types.
- Associated with each data-type is a Python type object whose instances
- are array scalars.
- This type-object can be obtained using the
-\family typewriter
-type
-\family default
- attribute of the dtype object.
- Python typically defines only one data-type of a particular data class
- (one integer type, one floating-point type, etc.).
- This can be convenient for some applications that don't need to be concerned
- with all the ways data can be represented in a computer.
- For scientific applications, however, this is not always true.
- As a result, in NumPy, their are 21 different fundamental Python data-type-desc
-riptor objects built-in.
- These descriptors are mostly based on the types available in the C language
- that CPython is written in.
- However, there are a few types that are extremely flexible, such as
-\family typewriter
-str_
-\family default
-,
-\family typewriter
-unicode_
-\family default
-, and
-\family typewriter
-void
-\family default
-.
-\end_layout
-
-\begin_layout Standard
-The fundamental data-types are shown in Table
-\begin_inset LatexCommand ref
-reference "cap:Fundamental-Data-Types"
-
-\end_inset
-
-.
- Along with their (mostly) C-derived names, the integer, float, and complex
- data-types are also available using a bit-width convention so that an array
- of the right size can always be ensured (
-\emph on
-e.g.
-
-\emph default
- int8, float64, complex128).
- The C-like names are also accessible using a character code which is also
- shown in the table (use of the character codes, however, is discouraged).
- Names for the data types that would clash with standard Python object names
- are followed by a trailing underscore, '_'.
- These data types are so named because they use the same underlying precision
- as the corresponding Python data types.
- Most scientific users should be able to use the array-enhanced scalar objects
- in place of the Python objects.
- The array-enhanced scalars inherit from the Python objects they can replace
- and should act like them under all circumstances (except for how errors
- are handled in math computations).
-
-\end_layout
-
-\begin_layout Tip
-The array types
-\series bold
-bool
-\series default
-_,
-\series bold
-int
-\series default
-_,
-\series bold
-complex
-\series default
-_,
-\series bold
-float
-\series default
-_,
-\series bold
-object
-\series default
-_,
-\series bold
-unicode
-\series default
-_, and
-\series bold
-str_
-\series default
- are enhanced-scalars.
- They are very similar to the standard Python types (without the trailing
- underscore) and inherit from them (except for bool_ and object_).
- They can be used in place of the standard Python types whenever desired.
- Whenever a data type is required, as an argument, the standard Python types
- are recognized as well.
-\end_layout
-
-\begin_layout Standard
-Three of the data types are flexible in that they can have items that are
- of an arbitrary size: the
-\family typewriter
-str_
-\family default
- type, the
-\family typewriter
-unicode_
-\family default
- type, and the
-\family typewriter
-void
-\family default
- type.
- While, you can specify an arbitrary size for these types, every item in
- an array is still of that specified size.
- The void type, for example, allows for arbitrary records to be defined
- as elements of the array, and can be used to define exotic types built
- on top of the basic
-\family typewriter
-ndarray
-\family default
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Fundamental-Data-Types"
-
-\end_inset
-
-Built-in array-scalar types corresponding to data-types for an ndarray.
- The bold-face types correspond to standard Python types.
- The object_ type is special because arrays with dtype='O' do not return
- an array scalar on item access but instead return the actual object referenced
- in the array.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="24" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Type
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Bit-Width
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Character
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-bool_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-boolXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'?'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-byte
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-intXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'b'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-short
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'h'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-intc
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'i'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-int_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'l'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-longlong
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'q'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-intp
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'p'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ubyte
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-uintXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'B'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ushort
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'H'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-uintc
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'I'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-uint
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'L'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ulonglong
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'Q'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-uintp
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'P'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-single
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-floatXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'f'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-float_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'d'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-longfloat
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'g'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-csingle
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-complexXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'F'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-complex_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'D'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-clongfloat
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'G'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-object_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'O'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-str_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'S#'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-unicode_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'U#'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-void
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'V#'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Note
-The two types
-\family typewriter
-intp
-\family default
- and
-\family typewriter
-uintp
-\family default
- are not separate types.
- They are names bound to a specific integer type just large enough to hold
- a memory address (a pointer) on the platform.
-\end_layout
-
-\begin_layout Warning
-Numeric Compatibility: If you used old typecode characters in your Numeric
- code (which was never recommended), you will need to change some of them
- to the new characters.
- In particular, the needed changes are 'c->'S1', 'b'->'B', '1'->'b', 's'->'h',
- 'w'->'H', and 'u'->'I'.
- These changes make the typecharacter convention more consistent with other
- Python modules such as the struct module.
-\end_layout
-
-\begin_layout Standard
-The fundamental data-types are arranged into a hierarchy of Python type-objects
- shown in Figure
-\begin_inset LatexCommand ref
-reference "cap:Hierarchy-of-type"
-
-\end_inset
-
-.
- Each of the leaves on this hierarchy correspond to actual data-types that
- arrays can have (in other words, there is a built in dtype object associated
- with each of these new types).
- They also correspond to new Python objects that can be created.
- These new objects are
-\begin_inset Quotes eld
-\end_inset
-
-scalar
-\begin_inset Quotes erd
-\end_inset
-
- types corresponding to each fundamental data-type.
- Their purpose is to smooth out the rough edges that result when mixing
- scalar and array operations.
- These scalar objects will be discussed in more detail in Chapter
-\begin_inset LatexCommand ref
-reference "cha:Scalar-objects"
-
-\end_inset
-
-.
- The other types in the hierarchy define particular categories of types.
- These categories can be useful for testing whether or not the object returned
- by
-\family typewriter
-self.dtype.type
-\family default
- is of a particular class (using
-\family typewriter
-issubclass
-\family default
-).
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\align center
-\begin_inset Graphics
- filename Figures/hierarchy.eps
- lyxscale 75
- width 95text%
- keepAspectRatio
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Hierarchy-of-type"
-
-\end_inset
-
-Hierarchy of type objects representing the array data types.
- Not shown are the two integer types
-\family typewriter
-intp
-\family default
- and
-\family typewriter
-uintp
-\family default
- which just point to the integer type that holds a pointer for the platform.
- All the number types can be obtained using bit-width names as well.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Basic indexing (slicing)
-\end_layout
-
-\begin_layout Standard
-Indexing
-\begin_inset LatexCommand index
-name "indexing"
-
-\end_inset
-
- is a powerful tool in Python and NumPy takes full advantage of this power.
- In fact, some of capabilities of Python's indexing were first established
- by the needs of Numeric users.
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-For example, the ability to index with a comma separated list of objects
- and have it correspond to indexing with a tuple is a feature added to Python
- at the request of the NumPy community.
- The Ellipsis object was also added to Python explicitly for the NumPy community.
- Extended slicing (wherein a step can be provided) was also a feature added
- to Python because of Numeric.
-\end_layout
-
-\end_inset
-
- Indexing is also sometimes called slicing in Python, and slicing for an
-
-\family typewriter
-ndarray
-\family default
- works very similarly as it does for other Python sequences.
- There are three big differences: 1) slicing can be done over multiple dimension
-s, 2) exactly one ellipsis object can be used to indicate several dimensions
- at once, 3) slicing cannot be used to expand the size of an array (unlike
- lists).
-\end_layout
-
-\begin_layout Standard
-A few examples should make slicing more clear.
- Suppose
-\begin_inset Formula $A$
-\end_inset
-
- is a
-\begin_inset Formula $10\times20$
-\end_inset
-
- array, then
-\begin_inset Formula $A[3]$
-\end_inset
-
- is the same as
-\begin_inset Formula $A[3,:]$
-\end_inset
-
- and represents the 4th length-20
-\begin_inset Quotes eld
-\end_inset
-
-row
-\begin_inset Quotes erd
-\end_inset
-
- of the array.
- On the other hand,
-\begin_inset Formula $A[:,3]$
-\end_inset
-
- represents the 4th length-10
-\begin_inset Quotes eld
-\end_inset
-
-column
-\begin_inset Quotes erd
-\end_inset
-
- of the array.
- Every third element of the 4th column can be selected as
-\begin_inset Formula $A[::3,3]$
-\end_inset
-
-.
- Ellipses can be used to replace zero or more
-\begin_inset Quotes eld
-\end_inset
-
-:
-\begin_inset Quotes erd
-\end_inset
-
- terms.
- In other words, an Ellipsis
-\begin_inset LatexCommand index
-name "Ellipsis"
-
-\end_inset
-
- object expands to zero or more full slice objects (
-\begin_inset Quotes eld
-\end_inset
-
-:
-\begin_inset Quotes erd
-\end_inset
-
-) so that the total number of dimensions in the slicing tuple matches the
- number of dimensions in the array.
- Thus, if
-\begin_inset Formula $A$
-\end_inset
-
- is
-\begin_inset Formula $10\times20\times30\times40$
-\end_inset
-
-, then
-\begin_inset Formula $A[3:,...,4]$
-\end_inset
-
- is equivalent to
-\begin_inset Formula $A[3:,:,:,4]$
-\end_inset
-
- while
-\begin_inset Formula $A[...,3]$
-\end_inset
-
- is equivalent to
-\begin_inset Formula $A[:,:,:,3].$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The following code illustrates some of these concepts:
-\end_layout
-
-\begin_layout MyCode
->>> a = arange(60).reshape(3,4,5); print a
-\newline
-[[[ 0 1 2 3 4]
-\newline
- [ 5 6 7
- 8 9]
-\newline
- [10 11 12 13 14]
-\newline
- [15 16 17 18 19]]
-\newline
-
-\newline
- [[20 21 22 23 24]
-\newline
- [25 26 27
- 28 29]
-\newline
- [30 31 32 33 34]
-\newline
- [35 36 37 38 39]]
-\newline
-
-\newline
- [[40 41 42 43 44]
-\newline
- [45 46 47
- 48 49]
-\newline
- [50 51 52 53 54]
-\newline
- [55 56 57 58 59]]]
-\end_layout
-
-\begin_layout Standard
-\InsetSpace ~
-
-\end_layout
-
-\begin_layout MyCode
->>> print a[...,3]
-\newline
-[[ 3 8 13 18]
-\newline
- [23 28 33 38]
-\newline
- [43 48 53 58]]
-\newline
->>> print a[1,...,3]
-\newline
-[23
- 28 33 38]
-\newline
->>> print a[:,:,2]
-\newline
-[[ 2 7 12 17]
-\newline
- [22 27 32 37]
-\newline
- [42 47 52 57]]
-\newline
->>>
- print a[0,::2,::2]
-\newline
-[[ 0 2 4]
-\newline
- [10 12 14]]
-\end_layout
-
-\begin_layout Section
-Memory Layout of
-\family typewriter
-ndarray
-\end_layout
-
-\begin_layout Standard
-On a fundamental level, an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array object is just a one-dimensional sequence of memory with
- fancy indexing code that maps an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index into a one-dimensional index.
- The one-dimensional index is necessary on some level because that is how
- memory is addressed in a computer.
- The fancy indexing, however, can be very helpful for translating our ideas
- into computer code.
- This is because many concepts we wish to model on a computer have a natural
- representation as an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- While this is especially true in science and engineering, it is also applicable
- to many other arenas which can be appreciated by considering the popularity
- of the spreadsheet as well as
-\begin_inset Quotes eld
-\end_inset
-
-image processing
-\begin_inset Quotes erd
-\end_inset
-
- applications.
-\end_layout
-
-\begin_layout Warning
-Some high-level languages give pre-eminence to a particular use of 2-dimensional
- arrays as Matrices.
- In NumPy, however, the core object is the more general
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- NumPy defines a matrix object as a sub-class of the N-dimensional array.
-
-\end_layout
-
-\begin_layout Standard
-In order to more fully understand the array object along with its attributes
- and methods it is important to learn more about how an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array is represented in the computer's memory.
- A complete understanding of this layout is only essential for optimizing
- algorithms operating on general purpose arrays.
- But, even for the casual user, a general understanding of memory layout
- will help to explain the use of certain array attributes that may otherwise
- be mysterious.
-
-\end_layout
-
-\begin_layout Subsection
-Contiguous Memory Layout
-\end_layout
-
-\begin_layout Standard
-There is a fundamental ambiguity in how the mapping to a one-dimensional
- index can take place which is illustrated for a 2-dimensional array in
- Figure
-\begin_inset LatexCommand ref
-reference "cap:Options-for-memory"
-
-\end_inset
-
-.
- In that figure, each block represents a chunk of memory that is needed
- for representing the underlying array element.
- For example, each block could represent the 8 bytes needed to represent
- a double-precision floating point number.
-
-\end_layout
-
-\begin_layout Standard
-In the figure, two arrays are shown, a
-\begin_inset Formula $4x3$
-\end_inset
-
- array and a
-\begin_inset Formula $3x4$
-\end_inset
-
- array.
- Each of these arrays takes 12 blocks of memory shown as a single, contiguous
- segment.
- How this memory is used to form the abstract 2-dimensional array can vary,
- however, and the
-\family typewriter
-ndarray
-\family default
- object supports both styles.
- Which style is in use can be interrogated by the use of the flags attribute
- which returns a dictionary of the state of array flags.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\align center
-\begin_inset Graphics
- filename Figures/contiguous.eps
- width 85text%
- keepAspectRatio
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Options-for-memory"
-
-\end_inset
-
-Options for memory layout of a 2-dimensional array.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-In the C-style of
-\begin_inset Formula $N$
-\end_inset
-
--dimensional indexing shown on the left of Figure
-\begin_inset LatexCommand ref
-reference "cap:Options-for-memory"
-
-\end_inset
-
- the last
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index
-\begin_inset Quotes eld
-\end_inset
-
-varies the fastest.
-\begin_inset Quotes erd
-\end_inset
-
- In other words, to move through computer memory sequentially, the last
- index is incremented first, followed by the second-to-last index and so
- forth.
- Some of the algorithms in NumPy that deal with
-\begin_inset Formula $N$
-\end_inset
-
--dimensional arrays work best with this kind of data.
-
-\end_layout
-
-\begin_layout Standard
-In the Fortran-style of
-\begin_inset Formula $N$
-\end_inset
-
--dimensional indexing shown on the right of Figure
-\begin_inset LatexCommand ref
-reference "cap:Options-for-memory"
-
-\end_inset
-
-, the first
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index
-\begin_inset Quotes eld
-\end_inset
-
-varies the fastest.
-\begin_inset Quotes erd
-\end_inset
-
- Thus, to move through computer memory sequentially, the first index is
- incremented first until it reaches the limit in that dimension, then the
- second index is incremented and the first index is reset to zero.
- While NumPy can be compiled without the use of a Fortran compiler, several
- modules of SciPy (available separately) rely on underlying algorithms written
- in Fortran.
- Algorithms that work on
-\begin_inset Formula $N$
-\end_inset
-
--dimensional arrays that are written in Fortran typically expect Fortran-style
- arrays.
-
-\end_layout
-
-\begin_layout Standard
-The two-styles of memory layout for arrays are connected through the transpose
- operation.
- Thus, if
-\begin_inset Formula $A$
-\end_inset
-
- is a (contiguous) C-style array, then the same block of memory can be used
- to represent
-\begin_inset Formula $A^{T}$
-\end_inset
-
- as a (contiguous) Fortran-style array.
- This kind of understanding can be useful when trying to optimize the wrapping
- of Fortran subroutines, or if a more detailed understanding of how to write
- algorithms for generally-indexed arrays is desired.
- But, fortunately, the casual user who does not care if an array is copied
- occasionally to get it into the right orientation needed for a particular
- algorithm can forget about how the array is stored in memory and just visualize
- it as an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array (that is, after all, the whole point of creating the
-
-\family typewriter
-ndarray
-\family default
- object in the first place).
-
-\end_layout
-
-\begin_layout Subsection
-Non-contiguous memory layout
-\end_layout
-
-\begin_layout Standard
-Both of the examples presented above are
-\emph on
-single-segment
-\begin_inset LatexCommand index
-name "single-segment"
-
-\end_inset
-
-
-\emph default
- arrays where the entire array is visited by sequentially marching through
- memory one element at a time.
- When an algorithm in C or Fortran expects an N-dimensional array, this
- single segment (of a certain fundamental type) is usually what is expected
- along with the shape
-\begin_inset Formula $N$
-\end_inset
-
--tuple.
- With a single-segment of memory representing the array, the one-dimensional
- index into computer memory can always be computed from the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index.
- This concept is explored further in the following paragraphs.
-\end_layout
-
-\begin_layout Standard
-Let
-\begin_inset Formula $n_{i}$
-\end_inset
-
- be the value of the
-\begin_inset Formula $i^{\textrm{th}}$
-\end_inset
-
- index into an array whose shape is represented by the
-\begin_inset Formula $N$
-\end_inset
-
- integers
-\begin_inset Formula $d_{i}$
-\end_inset
-
- (
-\begin_inset Formula $i=0\ldots N-1).$
-\end_inset
-
- Then, the one-dimensional index into a C-style contiguous array is
-\begin_inset Formula \[
-n^{C}=\sum_{i=0}^{N-1}n_{i}\prod_{j=i+1}^{N-1}d_{j}\]
-
-\end_inset
-
- while the one-dimensional index into a Fortran-style contiguous array is
-
-\begin_inset Formula \[
-n^{F}=\sum_{i=0}^{N-1}n_{i}\prod_{j=0}^{i-1}d_{j}.\]
-
-\end_inset
-
- In these formulas we are assuming that
-\begin_inset Formula \[
-\prod_{j=k}^{m}d_{j}=d_{k}d_{k+1}\cdots d_{m-1}d_{m}\]
-
-\end_inset
-
-so that if
-\begin_inset Formula $m<k,$
-\end_inset
-
- the product is
-\begin_inset Formula $1.$
-\end_inset
-
- While perfectly general, these formulas may be a bit confusing at first
- glimpse.
- Let's see how they expand out for determining the one-dimensional index
- corresponding to the element
-\begin_inset Formula $\left(1,3,2\right)$
-\end_inset
-
- of a
-\begin_inset Formula $4\times5\times6$
-\end_inset
-
- array.
- If the array is stored as Fortran contiguous, then
-\begin_inset Formula \begin{eqnarray*}
-n^{F} & = & n_{0}\cdot\left(1\right)+n_{1}\cdot(4)+n_{2}\cdot\left(4\cdot5\right)\\
- & = & 1+3\cdot4+2\cdot20=53.\end{eqnarray*}
-
-\end_inset
-
- On the other hand, if the array is stored as C contiguous, then
-\begin_inset Formula \begin{eqnarray*}
-n^{C} & = & n_{0}\cdot\left(5\cdot6\right)+n_{1}\cdot\left(6\right)+n_{2}\cdot\left(1\right)\\
- & = & 1\cdot30+3\cdot6+2\cdot1=50.\end{eqnarray*}
-
-\end_inset
-
- The general pattern should be more clear from these examples.
-
-\end_layout
-
-\begin_layout Standard
-The formulas for the one-dimensional index of the N-dimensional arrays reveal
- what results in an important generalization for memory layout.
- Notice that each formula can be written as
-\begin_inset Formula \[
-n^{X}=\sum_{i=0}^{N-1}n_{i}s_{i}^{X}\]
-
-\end_inset
-
- where
-\begin_inset Formula $s_{i}^{X}$
-\end_inset
-
- gives the
-\emph on
-stride
-\begin_inset LatexCommand index
-name "stride"
-
-\end_inset
-
-
-\emph default
- for dimension
-\begin_inset Formula $i$
-\end_inset
-
-.
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-Our definition of stride here is an element-based stride, while the strides
- attribute returns a byte-based stride.
- The byte-based stride is the element itemsize multiplied by the element-based
- stride.
-\end_layout
-
-\end_inset
-
- Thus, for C and Fortran contiguous arrays respectively we have
-\begin_inset Formula \begin{eqnarray*}
-s_{i}^{C} & = & \prod_{j=i+1}^{N-1}d_{j}=d_{i+1}d_{i+2}\cdots d_{N-1},\\
-s_{i}^{F} & = & \prod_{j=0}^{i-1}d_{j}=d_{0}d_{1}\cdots d_{i-1}.\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The stride is how many elements in the underlying one-dimensional layout
- of the array one must jump in order to get to the next array element of
- a specific dimension in the N-dimensional layout.
- Thus, in a C-style
-\begin_inset Formula $4\times5\times6$
-\end_inset
-
- array one must jump over 30 elements to increment the first index by one,
- so 30 is the stride for the first dimension (
-\begin_inset Formula $s_{0}^{C}=30$
-\end_inset
-
-).
- If, for each array, we define a strides tuple with
-\begin_inset Formula $N$
-\end_inset
-
- integers, then we have pre-computed and stored an important piece of how
- to map the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index to the one-dimensional one used by the computer.
-
-\end_layout
-
-\begin_layout Standard
-In addition to providing a pre-computed table for index mapping, by allowing
- the strides tuple to consist of arbitrary integers we have provided a more
- general layout for the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- As long as we always use the stride information to move around in the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array, we can use any convenient layout we wish for the underlying
- representation as long as it is regular enough to be defined by constant
- jumps in each dimension.
- The
-\family typewriter
-ndarray
-\family default
- object of NumPy uses this stride information and therefore the underlying
- memory of an
-\family typewriter
-ndarray
-\family default
- can be laid out dis-contiguously.
-
-\end_layout
-
-\begin_layout Note
-Several algorithms in NumPy work on arbitrarily strided arrays.
- However, some algorithms require single-segment arrays.
- When an irregularly strided array is passed in to such algorithms, a copy
- is automatically made.
-
-\end_layout
-
-\begin_layout Standard
-An important situation where irregularly strided arrays occur is array indexing.
- Consider again Figure
-\begin_inset LatexCommand ref
-reference "cap:Options-for-memory"
-
-\end_inset
-
-.
- In that figure a high-lighted sub-array is shown.
- Define
-\begin_inset Formula $C$
-\end_inset
-
- to be the
-\begin_inset Formula $4\times3$
-\end_inset
-
- C contiguous array and
-\begin_inset Formula $F$
-\end_inset
-
- to be the
-\begin_inset Formula $3\times4$
-\end_inset
-
- Fortran contiguous array.
- The highlighted areas can be written respectively as
-\begin_inset Formula $C$
-\end_inset
-
-[1:3,1:3] and
-\begin_inset Formula $F$
-\end_inset
-
-[1:3,1:3].
- As evidenced by the corresponding highlighted region in the one-dimensional
- view of the memory, these sub-arrays are neither C contiguous nor Fortran
- contiguous.
- However, they can still be represented by an
-\family typewriter
-ndarray
-\family default
- object using the same striding tuple as the original array used.
- Therefore, a regular indexing expression on an
-\family typewriter
-ndarray
-\family default
- can always produce an
-\family typewriter
-ndarray
-\family default
- object
-\emph on
-without
-\emph default
- copying any data.
- This is sometimes referred to as the
-\begin_inset Quotes eld
-\end_inset
-
-view
-\begin_inset Quotes erd
-\end_inset
-
- feature of array indexing, and one can see that it is enabled by the use
- of striding information in the underlying
-\family typewriter
-ndarray
-\family default
- object.
- The greatest benefit of this feature is that it allows indexing to be done
- very rapidly and without exploding memory usage (because no copies of the
- data are made).
-\end_layout
-
-\begin_layout Section
-Universal Functions for arrays
-\end_layout
-
-\begin_layout Standard
-NumPy provides a wealth of mathematical functions that operate on then ndarray
- object.
- From algebraic functions such as addition and multiplication to trigonometric
- functions such as
-\begin_inset Formula $\sin,$
-\end_inset
-
- and
-\begin_inset Formula $\cos$
-\end_inset
-
-.
- Each universal function
-\begin_inset LatexCommand index
-name "universal function"
-
-\end_inset
-
- (
-\family typewriter
-ufunc
-\family default
-
-\begin_inset LatexCommand index
-name "ufunc"
-
-\end_inset
-
-) is an instance of a general class so that function behavior is the same.
- All ufuncs perform element-by-element operations over an array or a set
- of arrays (for multi-input functions).
- The ufuncs themselves and their methods are documented in Part
-\begin_inset LatexCommand ref
-reference "par:The-Ufunc-Object"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-One important aspect of ufunc behavior that should be introduced early,
- however, is the idea of
-\emph on
-
-\begin_inset LatexCommand index
-name "broadcasting"
-
-\end_inset
-
-broadcasting
-\emph default
-.
- Broadcasting is used in several places throughout NumPy and is therefore
- worth early exposure.
- To understand the idea of broadcasting, you first have to be conscious
- of the fact that all ufuncs are always element-by-element operations.
- In other words, suppose we have a ufunc with two inputs and one output
- (
-\emph on
-e.g.
-
-\emph default
- addition) and the inputs are both arrays of shape
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
-.
- Then, the output is going to be
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
-, and will be the result of applying the underlying function (
-\emph on
-e.g.
-
-\emph default
-
-\begin_inset Formula $+$
-\end_inset
-
-) to each pair of inputs to produce the output at the corresponding
-\begin_inset Formula $N$
-\end_inset
-
--dimensional location.
-
-\end_layout
-
-\begin_layout Standard
-Broadcasting allows ufuncs to deal in a meaningful way with inputs that
- do not have exactly the same shape.
- In particular, the first rule of broadcasting is that if all input arrays
- do not have the same number of dimensions, then a
-\begin_inset Quotes eld
-\end_inset
-
-
-\begin_inset Formula $1$
-\end_inset
-
-
-\begin_inset Quotes erd
-\end_inset
-
- will be repeatedly pre-pended to the shapes of the smaller arrays until
- all the arrays have the same number of dimensions.
- The second rule of broadcasting ensures that arrays with a size of 1 along
- a particular dimension act as if they had the size of the array with the
- largest shape along that dimension.
- The value of the array element is assumed to be the same along that dimension
- for the
-\begin_inset Quotes eld
-\end_inset
-
-broadcasted
-\begin_inset Quotes erd
-\end_inset
-
- array.
- After application of the broadcasting rules, the sizes of all arrays must
- match.
-\end_layout
-
-\begin_layout Standard
-While a little tedious to explain, the broadcasting rules are easy to pick
- up by looking at a couple of examples.
- Suppose there is a
-\family typewriter
-ufunc
-\family default
- with two inputs,
-\begin_inset Formula $A$
-\end_inset
-
- and
-\begin_inset Formula $B$
-\end_inset
-
-.
- Now supposed that
-\begin_inset Formula $A$
-\end_inset
-
- has shape
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
- while
-\begin_inset Formula $B$
-\end_inset
-
- has shape
-\begin_inset Formula $4\times6\times1$
-\end_inset
-
-.
- The ufunc will proceed to compute the
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
- output as if
-\begin_inset Formula $B$
-\end_inset
-
- had been
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
- by assuming that
-\begin_inset Formula $B[...,k]=B[...,0]$
-\end_inset
-
- for
-\begin_inset Formula $k=1,2,3,4$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-Another example illustrates the idea of adding
-\begin_inset Formula $1$
-\end_inset
-
-'s to the beginning of the array shape-tuple.
- Suppose
-\begin_inset Formula $A$
-\end_inset
-
- is the same as above, but
-\begin_inset Formula $B$
-\end_inset
-
- is a length
-\begin_inset Formula $5$
-\end_inset
-
- array.
- Because of the first rule,
-\begin_inset Formula $B$
-\end_inset
-
- will be interpreted as a
-\begin_inset Formula $1\times1\times5$
-\end_inset
-
- array, and then because of the second rule
-\begin_inset Formula $B$
-\end_inset
-
- will be interpreted as a
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
- array by repeating the elements of
-\begin_inset Formula $B$
-\end_inset
-
- in the obvious way.
-
-\end_layout
-
-\begin_layout Standard
-The most common alteration needed is to route-around the automatic pre-pending
- of 1's to the shape of the array.
- If it is desired, to add
-\begin_inset Formula $1$
-\end_inset
-
-'s to the end of the array shape, then dimensions can always be added using
- the
-\family typewriter
-newaxis
-\family default
- name in NumPy:
-\begin_inset Formula $B[...,\textrm{newaxis, newaxis}]$
-\end_inset
-
- returns an array with 2 additional 1's appended to the shape of
-\begin_inset Formula $B.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-One important aspect of broadcasting is the calculation of functions on
- regularly spaced grids.
- For example, suppose it is desired to show a portion of the multiplication
- table by computing the function
-\begin_inset Formula $a*b$
-\end_inset
-
- on a grid with
-\begin_inset Formula $a$
-\end_inset
-
- running from 6 to 9 and
-\begin_inset Formula $b$
-\end_inset
-
- running from 12 to 16.
- The following code illustrates how this could be done using ufuncs and
- broadcasting.
-
-\end_layout
-
-\begin_layout MyCode
->>> a = arange(6, 10); print a
-\newline
-[6 7 8 9]
-\newline
->>> b = arange(12, 17); print b
-\newline
-[12
- 13 14 15 16]
-\newline
->>> table = a[:,newaxis] * b
-\newline
->>> print table
-\newline
-[[ 72 78 84 90
- 96]
-\newline
- [ 84 91 98 105 112]
-\newline
- [ 96 104 112 120 128]
-\newline
- [108 117 126 135 144]]
-\end_layout
-
-\begin_layout Section
-Summary of new features
-\end_layout
-
-\begin_layout Standard
-More information about using arrays in Python can be found in the old Numeric
- documentation at
-\begin_inset LatexCommand htmlurl
-name "http://numeric.scipy.org"
-target "http://numeric.scipy.org"
-
-\end_inset
-
-.
- Quite a bit of that documentation is still accurate, especially in the
- discussion of array basics.
- There are significant differences, however, and this book seeks to explain
- them in detail.
- The following list tries to summarize the significant new features (over
- Numeric) available in the
-\family typewriter
-ndarray
-\family default
- and
-\family typewriter
-ufunc
-\family default
- objects of NumPy:
-\end_layout
-
-\begin_layout Enumerate
-more data types (all standard C-data types plus complex floats, Boolean,
- string, unicode, and void *);
-\end_layout
-
-\begin_layout Enumerate
-flexible data types where each array can have a different itemsize (but
- all elements of the same array still have the same itemsize);
-\end_layout
-
-\begin_layout Enumerate
-there is a true Python scalar type (contained in a hierarchy of types) for
- every data-type an array can have;
-\end_layout
-
-\begin_layout Enumerate
-data-type objects define the data-type with support for data-type objects
- with fields and subarrays which allow record arrays with nested records;
-\end_layout
-
-\begin_layout Enumerate
-many more array methods in addition to functional counterparts;
-\end_layout
-
-\begin_layout Enumerate
-attributes more clearly distinguished from methods (attributes are intrinsic
- parts of an array so that setting them changes the array itself);
-\end_layout
-
-\begin_layout Enumerate
-array scalars covering all data types which inherit from Python scalars
- when appropriate;
-\end_layout
-
-\begin_layout Enumerate
-arrays can be misaligned, swapped, and in Fortran order in memory (facilitates
- memory-mapped arrays);
-\end_layout
-
-\begin_layout Enumerate
-arrays can be more easily read from text files and created from buffers
- and iterators;
-\end_layout
-
-\begin_layout Enumerate
-arrays can be quickly written to files in text and/or binary mode;
-\end_layout
-
-\begin_layout Enumerate
-arrays support the removal of the 64-bit memory limitation as long as you
- have Python 2.5 or later;
-\end_layout
-
-\begin_layout Enumerate
-fancy indexing can be done on arrays using integer sequences and Boolean
- masks;
-\end_layout
-
-\begin_layout Enumerate
-coercion rules are altered for mixed scalar / array operations so that scalars
- (anything that produces a 0-dimensional array internally) will not determine
- the output type in such cases.
-\end_layout
-
-\begin_layout Enumerate
-when coercion is needed, temporary buffer-memory allocation is limited to
- a user-adjustable size;
-\end_layout
-
-\begin_layout Enumerate
-errors are handled through the IEEE floating point status flags and there
- is flexibility on a per-thread level for handling these errors;
-\end_layout
-
-\begin_layout Enumerate
-one can register an error callback function in Python to handle errors are
- set to 'call' for their error handling;
-\end_layout
-
-\begin_layout Enumerate
-ufunc reduce, accumulate, and reduceat can take place using a different
- type then the array type if desired (without copying the entire array);
-\end_layout
-
-\begin_layout Enumerate
-ufunc output arrays passed in can be a different type than expected from
- the calculation;
-\end_layout
-
-\begin_layout Enumerate
-ufuncs take keyword arguments which can specify 1) the error handling explicitly
- and 2) the specific 1-d loop to use by-passing the type-coercion detection.
-
-\end_layout
-
-\begin_layout Enumerate
-arbitrary classes can be passed through ufuncs (__array_wrap__ and __array_prior
-ity__ expand previous __array__ method);
-\end_layout
-
-\begin_layout Enumerate
-ufuncs can be easily created from Python functions;
-\end_layout
-
-\begin_layout Enumerate
-ufuncs have attributes to detail their behavior, including a dynamic doc
- string that automatically generates the calling signature;
-\end_layout
-
-\begin_layout Enumerate
-several new ufuncs (frexp, modf, ldexp, isnan, isfinite, isinf, signbit);
-\end_layout
-
-\begin_layout Enumerate
-new types can be registered with the system so that specialized ufunc loops
- can be written over new type objects;
-\end_layout
-
-\begin_layout Enumerate
-new types can also register casting functions and rules for fitting into
- the
-\begin_inset Quotes eld
-\end_inset
-
-can-cast
-\begin_inset Quotes erd
-\end_inset
-
- hierarchy;
-\end_layout
-
-\begin_layout Enumerate
-C-API enhanced so that more of the functionality is available from compiled
- code;
-\end_layout
-
-\begin_layout Enumerate
-C-API enhanced so array structure access can take place through macros;
-\end_layout
-
-\begin_layout Enumerate
-new iterator objects created for easy handling in C of non-contiguous arrays;
-\end_layout
-
-\begin_layout Enumerate
-new multi-iterator object created for easy handling in C of broadcasting;
-\end_layout
-
-\begin_layout Enumerate
-types have more functions associated with them (no magic function lists
- in the C-code).
- Any function needed is part of the type structure.
-\end_layout
-
-\begin_layout Standard
-All of these enhancements will be documented more thoroughly in the remaining
- portions of this book.
-\end_layout
-
-\begin_layout Section
-Summary of differences with Numeric
-\end_layout
-
-\begin_layout Standard
-An effort was made to retain backwards compatibility with Numeric all the
- way to the C-level.
- This was mostly accomplished, with a few changes that needed to be made
- for consistency of the new system.
- If you are just starting out with NumPy, then this section may be skipped.
-\end_layout
-
-\begin_layout Standard
-There are two steps (one required and one optional) to converting code that
- works with Numeric to work fully with NumPy The first step uses a compatibility
- layer and requires only small changes which can be handled by the numpy.oldnumer
-ic.alter_code1 module.
- Code written to the compatibility layer will work and be supported.
- The purpose of the compatibility layer is to make it easy to convert to
- NumPy and many codes may only take this first step and work fine with NumPy.
- The second step is optional as it removes dependency on the compatibility
- layer and therefore requires a few more extensive changes.
- Many of these changes can be performed by the numpy.oldnumeric.alter_code2
- module, but you may still need to do some final tweaking by hand.
- Because many users will probably be content to only use the first step,
- the alter_code2 module for second-stage migration may not be as complete
- as it otherwise could be.
-
-\end_layout
-
-\begin_layout Subsection
-First-step changes
-\end_layout
-
-\begin_layout Standard
-In order to use the compatibility layer there are still a few changes that
- need to be made to your code.
- Many of these changes can be made by running the alter_code1 module with
- your code as input.
-
-\end_layout
-
-\begin_layout Enumerate
-Importing (the alter_code1 module handles all these changes)
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-import Numeric --> import numpy.oldnumeric as Numeric
-\end_layout
-
-\begin_layout Enumerate
-import Numeric as XX --> import numpy.oldnumeric as XX
-\end_layout
-
-\begin_layout Enumerate
-from Numeric import <name1>,...<nameN> --> from numpy.oldnumeric import <name1>,...,<na
-meN>
-\end_layout
-
-\begin_layout Enumerate
-from Numeric import * --> from numpy.oldnumeric import *
-\end_layout
-
-\begin_layout Enumerate
-Similar name changes need to be made for Matrix, MLab, UserArray, LinearAlgebra,
- RandomArray RNG, RNG.Statistics, and FFT.
- The new names are numpy.oldnumeric.<pkg> where <pkg> is matrix, mlab, user_array,
- linear_algebra, random_array, rng, rng_stats, and fft.
-
-\end_layout
-
-\begin_layout Enumerate
-multiarray and umath (if you used them directly) are now numpy.core.multiarray
- and numpy.core.umath, but it is more future proof to replace usages of these
- internal modules with numpy.oldnumeric.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Method name changes and methods converted to attributes.
- The alter_code1 module handles all these changes.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.typecode() -->
-\emph on
-arr
-\emph default
-.dtype.char
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.iscontiguous() -->
-\emph on
-arr
-\emph default
-.flags.contiguous
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.byteswapped() -->
-\emph on
-arr
-\emph default
-.byteswap()
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.toscalar() -->
-\emph on
-arr
-\emph default
-.item()
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.itemsize() -->
-\emph on
-arr
-\emph default
-.itemsize
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.spacesaver() eliminated
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.savespace() eliminated
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Some of the typecode characters have changed to be more consistent with
- other Python modules (array and struct).
- You should only notice this change if you used the actual typecode characters
- (instead of the named constants).
-
-\newline
-The alter_code1 module will change uses of 'b' to 'B' for internal Numeric
- functions that it knows about because NumPy will interpret 'b' to mean
- a signed byte type (instead of the old unsigned).
- It will also change the character codes when they are used explicitly in
- the .astype method.
- In the compatibility layer (and only in the compatibility layer), typecode-requ
-iring function calls (
-\emph on
-e.g.
-
-\emph default
- zeros, array) understand the old typecode characters.
-
-\newline
-The changes are (Numeric --> NumPy):
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-'b' --> 'B'
-\end_layout
-
-\begin_layout Enumerate
-'1' --> 'b'
-\end_layout
-
-\begin_layout Enumerate
-'s' --> 'h'
-\end_layout
-
-\begin_layout Enumerate
-'w' --> 'H'
-\end_layout
-
-\begin_layout Enumerate
-'u' --> 'I'
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-
-\emph on
-arr.
-\emph default
-flat now returns an indexable 1-D iterator.
- This behaves correctly when passed to a function, but if you expected methods
- or attributes on
-\emph on
-arr.
-\emph default
-flat --- besides .copy() --- then you will need to replace
-\emph on
-arr
-\emph default
-.flat with
-\emph on
-arr.
-\emph default
-ravel() (copies only when necessary) or
-\emph on
-arr.
-\emph default
-flatten() (always copies).
- The alter_code1 module will change
-\emph on
-arr
-\emph default
-.flat to
-\emph on
-arr
-\emph default
-.ravel() unless you used the construct
-\emph on
-arr
-\emph default
-.flat = obj or
-\emph on
-arr
-\emph default
-.flat[ind].
-\end_layout
-
-\begin_layout Enumerate
-If you used type-equality testing on the objects returned from arrays, then
- you need to change this to isinstance testing.
- Thus type(a[0]) is float or type(a[0]) == float should be changed to isinstance
-(a[0], float).
- This is because array scalar objects are now returned from arrays.
- These inherit from the Python scalars where they can, but define their
- own methods and attributes.
- This conversion is done by alter_code1 for the types (float, int, complex,
- and ArrayType)
-\end_layout
-
-\begin_layout Enumerate
-If your code should produce 0-d arrays.
- These no-longer have a length as they should be interpreted similarly to
- real scalars which don't have a length.
-
-\end_layout
-
-\begin_layout Enumerate
-Arrays cannot be tested for truth value unless they are empty (returns False)
- or have only one element.
- This means that if Z: where Z is an array will fail (unless Z is empty
- or has only one element).
- Also the 'and' and 'or' operations (which test for object truth value)
- will also fail on arrays of more than one element.
- Use the .any() and .all() methods to test for truth value of an array.
-
-\end_layout
-
-\begin_layout Enumerate
-Masked arrays return a special nomask object instead of None when there
- is no mask on the array for the functions getmask and attribute access
-
-\emph on
-arr
-\emph default
-.mask
-\end_layout
-
-\begin_layout Enumerate
-Masked array functions have a default axis of None (meaning ravel), make
- sure to specify an axis if your masked arrays are larger than 1-d.
-
-\end_layout
-
-\begin_layout Enumerate
-If you used the construct
-\family typewriter
-arr.shape=<tuple>
-\family default
-, this will not work for array scalars (which can be returned from array
- operations).
- You cannot set the shape of an array-scalar (you can read it though).
- As a result, for more general code you should use
-\family typewriter
-arr=arr.reshape(<tuple>)
-\family default
- which works for both array-scalars and arrays.
-
-\end_layout
-
-\begin_layout Standard
-The alter_code1 script should handle the changes outlined in steps 1-5 above.
- The final incompatibilities in 6-9 are less common and must be modified
- by hand if necessary.
-
-\end_layout
-
-\begin_layout Subsection
-Second-step changes
-\end_layout
-
-\begin_layout Standard
-During the second phase of migration (should it be necessary) the compatibility
- layer is dropped.
- This phase requires additional changes to your code.
- There is another conversion module (alter_code2) which can help but it
- is not complete.
- The changes required to drop dependency on the compatibility layer are
-\end_layout
-
-\begin_layout Enumerate
-Importing
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-numpy.oldnumeric --> numpy
-\end_layout
-
-\begin_layout Enumerate
-from numpy.oldnumeric import * --> from numpy import * (this may clobber
- more names and therefore require further fixes to your code but then you
- didn't do this regularly anyway did you).
- The recommended procedure if this replacement causes problems is to fix
- the use of from numpy.oldnumeric import * to extract only the required names
- and then continue.
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.mlab --> None, the functions come from other places.
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.linear_algebra --> numpy.lilnalg with name changes to the
- functions (made lower case and shorter).
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.random_array --> numpy.random with some name changes to the
- functions.
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeic.fft --> numpy.fft with some name changes to the functions.
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.rng --> None
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.rng_stats --> None
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.user_array --> numpy.lib.user_array
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.matrix --> numpy
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-The typecode names are all lower-case and refer to type-objects corresponding
- to array scalars.
- The character codes are understood by array-creation functions but are
- not given names.
- All named type constants should be replaced with their lower-case equivalents.
- Also, the old character codes '1', 's', 'w', and 'u' are not understood
- as data-types.
- It is probably easiest to manually replace these with Int8, Int16, UInt16,
- and UInt32 and let the alter_code2 script convert the names to lower-case
- typeobjects.
-
-\end_layout
-
-\begin_layout Enumerate
-Keyword and argument changes
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-All
-\family typewriter
-typecode=
-\family default
- keywords must be changed to
-\family typewriter
-dtype=
-\family default
-.
-
-\end_layout
-
-\begin_layout Enumerate
-The
-\family typewriter
-savespace
-\family default
- keyword argument has been removed from all functions where it was present
- (array, sarray, asarray, ones, and zeros).
- The sarray function is equivalent to asarray.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-The default data-type in NumPy is float unlike in Numeric (and numpy.oldnumeric)
- where it was int.
- There are several functions affected by this so that if your code was relying
- on the default data-type, then it must be changed to explicitly add dtype=int.
-\end_layout
-
-\begin_layout Enumerate
-The nonzero function in NumPy returns a tuple of index arrays just like
- the corresponding method.
- There is a flatnonzero function that first ravels the array and then returns
- a single index array.
- This function should be interchangeable with the old use of nonzero.
-
-\end_layout
-
-\begin_layout Enumerate
-The default axis is None (instead of 0) to match the methods for the functions
- take, repeat, sum, average, product, sometrue, alltrue, cumsum, and cumproduct
- (from Numeric) and also for the functions average, max, min, ptp, prod,
- std, and mean (from MLab).
-\end_layout
-
-\begin_layout Enumerate
-The default axis is None (instead of -1) to match the methods for the functions
- argmin, argmax, compress
-\end_layout
-
-\begin_layout Subsection
-Updating code that uses Numeric using alter_codeN
-\end_layout
-
-\begin_layout Standard
-Despite the long list of changes that might be needed given above, it is
- likely that your code does not use any of the incompatible corners and
- it should not be too difficult to convert from Numeric to NumPy.
- For example all of SciPy was converted in about 2-3 days.
- The needed changes are largely search-and replace type changes, and the
- alter_codeN modules can help.
- The modules have two functions which help the process:
-\end_layout
-
-\begin_layout Description
-convertfile (filename, orig=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert the file with the given filename to use NumPy.
- If orig is True, then a backup is first made and given the name filename.orig.
- Then, the file is converted and the updated code written over the top of
- the old file.
-
-\end_layout
-
-\begin_layout Description
-convertall (direc=os.path.curdir, orig=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Converts all the
-\begin_inset Quotes eld
-\end_inset
-
-.py
-\begin_inset Quotes erd
-\end_inset
-
- files in the given directory to use NumPy.
- Backups of all the files are first made if orig is True as explained for
- the convertfile function.
-
-\end_layout
-
-\begin_layout Description
-convertsrc (direc=os.path.curdir, ext=None, orig=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Replace
-\family typewriter
-''Numeric/arrayobject.h
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
- with
-\family typewriter
-''numpy/oldnumeric.h
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
- in all files ending in the list of extensions given by ext (if ext is None,
- then all files are updated).
- If orig is True, then first make a backup file with
-\begin_inset Quotes eld
-\end_inset
-
-.orig
-\begin_inset Quotes erd
-\end_inset
-
- as the extension.
-\end_layout
-
-\begin_layout Description
-converttree (direc=os.path.curdir)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Walks the tree pointed to by direc and converts all
-\begin_inset Quotes eld
-\end_inset
-
-.py
-\begin_inset Quotes erd
-\end_inset
-
- modules in each sub-directory to use NumPy.
- No backups of the files are made.
- Also, converts all .h and .c files to replace
-\family typewriter
-''Numeric/arrayobject.h
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
- with
-\family typewriter
-''numpy/oldnumeric.h
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
- so that NumPy is used.
-
-\end_layout
-
-\begin_layout Subsection
-Changes to think about
-\end_layout
-
-\begin_layout Standard
-Even if you don't make changes to your old code.
- If you are used to coding in Numeric, then you may need to adjust your
- coding style a bit.
- This list provides some helpful things to remember.
-
-\end_layout
-
-\begin_layout Enumerate
-Switch from using typecode characters to bitwidth type names or c-type names
-
-\end_layout
-
-\begin_layout Enumerate
-Convert use of uppercase type-names Int32, Float, etc., to lower case int32,
- float, etc.
-\end_layout
-
-\begin_layout Enumerate
-Convert use of functions to method calls where appropriate but explicitly
- specify any axis arguments for arrays greater than 1-d.
-
-\end_layout
-
-\begin_layout Enumerate
-The names for standard computations like Fourier transforms, linear algebra,
- and random-number generation have changed to conform to the standard of
- lower-case names possibly separated by an underscore.
-\end_layout
-
-\begin_layout Enumerate
-Look for ways to take advantage of advanced slicing, but remember it always
- returns a copy and may be slower at times.
-\end_layout
-
-\begin_layout Enumerate
-Remove any kludges you inserted to eliminate problems with Numeric that
- are now gone.
-
-\end_layout
-
-\begin_layout Enumerate
-Look for ways to take advantage of new features like expanded data-types
- (record-arrays).
-
-\end_layout
-
-\begin_layout Enumerate
-See if you can inherit from the ndarray directly, rather than using user_array.co
-ntainer (UserArray).
- However, if you were using UserArray in a multiple-inheritance hierarchy
- this is going to be more difficult and you can continue to use the standard
- container class in user_array (but notice the name change).
-
-\end_layout
-
-\begin_layout Enumerate
-Watch your usage of scalars extracted from arrays.
- Treating Numeric arrays like lists and then doing math on the elements
- 1 by 1 was always about 2x slower than using real lists in Python.
- This can now be 3x-6x slower than using lists in NumPy because of the increased
- complexity of both the indexing of ndarrays and the math of array scalars.
- If you must select individual scalars from NumPy, you can get some speed
- increases by using the item method to get a standard Python scalar from
- an N-d array and by using the itemset method to place a scalar into a particula
-r location in the N-d array.
- This complicates the appearance of the code, however.
- Also, when using these methods inside a loop, be sure to assign the methods
- to a local variable to avoid the attribute look-up at each loop iteration.
-
-\end_layout
-
-\begin_layout Standard
-Throughout this book, warnings are inserted when compatibility issues with
- old Numeric are raised.
- While you may not need to make any changes to get code to run with the
- ndarray object, you will likely want to make changes to take advantage
- of the new features of NumPy.
- If you get into a jam during the conversion process, you should be aware
- that Numeric and NumPy can both be used together and they will not interfere
- with each other.
- In addition, if you have Numeric 24.0 or newer, they can even share the
- same memory.
- This makes it easy to use NumPy as well as third-party tools that have
- not made the switch from Numeric yet.
-\end_layout
-
-\begin_layout Section
-Summary of differences with Numarray
-\end_layout
-
-\begin_layout Standard
-Conversion from Numarray can also be relatively painless, depending on how
- dependent your code is on the specific structure of the Numarray ufuncs,
- cfuncs, and various array-like objects.
- The internals of Numarray can be quite different and so depending on how
- intimately you used those internals adapting to NumPy can be more or less
- difficult.
- C-code that used the Numarray C-API can be easily adapted because NumPy
- includes a Numarray-compatible C-API module.
- All you need to do is replace usage of
-\begin_inset Quotes eld
-\end_inset
-
-numarray/libnumarray.h
-\begin_inset Quotes erd
-\end_inset
-
- with
-\begin_inset Quotes eld
-\end_inset
-
-numpy/libnumarray.h
-\begin_inset Quotes erd
-\end_inset
-
- and be sure the directory returned from the Python command numpy.get_numarray_in
-clude() is included in the list of directories used for compilation.
-\end_layout
-
-\begin_layout Standard
-On the Python-side the largest number of differences are in the methods
- and attributes of the array and the way array data-types are represented.
- In addition, arrays containing Python Objects, strings, and records are
- an integral part of the array object and not handled using a separate class
- (although enhanced separate classes do exist for the case of character
- arrays and record arrays).
-
-\end_layout
-
-\begin_layout Standard
-As is the case with Numeric, there is a two-step process available for migrating
- code written for Numarray to work with NumPy.
- This process involves running functions in the modules alter_code1 and
- alter_code2 located in the numarray sub-package of NumPy.
- These modules have interfaces identical to the ones that convert Numeric
- code, but they work to convert code written for numarray.
- The first module will convert your code to use the numarray compatibility
- module (numpy.numarray), while the second will try and help convert code
- to move away from dependency on the compatibility module.
- Because many users will probably be content to only use the first step,
- the alter_code2 module for second-stage migration may not be as complete
- as it otherwise could be.
-
-\end_layout
-
-\begin_layout Standard
-Also, the alter_code1 module is not guaranteed to convert every piece of
- working numarray code to use NumPy.
- If your code relied on the internal module structure of numarray or on
- how the class hierarchy was laid out, then it will need to be changed manually
- to run with NumPy.
- Of course you can still use your code with Numarray installed side-by-side
- and the two array objects should be able to exchange data without copying.
-
-\end_layout
-
-\begin_layout Subsection
-First-step changes
-\end_layout
-
-\begin_layout Standard
-The alter_code1 script makes the following import and attribute/method changes
-\end_layout
-
-\begin_layout Subsubsection
-Import changes
-\end_layout
-
-\begin_layout Itemize
-import numarray --> import numpy.numarray as numarray
-\end_layout
-
-\begin_layout Itemize
-import numarray.package --> import numpy.numarray.package as numarray_package
- with all usages of numarray.package in the code replaced by numarray_package
-\end_layout
-
-\begin_layout Itemize
-import numarray as <name> --> import numpy.numarray s <name>
-\end_layout
-
-\begin_layout Itemize
-import numarray.package as <name> --> import numpy.numarray.package as <name>
-\end_layout
-
-\begin_layout Itemize
-from numarray import <names> --> from numpy.numarray import <names>
-\end_layout
-
-\begin_layout Itemize
-from numarray.package import <names> --> from numpy.numarray.package import
- <names>
-\end_layout
-
-\begin_layout Subsubsection
-Attribute and method changes
-\end_layout
-
-\begin_layout Itemize
-.imaginary --> .imag
-\end_layout
-
-\begin_layout Itemize
-.flat --> probably .ravel() (Many usages will still work correctly because
- you can index and assign to self.flat)
-\end_layout
-
-\begin_layout Itemize
-.byteswapped() --> .byteswap(False)
-\end_layout
-
-\begin_layout Itemize
-.byteswap() --> .byteswap(True) (Returns a reference to self instead of None).
-
-\end_layout
-
-\begin_layout Itemize
-self.info() --> numarray.info(self)
-\end_layout
-
-\begin_layout Itemize
-.isaligned() --> .flags.aligned
-\end_layout
-
-\begin_layout Itemize
-.isbyteswapped() --> not .dtype.isnative (the byte-order is a property of the
- data-type object not the array itself in NumPy).
-
-\end_layout
-
-\begin_layout Itemize
-.iscontiguous() --> .flags.c_contiguous
-\end_layout
-
-\begin_layout Itemize
-.is_c_array() --> .dtype.isnative and .flags.carray
-\end_layout
-
-\begin_layout Itemize
-.is_fortran_contiguous() --> .flags.f_contiguous
-\end_layout
-
-\begin_layout Itemize
-.is_f_array() --> .dtype.isnative and .flags.farray
-\end_layout
-
-\begin_layout Itemize
-.itemsize() --> .itemsize
-\end_layout
-
-\begin_layout Itemize
-.nelements() --> .size
-\end_layout
-
-\begin_layout Itemize
-self.new(type) --> numarray.newobj(self, type)
-\end_layout
-
-\begin_layout Itemize
-.repeat(r) --> .repeat(r, axis=0)
-\end_layout
-
-\begin_layout Itemize
-.size() --> .size
-\end_layout
-
-\begin_layout Itemize
-.type() --> numarray.typefrom(self)
-\end_layout
-
-\begin_layout Itemize
-.typecode() --> .dtype.char
-\end_layout
-
-\begin_layout Itemize
-.stddev() --> .std()
-\end_layout
-
-\begin_layout Itemize
-.togglebyteorder() --> numarray.togglebyteorder(self)
-\end_layout
-
-\begin_layout Itemize
-.getshape() --> .shape
-\end_layout
-
-\begin_layout Itemize
-.setshape(obj) --> .shape = obj
-\end_layout
-
-\begin_layout Itemize
-.getflat() --> .ravel()
-\end_layout
-
-\begin_layout Itemize
-.getreal() --> .real
-\end_layout
-
-\begin_layout Itemize
-.setreal(obj) --> .real = obj
-\end_layout
-
-\begin_layout Itemize
-.getimag() --> .imag
-\end_layout
-
-\begin_layout Itemize
-.setimag(obj) --> .imag = obj
-\end_layout
-
-\begin_layout Itemize
-.getimaginary() --> .imag
-\end_layout
-
-\begin_layout Itemize
-.setimaginary(obj) --> .imag = obj
-\end_layout
-
-\begin_layout Subsection
-Second-step changes
-\end_layout
-
-\begin_layout Standard
-One of the notable differences is that several functions (array, arange,
- fromfile, and fromstring) do not take the shape= keyword argument.
- Instead you simply reshape the result using the reshape method.
- Another notable difference is that instead of allowing typecode=, type=,
- and dtype= variants for specifying the data-types, you must use the dtype=
- keyword.
- Other differences include
-\end_layout
-
-\begin_layout Itemize
-matrixmultiply(a,b) --> dot(a,b)
-\end_layout
-
-\begin_layout Itemize
-innerproduct(a,b) --> inner(a,b)
-\end_layout
-
-\begin_layout Itemize
-outerproduct(a,b) --> outer(a,b)
-\end_layout
-
-\begin_layout Itemize
-kroneckerproduct(a,b) --> kron(a,b)
-\end_layout
-
-\begin_layout Itemize
-tensormultiply(a,b) --> None
-\end_layout
-
-\begin_layout Subsection
-Additional Extension modules
-\end_layout
-
-\begin_layout Standard
-There are three extension packages that come included with numarray which
- are now downloaded separately.
- Stubs for these packages exist in numpy.numarray but they try and find the
- actual code by looking at what is currently installed.
- These packages are available in SciPy but can be installed separately as
- well:
-\end_layout
-
-\begin_layout Itemize
-nd_image --> scipy.ndimage
-\end_layout
-
-\begin_layout Itemize
-convolve --> scipy.stsci.convolve
-\end_layout
-
-\begin_layout Itemize
-image --> scipy.stsci.image
-\end_layout
-
-\begin_layout Standard
-If you don't want to install all of scipy, you can grab just these packages
- from SVN using
-\end_layout
-
-\begin_layout LyX-Code
-svn co http://svn.scipy.org/svn/scipy/trunk/Lib/ndimage ndimage
-\end_layout
-
-\begin_layout LyX-Code
-svn co http://svn.scipy.org/svn/scipy/trunk/Lib/stsci stsci
-\end_layout
-
-\begin_layout Standard
-and then run
-\end_layout
-
-\begin_layout LyX-Code
-cd ndimage; sudo python setup.py install
-\end_layout
-
-\begin_layout LyX-Code
-cd stsci; sudo python setup.py install
-\end_layout
-
-\begin_layout Standard
-On a Windows system, you can use the Tortoise SVN client which is integrated
- into the Windows Explorer.
- It can be downloaded from http://tortoisesvn.tigris.org.
- Instructions on how to use it are also provided on that site.
- After downloading the packages from SVN, installation will still require
- a C-compiler (the mingw32 compiler works fine even with MSVC-compiled Python
- as long as you specify --compiler=mingw32).
- Alternatively you can download binary releases of scipy from http://www.scipy.org
- to get the needed functionality or use the Enthon edition of Python.
-\end_layout
-
-\begin_layout Chapter
-The Array Object
-\end_layout
-
-\begin_layout Quotation
-Don't worry about people stealing your ideas.
- If your ideas are any good, you'll have to ram them down people's throats.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Howard Aiken, IBM engineer
-\end_layout
-
-\begin_layout Quotation
-No idea is so antiquated that it was not once modern; no idea is so modern
- that it will not someday be antiquated.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Ellen Glasgow
-\end_layout
-
-\begin_layout Section
-
-\family typewriter
-ndarray
-\family default
- Attributes
-\end_layout
-
-\begin_layout Standard
-Array
-\begin_inset LatexCommand index
-name "ndarray|("
-
-\end_inset
-
- attributes reflect information that is intrinsic to the array itself.
- Generally, accessing an array through its attributes allows you to get
- and sometimes set intrinsic properties of the array without creating a
- new array.
- The exposed attributes are the core parts of an array and only some of
- them can be reset meaningfully without creating a new array.
- Table
-\begin_inset LatexCommand ref
-reference "cap:ndarray-attributes"
-
-\end_inset
-
- shows all the attributes
-\begin_inset LatexCommand index
-name "ndarray!attributes|("
-
-\end_inset
-
- with a brief description.
- Detailed information on each attribute is given below.
-\end_layout
-
-\begin_layout Warning
-Numeric Compatibility: you should check your old use of the .flat attribute.
- This attribute now returns an iterator object which acts like a 1-d array
- in terms of indexing.
- while it does not share all the attributes or methods of an array, it will
- be interpreted as an array in functions that take objects and convert them
- to arrays.
- Furthermore, Any changes in an array converted from a 1-d iterator will
- be reflected back in the original array when the converted array is deleted.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:ndarray-attributes"
-
-\end_inset
-
-Attributes of the
-\family typewriter
-ndarray
-\family default
-.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-vspace*{-0.2in}
-\backslash
-setlength{
-\backslash
-extrarowheight}{0.25eM}
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="18" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="1in">
-<column alignment="center" valignment="top" leftline="true" width="1in">
-<column alignment="block" valignment="top" leftline="true" rightline="true" width="3in">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Attribute
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Settable
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-flags
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-special array-connected dictionary-like object with attributes showing the
- state of flags in this array; only the flags WRITEABLE, ALIGNED, and UPDATEIFCO
-PY can be modified by setting attributes of this object
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-shape
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-tuple showing the array shape; setting this attribute re-shapes the array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-strides
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-tuple showing how many
-\emph on
-bytes
-\emph default
- must be jumped in the data segment to get from one entry to the next
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-ndim
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-number of dimensions in array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-data
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-buffer object loosely wrapping the array data (only works for single-segment
- arrays)
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-size
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-total number of elements
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-itemsize
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-size (in bytes) of each element
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-nbytes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-total number of bytes used
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-base
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-object this array is using for its data buffer, or None if it owns its own
- memory
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-dtype
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-data-type object for this array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-real
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-real part of the array; setting copies data to real part of current array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-imag
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-imaginary part, or read-only zero array if type is not complex; setting
- works only if type is complex
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-flat
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-one-dimensional, indexable iterator object that acts somewhat like a 1-d
- array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-ctypes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-object to simplify the interaction of this array with the ctypes module
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-__array_interface__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-dictionary with keys (data, typestr, descr, shape, strides) for compliance
- with Python side of array protocol
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-__array_struct__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-array interface on C-level
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-__array_priority__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-always 0.0 for base type
-\family typewriter
-ndarray
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Memory Layout attributes
-\end_layout
-
-\begin_layout Description
-flags
-\begin_inset LatexCommand index
-name "ndarray!attributes!flags"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Array flags
-\begin_inset LatexCommand index
-name "ndarray!flags|("
-
-\end_inset
-
- provide information about how the memory area used for the array is to
- be interpreted.
- There are 6 Boolean flags in use which govern whether or not:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-C_CONTIGUOUS\InsetSpace ~
-(C) the data is in a single, C-style contiguous segment;
-\end_layout
-
-\begin_layout Description
-F_CONTIGUOUS\InsetSpace ~
-(F) the data is in a single, Fortran-style contiguous segment;
-\end_layout
-
-\begin_layout Description
-OWNDATA\InsetSpace ~
-(O) the array owns the memory it uses or if it borrows it from another
- object (if this is False, the base attribute retrieves a reference to the
- object this array obtained its data from);
-\end_layout
-
-\begin_layout Description
-WRITEABLE\InsetSpace ~
-(W) the data area can be written to;
-\end_layout
-
-\begin_layout Description
-ALIGNED\InsetSpace ~
-(A) the data and strides are aligned appropriately for the hardware
- (as determined by the compiler);
-\end_layout
-
-\begin_layout Description
-UPDATEIFCOPY\InsetSpace ~
-(U) this array is a copy of some other array (referenced by
-
-\family typewriter
-.base
-\family default
-).
- When this array is deallocated, the base array will be updated with the
- contents of this array.
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- Only the
-\series bold
-UPDATEIFCOPY
-\series default
-,
-\series bold
-WRITEABLE
-\series default
-, and
-\series bold
-ALIGNED
-\series default
- flags can be changed by the user.
- This can be done using the special array-connected, dictionary-like object
- that the flags attribute returns.
- By setting elements in this dictionary, the underlying array obect's flags
- are altered.
- Flags can also be changed using the method
-\family typewriter
-setflags
-\family default
-(...).
- All flags in the dictionary can be accessed using their first (upper case)
- letter as well as the full name.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Certain logical combinations of flags can also be read using named keys
- to the special flags dictionary.
- These combinations are
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-FNC Returns F_CONTIGUOUS and not C_CONTIGUOUS
-\end_layout
-
-\begin_layout Description
-FORC Returns F_CONTIGUOUS or C_CONTIGUOUS (one-segment test).
-\end_layout
-
-\begin_layout Description
-BEHAVED\InsetSpace ~
-(B) Returns ALIGNED and WRITEABLE
-\end_layout
-
-\begin_layout Description
-CARRAY\InsetSpace ~
-(CA) Returns BEHAVED and C_CONTIGUOUS
-\end_layout
-
-\begin_layout Description
-FARRAY_(FA) Returns BEHAVED and F_CONTIGUOUS and not C_CONTIGUOUS
-\end_layout
-
-\end_deeper
-\begin_layout Note
-The array flags cannot be set arbitrarily.
- UPDATEIFCOPY can only be set False.
- the ALIGNED flag can only be set True if the data is truly aligned.
- The flag WRITEABLE can only be set True if the array owns its own memory
- or the ultimate owner of the memory exposes a writeable buffer interface
- (or is a string).
- The exception for string is made so that unpickling can be done without
- copying memory.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Flags can also be set and read using attribute access with the lower-case
- key equivalent (without first letter support).
- Thus, for example, self.flags.c_contiguous returns whether or not the array
- is C-style contiguous, and self.flags.writeable=True changes the array to
- be writeable (if possible)
-\begin_inset LatexCommand index
-name "ndarray!flags|)"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-shape
-\begin_inset LatexCommand index
-name "ndarray!attributes!shape"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The shape of the array is a tuple giving the number of elements in each
- dimension.
- The shape can be reset for single-segment arrays by setting this attribute
- to another tuple.
- The total number of elements cannot change.
- However, a -1 may be used in a dimension entry to indicate that the array
- length in that dimension should be computed so that the total number of
- elements does not change.
-
-\family typewriter
-a.shape=x
-\family default
- is equivalent to
-\family typewriter
-a=a.reshape(x)
-\family default
- except the latter can be used even if the array is not single-segment and
- even if
-\begin_inset Formula $a$
-\end_inset
-
- is an array scalar.
-
-\end_layout
-
-\begin_layout Note
-Setting the shape attribute to () for a 1-element array will turn self into
- a 0-dimensional array.
- This is one of the few ways to get a 0-dimensional array in Python.
- Most other operations will return an array scalar.
- Other ways to get a 0-dimensional array in Python include calling array
- with a scalar argument and calling the squeeze method of an array whose
- shape is all 1's.
-
-\end_layout
-
-\begin_layout Description
-strides
-\begin_inset LatexCommand index
-name "ndarray!attributes!strides"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The strides of an array is a tuple showing for each dimension how many
-
-\emph on
-bytes
-\emph default
- must be skipped to get to the next element in that dimension.
- Setting this attribute to another tuple will change the way the memory
- is viewed.
- This attribute can only be set to a tuple that will not cause the array
- to access unavailable memory.
- If an attempt is made to do so, ValueError is raised.
-\end_layout
-
-\begin_layout Description
-ndim
-\begin_inset LatexCommand index
-name "ndarray!attributes!ndim"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of dimensions of an array is sometimes called the rank of the
- array.
- Getting this attribute reveals the length of the shape tuple and the strides
- tuple.
-
-\end_layout
-
-\begin_layout Description
-data
-\begin_inset LatexCommand index
-name "ndarray!attributes!data"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A buffer object referencing the actual data for this array if this array
- is single-segment.
- If the array is not single-segment, then an AttributeError is raised.
- The buffer object is writeable depending on the status of self.flags.writeable.
-\end_layout
-
-\begin_layout Description
-size
-\begin_inset LatexCommand index
-name "ndarray!attributes!size"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The total number of elements in the array.
-\end_layout
-
-\begin_layout Description
-itemsize
-\begin_inset LatexCommand index
-name "ndarray!attributes!itemsize"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of bytes each element of the array requires.
-
-\end_layout
-
-\begin_layout Description
-nbytes
-\begin_inset LatexCommand index
-name "ndarray!attributes!nbytes"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The total number of bytes used by the array.
- This is equal to
-\family typewriter
-self.itemsize*self.size
-\family default
-.
-\end_layout
-
-\begin_layout Description
-base
-\begin_inset LatexCommand index
-name "ndarray!attributes!base"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If the array does not own its own memory, then this attribute returns the
- object whose memory this array is referencing.
- The returned object may not be the original allocator of the memory, but
- may be borrowing it from still another object.
- If this array does own its own memory, then None is returned unless the
- UPDATEIFCOPY flag is True in which case self.base is the array that will
- be updated when self is deleted.
- UPDATEIFCOPY gets set for an array that is created as a behaved copy of
- a general array.
- The intent is for the misaligned array to get any changes that occur to
- the copy.
-
-\end_layout
-
-\begin_layout Subsection
-Data Type attributes
-\end_layout
-
-\begin_layout Standard
-There are several ways to specify the kind of data that the array is composed
- of.
- The fullest description that preserves field information is always obtained
- using an actual dtype object.
- See Chapter
-\begin_inset LatexCommand ref
-reference "cha:Data-descriptor-objects"
-
-\end_inset
-
- for more discussion on data-type objects and acceptable arguments to construct
- data-type objects.
- Three commonly-used attributes of the data-type object returned are also
- documented here.
-\end_layout
-
-\begin_layout Description
-dtype
-\begin_inset LatexCommand index
-name "ndarray!attributes!dtype"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A data-type object that fully describes (including any defined fields)
- each fixed-length item in the array.
- Whether or not the data is in machine byte-order is also determined by
- the data-type.
- The data-type attribute can be set to anything that can be interpreted
- as a data-type (see Chapter
-\begin_inset LatexCommand ref
-reference "cha:Data-descriptor-objects"
-
-\end_inset
-
- for more information).
- Setting this attribute allows you to change the interpretation of the data
- in the array.
- The new data-type must be compatible with the array's current data-type.
- The new data-type is compatible if it has the same itemsize as the current
- data-type descriptor, or (if the array is a single-segment array) if the
- the array with the new data-type fits in the memory already consumed by
- the array.
-
-\end_layout
-
-\begin_layout Description
-dtype.type
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A Python type object gives the typeobject whose instances represent elements
- of the array.
- This type object can be used to instantiate a scalar of that type.
-
-\end_layout
-
-\begin_layout Description
-dtype.char
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A typecode character unique to each of the 21 built-in types.
-
-\end_layout
-
-\begin_layout Description
-dtype.str
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This string consists of a required first character giving the
-\begin_inset Quotes eld
-\end_inset
-
-endianness
-\begin_inset Quotes erd
-\end_inset
-
- of the data (
-\begin_inset Quotes eld
-\end_inset
-
-<
-\begin_inset Quotes erd
-\end_inset
-
- for little endian,
-\begin_inset Quotes eld
-\end_inset
-
->
-\begin_inset Quotes erd
-\end_inset
-
- for big endian, and
-\begin_inset Quotes eld
-\end_inset
-
-|
-\begin_inset Quotes erd
-\end_inset
-
- for irrelevant), the second character is a code for the kind of data ('b'
- for Boolean, 'i' for signed integer, 'u' for unsigned integer, 'f' for
- floating-point, 'c' for complex floating point, 'O' for object, 'S' for
- ASCII string, 'U' for unicode, and 'V' for void), the final characters
- give the number of bytes each element uses.
-\end_layout
-
-\begin_layout Subsection
-Other attributes
-\end_layout
-
-\begin_layout Description
-T
-\begin_inset LatexCommand index
-name "ndarray!attributes!T"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to self.transpose().
- For self.ndim < 2, it returns a view of self.
-
-\end_layout
-
-\begin_layout Warning
-If arr is 0- or 1-dimensional, then arr.T will return a new ndarray which
- refers to the same data as arr.
- This is because transpose has the effect of reversing the shape attribute
- of an array (whose 0-d and 1-d equivalent is to return the same array).
- This may be surprising if you are thinking of your 1-d array as a
-\begin_inset Quotes eld
-\end_inset
-
-row
-\begin_inset Quotes erd
-\end_inset
-
- or a
-\begin_inset Quotes eld
-\end_inset
-
-column
-\begin_inset Quotes erd
-\end_inset
-
- vector and expected the .T attribute to return the other convention.
-
-\end_layout
-
-\begin_layout Description
-real
-\begin_inset LatexCommand index
-name "ndarray!attributes!real"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The real part of an array.
- For arrays that are not complex this attribute returns the array itself.
- Setting this attribute allows setting just the real part of an array.
- If the array is already real then setting this attribute is equivalent
- to self[...] = values.
-\end_layout
-
-\begin_layout Description
-imag
-\begin_inset LatexCommand index
-name "ndarray!attributes!imag"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A view of the imaginary part of an array.
- For arrays that are not complex, this returns a read-only array of zeros.
- Setting this array allows in-place alteration of the complex part of an
- imaginary array.
- If the array is not complex, then trying to set this attribute raises an
- Error.
-
-\end_layout
-
-\begin_layout Description
-flat
-\begin_inset LatexCommand index
-name "ndarray!attributes!flat"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an iterator object (numpy.flatiter) that acts like a 1-d version
- of the array.
- 1-d indexing works on this array and it can be passed in to most routines
- as an array wherein a 1-d array will be constructed from it.
- The new 1-d array will reference this array's data if this array is C-style
- contiguous, otherwise, new memory will be allocated for the 1-d array,
- the UPDATEIFCOPY flag will be set for the new array, and this array will
- have its WRITEABLE flag set FALSE until the the last reference to the new
- array disappears.
- When the last reference to the new 1-d array disappears, the data will
- be copied over to this non-contiguous array.
- This is done so that a.flat effectively references the current array regardless
- of whether or not it is contiguous or non-contiguous.
- As an example, consider the following code:
-\end_layout
-
-\begin_layout MyCode
->>> a = zeros((4,5))
-\newline
->>> b = ones(6)
-\newline
->>> add(b,b,a[1:3,0:3].flat)
-\newline
-array([[ 2.,
- 2., 2.],
-\newline
- [ 2., 2., 2.]])
-\newline
->>> print a
-\newline
-[[ 0.
- 0.
- 0.
- 0.
- 0.]
-\newline
- [ 2.
- 2.
- 2.
- 0.
- 0.]
-\newline
- [ 2.
- 2.
- 2.
- 0.
- 0.]
-\newline
- [ 0.
- 0.
- 0.
- 0.
- 0.]]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The numpy.flatiter object has two methods:
-\series bold
-__array__()
-\series default
- and
-\series bold
-copy()
-\series default
- and one attribute:
-\series bold
-base
-\series default
-.
- The base attribute returns a reference to the underlying array.
-
-\end_layout
-
-\begin_layout Description
-__array_priority__
-\begin_inset LatexCommand index
-name "ndarray!attributes!\\_\\_array\\_priority\\_\\_"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The array priority attribute is a floating point number useful in mixed
- operations involving two subtypes to decide which subtype is returned.
- The base ndarray object has priority 0.0 and 1.0 is the default subtype priority.
-\end_layout
-
-\begin_layout Subsection
-Array Interface attributes
-\end_layout
-
-\begin_layout Standard
-The array interface
-\begin_inset LatexCommand index
-name "array interface"
-
-\end_inset
-
- (sometimes called array protocol) was created in 2005 as a means for array-like
- Python objects to re-use each other's data buffers intelligently whenever
- possible.
- The ndarray object supports both the Python-side and the C-side of the
- array interface.
- The system is able to consume objects that expose the array interface,
- and array objects can expose their inner workings to other objects that
- support the array interface.
-
-\end_layout
-
-\begin_layout Description
-__array_interface__
-\begin_inset LatexCommand index
-name "ndarray!attributes!\\_\\_array\\_interface\\_\\_"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The python-side of the array interface.
- It is a dictionary with the following attributes:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-data A 2-tuple (dataptr, read-only flag).
- The dataptr is a string giving the address (in hexadecimal format) of the
- array data.
- The read-only flag is True if the array memory is read-only.
-
-\end_layout
-
-\begin_layout Description
-strides The strides tuple.
- Same as
-\series bold
-strides
-\series default
- attribute except None is returned if the array is C-style contiguous.
-\end_layout
-
-\begin_layout Description
-shape The shape tuple.
- Same as
-\series bold
-shape
-\series default
- attribute.
-\end_layout
-
-\begin_layout Description
-typestr A string giving the format of the data.
- Same as
-\series bold
-dtype.str
-\series default
- attribute.
-
-\end_layout
-
-\begin_layout Description
-descr A list of tuples providing the detailed description of this data type.
- This information is obtained from the arrdescr attribute of the dtypedescr
- object associated with each array.
- For arrays with fields, this will return a valid array-protocol descriptor
- list.
- For arrays without defined fields, this returns [('',typestr)].
-\end_layout
-
-\end_deeper
-\begin_layout Description
-__array_struct__
-\begin_inset LatexCommand index
-name "ndarray!attributes!\\_\\_array\\_struct\\_\\_"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A PyCObject that wraps a pointer to a PyArrayInterface structure.
- This is only useful on the C-level for rapid implementation of the array
- interface, using a single attribute lookup.
-\end_layout
-
-\begin_layout Description
-ctypes
-\begin_inset LatexCommand index
-name "ndarray!attributes!ctypes|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This attribute creates an object that makes it easier to use arrays when
- calling out to shared libraries with the ctypes module.
- The returned object has data, shape, and strides attributes which return
- ctypes
-\begin_inset LatexCommand index
-name "ctypes"
-
-\end_inset
-
- objects that can be used as arguments to a shared library.
- These attributes are:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-data A pointer to the memory area of the array as a Python integer.
- This memory area may contain data that is not aligned, or not in correct
- byte-order.
- The memory area may not even be writeable.
- The array flags and data-type of this array should be respected when passing
- this attribute to arbitrary C-code to avoid trouble that can include Python
- crashing.
- User Beware! The value of this attribute is exactly the same as
-\family typewriter
-self.__array_interface__['data'][0]
-\family default
-.
-\end_layout
-
-\begin_layout Description
-shape (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type
- is the C-integer corresponding to dtype('p') on this platform.
- This base-type could be c_int, c_long, or c_longlong depending on the platform.
- The c_intp type is defined accordingly in numpy.ctypeslib.
- The ctypes array contains the shape of the underlying array.
-\end_layout
-
-\begin_layout Description
-strides (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type
- is the same as for the shape attribute.
- This ctypes array contains the strides information from the underlying
- array.
- This strides information is important for showing how many bytes must be
- jumped to get to the next element in the array.
-
-\end_layout
-
-\begin_layout Description
-_as_parameter_ (c_void_p) Returns the data-pointer to the array as a ctypes
- object.
- Among other possible uses, this enables this ctypes object to be used directly
- in a ctypes-loaded call to an arbitrary function.
- Be sure to respect the flags on the array and the size and strides of the
- array so as not to use this memory in-appropriately (see the
-\series bold
-ndpointer
-\series default
- function for how to return a class that can be used with the argtypes attribute
- of ctypes functions).
-
-\end_layout
-
-\end_deeper
-\begin_layout Warning
-Be careful using the ctypes attribute --- especially on temporary arrays
- or arrays constructed on the fly.
- For example, calling (a+b).ctypes.data_as(ctypes.c_void_p) returns a pointer
- to memory that is invalid because the array created as (a+b) is deallocated
- before the next Python statement.
- You can avoid this problem using either c=a+b or ct=(a+b).ctypes.
- In the latter case, ct will hold a reference to the array until ct is deleted
- or re-assigned.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The ctypes object also has several methods which can alter how the shape,
- strides, and data of the underlying object is returned.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-data_as (obj) Return the data pointer cast-to a particular c-types object.
- For example, calling
-\family typewriter
-self._as_parameter_
-\family default
- is equivalent to
-\family typewriter
-self.data_as(ctypes.c_void_p)
-\family default
-.
- Perhaps you want to use the data as a pointer to a ctypes array of floating-poi
-nt data:
-\family typewriter
-self.data_as(ctypes.POINTER(ctypes.c_double))
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-shape_as (obj) Return the shape tuple as an array of some other c-types
- type.
- For example:
-\family typewriter
-self.shape_as(ctypes.c_short)
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-strides_as (obj) Return the strides tuple as an array of some other c-types
- type.
- For example:
-\family typewriter
-self.strides_as(ctypes.c_longlong)
-\family default
-.
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- If the ctypes module is not available, then the ctypes attribute of array
- objects still returns something useful, but ctypes objects are not returned
- and errors may be raised instead.
- In particular, the object will still have the _as_parameter_ attribute
- which will return an integer equal to the data
-\begin_inset LatexCommand index
-name "ndarray!attributes!ctypes|)"
-
-\end_inset
-
- attribute
-\begin_inset LatexCommand index
-name "ndarray!attributes|)"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Section
-
-\family typewriter
-ndarray
-\family default
- Methods
-\end_layout
-
-\begin_layout Standard
-In NumPy, the
-\family typewriter
-ndarray
-\family default
- object has many methods
-\begin_inset LatexCommand index
-name "ndarray!methods|("
-
-\end_inset
-
- which operate on or with the array in some fashion, typically returning
- an array result.
- In Numeric, many of these methods were only library calls.
- These methods are explained in this chapter.
- Whenever the array whose method is being called needs to be referenced
- it will be referred to as
-\emph on
-this array
-\emph default
-, or
-\emph on
-self
-\emph default
-.
- Keyword arguments will be shown.
- Methods that only take one argument do not have keyword arguments.
- Default values for one argument methods will be shown in braces {default}.
-
-\end_layout
-
-\begin_layout Warning
-If you are converting code from Numeric, then you will need to make the
- following (search and replace) conversions:
-\family typewriter
-.typecode() --> .dtype.char
-\family default
-;
-\family typewriter
-.iscontiguous() --> .flags.contiguous
-\family default
-;
-\family typewriter
-.byteswapped() --> .byteswap()
-\family default
-;
-\family typewriter
-.toscalar() --> .item()
-\family default
-; and
-\family typewriter
-.itemsize() --> .itemsize
-\family default
-.
- The numpy.oldnumeric.alter_code1 module can automate this for you.
-\end_layout
-
-\begin_layout Subsection
-Array conversion
-\end_layout
-
-\begin_layout Description
-tolist
-\begin_inset LatexCommand index
-name "ndarray!methods!tolist"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The contents of self as a nested list.
-\end_layout
-
-\begin_layout MyCode
->>> a = array([[1,2,3],[4,5,6]]); print a.tolist()
-\newline
-[[1, 2, 3], [4, 5, 6]]
-\end_layout
-
-\begin_layout Description
-item
-\begin_inset LatexCommand index
-name "ndarray!methods!item"
-
-\end_inset
-
- (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If no arguments are passed in, then this method only works for arrays with
- one element (a.size == 1).
- In this case, it returns a standard Python scalar object (if possible)
- copied from the first element of self.
- When the data type of self is longdouble or clongdouble, this returns a
- scalar array object because there is no available Python scalar that would
- not lose information.
- Void arrays return a buffer object for item() unless fields are defined
- in which case a tuple is returned.
-\end_layout
-
-\begin_layout MyCode
->>> asc = a[0,0].item()
-\newline
->>> type(asc)
-\newline
-<type 'int'>
-\newline
->>> asc
-\newline
-1
-\newline
->>> type(a[0,0])
-\newline
-<type
- 'numpy.int32'>
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If arguments are provided, then they indicate indices into the array (either
- a flat index or an nd-index).
- A standard Python scalar corresponding to the item at the given location
- is then returned.
- This is very similar to self[args] except instead of an array scalar, a
- standard Python scalar is returned.
- This can be useful for speeding up access to elements of the array and
- doing arithmetic on elements of the array using Python's optimized math.
-
-\end_layout
-
-\begin_layout Description
-itemset
-\begin_inset LatexCommand index
-name "ndarray!methods!itemset"
-
-\end_inset
-
- (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- There must be at least 1 argument and define the last argument as item.
- Then, this is equivalent to but faster than self[args] = item.
- The item should be a scalar value and args must select a single item in
- the array.
-\end_layout
-
-\begin_layout Description
-tobytes
-\begin_inset LatexCommand index
-name "ndarray!methods!tobytes"
-
-\end_inset
-
- (order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A Python string showing a copy of the raw contents of data memory.
- The string can be produced in either 'C' or 'Fortran', or 'Any' order (the
- default is 'C'-order).
- 'Any' order means C-order unless the F_CONTIGUOUS flag in the array is
- set, then 'Fortran' order.
-
-\end_layout
-
-\begin_layout Description
-tofile
-\begin_inset LatexCommand index
-name "ndarray!methods!tofile"
-
-\end_inset
-
- (file=, sep='', format='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Write the contents of self to the open file object.
- If file is a string, then open a file of that name first.
- If sep is the empty string, then write the file in binary mode.
- If sep is any other string, write the array in simple text mode separating
- each element with the value of the sep string.
- When the file is written in text mode, the format string can be used to
- alter the appearance of each entry.
- If format is the empty string, then it is equivalent to
-\family typewriter
-
-\begin_inset Quotes eld
-\end_inset
-
-%s
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
-.
- Each element of the array will be converted to a Python scalar,
-\family typewriter
-o
-\family default
-, and written to the file as
-\family typewriter
-
-\begin_inset Quotes eld
-\end_inset
-
-format
-\begin_inset Quotes erd
-\end_inset
-
- % o
-\family default
-.
- Note that writing an array to a file does not store any information about
- the shape, type, or endianness of an array.
- When written in binary mode, tofile is functionally equivalent to
-\family typewriter
-fid.write(self.tobytes())
-\family default
-.
-\end_layout
-
-\begin_layout MyCode
->>> a.tofile('myfile.txt',sep=':',format='%03d')
-\end_layout
-
-\begin_layout MyCode
-Contents of myfile.txt
-\end_layout
-
-\begin_layout MyCode
-001:002:003:004:005:006
-\end_layout
-
-\begin_layout Description
-dump
-\begin_inset LatexCommand index
-name "ndarray!methods!dump"
-
-\end_inset
-
- (file)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Pickle the contents of self to the file object represented by file.
- Equivalent to cPickle.dump(self, file, 2)
-\end_layout
-
-\begin_layout Description
-dumps
-\begin_inset LatexCommand index
-name "ndarray!methods!dumps"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return pickled representation of self as a string.
- Equivalent to cPickle.dumps(self, 2)
-\end_layout
-
-\begin_layout Description
-astype
-\begin_inset LatexCommand index
-name "ndarray!methods!astype"
-
-\end_inset
-
- ({None})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Force conversion of this array to an array with the data type provided
- as the argument.
- If the argument is None, or equal to the data type of self, then return
- a copy of the array.
-
-\end_layout
-
-\begin_layout Description
-byteswap
-\begin_inset LatexCommand index
-name "ndarray!methods!byteswap"
-
-\end_inset
-
- ({False})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Byteswap the elements of the array and return the byteswapped array.
- If the argument is True, then byteswap in-place and return a reference
- to self.
- Otherwise, return a copy of the array with the elements byteswapped.
- The data-type descriptor is not changed so the array will have changed
- numbers.
-\end_layout
-
-\begin_layout Description
-copy
-\begin_inset LatexCommand index
-name "ndarray!methods!copy"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a copy of the array (which is always single-segment, and ALIGNED).
- However, the data-type is preserved (including whether or not the data
- is byteswapped).
-
-\end_layout
-
-\begin_layout Description
-view
-\begin_inset LatexCommand index
-name "ndarray!methods!view"
-
-\end_inset
-
- ({None})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array using the same memory area as self.
- If the optional argument is given, it can be either a typeobject that is
- a sub-type of the ndarray or an object that can be converted to a data-type
- descriptor.
- If the argument is a typeobject then a new array of that Python type is
- returned that uses the information from self.
- If the argument is a data-type descriptor, then a new array of the same
- Python type as self is returned using the given data-type.
-
-\end_layout
-
-\begin_layout MyCode
->>> print a.view(single)
-\newline
-[[ 1.40129846e-45 2.80259693e-45 4.20389539e-45]
-\newline
-
- [ 5.60519386e-45 7.00649232e-45 8.40779079e-45]]
-\newline
->>> a.view(ubyte)
-\newline
-array([[1,
- 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0],
-\newline
- [4, 0, 0, 0, 5, 0, 0, 0, 6, 0,
- 0, 0]], dtype=uint8)
-\end_layout
-
-\begin_layout Description
-getfield
-\begin_inset LatexCommand index
-name "ndarray!methods!getfield"
-
-\end_inset
-
- (dtype=, offset=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a
-\emph on
-field
-\emph default
- of the given array as an array of the given data type.
- A field is a view of the array's data at a certain byte offset interpreted
- as a given data type.
- The returned array is a reference into self, therefore changes made to
- the returned array will be reflected in self.
- This method is particularly useful for record arrays that use a void data
- type, but it can also be used to extract the low (high)-order bytes of
- other array types as well.
- For example, using getfield, you could extract fixed-length substrings
- from an array of strings.
-
-\end_layout
-
-\begin_layout MyCode
->>> a = array(['Hello','World','NumPy'])
-\newline
->>> a.getfield('S2',1)
-\newline
-array(['el',
- 'or', 'um'],
-\newline
- dtype='|S2')
-\end_layout
-
-\begin_layout Description
-setflags
-\begin_inset LatexCommand index
-name "ndarray!methods!setflags"
-
-\end_inset
-
- (write=None, align=None, uic=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively.
- The ALIGNED flag can only be set to True if the data is actually aligned
- according to the type.
- The UPDATEIFCOPY flag can never be set to True.
- The flag WRITEABLE can only be set True if the array owns its own memory
- or the ultimate owner of the memory exposes a writeable buffer interface
- (or is a string).
- The exception for string is made so that unpickling can be done without
- copying memory.
-
-\end_layout
-
-\begin_layout Description
-fill
-\begin_inset LatexCommand index
-name "ndarray!methods!fill"
-
-\end_inset
-
- (scalar)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Fill an array with the scalar value (appropriately converted to the type
- of self).
- If the scalar value is an array or a sequence, then only the first element
- is used.
- This method is usually faster than a[...]=scalar or self.flat=scalar, and always
- interprets its argument as a scalar.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Array conversion methods
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-setlength{
-\backslash
-extrarowheight}{0.1eM}
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="15" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="30text%">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Method
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Arguments
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-astype
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(dtype {None})
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Cast to another data type
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-byteswap
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(inplace {False})
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Byteswap array elements
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-copy
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Copy array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-dump
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(file)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Pickle to stream or file
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-dumps
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Get pickled string
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-fill
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(scalar)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Fill an array with scalar value
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-getfield
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(dtype=, offset=0)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Return a field of the array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-setflags
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(write=None, align=None, uic=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Set array flags
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-tofile
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(file=, sep='', format='')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Raw write to file
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-tolist
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Array as a nested list
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-item
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(*args)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Python scalar extraction
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-itemset
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(*args)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Insert scalar (last argument) into array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-tobytes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(order='C')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-String of raw memory
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-view
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(obj)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-View as another data type or class
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Array shape manipulation
-\end_layout
-
-\begin_layout Standard
-For reshape, resize, and transpose, the single tuple argument may be replaced
- with
-\begin_inset Formula $n$
-\end_inset
-
- integers which will be interpreted as an
-\begin_inset Formula $n$
-\end_inset
-
--tuple.
-\end_layout
-
-\begin_layout Description
-reshape
-\begin_inset LatexCommand index
-name "ndarray!methods!reshape"
-
-\end_inset
-
- (newshape, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array that uses the same data as this array but has a new shape
- given by the newshape tuple (or a scalar to reshape as 1-d).
- The new shape must define an array with the same total number of elements.
- If one of the elements of the new shape tuple is -1, then that dimension
- will be determined such that the overall number of items in the array stays
- constant.
- If possible, the new array will reference the data of the old one.
- If the data must be moved in order to accomplish the reshape, then then
- the new array will contain a copy of the data in self.
- The order argument specifies how the array data should be viewed during
- the reshape (either in 'C' or 'FORTRAN' order).
- This order argument specifies both how the intrinsic raveling to a 1-d
- array should occur as well as how that 1-d array should be used to fill-up
- the new output array.
-
-\end_layout
-
-\begin_layout Description
-resize
-\begin_inset LatexCommand index
-name "ndarray!methods!resize"
-
-\end_inset
-
- (newshape, refcheck=1, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Resize an array in-place.
- This changes self (in-place) to be an array with the new shape, reallocating
- space for the data area if necessary.
- If the data memory must be changed because the number of new elements is
- different than self.size, then an error will occur if this array does not
- own its data or if another object is referencing this one.
- Only a single-segment array can be resized.
- The method returns None.
- To bypass the reference count check, then set refcheck=0.
- The purpose of the reference count check is to make sure you don't use
- this array as a buffer for another Python object and then reallocate the
- memory.
- However, reference counts can increase in other ways so if you are sure
- that you have not shared the memory for this array to another Python object,
- then you may safely set refcheck=0.
-
-\end_layout
-
-\begin_layout Description
-transpose
-\begin_inset LatexCommand index
-name "ndarray!methods!transpose"
-
-\end_inset
-
- (<None>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array view with the shape transposed according to the argument.
- An argument of None is equivalent to range(self.ndim)[::-1].
- The argument can either be a tuple or multiple integer arguments.
- This method returns a new array with permuted shape and strides attributes
- using the same data as self.
-
-\end_layout
-
-\begin_layout MyCode
->>> a = arange(40).reshape((2,4,5))
-\newline
->>> b = a.transpose(2,0,1)
-\newline
->>> print a.shape,
- b.shape
-\newline
-(2, 4, 5) (5, 2, 4)
-\newline
->>> print a.strides, b.strides
-\newline
-(80, 20, 4) (4, 80,
- 20)
-\newline
->>> print a
-\newline
-[[[ 0 1 2 3 4]
-\newline
- [ 5 6 7 8 9]
-\newline
- [10 11 12 13 14]
-\newline
- [15
- 16 17 18 19]]
-\newline
-
-\newline
- [[20 21 22 23 24]
-\newline
- [25 26 27 28 29]
-\newline
- [30 31 32 33 34]
-\newline
- [35
- 36 37 38 39]]]
-\newline
->>> print b
-\newline
-[[[ 0 5 10 15]
-\newline
- [20 25 30 35]]
-\newline
-
-\newline
- [[ 1 6 11 16]
-\newline
-
- [21 26 31 36]]
-\newline
-
-\newline
- [[ 2 7 12 17]
-\newline
- [22 27 32 37]]
-\newline
-
-\newline
- [[ 3 8 13 18]
-\newline
- [23 28 33
- 38]]
-\newline
-
-\newline
- [[ 4 9 14 19]
-\newline
- [24 29 34 39]]]
-\end_layout
-
-\begin_layout Description
-swapaxes
-\begin_inset LatexCommand index
-name "ndarray!methods!swapaxes"
-
-\end_inset
-
- (axis1, axis2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array view with axis1 and axis2 swapped.
- This is a special case of the transpose method with argument equal to arg=range
-(self.ndim); arg[axis1], arg[axis2] = arg[axis2], arg[axis1].
- See the
-\series bold
-rollaxis
-\series default
- function for a routine that transposes the array with the axes rolled instead
- of swapped.
-
-\end_layout
-
-\begin_layout Description
-flatten
-\begin_inset LatexCommand index
-name "ndarray!methods!flatten"
-
-\end_inset
-
- (order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new 1-d array with data copied from self.
- Equivalent to but slightly faster then a.flat.copy().
-
-\end_layout
-
-\begin_layout Description
-ravel
-\begin_inset LatexCommand index
-name "ndarray!methods!ravel"
-
-\end_inset
-
- (order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 1-d version of self.
- If self is single-segment, then the new array references self, otherwise,
- a copy is made.
-\end_layout
-
-\begin_layout Description
-squeeze
-\begin_inset LatexCommand index
-name "ndarray!methods!squeeze"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array with all unit-length dimensions squeezed out.
-\end_layout
-
-\begin_layout Subsection
-Array item selection and manipulation
-\end_layout
-
-\begin_layout Standard
-For array methods that take an axis keyword, it defaults to None.
- If axis is None, then the array is treated as a 1-D array.
- Any other value for axis represents the dimension along which the operation
- should proceed.
-
-\end_layout
-
-\begin_layout Description
-take
-\begin_inset LatexCommand index
-name "ndarray!methods!take"
-
-\end_inset
-
- (indices=, axis=None, out=None, mode='raise')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The functionality of this method is available using the advanced indexing
- ability of the
-\family typewriter
-ndarray
-\family default
- object.
- However, for doing selection along a single axis it is usually faster to
- use take.
- If axis is not None, this method is equivalent to
-\family typewriter
-self[indxobj]
-\family default
- preceeded by
-\family typewriter
-indxobj=[slice(None)]*self.ndim; indxobj[
-\series bold
-axis
-\series default
-] =
-\family default
-
-\family typewriter
-\series bold
-indices
-\family default
-\series default
-.
- It returns the elements or sub-arrays from self indicated by the index
- numbers in indices.
- If axis is None, then this method is equivalent to
-\family typewriter
-self.flat[indices]
-\family default
-.
- The out and mode arguments allow for specification of the output array
- and how out-of-bounds indices will be handled ('raise': raise an error,
- 'wrap': wrap around, 'clip': clip to range)
-\end_layout
-
-\begin_layout Description
-put
-\begin_inset LatexCommand index
-name "ndarray!methods!put"
-
-\end_inset
-
- (indices=, values=, mode='raise')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Performs the equivalent of
-\end_layout
-
-\begin_layout LyX-Code
-for n in
-\series bold
-indices
-\series default
-:
-\end_layout
-
-\begin_layout LyX-Code
- self.flat[n] =
-\series bold
-values
-\series default
-[n]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Values is repeated if it is too short.
- The mode argument specifies what to do if n is too large.
-
-\end_layout
-
-\begin_layout Description
-repeat
-\begin_inset LatexCommand index
-name "ndarray!methods!repeat"
-
-\end_inset
-
- (repeats=, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Copy elements (or sub-arrays selected along axis) of self
-\series bold
-repeats
-\series default
- times.
- The repeats argument must be a sequence of length self.shape[axis] or a
- scalar.
- The repeats argument dictates how many times the element (or sub-array)
- will be repeated in the result array.
-
-\end_layout
-
-\begin_layout Description
-choose
-\begin_inset LatexCommand index
-name "ndarray!methods!choose"
-
-\end_inset
-
- (choices, out=None, mode='raise')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The array must be an integer (or bool) array with entries from
-\begin_inset Formula $0$
-\end_inset
-
- to
-\begin_inset Formula $n$
-\end_inset
-
-.
- Choices is a tuple of
-\begin_inset Formula $n$
-\end_inset
-
- choice arrays:
-\begin_inset Formula $b0,\, b1,\,\ldots\,,\, bn$
-\end_inset
-
-.
- (Alternatively, choices can be replaced with
-\begin_inset Formula $n$
-\end_inset
-
- arguments where each argument is a choice array).
- The return array will be formed from the elements of the choice arrays
- according to the value of the elements of self.
- In other words, the output array will merge the choice arrays together
- by using the value of self at a particular position to select which choice
- array should be used for the output at a particular position.
- The out keyword allows specification of an output array and the clip keyword
- allows different behavior when self contains entries outside the number
- of choices.
- The acceptable arguments to mode are 'raise' (RAISE), 'wrap' (WRAP), and
- 'clip' (CLIP) ('raise' produces an error, 'wrap' converts the number into
- range by periodic wrapping so that numbers <0 have
-\begin_inset Formula $n$
-\end_inset
-
- repeatedly added and numbers >=
-\begin_inset Formula $n$
-\end_inset
-
- have
-\begin_inset Formula $n$
-\end_inset
-
- repeatedly subtracted, and 'clip' will clip all entries to be within the
- range [0,
-\begin_inset Formula $n$
-\end_inset
-
-).
-\end_layout
-
-\begin_layout MyCode
->>> a = array([0,3,2,1])
-\newline
->>> a.choose([0,1,2,3],[10,11,12,13],
-\newline
-...
- [20,21,22,23],[30,31,32,33])
-\newline
-array([ 0, 31, 22, 13])
-\end_layout
-
-\begin_layout Description
-sort
-\begin_inset LatexCommand index
-name "ndarray!methods!sort"
-
-\end_inset
-
- (axis=-1, kind='quick', order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Sort the array in-place and return None.
- The sort takes place over the given axis using an underlying sort algorithm
- specified by kind.
- The sorting algorithms available are 'quick', 'heap', and 'merge'.
- For flexible types only the quicksort algorithm is available.
- For arrays with fields defined, the order keyword allows specification
- of the order in which to use the field names in the sort.
- If order is a string then it is the field name to use to define the sort.
- If order is a list (or tuple) of strings, then it specifies a lexicographic
- ordering so that the first listed field name is compared first if that
- results in equality, the second listed field name is used for the comparison
- and so on.
- If order is None, then arrays with fields use the first field for comparison.
-
-\end_layout
-
-\begin_layout MyCode
->>> a=array([[0.2,1.3,2.5],[1.5,0.1,1.4]]);
-\newline
->>> b=a.copy(); b.sort(0); print b
-\newline
-[[
- 0.2 0.1 1.4]
-\newline
- [ 1.5 1.3 2.5]]
-\newline
->>> b=a.copy(); b.sort(1); print b
-\newline
-[[ 0.2 1.3 2.5]
-\newline
-
- [ 0.1 1.4 1.5]]
-\end_layout
-
-\begin_layout Description
-argsort
-\begin_inset LatexCommand index
-name "ndarray!methods!argsort"
-
-\end_inset
-
- (axis=-1, kind='quick', order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an index array of the same size as self showing which indices along
- the given axis should be selected to sort self along that axis.
- Uses an underlying sort algorithm specified by kind.
- The sorting algorithms available are 'quick', 'heap', and 'merge'.
- For arrays with fields defined, the order keyword allows specification
- of the order in which to use the field names in the sort.
- If order is a string then it is the field name to use to define the sort.
- If order is a list (or tuple) of strings, then it specifies a lexicographic
- ordering so that the first listed field name is compared first if that
- results in equality, the second listed field name is used for the comparison
- and so on.
- If order is None, then arrays with fields use the first field for comparison.
-
-\end_layout
-
-\begin_layout MyCode
->>> b=a.copy(); print b.argsort(0)
-\newline
-[[0 1 1]
-\newline
- [1 0 0]]
-\newline
->>> b=a.copy(); print b.argsort(1
-)
-\newline
-[[0 1 2]
-\newline
- [1 2 0]]
-\end_layout
-
-\begin_layout Tip
-Complex valued arrays sort lexicographically by comparing first the real
- parts and then the imaginary parts if the real parts are the same.
-\end_layout
-
-\begin_layout Description
-searchsorted
-\begin_inset LatexCommand index
-name "ndarray!methods!searchsorted"
-
-\end_inset
-
- (values, side='left')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an index array (dtype=intp) of the same shape as values showing
- the index where the value would fit in self.
- The index is such that self[index-1]
-\begin_inset Formula $<$
-\end_inset
-
- value
-\begin_inset Formula $\le$
-\end_inset
-
- self[index] when side is 'left'.
- In this formula self[self.size]=
-\begin_inset Formula $\infty$
-\end_inset
-
- and self[-1]=
-\begin_inset Formula $-\infty$
-\end_inset
-
-.
- Therefore, if value is larger than all elements of self, then index is
- self.size.
- If value is smaller than all elements of self, then index is 0.
- Self must be a sorted 1-d array.
- If elements of self are repeated, the index of the first occurrence is
- used.
- If side is 'right', then the search rule is switched so that the
-\begin_inset Formula $<$
-\end_inset
-
- sign is on the
-\begin_inset Quotes eld
-\end_inset
-
-right
-\begin_inset Quotes erd
-\end_inset
-
- instead of the left in the search rule.
- In other words, the index returned is such that self[index-1]
-\begin_inset Formula $\le$
-\end_inset
-
-value
-\begin_inset Formula $<$
-\end_inset
-
- self[index].
-\end_layout
-
-\begin_layout MyCode
->>> b=a.ravel(); b.sort()
-\newline
->>> b.searchsorted([0.0, 1.35, 2.0, 3.0])
-\newline
-array([0, 3,
- 5, 6])
-\end_layout
-
-\begin_layout Description
-nonzero
-\begin_inset LatexCommand index
-name "ndarray!methods!nonzero"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\begin_inset Formula $n$
-\end_inset
-
--dimensional indices for elements of the
-\begin_inset Formula $n$
-\end_inset
-
--dimensional array self that are nonzero into an
-\begin_inset Formula $n$
-\end_inset
-
--tuple of equal-length index arrays.
- In particular, notice that a 0-dimensional array always returns an empty
- tuple.
-
-\end_layout
-
-\begin_layout MyCode
->>> x = arange(15); y=x.reshape(3,5)
-\newline
->>> (x>8).nonzero()
-\newline
-(array([ 9, 10, 11,
- 12, 13, 14]),)
-\newline
->>> (y>8).nonzero()
-\newline
-(array([1, 2, 2, 2, 2, 2]), array([4, 0,
- 1, 2, 3, 4]))
-\end_layout
-
-\begin_layout Description
-compress
-\begin_inset LatexCommand index
-name "ndarray!methods!compress"
-
-\end_inset
-
- (condition=, axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method expects condition to be a one-dimensional mask array of the
- same length as self.shape[axis].
- If the array is less than self.shape[axis], then False is assumed for the
- missing elements.
- The method returns the elements (or sub-arrays along the given axis) of
- self where condition is true.
- The shape of the return array is self.shape with the axis dimension replaced
- by the number of True elements of condition.
- The same effect can often be accomplished using array indexing.
-\end_layout
-
-\begin_layout MyCode
->>> x=array([0,1,2,3])
-\newline
->>> x.compress(x > 2)
-\newline
-array([3])
-\newline
->>> x[x>2]
-\newline
-array([3])
-\end_layout
-
-\begin_layout Description
-diagonal
-\begin_inset LatexCommand index
-name "ndarray!methods!diagonal"
-
-\end_inset
-
- (offset=0, axis1=0, axis2=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If self is 2-d, return the
-\series bold
-offset
-\series default
- (from the main diagonal) diagonal of self.
- If self is larger than 2-d, then return an array constructed from all the
- diagonals created from all the 2-d sub-arrays formed using all of axis1
- and axis2.
- The offset parameter is with respect to axis2.
- The shape of the returned array is found by removing the axis1 and axis2
- entries from self.shape and then appending the length of the offset diagonal
- of each 2-d sub-array.
-\end_layout
-
-\begin_layout MyCode
->>> a=arange(25).reshape(5,5); print a
-\newline
-[[ 0 1 2 3 4]
-\newline
- [ 5 6 7 8 9]
-\newline
-
- [10 11 12 13 14]
-\newline
- [15 16 17 18 19]
-\newline
- [20 21 22 23 24]]
-\newline
->>> print a.diagonal()
-\newline
-[
- 0 6 12 18 24]
-\newline
->>> print a.diagonal(1)
-\newline
-[ 1 7 13 19]
-\newline
->>> print a.diagonal(-1)
-\newline
-[
- 5 11 17 23]
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Array item selection and shape manipulation methods.
- If axis is an argument, then the calculation is performed along that axis.
- An axis value of None means the array is flattened before calculation proceeds.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-setlength{
-\backslash
-extrarowheight}{0.25eM}
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="18" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="50text%">
-<column alignment="block" valignment="top" leftline="true" rightline="true" width="30text%">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Method
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Arguments
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-argsort
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-argsort (axis=None, kind='quick')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Indices showing how to sort array.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-choose
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-choose (c0, c1 , ..., cn, out=None, clip='raise')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Choose from different arrays based on value of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-compress
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(condition=, axis=None, out=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Elements of self where condition is true.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-diagonal
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(offset=0, axis1=0, axis2=1)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Return a diagonal from self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-flatten
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(order='C')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-A 1-d copy of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-nonzero
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-True where self is not zero.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-put
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(indices=, values=, mode='raise')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Place values at 1-d index locations of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-ravel
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(order='C')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-1-d version of self (no data copy if self is C-style contiguous).
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-repeat
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(repeats=, axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Repeat elements of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-reshape
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(d1,d2,...,dn, order='C')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Return reshaped version of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-resize
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(d1,d2,...,dn, refcheck=1, order='Any')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Resize self in-place.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-searchsorted
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(values)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Show where values would be placed in self (assumed sorted).
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-sort
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, kind='quick')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Copy of self sorted along axis.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-squeeze
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Squeeze out all length-1 dimensions.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-swapaxes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis1, axis2)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Swap two dimensions of self.
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-take
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(indices=, axis=None, out=None, mode='raise')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Select elements of self along axis according to indices.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-transpose
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(permute <None>)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Rearrange shape of self according to permute.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Array calculation
-\end_layout
-
-\begin_layout Standard
-Many of these methods take an argument named axis.
- In such cases, if axis is None (the default), the array is treated as a
- 1-d array and the operation is performed over the entire array.
- This behavior is also the default if self is a 0-dimensional array or array
- scalar.
- If axis is an integer, then the operation is done over the given axis (for
- each 1-d subarray that can be created along the given axis).
- The parameter dtype specifies the data type over which a reduction operation
- (like summing) should take place.
- The default reduce data type is the same as the data type of self.
- To avoid overflow, it can be useful to perform the reduction using a larger
- data type.
- For several methods, an optional out argument can be provided and the result
- will be placed into the output array given.
- The out argument must be an ndarray and have the same number of elements.
- It can be of a different type in which case casting will be performed.
-
-\end_layout
-
-\begin_layout Description
-max
-\begin_inset LatexCommand index
-name "ndarray!methods!max"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the largest value in self.
- This is a better way to compute the maximum over an array, than using max(self).
- The latter uses the generic sequence interface to self.
- This will be slower, and will try to get an answer by comparing whole sub-array
-s of self.
- This will be incorrect for arrays larger than 1-d.
-\end_layout
-
-\begin_layout Description
-argmax
-\begin_inset LatexCommand index
-name "ndarray!methods!argmax"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (first, 1-d) index of the largest value in self.
-\end_layout
-
-\begin_layout Description
-min
-\begin_inset LatexCommand index
-name "ndarray!methods!min"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the smallest value in self.
- This is a better way to compute the minimum over an array, than using min(self).
- The latter uses the generic sequence interface to self.
- This will be slower, and will try to get an answer by comparing whole sub-array
-s of self.
- This will be incorrect for arrays larger than 1-d.
-\end_layout
-
-\begin_layout Description
-argmin
-\begin_inset LatexCommand index
-name "ndarray!methods!argmin"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (first, 1-d) index of the smallest value in self.
-\end_layout
-
-\begin_layout Description
-ptp
-\begin_inset LatexCommand index
-name "ndarray!methods!ptp"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the difference of the largest to the smallest value in self.
- Equivalent to self.max(axis) - self.min(axis)
-\end_layout
-
-\begin_layout Description
-clip
-\begin_inset LatexCommand index
-name "ndarray!methods!clip"
-
-\end_inset
-
- (min=,max=, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array where any element in self less than min is set to min
- and any element less than max is set to max.
- Equivalent to self[self<min]=min; self[self>max]=max.
-\end_layout
-
-\begin_layout Description
-conj
-\begin_inset LatexCommand index
-name "ndarray!methods!conj"
-
-\end_inset
-
- (out=None)
-\end_layout
-
-\begin_layout Description
-conjugate
-\begin_inset LatexCommand index
-name "ndarray!methods!conjugate"
-
-\end_inset
-
- (out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the conjugate of elements of the array.
-\end_layout
-
-\begin_layout Description
-round
-\begin_inset LatexCommand index
-name "ndarray!methods!round"
-
-\end_inset
-
- (decimals=0, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Round the elements of the array to the nearest decimal.
- For decimals < 0, the rounding is done to the nearest tens, hundreds, etc.
- Rounding of exactly the half-interval is to the nearest even integer.
- This is the only difference with standard Python rounding.
-\end_layout
-
-\begin_layout Description
-trace
-\begin_inset LatexCommand index
-name "ndarray!methods!trace"
-
-\end_inset
-
- (offset=0, axis1=0, axis2=1, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Perform a summation along each diagonal specified by offset, axis1, and
- axis2.
- Equivalent to diagonal(offset,axis1,axis2).sum(axis=-1, dtype=dtype)
-\end_layout
-
-\begin_layout Description
-sum
-\begin_inset LatexCommand index
-name "ndarray!methods!sum"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the sum
-\begin_inset Formula \[
-\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\]
-
-\end_inset
-
- where axis ':' objects are placed before the
-\begin_inset Formula $i.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cumsum
-\begin_inset LatexCommand index
-name "ndarray!methods!cumsum"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the cumulative sum.
- If ret is the return array of the same shape as
-\begin_inset Formula $\textrm{self},$
-\end_inset
-
- then
-\begin_inset Formula \[
-\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\sum_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-mean
-\begin_inset LatexCommand index
-name "ndarray!methods!mean"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the average value caculated as
-\begin_inset Formula \[
-\frac{1}{N}\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\]
-
-\end_inset
-
- where
-\begin_inset Formula $N$
-\end_inset
-
- is self.shape[axis] and axis ':' objects are placed before the
-\begin_inset Formula $i.$
-\end_inset
-
- The sum is done in the data-type of self unless self is an integer or Boolean
- data-type and then it is done over the float data-type.
-
-\end_layout
-
-\begin_layout Description
-var
-\begin_inset LatexCommand index
-name "ndarray!methods!var"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the variance of the data calculated as
-\begin_inset Formula \[
-\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}\]
-
-\end_inset
-
- where
-\begin_inset Formula $N$
-\end_inset
-
- is self.shape[axis] and
-\begin_inset Formula $\mu$
-\end_inset
-
- is the mean (restored to the same number of dimensions as self with
-\begin_inset Formula $\mu$
-\end_inset
-
- copied along the axis dimension).
- This is equivalent to (self**2).mean - self.mean()**2 and ((self-self.mean())**2).m
-ean().
- The value of
-\begin_inset Formula $N-1$
-\end_inset
-
- was not chosen for normalization because while it gives an
-\begin_inset Quotes eld
-\end_inset
-
-unbiased
-\begin_inset Quotes erd
-\end_inset
-
- estimate, it is not always prudent to return unbiased estimates as they
- may have larger mean-square error.
- The sum is done using a float data-type if self has integer or Boolean
- data-type, otherwise it is done using the same data-type as self.
-
-\end_layout
-
-\begin_layout Description
-std
-\begin_inset LatexCommand index
-name "ndarray!methods!std"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the standard deviation calculated as
-\begin_inset Formula \[
-\sqrt{\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}}\]
-
-\end_inset
-
- where
-\begin_inset Formula $N$
-\end_inset
-
- is self.shape[axis] and
-\begin_inset Formula $\mu$
-\end_inset
-
- is the mean (restored to the same number of dimensions as self with
-\begin_inset Formula $\mu$
-\end_inset
-
- copied along the axis dimension).
- The sum is done using the same data-type as self unless self is an integer
- or Boolean data-type and then it is done using a float data-type.
-
-\end_layout
-
-\begin_layout Description
-prod
-\begin_inset LatexCommand index
-name "ndarray!methods!prod"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the product calculated as
-\begin_inset Formula \[
-\prod_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cumprod
-\begin_inset LatexCommand index
-name "ndarray!methods!cumprod"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the cumulative product so that the return array, ret, is the same
- shape as self and
-\begin_inset Formula \[
-\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\prod_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-all
-\begin_inset LatexCommand index
-name "ndarray!methods!all"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if all entries along axis evaluate True, otherwise return False.
-\end_layout
-
-\begin_layout Description
-any
-\begin_inset LatexCommand index
-name "ndarray!methods!any"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if any entries along axis evaluate True, otherwise return False
-\begin_inset LatexCommand index
-name "ndarray!methods|)"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Array object calculation methods.
- If axis is an argument, then the calculation is performed along that axis.
- An axis value of None means the array is flattened before calculation proceeds.
- All of these methods can take an optional out= argument which can specify
- the output array to write the results into.
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-setlength{
-\backslash
-extrarowheight}{0.5eM}
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="18" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="30text%">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Method
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Arguments
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-all
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-true if all entries are true.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-any
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-true if any entries are true.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-argmax
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-index of largest value.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-argmin
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-index of smallest value.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-clip
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(min=, max=)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-self[self>max]=max; self[self<min]=min
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-conj
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-complex conjugate
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-cumprod
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-cumulative product
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-cumsum
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-cumulative sum
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-max
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-maximum of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-mean
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-mean of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-min
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-minimum of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-prod
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-multiply elements of self together
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-ptp
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-self.max(axis)-self.min(axis)
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-var
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-variance of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-std
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-standard deviation of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-sum
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-add elements of self together
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-trace
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(offset, axis1=0, axis2=0, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-sum along a diagonal
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Array Special Methods
-\end_layout
-
-\begin_layout Standard
-Methods
-\begin_inset LatexCommand index
-name "ndarray!special methods|("
-
-\end_inset
-
- in this chapter are not generally meant to be called directly by the user.
- They are called by Python and are used to customize behavior of the ndarray
- object as it interacts with the Python language and standard library.
-
-\end_layout
-
-\begin_layout Subsection
-Methods for standard library functions
-\end_layout
-
-\begin_layout Description
-__copy__
-\begin_inset LatexCommand index
-name "ndarray!special methods!copy"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- To allow copy.copy(a) to perform a shallow copy of an array.
- Exactly the same as self.copy() (contents of object arrays are not copied).
-
-\end_layout
-
-\begin_layout Description
-__deepcopy__
-\begin_inset LatexCommand index
-name "ndarray!special methods!deepcopy"
-
-\end_inset
-
- (memodict)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- To allow copy.deepcopy(a) to perform a deep copy.
- This is the same as a shallow copy unless self is an object array.
- Then, after the shallow copy is made, a copy.deepcopy(item) is called for
- every item in the object array.
-
-\end_layout
-
-\begin_layout Description
-__reduce__
-\begin_inset LatexCommand index
-name "ndarray!special methods!reduce"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-__setstate__
-\begin_inset LatexCommand index
-name "ndarray!special methods!setstate"
-
-\end_inset
-
- (shape, typestr, isfortran, data)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Pickling support for arrays is provided by these two methods.
- When an array needs to be pickled, the __reduce__() method is called to
- provide a 3-tuple of already-pickleable objects.
- To construct a new object from the pickle, the first two elements of the
- 3-tuple are used to construct a new (0-length) array of the correct type
- and the last element of the 3-tuple, which is itself a 4-tuple of (shape,
- typestr, isfortran, data) is passed to the __setstate__ method of the newly
- created array to restore its contents.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The reduce method returns a 3-tuple consisting of (callable, args, state)
- where callable is a simple constructor function that handles subclasses
- of the ndarray.
- Also, args is a 3-tuple of arguments to pass to this constructor function
- (type(self), (0,), self.dtypechar), and state is a 4-tuple of information
- giving the object's state (self.shape, self.dtypedescr, isfortran, string_or_list
-).
- In this tuple, isfortran is a Bool stating whether the following flattened
- data is in Fortran order or not, and string_or_list is a string formed
- by self.tobytes() if the data type is not object.
- If the data type of self is an object array, then string_or_list is a flat
- list equivalent to self.ravel().tolist().
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- On load from a pickle, the pickling code uses the first two elements from
- the tuple returned by reduce to construct an empty 0-dimensional subclass
- of the correct type.
- The last element is then passed to the __setstate__ method of the newly
- created array to restore its contents.
-
-\end_layout
-
-\begin_layout Note
-When data is a string, the __setstate__ method will directly use the string
- memory as the array memory (new.base will point to the string).
- The typestr contains enough information to decode how the memory should
- be interpreted.
-\end_layout
-
-\begin_layout Subsection
-Basic customization
-\end_layout
-
-\begin_layout Description
-__new__
-\begin_inset LatexCommand index
-name "ndarray!special methods!new"
-
-\end_inset
-
- (subtype, shape=, dtype=long_, buffer=None, offset=0, strides=None, order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method creates a new ndarray.
- It is typically only used in the __new__ method of a subclass.
- This method is called to construct a new array whenever the object name
- is called,
-\family typewriter
-a=ndarray(...)
-\family default
-.
- It supports two basic modes of array creation:
-\end_layout
-
-\begin_layout Enumerate
-a single-segment array of the specified shape and data-type from newly allocated
- memory;
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-uses shape, dtype, strides, and order arguments; others are ignored;
-\end_layout
-
-\begin_layout Enumerate
-The order argument allows specification of a Fortran-style contiguous memory
- segment (order='Fortran');
-\end_layout
-
-\begin_layout Enumerate
-If strides is given, then it specifies the new strides of the array (and
- the order keyword is ignored).
- The strides will be checked for consistency with the dimension size so
- that steps outside of the memory won't occur.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-an array of the given shape and data type using the provided object, buffer,
- which must export the buffer interface.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-all arguments can be used;
-\end_layout
-
-\begin_layout Enumerate
-strides can be given and will be checked for consistency with the shape,
- data type, and available memory in buffer;
-\end_layout
-
-\begin_layout Enumerate
-order indicates whether the data buffer should be interpreted as Fortran-style
- contiguous (order='Fortran') or not;
-\end_layout
-
-\begin_layout Enumerate
-offset can be used to start the array data at some offset in the buffer.
-
-\end_layout
-
-\end_deeper
-\begin_layout Note
-The ndarray uses the default no-op __init__
-\begin_inset LatexCommand index
-name "ndarray!special methods!init"
-
-\end_inset
-
- function because the array is completely initialized after __new__ is called.
-\end_layout
-
-\begin_layout Description
-__array__
-\begin_inset LatexCommand index
-name "ndarray!special methods!array"
-
-\end_inset
-
- (dtype {None})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is a special method that should always return an object of type ndarray.
- Useful for subclasses that need to get to the ndarray object.
-
-\end_layout
-
-\begin_layout Description
-__array_wrap__
-\begin_inset LatexCommand index
-name "ndarray!special methods!array\\_wrap"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is a special method that always returns an object of the same Python
- type as self using the array passed as an argument.
- This is mainly useful for subclasses as it is an easy way to get the subclass
- back from an ndarray.
-\end_layout
-
-\begin_layout Description
-__lt__
-\begin_inset LatexCommand index
-name "ndarray!special methods!lt"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__le__
-\begin_inset LatexCommand index
-name "ndarray!special methods!le"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__gt__
-\begin_inset LatexCommand index
-name "ndarray!special methods!gt"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ge__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ge"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__eq__
-\begin_inset LatexCommand index
-name "ndarray!special methods!eq"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ne__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ne"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Defined to support rich comparisons (<, <=, >, >=, ==, !=) on ndarrays
- using universal functions.
-
-\end_layout
-
-\begin_layout Description
-__str__
-\begin_inset LatexCommand index
-name "ndarray!special methods!str"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-__repr__
-\begin_inset LatexCommand index
-name "ndarray!special methods!repr"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions print the array when called by str(self) and repr(self)
- respectively.
- Array printing can be changed using set_string_function(..).
- Default array printing has been borrowed from numarray whose printing code
- was written by Perry Greenfield and J.
- Todd Miller.
- By default, arrays print such that
-\end_layout
-
-\begin_layout Enumerate
-The last axis is always printed left to right.
-\end_layout
-
-\begin_layout Enumerate
-The next-to-last axis is printed top to bottom.
-\end_layout
-
-\begin_layout Enumerate
-Remaining axes are printed top to bottom with increasing numbers of separators.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Five parameters of the printing can be set using keyword arguments with
-
-\family typewriter
-set_printoptions(...)
-\family default
-.
- The parameters
-\begin_inset LatexCommand index
-name "set\\_printoptions"
-
-\end_inset
-
- can all be retrieved using
-\family typewriter
-get_printoptions()
-\family default
-.
- These printing options
-\begin_inset LatexCommand index
-name "get\\_printoptions"
-
-\end_inset
-
- are
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-precision the number of digits of precision for floating point output (default
- 8);
-\end_layout
-
-\begin_layout Description
-threshold total number of array elements which triggers summarization rather
- than full representation (default 1000);
-\end_layout
-
-\begin_layout Description
-edgeitems number of array items in summary at beginning an end of each dimension
- (default 3);
-\end_layout
-
-\begin_layout Description
-linewidth the number of characters per line for the purpose of inserting
- line breaks (default 71);
-\end_layout
-
-\begin_layout Description
-suppress Boolean indicating whether or not to suppress printing of small
- floating point values using scientific notation (default False).
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-__nonzero__
-\begin_inset LatexCommand index
-name "ndarray!special methods!nonzero"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Truth-value testing for the array as a whole.
- It is called whenever the truth value of the ndarray as a whole object
- is required.
- This raises an error if the number of elements in the the array is larger
- than 1 because the truth value of such arrays is ambiguous.
- Use .any() and .all() instead to be clear about what is meant in such cases.
- If the number of elements is 0 then False is returned.
- If there is one element in the array, then the truth-value of this element
- is returned.
-\end_layout
-
-\begin_layout Subsection
-Container customization
-\end_layout
-
-\begin_layout Description
-__len__
-\begin_inset LatexCommand index
-name "ndarray!special methods!len"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns self.shape[0].
- It is called in response to len(self).
- Use self.size to get the total number of elements in the array.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Notice that the default Python iterator for sequences is used when arrays
- are used in places that expect an iterator.
- This iterator returns successively self[0], self[1], ..., self[self.__len__()].
- Use self.flat to get an iterator that walks through the entire array one
- element at a time.
-\end_layout
-
-\begin_layout Description
-__getitem__
-\begin_inset LatexCommand index
-name "ndarray!special methods!getitem"
-
-\end_inset
-
- (key)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Called when evaluating self[key] construct.
- Items from the array can be selected using this customization.
- This construct has both standard and extended indexing abilities which
- are explained in Section
-\begin_inset LatexCommand ref
-reference "sec:Array-indexing"
-
-\end_inset
-
-.
- A named field can be retrieved if key is a string and fields are defined
- in the dtypedescr object associated with this array.
-
-\end_layout
-
-\begin_layout Description
-__setitem__
-\begin_inset LatexCommand index
-name "ndarray!special methods!setitem"
-
-\end_inset
-
- (key, value)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Called when evaluating self[key]=value.
- Items in the array can be set using this construct.
- This construct is explained in Section
-\begin_inset LatexCommand ref
-reference "sec:Array-indexing"
-
-\end_inset
-
-.
- A named field can be set if key is a string and fields are defined in the
- dtypedescr object associated with this array.
-
-\end_layout
-
-\begin_layout Description
-__getslice__
-\begin_inset LatexCommand index
-name "ndarray!special methods!getslice"
-
-\end_inset
-
- (i, j)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to self.__getitem__(slice(i,j)) but defined mainly so that C
- code can use the sequence interface.
- Called to evaluate self[i:j]
-\end_layout
-
-\begin_layout Description
-__setslice__
-\begin_inset LatexCommand index
-name "ndarray!special methods!setslice"
-
-\end_inset
-
- (i, j, value)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to self.__setitem__(slice(i,j), value) but defined mainly so
- C code can use the sequence interface.
- Called to evaluate self[i:j] = value.
-\end_layout
-
-\begin_layout Description
-__contains__
-\begin_inset LatexCommand index
-name "ndarray!special methods!contains"
-
-\end_inset
-
- (item)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Called to determine truth value of the
-\family typewriter
-item in self
-\family default
- construct.
- Returns the equivalent of (self==item).any()
-\end_layout
-
-\begin_layout Subsection
-Arithmetic customization
-\end_layout
-
-\begin_layout Subsubsection
-Binary
-\end_layout
-
-\begin_layout Description
-__add__
-\begin_inset LatexCommand index
-name "ndarray!special methods!add"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__sub__
-\begin_inset LatexCommand index
-name "ndarray!special methods!sub"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__mul__
-\begin_inset LatexCommand index
-name "ndarray!special methods!mul"
-
-\end_inset
-
- (self, other)
-\end_layout
-
-\begin_layout Description
-__div__
-\begin_inset LatexCommand index
-name "ndarray!special methods!div"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__truediv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!truediv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__floordiv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!floordiv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__mod__
-\begin_inset LatexCommand index
-name "ndarray!special methods!mod"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__divmod__
-\begin_inset LatexCommand index
-name "ndarray!special methods!divmod"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__pow__
-\begin_inset LatexCommand index
-name "ndarray!special methods!pow"
-
-\end_inset
-
- (other[,modulo])
-\end_layout
-
-\begin_layout Description
-__lshift__
-\begin_inset LatexCommand index
-name "ndarray!special methods!lshift"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__rshift__
-\begin_inset LatexCommand index
-name "ndarray!special methods!rshift"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__and__
-\begin_inset LatexCommand index
-name "ndarray!special methods!and"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__or__
-\begin_inset LatexCommand index
-name "ndarray!special methods!or"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__xor__
-\begin_inset LatexCommand index
-name "ndarray!special methods!xor"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These methods are defined for ndarrays to implement the operations (
-\family typewriter
-+
-\family default
-,
-\family typewriter
--
-\family default
-,
-\family typewriter
-*
-\family default
-,
-\family typewriter
-/,
-\family default
-
-\family typewriter
-/,
-\family default
-
-\family typewriter
-//
-\family default
-,
-\family typewriter
-%
-\family default
-,
-\family typewriter
-divmod()
-\family default
-,
-\family typewriter
-**
-\family default
- or
-\family typewriter
-pow()
-\family default
-,
-\family typewriter
-<<,
-\family default
-
-\family typewriter
->>
-\family default
-,
-\family typewriter
-&
-\family default
-,
-\family typewriter
-^
-\family default
-,
-\family typewriter
-|
-\family default
-).
- This is done using calls to the corresponding universal function object
- (add, subtract, multiply, divide, true_divide, floor_divide, remainder,
- divide and remainder, power, left_shift, right_shift, bitwise_and, bitwise_xor,
- bitwise_or).
- These implement element-by-element operations for arrays that are broadcastable
- to the same shape.
-
-\end_layout
-
-\begin_layout Itemize
-any third argument to
-\family typewriter
-pow()
-\family default
- is silently ignored as the underlying ufunc (power) only takes two arguments.
-\end_layout
-
-\begin_layout Itemize
-the three division operators are all defined, div is active by default,
- truediv is active when __future__.division is in effect.
-\end_layout
-
-\begin_layout Note
-Because it is a built-in type (written in C), the __r<op>__ special methods
- are not directly defined for the ndarray.
-\end_layout
-
-\begin_layout Subsubsection
-In-place
-\end_layout
-
-\begin_layout Description
-__iadd__
-\begin_inset LatexCommand index
-name "ndarray!special methods!iadd"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__isub__
-\begin_inset LatexCommand index
-name "ndarray!special methods!isub"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__imul__
-\begin_inset LatexCommand index
-name "ndarray!special methods!imul"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__idiv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!idiv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__itruediv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!itruediv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ifloordiv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ifloordiv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__imod__
-\begin_inset LatexCommand index
-name "ndarray!special methods!imod"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ipow__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ipow"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ilshift__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ilshift"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__irshift__
-\begin_inset LatexCommand index
-name "ndarray!special methods!irshift"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__iand__
-\begin_inset LatexCommand index
-name "ndarray!special methods!iand"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ixor__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ixor"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ior__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ior"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These methods are implemented to handle the inplace operatiors (
-\family typewriter
-+=
-\family default
-,
-\family typewriter
--=
-\family default
-,
-\family typewriter
-*=
-\family default
-,
-\family typewriter
-/=
-\family default
-,
-\family typewriter
-/=
-\family default
-,
-\family typewriter
-//=
-\family default
-,
-\family typewriter
-%=
-\family default
-,
-\family typewriter
-**
-\family default
-=,
-\family typewriter
-<<
-\family default
-=,
-\family typewriter
->>=
-\family default
-,
-\family typewriter
-&=
-\family default
-,
-\family typewriter
-^=
-\family default
-,
-\family typewriter
-|=
-\family default
-).
- The inplace operators are implemented using the corresponding ufunc and
- its ability to take an output argument (which is set as self).
- Using inplace operations can save space and time and is therefore encouraged
- whenever appropriate.
-
-\end_layout
-
-\begin_layout Warning
-In place operations will perform the calculation using the precision decided
- by the data type of the two operands, but will silently downcast the result
- (if necessary) so it can fit back into the array.
- Therefore, for mixed precision calculations, a <op>= B can be different
- than a = a <op> B.
- For example, suppose a=ones((3,3)).
- Then a+=3j is different than a=a+3j While they both perform the same computatio
-n, a+=3j casts the result to fit back in a, while a=a+3j re-binds the name
- a to the result.
-\end_layout
-
-\begin_layout Subsubsection
-Unary operations
-\end_layout
-
-\begin_layout Description
-__neg__
-\begin_inset LatexCommand index
-name "ndarray!special methods!neg"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__pos__
-\begin_inset LatexCommand index
-name "ndarray!special methods!pos"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__abs__
-\begin_inset LatexCommand index
-name "ndarray!special methods!abs"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__invert__
-\begin_inset LatexCommand index
-name "ndarray!special methods!invert"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are called in response to the unary operations (
-\family typewriter
--
-\family default
-,
-\family typewriter
-+
-\family default
-,
-\family typewriter
-abs()
-\family default
-,
-\family typewriter
-~
-\family default
-).
- With the exception of __pos__, these are implemented using ufuncs (negative,
- absolute, invert).
- The unary
-\family typewriter
-+
-\family default
- operator, however simply calls self.copy(), and can therefore be used to
- get a copy of an array.
-
-\end_layout
-
-\begin_layout Description
-__complex__
-\begin_inset LatexCommand index
-name "ndarray!special methods!complex"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__int__
-\begin_inset LatexCommand index
-name "ndarray!special methods!int"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__long__
-\begin_inset LatexCommand index
-name "ndarray!special methods!long"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__float__
-\begin_inset LatexCommand index
-name "ndarray!special methods!float"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__oct__
-\begin_inset LatexCommand index
-name "ndarray!special methods!oct"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__hex__
-\begin_inset LatexCommand index
-name "ndarray!special methods!hex"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are also defined for the
-\family typewriter
-ndarray
-\family default
- object to handle the operations
-\family typewriter
-complex()
-\family default
-,
-\family typewriter
-int()
-\family default
-,
-\family typewriter
-long()
-\family default
-,
-\family typewriter
-float()
-\family default
-,
-\family typewriter
-oct()
-\family default
-, and
-\family typewriter
-hex()
-\family default
-.
- They work only on arrays that have one element in them and return the appropria
-te scalar
-\begin_inset LatexCommand index
-name "ndarray!special methods|)"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Tip
-The function called to implement many arithmetic special methods for arrays
- can be modified using the function set_numeric_ops.
- This function is called with keyword arguments indicating which operation(s)
- to replace.
- A dictionary is returned containing showing the old functions.
- By default, these functions are set to the corresponding ufunc.
-
-\end_layout
-
-\begin_layout Section
-Array indexing
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "sec:Array-indexing"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-More powerful array
-\begin_inset LatexCommand index
-name "indexing|("
-
-\end_inset
-
- indexing
-\begin_inset LatexCommand index
-name "ndarray!special methods!getitem"
-
-\end_inset
-
- was an important extension introduced by numarray, and was therefore an
- important part of the development of NumPy.
- In particular, the desire to select arbitrary elements based on their position
- in the array, and according to a mask was desirable.
-
-\end_layout
-
-\begin_layout Standard
-There are two kinds of indexing available using the
-\family typewriter
-X[obj]
-\family default
- syntax: basic slicing, and advanced indexing
-\begin_inset LatexCommand index
-name "ndarray!special methods!setitem"
-
-\end_inset
-
-.
- For the description of this syntax given below, X is the array to-be-sliced
- and obj is the
-\emph on
-selection
-\emph default
- object.
- Furthermore, define
-\begin_inset Formula $N\equiv$
-\end_inset
-
-X.ndim.
- These two methods of slicing have different behavior and are triggered
- depending on obj.
- Adding additional functionality yet remaining compatible with old uses
- of slicing complicated the rules a little.
- Hopefully, after studying this section, you will have a firm grasp of what
- kind of selection will be initiated depending on the selection object.
-\end_layout
-
-\begin_layout Tip
-in Python X[(exp1, exp2, ..., expN)] is equivalent to X[exp1, exp2, ..., expN]
- as the latter is just syntactic sugar for the former.
-\end_layout
-
-\begin_layout Subsection
-Basic Slicing
-\end_layout
-
-\begin_layout Standard
-Basic slicing
-\begin_inset LatexCommand index
-name "ndarray!special methods!getslice"
-
-\end_inset
-
- extends Python's basic concept of slicing
-\begin_inset LatexCommand index
-name "ndarray!special methods!setslice"
-
-\end_inset
-
- to N dimensions.
- Basic slicing occurs when obj is a slice object (constructed by start:stop:step
- notation inside of brackets), an integer, or a tuple of slice objects and
- integers.
- Ellipsis and newaxis objects can be interspersed with these as well.
- In order to remain backward compatible with a common usage in Numeric,
- basic slicing is also initiated if the selection object is any sequence
- (such as a list) containing slice objects, the ellipsis
-\begin_inset LatexCommand index
-name "ellipsis"
-
-\end_inset
-
- object, or the newaxis
-\begin_inset LatexCommand index
-name "newaxis"
-
-\end_inset
-
- object, but no integer arrays or other embedded sequences.
-
-\end_layout
-
-\begin_layout Standard
-The standard rules of sequence slicing apply to basic slicing on a per-dimension
- basis (including using a step index).
- Some useful concepts to remember include:
-\end_layout
-
-\begin_layout Itemize
-The basic slice syntax is '
-\begin_inset Formula $i:j:k$
-\end_inset
-
-' where
-\begin_inset Formula $i$
-\end_inset
-
- is the starting index,
-\begin_inset Formula $j$
-\end_inset
-
- is the stopping index, and
-\begin_inset Formula $k$
-\end_inset
-
- is the step (
-\begin_inset Formula $k\neq0$
-\end_inset
-
-).
- This selects the
-\begin_inset Formula $m$
-\end_inset
-
- elements (in the corresponding dimension) with index values
-\begin_inset Formula $i,\, i+k,\,\ldots,\, i+(m-1)k$
-\end_inset
-
- where
-\begin_inset Formula $m=q+(r\neq0)$
-\end_inset
-
- where
-\begin_inset Formula $q$
-\end_inset
-
- and
-\begin_inset Formula $r$
-\end_inset
-
- are the quotient and remainder obtained by dividing
-\begin_inset Formula $j-i$
-\end_inset
-
- by
-\begin_inset Formula $k$
-\end_inset
-
-:
-\begin_inset Formula $j-i=qk+r$
-\end_inset
-
-, so that
-\begin_inset Formula $i+\left(m-1\right)k<j.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Itemize
-Assume
-\begin_inset Formula $n$
-\end_inset
-
- is the number of elements in the dimension being sliced.
- Then, if
-\begin_inset Formula $i$
-\end_inset
-
- is not given it defaults to 0 for
-\begin_inset Formula $k>0$
-\end_inset
-
- and
-\begin_inset Formula $n$
-\end_inset
-
- for
-\begin_inset Formula $k<0$
-\end_inset
-
-.
- If
-\begin_inset Formula $j$
-\end_inset
-
- is not given it defaults to
-\begin_inset Formula $n$
-\end_inset
-
- for
-\begin_inset Formula $k>0$
-\end_inset
-
- and
-\begin_inset Formula $-1$
-\end_inset
-
- for
-\begin_inset Formula $k<0$
-\end_inset
-
-.
- If
-\begin_inset Formula $k$
-\end_inset
-
- is not given it defaults to 1.
- Note that '::' is the same as ':' and means select all indices along this
- axis.
-
-\end_layout
-
-\begin_layout Itemize
-If the number of objects in the selection tuple is less than
-\begin_inset Formula $N$
-\end_inset
-
-, then ':' is assumed for any remaining dimensions.
-\end_layout
-
-\begin_layout Itemize
-Ellipsis expand to the number of ':' objects needed to make a selection
- tuple of the same length as X.ndim.
- Only one ellipsis is expanded, any others are interpreted as more ':'
-\end_layout
-
-\begin_layout Itemize
-Each newaxis object in the selection tuple serves to expand the dimensions
- of the resulting selection by one unit-length dimension.
- The added dimension is the position of the newaxis object in the selection
- tuple.
-
-\end_layout
-
-\begin_layout Itemize
-An integer,
-\begin_inset Formula $i$
-\end_inset
-
-, returns the same values as
-\begin_inset Formula $i:i+1$
-\end_inset
-
-
-\series bold
-except
-\series default
- the dimensionality of the returned object is reduced by 1.
- In particular, a selection tuple with the
-\begin_inset Formula $p^{\textrm{th}}$
-\end_inset
-
- element an integer (and all other entries ':') returns the corresponding
- sub-array with dimension
-\begin_inset Formula $N-1$
-\end_inset
-
-.
- If
-\begin_inset Formula $N=1,$
-\end_inset
-
- then the returned object is an Array Scalar.
- These objects are explained in Chapter
-\begin_inset LatexCommand ref
-reference "cha:Scalar-objects"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Itemize
-If the selection tuple has all entries ':' except the
-\begin_inset Formula $p^{\textrm{th}}$
-\end_inset
-
- entry which is a slice object
-\begin_inset Formula $i:j:k$
-\end_inset
-
-, then the returned array has dimension
-\begin_inset Formula $N$
-\end_inset
-
- formed by concatenating the sub-arrays returned by integer indexing of
- elements
-\begin_inset Formula $i$
-\end_inset
-
-,
-\begin_inset Formula $i+k$
-\end_inset
-
-,
-\begin_inset Formula $i+(m-1)k<j$
-\end_inset
-
-,
-\end_layout
-
-\begin_layout Itemize
-Basic slicing with more than one non-':' entry in the slicing tuple, acts
- like repeated application of slicing using a single non-':' entry, where
- the non-':' entries are successively taken (with all other non-':' entries
- replaced by ':').
- Thus, X[ind1,...,ind2,:] acts like X[ind1][...,ind2,:] under basic slicing.
- Note this is NOT true for advanced slicing.
-
-\end_layout
-
-\begin_layout Itemize
-You may use slicing to set values in the array, but (unlike lists) you can
- never grow the array.
- The size of the value to be set in X[obj] = value must be (broadcastable)
- to the same shape as X[obj].
-
-\end_layout
-
-\begin_layout Standard
-Basic slicing always returns another
-\emph on
-view
-\begin_inset LatexCommand index
-name "ndarray!view"
-
-\end_inset
-
-
-\emph default
- of the array.
- In other words, the returned array from a basic slicing operation uses
- the same data as the original array.
- This can be confusing at first, but it is faster and can save memory.
- A copy can always be obtained if needed using the unary + operator (which
- has lower precedence than slicing) or the .copy() method.
-
-\end_layout
-
-\begin_layout Tip
-Remember that a slicing tuple can always be constructed as obj and used
- in the x[obj] notation.
- Slice objects can be used in the construction in place of the [start:stop:step]
- notation.
- For example,
-\family typewriter
-x[1:10:5,::-1]
-\family default
- can also be implemented as
-\family typewriter
-obj=(slice(1,10,5), slice(None,None,-1)); X[obj]
-\family default
-.
- This can be useful for constructing generic code that works on arrays of
- arbitrary dimension.
-\end_layout
-
-\begin_layout Subsection
-Advanced selection
-\end_layout
-
-\begin_layout Standard
-Advanced selection is triggered when the selection object, obj, is a non-tuple
- sequence object, an ndarray (of data type integer or bool), or a tuple
- with at least one sequence object or ndarray (of data type integer or bool).
- There are two types of advanced indexing: integer and Boolean.
- Advanced selection always returns a copy of the data (contrast with basic
- slicing that returns a view).
-
-\end_layout
-
-\begin_layout Subsubsection
-Integer
-\end_layout
-
-\begin_layout Standard
-Integer indexing allows selection of arbitrary items in the array based
- on their
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index.
- This kind of selection occurs when advanced selection is triggered and
- the selection object is not an array of data type bool.
- For the discussion below, when the selection object is not a tuple, it
- will be referred to as if it had been promoted to a 1-tuple, which will
- be called the selection tuple.
- The rules of advanced integer-style indexing are:
-\end_layout
-
-\begin_layout Itemize
-if the length of the selection tuple is larger than
-\begin_inset Formula $N$
-\end_inset
-
-(=X.ndim) an error is raised.
-\end_layout
-
-\begin_layout Itemize
-all sequences and scalars in the selection tuple are converted to intp indexing
- arrays.
-
-\end_layout
-
-\begin_layout Itemize
-all selection tuple objects must be convertible to intp arrays, or slice
- objects, or the Ellipsis (...) object.
-\end_layout
-
-\begin_layout Itemize
-Exactly one Ellipsis object will be expanded, any other Ellipsis objects
- will be treated as full slice (':') objects.
- The Ellipsis object is replaced with as many full slice (':') objects as
- needed to make the length of the selection tuple
-\begin_inset Formula $N$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Itemize
-If the selection tuple is smaller than
-\begin_inset Formula $N$
-\end_inset
-
-, then as many ':' objects as needed are added to the end of the selection
- tuple so that the modified selection tuple has length
-\begin_inset Formula $N$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Itemize
-The shape of all the integer indexing arrays must be broadcastable to the
- same shape.
- Arrays are broadcastable if any of the following are satisfied
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-The arrays all have exactly the same shape.
-\end_layout
-
-\begin_layout Enumerate
-The arrays all have the same number of dimensions and the length of each
- dimensions is either a common length or 1.
-\end_layout
-
-\begin_layout Enumerate
-The arrays that have too few dimensions can have their shapes pre-pended
- with a dimension of length 1 to satisfy property 2.
-
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-The shape of the output (or the needed shape of the object to be used for
- setting) is the broadcasted shape.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: If a.shape is (5,1), b.shape is (1,6), c.shape is (6,) and d.shape
- is () so that d is a scalar, then a, b, c, and d are all broadcastable
- to dimension (5,6).
- The array
-\begin_inset Quotes eld
-\end_inset
-
-a
-\begin_inset Quotes erd
-\end_inset
-
- acts like a (5,6) array where a[:,0] is broadcast to the other columns,
-
-\begin_inset Quotes eld
-\end_inset
-
-b
-\begin_inset Quotes erd
-\end_inset
-
- acts like a (5,6) array where b[0,:] is broadcast to the other rows,
-\begin_inset Quotes eld
-\end_inset
-
-c
-\begin_inset Quotes erd
-\end_inset
-
- acts like a (1,6) array and therefore a (5,6) where c[:] is broadcast to
- every row, and finally
-\begin_inset Quotes eld
-\end_inset
-
-d
-\begin_inset Quotes erd
-\end_inset
-
- acts like a (5,6) array where the single values is repeated.
-
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-After expanding any ellipses and filling out any missing (':') objects in
- the selection tuple, then let
-\begin_inset Formula $N_{t}$
-\end_inset
-
- be the number of indexing arrays, and let
-\begin_inset Formula $N_{s}=N-N_{t}$
-\end_inset
-
- be the number of slice objects.
- Note that
-\begin_inset Formula $N_{t}>0$
-\end_inset
-
- (or we wouldn't be doing advanced integer indexing).
-
-\end_layout
-
-\begin_layout Itemize
-If
-\begin_inset Formula $N_{s}=0$
-\end_inset
-
- then the
-\begin_inset Formula $M$
-\end_inset
-
--dimensional result is constructed by varying the index tuple
-\begin_inset Formula $\left(i_{1},\ldots,i_{M}\right)$
-\end_inset
-
- over the range of the result shape and for each value of the index tuple
- setting:
-\begin_inset Formula \[
-\textrm{result[$i_{1},\ldots,i_{M}$]=X[ind$_{1}$[$i_{1},\ldots i_{M}$], ind$_{2}$[$i_{1},\ldots,i_{M}$], \, etc.,\, ind$_{N}$[$i_{1},\ldots,i_{M}$]}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: Suppose the shape of the broadcasted indexing arrays is 3-dimensional
- and
-\begin_inset Formula $N$
-\end_inset
-
- is 2.
- Then the result is found by letting
-\begin_inset Formula $i,j,k$
-\end_inset
-
- run over the shape found by broadcasting
-\begin_inset Formula $\textrm{ind}_{1},$
-\end_inset
-
- and
-\begin_inset Formula $\textrm{ind}_{2},$
-\end_inset
-
-and for each
-\begin_inset Formula $i,j,k$
-\end_inset
-
- setting result[
-\begin_inset Formula $i,j,k$
-\end_inset
-
-] = X[
-\begin_inset Formula $\textrm{ind}_{1}[i,j,k]$
-\end_inset
-
-,
-\begin_inset Formula $\textrm{ind}_{2}[i,j,k]$
-\end_inset
-
-].
-
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-If
-\begin_inset Formula $N_{s}>0$
-\end_inset
-
-, then partial indexing is done.
- This can be somewhat mind-boggling to understand, but if you think in terms
- of the shapes of the arrays involved, it can be easier to grasp what happens.
- In simple cases (
-\emph on
-i.e.
-
-\emph default
- one indexing array and
-\begin_inset Formula $N-1$
-\end_inset
-
- slice objects) it does exactly what you would expect (concatenation of
- repeated application of basic slicing).
- The rule for partial indexing is that the shape of the result (or the interpret
-ed shape of the object to be used in setting) is the shape of X with the
- indexed subspace replaced with the broadcasted indexing subspace.
- If the index subspaces are right next to each other, then the broadcasted
- indexing space directly replaces all of the indexed subspaces in X.
- If the indexing subspaces are separated (by slice objects), then the broadcaste
-d indexing space is first, followed by the sliced subspace of X.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example\InsetSpace ~
-1: Suppose X.shape is (10,20,30) and ind is a (2,3,4) indexing intp
- array, then result=X[...,ind,:] has shape (10,2,3,4,30) because the (20,)-shaped
- subspace has been replaced with a (2,3,4)-shaped broadcasted indexing subspace.
- If we let
-\begin_inset Formula $i,j,k$
-\end_inset
-
- loop over the (2,3,4)-shaped subspace then result[...,i,j,k,:] = X[...,ind[i,j,k],:].
- This example produces the same result as X.take(ind,axis=-2).
-
-\end_layout
-
-\begin_layout Description
-Example\InsetSpace ~
-2: Now let X.shape be (10,20,30,40,50) and suppose
-\begin_inset Formula $\textrm{ind}_{1}$
-\end_inset
-
- and
-\begin_inset Formula $\textrm{ind}_{2}$
-\end_inset
-
- are broadcastable to the shape (2,3,4).
- Then X[:,ind
-\begin_inset Formula $_{1}$
-\end_inset
-
-,ind
-\begin_inset Formula $_{2}$
-\end_inset
-
-] has shape (10,2,3,4,40,50) because the (20,30)-shaped subspace from X
- has been replaced with the (2,3,4) subspace from the indices.
- However, X[:,ind
-\begin_inset Formula $_{1}$
-\end_inset
-
-,:,ind
-\begin_inset Formula $_{2}$
-\end_inset
-
-,:] has shape (2,3,4,10,30,50) because there is no unambiguous place to
- drop in the indexing subspace, thus it is tacked-on to the beginning.
- It is always possible to use .transpose() to move the sups pace anywhere
- desired.
- This example cannot be replicated using take.
-
-\end_layout
-
-\end_deeper
-\begin_layout Subsubsection
-Boolean
-\end_layout
-
-\begin_layout Standard
-This advanced selection occurs when obj is an array object of Boolean type
- (such as may be returned from comparison operators).
- It is always equivalent to (but faster than) X[obj.nonzero()] where as described
- above obj.nonzero() returns a tuple (of length obj.ndim) of integer index
- arrays showing the True elements of obj.
-
-\end_layout
-
-\begin_layout Standard
-The special case when obj.ndim == X.ndim is worth mentioning.
- In this case X[obj] returns a 1-dimensional array filled with the elements
- of X corresponding to the True values of obj.
- It The search order will be C-style (last index varies the fastest).
- If obj has True values at entries that are outside of the bounds of X,
- then an index error will be raised.
-\end_layout
-
-\begin_layout Standard
-You can also use Boolean arrays as element of the selection tuple.
- In such instances, they will always be interpreted as nonzero(obj) and
- the equivalent integer indexing will be done.
- In general you can think of indexing with Boolean arrays as indexing with
- nonzero(<Boolean>).
-\end_layout
-
-\begin_layout Warning
-the definition of advanced selection means that X[(1,2,3),] is fundamentally
- different than X[(1,2,3)].
- The latter is equivalent to X[1,2,3] which will trigger basic selection
- while the former will trigger advanced selection.
- Be sure to understand why this is True.
- You should also recognize that x[[1,2,3]] will trigger advanced selection,
- but X[[1,2,slice(None)]] will trigger basic selection.
-\end_layout
-
-\begin_layout Subsection
-Flat Iterator indexing
-\end_layout
-
-\begin_layout Standard
-As mentioned previously, X.flat returns an iterator that will iterate over
- the entire array (in C-contiguous style with the last index varying the
- fastest).
- This iterator object can also be indexed using basic slicing or advanced
- indexing as long as the selection object is not a tuple.
- This should be clear from the fact that X.flat is a 1-dimensional view.
- X.flat can be used for integer indexing using 1-dimensional C-style-flat
- indices.
- The shape of any returned array is therefore the shape of the integer indexing
-\begin_inset LatexCommand index
-name "indexing|)"
-
-\end_inset
-
- object
-\begin_inset LatexCommand index
-name "ndarray|)"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Chapter
-Basic Routines
-\end_layout
-
-\begin_layout Quotation
-Do not pray for tasks equal to your powers; pray for powers equal to your
- tasks.
- Then the doing of your work shall be no miracle, but you shall be the miracle.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Phillips Brooks
-\end_layout
-
-\begin_layout Quote
-Education isn't how much you have committed to memory, or even how much
- you know.
- It's being able to differentiate between what you do know and what you
- don't.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Anatole France
-\end_layout
-
-\begin_layout Section
-Creating arrays
-\end_layout
-
-\begin_layout Description
-array
-\begin_inset LatexCommand index
-name "array"
-
-\end_inset
-
- (object=, dtype=None, copy=True, order=None, subok=False, ndmin=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new ndarray of data type, dtype (or determined from object if
- dtype is None).
- The shape of the new array will be determined from object.
- If copy is True, then ensure a copy of the object is made.
- If copy is False, then the returned object is a copy of the array only
- if dtype is not equivalent to the data type of object.
- If order is 'Fortran' then the resulting array will be in Fortran order,
- otherwise it is in C order.
- If subok (subclasses are O.K.) is True then pass through subclasses of the
- array object if possible.
- If subok is False then only ndarray objects may be returned.
- The ndmin parameter specifies that the returned array must have at least
- the given number of dimensions.
-
-\end_layout
-
-\begin_layout Description
-asarray
-\begin_inset LatexCommand index
-name "asarray"
-
-\end_inset
-
- (object=, dtype=None, order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Exactly the same as array(...) except the default copy argument is False,
- and subok is always False.
- Using this function always returns the base class ndarray.
-
-\end_layout
-
-\begin_layout Description
-asanyarray
-\begin_inset LatexCommand index
-name "asanyarray"
-
-\end_inset
-
- (object, dtype=None, order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Thin wrapper around array(...) with subok=1.
- You should use this routine if you are only making use of the array attributes,
- and believe the calculations that will follow would work with any subclass
- of the array.
- Use of this routine increases the chance that array subclasses will interact
- seamlessly with your function --- returning the same subclasses.
-
-\end_layout
-
-\begin_layout Description
-require
-\begin_inset LatexCommand index
-name "require"
-
-\end_inset
-
- (object, dtype=None, requirements=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Require a Python object to be an ndarray (or a sub-class) of the given
- data-type if it can be cast safely, otherwise raise an error.
- The requirements, if given, are a sequence containing the requested combination
- of the flags 'C_CONTIGUOUS' ('C'), 'F_CONTIGUOUS' ('F'), 'ALIGNED' ('A'),
- 'WRITEABLE' ('W'), 'OWNDATA' ('O'), and the special directive 'ENSUREARRAY'
- ('E').
- These strings dictate which flags should be set on the return array (note
- only one of 'F_CONTIGUOUS' or 'C_CONTIGUOUS' should be used and 'F_CONTIGUOUS'
- over-rides 'C_CONTIGUOUS').
- The special directive 'ENSUREARRAY' makes sure that a base-class ndarray
- is returned instead of allowing sub-classes to pass through.
- This function is particularly useful in a Python interface to C-code (say
- called using ctypes
-\begin_inset LatexCommand index
-name "ctypes"
-
-\end_inset
-
-).
-
-\end_layout
-
-\begin_layout Description
-arange
-\begin_inset LatexCommand index
-name "arange"
-
-\end_inset
-
- (start=, stop=None, step=1, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Function similar to Python's built-in range() function except it returns
- an ndarray object.
- Return a 1-d array of data type, dtype (or determined from the start, stop,
- and step objects if None), that starts at start, ends
-\emph on
-before
-\emph default
- stop and is incremented by step.
- The returned array has length
-\begin_inset Formula $n$
-\end_inset
-
- where
-\begin_inset Formula \[
-n=\left\lceil \frac{\textrm{stop}-\textrm{start}}{\textrm{step}}\right\rceil \]
-
-\end_inset
-
- with element
-\begin_inset Formula $i$
-\end_inset
-
- equal to
-\begin_inset Formula $\textrm{start}+i\cdot\textrm{step}.$
-\end_inset
-
- If stop is None, then the first argument is interpreted as stop and start
- is 0.
-
-\end_layout
-
-\begin_layout Note
-By definition of the ceiling function (denoted by
-\begin_inset Formula $\left\lceil x\right\rceil $
-\end_inset
-
-), we know that
-\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1$
-\end_inset
-
-, therefore this definition of the length of arange guarantees that
-\begin_inset Formula $\textrm{start}+n\cdot\textrm{step}\geq\textrm{stop}$
-\end_inset
-
- as well as
-\begin_inset Formula $\textrm{start}+(n-1)\cdot\textrm{step}<\textrm{stop}$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-isfortran
-\begin_inset LatexCommand index
-name "isfortran"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\family typewriter
-arr.flags.fnc
-\family default
- and therefore returns True only if arr is Fortran-contiguous but not also
- C-contiguous.
-\end_layout
-
-\begin_layout Description
-empty
-\begin_inset LatexCommand index
-name "empty"
-
-\end_inset
-
- (shape=, dtype=int, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an uninitialized array of data type, dtype, and given shape.
- The memory layout defaults to C-style contiguous, but can be made Fortran-style
- contiguous with a 'Fortran' order keyword.
-\end_layout
-
-\begin_layout Description
-empty_like
-\begin_inset LatexCommand index
-name "empty\\_like"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Syntactic sugar for empty(a.shape, a.dtype, isfortran(arr))
-\end_layout
-
-\begin_layout Description
-zeros
-\begin_inset LatexCommand index
-name "zeros"
-
-\end_inset
-
- (shape=, dtype=int, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of data type dtype and given shape filled with zeros.
- The memory layout may be altered from the default C-style contiguous with
- the order keyword.
-\end_layout
-
-\begin_layout Description
-zeros_like
-\begin_inset LatexCommand index
-name "zeros\\_like"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Syntactic sugar for zeros(a.shape, a.dtype, isfortran(arr))
-\end_layout
-
-\begin_layout Description
-ones
-\begin_inset LatexCommand index
-name "ones"
-
-\end_inset
-
- (shape=, dtype=int, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Syntactic sugar for a = zeros(shape, dtype, order); a+= 1.
-
-\end_layout
-
-\begin_layout Description
-fromstring
-\begin_inset LatexCommand index
-name "fromstring"
-
-\end_inset
-
- (string=,dtype=int, count=-1, sep='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If sep is '', then return a new 1-d array with data-type descriptor given
- by dtype and with memory initialized (copied) from the raw binary data
- in string.
- If count is non-negative, the new array will have count elements (with
- a
-\family typewriter
-ValueError
-\family default
- raised if count requires more data than the string offers), otherwise the
- size of the string must be a multiple of the itemsize implied by dtype,
- and count will be the length of the string divided by the itemsize.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If sep is not '', then interpret the string in ASCII mode with the provided
- separator and convert the string to an array of numbers.
- Any additional white-space will be ignored.
-\end_layout
-
-\begin_layout Description
-fromfile
-\begin_inset LatexCommand index
-name "fromfile"
-
-\end_inset
-
- (file=, dtype=int, count=-1, sep='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 1-d array of data type, dtype, from a file (open file object or
- string with the name of a file to read).
- The file will be read in binary mode if sep is the empty string.
- Otherwise, the file will be read in text mode with sep providing the separator
- string between the entries.
- If count is -1, then the size will be determined from the file, otherwise,
- up to count items will be read from the file.
- If fewer than count items are read, then a RunTimeWarning is issued indicating
- the number of items read.
-\end_layout
-
-\begin_layout Description
-frombuffer
-\begin_inset LatexCommand index
-name "frombuffer"
-
-\end_inset
-
- (buffer, dtype=intp, count=-1, offset=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Very similar to (binary-mode) fromstring in interpretation of the arguments,
- except buffer can be any object exposing the buffer interface (or any object
- with a __buffer__ attribute that returns a buffer exposing the buffer protocol).
- The new array shares memory with the buffer object.
- The new array will be read-only if the buffer does not expose a writeable
- buffer.
-
-\end_layout
-
-\begin_layout Description
-fromiter
-\begin_inset LatexCommand index
-name "fromiter"
-
-\end_inset
-
- (iterator_or_generator, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an array from an iterator or a generator.
- Only handles 1-dimensional cases.
- By default the data-type is determined from the objects returned from the
- iterator.
-
-\end_layout
-
-\begin_layout Description
-load
-\begin_inset LatexCommand index
-name "load"
-
-\end_inset
-
- (file)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Load a NumPy binary file (.npy), a NumPy binary zipfile (.npz), or a pickled
- Python object from an open file.
- If file is a string, then open a file with that name first.
- Which kind of file should be loaded is determined by the magic bytes at
- the front of the file (not by filename extension).
- See
-\shape italic
-save
-\shape default
- and
-\shape italic
-savez
-\shape default
- for functions which write .npy and .npz files from NumPy arrays.
- If file is a binary zipfile, then an instance of NpzObj is returned.
- This object is a simple wrapper around the zip-file which allows extraction
- of the arrays stored within it.
- The .files attribute of the NpzObj returns a list of all arrays in the archive.
- These arrays are accessible through a dictionary-like interface (obj['name'])
- or through attribute lookup through the .f attribute of the returned object
- (obj.f.name).
- If the file is a NumPy binary file (.npy), then the array itself is returned
- from this function.
- If the file contains a pickled object, then that object is returned.
-
-\end_layout
-
-\begin_layout Description
-loads
-\begin_inset LatexCommand index
-name "loads"
-
-\end_inset
-
- (str)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Load a pickled array from a string.
- Equivalent to cPickle.loads(str).
- This function will likely be deprecated in the future.
- Use cPickle instead.
-\end_layout
-
-\begin_layout Description
-save
-\begin_inset LatexCommand index
-name "save"
-
-\end_inset
-
- (file, arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Save the array into a file which can be a string or an open file-like object.
- If the file is given as a string, then it will have .npy appended if it
- does not already end with that extension.
- The .npy file format is NumPy-specific and is documented in the numpy.lib.format
- module.
- It only stores a single array.
-
-\end_layout
-
-\begin_layout Description
-savez
-\begin_inset LatexCommand index
-name "savez"
-
-\end_inset
-
- (file, *args, **kwds)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Save a sequence of arrays into a NumPy binary zipfile (.npz).
- An .npz file is a regular zip-file containing multiple .npy files.
- If keywords are given, then the keyword names are used as filenames (with
- the .npy extension added) in the zip-file with the corresponding values
- being converted to arrays and stored in the specified filename.
- Any non-keyword arguments that are passed in results in the names arr_0,
- arr_1, etc.
- being used in the zip-file (if a keyword by one of those names also exists,
- then a ValueError is raised).
-
-\end_layout
-
-\begin_layout Description
-loadtxt
-\end_layout
-
-\begin_layout Description
-savetxt
-\end_layout
-
-\begin_layout Description
-DataSource
-\end_layout
-
-\begin_layout Description
-indices
-\begin_inset LatexCommand index
-name "indices"
-
-\end_inset
-
- (dimensions, dtype=intp)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of dtype representing
-\begin_inset Formula $n$
-\end_inset
-
-(=len(dimensions)) grids of indices each with variation in a single direction.
- The returned array has shape (
-\begin_inset Formula $n$
-\end_inset
-
-,)+dimensions.
- Compare with mgrid.
-
-\end_layout
-
-\begin_layout MyCode
->>> indices((2,3))
-\newline
-array([[[0, 0, 0],
-\newline
- [1, 1, 1]],
-\newline
-
-\newline
- [[0, 1, 2],
-\newline
-
- [0, 1, 2]]])
-\end_layout
-
-\begin_layout Description
-fromfunction
-\begin_inset LatexCommand index
-name "fromfunction"
-
-\end_inset
-
- (function, dimensions, **kwargs)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an array from a function called on a tuple of index grids.
- The function should be able to take array arguments and process them like
- ufuncs (use vectorize if it doesn't).
- The function should accept as many arguments as there are dimensions which
- is a sequence of numbers indicating the length of the desired output for
- each axis.
- Keyword arguments to function may also be passed in as keywords to fromfunction.
-\end_layout
-
-\begin_layout MyCode
->>> print fromfunction(lambda i,j: i+j, (2,3))
-\newline
-[[ 0.
- 1.
- 2.]
-\newline
- [ 1.
- 2.
- 3.]]
-\end_layout
-
-\begin_layout Description
-identity
-\begin_inset LatexCommand index
-name "identity"
-
-\end_inset
-
- (n, dtype=intp)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 2-d array of shape (n,n) and data type, dtype with ones along
- the main diagonal.
-
-\end_layout
-
-\begin_layout Description
-where
-\begin_inset LatexCommand index
-name "where"
-
-\end_inset
-
- (condition[, x, y])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an array shaped like condition, that has the elements of x and
- y respectively where condition is respectively true or false.
- If x and y are not given, then it is equivalent to nonzero(condition).
-\end_layout
-
-\begin_layout Description
-flatnonzero
-\begin_inset LatexCommand index
-name "flatnonzero"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return indices that are non-zero in a flattened version of arr.
- Equivalent to a.ravel().nonzero()[0].
-\end_layout
-
-\begin_layout Description
-putmask
-\begin_inset LatexCommand index
-name "putmask"
-
-\end_inset
-
- (arr=, mask=, values=)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Performs the equivalent of
-\end_layout
-
-\begin_layout LyX-Code
-for n, obj in enumerate(
-\series bold
-mask
-\series default
-.flat):
-\end_layout
-
-\begin_layout LyX-Code
- if obj:
-\end_layout
-
-\begin_layout LyX-Code
- self.flat[n] =
-\series bold
-values
-\series default
-[n]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The values array is repeated if it is too short.
- In particular, this means that indexing on the values array is modular
- it's length, which might be surprising you are expecting putmask to work
- the same as arr[mask]=values.
-\end_layout
-
-\begin_layout Description
-lexsort
-\begin_inset LatexCommand index
-name "lexsort"
-
-\end_inset
-
- (keys=, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of indices similar to argsort except sorting is done using
- all of the provided keys.
- First a sort is computed using key[0], then the indices are further altered
- by sorting on key[1].
- This is repeated until sorting has been performed on all of the keys.
- This is a useful function for multiple-field sorting.
-\end_layout
-
-\begin_layout MyCode
->>> a = [1,2,1,3,1,5]; b = [0,4,5,6,2,3]
-\newline
->>> ind = lexsort((b,a))
-\newline
->>> print
- take(a,ind)
-\newline
-[1 1 1 2 3 5]
-\newline
->>> print take(b,ind)
-\newline
-[0 2 5 4 6 3]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Notice the order the keys had to be used in order to get a lexicographical
- sorting order.
- To clarify, suppose three equal-length sequences are fields of an underlying
- data-type: (f1,f2,f3).
- If we want to sort first on f1 and then on f2 and then on f3, the indices
- that would accomplish that sort are obtained as lexsort((f3,f2,f1)).
-\end_layout
-
-\begin_layout Section
-Operations on two or more arrays
-\end_layout
-
-\begin_layout Description
-concatenate
-\begin_inset LatexCommand index
-name "concatenate"
-
-\end_inset
-
- (seq=, axis=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a new array from elements of the sequence object seq concatenated
- along the given axis.
- The elements of the sequence object must have compatible types and be the
- same shape.
- If axis is None, then flatten each element of seq before concatenating
- together to construct a 1-d array.
-\end_layout
-
-\begin_layout Description
-correlate
-\begin_inset LatexCommand index
-name "correlate"
-
-\end_inset
-
- (x, y, mode='valid')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the 1-d cross correlation of x and y keeping portions determined
- by mode which may be 'valid' (0), 'same' (1), or 'full' (2).
- The 'full' cross-correlation between two 1-d arrays is computed as
-\begin_inset Formula \[
-z\left[n\right]=\sum_{i=\max\left(n-M,0\right)}^{\min\left(n,K\right)}x\left[i\right]y\left[n+i\right],\]
-
-\end_inset
-
-for
-\begin_inset Formula $n=0\ldots K+M$
-\end_inset
-
- where
-\begin_inset Formula $K$
-\end_inset
-
-=len(
-\begin_inset Formula $x$
-\end_inset
-
-)-1 and
-\begin_inset Formula $M$
-\end_inset
-
-=len(
-\begin_inset Formula $y$
-\end_inset
-
-)-1, and we assume
-\begin_inset Formula $K\geq M$
-\end_inset
-
- (without loss of generality because we can interchange the roles of
-\begin_inset Formula $x$
-\end_inset
-
- and
-\begin_inset Formula $y$
-\end_inset
-
- without effect).
- For this formula to work, we assume that
-\begin_inset Formula $x[i]=0$
-\end_inset
-
- when
-\begin_inset Formula $i\notin\left[0,K-1\right]$
-\end_inset
-
- and
-\begin_inset Formula $y[j]=0$
-\end_inset
-
- when
-\begin_inset Formula $j\neq[0,M-1]$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If mode is 'same' then only the
-\begin_inset Formula $K$
-\end_inset
-
- middle values are returned starting at
-\begin_inset Formula $n=\left\lfloor \frac{M-1}{2}\right\rfloor $
-\end_inset
-
-.
- If the flag has a value of 'valid' then only the middle
-\begin_inset Formula $K-M+1=\left(K+1\right)-\left(M+1\right)+1$
-\end_inset
-
- output values are returned starting at
-\begin_inset Formula $n=M.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-convolve
-\begin_inset LatexCommand index
-name "convolve"
-
-\end_inset
-
- (x, y, mode='valid')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convolution is very similar to correlation except it is defined with one
- sequence reversed:
-\begin_inset Formula \[
-z\left[n\right]=\sum_{i}x[i]y[n-i].\]
-
-\end_inset
-
- The mode keyword has the same effect as it does for correlation.
- Convolution ('full') between two 1-d arrays implements polynomial multiplicatio
-n where the array entries are viewed as coefficients for polynomials.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: Consider that
-\begin_inset Formula $(x^{3}+4x^{2}+2)$
-\end_inset
-
-
-\begin_inset Formula $\left(x^{4}+3x+1\right)$
-\end_inset
-
-=
-\begin_inset Formula $x^{7}+4x^{6}+5x^{4}+13x^{3}+4x^{2}+6x+2.$
-\end_inset
-
- This can be determined by using the code
-\family typewriter
-convolve([1,4,0,2], [1,0,0,3,1])
-\family default
- which returns
-\family typewriter
-[1,4,0,5,13,4,6,2].
-
-\family default
- Notice the one-to-one alignment between the elements of the arrays and
- the coefficients on powers of
-\begin_inset Formula $x$
-\end_inset
-
- in the polynomial.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-outer
-\begin_inset LatexCommand index
-name "outer"
-
-\end_inset
-
- (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- compute an outerproduct which is syntactic sugar for a.ravel() [:,newaxis]
- * b.ravel() [newaxis,:] (after first converting a and b to ndarrays).
-\end_layout
-
-\begin_layout MyCode
->>> print outer([1,2,3],[10,100,1000])
-\newline
-[[ 10 100 1000]
-\newline
- [ 20 200 2000]
-\newline
-
- [ 30 300 3000]]
-\end_layout
-
-\begin_layout Description
-inner
-\begin_inset LatexCommand index
-name "inner"
-
-\end_inset
-
- (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the inner product between two arrays.
- This is an array that has shape a.shape[:-1] + b.shape[:-1] with elements
- computed as the sum of the product of the elements from the last dimensions
- of a and b.
- In particular, let
-\begin_inset Formula $I$
-\end_inset
-
- and
-\begin_inset Formula $J$
-\end_inset
-
- be the super
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-A super index is 0 or more integer indices used to index into an N-dimensional
- array.
- How many indices a super index represents should be implied by context.
-\end_layout
-
-\end_inset
-
- indices selecting the 1-dimensional arrays
-\begin_inset Formula $a[I,:]$
-\end_inset
-
- and
-\begin_inset Formula $b[J,:]$
-\end_inset
-
-, then the resulting array,
-\begin_inset Formula $r$
-\end_inset
-
-, is
-\begin_inset Formula \[
-r[I,J]=\sum_{k}a[I,k]b[J,k].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-dot
-\begin_inset LatexCommand index
-name "dot"
-
-\end_inset
-
- (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the dot (matrix) product between two arrays.
- The product-sum is over the last dimension of
-\begin_inset Formula $a$
-\end_inset
-
- and the second-to-last dimension of
-\begin_inset Formula $b$
-\end_inset
-
-.
- Specifically, if
-\begin_inset Formula $I$
-\end_inset
-
- and
-\begin_inset Formula $J$
-\end_inset
-
- are super indices for
-\begin_inset Formula $a[I,:]$
-\end_inset
-
- and
-\begin_inset Formula $b[J,:,j]$
-\end_inset
-
- so that
-\begin_inset Formula $j$
-\end_inset
-
- is the index of the last dimension of
-\begin_inset Formula $b$
-\end_inset
-
-.
- Then, the shape of the resulting array is a.shape[:-1] + b.shape[:-2] + (b.shape[-
-1],) with elements.
-
-\begin_inset Formula \[
-r[I,J,j]=\sum_{k}a[I,k]b[J,k,j],\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\begin_inset LatexCommand index
-name "vdot"
-
-\end_inset
-
-vdot (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the dot product between two arrays (flattened into one-dimensional
- vectors) after conjugating the first vector.
- This is an inner-product following the physicists convention of conjugating
- the first argument.
-\begin_inset Formula \[
-r=\sum_{k}\overline{\textrm{a.flat}[k]}\textrm{b.flat}[k].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-tensordot
-\begin_inset LatexCommand index
-name "tensordot"
-
-\end_inset
-
- (a, b, axes=(-1,0))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes a dot-product between two arrays where the sum is taken over the
- axes specified by the 2-sequence which can have either scalar or sequence
- entries.
- The axes specified are summed over and the remaining axes are used to construct
- the result.
- So, for example, if
-\begin_inset Formula $a$
-\end_inset
-
- is
-\begin_inset Formula $3\times4\times5$
-\end_inset
-
- and
-\begin_inset Formula $b$
-\end_inset
-
- is
-\begin_inset Formula $4\times3\times2$
-\end_inset
-
- then if axes=([1,0],[0,1]) (or axes=([0,1],[1,0])) the result will be
-\begin_inset Formula $5\times2$
-\end_inset
-
-.
- Let
-\begin_inset Formula $I$
-\end_inset
-
- represent the indices of the un-summed axes in
-\begin_inset Formula $a$
-\end_inset
-
-, let
-\begin_inset Formula $J$
-\end_inset
-
- represent the indices of the un-summed axes in
-\begin_inset Formula $b$
-\end_inset
-
- and let
-\begin_inset Formula $K$
-\end_inset
-
- represent the the indices of the axes summed over in both
-\begin_inset Formula $a$
-\end_inset
-
- and
-\begin_inset Formula $b$
-\end_inset
-
-.
- Also, let
-\begin_inset Formula $a_{t}$
-\end_inset
-
- represent a transposed version of
-\begin_inset Formula $a$
-\end_inset
-
- where the axes to be summed over are pushed to the end, and let
-\begin_inset Formula $b_{t}$
-\end_inset
-
- represent a transposed version of
-\begin_inset Formula $b$
-\end_inset
-
- where the axes to be summed over are pushed to the front.
- Then, using
-\begin_inset Formula $\sum_{K}$
-\end_inset
-
- to represent a multi-index sum, the result can be written as
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-r[I,J]=\sum_{K}a_{t}[I,K]b_{t}[K,J]\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cross
-\begin_inset LatexCommand index
-name "cross"
-
-\end_inset
-
- (a, b, axisa=-1, axisb=-1, axisc=-1, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the cross product of two (arrays of) vectors.
- The cross product is performed over the axes of the input arrays indicated
- by the axisa, and axisb arguments.
- For both arrays, the axis used must have dimension either 2 or 3.
- If both axes used have dimension 2, then only the z-component of the equivalent
- 3-d cross product is returned.
- Otherwise, the entire vector is returned.
- The axisc argument gives the axis of the vectors in the returned cross-product
- result.
- If axis is not None, then it is assumed that axisa=axisb=axisc=axis (regardless
- of what else is specified).
-
-\end_layout
-
-\begin_layout Description
-allclose
-\begin_inset LatexCommand index
-name "allclose"
-
-\end_inset
-
- (a, b, rtol=
-\begin_inset Formula $10^{-5}$
-\end_inset
-
-, atol=
-\begin_inset Formula $10^{-8}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns true if all components of a and b are equal subject to the given
- relative and absolute tolerances.
- This returns true if every element of a and b satisfy
-\begin_inset Formula \[
-\left|a-b\right|<\textrm{atol}+\textrm{rtol}\left|b\right|.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Printing arrays
-\end_layout
-
-\begin_layout Description
-array2string
-\begin_inset LatexCommand index
-name "array2string"
-
-\end_inset
-
- (a)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The default printing mechanism uses this function to produce a string from
- an array.
-
-\end_layout
-
-\begin_layout Description
-set_printoptions
-\begin_inset LatexCommand index
-name "set\\_printoptions"
-
-\end_inset
-
- (precision=None, theshold=None, edgeitems=None, linewidth=None, suppress=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set options associated with representing an array.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-precision the default number of digits of precision for floating point output
- (default 8);
-\end_layout
-
-\begin_layout Description
-threshold total number of array elements which triggers printing only the
-
-\begin_inset Quotes eld
-\end_inset
-
-ends
-\begin_inset Quotes erd
-\end_inset
-
- of the array rather than a full representation (default 1000);
-\end_layout
-
-\begin_layout Description
-edgeitems number of array elements in summary at beginning and end of each
- dimension (default 3);
-\end_layout
-
-\begin_layout Description
-linewidth the number of characters per line (default 75);
-\end_layout
-
-\begin_layout Description
-suppress Boolean value indicating whether or not to suppress printing of
- small floating point values using scientific notation (default False).
-\end_layout
-
-\end_deeper
-\begin_layout Description
-get_printoptions
-\begin_inset LatexCommand index
-name "get\\_printoptions"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the values of precision, threshold, edgeitems, linewidth, and suppress
- that control printing of arrays.
-\end_layout
-
-\begin_layout Description
-set_string_function
-\begin_inset LatexCommand index
-name "set\\_string\\_function"
-
-\end_inset
-
- (func, repr=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the function to use in response to str(array) or repr(array).
- By default this function is array2string.
- The function passed in must take an array argument and return a string.
- If func is None, then the print function is reset to a simple internal
- function.
-
-\end_layout
-
-\begin_layout Section
-Functions redundant with methods
-\end_layout
-
-\begin_layout Standard
-Several functions are available primarily for purposes of backward compatibility
- with old Numeric, and are therefore redundant.
- The functions are all simple wrappers for asarray(a).<function>(*args, **kwds),
- or are replaceable by attribute access.
- The following list documents them.
- It is not recommended that these functions be used in new programs, but
- there are no plans for removing them as in functional form they work with
- arbitrary sequences which is sometimes desirable.
- The functions that mirror methods and attributes are:
-\series bold
-take
-\series default
-
-\begin_inset LatexCommand index
-name "take"
-
-\end_inset
-
-,
-\series bold
-reshape
-\series default
-
-\begin_inset LatexCommand index
-name "reshape"
-
-\end_inset
-
-,
-\series bold
-squeeze
-\series default
-
-\begin_inset LatexCommand index
-name "squeeze"
-
-\end_inset
-
-,
-\series bold
-choose
-\series default
-
-\begin_inset LatexCommand index
-name "choose"
-
-\end_inset
-
-,
-\series bold
-repeat
-\series default
-
-\begin_inset LatexCommand index
-name "repeat"
-
-\end_inset
-
-,
-\series bold
-put
-\series default
-
-\begin_inset LatexCommand index
-name "put"
-
-\end_inset
-
-,
-\series bold
-swapaxes
-\series default
-
-\begin_inset LatexCommand index
-name "swapaxes"
-
-\end_inset
-
-,
-\series bold
-transpose
-\series default
-
-\begin_inset LatexCommand index
-name "transpose"
-
-\end_inset
-
-,
-\series bold
-real
-\series default
-
-\begin_inset LatexCommand index
-name "real"
-
-\end_inset
-
-,
-\series bold
-imag
-\series default
-
-\begin_inset LatexCommand index
-name "imag"
-
-\end_inset
-
-,
-\series bold
-sort
-\series default
-
-\begin_inset LatexCommand index
-name "sort"
-
-\end_inset
-
-,
-\series bold
-argsort
-\series default
-
-\begin_inset LatexCommand index
-name "argsort"
-
-\end_inset
-
-,
-\series bold
-amax
-\begin_inset LatexCommand index
-name "amax"
-
-\end_inset
-
-, argmax
-\series default
-
-\begin_inset LatexCommand index
-name "argmax"
-
-\end_inset
-
-,
-\series bold
-amin
-\begin_inset LatexCommand index
-name "amin"
-
-\end_inset
-
-
-\series default
-,
-\series bold
-argmin
-\series default
-
-\begin_inset LatexCommand index
-name "argmin"
-
-\end_inset
-
-,
-\series bold
-ptp
-\series default
-
-\begin_inset LatexCommand index
-name "ptp"
-
-\end_inset
-
-,
-\series bold
-alen
-\series default
-
-\begin_inset LatexCommand index
-name "alen"
-
-\end_inset
-
-,
-\series bold
-searchsorted
-\series default
-
-\begin_inset LatexCommand index
-name "searchsorted"
-
-\end_inset
-
-,
-\series bold
-diagonal
-\series default
-
-\begin_inset LatexCommand index
-name "diagonal"
-
-\end_inset
-
-,
-\series bold
-trace
-\series default
-
-\begin_inset LatexCommand index
-name "trace"
-
-\end_inset
-
-,
-\series bold
-ravel
-\series default
-
-\begin_inset LatexCommand index
-name "ravel"
-
-\end_inset
-
-,
-\series bold
-nonzero
-\series default
-
-\begin_inset LatexCommand index
-name "nonzero"
-
-\end_inset
-
-,
-\series bold
-shape
-\series default
-
-\begin_inset LatexCommand index
-name "shape"
-
-\end_inset
-
-,
-\series bold
-compress
-\series default
-
-\begin_inset LatexCommand index
-name "compress"
-
-\end_inset
-
-,
-\series bold
-clip
-\series default
-
-\begin_inset LatexCommand index
-name "clip"
-
-\end_inset
-
-,
-\series bold
-std
-\series default
-
-\begin_inset LatexCommand index
-name "std"
-
-\end_inset
-
-,
-\series bold
-var
-\series default
-
-\begin_inset LatexCommand index
-name "var"
-
-\end_inset
-
-,
-\series bold
-mean
-\series default
-
-\begin_inset LatexCommand index
-name "mean"
-
-\end_inset
-
-,
-\series bold
-sum
-\series default
-
-\begin_inset LatexCommand index
-name "sum"
-
-\end_inset
-
-,
-\series bold
-cumsum
-\series default
-
-\begin_inset LatexCommand index
-name "cumsum"
-
-\end_inset
-
-,
-\series bold
-product
-\series default
-
-\begin_inset LatexCommand index
-name "product"
-
-\end_inset
-
-,
-\series bold
-cumproduct
-\series default
-
-\begin_inset LatexCommand index
-name "cumproduct"
-
-\end_inset
-
-,
-\series bold
-sometrue
-\begin_inset LatexCommand index
-name "sometrue"
-
-\end_inset
-
-
-\series default
- (method is .any),
-\series bold
-alltrue
-\begin_inset LatexCommand index
-name "alltrue"
-
-\end_inset
-
-
-\series default
- (method is .all),
-\series bold
-around
-\begin_inset LatexCommand index
-name "around"
-
-\end_inset
-
-
-\series default
- (method is .round),
-\series bold
-rank
-\begin_inset LatexCommand index
-name "rank"
-
-\end_inset
-
-
-\series default
- (attribute is .ndim),
-\series bold
-shape
-\series default
-
-\begin_inset LatexCommand index
-name "shape"
-
-\end_inset
-
-,
-\series bold
-size
-\begin_inset LatexCommand index
-name "size"
-
-\end_inset
-
-
-\series default
- (.size or .shape[axis]), and
-\series bold
-copy
-\series default
-
-\begin_inset LatexCommand index
-name "copy"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Section
-Dealing with data types
-\end_layout
-
-\begin_layout Description
-dtype (obj, align=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a data-type object from any object.
- See Chapter
-\begin_inset LatexCommand ref
-reference "cha:Data-descriptor-objects"
-
-\end_inset
-
- for a more detailed explanation of what can be interpreted as a data-type
- object and the meaning of the align keyword.
-
-\end_layout
-
-\begin_layout Description
-maximum_sctype (arg)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the array-scalar type of highest precision of the same general
- kind as arg which can be any recognized form for describing a data-type.
-\end_layout
-
-\begin_layout Description
-issctype (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns True if obj is an array data type (or a recognized alias for one)
-\end_layout
-
-\begin_layout Description
-obj2sctype (obj, default=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the array type object corresponding to obj which can be an array
- type already, a python type object, an actual array, or any recognized
- alias for an array type object.
- If no suitable data type object can be determined, return default.
-\end_layout
-
-\begin_layout Description
-sctype2char (sctype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the typecode character associated with an array-scalar type dtype.
- The first argument is first converted to a dtype if it needs to be.
-
-\end_layout
-
-\begin_layout Tip
-the type attribute of data-type objects are actual Python type objects subclasse
-d in a hierarchy of types.
- This can often be useful to check data types generically.
- For example, issubclass(dtype.type, integer) can check to see if the data
- type is one of the 10 different integer types.
- The issubclass function, however, raises an error if either argument is
- not an actual type object.
- NumPy defines _(arg1, arg2) that will return false instead of raise an
- error.
- Alternatively, dtype.kind is a character describing the class of the data-type
- so dtype.kind in 'iu' would also check to see if the data-type is an integer
- type.
-\end_layout
-
-\begin_layout Description
-can_cast (from=d1, to=d2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return Boolean value indicating whether or not data type d1 can be cast
- to data type d2 safely (without losing precision or information).
-
-\end_layout
-
-\begin_layout Chapter
-Additional Convenience Routines
-\end_layout
-
-\begin_layout Quotation
-A committee is twelve men doing the work of one.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-John F.
- Kennedy
-\end_layout
-
-\begin_layout Quotation
-Your mind can only hold one thought at a time.
- Make it a positive and constructive one.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-H.
- Jackson Brown Jr.
-
-\end_layout
-
-\begin_layout Section
-Shape functions
-\end_layout
-
-\begin_layout Description
-atleast_1d
-\begin_inset LatexCommand index
-name "atleast\\_1d"
-
-\end_inset
-
- (a1,a2,...,an)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Force a sequence of arrays (including array scalars) to each be at least
- 1-d.
-
-\end_layout
-
-\begin_layout Description
-atleast_2d
-\begin_inset LatexCommand index
-name "atleast\\_2d"
-
-\end_inset
-
- (a1,a2,...,an)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Force a sequence of arrays (including array scalars) to each be at least
- 2-d.
- Dimensions of length 1 are pre-pended to reach a two-dimensional array.
-\end_layout
-
-\begin_layout Description
-atleast_3d
-\begin_inset LatexCommand index
-name "atleast\\_3d"
-
-\end_inset
-
- (a1,a2,...,an)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Force a sequence of arrays (including array_scalars) to each be at least
- 3-d.
- Dimensions of length 1 are pre-pended to reach a two-dimensional array.
-\end_layout
-
-\begin_layout Description
-roll
-\begin_inset LatexCommand index
-name "roll"
-
-\end_inset
-
- (arr, shift, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array with the contents of arr shifted (rolled) by the amount
- given in the integer argument shift along the axis specified.
- If axis is None, then the shift takes place in the ravelled array (but
- the returned array has the same shape as arr).
- Elements that shift outside the array are rolled back into the array from
- the opposite side.
-
-\end_layout
-
-\begin_layout Description
-rollaxis
-\begin_inset LatexCommand index
-name "rollaxis"
-
-\end_inset
-
- (arr, axis, start)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return arr transposed so that the provided axis is inserted into the shape
- before start with the other dimensions rolled.
- Thus, if arr.shape is (i,j,k,l) then rollaxis(arr, 2, 0) has shape (k,i,j,l)
- and rollaxis(arr, 1, 3) has shape (i,k,j,l).
-\end_layout
-
-\begin_layout Description
-vstack
-\begin_inset LatexCommand index
-name "vstack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of arrays along the first axis (row wise).
- Arrays in seq must have the same shape along all dimensions but the first.
- Rebuilds array divided by vsplit.
- All 1-d arrays will be stacked row-wise.
-\end_layout
-
-\begin_layout Description
-hstack
-\begin_inset LatexCommand index
-name "hstack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of arrays along the second axis (column wise).
- Arrays in seq must have the same shape along all dimensions but the second.
- Rebuilds array divided by hsplit.
- Notice that 1-d arrays will be appended into a new 1-d array.
- Use column_stack to get a 2-d array from 1-d arrays.
- If some arrays are already 2-d, then the 1-d arrays need to have a dimension
- added to the end (
-\emph on
-e.g.
-
-\emph default
-
-\family typewriter
-y[:,newaxis]
-\family default
-) in order to stack correctly.
-
-\end_layout
-
-\begin_layout Description
-column_stack
-\begin_inset LatexCommand index
-name "column\\_stack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of arrays as columns into a 2-d array.
- 1-d arrays are converted to 2-d arrays and transposed.
- All arrays must have shapes so that the resulting array is well defined.
- Compare with
-\series bold
-hstack
-\series default
-.
-\end_layout
-
-\begin_layout Description
-row_stack
-\begin_inset LatexCommand index
-name "row\\_stack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of 1-d arrays as rows into a 2-d array (alias for
-\series bold
-vstack
-\series default
-).
-
-\end_layout
-
-\begin_layout Description
-dstack
-\begin_inset LatexCommand index
-name "dstack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of arrays along the third axis (depth wise).
- Arrays in seq must have the same shape along all dimensions but the third.
- Rebuilds array divided by vsplit.
-\end_layout
-
-\begin_layout Description
-array_split
-\begin_inset LatexCommand index
-name "array\\_split"
-
-\end_inset
-
- (ary, i_or_s, axis=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Divide ary into a list of sub-arrays along the specified axis.
- The i_or_s argument stands for indices_or_sections.
- If i_or_s is an integer, ary is divided into that many equally-sized arrays.
- If it is impossible to make an even split, each of the leading arrays in
- the returned list have one additional member.
- If i_or_s is a list of sorted integer, its entries define the indexes where
- ary is split.
- An empty list for i_or_s results in a single sub-array equal to the original
- array.
-\end_layout
-
-\begin_layout Description
-split
-\begin_inset LatexCommand index
-name "split"
-
-\end_inset
-
- (ary, i_or_s, axis=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The same as array_split() except if i_or_s is an integer and it is impossible
- to make an even split, an error is raised.
-\end_layout
-
-\begin_layout Description
-hsplit
-\begin_inset LatexCommand index
-name "hsplit"
-
-\end_inset
-
- (ary, i_or_s)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Split a single array into multiple columns of sub-arrays (along the first
- axis if 1-d or along the second second if >1-d).
- Only works on arrays of 1 or more dimension.
-
-\end_layout
-
-\begin_layout Description
-vsplit
-\begin_inset LatexCommand index
-name "vsplit"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Split a single array into multiple rows of sub-arrays (along the first
- axis).
- Only works on arrays of 2 or more dimensions.
-\end_layout
-
-\begin_layout Description
-dsplit
-\begin_inset LatexCommand index
-name "dsplit"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Split a single array into multiple sub-arrays along the third axis (depth).
- Only works on arrays of 3 or more dimensions.
-\end_layout
-
-\begin_layout Description
-apply_along_axis
-\begin_inset LatexCommand index
-name "apply\\_along\\_axis"
-
-\end_inset
-
- (func1d, axis, arr, *args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Execute func1d(arr[sel_i], *args) where func1d takes 1-d arrays and arr
- is an N-d array, where sel_i is a selection object sufficient to select
- a 1-d sub-array along the given axis.
- The function is executed for all 1-d arrays along axis in arr.
-
-\end_layout
-
-\begin_layout Description
-apply_over_axes
-\begin_inset LatexCommand index
-name "apply\\_over\\_axes"
-
-\end_inset
-
- (func, a, axes)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- For each axis in the axes sequence, call func as
-\family typewriter
-res=func(a, axis)
-\family default
-.
- If res is the same shape as a then set
-\family typewriter
-a=res
-\family default
- and continue.
- if
-\family typewriter
-res.ndim = a.ndim -1
-\family default
-, then insert a dimension before axis and continue.
-
-\end_layout
-
-\begin_layout Description
-expand_dims
-\begin_inset LatexCommand index
-name "expand\\_dims"
-
-\end_inset
-
- (a, axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Expand the shape of array a by including newaxis
-\series bold
-before
-\series default
- the given axis.
-\end_layout
-
-\begin_layout Description
-resize
-\begin_inset LatexCommand index
-name "resize"
-
-\end_inset
-
- (a, new_shape)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a new array with the specified shape which can be any size.
- The new array is filled with repeated copies of a.
- This function is similar in spirit to a.resize(new_shape) except that it
- fills in the new array with repeated copies and returns a new array.
-
-\end_layout
-
-\begin_layout Description
-kron
-\begin_inset LatexCommand index
-name "kron"
-
-\end_inset
-
- (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a composite array with blocks from
-\emph on
-b
-\emph default
- scaled by elements of
-\emph on
-a
-\emph default
-.
- The number of dimensions of
-\emph on
-a
-\emph default
- and
-\emph on
-b
-\emph default
- should be the same.
- If not, then the input with fewer dimensions is pre-pended with ones (broadcast
-) to the same shape as the input with more dimensions.
- The return array has this same number of dimensions with shape given by
- the product of the shape of
-\emph on
-a
-\emph default
- and the shape of
-\emph on
-b
-\emph default
-.
- If either a or b is a scalar then this function is equivalent to multiply(a,b).
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- For example, if
-\emph on
-a
-\emph default
- and
-\emph on
-b
-\emph default
- are is 1-d the result is
-\begin_inset Formula \[
-\left[\begin{array}{cccc}
-a[0]*b & a[1]*b & \cdots & a[-1]*b\end{array}\right]\]
-
-\end_inset
-
- while if
-\emph on
-a
-\emph default
- and
-\emph on
-b
-\emph default
- are 2-d, the result is
-\begin_inset Formula \[
-\left[\begin{array}{cccc}
-a[0,0]*b & a[0,1]*b & \cdots & a[0,-1]*b\\
-a[1,0]*b & a[1,1]*b & \cdots & a[1,-1]*b\\
-\vdots & \vdots & \ddots & \vdots\\
-a[-1,0]*b & a[-1,1]*b & \cdots & a[-1,-1]*b\end{array}\right]\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example:
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> kron([1,10,100],[5,6,7])
-\newline
-array([ 5, 6, 7, 50, 60, 70, 500, 600,
- 700])
-\newline
->>> kron([[1,10],[100,1000]],[[2,3],[4,5]])
-\newline
-array([[ 2, 3, 20,
- 30],
-\newline
- [ 4, 5, 40, 50],
-\newline
- [ 200, 300, 2000, 3000],
-\newline
-
- [ 400, 500, 4000, 5000]])
-\end_layout
-
-\begin_layout Description
-tile
-\begin_inset LatexCommand index
-name "tile"
-
-\end_inset
-
- (a, reps)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Tile an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array using the shape information in reps to create a larger
-
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- This is equivalent to kron(ones(reps, a.dtype), a).
- The number of dimensions of a and the length of shape should be the same
- or else 1's will be pre-pended to make them the same.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example:
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> tile([5,6,7],(1,2,3))
-\newline
-array([[[5, 6, 7, 5, 6, 7, 5, 6, 7],
-\newline
- [5,
- 6, 7, 5, 6, 7, 5, 6, 7]]])
-\end_layout
-
-\begin_layout Section
-Basic functions
-\end_layout
-
-\begin_layout Description
-average
-\begin_inset LatexCommand index
-name "average"
-
-\end_inset
-
- (a, axis=None, weights=None, returned=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the average along the indicated axis.
- If axis is None, average over the entire array.
- Inputs can be integer or floating types; result is type float.
- If weights are given, the result is sum(a*weights)/sum(weights).
- Therefore, weights must have shape equal to a.shape or be 1-d with length
- a.shape[axis].
- Integer weights are converted to float.
- If returned is True, then return a tuple showing both the result and the
- sum of the weights (or count of the values).
- The shape of these two results will be the same.
-
-\end_layout
-
-\begin_layout Description
-cov
-\begin_inset LatexCommand index
-name "cov"
-
-\end_inset
-
- (x, y=None, rowvar=1, bias=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the covariance matrix of data in x.
- If x is a vector and y is None, then this function is equivalent to asarray(x).v
-ar().
- Otherwise, x is interpreted as observations of several random variables.
- If rowvar is True (default), then the variables are in the rows and the
- observations of the variables are in the columns.
- Otherwise, the variables are in the columns and the observations are in
- the rows.
- If y is given then it is treated as another variable or set of variables
- to be added to x.
- By default, a so-called unbiased estimate of the covariance matrix is made.
- If bias is non-zero, then a biased normalization factor (with better mean-squar
-e error performance) is used instead.
- If
-\begin_inset Formula $\mathbf{X}$
-\end_inset
-
- is a random vector, then the covariance matrix is defined as
-\begin_inset Formula \[
-\mathbf{C}=E\left[\left(\mathbf{X}-E\mathbf{X}\right)\left(\mathbf{X}-E\mathbf{X}\right)^{H}\right].\]
-
-\end_inset
-
- It can be approximated as
-\begin_inset Formula \[
-\mathbf{C}\approx\frac{1}{P}\sum_{i=0}^{N-1}\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)^{H}\]
-
-\end_inset
-
- where
-\begin_inset Formula $\mathbf{x}_{i}$
-\end_inset
-
- is an observation of
-\begin_inset Formula $\mathbf{X}$
-\end_inset
-
- (as a column-vector),
-\begin_inset Formula $N$
-\end_inset
-
- is the number of observations made and
-\begin_inset Formula $P=N-1$
-\end_inset
-
- for an unbiased estimate or
-\begin_inset Formula $P=N$
-\end_inset
-
- for a biased (but lower mean-squared error) estimate.
-
-\end_layout
-
-\begin_layout Description
-corrcoef
-\begin_inset LatexCommand index
-name "corrcoef"
-
-\end_inset
-
- (x, y=None, rowvar=1, bias=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Estimate the correlation coefficient of x.
- By default, each row of x contains a random variable with observations
- of the random variable in the columns of x.
- (If rowvar is False, the each column is a random variable with observations
- in the rows).
- The y argument can be used to append additional variables to x.
- The
-\begin_inset Formula $i^{\textrm{th}}$
-\end_inset
-
- row and
-\begin_inset Formula $j^{\textrm{th}}$
-\end_inset
-
- column of the correlation coefficient matrix is defined as
-\begin_inset Formula \[
-\rho_{ij}=\frac{C_{ij}}{\sqrt{C_{ii}C_{jj}}}\]
-
-\end_inset
-
- where
-\begin_inset Formula $\mathbf{C}$
-\end_inset
-
- is the covariance matrix.
- The rowvar and bias arguments are passed on to the cov function to estimate
-
-\begin_inset Formula $\mathbf{C}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-msort
-\begin_inset LatexCommand index
-name "msort"
-
-\end_inset
-
- (a)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array, sorted along the first axis.
- Equivalent to b=a.copy(); b.sort(0)
-\end_layout
-
-\begin_layout Description
-median
-\begin_inset LatexCommand index
-name "median"
-
-\end_inset
-
- (m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the median of m along its first dimension.
-\end_layout
-
-\begin_layout Description
-bincount
-\begin_inset LatexCommand index
-name "bincount"
-
-\end_inset
-
- (list=, weights=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The list argument is a 1-d integer array.
- Let
-\begin_inset Formula $r$
-\end_inset
-
- be the returned 1-d array whose length is (list.max()+1).
- If weights is None, then
-\begin_inset Formula $r[i]$
-\end_inset
-
- is the number of occurrences of
-\begin_inset Formula $i$
-\end_inset
-
- in list.
- If weight is present, then the
-\begin_inset Formula $i^{\textrm{th}}$
-\end_inset
-
- element is
-\begin_inset Formula \[
-r[i]=\sum_{j:\textrm{list}\left[j\right]=i}\textrm{weights}[j].\]
-
-\end_inset
-
- Notice that if weights is None, it is equivalent to a weights array of
- all 1.
- The length of weights must be the same as the length of list.
-
-\end_layout
-
-\begin_layout Description
-digitize
-\begin_inset LatexCommand index
-name "digitize"
-
-\end_inset
-
- (x=,bins=)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of integers the same length as x with values
-\begin_inset Formula $i$
-\end_inset
-
- such that
-\begin_inset Formula $\textrm{bins}\left[i-1\right]\leq x<\textrm{bins}\left[i\right]$
-\end_inset
-
- if bins is monotonically increasing, or
-\begin_inset Formula $\textrm{bins}[i]\leq x<\textrm{bins}[i-1]$
-\end_inset
-
- if bins is monotonically decreasing.
- When
-\begin_inset Formula $x$
-\end_inset
-
- is beyond the bounds of bins, return either
-\begin_inset Formula $i=0$
-\end_inset
-
- or
-\begin_inset Formula $i=$
-\end_inset
-
-len(bins) as appropriate.
-\end_layout
-
-\begin_layout Description
-histogram
-\begin_inset LatexCommand index
-name "histogram"
-
-\end_inset
-
- (x=, bins=None, range=None, normed=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a histogram for the data in x (treated as one-dimensional array
- of type float).
- If bins is not a sequence, then bins should be the number of bins which
- will be constructed ranging from range[0] to range[1] or x.min() to x.max()
- if range is None.
- If normed is True, then the histogram will be normalized and comparable
- with a probability density function, otherwise it will be a count of the
- number of items in each bin.
- The return value is the tuple (n, bins) where n is the histogram.
-\end_layout
-
-\begin_layout Description
-histogram2d
-\begin_inset LatexCommand index
-name "histogram2d"
-
-\end_inset
-
- (x, y, bins=10, range=None, normed=False)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the two-dimensional histogram for a dataset (x,y) given the bins.
- Returns (histogram, xedges, yedges).
- The bins argument can be either the number of bins or a sequence of the
- bin edges if the x and y directions should have the same bins.
- If the bins argument is a sequence of length 2, then separate bin edges
- will be computed.
- The first element can be either the number of bins or the bin edges for
- the x-direction.
- The second element is interpreted as the number of bins or the bin edges
- for the y-direction.
- The returned histogram array, H, is a count of the number of samples in
- each bin.
- The array is oriented such that H[i,j] is the number of samples falling
- into binx[j] and biny[i] (notice the association x<->j and y<->i).
- Setting normed to True returns a density rather than a bin-count.
- The range argument allows specifying lower and upper bin edges (in a sequence
- of length 2 with 2-length sequences in each entry).
- The default is [[x.min(), x.max()],[y.min(), y.max()]].
-
-\end_layout
-
-\begin_layout Description
-histogramdd
-\begin_inset LatexCommand index
-name "histogramdd"
-
-\end_inset
-
- (sample, bins=10, range=None, normed=False)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the
-\begin_inset Formula $D$
-\end_inset
-
--dimensional histogram for a (vector) dataset contained in sample give the
- bins.
- The dataset is a sequence of
-\begin_inset Formula $D$
-\end_inset
-
- arrays or an
-\begin_inset Formula $N\times D$
-\end_inset
-
- array where
-\begin_inset Formula $N$
-\end_inset
-
- is the number of samples and
-\begin_inset Formula $D$
-\end_inset
-
- is the number of dimensions.
- Returns (histogram, edges) where histogram is a
-\begin_inset Formula $D$
-\end_inset
-
--dimensional array of shape given by the number of bins selected in each
- axis containing the number of counts that a point in the sample data fell
- into the volume bin specified.
- The edges sequence has
-\begin_inset Formula $D$
-\end_inset
-
--entries to specify the edge boundaries for each dimension.
- The bins argument is a sequence of edge arrays or a sequence of the number
- of bins.
- If a scalar is given, it is assumed to be the number of bins for all dimensions.
- The range is a length-
-\begin_inset Formula $D$
-\end_inset
-
- sequence containing lower and upper bin edges which default to the min
- and maximum of the respective datasets.
- If normed is True, then a density rather than a bin-count is returned.
-
-\end_layout
-
-\begin_layout Description
-logspace
-\begin_inset LatexCommand index
-name "logspace"
-
-\end_inset
-
- (start, stop, num=50, endpoint=True,base=10.0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evenly spaced samples on a logarithmic scale.
- Returns num evenly spaced (in logspace) samples from base**start to base**stop.
- If endpoint is True, then the last sample is base**stop.
-\end_layout
-
-\begin_layout Description
-linspace
-\begin_inset LatexCommand index
-name "linspace"
-
-\end_inset
-
- (start, stop, num=50, endpoint=True, retstep=False):
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evenly spaced samples.
- Returns num evenly spaced samples from start to stop.
- If endpoint is True, then the last sample is stop.
- If retstep is True, then return the computed step size.
-\end_layout
-
-\begin_layout Description
-meshgrid
-\begin_inset LatexCommand index
-name "meshgrid"
-
-\end_inset
-
- (x, y)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- For 1-d arrays x, y with lengths Nx=len(x) and Ny = len(y), return X, Y
- where X and Y are (Ny, Nx) shaped arrays with the elements of x and y repeated
- to fill the array.
-
-\end_layout
-
-\begin_layout MyCode
->>> X,Y = meshgrid([1,2,3], [4,5,6,7]); print X; print Y
-\newline
-[[1 2 3]
-\newline
- [1 2 3]
-\newline
-
- [1 2 3]
-\newline
- [1 2 3]]
-\newline
-[[4 4 4]
-\newline
- [5 5 5]
-\newline
- [6 6 6]
-\newline
- [7 7 7]]
-\end_layout
-
-\begin_layout Description
-select
-\begin_inset LatexCommand index
-name "select"
-
-\end_inset
-
- (condlist, choicelist, default=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an array comprised from different elements of choicelist depending
- on the list of conditions.
- The condlist argument is a list of Boolean condition arrays.
- The choicelist argument is a list of choice arrays (of the same size as
- the arrays in condlist).
- The result has the same size as the arrays in choicelist.
- If condlist is [
-\begin_inset Formula $c_{0},\ldots,c_{N-1}$
-\end_inset
-
-], then choicelist must be of length
-\begin_inset Formula $N$
-\end_inset
-
-.
- The elements of choicelist can then be represented as [
-\begin_inset Formula $v_{0},\ldots,v_{N-1}$
-\end_inset
-
-].
- The default choice if none of the conditions are met is given as the default
- argument.
- The conditions are tested in order and the first one satisfied is used
- to select the choice.
- In other words, the elements of the output array are found from the following
- tree (evaluated on an element-by-element basis)
-\end_layout
-
-\begin_layout LyX-Code
-
-\series bold
-if
-\series default
-
-\begin_inset Formula $c_{0}$
-\end_inset
-
-:
-\begin_inset Formula $v_{0}$
-\end_inset
-
-
-\newline
-
-\series bold
-elif
-\series default
-
-\begin_inset Formula $c_{1}$
-\end_inset
-
-:
-\begin_inset Formula $v_{1}$
-\end_inset
-
-
-\newline
-...
-\newline
-
-\series bold
-elif
-\series default
-
-\begin_inset Formula $c_{N-1}$
-\end_inset
-
-:
-\begin_inset Formula $v_{N-1}$
-\end_inset
-
-
-\newline
-
-\series bold
-else
-\series default
-: default
-\end_layout
-
-\begin_layout Description
-piecewise
-\begin_inset LatexCommand index
-name "piecewise"
-
-\end_inset
-
- (x, condlist, funclist, *args, **kw)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute a piecewise-defined function.
- A piecewise defined function is
-\begin_inset Formula \[
-f\left(x\right)=\left\{ \begin{array}{cc}
-f_{1}\left(x\right) & x\in S_{1},\\
-f_{2}\left(x\right) & x\in S_{2},\\
-\vdots & \vdots\\
-f_{n}\left(x\right) & x\in S_{n}.\end{array}\right.\]
-
-\end_inset
-
-where
-\begin_inset Formula $S_{1}$
-\end_inset
-
- are sets.
- Thus, the function is defined differently over different sub-domains of
- the input.
- Such a function can be computed using
-\family typewriter
-select
-\family default
- but such an implementation means calling each
-\begin_inset Formula $f_{i}$
-\end_inset
-
- over the entire region of
-\begin_inset Formula $x.$
-\end_inset
-
- The piecewise call guarantees that each function
-\begin_inset Formula $f_{i}$
-\end_inset
-
- will only be called over those values of
-\begin_inset Formula $x$
-\end_inset
-
- in
-\begin_inset Formula $S_{i}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Arguments: x is the array of values over which to call the function; condlist
- is a sequence of Boolean (indicator) arrays (or a single Boolean array)
- of the same shape as
-\begin_inset Formula $x$
-\end_inset
-
- that defines the sets (True indicates that element of
-\begin_inset Formula $x$
-\end_inset
-
- is in the set).
- If needed, to match the length of funclist, an
-\begin_inset Quotes eld
-\end_inset
-
-otherwise
-\begin_inset Quotes erd
-\end_inset
-
- set will be added to condlist.
- This otherwise set is defined as
-\begin_inset Formula $S_{n}=\overline{\bigcup S_{i}}.$
-\end_inset
-
- The argument funclist is a list of functions to be called (or items to
- be inserted) corresponding to the conditions.
- Each of these functions can take extra arguments and key-word arguments
- which are passed in as *args, and **kw using standard Python syntax.
- Each of these functions should return vector output for vector input.
- If the function is a scalar, then it will simply be inserted where appropriate
- into the output.
- It is the equivalent of a constant function.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: Suppose we want to compute
-\begin_inset Formula $f\left(x\right)=x^{2}\Pi\left(\frac{x}{3}\right)+u\left(x-5\right)$
-\end_inset
-
- where
-\begin_inset Formula $\Pi\left(x\right)=1$
-\end_inset
-
- only when
-\begin_inset Formula $\left|x\right|\leq1$
-\end_inset
-
- and
-\begin_inset Formula $u\left(x\right)=1$
-\end_inset
-
- only when
-\begin_inset Formula $x\geq0.$
-\end_inset
-
- This could be done using the code:
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> f1 = lambda x: x*x
-\newline
->>> x = r_[-4:6:20j]
-\newline
->>> y = piecewise(x,abs(x)<=3,[f1,0])+
-piecewise(x,x>=0,[1,0])
-\newline
->>> set_printoptions(precision=4); print y
-\newline
-[ 0.
- 0.
- 8.687 5.8615 3.59 1.8726 0.7091 0.0997
-\newline
- 1.0443 1.5429 2.5956 4.2022
- 6.3629 9.0776 1.
- 1.
- 1.
-\newline
- 1.
- 1.
- 1.
- ]
-\end_layout
-
-\begin_layout Description
-trim_zeros
-\begin_inset LatexCommand index
-name "trim\\_zeros"
-
-\end_inset
-
- (filt, trim='fb'):
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Trim the leading ('f' in trim) and trailing ('b' in trim) zeros from a
- sequence according to the trim keyword.
-
-\end_layout
-
-\begin_layout Description
-trapz
-\begin_inset LatexCommand index
-name "trapz"
-
-\end_inset
-
- (y, x=None, dx=1.0, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If
-\begin_inset Formula $\mathbf{y}$
-\end_inset
-
- contains samples of a function:
-\begin_inset Formula $y_{i}=f\left(x_{i}\right)$
-\end_inset
-
- then trapz can be used to approximate the integral of the function using
- the trapezoidal rule.
- If the sampling is not evenly spaced use
-\begin_inset Formula $\mathbf{x}$
-\end_inset
-
- to pass in the sample positions.
- Otherwise, only the sample-spacing is needed in dx.
- The trapz function can work with many functions at a time stored in an
-
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- The axis argument controls which axis defines the sampling axis (the other
- dimensions are different functions).
- The number of dimensions of the returned result is
-\begin_inset Formula $y$
-\end_inset
-
-.ndim - 1.
-\end_layout
-
-\begin_layout Description
-diff
-\begin_inset LatexCommand index
-name "diff"
-
-\end_inset
-
- (x, n=1, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Calculates the
-\begin_inset Formula $n^{\textrm{th}}$
-\end_inset
-
- order, discrete difference along the given axis.
-\end_layout
-
-\begin_layout Description
-gradient
-\begin_inset LatexCommand index
-name "gradient"
-
-\end_inset
-
- (f, *varargs)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Calculate the gradient of an N-d scalar function, f.
- Uses central differences on the interior and first differences on boundaries
- to give the same shape for each component of the gradient.
- The varargs variable can contain 0, 1, or N scalars corresponding to the
- sample distances in each direction (default 1.0).
- If f is N-d, then N arrays are returned each of the same shape as f, giving
- the derivative of f with respect to each dimension.
-
-\end_layout
-
-\begin_layout Description
-angle
-\begin_inset LatexCommand index
-name "angle"
-
-\end_inset
-
- (z, deg=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the angle of a complex number z (in degrees if deg is True).
-\end_layout
-
-\begin_layout Description
-unwrap
-\begin_inset LatexCommand index
-name "unwrap"
-
-\end_inset
-
- (p, discont=pi, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Unwraps radian phase p by changing absolute jumps greater than discont
- to their
-\begin_inset Formula $2\pi$
-\end_inset
-
- complement along the given axis.
-
-\end_layout
-
-\begin_layout Description
-sort_complex
-\begin_inset LatexCommand index
-name "sort\\_complex"
-
-\end_inset
-
- (x)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is syntactic sugar for asarray(x).sort().astype(<cmplx_type>) where
- cmplx_type is csingle if x.dtype is integral with fewer bits than intp,
- clongfloat if x.dtype.type is longfloat, and cdouble for all other types.
- The sorting is done by comparing the real part of the array, and then the
- imaginary part if the real parts are the same.
-
-\end_layout
-
-\begin_layout Description
-disp
-\begin_inset LatexCommand index
-name "disp"
-
-\end_inset
-
- (mesg, device=None, linefeed=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Display a message to device (defaults to sys.stdout) with or without a closing
- linefeed.
-\end_layout
-
-\begin_layout Description
-unique
-\begin_inset LatexCommand index
-name "unique"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns unique items in the 1-dimensional seq.
-\end_layout
-
-\begin_layout Description
-extract
-\begin_inset LatexCommand index
-name "extract"
-
-\end_inset
-
- (condition, arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to arr.compress(condition.flat) and arr.flat[bool_(condition.flat)]
- which extracts the elements of (flattened) arr according to the elements
- of (flattened) condition that are True.
-
-\end_layout
-
-\begin_layout Description
-place
-\begin_inset LatexCommand index
-name "place"
-
-\end_inset
-
- (arr, mask, vals)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Inverse of extract.
- Equivalent to arr[abool(mask)] = vals but it uses a different algorithm.
-
-\end_layout
-
-\begin_layout Description
-delete
-\begin_inset LatexCommand index
-name "delete"
-
-\end_inset
-
- (arr, indices, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array with the sub-arrays indicated by indices along axis
- removed.
- If axis is None, then first ravel the array and set axis to -1.
- The indices argument describes which sub-arrays along the given axis should
- be removed.
- It can be an integer, a slice object, or a sequence of integers.
- A new array is created with the corresponding sub-arrays are removed.
-
-\end_layout
-
-\begin_layout Description
-insert
-\begin_inset LatexCommand index
-name "insert"
-
-\end_inset
-
- (arr, indices, values, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new array with values inserted into arr before indices.
- If axis is None, then first ravel the array and set axis to -1.
- The indices argument describes which indices along the provided axis the
- values should be inserted before.
- It can be an integer, a slice object, or a sequence of integers.
- The values argument must be broadcastable to the shape implied by where
- they will be inserted.
-
-\end_layout
-
-\begin_layout Description
-append
-\begin_inset LatexCommand index
-name "append"
-
-\end_inset
-
- (arr, values, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array with values appended to the end of the array along axis.
-
-\end_layout
-
-\begin_layout Description
-nansum
-\begin_inset LatexCommand index
-name "nansum"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-nanmax
-\begin_inset LatexCommand index
-name "nanmax"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-nanargmax
-\begin_inset LatexCommand index
-name "nanargmax"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-nanargmin
-\begin_inset LatexCommand index
-name "nanargmin"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-nanmin
-\begin_inset LatexCommand index
-name "nanmin"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions perform their respective operations over the given axis
- (or the entire array if axis is None), after replacing any nans with appropriat
-e values so as not to affect the calculation.
-
-\end_layout
-
-\begin_layout Description
-vectorize
-\begin_inset LatexCommand index
-name "vectorize"
-
-\end_inset
-
- (pyfunc, otypes=None, doc=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This creates a class whose instances have a call method that invokes a
- ufunc that has been dynamically built to call the python function pyfunc
- internally.
- The output types can be controlled by the otypes argument.
- If it is None, then the output types will be determined upon first call
- to the function using the provided inputs.
- This can be reset, by re-setting the otypes attribute to
-\begin_inset Quotes eld
-\end_inset
-
-
-\begin_inset Quotes erd
-\end_inset
-
-.
- The normal rules of array broadcasting are followed by the returned object.
-\end_layout
-
-\begin_layout MyCode
->>> def myfunc(a,b):
-\newline
-...
- if (a>b): return a
-\newline
-...
- else: return b-1
-\newline
->>> vecfunc = vectorize(myfunc)
-\newline
->>> vecfunc([[1,2,3],[5,6,9]
-],[7,4,5])
-\newline
-array([[6, 3, 4],
-\newline
- [6, 6, 9]])
-\end_layout
-
-\begin_layout Description
-asarray_chkfinite
-\begin_inset LatexCommand index
-name "asarray\\_chkfinite"
-
-\end_inset
-
- (x)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Like asarray(x) except an error is raised if any of the values in x are
- not finite.
-
-\end_layout
-
-\begin_layout Description
-round_
-\begin_inset LatexCommand index
-name "round\\_"
-
-\end_inset
-
- (x, decimals=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array with all the elements of x rounded to decimals places.
- Returns x if array is not floating point and rounds both the real and imaginary
- parts separately if array is complex.
- Rounds in the same way as standard python except for half-way values are
- rounded to the nearest
-\emph on
-even
-\emph default
- number.
-\end_layout
-
-\begin_layout Description
-packbits (array, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Pack an integer array of logical data (zero/non-zero) into bits of a uint8
- data-type along the dimension given by axis.
- This dimension is shrunk by a factor of 8 (rounded up).
- Each element in the input is converted to a bit in the output which is
- set to 1 or 0 depending on whether the input is non-zero or not.
- Thus, every 8-element chunk of the input is converted to a single byte
- in the output.
- If axis is None, then the bit-packing is done on the entire array as if
- it were raveled.
-\end_layout
-
-\begin_layout Description
-unpackbits (array, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Unpack bits of an array of uint8 data-type into a single uint8 byte for
- each bit along the dimension given by axis.
- This dimension is thus expanded 8-fold, but otherwise the output has the
- same shape as the input.
- If axis is None, then the input is treated as a 1-d array and expanded
- 8-fold so that each bit of the input is given an output byte.
-
-\end_layout
-
-\begin_layout Description
-add_docstring
-\begin_inset LatexCommand index
-name "add\\_docstring"
-
-\end_inset
-
- (obj, doc)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Adds a docstring to a built-in object, obj, that does not have a docstring
- defined already.
- The obj can be a built-in function-or-method, a typeobject, a method descriptor
-, a getset descriptor, or a member descriptor.
- This is useful for improving the documentation of objects defined in C-compiled
- code without re-compiling.
- If the object already has a docstring, a RuntimeError is raised.
- If the object is not a supported type the code can add a docstring to,
- a TypeError is raised.
-
-\end_layout
-
-\begin_layout Description
-add_newdoc
-\begin_inset LatexCommand index
-name "add\\_newdoc"
-
-\end_inset
-
- (place, obj, doc)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Adds a docstring to the
-\emph on
-obj
-\emph default
- imported from
-\emph on
-place
-\emph default
- using exec 'from %s import %s' % (place, obj).
- Thus, both place and obj should be strings.
- If doc is a string, then a single docstring is added to obj from place.
- If doc is a 2-tuple, then obj must be an object with attributes that need
- to be commented.
- The first element of the doc tuple is the attribute to be commented on
- and the second element is the actual docstring.
- If doc is a list, then it must be composed of elements that are 2-tuples
- indicating that obj has several attributes that need to be documented.
-
-\end_layout
-
-\begin_layout Section
-Polynomial functions
-\end_layout
-
-\begin_layout Standard
-There are two interfaces for dealing with polynomials
-\begin_inset LatexCommand index
-name "polynomials"
-
-\end_inset
-
-: a class-based interface, and a collection of functions to deal with a
- polynomials represented as a simple list of coefficients.
- This latter representation results from the is a one-to-one correspondence
- between a length-
-\begin_inset Formula $\left(n+1\right)$
-\end_inset
-
- sequence of coefficients
-\begin_inset Formula $a_{n}\equiv a[n]$
-\end_inset
-
- and an
-\begin_inset Formula $n^{\textrm{th}}$
-\end_inset
-
- order polynomial:
-\begin_inset Formula \[
-p\left(x\right)=a_{0}x^{n}+a_{1}x^{n-1}+\cdots+a_{n-1}x+a_{n}.\]
-
-\end_inset
-
- Most of the functions below operate on and return a simple sequence of
- coefficients representing a polynomial.
- There is, however, a simple polynomial class that provides some utility
- for doing simple algebra on polynomials.
-
-\end_layout
-
-\begin_layout Description
-poly1d
-\begin_inset LatexCommand index
-name "poly1d"
-
-\end_inset
-
- (c_or_r, r=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This construction returns an instance of a simple polynomial class.
- It can take either a list of coefficients on polynomial powers, or a sequence
- of roots (if r=1).
- The returned polynomial can be added, subtracted, multiplied, divided,
- and taken to integer powers, resulting in new polynomials.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-.r roots of the polynomial
-\end_layout
-
-\begin_layout Description
-.o order of the polynomial
-\end_layout
-
-\begin_layout Description
-.c polynomial coefficients as an array (also
-\series bold
-__array__()
-\series default
- )
-\end_layout
-
-\begin_layout Description
-__call__(x) evaluate the polynomial at x (can be an array)
-\end_layout
-
-\begin_layout Description
-__getitem__(x) p[k] returns the coefficient on the kth power of x (backwards
- from indexing the coefficient array)
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> p=poly1d([2,5,7])
-\newline
->>> print p
-\newline
-2
-\newline
-2 x + 5 x + 7
-\newline
->>> print p*[1,3,1]
-\newline
-4
- 3 2
-\newline
-2 x + 11 x + 24 x + 26 x + 7
-\newline
->>> print p([0.5,0.6,3])
-\newline
-[ 10.
- 10.72 40.
- ]
-\newline
->>> print p.r
-\newline
-[-1.25+1.3919j -1.25-1.3919j]
-\end_layout
-
-\begin_layout Description
-poly
-\begin_inset LatexCommand index
-name "poly"
-
-\end_inset
-
- (roots_or_matrix)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a sequence of coefficients representing a polynomial given the sequence
- of roots as an argument.
- Alternatively, if the argument is a 2-d array, then return the characteristic
- polynomial of the matrix.
-
-\end_layout
-
-\begin_layout Description
-roots
-\begin_inset LatexCommand index
-name "roots"
-
-\end_inset
-
- (poly)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the roots of the polynomial represented by coefficients in poly
-\end_layout
-
-\begin_layout Description
-polyint
-\begin_inset LatexCommand index
-name "polyint"
-
-\end_inset
-
- (poly, m=1, k=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an exact
-\begin_inset Formula $m^{\textrm{th}}$
-\end_inset
-
--order integral of the polynomial represented in poly.
- If k is None, then use 0 for the integrating constants.
- Otherwise, use the scalars in the sequence k as integrating constants.
- Also available as .integ (m=1,k=0) method of poly1d objects.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example:
-\begin_inset Formula \begin{eqnarray*}
-p\left(x\right) & = & x^{2}+3x+4\\
-\int\int p\left(x\right) & = & \frac{1}{12}x^{4}+\frac{1}{2}x^{3}+2x^{2}+k_{0}x+k_{1}\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> print polyint([1,3,4],m=2,k=[5,3])
-\newline
-[ 0.0833 0.5 2.
- 5.
- 3.
- ]
-\end_layout
-
-\begin_layout Description
-polyder
-\begin_inset LatexCommand index
-name "polyder"
-
-\end_inset
-
- (poly, m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an exact
-\begin_inset Formula $m^{\textrm{th}}$
-\end_inset
-
--order derivative of the polynomial represented in poly.
- Also available as .deriv(m=1) method of poly1d objects.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example:
-\begin_inset Formula \begin{eqnarray*}
-p\left(x\right) & = & x^{3}+2x^{2}+4x+3\\
-\frac{dp}{dx}\left(x\right) & = & 3x^{2}+4x+4\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> polyder([1,2,4,3])
-\newline
-array([3, 4, 4])
-\end_layout
-
-\begin_layout Description
-polyadd
-\begin_inset LatexCommand index
-name "polyadd"
-
-\end_inset
-
- (p1, p2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the two polynomials represented by coefficients:
-\begin_inset Formula $p_{1}\left(x\right)+p_{2}\left(x\right)$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-polysub
-\begin_inset LatexCommand index
-name "polysub"
-
-\end_inset
-
- (p1, p2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return coefficients for the polynomial found by subtracting the two polynomials
- represented by
-\begin_inset Formula $p_{1}$
-\end_inset
-
- and
-\begin_inset Formula $p_{2}$
-\end_inset
-
-:
-\begin_inset Formula $p_{1}\left(x\right)-p_{2}\left(x\right)$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-polymul
-\begin_inset LatexCommand index
-name "polymul"
-
-\end_inset
-
- (p1, p2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the coefficients for
-\begin_inset Formula $p_{1}\left(x\right)p_{2}\left(x\right)$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-polydiv
-\begin_inset LatexCommand index
-name "polydiv"
-
-\end_inset
-
- (p1, p2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the quotient,
-\begin_inset Formula $q\left(x\right)$
-\end_inset
-
-, and remainder,
-\begin_inset Formula $r\left(x\right)$
-\end_inset
-
-, so that
-\begin_inset Formula $p_{1}\left(x\right)=q\left(x\right)p_{2}\left(x\right)+r\left(x\right),$
-\end_inset
-
- with the order of
-\begin_inset Formula $r\left(x\right)$
-\end_inset
-
- less than the order of
-\begin_inset Formula $p_{2}\left(x\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-polyval
-\begin_inset LatexCommand index
-name "polyval"
-
-\end_inset
-
- (p, y)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluate the polynomial
-\begin_inset Formula $p$
-\end_inset
-
- at
-\begin_inset Formula $y$
-\end_inset
-
-.
- The argument,
-\begin_inset Formula $y$
-\end_inset
-
-, can be a number or an array or a polynomial object.
- If x is a polynomial object, then polyval performs polynomial composition:
-
-\begin_inset Formula $p\left(y\left(x\right)\right),$
-\end_inset
-
- otherwise polyval computes the value of the polynomial at each
-\begin_inset Formula $y$
-\end_inset
-
-.
- Uses Horner's rule for evaluation, but this can still lead to numerical
- instabilities for wildly fluctuating coefficients.
-\end_layout
-
-\begin_layout Description
-polyfit
-\begin_inset LatexCommand index
-name "polyfit"
-
-\end_inset
-
- (x,y,N)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute a best-fit polynomial in
-\begin_inset Formula $x$
-\end_inset
-
- of order
-\begin_inset Formula $N$
-\end_inset
-
-, to the data,
-\begin_inset Formula $y$
-\end_inset
-
-, in the sense of minimizing averaged-squared error between the measurement
- and the model.
- Useful for quick line-fitting
-\begin_inset LatexCommand index
-name "fitting"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Section
-Set Operations
-\end_layout
-
-\begin_layout Standard
-The set operations
-\begin_inset LatexCommand index
-name "set operations|("
-
-\end_inset
-
- were kindly contributed by Robert Cimrman.
- These set operations are based on sorting functions and all expect 1-d
- sequences with unique elements with the exception of unique1d and intersect1d_n
-u which will flatten N-d nested-sequences to 1-d arrays and can handle non-uniqu
-e elements.
-
-\end_layout
-
-\begin_layout Description
-unique1d
-\begin_inset LatexCommand index
-name "unique1d"
-
-\end_inset
-
- (arr, retindx=False)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the unique elements of arr as a 1-d array.
- If retindx is True, then also return the indices, ind, such that arr.flat[ind]
- is the set of unique values.
-\end_layout
-
-\begin_layout Description
-intersect1d
-\begin_inset LatexCommand index
-name "intersect1d"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (sorted) intersection of a1 and a2 which is an array containing
- the elements of a1 that are also in a2.
-
-\end_layout
-
-\begin_layout Description
-intersect1d_nu
-\begin_inset LatexCommand index
-name "intersect1d\\_nu"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (sorted) intersection of a1 and a2 but allow a1 and a2 to be
- N-d arrays with non-unique elements.
- Equivalent to intersect1d(unique1d(a1), unique1d(a2)).
-
-\end_layout
-
-\begin_layout Description
-union1d
-\begin_inset LatexCommand index
-name "union1d"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (sorted) union of a1 and a2 which is an array containing elements
- that are in either a1 or a2.
-
-\end_layout
-
-\begin_layout Description
-setdiff1d
-\begin_inset LatexCommand index
-name "setdiff1d"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the set-difference of a1 and a2 which is an array containing the
- elements of a1 that are
-\series bold
-not
-\series default
- in a2.
-\end_layout
-
-\begin_layout Description
-setxor1d
-\begin_inset LatexCommand index
-name "setxor1d"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (sorted) set containing the exclusive-or of the arrays a1 and
- a2.
- The exclusive-or contains elements that are in a1 or in a2 as long as the
- element is not in both a1 and a2.
-
-\end_layout
-
-\begin_layout Description
-setmember1d
-\begin_inset LatexCommand index
-name "setmember1d"
-
-\end_inset
-
- (tocheck, set)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a Boolean 1-d array of the length of tocheck which is True whenever
- that element is contained in set and false when it is not.
- Equivalent
-\begin_inset LatexCommand index
-name "set operations|)"
-
-\end_inset
-
- to array([x in set for x in tocheck]).
-\end_layout
-
-\begin_layout Section
-Array construction using index tricks
-\end_layout
-
-\begin_layout Standard
-The functions and classes in this category make it simpler to construct
- arrays.
-
-\end_layout
-
-\begin_layout Description
-ix_
-\begin_inset LatexCommand index
-name "ix\\_"
-
-\end_inset
-
- (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This indexing cross function is useful for forming indexing arrays necessary
- to select out the cross-product of
-\begin_inset Formula $N$
-\end_inset
-
- 1-dimensional arrays.
- Note that the default indexing does not do a cross-product (which might
- be unexpected for someone coming from other programming environments).
- The default indexing is more general purpose.
- Using the ix_ constructor can produce the indexing arrays necessary to
- select a cross-product.
-\end_layout
-
-\begin_layout Description
-mgrid [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is an instance of a class.
- It can be used to construct a filled
-\begin_inset Quotes eld
-\end_inset
-
-mesh-grid
-\begin_inset Quotes erd
-\end_inset
-
- using slicing syntax.
-
-\end_layout
-
-\begin_layout Description
-ogrid [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is similar to mgrid except it returns an open grid, so as to save
- space and time.
- The broadcasting rules will ensure that any universal function operating
- on the grid will act as if the ogrid had been the result of mgrid.
-\end_layout
-
-\begin_layout Description
-r_
-\begin_inset LatexCommand index
-name "r\\_"
-
-\end_inset
-
- [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is a simple way to build up arrays quickly.
- There are two use cases.
- 1) If the index expression contains comma separated arrays, then stack
- them along their first axis.
- 2) If the index expression contains slice notation or scalars then create
- a 1-d array with a range indicated by the slice notation.
- In other-words the slice syntax start:stop:step is equivalent to arange(start,
- stop, step) inside of the brackets.
- However, if step is an imaginary number (i.e.
- 100j) then its integer portion is interpreted as a number-of-points desired
- and the start and stop are inclusive.
- In other words start:stop:step
-\family typewriter
-j
-\family default
- is interpreted as linspace(start, stop, step, endpoint=1) inside of the
- brackets.
- After expansion of slice notation, all comma separated sequences are concatenat
-ed together.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Optional character strings placed as the first element of the index expression
- can be used to change the output.
- The strings 'r' or 'c' result in matrix output.
- If the result is 1-d and 'r' is specified a
-\begin_inset Formula $1\times N$
-\end_inset
-
- (row) matrix is produced.
- If the result is 1-d and 'c' is specified, then a
-\begin_inset Formula $N\times1$
-\end_inset
-
- (column) matrix is produced.
- If the result is 2-d then both provide the same matrix result.
-
-\end_layout
-
-\begin_layout MyCode
->>> print r_[-1:1:9j,[0]*10,5,6]
-\newline
-[-1.
- -0.75 -0.5 -0.25 0.
- 0.25 0.5 0.75 1.
- 0.
- 0.
-\newline
- 0.
- 0.
- 0.
- 0.
- 0.
- 0.
- 0.
- 0.
- 5.
- 6.
- ]
-\newline
->>> print r_['r',1,2,5,6]
-\newline
-[[1 2 5 6]]
-\newline
->>> print r_['c',1,2,5,6]
-\newline
-[[1]
-\newline
- [2]
-\newline
-
- [5]
-\newline
- [6]]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A string integer specifies which axis to stack multiple comma separated
- arrays along.
-
-\end_layout
-
-\begin_layout MyCode
->>> a=arange(6).reshape(2,3)
-\newline
->>> r_[a,a]
-\newline
-array([[0, 1, 2],
-\newline
- [3, 4, 5],
-\newline
-
- [0, 1, 2],
-\newline
- [3, 4, 5]])
-\newline
->>> r_['-1',a,a]
-\newline
-array([[0, 1, 2, 0, 1,
- 2],
-\newline
- [3, 4, 5, 3, 4, 5]])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A string of two comma-separated integers allows indication of the minimum
- number of dimensions to force each entry into as the second integer (the
- axis to concatenate along is still the first integer).
-
-\end_layout
-
-\begin_layout MyCode
->>> r_['0,2',[1,2,3],[4,5,6]]
-\newline
-array([[1, 2, 3],
-\newline
- [4, 5, 6]])
-\newline
->>> r_['1,2',[1,
-2,3],[4,5,6]]
-\newline
-array([[1, 2, 3, 4, 5, 6]])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A string with three comma-separated integers allows specification of the
- axis to concatenate along, the minimum number of dimensions to force the
- entries to, and which axis should contain the start of the arrays which
- are less than the specified number of dimensions.
- In other words the third integer allows you to specify where the the 1's
- should be placed in the shape of the arrays that have their shapes upgraded.
- By default, they are placed in the front of the shape tuple.
- The third argument allows you to specify where the start of the array should
- be instead.
- Thus, a third argument of '0' would place the 1's at the end of the array
- shape.
- Negative integers specify where in the new shape tuple the last dimension
- of upgraded arrays should be placed, so the default is '-1'.
-\end_layout
-
-\begin_layout MyCode
->>> r_['0,2,0', [1,2,3], [4,5,6]]
-\newline
-array([[1],
-\newline
- [2],
-\newline
- [3],
-\newline
-
- [4],
-\newline
- [5],
-\newline
- [6]])
-\newline
->>> r_['1,2,0', [1,2,3], [4,5,6]]
-\newline
-array([[1,
- 4],
-\newline
- [2, 5],
-\newline
- [3, 6]])
-\end_layout
-
-\begin_layout Description
-c_
-\begin_inset LatexCommand index
-name "c\\_"
-
-\end_inset
-
- [index_expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is short-hand for r_['-1,2,0', index_expression] useful because of
- its common occurence.
- In particular, arrays will be stacked along their last axis after being
- upgraded to at least 2-d with 1's post-pended to the shape (column vectors
- made out of 1-d arrays).
-
-\end_layout
-
-\begin_layout Section
-Other indexing devices
-\end_layout
-
-\begin_layout Description
-index_exp
-\begin_inset LatexCommand index
-name "index\\_exp"
-
-\end_inset
-
- [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a tuple of Python objects that implements the index expression and
- can be modified and placed in any other index expression.
-
-\end_layout
-
-\begin_layout MyCode
->>> index_exp[2:5,...,4,::-1]
-\newline
-(slice(2, 5, None), Ellipsis, 4, slice(None, None,
- -1))
-\end_layout
-
-\begin_layout Description
-s_
-\begin_inset LatexCommand index
-name "s\\_"
-
-\end_inset
-
- [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Translate index expressions into the equivalent Python objects.
- This is similar to index_expression except a tuple is not always returned.
- For example:
-\end_layout
-
-\begin_layout MyCode
->>> s_[1:10]
-\newline
-slice(1, 10, None)
-\newline
->>> s_[1:10,-3:4:0.5]
-\newline
-(slice(1, 10, None), slice(-3,
- 4, 0.5))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This provides a standard way to construct index expressions to pass to
- functions and methods because Python does not allow slice expressions anywhere
- except for inside brackets.
-
-\end_layout
-
-\begin_layout Description
-ndindex
-\begin_inset LatexCommand index
-name "ndindex"
-
-\end_inset
-
- (*seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A sequence of
-\begin_inset Formula $N$
-\end_inset
-
- integers are passed in as separate arguments.
- These integers are used as the upper boundaries of an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional counter that starts at 0.
- The object returned is an iterator that implements the counter.
-\end_layout
-
-\begin_layout MyCode
->>> for index in ndindex(3,3,2):
-\newline
-...
- print index,
-\newline
-(0, 0, 0) (0, 0, 1) (0, 1, 0) (0, 1, 1) (0, 2, 0) (0, 2,
- 1) (1, 0, 0) (1, 0, 1) (1, 1, 0) (1, 1, 1) (1, 2, 0) (1, 2, 1) (2, 0, 0)
- (2, 0, 1) (2, 1, 0) (2, 1, 1) (2, 2, 0) (2, 2, 1)
-\end_layout
-
-\begin_layout Description
-unravel_index
-\begin_inset LatexCommand index
-name "unravel\\_index"
-
-\end_inset
-
- (indx, dims)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert a flat index, indx, into an index tuple for an array of the given
- shape.
- Keep in mind that it may be more convenient to use indx with a.flat, then
- to unravel the index.
-\end_layout
-
-\begin_layout Section
-Two-dimensional functions
-\end_layout
-
-\begin_layout Standard
-These functions all deal with or return two dimensional arrays.
-\end_layout
-
-\begin_layout Description
-eye
-\begin_inset LatexCommand index
-name "eye"
-
-\end_inset
-
- (
-\begin_inset Formula $N$
-\end_inset
-
-,
-\begin_inset Formula $M$
-\end_inset
-
-=None,
-\begin_inset Formula $k$
-\end_inset
-
-=0, dtype=float)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an
-\begin_inset Formula $N\times M$
-\end_inset
-
- array of the given type with ones down the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- diagonal.
- If
-\begin_inset Formula $M$
-\end_inset
-
- is None, it defaults to
-\begin_inset Formula $N$
-\end_inset
-
-.
- Alternatively, if
-\begin_inset Formula $M$
-\end_inset
-
- is a valid data type, then it becomes the data-type used.
-
-\end_layout
-
-\begin_layout Description
-vander
-\begin_inset LatexCommand index
-name "vander"
-
-\end_inset
-
- (
-\begin_inset Formula $x$
-\end_inset
-
-,
-\begin_inset Formula $N$
-\end_inset
-
-=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The Vandermonde matrix of vector,
-\begin_inset Formula $x$
-\end_inset
-
-.
- The
-\begin_inset Formula $i^{\textrm{th}}$
-\end_inset
-
- column of the return matrix is the
-\begin_inset Formula $m_{i}^{\textrm{th}}$
-\end_inset
-
- power of
-\begin_inset Formula $x$
-\end_inset
-
- where
-\begin_inset Formula $m_{i}=N-i-1$
-\end_inset
-
-.
- If
-\begin_inset Formula $N$
-\end_inset
-
- is None, it defaults to the length of
-\begin_inset Formula $x$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout MyCode
->>> vander([1,2,3,4,5],3)
-\newline
-array([[ 1, 1, 1],
-\newline
- [ 4, 2, 1],
-\newline
-
- [ 9, 3, 1],
-\newline
- [16, 4, 1],
-\newline
- [25, 5, 1]])
-\end_layout
-
-\begin_layout Description
-diag
-\begin_inset LatexCommand index
-name "diag"
-
-\end_inset
-
- (
-\begin_inset Formula $v$
-\end_inset
-
-,
-\begin_inset Formula $k$
-\end_inset
-
-=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- diagonal if
-\begin_inset Formula $v$
-\end_inset
-
- is a 2-d array, or returns an array with
-\begin_inset Formula $v$
-\end_inset
-
- as the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- diagonal if
-\begin_inset Formula $v$
-\end_inset
-
- is a 1-d array.
-
-\end_layout
-
-\begin_layout MyCode
->>> diag(arange(12).reshape(4,3),k=1)
-\newline
-array([1, 5])
-\newline
->>> diag([1,4,5,7],k=-1)
-\newline
-array([
-[0, 0, 0, 0, 0],
-\newline
- [1, 0, 0, 0, 0],
-\newline
- [0, 4, 0, 0, 0],
-\newline
- [0,
- 0, 5, 0, 0],
-\newline
- [0, 0, 0, 7, 0]])
-\end_layout
-
-\begin_layout Description
-diagflat
-\begin_inset LatexCommand index
-name "diagflat"
-
-\end_inset
-
- (
-\begin_inset Formula $v$
-\end_inset
-
-,
-\begin_inset Formula $k$
-\end_inset
-
-=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 2-d array (of the same class as
-\begin_inset Formula $v$
-\end_inset
-
-) by placing a flattened version of
-\begin_inset Formula $v$
-\end_inset
-
- along the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- diagonal.
- This differs from diag in that it only creates 2-d arrays and will work
- with any object that can be converted to an array (returning that object
- if it also defines an __array_wrap__ method).
-
-\end_layout
-
-\begin_layout Description
-fliplr
-\begin_inset LatexCommand index
-name "fliplr"
-
-\end_inset
-
- (m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the array, m, with rows preserved and columns reversed in the left-right
- direction.
- For m.ndim > 2, this works on the first two dimensions (equivalent to m[:,::-1])
-\end_layout
-
-\begin_layout Description
-flipud
-\begin_inset LatexCommand index
-name "flipud"
-
-\end_inset
-
- (m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the array, m, with columns preserved and rows reversed in the up-down
- direction.
- For m.ndim > 1, this works on the first dimension (equivalent to m[::-1])
-\end_layout
-
-\begin_layout Description
-rot90
-\begin_inset LatexCommand index
-name "rot90"
-
-\end_inset
-
- (m, k=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Rotate the first two dimensions of an array, m, by k*90 degrees in the
- counterclockwise direction.
- Must have m.ndim >=2.
-\end_layout
-
-\begin_layout Description
-tri
-\begin_inset LatexCommand index
-name "tri"
-
-\end_inset
-
- (
-\begin_inset Formula $N$
-\end_inset
-
-,
-\begin_inset Formula $M$
-\end_inset
-
-=
-\begin_inset Formula $N$
-\end_inset
-
-, k=0, dtype=aint)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $N\times M$
-\end_inset
-
- array where all the diagonals starting from the lower left corner up to
- the
-\begin_inset Formula $\textrm{k}^{\textrm{th}}$
-\end_inset
-
- diagonal are all ones.
-
-\end_layout
-
-\begin_layout Description
-triu
-\begin_inset LatexCommand index
-name "triu"
-
-\end_inset
-
- (m, k=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a upper-triangular 2-d array from m with all the elements below
- the
-\begin_inset Formula $\textrm{k}^{\textrm{th}}$
-\end_inset
-
- diagonal set to 0.
-
-\end_layout
-
-\begin_layout Description
-tril
-\begin_inset LatexCommand index
-name "tril"
-
-\end_inset
-
- (m, k=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a lower-triangular 2-d array from m with all the elements above
- the
-\begin_inset Formula $\textrm{k}^{\textrm{th}}$
-\end_inset
-
- diagonal set to 0.
-
-\end_layout
-
-\begin_layout Description
-mat
-\begin_inset LatexCommand index
-name "mat"
-
-\end_inset
-
- (data, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a matrix from data.
- Alias for numpy.asmatrix.
- The calling syntax is the same as that function.
- Note that data can be a string in which case the routine uses spaces and
- semi-colons to construct the matrix:
-\end_layout
-
-\begin_layout MyCode
->>> mat('1 3 4; 5 6 9')
-\newline
-matrix([[1, 3, 4],
-\newline
- [5, 6, 9]])
-\end_layout
-
-\begin_layout Description
-bmat
-\begin_inset LatexCommand index
-name "bmat"
-
-\end_inset
-
- (obj, ldict=None, gdict=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Build a matrix from sub-blocks.
- This is similar to mat, except the items in the nested-sequence, or string,
- should be appropriately shaped 2-d arrays.
- If obj is a string, then ldict and gdict can be used to alter where the
- names represented in the string are found (default is current local and
- global namespace).
-
-\end_layout
-
-\begin_layout MyCode
->>> A=mat('1 2; 3 4'); B=mat('5 6; 7 8')
-\newline
->>> bmat('A, B; B, A')
-\newline
-matrix([[1,
- 2, 5, 6],
-\newline
- [3, 4, 7, 8],
-\newline
- [5, 6, 1, 2],
-\newline
- [7, 8, 3, 4]])
-\end_layout
-
-\begin_layout Section
-More data type functions
-\end_layout
-
-\begin_layout Description
-issubclass_
-\begin_inset LatexCommand index
-name "issubclass\\_"
-
-\end_inset
-
- (arg1, arg2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns True if arg1 is a sub-class of arg2, otherwise returns False.
- Similar to the built-in issubclass except it does not raise an error if
- arg1 or arg2 are not types.
-
-\end_layout
-
-\begin_layout Description
-issubdtype
-\begin_inset LatexCommand index
-name "issubdtype"
-
-\end_inset
-
- (arg1, arg2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns True if the type-object of the data-type represented by arg1 is
- a sub class of the type-object of the data-type represented by arg2.
-\end_layout
-
-\begin_layout Description
-iscomplexobj
-\begin_inset LatexCommand index
-name "iscomplexobj"
-
-\end_inset
-
- (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a single True or False value depending on whether or not obj would
- be interpreted as an array with complex-valued data type.
-\end_layout
-
-\begin_layout Description
-isrealobj
-\begin_inset LatexCommand index
-name "isrealobj"
-
-\end_inset
-
- (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a single True or False value depending on whether or not obj would
- be interpreted as an array with real-valued data type.
-\end_layout
-
-\begin_layout Description
-isscalar
-\begin_inset LatexCommand index
-name "isscalar"
-
-\end_inset
-
- (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if obj is a scalar (an instance of an array data type, or a standard
- Python scalar type).
- There is also a sequence of called ScalarType defined in NumPy, so that
- this can also be tested as type(obj) in numpy.ScalarType.
-
-\end_layout
-
-\begin_layout Description
-nan_to_num
-\begin_inset LatexCommand index
-name "nan\\_to\\_num"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an array with non-finite numbers changed to finite numbers.
- The mapping converts
-\family typewriter
-nan
-\family default
- to 0,
-\family typewriter
-inf
-\family default
- to the maximum value for the data type and
-\family typewriter
--inf
-\family default
- to the minimum value for the data type.
-\end_layout
-
-\begin_layout Description
-real_if_close
-\begin_inset LatexCommand index
-name "real\\_if\\_close"
-
-\end_inset
-
- (arr, tol=100)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a real arr if arr is complex with imaginary parts less than some
- tolerance.
- If tol > 1, then it represents a multiplicative factor on the value of
- epsilon for the data type of arr.
-\end_layout
-
-\begin_layout Description
-cast
-\begin_inset LatexCommand index
-name "cast"
-
-\end_inset
-
- [dtype_or_alias] (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Cast obj to an array of the given type.
- This is equivalent to array(obj, copy=0).astype(dtype_or_alias).
- When one type is cast to another in this fashion, a very low-level operation
- takes place.
- Typically, you get what your C-compiler produces for the cast, but notice
- that in the case of casting to a bool type, the value becomes either a
- 0 or a 1.
-
-\end_layout
-
-\begin_layout MyCode
->>> cast[bool]([1,2,0,4,0]).astype(int)
-\newline
-array([1, 1, 0, 1, 0])
-\end_layout
-
-\begin_layout Description
-asfarray
-\begin_inset LatexCommand index
-name "asfarray"
-
-\end_inset
-
- (a, dtype=float)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of inexact data type (floating or complexfloating).
-
-\end_layout
-
-\begin_layout Description
-mintypecode
-\begin_inset LatexCommand index
-name "mintypecode"
-
-\end_inset
-
- (typechars, typeset='GDFgdf', default='d')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a minimum data type character from typeset that handles all given
- typechars.
- The returned type character must correspond to the data type of the smallest
- size such that an array of the returned type can handle the data from an
- array of type t for each t in typechars.
- If the typechars does not intersect with the typeset, then default is returned.
- If an element of typechars is not a string, then t=asarray(t).dtypechar
- is applied.
-\end_layout
-
-\begin_layout Description
-finfo
-\begin_inset LatexCommand index
-name "finfo"
-
-\end_inset
-
- (dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This class allows exploration of the details of how a floating point number
- is represented in the computer.
- It can be instantiated by an inexact data type object (or an alias for
- one).
- Complex-valued data types are acceptable and are equivalent to their real-value
-d counterparts.
- The attributes of the class are
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-nmant The number of bits in the floating point mantissa, or fraction.
-\end_layout
-
-\begin_layout Description
-nexp The number of bits in the floating point exponent
-\end_layout
-
-\begin_layout Description
-machep Exponent of the smallest (most negative) power of 2 that when added
- to 1.0 gives something different than 1.0.
-
-\end_layout
-
-\begin_layout Description
-eps Floating point precision: 2**machep.
-\end_layout
-
-\begin_layout Description
-precision Number of decimal digits of precision: int(-log10(eps))
-\end_layout
-
-\begin_layout Description
-resolution 10**(-precision)
-\end_layout
-
-\begin_layout Description
-negep Exponent of the smallest power of 2 that, subtracted from 1.0, gives
- something different than 1.0.
-\end_layout
-
-\begin_layout Description
-epsneg Floating point precision: 2**negep.
-\end_layout
-
-\begin_layout Description
-minexp Smallest (most negative) power of 2 producing
-\begin_inset Quotes eld
-\end_inset
-
-normal
-\begin_inset Quotes erd
-\end_inset
-
- numbers (no leading zeros in the mantissa).
-
-\end_layout
-
-\begin_layout Description
-tiny The smallest (in magnitude) usable floating point number equal to 2**minexp.
-\end_layout
-
-\begin_layout Description
-maxexp Smallest (positive) power of 2 that causes overflow.
-\end_layout
-
-\begin_layout Description
-max The largest usable floating value: (1-epsneg)* (2**maxep)
-\end_layout
-
-\begin_layout Description
-min The most negative usable floating value: -max
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- The most useful attributes are probably eps, max, min, and tiny.
-\end_layout
-
-\begin_layout Section
-Functions that behave like ufuncs
-\end_layout
-
-\begin_layout Standard
-These functions are Python functions built on top of universal functions
- (ufuncs) and also take optional output arguments.
- They broadcast like ufuncs but do not have ufunc attributes.
-\end_layout
-
-\begin_layout Description
-fix
-\begin_inset LatexCommand index
-name "fix"
-
-\end_inset
-
- (x, y=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Round x to the nearest integer towards zero.
-\end_layout
-
-\begin_layout Description
-isneginf
-\begin_inset LatexCommand index
-name "isneginf"
-
-\end_inset
-
- (x, y=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x=-\infty$
-\end_inset
-
-.
- Should be the same as
-\family typewriter
-x==NumPy.NINF
-\family default
-.
-\end_layout
-
-\begin_layout Description
-isposinf
-\begin_inset LatexCommand index
-name "isposinf"
-
-\end_inset
-
- (x, y=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x=+\infty.$
-\end_inset
-
- Should be the same as
-\family typewriter
-x==NumPy.PINF
-\family default
-.
-\end_layout
-
-\begin_layout Description
-log2
-\begin_inset LatexCommand index
-name "log2"
-
-\end_inset
-
- (x, y=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the logarithm to the base 2 of
-\begin_inset Formula $x.$
-\end_inset
-
- An optional output array may be provided.
-\end_layout
-
-\begin_layout Section
-Miscellaneous Functions
-\end_layout
-
-\begin_layout Standard
-Some miscellaneous functions are available in NumPy which are included largely
- for compatibility with MLab of the old Numeric package.
- One notable difference, however, is that due to a separate implementation
- of the modified Bessel function, the kaiser window is available without
- needing a separate library.
-
-\end_layout
-
-\begin_layout Description
-sinc
-\begin_inset LatexCommand index
-name "sinc"
-
-\end_inset
-
- (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the sinc function for
-\begin_inset Formula $x$
-\end_inset
-
- which can be a scalar or array.
- The sinc is defined as
-\begin_inset Formula $y=\textrm{sinc}\left(x\right)=\frac{\sin\left(\pi x\right)}{\pi x}$
-\end_inset
-
- with the caveat that the limiting value (1.0) of the ratio is taken for
-
-\begin_inset Formula $x=0.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-i0
-\begin_inset LatexCommand index
-name "i0"
-
-\end_inset
-
- (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Modified Bessel function of the first kind of order 0.
- Needed to compute the kaiser window.
- The modified Bessel function is defined as
-\begin_inset Formula \[
-I_{0}\left(x\right)=\frac{1}{\pi}\int_{0}^{\pi}e^{x\cos\theta}d\theta=\sum_{k=0}^{\infty}\frac{x^{2k}}{4^{k}\left(k!\right)^{2}}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-blackman
-\begin_inset LatexCommand index
-name "blackman"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Blackman smoothing window which is sequence of length
-\begin_inset Formula $M$
-\end_inset
-
- with values given for
-\begin_inset Formula $n=0\ldots M-1$
-\end_inset
-
- by
-\begin_inset Formula \[
-w\left[n\right]=0.42-0.5\cos\left(2\pi\frac{n}{M-1}\right)+0.08\cos\left(4\pi\frac{n}{M-1}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-bartlett
-\begin_inset LatexCommand index
-name "bartlett"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Bartlett (triangular) smoothing window as
-\begin_inset Formula \[
-w\left[n\right]=\left\{ \begin{array}{cc}
-2\frac{n}{M-1} & 0\leq n\leq\frac{M-1}{2},\\
-2-2\frac{n}{M-1} & \frac{M-1}{2}<n\leq M-1.\end{array}\right.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-hanning
-\begin_inset LatexCommand index
-name "hanning"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Hanning smoothing window defined as
-\begin_inset Formula \[
-w\left[n\right]=\frac{1}{2}-\frac{1}{2}\cos\left(2\pi\frac{n}{M-1}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-hamming
-\begin_inset LatexCommand index
-name "hamming"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Hamming smoothing window defined for
-\begin_inset Formula $n=0\ldots M-1$
-\end_inset
-
- as
-\begin_inset Formula \[
-w\left[n\right]=0.54-0.46\cos\left(2\pi\frac{n}{M-1}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- All of the windowing functions are smoothing windows that attempt to balance
- the inherent trade off between side-lobe height (ringing) and main-lobe
- width (resolution) in the frequency domain.
- A rectangular window has the smallest main-lobe width but the largest side-lobe
- height.
- A windowing (tapering) function tries to can help trade off main-lobe width
- By sacrificing a little in resolution using a windowing function These
- windows can be used to smooth data using the convolve function.
- Figure
-\begin_inset LatexCommand ref
-reference "cap:window functions"
-
-\end_inset
-
- shows the windowing functions described so far and their time- and frequency-do
-main behavior.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Graphics
- filename Figures/fig1.eps
- lyxscale 48
- width 49line%
- keepAspectRatio
-
-\end_inset
-
-
-\hfill
-
-\begin_inset Graphics
- filename Figures/fig2.eps
- lyxscale 48
- width 49line%
- keepAspectRatio
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:window functions"
-
-\end_inset
-
-Blackman, Bartlett, Hanning, and Hamming windows in the time and frequency
- domain showing the trade-off between main-lobe width and side-lobe height
- (Figures made with matplotlib).
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The trade-off between main-lobe and side-lobe has been studied extensively.
- Solutions that maximize energy in the main-lobe compared to energy in the
- side-lobes can be found by finding an eigenvector which can be expensive
- to compute for large window sizes.
- A good approximation to these prolate-spheroidal windows is the Kaiser
- window.
-
-\end_layout
-
-\begin_layout Description
-kaiser
-\begin_inset LatexCommand index
-name "kaiser"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-,
-\begin_inset Formula $\beta$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Kaiser smoothing window.
- The
-\begin_inset Formula $\beta$
-\end_inset
-
- parameter controls the width of the window (and the frequency-domain side-lobe
- height and main-lobe width).
- The window is defined as
-\begin_inset Formula \[
-w\left[n\right]=\frac{1}{I_{0}\left(\beta\right)}I_{0}\left(\beta\sqrt{1-\frac{\left(2n-M-1\right)^{2}}{\left(M-1\right)^{2}}}\right).\]
-
-\end_inset
-
- There is an empirical relationship between
-\begin_inset Formula $\beta$
-\end_inset
-
- and the side-lobe height which can be used in FIR filter design.
- To achieve a side-lobe height of
-\begin_inset Formula $-\alpha$
-\end_inset
-
-dB, the
-\begin_inset Formula $\beta$
-\end_inset
-
- parameter is
-\begin_inset Formula \[
-\beta=\left\{ \begin{array}{cc}
-0.1002\left(\alpha-8.7\right) & \alpha>50,\\
-0.5842\left(\alpha-21\right)^{0.4}+0.07886\left(\alpha-21\right) & 21\leq\alpha\leq50,\\
-0 & \alpha<21.\end{array}\right.\]
-
-\end_inset
-
- The length
-\begin_inset Formula $M$
-\end_inset
-
- of the window determines the transition width.
- To obtain a transition width of
-\begin_inset Formula $\Delta\omega$
-\end_inset
-
-rad/s the window-length must be at least:
-\begin_inset Formula \[
-M=\frac{\alpha-8}{2.285\Delta\omega}+1.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Utility functions
-\end_layout
-
-\begin_layout Description
-set_numeric_ops
-\begin_inset LatexCommand index
-name "set\\_numeric\\_ops"
-
-\end_inset
-
- (<op1>=func1, <op2>=func2, ...)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function can be used to alter the operations used for internal array
- calculations and array special methods.
- Replaceable operations (and possible entries for <opN>) are add, subtract,
- multiply, divide, remainder, power, sqrt, negative, absolute, invert, left_shif
-t, right_shift, bitwise_and, bitwise_or, less, less_equal, equal, not_equal,
- greater, greater_equal, floor_divide, true_divide, logical_or, logical_and,
- floor, ceil, maximum, and minimum.
- The example code below changes, then restores, the old Numeric behavior
- of remainder (which was changed because it was not consistent with Python).
-
-\end_layout
-
-\begin_layout MyCode
->>> a = array([-3.,-2,-1,0,1,2,3])
-\newline
->>> print a % -2.1
-\newline
-[-0.9 -2.
- -1.
- 0.
- -1.1 -0.1 -1.2]
-\newline
->>> oldops = set_numeric_ops(remainder=fmod)
-\newline
->>> print a %
- -2.1
-\newline
-[-0.9 -2.
- -1.
- 0.
- 1.
- 2.
- 0.9]
-\newline
->>> newops = set_numeric_ops(**oldops)
-\newline
->>> print a % -2.1
-\newline
-[-0.9 -2.
- -1.
- 0.
- -1.1 -0.1 -1.2]
-\newline
->>> print 3 % -2.1 # comparison
-\newline
--1.2
-\end_layout
-
-\begin_layout Description
-get_include
-\begin_inset LatexCommand index
-name "get\\_include"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the directory that contains the numpy include files.
- The numpy.distutils automatically includes this directory in building extensions.
-
-\end_layout
-
-\begin_layout Description
-get_numarray_include
-\begin_inset LatexCommand index
-name "get\\_numarray\\_include"
-
-\end_inset
-
- (type=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the directory that contains the numarray compatible C-API include
- files.
- If type is not None, then return a list containing both the numarray compatible
- C-API include files and the numpy include files.
- The latter form is only needed when building an extension without the use
- of numpy.distutils.
-
-\end_layout
-
-\begin_layout Description
-deprecate
-\begin_inset LatexCommand index
-name "deprecate"
-
-\end_inset
-
- (func, oldname, newname)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a deprecated function named 'oldname' that has been replaced by
- 'newname'.
- This new deprecated function issues a warning before calling the old function.
- The name and docs of the function are also updated to be oldname instead
- of the name that func has.
- Example usage.
- If you want to deprecate the function named 'old' in favor of a new function
- named 'new' which has the same calling conention then this could be done
- with the assignment
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-old = deprecate(new, 'old', 'new')
-\end_layout
-
-\end_deeper
-\begin_layout Chapter
-Scalar objects
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cha:Scalar-objects"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Quotation
-Never worry about numbers.
- Help one person at a time, and always start with the person nearest you.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Mother Teresa
-\end_layout
-
-\begin_layout Quotation
-A great many people think they are thinking when they are merely rearranging
- their prejudices.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-William James
-\end_layout
-
-\begin_layout Standard
-One
-\begin_inset LatexCommand index
-name "array scalars|("
-
-\end_inset
-
- important new feature of NumPy is the addition of a new scalar object for
- each of the 21 different data types that an array can have.
- Do not confuse these scalar objects with the data-type objects.
- There is one data-type object.
- It contains a
-\family typewriter
-.type
-\family default
- attribute which points to the Python type that each element of the array
- will be returned as
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-with the exception of object data-types which return the underlying object
- and not a
-\begin_inset Quotes eld
-\end_inset
-
-scalar
-\begin_inset Quotes erd
-\end_inset
-
- type.
-
-\end_layout
-
-\end_inset
-
-.
- The built-in data-types point have .
-\family typewriter
-type
-\family default
- attributes that point to these scalar objects.
- Five (or six) of these new scalar objects are essentially equivalent to
- fundamental Python types and therefore inherit from them as well as from
- the generic array scalar type.
- The bool_ data type is very similar to the Python BooleanType but does
- not inherit from it because Python's BooleanType does not allow itself
- to be inherited from, and on the C-level the size of the actual bool_ data
- is not the same as a Python Boolean scalar.
- Table
-\begin_inset LatexCommand ref
-reference "cap:Array-scalar-types"
-
-\end_inset
-
- shows which array scalars inherit from basic Python types.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Array-scalar-types"
-
-\end_inset
-
-Array scalar types that inherit from basic Python types.
- The intc array data type might also inherit from the IntType if it has
- the same number of bits as the int_ array data type on your platform.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="6" columns="2">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-array data type
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Python type
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-int_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-IntType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-float_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-FloatType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-complex_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ComplexType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-str_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-StringType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-unicode_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-UnicodeType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The array scalars have the same attributes and methods as arrays and live
- in a hierarchy of scalar types so they can be easily classified based on
- their type objects.
- However, because array scalars are immutable, and attributes change intrinsic
- properties of the object, the
-\series bold
-array scalar attributes are not settable
-\series default
-.
-\end_layout
-
-\begin_layout Standard
-Array scalars can be detected using the hierarchy of data types.
- For example,
-\family typewriter
-isinstance(val, generic)
-\family default
- will return True if val is an array scalar object.
- Alternatively, what kind of array scalar is present can be determined using
- other members of the data type hierarchy.
- Thus, for example
-\family typewriter
-isinstance(val, complexfloating)
-\family default
- will return True if val is a complex valued type, while
-\family typewriter
-isinstance(val, flexible)
-\family default
- will return true if val is one of the flexible itemsize array types (string,
- unicode, void).
-
-\end_layout
-
-\begin_layout Warning
-The bool_ type is not a subclass of the int_ type (the bool_ type is not
- even a number type).
- This is different than Python's default implementation of bool as a sub-class
- of int.
-\end_layout
-
-\begin_layout Section
-Attributes of array scalars
-\end_layout
-
-\begin_layout Standard
-The array scalar objects have an
-\family typewriter
-__array_priority__
-\family default
- of NPY_SCALAR_PRIORITY (-1,000,000.0).
- They also do not (yet) have a ctypes attribute.
- Otherwise, they share the same attributes as arrays:
-\end_layout
-
-\begin_layout Description
-flags
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns True for CONTIGUOUS, OWNDATA, FORTRAN, and ALIGNED.
- Always returns False for WRITEABLE, and UPDATEIFCOPY.
-
-\end_layout
-
-\begin_layout Description
-shape
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns ().
-\end_layout
-
-\begin_layout Description
-strides
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns ().
-\end_layout
-
-\begin_layout Description
-ndim
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns 0.
-\end_layout
-
-\begin_layout Description
-data
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A read-only buffer object of size self.itemsize,
-\end_layout
-
-\begin_layout Description
-size
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return 1.
-\end_layout
-
-\begin_layout Description
-itemsize
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of bytes this scalar requires.
-\end_layout
-
-\begin_layout Description
-base
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns None.
-\end_layout
-
-\begin_layout Description
-dtype
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns data type descriptor corresponding to this array scalar.
-
-\end_layout
-
-\begin_layout Description
-real
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The real part of the scalar.
-\end_layout
-
-\begin_layout Description
-imag
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The imaginary part of the scalar (or 0 if this is real).
-\end_layout
-
-\begin_layout Description
-flat
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 1-d iterator object (of size 1).
-\end_layout
-
-\begin_layout Description
-T
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a reference to self.
-\end_layout
-
-\begin_layout Description
-__array_interface__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The Python-side to the array interface.
-
-\end_layout
-
-\begin_layout Description
-__array_struct__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The C-side to the array interface
-\end_layout
-
-\begin_layout Description
-__array_priority__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- -100.0 (very low-priority).
-
-\end_layout
-
-\begin_layout Description
-__array_wrap__ (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an array scalar from an array
-\end_layout
-
-\begin_layout Section
-Methods of array scalars
-\end_layout
-
-\begin_layout Standard
-Array scalars have exactly the same methods as arrays.
- The default behavior of these methods is to internally convert the scalar
- to an equivalent 0-dimensional array and to call the corresponding array
- method.
- The exceptions to these rules are given below.
- In addition, math operations on array scalars are defined so that the same
- hardware flags are set and used to interpret the results as for ufunc.
- Therefore the error state used for ufuncs also carries over to the math
- on array scalars.
-\end_layout
-
-\begin_layout Description
-__new__ (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The default behavior is to return a new array or array scalar by calling
- array(obj) with the corresponding data type.
- There are two situations when this default behavior is delayed until another
- approach is tried.
- First, when the array scalar type inherits from a Python type, then the
- Python types new method is called first and the default method is called
- only if that approach fails.
- The second situation is for the
-\family typewriter
-void
-\family default
- data type where a single integer-like argument will cause a void scalar
- of that size to be created and initialized to 0.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Notice that because array(obj) is called for new, if obj is a nested sequence,
- then the return object could actually be an
-\family typewriter
-ndarray
-\family default
-.
- Thus, arrays of the correct type can also be created by calling the array
- data type name directly:
-\end_layout
-
-\begin_layout MyCode
->>> uint32([[5,6,7,8],[1,2,3,4]])
-\newline
-array([[5, 6, 7, 8],
-\newline
- [1, 2, 3, 4]],
- dtype=uint32)
-\end_layout
-
-\begin_layout Description
-__array__ (<None>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a 0-dimensional array of the given data type, or of type(self)
- if argument is None.
-\end_layout
-
-\begin_layout Description
-__array_wrap__ (array)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a scalar array object from the first-element of the array.
-\end_layout
-
-\begin_layout Description
-__squeeze__ ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns self.
-\end_layout
-
-\begin_layout Description
-byteswap (<False>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Trying to set the first (inplace) argument to True raises a ValueError.
- Otherwise, this returns a new array scalar with the data byteswapped.
-
-\end_layout
-
-\begin_layout Description
-__reduce__ ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is called to pickle an array scalar.
- It returns a tuple of (numpy.core.multiarray.scalar, self.dtypestr, obj or
- self.tobytes()) which can be used to reconstruct the scalar on unpickling.
- Notice that no state is written, because the entire scalar can be constructed
- from just the string.
- Also, if this is an object array scalar, then the Python object being reference
-d is written.
-\end_layout
-
-\begin_layout Description
-__setstate__ ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Does nothing but return None.
-\end_layout
-
-\begin_layout Description
-setflags ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Does nothing, as flags cannot be set for scalars
-\begin_inset LatexCommand index
-name "array scalars|)"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Section
-Defining New Types
-\end_layout
-
-\begin_layout Standard
-There are two ways to effectively define a new type of array.
- One way is to simply subclass the ndarray and overwrite the methods of
- interest.
- This will work to a degree, but internally certain behaviors are fixed
- by the data type of the array.
- To fully customize the data type of an array you need to define a new data-type
- for the array, and register it with NumPy.
- This new type can only be defined in C.
- How to define a new data type in C will be discussed in the next part of
- the book.
-\end_layout
-
-\begin_layout Chapter
-Data-type (
-\family typewriter
-dtype
-\family default
-) Objects
-\end_layout
-
-\begin_layout Quotation
-We cannot expect that all nations will adopt like systems, for conformity
- is the jailer of freedom and the enemy of growth.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-John F.
- Kennedy
-\end_layout
-
-\begin_layout Quotation
-What information consumes is rather obvious: it consumes the attention of
- its recipients.
- Hence, a wealth of information creates a poverty of attention and a need
- to allocate that attention efficiently among the overabundance of information
- sources that might consume it.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Herbert Simon
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cha:Data-descriptor-objects"
-
-\end_inset
-
-It
-\begin_inset LatexCommand index
-name "dtype|("
-
-\end_inset
-
- is important not to confuse the
-\begin_inset Quotes eld
-\end_inset
-
-array-scalars
-\begin_inset Quotes erd
-\end_inset
-
- with the
-\begin_inset Quotes eld
-\end_inset
-
-data-type objects.
-\begin_inset Quotes erd
-\end_inset
-
- It is true that an array-scalar can be interpreted as a data-type object
- and so can be used to refer to the data-type of an array.
- However, the data-type object is a separate Python object.
- Every ndarray has an associated data-type object that completely defines
- the data in the array (including any named fields).
- For every built-in data-type object there is an associated type object
- whose instances are the array-scalars.
- Because of the association between each data-type object and a type-object
- of the corresponding array scalar, the array-scalar type-objects can also
- be thought of as data-types.
- However, for the type objects of flexible array-scalars (string, unicode_,
- and void), the type-objects alone are not enough to specify the full data-type
- because the length is not given.
- The data-type constructor,
-\series bold
-numpy.dtype
-\series default
-, converts any object that can be considered as a data-type into a data-type
- object which is the actual object an ndarray looks to in order to interpret
- each element of its data region.
- Whenever a data-type is required in a NumPy function or method, supplying
- a dtype object is always fastest.
- If the object supplied is not a dtype object, then it will be converted
- to one using dtype(obj).
- Therefore, understanding data-type objects is the key to understanding
- how data types are really represented and understood in NumPy.
-\end_layout
-
-\begin_layout Section
-Attributes
-\begin_inset LatexCommand index
-name "dtype!attributes|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-type
-\begin_inset LatexCommand index
-name "dtype!attributes!type"
-
-\end_inset
-
- The
-\begin_inset LatexCommand index
-name "The"
-
-\end_inset
-
- type object used to instantiate a scalar of this data-type.
-\end_layout
-
-\begin_layout Description
-kind
-\begin_inset LatexCommand index
-name "dtype!attributes!kind"
-
-\end_inset
-
- A character code (one of 'biufcSUV') identifying the general kind of data.
-
-\end_layout
-
-\begin_layout Description
-char
-\begin_inset LatexCommand index
-name "dtype!attributes!char"
-
-\end_inset
-
- A unique character code for each of the 21 different built-in types.
-
-\end_layout
-
-\begin_layout Description
-num
-\begin_inset LatexCommand index
-name "dtype!attributes!num"
-
-\end_inset
-
- A unique number for each of the 21 different built-in types roughly ordered
- from least-to-most precision.
-
-\end_layout
-
-\begin_layout Description
-str
-\begin_inset LatexCommand index
-name "dtype!attributes!str"
-
-\end_inset
-
- The array-protocol typestring of this data-type object.
-\end_layout
-
-\begin_layout Description
-name
-\begin_inset LatexCommand index
-name "dtype!attributes!name"
-
-\end_inset
-
- A bit-width name for this data-type (un-sized flexible data-type objects
- are missing the width).
-
-\end_layout
-
-\begin_layout Description
-byteorder
-\begin_inset LatexCommand index
-name "dtype!attributes!byteorder"
-
-\end_inset
-
- A character indicating the byte-order of this data-type object ('=' : native,
- '<' : little-endian, '>' : big-endian, '|' : not applicable).
- All built-in data-type objects have byteorder either '=' or '|'.
-
-\end_layout
-
-\begin_layout Description
-itemsize
-\begin_inset LatexCommand index
-name "dtype!attributes!itemsize"
-
-\end_inset
-
- The element size of this data-type object.
- For 18 of the 21 types this number is fixed by the data-type.
- For the flexible data-types, this number can be anything.
-
-\end_layout
-
-\begin_layout Description
-alignment
-\begin_inset LatexCommand index
-name "dtype!attributes!alignment"
-
-\end_inset
-
- The required alignment (in bytes) of this data-type according to the compiler.
- More information is available in the C-API section.
-
-\end_layout
-
-\begin_layout Description
-fields
-\begin_inset LatexCommand index
-name "dtype!attributes!fields"
-
-\end_inset
-
- A dictionary showing any named fields that have been defined for this data-type
- (or None if there are no named fields).
- Fields can be assigned to any built-in data-type (
-\emph on
-e.g.
-
-\emph default
- using the tuple input to the dtype constructor).
- However, fields are most useful for (subtypes of) void data-types which
- can be any size.
- Fields are a convenient way to keep track of fixed-size sub-parts of the
- total fixed-size array-element, or record.
- A field is defined in terms of another dtype object and an offset (in bytes)
- into the current record.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The fields dictionary is indexed by keys that are the names of the fields.
- Each entry in the dictionary is a tuple fully describing the field: (dtype,
- offset[, title]).
- If present, the optional title can actually be any object (if it is string
- or unicode then it will also be a key in the fields dictionary, otherwise
- it's meta-data).
- Notice also, that the first two elements of the tuple can be passed directly
- as arguments to the getfield and setfield attributes of an ndarray.
- If field names are not specified in a constructor, they default to 'f0',
- 'f2', ..., 'f<n-1>'.
-
-\end_layout
-
-\begin_layout Description
-names
-\begin_inset LatexCommand index
-name "dtype!attributes!char"
-
-\end_inset
-
- An ordered list of field names.
- This can be used to walk through all of the named fields in offset order.
- Notice that the defined fields do not have to
-\begin_inset Quotes eld
-\end_inset
-
-cover
-\begin_inset Quotes erd
-\end_inset
-
- the record, but the itemsize of the container data-type object must always
- be at least as large as the itemsizes of the data-type objects in the defined
- fields.
- This attribute is None if there are no fields.
-\end_layout
-
-\begin_layout Description
-subdtype
-\begin_inset LatexCommand index
-name "dtype!attributes!subdtype"
-
-\end_inset
-
- Numarray introduced the concept of a fixed-length record having fields
- that were themselves arrays of another data-type.
- This is supported at a fundamental level in NumPy using this attribute
- which maintains the simplicity of defining a field by another data-type
- object.
- It either returns None or a tuple (base dtype, shape) where shape is a
- tuple showing the size of the C-contiguous array and the base dtype object
- indicates the data-type in each element of the subarray.
- If a field whose dtype object has this attribute is retrieved, then the
- extra dimensions implied by the shape are tacked on to the end of the retrieved
- array.
-
-\end_layout
-
-\begin_layout Description
-descr
-\begin_inset LatexCommand index
-name "dtype!attributes!descr"
-
-\end_inset
-
- An array-interface-compliant full description of the data-type.
- The format is that required by the 'descr' key in the __array_interface__.
-\end_layout
-
-\begin_layout Description
-isbuiltin
-\begin_inset LatexCommand index
-name "dtype!attributes!isbuiltin"
-
-\end_inset
-
- A 1 if self is one of the built-in dtype objects; a 2 if self is a user-defined
- dtype object; a 0, otherwise.
-\end_layout
-
-\begin_layout Description
-isnative
-\begin_inset LatexCommand index
-name "dtype!attributes!isnative"
-
-\end_inset
-
- True if this data-type object has a byteorder that is native to the platform;
- otherwise False.
-\end_layout
-
-\begin_layout Description
-hasobject
-\begin_inset LatexCommand index
-name "dtype!attributes!hasobject"
-
-\end_inset
-
- True if self contains reference-counted objects in any of it's fields or
- sub data-types.
- Recall that what is actually in the ndarray memory representing the Python
- object is the memory address of that object (a pointer).
- Special handling may be required and this attribute is useful for distinguishin
-g data-types that may contain arbitrary Python objects and data-types that
- won't.
-
-\end_layout
-
-\begin_layout Description
-flags
-\begin_inset LatexCommand index
-name "dtype!attributes!flags"
-
-\end_inset
-
- Bit-flags for the data-type describing how the data-type will be interpreted.
- Bit-masks are in numpy.core.multiarray as the constants ITEM_HASOBJECT, LIST_PICK
-LE, ITEM_IS_POINTER, NEEDS_INIT, NEEDS_PYAPI, USE_GETITEM, USE_SETITEM.
- A full explanation of these flags is in the second part of this book.
- These flags are largely useful for user-defined data-types.
-
-\begin_inset LatexCommand index
-name "dtype!attributes|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Construction
-\end_layout
-
-\begin_layout Description
-dtype (obj, align=0, copy=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "dtype!construction|("
-
-\end_inset
-
-Return a new data-type object from obj.
- The keyword argument, align, can only be nonzero if obj is a dictionary,
- or a comma-separated string.
- If it is non-zero in those cases it is used to add padding as needed to
- the fields to match what the compiler that compiled NumPy would do to a
- similar C-struct.
- The copy argument guarantees a new copy of the data-type object, otherwise,
- the result may just be a reference to a built-in data-type object.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Objects that can be converted to a data-type object are described in the
- following list.
- Because every object in this list can be converted to a data-type object
- it can also be used whenever a
-\family typewriter
-dtype
-\family default
- is requested by a function or method in NumPy.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-dtype
-\begin_inset LatexCommand index
-name "dtype!construction!from float"
-
-\end_inset
-
-Returns itself.
-\end_layout
-
-\begin_layout Description
-None
-\begin_inset LatexCommand index
-name "dtype!construction!from None"
-
-\end_inset
-
-Returns the default data-type descriptor object: float.
-\end_layout
-
-\begin_layout Description
-type-object
-\begin_inset LatexCommand index
-name "dtype!construction!from type"
-
-\end_inset
-
-Many Python type objects can be converted to data-type objects.
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-Array-scalar types: The type-objects of the 21 built-in array scalars all
- convert to an associated data-type object.
- This is true for sub-classes as well.
- Not all data-type information can be supplied with a type-object.
- Flexible data-types with default itemsizes of 0, for example, require an
- itemsize to be useful.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: int32, float64, uint16, complex128
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Generic types: The generic hierarchical type objects convert to corresponding
- dtype objects according to the associations: (numeric, inexact, floating)
- --> float; complexfloating --> cfloat; (integer, signedinteger) --> int_;
- unsignedinteger --> uint; character --> string; (generic, flexible) -->
- void.
-
-\end_layout
-
-\begin_layout Enumerate
-Builtin types: Several python types are equivalent to a corresponding array
- scalar when used to generate a dtype object: int --> int_; bool --> bool_;
- float --> float_; complex --> cfloat; str --> string; unicode --> unicode_;
- buffer --> void; (all others) --> object_.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: object, str, float, int
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Any type object with the dtype attribute: The attribute will be accessed
- and used directly.
- The attribute must return something that is convertible into a dtype object.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-string
-\begin_inset LatexCommand index
-name "dtype!construction!from string"
-
-\end_inset
-
-Several kinds of strings can be converted.
- Recognized strings can be pre-pended with '>', or '<', to specify the byteorder.
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-One-character strings: Each built-in data-type has a character code (the
- updated Numeric typecodes), that uniquely identifies it.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: 'b', 'H', 'f', 'd', 'F', 'D', Float64, Int32, UInt16
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Array-protocol type strings: The first character specifies the kind of data
- and the remaining characters specify how many bytes of data.
- The supported kinds are 'b' --> Boolean, 'i' --> (signed) integer, 'u'
- --> unsigned integer, 'f' --> floating-point, 'c' --> complex-floating
- point, 'S', 'a' --> string, 'U' --> unicode, 'V' --> anything (void).
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: 'i4', 'f8', 'c16', 'b1', 'S10', 'a25'
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Comma-separated field formats: numarray introduced a short-hand notation
- for specifying the format of a record as a comma-separated string of basic
- formats.
- A basic format in this context is an optional shape specifier followed
- by an array-protocol type string.
- Parenthesis are required on the shape if it is greater than 1-d.
- NumPy allows a modification on the format in that any string that can uniquely
- identify the type can be used to specify the data-type in a field.
- This data-type defines fields named 'f0', 'f2', ..., 'f<N-1>' where N (>1)
- is the number of comma-separated basic formats in the string.
- If the optional shape specifier is provided, then the data-type for the
- corresponding field contains a subdtype attribute providing the shape.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples:
-\begin_inset Quotes eld
-\end_inset
-
-i4, (2,3)f8, f4
-\begin_inset Quotes erd
-\end_inset
-
-;
-\begin_inset Quotes eld
-\end_inset
-
-a3, 3u8, (3,4)a10
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Any string in NumPy.sctypeDict.keys():
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: 'uint32', 'Int16', 'Uint64', 'Float64', 'Complex64'
-\end_layout
-
-\end_deeper
-\end_deeper
-\begin_layout Description
-tuple
-\begin_inset LatexCommand index
-name "dtype!construction!from tuple"
-
-\end_inset
-
-Three kinds of tuples each of length 2 can be converted into a data-type
- object:
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-(flexible dtype, itemsize): The first argument must be an object that is
- converted to a flexible data-type object (one whose element size is 0),
- the second argument is an integer providing the desired itemsize.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: (void, 10); (str, 35), ('U', 10)
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-(fixed dtype, shape): The first argument is any object that can be converted
- into a fixed-size data-type object.
- The second argument is the desired shape of this type.
- If the shape parameter is 1, then the data-type object is equivalent to
- fixed dtype.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: (int32, (2,5)); ('S10', 1)=='S10'; ('i4, (2,3)f8, f4', (2,3))
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-(base dtype, new dtype): Both arguments must be convertible to data-type
- objects in this case.
- The base dtype is the data-type object that the new data-type builds on.
- This is how you could assign named fields to any built-in data-type object.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: (int32, {'real':(int16,0), 'imag':(int16,2)}); (int32, (int8,
- 4));
-\newline
-('i4', [('r','u1'),('g','u1'),('b','u1'),('a','u1')])
-\end_layout
-
-\end_deeper
-\end_deeper
-\begin_layout Description
-list
-\begin_inset LatexCommand index
-name "dtype!construction!from list"
-
-\end_inset
-
-(array description interface): This style is more fully described at
-\begin_inset LatexCommand url
-name "this site"
-target "http://docs.scipy.org/doc/numpy/reference/arrays.interface.html"
-
-\end_inset
-
-.
- It consists of a list of fields where each field is described by a tuple
- of length 2 or 3.
- The first element of the tuple is the field name (if this is '' then a
- standard field name, 'f#', is assigned).
- The field name may also be a 2-tuple of strings where the first string
- is either a
-\begin_inset Quotes eld
-\end_inset
-
-title
-\begin_inset Quotes erd
-\end_inset
-
- (which may be any string or unicode string) or meta-data for the field
- which can be any object, and the second string is the
-\begin_inset Quotes eld
-\end_inset
-
-name
-\begin_inset Quotes erd
-\end_inset
-
- which must be a valid Python identifier.
- The second element of the tuple can be anything that can be interpreted
- as a data-type.
- The optional third element of the tuple contains the shape if this field
- represents an array of the data-type in the second element.
- This style does not accept align=1 as it is assumed that all of the memory
- is accounted for by the array interface description.
- See the web-page for more examples.
- Note that a 3-tuple with a third argument equal to 1 is equivalent to a
- 2-tuple.
-\end_layout
-
-\begin_layout Description
-Examples: [('big','>i4'), ('little','<i4')]; [('R','u1'), ('G','u1'), ('B','u1')
-, ('A','u1')]
-\end_layout
-
-\begin_layout Description
-dictionary
-\begin_inset LatexCommand index
-name "dtype!construction!from dict"
-
-\end_inset
-
-There are two dictionary styles.
- The first is a standard dictionary format while the second accepted format
- allows the fields attribute of dtype objects to be interpreted as a data-type.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-names and formats: This style has two required and two optional keys.
- The 'names' and 'formats' keys are required.
- Their respective values are equal-length lists with the field names and
- the field formats.
- The field names must be strings and the field formats can be any object
- accepted by dtypedescr constructor.
- The optional keys in the dictionary are 'offsets' and 'titles' and their
- values must each be lists of the same length as the 'names' and 'formats'
- lists.
- The 'offsets' value is a list of integer offsets for each field, while
- the 'titles' value is a list of titles for each field (None can be used
- if no title is desired for that field).
- The titles can be any string or unicode object and will add another entry
- to the fields dictionary keyed by the title and referencing the same field
- tuple which will contain the title as an additional tuple member.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: {'names': ['r','g','b','a'], 'formats': [uint8, uint8, uint8,
- uint8]}; {'names':['r','b'], 'formats': ['u1', 'u1'], 'offsets': [0, 2],
- 'titles': ['Red pixel', 'Blue pixel']}
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-data-type object fields: This style is patterned after the format of the
- fields dictionary in a data-type object.
- It contains string or unicode keys that refer to (data-type, offset) or
- (data-type, offset, title) tuples.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: {'col1': ('S10', 0), 'col2': (float32, 10), 'col3': (int, 14)}
-\begin_inset LatexCommand index
-name "dtype!construction|)"
-
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\end_deeper
-\end_deeper
-\begin_layout Section
-Methods
-\begin_inset LatexCommand index
-name "dtype!methods|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-newbyteorder
-\begin_inset LatexCommand index
-name "dtype!methods!newbyteorder"
-
-\end_inset
-
-(<'swap'>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a new copy of self with its byteorder changed according to the
- optional argument.
- All changes are also propagated to the data-type objects of all fields
- and sub-arrays.
- If a byteorder of '|' (meaning ignore) is encountered it is left unchanged.
- The default behavior is to swap the byteorder.
- Other possible arguments are 'big' ('>'), 'little' ('<'), and 'native'
- ('=') which recursively forces the byteorder of self (and it's field data-type
- objects and any sub-arrays) to the corresponding byteorder.
-
-\end_layout
-
-\begin_layout Description
-__reduce__
-\begin_inset LatexCommand index
-name "dtype!methods!\\_\\_reduce\\_\\_"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-__setstate__
-\begin_inset LatexCommand index
-name "dtype!methods!\\_\\_setstate\\_\\_"
-
-\end_inset
-
- (state)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Data-type objects can be pickled because of these two methods.
- The __reduce__() method returns a 3-tuple consisting of (callable object,
- args, state), where the callable object is numpy.core.multiarray.dtype and
- args is (typestring, 0, 1) unless the data-type inherits from void (or
- is user-defined) in which case args is (typeobj, 0, 1).
- The state is an 8-tuple with (version, endian, self.subdtype, self.names,
- self.fields, self.itemsize, self.alignment, self.flags).
- The self.itemsize and self.alignment entries are both -1 if the data-type
- object is built-in and not flexible (because they are fixed on creation).
- The setstate method takes the saved state and updates the date-type
-\begin_inset LatexCommand index
-name "dtype!methods|)"
-
-\end_inset
-
-object.
-\begin_inset LatexCommand index
-name "dtype|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Chapter
-Standard Classes
-\end_layout
-
-\begin_layout Quotation
-To generalize is to be an idiot.
-
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-William Blake
-\end_layout
-
-\begin_layout Quotation
-Not everything that can be counted counts, and not everything that counts
- can be counted.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Albert Einstein
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ndarray!subtyping|("
-
-\end_inset
-
-The ndarray in NumPy is a
-\begin_inset Quotes eld
-\end_inset
-
-new-style
-\begin_inset Quotes erd
-\end_inset
-
- Python built-in-type.
- Therefore, it can be inherited from (in Python or in C) if desired.
- Therefore, it can form a foundation for many useful classes.
- Often whether to sub-class the array object or to simply use the core array
- component as an internal part of a new class is a difficult decision, and
- can be simply a matter of choice.
- NumPy has several tools for simplifying how your new object interacts with
- other array objects, and so the choice may not be significant in the end.
- One way to simplify the question is by asking yourself if the object you
- are interested can be replaced as a single array or does it really require
- two or more arrays at it's core.
- For example, in the standard NumPy distribution, the matrix and records
- classes inherit from the ndarray, while masked arrays use two ndarrays
- as objects of its internal structure.
-\end_layout
-
-\begin_layout Standard
-Note that asarray(a) always returns the base-class ndarray.
- If you are confident that your use of the array object can handle any subclass
- of an ndarray, then asanyarray(a) can be used to allow subclasses to propagate
- more cleanly through your subroutine.
- In principal a subclass could redefine any aspect of the array and therefore,
- under strict guidelines, asanyarray(a) would rarely be useful.
- However, most subclasses of the arrayobject will not redefine certain aspects
- of the array object such as the buffer interface, or the attributes of
- the array.
- One of important example, however, of why your subroutine may not be able
- to handle an arbitrary subclass of an array is that matrices redefine the
- '*' operator to be matrix-multiplication, rather than element-by-element
- multiplication.
-\end_layout
-
-\begin_layout Section
-Special attributes and methods recognized by NumPy
-\begin_inset LatexCommand index
-name "ndarray!attributes!recognized by|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-__array_finalize__ (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method is called whenever the system internally allocates a new array
- from obj, where obj is a subclass (subtype) of the (big)ndarray.
- It can be used to change attributes of self after construction (so as to
- ensure a 2-d matrix for example), or to update meta-information from the
-
-\begin_inset Quotes eld
-\end_inset
-
-parent.
-\begin_inset Quotes erd
-\end_inset
-
- Subclasses inherit a default implementation of this method that does nothing.
-\end_layout
-
-\begin_layout Description
-__array_wrap__ (array)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method should return an instance of the class from the ndarray object
- passed in.
- For example, this is called after every ufunc for the object with the highest
- __array_priority__.
- The ufunc-computed array object is passed in and whatever is returned is
- passed to the user.
- Subclasses inherit a default implementation of this method.
-\end_layout
-
-\begin_layout Description
-__array__ (dtype <None>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method is called to obtain an ndarray object when needed.
- You should always guarantee this returns an actual ndarray object.
- Subclasses inherit a default implementation of this method.
-
-\end_layout
-
-\begin_layout Description
-__array_priority__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The value of this attribute is used to determine what type of object to
- return in situations where there is more than one possibility for the Python
- type of the returned object.
- Subclasses inherit a default value of 1.0 for this attribute.
-\begin_inset LatexCommand index
-name "ndarray!attributes!recognized by|)"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "ndarray!subtyping|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Matrix Objects
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "matrix|("
-
-\end_inset
-
-Matrix objects inherit from the ndarray and therefore, they have the same
- attributes and methods of ndarrays.
- There are six important differences of matrix objects, however that may
- lead to unexpected results when you use matrices but expect them to act
- like arrays:
-\end_layout
-
-\begin_layout Enumerate
-Matrix objects can be created using a string notation to allow Matlab-style
- syntax where spaces separate columns and semicolons (';') separate rows.
-
-\end_layout
-
-\begin_layout Enumerate
-Matrix objects are always two-dimensional.
- This has far-reaching implications, in that m.ravel() is still two-dimensional
- (with a 1 in the first dimension) and item selection returns two-dimensional
- objects so that sequence behavior is fundamentally different than arrays.
-\end_layout
-
-\begin_layout Enumerate
-Matrix objects over-ride multiplication to be matrix-multiplication.
-
-\series bold
-Make sure you understand this for functions that you may want to receive
- matrices.
- Especially in light of the fact that asanyarray(m) returns a matrix when
- m is a matrix.
-\end_layout
-
-\begin_layout Enumerate
-Matrix objects over-ride power to be matrix raised to a power.
- The same warning about using power inside a function that uses asanyarray(...)
- to get an array object holds for this fact.
-
-\end_layout
-
-\begin_layout Enumerate
-The default __array_priority__ of matrix objects is 10.0, and therefore mixed
- operations with ndarrays always produce matrices.
-
-\end_layout
-
-\begin_layout Enumerate
-Matrices have special attributes which make calculations easier.
- These are
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-.T --- return the transpose of self
-\end_layout
-
-\begin_layout Enumerate
-.H --- return the conjugate transpose of self
-\end_layout
-
-\begin_layout Enumerate
-.I --- return the inverse of self
-\end_layout
-
-\begin_layout Enumerate
-.A --- return a view of the data of self as a 2d array (no copy is done).
-\end_layout
-
-\end_deeper
-\begin_layout Warning
-Matrix objects over-ride multiplication, '*', and power, '**', to be matrix-mult
-iplication and matrix power, respectively.
- If your subroutine can accept sub-classes and you do not convert to base-class
- arrays, then you must use the ufuncs multiply and power to be sure that
- you are performing the correct operation for all inputs.
-
-\end_layout
-
-\begin_layout Standard
-The matrix class is a Python subclass of the ndarray and can be used as
- a reference for how to construct your own subclass of the ndarray.
- Matrices can be created from other matrices, strings, and anything else
- that can be converted to an
-\family typewriter
-ndarray
-\family default
-.
- The name
-\begin_inset Quotes eld
-\end_inset
-
-mat
-\begin_inset Quotes erd
-\end_inset
-
- is an alias for
-\begin_inset Quotes eld
-\end_inset
-
-matrix
-\begin_inset Quotes erd
-\end_inset
-
- in NumPy.
-\end_layout
-
-\begin_layout Description
-Example\InsetSpace ~
-1: Matrix creation from a string
-\end_layout
-
-\begin_layout MyCode
->>> a=mat('1 2 3; 4 5 3')
-\newline
->>> print (a*a.T).I
-\newline
-[[ 0.2924 -0.1345]
-\newline
- [-0.1345 0.0819]]
-\end_layout
-
-\begin_layout Description
-Example\InsetSpace ~
-2: Matrix creation from nested sequence
-\end_layout
-
-\begin_layout MyCode
->>> mat([[1,5,10],[1.0,3,4j]])
-\newline
-matrix([[ 1.+0.j, 5.+0.j, 10.+0.j],
-\newline
- [
- 1.+0.j, 3.+0.j, 0.+4.j]])
-\end_layout
-
-\begin_layout Description
-Example\InsetSpace ~
-3: Matrix creation from an array
-\end_layout
-
-\begin_layout MyCode
->>> mat(random.rand(3,3)).T
-\newline
-matrix([[ 0.7699, 0.7922, 0.3294],
-\newline
- [ 0.2792,
- 0.0101, 0.9219],
-\newline
- [ 0.3398, 0.7571, 0.8197]])
-\end_layout
-
-\begin_layout Description
-matrix (data, dtype=None, copy=True)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The sequence to convert to a matrix is passed in as data.
- If dtype is None, then the data-type is determined from the data.
- If copy is True, then a copy of the data is made, otherwise, the same data
- buffer is used.
- If no buffer can be found for data, then a copy is also made.
- Note: The matrix object is actually a class and so using this syntax calls
- matrix.__new__(matrix, data, dtype, copy) which is what happens whenever
- you
-\begin_inset Quotes eld
-\end_inset
-
-call
-\begin_inset Quotes erd
-\end_inset
-
- any class object as a function.
-\end_layout
-
-\begin_layout Description
-mat
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Just another name for matrix.
-\end_layout
-
-\begin_layout Description
-asmatrix (data, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the data without copying.
- Equivalent to matrix(data, dtype, copy=False).
-\end_layout
-
-\begin_layout Description
-bmat (obj, ldict=None, gdict=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Build a matrix object from a string, nested sequence or an array.
- This command lets you build up matrices from other other objects.
- The ldict and gdict parameters are local and module (global) dictionaries
- that are only used when obj is a string.
- If they are not provided, then the local and module dictionaries present
- when bmat is called are used.
-\begin_inset LatexCommand index
-name "matrix|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout MyCode
->>> A = mat('2 2; 2 2'); B=mat('1 1; 1 1');
-\newline
->>> print bmat('A B; B A')
-\newline
-[[2
- 2 1 1]
-\newline
- [2 2 1 1]
-\newline
- [1 1 2 2]
-\newline
- [1 1 2 2]]
-\end_layout
-
-\begin_layout Section
-Memory-mapped-file arrays
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "memory maps|("
-
-\end_inset
-
-Memory-mapped files are useful for reading and/or modifying small segments
- of a large file with regular layout, without reading the entire file into
- memory.
- A simple subclass of the ndarray uses a memory-mapped file for the data
- buffer of the array.
- For small files, the over-head of reading the entire file into memory is
- typically not significant, however for large files using memory mapping
- can save considerable resources.
-
-\end_layout
-
-\begin_layout Note
-Memory-mapped arrays use the the Python memory-map object which (prior to
- Python 2.5) does not allow files to be larger than a certain size depending
- on the platform.
- This size is always < 2GB even on 64-bit systems.
-
-\end_layout
-
-\begin_layout Standard
-The class is called memmap and is available in the NumPy namespace.
- The __new__ method of the class has been re-written to have the following
- syntax:
-\end_layout
-
-\begin_layout Description
-__new__ (cls, filename, dtype=uint8, mode='r+', offset=0, shape=None, order=0)
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-filename The file name to be used as the array data buffer
-\end_layout
-
-\begin_layout Description
-dtype A data-type object used to interpret the file contents (including
- byteorder).
-\end_layout
-
-\begin_layout Description
-mode The mode to open the file in.
- Valid modes are 'readonly' or 'r', 'copyonwrite' or 'c', 'readwrite' or
- 'r+', and 'write' or 'w+'.
- This mode determines the WRITEABLE flag of the returned array.
-\end_layout
-
-\begin_layout Description
-offset An offset into the file to start the array data.
-\end_layout
-
-\begin_layout Description
-shape The desired shape of the array.
- If this is None, then the returned array will be 1-d with the number of
- elements determined by the file size and data type.
-\end_layout
-
-\begin_layout Description
-order Either 'C' or 'Fortran' to indicate the order that an N-D array should
- be interpreted.
- This only has an effect if the shape is greater than 2-D.
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-Memory-mapped-file arrays have one additional method (besides those they
- inherit from the ndarray): self.
-\series bold
-flush
-\series default
-() which can be called manually by the user to ensure that any changes to
- the array actually get written to disk. This also occurs on deleting
- the memmap object
-
-\end_layout
-
-\begin_layout Description
-Example:
-\end_layout
-
-\begin_layout MyCode
->>> a = memmap('newfile.dat', dtype=float, mode='w+', shape=1000)
-\newline
->>> a[10]
- = 10.0
-\newline
->>> a[30] = 30.0
-\newline
->>> del a
-\newline
->>> b = fromfile('newfile.dat', dtype=float)
-\newline
->>>
- print b[10], b[30]
-\newline
-10.0 30.0
-\newline
->>> a = memmap('newfile.dat', dtype=float)
-\newline
->>> print
- a[10], a[30]
-\newline
-10.0 30.0
-\end_layout
-
-\begin_layout Section
-Character arrays (numpy.char)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "character arrays|("
-
-\end_inset
-
-These are enhanced arrays of either string type or unicode_ type.
- These arrays inherit from the ndarray, but specially-define the operations
- +, *, and % on a (broadcasting) element-by-element basis.
- These operations are not available on the standard ndarray of character
- type.
- In addition, the chararray has all of the standard string (and unicode)
- methods, executing them on an element-by-element basis.
- Perhaps the easiest way to create a chararray is to use self.view(chararray)
- where self is an ndarray of string or unicode data-type.
- However, a chararray can also be created using the numpy.chararray.__new__
- method.
-\end_layout
-
-\begin_layout Description
-__new__ (shape, itemsize, unicode=False, buffer=None, offset=0, strides=None,
- order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new character array of string or unicode type and itemsize characters.
- Create the array using buffer (with offset and strides) if it is not None.
- If buffer is None, then construct a new array with strides in Fortran order
- if len(shape) >=2 and order is 'Fortran' (otherwise the strides will be
- in 'C' order).
-
-\end_layout
-
-\begin_layout Description
-char.array (obj, itemsize=None, copy=True, unicode=False, order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a chararray from the nested sequence obj.
- If obj is an ndarray of data-type unicode_ or string, then its data is
- wrapped by the chararray object and converted to the desired type (string
- or unicode).
-
-\end_layout
-
-\begin_layout Standard
-Another difference with the standard ndarray of string data-type is that
- the chararray inherits the feature introduced by Numarray that white-space
- at the end of any element in the array will be ignored on item retrieval
- and comparison operations.
-
-\begin_inset LatexCommand index
-name "character arrays|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Record Arrays (numpy.rec)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "record arrays|("
-
-\end_inset
-
-NumPy provides a powerful data-type object that allows any ndarray to hold
- (arbitrarily nested) record-like items with named-field access to the sub-types.
- This is possible without any special record-array sub-class.
- Consider the example where each item in the array is a simple record of
- name, age, and weight.
- You could specify a data-type for an array of such records using the following
- data-type object:
-\end_layout
-
-\begin_layout MyCode
->>> desc = dtype({'names': ['name', 'age', 'weight'], 'formats': ['S30',
- 'i2', 'f4']})
-\newline
->>> a = array([('Bill',31,260.0),('Fred', 15, 145.0)],dtype=desc)
-\newline
->>>
- print a[0]
-\newline
-('Bill', 31, 260.0)
-\newline
->>> print a['name']
-\newline
-['Bill' 'Fred']
-\newline
->>> print
- a['age']
-\newline
-[31 15]
-\newline
->>> print a['weight']
-\newline
-[ 260.
- 145.]
-\newline
->>> print a[0]['name'], a[0]['age'], a[0]['weight']
-\newline
-Bill 31 260.0
-\newline
->>>
- print len(a[0])
-\newline
-3
-\end_layout
-
-\begin_layout Standard
-This example shows how a general array can be assigned named fields and
- how these fields can be accessed.
- In this case the a[0] object is an array-scalar of type void.
- The void array-scalars are unique in that they contain references to (rather
- than copies of) the underlying data whenever fields are defined.
- Therefore, the record data can be modified in place:
-\end_layout
-
-\begin_layout MyCode
->>> a[0]['name'] = 'George'; print a
-\newline
-[('George', 31, 260.0) ('Fred', 15, 145.0)]
-\end_layout
-
-\begin_layout Standard
-The recarray subclass and its accompanying record item add the ability to
- access named fields through attribute lookup.
- A quick way to get a record array is to use the view method of the ndarray.
-
-\end_layout
-
-\begin_layout MyCode
->>> r = a.view(recarray)
-\newline
->>> print r.name
-\newline
-['George' 'Fred']
-\end_layout
-
-\begin_layout Standard
-The numpy.core.records module (aliased to nump.rec when numpy is imported)
- contains additional convenience functions for constructing record arrays.
- All of the following constructors have two different mechanisms for specifying
- the data-type.
- Either the dtype= argument can be specified or the argument formats= can
- be specified along with an optional set of four additional keyword arguments
- (names=, titles=, aligned= and byteorder=).
- In some cases neither dtype= nor formats= is required as the data-type
- can be inferred from the object passed in as the first argument.
-\end_layout
-
-\begin_layout Standard
-The five argument method for specifying a data-type constructs a data-type
- object internally.
- The comma-separated formats string is used to specify the fields.
- The names (and optional titles) of the fields can be specified by a comma-separ
-ated string of names (or titles).
- The aligned flag determines whether the fields are packed (False) or padded
- (True) according to the platform compiler rules.
- The byteorder argument allows specification of the byte-order for all of
- the fields at once (they can also be specified individually in the formats
- string).
- The default byte-order is native to the platform.
-
-\end_layout
-
-\begin_layout Description
-array (obj, dtype=None, shape=None, offset=0, strides=None, formats=None,
- names=None, titles=None, aligned=False, byteorder=None, copy=True)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A general-purpose record array constructor that is a front-end to the other
- constructors If obj is None, then call the
-\series bold
-recarray
-\series default
- constructor.
- If obj is a string, then call the
-\series bold
-fromstring
-\series default
- constructor.
- If obj is a list or a tuple then if the first object is an ndarray, then
- call
-\series bold
-fromarrays
-\series default
-, otherwise call
-\series bold
-fromrecords
-\series default
-.
- If obj is a recarray, then make a copy of the data in recarray (if copy
- is True) and use the new formats, names, and titles.
- If obj is a file then call
-\series bold
-fromfile
-\series default
-.
- Finally, if obj is an ndarray, then return obj.view(recarray) and make a
- copy of the data if copy is True.
- Otherwise, call the __array_interface__ attribute and try to convert using
- the information returned from that object.
- Either dtype or the formats argument must be given if obj is None, a string,
- or a file, and if obj is None so the recarray constructor will be called,
- then shape must be given as well.
-
-\end_layout
-
-\begin_layout Description
-fromarrays (array_list, dtype=None, shape=None, formats=None, names=None,
- titles=None, aligned=False, byteorder=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a record array from a (flat) list of ndarrays.
- The data from the arrays will be copied into the fields.
- If formats is None and dtype is None, then the formats will be determined
- from the arrays.
- The names and titles arguments can be a list, tuple or a (comma-separated)
- string specifying the names and/or titles to use for the fields.
- If aligned is True, then the structure will be padded according to the
- rules of the compiler that NumPy was compiled with.
-\end_layout
-
-\begin_layout MyCode
->>> x1 = array([21,32,14])
-\newline
->>> x2 = array(['my','first','name'])
-\newline
->>> x3 =
- array([3.1, 4.5, 6.2])
-\newline
->>> r = rec.fromarrays([x1,x2,x3], names='id, word, number')
-\newline
->
->> print r[1]
-\newline
-(32, 'first', 4.5)
-\newline
->>> r.number
-\newline
-array([ 3.1, 4.5, 6.2])
-\newline
->>> r.word
-\newline
-chararra
-y(['my', 'first', 'name'],
-\newline
- dtype='|S5')
-\end_layout
-
-\begin_layout Description
-fromrecords (rec_list, dtype=None, shape=None, formats=None, names=None,
- titles=None, aligned=False, byteorder=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a record array from a (nested) sequence of tuples that define
- the records.
- If formats are not given, they are deduced from the records, but this is
- slower.
- The field names and field titles can be specified.
- If aligned is non-zero, then the record array is padded so that fields
- are aligned as the platform compiler would do if the fields represented
- a C-struct.
-\end_layout
-
-\begin_layout MyCode
->>> recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)]
-\newline
->>> r = rec.fromrecords(recs,
- formats='S30,i2,f4', names='name, age, weight')
-\newline
->>> print r.name
-\newline
-['Bill' 'Fred']
-\newline
->>
-> print r.age
-\newline
-[31 15]
-\newline
->>> print r.weight
-\newline
-[ 260.
- 145.]
-\end_layout
-
-\begin_layout Description
-fromstring (datastring, dtype=None, shape=None, offset=0, formats=None,
- names=None, titles=None, aligned=0, byteorder=None):
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a record array using the provided datastring (at the given offset)
- as the memory.
- The record array will be read-only.
- The byteorder argument may be used to specify the byteorder of all of the
- fields at the same time.
- A True aligned argument causes padding fields to be added as needed so
- that the fields are aligned on boundaries determined by the compiler.
- The shape of the returned array can also be specified.
-
-\end_layout
-
-\begin_layout Description
-fromfile (fd, dtype=None, shape=None, offset=0, formats=None, names=None,
- titles=None, aligned=False, byteorder=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a record array from the (binary) data in the given file object,
- fd.
- This object may be an open file or a string to indicate a file to read
- from.
- If offset is non-zero, then data is read from the file at offset bytes
- from the current position.
-
-\end_layout
-
-\begin_layout Standard
-The following classes are also available in the numpy.core (and therefore
- the numpy) namespace
-\end_layout
-
-\begin_layout Description
-record A subclass of the void array scalar type that allows field access
- using attributes.
-
-\end_layout
-
-\begin_layout Description
-recarray A subclass of the ndarray that allows field access using attributes
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-__new__ (subtype, shape, formats, names=None, titles=None, buf=None, offset=0,
- strides=None, byteorder=None, aligned=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an array of the given subtype and shape with data-type (record,
- dtype) where dtype is constructed from formats, names, and titles.
- If buf is None, then create new memory.
- Otherwise, use the memory of buf exposed through the buffer protocol.
-\end_layout
-
-\end_deeper
-\begin_layout Description
-format_parser A class useful for creating a data-type descriptor from formats,
- names, titles, and aligned arguments.
- This is used by several of the record array constructors for consistency
- in behavior.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-__init__ (self, formats, names, titles, aligned=False, byteorder=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a data-type object from formats, names, titles, aligned, and
- byteorder arguments.
- Upon completion the constructed data-type object is in self._descr.
-
-\begin_inset LatexCommand index
-name "record arrays|)"
-
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\begin_layout Section
-Masked Arrays (numpy.ma)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "masked arrays|("
-
-\end_inset
-
-These are adapted from the masked arrays provided with Numeric.
- Masked Arrays do not inherit from the ndarray, they simply use two ndarray
- objects in their internal representation.
- Fortunately, as I have not used masked arrays in my work, Paul Dubois (the
- original author of MA for Numeric) adapted and modified the code for use
- by NumPy.
- Alexander Belopolsky (Sasha) added additional functions and improvements
-
-\end_layout
-
-\begin_layout Standard
-Masked arrays are created using the masked array creation function.
-
-\end_layout
-
-\begin_layout Description
-ma.array (data, dtype=None, copy=True, order='C', mask=ma.nomask, fill_value=None)
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-data Something that can be converted to an array.
- If data is already a masked array, then if mask is ma.nomask, the mask used
- be data.mask and the data used data.data.
-
-\end_layout
-
-\begin_layout Description
-dtype The data-type of the underlying array
-\end_layout
-
-\begin_layout Description
-copy If copy is False, then every effort will be made to not copy the data.
-
-\end_layout
-
-\begin_layout Description
-order Specify whether the array is in 'C', 'Fortran', or 'Any' order
-\end_layout
-
-\begin_layout Description
-mask Masked values are excluded from calculations.
- If this is ma.nomask, then there are no masked values.
- Otherwise, this should be an object that is convertible to an array of
- Booleans with the same shape as data.
-\end_layout
-
-\begin_layout Description
-fill_value This value is used to fill in masked values when necessary.
- The fill_value is not used for computation for functions within the ma
- module.
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-Masked arrays have the same methods and attributes as arrays with the addition
- of the mask attribute as well as the
-\begin_inset Quotes eld
-\end_inset
-
-hidden
-\begin_inset Quotes erd
-\end_inset
-
- attributes ._data and ._mask.
-
-\begin_inset LatexCommand index
-name "masked arrays|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Standard container class
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "user\\_array"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "container class"
-
-\end_inset
-
-For backward compatibility and as a standard
-\begin_inset Quotes eld
-\end_inset
-
-container
-\begin_inset Quotes erd
-\end_inset
-
- class, the UserArray from Numeric has been brought over to NumPy and named
-
-\series bold
-numpy.lib.user_array.container
-\series default
- The container class is a Python class whose self.array attribute is an ndarray.
- Multiple inheritance is probably easier with numpy.lib.user_array.container
- than with the ndarray itself and so it is included by default.
- It is not documented here beyond mentioning its existence because you are
- encouraged to use the ndarray class directly if you can.
-
-\end_layout
-
-\begin_layout Section
-Array Iterators
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "array iterator"
-
-\end_inset
-
-Iterators are a powerful concept for array processing.
- Essentially, iterators implement a generalized for-loop.
- If myiter is an iterator object, then the Python code
-\end_layout
-
-\begin_layout LyX-Code
-for val in myiter:
-\end_layout
-
-\begin_layout LyX-Code
- ...
-\end_layout
-
-\begin_layout LyX-Code
- some code involving val
-\end_layout
-
-\begin_layout LyX-Code
- ...
-\end_layout
-
-\begin_layout Standard
-calls val=myiter.next() repeatedly until StopIteration is raised by the iterator.
- There are several ways to iterate over an array that may be useful: default
- iteration, flat iteration, and
-\begin_inset Formula $N$
-\end_inset
-
--dimensional enumeration.
-\end_layout
-
-\begin_layout Subsection
-Default iteration
-\end_layout
-
-\begin_layout Standard
-The default iterator of an ndarray object is the default Python iterator
- of a sequence type.
- Thus, when the array object itself is used as an iterator.
- The default behavior is equivalent to:
-\end_layout
-
-\begin_layout LyX-Code
-for i in arr.shape[0]:
-\end_layout
-
-\begin_layout LyX-Code
- val = arr[i]
-\end_layout
-
-\begin_layout Standard
-This default iterator selects a sub-array of dimension
-\begin_inset Formula $N-1$
-\end_inset
-
- from the array.
- This can be a useful construct for defining recursive algorithms.
- To loop over the entire array requires
-\begin_inset Formula $N$
-\end_inset
-
- for-loops.
-
-\end_layout
-
-\begin_layout MyCode
->>> a = arange(24).reshape(3,2,4)+10
-\newline
->>> for val in a:
-\newline
-...
- print 'item:', val
-\newline
-item: [[10 11 12 13]
-\newline
- [14 15 16 17]]
-\newline
-item: [[18 19
- 20 21]
-\newline
- [22 23 24 25]]
-\newline
-item: [[26 27 28 29]
-\newline
- [30 31 32 33]]
-\end_layout
-
-\begin_layout Subsection
-Flat iteration
-\end_layout
-
-\begin_layout Standard
-As mentioned previously, the flat attribute of ndarray objects returns an
- iterator that will cycle over the entire array in C-style contiguous order.
-
-\end_layout
-
-\begin_layout MyCode
->>> for i, val in enumerate(a.flat):
-\newline
-...
- if i%5 == 0: print i, val
-\newline
-0 10
-\newline
-5 15
-\newline
-10 20
-\newline
-15 25
-\newline
-20 30
-\end_layout
-
-\begin_layout Standard
-Here, I've used the built-in enumerate iterator to return the iterator index
- as well as the value.
-\end_layout
-
-\begin_layout Subsection
-N-dimensional enumeration
-\end_layout
-
-\begin_layout Standard
-Sometimes it may be useful to get the N-dimensional index while iterating.
- The ndenumerate iterator can achieve this.
-\end_layout
-
-\begin_layout MyCode
->>> for i, val in ndenumerate(a):
-\newline
-...
- if sum(i)%5 == 0: print i, val
-\newline
-(0, 0, 0) 10
-\newline
-(1, 1, 3) 25
-\newline
-(2, 0, 3) 29
-\newline
-(2,
- 1, 2) 32
-\end_layout
-
-\begin_layout Subsection
-Iterator for broadcasting
-\end_layout
-
-\begin_layout Standard
-The general concept of broadcasting is also available from Python using
- the
-\series bold
-broadcast
-\series default
- iterator.
- This object takes
-\begin_inset Formula $N$
-\end_inset
-
- objects as inputs and returns an iterator that returns tuples providing
- each of the input sequence elements in the broadcasted result.
-\end_layout
-
-\begin_layout MyCode
->>> for val in broadcast([[1,0],[2,3]],[0,1]):
-\newline
-...
- print val
-\newline
-(1, 0)
-\newline
-(0, 1)
-\newline
-(2, 0)
-\newline
-(3, 1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The methods and attributes of the broadcast object are:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-nd the number of dimensions in the broadcasted result.
-\end_layout
-
-\begin_layout Description
-shape the shape of the broadcasted result.
-\end_layout
-
-\begin_layout Description
-size the total size of the broadcasted result.
-\end_layout
-
-\begin_layout Description
-index the current (flat) index into the broadcasted array
-\end_layout
-
-\begin_layout Description
-iters a tuple of (broadcasted) NumPy.flatiter objects, one for each array.
-\end_layout
-
-\begin_layout Description
-reset ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Reset the multiter object to the beginning.
-\end_layout
-
-\begin_layout Description
-next ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Get the next tuple of objects from the (broadcasted) arrays
-\end_layout
-
-\end_deeper
-\begin_layout Chapter
-Universal Functions
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "par:The-Ufunc-Object"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Quotation
-Computers make it easier to do a lot of things, but most of the things they
- make it easier to do don't need to be done.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Andy Rooney
-\end_layout
-
-\begin_layout Quotation
-People think computers will keep them from making mistakes.
- They're wrong.
- With computers you make mistakes faster.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Adam Osborne
-\end_layout
-
-\begin_layout Section
-Description
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc|("
-
-\end_inset
-
-Universal functions are wrappers that provide a common interface to mathematical
- functions that operate on scalars, and can be made to operate on arrays
- in an element-by-element fashion.
- All
-\family typewriter
-u
-\family default
-niversal
-\family typewriter
-func
-\family default
-tion
-\family typewriter
-s
-\family default
- (
-\family typewriter
-ufuncs
-\family default
-) wrap some core function that takes
-\begin_inset Formula $n_{i}$
-\end_inset
-
- (scalar) inputs and produces
-\begin_inset Formula $n_{o}$
-\end_inset
-
- (scalar) outputs.
- Typically, this core function is implemented in compiled code but a Python
- function can also be wrapped into a universal function using the basic
- method
-\family typewriter
-frompyfunc
-\family default
- in the umath module.
-
-\end_layout
-
-\begin_layout Description
-frompyfunc (func, nin, nout)
-\begin_inset LatexCommand index
-name "frompyfunc"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function returns a new universal function wrapping a Python function
- func with nin inputs and nout outputs.
- The resulting universal function works using Object arrays for both input
- and output.
- The vectorize class makes use of frompyfunc internally.
- You can view the source code using numpy.source(numpy.vectorize).
-\end_layout
-
-\begin_layout Subsection
-Broadcasting
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "broadcasting"
-
-\end_inset
-
-Each universal function takes array inputs and produces array outputs by
- performing the core function element-wise on the inputs.
- The standard broadcasting rules are applied so that inputs without exactly
- the same shapes can still be usefully operated on.
- Broadcasting can be understood by four rules:
-\end_layout
-
-\begin_layout Enumerate
-All input arrays with ndim smaller than the input array of largest ndim
- have 1's pre-pended to their shapes.
-\end_layout
-
-\begin_layout Enumerate
-The size in each dimension of the output shape is the maximum of all the
- input shapes in that dimension.
-\end_layout
-
-\begin_layout Enumerate
-An input can be used in the calculation if it's shape in a particular dimension
- either matches the output shape or has value exactly 1.
-\end_layout
-
-\begin_layout Enumerate
-If an input has a dimension size of 1 in its shape, the first data entry
- in that dimension will be used for all calculations along that dimension.
- In other words, the stepping machinery of the ufunc will simply not step
- along that dimension when otherwise needed (the stride will be 0 for that
- dimension).
-
-\end_layout
-
-\begin_layout Standard
-While perhaps a bit difficult to explain, broadcasting can be quite useful
- and becomes second nature rather quickly.
- Broadcasting is used throughout NumPy to decide how to handle non equally-shape
-d arrays.
-
-\end_layout
-
-\begin_layout Subsection
-Output type determination
-\end_layout
-
-\begin_layout Standard
-The output of the ufunc (and its methods) does not have to be an ndarray.
- All output arrays will be passed to the __array_wrap__ method of any input
- (besides ndarrays, and scalars) that defines it
-\series bold
-and
-\series default
- has the highest __array_priority__ of any other input to the universal
- function.
- The default __array_priority__ of the ndarray is 0.0, and the default __array_pr
-iority__ of a subtype is 1.0.
- Matrices have __array_priority__ equal to 10.0.
-
-\end_layout
-
-\begin_layout Standard
-The ufuncs can also all take output arguments.
- The output will be cast if necessary to the provided output array.
- If a class with an __array__ method is used for the output, results will
- be written to the object returned by __array__.
- Then, if the class also has an __array_wrap__ method, the returned
-\family typewriter
-ndarray
-\family default
- result will be passed to that method just before passing control back to
- the caller.
-
-\end_layout
-
-\begin_layout Subsection
-Use of internal buffers
-\end_layout
-
-\begin_layout Standard
-Internally, buffers are used for misaligned data, swapped data, and data
- that has to be converted from one data type to another.
- The size of the internal buffers is settable on a per-thread basis.
- There can be up to
-\begin_inset Formula $2\left(n_{i}+n_{o}\right)$
-\end_inset
-
- buffers of the specified size created to handle the data from all the inputs
- and outputs of a ufunc.
- The default size of the buffer is 10,000 elements.
- Whenever buffer-based calculation would be needed, but all input arrays
- are smaller than the buffer size, those misbehaved or incorrect typed arrays
- will be copied before the calculation proceeds.
- Adjusting the size of the buffer may therefore alter the speed at which
- ufunc calculations of various sorts are completed.
- A simple interface for setting this variable is accessible using the function
-
-\end_layout
-
-\begin_layout Description
-setbufsize (size)
-\begin_inset LatexCommand index
-name "setbufsize"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the buffer size to the given number of elements in the current thread.
- Return the old buffer size (so that it can be reset later if desired).
-
-\end_layout
-
-\begin_layout Subsection
-Error handling
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "error handling"
-
-\end_inset
-
-Universal functions can trip special floating point status registers in
- your hardware (such as divide-by-zero).
- If available on your platform, these registers will be regularly checked
- during calculation.
- The user can determine what should be done if errors are encountered.
- Error handling is controlled on a per-thread basis.
- Four errors can be individually configured: divide-by-zero, overflow, underflow
-, and invalid.
- The errors can each be set to ignore, warn, raise, or call.
- The easiest way to configure the error mask is using the function
-\end_layout
-
-\begin_layout Description
-seterr (all=None, divide=None, over=None, under=None, invalid=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "seterr"
-
-\end_inset
-
-This will set the current thread so that errors can be handled if desired.
- If one of the errors is set to 'call', then a function must be provided
- using the seterrcall() routine.
- If any of the arguments are None, then that error mask will be unchanged.
- The return value of this function is a dictionary with the old error conditions.
- Thus, you can restore the old condition after you are finished with your
- function by calling seterr(**old).
- If all is set, then all errors will be set to the specified value.
-
-\end_layout
-
-\begin_layout Description
-seterrcall (callable)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "seterrcall"
-
-\end_inset
-
-This sets the function to call when an error is triggered for an error condition
- configured with the
-\begin_inset Quotes eld
-\end_inset
-
-call
-\begin_inset Quotes erd
-\end_inset
-
- handler.
- This function should take two arguments: a string showing the type of error
- that triggered the call, and an integer showing the state of the floating
- point status registers.
- Any return value of the call function will be ignored, but errors can be
- raised by the function.
- Only one error function handler can be specified for all the errors.
- The status argument shows which errors were raised.
- The return value of this routine is the old callable.
- The argument passed in to this function must be any callable object with
- the right signature or None.
-
-\end_layout
-
-\begin_layout Note
-FPE_DIVIDEBYZERO, FPE_OVERFLOW, FPE_UNDERFLOW, and FPE_INVALID, are all
- defined constants in NumPy.
- The status flag returned for a 'call' error handling type shows which errors
- were raised by adding these constants together.
-\end_layout
-
-\begin_layout Subsection
-Optional keyword arguments
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!keyword arguments"
-
-\end_inset
-
-All ufuncs take optional keyword arguments.
- These represent rather advanced usage and will likely not be used by most
- users.
-
-\end_layout
-
-\begin_layout Description
-sig= either a data-type, a tuple of data-types, or a special signature string
- indicating the input and output types of a ufunc.
- This argument allows you to specify a specific signature for a the 1-d
- loop to use in the underlying calculation.
- If the loop specified does not exist for the ufunc, then a TypeError is
- raised.
- Normally a suitable loop is found automatically by comparing the input
- types with what is available and searching for a loop with data-types to
- which all inputs can be cast safely.
- This key-word argument lets you by-pass that search and choose a loop you
- want.
- A list of available signatures is available in the
-\series bold
-types
-\series default
- attribute of the ufunc object.
-
-\end_layout
-
-\begin_layout Description
-extobj= a list of length 1, 2, or 3 specifying the ufunc buffer-size, the
- error mode integer, and the error call-back function.
- Normally, these values are looked-up in a thread-specific dictionary.
- Passing them here bypasses that look-up and uses the low-level specification
- provided for the error-mode.
- This may be useful as an optimization for calculations requiring lots of
- ufuncs on small arrays in a loop.
-
-\end_layout
-
-\begin_layout Section
-Attributes
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!attributes"
-
-\end_inset
-
-There are some informational attributes that universal functions possess.
- None of the attributes can be set.
-
-\end_layout
-
-\begin_layout Description
-__doc__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A docstring for each ufunc.
- The first part of the docstring is dynamically generated from the number
- of outputs, the name, and the number of inputs.
- The second part of the doc string is provided at creation time and stored
- with the ufunc.
-
-\end_layout
-
-\begin_layout Description
-__name__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The name of this ufunc.
-\end_layout
-
-\begin_layout Description
-nin
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of inputs
-\end_layout
-
-\begin_layout Description
-nout
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of outputs
-\end_layout
-
-\begin_layout Description
-nargs
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The total number of inputs + outputs
-\end_layout
-
-\begin_layout Description
-ntypes
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The total number of different types for which this ufunc is defined.
-\end_layout
-
-\begin_layout Description
-types
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A list of length ntypes containing strings showing the types for which
- this ufunc is defined.
- Other types may still be used as inputs (and as output arrays), they will
- just need casting.
- For inputs, standard casting rules will be used to determine which of the
- supplied internal functions that will be used (and therefore the default
- type of the output).
- Results will always be force-cast to any array provided to hold the output.
-
-\end_layout
-
-\begin_layout Description
-identity
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A 1, 0, or None to show the identity for this universal function.
- This identity is used for reduction on zero-sized arrays (arrays with a
- shape that includes a 0).
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Universal function (ufunc) attributes.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="9" columns="2">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Name
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-__doc__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Dynamic docstring.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-__name__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Name of ufunc
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-nin
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Number of input arguments
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-nout
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Number of output arguments
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-nargs
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Total number of arguments
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ntypes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Number of defined inner loops.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-types
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-List showing types for which inner loop is defined.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-identity
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Identity for this ufunc.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Casting Rules
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!casting rules"
-
-\end_inset
-
-At the core of every ufunc is a one-dimensional strided loop that implements
- the actual function for a specific type combination.
- When a ufunc is created, it is given a static list of inner loops and a
- corresponding list of type signatures over which the ufunc operates.
- The ufunc machinery uses this list to determine which inner loop to use
- for a particular case.
- You can inspect the
-\family typewriter
-.types
-\family default
- attribute for a particular ufunc to see which type combinations have a
- defined inner loop and which output type they produce (the character codes
- are used in that output for brevity).
-
-\end_layout
-
-\begin_layout Standard
-Casting must be done on one or more of the inputs whenever the ufunc does
- not have a core loop implementation for the input types provided.
- If an implementation for the input types cannot be found, then the algorithm
- searches for an implementation with a type signature to which all of the
- inputs can be cast
-\begin_inset Quotes eld
-\end_inset
-
-safely.
-\begin_inset Quotes erd
-\end_inset
-
- The first one it finds in its internal list of loops is selected and performed
- with types cast.
- Recall that internal copies during ufuncs (even for casting) are limited
- to the size of an internal buffer which is user settable.
-
-\end_layout
-
-\begin_layout Note
-Universal functions in NumPy are flexible enough to have mixed type signatures.
- Thus, for example, a universal function could be defined that works with
- floating point and integer values.
- See ldexp for an example.
-\end_layout
-
-\begin_layout Standard
-By the above description, the casting rules are essentially implemented
- by the question of when a data type can be cast
-\begin_inset Quotes eld
-\end_inset
-
-safely
-\begin_inset Quotes erd
-\end_inset
-
- to another data type.
- The answer to this question can be determined in Python with a function
- call: can_cast (fromtype, totype).
- Figure shows the results of this call for my 32-bit system on the 21 internally
- supported types.
- You can generate this table for your system with code shown in that Figure.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout MyCode
->>> def print_table(ntypes):
-\newline
-...
- print 'X',
-\newline
-...
- for char in ntypes: print char,
-\newline
-...
- print
-\newline
-...
- for row in ntypes:
-\newline
-...
- print row,
-\newline
-...
- for col in ntypes:
-\newline
-...
- print int(can_cast(row, col)),
-\newline
-...
- print
-\newline
->>> print_table(typecodes['All'])
-\newline
-X ? b h i l q p B H I L Q
- P f d g F D G S U V O
-\newline
-? 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-\newline
-b 0
- 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
-\newline
-h 0 0 1 1 1 1 1 0 0 0 0 0 0
- 1 1 1 1 1 1 1 1 1 1
-\newline
-i 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
-\newline
-l 0 0
- 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
-\newline
-q 0 0 0 0 0 1 0 0 0 0 0 0 0 0
- 1 1 0 1 1 1 1 1 1
-\newline
-p 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
-\newline
-B 0 0 1
- 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-\newline
-H 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
-\newline
-I 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
-\newline
-L 0 0 0 0
- 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
-\newline
-Q 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1
- 0 1 1 1 1 1 1
-\newline
-P 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
-\newline
-f 0 0 0 0 0
- 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
-\newline
-d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
- 1 1 1 1 1 1
-\newline
-g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1
-\newline
-F 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
-\newline
-D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
- 1 1 1 1 1
-\newline
-G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
-\newline
-S 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
-\newline
-U 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 1 1 1
-\newline
-V 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-\newline
-O 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Code segment showing the can cast safely table for a 32-bit system.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-You should note that, while included in the table for completeness, the
- 'S', 'U', and 'V' types cannot be operated on by ufuncs.
- Also, note that on a 64-bit system the integer types may have different
- sizes resulting in a slightly altered table.
-
-\end_layout
-
-\begin_layout Standard
-Mixed scalar-array operations use a different set of casting rules that
- ensure that a scalar cannot upcast an array unless the scalar is of a fundament
-ally different kind of data (
-\emph on
-i.e.
-
-\emph default
- under a different hierachy in the data type hierarchy) then the array.
- This rule enables you to use scalar constants in your code (which as Python
- types are interpreted accordingly in ufuncs) without worrying about whether
- the precision of the scalar constant will cause upcasting on your large
- (small precision) array.
-
-\end_layout
-
-\begin_layout Section
-Methods
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!methods|("
-
-\end_inset
-
-All ufuncs have 4 methods.
- However, these methods only make sense on ufuncs that take two input arguments
- and return one output argument.
- Attempting to call these methods on other ufuncs will cause a
-\family typewriter
-ValueError
-\family default
-.
- The reduce-like methods all take an axis keyword and a dtype keyword, and
- the arrays must all have dimension >= 1.
- The
-\emph on
-axis
-\emph default
- keyword specifies which axis of the array the reduction will take place
- over and may be negative, but must be an integer.
- The
-\emph on
-dtype
-\emph default
- keyword allows you to manage a very common problem that arises when naively
- using <op>.reduce.
- Sometimes you may have an array of a certain data type and wish to add
- up all of its elements, but the result does not fit into the data type
- of the array.
- This commonly happens if you have an array of single-byte integers.
- The dtype keyword allows you to alter the data type that the reduction
- takes place over (and therefore the type of the output).
- Thus, you can ensure that the output is a data type with large-enough precision
- to handle your output.
- The responsibility of altering the reduce type is mostly up to you.
- There is one exception: if no dtype is given for a reduction on the
-\begin_inset Quotes eld
-\end_inset
-
-add
-\begin_inset Quotes erd
-\end_inset
-
- or
-\begin_inset Quotes eld
-\end_inset
-
-multiply
-\begin_inset Quotes erd
-\end_inset
-
- operations, then if the input type is an integer (or boolean) data-type
- and smaller than the size of the int_ data type, it will be internally
- upcast to the int_ (or uint) data type.
-
-\end_layout
-
-\begin_layout Warning
-A reduce-like operation on an array with a data type that has range
-\begin_inset Quotes eld
-\end_inset
-
-too small
-\begin_inset Quotes erd
-\end_inset
-
- to handle the result will silently wrap.
- You should use dtype to increase the data type over which reduction takes
- place.
-\end_layout
-
-\begin_layout Subsection
-Reduce
-\end_layout
-
-\begin_layout Description
-<op>.reduce (array=, axis=0, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "ufunc!methods!reduce"
-
-\end_inset
-
-For each one-dimensional sequence along the
-\emph on
-axis
-\emph default
- dimension of the array, return a single number resulting from recursively
- applying the operation to succesive elements along that dimension.
- If the input array has
-\begin_inset Formula $N$
-\end_inset
-
- dimensions, then the returned array has
-\begin_inset Formula $N-1$
-\end_inset
-
- dimensions.
- This produces the equivalent of the following Python code :
-\end_layout
-
-\begin_layout LyX-Code
->>> indx = [index_exp[:]]*array.ndim
-\newline
->>> indx[axis] = 0; N=array.shape[axis]
-\newline
->>>
- result = array[indx].astype(dtype)
-\newline
->>> for i in range(1,N):
-\newline
-...
- indx[axis] = i
-\newline
-...
- <op>(result, array[indx], result)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Studying the above code can also help you gain an appreciation for how
- to do generic indexing in Python using
-\family typewriter
-index_exp
-\family default
-.
- For example, if <op> is add, then <op>.reduce produces a summation along
- the given axis.
- If <op> is prod, then a repeated multiply is performed.
-\end_layout
-
-\begin_layout Subsection
-Accumulate
-\end_layout
-
-\begin_layout Description
-<op>.accumulate (array=, axis=0, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "ufunc!methods!accumulate"
-
-\end_inset
-
-This method is similar to reduce, except it returns an array of the same
- shape as the input, and keeps intermediate calculations.
- The operation is still performed along the access.
- This method underlies the operations of the cumsum and cumprod methods
- of arrays.
- The following Python code implements an equivalent of the accumulate method.
-\end_layout
-
-\begin_layout LyX-Code
->>> i1 = [index_exp[:]]*array.ndim
-\newline
->>> i2 = [index_exp[:]]*array.ndim
-\newline
->>> i1[axis]
- = 0; N=array.shape[axis]
-\newline
->>> result = array.astype(dtype)
-\newline
->>> for i in range(1,N):
-\newline
-...
- i1[axis] = i
-\newline
-...
- i2[axis] = i-1
-\newline
-...
- <op>(result[i1], array[i1], result[i2])
-\end_layout
-
-\begin_layout Subsection
-Reduceat
-\end_layout
-
-\begin_layout Description
-<op>.reduceat (array=, indices=, axis=0, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "ufunc!methods!reduceat"
-
-\end_inset
-
-This method is a generalization of both reduce and accumulate.
- It offers the ability to reduce along an axis but only between certain
- indices.
- The indices input must be a one dimensional (index) sequence.
- Then, if
-\begin_inset Formula $I_{k}$
-\end_inset
-
- is the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- element of indices, the reduceat method computes <op>.reduce(array[
-\begin_inset Formula $I_{k}$
-\end_inset
-
-:
-\begin_inset Formula $I_{k+1}$
-\end_inset
-
-]).
- This formula assumes
-\begin_inset Formula $I_{k+1}>I_{k}$
-\end_inset
-
-, and also that
-\begin_inset Formula $I_{k+1}$
-\end_inset
-
- is the length of the input array when
-\begin_inset Formula $I_{k}$
-\end_inset
-
- is the last element.
- There is no requirement that the indices be monotonic.
- If
-\begin_inset Formula $I_{k+1}\leq I_{k},$
-\end_inset
-
- then reduceat simply returns array[
-\begin_inset Formula $I_{k}$
-\end_inset
-
-] for that particular element of indices.
- In these formulas, we have assumed that array is one dimensional (or axis
- is 0).
- If the array is
-\begin_inset Formula $N$
-\end_inset
-
--dimensional and axis>0, then the index expression needs axis ':' (full
- slice objects) inserted (i.e.
- array[
-\begin_inset Formula $\underbrace{:,\ldots,:}_{\textrm{axis}},I_{k}:I_{k+1}$
-\end_inset
-
-]).
- The effect is to slice along the axis dimension.
- Equivalent Python code is
-\end_layout
-
-\begin_layout LyX-Code
->>> i1 = [index_exp[:]]*array.ndim
-\newline
->>> i2 = [index_exp[:]]*array.ndim
-\newline
->>> outshape
- = list(array.shape)
-\newline
->>> N = array.shape[axis]
-\newline
->>> outshape[axis] = len(indices)
-\newline
->>>
- result = zeros(outshape, dtype or array.dtype)
-\newline
->>> for k,Ik in enumerate(indices
-):
-\newline
-...
- i1[axis] = k
-\newline
-...
- try:
-\newline
-...
- Ikp1 = indices[k+1]
-\newline
-...
- except IndexError:
-\newline
-...
- Ikp1 = N
-\newline
-...
- if (Ikp1 > Ik):
-\end_layout
-
-\begin_layout LyX-Code
-...
- i2[axis] = index_exp[Ik:Ikp1]
-\newline
-...
- result[i1] = <op>.reduce(array[i2],axis=axis,dtype=dtype)
-\newline
-...
- else:
-\newline
-...
- result[i1] = array[Ik].astype(dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The returned array has as many dimensions as the input array, and is the
- same shape except for the
-\emph on
-axis
-\emph default
- dimension which has shape equal to the length of indices (the number of
- reduce operations that were performed).
- If you ever have a need to compute multiple reductions over portions of
- an array, then (if you can get your mind around what it is doing) reduceat
- may be just what you were looking for.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: Suppose a is a two-dimensional array of shape
-\begin_inset Formula $10\times20$
-\end_inset
-
-.
- Then, res=add.reduce (a, [0,3,1]) returns a
-\begin_inset Formula $3\times20$
-\end_inset
-
- array with res[0,:] = add.reduce(a[:,0:3]), res[1,:] = a[:,3], and res[2,:]
- = add.reduce(a[:,1:]).
-
-\end_layout
-
-\end_deeper
-\begin_layout Subsection
-Outer
-\end_layout
-
-\begin_layout Description
-<op>.outer (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "ufunc!methods!outer"
-
-\end_inset
-
-This method computes an outer operation on <op>.
- It computes <op>(a2, b2) where a2 is 'a' with b.ndim 1's post-pended to
- it's shape and b2 is 'b' with a.ndim 1's pre-pended to its shape (broadcasting
- takes care of this automatically in the code below).
- The return shape has a.ndim + b.ndim dimensions.
- Equivalent Python code is
-\end_layout
-
-\begin_layout LyX-Code
->>> a.shape += (1,)*b.ndim
-\newline
->>> <op>(a,b)
-\newline
->>> a = a.squeeze()
-\end_layout
-
-\begin_layout Standard
-\InsetSpace ~
- Among many other uses, arithmetic tables can be conveniently built using
- outer:
-\begin_inset LatexCommand index
-name "ufunc!methods|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout MyCode
->>> multiply.outer([1,7,9,12],arange(5,12))
-\newline
-array([[ 5, 6, 7, 8,
- 9, 10, 11],
-\newline
- [ 35, 42, 49, 56, 63, 70, 77],
-\newline
- [ 45, 54,
- 63, 72, 81, 90, 99],
-\newline
- [ 60, 72, 84, 96, 108, 120, 132]])
-\end_layout
-
-\begin_layout Section
-Available ufuncs
-\end_layout
-
-\begin_layout Standard
-There are currently more than 60 universal functions defined on one or more
- types, covering a wide variety of operations.
- Some of these ufuncs are called automatically on arrays when the relevant
- infix notation is used (i.e.
- add(a,b) is called internally when a + b is written and a or b is an ndarray).
- Nonetheless, you may still want to use the ufunc call in order to use the
- optional output argument(s) to place the output(s) in an object (or in
- objects) of your choice.
-
-\end_layout
-
-\begin_layout Standard
-Recall that each ufunc operates element-by-element.
- Therefore, each ufunc will be described as if acting on a set of scalar
- inputs to return a set of scalar outputs.
-\end_layout
-
-\begin_layout Note
-The ufunc still returns its output(s) even if you use the optional output
- argument(s).
-
-\end_layout
-
-\begin_layout Subsection
-Math operations
-\end_layout
-
-\begin_layout Description
-add (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "add"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}+x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1+x2
-\family default
- for arrays
-\end_layout
-
-\begin_layout Description
-subtract (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "subtract"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}-x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1-x2
-\family default
- for arrays
-\end_layout
-
-\begin_layout Description
-multiply (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "multiply"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}\cdot x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1*x2
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-divide (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "divide"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}/x_{2}$
-\end_inset
-
- Integer division results in truncation.
- Floating-point does not.
- Called to implement
-\family typewriter
-x1/x2
-\family default
- for arrays (when __future__.division is not active).
-
-\end_layout
-
-\begin_layout Description
-true_divide (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "true\\_divide"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This version of division always returns an inexact number so that integer
- division returns floating point.
- Called with __future__.division is active to implement
-\family typewriter
-x1/x2
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-floor_divide (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "floor\\_divide"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This version of division always results in truncation of an fractional
- part remaining.
- Called to implement
-\family typewriter
-x1//x2
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-negative (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "negative"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=-x$
-\end_inset
-
-.
- Called to implement
-\family typewriter
--x
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-power (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "power"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}^{x_{2}}$
-\end_inset
-
-.
- There is no three-term power ufunc defined.
- This two-term power function is called to implement
-\family typewriter
-pow(x1,x2,<any>)
-\family default
- or
-\family typewriter
-x1**x2
-\family default
- for arrays.
- Note that the third term in
-\family typewriter
-pow
-\family default
- is ignored for array arguments.
-\end_layout
-
-\begin_layout Description
-remainder (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "remainder"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns
-\begin_inset Formula $x-y$
-\end_inset
-
-*floor(
-\begin_inset Formula $x/y$
-\end_inset
-
-).
- Result has the sign of
-\begin_inset Formula $y$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1%x2
-\family default
-.
-\end_layout
-
-\begin_layout Description
-mod (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Same as remainder (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-]).
-
-\end_layout
-
-\begin_layout Description
-fmod (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $x_{1}=kx_{2}+y$
-\end_inset
-
- where
-\begin_inset Formula $k$
-\end_inset
-
- is the largest integer satisfying this equation.
- Computes C-like
-\begin_inset Formula $x_{1}\%x_{2}$
-\end_inset
-
- element-wise.
- This was the behavior of
-\family typewriter
-x1%x2
-\family default
- in old Numeric.
-\end_layout
-
-\begin_layout Description
-absolute (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "absolute"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\left|x\right|.$
-\end_inset
-
- Called to implement
-\family typewriter
-abs(x)
-\family default
- for arrays.
-
-\end_layout
-
-\begin_layout Description
-rint (x, [, y])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Round
-\begin_inset Formula $x$
-\end_inset
-
- to the nearest integer.
- Rounds half-way cases to the nearest even integer.
-\end_layout
-
-\begin_layout Description
-sign (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Sets
-\begin_inset Formula $y$
-\end_inset
-
- according to
-\begin_inset Formula \[
-\textrm{sign}\left(x\right)=\left\{ \begin{array}{cc}
-1 & x:>0,\\
-0 & x=0,\\
--1 & x<0.\end{array}\right.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-conj (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "conj"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-conjugate (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "conjugate"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\overline{x}$
-\end_inset
-
-; in other words, the complex conjugate of
-\begin_inset Formula $x$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-exp (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "exp"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=e^{x}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-log (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "log"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\log\left(x\right)$
-\end_inset
-
-.
- In other words,
-\begin_inset Formula $y$
-\end_inset
-
- is the number so that
-\begin_inset Formula $e^{y}=x$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-expm1 (
-\begin_inset Formula $x$
-\end_inset
-
-, [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=e^{x}-1.$
-\end_inset
-
- Calculated so that it is accurate for small
-\begin_inset Formula $\left|x\right|.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-log1p (
-\begin_inset Formula $x$
-\end_inset
-
-, [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\log\left(1+x\right)$
-\end_inset
-
- but accurate for small
-\begin_inset Formula $\left|x\right|.$
-\end_inset
-
- Returns the number
-\begin_inset Formula $y$
-\end_inset
-
- such that
-\begin_inset Formula $e^{y}-1=x$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-log10 (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "log10"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\log10\left(x\right)$
-\end_inset
-
-.
- In other words,
-\begin_inset Formula $y$
-\end_inset
-
- is the number so that
-\begin_inset Formula $10^{y}=x.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-sqrt (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "sqrt"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\sqrt{x}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-square (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x*x$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-reciprocal (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=1/x$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-ones_like (
-\begin_inset Formula $x$
-\end_inset
-
-, [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=1$
-\end_inset
-
- If an output argument is not given the returned data-type is the same as
- the input data type.
-\end_layout
-
-\begin_layout Tip
-The optional output arguments can be used to help you save memory for large
- calculations.
- If your arrays are large, complicated expressions can take longer than
- absolutely necessary due to the creation and (later) destruction of temporary
- calculation spaces.
- For example, the expression 'G=a*b+c' is equivalent to t1=A*B; G=T1+C;
- del t1; It will be more quickly executed as G=A*B; add(G,C,G) which is
- the same as G=A*B; G+=C.
-\end_layout
-
-\begin_layout Subsection
-Trigonometric functions
-\end_layout
-
-\begin_layout Standard
-All trigonometric functions use radians when an angle is called for.
- The ratio of degrees to radians is
-\begin_inset Formula $180^{\circ}/\pi.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-sin (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "sin"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cos (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "cos"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-tan (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "tan"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The standard trignometric functions.
-
-\begin_inset Formula $y=\sin\left(x\right),$
-\end_inset
-
-
-\begin_inset Formula $y=\cos\left(x\right),$
-\end_inset
-
- and
-\begin_inset Formula $y=\tan\left(x\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arcsin (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arcsin"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arccos (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arccos"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arctan (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arctan"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The inverse trigonometric functions:
-\begin_inset Formula $y=\sin^{-1}\left(x\right),$
-\end_inset
-
-
-\begin_inset Formula $y=\cos^{-1}\left(x\right)$
-\end_inset
-
-,
-\begin_inset Formula $y=\tan^{-1}\left(x\right).$
-\end_inset
-
- These return the value of
-\begin_inset Formula $y$
-\end_inset
-
- (in radians) such that
-\begin_inset Formula $\sin\left(y\right)=x$
-\end_inset
-
- with
-\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$
-\end_inset
-
-;
-\begin_inset Formula $\cos\left(y\right)=x$
-\end_inset
-
- with
-\begin_inset Formula $y\in\left[0,\pi\right]$
-\end_inset
-
-; and
-\begin_inset Formula $\tan\left(y\right)=x$
-\end_inset
-
- with
-\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$
-\end_inset
-
-, respectively.
-
-\end_layout
-
-\begin_layout Description
-arctan2 (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arctan2"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns
-\begin_inset Formula $\tan^{-1}\left(\frac{x_{1}}{x_{2}}\right)$
-\end_inset
-
- but takes into account the sign on
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
- to place the angle in the correct quadrant.
- The angle
-\begin_inset Formula $y$
-\end_inset
-
- is returned in the full range
-\begin_inset Formula $-\pi<y\leq\pi$
-\end_inset
-
-.
- The angle is chosen so that
-\begin_inset Formula $\sin\left(y\right)=\frac{x_{1}}{\sqrt{x_{1}^{2}+x_{2}^{2}}},$
-\end_inset
-
- and
-\begin_inset Formula $\cos\left(y\right)=\frac{x_{2}}{\sqrt{x_{1}^{2}+x_{2}^{2}}}.$
-\end_inset
-
- Particular values are showin in the following table:
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="5" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $x_{1}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $x_{2}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $y=\textrm{arctan2}\left(x_{1},x_{2}\right)$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-1
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-1
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\frac{\pi}{2}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
--1
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\pi$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
--1
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $-\frac{\pi}{2}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-hypot (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "hypot"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns
-\begin_inset Formula $y=\sqrt{x_{1}^{2}+x_{2}^{2}}.$
-\end_inset
-
- Given a complex number in cartesian form, arctan2 and hypot can be used
- to compute phase and magnitude, quickly.
-\end_layout
-
-\begin_layout Description
-sinh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "sinh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes
-\begin_inset Formula $y=\sinh\left(x\right)$
-\end_inset
-
- which is defined as
-\begin_inset Formula $\frac{1}{2}\left(e^{x}-e^{-x}\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cosh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "cosh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes
-\begin_inset Formula $y=\cosh\left(x\right)$
-\end_inset
-
- which is defined as
-\begin_inset Formula $\frac{1}{2}\left(e^{x}+e^{-x}\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-tanh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "tanh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes
-\begin_inset Formula $y=\tanh\left(x\right)$
-\end_inset
-
- which is defined as
-\begin_inset Formula $\left(e^{x}-e^{-x}\right)/\left(e^{x}+e^{-x}\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arcsinh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arcsinh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arccosh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arccosh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arctanh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arctanh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These compute the inverse hyperpolic functions.
-
-\begin_inset Formula $y=\textrm{arc}func\left(x\right)$
-\end_inset
-
- is the (principal) value of
-\begin_inset Formula $y$
-\end_inset
-
- such that
-\begin_inset Formula $func\left(y\right)=x.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Bit-twiddling functions
-\end_layout
-
-\begin_layout Standard
-These function all need integer arguments and they maniuplate the bit-pattern
- of those arguments.
-\end_layout
-
-\begin_layout Description
-bitwise_and (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "bitwise\\_and"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Each bit in
-\begin_inset Formula $y$
-\end_inset
-
- is the result of a bit-wise 'and' operation on the corresponding bits in
-
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1&x2
-\family default
- for arrays.
-
-\end_layout
-
-\begin_layout Description
-bitwise_or (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "bitwise\\_or"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Each bit in
-\begin_inset Formula $y$
-\end_inset
-
- is the result of a bit-wise 'or' operation on the corresponding bits in
-
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1|x2
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-bitwise_xor (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "bitwise\\_xor"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Each bit in
-\begin_inset Formula $y$
-\end_inset
-
- is the result of a bit-wise 'xor' operation on the corresponding bits in
-
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- An xor operation sets the output to 1 if one and only one of the input
- bits is 1.
- Called to implement
-\family typewriter
-x1^x2
-\family default
- for arrays.
- Using the bitwise_xor operation and the optional output argument you can
- swap the values of two integer arrays of equivalent types without using
- temporary arrays.
-\end_layout
-
-\begin_layout MyCode
->>> a=arange(10)
-\newline
->>> b=arange(10,20)
-\newline
->>> bitwise_xor(a,b,a); bitwise_xor(a,b,b);
-\newline
->>
-> bitwise_xor(a,b,a)
-\newline
-array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
-\newline
->>> print
- a; print b
-\newline
-[10 11 12 13 14 15 16 17 18 19]
-\newline
-[0 1 2 3 4 5 6 7 8 9]
-\end_layout
-
-\begin_layout Description
-invert (
-\begin_inset Formula $x$
-\end_inset
-
-, [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "invert"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Each bit in
-\begin_inset Formula $y$
-\end_inset
-
- is the opposite of the corresponding bit in
-\begin_inset Formula $x$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-~x
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-left_shift (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "left\\_shift"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Shifts the bits of
-\begin_inset Formula $x_{1}$
-\end_inset
-
- to the left by
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1<<x2
-\family default
- for arrays.
- Provided there is no overflow, the result is equal to
-\begin_inset Formula $y=x_{1}2^{x_{2}}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-right_shift (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "right\\_shift"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Shifts the bits of
-\begin_inset Formula $x_{1}$
-\end_inset
-
- to the right by
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1>>x2
-\family default
- for arrays.
- Absent overflow, the result is equal to
-\begin_inset Formula $y=x_{1}2^{-x_{2}}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Subsection
-Comparison functions
-\end_layout
-
-\begin_layout Standard
-All of these functions (except maximum, minimum, and sign) return Boolean
- arrays.
-
-\end_layout
-
-\begin_layout Description
-greater (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "greater"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-greater_equal (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "greater\\_equal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-less (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "less"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-less_equal (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "less\\_equal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-not_equal (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "not\\_equal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-equal (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "equal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are called to implement
-\family typewriter
-x1>x2
-\family default
-,
-\family typewriter
-x1>=x2
-\family default
-,
-\family typewriter
-x1<x2
-\family default
-,
-\family typewriter
-x1<=x2
-\family default
-,
-\family typewriter
-x1!=x2
-\family default
- (or
-\family typewriter
-x1<>x2
-\family default
-), and
-\family typewriter
-x1==x2
-\family default
-, respectively, for arrays.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The fact that these functions return Boolean arrays make them very useful
- in combination with advanced array indexing.
- Thus, for example, arr[arr>10] = 10 clips large values to 10.
- Used in conjunction with bitwise operators quite complicated expressions
- are possible.
- For example, arr[~((arr<10)&(arr>5))] = 0 clips all values outside of the
- range
-\begin_inset Formula $\left(5,10\right)$
-\end_inset
-
- to 0.
-
-\end_layout
-
-\begin_layout Warning
-Do not use the Python keywords
-\family typewriter
-and
-\family default
- and
-\family typewriter
-or
-\family default
- to combine logical array expressions.
- These keywords will test the truth value of the entire array (not element-by-el
-ement as you might expect).
- Use the bitwise operators: & and | instead.
-\end_layout
-
-\begin_layout Description
-logical_and (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "logical\\_and"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output is the truth value of
-\begin_inset Formula $x_{1}$
-\end_inset
-
-
-\series bold
-and
-\series default
-
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Numbers equal to 0 are considered False.
- Nonzero numbers are True.
-\end_layout
-
-\begin_layout Description
-logical_or (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "logical\\_or"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
-, is the truth value of
-\begin_inset Formula $x_{1}$
-\end_inset
-
-
-\series bold
-or
-\begin_inset Formula $x_{2}$
-\end_inset
-
-
-\series default
- .
-\end_layout
-
-\begin_layout Description
-logical_xor (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "logical\\_xor"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
-, is the truth value of
-\begin_inset Formula $x_{1}$
-\end_inset
-
-
-\series bold
-xor
-\begin_inset Formula $x_{2}$
-\end_inset
-
-
-\series default
-, which is the same as (
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and not
-\begin_inset Formula $x_{2}$
-\end_inset
-
-) or (not
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-).
-\end_layout
-
-\begin_layout Description
-logical_not (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "logical\\_not"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
- is the truth value of
-\series bold
-not
-\series default
-
-\begin_inset Formula $x$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Warning
-The Bitwise operators (& and |) are the proper way to combine element-by-element
- array comparisons.
- Be sure to understand the operator precedence: (a>2) & (a<5) is the proper
- syntax because a>2 & a<5 will result in an error due to the fact that 2
- & a is evaluated first.
-\end_layout
-
-\begin_layout Description
-maximum (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "maximum"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
-, is the larger of
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout MyCode
->>> maximum([1,0,5,10],[3,2,4,5])
-\newline
-array([ 3, 2, 5, 10])
-\newline
->>> max([1,0,5,10],[3,2,
-4,5])
-\newline
-[3, 2, 4, 5]
-\end_layout
-
-\begin_layout Tip
-The Python function max() will find the maximum over a one-dimensional array,
- but it will do so using a slower sequence interface.
- The reduce method of the maximum ufunc is much faster.
- Also, the max() method will not give answers you might expect for arrays
- with greater than one dimension.
- The reduce method of minimum also allows you to compute a total minimum
- over an array.
-\end_layout
-
-\begin_layout Description
-minimum (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "minimum"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
-, is the smaller of
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout MyCode
->>> minimum([1,0,5,10],[3,2,4,5])
-\newline
-array([1, 0, 4, 5])
-\newline
->>> min([1,0,5,10],[3,2,4,5]
-)
-\newline
-[1, 0, 5, 10]
-\end_layout
-
-\begin_layout Warning
-the behavior of maximum(a,b) is than that of max(a,b).
- As a ufunc, maximum(a,b) performs an element-by-element comparison of a
- and b and chooses each element of the result according to which element
- in the two arrays is larger.
- In contrast, max(a,b) treats the objects a and b as a whole, looks at the
- (total) truth value of a>b and uses it to return either a or b (as a whole).
- A similar difference exists between minimum(a,b) and min(a,b).
-
-\end_layout
-
-\begin_layout Subsection
-Floating functions
-\end_layout
-
-\begin_layout Standard
-Recall that all of these functions work element-by-element over an array,
- returning an array output.
- The description details only a single operation.
-\end_layout
-
-\begin_layout Description
-isreal (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "isreal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- has an imaginary part that is 0.
-\end_layout
-
-\begin_layout Description
-iscomplex (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "iscomplex"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- has an imaginary part that is non-zero.
-
-\end_layout
-
-\begin_layout Description
-isfinite (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "isfinite"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- is a finite floating point number (not a NaN or an Inf).
-
-\end_layout
-
-\begin_layout Description
-isinf (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "isinf"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- is
-\begin_inset Formula $\pm\infty$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-isnan (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "isnan"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- is Not-a-Number.
- This represents invalid results.
- When a NaN is created, the invalid flag is set.
- If you set the error mode of invalid to 'warn', 'raise', or 'call', then
- the appropriate action will be performed on NaN creation.
-
-\end_layout
-
-\begin_layout Description
-signbit (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "signbit"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True where the sign bit of the floating point number is set.
- This should correspond to
-\begin_inset Formula $x>0$
-\end_inset
-
- when
-\begin_inset Formula $x$
-\end_inset
-
- is a finite number.
- When,
-\begin_inset Formula $x$
-\end_inset
-
- is NaN or infinite, then this tests the actual signbit.
-
-\end_layout
-
-\begin_layout Description
-modf (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y_{1}$
-\end_inset
-
-,
-\begin_inset Formula $y_{2}$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "modf"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Breaks up the floating point value
-\begin_inset Formula $x$
-\end_inset
-
- into its fractional,
-\begin_inset Formula $y_{1}$
-\end_inset
-
-, and integral,
-\begin_inset Formula $y_{2}$
-\end_inset
-
-, parts.
- Thus,
-\begin_inset Formula $x=y_{1}+y_{2}$
-\end_inset
-
- with
-\family typewriter
-floor(y2)==y2
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-ldexp (
-\begin_inset Formula $x$
-\end_inset
-
-,
-\begin_inset Formula $n$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "ldexp"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Fast multiply of a floating point number by an integral power of 2:
-\begin_inset Formula $y=2^{n}x.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-frexp (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-,
-\begin_inset Formula $n$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "frexp"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Breaks up the floating point value
-\begin_inset Formula $x$
-\end_inset
-
- into a normalized fraction,
-\begin_inset Formula $y$
-\end_inset
-
- and an exponent,
-\begin_inset Formula $n$
-\end_inset
-
- which corresponds to how the value is represented in the computer.
- The results are such that
-\begin_inset Formula $x=y2^{n}.$
-\end_inset
-
- Effectively, the inverse of ldexp.
-
-\end_layout
-
-\begin_layout Description
-fmod (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "fmod"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the remainder of dividing
-\begin_inset Formula $x_{1}$
-\end_inset
-
- by
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- The result,
-\begin_inset Formula $y$
-\end_inset
-
-, is
-\begin_inset Formula $x_{1}-nx_{2}$
-\end_inset
-
- where
-\begin_inset Formula $n$
-\end_inset
-
- is the quotient (rounded towards zero to an integer) of
-\begin_inset Formula $x_{1}/x_{2}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-floor (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
- ])
-\begin_inset LatexCommand index
-name "floor"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return
-\begin_inset Formula $y=\left\lfloor x\right\rfloor $
-\end_inset
-
- where
-\begin_inset Formula $y$
-\end_inset
-
- is the nearest integer smaller-than or equal to
-\begin_inset Formula $x.$
-\end_inset
-
- Thus,
-\begin_inset Formula $ $
-\end_inset
-
-
-\begin_inset Formula $\left\lfloor x\right\rfloor \leq x<\left\lfloor x\right\rfloor +1$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-ceil (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
- ])
-\begin_inset LatexCommand index
-name "ceil"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return
-\begin_inset Formula $y=\left\lceil x\right\rceil $
-\end_inset
-
- where
-\begin_inset Formula $y$
-\end_inset
-
- is the nearest integer greater-than or equal to
-\begin_inset Formula $x$
-\end_inset
-
-.
- Thus,
-\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1.$
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "ufunc|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Chapter
-Basic Modules
-\end_layout
-
-\begin_layout Quotation
-It is the mark of an educated mind to rest satisfied with the degree of
- precision which the nature of the subject admits and not to seek exactness
- where only an approximation is possible.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Aristotle
-\end_layout
-
-\begin_layout Quotation
-"Oh no.
- We're in the hands of engineers!"
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Malcolm, Ian in 'Jurassic Park'
-\end_layout
-
-\begin_layout Standard
-The NumPy distribution contains some basic functionality equivalent to what
- was available in the Numeric packages previously.
- This section documents the new interfaces.
- These are sub-packages of the NumPy namespace.
- The linalg and fft capabilities are useful but limited.
- You should install the full SciPy package to access more functionality.
- The numpy.dual module contains functions that are defined in both SciPy
- and NumPy.
- If SciPy defines func, then numpy.dual.func will point to the SciPy version,
- otherwise it will point to the NumPy version.
- It must be imported specifically to be used.
- Table
-\begin_inset LatexCommand ref
-reference "cap:Functions-in-numpy.dual"
-
-\end_inset
-
- shows the functions defined in numpy.dual that are in both NumPy and SciPy.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Functions-in-numpy.dual"
-
-\end_inset
-
-Functions in numpy.dual (both in NumPy and SciPy)
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="4" columns="2">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="middle" leftline="true" rightline="true" width="55text%">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Family
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Functions
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Fourier Transforms
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-fft, ifft, fft2, ifft2, fftn, ifftn
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Linear Algebra
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-norm, det, inv, pinv, solve, eig, eigh, eigvals, eigvalsh, lstsq, cholesky,
- svd
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Special Functions
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-i0
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Linear Algebra (
-\family typewriter
-linalg
-\family default
-)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "linalg|("
-
-\end_inset
-
-These functions are in the numpy.linalg sub-package.
-\end_layout
-
-\begin_layout Description
-inv (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (matrix) inverse of the 2-d array A.
- The result, X, is such that dot(A,X) is equal to eye(*A.shape) (to within
- machine precision).
-
-\end_layout
-
-\begin_layout Description
-solve (A,b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Find the solution to the linear equation
-\begin_inset Formula $\mathbf{Ax}=\mathbf{b}$
-\end_inset
-
-, where
-\begin_inset Formula $A$
-\end_inset
-
- is a 2-d array and
-\begin_inset Formula $b$
-\end_inset
-
- is a 1-d or 2-d array.
-
-\end_layout
-
-\begin_layout Description
-tensorsolve (A, b, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Find the solution,
-\begin_inset Formula $x_{kl}$
-\end_inset
-
-, to the multi-index linear equation
-\begin_inset Formula \[
-\sum_{kl}A_{ijkl}x_{kl}=b_{ij}.\]
-
-\end_inset
-
- The axes argument specifies which dimensions of
-\begin_inset Formula $A$
-\end_inset
-
- are summed over.
- If it is None, then the last A.ndim - b.ndim dimensions are summed over.
- The result, therefore, has dimension x.ndim = A.ndim-b.ndim.
-
-\end_layout
-
-\begin_layout Description
-tensorinv (A, ind=2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Find the tensor inverse of
-\begin_inset Formula $A$
-\end_inset
-
-, defined to be the tensor such that tensordot (Ainv, A) is an identity
- operator.
-
-\end_layout
-
-\begin_layout Description
-cholesky (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return,
-\begin_inset Formula $\mathbf{L}$
-\end_inset
-
-, the Cholesky decomposition of
-\begin_inset Formula $\mathbf{A}$
-\end_inset
-
-.
- Cholesky decomposition is applicable to a Hermitian, positive definite
- matrices.
- When
-\begin_inset Formula $\mathbf{A}=\mathbf{A}^{H}$
-\end_inset
-
- and
-\begin_inset Formula $\mathbf{x}^{H}\mathbf{Ax}\geq0$
-\end_inset
-
- for all
-\begin_inset Formula $\mathbf{x}$
-\end_inset
-
-, then decompositions of
-\begin_inset Formula $\mathbf{A}$
-\end_inset
-
- can be found so that
-\begin_inset Formula $\mathbf{A}=\mathbf{LL}^{H}$
-\end_inset
-
-, where
-\begin_inset Formula $\mathbf{L}$
-\end_inset
-
- is lower-triangular.
-
-\end_layout
-
-\begin_layout Description
-eigvals (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return all solutions (
-\begin_inset Formula $\lambda$
-\end_inset
-
-) to the equation
-\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-eig (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return all solutions
-\begin_inset Formula $\left(\lambda,\mathbf{x}\right)$
-\end_inset
-
- to the equation
-\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$
-\end_inset
-
-.
- The first element of the return tuple contains all the eigenvalues.
- The second element of the return tuple contains the eigenvectors in the
- columns (x[:,i] is the ith eigenvector).
-\end_layout
-
-\begin_layout Description
-eigvalsh (U)
-\end_layout
-
-\begin_layout Description
-eigh (U)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are identical to eigvals and eig except they only work
- with Hermitian matrices where
-\begin_inset Formula $\mathbf{U}^{H}=\mathbf{U}$
-\end_inset
-
- (only the lower-triangular part of the array is used).
-\end_layout
-
-\begin_layout Description
-svd (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the singular value decomposition of the 2-d array
-\begin_inset Formula $\mathbf{A}$
-\end_inset
-
-.
- Every
-\begin_inset Formula $m\times n$
-\end_inset
-
- matrix can be decomposed into a pair of unitary matrices,
-\begin_inset Formula $\mathbf{U}=\mathbf{U}^{H}$
-\end_inset
-
- (
-\begin_inset Formula $m\times m$
-\end_inset
-
-) and
-\begin_inset Formula $\mathbf{V}=\mathbf{V}^{H}$
-\end_inset
-
- (
-\begin_inset Formula $n\times n$
-\end_inset
-
-) and an
-\begin_inset Formula $m\times n$
-\end_inset
-
-
-\begin_inset Quotes eld
-\end_inset
-
-diagonal
-\begin_inset Quotes erd
-\end_inset
-
- matrix
-\begin_inset Formula $\boldsymbol{\Sigma}$
-\end_inset
-
-, such that
-\begin_inset Formula $\mathbf{A}=\mathbf{U\boldsymbol{\Sigma}}\mathbf{V}^{H}$
-\end_inset
-
-.
- The only non-zero portion of
-\begin_inset Formula $\boldsymbol{\Sigma}$
-\end_inset
-
- is the upper
-\begin_inset Formula $r\times r$
-\end_inset
-
- block where
-\begin_inset Formula $r=\min\left(m,n\right)$
-\end_inset
-
-.
- The svd function returns three arrays as a tuple: (
-\begin_inset Formula $\mathbf{U}$
-\end_inset
-
-,
-\begin_inset Formula $\boldsymbol{\sigma}$
-\end_inset
-
-,
-\begin_inset Formula $\mathbf{V}^{H}$
-\end_inset
-
-).
- The singular values are returned in the 1-d array
-\begin_inset Formula $\boldsymbol{\sigma}$
-\end_inset
-
-.
- If needed, the array
-\begin_inset Formula $\boldsymbol{\Sigma}$
-\end_inset
-
- can be found (if really needed) using the command diag(
-\begin_inset Formula $\boldsymbol{\sigma}$
-\end_inset
-
-) which creates the
-\begin_inset Formula $r\times r$
-\end_inset
-
- diagonal block and then inserting this into a zeros matrix:
-\end_layout
-
-\begin_layout MyCode
->>> A = random.rand(3,5)
-\newline
->>> from numpy.dual import svd; U,s,Vh = svd(A)
-\newline
->>>
- r=min(*A.shape); Sig = zeros_like(A);
-\newline
->>> Sig[:r,:r] = diag(s); print Sig
-\newline
-[[
- 2.1634 0.
- 0.
- 0.
- 0.
- ]
-\newline
- [ 0.
- 0.7076 0.
- 0.
- 0.
- ]
-\newline
- [ 0.
- 0.
- 0.2098 0.
- 0.
- ]]
-\end_layout
-
-\begin_layout Description
-pinv (A, rcond=
-\begin_inset Formula $10^{-10}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the generalized, pseudo inverse, of
-\begin_inset Formula $A$
-\end_inset
-
-.
- For invertible matrices, this is the same as the inverse.
-
-\end_layout
-
-\begin_layout Description
-det (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the determinant of the array.
- The determinant of an array is the product of its singular values.
-
-\end_layout
-
-\begin_layout Description
-lstsq (A, b, rcond=
-\begin_inset Formula $10^{-10}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return (x, resids, rank, s) where x minimizes resids=
-\begin_inset Formula $\left\Vert \mathbf{Ax}-\mathbf{b}\right\Vert _{2}$
-\end_inset
-
-.
- The output rank is the rank of A and s is the singular values of a in descendin
-g order.
- Singular values less than s[0]*rcond are treated as 0.
- If the rank of A is less than the number of columns of A or greater than
- the number of rows, resids will be returned as an empty array.
-\begin_inset LatexCommand index
-name "linalg|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Discrete Fourier Transforms (
-\family typewriter
-fft
-\family default
-)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "fft|("
-
-\end_inset
-
-All of the algorithms here are most efficient if the length of the data
- is a power of 2 (or decomposable into low prime factors).
-
-\end_layout
-
-\begin_layout Description
-fft (x, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return, X, the N-point Discrete Fourier Transform (DFT) of x along the
- given axis using a fast algorithm.
- If N is larger than x.shape[axis], then x will be zero-padded.
- If N is smaller than x.shape[axis], then the first N items will be used.
- The result is computed for
-\begin_inset Formula $k=0\ldots n-1$
-\end_inset
-
- from the formula:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-X\left[k\right]=\sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi km}{n}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Tip
-The fft returns values for
-\begin_inset Formula $k=0\ldots N-1$
-\end_inset
-
-.
- Because
-\begin_inset Formula $X\left[N-k\right]=X[-k]$
-\end_inset
-
- in the FFT formula, larger values of k correspond also to negative frequencies.
-\end_layout
-
-\begin_layout Description
-ifft (X, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the inverse of the fft so that (ifft(fft(a)) == a within numerical
- precision.
- The order of frequencies must be the same as returned by fft.
- The result is computed (using a fast algorithm) for
-\begin_inset Formula $m=0\ldots n-1$
-\end_inset
-
- from the formula:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-x\left[m\right]=\frac{1}{n}\sum_{k=0}^{n-1}X\left[k\right]\exp\left(j\frac{2\pi km}{n}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Sometimes having the
-\begin_inset Quotes eld
-\end_inset
-
-negative
-\begin_inset Quotes erd
-\end_inset
-
- frequencies at the end of the output returned by fft can be a little confusing.
- There are two ways to deal with this confusion.
- In my opinion, the most useful way is to get a collection of DFT sample
- frequencies and use them to keep track of where each frequency is.
- The function
-\family typewriter
-fftfreq
-\family default
- provides these sample frequencies.
- Making an x-y plot, where the sample frequencies are along the
-\begin_inset Quotes eld
-\end_inset
-
-x
-\begin_inset Quotes erd
-\end_inset
-
--axis and the result of the DFT is along the
-\begin_inset Quotes eld
-\end_inset
-
-y
-\begin_inset Quotes erd
-\end_inset
-
--axis provides a useful visualization with the zero-frequency at the center
- of the plot.
- The advantage of this approach is that your data is still in proper order
- for using the
-\family typewriter
-ifft
-\family default
- function.
- Some people, however, prefer to simply swap one-half of the output with
- the other.
- This is exactly what the function
-\family typewriter
-fftshift
-\family default
- does.
- Of course, now the data is not in the proper order for the ifft function,
- but to each his own.
-
-\end_layout
-
-\begin_layout Standard
-The reason that the
-\begin_inset Quotes eld
-\end_inset
-
-negative
-\begin_inset Quotes erd
-\end_inset
-
- frequencies are in the upper part of the return signal was given in the
- description of the DFT.
- The reason is that the output of the DFT is just one period of a periodic
- function (with period
-\begin_inset Formula $n$
-\end_inset
-
-).
- The traditional output of the FFT algorithm is to provide the portion of
- the function from from
-\begin_inset Formula $k=0$
-\end_inset
-
- to
-\begin_inset Formula $k=n-1$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-fftshift (x, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Shift zero-frequency component to the center of the spectrum.
- This function swaps half-spaces for all axes listed (defaults to all of
- them).
-
-\end_layout
-
-\begin_layout Description
-ifftshift (x, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Reverse the effect of the fftshift operation.
- Thus, it takes zero-centered data and shifts it into the correct order
- for the ifft operation.
-\end_layout
-
-\begin_layout Description
-fftfreq (n, d=1.0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Provide the DFT sample frequencies.
- The returned float array contains the frequency bins in the order returned
- from the fft function.
- If given,
-\begin_inset Formula $d$
-\end_inset
-
- represents the sample-spacing.
- The units on the frequency bins are cycles / unit.
- For example, the following example computes the output frequencies (in
- Hz) of the fft of
-\begin_inset Formula $256$
-\end_inset
-
- samples of a voice signal sampled at 20000Hz.
-\end_layout
-
-\begin_layout MyCode
->>> from numpy.fft import fftfreq; f=fftfreq(256,d=1./20e3)
-\newline
->>> print f[0],
- f[1], f[2], f[128]
-\newline
-0.0 78.125 156.25 -10000.0
-\end_layout
-
-\begin_layout Description
-fft2 (x, s=None, axes=(-2,-1))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the two-dimensional fft of the array x for each 2-d array formed
- by axes.
- The 2-d fft is computed as
-\begin_inset Formula \[
-X\left[k_{0},k_{1}\right]=\sum_{m_{0}=0}^{s[0]-1}\sum_{m_{1}=0}^{s[1]-1}x\left[m_{0},m_{1}\right]\exp\left(-j\frac{2\pi k_{0}m_{0}}{s[0]}\right)\exp\left[-j\frac{2\pi k_{1}m_{1}}{s\left[1\right]}\right]\]
-
-\end_inset
-
- and can be realized by repeated application of the 1-d fft (first over
- the axes[0] and then over axes[1]).
- In other-words fft2(x,s,axes) is equivalent to fft(fft(x, s[0], axes[0]),
- s[1], axes[1]).
- The 2-d fft is returned for
-\begin_inset Formula $k_{0}=0\ldots s[0]-1$
-\end_inset
-
- and
-\begin_inset Formula $k_{1}=0\ldots s[1]-1.$
-\end_inset
-
- Symmetry (
-\begin_inset Formula $X\left[s[0]-k_{0},s[1]-k_{1}\right]=X[-k_{0},-k_{1}]$
-\end_inset
-
-) ensures that higher values of
-\begin_inset Formula $k_{i}$
-\end_inset
-
- correspond to negative frequencies.
-
-\end_layout
-
-\begin_layout Description
-ifft2 (X, s=None, axes=(-2,-1))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the inverse of the two-dimension fft.
- Thus, ifft2(fft2(x)) == x to within numerical precision.
- Note that the
-\begin_inset Quotes eld
-\end_inset
-
-negative frequencies
-\begin_inset Quotes erd
-\end_inset
-
- must be
-\end_layout
-
-\begin_layout Description
-fftn (x, s=None, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional fft of x.
- If s is not given, then if axes is given, then
-\begin_inset Formula $N$
-\end_inset
-
-=len(axes), otherwise
-\begin_inset Formula $N$
-\end_inset
-
-=x.ndim.
- If s is given, then
-\begin_inset Formula $N$
-\end_inset
-
-=len(s).
- Results are computed using a similar formula as for the 1- and 2-d FFT
- with
-\begin_inset Formula $N$
-\end_inset
-
- summations.
-
-\end_layout
-
-\begin_layout Description
-ifftn (X, s=None, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional inverse fft of
-\begin_inset Formula $X$
-\end_inset
-
-.
- Note that ifftn(fftn(x)) == x to within machine precision.
-
-\end_layout
-
-\begin_layout Standard
-The Discrete Fourier transform returns complex-valued data (even for real-valued
- input).
- If the data was originally real-valued, then much of the output of the
- full DFT is redundant.
- Notice that if
-\begin_inset Formula $x\left[m\right]$
-\end_inset
-
- is real, then
-\begin_inset Formula \begin{eqnarray*}
-X\left[n-k\right] & = & \sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi\left(n-k\right)m}{n}\right)\\
- & = & \left[\sum_{m=0}^{n-1}x\left[m\right]\exp\left(-j\frac{2\pi km}{n}\right)\right]^{*}\\
- & = & X^{*}\left[k\right],\end{eqnarray*}
-
-\end_inset
-
-where
-\begin_inset Formula $a^{*}$
-\end_inset
-
- denotes the complex-conjugate of
-\begin_inset Formula $a$
-\end_inset
-
-.
- So, the upper half of the fft output (the negative frequencies) is determined
- exactly by the lower half of the output when the input is purely real.
- This kind of symmetry is called Hermitian symmetry.
- The real-valued Fourier transforms described next take advantage of Hermitian
- symmetry to compute only the unique outputs more quickly.
-
-\end_layout
-
-\begin_layout Standard
-The symmetry in higher dimensions is always about the origin.
- If
-\begin_inset Formula $N$
-\end_inset
-
- is the number of dimensions, then:
-\begin_inset Formula \[
-X[n_{1}-k_{1},n_{2}-k_{2},\ldots n_{N}-k_{N}]=X^{*}\left[k_{1},k_{2},\ldots,k_{N}\right].\]
-
-\end_inset
-
-Thus, the data-savings remains constant at about 1/2 for higher dimensions
- as well.
-
-\end_layout
-
-\begin_layout Description
-rfft (x, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the first n//2+1 points of the
-\begin_inset Formula $n$
-\end_inset
-
--point discrete Fourier transform of the real valued data along the given
- axis.
- The returned array will be just the first half of the
-\family typewriter
-fft
-\family default
-, corresponding to positive frequencies: rfft(x) == fft(x)[:n//2+1]
-\end_layout
-
-\begin_layout Description
-irfft (X, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the inverse
-\begin_inset Formula $n$
-\end_inset
-
--point discrete Fourier transform along the given axis using the first n//2+1
- points.
- To within numerical precision, irfft(rfft(x))==x.
-
-\end_layout
-
-\begin_layout Description
-rfft2 (x, s=None, axes=(-2, -1))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute only the first half-plane of the two-dimensional discrete Fourier
- transform corresponding to unique values.
- s[0] and
-\begin_inset Formula $s[1]$
-\end_inset
-
--point DFTs will be computed along axes[0] and axes[1] dimensions, respectively.
- Requires a real array.
- If
-\begin_inset Formula $s$
-\end_inset
-
- is None it defaults to the shape of
-\begin_inset Formula $x.$
-\end_inset
-
- The real fft will be computed along the last axis specified in axes while
- a full fft will be computed in the other dimension.
-\end_layout
-
-\begin_layout Description
-irfft2 (X, s=None, axes=(-2, -1))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the inverse of the 2-d DFT using only the first quadrant.
- Returns a real array such that to within numerical precision irfft2(rfft2(x))==
-x.
-\end_layout
-
-\begin_layout Description
-rfftn (x, s=None, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute only the unique part of the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional DFT from a real-valued array.
- If
-\begin_inset Formula $s$
-\end_inset
-
- is None it defaults to the shape of x.
- If axes is not given it defaults to all the axes (-n,
-\begin_inset Formula $\ldots$
-\end_inset
-
-, -1).
- The length of axes provides the dimensionality of the DFT.
- The unique part of the real
-\begin_inset Formula $N$
-\end_inset
-
--dimensional DFT is obtained by slicing the full fft along the last axis
- specified and taking n//2+1 slices.
- rfftn(x) == fft(x)[sliceobj] where sliceobj[axes[-1]] = slice(None,s[-1]//2+1,N
-one).
-\end_layout
-
-\begin_layout Description
-irfftn (X, s=None, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the inverse DFT from the unique portions of the N-dimensional DFT
- provided by
-\family typewriter
-rfftn
-\family default
-.
-\end_layout
-
-\begin_layout Standard
-Occasionally, the situation may arise where you have complex-valued data
- with Hermitian symmetry (or real-valued symmetric data).
- This ensures that the Fourier transform will be real.
- The two functions below can calculate it without wasting extra space for
- the zero-valued imaginary entries of the Discrete Fourier transform, or
- the entire signal.
-\end_layout
-
-\begin_layout Description
-hfft (x, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Calculate the
-\begin_inset Formula $n$
-\end_inset
-
--point real-valued Fourier transform from (the first half of Hermitian-symmetric
- data, x.
-
-\end_layout
-
-\begin_layout Description
-ihfft (X, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return (the first half-of) Hermitian-symmetric data from the real-valued
- Fourier transform, X.
-\begin_inset LatexCommand index
-name "fft|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Random Numbers (
-\family typewriter
-random
-\family default
-)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "random|("
-
-\end_inset
-
-The random number capabilities surpass those that were available in Numeric.
- The random number facilities were generously contributed by Robert Kern,
- who has been a dedicated and patient help to many mailing list questioners.
- Robert built the random package using Pyrex to build on top of his own
- code as well as that of randomkit by Jean-Sebastien Roy as well as code
- by Ivan Frohne.
- The fundamental random number generator is the Mersenne Twister based on
- code written by Makoto Matsumoto and Takuji Nishimura (and modified for
- Python by Raymond Hettinger).
- Random numbers from discrete and continuous distributions are available,
- as well as some useful random-number-related utilities.
- Many of the random number generators are based on algorithms published
- by Luc Devroye in
-\begin_inset Quotes eld
-\end_inset
-
-Non-Uniform Random Variate Generation
-\begin_inset Quotes erd
-\end_inset
-
- available electronically at
-\begin_inset LatexCommand htmlurl
-target "http://cgm.cs.mcgill.ca/~luc/rnbookindex.html"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Each of the discrete and continuous random number generators take a size
- keyword.
- If this is None (default), then the size is determined from the additional
- inputs (using ufunc-like broadcasting).
- If no additional inputs are needed, or if these additional inputs are scalars,
- then a single number is generated from the selected distribution.
- If size is an integer, then a 1-d array of that size is generated filled
- with random numbers from the selected distribution.
- Finally, if size is a tuple, then an array of that shape is returned filled
- with random numbers.
-
-\end_layout
-
-\begin_layout Standard
-Many distributions take additional inputs as parameters.
- These additional inputs must be broadcastable to each other (and to the
- size parameter if it is not None).
- The broadcasting behavior of the additional inputs is ufunc-like.
-
-\end_layout
-
-\begin_layout Subsection
-Discrete Distributions
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "random!discrete|("
-
-\end_inset
-
-Discrete random numbers take on only a countable number of values (typically
- integers).
- Each distribution has associated with it a probability mass function (pmf),
-
-\begin_inset Formula $p_{m}\left(k;\cdot\right),$
-\end_inset
-
- that is defined as the probability that the returned random number is
-\begin_inset Formula $k$
-\end_inset
-
-.
- The arguments after
-\begin_inset Formula $k$
-\end_inset
-
- represent possible parameters to the distribution.
- Thus, let
-\begin_inset Formula $X\left(\cdot\right)$
-\end_inset
-
- represent the random number generator for a particular distribution.
- Then,
-\begin_inset Formula \[
-p_{m}\left(k;\cdot\right)=\textrm{Probability}\left\{ X\left(\cdot\right)=k\right\} .\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-It will be useful to define the discrete indicator function,
-\begin_inset Formula $I_{S}\left(k\right),$
-\end_inset
-
- where
-\begin_inset Formula $S$
-\end_inset
-
- is a set of integers (often represented by an interval).
-
-\begin_inset Formula $I_{S}\left(k\right)=1$
-\end_inset
-
- if
-\begin_inset Formula $k\in S$
-\end_inset
-
-, otherwise
-\begin_inset Formula $I_{S}\left(k\right)=0.$
-\end_inset
-
- This convenient notation isolates the relevance of a particular functional
- form to a certain range.
- Also, the formulas below make use of the following definition:
-\begin_inset Formula \[
-\left(\begin{array}{c}
-n\\
-k\end{array}\right)=\frac{n!}{k!\left(n-k\right)!}\]
-
-\end_inset
-
- where
-\begin_inset Formula $k!=k\cdot\left(k-1\right)\cdot\cdots\cdot2\cdot1.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-binomial (n, p, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This random number models the number of successes in
-\begin_inset Formula $n$
-\end_inset
-
- independent trials of a random experiment where the probability of success
- in each experiment is
-\begin_inset Formula $p$
-\end_inset
-
-.
-
-\begin_inset Formula \[
-p_{m}\left(k\right)=\left(\begin{array}{c}
-n\\
-k\end{array}\right)p^{k}\left(1-p\right)^{n-k}I_{\left[0,n\right]}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-geometric (p, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This random number models the number of (independent) attempts required
- to obtain a success where the probability of success on each attempt is
-
-\begin_inset Formula $p$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-p_{m}\left(k;p\right)=\left(1-p\right)^{k-1}p\, I_{\left[1,\infty\right)}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-hypergeometric (ngood, nbad, nsample, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Imagine a probability theorists favorite urn filled with
-\begin_inset Formula $n_{g}$
-\end_inset
-
-
-\begin_inset Quotes eld
-\end_inset
-
-good
-\begin_inset Quotes erd
-\end_inset
-
- objects and
-\begin_inset Formula $n_{b}$
-\end_inset
-
-
-\begin_inset Quotes eld
-\end_inset
-
-bad
-\begin_inset Quotes erd
-\end_inset
-
- objects.
- In other words there are two types of objects in a jar.
- The hypergeometric random number models how many
-\begin_inset Quotes eld
-\end_inset
-
-good
-\begin_inset Quotes erd
-\end_inset
-
- objects will be present when
-\begin_inset Formula $N$
-\end_inset
-
- items are taken out of the urn without replacement.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-p\left(k;n_{g},n_{b},N\right)=\frac{\left(\begin{array}{c}
-n_{g}\\
-k\end{array}\right)\left(\begin{array}{c}
-n_{b}\\
-N-k\end{array}\right)}{\left(\begin{array}{c}
-n_{g}+n_{b}\\
-N\end{array}\right)}I_{\left[N-n_{b},\textrm{min}\left(n,N\right)\right]}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-logseries (p, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A random number whose pmf with terms proportional to the Taylor series
- expansion of
-\begin_inset Formula $\log\left(1-p\right)$
-\end_inset
-
-.
- It has been used in biological studies to model the species abundance distribut
-ion.
-
-\begin_inset Formula \[
-p_{m}\left(k;p\right)=-\frac{p^{k}}{k\log\left(1-p\right)}\, I_{\left[1,\infty\right)}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-multinomial (n, pvals, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This generator produces random vectors of length
-\begin_inset Formula $N$
-\end_inset
-
- where
-\begin_inset Formula $N=\textrm{len}\left(pvals\right)$
-\end_inset
-
-.
- The shape of the returned array is always the shape indicated by size +
- (
-\begin_inset Formula $N,$
-\end_inset
-
-).
- The multinomial distribution is a generalization of the binomial distribution.
- This time,
-\begin_inset Formula $n$
-\end_inset
-
- trials of an experiment are independently repeated but each trial results
- in
-\begin_inset Formula $N$
-\end_inset
-
- possible integers
-\begin_inset Formula $k_{1},k_{2},\ldots,k_{N}$
-\end_inset
-
- with
-\begin_inset Formula $\sum_{i=1}^{N}k_{i}=n.$
-\end_inset
-
-
-\begin_inset Formula \begin{eqnarray*}
-p_{m}\left(k_{1},k_{2},\ldots,k_{N};\cdot\right) & = & \textrm{Probability}\left\{ X\left(\cdot\right)=\left[k_{1},k_{2},\cdots,k_{N}\right]\right\} \\
- & = & \frac{n!}{k_{1}!k_{2}!\cdots k_{N}!}p_{1}^{k_{1}}p_{2}^{k_{2}}\cdots p_{N}^{k_{N}}\end{eqnarray*}
-
-\end_inset
-
-where
-\begin_inset Formula $pvals=[p_{1},p_{2},\ldots,p_{N}].$
-\end_inset
-
- It must be true that
-\begin_inset Formula $\sum_{i=1}^{N}p_{i}=1.$
-\end_inset
-
- Therefore, as long as
-\begin_inset Formula $\sum_{i=1}^{N-1}p_{i}\leq1,$
-\end_inset
-
- the last entry in
-\begin_inset Formula $pvals$
-\end_inset
-
- is computed as
-\begin_inset Formula $1-\sum_{i=1}^{N-1}p_{i}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-negative_binomial (n, p, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Models the number of extra independent trials (beyond
-\begin_inset Formula $n$
-\end_inset
-
-) required to accumulate a total of
-\begin_inset Formula $n$
-\end_inset
-
- successes where the probability of success on each trial is
-\begin_inset Formula $p.$
-\end_inset
-
- Equivalently, this random number models the number of failures encountered
- while accumulating
-\begin_inset Formula $n$
-\end_inset
-
- successes during independent trials of the experiment that succeeds with
- probability,
-\begin_inset Formula $p$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-p_{m}\left(k;n,p\right)=\left(\begin{array}{c}
-k+n-1\\
-n-1\end{array}\right)p^{n}\left(1-p\right)^{k}\, I_{\left[0,\infty\right)}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-poisson (lam=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This random number counts the number of successes in
-\begin_inset Formula $n$
-\end_inset
-
- independent experiments (where the probability of success in each experiment
- is
-\begin_inset Formula $p$
-\end_inset
-
-) in the limit as
-\begin_inset Formula $n\rightarrow\infty$
-\end_inset
-
- and
-\begin_inset Formula $p\rightarrow0$
-\end_inset
-
- gets very small such that
-\begin_inset Formula $\lambda=np\geq0$
-\end_inset
-
- is a constant.
- It can be used, for example, to model how many typographical errors are
- on each page of a book.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-p\left(k;\lambda\right)=e^{-\lambda}\frac{\lambda^{k}}{k!}\, I_{\left[0,\infty\right)}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-zipf (a, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The probability mass function of this random number (also called the zeta
- distribution) is
-\begin_inset Formula \[
-p_{m}\left(k;a\right)=\frac{1}{\zeta\left(a\right)k^{a}}\, I_{\left[1,\infty\right)}\left(k\right),\]
-
-\end_inset
-
-where
-\begin_inset Formula \[
-\zeta\left(a\right)=\sum_{n=1}^{\infty}\frac{1}{n^{a}}\]
-
-\end_inset
-
-is the Riemann zeta function.
- Zipf distributions have been shown to characterize use of words in a natural
- language (like English), the popularity of library books, and even the
- use of the web.
- The Zipf distribution describes collections that have a few items whose
- probability of selection is very high, a medium number of items whose probabili
-ty of selection is medium, and a huge number of items whose probability
- of selection is very low.
-\begin_inset LatexCommand index
-name "random!discrete|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Continuous Distributions
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "random!continuous|("
-
-\end_inset
-
-Continuous random numbers can take on an uncountable number of values.
- Therefore, the value returned by a continuous distribution is denoted
-\begin_inset Formula $x$
-\end_inset
-
-.
- Because there is an uncountable number of possibilities for the random
- number
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-A computer actually always generates a random number from a discrete distributio
-n because there are only a finite set of numbers that can be represented
- by a computer.
- However, for continuous random number generators, the resulting random
- numbers usually approximate the continuous distribution well enough to
- ignore the subtlety.
-\end_layout
-
-\end_inset
-
-, a continuous distribution is modeled by a probability density function,
-
-\begin_inset Formula $f\left(x;\cdot\right).$
-\end_inset
-
- To obtain the probability that the random number generated by
-\begin_inset Formula $X\left(\cdot\right)$
-\end_inset
-
- is in a certain interval, we integrate this density function:
-\begin_inset Formula \[
-\int_{-\infty}^{b}f\left(x\right)dx=\textrm{Probability}\left\{ X\left(\cdot\right)\leq b\right\} .\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-To obtain a probability, we have to integrate
-\begin_inset Formula $f\left(x\right)$
-\end_inset
-
- which is why it is called a density function.
- Most continuous distributions are defined by their probability density
- functions (pdf).
- Some have basic origins, a few are derived from other distributions, and
- some are used mainly for modelling unknown distributions.
-
-\end_layout
-
-\begin_layout Standard
-Some of the parameters of the distributions are labeled as location (
-\emph on
-loc
-\emph default
-) and
-\emph on
-scale
-\emph default
- parameters.
- These parameters are not shown in the equation for the pdf.
- because they affect the distribution in a known way.
- This is due to the fact that if
-\begin_inset Formula $X$
-\end_inset
-
- is a number drawn from a distribution with pdf
-\begin_inset Formula $f_{X}\left(x\right),$
-\end_inset
-
- then
-\begin_inset Formula $Y=Sx+L$
-\end_inset
-
- is a number drawn from a distribution with pdf
-\begin_inset Formula \[
-f_{Y}\left(y\right)=\frac{1}{S}f_{X}\left(\frac{y-L}{S}\right).\]
-
-\end_inset
-
- Thus, from the standard from provided, the pdf of the actual random numbers
- generated by fixing the location and scale parameters can be quickly found.
-\end_layout
-
-\begin_layout Standard
-In this section, the indicator function
-\begin_inset Formula $I_{A}\left(x\right)$
-\end_inset
-
- will be used where
-\begin_inset Formula $A$
-\end_inset
-
- is a set defined over all the real numbers.
- For clarity,
-\begin_inset Formula \[
-I_{A}\left(x\right)=\left\{ \begin{array}{cc}
-1 & x\in A,\\
-0 & x\not\in A.\end{array}\right.\]
-
-\end_inset
-
- Also, the following functions are used in the definitions:
-\begin_inset Formula \begin{eqnarray*}
-\Gamma\left(x\right) & = & \int_{0}^{\infty}t^{x-1}e^{-t}dt=\left(x-1\right)\Gamma\left(x-1\right),\\
-B\left(a,b\right) & = & \frac{\Gamma\left(a\right)\Gamma\left(b\right)}{\Gamma\left(a+b\right)}.\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-beta (
-\begin_inset Formula $a$
-\end_inset
-
-,
-\begin_inset Formula $b$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;a,b\right)=\frac{1}{B\left(a,b\right)}x^{a-1}\left(1-x\right)^{b-1}I_{\left(0,1\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-chisquare (
-\begin_inset Formula $\nu$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If
-\begin_inset Formula $Z_{1},\ldots,Z_{\nu}$
-\end_inset
-
- are random numbers from standard normal distributions, then
-\begin_inset Formula $W=\sum_{k=1}^{\nu}Z_{k}^{2}$
-\end_inset
-
- is a random number from the chi-square
-\begin_inset Formula $\left(\chi^{2}\right)$
-\end_inset
-
- distribution with
-\begin_inset Formula $\nu$
-\end_inset
-
- degrees of freedom.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;\nu\right)=\frac{1}{2\Gamma\left(\frac{\nu}{2}\right)}\left(\frac{x}{2}\right)^{\nu/2-1}e^{-x/2}I_{\left[0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-dirichlet (
-\begin_inset Formula $\boldsymbol{\alpha},$
-\end_inset
-
- size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A vector of random numbers which are drawn from a multivariate Dirichlet
- distribution.
- The length of the parameter vector,
-\begin_inset Formula $\boldsymbol{\alpha},$
-\end_inset
-
- is the length,
-\begin_inset Formula $N$
-\end_inset
-
-, of the random vector.
- The joint pdf is:
-\end_layout
-
-\begin_layout Description
-\begin_inset Formula \[
-f\left(\mathbf{x},\boldsymbol{\alpha}\right)=\frac{\prod_{i=1}^{N}\Gamma\left(\alpha_{i}\right)}{\Gamma\left(\sum_{i=1}^{N}\alpha_{i}\right)}\prod_{i=1}^{N}x_{i}^{\alpha_{i}-1}.\]
-
-\end_inset
-
-
-\series medium
-
-\end_layout
-
-\begin_layout Description
-exponential (scale=1.0, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=e^{-x}I_{\left[0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-f (
-\begin_inset Formula $\nu_{1}$
-\end_inset
-
-,
-\begin_inset Formula $\nu_{2}$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The distribution of
-\begin_inset Formula $\frac{X_{1}/\nu_{1}}{X_{2}/\nu_{2}}$
-\end_inset
-
- where
-\begin_inset Formula $X_{i}$
-\end_inset
-
- is chi-squared with
-\begin_inset Formula $\nu_{i}$
-\end_inset
-
- degrees of freedom.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;\nu_{1},\nu_{2}\right)=\frac{\nu_{2}^{\nu_{2}/2}\nu_{1}^{\nu_{1}/2}x^{\nu_{1}/2-1}}{\left(\nu_{2}+\nu_{1}x\right)^{\left(\nu_{1}+\nu_{2}\right)/2}B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)}I_{\left[0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-gamma (
-\begin_inset Formula $a$
-\end_inset
-
-, scale=1.0, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;a\right)=\frac{1}{\Gamma\left(a\right)}x^{a-1}e^{-x}I_{\left[0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-gumbel (loc=0.0, scale=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A right-skewed extreme value distribution.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=\exp\left[-x-e^{-x}\right].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-laplace (loc=0.0, scale=1.0, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=\frac{1}{2}e^{-\left|x\right|}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-lognormal (
-\begin_inset Formula $\mu$
-\end_inset
-
-=0.0,
-\begin_inset Formula $\sigma$
-\end_inset
-
-=1.0, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;\mu,\sigma\right)=\frac{1}{\sigma x\sqrt{2\pi}}\exp\left[-\frac{1}{2}\left(\frac{\log x-\mu}{\sigma}\right)^{2}\right]I_{\left[0,\infty\right)}\left(x\right),\]
-
-\end_inset
-
-The parameters,
-\begin_inset Formula $\mu$
-\end_inset
-
- and
-\begin_inset Formula $\sigma$
-\end_inset
-
- are not the mean and variance of this distribution, but the parameters
- of the underlying normal distribution.
- Random numbers from this distribution are generated as
-\begin_inset Formula $e^{\sigma Z+\mu}$
-\end_inset
-
- where
-\begin_inset Formula $Z$
-\end_inset
-
- is a standard normal random number.
-
-\end_layout
-
-\begin_layout Description
-logistic (loc=0.0, scale=1.0, size=None)
-\begin_inset Formula \[
-f\left(x\right)=\frac{e^{-x}}{\left[1+e^{-x}\right]^{2}}I_{\left[0,\infty\right)}\left(x\right)\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-multivariate_normal (
-\begin_inset Formula $\mathbf{\boldsymbol{\mu}}$
-\end_inset
-
-,
-\begin_inset Formula $\mathbf{C}$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a vector of random numbers which are jointly drawn from a multivariate
- normal distribution.
- The last-dimension of the output array contains the sample vector, which
- is of length
-\begin_inset Formula $N=\textrm{len}\left(mean\right).$
-\end_inset
-
- The covariance matrix must be
-\begin_inset Formula $N\times N$
-\end_inset
-
-.
- If
-\begin_inset Formula $\boldsymbol{\mu}\equiv mean$
-\end_inset
-
- and
-\begin_inset Formula $\mathbf{C}=cov$
-\end_inset
-
-, then the joint-pdf representing the returned random vector(s) is
-\begin_inset Formula \[
-f\left(\mathbf{x}\right)=\frac{1}{\sqrt{\left(2\pi\right)^{N}\left|\mathbf{C}\right|}}\exp\left[-\frac{1}{2}\left(\mathbf{x}-\boldsymbol{\mu}\right)^{T}\mathbf{C}^{-1}\left(\mathbf{x}-\boldsymbol{\mu}\right)\right].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-noncentral_chisquare (
-\begin_inset Formula $\nu$
-\end_inset
-
-,
-\begin_inset Formula $\lambda$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is the distribution of
-\begin_inset Formula $\sum_{i=1}^{\nu}\left(Z_{i}+\delta_{i}\right)^{2}$
-\end_inset
-
- where
-\begin_inset Formula $Z_{i}$
-\end_inset
-
- are independent standard normal random numbers and
-\begin_inset Formula $\delta_{i}$
-\end_inset
-
- are constants.
- It is a a generalized Rayleigh-Rice distribution:
-\end_layout
-
-\begin_deeper
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;\nu,\lambda\right)=e^{-\left(\lambda+x\right)/2}\frac{1}{2}\left(\frac{x}{\lambda}\right)^{\left(\nu-2\right)/4}I_{\left(\nu-2\right)/2}\left(\sqrt{\lambda x}\right)I_{\left(0,\infty\right)}\left(x\right),\]
-
-\end_inset
-
- where
-\begin_inset Formula $I_{\nu}\left(z\right)$
-\end_inset
-
- (a real-number in the subscript, not an interval) is the modified Bessel
- Function of the first kind.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-noncentral_f (
-\begin_inset Formula $\nu_{1}$
-\end_inset
-
-,
-\begin_inset Formula $\nu_{2}$
-\end_inset
-
-,
-\begin_inset Formula $\lambda$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The pdf of this distribution is
-\begin_inset Formula \begin{eqnarray*}
-f\left(x;\nu_{1},\nu_{2},\lambda\right) & = & \exp\left[\frac{\lambda}{2}+\frac{\lambda v_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right]\nu_{1}^{\nu_{1}/2}\nu_{2}^{\nu_{2}/2}x^{\nu_{1}/2-1}\\
- & & \times\left(\nu_{2}+\nu_{1}x\right)^{-\left(\nu_{1}+\nu_{2}\right)/2}\\
- & & \times\frac{\Gamma\left(\frac{\nu_{1}}{2}\right)\Gamma\left(1+\frac{\nu_{2}}{2}\right)L_{n_{2}/2}^{n_{1}/2-1}\left(-\frac{\lambda\nu_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right)}{B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)\Gamma\left(\frac{\nu_{1}+\nu_{2}}{2}\right)}.\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-normal (loc=0.0, scale=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The normal, or Gaussian, distribution is the limiting distribution of independe
-nt samples from any sufficiently well-behaved distributions (this is the
- content of the celebrated central limit theorem).
- The normal distribution is also the distribution of maximum entropy when
- the mean and variance alone are fixed.
- These two facts account for its name as well as the wide variety of situations
- that can be usefully modelled using the normal distribution.
- Because it is so widely used, the full pdf with the location
-\begin_inset Formula $\left(\mu\right)$
-\end_inset
-
- and scale
-\begin_inset Formula $\left(\sigma\right)$
-\end_inset
-
- parameters is provided:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left[-\frac{\left(x-\mu\right)^{2}}{2\sigma^{2}}\right].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-pareto (
-\begin_inset Formula $a$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;a\right)=\frac{a}{x^{a+1}}I_{\left[1,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-power (
-\begin_inset Formula $a$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A special case of the beta distribution with
-\begin_inset Formula $b=1.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;a\right)=ax^{a-1}I_{\left[0,1\right]}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-rand (
-\begin_inset Formula $d_{1}$
-\end_inset
-
-,
-\begin_inset Formula $d_{2}$
-\end_inset
-
-,
-\begin_inset Formula $\ldots$
-\end_inset
-
-,
-\begin_inset Formula $d_{n}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A convenient interface to obtain an array of shape
-\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$
-\end_inset
-
- of uniform random numbers in the interval
-\begin_inset Formula $\left[0,1\right).$
-\end_inset
-
- Notice the different convention for passing in the shape (as separate arguments
- instead of a tuple).
- The standard convention is used in the function numpy.random.random(shape)
- for which this function is merely a convenient short-hand.
- If you have a tuple named shape, then rand(*shape) will work correctly.
-\end_layout
-
-\begin_layout Description
-randint (low, high=None, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equally probably random integers in the range
-\begin_inset Formula $low\leq x<high$
-\end_inset
-
-.
- If
-\begin_inset Formula $high$
-\end_inset
-
- is None, then the range is
-\begin_inset Formula $0\leq x<low$
-\end_inset
-
-.
- Similar to random_integers, but check the difference on the bounds.
-\end_layout
-
-\begin_layout Description
-randn (
-\begin_inset Formula $d_{1}$
-\end_inset
-
-,
-\begin_inset Formula $d_{2}$
-\end_inset
-
-,
-\begin_inset Formula $\ldots$
-\end_inset
-
-,
-\begin_inset Formula $d_{n}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A convenient interface to obtain an array of shape
-\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$
-\end_inset
-
- of standard normal
-\begin_inset Formula $\left(\mu=0,\,\sigma=1\right)$
-\end_inset
-
- random numbers.
- Notice the different convention for passing in the shape (as separate arguments
- intead of a tuple).
- The standard convention is used in the function numpy.random.standard_normal(shap
-e) for which this function is merely a convenient short-hand.
- If you have a tuple named shape, then randn(*shape) will work correctly.
-\end_layout
-
-\begin_layout Description
-random_integers (low, high=None, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equally probably random integers in the range
-\begin_inset Formula $low\leq x\leq high$
-\end_inset
-
-.
- If high is None, then the range is
-\begin_inset Formula $1\leq x\leq low$
-\end_inset
-
-.
- Similar to randint, but check the difference on the bounds.
-\end_layout
-
-\begin_layout Description
-rayleigh (scale=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Rayleigh-distributed random numbers can be obtained as
-\begin_inset Formula $X=\sqrt{Z_{1}^{2}+Z_{2}^{2}}$
-\end_inset
-
- where
-\begin_inset Formula $Z_{i}$
-\end_inset
-
- are independent standard normal random numbers.
- The scale parameter is also the mode of the distribution (the value of
-
-\begin_inset Formula $X$
-\end_inset
-
- with highest probability).
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=xe^{-x^{2}/2}I_{[0,\infty)}\left(x\right)\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-standard_cauchy (size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A Cauchy distribution is a heavy-tailed distribution with no variance.
- It's distribution is that of the ratio of two standard normal distributions
-
-\begin_inset Formula $Z_{1}/Z_{2}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=\frac{1}{\pi\left(1+x^{2}\right)}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-standard_exponential (size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A standard exponetial random number with scale=1.0.
- The pdf was given under the description of
-\family typewriter
-random.exponential
-\family default
-.
-\end_layout
-
-\begin_layout Description
-standard_gamma (
-\begin_inset Formula $a$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A standard gamma random number with scale=1.0.
- The pdf was given under the description of
-\family typewriter
-random.gamma
-\family default
-.
-\end_layout
-
-\begin_layout Description
-standard_normal (size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A zero-mean, unit-variance, normally distributed random number often denoted
-
-\begin_inset Formula $Z.$
-\end_inset
-
-
-\begin_inset Formula \[
-f\left(x\right)=\frac{1}{\sqrt{2\pi}}e^{-x^{2}/2}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-standard_t (
-\begin_inset Formula $\nu$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Often called Student's t distribution, this random number distribution
- arises in the problem of estimating the mean of normally distributed samples
- when the sample-size is small.
- The first parameter,
-\begin_inset Formula $\nu$
-\end_inset
-
-, is the number of degrees of freedom of the distribution.
-
-\begin_inset Formula \[
-f\left(x;\nu\right)\frac{\Gamma\left(\frac{\nu+1}{2}\right)}{\sqrt{\pi\nu}\Gamma\left(\frac{\nu}{2}\right)\left[1+\frac{x^{2}}{\nu}\right]^{\frac{\nu+1}{2}}}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-triangular (left, mode, right, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns random numbers according to a triangularly-shaped density that
- starts at left, peaks at mode, and ends at right.
-\end_layout
-
-\begin_layout Description
-uniform (low=0.0, high=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns random numbers that are equally probable over the range
-\begin_inset Formula $\left[low,\, high\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-vonmises (
-\begin_inset Formula $\mu$
-\end_inset
-
-,
-\begin_inset Formula $\kappa$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A continuous distribution that is well suited for circular attributes such
- as angles, time of day, day of the year, etc.
- The mean direction is
-\begin_inset Formula $\mu$
-\end_inset
-
- and concentration (or dispersion) parameter is
-\begin_inset Formula $\kappa.$
-\end_inset
-
- For small
-\begin_inset Formula $\kappa$
-\end_inset
-
- the distribution tends towards a uniform distribution over
-\begin_inset Formula $\left[-\pi,\pi\right].$
-\end_inset
-
- For large
-\begin_inset Formula $\kappa$
-\end_inset
-
-, the distribution tends towards a normal distribution with mean
-\begin_inset Formula $\mu$
-\end_inset
-
- and variance
-\begin_inset Formula $1/\kappa.$
-\end_inset
-
-
-\begin_inset Formula \[
-f\left(x\right)=\frac{e^{\kappa\cos\left(x-\mu\right)}}{2\pi I_{0}\left(\kappa\right)}I_{\left[-\pi,\pi\right]}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-wald (
-\begin_inset Formula $\mu$
-\end_inset
-
-,
-\begin_inset Formula $\lambda$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This distribution is also called the inverse Gaussian distribution (and
- the Wald distribution considered as a special case when
-\begin_inset Formula $\mu=\lambda$
-\end_inset
-
-).
- It can be generated by noticing that if
-\begin_inset Formula $X$
-\end_inset
-
- is a wald random number then
-\begin_inset Formula $\frac{\lambda\left(X-\mu\right)^{2}}{\mu^{2}X}$
-\end_inset
-
- is the square of a standard normal random number (i.e.
- it is chi-square with one degree of freedom).
- The pdf is
-\begin_inset Formula \[
-f\left(x\right)=\sqrt{\frac{\lambda}{2\pi x^{3}}}e^{-\frac{\lambda\left(x-\mu\right)^{2}}{2\mu^{2}x}}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-weibull (
-\begin_inset Formula $a$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- An extreme-value distribution:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;c\right)=ax^{a-1}\exp\left(-x^{a}\right)I_{\left(0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Miscellaneous utilities
-\end_layout
-
-\begin_layout Description
-bytes (length)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a string of random bytes of the provided length.
-\end_layout
-
-\begin_layout Description
-get_state ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an object that holds the state of the random number generator (allows
- you to restart simulations where you left off).
-\end_layout
-
-\begin_layout Description
-set_state (state)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the state of the random number generator.
- The argument should be the returned object of a previous get_state command.
-\end_layout
-
-\begin_layout Description
-shuffle (sequence)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Randomly permute the items of any sequence.
- If sequence is an array, then it must be 1-d.
-\end_layout
-
-\begin_layout Description
-permutation (n)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a permutation of the integers from 0 to n-1.
-
-\begin_inset LatexCommand index
-name "random!continuous|)"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "random|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Matrix-specific functions (matlib)
-\end_layout
-
-\begin_layout Standard
-This module contains functions that are geared specifically toward matrix
- objects.
- In particular it includes the functions
-\series bold
-empty
-\series default
-,
-\series bold
-ones
-\series default
-,
-\series bold
-zeros
-\series default
-,
-\series bold
-identity
-\series default
-,
-\series bold
-eye
-\series default
-,
-\series bold
-rand
-\series default
-, and
-\series bold
-randn
-\series default
- each of which returns a matrix object by default instead of an ndarray
- object.
-\end_layout
-
-\begin_layout Section
-Ctypes utiltity functions (ctypeslib)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ctypeslib"
-
-\end_inset
-
-This module contains utility functions that make it easier to work with
- the ctypes module.
-
-\end_layout
-
-\begin_layout Description
-load_library (name, path)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Load a shared library named
-\begin_inset Quotes eld
-\end_inset
-
-name
-\begin_inset Quotes erd
-\end_inset
-
- (use the full name including any prefix but excluding the extension) located
- in the directory indicated by path and return a ctypes library object whose
- attributes are the functions in the library.
- If ctypes is not available, this function will raise an ImportError.
- If there is an error loading the library, ctypes raises an OSError.
- The extension is appended to the library name (on a platform-dependent
- basis) unless the name includes the
-\begin_inset Quotes eld
-\end_inset
-
-.
-\begin_inset Quotes erd
-\end_inset
-
- character in which case name is assumed to be the
-\begin_inset Quotes eld
-\end_inset
-
-full-name
-\begin_inset Quotes erd
-\end_inset
-
- of the library.
-
-\end_layout
-
-\begin_layout Description
-ndpointer (dtype=None, ndim=None, shape=None, flags=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a class object that can be used in the argtypes list of a ctypes
- function that will do basic type, number-of-dimensions, shape, and flags
- checking on input array objects.
- Setting an argtypes entry with the result of this function allows passing
- arrays directly to ctypes-wrapped functions.
- The returned class object will contain a from_param method as required
- by ctypes.
- This from_param method takes the array object, does data-type, number-of-dimens
-ions, shape, and flags checking on the object and if all tests pass returns
- an object that ctypes can use as the data area of the array.
- Checking is not performed for any entries which are None in this class
- creation function.
-
-\end_layout
-
-\begin_layout Chapter
-Testing and Packaging
-\end_layout
-
-\begin_layout Quotation
-Research is what I'm doing when I don't know what I'm doing.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Werner von Braun
-\end_layout
-
-\begin_layout Quotation
-The most likely way for the world to be destroyed, most experts agree, is
- by accident.
- That's where we come in; we're computer professionals.
- We cause accidents.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Nathaniel Borenstein
-\end_layout
-
-\begin_layout Standard
-There are two additional sub-packages distributed with NumPy that simplify
- the process of distributing and testing code based on NumPy.
- The numpy.distutils sub-package extends the standard distutils package to
- handle Fortran code along with providing support for the auto-generated
- code in NumPy.
- The numpy.testing sub-package defines a few functions and classes for standardiz
-ing unit-tests in NumPy.
- These facilities can be used in your own packages that build on top of
- NumPy.
-
-\end_layout
-
-\begin_layout Section
-Testing
-\end_layout
-
-\begin_layout Standard
-In this sub-package are two classes and some useful utilities for writing
- unit-tests
-\end_layout
-
-\begin_layout Description
-NumpyTestCase a subclass of unittest.TestCase which adds a measure method
- that can determine the elasped time to execute a code string and enhances
- the __call__ method
-\end_layout
-
-\begin_layout Description
-NumpyTest the test manager for NumPy which was extracted originally from
- the SciPy code base.
- This test manager makes it easy to add unit-tests to a package simply by
- creating a tests sub-directory with files named test_<module>.py.
- These test files should then define sub-classes of NumpyTestCase (or unittest.Te
-stCase) named
-\begin_inset Quotes eld
-\end_inset
-
-test*
-\begin_inset Quotes erd
-\end_inset
-
-.
- These classes should then define functions named
-\begin_inset Quotes eld
-\end_inset
-
-test*
-\begin_inset Quotes erd
-\end_inset
-
- or
-\begin_inset Quotes eld
-\end_inset
-
-bench*
-\begin_inset Quotes erd
-\end_inset
-
- or
-\begin_inset Quotes eld
-\end_inset
-
-check*
-\begin_inset Quotes erd
-\end_inset
-
- that contain the actual unit-tests.
- The first keyword argument should specify the level above which this test
- should be run.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- To run the tests excecute NumpyTest(<package>).test(level=1, verbosity=1)
- which will run all tests above the given level using the given verbosity.
- Here <package> can be either a string or a previously imported module.
- You can get the level and verbosity arguments from sys.argv using NumpyTest(<pac
-kage>).run() with -v or --verbosity and -l or --level as command-line arguments.
-\end_layout
-
-\begin_layout Description
-set_local_path (reldir='', level=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- prepend local directory (+ reldir) to sys.path.
- The caller is responsible for removing this path using restore_path().
-\end_layout
-
-\begin_layout Description
-set_package_path (level=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- prepend package directory to sys.path.
- This should be called from a test_file.py that satisfies the tree structure:
- <somepath>/<somedir>/test_file.py.
- The, the first existing path name from the list <somepath>/build/lib.<platform>-
-<version>, <somepath>/..
- is pre-pended to sys.path.
- The caller is responsible for removing this path using restore_path().
-\end_layout
-
-\begin_layout Description
-restore_path ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Remove the first entry from sys.path.
-\end_layout
-
-\begin_layout Description
-assert_equal (actual, desired, err_msg='', verbose=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an assertion error if the two items are not equal.
- Automatically calls assert_array_equal if actual or desired is an ndarray.
-
-\end_layout
-
-\begin_layout Description
-assert_almost_equal (actual, desired, decimal=7, err_msg='', verbose=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an assertion error if the two items are not equal within decimal
- places.
- Automatically calls assert_array_almost_equal if actual or desired is an
- ndarray.
-\end_layout
-
-\begin_layout Description
-assert_approx_equal (actual, desired, significant=7, err_msg='', verbose=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an assertion error if the two items are not equal to within the given
- significant digits.
- Does not work on arrays.
-
-\end_layout
-
-\begin_layout Description
-assert_array_equal (x, y, err_msg='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an error if the two arrays x and y are not equal at every element.
-
-\end_layout
-
-\begin_layout Description
-assert_array_less (x, y, err_msg='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an error if the two arrays x and y have different shapes or if x
- is not less than y at every element.
-
-\end_layout
-
-\begin_layout Description
-assert_array_almost_equal (x, y, decimal=6, err_msg='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an error if x and y are not equal to decimal places at every element.
-\end_layout
-
-\begin_layout Description
-jiffies ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a number of 1/100ths of a second that this process has been scheduled
- in user mode.
- Implemented using time.time() unless on Linux where the special /proc directory
- filesystem is used.
-
-\end_layout
-
-\begin_layout Description
-memusage ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the virtual memory size in bytes of the running python.
- If the operation is not supported on the platform, then return None.
- This works only on linux for now.
-\end_layout
-
-\begin_layout Description
-rand (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of random numbers with the given shape using only the standard
- library random number generator.
-\end_layout
-
-\begin_layout Description
-runstring (astr, dict)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Run the given string in the dictionary provided.
- Functional form for (exec astr in dict) that is useful for the failUnlessRaises
- method of unittest.TestCase class.
-\end_layout
-
-\begin_layout Section
-NumPy Distutils
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "distutils"
-
-\end_inset
-
-NumPy provides enhanced distutils functionality to make it easier to build
- and install sub-packages, auto-generate code, and extension modules that
- use Fortran-compiled libraries.
- To use features of numpy distutils use the setup command from numpy.distutils.cor
-e.
- A useful Configuration class is also provided in numpy.distutils.misc_util
- that can make it easier to construct keyword arguments to pass to the setup
- function (by passing the dictionary obtained from the todict() method of
- the class).
- More information is available in the NumPy Distutils Users Guide in <site-packa
-ges>/numpy/doc/DISTUTILS.txt.
-\end_layout
-
-\begin_layout Subsection
-misc_util
-\end_layout
-
-\begin_layout Description
-Configuration (package_name=None, parent_name=None, top_path=None, package_path=
-None, **attrs)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "Configuration"
-
-\end_inset
-
-Construct a configuration instance for the given package name.
- If parent_name is not None, then construct the package as a sub-package
- of the parent_name package.
- If top_path and package_path are None then they are assumed equal to the
- path of the file this instance was created in.
- The setup.py files in the numpy distribution are good examples of how to
- use the Configuration instance.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-self.todict ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a dictionary compatible with the keyword arguments of distutils
- setup function.
- Thus, this method may be used as setup(**config.todict()).
-\end_layout
-
-\begin_layout Description
-self.get_distribution ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the distutils distribution object for self.
-\end_layout
-
-\begin_layout Description
-self.get_subpackage (subpackage_name, subpackage_path=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a Configuration instance for the sub-package given.
- If subpackage_path is None then the path is assumed to be the local path
- plus the subpackage_name.
- If a setup.py file is not found in the subpackage_path, then a default configura
-tion is used.
-\end_layout
-
-\begin_layout Description
-self.add_subpackage (subpackage_name, subpackage_path=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add a sub-package to the current Configuration instance.
- This is useful in a setup.py script for adding sub-packages to a package.
- The sub-package is contained in subpackage_path / subpackage_name and this
- directory may contain a setup.py script or else a default setup (suitable
- for Python-code-only subpackages) is assumed.
- If the subpackage_path is None, then it is assumed to be located in the
- local path / subpackage_name.
-
-\end_layout
-
-\begin_layout Description
-self.add_data_files (*files)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add files to the list of data_files to be included with the package.
- The form of each element of the files sequence is very flexible allowing
- many combinations of where to get the files from the package and where
- they should ultimately be installed on the system.
- The most basic usage is for an element of the files argument sequence to
- be a simple filename.
- This will cause that file from the local path to be installed to the installati
-on path of the self.name package (package path).
- The file argument can also be a relative path in which case the entire
- relative path will be installed into the package directory.
- Finally, the file can be an absolute path name in which case the file will
- be found at the absolute path name but installed to the package path.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This basic behavior can be augmented by passing a 2-tuple in as the file
- argument.
- The first element of the tuple should specify the relative path (under
- the package install directory) where the remaining sequence of files should
- be installed to (it has nothing to do with the file-names in the source
- distribution).
- The second element of the tuple is the sequence of files that should be
- installed.
- The files in this sequence can be filenames, relative paths, or absolute
- paths.
- For absolute paths the file will be installed in the top-level package
- installation directory (regardless of the first argument).
- Filenames and relative path names will be installed in the package install
- directory under the path name given as the first element of the tuple.
- An example may clarify:
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-self.add_data_files('foo.dat',
-\newline
-('fun', ['gun.dat', 'nun/pun.dat', '/tmp/sun.dat']),
-
-\newline
-'bar/cat.dat',
-\newline
-'/full/path/to/can.dat')
-\end_layout
-
-\begin_layout Standard
-will install these data files to:
-\end_layout
-
-\begin_layout LyX-Code
-<package install directory>/
-\newline
- foo.dat
-\newline
- fun/
-\newline
- gun.dat
-\newline
- nun/
-\newline
- pun.dat
-\newline
- sun.dat
-\newline
-
- bar/
-\newline
- car.dat
-\newline
- can.dat
-\end_layout
-
-\begin_layout Standard
-where <package install directory> is the package (or sub-package) directory
- such as '/usr/lib/python2.4/site-packages/mypackage' ('C:
-\backslash
-
-\backslash
-Python2.4
-\backslash
-
-\backslash
-Lib
-\backslash
-
-\backslash
-site-packages
-\backslash
-
-\backslash
-mypackage') or '/usr/lib/python2.4/site-packages/mypackage/mysubpackage'
- ('C:
-\backslash
-
-\backslash
-Python2.4
-\backslash
-
-\backslash
-Lib
-\backslash
-
-\backslash
-site-packages
-\backslash
-
-\backslash
-mypackage
-\backslash
-
-\backslash
-mysubpackage').
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-\InsetSpace ~
- An additional feature is that the path to a data-file can actually be a
- function that takes no arguments and returns the actual path(s) to the
- data-files.
- This is useful when the data files are generated while building the package.
-
-\end_layout
-
-\begin_layout Description
-self.add_data_dir (data_path)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Recursively add files under data_path to the list of data_files to be installed
- (and distributed).
- The data_path can be either a relative path-name, or an absolute path-name,
- or a 2-tuple where the first argument shows where in the install directory
- the data directory should be installed to.
- For example suppose the source directory contains fun/foo.dat and fun/bar/car.dat
-\end_layout
-
-\begin_layout LyX-Code
-self.add_data_dir('fun')
-\newline
-self.add_data_dir(('sun', 'fun'))
-\newline
-self.add_data_dir(('gun',
- '/full/path/to/fun'))
-\end_layout
-
-\begin_layout Standard
-\InsetSpace ~
- Will install data-files to the locations
-\end_layout
-
-\begin_layout LyX-Code
-<package install directory>/
-\newline
- fun/
-\newline
- foo.dat
-\newline
- bar/
-\newline
- car.dat
-\newline
- sun/
-\newline
-
- foo.dat
-\newline
- bar/
-\newline
- car.dat
-\newline
- gun/
-\newline
- foo.dat
-\newline
- car.dat
-\end_layout
-
-\begin_layout Description
-self.add_include_dirs (*paths)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the given sequence of paths to the beginning of the include_dirs list.
- This list will be visible to all extension modules of the current package.
-\end_layout
-
-\begin_layout Description
-self.add_headers (*files)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the given sequence of files to the beginning of the headers list.
- By default, headers will be installed under <python-include>/<self.name.replace('.
-','/')>/ directory.
- If an item of files is a tuple, then its first argument specifies the actual
- installation location relative to the <python-include> path.
-\end_layout
-
-\begin_layout Description
-self.add_extension (name, sources, **kw)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create and add an Extension instance to the ext_modules list.
- The first argument defines the name of the extension module that will be
- installed under the self.name package.
- The second argument is a list of sources.
- This method also takes the following optional keyword arguments that are
- passed on to the Extension constructor: include_dirs, define_macros, undef_macr
-os, library_dirs, libraries, runtime_library_dirs, extra_objects, swig_opts,
- depends, language, f2py_options, module_dirs, and extra_info.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The self.paths(...) method is applied to all lists that may contain paths.
- The extra_info is a dictionary or a list of dictionaries whose content
- will be appended to the keyword arguments.
- The depends list contains paths to files or directories that the sources
- of the extension module depend on.
- If any path in the depends list is newer than the extension module, then
- the module will be rebuilt.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The list of sources may contain functions (called source generators) which
- must take an extension instance and a build directory as inputs and return
- a source file or list of source files or None.
- If None is returned then no sources are generated.
- If the Extension instance has no sources after processing all source generators
-, then no extension module is built.
-
-\end_layout
-
-\begin_layout Description
-self.add_library (name, sources, **build_info)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add a library to the list of libraries.
- Allowed keyword arguments are depends, macros, include_dirs, extra_compiler_arg
-s, and f2py_options.
- The name is the name of the library to be built and sources is a list of
- sources (or source generating functions) to add to the library.
-\end_layout
-
-\begin_layout Description
-self.add_scripts (*files)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the sequence of files to the beginning of the scripts list.
- Scripts will be installed under the <prefix>/bin/ directory.
-
-\end_layout
-
-\begin_layout Description
-self.paths (*paths)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Applies glob.glob(...) to each path in the sequence (if needed) and pre-pends
- the local_path if needed.
- Because this is called on all source lists, this allows wildcard characters
- to be specified in lists of sources for extension modules and libraries
- and scripts and allows path-names be relative to the source directory.
-\end_layout
-
-\begin_layout Description
-self.get_config_cmd ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the numpy.distutils config command instance.
-\end_layout
-
-\begin_layout Description
-self.get_build_temp_dir ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a path to a temporary directory where temporary files should be
- placed.
-\end_layout
-
-\begin_layout Description
-self.have_f77c ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if a Fortran 77 compiler is available (because a simple Fortran 77
- code was able to be compiled successfully).
-\end_layout
-
-\begin_layout Description
-self.have_f90c ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if a Fortran 90 compiler is available (because a simple Fortran 90
- code was able to be compiled successfully)
-\end_layout
-
-\begin_layout Description
-self.get_version ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a version string of the current package or None if the version informati
-on could not be detected.
- This method scans files named __version__.py, <packagename>_version.py, version.py
-, and __svn_version__.py for string variables version, __version__, and <packagen
-ame>_version, until a version number is found.
-\end_layout
-
-\begin_layout Description
-self.make_svn_version_py ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Appends a data function to the data_files list that will generate __svn_version
-__.py file to the current package directory.
- This file will be removed from the source directory when Python exits (so
- that it can be re-generated next time the package is built).
- This is intended for working with source directories that are in an SVN
- repository.
-
-\end_layout
-
-\begin_layout Description
-self.make_config_py ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Generate a package __config__.py file containing system information used
- during the building of the package.
- This file is installed to the package installation directory.
-\end_layout
-
-\begin_layout Description
-self.get_info (*names)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return information (from system_info.get_info) for all of the names in the
- argument list in a single dictionary.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-get_numpy_include_dirs ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the include directory where the numpy/arrayobject.h and numpy/ufuncobject.
-h files are found.
- This should be added to the include_dirs of any extension module built
- using NumPy.
- If numpy.distutils is used to build the extension, then this directory is
- added automatically.
-
-\end_layout
-
-\begin_layout Description
-get_numarray_include_dirs ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the include directory where the numpy/libnumarray.h file is found.
- This should be added to the include_dirs of any extension module that relies
- on the Numarray-compatible C-API.
-
-\end_layout
-
-\begin_layout Description
-dict_append (d, **kwds)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the keyword arguments given as entries in the dictionary provided as
- the first argument.
- If the entry is already present, then assume it is a list and extend the
- list with the keyword value.
-\end_layout
-
-\begin_layout Description
-appendpath (prefix, path)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Platform-independent intelligence for appending path to prefix.
- It replaces '/' in the prefix and the path with the correct path-separator
- on the platform ad returns a full path name that will be valid for the
- platform.
-
-\end_layout
-
-\begin_layout Description
-allpath (name)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert a '/' separated pathname to one using the platform's path separator.
-\end_layout
-
-\begin_layout Description
-dot_join (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Converts a sequence of string arguments to a string joined by '.' (removing
- any empty strings).
-
-\end_layout
-
-\begin_layout Description
-generate_config_py (extension, build_dir)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A suitable function that can be used in a source list.
- This constructs a python file that contains system_info information used
- during building the package.
- Generally easier to use a Configuration instance and the config.make_config_py()
- method.
-\end_layout
-
-\begin_layout Description
-get_cmd (cmdname, _cache={})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an instance of the distutils command object named cmdname if the
- setup distribution instance has been initialized.
- Caches the result in _cache[cmdname] and gets it from there if present.
-\end_layout
-
-\begin_layout Description
-terminal_has_colors ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Tries to determine if the stdout terminal can be written to using ANSI
- colors.
- Returns 1 if it can be determined that ANSI colors are acceptable or 0
- if not.
-
-\end_layout
-
-\begin_layout Description
-red_text (s)
-\end_layout
-
-\begin_layout Description
-green_text (s)
-\end_layout
-
-\begin_layout Description
-yellow_text (s)
-\end_layout
-
-\begin_layout Description
-blue_text (s)
-\end_layout
-
-\begin_layout Description
-cyan_text (s)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If terminal_has_colors() is true, then these commands return a string with
- the necessary codes prepended to display the given string argument in the
- specified color on an ANSI terminal.
- If terminal_has_colors() is false, then these functions simply return the
- input argument.
-
-\end_layout
-
-\begin_layout Description
-cyg2win32 (path)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert a cygwin path beginning with /cygdrive to a standard win32 path
- name.
-
-\end_layout
-
-\begin_layout Description
-all_strings (lst)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if all items in the input list are string objects otherwise
- return False.
-\end_layout
-
-\begin_layout Description
-has_f_sources (sources)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if any of the source files listed in the input argument are
- Fortran files because its name matches against the compiled regular expression
-
-\series bold
-fortran_ext_match
-\series default
-.
-\end_layout
-
-\begin_layout Description
-has_cxx_sources (sources)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if any of the source files listed in the input argument are
- C++ files because its name matches against the compiled regular expression
-
-\series bold
-cxx_ext_match
-\series default
-.
-\end_layout
-
-\begin_layout Description
-filter_sources (sources)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- From the provided list of sources, return four lists of filenames containing
- C, C++, Fortran, and Fortran 90 module sources respectively.
- The compiled regular expressions used in this search (which are also available
- in the misc_util module) are cxx_ext_match, fortran_ext_match, f90_ext_match,
- and f90_module_name_match.
-
-\end_layout
-
-\begin_layout Description
-get_dependencies (sources)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Scan the files in the sources list for include statements.
-\end_layout
-
-\begin_layout Description
-is_local_src_dir (directory)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if the provided directory is the local current working directory.
-
-\end_layout
-
-\begin_layout Description
-get_ext_source_files (ext)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Get sources and any include files in the same directory from an Extension
- instance.
-\end_layout
-
-\begin_layout Description
-get_script_files (scripts)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the list scripts with all non-string arguments removed.
-\end_layout
-
-\begin_layout Subsection
-Other modules
-\end_layout
-
-\begin_layout Description
-system_info.get_info (name)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- For the given string representing a particular resource, return a dictionary
- that is compatible with the distutils.setup keyword arguments.
- If this is an empty dictionary, then the requested resource is not available.
- Some of the names that can be checked are 'lapack_opt', 'blas_opt', 'fft_opt',
- 'fftw', 'fftw3', 'fftw2', 'djbfft', 'numpy', 'numarray', 'boost_python',
- 'agg2', 'wx', 'gdk', 'xft', 'freetype2'.
-
-\end_layout
-
-\begin_layout Description
-system_info.get_standard_file (filename)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a list of length 0 to 3 containing the full-path filenames for the
- filename provided.
- The filename is searched for in three places in the following order 1)
- the system-wide location which is the directory that the system_info file
- is located in; 2) the directory specified by the environment variable HOME;
- and 3) the current local directory.
-
-\end_layout
-
-\begin_layout Description
-cpuinfo.cpu an instance of a cpuinfo class that defines methods for checking
- various aspects of the cpu.
- The info attribute is a list of length (# of CPUs).
- Each entry is a dictionary providing technical information about that CPU.
-
-\end_layout
-
-\begin_layout Description
-log.set_verbosity (level)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the distutils logging threshold and return the previously stored value.
- The level is an integer that corresponds to distutils.log thresholds: -1
- <--> ERROR, 0 <--> WARN, 1 <--> INFO, and 2 <--> DEBUG.
-
-\end_layout
-
-\begin_layout Description
-exec_command
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-exec_command (command, execute_in='', use_shell=None, use_tee=None, _with_python
-=1, **env)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return (status, output) of the executed command.
- The command input is a string of executable and arguments.
- The output contains both stderr and stdout messages.
- If execute_in is given, then change to the provided directory prior to
- executing the command and afterwords restore to the current directory.
- On NT, and DOS systems the returned status is correct for external commands.
- However, wild cards will not work for non-posix systems.
-\end_layout
-
-\begin_layout Description
-splitcmdline (line)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Inverse of ' '.join(sys.argv)
-\end_layout
-
-\begin_layout Description
-find_executable (exe, path=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return full path of an executable using information from the PATH environment
- variable.
- Equivalent to the POSIX 'which' command.
-\end_layout
-
-\begin_layout Description
-get_pythonexe ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the full path to the python executable with some fixes for nt and
- dos to replace pythonw with python if it is encountered.
- A basic wrapper around sys.executable.
-\end_layout
-
-\end_deeper
-\begin_layout Section
-Conversion of .src files
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "code generation"
-
-\end_inset
-
-NumPy distutils supports automatic conversion of source files named <somefile>.sr
-c.
- This facility can be used to maintain very similar code blocks requiring
- only simple changes between blocks.
- During the build phase of setup, if a template file named <somefile>.src
- is encountered, a new file named <somefile> is constructed from the template
- and placed in the build directory to be used instead.
- Two forms of template conversion are supported.
- The first form occurs for files named named <file>.ext.src where ext is a
- recognized Fortran extension (f, f90, f95, f77, for, ftn, pyf).
- The second form is used for all other cases.
-
-\end_layout
-
-\begin_layout Subsection
-Fortran files
-\end_layout
-
-\begin_layout Standard
-This template converter will replicate all
-\series bold
-function
-\series default
- and
-\series bold
-subroutine
-\series default
- blocks in the file with names that contain '<...>' according to the rules
- in '<...>'.
- The number of comma-separated words in '<...>' determines the number of times
- the block is repeated.
- What these words are indicates what that repeat rule, '<...>', should be replaced
- with in each block.
- All of the repeat rules in a block must contain the same number of comma-separa
-ted words indicating the number of times that block should be repeated.
- If the word in the repeat rule needs a comma, leftarrow, or rightarrow,
- then prepend it with a backslash '
-\backslash
-'.
- If a word in the repeat rule matches '
-\backslash
-
-\backslash
-<index>' then it will be replaced with the <index>-th word in the same repeat
- specification.
- There are two forms for the repeat rule: named and short.
-\end_layout
-
-\begin_layout Subsubsection
-Named repeat rule
-\end_layout
-
-\begin_layout Standard
-A named repeat rule is useful when the same set of repeats must be used
- several times in a block.
- It is specified using <rule1=item1, item2, item3,..., itemN>, where N is the
- number of times the block should be repeated.
- On each repeat of the block, the entire expression, '<...>' will be replaced
- first with item1, and then with item2, and so forth until N repeats are
- accomplished.
- Once a named repeat specification has been introduced, the same repeat
- rule may be used
-\series bold
-in the current block
-\series default
- by referring only to the name (i.e.
- <rule1>.
-
-\end_layout
-
-\begin_layout Subsubsection
-Short repeat rule
-\end_layout
-
-\begin_layout Standard
-A short repeat rule looks like <item1, item2, item3, ..., itemN>.
- The rule specifies that the entire expression, '<...>' should be replaced
- first with item1, and then with item2, and so forth until N repeats are
- accomplished.
-
-\end_layout
-
-\begin_layout Subsubsection
-Pre-defined names
-\end_layout
-
-\begin_layout Standard
-The following predefined named repeat rules are available:
-\end_layout
-
-\begin_layout Itemize
-<prefix=s,d,c,z>
-\end_layout
-
-\begin_layout Itemize
-<_c=s,d,c,z>
-\end_layout
-
-\begin_layout Itemize
-<_t=real, double precision, complex, double complex>
-\end_layout
-
-\begin_layout Itemize
-<ftype=real, double precision, complex, double complex>
-\end_layout
-
-\begin_layout Itemize
-<ctype=float, double, complex_float, complex_double>
-\end_layout
-
-\begin_layout Itemize
-<ftypereal=float, double precision,
-\backslash
-
-\backslash
-0,
-\backslash
-
-\backslash
-1>
-\end_layout
-
-\begin_layout Itemize
-<ctypereal=float, double,
-\backslash
-
-\backslash
-0,
-\backslash
-
-\backslash
-1>
-\end_layout
-
-\begin_layout Subsection
-Other files
-\end_layout
-
-\begin_layout Standard
-Non-Fortran files use a separate syntax for defining template blocks that
- should be repeated using a variable expansion similar to the named repeat
- rules of the Fortran-specific repeats.
- The template rules for these files are:
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset Quotes eld
-\end_inset
-
-/**begin repeat
-\begin_inset Quotes erd
-\end_inset
-
- on a line by itself marks the beginning of a segment that should be repeated.
-\end_layout
-
-\begin_layout Enumerate
-Named variable expansions are defined using #name=item1, item2, item3, ...,
- itemN# and placed on successive lines.
- These variables are replaced in each repeat block with corresponding word.
- All named variables in the same repeat block must define the same number
- of words.
-
-\end_layout
-
-\begin_layout Enumerate
-In specifying the repeat rule for a named variable, item*N is short-hand
- for item, item, ..., item repeated N times.
- In addition, parenthesis in combination with *N can be used for grouping
- several items that should be repeated.
- Thus, #name=(item1, item2)*4# is equivalent to #name=item1, item2, item1,
- item2, item1, item2, item1, item2#
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset Quotes eld
-\end_inset
-
-*/
-\begin_inset Quotes erd
-\end_inset
-
- on a line by itself marks the end of the the variable expansion naming.
- The next line is the first line that will be repeated using the named rules.
-\end_layout
-
-\begin_layout Enumerate
-Inside the block to be repeated, the variables that should be expanded are
- specified as @name@.
-
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset Quotes eld
-\end_inset
-
-/**end repeat**/
-\begin_inset Quotes erd
-\end_inset
-
- on a line by itself marks the previous line as the last line of the block
- to be repeated.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Include \input{capi.lyx}
-preview false
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand printindex
-
-\end_inset
-
-
-\end_layout
-
-\end_body
-\end_document
diff --git a/doc/numpybook/runcode.py b/doc/numpybook/runcode.py
deleted file mode 100644
index c8c532728..000000000
--- a/doc/numpybook/runcode.py
+++ /dev/null
@@ -1,151 +0,0 @@
-"""
-This script takes a lyx file and runs the python code in it.
- Then rewrites the lyx file again.
-
-Each section of code portion is assumed to be in the same namespace
-where a from numpy import * has been applied
-
- If a PYNEW inside a Note is encountered, the name space is restarted
-
-The output (if any) is replaced in the file
- by the output produced during the code run.
-
-Options:
- -n name of code section (default MyCode)
-
-"""
-from __future__ import division, absolute_import, print_function
-
-import sys
-import optparse
-import io
-import re
-import os
-
-newre = re.compile(r"\\begin_inset Note.*PYNEW\s+\\end_inset", re.DOTALL)
-
-def getoutput(tstr, dic):
- print("\n\nRunning...")
- print(tstr, end=' ')
- tempstr = io.StringIO()
- sys.stdout = tempstr
- code = compile(tstr, '<input>', 'exec')
- try:
- res = eval(tstr, dic)
- sys.stdout = sys.__stdout__
- except SyntaxError:
- try:
- res = None
- exec(code, dic)
- finally:
- sys.stdout = sys.__stdout__
- if res is None:
- res = tempstr.getvalue()
- else:
- res = tempstr.getvalue() + '\n' + repr(res)
- if res != '':
- print("\nOutput is")
- print(res, end=' ')
- return res
-
-# now find the code in the code segment
-def getnewcodestr(substr, dic):
- end = substr.find('\\layout ')
- lines = substr[:end].split('\\newline')
- outlines = []
- first = 1
- cmd = ''
- lines.append('dummy')
- for line in lines:
- line = line.strip()
- if (line[:3]=='>>>') or (line == 'dummy'):
- # we have a new output
- pyoutstr = getoutput(cmd, dic).strip()
- if pyoutstr != '':
- pyout = pyoutstr.split('\n')
- outlines.extend(pyout)
- cmd = line[4:]
- elif (line[:3]=='...'):
- # continuation output
- cmd += "\n%s" % line[4:]
- else:
- # first line or output
- if first:
- first = 0
- cmd = line
- else:
- continue
- if line != 'dummy':
- outlines.append(line)
- return "\n\\newline \n".join(outlines), end
-
-
-def runpycode(lyxstr, name='MyCode'):
- schobj = re.compile(r"\\layout %s\s+>>> " % name)
- outstr = io.StringIO()
- num = 0
- indx = []
- for it in schobj.finditer(lyxstr):
- indx.extend([it.start(), it.end()])
- num += 1
-
- if num == 0:
- print("Nothing found for %s" % name)
- return lyxstr
-
- start = 0
- del indx[0]
- indx.append(len(lyxstr))
- edic = {}
- exec('from numpy import *', edic)
- exec('set_printoptions(linewidth=65)', edic)
- # indx now contains [st0,en0, ..., stN,enN]
- # where stX is the start of code segment X
- # and enX is the start of \layout MyCode for
- # the X+1 code section (or string length if X=N)
- for k in range(num):
- # first write everything up to the start of the code segment
- substr = lyxstr[start:indx[2*k]]
- outstr.write(substr)
- if start > 0:
- mat = newre.search(substr)
- # if PYNEW found, then start a new namespace
- if mat:
- edic = {}
- exec('from numpy import *', edic)
- exec('set_printoptions(linewidth=65)', edic)
- # now find the code in the code segment
- # endoutput will contain the index just past any output
- # already present in the lyx string.
- substr = lyxstr[indx[2*k]:indx[2*k+1]]
- lyxcodestr, endcode = getnewcodestr(substr, edic)
- # write the lyx for the input + new output
- outstr.write(lyxcodestr)
- outstr.write('\n')
- start = endcode + indx[2*k]
-
- outstr.write(lyxstr[start:])
- return outstr.getvalue()
-
-
-def main(args):
- usage = "%prog {options} filename"
- parser = optparse.OptionParser(usage)
- parser.add_option('-n', '--name', default='MyCode')
-
- options, args = parser.parse_args(args)
- if len(args) < 1:
- parser.error("incorrect number of arguments")
-
- os.system('cp -f %s %s.bak' % (args[0], args[0]))
- fid = file(args[0])
- str = fid.read()
- fid.close()
- print("Processing %s" % options.name)
- newstr = runpycode(str, options.name)
- fid = file(args[0], 'w')
- fid.write(newstr)
- fid.close()
-
-if __name__ == "__main__":
- main(sys.argv[1:])