From f8b329b1e30340216dceeadbfbe81e6078fd7191 Mon Sep 17 00:00:00 2001 From: Perry Kundert Date: Tue, 5 Nov 2024 12:27:10 -0700 Subject: [PATCH] Upgrade PySimpleGUI, hdwallet and tabulate, fix double-sided printing --- .github/workflows/main.yml | 2 +- GNUmakefile | 70 +- README.org | 28 +- README.pdf | Bin 2496056 -> 2494369 bytes README.txt | 322 ++-- default.nix | 77 + nixpkgs.nix | 4 + requirements-gui.txt | 2 +- requirements-invoice.txt | 1 + requirements.txt | 3 +- setup.py | 2 - shell.nix | 19 + slip39/communications.py | 3 +- slip39/invoice/artifact.py | 2 +- slip39/invoice/artifact_test.py | 3 +- slip39/invoice/multipayout.py | 3 +- slip39/layout/pdf.py | 1 + slip39/layout/printer.py | 5 + slip39/tabulate/__init__.py | 2814 ------------------------------- slip39/tabulate/version.py | 4 - slip39/version.py | 2 +- 21 files changed, 344 insertions(+), 3023 deletions(-) create mode 100644 default.nix create mode 100644 nixpkgs.nix create mode 100644 shell.nix delete mode 100644 slip39/tabulate/__init__.py delete mode 100644 slip39/tabulate/version.py diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 73b69e9b..4b541357 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: # Requires Python3 w/ Type Annotations - python-version: ['3.9', '3.10', '3.11', '3.x'] + python-version: ['3.9', '3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v2 diff --git a/GNUmakefile b/GNUmakefile index fc3964a8..6f63a687 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -47,10 +47,13 @@ CXFREEZE_EXT ?= win-$(CXFREEZE_ARCH)-$(CXFREEZE_VER) #SIGNTOOL ?= "/c/Program Files (x86)/Windows Kits/10/bin/10.0.19041.0/x86" SIGNTOOL ?= "c:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86\signtool.exe" +NIX_OPTS ?= --pure # PY[3] is the target Python interpreter; require 3.11+. Detect if it is named python3 or python. PY3 ?= $(shell python3 --version >/dev/null 2>&1 && echo python3 || echo python ) +PY3_V = $(shell $(PY3) -c "import sys; print('-'.join((next(iter(filter(None,sys.executable.split('/')))),sys.platform,sys.implementation.cache_tag)))" 2>/dev/null ) VERSION = $(shell $(PY3) -c 'exec(open("slip39/version.py").read()); print( __version__ )') +WHEEL = dist/slip39-$(VERSION)-py3-none-any.whl PLATFORM ?= $(shell $(PY3) -c "import sys; print( sys.platform )" ) ifeq ($(PLATFORM),darwin) INSTALLER := pkg @@ -68,16 +71,15 @@ PY3TEST = $(PY3) -m pytest $(PYTESTOPTS) # VirtualEnv: Build them in eg. ~/src/python-slip39-1.2.3/ # o Will use the *current* git branch when creating a venv and populating it -VENV_LOCAL ?= ~/src/ - GHUB_NAME = python-slip39 -GHUB_REPO = git@github.com:pjkundert/$(GHUB_NAME) -GHUB_BRCH = $(shell git rev-parse --abbrev-ref HEAD ) -VENV_NAME = $(GHUB_NAME)-$(VERSION) + +VENV_DIR = $(abspath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/.. ) +VENV_NAME = $(GHUB_NAME)-$(VERSION)-$(PY3_V) +VENV = $(VENV_DIR)/$(VENV_NAME) VENV_OPTS = # --copies # Doesn't help; still references some system libs. -.PHONY: all help test doctest analyze pylint build-check build install upload clean FORCE +.PHONY: all help test doctest analyze pylint build install upload clean FORCE all: help @@ -106,14 +108,6 @@ pylint: cd .. && pylint slip39 --disable=W,C,R -build-check: - @$(PY3) -m build --version \ - || ( \ - echo -e "\n\n!!! Missing Python modules; run:"; \ - echo -e "\n\n $(PY3) -m pip install --break-system-packages --user --upgrade pip setuptools wheel build\n"; \ - false; \ - ) - signing-check: $(SIGNTOOL) @@ -209,46 +203,30 @@ perry-kundert: GRANTS="{\"crypto-licensing-server\": {\ # VirtualEnv build, install and activate # -venv: $(VENV_LOCAL)/$(VENV_NAME) -venv-activate: $(VENV_LOCAL)/$(VENV_NAME)-activate +venv: $(VENV) + @echo; echo "*** Activating $< VirtualEnv for Interactive $(SHELL)" + @bash --init-file $ $s8&o zS9^5^XhB{EC>n*bxFiD$BL^JC?BehW919y~5~?s@+;v?NrTd*uo0r=-4P+)7^diNa zFUpihMMnNG@c<-A3>AZ(o?bJfPU-m}klenVR12N&uSmwJ&U^P(_;C!?Opk{Bhyr=L zX4A0mNLqBPj8(&4(!6V{_EZ3(BO_C-Xy&xoxW&!H2Du35u?P$DZr-KzPgk?cv(UBe z)jym79pEy?W8VBRzuvS2{>PltaW7LqV9IOkJ@t}qdrDYrEN7E4YrBFdmC;lfto_1; zF|_tuX`N>4sq-uS0co^VfpU_(Sr$Xa4lxpB(P@sr@*9ttdyc$ijs%Sy4}g>2P-E67#DiBHJCtBoNB-t5R6O2IKLy;=rq9gTxDs-Pi@ zt30xABQ&EUx~LeiswPmh-u0ViGn-*iMl2WN1ogN=6kg9f6fSL``20?0_mbnDb~I`|g-f{pvh92S}B?hb4*DMV2avcfUrYt@NTCc&}* zIVJtA4Gd5m`}K^T_u>%VkSS0e8at01WPJ?{eY+!HVay!VU`1zb*!YMb=Z?Y)dcDSJ z;KT%ubepZPMfvAtub)7a5rci_VyU47GAQe>DjEmHKa-%dAvBkYv;HaAs^mE^w?hecr*%3yOb3CC6-y>XEj#B zj`?&SDHf2)&_E5u)kAvk3feY>+p=K>(~dHQw!g%Rj_#kciX)vLcL-j*Pcu%=n?LM7`xV%Y--Zl?@+E@S@*& z3VQM#9c#y{4PQOd?fhsx4T7XSu0pWZ1o)8Q**)}Z2$?kBlM=ZL3JT|xRPJ~}D1GyH z7u_8+=|@%04GG}=YJ@BlmIYB{lqtKJP-04kOus%5W&R*Q!dW<)yScksm^i=zb0i30 zfGR*D^b~k#Q9$zFtrfc(3a8}gd*P(S@LPoOMEr?A%g5}v8M|Zdo@%Sr1|?{qD8Q?c z(}m5Prfe%JpiFz@05S5twToNZ*gmn+zC`k{NCtUKw(Tt!li}NMnC|0GGp<%SBe=Sa zr*6kTQtpjoeyj8>Pf1@b9y(ml{QB$|T!u>}j!Fe*N~-86bUN` z%6w!kHGt_Kdg>YKkG|OK2nEcKRdnxkgx_<7^K1LK?b>$VoB7Cfzw8q;{ir7F3%(&l zx}WOK-zBxWj>6^Fu%?{L{OBY1AD$av&|~>&jxp3VMaXgpC6l+j6_S;@DU*VdwH-9O zw`xboT1`pF~_f3}kKJDG0$%lDl(pB&xidQ?G+=L`s299WRq%iEYB z-p$wkdqb=u%U=v2+ko(FthC5|YO5Xr-tJ}m!g%i;CEN;esG0ZDAbyr}wGKru>(5NJ zqz>8tC~J2GcWQyBgB`0CAybzf)85keVz+;^Td4j>n5V91E891_-t8Zxkahu3yhi&a62cZm__M(r6bx7f37Ok#`Ln3nZMDI_T!lUo<*G zBMHtbfI-82is0+U!8rAR-SDc8>_w9yAU`vdL~RMV^W2TSGb8ODjWzxj>L92!>h8MR z>`+kY`7P*Ejz{CY(|lgfx)(okr}QYyQ?*)nXvKnnopK0=24G`Yv=JX^mu@6iomwv> z_ZPJ1`!$Avi>qN*t?I~?wP4v3a9`WKe;lLx42gk9k?E=d9L_@Kp>iTymD+SVgK8Yu zpG0H*6XT|t_?E)z5H1G2lUPgV6SNdfQVgZ$^l}e%Lih(2|9+vs6oIq#Tcd)j6 z`PZ?fNywuQ5g^dS%4;x(g@;%G-N(}J$s`pJv;(0b<=};#`SVxw`U!MnW&S{cE!SfD z7WnvC4*X}(MIl`y;Al~H3YPr}Nv5Qm|DsgLgYp@?F?JeT)OSt&#_Y<#*tV|isn68t zEU^XJ&VG_DGKYg5FYO{!uayK>!$+$xl8ruZM1=4%8W1)WrMjIBnuUB$0QtQ#YB02;*J| z!Z0ZBN8vA8_)z(0U(0BZkH##tU8;BaDRS1sCquQ4PYB{+;(c^Bq(HEO=s&5)t%CtL zzCzuHRsfrG&?y5}$yLXE7zdxuznTshkhC$#OzR!tbmV@Yb*;xe9R3&Gu1NZucJEgp zq;Vn`F0Jw_GWd{LxFy9U;0dg;b0?2NZ60-(hgZ3YnzfM<(IR-k33mce%B^p1ftRgN zP+)4WEE$D)YnfgaFUQGz7866tff2EJO=&(D@c0oU;@l6s%3vv5murgDyAI%WM@)u1 zYUZ2;V^k@~h?Ka9Hw@zDjS9X<9qcp|Ei$DY^UT9VxuFjyJt<0vcmV0b!O1{DiHnb* zLKMYpIg&f#sFdz)Y_^-f;@!*ysAes|pVN9j>Q!quC_`QIBR+*KWl#h?z5^!mlz*n7 z$=ks-+Q>5ZNMUD8p%n3tnP0^_yYO0eRZ9ORCISxu^0T75dv!)iTyw|L1v7eV8|1n4 zx?)Xj^0~@o)rXMD#Q;#vz#s(p3c%bak`&+xYEmPR_MezV%YRxCEtoW5kZ4r4IBc_` zy(mBA*@~X)253IskkqFpl2RH4{jOFMrcIo@)o)}}KCIIIiVhZlS8bqMfwezUkKE=# zd?+(r;8{x%g);sSgV*2a;y(I#x;T1ev1+T6=3JNSzUSIDS^;2L4G}LhH~3k>a^HU4 zr5hT!jJh_%uFBjEX|OmiXS0KxJJ6;hYi3PnmD zVxxYxT_m1qQHs*GkRiUoOm0-0>VeL#o79_YHs#Ib$Nl(In1#84$+*6s({rb=7fDl$ zIUGWNw`B`K)djGSdr08#Cy!g`rWcr3wkz4eN-1X_OqZ(jN0GwizVYTHRV zTf2u}`bQh??EF0~2LC}V>XX_SJUEb=$nJ++uly}#5GNpt^rEd)ulR5MC3m_q>v96W z^$*!$8Gvm{z=O>^0T+h`UNwZT$3AKJ>Mu8qLx*g`y7Rri0nx<;(l4HMzw$(1M{XoR zIGnD-&9R>>)nWI%4hm4Fx$zt_- zSt(d3pgsWo6b~^d%)aWG^6Cn(~_bMyJdc{;RjBZ)yQysJRMwuqE$m;_J5NDn&6ro|m8b&=I51C}gAg7ofo@-JNf8>5!yhMlwyJ*(S)>`ieQ^jpZRI z(b;fwEjhI*@!e#ZcXejNW%`5J7-%vRaot#Ce1lerk+Wpv*{u6ixlc1x0Vg%)vLQjE zO=hIVjd${{WSJxCR|ax&loaWu7{zn3+H?_CAPfA=gAMA=lhpJj zhAea$XajB5GAOJtCFa6TnXLE%`8f1f-1#t|f@PIV*y0a9gPph7Ig57^1ZVHisvDYAGSMs@f-F+?a#@Z2y@W0DLV zxeSoMO;F5`>Q?akvL{1yg(P--g)EbE!C;&o$uH7(AVj+L>~50t0Hq)vcmnv9Ri80( zV{I(1Yc+C(*$^hzlB_ZyW;lGk*$xXuZyruT~RJxFj%Xgh}HeeW0 zLMeKKvuRb)nIRDqg320ap$cI>4K$b*T0{|=>s5wl&+(uQOO zp&2lxx!NflNIv6c0Eiz21)ploH>_>RvT-6!zK88rb@s`)OD z2gP&h^8#$UKMHe(^WFz|0AdOeSu7j^wmll7thPPQQx)G<9}Xzl!Nwi(kHJ|JFM60d zz1pR|5(Tn)H@8V~ULpXKkP79iV|y_*c*o|qEX;*}ylyK3VZZnte!bgbqk+C8Z%3y2E7 zgR;h18!>1AqmR>_10Dt8CJ$3^r)K(Ax-DZrmarT#7wHfKeq=M0aE^U=QZezwBzsm7 za_OhMYG@F(ph`^|cF=cvdR(-jKuk$k`=n?+9 z+8gZUu#Yit9dvebTs<$*KR>sd>LOm4q$*rhgp=0-m~|(9g*6BbpJHg`s&Tw4e)SSrqnmVCtYZ%OO`%`+TrbIQqYd%RlQ;?Tqs&hkinm)K?P;&f?=4XpK=@&vod|#=v?vXF3{qyy1(Pc5C2aJ4f`fEck^1uheRNL#cXbmp$qT+0U-H z#iG~-ur*vRncEEH7uQJvPdS!QS8A(FQiFd?%OaeiE&IwY5!XfK&4qz>pfy60KBcP95wRE^JnXqI4 z*sbHD%hm}AcnFW0SJG;9{KGS)b5E=RbqBQS-oIWdJ0g%6T~=m|hM^+s!$d~;&Yo_I+uA2Yvf4uIv; z1MBkkLs^SVrsdn3b4tr-YpQ9p#IkWVUn(9Q0pcs(R|Z&4NsL655SwogE`~+@I-h<+ zmm`y$eBnk|J}QE7m0i9ZcmaS>^6O^+OyAt!6idG7mRk)CzIcwV#r4OWyUeXox2K?z zSu5fHBHf`;95eVZ1xj6NA6!UIEj+ zO*8o5n$kzXUA95P*lwA#j*4EK_(#T%zrEj;Cgvx;eXb`2C;i4J3{$)5{WP8c9Ty6# zzz_3rrS$(SQ?CXsw4|8cx~GR1zPkLqm&m=X^Lh6!On6v@kyQ^0zDYfA^2{$7u-mzf zGa^*|kfqhq#c&V9P&45)R6njE$EH`Fyw0UWNFdTjE7vFz397P11Rl;NfUy6(Db3dj0a9a?W$bFz~qYk*G77OmRBtLqQ zZkNUPiIq9&Y(PKRM3TOk3(@u-LiRV3GHiIz-~};-GCVLgG&>CWAUj)TQN5?Ymbx$1piCkHYCw)QaSG4l+X9{{i_Wwx^8NO?UCrEO zqDWJ|*0^iW+`cAl2M5rNnVbf-#?qZ~*p)G@Xa#Ek$4k zRMMZQ>&#X(=BrtVluZmM0K>9r;6>D?*$(;tcfkxUr3XML=)hzp=h3{bCg(A{uHJd+ z-L;(Iz)8fQqp>^mQ%gW>9*O+fFoebzD$+e~*eB5hfeQqQ9<*>!tIn_*BmTSc`gJXq zq|1<;?OBWS=awyUiBv^DKYcls2SkBVt#+1L=1*<25Yx5M4({ zc((|bSdvs*T)_ec#ZSKNUkJW~hnnl{`*h+Y*~HswoS8=V@Z9Gdyj6Zk>(aUCUK|y= zkGQkSf8J*i4sq-UeF{&u2na?RH1L8#XWEvdzfJ&fb6b>>Cxx2D@D03uHrWX}0Wl6| ze@A-d>Hm)0CVRSt?OWt81{s(56~d(@aj7S#?V-;XTa}d!!=36hc>87syg7>in666~ z<_?r>eAn}~rfO3h1M=d(?mak%-WJ>+xVtAJF30nQL_HzK$NK{*?2FUl0y#FyQFfI3 zD5wEo8#r-D(BWp(fy`l9>4v!2yY)&jU}bxr0R8Pdk+0car7M-{sVn%Os}GELR!#4m z)r&pnExjI4A@;mB@N@f{`5jvXNJ2db16zt*%HW6g_^%eGF6;r<=vO{zQnppC*6p{Oka{npL%(JxLK0CEb#9rKek7g)Wi-jWMa^ zMGv6K3Ztuldl%R2i7Vo~$K;H4ID}UgM%Ch+dCYoQ$kEwRBQ@KdhFw`Xiz+7K()#+bIIESYn|QAmY-{USn_~AhzE$|TBrVo5f*G*8mqD#LNVk? zCaINk;c<7rPozr*q`&Ikg|G-G*7z=2kz_hH(mf34hHj@{dUua2U?BM-h<350KC1Et z6Bd|bhMsRgorXj+DauZr^*l?V2hvCjk%B<%wQ4w06A8v)0l9ti9GrGp*Y4{!MW=5x zaKZEFn8=ADf}Y0e%!xcCC~4{_hp z*=_`BG4#$_M{rt0GW7#gea+0nGVxZ%5Wcvgk;L3n7!@l$1$iEf&}XGW_uAUI^I#AD zat0SeOaZ}>fY*l(;#amGx5Y|v#|?x3{v0;mx7y|8rT^e_3CvgX%ue%O->a})%g_>> zDvGxM0>iC4oQ<0a^~!o8E1uOTdQd&_x#)Yv&!W=#u)rLuFYrI}Qedz_xwxhKz^ovo zk|ln{e+NN|L^4!_E++ixu^s}tozx$l&Mi0Ojo=$^1n|~@ls-y*;$B!(BxY=Ch1X{E z)Kc8N!H1y5!8^Y77UbE=cQJ5((H+i|DKMdoui|Gy(d!}jwC;)H zI}3Qg6{wY@PFV3nees+f!6((I&4p}Ys!|E{*6-*49BoJD^0B@ti0MLo3v#K{Y6Y?f5mWg_?ksY!I^~NkL;qKeU{4x18N{ zQ4(0JN?f5GCUYRI6JJ*k0J#gnJ^ycpfpIYdcZYwl053j}xPi_n$OvHE>>(?d5i6LW z{{Z_3_&*^20r?N8e?b2O<{z;CfcpphKM?+b*tUX+w0j87!p;8QkZu1$a=`+>TnQ0j z|4$>z4pb2!rUjZoA^U(%wrxToM}dNd1Fc|?i9oH}B4Ch>!5~(;H1&ZOaL9uI7zr=i$u#|i2wW9R`9B=kP?ptgPi`RV zw>Jq4W#+!lSzl@e&rci#$XEjabV4yy!2)t>Rj>3~-w|E&gQRsOa&Kt2aqIP^w8ili z1^_VBR?kiO$0=4N&_Yv z-(YmvL94LXAXt#nY^13*5lyw!)+iV1`sNX;npAf)JIby751T=jHAP*3wjbCIrEbb~ zDI*x!10@*Qow1*zpZ0T4cQ?>~h?f>Jr%^bI zle!6YhZol=>{u^6%9u^YDSkfq-tW8bcrv}x*2qW3uGk?39z>e4nfWu*Qhp(2hFp^@ zW{irnVd$v_X2U(9b$JEgtLrS_Anp4{GmMl(MhWK>Rx%vu?#Uj9Krb8hmjaYLV&&Z; z4}SeF9RHIGKQj6WTMSYX5L$BC3gYv94hU#kpz?$!Jk9P%PfQCBFCe`38QK+ZDj~49 zfdK&S*d^gVJjF^Pyk2EvJOnYOA5gJV_pMmGlY0E|iHnzx=HUR2en^E;H5{3`LA#C~ zg2r^$@3+q!%p0QIyZcOph@~DZKJHGChI6cw31~W&n|Oh81Rx9QSHzfP<$A5Vj9{|a za^TY#u?fqc;F}W2*#>^Uplw?12c97#9R!Dz^z?=KaLs4+YigET{Rlj>PB;tXY@Ns9 zrkY`X%Y?H$6~zLqapqdGP^qQsm)T_vAcAz%mhZV&mudAqiWsM>CEAgchyP&R?Nuhg zlFXTutlHyd+3~2XQIis-cQ8ML_Zsd#oCze6YWqFXqpJ+;UMS8@XN?Y;QF`G#01IL) zNa2VfSuVf$b2~Ie<)EQo5CNlEl}gHb!nR^*w_tg;aCv||{GuKS)>64c5d_F2qrTC~ zQ39{+>5IUe}RO2 z@gXWQ2$IcAmpumGP$YD5ORKZrESL7Hyw)fTA$=oNkQ|2HLCmHS1xqly={x&f_T0J1 zAq_V%6}kX_OJ8-t&24E)^NOMGI(5z18gtXdhD%Am9~V`2a&8%R4t2G7Z1E$veiQ~8 zQ!S8EU3=ymiH1@a4aZxle+)mBXVSB5auFKPD>cSX3_rCv{x}f0+hx`s1)X761-DiP z^>w#MG&D*uXU0ycv;!TTnWEcwu2zsj!5(MaAT>lj&W?-Hc8qfb~9S>JT01EOyQ2v417J!0wEeYg8AVLIQ4F8~L`}Z&e zI>i{14X9y+CJx5K9g%H>)|PGbL)`M;rtP0_;=zG&bNxr|n1PJ5KP13-cp^MzfBXZz z&0`iLi3OAgh+0j=@}El{AfhAzVp{+h<|iyTD>EBVS&j(f-~E3Fb7|Ug3F~91Ju`L6 zKVc!Y**jkqk@|UC&7hI$vvG(c9!afLYDgN;^(<4K6a)OvB%+gfvb~XtuFj-1mhb6$ z0^0o^8DqF;VfV=wvLp6O@k+So^yEkbtB>KB+MtX2s8{mGmc5+XI z)J-YxQ^Nw)D+E4s?)*fZtvr`EDlc#tfCwAaJGQL;;GZlPk5Bj3 zd^>SKVo;|3?Y6$cw*4q8sJ5}Bkp-MtsO9DrK}8U+bjJ~Wl+=ZaYR|s z6?uj1zTZ$^biat~w}1Ahq%ePrUS_qn3}(%iR&K29e)UJJ8)OalBeVMt0BQ%J4|rd6 z`3Tj^Be=DK0PD!%2atQpMQ};cx)y6>)o=~2&Sd3nUNt!acZ7-2(8XBZ*yT`hx+h_R z#yH!NBSuNvyD~lk-s=zeJ4czWH3{0#qlEq-z^q-0l&)+Texcp3Ib?Z>gwTEdTWqja z|KyO6^Gg!)es#=rm+AQ^Gk|-~Dd8>RVRez~Ulp7jK=tWIvpp1Hl&b8U>bPT6$g`6& z*W7&JPg4`If(O@w$;M}@1)VLC!a>>dk3cA<`5kb-5y#hHnO->!YgokzlH3XlX)4;u zWb8??(WiBF6_h%N-tcoXfot}I(bZnLI7Hl`0t)JN;R858}GhOkg>ioFan?-<$8w_h`EVy`OkvoU=B zAIx~u_Mm1x9{oMy)68i>EH~i^w&(r&H|ivJK$%BI<%OT2N5XE14M(P{6a8FJap}I% zje(*xJ6{`=y?BKY3hzn(Uy8X@8ZAr0lLto2%#$W;TceZ?B>#gQf=am|InF5EiB+1Mt zfSV8q-H`{inI|4L(@GM>bZr7+4iiCglk_uSI4eW>f^F63JaJbYle-8^rx4cjY$G(U=l3C8(yaLV?6cb$!?O zB&`|d;Z}yOF9|Z28Ot}O>`Q$GfCRntjbI4Y^WGABYl<=i7J)N?j*#TQTPaP$qc)D3 z(5))WN;9%WBJf|7WJygNpjz>E<-;tuR9%Kl4;GIdXCX_x)1yF{!^?TZ4U}SnZQ`c5 zZ{p2hK){$w-uf&k3ZtCCg~3vbrelt;Npln?y4Yoir%|wT4P#)lF4Y|X#BFf-Mg01U zbl9=;&I7VVVZ1waxy{OJ#}P~KdwQqWK2F478sm3 zqg0f*U%L>`*9GBl8l9MaW!xqB&4nNYSSCmt5^HNFOLXYzcN!t3F4(6yXsUu>>7?0X z0#-cOOv*HqnC0l`D4^%S1~g0pP%GdJ8YTt+e%gTymGt*VFnjgoi|8smlpgF!#lZnq z*ia5@_*z^7N1cb`4rq&VJ*e?jA?ZA9?j7a?Oqbz?tOPD4G+TzoI~ctpD3l`VifK_h zW;qJtmxEhzMK6`X$ZYPYpRY`yQnDy(b%H`rFmEQ{17pHyS-LV1`Bt&4Bj5{*F!mbY{gWt!^f$?f6)l1>J;vNDIe9v`L zq?Uy8XsDCh#Y*&&fg_sPqG}?_XQ5v+r|K>ee!1!K609@^U+7{7c_WHBx{^g6Hha$) zj=q#PoLE5$gn%0Skzkdf(wJ21loSg<-XLdud3j+o;K6@?v<7pY(mlZQ3kbP_wNhNH z4Es(s89>)Rr>p561Kr;T0WmuZacVQh94ree28GN$FIr7HDgCM!2n7`GJZ##$=_>$* zAQU@aj`B%rj~BtL{&u-1H6b%Cf7SeRJhRarefaeoBq~_5q2Qeokd%k_n%)42bX1rV zc&zYEiLfA4`7pQ00J8LXTc1wk{QiuKD{*BW2zG<>nunJ|YcT+=Nm`@%@`G$*Dg3z|e1C_RhbLsTz*r;#{6mz%0L?1J|uK5vy2ZA_gKzH8p>N=pq zFK(N@?qHZwU7z*-7#RhH?vknK1%|sbPBWIK&|Qw%UoCd|(%mOJJY5fuwWr z8ug94(t%lU6W6?-#lZQXI2p49ZVxYD_4{C%tCi1tj-Z63k9kDxB~=8ll+pjTbdYma zFWtZqKj{4ibEhn)p!f5SC|I!_EgFHJYe1U5$r*G-xO7lPi^2?B^H=I|iAUdO3dXT$ z8?{@Et4v-no{0=n|A0sD0+;?p&ZxQ7S5DUMdRHPO%(-y4s(hv$cWgsAypJsiti$M! z$OIge1!>M-D6&R}aJF%r>q+=y)2 z2Z$F{#ZT$cet|}*<$f9Hu)c|Z%IX%>KdyjNuuL_KuvG6hi0?BjT!45v6rEka+{@>X^ zKXxK2a28H(U=SE44IoWR&TU;1q32!e#L{-e^d;aReaItQu}r~i>S6Ywo>B`9FS?3; zocrr}*iL3HiB0Xj4-zv5vi=3+#3pg=FNf*9fFw(18{@T|&jbS9Kyy3aO(iM3UBXF~#h-BV!XA%ohovdQ%@)+H z?HzXZN?s*f0RRGDe2rq-Fmps)F-!JbYLaI#PkNfwCMA&^?YJ!o76W`=ZxM9Sz)?)6 zI4~zA!~S4~5QSC*?q`(i>8L1FZ|tqaOg_8#8RS61>dP2msbqU6jsc-Gc)V+-26$i;UeZ zbnS%lP_%;MpS(&`R;Pa4z`hjqM2}D7sZ$V=xk>PjSNYX-GO{DPA3&`3jBDep>SJ@U zMo0FyjCOCv>EMzKqVCA7E8SH5#aO(f@=DPr-z3OL{|MycM8_SlSm9qX2gbXq>@zgI zB0w~>9{?jX^n+OZ99P)C5RoPY%+ClGh-(K($2nLpg%a_>N{W)^(>j1=zw}yL)>=VXN)Fg#g=5hO#fZdh$fmXsg9&Fn%#;krA}i zBm}ZwFmTTbqaMaMd)znW@ivBSsbSQMq}+Y>l_A1ryHZgp?nylbIbt$mpb|I^30(A& zvvbQA$T^L6)l%BnXLGAA?3$V{&6x+d(mys-wnd&vMSOO85n}cH_Zk!cE zp))2kvr`QGvv7ec^{}o} z=61Bt4^PqP5d8@0Hy3awRm(|0DzN=JL>^Y1N!o0QG)DV9~FwAopzpihX=_2~wFt@k@uV>uN zg|kJTB7d*nk~K|1C!8hr@`2g%bkVBHf#A8>)fsd^JbbN;f136t&O?g0PlhFfzdST(Tc ziy{^}KzHQl=F_b7rfu<^0Dy3j8F6N^aGSK-S;@Ap7q2ml1&J#1nVZ>1li2w0^~0RI z0)>ToDfMuniuDtj@Lhc5}}Bz*iZ8!BFs#)13UgSNihsKlQ2dEdQlJ& zr#N6z01*f=MZsBFSRzyiG5>+prb39#ZU3K>|Bg7?x}veM!7y1_IEa~volI@v`1${@ z#|VhhPeBK$!Lj>iFuHyJgj>E`d{``o4MdkQqRi!XVeFB?RjM%*Wd8(7N*rR7xO=HD z{&>4G1&wmg9LlU1VS~VgH{M2m@%>sj)I-f<-j@3a&7A~N$(&HAc(cZc&E!of9<7e| z=Dt6-dDTi!ZwiM_S5~}rl-xGjS`(kD{bG}HK%@pJRQ2#5CoPZ=J71;!LCE^o_MZ}% zmP2v2YS6@}fdQVxdYujnmD#tCHrMdsrADTIQQEDV>*Y*H=6+j!oks!oSa-un<`m>4 z3KD~f8_FPV1Ia+z{0;Itg(a8Vu|T3tK}y=a6kr-l3^sL9jROeb%T$cm-|L;<3WC8+ zsnh_FphsnWphdSc$BrkXib(Y7HMR&0$(Y|B0EPSNaiUvUH!&^5S6DPt>YBhzbVZb4 zR1Q(+va`+(sXwT+6S4W!^F3VyW{lgCd*oo%ST_)_aaO z6S=%~u!%qi=;UG|SGj7U8*uZdxN zOV<0LI{40VgQMZhfNMQBp9MTar83Vv#rkRgX@e2{Y1n1tI&tse)kLVeL_cK~Y;3@O zkQ*DIOsb&iH$rgJL?*y93IOZ@HOfr!{L&MWJ`5fGP3?SPxZIGV`S0_4FvQsp=qVrq|unU>HVN^t`5OPnpSp`Mz+07;?+z3jyGf1M|i%Qh4&{*<{1WK z7Fl|dpmNxdnBB~7Lq~1pd7}!(}H4r;Q%U2}p4%MwN$(=#Qvl%+$vn@(9IlMPU@^p0HRepRki&^W5t zoHu6(cNAgdFm@gU zx^$RbERrsf|AjhkP~(7*+5=2hP-`p8N3Z$x1ztvoGu7JK>`P9?ZQ7map2USms^f90 znn7nUjjLLY&#H>^gD+$Ug|h=|tD@#q>*dH;4lGJN)hI{J5{8omj!n;MGqE5WhNbb+ z4mTHNM7>#%e*xxoF;f)#fz6YDd5@VSy4^I zK8-KVk3`+}ytA)EHbFPq?(OJy=vokh>f{aar?d6 zy-s|B`H zAK8Q8+L)gmNQSX1UBxUl3w+xS+lt~NE&uLIpr47#jmIMVo8z&&nx~_t=cw~McT*oh zBLi|$`3~}}sXdJ%yt$h+{%owH=9g>ISujq@>87w>9uzW}i~Sf&##<#A%Q0!sCS{T# zmTNErIa_q(r5E;xduv0o9n-@@W?6-^VHLr@E5;fzb0OU8VwL$r+1NT!DH6Rj_Ey$l!Gt+}!+hE*!25lyol{`F%Dmct;kY@bIrpMldhC2IX0*`d6vd6b=FUT6 zN8a~5AkOd7gkzoxd1Qf~?Fk*U_ zv%uA(w9)nzbMQ%Y)VI`q%1tEvGzpF?wZL!{w@;BFgZ4}MYXd_2^{BKf`RkM_f8Fp4 zl8w;pNA=pOBZeS9=Tt4y0QIUHV~FFaRaR*nTqB@$N@toXQ-U|x9Ks`dPreewX6Lh^6hMY`R%*-dYH_X@4I9@028m;LAW663|f7nHe& zWe7fqj4c>H-_QwM(T+uocib+b?qo>C9`XYLNziI2XHl0ycU)Z3Q?3nHE*LjFK?(by1xdkk(AcN5nApu6oY`Vd z7__krL%wg01#}<$hsi2JV7^E|FvcGx%AYF!pvt?Dgr)4Cj89#~V+yKWgXj@c7(baI zxl(robE!yN7SRIlI7)kLS9gEaY^{`+y+8rv4Uvq}bb+lMPl?HVqK9(VP(j36({MF+RshchY%xiSSWkhR>7J)iLnV=1r0@Nd1N zLL5|l9iHBGp*ZD=9((ZxrbqSXnQ}2eb)oR9woPF;^wk}-KkQg4iUC?4Oy}`6RcyfqF=I<=$fg`hlU%pnxU)G?w%T{&&69T(m#BDzoh?c=VLGi^1fjy zN=l&$NsNUz{91TgRIK36#hwPYo;=|(_q&mn8Pixuc>J&FeSHq#=+A|a zEuPi9Fv+da?1=yrlmXO^tIe4A{Vgzi+^SLU)APrU8%UUcP9pllc>*>IgdNw4WjSG| zHrR*n_bm}S?me7d)Ur5Go-k;O=JFI|0&#whz+@f=ZY+e93jCP_M!)k__qT(uLS^T8vg=0-Z#sp*iuP>ekI0VEd2IP;W4MhXJwKbE7wpViv zbX`vtX`%%sIP+IGe|vFnD`VZKoLcn7_QiumVBeRZ`Uv}m6Zy98zmM>91aMV|8N{GW z+)mRcpr*{a$<9QPX)fB|S6iaa7RXI;5j2`J1aR?JMDIN%8_ zuYPK>XyLc<21Kj@bnn-#Qp&tH{_>Bf`%UrjXfEGyOB7hBVf;yGyy|QcI&wlBttVZ7 z?EV%iCJ1egx&H}M5x?%K#c^7+S16``VCV8XAz@;A-yd=wlVXv>>V7%-ZqoFuBc4NHFrrEN?|0&D0J5#Oj^Y2(V_k7fAZCCqShl|7Gzf!Jspv z7h50Rz+KMo$gk(gJ}J?m*(rr#;xxb~dpq?toZ`~xF`emLn|q0!OQfy9@p}0cklYOH z?aB%=WpdT{yV7pQv>kT6-EC&0Y1CU&7yaq*9NpQ}R;Rm77(Ff_6h`R0%kg+Z=vwMpsE+cVbT_)8uLgCE%r%b= z{NF(l_G4hno<05Hi7B3?KzjB_Gbu&#PKMjdNC0HGM5cmAo4+BL(2q==(cJv<)tXnr zXV(*0cJ`_`UCV4X+>8%>YN5<2B^dEN>>=XCHi8J8NkseQ+t_06)n6<0aG%1i_=$Ja zV1^Ah1JX{4+vq*Fjl8cIU(LF5=PgL+MldM9v4DXIW5y_2*etQss- zet=zneKC0y@sR!i{{La?9iuc2nl;_BZQHhO+qT(dzGZgVwrzFUwr$&8=u_XGJ+sct z+CO5g%zQHQXGUhk{agW?K^@DOcaEBZ&zC7&%jq1!Www>J#e1I+798$&Gc%b{QL_&%HIz{GZR^gw9?QJ%l< zQaYOXoP>1hMJ+JTKi)Wm1TNuSb?PZvrYofg+eQPPzzw~25oWbUCm1ZZ2y+Q-kLrL? zm3CI9b_vQ+vNjH)0RK&H7nB1@_UKIl#E#Y7g9uf*(0nH0*eaqS9dph9Ok^rSUgQB# z;=V)G+~QEr?ng3}a-O(uBB?*y7?p^roqY&ypU|cffP0l%1}gKppA6n3g46tXBbTlEDtHa{wKZ4;fv2zS(jRG5M24ywkA0 z#IdGcFYhpiZj`FYw9$OAQ9gCvJRbujvhNmDWR9Be<{Z4lXCHFBpZ%fp+$w%;O0=NY zI;lJ?>%Ma@5}i2|N${htv%S;%fN#riVr#w#&&TwtJJRr*w^<&i(8MBx=}7WYUU&3q zj})JAoAIu(CPzqK=h?yhgJ!ZF-;B^#*`7zJ&G&@GlJ}MG1Is2Vg}*}fMUxMJQT;|L z16uB?B#%{`Mr>aqk|`JCw=IyhJ_G;N&%RrYMlYE%!Em{fE>t-XAOUMH;Vw!i?*>pi zt*m|gT}7-X{0lafrh*OjY%-k>OGYkfSaHap96Xs=t>5VYx-F4n{Dys9a3(8oB0 zh`!+K*;KFb=LkOe71V@lm~S4yBU55v7@ldc*RbJnS!q`JiWZ(**&W+bxkv}Nvm@_}#1YMpW2n?lW2{SOt1lEE) zjroziSVstmIKm_fy&pEBl?Kf%+@QX_DwYvxDrW8(p^OydC0}$5n&cSJPF!yVW(U#- zX4#in2M1YetIEMdGY8TADx8(BM9Fj*(bm)7`~m}v9Fc>BbAr7Vz>pEq-C|L#GYn(e zeOGd-8rO5qVn`n3RiZ{`TcTW8=~Li z?;yNyia>G)j@HfdK=`DpXM1g9W8ywVEWmxfw-YZ<`?6XMf+CuWA5(7*gThpmnBQMs zv+r9x4?g|6lbCH|3}Fx`L-Z@?h0|RXy!C(ZFhAbqzmy?5xmZ786&B9$yj-jw!~QXx zAH!|S%f$mL`_GsEGmo?FM4~VIuQz_nnfO99oM{JGsJW?(442-AU;ggj92iMl zQU~$!CzH~JMimqZ8p2rON$(~P(W9aaej}es@_yv$qi^7+m~;d9ubFNJkzgx2zivBA zXuU)M|60Z;rY$a5XVGArh>Ua>0Lq=4n$=8_gkKj_Mn1U5y5xU&D&7 zWfgL%jIZ0ln4;NuP^GaGjSQTz8HF3Ii@PU;6#GMpAlMbRX|!5pA1DSN+0N(s)4Q7~ z4;-f|JzQ}En5S>Ni1=?oOreHsX&!W`JZKbv1#f5a#HX50G{=Kg*n};8aTvFOCECx7+^E{pj(bdq#;c<`5d_&NUqA$pnst~0w5`yrviC=?v*z}mH-(^&K9z_4I?7Al@i z_Uz^c?9alE=G%pxAr?EA-iF2|Kvu0awo2v>I3n~<)E7)jkwi;*n(sI)D612;nht>` zf74IfWB+6bqd<*_h5zG7+b3~h>yXG)l?xPaea)H(B69n}fytQPHWWoK9Y)&&_zZLn zwlpyt)N_o0??j!i1c+@#E=xk71|~vFC-jrH&vx^Y$Y+ICJW`U0qBx~dI;XVtA^AXO zh4@fR->tyJg{rEK9SmTOQQBfY}Hsr59poXBN;&zjg zZ;j&zE1>XfmF$cR&RiT*&q>Z)$O0M`Vw zm>H)hRCcLh3sqz3#dMkOo-p1 zEpF3VBMC&1n3ckMa3XSbXBYJ06BQ4xp^zh9j|97riN9vkHS$Yu|WL$Ta3Y45nhV#;hwX6W~ zntGYq0?hOar^liUr6CD?!wWEn-Ks%`eQF66T1HCgy%1Oe;xF7r6wrkep5co)(??E7 zc}|KUoES&B1&LiBDcPN)ZchcPB2`1yLgM!Etoq*raapwJay`JDLvnl^CD5yl9?Y>; zS(LVzW8})2hR!_CFDNy-xXWLjWfwx5f;P3?k?`xwnPr*qLk3#X9#i@Q(?F-;n1o2| ztSnU#8KTetNl8_->37B~=Z)Dnjd%lN>M~PQ?fhy`LklHBda8u5nh4@?2(eY*BC(a= zaY?m0**Xsa1i!U7k`qw~Qj`H4SBR&8;ag2z7hS z9GmdMf>Q#1#mhD5NfQYb&@Wyv+jf*ZAeEUDTP9h`oB2HUvCSqRJkZ#ewF?>_?&=sl zIfV1jNeu^h(E*n|@gBmcQA9xj_r^S`)gSGLdLJx|3nVTjj;+$Rnz)7@Eom?$WG-}p zm|z`%B1vHg(jm^B86U^d8yQ`ge0>s-k65T^9}=K#j#A=1V2GHVZGZGJ2Uz+(Tik{h3zZH%H`t6Rwi|@1@;9%JJmzPoAaiLP=oa z-IdL1@m+e@QQ!u->a|&*cK@);;Jz7Sa*sm*2?HJe__1>HVZXE^RQ%zNQXw#%z3=s0 zdCvzi(>SirEHOx26!EhGrs<9^$!K5JIqC?Z59>n(TMN1hl&w&tKHgBheJnVFEtu@8 z*9KBVGAOLf!P5W_DTuUM0RBSq;GCCEc>1q`TTh&o{J>}tyY^%ts`5*h!KSQUD)Iop zb!T-zapw%HA=ZTJ8G&}EJE{&GJkg+X%4S9UC~#bZ5;-tp(oGRms`_WUxG^TJW0FOl z#c9`{fGAn317aKs^Z2`-IFCow_#mGcq!_P0qjKl8-LK0`t3MYGgq!d@iCj=A0^gm# zx{JxU(p#BGGtJW&u01LKeDKt0a7QQtl%(KV@>E6bFU&Kst6PYVKD`w=^?EQQNj8%d zX!cl%n!bH(dL{dYWH_%zQS_EJ@BbQA#kf`gU$;^U^%Vazz<~|9YeglA3-Pek&qff7 z|CFjCAF26z0Lh9vL9I45M^1kJdLQu9(@HxpERa>}H^a=2@K$%2(zkanGAE4$fVyGL zb=or7bp@Ng^TeW?$zUd5gN7XmiuFnK(lMRIi};r_yDNaS(dtEmL3NRcqyl4k!3q7{ zk86E8FPo9)O<%f$P0EiCd24uX=%{D0x^t;!O@vHvcSvy^TmS&OZ*eI957##~=KoG} zC1AmUakfF`@90SWbRvMsfp9(c8v}o5aKkBy3m*a4{hmhE zLUFyH-zHg6*WO_t-kHF!5e7YsaPKtB7by?>>T{pB>IFbTEIUPLNV2oB52zi)8N*aKT4fkbXiPK@g)dkdFka~a+AV7f|m1BS&xyqP+F zDYb8f2N=Q!lTLL^8CerOk#BoP&|ovwUVuMEs8U>%BWblgwqN0KNqgL@EXs!r!`jy`jWF& z$7C{cV{sZVC;2JhkueYb=zekLHea)hfz}wRJuKZ?jC#-O$SV2{5n^8JNs~o!)X4%K zo%Ji$10yq^+M_Ie!)J1Z(HSt~iwK8|v1fau9wR`73e+7Llake^PcG#Pxjf4+2sp?v z#ht!1swprJ=>Z+7+Pb<_H1s_!R1#O;i7|oML@AlnpdQ~@{`kF^>DEa&K144p+B+l+ zU;nJxm-zE_KQ6cDAHo#hc$}YS)^mKt<)O?pK>@HJ>4<1lx?SOfx zNNB+`Xg)q4AN=h$*&Wy)v~g}y8-kC}r_;zQRfBYyDcR<6=Sh0dh!Zku{o4tL(Ui4p z^X>JbzD~F2&JE9yastWatH&rnyMYSzqo^^Q4P|Fe#J83Lm?TxKct}%_0N?a7)&bUx zzVWEc6H)K3?^*|$^TbtvPrU_nr*$W8k}}UR+iq)vp6_cbtRAQ!r>CIHqU$T8^rge| z#Z0;l3~Ea+xm7FKroo~Xmzn9kQ!njs@Sw%DkSH`{^e5jd1u^(12&LE6OQ`6Wz2*Iv z?1#=WH^PrOBQ==HglhZ+k=3&~UjfwfRb&*-qf%2_m)&Mk_!ayDmixI-@yH^5g_DV< z(~gk>IgtqyT<=6-JtnDf-6agB^U?)C*$QS> zr)1<(5c4lJV^zfp4|H;&L{q%wL;_I|1TkIt0Ojq3+W;1`9B#3oEzHh&J#e)JT(hv1i^Nt6Y` z6kwf;SME!0%Y%%Kk7AmII{=W*f^Szz3swBMk(5%evSP*MZpz55{J{M)o~|x(Droz8 zdGLAcU*F3qvy$g_1Ulzu64ikeaa-pIp5$lfXDU77t{7rveasj zQ+6&ZvlCqn^^*6h&(?LdAv%{P=_p`q2C{x2KgRw(G&o`M&7Lq^gJiO*^x)QgmbF;*-}BZ` zq1tOVFro&>zVyv?io_iZQpt8=e+#PPO5nt`TDry!$8gM=o?&l{j<%n`o3$zae2G zsin7U z34=t7-H$j5!0&qbykU-_$bVMGxnG)(d&|9gF4t%OgJVr|mcmB^W9H&y`EM$X)_=kq zNPe@LP!7nl0aB0t4XU8Aq?`))qw#7-1@thPdeU}OiO0iHAI~}KIVDn&i7^7t;yQ_4 zO{|tPx!4b1pVR9xwg`I59_)ThhH$RC>h>Oco~@PKGe!jP{Vo_%u~UQTV~>H7>EifssLsxEu{Ivc9eh7B)ZY!=IF!cXL0XkfgDP{%fIXzR&O(F z#O;umq}>=+wk)ZGyLj@d-%2ZSbG1w&$tNV_KE2&MI5UzkqZ*+TL)1+;?;~`raP#>I zqv$F{DKJiiXJBB^>3^d|sD~v){j08h$Q1E@b8;b;po7w!7SRjaYy*&xc|4N%!_aJ8 zFp09&p!bEs1M8Dq(0ssp>Zp0GaOz=42zCV22K_a3h{{*xqrqn#pSqTQ7&b z&&IXAT3s`h^Kxlib2*u#!g78Uf+CIZoOL<{TlB~Y8g}nMGcz0l))BQJ;DW8>Y1vJ^#y!rG@^D6l5jgRgCfQRmT=d8(~53tV=E$N!9!3#Q?5U)_=g zxW=q?Ig=&5rZlg*u=v2Gr-#CXJ1!ANNKps0T;~%IO(g|hPys|OVwCjON|v(fT2_RM zD_3MQ@`m(U>HOWv&~TByo&esw{;{U1eKPvX!a&W$M)Y*P?gu5y=xu6l*h6u;Q}#Y` zI(?0*Xi@3VOA1ni7$8p-wJ}GCqo^g)`z7;i2I5LQ7srlVj?aveY9fA?u%?k$45Jz` z`Gv}{Un)pUVSqnUX(+@B6`+#N)Gv{&6Ke5vO(eA%YKWc(3rx{a1^HK4*LTf$uXDzd zTweJPXZdO6yziAzGA|+%ZK%?FbrwzGaf?;!M@l*rCYL#Qb-{^fLuW$mxpyjEkZ&R~(k_qc8s_$XEC$qlV1ojN#e&nJWWTz5b>e}1( zZHqESFo0BUIzxGfS@$;ygGr`o=ZbBBbv2HU2CgLS3x4{wb`NB@jV+Sn>YA!^QN*>t zf&9BoWKS_1UTif+NfTo#{1_n{<}l~F{uJe$njC;zY3XL7&%tN2`EKn1i3QLT+1JlAK**3q0C*9RE&}34!tzv?twbkkmIn> zHOoBNE^3&loDtVf8`3qa&jjH}yCJlyzS|1#tFO#ge+7p&s0lxf$(vpYe(5$ypinRp z*Oyd=+}aDCOuzVZA06IJrd}ng_(S46S;{%bzP#%DO#)_sn`!e=%H)k1k99u7WUzPs z1PGrc9mFMRxFb1EL6sci`5Z+6wdC7JRLK(*W7#ueWznMw8i(Sm8ltzuvx;`~g`XS- zO+7Gk3J?wUu&BR6PzJ&1S5kB7<%TI~4~YV@=p!V^JG>n#%c`_Twko7m@zfj|hq8Lk zKk%xwe5+4qtPK6aQYbygCE-}yb%)~`0g!|vddvyc-*Gf5w!gDA+5?fr&J^O{EF%pZ z*hA0Q42N=XIwwXTBjHZZYsiXcqdYXC8fEt9O5M2}D1X#oCe>7>5|@5UZM^E$G%gkE zP+i)U`G85B3nlC$ZWfVkp7yryCA)4ZZoCb2CV@)A|D~nw_SSy3Y7z?y5%eT;23&Jn z)9Xs$blY7<_J0P5*=mnMUlWFizhKQ}v9aNGRKJN2sc0Xpc+q!dbdI6^2xG3036v#M zTQ8z2D@ThsqyM#yeqiY?U-bHXj%6y?UOK9Q$!d!out1xktP+8#qoOQSL&NU0tvKtb z0^NBV*5t+!J6MI)_Eq8b>^uKpo=-Eq95TblV!w9P^cs7>B9j#PiT?!WE@qNiRy_La z;)8BJ$!&UICYWxdPHxS$!Ed@>M}#Jnkiwk|T%*!&EBm2FhtzD~fcvAC5%tWH&f>*3 z5Lgi@$wWK@4G;YYl+vk|cH#vH_S_<)rb9Pe19^#r7|zyd#$+3qPPTzH0XEsO<0G3j zuc&`M**<3b+iXM=DZnN*iuLc zV_6ihpH*Ml(}s95VA9dhagjU(Vceq8>23doY0))+o7KQyO-T_^{-)thar5{fuj=jL zswLNy?$z;Q)zhuCzSL*i0PG#;(vZ~|dBVsgiNXu)Mn@}fy!(_{lUMud8*|BNQe@Dt;)8#LA$!Jc-aSpdINCmD{VaB^#+01j5XFkIV4%!}{m&Ko0$t)qdal zFaBuX)+bBhvrPr0snqeS;846HV5q=DL!jMI46#|{e|Np{>gLw_5_b6BW1V$?;nZf7 zU2^UD?HdrG=p$(9p*VK*UG9{wtf+`#?(!ZGr37_p8{#iR-G}4RN5Y}rs-WtHXXR`D z+h|&7g`omBX%CgSKUNpfag&A?GjL+9m~a08NeENLpffD?DuGoOLX$_*?!@+(pQ-vg zi`R{;zQtE;LP%aK+Yjbl4>j9>t;dssvsV`_o)B?kgbVPu<4!gGLpGw+MZS_8z26lP5T#ro6M3FM_oH*7Ym8 z0iNDJ55UJ+LLzNT#jE`B_dWNJ@w4k(&|>D7MyXq-<4{<*=IiYiRJ<=hyhYH}msQG& zI^&qPL%^Y!I+a5TJBMOd)Qt4y9+(u0%kZtCmrN+g5p&!-C_vT2Y5s3+ud}2qXRqZq ziIc@#11Y7A3se_Is5{hfOYQZ#l0)>Ay@M5R!K8cJCfO8UXZs#Mb)0JB;GBVwBEC1* zNptyv%+(b+3y`uAV<9*|7p(PG>_Eu5x{b{P{7eW!HRT@n`T2U;1avL28p-zQP;eg{ zs++30XTmh<>e1%gkinQ?JX_Yi7uE2ev+wC^DULVjBL%@AiShieaN8RdJ65$VVk;jd znjJMy(c(|VJa?{XLBGc6BCc;>JHaS`ACOPC_Y$r3=_RK}-EI$HKXYgI;vaH12)DU{ zURpEP#jZ*B!Dwb&jZJ~657osx1}}aYH$ztv(cpV&e-?*w6rrJh@B91eW!~)*0rd3` zKRn!nao13A3;JD1A4rr}1SQ}#2-_Lt6y@)VCR=f z?jRK74y7Cb-%7cRtu7Z9E&Vy#fB<;2s%IDMW}vB(o`1}0w-RTeV>wnWTe~2h zBidKGtP*4G5*7=M`Ivn~Hzf91RR^6;7@8V;+s^FQL8!m~R4S50b{X~eHouF5a^n&hz-Vi+HQ3_qKA0zUd;^A631`uCFE z{hSJ&NzxR@Z?L{Zr9k-xdS=m@XO>3`bFg`vNvU|CUP?FB6A_5T)8<_`{oB~fDlur0 zN*zqsPK{h)g}?@4ZffV6Be%qkYiMnk_x5p{4BS+6(iYj(iR4m~&xSX;FB9HaO) zauC9tkiHOrh()f|aDQ*K!Ymn?T&7dGmJ9Nw`_%PmATO#mKEF&4(yiza*r%I6SKvQu z)}Azm5@X(Ljp=1FOnXe1jr`P2)^*s%A%l_Z&m*Sn#uf1rm8Q%*aw8+33KtlC=`C8V`KA1CixHIzdJhVZ1<}B<@dp&n#HMDW*tz&JoC#nNe4#y_C-z(eZnK+5PJHbj8XM+cK6WQ!w8ozm*seY=6-(x#Avi8=`EaOh=^K!2-+ zt+N2M0$v>y7o~EEM}19Gc{puvB~L5f^si5d^%kfCotz+PI@f!nzcVQ?A83d``=&Lm zRI)B5#yXDE{@B`v;>x!qms73RP12!hGMmGjra8nfC* z&*UMFx!Rv6f4hG+rCBFNK;kbl&zLEpOm*TekPANhk`|DY(8sIXi#`T^hFmS8pX;a` zcZHVU>Q}|EQczg_zH(bCUlLkHrQ2HuL~(fO%ZKeuTO%$im-5k#RLyph$A=$+8wsQ4QV+Fu>vN1`-OtsXPsu2JrL0&$3UMR4i5S%#yQ~u@ z(}*Abeb3p{lvtt$4_)kJRJ}fbGvjmGmTAz<)eW~6!pdmDoTo=m*>F2tAP7yeYbwmt zp(7{2v!I&G<;<a13!kGpjvH< zGnDYSJ7-Kr510QL+`GF^>&v5%CS9!OHW5nIcBdKx_L2I<;)>7@iS3T9|DKO z%tC?FZ-b5Q0T;kF8bAbTI}_0llubUE5nOGljR3a=5LZbBpv}Nh&4uu0{l=2mHtQZ4 z>T_*1jAHwG?~oi#F$aA}W?dm{Dy`K`w7UyA1snDTOEQnNI8^E@j#m+ZQY9 zjTebK{7JV(u9ZyNR8xfz`T!$_sqZ6HnvgA$f)o7S5ZCxeW*DD~70RbwbUS?!Neg=8 zJQH3DSjEB2&r`YNgPHe3S3eR*CbU_rlGRPx_mm%LC{xpXDm4*`rv_?EJ8YCEnJZOb z;m6RsA#;m!JVjIYP8x7GV$!nJ%2&aBTAWl;5aH^=!birdPC$u;x}g@9@iP$sg*E#3 zYqvT|Z=rAcjv4`ibk_dKesRHTe`=NZ}EHU%RLNR>&~Vn^(A6$(u>E!X9!25tJ%) zLLM|G>H&|5c|)cTFtV=b^>wH1i1Bm?S9d4#d{ZDt|(`ms*#VI5M1=8|i1S z3UcnjL2mWruTJiyv+7-~T~F-F8%`c5LYG4BxwU7cYI;fJox7B(gR!i2dN6kbz{=Oy z^gCnvB~Lf+b)Sx4db+7w-EjT)*ovsz+w|o?Xug38WK2%&W3Ot}sfwUdngC5Bf zWWiz?uR7!|z>QmP%>^F) z+G0?6U*x5QekjhCv!)ip=zLBiZOxgOThMQWDDC=IM=o%$f1H|JD6BjHiL3Dy_e@XWZr9s!aOZ zW%|2jVWc#$etPR7aZ3JF2!~gT(Os$M(WF3`5cevl8xo#^aM67fz-ANG)DusL9DIa9 z|62@Fd^;LRyi6QUQHUII+)HWX%VKM1tw6=k0+eZ4esO0^9(Qq?_QLhNadh}W8BgZ{ z$069so$-Z@fPv9?H@#F@Q?)hbSxwTbz z4{l}>iPhIWZVAD<$Ja%~<=Z0ckg=uZ-pyj~tEqcDk#Nfy!FxC5n_tqhT0c0wGHqY> z{x;A11&?|%ciXwBEyEb3cUiV2g}A4HIF0;ob8R2Mwi4k_CG3G~Z{x6=YEbn4`EEsb z4z6m@cV`--1ksZTu6MA7*;Ix35BR*!GfjAv92Jy>gXPD2rlI@d(*q`dqTF{kbx1$8 zm-=K~I*P@3D0SU4!K|--Xd*;zz)?EVcI1gCiH+b-hrC^^lakdUkTWwM{0F3n{=P%+ zLosFdRCgh`!zRf$vj#I;Mm*?&`)7e+L(;KGX?d@U^Y+d!yq|QD+Bwx_PZrMZ@6H!- zr9$^_Rt*r7J-99aG62c`NROaSwS-`{qd5Jj+)#n4BRmq9IeE&IstBg-5DK@egMeTk zWi5(m|n&OdR zg<~B;GTq=lS@Z$~y*Sn+ejryY(k%-BDaHA=TN}p$6D6ga5#zJV zL@&}4$UOnc-ca1wf*8ttMC!nCQ<<_~4d79F+2!nD+lOEy}jKm|!REY@5$C71j1 z*{jt%2zZ?DyEev)cm%EDLiPB@(di-^v>0C(+ac^beO)>!Z=yG zjf#1SIjdY;pN57B-&q$gyexm%P^*vW;~|3Abz%xel&^F#yF!+hOA=h1NKnm?Eg61- z$3nFX9zX)?Na!s@Jvij_25T^d7FGLTdTU2Y*Fq0sqlyJnko6JwKN6kuj+MTS&dRd|aNo$-Z+)YtYj10#^)YVJ&N@C8T z;M&W&NH~VKHF0QPQEF$_^eqOxc}(Bv$GhVyJ|ML_U=;e~&~UH`6Of2eH9hr@1h7s90U~}AlQPa`p zb_ugHeXd@p?O^EjLET78XHkHtsir!qYEZ#{{$BdKACe%*HckAx z&QfLXzN>T;e}%J0O|Zf2#HGwl_niTNc11T9#)!1AU-1kGc!FCJ1sK{ z0}BfSD|=dVAin0$vB{B!5QIqHLcl&K=r4={BuON;kyz<|E%R?`B`h(*6By!8~dL*KfUU-V>m*&pALK4EFvLg zn=U+|0C3tj1QC4O1|nfSdRh<^5qeq?8=*7sW*a&?;W#)5-(lJw4X%(vjsxe* zrU@`8i7efNT7#AwRoh6f-jkfK1qU5!UsHpR#d%>x9=4bx&>$Bsuce{Q-s`Lz{@_L$ z<7rOsbJuC_I74O52WIBWIS8N=0CeC1oQ$_J!+S{F{Y$Ecj>{ER&{Mzn%)WGY+Hvoc zr}|ijEn6UFwpZh@H@j`*n$w)QqQqh=ON}mU)4`eF+wbO?AZB0Gg=>%v7qPkncbnp> z)h}aarq}=L)6LfnV&+0al+_iSAQz0_rtkH1^{lh#Rc|EIHNIAQ7cXuE(D|Audv`yb z-E{vby|<6R2gl>N_9Nj($TBbel42y>P{^{Wdgjq~&waeY_mmHmqzshgz4JheE8LkR zclS|lTm93CC)oW*#V|{r%+t~QeSLXRdT$s>!VoAmnt|9#Rw4 zv)_`;+ZSgsSu;3Hp4yi3Sf?}~DS{oP1XInMFLsctB7R&l2AXWMN6F9+gM}b1OKUf? z2Q$2+p_2mW&pMH}T;+@v(p@MD-5)RRgbU^OxzNA{$tvLA8?X#^XyGayzJkvIqK>kf z<_-S!@dY=#P+prrX3w(Je9S6J%3Q_^zb|AQoTGX(eGiBUo=EBa0gQ*7(q%ueAX#>3nP3hrTpVg1!7Q! zX4f!RP*coyb0w`zYg-2AdMl_VdO5kU9pO2|s;IzrfGIB=55qEkjPRnefe}Kp-VuvD zshTMT5e0FqDQmgv)N$gFP;8Yjh+7sH15iYo_na_DaX-D0Zmqq`fmW^C7VPH6UetDx zi6OO9`migmt`aRV)4p7mbws*J6&CAo6ofOjQP?$19&~+xO9wcPF%*$Lr9=mEh!qet zCz0wDpgK#dya8sQ3yyIB!77~k)RASHSc%+{tdieyOV_JkZCv{-8tJ5AswHCS!M-u6 zZUT*34X>vLQlwI)Ba5XrE2eCC# zz`v}He=$?t;vlgUXNW@OP{*6kgUx@J1^atywsB{TOE{k?3x8YYScSpp&EFWU*GfD4G_7Z5||Fbf*D2O>0wz zfNl2E{t=j81V^b|>GZ-El(h{qrNT<3g@ilc{zh0^tW$wYORiRrsq>d0zu|OkGeRbz zFo5XcfQf~q@=dWQaUl@lU6>fwww5qdnaX78-O}^+*Y#)*>|TCY$U`-D-b3|{x6p!2 zaM#$SSzsALcHuh<%p+m)n+N$>-Wk&NfW^L6qJ%%&%|fgE>rAdjYcw1k3eiizO=F7Z z5Zswzr)zT-%71hu1PrQ869Ior-^>Q@a*Z+S^|nd09HUGkh0;3p$KZ@oOTewg)SOqr z3qLOqem3$oN>9+K!d6`1b}8$?FtgrE0|1BODzpq>g~9;=Y~pS% z<3bHi%!TdrnY0@bwooQGL6>h^yoi*F3#;3J8jy|Jq;vJ@3P2iMA$_sT`6kE6aY zrCSo)>5H>@mO*N9442ux;wr!Zv7`)i(27GiLC#A$p(;-8vQ6ST(f?q|Ru55KT4;ID73}Wd4|h6iNth9bH%!ymmlg!Dmr6nm~}n%63Pz!*oilC zlPAE&Z+EyB9g^ZBA}6{4k!k*8d6k=9RPOp)q&Bl9E)%w`5xW_jIrK2g{#~MJ_FlZT zO-fsZ8J$b8=U(Wvm6V_L`MfWl2G$q{uJ4uf*qQ>5tpxEThBV3ksoh@rYk3#f)v4Vq zG()Uuq^-)zB8RbsaO6UI$%y=>Anf{A#oOxFrh=PH0(}EXRF$e^L6^>G+N+1mzWvl|P_E@ioQEoR-U_ zER6$bdCqA0hw*VCw~+nCjE+<7$B$#Da%EYf1#&cBeT6MO)G)rtQogW%SJ79K@@aZM zEZq_j{?d2$SQ1+X)PQz(rWWlY|J4uP6w+U&*X&P`;alXIDlFdMalGsfp2cZJ zAR=uAwTFfIR`(aI4>XNT6Z~s;9}6xGLDtencXl1RC0Y~%Lwd}m@S$p(ES94%>woQ0 z7N}jF@lEo~k>zFUkZ%(F@fxh&>Uvhs%Hl|1m;1Yptp;-#aA~ocUE}+8eAB|(oJZ-a zp^{nERczJb*Z`29BC@isF3Cvyn)j$slTJlcav+;%FXH?tD%*6nb~j1UYQ`w>?tX=p7WW)x9;O^9MWqXv0H7akXfg##>uvcvNgM@n}DA3r$hk z20ST}|LpLEnjws^>n$*rtMqH;7t3nnK9{94BjZFLAP2EgVfWSPOkk>x?bPAR^*zx? z5%uGN<;K8}eK5WHBNEt$tO1hL^>}N#u4HG@FaEsk%j;rP0r0` za{QFb4aQ$kz_B((xOH~?){7z8W6eG}01K7@(6cbmLxGe3nvI`1V3Nlyk%Fr?@26AK zU62z;IlQPjh!=6u^a!l%lJRAXJn(d#Cy1+b-eJp+E+#?Z;i4Kd`uC`z9^W53pX_Ab z!+7cc5Jt35_$_*`|Dw+lK%ex_vH#yJ-P`AK`^;1Hd)>ZT4 zq-)H@k+izJ9Yrm{pe1Nff7dl*BfrUP2JiGMK&Oz9Z3J#C7pq2a{Kb@zD8g3>@At8x zwX*$sS|2qL8s`6_82K;32pjkRs>=ds(boQXkD&PH86tzl#01;({t=VrPY3t4{6!p@ z)6_=js+4MXnMyaAPS{&aMcK-G?hbM#I#^9|X{27EW!TC3eQ1_{0NPSg1w`;W2ULGw z_Bg;s23EP4vAXAH+z;mH6#aTwOPJ7wwNj*Q{(6$@t2S@lQrHTilZo9`n`S3=mW zc&CqjVnNwCr$PP;oEc-#o@?^%#rW_vKRcnrO!ope=C5P6E<s+$%G$KkC~=U_cV{Qfd8UQ2e18=&Ueb{s+Jj_2z550aqCs3i9!b z%kxfYJ$Ks4&8_ZC@SO7$C(F#Q+svC_|CUh|ey_ZQspF zj{RsZHG3?8eZ&k?_7(KhxqWPp#2`$U|6KWqEe(c1wA3Dxc4|**JSK#P$R$|*OB3xj z%9n+XMDUBlp3lUFHno40pWo4yWHMt`Zu>0)4!3j;_4x6w1W0Q`wH!C3UHd8Uiy@9h zh%LWqLt@GR%XVW-7HRMd6*d_NBQXhUmFcs){wRC%h^R`vtIyECq>`$xWDflF~lmSt|DRLvft^(Z0qH zR5CkE0x9PI0FOzW*))Khgfp$}H2PVR>2z64#x7B-E|tP(rppZ|hF&++2p_!?p@d`> zrim%huSKRf$F_8(mv-&0ROVSSrF7q@s0|Jn&IKIPke}f|zO)!WEwM zB4wLB>LFjvYbjN8BlNj9TJ>HHc{JNsDt*EC(lFq?zFiw3=F={?@D>+wP&|h zJ@;G%s8H4eIPBdR&0Mr#wRD518^_y@0uUx@!$o-)hMPthPJ5v!Rk)G-OtKx@Pf8$l zM_UZQ;C$7jJhTvwen?xs{9WuEe8XZ9y5Qa0O7UFl-(K)@iB= zHsi_!QeUUSQ&P~3HK!TS+U1~B-P;^RRqxFJwgo;ssK!<6GAQWU`JXNaFurN71mYh5F=+-mh=iS6_a7!dUUduo5=cW>mTQpOfX8}=^pp0 z+>o4BErzuz2=6tsL6nokJB-Gq*!-K6U>*}%&C6-ZSJ(Y~q3kBD3ZFxzXJHKz`y8jQ z0Reb9XtJ~XswZ!h#M8u`=PPysNRJqR5qgq#7lVWn$_ZYu$O*HE-W1LbvEk5|zPfp2 z#vIa#@=PGHXtJ|XzaUZKL?;XlC(;92r#CI?T(1@9H7OOn9~i$tYe?^6FJ+7~zZRzz zZLDHDkD6$HcK%>phkui%l&BMxhPH#82DRYk0H-c_5`YgW6V(FgCaX_+UvUp)o>pMi z`7yU?AJbc3cexQYNm$}c(8glXW{w_1Y9GK_G3*A5leprPQke?Wvw zj3x232dBxWCK{WUS77tdaQVZyK;zW_|ChHFLlVEFBFYw3BJ@frCBBr7U{gi7ZMv!y znNNL@pcI~3Okmo6(+^$EH!cXc{W$@BS~c$ak%<9OibQ#BU$hXZ;PKsrI|>&|Gpn8c zL;Y3W$BP=iQx>6bT)JLc9A~lNf}Fw$Q*JdDygnzPr+b@$i0=6#B*?l$IZcgKC&dSf zHI_cd)K)F63U*})avd#RfWQt{Nz9O}m75a|GOEf)E=}7|R}Dk@pzm>rArb!PNQnSic~q*61t`aPMW-n1psXoG z#Z74i6(zwy;#>sN3qL*_NK-jFd1?Fjs+Y)GnvFExaztzFId_|+hjPsTrj-m4U7+S` z#L8*Rjf9N0!S9)WV!RjN&Yops%4*WRpyWI<&sz!Ss+N|v(i%8=r!~&`Xe6TC9)^$U z__GBu$0P>xsc{#(PH`bJPwbqU71I!SI>1i-Yom5rVA ze~{+5>#m#J_X0+H^Fv{kjo8~#wAnO#f~<-;9`sf@W~ww?u1nZ#stdVg;=W1*za zojLVV;pStZ=B)oP5bf~$cpl?GmlcLfS`+@BLK4+N_J8h&*WbGB{*isS8*O<}dmTen zcDA;W601<72)aOuZE+Aukg>76#@W*72m|!x)E&dW_)-9%kIcN$48AyV62CCyCfC$Z}x8~ZoII}do=Ut6V3NTg?&he0*5 zZRw*D8z4no(qy54a6|*CzwAh0DM+xK*f1;X2wQ(dxkWDtesFu1I{Esd=th+t#l(T? z4h)MeZ!_F^w`!unB4$Aj*Tn=OkhteRRQ^CKb#Id-hIY@DTz8`p`K|^qh&>y;h5$IVEP3t5bjzJODWMAebc zr~_ux^F7}leXWkz+#(V6UL*PGSRHcpSNPhJrUy;R_s^8wKKadWgHT5>4&TMZsL<45 zM;tIX;Bn*K3EI3l8}j0o?CERZ3lFlj?mwWucjk`E7d0Aw4yjwRpjY1I9QXO*3`iD> z`B3I%2*Kz4oJDwF-2*_P4FUgs!dxXG!>t^B#c0}i;NAc2`hGOv`D2z%|752t{o>5_ zs0G>PA&3abViM}J7`xCQs1y9n=(wdM_w*~O>{INrT}n&qVLfrorLe6tH&^e$)YIMX zW-I3%2Ke1Hxzg$VX!Gasf-svC2=aPx*%lI4vy?iadTx{Z+0(7F2XwXz>eXZ)Wj`JA zD_yxhnfUCH-w+A*es;?WZEyDk807c%aMNDw?&W+x*6F|5mS@oSPV6@7{qQqrzFvN9 z{AG7D)f%;UfIQ}<*FBlu5D?^b@$V%9+V3A4e|-p>NEsIF^q=nzV>fep73!3}0x}e4 znG|<=zFY6)uhq2V0UE2%BVB3_!9AS0RpWi{58aGbR9Mrx^!hrrE&F>HuO2xND^eE= zJ`ZNECYt_f-8a6ib5Es&>+bnBw7(Ot-u%@?j7j{yyu^RmEa|;J#UYYx(;C@#5%S3N zJ95j2ClC#(i099fR-&!Z;CzembZhUTm~-3kP34Rh=pE%01q2ZEk7~JcVbwgT=+&{a z9fDBk?G6+?>X!r-8r_W?qH}yqs0z2nO*1>Mp7q&n(ylgH=X&PU)FDeD@}!DFowkbJ z`L($J4xr;_eZwY$j;3aSp+8Db=Se1$78b`&s(`lVj9SQ|JWN1ieOFOW% zig8-wkO3X}HU(G_E{15a!zl@|U~@553VOL;+IAig$rqcFFo9q_6$VTTrn8_m0{ zZW5=pM>e1|up(liBnUXHdTXywxN6V*E;x_Lvj|tpT;#|k;AEGnKyqGj%_!^&rBP*@3h%(d6B)^G zt9g0`JZ-wy%zq26%M3dGVgg4D2PSS#SQ&2jK|(+^UZF8o-sfGo?Kfg-^+wjaaXKkWT+WXi+o&vertr7<`Hh3{&^fUu} zfJs9n*BVuBdEl9iNR~cjV+#F-Iz+Fmg?fTo*RBGoiQ=jo@q4 zk+gF>DzEE9Sb;o9a;&<+ossXfWFE^^h&)NCbrO%T%xRGR-gjV&ev4PZ+iW{;-o8Z2=d z;`BS1^rVYVx{q0Z3dZ=GQd5gQVx!Y}+BWL96vsW7u5ZRsgC=8xWFU=$&6v=f{>r#q zL`oqFLdVDAWXd;0K@E~l~Wu< zyg#JVi=;&*5GQX?@F0hWq?OIiJ2?JFLqpON^?EZp>GEL<8x%xcM}Goo+;{p@;$*5x z5HX!emA;Xs1+`zOnv1snQ}26d5|&}yndk=*)i68I1LA*#ASYP|Q98IsHiw{NReL2O zN{Ku^Y$HMO+~izEk{E2&ffb9^v2U;fBFVSkt2#!}KP)%?0!Ji#`vp`15+S@MapVJG z>&2)tI|}Qa^)~$$_O3r83UVqZBNj*p6Otn&@Z{QIJ5cpRdWBxR6=8k>X^g2_|43T- zi1@p1rMD=rvEYkKVyi9cM$^lPlj?}J$eW94bc9)_A0$0^r(q{fK-%cvCyxT}E4fqs z?y9ur!Q|IkPxr^MUVicrtf0rG%Cb_emRq--voirZ<#ZoUtP7a^YLYDM?nHILIyO~o z33dnFAaw5C`v|o^fw1TBgsKE`4T#jXnD7!s;V3x4RERTbCNepS3KA~lWqNo&2mQXU zvcN=pdDK5FXaN5b&>6L^k&>QRoPcZp7{o6f&F73xKX)elh4tHrAM&|xc+_l(#Mg40 zRIa~9<6-KQC**C-mKs{uL9X-RhmZ*aWe_ks$~5n4$YIG7WEo~PJQVK6;Y4H@=B->0 z<7u4g+u``f!d!#KJai+mp!cbMaw%Qs8%uyJfR+xILTjR&0+jTz4^&3Ixc^v~LGK=X z2uPa2tU~qvdRR3nm&R|0AIWC#3RYGA2d5^dLxu%gvJ(;^{z)M1i;h@FO&C7BoiW{p z_~{Hh`3mrPK{7X$1Ko_9=Xy=$I7TTrm{2! z&C~?#ZXD>HY)By zL54={?n=>JyB~q@n+k@DA;URLmFR7(BNnbKNu2Z%;3kuVw71uICFKr$Mtm6L2zcSd zw&Hj!*QugJ_HMz3Bc&*Z7GI2@liHa5lKAS%Vt0JC%T+&7l;6CETB4yK^3eH}wj?Qz z@4oUzuaWhTCcG#)<8OxC_(|6}HR@hyD}*MrB4bl8`YybnWi>IR=3W-kmC)C?NBLtP zF$&BXa5;yqjoZn|(NVoMCV<^xGSg!t`o{91{=>m$N>QwwD9*eJ#A4ytyO&m+tEc=e zQ3~b9&|Y}__n8on8fv&8(cIz8a=yO-0zoNR7;f}+0<(y7`AVT188>dGdi6g%1F?=c&5GJ+r8qli4gCDYH_<<)lFDit zdo8hM7-Zq+`cH<_&`vS&Y1ZJTL=x@@#$Jd-M%g5c=Co*R(>9GuZTU0KlkVF;Aw_Yk<2$wZu|67Ke|=rbm3YI#cPVsHRGKfFod4G ztEiRCg?HQCFHe1ZwPkURh+(`>1cQlXh$I3$slNuB5P55yqBd{_YT}{S*V#Yb$`b4? zwnY4+%c^8am%kSh!L?qFg{1suZ*3A>C!g49A;PK*j?=cx_GF$Sr2>ukri1)Qe0wxo zAJiE81(pjc()8c$&YV2yu_VOQNNoSNr-Pl9Q*fP7$M`+*Q}C1g516?E*F`wv)Y>H{fhyv|O3m`L(fKGD z?5JFTiV0W@BblUI1>_=cxZ%|)}}53dkdVrLfu?)SIR~@=dh^RA`E6g z$dTXWJac}S%YXoptdL+2dIH9hJ}Y%JmhCj84%SV}fBh;DM(Ogq+3g$@9tO2vi8I2_dc1kx3*0&jnpElZr|5y#Pj(<85V?!7~ zDE^5!%pz=B3^@jphK7VM=BbEkkvAjlwzckY;g9U6i; z{u4ZOb=yo7Lj)hjb9Z=5m>~-iwhSFm#ygb(-5(&&8V{C0MvQ^9DnOd!bzcxRyQM|S z6CyIVx=bFP3+^#nAKM8C@41D6#bxT~Z|Tnb*B2DO=OG@O*3vl!>j3&QJJYxMNpA+_k^6(#Je+Bbrd8oX&knmtr z`Xm>~OR)$|{5P9Ls}rpXFQSr%$1Bx56Ac*e8}k+uiuKZR4b81a@{?8Wt{>ska+@q& z)S6$Eijf&G#*RXt zAWV))WV=wtVIrrHCF$K8-+oU>6#7{-X2vCt%Mh?7Cx^5y^dHmMnS0egLKad#U$hfg7TaIv3HJQBX zYwKD`34e>Mo&pu^O-iO43!Z<-JeWSHakv!pDxET(CKz>Cr^Xm^OGpX#**Y{T-GX;P z8@Uu+X)#nxot+p?6_dCbwVygWtFiywRrlg7{FGjq;o#CIYH0ljc_QLq*uX$V3EO-5 zK3~*(fQh40m*co~&_r(&zQdl@eEnhBWo&`o*9UuIuSnR5y|f+lG> zY^<5O(1kHBK1|k*xP}s9cy2*yk=KD84Tlh!Kn#_~;~j^zaT{{kpc~BUxOaJ`=B}0G zAX1byH-W6f)Y1`{#G1Z4<;_o7U-jc<$g0*s2ejY=wx-I$)m`9@aM`KAf98UcK`3n+ z;96olO9S{PZPOg`x!#0YMw2$F@fWeT)m|{OZ;7|`B|JnA_eKC{-Gu}Al#isVNkQ)ktmu=( z-ISBKzYZo9B44vH?&GvVmx?kleGHb?*`1;~*MY!-Go!9%n;T*n?MJefa@!WRuC7Ig zz_n_f4MQ)c@^&Qkm~~j%3(|T%>DI1a<*8B{4BsQGC<>iIi~K`OCA6qboC=2tLQuP$ z#k}tXLK_kB8DOs%QW#b3l}gs)lrNE_8(M+XCzu+SG&&1k2Lq>M9l4pmaB~%LAh~NY zfk4%8{0#ldVMh)_53Vv;Z!b;k>%40po&V~QyUO9A;p{HadQ%gT$`&q7sKjGj!gE)Q z5cT8GJi#OU%K~}*B?IPn*ZaEY;V&BwMq+4~-f}4ko|(z8a@9HQYhzPLrb!i!ycDhR z+fnU_k`94@CQSh4228GeI~@%L^Ry$%0GQO65A77*%cugNy`H2iFn4d=8WW;fET zo1NW0cH1D<h$XjR;t<2T>-^FOM;Hl*jN6fa%^P5)XoUz~!jgtqik;C&&lbJ|94310eOe9T#={j4>^hqGmc`WW%F5%*Q z)>tfhT$GUSmn|#9>7hvrxUj<4jMWGyLk`!gJ1Z|uT^S_zag`Oed-Bck8Gi&?Ow#6}G#5&$&Eq>XX}6&lLRYeW&L!?ilEr^XYV)$F|ggODd4lRMz>*+AZ+nKFQ6E z84UZ*iz>`q*%7k`GOGCdqHb~TGe$;iEOm-{av&YGnF>y0A+L!iuqORzmdVI5&u*B2 zbFKI$pG8Qt3Ou)PB%qns8E&HU#^wv!eOQHmv zXq6v^FOQ0z>dQcsvx4rEuTff7>C?zNz}l>7NN7pwGMByFoaGT-$##Jy|Kzuc6YLc% z`z|@QnA^j)qvA*QM?o%go3;>IOeqs0&qR@Of?cJynY~VSJH|_3Y+;|(#6_St@3S^z z!qK`N%_%!VN<#J6fHeJI3oZ{md=h1+j-|?wv*mM!7GKg9T+AF&l}auT(+$@sFW!scsx8`psw9+$4m&=pnZD$( z(I9=4qS}OCDX~WSf-=^oL-)4a@^SXZOWP7A#jJ{G%6xbAzfMfxm?Ju!L0^--yPD8C zX~q1w(ehWTHZvDfH0HttdXR=}fV55;@lcasYN3%%=x^i9Ln|+N-{XM!xUA3+T`3N(WdH0$1*`%n*(r2omp(1VvY_8pZz38;ufWy?0Kz87X>$QmKT|8q*5Pb^EAx_LvVE#pggNFDhrZ( z{1LoqIUsbdH!H6qPjRQJ(-!-CS1TNR8p4k?zP!(c%`U=QO~U1bIyPzQIGoED%{f{U zx8B^`$Eya)FNLYo?=-XHUf+H!A1;Ic)fj&6ravwYy46$x3>NRuLRdpuJ&P;B(*i-2 zvn-usirK;2_%wIh%9KkGNJX&V1MEyg;uh5^6m_=BSutDR1(S3i#dMiH00JtxHr_4tl+eH;V<}1RC3z9y6dib(uhKt68xwfmIP4>m_ zGgGbKD&rq?Kp}5ni(wA#pKNYe%pes{*i^O$!f?0#HpkuK9s1e{Tvau)Pk5$Io3jX{ ztlLfaX8&qlSpt3NAhe)?(CeLbvY@^`o-IbP!U&DvLSo zq{DTsj&J2jUW6|TXJC%FbkO61Pe!}vwhN70R3vcL8p-3yHwDbtlNYH!nik1r_2Q%U zXkd2d-B6X8W=dLz4Pp^*dm^-XbeqW|=q-c-2E0_vQ~jW>ou0}w8r|}9(32U{m4}|h zt+jh=Xu=0Ln$!dz&_CewZ#v672hTHprnV=7UCf-hpX3w3yMu_1xY`eK_>VxzQRe*| zew|rvsUWY1Rb;`JuKq5PMHhF0H+OEFLzB)2T;oTFi!qIW^rE##IfO~>N)v~+FDQTk zbm&`Aj^3m`=RqY6fy?YQh{(!^PzcYvk&UieZO9$Ush5hI){UGSJl>Saw)W7Cw5hfFFT<)GpTtdty zJeN&K#lTxS0TFXQMjW|up+8Z>Eo#BgO!(@r!qHwf;{Q0otV1r(7L-M~({g#7(S=&J z2wDj^DM9?AL%ESZV;4wGb|e={zERE$>`M!^3!!>7{ovn!Xy(QhFnefi&`|#caMz-* z_rgcb=zwE2Yr!OG55Pz&78I1AU^LIS2*~jbB^lhePdnT2-5JO5B8g<9dg6)9S@46B z%=L?fNZH^`BjkB`{0;`n{KqKZ`tXwd5&y0b6K*ardedMhAHkve`{FmNOSr8Ffi}wc z;L6yGfEQgk8;#=$#N8!@>?j5UHSuLvIL1|{YONGiD?TB@gea;V!*9s57=;VC2>(p%9q=j%l0RUM-&xb>s?Ju`GFVA{91-Qg@Y71)1ol5!Cm(#ZJg!Da z;ZhzLzFIC^@k*{+E20f*olFR8!*~2nW_^mA6n8K?Cns9w_FS>Jw1j55*GWBwxJ?-Y zZ=Y(b8;@=3yW@u(doEhLkkSQ85Hp{$M%6FNM3{B|WUXfPT~Ji!%`!1z4yaPZVKnXc zI5JYL9#d==hedEJ0zKn6v@upO70B4$Umtn_zWD;DX=$+Ok)(I6-0pIfxwCj>7WVB~l&OGwi$dM`yf@SyfJ(-wqVDI*!}k^1g(u4Q|mA^(VB< zyY^0EzM@!ffYFjZz0MQsZ@mwyen%L<>lEPK{H)OPjZ^#Ar9Rbfo8%S(Z0jl$Oh-6) zY#M~V#6=*L;oSCv9N%f6@ZVYv?^c)w|3XP;J5$G_v<75w)3M7Sy_0*dVzb(zt%}ml z#25Rg%d*PU<)Y1QVB3Bm{AT4168REg-A@BEwD!dU z*!!v2YIxzun2o?$ZlPL8B*ooLqt@W=G<}o7<~sHLqp&bix<6;;FQuxF*#N zOf-bwRUT{%aL(-OxDb56+-s7cy;hyTiS%Jb@Av3h;kH5Htid)Q&z>J0&r!yJ#Fpd( zFz4}=R?z(g5z`7?KjFw+Srg9fsq5uM|A385saU&wwqeOc?P>DZ)n{wYG;TGjoKUz{ zgdSApMF@;bPO7(SRah|L;f5R9y1yTUdkJN)wNRk3X?95Qm9{VDfe8wPVi>&!qDQ!P zZ_r5e-=kcePz5u>A-)8fx~D++&$S!?Ofhyy{A_iveod;?_JTN&0a9_nDf-IXjZp0#AaFw3WadariIhN%W_PBVUVlkh0u!fkj)>CNZ^GLbv3jH?;`9j?CwkM>rJoPFR zdey!%#XOPLowEG;qwod#ev%r=wZNI7Xr?6`#VNiK6o`rQkj3s6NE`K*tQTj_pGU>O8Cl1P0^Q|Y zAWNf>V(62j2ImO#$RoGZyZ2@4xlX_BZVIzBp3%yg@(c>`CZBt^4Z)vA*t)@RbY`LX zUMg1uLp>~e$A(+TBH~lA2LgxTW1YHKc(9CVX8(v|&5e7@VstXT<};OPj*a>8hk~CS z$i6?XUdLp)WD6BFl#j~*ddMJzdw6Ew5Uu)`s2vy%N;w{K>;ziWu>`5ZQu;NFMeE_# zsfmo*&|!)r2!uwg0Wrp9<}7A%OHDXcm0@t+b#ERR7Um5uV{67zMRQGl$b?u2M0zPo zRu}{l^#n@h-G@2)TmL|J@4%-4XuRROSn$YFX5(p8)v`foR45`qcU=}Fr06H{gC^gfr=7~$&2j)U4d~lRP6dDllvI?82f~apNMSB!VF@`652&?zu6_rM_4w5 z#m-53=@?Q?>}JWx9zPDt(S{7LH`CkLH??5pI-Xj;R<$UZht) z9gTvmD47kQAR1``;9v$1h;nxv)zj~x|FFH^)bK-ScUAle`zW4jKtwZ56_UNZ7Mm?Xt_I z8sW8l)xBE>Lh8C=Xc{TX+n_+@Ez+%JA4hP>6ho{uP8B6>f-vTIj1fK0SO33@`V%bseZ$qG!c>f+m&$iQO)f zB|Viy51ds9Ae!7I{nt2VKrIW)i}Cgr99shs1!vB#+zlqT6->}=4?C~4r0m01>3Q3j z=O#<^F7^Z=pVo8M!cHB&meH<*Hu{V5kO~CCY34s2o!~N}N={;1q z?$#YR6v%rU5+x12E80=K2~s+EZ`LW^fH7wwVnjVHa3x^V?}5UbY?UtD%)aO_`~{Vr zGoj6XY4Ld@{}(y0An`NvY$+Pm3TwyN|#=PG)Z4><~luOyOv>?n1Y@PDA} z1=>#Q0Hql>YI!alGaVN1jh1u~GkUjBYKWLCf*kA#}v= z`>Ndru_j78d9&VcCP9)Sxq0S=$K~d6l8j+s6d;s-+zv$bGAM|S$wer}ia@ryl0I1l z#eyVTsxM>8yiuq0J;@aV*<)#R$uM~K-5wEY`)@Kt;=sDWrH;J5%W%c#sJokEIxK2I zfSCPc3v1G#*n^t^ViIa~!;a{?&tsSw>$ZaO&N*E=p}O1G*d?2N)J9kQkQ_pE0~Oy( zcpKSRhx`oqUT)DE@voU>Z-$N~XPt4z5Bsr1@`o$-i3 zkU>)o4dI?NrPeCWmkD-C_HvK7P{{Hcut+pz%cY(&KMv*g8JX2?(wlFt(V0cKQ?rOL zag7-CGBkPp8Eodge$9&1Blu;dbLLjk+o8#|I_u(Dm*Ml2xoPjFSpupWX_sj zVHi;Vmz+=EZ2cCnV^nBQl(wl20}9sNu0ZsAxMuTkxMnLnFE$=oD@3!JMs?3()mG{A z`w7@B=`YVG6Ig`60psKB0fayMSIb;X$=0b6^sq#@k*x$%XwYMPqx(u?V zp_sxxaoTjdYzVKeaCI#{`kQ|`y>!{=VqbRvZsT3o^>z<4u3y?4aOoHX&)J0@v8{g8 z7v1~Ycy{oP{zlIZZrt0w-~YC0wCh@lj%9_K;%pq48KyGx$eQE&O-6TC@{4B{;IwBu z07web{O0tH)TWYQI1akm&rkj)f4i%B@8&p%3cI>q8>+7mYXiKfcD4k7vFbk0@a}Hl z*rK|mWNevSWbnqk-!RNDpeqvp=xRvEobnC>`*T4F^EWEYt!ToPrp+i#ZmtH&=|Ju)RG z_-j{j$3Cf`1*6sH(ji4Fk;xBgW$qckFW|%e@OT}i+!>7aVAYPWul!3%R#f-3h}^N2 zVWyNA$dG519T*i@g+=sxU`5hmMc2tl{0gd{fI;K6A^Qe@aBT75qe45#9(=~`5ayi% z2H^+9qZ?+HXa1<$nrK-fO`93|GPTeiu*t`TX)7bV# zs#fjRVx)yuJa?9k!lZgF_e0!Wy5cl2-U>8bcxKecV1^0DP)V!Jvpx?fO%f+>uhs48cpF=Whr4jgv_OTe zK);0xjWJ6z6Uveeb-~sDnn(L||5)#bM3J*Ve;0QxPQ879Fu5$QxrGM|*9nn()RG>^ z?fVMnVloB^GvJ%0j=`E3zqu_$osn0vV4q}6oA1aP|p(h zLrth%!r_6K2)@THk6jwH@MVvulz$gLd4Y(H{a%O~m!3#g2iuH~Tl zFROw4FjAREt9hnS88hQDaWF@v;5D?0dDy|-s~N)xqz3eglx@xDv29N*gksXf(u(|L zd!|zxP@`U~80kj)pg*-v4j*$jATW{fsqlQ?@=fCPuX)a!`FDY52r>`3iL-5ZB7vMj zXr|GdOHQK7PoCjQaS~j?#29s-59UMUm5yS)W78V616(Ba)UE3cAJJy8TS?x3-F$>p z1@Kqxw#HOJTlt^_C^SS)XBh;+76c=os8Rdo!Q9Gc;=>6Vmm zp_GR6H+>+_3|xT28OE_hsiiz3$#=`e)@IzWhswqb5-A(}gyep5T}@a%W?Xy<}HM%5fmt5|Lf}s(J6S+i= zwNRfhhBW|=n!csATk3+@eNI60C47F>9-XkvOAM1roRBRs0NNYQx$_4>NdIDucY3g5 z3#1u@)IY$8XHYFtBub(_52HFPm#g(+E`k^K8oJNms*SsdBrAx_7!w{=HxsYe+7DYb zOi#*_+$y5`3A2J_lUDyegf z&2%#f7Yx6$kPqXirg~fFJ1Gr;9tZ1;>gpV9tmBDA3>#@$#D>fw8`&HMHs!d-dDe-# z>;m*Q4Rp=ESO_9G(Pq0f4=JiC1?=$R+)E%>^{)TpA&_jY9F)EVhE6c7eG?<}i;`1J zf&&lvRUwKreQmjWfvrpNqf7^e6;ke0-h_bO%pAMh8srv27m_BF(>F-hNj{Ya#l*}! zA{Tr)0(*#W^9>{d{7`5uLzd{$1x^wT_Y;Vt!M-bNDxbLJ(+z&+S zn~!m`W}%GF%$4XLA;6hCDNFrC^}h#eBx1Cb8{Benl);viSwvz=e_Fs`}3C>nwBTT>y+bT3kze zEM7lUzB37c4=im5Tq>2NJpOYqQ4nV*I=Uvi2#y@r){!2eg51vh8S8Lm?^ur(qvfFp zPKbqnfXI(1hIK~#k%CIa4TUu@MJP$Gq)bLXFfsO95yd^v!<;ZK)6V&a^zm4cU%z*B z4e&5u*i?@-6d#l-=kH`w6WM~bKd;K={<6>XG zWQi)d&j{xXqO&9)_}O&*dwM0*)=a$FJ@eOKZ5qdVmRv)takX0e*B&4$DkX!x)WsC$ z;#0C&>&3yn*7WfF%giRfy{Gto|BPRO9G(3NIv+Dn=t;CQ&B9D~JhCt@5O(dB1J?}^ zv6hX(0BIpqQKFD7wH75sP4=y{+gZI!c5ar>@#y`mUyd${s6mYb<(KPiDx3i%s<(|F znFk`p)>2xZEL;4m3mQX^EzrnFvnnuag5q3M`_pbhE zByjCyfw)XQB8Kxi=3s5$%{9tpmkSAmUc8kZ=iiK?M z_)vwvRASRRmCGo4Qt5*q9z&rkq-px6wRysbj0W>jUcOXa34y^Z)oo7Su-0DHd^5x3RdL_ho|&OGeN zgD=AbWy=9Vy0-Aee)5;kZ4@az&1eazC-*A$l4C%=o8^Avm9G)e>MNONwPRY z0cTm>qTV2>D4l{*$P3*$sT~2JXwcgrWR*#BIXxH&$MIp^#i?7)yw{WZC%)7j+ra7HO;%6epq24Ao(Pm-&u;CoNNIv(4}(*WN%v5YO3`DTcQ#R8&_=r-HWGzd2x(|p$=wF&rQt5W6E5a6 zgRACAcl4^OpxFT`aqm2k$X=AhMtMu}QqbvZ_u}XgR$0~SwYE*vLrCHuIx%)+cd*YQ zwJkzUA~fV2UxtPpJ%aWY@6v*=oAGZV0K8Zb7{aobx510y7gV@@8*UG2XpBIe-!j>c zt@xhC*-g(rn|n>8xLvJcAr0_cHyK}GgpTaftgXOw=N!OwS>m{vE>ot5ACf`YLECy) zP}@$^=q){xn?gyJKz?YlS;){n7#(W@Z{_o33h?bhXp(_t4&y&QPR|~rC$f3TXW7b) z8gC@j@JmV9nY_!D!Ch;+bUX(55sx6FU$I8l{04!u?<<}AWS`(ITD~o-1r%)K@|ZHB z-!tp5SONF~`!HqFYb+Av^Rfbs^?fe5bJ;~nf3ck$!HdrIXQZ)D3ZE2S!+tF97GTT+ z)g7-{kqiE%qXN%AY?F4b00d?WCA$JFqY~t z_Ch*YqDI;+-GZeU>ZB2gNo@=gM$=B1AGOr>#OtaP@={PVHn&K^GqodKIL?(Q)NN~O zUNZ&ol}uQFjpr-Rs)PQTfq_iWbaPS%Pyz4dDeU_m+dOMg z4OsX5Y7qGwVU7=ig6HfOekLMC^npMk3;xFv>b03BTpiLcIj5hMi5h*pDqygQo3!TY z`L6?P$XJn37>0dQSfFJJ1cOyw)w*Y3o!NaPH{lbhI+qG?+9L7+D(--ob?V zgLya_yq{KWv>-a9~llZacPZ zI~{jy+qP|c2OZn&IO*87ZJQmVW8?NY|G9M^?s?l)>t(;JsyWx3-x#HrD>f?GW!Uya z0CfG(;bt|uUq|9}d?d(H#Bicfxn$B#d%wng<}A0g7r2XzlJK5Q-m3@HI#h8EJHzMV zBaaSpDzY*t^M!a8a~-+1yEpEdWM6C*e~+bxASFph?bHC#Cf5Ukk&bu1gY5<@VORHv zFTwHR*<_5d-;y5e^a#k_{wk9p3rbxzaH^sn48HiaoW%{l5lnwb&PpiV)%39xOHFkF zxM{^iCcfHsl}$8J8FEt;I(>89{wB%y+B)3byd=pXD>=brN~6i2ktAEv^qn#ufC;3= zGnaU0UvfhbdS@Ho<|EMN`+|o|w&*B>F~6;NB`C5zR)~TsKv*HM8bAm<^0mGMPO9!e zEV!F|SBjqTQsE7-5-I=OZYNWGVXo4<$AC9-ha`+#h8nB*k_i zq#iyXLe#XT7mf5aJ3?Sl86}qjK=+zxD(&c--LI1)*jS2*l_Gv6d$YEYEAEuH_iPbw zELubXC4rnAYA~~qA0RnrNO-P8RuPmQ*|FW52R? z0Ff;E4aG-XjEq8ilL?Ds8L$?8HZW zNU81C+{8K@2)eUa?A^?!b7JOjWeCfj$;@K+S^Knx8}fN2WX&G&#blW(UrGBJ5Y9T? z%W{u&nH}k< z?A5jixM5+U`mm!G3SAO_svCY#8_Ad~|EMX>NKW{p_N6I;DcqkRWcWYCbX#xcV?GBf zOa7jmML@Hj|JkUz`fS#uWP$nA`#VN$Q)8mvUKt2IN}W|CxACLBfv+QP+QGNVQZiHl zULqiqBbuSgUDMCT0vn^#@8(XxKq|=K>lHuaBUt^fz5tZ7tZ&X9fGyggwso;v`3^uA z|MktFq?by$vxRDj1iK0YCGQ_4X}bcG%m_ng$&eC=M*dhOME*8Ofb*B~Ir%4EMVS34 zlz}E~-kDhrlaTvtSIn^cSw@B_$>Pvy(G^m0{_QsM08@T2=KjM1e9pJELP+FHH-mi$ zs8i>4+dDgncod|65Q+oN-w*ya_Fa<3TFYiFMwxhpD_3sSIbYjEFVeOJC*H& zj6vu-W{fPrPzPeM?ya|(YbK<_ob@}2bZfh z<2qF%)Q_Qt%_Iw|yXxCZMrR3w{!i=FfPBM>DQZhOjNhkNcDIy|_6Kr60Ou{_ot^>{ ztqE_m9Ix;jxC`;m#a0bk4Y5qA1hIN*7FU_^l>La%#Q<6D3G$-^MY;@guY4CXhJSwD zc~LVCO$_kH+dY$H7?mEYa3=FQx0;JMZPYSy$x7X7nFG81w<-r4nWct-ii;5#$bIoZ?N)iX-UAyW{=8KcV>%V@uX zXE}x6zxxBnQK2>Cq zw@U6>#+7{x(uh^3?*E|_IwkEu=ho`az5`Xxc**HGM7R-XRg z&~{3IMyJuvH>X~${MMgM<#aBBKQ0>u30u4>dUR=L<`BxkQ{vl<@aqvZ8=2q<^hny8 z%bvpD2L+R{dL&`;3?iGvB&-CbctPY~jFoO$#P%F($77<;d_KEBE)R6gN}*@Hv8m+s z$1?KNxW&2tDup6B#2?jkKAwJL#crC+*?T1eI*<1TIj}vkFyE;hqTJQMWWd@A^{-&` z+o?Fxxk~I@JA@N;w07ZwQU(ZL*3uxbiS&3YwF^f>GlT!4fnAn4jh@KN(XP@O$SqeO zQ_1M|-)(G*D>o)Y+OlHU@BT}b%T7YHq|_o*g?{HJ(CmceUAa?1&MDeH&TCcaf%fG9 zVv@yJyc@t00`xjni_$p?!V8uV(ibw(xiv^GWZo0>H|$i1*meGJfyeBzGj$T=xLZb9 zgMBkI3k2ELHqp*04d|()RY#M(;r3D?i6^+8MfVzO*u*Dz6K`)-}+Ma39@WJRt|(Ba@DLL%Su*+Z$h_(rRWELh=GI@C6nSd zXxxOKq$6$;U4v$*JdynkC+1%4_z0XOi@@OwxZb)AzaoizEe@PzBFpCq1gTvH?Cc53 z*jOQ*MK5^qo^U>uSNr=uYw4p>=$$_uhm;nTK&A9jhQK^Be;cK8*9aMmdr)>%FlFlx zZQsKJHSx6^T!jHMQ#VQ!J`O{hP@0(r}z+DYM_Ku5=7x&@Lu!P^#2Lg~O=TwS-&@#qshvxthC zDQ^kJkoD$+bwx>CK|marxjap3icE{hg@e#FmcAn`ixp~ohY(4Z3V|St#VAu194+Z> zVL6eZ&xt!wWRrzv%C`;%AkUi+;{IISF(LfoC@!P16$l=!z#a-h`mEOdojQNjdLriDR*8Q}H94yU4SC}&RM&Cd7O z8ihntB34mWg6L(~Vf)_f`*a%D&>WPOodlHWuPKt+hBlR%9S1yW0FI(RmIp)-URXnj zYyJmFJ{w5xC+7x4Cz#BAu_Hq1J1!eI5u|MAECN&h4pOp9o+V8bl#SV5Zue9~Hir{0R~-)kS-1JlB(W2-&x=B_!FpykUoFBBpV*t8(BA&H*6Y|+Wov%ukZ;ekbdVI3L)miIcf^sp0@ov6-QynKkSSFec9~rn zLfZBgVHC8;XnoWU9TnmtoB7Ef!qdMtg}qFYWQlhie3$=-07|E0ZfTQzz>&;vQJf3P z9R!WwjD2rpkeNhpw~$PLn-+Tduq>AvjvWsD6DOjtwHxSu4LyR=h{&4)m5aqqJth$?(exY;nw{hRHi4{h@ z=cqJ-Y+d&1dvPo;`^4fe6{mZt`5L5zpW5_t8MwrOz(@q9x@;GkB$!thBxFpbB&_)6 zcn)c)-!oY0Qo&wROts?P`ylAVKv9I75b_fRF1^cpF>JLitEGrpc&?k0{bJlmL!AliP}bcZ>Vxt$Pq5Xu^1U^8gG z2AZ-efXS1TL`8f($|^LkK-#)A3cKgm6-czw)y6ddV7D19^L-yJ{$|vUzW=itwe-B^ z#ooZ(S4^K7U4D1NS1tuH)`P3gCms?vRuhXdtXwvSD(D-FG&g%U8jKopg0_4yJjTUz zyKm!^hgidEm#+LEEcxXv);jDXx{P;TMFK4r0E;^1=s$08bp^*pU1tdG~d_U1a*n$6>*Ee+~5~A z03+{jm-A?6hxQ1**4z8^yEdRV&hMYAuZzLyReW9gu_Ucy4_Hd!Ur-ijw?<^$rH>X zoTUf1Pk;4mK=$j=!d49mW(bsCA^PkAc9FKm!HCU6rVB5#3>jw9_56FGgwODAP92xl z1&eE?bPy1G^D0@+Q6*ykjs#XDb{{oiyx`;_kXNVD97=mZIYKJFkj0z*nkVK1SObB{ zTN}r5+c0X}(N=*_Bv2P%XOJ8rw;@bmA*DT?9Uq51+mdl~|06t2OSdA1$7cOsM$oJ* z|H0@}16A7RasM_-zjAu^or$c=`I!GWr^Uf(=dG+dYC|#Y(*=>jfJ$rs3YRPrRBlco z{qi|(l2P7o6Q6r4@N;r^cPH%0=n5NQ?DkF(=Ws&DR6^O|wReC;!^~)tazPWf^1f?r zdtsh6!Y_$3!#^kYd^*|?!|x2yul*^mOrI)62tfU<+;XgNcz&vh5{1Z;v+1zExjWeD z@lGkrg13}tlyhx}c1s^-{(HTW*)1Q06h#hu5%rPN@q602a7Rf5LeDEczuKUbl=H7y z!P@OL?qk>uf-|*>*@((NZ%*Fh_2mWy5edx2$gSfh+>NuCD(>b!-;FC2ni%`I9`DuF6_OTXv@nn(;|TfSWV_TeS2F4N+w^^<$4(|?1#HDs>V zWyuMSIvU&lRNRnL{l!`BVe@pi;L0q?)SHABvB~&stDBp0h_QL+qh5qoD;o;Xr`ReIU3~dZxCrb_)r+~b zIBb}^Xm7}me!Hy4LP$cmGCTZr>@iMFzxQi#NPfX(`?I3{E#`vt1l6Ci-Sz7N6R6)c z&N|dAb*{{{Sd30JtAuo7u9s0OGEB?UNZoK8+C1@~2G22bPAJHUHD-uSKtBX4^slKO$KTxhRPv?-r&YJu#9^CV%-KyeuIm45o@giXT)1$uV z`~waHx0pa|?$ym^Vtabs5*86{5MWPb;YNv<3GVk&s0?T~7l){^3U5O*3E^4Nq93kw z!&G&VFO=*rqQ+PGLD)A)YL147dH2J^3f(*-ZQ2p670C(2xQ_2>D@KqitwWTxpXQNk z)!83y#kX{}(FvWGx{c{2(%M zY6SJZK7l(k*D{52=%xS1%W;I2$bAWS#C^W_ZrVyWe}H}*GGwD#4IK8#P=A^RKfLie zss~+W!Z0u+bDgZiA_eLlF8|cjE5I1WS*{KYS0_GKHo88KT8QsIwttR&Rt zcrO(AD0>!d#bD&9!v!Ueq)vu|GDRN>TaRY|pn5B)QH(b}J^S1>$45Sc=87^7#06Y4t7u{}4_o`hiMeEwR zB#jV7Mk~Wb14Gay768JjjS!m}gLKTkq@a|zn%b_diz6RCUmz`hx~g@p5j1{6#+jmc zM<1YwkFIY7hO~TVjfuk0elN$yXOiFQZYcXWi`I}?kmS*EtJuWI{ksi0CmZwc`0~a` zhs(;w0KGVG0|e)SX3{Yc-c(YRT@-ViceC!n$iB1zFwi5A2ehR45H}dxi8MKO5`1jI z7LVz9op3y0)i^#b8n<$@eJ8n2-c*bdRUW{F>oJA8_A#B+_mUg=QD8l5swN|W31>HF zYN@A(=0{fa8#6i4kh(X}(J@N=@tMhy>cj-{)du46A{ZNa+rb>3s8cS}2b?s_+KJJ* z@Xzq*5@mcP4M4>c#wR-YW9u>OHA7X9p>jJ~x2TY>b(D^~kUUJ7)|aLIi-e=h+vx$p zf49?Bt6@3iW6f)rdur=&y|*Pr+M8p6)i8@TFk~O6$qYg`fsu@vVg%FQ#;PR<~)@->A&Jm*fjwo zN==TU8OaQXw6>Wjqec(Z!=7ExtR}pr6+%A*OQxI{LQ6^6>PF^0Sh=mfg`G0jW-A~k zQ|&WWaXpMIPO!QE98uNl5lcy zjLnVBssYv*FydVhK-e7BiZ&??WbtbCd$XrBh;ZZ)XzB z?sri0aQD0QNh;oR-CFlMl$0P#$BNs7yN~T?zQATJgTJ5qD=3j05f}ekcP$dC5Z#s) zdLqKUBZsGj5vdshXy$kMdb6_R-r0AQ{yma)y$T?&1g*KSEI55d?--hWbEW8QeqhJLh%_zj~0`=i#Azvqu*#_8~Eu}2^9?D z9Hh}C4KrF`$$f>2I3n)BO~`dLMWQ%9F7EnF^q0dJVOl=OKlz`DI=u8<}kJ(2eY z3JSPTJSNbJA`>p)uCPC#c>w`O*1c+vcQC3lV6jY6dnLb#Oa&AiN5|GovTXkr@?<@ z{&s?39>VHydgjo^x@>%rloa&4j}}VK{6Ohu7fd-cDw+Z! z2pq#V;lqy|!B<76yfde`bV~yQqQ{Kz>!^NbcZcEB5&Bnwe*vDCh*j$ zTl%}eI*06~gcNoC;bTj`>45ELJOJJDl8u z=vGetIKHp0Pd8U}Cl{MJg| z42`GU9;xeC93$K@?x!la-IaLI9^4@8p6loZ%dUi0@tmqyPReZ6TK(|pdIIQT$Y!NW z7jP<#_17tK6QcIwDikxZKdcVs8dYZ=~_TN%HEn#eeAva&X%#Vs4AopM+C;fR% zTCFSSMQmRn^aZ6z;x&b3fcjBIpOgGc6+L8444DVso_>r>6}~!KNXHresIs4re(U8DqA&U9jYDUyu_g}alB9>9+n%y zu1vQ?S=QvM7il|#XG^Zi1;zQ% z#K;r#jXyP(KWOuP(-W9cLI&8KUO-}GwnJjv;~xqFa*OhDS&Y5vg&I5+M)7tgQ+Fd{ z(=8w&kbW9*LTMQHvJD4U&kS@YvD9;N!%Hww5T1P(3H*8JDDcJ(Dpf!KaxY}>X~UNz zbniwwl1SCBkgYY{;mbHv>r_yaqbs&LahL~rPx+#=;CS95jtU4~`MQhvE$<`QsR(T8 z3us#dkLg(DJ@0)zBysvxYDH|j>1L*$T9sER?Hs49^$~@x&q&{Nze*}|e*EP26A!9xmb$}VYC&`$zV4XLr3uc>Ni|(geX^j?>NOt>wFV_3NkTywJ zN4JvmYufHsTY;yq!(Fx*xT%8~{`g-zT)0h&9uiksKEJpA=rI1+{CEpgxv0}jWnHP4 zo^VaVqGf1Yw~geLUZ8HM_`$ygo)JM@r(M=b&Cx8oK+14S|Gjy9c-S5`r8=pee$hJX z*xe3;oXklatH`cwVerTs!)_(Z)C@Jr%&W38q_keYrb&7FQW`JIK4w`xL+v$V<}v{4 zY>uw@ImJzDW@*2eg{Lunnj7sokL0QU(u$DW+X0e@A~_OW#_A(x7t;+Ge9K_kZ}1PW#Bk>ZR_gxC=95b z9hMPQvTvvnim>WaXkENW)vv2o0Ngz}U(eC|-6JrN5k9|eYBu-{Kl8ZuwG9mDj zdp=LclE&R1uK(oBAgiZ3XmDb{@$g7Ld9bzhy!n@PZeO0REPkF)BUZae6D5xNQ9^%^s(&8%t z2aea)tm{$M%jY-*@d5Er+oVMT9ym}kKZygl$fr`;BCgM=%UC*5?Q z_pyXK2%RC0NemlI?1+`SrMm8KsN8RwW95^+QHgBh4gT7-dS z(~szgh--)e*QW5EQ)~2*jNfv9_(wKV5@vCtFUk+kAW8y~d7Zo5?&z83l!L0`%gLg# z`_#iB`vZKj=be#<)fo#O(22Y!Qq!{+@YVDX8NZQ}sIxVJ&_|eriAnyJ-$WWt9)yW7 zf&$4VZnA`|xXcYv$rhWG8V2~dNP4RR==n6(8=MHa1B=&lJPK`N*qqbNvUYW7=;jf= zZ{3?pG(AXSOMvGDWqTmcfX;x!8c|Il4x52E$?=9e<5t~7ud2(9&stZSSqx+gUbJG~ z4x`RVAanjy>N6lN5y8VYz zBpvljY6B55`=xC&8tq zuxaa0y4Go!kr_&+dDTLCyqg%#=GH6kPR0G_#G_F7mCg26)D`~@`x{SJ zn83f5hYP-=+C(AX>BWJFKcvlv;NKHh{5P&YKwwZ{ z3#iyX5t*^Il0SRYLS^Rb>zFsj>-1jaA);)#qozcP(#X{j?S$Y%g?vrB076qYi%pD^ zLz*`54Ezz6O+VI~?nH*J|1)+PgJ+JiNxaAZy%)i0A53xmrs9rNN*vi7Sw!JAU%k8vrQ zxfBWfT{D{B@**q+O0^mqd$4iHK0z+6TKHT#rNCschxg-eivZu$8bt(>#VXhslwg9q zknYj_AN6E+SQpn_}J07PFP@#72DhXs- z#OV9u4w50}aJ|MXP3q4mn;(uI&ex2LCMrPAtwbCo^wxLj-e^|_$ ztjlD``A8kDGLFn3W{}3vu}vgywk;w>5tv!d(s-6}^!$32LGJ}~osWAGI3F?@nFTcE zIn6gA3{aIF7_G(dOj>2-#G+=%1AckUL8E6KP_3D0&+g{j-#oY4Rsr&TN&h6>>LC5I z&ZXOzbxY8?pGxgG;HtE(_PLf}A!DA!WnM}gOt5Hi?bzOuC4&ZmRL%k;_w~+Ne;`Pl z5OojwAlRV`X0@W|K1LTq7##hX^#R0t=8R@VgRyt`awzltNe}-%4$#f%v`9_8V3lhj z9~57vzYC;FxhPv4s!~B_ipP_w-%PMKkt!>kX5*o{hk34tN&|*zurUiWIck@`pFXl# zduSISom64L`C>lbf=1mPnlV7U?@vM=%W;&`g`=+#<#Os{3v)76*nE~;UjmW4F}}-l zUZ)Wg<`-sOrf%j3cD5Q+QEs?lj#2Nu*Msp)rV(kyV+V9mp{y_jAFQ$YY(AuuXb36( zdRB75;R##2YEol_85W@lY34W{32vx9I5L>eL5_XM*cmlpuTmdKzv7uvMZ#%R0)>7j zw|>XW8)IN_Y9u?4{~gbV^0jn#Qc4c1tUs7q!YYZ}wg2nu zzYkmf9V&sOVYv}wfUz(!{|7cOg`?+iz<%ooh^>c-i_?jbKV*PA1O;Gu*53RZ5@+EVvycQ}VsYJrx`_R^_AoOSSjZlP0d__QcicT+PpU!m7o zn=3PTpRGCb|Cz-}a*%mnvjFI}(%&kh7_^pQiRPnt=hH5Y6KbIv_Y@)z{LX>g9s2VnRY#ubVlq~uwTx<>7vAo2+u4E*T4ILr{X4$+Ny?d zui}DxnDq8Ap;%V`SmQ zt6^cItxpWimQQjz=`v7O_Bmkuh5p(8WQZQ>(iao#5o32$Z#s5^{aNc3j_7MG+K%W9*G@i_v>htZjG^dv*n z^)E^2x0^Z^DB3lwX3stU+AV%KG-7C7><|b=s1M5vBks^(;@NxsWe^k)X={r6+^gM@ zyUvadvUO;{FYYCnee}`sAGPa!xiz8MIJH(En3v-@IZTqwlTunio%AHCZMMfEEx(J<^Z$lkdu} zGL{`0if4P#C}jlo{S<;03t9E6n|~R=FWDeku0M($0$V{yY?R4)B47pToDA*_z8&1Ac$7}Rp zBd?ySq(XnV!gMLypEotFT;BUgw^jfZ#I2o??-O+IUAHi@4dq|S*M`IU#5W<4iR3*P zWu0&igF6R*ofD?*$>btJ0FyFP3rnNP?Wy~Yz%Fv8O06rVU^I`0XuhHi1|MXKo$1_h zIkoMmN*{Z|#m>1na=VU*Hy^^v!XwSXAd>{iErKKi)+?tg66^HVJc=g_Tw>s~i*lvm z={)obFJ-KW@Z!A-2YH!JH&`P>4~caq;geUMmss$-z{^|$3fp7i)@%rCd$;lofB!L? zs@_={YV$c_aQHMbhkH){-;OkichZ|cus-u3VdNMgZn3?88bK+l0p^iS9XxzVDz@D9 zz+Z5T&?CWPOcKA+vsEpc%_{*sIsHKu>`qVJ+1|Zk*XW-|K1eDzNUg+eAlnbbbgt*C zG5_2W_aYxLW-+0*1DFi`DhDhId;%!T_|@thF%l9b+LPRPH8bEJFsbt1SK>jE9BcAPS>VTIAdx3Z zGHmInezIl>Devo*`|B0Jf5K?|pLNC`|J$ti2NPQw2nR6@fNSNjIsD+`A3{pZ6k=_) zEzzwNyVdHrk*BT%E+-H@y0%r_GjfuZ{X1SlsEzegl8nnV~QuNz3t=ZaD%sd z^n(SdKWgJrETf;PYcz5Zss3WWx%;^W3qq+LWZzQdM}Aip+@E{XEv76xQ|v9+$|Hud zpT;m{s5(QuGqDC$+g`5asr}UZ5}N9_`{S|c9p1yDTp{(v)MXrL-=0}wr)LHPqyGNR zgkWk9U?JOg&>R`W3w+Q5S>R4?cSjEu538&QJjDw46SOEZ5wXNl4VC1rJ`Lf3BEpH>tdE-KWOywVFqIvD3)@H*}%!+8c z=Z%JeLjv*(Roox_#gpwjM_&Ha-*|oUr#D<+#x4O-bjA{eZ(x$~;2l)-HYr@H$NK!d zLM{<}yLH8KOA6fwNyBM(%(JGtV7|kkGCctRU<%MBP)xt>3N=h=tLao=G~d3=otQzWbCoeENUF=`h4VBEx(fhW24fdr&n=jmw#&;Xz2lP>+kf7xF_T>g_TjjoAh9m=Fb$9I&o% zq{6ljrA3)ak2v2TLw;zf2}m51@oz{}}P^a+cDe(56&(2Hb}Z(nZjLF!Nj z5}EQN_-0ol9W~*+ijxeYG1l4IFx@Ysb6P8fwnZdihrK zz-SGzmJ<#*!8U*fNw)8txAO}50SYG(7qkRxJaYZLlxLzVw+7ZUFrQF%fk|=#65OW9PP6Vc z4@vSJF;QkLQ*7P!pcV;&7OJ}Ret?v>E;S_kgy$|rW_SHuJ<8`MviA-!b$0x%nabZj zc$B@-XwFv7+>-;@yAzpJarN$9!zKBRO?CD_KgPbu>$=8el2`ZhSmNTF zPX&@*6a`vPCuFndy~c)|DU5Ua%TJ*tEocy7Um10f;1CNE#~l%jlG;w;a}X9^f!Zbx z=YKz9QT#Ol7mquJmZjqU+{$Mw7K8R^fOevq)7IQrzp53DG{wH@-*gf_^6x?&9K6o{kraXA!;3;BsH4phlS_{d zS2EA=IvEHD1PFZ)^Bg(Cvsy7pRqBaXP8jew)4|wrnq)Y-n+pJ5;7W7umsg1({gwwo zkc_VGfy*T00Ft({1c!AWJj4!-c{egLnXb~wAiH5Enq9YJj=I|=qfqu@B0iJVAqu$f zmb9}62Yu{LZeAS&QN@uLxa3OWfrG^<(Cq1u&X%UT-?^{7zukzT#h`9ueoKB&FGCcg8pX;%^`Vx<)O6!9N1Z-nF%`TPXZbEzUwKhgVL zXG=Y{qx@`exrRwGHw{85F`#P7O$aPy*xM)`>Qomy{=46Vqn0lUrGK_53aEWS!TkjF z?+fk7Ma7z*M##Q_Q_&kUsa5IFr;ilh?@-B+keCfLBw;D=wg2= z$x#K!I?GY)%hMQaC|&+o4}H60vI<6%>G9pp`U*RaGm*cVV$IZRx)J1t*QlxM$Ua^=7X{uBFY=v% z$*_l7n%^hU(J$}(4zZnmJO~AO95l%HEdm{gw%moJl%!JNJ)nnS>M$F(|0TkT{Kz7X z1aG;H<7lK6ok0@og&G{8)+DrH+!l2lIhyt;p&{BGY6yyKp!jw8(6&SEOJ0Md*(IEIb$nW9g`p}1Q6+U=dL92F8%716JdC?8FWgI1}r zlT`5XfjY3Nc%1|(-D&lO*KNOtN$Gt-C;VEHMWL(jV*U6{&17&8e6-O;Fzb%2*U2FS zTA}It@1n@2u$KVUn|ztL5_i=3@&hjbQYW*a5or&L7H^bXlydyKzLfBAjLSg@#aLPx zyBv%niI__`UNZLQfa1D)nAgi@DRL+SNK3xX@izFTg)UQYAovpzJiv%*(_h@CW@bz^ zkJwLJit@}Q`EWD2wAi<#vB;6%T5^Pg8=ZUHCR2wApt1 z?d7F$?@Zyzd9+QmTNQO*yCKB*(F@V&AX=1`NMxQgFGRYpapq?VPil4wBe$=t_*p_W z^70z7QQi_hJhZR#T$;Xr?ArB#>69WK*3PU`Ej?6dCfDiK)CZ;I!2+?NGG2T9*b?~c zSrsI%Gp7KA&5_yui}zB_g4QyC31gvpaetfKsPWNTfzH`j&ti8?6O<{JZmd!t@)~bf zJBf)T%&D`O#`^Q^o$6!}k--Stte^8Z2y8|08{xO~iZbzA+yHcu-+Ib%IESn5);1)} z?sOcR8;DUppp2VgF!(gS4g(-*;Yuh|2xGl?&(^^`Ps6cjJ5a((%;6ls$Pn>BEr4}z z1`-%L5dEd;g4`4fgu#>>v+G~ShW#BWU+P5;5mYE#18Ju9hl6qX1n&A_B1s- zz6jL&cFSaK)L|%5-*P@iy0k6rUOMsj`l$-LyWy7b+O!$^Z1z3y&R`cCH%6!K%tm6# z4_b{HT>yoft#SwcTpCf5;#8we7_yTuc;oxfNe5O3@cML4;E=uVQ?Zz)`IH1qVDVB1 zM%;(12K|)>DY)kuobyCGG%q(NCL@|}hD;M?AGMd}Zvz_rb3&=Go>F~soDvn%+w)(0 zsCm6ZBf5z0b%G1S3qFw6GvbRqUNT#@aZQtR(N9%p{>snRCx8^s)!(}FhmpNtVhi;Q z?#N#e_ZXd$RU!1bzSGS>UzJgD`-mf_3MhmM7_kTS9@YU(R}x7bxHm?eAg}RQ)b=Bq zcawl7-q&dziY)kh`efoPITDOD|d3iWe8_9;i>ZH$&487M)BWGhO)` zv75rX8YuS8&i0ZAjgCYn&h}Q$Wu7F&(}z&>&KqD`h3fZt@kjmsSMU?I5U$0Q&VNfK zV<#YVtxqJYq{C-)Ii(9m$OLW;(@m_aTQS~^S4h%MGn*{VvL5<&qJ7=_T3eyPdf=t~ zFX2!Hz&tkpWDt?(zw=1M=IwO;>%qQ?vSG~s)9bOb{{LBe)*r0@6J7hIEtRw}jM4q3 zA$wz7D=k{fCP>Uxlw60-LnA?Jqsu?Y#Rd~E8Ub#}w#$5Xe%EZzCK)T90yp<|yZpE7 zXeX!pW#P^39(lwl!)$C|;VOT!-}x8cA2CdEug_~$zIUF{e$TeZ19CWjcDW9N>UlRz zU*5Bl!~Lh7o2N9hGEl&ecNuJDhhc$p)xN_FKe|?MmSKS$d-7I5;VZx{DeQ+W#!#!x zeQl&#`Utbb^8g~|=>BfKY+)XrPj!=<9uB>D;FXO%>(r@l<<4ZNi&=#Zq0QOl>dFWl z$KUhjs|Upi?karB2gD>%Da|4p{7A&R5wFdkMxMuuR=6c0^#=eyV-ia#W9K#X&me-P z#>Od!!t6|FNV^{TsD2dqGqo*_9>xZiS&@Y%-p9%?u&1kbLZq8o>3Lq+{fB{ac(rQJ zCv68O0K0r2|H^mSR|cadxLvFt-VM0IBeRQD*YvWFmc{3`KRvfYkO*XE@#kok^u-4| zhEA)%k9`4ib_1wbkz(%eJP1_v=#rEaYb9J#xccRK#I+U|>vQa1m-KUI91T`mgSyit z`Ve-VdpP`7a{jP8gkz$hk(iLehvAl)E4WOoql>nU_Cz*FWo$cRs++e7|Tb@bF&)uw`ahHHj)d&%;SFySCd?s4*?!`7-oU6qaMT~fi_W> zbw=6_0f&-LZ<*A0$j3$*(;=6qfdD;1eu zD;efYEJZ!pPF9-et=j`JjGj##n-v?8a9EouZXR;NPT<}T^dMG{MHg;1?rt+++%IPz z-8D}I)BkF1XL!4df@xw+lH9A6;_=F#Pw={Q?iNG@!tW+6Ol})lM%JrRDDnF zH90p7>+WDwGDk&SF_~N95XaqQ<#vI626pc}#87@CCW1sMUyvI86Vt{vq4i=QY`-i3W%L z`@pL0IVOZhA41Q9*W1wwwVDp!6agC^1DUe>q7KSf5~Xl#?NL#*W0Dh-9EFK!bh3&e zx}pNQsv(1UsY1&?4Ds9ITzy%Se}NSY&){GSz!csJQ)Ll|p(xtr{RE{Mm^v+GN0g&e zKtAairID`r912y7S=85owED4JuDfp)3}pASmMU&NY(-dX4}n`%_fyMtqoO6dy$SJD(O4zZ4aRpT-e5f7t9*k+V*lx)>T0ibq% zn4e@J?ChBhj#Tiv8xpmUl8T{5pNL1Q{v^cJ#D&X^InuG`S}0?r+L)~R!{53pnRN7n zYVVj^%Ycp0)K3FP6X?%nGPxyUl7ELHEIDv6tI_;7AnkS}Pqrvrvkj6F6z_w=?0{gg zu&c5Og03YJ42GANgiXEv=|thX3gE5|AB#x1!$y{DAjosC;!)HcTR4rjYTdlIw`>2p zf;Kq8yWHH%gEBJPJ1`5!xGkz>K@t^FaSl7a;nt-KOM3#hJMovJIOcLaNEnA1qW~E_ zP28uRhjxX>d`yw5Ued`3t|1kf=hT?l8m-ybcEz@>if!ArtuMB1qr!@9+qP{xU8i@SyZ#C5=3Nud z9K#P^U2^dJu93DO|06oap+OxTj7%w@B-C^ltrKoJEY{Y?x>e4nwBJoT53(@@MsB0_ z;L>Ei;Mgomnnv>zwB|_-qxKmYDvd0{!1^*n2vWnSka(F~NBE+^ylMn>1zQc`2Cl{F zrp*KaeYWfg0ua+7r3~B9Hzs9Z_;NAkWB~ihc*Z@N{%fpuAOWr@mKVchNO8vAcwt3p zp?SD#&h&m(%_t@~1`=*Dy92*U4t6Jt}PksNDWh zY+pB7GOQ0Rdn;NT`B$RzDzwe-(U_Bgt&dyRW5n1|atq;!w+8USxn34c6Vc$* zW79IK+X1T@po{;$>>Xu91FljsFAffdI)Se5X1r*16Hcy9ok?WKc5^zYg*)dm(CWMuJpX z@ocD6qX9q5nnH|W$)oBA=9zYCOIH>0n2nqKX(xXtR_Jzc~$}qc~v>lb$7H-&3 z5}>Y7fv#DS@bs>hm;;D=AAPPm-d}!W6I_N-Wy4X{8lt&K<5!KBXCf@4l%PV%z`wZl z+Jxn|hQWX}Ywaf<6IvGJ;8rD z$Musq+YdktMe3Ss->Ms~^3`m=CPOq`qFkqy)*Bxbhl4&N1&_0Tu@-=viw&G!PXh9X zV>v(t=`IsFk+ErhThJHiqZ<>52e8s_8%q^jh{h0V=t}UDNO3{iLWi&*$EzMLV{o3i zpj>+IbGVPT8(CEou2L?pBt4O=rCQ@AoZ!0*WAiZ3PUTaxtzH-oDWcPui-CR#=9Oe^ zeb<$XAlJczC$Qt1#QQS!GS6pI#Q@kQLExr<_#{KM3U9G9v?od;^@>!qzV(ZVM-AYC zw%e>o4NtP-N{^1AF*!wng|lO_(^UK5n$zdVniDRPl3x|spv87#J_d9i1hwQ!`RW;% zZIsCcXGkr@3FS8J(Mm1(R)#6Y-V*RYFWe{|RW(~<@eG^Wy9l02m0fr_3;;euVon@R z>}knra!zUwmnp<#G?HVZWRZze1#PUWoYQ8NW;4E(uD?=6g*>__Q-&@gI$!$O)AvMl zW6Nw`Eg2FHaUNf9eCey7v6IWh!BWihN@1{@z?jFmqhO3Lt+0$qGX z)fCcp1#pRWvYBm$9rb9T*)I4C!oOLl)&NdXT{%77U}b0P&RA3=t^j2@9i2FK+ z>x-pko}6E09}W6}D~GSJV&LGxUI)GO9SU$ySVU-RKKWjKJ$3IA4ztYC_QE4!CuDp{BxZj-f+w6NK)F%N46JFOaq22VGRbUddAnRIAb$h9rdj6S zi0en!?d3fkG4RcoGXT^fI<4s#t7+ez@9-GQ&Ta}R69C<8o5Pqzhn@Y0pD0hu z%yevl1KwDxwlrxt3zcO{Od~q@SLa#X2N5%Al z6$)`aP9on9)dAVJ$!1x!n&gP#q|aTv5^DOBg{IRq9cdVT{tSh?33Qwt27ee7@=x)O z*DVir?cOmF?v9rD_k9RS{y1f^g!ZR6Y{5)(zv%aNi#ZtWX5sOVm5)o0VFXs$-5wHG zy1?zMIz<&RsbPOqgR#$DP@X`IKe^y=WZ3}waRk|EJp+bT8Lov5S($!%1|P%l(RBtI z8W7|3QB%F^`|LlA5Ca~{QEaHQik!#Bepe~wC!rp6W=Ak>8j#`yv3|x_P)?b!I@Kv_ zq<^K5m|ui~R<;xGG#oANasy|Z;xWn%KuVG@xC@E%ArD6R@3nR{{&4vt=bZ`Ud>{%; zGg)+r15Bv^aRG(|Bk&>&GXA8|^IUg*44#_92NqS_-W~N7dK#c#VKYN$e`jl66RFz* z2c#eYTi|Jti4(OQ&Ep1BhNFjOZW zOS-YjB1S{yERsPbc~nzB74Iy6t{hOXJ?n%c|7e64%0tc>DMC?&{p9)XGB?zgATtVUcJaAk0kwqyLlB&J4fEmV60B&G~U?drAcZ4)wn^+MpFfzFe0Q@&AV(X$>fHOuV$ zWf+ug!v21VrmJ9x1RbH!v{y2uo)SE&v)n+qu;Xxfp_^IF@9?K+gLQZMhaN3D!X{Hw z!fPK+qaAsQogOc+tqLXCKyu*@5x^|eTA&h_l{oGoEv(1DBdQFV*BPY&tUlV1jAOV^ z7h=h);WdJ4UUVytpMbaJ4LM{6mtuOD)Fht0O-Hn~Du>h6hc<$3qjTD_B7huVAYL_V z6zV^uYE7cE@I}<)UX_8L{Ly8_&fO>A_eEHt(^Q+|2T>9r0U@+S zo|&WQiVBy8KNlr&Dp%M8ImY0-RyDZWN4BP)Zl|C>q~P$3X`OWdVRtkO#bW3nBWO3X!hdtXGE(8or;)yh-&SRzG&)3quLn#PB28dp zi3-Jn|17QWA;U)Tr6N5@C6vpO!JzBIU z=v%C?1)$hrlgL5<9W|^TJmUoOpu}dDg5rMljD>>DczKrX6P^B|M9+w>@XGq`R;6vF z4`jj1(dNyFyI(k%A5d}yI4D_^B;M0J0T*7S7m(O%JHF|DpLcs_3oh@aMX;|J!ES|? zz-ZHNF*>KKu_sN;iEZESuXkw#r9G~U2s#UnK2sjRlzU!)Us@L-#v$N(oO64W7HRJ< z>{RzQQz_x!?z$w2BJ$<_-2(3tZWh)b-DhD1*2z#oiZtDg~>YubpT?czZWQ8?Qbu^Keq$y7%qx1-TtEC zJrtsUiqD7#VNXQ=NSvOa;fv#`uF#IJ-~spUO>+Ep7dqT=seOe=8e%u&`l4p+w{lcX z8>p7KJUwvX3(Qo1`fdmHVF-5u;qOgw$f5;f0=EkRpq(YEbrkE&sf%!TP9PguMj@xp zsIGbd3ltoa3?Y&z-AR?Fm+iP&{h?%+HD%1EZ0gxjab95kX#4^XiX*TB>WvGIoMg8c z*rS4B@AmeX2t;%P-Z{#(GP4%PL0ThacKSVaDUS_*fC3;zlZUxxaaN_2mXDHTuT^~4C&G9kB8_xIH{#i-V zc&#|R^n#0K+}>g(_>2N@x_dG4m=qxZ`AOv7;7h$4Bfbflp3XBM)fI*#cRf6s@R<$o zb7}VQ=9^0XudQWJvthJx;hwy2k>^hj?p2n(!nlqPjoNh@-+P8LTlD{zPp0|(ypJPYsYPk{c?HD7o7@0d$pSZ5oY zhMaeOq0NOEw8#-;1?;x!&+a$?j_2>dmN`z`7D1r{o_HQ(EZa7;ofA!UYhC-?)HZAx zz2a;7oG&sR3yN!V$91`jN8KpOq$@cL)gx+#M1E0Y)~37aN)-7(Q`h>79W{3|oj+xX zKb`UG+%XrH*X*Tz5Z4*+aq4#G4=OXMBe#n$y{I15a^#hjP$tM6Oj+x~;CdY@;BxBd zwF}xI{xWtDjQVhLFn#UKnPj`!DL`GuyHiHmW)>ljiEy+F@C7K@NZa1V-vm0Y-RcW# zl>nf(UXscG3X8cuB2+L!CN}1@01yl+K()q}^FBKgprQ*59O!pt~ zTBmiau?wMSmDt0`W*7sEJn5(Fowb>%jqj02gtBsL=la{NY5Zw_%j3Er*Bl}j+$%~I zaWxg%XV%$wq*14(CEOc;vq3y|>ON7Y_GNFH_!~hC0Ypq#&TmY|sgB zEcd?mmw8q^oN2kvog27M}NK7G)W3TH2uxd@1b}M7? z-6&=H^o{t45Bz1Z7$c#bDTOO`%quRhuPx$IP7vXgO&P{}$ya&S80Wq(+zp9B+*|2b zdrWnfxEIef5|NJN-H4ar>KG9XBv4|m@&=AhuS$#_G!qB2aP(nl4zPxRVxLs+D}^kP zKZ-^jBJ@^DCOvlfgGGS>cyuU~7^LDXM|E8NGd@<1E8FC1ME%1BS>|uOQ=hFyp#qT! z=D|NFce`GNUW$=r)nRi}=(rdT$De7!lhL54o6k};HIQ}Xlybv*L=I2yh=iU8whViH zv5w<5TM9$!g4d!r$*Nypiu^mJV@gSK$tfi&vmzvR#6aVr4!VFE@LU5FFD%k5B}=(n z1)+K_t=lv=grypz%dx9TS2pW0*XFG{NULqqYmPqdi>kPU3CuF1W#2&O=9QRw_|yM( zca6deTn*S3wHCnFpzuy)L}vDF))k)*Tr-n~J+`euzHQBJsZ++R#Lq~vKFUf=fIS0>g(XsR zKssIXM+eZ7KCDqw_equjA3wytT0o)?o&1R-%zbDS&MD5`PA7tH+bA1Vs1%u16xhC}mWBC81@*xrzSk`)X&8(-yW3mF zfc=WlXxrak*#QjXU=^c{iwB!k}4-c%DBWy?

=hf8!*IN&G3W=yRZF1S~DE!oOeE8;@e53EVpd}hyqb2&snw`D-{?1ZGzvzn)kR? zJRJAD^o+6K%BA_lVQdX2_UEIy&7r)R{FIIlrQaN_7hhogBTYI<`(aAC#obKiK{A(;N*1X87s-h>L-Kh8E+@jzX^sYQ+pOQ={J-h(r{ml@yIi+01(oY#ga$&))pcvbANmu!FSwN1!qSMCEfMxCecM1q2p{ka?-bdf1-2{pG4u`vI{e`$t zVCDb*3LIs`|JqF^X7>MWH`TT6FWBMy_={QI>n$q!BNf^>u zCLY8lJRXNWt){NV2JTl9*fQ6EVRPaScVx|+?Xtp%$EY=o=gi3f%dXVaYZAB*(hXcD zH5~RY+}oQM7n^D)?*ZW4uK9J71g2&(Pb*s{W?9Tq&%|`vd$zf%A>q^qdwAN2jjxc{ zdUO1(Wn-mI9sTe{~XQ&2*K?^^U{GM%@+y*jR6f+Q6r<; zJ0Az>Jk7DDB^LxjLSt7H=wih7$5zX@c}nG${;odiovM-6oXlU2cXU{R@Yg^#NZbQU zjGfVC!AQyfbuY7rRYn!DievLbci~yB4TX7B6GOF6VBE&f{Rv`DiJ2q{ua4ub~uOQDR32Utca4{4<~m z@kCFsuFL`A^Ohj;vseP5e0_hiZ51s}%OSapmcyHLxfNxhojZ_~Wud`v;mzK@Ob~|+3bwT+Tz%)*+a*h^qe&0j6%3$2O2?2tc42&2G@kj@$BWCbTEaLX! zqH^h5H+Y`3mMf-}$ItSA^S5WQ+A_}Q^yz0yzw2#0fq3G2qGb2*W?4*_5J?Yi!bWG{vV*t)X)|tE!&b1Dy`m| zR;5}Fh3mQiMpu8CCu;k!NE2NALT`v9?Gml(;KO}acSUg z-{Gh0@Sn!J2A2cg;1Vv3n9Il6$@S-WOBW@Z%q|t`=F-pm_$}Zf>`XITtS0=R;bZ?Y z>0xDw8-}+mDXTj<=UrDMkT6dz@8-wvc*qU|%=}^!9&ixe{VH;Da`REY&@(2y<=#S2 z{(Kd4=efuh!hp)alKhCm&S?Z+yS}w$$)01}{NPG2R`qQAYq5IO( z;`%Ua3m9(^!6zH!|NP$4rJd&8Gb3hM*8GUL2=wqzm5f2@qmb{&!+rXFBGvw#egM@r(SS^Lo!p zE(EO|HqdHcfnaW3T7(;my~3BLK;ZSN<09o`k%Wt+kf+^&nPuVc#uE3VfY&G1mWMud z;Aw?|Hz5NqI89*)1#7uRyhl4BBN#-0m6>@>P?WDS4t|>wxH2g^ z5uiDdtKPR*SI??7qtH4qQRvlHrRFio5p>@oxxtu}Je+$_nagq61OwqiDX?8IcCt+b zridFloUe{e4mis`Zap$&1GHw&uhp|^B2dkQQR5Qlt1*%pQV9mQdmr+=*ALu3M??*B zvsg}*Wd{B%m)*diiK9S7W0(#}FLiQg9RSABj;&Kip9j~`4~{1StrHhQ+=S`7jXZ>1 z*Q1K`T?P$ZxA!QCiRO@t*v`sdGOfBqojeZvIt}y>8er#A&U3HIU3FG<#bNz!L%6Jn zAw)}pb!*hOJ8MNTg&Pe=z?@JAhFfml1`05Bi1mo8_f%j(9utI&0!DP3uThpU2UOC+ zcj1w0jbFa0Y5||CIJQBqz;V>cae9f#o%@ejV$s zbiY4B!+_-oX`EQ?i6SJXK{<(G#eS3Gks@6dn={}J%-jrF?#b^e#I)dUsat2+TU0btA5PH{B}i8PD1*}LGmX3nmPDa>I{(rNBXXcgxp z5z4z+oQ)QPy@D%s4H0MkqO`nDaN|nV%lZbop&X-4pTjgrUtBkBfe}g~l7~MHv&$U9 za18f2)LO+Zi!2{KW2FLdiHq>lLXla6#~s5=L4-F^gLo!C9F;1#A>Zya0h~-3?l^K^ zXNjqDnIuK2kTb8vM8Sd$1LPY#ze-JPQeh3MXqIXM-}!BnMk6e>;+Lzh1{VQ zA`b4(>w4c6B9pHLk5Byp)Ozw+)mFR1Xfa1ApZ{%;n|`*UEND6y0kj84O0XfAenpV* za-K6QbHKGu;CdR_cXE&nV8+D!rfe?Yfo*RQ^xy7#gl{cBKMzt`O<5q^-bkx2upUHkI@I@~Vg>=NDn}O~e9S>1&5Y@yh@H_%d8FxzSvsVMa=3G3 zv|<=)1*`k*?L^q%05H?$Lc8m_et&<-z%Z@DOaI|0B)(Lx-mn!l7{-sdeobN|*;DH@|a8^1(9Y}8HXvVaa zXD&r1SB5>D3P@S=lJm@mPK6Za{02Iktzo!p;B7(0Q!mkll_I0#V^2QUT$l|=CKRkcLo(1}8=aUPZCYg)GBpElNu^&1zIKQr zo5)8QHCbG6`306slUP84jan=jD^2Hc36UX6@t5VF$-@NNLy{MEMOnU4?w~ujEv#dC zN-=i$l|5C3!Su-Cjy-j91~$XAux_Q_<2tjS(=^+(NIUd0b!BnneHngcsz`FnM>ySc znTsHM`UKfyuzUE~e;?M(L`&lnb;I#iYD3fSC*cV5e0mm2YHl%Cta(l1!15qRY}13} zej{}n6L9R^n{>o#1ntZXha6XWO@Mzk`$+$4tw&@4T(OLZ-ohWgMajqHJ3N|^rwdi8 zEuED>RIMDmwB$vk+2qBI8s;al_%$1wC5{i}$twqW!slnwc;kBNHKinmnQ;;2k&QsY zlx5;i=OK`p2pQf7dTTIW=!hCBQ2SOMpPSdd4Zy0SkS{0;Bx5{?bfI2xA!jXp22GW9 z^u`QBnb8N7c;7+8)z+fhyIt-SjE*uAlf9IN!GPgJZH(aY=4pJ6wu2@> zKcCJv+F#g;^I1J23SV&}7=`zwDTW&@B>gg^ z0nEWF?jvqaWsxU8;-Q?oe^PV73^a`CRc^{fl#1DUiX`B@tch7ID6iDl4!Qe4+7cCw zLk>+jQ!mODxq8`y);vK&YX#Cv~20yzhVb5%)C}dz#V=4 zJ zT1zu-L+pRHwpf!Dyd2eMcMpTyDj2%hJVVFOdXz7O^{%19+0Kbt@B z%VG~r0R$swvb|B)@>VTz3xh20b##ERx->iYUgib^L=JyxH&>u~;jz70@?I{6yKjS@lfvmM6;}Ha3RN+Y#HjYWSu4`8X3r|7U zTDX#UWnMtkMEabFW|-R}b%4=^EZ_7GN!&<>LdI1jIYAmx_M5v+l)raAYLkHAgebR4 z*fiCp7$4(fn6}akNF$BZ08+1Nt83hkYufvyN=_$4S@8`CogN}h44raq6YQG6IFHsf z@q#>&hBTRZA9A1TtZUBQYYJQ%?+%z>#SjR2$+)7zL1a&Kd>*D@JsIk*blvFZB0aEO zEHipiIz+dKfQG2_2B7faZ}$$TWg$edldk~f8}6yv%jAZUp~N9aEf z<7-X$G?vK0+r03LsjQ^alt~kIYHjl(cX*msE@z(KCi=Rw*`1g2&{9W~}qqnR4!g{IAXW75B@>(b`aJJuWvR{WOCHD_Abad3a9Jm;um&(urg$mI)XTKjvSuJ3qY zd1p1_Tw~b9bDTXZ(nABxhb!_rOYL$DU20vl2Phy-(DS>ssoABN9=W@3Qgz5fn!Epc zV~xV=FjZEOy=x*d=%_$(`;FRCI;MGvE`}*xB9L0WE|Ktu!xEx>h$b>csCyW}QOI4~ zx&4m2FFC*}TY6)@rF6tCI=&WHidh|E)9?x~d=kwHc#GI#Yjp-_LiqReTAz{+;w>9m8H1;s6_FdxORbI=L84P%QxyOQ#6xmHci? zZa-e8d&P<_kVo5j*LrH{G(L+U>J5Jz$kkKDtN->yd5KO5iR}g3LivPpRgg6`Wo=+~ z(jCS8$Xz=c>VE^6<|&pWWRarS34F>RU>htsImT#B1>ydx4RLBJ5=X(XC5M#_{FODE zu{s#@5Fe2H7VpiU03=}%Nunt4Gqk-R*+etU-U<1SZ*FPg*m8IHfP~tPgsSBmI6TB{ zZ4njS8YGjow9ld)(YnY8p5`^eqIJq=S?l9eILnpV-uDKetWT(;UNbuuS$nNwPh#)2 zm|`f9`4E!G8<#XyBW>5?KX0~S-_}(CO;BU+&FMkF13pr^I4kyyagn?qep7WEwq1&D zg4gka@5I#xKn<*7KAT#P!`M!Hy56gC=^yEC^lp$E9-oo?Fc$_4gOmsYKuh-62YO6{ zyke`79Yg>YKKbi2=qV7I#xe+Ue*HEP^C z1jRX6+gQ)-Vv_!{QOK5Rn6mcfnERndSDbG;dSnr&laS3Xe4&Wj619PEhOR)2JA;W8 zwv@sbzK}6N+4avd%(E8K5|4jU4tS)#ixL9UJsAV?QN^eXCZFpRKjH=jQiWuM%||2! zM?FEKV^JRS-|+hpK$Mk4Pj_x$!WGDfP@Pq})<)$NI#7O)Le)A>K?Lw~B7+y=an}YU z-tj$*SuA>uBTKLY(ZPkc!o$I~has*b(?mlCEYV0U&HdY!q0j1n{WL+g+90zHQ6Gc#MPq53!8rYC z?=_S<w=H=6oAE4(WPNQk?cX4`AenUBmpq)ssjU(q9@Ca=eyo}Q5 z<_{5O;dkn{f6HhQQ9+4R)u8*0Llmp>+XqK$`yaJnl^}+@?Y`shsE1y<)*a}ILvKsn#1q}R~XAiK+HO4P>%sA=sr{_!zB3bg| zal&sG>!KpwT`G+g>Tp z%o!+~NdA@&8c)L-18pNfs$ceVHYg%Zd@{O<5|}4AUUDtMcybPSwdz@-hLyYLB_k@LvkLB_)2GMm@;}ch2XKt}@BTi(K2#?e97>%COL$8hp%;sB zZOMzGj|2&CoD%|_n;gbK8P)=*3%@aj%niQbq|MaN)QxpA9jqO7C`TAn)bJ_1F*Bly zcF`*M?+iha0`-;SrCI2$2hLTXC|lQH>WuU+V!%_yfR{U+C!mB7g?ro6QlBXs#w>VpAk&K)bsWX^WlPIw%I4OJHlu>CfY-yOb+!!6AB zREaDUqegb_UW>*Q>RlDXQKsJ;Mizu9noR~lYVi13*b?jXcwpH4@ge}nAY!_=tG22r zxEK9rt+TDJQ16LrZ?Oc-2l;k#p=h7*G3?-je6}ipg@9KYw1pKqD6AnO(^6msWQu7X zjf37?)kr9&Zpe)l>QMnn3Wd@31@-EJH9Sr*?<$@;K973p*uo~N+-TwyO$hZm0JAex z*RBUUr@OhBY2aMeWALV+0f(=85xs`qaCEB*&`Ld+>i*35l%%$1Nn*rSL~?deD&+}`X=r;eA@=s|V-j7cc#l85u&2A?Z(GUUT@O_bqspbT;? z1OBSq4^3FSM9TxR71^Gawv^%~S~Z05zVq_>UnQMsUVTt}5Y|DT4S0?`VZIzQnHa?F zX6#d?Yf|N}QFwHUgNEaD+Qx=Rj+z6L{*ns8D9ZTIfnvfr>{6`nA_q%;{~=0RkyucT z!q5-sD$(}{n>)20d+IGA8c!m`!sU06CxN4=70TagMDSz}K*3c8(<-tz^7ELNJ zmOO36P!>A!=gsT*@D75%;O*dFR}*?dbnc5!Ot+?4?xd?eqD+`7z2MaAjjo^Rg^vJw*-8)NveSml&STEUP!Lnpoma7m}Ljp-nAkt(jAp z^lct(BIZ2t!sD(rR&?e9bbml5@0gsk8LuH(;sC3D7m;e!^&b`1X#~fco)_M!V|hb_ zLkFV=TI6YvwENi_>bgAcqL)0fO-Y<6)9;^OkcGZ?LiWGql~jV4rz_ho26QkZn`t-b zY8}OcG^luRul-{dthBc#LrzBPiQH888>=nMG#oc3erD@Z`Er>!Sz_b5QXR^6C6&~P7AkztW$3&;vlL{IRwS7HwaAb~( zvGdHvY1Zmxt!6ry_OiFUoN-4l<;|I-K|mb{{nS&xQ$uyTk?@FarM61HRHt}N1&^Dk zg>He2L@@9c*5^e{W3X)x$hDQlYWl{E^BSu<61*TsJ&hmtl#*2uN5wlmUr$$sqzp+!8*F) z;V0gY(Mh4rdKD#Me4F#{JrK^Q5jeZV>2?7HWRQF0o5rl#ZA7e-LdY*`Q$WmAR7K-5 z@YPe35X-u)dxW8<){i4-Jh5xXpPLO^)ppqes|02fKvmMs2W@OvztAg~lr78R`7#iW zA|;&RED+SOTedQsos3x|X!C60m@SseR1r)2I$PWEyWn7=Ni>pc!C~nB{^wR1^avQA zG)Ry7y3Vu6Uv_GRdffpoIH-E6I( zYQytSBIn9ND+K@9jx~{J)og{5t$7z%+y0W&kFiS`-(h7y_9DN634j&4qMjIp0|0Jq{`Lxh9BNT@FR^|Cp^blL@j4wyq&p!Y%mc7*Y%rivE~I4T5a$HmrA zPfwSAHUEAesyNJQ76Nyt&l_qJFZs^bXkC7&Mnc{M2|u4C8b*tB76Zy1tXE4gmun_P_+KKF!y9R(#G8 zQ>}srvj)ewg`Gl~IBYudz9bB1K}j;Et7s8xPTBHOmi(4zL1DGpGNYU1K(EV7bkp3k z(vIb!hUr)5D_~J#i`J_A>8o(=&4`&n@i;z-(rZ+j8(pC7s@@11JEP4K)zLvQu;kZx zvf6eDHD-E0Y6U+uY)N^!`wuFHnuXxO_p_NRcc=-;^6HDupa!*#Fj0?j>=$mjuyMZ8 z8Qd;gLy%lbAwmE!)uT?Yt-@+JYqEZ}ObI0-aNS6V2tcMJ!GKuu!}nh9ST{=-Lk<0O zNy<5gGV8p=4vnuP-e2R3q!F|La!TEKmzg6NCwBELfn8CB^|1K27G+DzI=r!m2cqph%w* zF}4W{*d$}If!(LX;L~3bC3X2cm}$oHyFUi28y6iqR@BV(qlE>Y^G`HK$8T6qwLA{) z;$3}?e+?TxB69n3hcETxB+|phqah@ig;?II@ByH0UY)l&Gq?91@cdoX@8+<*J1ccm ztVBFOA}YR{!fW3VazAiH?@tV@0szf6@eJno^$^4|q)1020=d`j5=32LlvqB85QVlP zkL(cT6A0XVDqOzcjO7v1k44B@G+w0lXVBI7RLLJR{FhVKRr?ZJ{9Un|FKFJ7q&7_1 z3cwdsA;Jy%gAt=hm_&rO6X&VM05! zTg9t$ArM}=^{fJ-LQ%rp+3$npHKpQVa=R}o&JK-EfQoL#cf;zP<^YSc#lA_##fO)N zS67=x8}ZqU&}1E~cpjJG^Tf!@jYXpn4l~Le|N3`G&G2`FZ8y&E9z-X(XR%4>w-Xv@ z)Ujx9+9xF#H^g~(uny!#B}Xada$P{3PR}cY{SF#wTEgqU5`-3%{9g&e%JsivNR6$3 zkT_((i#|~+c)zenr2YgVB&89oRRy_Sw3MadprBwvWyjQ=M5?q_TiW+k&RPap90m3B zzoo*}_0;tAiM`qD_4m?Jp7IYdRHsh(?f&;2F{WN_WE3fCZXPM-%hJ${+ z=FQ=8+DA`+$>U?$JLT*+^b5Zq2vlkC`)t$zQPu!dwt?3 zx*`p7&8C0z7c1%m&DU!7*0)2aa#&3&;qy|hx{LJlBMEM|p=lwisgDAHGfb3 zU2)fC#BhZj*>)538!<=D)rIja45$8RW<&9--l&rB?w(S&8<^gTo?^}$qq`QCj=x~H zzQxRAU8GxickQl$+(S^>T{d=SA*JzNpfU!BT!<5p|B$s~!iA6+K2^yQrR+T`+v#Xg zS!dQRT#$ZFxF;5pSO^Iq%uVzlLUVM4Pote?@#1&*=3^gp^ZFM7;AAHYMVwe{$x|Vt zAqH^fMs%XF)EZ$gkj0~Pr+u`=#3O@A?i0y z9Bw>==$xhI&cEsBuy4y;NKr~upit;@{x+eiBP{6>&MJ%eQY~Zwv z6jV%~+y19ST4lV8;Epl?+1nkv6}80(9OeR&GP2xp%Q4TshVX<5N2B!t^e7|k62sXZ zKg4E3L_HS~kd^cg_S%L;7z)i;e_W|96$;7AZegJB9Ll78ao}*=C1ots{2mR{{GnMB+B(@zq65n!4Cc89!K zb2XzgBZS4NgTvS$MUVoQiwR;|)W+BzD00({$2M9Wv$+U-_hwx8lbzE&y3;k>M;x}w z4bRDpV1V+^HVQ=!ZY1tu?x0;3rqn^pMcpo58V90(&&>j|nNBT}dS8t{B=~(8V}Ub3 z?cvvi7{$O!;F>qCB%)A>#1movXXcnb|++O`;7-lx#B(jFF%Po=toLCE@{ z8S-U@1wn=oAH_BL&1Dhx_PeM*)LP;|ZU6RsXJXtC9uacExAhK_x>MqBXrT^KsAk{2 zhs_)Jac{%VW;SA!2B!^0MdvO|<&%=54xk^9_xAxT30RxBum#NNa*TISiM4H~F*MUW z4LK<&OgH^VoXS?2qt#Ii!S11q+Nn|&mDl~LYsU$NF~TQ?BZzinSOQ>~VQ2}ZW`Q+# zKe^8XrfqH-3dNAT{IGrWVm4umE=AdHxz2yxab5nh9O@0{7bbyliZGZH*BVn&Jz0BJe??-9Ot>A;Lh<6aa$F)Jp*W zx9hGc{Sw0H9oCSkkY4CSM||3(bsD>A*Gd6rlc&gO$u-qt3cCd+rM-b^Uq){zOy8Tw zxS-4((%Yrj%y%;FAR+DYdq6h0rhp#;#%uv_w0-l+o*48I#Ptk}2Sw$gCcgdpn7`raczw`wjuF4>T7iOQnCQU=ydJn+uQrH-f`0K4iPAJ9`5# zz<^iOxZURMxj8-@v`P}!rjulf4ugECe~QL)m)u1Q!NbHx6F4}lHms~talZ2zyAp#) zV^8L<`OxX@{(>oX9ceCC3&f4}aX!)Tj3p-PWILlqY+V4jjZI1aZC$2dJ=Te*lI+dB4*I9W{1pX~?7E+B}DyS`w{V{eQ5pRL>6R%a_}jvRWk)|K}d+IV6OD z#-?2hc&369nO10uJz#NtQ?ICtRxQJZ9gm2n^Z*F)R$D<__WUD+D%SJ;|JS1af^wheA@ zWq%f1CIrhU7+hiiSZN%aN8o;G`9lE&osHvLTyZ1pt~d_32&xHa__JU{P=s?Wad?@9qSM1E`O!*RN>6&TQe)cVy;q1Q}E>*1{Sk<{dUWq zf6b4rXLbmfZ!#Nc%Kq35?Y1wv9aP1-KGFjk!cj6wZIs0b@=cGm;wxqgFN5T_!kn$iR`Gq6Mp=B(BVX0S-!+LuKdeEghqH>Hm#Aw;8v^i&uh;{VBq z5!ju4h#zlW)34vl;|no{W6KFP;OsE5!i{D`flX@p`i3w5`YbjK8M;Z+5~mh4jhRUX zW;qo7;Evdl#$YiMM0k#&p&n`7$bV95UGzsn9P^f@|5VT{&v9rEkOv%ecx1jcG?rx) z_j*_{Jau-ax#GH^xU$&)S{+nf^hCx0V62RXg7GYVuTD6+$}h|+*Q_()m<0*(~XxZ4$#J;toy zi!Gf|W1R*|#gM{^L|07{2B!p{l6Q(9x7?;~F*SC@BUIdA8f~e18p-*jtP6FJEFzeu zHh`Jp$37DnE7`}=*x?OJ#fTG?tgW zF?kRF>7`nk?mo?DSs}itgDF)piN+Jo=?k;)&%M9YWNu$6ZVV{EBz*D}D)a%N0U!WC zyo@VBB#`pe&HbzY0bcbEC6|$DAQJ*GGnb7aASezp3NK7$ZfA68ATc;NFqgqTA1Hs- zTJLY$HWU8tzk(mP52i@o@z)Rx=sI*O@D3Z=4%imtgX5^FR>#U~%S-#;?>X7sqFBx( z$HO+Du1N97d-&Y(c%Bl-m>x$ZPu$` zrQN6y+=OgYF*($;N-?6ZQQ2WU{BnQrilef|WaTZMp75Sf$PlzaSu2_ykdT222U*H~ zBKj>;#v4WM{y~l`vq=Qpn1glqbYSIg75| z;|aJP4Nl+!h;zV86qF+XCT0*L3c!-{UJ9VdgFRwWE(kunbx{y|2&W9)n5TcsfJ7cs zG(sd)kj1Pi2#X=AAS{4h@OO#I${4uyflT6)PO-swDM$gTvP=MO94xGjIlx_60dQ~t44A=1 zk+d*`4HLFb1%}lb`~;7&*#s4$Pbfe*TWLz58SclhKy<dSKpOa)$FVKgE|)^0c^$WE}&+%LSH3IMdWtFf340Xvb4Z{ z`uP`?S!Wn966pk6FE@+D#X(u$$~ul3lkJH9$zzwG`#g3SJ~cts?Ga?nu>@H=oS=^E zmY`sQrh&4std8*MA#5Hd@UXw0g4(oCZ8)0RID*=^N0$#t%dUShM3zI)jP*W5mSWO5 z4;vR-p|%LfLu9c7>g2;I&5NjP+4sh#PB@a?*`3Y{+mM${G>FUVt;!zITfW{%RoRUsv*tkg0w8z$czzj$2sHZl=e(a*7V;7Bx zT@*){p(oBcqaA;e!XdKk2>bCc449S9#-7wj~UE?w=~7IW}m-5vR&%hr3XpEPS0FIinw>_7t4$ z2ikaapp9|#j&d*{o?vci-yhOIe@OgrZpr?;=C*%tw-iRr?OsSvkA?KU7>*(;pJF&6 zhRbyyBMpWsxgXWCO)#PEMfGl5Xm^F;+1XjEp?KCt@ZxpxB(;!)ftm{j~dSsE`>g;)ttaDMzh5jLvb&gX9j|ZI% zv18e%n~cp~4#&nGx!~nq|0xUJa)!y|iXZH;eDu<6yuSL>p?;N`o-P*3a1KE5aS$$A%b2t0pCw)LLqhviB4zdJmVG@bSYAm5)JdXGKc zd$z!M`|%&cyDT5@NC!M!b~=GYPKZDGpGHU6k4UW{Y*RxvFY?Q_X)@ z^}2rBv|IJIX*$2XonCIL#nrT_>%~)uO$H|*`L>vFB+T+nUCR|A<5&{%)3S0zY_%1tkHH)=aqPjM!PRVsg90H=~*YJJcQ3R)_n z`%g_>wjn!WE3^Z)!ruYdIAdd%5#}Wm7&0{=Fd%PYY6?6&3NK7$ZfA68ATl{IIhVmc zA1Hsd8QG59#_?TWu@C}?1Beu_<{<y|ct;Y}f_EdFM zlg%BD;snVPyQ`17ujZ@UCokTm{#6ioxe(#i?d~cUUY?4pBom&WBv-fP)!&`e3pZ{M zgu?mjCXXFiSEU@P=5FIgsc>XN-|I~jIOTuWO%iEP;1p^D09t&v$ssO}BnSxkPkV(3L{5lA=14%Ir-dqMWjEanld7j}W3S5R zFid=)xaKQ1k?+vys+QZ@;Eyc)L7I74CV&o&|9BeqZR7TJb&PVa=uXF>b!(&^d0cK z&Z;5i1gN7aX;AGLK%bf=OlumwaCYrzwhwzbn8laGMdmN$;E61`azo!sQsyKK{1tw4 zFUeBF?RDQ*ca1VgT7!%zh@I;@kX(P5JHsRD|0D|p?}0P-!pQAiz1dtlGE)2o2PZ_ZfpuX1%5Ih z=98@gbf3CKGkn0c$8tJ$IPk%D&^8dOPkI-G?gQvJ&J(9;@hfJU5r`NNsFi;V)*-+l zf$5W&ZW4K_=m^YvodkZ8>UCZkymd#KPQ zao<++t60K`mq$xWFRT7oOOhjQWU<&gE!m(9Pq?`qpMBN)$?j#{K`>GheYRwU5U)l9 z>@`mhvL96Ul#VS-qHPxUcSe6>)j@WAlW7nysn55CjJ9Pl_fTiI~LVz&1sLUI1r|zNZ)$;{sKmLE^Ac$@S{F&B|@@p|15tO2PPNuIvJPGxjV27XbOH%D71&;2wZ8~Lyj}!5kA%rfz#5s zX$KnU&?#rL3fRCQw^u!TjKA;|3btEVM9RW6b9P$7I3lMA(|kcloI0P|=SXKX`zUTV zArcQr0xeXC@cHsNSm1057B;qLOwkefIU&E6plN9tH_p?-ltq8R7YbvegB`ZSBTw#C z!4=abuV(62g2QAOvs-?C#n%qxZ};oY9UF554a@tDu{ELd8Su@sc4xws1|&#r+msw; z1q2aYUz)7)jEkFVgx*=gv4=PAi*t?lsW0qmYaqEw)_%1?2Co0 z5{>Jj8usUbTTFj7!#Cm%630QW8=IFa6)HM+>SeyLE7XYcy?dZAIgUp8f~$31nx9wftD%1~^b;@4r(3nVbG!P4gUUZ(-4B?;WhLCf^4aAlW7H#BU5aM;EiNhRccBBLWvs&74Mhy*}_h^<)Npj zo9kZa(UE^*S;1>$yr)zEtr@DrhP}GTPUlh6Y8#=DP(2m|mtz*yv%nS5^^Av{R%mhr zzrs;qs#}0zouT@HCa6pNzAZx`f}Hj~y*3f+DFKe!U1{gNu4zuRplfuPbG;Wwwvpm& z);!MUx?P_I>88FF&^DS(qX_ThhQvI?9)rK-UYON#;;53MPZj{r{5 zC?;+NbBkM^65u%E4#TlYh?l->H(}&X<@GQVPfa(9&H;^1C%xyl{T<}h{e%dcEJRU5Dc*x zwC8`=q!2pt3WQVtj+mI}v8jF;)$$bi0v`VleBoG+{aUYcZ6{ZuQ{)A2xkgh@u+5+s z7rdpy$R9%hV=ck*tR6hqE6_9GK6$!#5iDn?~0JNiaw5BMJF1zZJnMHKq2pN9{)vSayF5 zld7K*h#^8JugKgG*mct%DlE#rs%y0T16tk)arhuJ(B^ZeLzsf(X_ zi#X6S#TT)(Z@STu=WC}3gP=yg4TAmLBL3MzHZ`;%-8jZbv;?y^9IgTORismr0 z-)~^5UuY~+Otyic)#flRvuSzbS+{?<5^omK@mudJhq*BCO*s`^LFE#~NodNc+{*;Z zGs98}65SicC0SE~$yTbrPy(eMgff0WA~~q8vD)OsPq{N&bY()M^jHVx_cKImgy>}0 z(@0mwo%*fS?HxjFsqEze3d%#H4sC;(57$wa_yuao+e*a?dmi)(tsF6z66$}%#VM0| z&Lw@^cM`}#ACKdi6*TR}-Iost0DdWiu-@T|!NG)X)$t-y&@cDBz5O1q4u$jT_Vsgu zeZ(|(`p>}=9!GFI{h!cDX7TK3?lGsjso%ZuLnerqj6Z+sc8}E&2jP6b z?tve<*;-HQ1Iv?8y%p?k6lGqXr;8sUf3OkIxajD0dEhR)82h1R@?7_>YsaHI>>)ev zTP(2=9P%n2qa6eY79aQ0Qn*~=+r-K#mR7RjEI-m)4lbL@8gGW;pi{$3TF6or+w)EWs|$$@bvTuc|95^IBC@I#Vfp z^V4LHTh6yALe=f2$qsZ|PujiH*`ujOmiD%~SLT-(R(d??<%u_pclC)F10%V|UjE$R z-kWaKeG zKX2lewl>wnZe9f~olJnZSBCw%-SUB-Rd>&V152Ma-^s2vq=G$9Cefb`+m=^CTxmP= zJQZd3Gg;_E8iE+CtGkQ?Z=_?`lef1|{slEDyZj1eZe*7g<|PjTGcl1769X_XGnWB3 zASr)VyLKBn4DJ0DD(ymwte4|0_nb}6Nv&?r77z!cp@)wNACe|tzZemqwAnOvDv=t3 z04^>r_~-uN)0da^>}B!#vV5NH+u7@umfP9x^LDY^?PmLC_V=U3pwrWQyMBHIldX2y zPP^5k!T?sQ@+m3^*p&4F!Io94U8CJG76X604B+HU@I5-VwFsdsl|gWMC>wOk8&k*H+iW?T zzb-br?Yl7Opz&u3^@Ksv)2S;<-AoA?_I=VWf#hcOCFQ`I=yQ+=8y&miEPl_3KjeQ% z0#4_w0~(BshS5D524D#K1d5MoJ7g2tI{Ax4ZGEONv@0eS8!-0>Y~F={j!DvPaxWO8 zfy8UPmQ>3&WFzNWud?KT&{XvL8XBlhy9$?Sge505e&GMl!OPt+d9v`MQsynkR10r? zaP`Z{E6TdSo|8=C#R4 z@oh2S?Y#V~?>|02?rNh1jM8-9GZDD?<2`UUsC3j4EyYr0g_^|=|D(cT0)T&5B8Y>7 z)6#)*eXHEmPR%AbTNdW|pB;x1b z%7u6J+<((2=}ookNQMVYk{GuOp`10JHbnJQZCfACl_?|_#3{b#s=Ojj5mlyG#_9vx z%w$7~5~LU7)hq~}&}75+yJAM5l}w%H+axXjlqzHGy->yGMLjf9YrD-#Uu+=&prrgjSsh+0}Fq_k*HC#_u&Xm z%P1PMV_zMO67H21iE4#q81MB>%k2ivF-vN;1b3DAkF&r*|5HOwyhf|Dy_*VJ=s}`q zQa8#xu6e7DOzKP+ItXQ$$S{r8_f-^#V?NlQVO050w3~?M6voOnWn^;GTSW^k?mBUL zDS0Z=Z%|>-b$}iwb*yhHZ?Y?It=05`Xj{o3R!H8aN01CHBps~psY$lwY1ZhP4^5$b zkT;FNW95#H`M!Us@M=_Y5VE?-&@t#+>zC>5!(aP{e*rr4C*7A3<|PvXH8Gdr8YC5$kMAH0x1W0;*mDCkH8Ypt z8YC5$kMAH2128!^m#`Qk6a+IcHZYg5Xdx+ox?^x=-L?iAn;muh#wZQC|F zw(XAXq+_##`|Z8YKDW-TTkFrztnrLzj#_KfoQsS|+}_Sb)zbmUM8`zW$PG{t7uIBA z3~ja)44?L>`SfZPBLpeaBF=m2111~4-+GQp7nMC=_roh;2QTmY0^ zCRG160@Q7cOf79KodD|gHui3oCKdo*H#avyH)mIRCs%&@e-^0#fdCf^Ai&Jh1_%&Q zP}Gu=mjF;o$g2S)fObG9BO8FCtFeux2|(7;1Zd|Bqym`PI{|F|qnEw#ATJ%3+qpP% z{}T-~G4}XZb+iDN|CMZv{#P>oU+I6nmkIG89)HJd>gw=c*FS)q|G@{K{D(s-fGN=I zpJ-Pb8+jvJAb?WD-qyj@1?U8jvo{4g*#U&@ZA<}T9xgyTQ=sX8qm67WZ9M;fXb^sFxGYf!= zh0*u_z%_Aoast}9{G0ZFYWc7J?{)$LJ%4~EaO*4fCOjcl>8)XveqzP*Rgg6EvxaIk zD@>rPGrc!DsFuSPrUpk>IQObJ1?~v=bAiTudzZUX_btRm@j!%=sp%M^2)z}Y*HV%y zbHBRnccsF&#t8ju2z6{*6M2Z6$UB$JjrAZ!>S@;Oyz@F~$8tVY38omsip~K@lz*Ls zwZ%s}2`W8`A6eR82*3lHT9kQ<(4uQ&f!F&{*}e6xd}v(daB?=Hw1u_EOJv9&=XYgS079Mk z-yMjRng%)mh|55&3t>~pRjbe{q<@9qscEy{%X%#|PyNjL&HNs@M3g&b$N5=4A#=Bx zmV&mWRO5cEC{6-3O#YZ?5hDgY!#ts2j2T($iM5qFc-zD49;d|77xFAI{KJ7z%@hjj z-(z#&HzcuvhNT$i$^Ebu_lpg9?GS|e?e_TTI*(U7Yi+;Bam|!Sr!b7$P=C?iMMZOL zK=j#|su)ltX_R$x3v%e?_JjGID zARzNg#W|2XngXa+trydZk?$+y$@+B@CJLW;?VxU(#cFXk7@>MN5=|DC6{nOK!q(PU z&v7&!N4KWmBw7sh(!;vMxqlwqe{o*^P8K<)8K04##|Bxc(veTq+4Ce@hD45mmuz)s z>|o`05@r}Dn`fj3`{o)hJTF^Xq$JBQrovmQyy;<3>QlVMyj!V zm~l$^RTKS@Z@SPhJsKAI3MaclZYj{J3;roo&`*rK@LJ`Mn}68;{fEF~W4}I1PC^3T z8=A~j8(_G;;9lMylUf>sDdPn)n4z?c@2e|f`tPeoT04eigk9srAcD=IhE)YTqX^mI z9Mst_@ql0vEpaM_c;QLZG7I-4hpg%? zgduK599aezLC-r?24(ChpyfQgqg-0LP~NmEHy$MFf-35vgW}h10WtJa3hWFo-QFB@ zPZH!aYauGhvQEPg1i1oY3318U z`PVJCw0{ETW%FOWYHQcYdlaAy_IG*G7zn+5f7jlU>%-ovp`Cp>i|q)5-1iZ1KBZL( zwxe%4Ra(}!b||maO-3P%y$tR%?XvXp$UJ_N%^cBwQCxsymF_aAWFm4}?;~n}US+bQ zxgyy0bNupTC99}*C0G| zIYiwmC>b#)beRyw3;H_myjcWJ8^&pQ=9X2}aBYOVnks-C(`$`phMfq5jv&p(mOGvp6KY41F0#y7dFHN zcYiV&{iEGnrQq)O) z^hDDE3+O5~AqU|3_I6Dj*-*9MjZ>amd?$lH{%(hKTd|xKGWppaUgN)+RKi@O^e8Av zHKU%)FQIPu6Q@VjXagm3ZkH{=kUZt1pd?gb?i1-3@W2 z!D|A-zh|;psu&u7|F|G0;y=08Gi6JIcD)mvh`P55En{rmNl-D3e>{S8|wM zEciVueGM$Nm=)lKlRDhcO#nx;O6-uPF#F-Q!(^M}7~;{o1Q9mb8MsL708+3ico%#6 z&IhSk3K5a8rpX3`{Jt@QVzt!?=xnA`-$$g1wlUJPjDx$20l8} zCv?MRKB7)9F%b9rP)pYO7gjmur)&9DofRQ%53uMw?j!X*1L)iieL}f69SqNTp`VwW33nwEnX%8+t6%3 z!%817Uo@%BI@FLrJt%phaFVhw8Y+b@=Y0s%%~)*4o#%XLuF7(ywaWADSxugnTK7@5htPM zrC3APD8#Y6(#Lcls82B#SUQGc*bs=2ir5^X7s@t}LcRlm2778A!wFFwlnx)$`}Y3X zQPH^GK0e3SUkRkRb0Tgf&zeBbR6n3juMz#Glerjo5NiA!AhKv6#IHysS&K_I6oFF< zyjf7EV?=OToRVW)3>vckBFbea*s25lmcLeNs&TQ}S8o9)G|Uew zu=-@~dU~5;sw+IwV*&K;r>6#n1~_c^Nc*Yqbw2YG1XJ3GCAwV990|i%*H}o>4Q&zS zso#Oov8r?&#T{vJ`gmHkq2rF7=w|^gvfzBu8I;#OJeS!>^?x}i9g7A{8tk}jBX?=7 zf^LkX#1_&x4&jB=rPx(>u^CHL#>#9MPvS+SJT;<|1oLyv-4oBbCdtKy37@vSMwd=d z(ilW;fV`UP#t|R5Y3|~hEaJscT%CDv7+a=$7I+hz-}h;w?kB^F4b$(FyiV=@$+|dV z`w>mrb=Y%K=YLrBS=9>&PXzD|85xZ&ii@fJlhHOsHi4f3Qj_IBI;4M(-Y3K8wg^Vx zX3C_eL~JEgEqI4MM>8|Dso(tBo0LA%y%K@V*Ln-aBd#3%TPv*xcq37f5hWP`tF#H! z^W&W~EUcdD2=6vI;KsD{YiydLnWvbrwR|&q8}nmfvw!N;W0;nnEs@o!`e3bGAaKDp zxp;I2OOc7Q$gsk~-hx3kkM`5yh;&QQ$F9s4$}Bcz*0NKl!g_vV`yu@KUi!q^<=IP| z2(Fel;->whryQw@5BVpnHsf_!w%$7(h{Rw>lF@w1EZ}e>uC66Omrf7^igZ)-uXS5* zqtr>1bbr?;B6nWH3ntu)h|-H@|MOSbLUt9t!OW-yW_PqDSIwOR>zK4b+*BYl;;rv_ z_|0h5Nxrk1E&tDFLtW_Em{!7La8l;eR`y82=&A|E&GFwBFXTj&Z)_i^@J%xiQoMZ= z`qm9IWS$a%zYTx#T21dZ<16LFJryccY!+oJSbx#zi-T6wl+2PcV2LL%#~>6Cr&$z2+MV%hyAwSNFCxD2v?z%vPLy1(yJH$9_n(zIpv#2+Nb76cO0T} znHjT@idmZ#I(!kpP3hnZ8F8xYReLER^%bP_?rBhBf1k0hVn&}X7`bdf#qt!UzgkQ) z7ecu$DZ7TTXQrgiQ-n2@B$Bkaq`^d?ReuuYisTLyP$ae-ywHD%b~eVoUWk}|;mcqy(2vidQZ20>p5sXeUcUrHEynMPR4Wam zfpf#MF^`4lNUuH2Jb#?TGV6z*n14rX50TC3f1Z@Cyhz~R_Ic_b(os1c?n)yw`m{&V z|FQ>MLK1}QS5QMuX0mOglLPz4pV}<(=Eqjp_T*&62|$8O(3lzh(UMCv6{Lne1{%t& zE6m(ty@$32b-~<*6zb5`#V$uX9Ae!M=7J5~!MibC5C7S%D74WYONi_4Q61Bg zwMRi!QH!CG zw4Hz0jL#G?SNP^p3Jj&~2^tHf3DcCPE5Aj!+f?*7{uSFcLsX98C2UUrcVE@d%T34f zWV_zvN9gf)r^>ZNt0PIc>~d2zu*v;|;AG`j3!CMPjAlJcwao1efq!AU5F%x{Jk#H! zd%x*vGJVJk6X`DaOc_?UJw;P5H(R*t(|RyP2u+h@S!__gzci+}uiubkbWs_>_un#XcDh6;X}BJ@Sq8A!`Eq7<+BhYerMSh_W0 zJAZ0RmCu*<79*S)7rIuj*>Pz|E3O8lnQqc(TC`$tQ$|1M>S0j@# z$1bWrzvZu!@&3Z)9_gE;O9<>D1PvyGMvPfv(Nv}w;`}-@nv_b=g!OG5p8_=omqza# zT99Xb->I=!y4`MD@E>-mwIup=AyL(ytXrZ%c}7b1FdN7?g88|^Gfe90qG~jY?dqiK z{G*R0-T-*BIe$`|uHc>ZQi(fYK}7#sMuDZx&#-4&@W$Ss$8b4woZgA9p8IGKE;y;* zXs{FR=1HdsW3<8OCJ3!OaKXZAb9)~v&oYFh`2lUu-}RW5!=nWa+_9jvh2KV!0#q^r z7vj?vo)y(F!OAn@YUX|V6_VtAi3ju4XGQxU%|%0GrGGu>7ZIrB8j1gCOm(Dw5}61J zvXz<9t#*~*Nbtt6?oosp$vX_hQ}ec}{#i^{IghCC7_8 zAVlg>4r2UPn;MnK_&B>97d8H4&fjzhKR+F>))X&0CNOWsHDI1vx4d#|aA(?p8$=PXZl$FhC6W)Obw>~}=R!;O3sxexNU<9BYwp)z}6k=AE5J-w)bY25@AW(scG-&=-YXnP4D!-F; z&3}!6Pnyq0T@1w@NeI~;;5H}_h_2YA{!BfOyL)*&8wFvQEq4r$4rA_;-ejj*K>(a)}FTJlTy6ICZh*=!Vj^xY3!RnRDUd)^cXGdnu-JpRC+NqZH-A9R%Y5K@ zvsh_PXg=&<*Xb21HU(p?O4zNGs-e6)Qbvyx@6NSP8m#2lat$OWY5h=P#!s8xtc%>h z1{>3Texr3e?{@@8&S)R+H;jF6 zLqv_vEq0n;mSbccpV`wlx$bQJ!X||y{O4%F76#|ewT7#Y0p$~?mw)3;4Y=76qgvfE z*?5455O-fNA4g@H1%nRIwBno!BJ!G2f2&|?n6T&%kTDzRwsj)h#Io(mu=;q5el9IZ zxSq+MMQatJE$j4nrJ(UJ^FA{_Kr!H7R!SH3wu-5or8G^3bn2lkCiA1Xo0#$PkLfcp)?pbOiPs#=t zDF>hZeh_RTfy8B`Ym0-Zp8@F2Ww*+Zk(UPFN5!b}kcJNY)d!C%Zjhy{+ndsM`_Ejb zU-Zw-S>`{7cY?pZLz8PR5311p?dva9dynWNyy%2^ux4+1e}9uf1aKSwK*l&Ay+E6W znY9stprbbvQnN-#;L6ABz#!&3W_tJJN1SS+0Ar?|GRtxJ9DA0%DRS&`D&o1;YNS?G z;|$0?_Q`|^sDE~MVyz4DkC%D1&2IYDxF$dwxD35=*N+Tn;zvK(s57P|(;Aop?5i?f zs(s5TX7RI*c}}71YTDNtaJHv+C38kUdO=Dqo?9i%Ih*t?B;w2F{kj;Kt@4syL)G4r zB0+!47V!8<2>A#&>u=Ce{=R)UwXfM@UUqHR8d9hUlYitBRcDnxAL&ZBu@sZE$4`lk zZVn$OJ6*5wMGSJ`#;>2V?)B3&?&kD(UVm%*=;cKpxdFK)iBtIe*9Q7(9;Hqn z-M$R0-;obw%2*g?8ssvl#7-0EI=l54Y0wqGI`!})x3NvjncXTJoe8B55gc-0pn%dl zgjx|{-Ut_#vCI68hGyX17lS=gu1DN#=E#9}-nf_t_WMCfAY55!#Q0fj!w=8Si^Yzy zKYz&uxBUGQG5^JqDxn0&$D<66-ECHz1o6i@p3dBgGxgBH9 z;>Yl6;|0ljHi7fGoK`{(C)Xyk>#wP<{kqS>W?`wa<-a{n+|sbdK{x-Z-UvdNzrP>k zwl5tVxOy_uLCvdg%aQWQkZ9;t7M5%<6Kvt2x$kEmsBW(X zUezzFo#9r+=ecup{1h3uO|zBuR{~weT+n>Qyq({jv>Wv4 zae1r$Uhu)KszSoztdFSYbW~?6OMeU2l`tvG&}|Cm^xo#hHc<>}dJ-W;r5m+V@G`p$ zsxXixAAUotUN*JU4}BMf`Mx2yyZ@g^ zK0j_|If>7n64x-3&_6ShgcF+FrXaRtGKQh-$aiPd;jU6+oG5m{g(Yh1}>fujMj@*ZdfB^(Sk|Mg80^^+iM&& zo4b7bbw?$>NiVou27wXAQF;*o^9^oj?dNJht#NkDrhspI!NFdbG=uy%4|D^YGMo-D zc@*?P?rub!?yEFIzCM>yAj*((^Q=Pb!3;>Z;X+U0G=Ze)cC)f$Rev~#`U|sk(AU%h zg=iuDMSGVCQg{G7@3*ldVs<)pbpGI1OU}-!B7Neg>k0B!DVlb=2bpFV4ggw~S}I-& z8cq&x>=kv$54fPfj$qh)ia4b7wb}$C@kr*saSkim+@M{_F?94QFA&~yP~-5W_UUx^ zy2TA?JnUs{I#y6dZGU+eFa$?TFM?{0rLo2DGx{=E(vzu1}gZLS_j8 zxy{h$Uh4X+i27B??H}b08+ff?*>>Z~u_pc%v+(E%&>3kOvHIPG<(LpB$!x4I;%U$g z9Ts;4UPPBsjen|2aKsA66?e}A=cw4{rd1I`qq$&28zc4X?B#vS63%kTvDnPQsBm1g z?Eon=8PMIXyoex*gx{fOrTfyj6;}4@B}Ve=g$)AS5m|rj6LECHo~=(QwQ1Xv=0WJ< zb9qH?EROcFkVxOxI$=kq1oli47U`l5knnPgf z5zkvSRe4y!dnMpN(vv0l0%g0knJtg@akE(Z?@?gcb6qmm#FsGyv`zSot|B|rOC+=*r{KjqT*(@p36#5XfsDBzfnt{rl3b^F8up-J}J>q z!2L-69Dnj{gj7Tirx90Lpn__*5e&C!K#O*Ln17qA3)k(g=m7m(N#^QH+$IA02e#5( z$9Wo9q*4bognx`?&x3#qs$42t64RihnUlbJlLA*j1{yGPD{G-*VI$K+*6Fiop> zdZpBMnhOU^?lwSJe%K@-+5C{rm5Fd6=(vX9^M9L6BEiGoU8{??K(rWO`@i!Ce$!eH zBn*mr`VB2xR36Gc3VJ5C`)^cIqG_Q^+|P2-p9$v9yI4~eVS^|{9+ZgjKkyE5?CC>* z_UZ{cKTF*2HpZO}Bil$T65tVNB zLx1^IX*}#dzqg2#;aF?3#m~%``sZt6Vk3l}J+gCc_DClIe1;jkYKwQtn6TUj}rbT zvl%0|&HucWN_}@RM1l3AcP)OsB~)oDATiALIe!#-Uxs+useU0!DNIri6mmV4y|KE- zN&dPTXcRkOI*SK~`FYnD@*Wt%F5d25k8TkFM2I-Im8Z?Usv6j(l6^aIbm;ii(togb zY=$_Y=&aE&8u%!l)tWe3k9N5QpW$AVfLU4xg~g-{$zuM4;Z_3H4}$V%;ACZsRXLP_ zrIJjvRVn3x++)4Uzz=R=So5Pqfqpocq$P=Iq8iWw*5ctcWCXeJsuY;K|NDV41rx0C z3vl!&5oN4!CkB6*bwC6N6e5V9#}gn7Fv>*upeCHcs~-ERg74@d>Zf9kB!U?b~k#C$TsfICL*T_qb((?)`VMR!_JFzQXW7y06{>$zZ?ZK zg`s~70Saopb4%!^&qk0_yw&mhQRL6g@X9Vkd(#^k$Cu8JW69?Io>ZJhe*HkJoT{B6 zg>F<^L|y&my%NLT=CBT0K}vtQ!OAzOeHN(j6}SalJs=h!m7`9-JYnB6LU+cPp^Q$6 z;@{((ge-1PZ>7Hb>bTifyui@Yz!ffK(rZ4Ggzim6UAte6I{v(-T*4e@WSQkTuIsA^ z^1T8EhoybyZcwWkzXJBMKgO)hByUP~a>uiW!mTH-t_Oyc5Aa)gQM-STjK#pe38Sh= z7(1R{5+G66K$6~}snYf*Cl4oxt4!>9cx%dp?z+?t*O(yyuW}QW#D+HK3sHqCLv?x_ z0$AvctrQL8gmOKpKUko4Wx)p1QU#>uD);JDERq{2rJ8N%&q`5BhRNZvfhp=unh=E% zXi%Lc9t+4I_sEBkxR!Xj{{gam&YD!XY^ZQ1x`PJobH z?h2R=)(pv_@|$)G@Rg~dAPGfOb@+{q;Pj?|_wx+Ug0!P;uPQa95#(Q)G?Ye(E!4dj~4Kj=p7}oiE_=@u3Zw0eO2dQG*!U+jkcO7Tn7AsYe<_JdP z#2sCfa}0)u(ieZ94y6y>SjC{MiMSpc^1@37#nXOT9kqK#CcCS=M0b0lDNQ0oTvesF z2yyN`?iEe3kSMx0RF%RYl5DF)Me%Efy53SH6c)*|gi~%Trc7Bqi`Ava;fyqf=%jW9 zt-`m}D?6-N9ikCVc$i5nhk$D<^VU#mZwnw}LmR*qgjRo)0^)jS6xA+O>|va5QH%E* zWBc6Hwr;b;MqviTTIZcd@!2lwNtAOS{k{rt(@8jaDUe^cVvsB62O#)$Lb?_P# zsSQC^v!MNCJ(Ek;`O+a|U+Q3b*r*5W1v^F2*n{E1mBhO9S`F~_9YvlK5~!Y;Lki>sx8dLBfGzxBUbaKHrTMe&!)3=Mp;1b(7CzOIrp(y>2Tt{#BJElhW#1E0} z?0%z5-eAVcys+B^Az5H&5jn-bMX=PoYH4_1BW`n%1xv89OqnYG??uX00(l2+>+H`s zh|h^U;qP}BwX^rCPG>uq-+g7qpEEozYz_8h;2nPjFuEPngqGZW;KLy68usBTlV4S4 zn;;j`qYOzKb@+6vTt-VNpEr5@U&(O&evkDMRv8{&yTs#xrzJ6@RxlvQX*3}~XgC!n z_CXtwq=3@7AcOc(*$A^MOf1jW75(4vGUL@z2;%ovDHR%0d88_~N73i5Q>IO5=TOC# zS@wUkgWasjuR59idp9X{TAG)-EFArep6Ws)f~{Q=;@sG86TRki`Vrn39JUFa09Jw| zrZi#f5-m+$X0~j~6y(Nr4nZ^)8cXGNITjlCx~Xp70~gPaiHhoWg|VuX#gg;JKA~T@ zC2|pK?FKBUW}e#9deh5y)mfH{7uCU6LM(srV4o9oNN=#M>d&I6D+5jdH}jQ!07R+mw)Co zGsrLT1?i-FjzIGX6!|KqEsDS%>{YYR!D;ca$;7{$k!c?L{>eMTwm3rTjb^jSQT=~4 zF+U=ko#j;@6I({C0rrCUkP9l>80)+IyzIgOX-05c045$)t=a);FGi_vziGo4n~_qv zd$gE5Wsc?UXa}qYx5!G&)*V{uY}kOJVs$bhwOmt=56pd2lf`Ci*&L7-uR3?2q2qHH zaf^X#;33379!{|Hf)~*c2#e~ToV4;HmGG1%m3<55sdQR zvjWvr8eNsGbFa|&|6KLB`fO~JBvT{0jZNf2FWB(dg^7H6pA~w?aRL#Q^&WqqdcX^9 z*$DW=qM+kggyMW?=rgb(TO#-a0w+oDn?g#h-eDy-RO*SFl}+$m}ZfMZBeH}bx~a;`m4WD4|2lu1{j+VGBOC*toiy4I{NkZ}Eil^I%%uST=US$V{Quww13;r-n)3MV5cnFP_n zYjD@{?<~UOq&)ovr5S&YdQTt3uxplRp}p2E;!MhOp#bVAR=}XlePwy@O)rsW+trhj zvth^+4HMzfoj8TKx-opRhjZx1D`|q4lN4Pw2DwkvIagLvDYL_8oG~f@)v9?M51Tpe zSLRL`ZlCxs*AIC{97p)qisIn#smx>sqM#~)oNn5~6XJ-z3_gF%u~MuLUVr7bWdpSO z=O&EsxP2vz>k8bwOIFVEO#`0Fuxz)!&6X8#y;&Xf=f}tfGzd+%0;P{|@v`{wq*SfQ zb%RAW^0P!gnZX{MqLo|vgOo(Bq+EITq>Sp(LLWSNg20w9>t%W4RI-5 zMH13K`mOlsAVhyO>r9N%v4!hS2s!+AB(ifX zpN4CwjfN8!?jOwL%eeTz92ZaxnoR4KIA0Cw*0qy7yPbcX7Wzws7N=e)4eTDzf^}Q? z7ZV2tXGM~o)Rv=N?2A0Kd9<0%{1CYsV(0{9Ez@Mke!jy0y8Oc{gH3(w53zB;B}&q$ z_A++2)x@5XfL6nU9sO*`*rcWx9F+<+B9E1A$Wt`UWr*j;iK~u_|Evki9RrS@$&YLo zA1^>j!S{cHR1Tl}6;on9aHE80vF83ZqJFeU0AyW9MqE7gp8-?G3Wj<;&tFu0&a=$C z29?67L~+TWP`8t|;6FogHX3CNp3ZB%iLZR7a3KD$OAVn*g@u>LZd)@X{%g`Mg~l+_`Oe+hrkQugRmG84KP8 z>6m}{KSm~q|FF@otn28v!c&lU3{7)TmZ2_>&UD8u5|sgCBWX=`S`G9ddHUDC>!xDl zytBQuUqKC*>et*Sp*XNB$hFG4lkNIRewEiE5~1$Rj7{l5aZc8`D&xfk9F2G1Cl51i zQ1HBQPwQd(g-Abt6ZRa`fP-H4=)A%xc<9_3vU$h^1fu-LW;fAblt2D2un_$Zy~ z#bBYr_o!A{FFe2+^wO1L9&h+-q+oM=EfSdjbcPGsl)$D6TaMiN;`jk z>o!Fx0&$cg%gGx2n2sOH9=fbgcrm-C`-v;V^209=w~mDnd2F56-#)b)Y^ zbRvpwzF3d-0(w0jC0R4A;S(+nR{vmjFd;4A$mv&E^s!XxmnG}&rSx2IM;EKLSIe5S zJkVvF_XK;kvw+=e3#g_0@)eq9Yaf5Ze+4(j3Zlav*Yt?I52J~fey4O1Pm`fD?##?| zcPi|*VulxEFY;wmBW0lhb#euIY5*C6Jy$aXc`wDX|3~0sA+&ck)HEVBmJ)%jYj=j$ zlJ3^FP}09!x^W;Zx`w*S?tK5{-iYsI%)c}N>-7{_wB=p~Tdxn~yLsvFX6&N!^2K13jqUj%1c-Fyb*;cjuRbY`O*CoYW6+;Oo?iU$TMm) z)%1EWpeu{C8RNTG2$!XxgHe9~%Sd?g<%&P%#|VnGpyggqNz^U*R=VKs0+H^YP{$hI zcqwkaEO~5&46*w)Szd!hg!`!yQ@nUqbX*w%+Wi_f4J>`akFNsfVp%&Zl*PUPmni!b zVPTWwQH<|((F#lGT7;qboPwfe5kt{g`Gu0WR1AwG>1Jd|>|3dKV)}n3^y($pxixPh z{Wq$V&|5s6Uh$Ef-%}(WDT1~EPk$?#Yy|rhLE3oaL$>cfCk^c?;gacAAbAYRF<=AQ?A}G4!_O;OwZoL)q zWkb0BUZK;Lo@NMaxGR5Qn3v+%c7AvTD!>z|vc*)Z_as%1U#^;!G4N#6yUKabgI_J>2?3ifj2}=R+`NB-(cA~jw}_3_y0+nN zk=;Ici{wgqB_@HJAjVCT57G{tu9-RA3C)Hyb7*x2y!yiKoD5Iu;*YZCAMaL^(^=T5 zx2?A~TFkD^;IhtoJ{Y7Lgs&3wpVL;A1qyr92ageklmrSTE8d4+z?nTYcqF zlTRIGe*#Ldi&TG52azb#GQePAI%wblPVm0kjI@WiFHICIi7AmPrEL z3cNT<58vC6jw`%T{^K^da1jWF*uT9F2yaf@PU6HKI5(rmPmZM`h=(+y_;#y7C}Qap zm7*@RL@Fiv>C$r%&NbR;6!TWyVOT}6be4sX$Q5tII4FPV-_3KNl4#+jh7ISA%UXLV z97z$LV41dA9lIEJTc~~#RjRpAgnbV4cDd{o49ks(NV0pl3aL(85w-+RBc=nrxD-sD$ezLp514FZ-COqzRe81B=%;`EIbW#%<83%o zKNa&*cb0vrW}X249T>mT5u~}=RNqcNO4GxdgI|B&>YvrT$QNd>^!+*uvHKU=2!(@T zZVP_Bh5ZxDxy&7}^eSD3qu2DH0m_h6`ecGqcO$$OJ;rAEX=Zj&ofNzHpkRZxk(aX9 zr${}Qk8k+UCkUsLa50T(<7<_bsd9q7_s?Saa93dS9ZJgnsMI|BhJc1kok-e_n|GWT zv}Av9;Mh1>=uBg_*6jSym~1QpWTiPB!^PifGpm@0#m@!Lduu-O)qA=QxAJevV97A& z1K%_@4WbUv@(3iN7RI4MzI?5+Z4Lf+mrJfo2MI6%(X)1$7L6f7)wbpWw+>5FO8(ni|U5%zR21);A!Jo z+pSkf+;I4}5Lg3B_kIXqN>>zC*qq_mK+Mwj&VeFIDHK7_B&P)=(j1h6`O5t>u0nsJ zXfY5z{*=n*KFrji!Y;zC{7JgKf*n;nam>|nF z6uJ}{HF8QC3qA1ulI)c|9l}I6KtA4qQ-0cTg&avu6}S?QdN^bD{B+J|1KwZU$;if12qW2F|+=0GQd|S5ArnNC%`|D zIm0c;QK~S)c#TW0-9KFyTIYZI*WIs6c=B^WS1aK8cB`xGgz@vx?~FT^VjOVus!l_^ z$^yyTeR&k-;hC>HROvex*95Rj*MadM6<|!GNug7#X?DbI|i~Am|Pe+5bXK-96Td_R(?!38fnIPCK8Hj(}T79)hBS2^$ zqwxk3v2#MBJHfsX_kf3ZJ=0i82vJh3GmCf6z)VRUmr zU#^D*j`3UJXS-i(6EP0bNFNq-S3OtLKhJDUs{b-o)a(yJZ_0%Qg_UY)o z$aER15=`*QWRq=gxx#x@Vzx2}T(_u})*v`P)Um zaV?E;%jNo?a=F&EDd9}Vb4b58ox=vIh@M+krwfM^OY!GRT(bQ3yy{TPo`RkI%EQ1$ zL>!1Xzmgp`t7|Cw>*9`}U)l|4m=dzFWc-`Q(X4~ee=Oz#7Qmo?k2fZx@&k3TSryM% zMml8LeudY77tnupoY2k>$V?Uw8D)!k>dMiEZ|_wb*BzSwcvW;7&4~>`@pnN`?ZbJO zoW2~2bP!iCIjH*P)#I-)IJJL;Cij805z;Tm!Zfebs&MElRk)LJ(?fZ@^wkXrO>@4s z5{1*uW(Q9=tDX*Dr>&q#mAH+@<<72?{bL^zK)wI*{)2y46734wEV;?xSW5BxHG&?r z6e`Jn0=mft?#C)s^@N(p;!{@)kWn~s}2;rLXWC^W^ljQ+7~ z8oSVJt)hITgPBT9%5HW4ELPJ%$N0U8&2&BTH+PlKO`E6H^_ithZ4tshf8H*Kh8{_! zH5u?QS-V$Z1sU{PCQBKVu4cOnGb97o2|E5psy}~UX~BVCf3%JKAfbox0--}?kHV&- zVV}@~@*cc+=B@xF{NYENx7KI>@fO1ixK=z%-0Y1_y!@7fN>o>H^{gGhI?@nCt~u!-HE&F(`6^8I9Fa|Wr+mnS^a zNiKi!YI6;px-g(2GLijxjR!Rm>Uy*-o&p}oO9}`5R6VLhow!RNnmJ)DCG+XvBwS$w zyAc?ys)x>cYLW+9Ho9=xmf*=-&X|98&Tgv&K2RH{+e-$1VdGmVZGDwOmCJ_vDUKr6Bb?KDGGcw{9@t&&t^L z?5-PElC(hxA#qe<<&Tm6Z4Z8^^f@jd$CmlWA((=on9XqD@!#mcaXs_O$n%~6;;45f zeS>Ddcb;(muRBql5VTa;S#6q3*;zk@%j_+cIMc+V2UG>_mg(5pF@_-+dNEt?qUL`y z*TB``{M2f^4YXUGYmP~TF3p*s?A)IBikQ%H3$)eOAb6~-pRc~8UIOd{eoMhg>fkR) zixmDCOYhibgvc6rO9`(ZPF5sgO+sMv%zSL|JBV2|ZazPF>aRuEy~(ksaMxBk!LDNU zIdPHr*OZmP#uTMF{a(IWWrNSY6vTgMh~VV%^W~;JI$IO$Y>MEw9zV@Fhc}dN{=ChB zWf0!EE2ed5{c?ezn*yNjlP(LOMUzyHVVHP!7>Nm9{dFVlF0w&aJSEJJ9ri5H9BT39 zh*!SP>5x&*gjA8$(Eil4Ox{lBVt_}&*b#VfpJAy6+QC37lySWZONEEGOmlx#J~&y+ z#(QO|K`oKil>G`9=lS_jd1iXd)IVJY>DGDXrN%K*qEE0B$LBKb%cs$xkN3>@U6bb# z6%)>c^CMTjX*lq62_I8)Iz0O2Wcf$5M_nKXkK}rg5IR(J&OY^(+3?{>s;?2c!GxaQQ0tO%ay3#e(S0hTjpir*pA$zdn%y?K?(Wz zZS|K1&2R(u*$+KX>Q5oFvu=fsN{M{_TiemV$z<5+c9_7ECH0XtAyI$LE;!!|mP5=k zfuzzhx@nGz8Bp-Nd4~%ii}_o}+T%fVZjaEQjrgDgm;Payj|e(W%TxB?jmvT5>Ie01 z?Owyv#|d0wj8{GWU&n6&^%hXWX$mQ^XO}}_ONQD2qP}073J|j~Qd`)d*7TY9K!;01 zkK@uNn|bm$j}sj%WT}7t2#P`muuIl%p}&@Q2yP>rbz4-i!!K1Us^q20{N><=qMBap z@_Hw<%i=aKN}hV&1AO5N(mtp@d+qT`YZKvaoZ6|*_wv(N7Y?~e1wrwZp zn=^Cs{)4)xi(2)ps&5;8Pfg||(n21K(==By%o=mOn3v0j0Q|S8_)U{^x2Qq=hJ`(Q z+)!@wR%xE^H|bb`(U8z#aQ*+rA=AjkSsHrty2;5ba-s@%z`W~e+w6zBpM3nPN;c2} zYQj?M6^57FuOffJV-G7Q9vNELHt32_8WEVq9J|)ao&7BM{UDsg-^PjLn|pZKt}`NW zJfp|8L6(b>ULY)-p|1f{olUyBsJs<~`|i0t>fR*zi6!$p(7xJmZ)R_lnA*~NCk~NP zbUwdZz_=Cu5C3Yj%2L{C$eT6g?_=*EgP~OydgG9hCXRn2&glkbvij1%zvNE~o0~NF z6IyF~i9PU>nn-+3Ob?_D49qE_Z*Mem(SAp=TMN2f@oRb+D~)4c85EDBzNf0 z0AE&Q89N;93`(+dZwKU4PNg&i^#?Nil$6l97`?X!7rNZHxOM>}kqyD{{@<@*PVLG>d`NWpaMx1F~NMf$}}S>z2U|W z)Uy671(CC}nE2RtnEt_PBLZx290#p#Efxkct8s2pQb^>3HO1p)f$9r{{Yd-nZrI+< zd7A|_hdL_?;>a*kBW?*p#K|>-YqMaagA@&j_RxPrISU+_D^}wGZi(%lZA*GsbPC*; zte!M`MTGXuba#vU|Hmaiix5787=M(*oz&re?D>iUo*SRxO(G3vUKPR?)CF^R;V|%J z!oQKSw^Rxq9(q=wX!(IYQw69G6T6L;o8F~<7x~NT zHvvtBHf~uhGRVPi2(!#mNDP!Le|aT$u{eJ;T{j+W)18LtU!RG#EDr5ZFE^H`hiowB zbG4}oWxmgfv1AG(KEB=Q!!q3a1U8%M6m>FudaTy?@lXg2NDd=M8Eh-|-@_YQ7YdTV z{~9z_rB#vb5z7;>^y&> z?N-Ef%QdO=w!oRpvKZHql|326y(2!n<1?vM4)k9v1wn0=LRXN&9|Hr| zffSqp*%k?F8Kdrx`^3;n_n|Pn4`#G254RB)8Zyb@rP%ze_^%bRCUmLBt|hiafOId0 zM2uWl+|?$e8^1&Pn}8k~5h@_w;I)4@{UYnV^eY7G%a_aMBneg!4X3~AFgV*Of%8Hl zgjNz3*q!8{wE~eEB~_&5qa$y2)jIqC!TINnF04FTa4nOXmB z1bix_QRqV;%6TFe9D&&IA}vV`Cn`kSfDp|{{e?oMw)a#An#_x^*xgqPL zOzFR}XSS`RKU+^|ko^*mEi8XF#q8I9bvB`5(7V^%U)+YBO`I#%Bx`npmZFG2R5)3X zD;cf}E$izGanelvc)ZKFU$4D0ugEl&%5HCo_pwr_QVyokgemVif1XH8b5w%eVff3) zWuo|-B@y83b)OUBDfq2~2C}+8t!PY0{;S5{=%lqKw5`70|Yhr1~bXBr@4XaiOnc zMds4RDCJ`A2+3YjIW?vWYz>pi>PyFS$Mz3DlEcZMMT;ouW#&Ibz|I9%$z-IuUWz+t zOvID(X~w&!EdYr|n2vwaVDi}#J`W0`iQBn%s^DT$Gi95_ zpd;trNKCA|uGkq)BuG6su59T#;qb?fuok}3Rr8KnU#X+)Ztm`dwSwezI?)Cw&tfcb zg3{6ohYTU_#9=4`@4P22Bg#w;mSdWA21^%eiD|P}@lzURCry8yl5+bhxLHBKld?C* zBj_rqNr~@hHbl0aBV@_AmTdYRoIe-eZFDcu5^|0Fw^{1Du==M6qCOCWF!*cYTq@3N z=7<;%3+2luwiSFanb;+Ay{4p~LN14B+n=5G*JY)v-HTj!l$#RbtC)|9XLuhWqJsvW zUGLqL@6Jh!=H-7uc(yQSn>k=$oE07{*_{sh1iSHt zk5zhuP$FTl2;aCztL5!rF;~tZiZ-uxuei5)Jp2P8w#quDAYTPfhyMrcJ)MB;&q>0- zWu;RM>mRq=RWo&WRQCa&ZDA;rEm!fsXacy?0$|tS>M(yRn|#TTP=@y*HE5ssaYzT$ z;)O=h*$O-;W{xKo2?-zERn+l&q946A|84$~e`hGj?z{9)DlR}ipJ06kJI7Ycu4xVpm(2-Dg6Y_O**_s+kTEnI3l`02<*~DJ)P^NGtQe=k40LeaRJadz8 zrl5_1z_5YMdeBX1IJI5{AK+^Xvp|5NfDo6zWoUnh`q@;*1_d5q6YB6naO5F9v@-ru zAxHoUCsMTiF!miQ&EN70POWR(TzyV#mN&JqVz0XvL=yaXQi)=O;Pip`U&DC!g)K)D zIaDF;CV*dP5YxrAVb4^(oIj#S?ePDJ?_tqypm2E+!r2nNx;(RGe~9JMUXnh?5_jIf_zQo0 zvaBe=RZKtG*#Nk%NuP78>e8{Z+FRrCj<_3&+Yb{yRw)xPudWqUBgyW0)hc4m+)FZ+ zEkkapVM$3_j!w3NxZH!L6b|Hl){|4;D5oP3`C8I7t>-pb!()O6Ybw3=^Vn>UT48}I zq0hQzBBI@~lS-}RSUfkh{hobgOhkWA>g}#Tx6sn@tDl82QR{3_tSzJ!B*Py*Y&cOdQ~k zKWKWwgbV;hPk}648Tj2inTknu#Helor+ymZEQIGwFW?h)i?@ zzOpST{|14DOJ_NE$2R(d6zFGbmrH@dB;<961UA~fe{5~%Ce6zFq-YFQ3#7^Onu9aE zQHyZ@wa2|1XW;IwLvA%Xmr%ML$6iPJd8tS{$RU*B6T)!qNPjCCN5d-&(PPiTu;xf5 zLg_TQBL8g@pq6{bKB{30g)e_kQT!rHEwvw0F7SkHt++Hm0HZklC}PwHg1d)kRagzs zjoVWA;xAbh2B6I2eQ;z{VS(t6$Zaue4A2SPW9PFCNWxtDe?rrPZZ0myC;+5LWOSuD z{teb0OXlgxk!DPnrFX_9yIsfTKsQdE7%<}AlqEa0*<)&U5sy*%Y<_=5?aZ26;UTnF zM`BVGP)#~_dgKTMv^riB9FvLQ(u$R)GBA>p=Scpu8NL(|Bn>pyWKC?5?B}G}HV3Eu zAjV^0bj1OO&nqrwhq~Y;GN}4HgEhiF!7yh#x&M-eQG99U3X-xfsZ1}X7x~k5@M+Yr zkEBL4r`*S2&?H==wEBPCoccnewspj9i;1G?H$HevuxeGvl++3&jN#fPoZiU0C;Y=) zET{lUcnXG3joz-oDm|`O6`TI+YTR-(GX@{L1?&u#S5f;K)%F1A$a?72-!I0xp)S#! z54og44;|lZ+Y2v5IYqXbywb>S(|qrur?05g9m4PLMUTO5Zqf(iIY zlQ$+cw6#qb6`V_er(-WjZ}D`sn*#=-ld(M9zE_HHy$~Yl=)Nr|ld5ZN4A$R*qM*BY z#kZx=bshA`TqGd|u}qRT#p)7$8!CKvpb&ocH!D+=miW3(_{VGQ@Ej+j3h>5n5E=ZmZDxDz`6O;k(%oT^>NI@>@L_`)w2AY1FBIL?du^W?n z{A=PdKYAIkYIjFVQ;1R)`fph`=r%g@1fUc7OxvgLlC~> zaTO+U4ugFw?uPY&7(eq<8blxAi*~6}VfJnTm$H?Nf1vs#Q1(<=nAn2>&&HCTr<8eL zcarKF#Q7IDnUPa@!EP?F5{fL3ae%C0D94X}`9|>mS*l42@WH|ozw)EqF%HTWDvMer z^Kltz)F^)@&Y4WMtwe^0+7v67L6CJL&s7J^bjC09ejCNjS2JP06igL4N92fe{ry@@ zE$GYAtm*1xy^;v!6PTII_#$nZaa8HRuyri$f_d7X$@dlZh=IeG41}9@HEI*Vkuh*U zF7#wa5LCkoIcL{8r8V1;d4RX};}xW~ADM2KVV-|1wQvGy@MgB(Ml=frUH?i2NV?@0c)5*^-(4C1@cfL<0w$25uGJsM8NIFUX^0PX#Bv=NPRvEdv$y zy1U#KNXvY6#mAH`M0YQ5k+Y*x5D+d-tlkOiJCA`Icet*l)rF5?;SrJ;-- zJ$QfX3onsnH#mXryc8d+f%l)4gm|=#qP6W;Q!wWE!l%ja_w~8412SWvz+Dj*Sw*<0 z(5Rf&i#411@qM6E>$TVEnZiwU?v|=T@ed*L0ht$JdWu=jO&5#M-k~d1S4&o+im9&=G%cqUZVzWx`Z$E3nIEu&X6jF2ZNgs zG@jQN?T1$JEXC=9rhS0w{ZfD;g7E=K%s}WcflJJ2>=2vq(FMSs%ZP*sqnMm$3lm4mwaGCIWb0hab7pTsXYjSiq6snOSaywaUL}2GhgSC2RvghY)cW7uRT5*NghKiGnT390U z9)V)FVCI#8d}yOwZP<4I)pI8g)-@R`o@yY@q=Ke<$Ly{m#oaNk7j|yje1Lyb9Pdq^ zqRvtQO%xy}G|h&{E%LO<^|W)tPvhIFRoCMiI&Tl|8udeFeLS zu_Z}Thcc>XB$oY;VpJ#5ETG$JLh}`?P1UUOU8CIa8u5z6dFGKuy)@*8gFNYW$_BUn zV52#Ho+DyLtpj~&Wf>x%$CZCC-vuWByBf4_Sm26?p(xy9)?3spgOiTnbSCvFMIg}R zr;cRm$&63#AQQ+CU`hl}FaMm5U3oO#*u7Kv&~y-w04i}9yO;r|h#_5aijN`Y`EUQE zNuLm82Kl%ZWrZHaqu$9H*fvlB#hXd1&-v@cj4ePcrpfRwrLw&l8@YeMW_=)?%X~c2 znAY7vJt}ASF2xRTj+!7Y7W*mUc#`M-kCRF*q6aOe1cjXGU7N8SGf>0g^-tbZYA zd(CbA`qty*MLT6U?)zvGhRg(cmQ1)!U39j+D7G2@yPqtdJ~_^PRiB~dUn0bo|8prq zkgzAW1z82>5}^!cKahV)_(3e*qqx#kO62=}vZH*z`k2rp#T#R9zcmGzJ-M&MLx@!<&Bv1GfA(ZOtWu_vN}< zO^+ELksU~nNkywbB6tbSSQEDuRNue%8?>$K4V`&DjTdUVsVdF*GYcR={gH8HXyGo) z8a0XrUfd2${)OtWd$9XzuR-*?7aN4ecVp8752Kw{yW;u5tTh)t{51B6JGlT!UQdsP z0zw$KVx|m{`f7i{EE)w!aXAKas2jLLyMWJ1mf!iM%s?j(;d2t+D@&+KzJ!O^uWb$w z%SG{4fAnDoYZ$;g1H|o3FsJ#a`8Kv$^CU4jTg9u{!;R=e2A3m|5R{*@D zP&^1E35F*D;p&|SaC}88oUGqFD+%so$U(YC_Eo`P@=!5j7?X$ez7luI>aNQK^(cy% z6H1vjooR`nn8^9_@t;?mnm39R1efrKR}nt!=!?C1sxp~X|}`;+=ZgYN_O@s_&Bv0jqcU!;{|m2KNWX}B#6!bMjo4! z+41JSgznz|hdoPrP|Q@9c&`EuG>xg~9rC8(PJrzVIwHRUU&4rLHeC!}&p!gml$W2H z`C!Wg_2efJg!i^M&4Gl#v!rYnx0LhjR!{pBXD*jjT!GOzoT|Ec8Dm>;*sTjW<80 zx)%CU<_O%3@zzs@ZuvCBcLk35woZ;&*XP;mkHnw4xi|W%l&=@<9D@pI?<%=*T*kGw zIQxH-vL`Dp_(W8@ksJ$Mj!M+z>i~kRvf8AcxOj>oWhYwis#^N^^CC-9qR;i4S#}U~ zD4hjEHUDNba%Kc3eXLymA{CjKrwJ6FK6;W3r@zXEWn{Z8+ka69`?W7=)vCTgAYDf3 zVcSMkH}Vjj=-xx3X{3cZ;offotF7iJB81rE;l3;paBW;wAcVZ)JSwZg2-Qu~kMMi)Qf`$_^SD;3uEn!rU<4OYafwZ(OOoMy#6#kzYTxdu>yS{ zwN5@=ZvWEM;`ZmDx~tV&_nH=nW7Oj-*)DFSTf(OCt#F=qyL%{Zf3_WD+iv^scyODB z^Bgcr9FH_BR&RdpP)8X;5y}(9&L-}O;NxB>h%&qiauS3%TyoR>8>?%bSbZ{04(x+o z#s0xrPzab0cFTT+H91W#P$GZ2oh=slDf7=jA?mzcv@w&~ruP;9Tv$5Z6BJxvrte)!l`B6ddhY@clgIFL+hWIgNiyJm_k^o=D5a z!DfXxR*bj~ySX4OOKo-7ki@p1(11H#J8$sZ@qacXl-I`Z7IV>sAI?WsY3`~|)(W6zO8=uX{QtAJ9EqwQeM^ZfoxCuo3tyXDQHcEHb5PHI4WH%;cH&&16r; z1v&GOL&bDL2Q|tvf|j3~KAqk#v$a#3UvMWYsGg5muBLw@m(_AZPJz>$oK~!WUoB>G zUY$}uVoaJ9Tm2{_JmEA6%;;Ej@VAyyx(7Y4`^GFL-T1XVe3B?OmGriK6PIjvCG|?O z2KJErhRjeEH)2O_lNEh?7mdYX)kY{6#G-h zW>cQ@7%zVhFx&Z-JldP30=8bE6av^|*wK+aNcfgx~XRY?+0B7xOThoMr=N)NjM8? zd0%<0U(VVs*STEbU)5qYi`Q}&35mcPOxWkVzr=rK00CE4iz85h=no-}(y4-HuI`K5 ziFguM0SJB8w$^uJ=8;8&`_dfe1r)nP-1B-04o%S{E0j2|HfZsT~P?{V@K zt%XVa5-VKnkJ(p!g>s!YHnbf{9nI_4#VTxLv5wSQW-DEn_dN+cYWM<|&!yKVza0)`lM>H4F|B7UiA98D~MgwR5~Lb3AL`DKU{8I~hy|Dl7*crqANx+Al(&E3$V7HDbphGso_jn?sQIk|Puv+qQ@^>9Z&<#B ze2}}r_G5H*RYl3Pc`RSkYG+UGbi8M+3~~`FX@UHrRc7L?EofO}J{G388GsOPyl#NP z5k4q%2C@SYPjx*xNfj46XZT;d`-A$o)w=b?DygfPPX4D6)vZ{=a_<^h()w zKS|z%UEScTn+?e&y5Js(H9;)dG(Xgk;L5sT@l@4OqRq{P?b7Io{4TUlcup;{MJs8o z7Fyl>{45J=f~1ehzDv{_wY3Wl3vt^a452W*wRdw+J91{paGrFuZ%Mbe2z^?G?Dykm zk{kz;Jza&zNL4eHYWfELXcm7?5R=zu<1&r@6daFA)lt8%m1C)0e-VkFc$%aN%3sP) zkMIEh<$1cgM?(Jgt9xW^)=%JN%RR4fhYCcz!``n>5Mb&K!ZpLKGhI0XqDCREb z)BXj0{)(03)?CW-v#AH0m-5!X12ZGM&zCnr{oS=`9;5Fmq%al%QK^6C6k3$)XmGFV zuqg*+@>=kiAx$u$nFmdTdZkHe-F~hhZ(NRN3<*=Ci|8?u-fy|F{2*sum)_uZeP=>| z*TXwPpfSMSV7MvJ>d;!@i~8x8&09bkW#8U5g{mVBB|7++Oux|~iJj5N_R1hY|NOHX z>yut=s#8)NAm|eFLMMOM^Hz-H=O`}PgqA%92i*55pif{ksMA06+gn!WKxQj5B!g8# z_$NhvrSSp2`R>GtXyv{hjZIy1N zFcmZ($HNZDRy2*k#?Y%TKgQ!H-$A5@@B(+KPWCsBxIWIznm06GCUbOElT_GM%$t|UeK%Odb2H5JjoJkZWSauq~c}`cno%vPxL2~#0=&$(g zu^P{KsFrEZ02pE^-h-FSCG|&24`+*)rrIM-Qz^#}=CorO?;i ze^@~$gqYb#Ux)RxCB55*I(dU0OfY2eXkurxPsK6R+bsRL!OeShWj*Hn^Gb+Y+rxFl ze@OZBE%njMA!#Yl=eYMv>T}&@#3%2JRU5eH!W4hX!Ez%|D>6;Ea`LIZ&3|9RD^l%q zgxPfD-Ye`kORUQs9N;|T7DGRZc^dJ8-gz$Oi)m?7A3^x9E*FS)^n)4LPZrUXk2Y~ zRbqcHG`S?GEpC&!g}@q$A6sWf_p5{6@2xPx2T9aLIh{GA z!d}3uKgiXlp871S!7})>zax_k|4y7ULp66mGJ7_j$GY`+K|4Ng48kmH$H%YXo~vmV zgIjK2I~~Ko{XRm$gdtRa7E!gY+c9stt?+*ldEy=m8$O_}!77l?AdKlEymtQ(mF8S{ z>sot4WBUfw^27NM@3LejiQr(3x+j7f6U4-7R`_zmPyXJ?z?a~9W_Na7^l)yYa8MhA z|J$038dSb7g?Om#+Sht05k1^&DJR|da?}=Pa{*pZ4<%SL_*Xn^#4LwZW^7g-+I4?- zz`4z!J!T1ybab>-igMIZt33PnzGJnhBAalYHaJ(j1ypR{9Y{||6~w{}a)({GSK-{2 zKveh#D-wz-K{^n$nfTtleZbuQ6PCDp^)px|LFP`1tGz|#g#=4Nq;~ADO-dAo&Ft@V zk_CE|u$>{)E+utS-Oz2Fbx@qoviEU!cg^CmxVr^+ch}&-0xV9D;IO!BaCdjtpuycC zxaQ?|&bhZv-Fp9<{%lV_vsL?aZO!!bcZ&_>$76PsH;9`he}zOtK>_@lNEoxFPl;>X zlx;lOu-DC2pJzp-F6k?5(Mx$aFabdxR8Kc%(21WGcfNy}>Te`X@3yaPn7Zi4a1(~W z90zoh;Dh4$!QwBMdzSybZ9KlkodF4>IM!AHK%nn6)*AZrOrE1X2+pj)Og+t%rLf-L z_NUFu5(oe`%~+z1JfSnWd;a4-QGG{*R2{wOcb8Y8&$0Rv<2=SkWY6Y-^?fLQDqunVSVXlL^uAU*29%n z`O(a3&~R1+Xr$pd<%GC+VRwe&zCxqFGU-5E{ zY?Lp|J{ZR7yB9Irl4PGJxbQ%EFD)zbp1*s;Y*pn}9}V_Rgj|;2;+fO}%A+mu4m7_y zsCaY^+;lM%kj<>TzDeN2MD(JX>hm=LiMmFKT}8YSHuMnJ7o!q4Ck6_i>pU{$tAhhu zV@k_*SzV(~SoBFF7#)4)AC&Db$Vcd`C<~Fx-|8XkS&t{hzrS|I7iewiioU{Hlh_OG z8hfUXW?ahW_y5Mm3nI_o1 z-n|ANNs%q4pZs0=;fVC}-_8slpZ9dA9x62EDq)#(E5|q=JXG)E8Tfb3wi6S6sN{s+*jv5Vb0Oe)C1v#U8mDk z2fG5G1VdqK6A{GSyu>~s!ZQCVa-s3$-=8TV;I`@;7}6Z~EeGR)80+)eoF0Xl3%FlQ zi3M0s zfj9p32;#Ot3FwJNB%M|b#bX2+s4qM4?=u~D7zAkc)Dlc&8C51p2bhzPluDsy8krA zF8={oC!V&wPt$IQ?BY4!K4&UO>2C-P^=uqJG5qE%C0x5p1`^JI(*}kSb5pJ&>q)+3f#PQv5kFqXXrS!=3uGkUQyHd&cSccWGbEe&R_wk14L+RPHHi?? z$N!Xpn1j`ETZ-D@aNya66)l#8L8A-o!=6F%fp*(5Tv^jrv+l3W6S#%K^@%6+h+Y}|SLVb5sH{MB5@lvfEitYZ{G znn)Y|lO4T$H*ObOyILq_iB!6|G^uHdhF#+S9AtQKF(8t^A7Dp_xtwYc{m*vH#Uyx zkpad#a#hIYKyBKh?7dkGthA}LmWSfy^xsf%9D#! zl=3d)3{#pyJq*vpSV*MH_O{>_QV6{St>HFd+(Ej;Y5KMqQ# zyRj-<8=>vcYKSb;`epX-f>>p53vkEDF>&o2x1RGR6VI1{|+nr;RhNcxBh`uPNY5bz*w zh^!^Tl+UqoH^>!`Q`l{BDmbv=y#AkTr!D_JJ&%+Lwk5=eHQ%b@%D~nL+ew$50=z!U z;a_08R(u7*qZRoU618Cq}~UuOY{di~~BfR}vkb zbcE1WS16BbeH&_+jYKOJBMu3@E$fCzC+w zcdQyBgm>D&&3Cbtu4F`3k49AbmT8drUk8XkBx^hs4m~arWYzDHeBs9w!<{-g_w-gE zFYw1*Et6j$%*v}$6o0gMlh;6YyXlEqap5O1wRV0<{rMv0Qu-kDgt|?T;QHY-Wg7JW zvK?bUvu|JZ-@Z1mM8OP90_XW3j;hl-az5VM;3k5XLezz<&(G085XKtPo|Kq>61W{D zFB2B>U6xbjRt;)7@;7{K8eKrJ;i-rV_>6&Uo4vUM2q(uYH~U*Af!k362^WnmrNAib z>2_=AHhjJOmQ+eyh1U*{OF|IY!%w-vDkFzSkc)Db$Z`(i@^Xq5p()0;rM^{{2D^1K zTr9A+hg~O0(AL}0G{U()%hc*{=$JU=rSeZ>M}+=Zy*#V|kx^=#te56RzHZC5 z+zEAQyTyjyd3&n z>K9u-Uz5kD!T~G-5bj}L9J)t}!2NgL61FX#s)nyG-f#41tPOHM7lw}gq)TKbn0}F@ zK7{47G$qL=t!biVg?ydT7pO$DAP~o2?gw#rB5kN+LXqv*vdVNA(m86gdtfY{1gDIiDDevUUS_cdd#LHn zL$n({su9ZDd^H#E+13_aOeC2p4%HSE{!bHD9P_;2)q^+s5+UP>C!&pnpy`4 z>PT|yxZN@K#~QCin{z^HjB9u(YhEcH;*m^i)#E9C>7h0(P4W zF*OVy7=``tFA876lk}cxj?ZOYTp^{ z^L~Iu4U>S9;9t7*OHe!}rykv195H<)wis8HCwiS@9-v=%aXyr^-S}K3(#H$qyvgj4%F}8x zD2S_zS%IAK`@892Hd;nmL0wVw+X(B@`tA;dCM3x_+@nI?(oT0*QO= z+`x<~<)w()Nun9?q~nhf5}j%qiOeH`RLu1$E6$x9mNm!F_IV2Qz+ypzfN>&86Z)0T z0TehOgp5;PmZzsq@&>qy{|YRsLi;ny_3m%L!I8=B{3L-#`DN2V?H6K~*ny(bVDe;Q zdm7yca*cocYoAJi`F$7uY_{Yl4hXsJI%;McJd0DRukkHQCns3tIfZ&YDC^9XzB^42 z?qXu6)5RHW11I68HBi{+KOFkaB{RydPC&@_My}q%=jIxOjce-k%QnSB%%qK!D5p*= z6`+U#WlU9{~8zRue%{0QDo*mxeJHw8@*`CK7&$cCQ04Guc<2tVe!2W-}_Q zF7zE3f>dw0fjhErgiXg&$E&!m#**DYE^C2K{jx;ivPaM_=&muHo7~yHAk!0U15jcv zjtACpEhZY6oj@-t!&@-T&cR!m_W0Bfo?>{3q~cJCN9WYPok?{|tm|3lt!H}X&!{wm z_1A{gPoCJdAqu>}DRA62yt4+%t(15s^#PxdJQuN7G>L#K?3Y%%#$)nZ3I$V1l#FQ( z8Ts!<56zqf6hFR(sAWeXI&i|%JAp`G$_oDurO0Rb&wT6^BYM{$?T|_Sn0sL6Rw?FH zbX3~o$b?5B*INlTFbFL9)WI5pFK@*oRfaD25IHXcxs7^8^wUTR3I#mTO$jFke-N~4 zai*%ticwmM_ydAQnWjifX=Y=~EoXIB>IJcwQ!m=(m-51&h`eZ68a3$B`3I2rjY098 zeDo5)BC_kFC%S^=af^D7c)JzTM4ggIMf->%QYEVks#JYIEL6QW6nVA0G()-7?c;su zi3ZF9L-k7b@b;-<_!~(=VGs7DNk=~+c?HDgx)rbluLnM z<6Cu)iIYxku^c;u&Z$p2_w1m0A&RDDhX@PFsMAOp0sG&OJB`ibKu=@3P_j`UG%L&% zYNE263Waby;;K;c9t16or@ihoIzGA7YxaK2~74C{;fE(39& zDHa^qNe7k&0AIzUfbx|y*Cz$gYr0M9y}Q-2h%bC^C_Je!^r~8w`v!L!4U!4zbBdPj zDe(Nqbu9YmR_gebjPFP*mkaWeKveMBpQR?>$f`m0u~ppUwD9qF5z(&}a{o~s=K5cS zVdUl{8%jal57l9w|6(`2lsQr#jPKtpmw+0%xe=Z!FbA5G`#*}s|6;l&RIDx^?B9yT z%^!>o_+kD#eDl_4>RI*=^S>i6e50-xEusg_$-~zCA%l!o^)dQaD2isR z(NE7IALhS8Q8cqE0UjJ7Ia7Q|ahe4>0Xfi+oZ#7BN^CHHCx8_!zXphCc31!$LqYNI zfqOOpIAEbp0MoxY#qvL#7x*vUOuqIp8H$&!`NOOBW55m;y#|$AIh)i|Zdtym|T@;Phc}H-Aj7g@)t>L;8|pgLBRSK(Ku$0JmB0 z4xslB7P$tPfLmSxw#|-D|5^p#Ke3IQKad(U6dw@G3{5lCI7g!k1;xkK{9%woL$UFJ z{me*d(D~RokysTh9j)DMC^$dX83={P05Z^ZBj&;KU#dEE<2HsMQWUaEgRjr}^dboF(S3ON(lg_GqWO%I?IavmjSM;7DiJ~N^RuDhb zHkFpPocxbpqB==X6a0|%@yT^?b|yCa(LppSJ+Pi8sC0Xkfiy=Kq@09t$<7Fg4Ciq* zb?kFJI$DA0WQPT+{5Z?%`g?%~Thtg;L71eBOCQ1O(Oa5eEmBh$1v2Ee ztIg(F%}6l*_&Os2e})`MR{*6%N`IQms-Tv(cN-WFk)Mne7~EwdxfKCJZHADj0YoOC zhZ+L5NRd5~Big;9|IB9!&<*U8#{Of&6rjMDaTXY2%p5&JBe(1GAj}PfLz0YlF7IQeB+`3%?hGg5X#+G0))j0) zoa<-I?2+&;L=5UsI=MYJ$-s?XVz&TnR5Ho<-*lw>{1_V=y!>>93?VFX5VROEJpoiy z3XS65q)-(R%ob)szDp+d1xkRdPJ0UCRv?A((nyI&(p*$v1oFjZBiZZ*h!AbW8_c0< zc|$+-{^~^z{Cu!=y$gN)<*v66$MUWX>k{-#xM)S&n-8NRKpA4kON=sw{{A#w*`el1 z70`)Xty)`P`rLkHm&0!om8Da3N>J)_O%@wAe{#JmM*B_fJh>VHcWy z6fvUhKD=3?M-;m7J70weCx<$H#Koe18ZF?zU2Gqz-$6D$041CY-3W>W!n$zzxvzx? z(PSu2pkb94V1sEve{fPj8Wiu)F1$n^l}QPeQ-d5XR54qSc&mJN^TD>FNk=eO(xMfK z6jkZDTi6|AVM^?9j~f%hN@B%c8|3d)*@FHG)Zb}4Z9$wkP6KO8w2yzCmgbMo_sGQ! z?n;*GW3x7nq!otm$O~#)-UK_zP{|dm+Iilt3o=aoIEe1Qk(#`M;M}`%Rx$SZi44?E z7q)d+1c)98Q^W3##q2g0mhM`zl@23~jbArNQBIEgIhF88_)I?sE4u?%;xU|^q10C4 z=?#=sw+S(0+d4OFxS4PV0YzVG3z?Y9OcZE`xELD;$H%8>H{-X4+OPP_`KQi?>>*L> zS&%BXrIa-VPRaqGT&8u$Z8P%_2)y4pi=k2M;te~KAW8#*Mk1CurEMrrkv+y9Hdmg0 z{H-L6Gr=tMIJB=lYa%eD{BR^RU(Im2QXn(oJ%B|5O|E23q^0nv6c7FBdzQ48WXnsr z$sgzYCukNCbE1k@dE0wfi32fCn%?k%klZrMx;@zD!&0W zV?LxzV14IaT1nDj< zxlF)Ex(qB=D@jUF4FvS^kU}%j9|@{P9hTT$07s)908);#S-5b5BQHUQULK$7D9-*$ z0|F5$X?6!xPgxzH0b_E5dAMa-4&^8h?7!Faz7;El{HXlD8i4?^%lD1wOYJ(_Lj&7p1CLU;8#d__E5u|{3Qeik_WQlAgSlZN3(cD#*wiZ2U z;BG=gE97I!Ny^1zFgq5&rU-aUR@ZrGeC?*2c5C_Q`9{e)c*D~cq!c5bRJ5NBbQd!! zbR{e(_!R>1wDvC^f1W54N}A~Z(>ft2RUQbtm~tPNuFfbA3<~~Of8h8$&8+j4LH6G8IudJ>Q?J6onpWa4Sjldgu1~IJm1f5# zr+Xke%(eBGKpI#oy#=2oRFz}`6hgwf6apQqp?}p*jc)mq7skJ@a(#jCt0gyDnMPJY8-~PNlkff5}xsmX>PSZwsWBIt_9? zW_qq+V^Ozco}b;OaVqSe$0wnaVEOn0Ts3rl#jSUgmMOA;ShWdQQ06o?0A2R9bf(QnF=CQEOhv6$-`#30&Ma zO%8HX89_Jjnc_ntNj-SRVsn(L4-0Bh5gD*6uh?bU zkNSL01E`IfCt31&06)Lr)Jo4uMgDkNg^?rv3`La6$JPpq%4JzVhHY3q>I%X{pPlGW z&=n_>A|_eNGu~HCO&m+YOSkZ|aJXf)9=HS8{k9`r%^0tv*)>`Kk2rUFwEVRgj}HSR z=+;I4c)N0hJF|AD?rm?_8b}WFH+NRv!9u^_2eZ(vB3~y&981DSCB(!#2H{xJxwjl9 zc#mmGw2RFDevV@wFZ}0a1X<7J52-umU$yMnCA=;31i6a)en`Zjt$^sU z0?)IGc?a+_eEW6<#LvcmE69+7k1!Pa`{!CMvbD-p-FI8!{`cj(vl%upzvgG`ahL@K z$v3E9O{x`2YFd#=Xge!yZ{R@XmD=uK#b@rvDHzAd--zG-L70#!N}%Xz_}PIX4+Ku$ z0Ze|61zm$OUSUIv8TFBa)!N3U9ddt{Z&_tKR7g(Ay01iHn?}li+`t;OF)$+PHVHNf zk-w(|jBm4hN%eZF>goBnhBayACgbouMSPjs_nvFYjb(IKT-L{Nn9=_O;g|AAc&Q8D=9S7F_R+h^lB zp*|569}5!y^`omORBwNZYz3c3!z|^Q!&1<Ex!$TPo#5J-q7+0m@b+PUT3ooux zMjKy_N~ew9IYEp|H}d6P(Sfg?(Z-{1ioUEyk=i?rUer^P+P*kKE|hkv=&Wst_Ac}+ ztb@rdcuP4>)u(w!QJ|>67EB2?tY$MN8Z(CCrQJ5X`Ar!!8h`BWDCM0S9>J_#;Ukbq z7DKmT2Xd}w$@H{Q7ga!#f+MsjKZGdK-zI5j(F0}JqX=FcnH~LW4U#C(Ecmu$r`2l~ z>Z0;dwF6%SGGIMp%}4MUjTK>R!v;ts?(H^jspA46*@*tvzkG1thTC!XMSjS0nS2rA z55kx}B-Kj+^7W|$XCB0x*Oan$-+Mu@C&((ImXy!QnJMgRo3DzoQkvQ8CFi7KPL>Hgb>sQ& zeeLv1J-B2VZAEy|u@3zc!HO^%M+K`HdDG;LLn8SSQ~WyqFi`<#PcwdB))6SoZ$`-f z=Hd{13Aw(++9dfUVj~tLbx5+|Jp|jv?0{^s&r(Cwx_;ihcJ#pNyRlkKuR0bXFp_}qug*A2j5MnI7?s zn#4oIWB3~l-8k{opbZd$aFs)`j8ZNoq>=L5# zTys51X@N3zQiq$mt;KbCKfUmPiSZD>807onc|oyTIegOjqiufsqAKy>t+HXs=;`9T zy2M$UXo;t?itMw7`tmNYSY~cQ>)jcCKxI@7e&&yr0g@_*p!8) zlMJB`rTxPa_iYow3Egx2v?69aG&Ki-CS+J6wtOLzr0s}wHNXq(O#MK2OwaK+y`i&E z32piYZt35+<9nG2c@Dd}+iz05Iq(l=1gmIMp6t!+!k`@XDQ&RQjhup1^43oHx~w8A zLq)6Kmr5?5UkMwjyce;w>h3pk!2yTsuen#p!|#K)KH`@_SeFK}KH3R(Q_@c1Ce6t1 zJE-0>+|1h5qTt2`M!g|Ly+0Xrp0d{O*Q=@^Gv}^yX^ct%JuH9ILWdgHTNTJ}V{T|@xABhcwC2Jz zTAaJ=8k$tH7xarSMN3mGE2dZYxU)pwo^O?4{Hel8b^gR~!Jz(S>!kwQH}7j0ZSvrF z*~f|Oxv|Mf$>W>u{tc}@(dJ&Uvf$elE#KcKzoD5(W7NghHos7j1F;=(e=qsfeKMawR zPIVQkDw6^wElrmXk5&BdAHVKRob)P>@r8r#!FbrgMag<4x3e$y`98KCa4!pC{vcr} z^yVRy+FJ2j`)>)3vem~cCd79se9tMFDa`f4g8hZfia_orgfIG!u0g%kKM9G{VcLsI zSQ?`3J1993;9GSk1P=jhrw!Mrzc;FJ`-PTz&WT&zxLdxIi7{cOuL{p8xmCn zt~G9FN0rq6PDgBmbF^;0W!k>C-vW7{{#L5Ol@MB@Hz5u=Zz|2VEE7Yf)s`mM92#Xp zT_hN6`oWGr&8^Gvp%vw@bC6ve&FP_-%ZB=U$PrV$uTzP5zURxH6m9t^ay+uin(}ed>89YS;of)X>n&40Bui{Z3paOH zOVck%mW~!qW_Czi?3`dFI2tNQ?q(M_nqLmw&v(TSvqTu#5@>&5879=3~}ikdsk2}kU@p8k;S$%X-Ashr)_&XtbMww8D11pROHje-h-NM!*fI)KW zcP_4;q(5Y6%yOEn>G$i%9y(}lpjk4TLUcfqOG-aqD53&5pbTmaF_qEIB}TzOTBfqX zG8IDya09?;jpyUQJ?$~*^!5IFv-a*TKsQzJi&dMa8kbhyiM%PcfBO?4A*b3XdCJOT zF}dDSZufF{+bJ2lll&dTS9@|j{O~eNP5X7X+H-AZIOBy@=^E;!c84>mTt=@xKTRV; zeJ6h3f-El=bCqes=`yU~+3W58{U*v-d2M(;Y@gQn>s!BV%L^Vi(ho)moF4pul`HLe zSQFUqu%alBpN_HXS2oX;qbO;cmF4viJ+YLegr`NB=tEGOW#QgIzb~`N;I~nQwJ;J!pO7&boY?jD16-bIqc28bt3HL@0Ym_>>OO+o$o@phO= zuA$mg!7?A$ap+4y;P}ry;+6)g+m`V?L$7MsB#*QfW-WFFiOMOhR26Qk*Ldeiw# zJ(APH7yD-_-=Pa#fLl+>0q%>{t<-ke6Y!A?GA$X@CLzp~Kf7E%c2FcSovwwxRzKDv z3J#&YpFE1{Gt|?mVN{$#SUxisxUUtPuP>HRJkp&{DIRZS3#$>RQF60)n%Qm(?K^G4WA`_%XB{c zh9A@LME+SIg>gM(B=HXtfQNDyd-`p+jlV5+h5phyX?obzmR;D;|M?Z=ZP)WM6Nnm* zcnIRAzf9uXfTSDy%YwOFy*kwHMu86QW(Wkmh@Ag=g-dF78YAY~F980Kx2-;~=IADk zArakm71+#ueF2tc@T|?>-}}>Q(+W5`65pUsO)HnIy-`xm8_J#dx2lY3Gq-P-ys-99 zUJjeOc6m1oomF)UoH;%WcXMa%neuihMdS4N`rVN8sqh~BlOO*p8N>c78z-9LVT05x zt&mt{9W5-qDD;68TIskyy1U^w}slDA+!rnv;|J2jrjtQmFki!^-Ky z;{1;#Nue*u%gHSvCB`Sg1?1wC=41nM@QDMtIVCxHC4g)|32td&ivN!b@&EDpc+mgk zY7Vff5CsE>G)3M)Qxhj_x@`u2U-g2yvmt5C&C$upSd?d9b;D0APZSvz2}ceYM}mqU zxJ4Zj$mSyIo(qkLHbXHysuUfAf|(C(98Xa2iN?%*%RHbLLpf8_EIRu#$Jg+5v;E=X z+hX^kuowo+U&|m0Y@M1%|7Y5(fl(4pXu<|N&irT)-a-EUY(o*0Mn1FDt~$GBE>R`@ zuN{uU8&T9%*9P6WClkn3yN3Bf&UtOIw^~@l1*G*LCT+@RXk;aN@S5Sy>1;6@a_{m< zDVYO7S`BYD;j-hosOJc)Ft!3mq5_c~-y5*q^Az(*KN&)5-NRr^HV~utYdty@S7~&n}~G?g%2M zHupGB?M?wVd;yyrLSL-Hhj%SIAr2#Xuv`?Kf#gK^IwMuQ_ueQ1>q+Wma$)tzQnV5d+;I$iD|^T8VKG;QyVq zFN^H&lPROYvtGH*#;$s-fRNQ4wN}e-e4U%8`qjF%bXLK{V*L8RP|euF^V*tcC#i4D z6@0}A*v~G=1s!T<=Po6~5&nIBRbOjL(Sx9W0-`bsWr zl3Ta&0z!Qu3Ralm?kKFck%d;Z;Zq#f5|_c-<}xWV_9O1+^sghoxDL+@^V6hII6P)13EP8%O&KlOq4wa_I*8rv zR!AMvHl{yjn@8#JU>8TUmY6$Wnnw}n4=htHehV=oah8mxHd~)>OO47M%s+%6dP;JTTcwKT=s(;rcj{zRN+$<=$XxCO*A7_5EgtszqUTzk>cxtQX?%Bst$=psIf#m|{X7O^o` zDkBbwmCliegsAzsWg7dVnU@{F-Bp|(Yb;SEGz99CPxX8h3G8P&(GNGIIF*18G`WZ; hh*t4sL*q*1ZQ;?>?wys;YZQHhO+qUh$Y*&|U+w7{YF59+k>-3!KoQNG~uZ!p6%N+S#WJHcJ z^3As}KLfaP#!8Vp6wO+CWY?JWg|n$=pclrH8<9M*o8BoMY&RWZLhwg$BkA>U zczp@F^>=fsJ)nu9p7va@bjG_aCx+{_cxM`5_z6UrjeSD5q|=cSW+suXO-0%vFG6WJ z6$Wj$aA^do^hm{=w7uD7}Da8+-4DKVMI}6u1%UD4fO+bP6t&f2g?y`b!56 zC(4kiK~3FIw}+tu!tB0bA`AAEMP>_BZ|-omIL?|w4jPz%(~<-i3UhO}*`=Md>&FCP z)h@)73z%OukAvwM>|92MIB=X8PjgRYtn_WQZd#rXj-zk8qHa@n+6ZaGpBjs#$0uwi zPqh%a)fV%#4=VbjFh?_h7m9t1zSh%SCHPc2ZEg0SnW|} z(LkfGt(-76UQW6+qSijh1hph&#$-hR^FF^;x`7S`w_L9<#&|e9k0cjCg3AiWh_6#4 zOql}70`SR%*qiFY*$f-&Umiz6-NI17pI7x?Ttotm41+}AeqjDtEP#rw+A(or1FGo; zmUsLLR!0bQ>!@|xpg;!K7o58J9m;f#6G6&P5`f1n^k67&?W$sd5J(_r?HPQX{WpAxUc1;>fB~vN}-K3Wdisu$~hF%c|Cu8i1#}uwu@Fg-y~xD3PHo$5adqRB>8e z*>87-1k(;57B6hCw|Z2XOIBL9-WU48a+5`^1_GxyUuuyN>&*Tv{YHN1erq);$s%%2 z3F2|c+FVHPM^Hur(+4@zJ<_Trn7E8LOQPtO3ikMt3f8hm1?TJerKE7nr3^HoW(Jgx zED)aXv=66njI4FIe?L@h3nNsAAgzZl0$h3TeBpB`NVaKQem!=&dGG&yFtFk8!)lF2 z^fmYUy@HMZ+}X4!r3kDMf%MJm(~re7KFN#5LYgAQ7#tOFfvk7C%uIuQ4v7dh(Y8VD zWIDAk%Ko-BgXuPjZGj(YpTERLX(a96m?%XNNAN}|wGDYahxw*a zmNL|8Y-8xt+XKed!j!Lm^+Q4+B!+gYhDVUP%Qpx4UBZ{Kl2ZDl3i7%he&~4G$Rph+ z2IQ-@2!#z0xbj;UW%0QL#d_QXqZH23pryJicnw`&IAs*RE)IY~WRH{dJ9I=9D1$?l z5u6=)?$erQbqo6~jJBOHQ^(N2BHt$xk`>IFIo*crcDqt=K%=7E_4HIelS8j<&;;-h zx%i|a^khdD{>T}TN2wONjj&K{ohgeLR|LDc6)pv!9jfdeqX1wAg{?mBVqgGQz`qM{ zCVrZT9)H$ahDxfd{qyiIZel_wNcV6rNcU-9QUaF;l#M#hCRhd&Gw)~g7P+?;TO3?O z+V4Pt>F8&+tFuk4`(Q9XxRCgc=u}KFvNFV3u=A{$9uJ@P$98(xVZUL_9n4(aT+EH_ zVa%Z%%p6T@U^uu_J|NTpX)6kcttMlgYB`Y6p=`01QsIYM8hrxgbNz6VMK+wNQ|sz9 z$Ux3#4mko_Q{3GF&i6bD7|K|O#su_rj+owfht@q(O*KB?S#RM^$8hZ@l4dJ6{q(30GE|tmr&yJVa^TWwd~G$a0Ilbd1V?I=k{wU7*QeNz zMgHA)?;IV#O9Qfi`AY_v4K_5;?A2X!5YN`zz=Q#2u|*y|&`x;vNowQ)m1Q44PwxU= zQM}h~0#2nE#LP!s(4EtVi_F80EU{-P>jAo7d%vU|49X1vuy88Bv3PVDL;{bJ*)dd}z6*{`xx=nc@r-gW4i-`^c1wP!j5K7jCksb` zeIc3_Qtj)QNV3fcT=l1bRyv6mRGmRn;^$Q6BKngl=%H<@T&b$t9`UhlDrd`xBT1&u z<>C_nV8uRbv*ZF$Bwj@9Wej`@1vnT=Y-{tU*>5F+r``tGjC4xpSGMmIX6CnUjCY!1 zgsL=%<%=Zca7cN@4EPW%$Zxa=m9Cj@A>jEHWP>3fy@znM;2>}Nf$zGP#15fLVi8>H z%AocF&Rq_Z6piuzOeLAS0^E4@^m}?Ax4O{emHU44bk^fid+oMdG_dT)58v0PY{K9J z*y$Io#fCein#fe9vWv+41sr+vM$vI_)NN~295}NUEcyZ->Uxh(vUOg-(Q(N$UDVTu zvJkz+wwBaH~8T|dbiL5FgPe> zzMPUn1#@P1#_YV4PK2?_9ERfVhy{x0+re$nXvrZ~$%NY6EqQ&k`i=kEn66u{_j`#e z{LRMk-=*$*idO^gj6`HXgFL;}=2ypn%DjG>M7wzH$wJwq^ewVL$#n6pr``$xNi<1x zj>d)*3Q`g`A9vj_{teeF=)Y?Tu)YAE(r1xab0~na_ikR+utx`{i9uxC=nAJL^ZmMM zJLzNhztrb~th;XU_XJ8BE{NvRrMM)E2a%6cnV%1m#2&VKd^gY?t+0FL(ki~00@mDD@A~wG{)f*iaFJf4X>ybwZ zBxQSQU4d%P9<=_L(STdkjH7T=G6fl)0*C*WUd*gX-Up$Jjhehwx~yxSX(%K&^zpPV zMHwC!AcXClh&@{#nJcJ-_Q%?lT8x0qx#uR0-j+ zfpC-#`p?Mqj^i6@biGQjwY)HgJoK<96lgQH$uG#v$t`3Cg^^fIbZX2)Q=?n<1UT@m zEe4Z0UW9|_0@x(kw9RCS%iYm=fXUwsAmJH>3ZN|)vjq`J+M~k34*pmq znw_-~H!VAHsZ<;L4bE6F0kp4?tl6%#e06?51UmAP$gy-Ih6}Vr7&2GB^cq;TH=4BH z1x7Q$YL_q`AlcmL`<@D*U#+Wd@y{iRz*s-CASWx1@!Y@py92x@*RH_FEPN|p&c6~) z0MA3%%%kXXm)qJP3O&CA3N+I<8}aN#Jd*ib)ZsRtDd78kvZKj|ZRPIGotO^TSf)UJ zc`Iz-sG&=4;}~6~TPacVo09C%^On4)MkUHzNrec2uyR(fY5+ZYV9{kRU0SkP9fUSj zl!0@GO+0gz*ZZY#nZQ(v-x0<1AmR)_102^-zCab3qz~K}WfRyIb*Nv5$Y`b-j^?`c z4@1;P6AL}28daILHAv0u1w*WX-K zOkzWW-nm|SP^H?z+J-V($t6A%G_1)m6AItv)hx>1KB{7bNLMH@Ts;v0cs2bEJvVj0 zMJNqdj&&jZ20_I!-h5A`j-qDX1t2mMj{Ghqk{7~ZLvZENTe$@JH3Dm^t2Y!TF)qgA z`chtGozST;XNvua&=-45invElr&;hMbkkAAo<6}|@FhhrJ3K3X+aOm2+q5X&VQde?Ax0^?mHWV%KW`6CVpJl&Mwgp2K#9Tg7bP~y|T7K zkN9XN+J%LA=tJGl$C`w1sRemg#k|t_^{a(uN)Xqc+G{V4p$ev6e!7JCgLsp zS2Rz|4CAkMe`n;^QFnU1U@&;(Cx{IsT>!QY&c?ma9_cYR-d!MoW5)O%+MU|l`Q{X5 zG$Oj?Iwv@E9|cHJ`u-s9`jJ%=of~)^PF);TpLOw~;AT8cV_6B$YVA>fJ6&GBdFnW9 zFjoOF_-_&b#)Lr(%XLI7AKdaJ2ZUMn4yJb5y?lUg9)(BwVubMG4n-8)`*Ele`bX7Q zTJ~Mn+UccH=cd)8(nqv%i=CdLMs{?QtE^zp#HGDFh;Im!s~pbt9%+PM0tI6iv z!}{&`>P;guFuf=FI)walesX)jHc4{F@7IspsAMr_&9j-7dluwW8d)Jq1hk=U3r}t) z=^_H4Y;cR4$~xxV@>sX(3WyFaU<(@pHA_su$3llQQ-Bg9M;CLcf9dcykJ9qg6r_Aw zFz{-FiM%c}R#R*Nsd4a){k?pwCwW8yyP4Yg2i+N^<`$ZXUd}oB02?bPFC2*kO2Ji} zrp@uxGIt`V>uiP(L!-O}$bUx#llLwrpU4Ct(90n8Jt@X_rh4Fgd0R(K{L;sHje?rY zG9sVAW{c3$JpJLfIO&@#BiWULR97B2Y|HI-z`B=P_60@l7FFMa=0m{iBoJ{djRD96 zXSTD-f7e%)#R2pEg!wIAH4=p)B`_io2wD`9z5rYaX}I-l)bDB5P((hB!b}j7cYp~n z&;U;6F6EzQYekKmsJQ}3i`hz5<>G@3k{KTM=F3xz=d{wp#P8E^KAt~?q{5>W#a8#; zn_f3@ByPlM)7?ySloZTzJc#ci?3GBUMjj`9HUR6xZ()v*O0~5dxSX&-BPK|{W@sAI zk1gfwM5+N)7SP8~89DbKoCtBz!E~y_IHWm(JkxhdizRQ}TNQ>AJSO?cx-mCvT z2s2wTX;qdU$AZ0MFaLZxrt_sHszj5b(J)5gR!KXcy(DzI$Jzb=A2=JBbVeH#)|5PA zQ4ntKkVE2#Lt@~6fcyjWA7K9g{|CfBApZgN59oiu`~&tMaQ}dBKO{!jJNmaio!JJ3 z`QN{|(tnij;oAkE5bvRYnUauE!C2VXnf`N})18nJy@6xf&yf+MfQd_NcVt57L@4z; zY;oW{OH)@2GAM*~I#TT#Nyab)UN7z1f1x58fq*-ah?MK3zoH`!0MD#q z?y`NAi`-n<@(?hD0;u`IN&G~ll}fJZ^q*o|M@LE9^QCSPj+5uws%a}z8g;)JpqJW? z3n=E*(U?oX=v-~)f#PMLE^6~64$(hCqUM4HuM@+lb`5l*L+a@fwTn#XEj+@}702v@ z!o$Hq@(YlMW(8EV5_%FGN!q%nNXz1VtgVUm*C^)0O`2G2@oLSOx>(+EK?a}l=;#%5*SH}b|z6* zy2u@81oriffTxySpY_DYU$rpeBFT9y^Qf_KjAxftIM`ahP-dEUh4eTjzfL8rv@i zH?~F{VNQQW4Eb>6E==xEw_$pU%rgkdnGue|15DG?&$#I5*X+cbrS;=V-?`;TJ@wG9C`86QYU~4azjH zv9YbV6tyUe3DCJ4Uqc4;{yAInB@u6UKG&uy3LRX_Ey`s_oK+1U za&orVilW2A)$jPqyR7CPybhv*TNR7>s;2si1~|cbqEBYlr$IEK`d8}&H2AMOKDOnK zqV_Zh=cpQ&{_51>b%FL;o6KHkVTox_JB)56qBK(&Jro|q4w`C-L|8Okl4 z16UV|@6Wy^ScqlGzX7F9CU)eg#qsu>>)A$z`np+zdbYmqTN%!5@jJ9T>I#h z2jP!ACJFp6Wopmo5k75;au;TirAoCj5-;b!tCSrs3Unvj*b&u6w9s4B;lZwJ>5pl3 z!BWOn@xpx1AYO_hVZY;RjS&B`A;yQ48KtWMUA%dfNIKvNrPGVTohw-n#$!l&;Pc8& zfkI(`fHKQHfZ|NfxVeJK^Jb0baful22|Yg4x*3E9P0r^gIHqefHeQH)L!QAqt^VK1 zkn6uGj48dw1cf`@9~Ti0gqbBG1{d)kNdG`?kHJN`kpN~+pDQ3_ZvPh*0tv#z^q;in z4#LbDQDKA9USWeOX7TUiKZDl)lLyV_P)nhKnf|*dop%FO9E6!IB6tJ!A875t8|X>Q z{|5dO&-9;J?*Ca71CQ|q4a&^Sm0pmJg$B%#e#b#b4M^42P1xu_56Cy%J2p2b(h!qg zEcK`2ke@G+nwx-|jhHGbF!v#=q2np~<@SEz>yT_NnL_fwM1sh8a;qmeUr%^#(7SLX zQEHrQad*7eLG7+}?304d6We6>;I#UQ@^>RwMHy{#!{##EIJ;ukx?8r1?{yuHy{&2Y zq&E6s7cjx08f2~0?6_{dUylgzeqxa3q=A{JP#Yy%zcewb^#1VNAc5BVy)|S`aJiQP ziO@cDeSrwrAt!HZ?stQ9*aVQB%kJWp1{oJc$Kbb@)tcnmt2b|BGxoGb zU~W3_B_Ot%2YZ?tN^jtM&$?|AcDHd~-70y(08&GF=-;rWjD-8Zj(tA7Tkvm(drbIwmEvws_pf_+*LEvDjhG4K2$+%yM__vhZYr+;dV2u=@joy(FakRt^CKoMDc%ijR~~E1aa+yxl}pL_QDNnq&!p;pA3CC~$2xo@{e!}FK*5Dpq79FD$&>n(Z#yVW&Z9=ty*vgAafeLzldS1azShZqcJV?d;X!`E5G-#p>d&*N zJf7_zt=>Yx!WPq$Ar`Rl)`*F*Pg9UTE!|cEihqc-|HH2XKWa#w=-U9UWDXBrN{-v(*+WgOMdx(IckFaJ@I!%GVBeGaR`-EM-c<=PO?B7_$R8LM7jbGzIS#-u8PKv~ffT8uN3Heyh$@-?0!Ns}ooskZc@R2r{^}Y|`cgB74 zLIk7;EZgwDdSl1LP3`(^HS`K(@!thgI6MSK)wKV(t3p6_EqYwXZjZYij@Ay`y#R?f zI6fDYI5)7U$%^hqaDAEploh89=yLo!V^e0Ql4*-$sF97ytkH7tAkDFRye_xAo*9Ws z%K~G*4~h6^+Ok}@>P|1m+~toteJ{sIJ6RP`CJ4OfxsRlx#91_FK-Gwhc$$wnet~6Z+9kQy$i zOkziS7E-Ti&l*00(qW7bGgP4~NM-rA?c%Ss`N%X|4=1xE*>EK~fQx5|Y+zFVg3K!w zjyeRZ>o({K>{tcQ0dseVnH~d!gSY)m8QlvtS7(Qea&Ksg6+u%|8ozQ~i)u+b+!ey_ zPlHG%Ck_eD1X4W)fP(FVqH4bOpZ*Qm)rM{bN<-iS!-{ZXsNv^k6dNUos5RphChdGA zVsUCrx5=YVkxU-i0~hb8)9)4d>z#q|ruR^2l@Ie~fMUkwh9bKo|Cl6D`2pSCAOCh7bPW~;gK63v8# z(1kv&JUqkdX_}UOcxQc3w zrfzzQ!Z9?A2GEjohZD|<2jWqJ=<+mcuLzFPD~-`h{L2v5*xpd61VoO@1_zZL6 zMSx*sxJxcBN`9Ho^ic~YX{$X)&j1FBiXJE$1ji8M zF=5%g7c2@2#TQg&2&jX>|@O?2A6&e>=c&tyI4-jlVph^2U0U?9Y8G_y7e2e+q z9Mv5r=`xMJKFiawyKk5zjbF#Iso1`h8Qlxs|Cwx4;a)Ww&>Bp0>rXbLUo(@DRK6X4 zuX3DLjot3`@A&YGz$RU%>L?(J@j@+E#yVOnC(2=!8#j4KEz2Vc10qq< zl3Abn0&EFh8yut@rFO`mJ9S57rGz$OcvBCzb;|{HQzf0I`W4orZ~mMt~GzoOgdHuZPux9$19N7aUC8**v&S)02n!htJ{eNM(;-JHB?Y zBA~)Harq@Ug%npoTrJen_wmCxAGj68sDO{b1Abrr++W~s;P;%yp&%7t9#A`t7uZZ1 zec9*?r<>DF(#T;bQmeo*IBH1+^2sk1nqp4ZH_^C#5t$=VBh|E>bw-5eqx5WIJAIq= zcmAP2-zZX;$8{p58^hGN~jOXi~kFV5fu+`G9R3q4I(n47=vB1mkZx~fDRhvWS5+#68Shb zE+zIBM)~{o-iGImvuzPo;i#RMU7urV2+*}!2vmk)s1?LA@8wzvO@3nXX+Q|e=*40% z!SM3gfsuX`X6)#hfU&s^mqKMvTZHGBcHqkt05}Z$;RgMV!=r;J9r?^0fbuw2(RYgO z^x9I)8!K|i623uKbBr;GBF3o5?uH|ZW(Q*KC99EPVII1L&rg{2jbJVWVkCG=2atH5 z{(Ggy@6%*Fn=Ow}lIEEmlC95A=MYKlK`MQ?L0QRuNT8Veg%>3<2TOmqPBuS4$^&Le za;gqR{W186P{vI>SFh{U$2C3(7I=$LALKoKvY=}GMJN1ZB(A;v|kbncs7!p5{vmjOT_*XmHH{0Qd7uv#I8gC4W z^Ni@2kMT>(f9)g~QtDQ!8o?{=+({9P9VC=&+t(TF3`LdyDS(qbvTrlUgfP$Z(N2Oe zPV>%Q|CspUjYYL}(751={&Kd|7#G}^cvBZ_WoHomnTzcag5bI29sK1BP<_fZZT@mY zGPV!vX#M)`WYPn9u}Hmy>@|laF>Gcyy6`yFrrRf6!%VSA`3v2f>43!U6U{A05PLCSc ziQGx~&o5ws2hyZ$E{uHwu(MKWDkT(RfJVKwUL3Ug7(^g3$$8bx2-YMH3VRPnopk=qQX z1Bf)y5`|l9lij1gXUx^>iVaL(r>#4{F|Z_~9&>;@)hG^RlAm@G@RgSgVej&XyBxgF zDv9(UNt|YDtSEv>y@<*rNi`3NvTRA4g**MV_2Ey#UAY;xZC6k`1Afq+neADE5q`Gr z`v!ELSi6-TG?x)4@nGNCS0Op(Va0h86USCDRgzmqy}9W`iu_D$p&4NvW2drc^w&@5 zZ*S@YTT^BLm;B)^AYE7BBSr40h3wyTQz{}Sy@9Bp*O7+-bOLImu%1~FzFv1+#LNa6 z&&b{P@N1P7(g5BH6ZI z-bvD*mlX=KRQQ&K$zdvJLP67XbF`=_^gil0I1upQ!{6*VfPxXP2zFF&7+c^}68Wol z-~>8{76+JX>RT7Y){nyB+rP#D%@CLI7!{?D;Po-(jfFkU06Ctg$4*CWT=uQSmH_(< zIz-KYVhr;b(gYHxQ_%<#uz$uVeTT3VhA6pUp21F2}bY7XuT6DD7Yr1R=X zC?En8*hTlSQ%5w1-Qfj|;`-Ce?qkTh=HsN=*7g3>i)>0h!6s93o>dd|e04sW(m8NBO5o2nw^=rc;q6!5rjP5j8 zWHd}_h|cRTx|p56`L9Rk^l|+P%uTf?gL0rdy3z(mx*d$HS5qph1O=!;B%xeF!psqt z2HO+xtNeJ1;L|BoOr*HB3~p!%!@2;!hNlw|Kv-knxo7K>npY?Nd1+ZV;NxSB5)g*~ z6cRiZzd4Lz{9z;bx7VW^&F?_X0hZ7HD{3m@=29V`1FoS**?*qiw7~;H9Q3|gI#rDP zPN@-tQGc25RqBCz>v=7GpHHYKk{PEVjjScd!=x@yP`gO_eHrKbw0|uT-kvPhe)G;+LR`! zoRc#vx_GS%#&#hiPYE8v-Wx@?6oCt1bg=v>S#zs_7)4x|b^Dx4o-~Z3n(#LQ7)OGh z#2jqkZ63mvca)KY!%hj}W7JX-(^qjIUEd{+GrOGk>h`@$i6UY26yCUfM3221E%Xx& z_F~0nohX22<97@%p{s!WlXLkZ)h`Fq4HFOdg^%ao1)UE_1OB&i#PolZBQ@`I0UH$3 z^d%|`5m06pjtCrTjDKLZ<4|L9+5Knazq(3$SSl9QKXK?^BK(h<0>aLk-WW|toxYQf z1qWDMEP)PGG^F5kHZk-|VawC$^|N{hCLxZpj9v`-Wq!2ci3zJxl8`*{^E*u@X2lmkRH*bA@~Nrb<$S&0UE&?dpF6RM3_j%rVW2F3!nh3=VcgwE{ z?>2J^M2gKo4(5HT+qzD44jreVtblOoK1WgP?1-9A!TNiED?N~z;|(l(Hv1dcw*lbn zYqjD|Znf`lJCSSONG_zzP7jq#A+K#0cge-{t{J>Vfb5kZ#CzszIn&-Q(@O*+31`Ob z&lpfUu_X~SY7DpU{ZPMQSkGwTfKnnYdG(~DL2LeU)uN#;o6<8&RG>o`iJVvjT>J|% zG^BpV&nt|#G`lO=tCMUOACZvF_#4n>OXu9%?8%?I?$6`we(ieAa_pke5#UArM|L`# z&#RO#FnXX53o+;7O_voWcS;;7M_=rF4g6dG6~oV3(dXXrlPCo?Ep+d~mLMW#Q!$0k zJc=-a1Y<>$$|wn9AQcVu&s)H9-EqC|a&qA6Iakb|iUYf(#+~e$1bb8gf;<31Ly?Tt+i8l zmS}*IuO*o6#e||9Sa>ybCCJbq z2E^Xkc9Kk0Iv`ZFsX9Az_7H%T#lhdLY}{z550EcZVOZ3fOAHvoP>^XD*i-gmsFdn5 zE%hdKBvm`Fx5JnMwQVLTaO)8{U=!3zN9n=92J4(9F)$4gf9TkP>6`xW6v*2Woh07D0xeMQ& z7K-Odj^bQ&50?~AtQ?@a$EsWb<&Uh_?G(xj>ZCB9$LA#6@Y( zr5)PHjW%k%rpf>mHJ~b$o@`_1`qpPx#6wzjFcTIA#Xc`f>BaGp#nT7kcv&K{V>xix zIcy$gd8lbQYTPfqTzkC{f(p_2E=qjAx*SFLa@MHK&)UGKE|z4pgT=*dlgn!LE@djM zL9|^+H}a;S2Di|BtzopI@j;cU^U4N67Rw91r-kW#Z7%@C9J<7c9Fd}VkAKYQrUj;H zvrD?fmRr2}rJNz!Hr>}6{vIxvx6U#WRSQE;S0V|4seetUs zAC{fPee6@jhHDPJ^WLEhN7_Q65U8ogg8%943hVVe6~BgyVMU|IrQprjs%^DHi>o)| z0Ifpork?_M!ZSk-GUzLe;$YwQG9Arq(gnvh_4mY@Zd?)F8erE4E4RCut1|x?MVYR} z%|L)vj&5s|JU21#Md&Y&{#0AhRa@Hom54F_sEa7EkcMS2?uWa;Q%lD>;>&*#ADfM! z!%Yfva5hYXz{XrN=uIuZvg@-*VRLacQigo||}Q)cWNB9^2j`KrBgU=X+XbOb>f$(Z>Hcod*c=-kC~A&wYV?U9-1 zJYNC?hjC6Sn)Uk&3a6Ql)u-=o@Wj?PJmdGyR7K@!>vsFOH+`gEhk@}LodWWB9xMF0UdaExUWoI1lI8RQ50AZ{e<&4N_vpx*+O zfntDjlr|gU!h@vV)oc_)d}9eIIQL9aJty!h!k)6iIpU2m=bS}gHEi6~3BG&kym(=3 zuml85VmWzQ#^6Jau9AZ%?{EUCW#OMjf;5EZslUki#0tworG)s_!A9L~RJMW9sq-b@vaILfz;!~br>31kegAB`k5vynxy zffcwVWHuYLbyzxb*gWCwm|(;2J!Cul{$(~)AbO(A=EL*%tr-j~aj%+uy6~<|G2|$S zXpn9Nsp4vyk!E2^bg|F^UC93=HbnuT3y%ZxlH0CUnx!yk(fUxi*-|-2*%6qBcO>e| zQx|rnehZFdx5)(F&{O89zENxCKD@3bdsBSeGhh#8f-QkCaDQVf_qXt-M*e(jqj^l* zXFe^iDeX}z2o(he&fsFOjo*Yacc1ba`ddM<^EDt#nH+oLkpXP6lUKf=m~#+d_UeQZ z5^4k=hQ=$(87tW`Wj*3)p_hhXLug=f(ra@BQ2<9n3c8xsjjrBMw$IVvAzupL zTr5UW*FIZv1F>X>*T(2td8IsztyuPF+^-8_@6W?Qi>q38h(@=`I4#MkhKazXm>eFQ zpE2QzaYNEt#7B(3GPFYAG@b##zWrGpKkxu5D)E|lA~qePI_%+t6YHWUM}`bYI_<=8Hlm=RqCm@5)=EAQAzBSrxaf6&F`-_iFs1wAU?k-Xh2mv_3nTN7T7I^;rr?-k1sEx~uV@4~_6m^z} z#{)uc_GQ zp3nE-4-jT6RN4R1#jPrxqdXf8><^`XgG3u!sR#NwiVujCTz+B!Yd-Ir=&- zr;F6l0^%G6{Kt8Fexmx5ie>2mW?&v@Tz@kd<3>YDEnf>QdHWnEQ4c&*cotjnW=OU( zkC;tRPBxuqs8e}uIJ9*dp_U6}r#R`8OW*@mNEjYICrQevP?C0yb@x4$Y0m4AJ2JGU zEGKNl^kM)Qr9Ukg?K2dLcU_fYISemZ9xils7<|HI=K9Cu@kQtB&4R~{@FNW*8&ADI zJEiy?EeF~h9cp)FYpL${RKHJmG2gNbuMfVOSo;`*Hi|;Kj_tm?481J`+_%OSJt<|>u5fd++U5i9mJ4Xb8#Tw5KOD0QSFvVBgOWT zia_H(eS^SHu3us8HLC+|BB4C*roX$21P=#@XUe;``x^l9rzB}VXw+4#)eRBMu$)4( zu}#FSmu0i!WbEs~2xd+xLV4|D{Uus#$B)3CgtuF{i{%nr%Uh*``6?*q(t6fJo*j?F zlz4Y~r+A4=KN_pQEg#a+sdFcK6$u{Y|4rs61_Ao}Ph_EC`dL*q`1+M7i~ectP3aS$ z2PD5g3Mco=3xlPZF&ZLDkUMX|vrix}u~<~R7h3>p<$|jp0VPBBb+wHj<8`!A`p}wV zHV}WpM8OPF7!3Q)uBBU9W zxJ1TPC5YhHY&WtDr`e$*^E{)By+*iAh4!-7Qd)Q(1EY^ZSOG~6=&^Lbym;;G za@WA}V-!<6q9!4|$Kn$mEu)wLhIK4oIk%&D?me6~>p;5Kz(JRu)6!&t39a6cErPxh zb!@3=kBqJvrA20Wbn%+okcAPohE1?mnR|Se7#zdt07+f9MJ<&VGVLAg9F?{GmTfer zje|A_W1WV3CoNBFCChfpdb1aR-lL)lrRQ{Am5(6Ub(4Y+KRs;M-9?Z_dOgshkSAbX z+Lm+uDE7o=4c)&BVxn~`aZ0P8NS%|bca&$S{rp}cCZ03%50Un$Js~FgS6PT09ZR9< zvb8j=cj2OjUw({8Q>*B#4p8-HfZzLm;Yi}!CFGWF0k+6#1I3vpuzD2$211a$Vq2Zw z+0Q1RzZODy-ZgYtBz=As_C0Raty!cEPo1W_Mc)*t(ghTUz9q8{*TlN&QyIUyYFwo- z+%EUy_{^U^imTs~zj@v?J79TpJgqV>-~DfPnT{zq=MGbppY3j4J=sW*ek9>|>D#S^ zajh7!4b=_gs#COgkvSSbrbi(n%V4*0z5SxesOse~BCV=9q@8dzj?aApQs67Ga3vv! zJ>VhZ!uS=#rAEURI}#?0!^i)X)GkgsL<}-OKa?#L|K_&pyrUpqAy%Y z7K#W=SuTmhYoLhQwY5u>adlID1QY65!pbLR0U6kTmiQf-1lbEf)My1}2htB_*`HMp z2gx9pVn?J_0Pk`W!oggqU^JZM=pSNZj}AgY=aFokVYv&`Wkxr%oYi25MjbnK-&$w* zAbztj(7+t+7K*}a_D!1TfVS6j1H~EbbnO|6E6HVB;vwa zNAPKaj`bS6I$^6Ip3%tA60kUbHphG~9lcKLl!vJ>Y2O~|sR-+4#L9;~zOw5Be_;A^ z7`0u5&svf4!hw<@Ji)H-H0*)T{BOnP|8<+ypzX1+sb?kJ!S$`0d-Tc7m%p}04>LP>KD{Ns^~X({a0bN z52yK)AG1kNxfNHu56=%ce9sBsH0O8JKJ>1P_qhscVrsaxX=I&Aa1cY-EKP>}c_q}j zHIz?v7Q#|#ER+FzHx4SO(1ZL!APwvWicP7avMWYuv=YDogLYJEUQD?C5f+X0FCV2m z-XvYJ5EBK@r+X(HW@kAy{CtiH4BdnN>M{aY<%MRQn}Q|a2zh3ly5AEJ>KS9}Xv(*1 z7YoamI$H^fBF(srge}r2RZb?3kiOdk=Mcqaf80h*kOU`9hH4al7}|;Ox7E*E>eKDrrNhyuKNV@fRg=l zd=fG7IszOudrWH}?Da0dxJ$VG4-sKwA2VHC(RcDf=kfRveLd19NPCOZ{%(;-X#v;u zgWvY*GQipn9`{0S!#fIT+m*nisI!6l+_bV^x3r@22VVl(8tk&yT53! zm(!)o5U9rzs4pSNsT$JuuETC*N`A;(*j;n`*v#iyHuMx|(pnUTSV49w-Rmna5|vR( zL!9X+jTMJJH6;w#Z3naBbibN@a|>_q2EI~jchN+Nv>AtbEd|BY34Z99LJ5w(Wq(HF zeP_`VH6$2opxLKW4hf2ODc~}hl46;TPSg%hrgW*!rNsrDEQ+HMDS2gFB1Ep`A$?E{D?c<~Z^IUv>+02>BOWArk zL21CpUCp#jENlDz_SB))rjZgELrrdA?E`e!XUy}UoZ+=D}(qBJ1^OHM_lDwU(<9$T^e{W(nO`U>TpT)8OMc75tYQkWi* zv7fSJ=J5=8X@m#15D!A!HRR%JTqo4>f?OmqgELf>Ol<>rfyg zmZTt=X6DKJ0Es@jhH(2h=RW(RJ8*-?840h&Hmeyd8 zUID&S5|N`uN2a`kTdEvXr+KEk4i_xYw!-NygxAV(39+SKQyVgFd_Dg{&wMbIaX+Io zo9<+bxxA`^rPD0~PRO`tYszUG z+?VhFDO9bfAV(wFM!fp}u=Nf=k_JoL=vX`6v1iA&ZS2^#ZO``Dwr%d%wr$(C@0_#W zf8)P5zK)LWd@3uev%2DaJG&zDsUr%fx{hP05^PGxJ82nhp?OQk0#wCm@#Fsc#KukM zu`<|=_YmHcDAXgcusBQ@cYG$T8g{`cwDD(oF^{26^3jTM?}PNpy20c@RqvBR52#Wc zs_h?s>wsC3q&_hF(=(H+^JPs;G2n#X!g^ajkw*Bza?%$Y!PciBq4?z3yzV9%tpU9| zGI)UynK`1W7`DPbdZ<`T+;L3sB$1IL0w_C^EMCuNh&{V@;(Z^bZJ@Fm!oas@@=xKw z;KE)@R=4olO_V&4{fsrcI>2@xU`w999bFbD#Q+g4c214ce7zwAvPwe!C{3YA2)p{5 zMzNo869~Q%o5XG~NN!3X?oVYnjwXMUTHw7>@#sI7lVc}_Lz6{)gXRM|-<~azl>%C+W|FP2q^pH#Q{dvgbw-{bb=D z&N05p$tDr#hs9i9E=aS0Me0N$?5kq3Bwx=+L}}um^s~=>wqN!l%sP+7(QuINr25>9 zL(x>KKSq5a>(EGr+m7oBu_u-6mW&>1fo=fMFrm57KTeCS>xLb|6O)8SZC#vti!Ggr zYu{#ngL^U7p79l5a)3anaPDkM+Ra!Ej`>rut`2j6YsN5rG8#hv2K{}So3{G$Q^VQ2rBFC3}n zX}dOz^u?Dg$nP5lG0sL2D}%)^zt8R(MIz2z1-V3HW>3P9D<1S)qgaT~%hc6HwLqi+ z9M+A6iz|AIyHIw9>u&J@qR}`&#S9^DqPr27s6MlY{2I=Z8B2I%TO!?vrS!I0Mz=bH zpJ?TV(yrl*YU7TEh63Xv##AH&2rz(YZchtuE_22{b}iIFo>SNkf;;4)y3aW=i%i~%orXFh4v>OoNfEt6 zqpz_hy7vz5F@|#@W3K2H*r?jkIRVP878%!eJ-7Tpi?|iF@u<0W8(FjG3;UT=>eRYf1D6mC0m2Xo_cUc5MY5_6#w4fFvs=KCxdHR6slMnK`Q3`!n2pz4 zws$SS1m}-C^NB}Mk#;!ZoeKde(<9mEjHa0&dZ2*e}G zt?S4*{L4gPM3lP)WB>X}UD)^6fD+vgdS^LZfXZ?wVo-D-_4Wea0j34faR6ZE42QfC zR&7KIPd#wjTd@(w92omv@8#ZwkUAJeGA0Oc?HQ{QLpK zd+IHyhM5hA#@6&L06^tjliN#u5+6ORxyQ8W?w|>JSa0zqcPFCV7Y}Pw+$n<0I})L2 zYzuwH>$O>H60fL>DwAZBmUJdF?j0AQtKtwL%%vN$OZxK4R4_d-jJs5v@9(10SsOEY z7Qs{3We()(s!&0IgbY}7-pNbueV^p|7L zF=J8vy7DwQ33BPLl{OHqwLdf+8pH|t2S z4J8F?K=3q}XB-nDgqdb*Drn4=bHAdQZV<8YOc1X`{DHjiT!B!tf|Gt)#6Pr}8TnC( z;}}b*qe|3~Ufn3R#(sn$W3cS5P*+po1>ce{yOH4s0O*M`a{M{1M;U)hIMB$A*X45~ zDP>4j)K;*^^dpY>8w))>wN0XvIDX`%zh1VkX^UMh&mC8>L;ZDCNVe*1g!rt(3n?nm zi|5NBol+DBD8mpe=)$NtZnFQapQ50tdk#^kHE0XeLK)s)ChoS$CtG;PmfW2pJ$Q!5 zDyM-C2LNw6_3L}Gy;_~!8<9LPBjDIOqfzLOwzF^uFX7Pqt z15kup?=c1l(#W_55>7erqOC3^$7m%QW!eZoGgQi!Mo5USEeL_TV6F_F?KNn@H3ipS z`dF58|+@$aK`b9%wc;GK|Rs*a@b`b>6+MrRTNqK<$rj$AO?)_KiW9% z@=&AVBswb!#4HZ+E`G%pS*xjMb)KBD1NisP1Fn)zsB9;SFC8TH@M5iX%W<)SUUI|k zXox$X`K%szJM#!WmB68|jr*YJU;y+SVbYaz{9!<6hqxIr@^bH0o=co#BDdrD5 zV{gp|0;Im^G}V}6ryjXS+*!Hp1sYf!>TN~x%6z^+?D1fNg9TCg0Auov zvKTd%EYL4c#yZsOMg%3vDu}hl*vQ$6?ee4M^GSOp(jsPt`pU8zG~mJb)GXJzXmizg!qx?td22ZWcr7Za#hHyQ^o zh%D8D72UFuNgtlvLV}_fN{C=){uAM+8`K_8_>%TCX8+qyF$V!X%Kx1=Y3gJ~z{tSxpR#5OfSR@Ko+$ih zXIJksT0?|r7_-OIAqcU0aXRY;L{#{Pohv)}?DC>$QoTpbULIfPe*1774OdStI}Tz$ zk@+woz5|}ap~vIp`{E5`)nQvJL&^kX(3M3ammRm}9Ih#SIK-FI?JpfjRNT@=bMh&t zF-ZH+F5z5rHLJTY(Rb$tz&<`K3BssDJnHU8my>4oZ_d}J^CMqgIqwMvt12C3Hi5Y5 zQ~ax~yVARgZP3Vsa!Lvqphi2iAUFmv^s%wJ@Cgz@Hl>YRP`og_BO8?0)18=8pP8i`h5=@=SZSi#+32(72yy% zsR=Yg`!$0jAJ^v&|%b^oR+&TUprxFT%_dSB6oe!-9;`)6E77hZN2ut)Y8mvj2>Qi4#%j zUvL;eH}U=5M~w^xZY*X_COcM_1-4Ekb6B#@X-0A@(@E_Y*D2`M7OM5Wb9!^LGk1S# z?+{^3>UGkA0jTy86L?SGE3jrO5TQ5c^{ zR!?kr32l${0f!B~CxrVG2sA6@v;Ev!=@l`yO%WS<1GrJ4zwxG$P^Fe&*dxvjg46Mf zfsgE|u%uk*Tj(>QbTL)zh5~(4^SLr#sG@ws1vYGrJ$;QT=SERi3MSL?*}gg9WQ0gx8HtL}nc2hEH+ryEsxsEtMHETmN1vCV0Rnk&Yr-3Mho_vipI5P%+xW&n~% z=75p`S~AZV74t!D@Pd1P&2+jYeF9dRDE$UKALZhTw7V?BcD!+A1+Imna`J<@_6|Cp z!~H20b~IkMvyVePndMbntrDET#he(#SB;odb8^ZqL2+D zNkEJQ{XXi3ZKKc#elDdC*56misb7w*k(d84C_SoNacAcZi0q zmB^AbO1$!+s8Rt*;$h7GEDS?KAQ6x9aDbX?=ArB7^(*i%>vH3yv^>1gppZh7w(x)o zMyoBQ&NXX_6;Xh3zhap6S0^0fa0g%S%CxBj4C`oFa6So69uSzUpOI&y?Qe96{3Yi~ zig5%mcbZdnq%%nUSe_djbc56#^ElPdUwNg}&gJb%+S1zlp=MNU_t3ndlhoD==m6~mYQQq4Le6yWEHy3msLhRvDfl^a{;!e4a)=yEE zi%eHLxuS9A8nsS?I;E}F8i=q&lK{T-DUMCiEwEyD($pxzj?VFCt&xfZ+ZV%3iA)vH zoPQIr45ax*?TPa_NaGrcLwQP2o`8~0@_$JWO3%nHO0*&6xRz7b`>Q2-u^ikosd;eU9UE&KMoZ&PkfRXgFW571q)j60$LX zMjw$K7R6ZVN*n-F{j8+w%mS1*6%$|)Sv1qIXX}1WD@D6J_+40)w!(=>SebfPXd2FK zuGwaZB(#-ztLp##)uA!N9LFY78!A&LiC0Zp6&O2@#++W(2(Ti#FDBHdXAj zKGo9S7MTyft32S0Sy$gtN`S5oYZiXYsL7J9tiz-`O%;c(}}^ z9ICHVn`35S1Q^Ta-q2LsMZTTSIJIe1k9BXPJgR!WOymvZX)IL?Fn+l`f>e8XGCmK{ zynz%dtV1EGl;uG0J;_MV?0ncc8uRWm1v6R?wkbf~a#8&OJDv57)XGnTY+-cd54U->i7(HIn;qLq4C+p{7{ERb>E6cUINuTW@+Got=RmI<^{oOhs-m5=Uc7431xc z*Gl!4A`?+~0kMOy{IKA!qu#93xdmsA1)hS4+R-?Nuu4Upl^7+tO)yktJ5dr;LzQPD z6{G7biP(2jrWnm6rcM+NZZR48?)ZIF5i;~Jh5nC{> z+@xB$mr~R(s_cY1jDV?8jw5CI(U*NCAFN-UAXLc=DL!KKddI+dsSxtQzqt@%X-j}a zNZ#Sac}<-FVVV$o(9dim{HBPhY9#ATF_0kw_vtwXQ|2)=!rNlpSikO5a3hEOKsKT9q#}jj0Cp7a z&WOhd^@>2MbIgO^o2hg%njZ7nA4Lp0@Bc$F5}!wnR!WaSj@%I&&vbNF1+JZ`N zYEUZ&U=rom3Fr?Y)p?b)^E;YSwl50HK7DGS)G0?m!+VfHwIw}seAtVAc9(1aYAjK@ z`TbIgg;IU`(wbJS`q#;voqSWd{MCY^%xL>|pG*{8i76sQbGz_zoD1`li57 zCe4KI@D9s?w?s6?;ZhTl`;N>gF<(9(5%6lbJG6Y;-=aDO7M~Dh1RI~sw3tOoP-y9S# zx=4YP)*;7r`mP@cN%o*M$24;&A=gdEEVbBL0?J=dLb9%&-B9Sp7E&I5#V!-NuYqp` zU?GC~OO~l;1!cjh*`8%DF#t~Ed7)>Nq>h~qPZ5yKPngl3)O{H-2M-*@1WR(Y z5X{rU%N`dsj29xlN=Ru}yIR9nfba%ZG>TUg_SZPm_fHH|{>$$3U2hos+P zsl>d1W>j!4cMq64JCQ>QKVk0ADCdY106mJU2YG@s%Ij{W%}V6p5j`@%gLv?i9Bt1T z@l%+65Kp{!Bom_rZ4N2D85vo@1fo0R(c|XCG)Qo|H^r}o3t_gXyPBzh+(b+birhrx|Gu%5skJ&1!91t`AgAr`wqN@Y)Aa<0}CYnVHT&qp-=90+j678K9a|8<`_LRgT2Yc zc5@F?6G9qtjw}sDIMEitc$rf(Se%0GqJidBfjC1vrmA;Bfgf}W=4cqvn5zygJRvx& z1NCge2PZ|Q8uDAf^ZN!4*WXT_tY05YRZ?$ib9stg9A@(>dLXWcj+SVcG!1OZ5@LYX zPv)+#xnY+!gF=_ZXX`<(!<>n3I#7MJIeHX4_TW+TswwZ4RzX)ydtZ`;8qW9Go|gaR zT=U%6S#i|2;8e@+Bph!l25K@M3!2^vajqvi0Tczk?u*=g05GuUrdLV<%A-CmtAKP1 z8=jlrt|#TjSxWZM0A!8d!`7c$EN+)CCNI>srol1%?i;(g{>_o8a<&j-W+l23rNE8% z`Q(hZ@8Tvnj9k~lq8=P{$Bp;_ak|n3;rgR-*++YFNGK=Gi&kXVPQHpxweR%IKttwm z!7as)&c80-4R8}1ji3A*z5tG*yE}dPPd2*AHMwj5@Z#8M*MkC}%$>QidazaJ59Q>a zqAmPNkKP(}HZds^q7Z#K!cRT|qZI$?O3RRmQ(Z5x{@cBw5hYiCGM4R+*Vh#yzm%U; zfroOxL{}0*HCV+8(i#Twkbcsh1!k%2$u87J8kOX#hyXkd+3AiRuFv?A07o+^qUgC5 z+}>V|$__#EZHMa?tBG+)4D6elk~T@9=?8n#=FQrSn+b7ZNfD{8zXz@Glo&tjE2_T< zy6Uz0i);||EI&FkQy-zn$KQ-ObZLawkJBl2GEu9`r{d)wE{l`P+{zcn%1?*QF7lGR z1s)0bp#TVRxADLXan7G!0V7hQFC|$jbq=(T>!gXhNO+KS-~56Y*zgzJII@cfJSmb9 z(Sfct;qXBzrA-qytj2%Qg45Q2O=8Jicw2M5HIi>axd65lMv9~%xt+Z6l;K^MJ%%ZD z=_>gxWVWn7n!f3_30F~SY)uQ|wyq$|z{UX1-2mL-0Bu0b#@J8xfb-l&O}!13lp4<@ z7LWZ-g7eN?aca*I?Nd;1LBHIt^+6g1JC|CC@V_+Js|xe+a-4*?@5y^@nf0i z;{ZeMB<0io&dd>+rj|}Kmm%5Rv5Ui-BsxWQ2cG)1OkO}n3rE6nsr!U*W5hOUmXpyR zC6Y$UrH4}oMjASmNX?3{aC2|@@zI4=4OZ8n!5pZxNLT9GHG?bTSWW9Ey6mlmMUf?p z8}ABJ{~4>5wW3IClaR>q8uR$IM;9>cJiwVN0jpGz_B$`_yRBKFCihk0MP*|pM2C>X zcWtpI8SLi3hjprvEc!ssdECR@=R{@L#Ck`AbA-YXNCy~$*gY0=gpL__$V&x>Ku&N^TdEjSV{OC8nd154?O`v0ttjU%#sNb*x5}!Wn!18o}s()4UR-me^{l) zu6Xc`8SrTi)DcI17{`q-wyg}gAB*v-due>#T@Deupa++BN%gHDC$os?1g7fNRjL8p zj6VBMf7)PW#T0#p37gFAg@%`nVAJrXS8l%-Y8=NB+^DX=K!oDcF|EsGuI6v=^o9#D zK1q7926E5fRYwhiZ^ojcM)?E0gwS-bj8EQOJ0dUa>^9aveoHpLp#iqE_wK5npPe!3 zzP>pEKUc%CAoDECWuze-Y74B>??3_6Dtf+wc%dKcb78JRl@UypfKX3)82T{_)8zYaGvOHcZq9&zi4qJKo+G@>nxOj@6d+nn)IEX)?-gRhK_ zy+dIrpY~izPnvIB-NTF`;PMQ6!;%61ygU}`>U=ucE}5Bab$NMteZBUL4S50*u2Mn8 zPfdLxwm}*FxyYBMsdQ`jC1n~}=Jv!)pjMXzg|46P`aJ2z5n22Cskk69>{Vd0Y_Wg) z<@=YcYF!^{3IkW@5<($$K1MYObxHIpGuuY(VivCvxs_o(*eKVEGKRyb*Dc$+TcX&> zJ!YK)0}Y5W|E1F?9D6}e!vBoY99_ifOgkcT*ST(KRja-{=2u;j(W6dBJq zUv0WUw1Ex!+N;bh4xf?yUURjgJD967bGA`i%3P$~!d7gBc=ms;h^U=%HSp^RV};u_ zjE`Z#?8r-V? zt-eg#rtHc!A`;U-q6!O8SdUU%x@d_sGRl{18J+wMY(k@Y8u0>C1WN)KmD2`C+oXhv ze`ymiVKqI($u=qFwqvA>I&UgXFs2+UDf3ydNAnJ(bJf)A9fHOkL=f4;*?>7ub5W_F zE=~*+_%Ug=f(fm$jle%sYVihkeFUQ<0bKgJo}R4?xr>tKxbFb~X*gZVx>T|dJ$THd zl^u+KZC$D75?aG(*85bkb8+?FFomlno^I*y+kMGV=LwbhPM$Wes)Jw&TY^0`&c*e0 zJs4cJ$N&L~E93M@3G?QP>ndDVGbI`ykQq_)LK^W(ye zA*@Gf$Z{_d=~)GsM7VA)si6yrBS0WnLN3$EPHX>wX*g9PsHq(Qz3*V69Z?+_8Rxh&j1N-v77;}uwYx&MS+Gb0EPMbg7rTS zZKg^KlJ1%7aT1bJd&{h$bN68GH=1Xdr?AcPZJauVF%T*qeQsbh`lR)d1&M;7bBb7~ zWPX+k2PvsD!mE9P_tV7Nb@D2|pdqsK5I+0FJ5PLCdR?8u#mME{o|W6LFWLw=!Jtr2 zGjK<48p#2&AYDxr>Yd-qmtJg&wc^^M>)VAJK($NTlK#62oEu<`b?p-HAHf%(O)=U`hb+jMpv5g1&Se@SR*N~3| z#jt-0oesKT+9_hJn(A+Jop8;Hlgt|G{RG`;#9aV%ZkMgs^AlIP{)CH?82K3#(RvUW zRUo=S?l3UllXPLvv7VwMV(0mh(i+5pIk$dV!zoag>ORXdY0;useQafMMa56)>MJPM$X2;rk>CddDyzN7?^lu7QU_< z)}H{tD3lAz9umI^^F&LS@0hSd*t4p$xgH1 zG|IAa<tlKyJ6g*0xuojLT*?PZ#0p-! z!GXX(D$(gw@0KbSZL`oj@Vr&Y04#a+@PdMTQBKpXnShj0=LTN;LIn{Du~iheMJe+U zi&TRH%JrO@=jp=A|xe1RrkMC zC|AYwe!230B|8Ce6)5C-uF$Re;4t&uc&ohRw<9W4zb_@i_Vn=o?BDD!hyG+2f`ElG zz>5~U6~_b28@*b%VUqZ>iyI6=&UwWI@CW&up+HcFLCmdehd(6-o{uAtJgKC+$g9So zeIf$_ml6gfNu!RMUW+bH$^egb^W$bOiNBp6tzUMSb9ve7&<-4Up^i`=Eaf?UfhbT{JvFBZHTvfPI$_K zAtVq0_XOOkAK%6FvvZlAYSnabC7u*rc0>0B-qIG~Q=@u}HX6*R+)R$ws+jnQ|49trFxA;Oe~2RnJGk}kSxs)|HuS@1*)l)qY0 z9t7B!G&S9|YZWh9Hvq=(7VEdru}5rdemYT7v^`MEn1-h6;*-CRRz$yV< zB{`CG$PS#24;?C@B}%vB*xSaLm?Ea(Z-gy6%XF2lxfuK2ivd*8>R;>WPcZNKrDepO zx1iAiLW$`H?T8gNM^VO5xZr79A!ID`>gw&4bg*Y3?bl|8T3|7pyhLA1@LyQ7Ss#PF zLiYFr%J^z&N8_Zl1Wfie9W=Q}0|X+pF!VB2?#pe%iVF1vT!YPWIPkff1b}_5nGfjG{$cui#RbiPG6pu=`PVY3gT)HR}5*u*lI!5}zAM5Z#NU$I@`_TBiPo(5sL95>+5e!&{WorCY)^yJA-5T*27xic&DVzWs% zts5K~{Ydq$S(%BR-M8Dzv*7d^7Pq~2|K$sNxuV3SSGB%VWna4_a@vTux@yTGCcp%M zHk)MX*?s?PX)*8y1INc_fwn|K$=d4c>L9~io{b%$M9 zzE+@dW|6snuuH}{uxcDHwlvXR)_)_Q814C(OrfC)(M#BNM>0VjKoBX{7|-R_rOs2A z>N=uRY`n5`tMZ&MpE+ArIprG3jf0=ykl*Kfo>Te(+j8Fh9K+`-?A|+R$m$}R;BC~% zLj`D@Vlk@XCT(r#E8UIzE7fERbs6S07TJN7<`Qh_b3AL7!Eb`Capj+tnB)JkCeRAt zQgN-W%kO{{zz@CBo94rm|MBPbvM+Jy4n^$g~uLlNiIVAvLRUoXZ108Jvjpfn9 zGPOvY#BEboW7lPyY*`=_9s&kSKl-_S$UAY#>+&&5IGIe>gE;p!hI`3#Tj&70_=I@y#SIyrPOer}_o-;|zrJ zZ~PiIdGd}YE)8JK=2Y~WN7r{g7=z->%^R4@{a3(!M*duULX4z*n&cq$Hk#FtWjw*d z9#j4A6lc{{bxOHkbYlUvz+n%YLi>fW@`J$1oLxkq(O5 zf(mG-a)MwOHK9|dD0M98+2I+e7m|7yF@9^TGloYL$taNn${J%*0rk|M+0CE)Y3nfZ z+6bvriK$Az(7Lj%LQvz9PbDD6+9y>iDChFT>!i=F&UUehAszN2A*pLW zz7y=%A!-$dc`vmCv9DbGoTTU5>}B&moj}B_tV;fDtDg}z5m2rFO3pzIZ=Qcqw3w4x z*v(1UH#cCeVDRadbSa(2NmP2U6J7Mwu=b2Pd$&#eYXc9t)?3`DW+)JMtEQyZRzUlk zd>;t_EmGmBFWcce+%9Jvg9zD`6Ct)ydMB9f$TGbev|b3lruWc&HHC`R()bf1h$obZ zQCop&!Gm78T7F1@qMi!Hhe8A$J-uErAAH&@3YR0caa3!l#vSG4&kyeE6SnmDXn|y0 z0|&us?0EE(5~qvR;aAaLTaO?%1$fcwI>SnUtYOT(EX%jQ;GPq!4F05Q+xFoM#*S1j zf$sRi6c2jOd($tbS-n6~|>D;MmQ#F|68%a05E!4Mvn1fkveacR;=bs|FQM0T!xU)J9z ziL8jp)9E&Ft?#%Xf_G#>!m7(~6UP$JXYx^DBZR-5%z5#?F?icJqt##$Jh-J$ceZC? zq@jz3c4U6sICENxB-?l7xgdtLr*dyhl7%M)U+X!1zW+Tox9!k@=85L3Iei6IHhR!$ z@K8#calNOWl}0inD5_XGDa@cNVXkH&IyK;0G5^?dtrg$`-idnf|d`j zLI(HBa$IyCxAE(#UaPK>d&8pZIb%6onvbPc7*+qAQM5@L*Mvux7$@7ZdYDoHCYk+H zSI!iTv&rc_Etz{$XKsQ!O((!M_?oHl0?f#g=z*5N#RcqH^^ zg?%c*L2O203VpLua**m8c6`V=935oY9Fm!;Os8f+rXGcqeKO z3!&LBl8+ihiB{gc9FBGqr+GPkPu6mDC&|@vuA0#Jy}*%W2-=TR~3|jogsPE7ncCQ!1kTPMxX#g zr(o=8>+E1?>`3q*4nPq%Cox4QeJA7pA~8jJ0tR-*e;vgX8NR`P2m`;Z#1t97!GAXQ z6kvFH=|pX9oW3mx=tTe1hvh%bbfW+1!TL{R`WF9F760AJ{4KH*!2DNc`Ib473H)%y z5EwZA!~OICSCHJWY8KSg3YZ(6(3ytzzI;d!36B~|u5(a5O?3ry>UPI# z_(8biAozJPX6tHftg8UdhedP#pr012E}|cj1{Hte9sX=7Ry}HDlf$wW0Q{KOwsb5H zXTmZQYF(p042^u)J-pN=_WQ$kvejJQTtnRT2ktc~r;5LyZQSbtk_TpEB`9j^SK6nn za6}ENZT!1GI|7F|U7(gK+LG!r=@bl{bt7DUv^ig;pHE={mSD2?|S$aX-jC z_)Q`+m$bAiNJp4Q2#Gm5+0hGPpaxVU(TQea8f75i;o^(4?GF6jd0&vr7#jnxtBwug zi^@6PEzB%tK%f-uAs_ZsM7sn!21^8*93htg3rLBboK0eiR5Fi!^cR^M5&tStq`3e% z25Nx4{5)_6CWbQrm?j@z0uKo68iQa!VKRp(rd$s0oB##4~M1tEKU6 z=dxoX*|n?Vt+G#NW1wwG$1sa%AjfD6Kfj3}>D>(i0No|PqG&jeX_4v?_X_c#cD))NM0q%07k78I$}qzd81FP1CtCS}Mx%t%PecPdo1dHaysK3%D+rYAh2IXYmP zpLnC1^S`@$*!n7uth=~y?Tiiw3)K*ZnRi|$(TFKRf55qTcx7+V5_pTVX?*Nh+I%~0 z9xXCZN_quA!`b9kZEf{`)Ue2Fg(vEKNq+N;-1|qc4^RL4QBzZbx+h9x8AGK;@lB?P zAxrX8Cu;5z^%bz$5%;^{;r#gZQDi)Zr) zaKo~SbCZ%TqS@={MZD}t+fZo~pqS7$G0V0)%c=Z%xxH+ZIZ~)xd#dg)gsq7|?mcgC zr(269ikUyOtXJ`U5#;dkcR&x{LE%0C$-!KQDuT|2X7$FRob2uKKxWje&b*E%JMN9J$U2jYO6kqaTgV>MVzX}DQdrQG^EZbD-o>>Nb4#rdRjgiWa3&GWd)Cg>Yq<8{v8{n=ot2JM zUQ?Tzri@>;AS(wu!ZD7|OF!S~C<%fqOhgmUz37k^S`*b6gtTq`hzbD*d8z>L)H)R1 zyDno!YheH066#J7A~=ORWokipq40Ag!y&Bf*@%)XcdSNTH0ReSX7hDbj+3cOL1UnL zoqhGi9zUZ?)N#Lhxye?vO``q$d%r#zJXhG%BZ*`%0$m*4h*PIQd$NdC=6iQOey(cA zd^rtGn#@+b%I@DKN1aQqs#piev+!975UTr|hWCBm=6Rm^mi)+6S>L(`Zhlm-)(n<2 zV}ezijdGo{NP~uTN#7G=lw9|fIp>USYor)a(crA>b;*eMEoD;9ke%F=0J$$f%aCSI z$e8@5qn*kFYGm{i)+YkOZw2)2kYGw&;QJu7^p1}7%!B!#45`2HC@RkZUkf7eo_Ecy+&GihpOzR@r zeO~+{M7>T6nUQG&9OKMo6cmlK>Prd{94Djv81N5>ccBlV$3|Cx@1(gXW;C(C^BE4eZ$IJ&r?RWgU{t{$Tr zeHEL+E#VTSw!*dwv-Y*t-wkKljb;PpV7lH{mdM1e^Gc7$^8E){!ci*34_2_ck{}XbXS1hap)dw z=B8l0EnWZZ1v>z+X_f3coE@$CA|E5x;GCaoOI8Tax;jM1UZu3sx_kJHDnfQIV znR910_d7?L;0bAZQQU^P6I2qV$eX6OoX%UC7(HD>(fWC83*h!(S!vOhCZCqbAobyq z0#{?TOyB;dn{Sn3EHo(Zm+i>*yTM`E_XuN-GI2A4p%?j;(?5SmsSKkNFRWKg)yL^L)VUWjxh>DcqFIM=56+#hT zZ*?N?&?rb08X#EmOD-TbK>w;+ycsYhaUUGX*FWc0Os+4T@+jk+NTpIl$z59X$?CC= z>d+t2t_vC;5n9^x05|p^shBVnKA^zN8Mil5x&%_Qo7V|+W+moJ`KAP457|O?v2xYF z)7dbtXnD58SpGpfvxBHT8PFGN$JwV}OogHVx7q%D3%FRL({1N)8{y;PWF>-PGR&|0 zJo3k*Mcn2VxXu9*UoIUgz#w9aHA(`}L0sw8KYCORjd6%)W-#9|do zp!S4)18oRbwao&#U%d7Z8ZuY|{PfYL5DiQ@;l>z#bKNJQi$g|e=H(9&$fJ1eBW?d6 zc!27**>t>%TJNIpbduv}iv%H0;&7(w4XEaxqHF}@uStnamS%dL6yyjbUNi?cQ*hmD zBh^1D3Cr+ub$(kGAz{>+L7t@LMX0t6MRKm~_h_Fv`FuI1FtXO#lR7*L55xI% z+arT270x(T2n}w|^ubuUz#nZDvOT<8&@ERAQBC@JTHKz%h=^m#E|Pu4}fK(IGB zi&J(*8HFf=C-_jzQ7uz7YFHTen*bb20Vp$!YPaSqaq%NC7;jBZ(3rI9gbW5gp)}R# z^DV~H75X72qM&JzJ+v(?M2V;LV?9-xU*(hIP|3)d%4b?P#C#dxTz|k^$LSQZ2}uMq zgPR$aXOUqG=ag6v5kd^Q@rkxz6OJ)&N&J8h#jeD+NX0RQP&ySU6zzmQO8^Q*^4PD+ zh2sQ#k1C^#PVflIqYnLhS4m@P{FLu=k}c-C@Rxp%UnL1`^0=QYt^QiqNprBrEJ73t zr2~Z;WSqf^Gu#>hw-~K{VRmgA!sRh-a`+lTKc+pQt;J6==3W0EuFf&I(rD|}v27O_-l|*Q|F>4XKj&O)jORh}`mltZ$eP;<&D`mw z_$*>JR?t?>?11wH#R$dKu>|0bFbP{>ctzdlio~fFKlY7roVfMFaznfHVWr_#Ye}RT zErDsfas+mPyWy-uwzw!;;rv(x&;Q^+@B?mx6C(RGY`l}gTstBzr1j&SzGnza zd;YS^G58aVBRZMoLWiPqP+L~vGiwvr#!i!o3W=)z`t%~Gq6o6`-`zJ2_yY?gjgExa z88oCVmxOp65={3x&5Dwk5e%EUErXKS8k~U84TcTe;8~M^BXy`X>cqHH=*_6-<;LJm zO@Zydhv2aMFPFrBqF!t)9Gw4Q9|A75>>SQIQ@{ND#Flw7r&E!Z>O6TQ*wC)KOCDN7 zQd{3I60+9Map*M%Lr=e5?God(~+|QyjKubO6__vj7!6RUTwUm{;e3UVtvhD-c8* ziSD?@C{NGHrezHB;f};duXnCg=DL*Y#s*Ve-E@ms5OKCQZNE2%D|DL6jHjZ;VlzwC z4}q)u!|Ud4^OPU&Gt3JRsKt4)uHxXA)!sHe>FWIT`M!ERSjFb3-eNP9kH^ms%fA_L zEnhe97Uj;rTGOQ8+1h#J2w*P$nv@QRb0{4k{Fw(qbk#RlAM$P|=w;cFH04UPekhv6 zg{xJ&I$rqLHL(>yg~!he%l{{!*TjSQx=Yu%j?LlsnMT@RS(*k`{J3PmbDDd+o)vwYDB0SMg22+$XcdZ{z|ZZ_xaY+={MK=&+5M!x{qB0)d4Q`^xAf7cg%2C? z?z_k4v%Ul@A>GaH2hF4U9{G(2lkJD0zkT-$W!}>Q9cYtV-eyTP=CsyvqTp8FKb;Ho z%GOVR@#&ExEzEvA@={LAhvi1PJsV7L;9jF5M|C93U+%mz?M(ULRBJ?QMphF4uyl!WTR~uFZes$|%PA>CaMYax3t-=j;Z&>9s_mAn8dt6! zqzIvO0_^-YLl^5*<5WECK1d!Z)2`x%8#Qo!R|uEd?Hc&~Vu=5--xuBh6QbKqy`}ww z5HG5k-Na@(yCi8LQTwtmve(ui+?XmERii7fiCjyJWt%i%W|`q(`x`c{Kopt|C{{L5 z@$w6pt>H`E0eB&9fou5=0r^mw)_wA$| zgX|%lVy@L%kWd4&?xUxZ!x_&}EJYk4Jn_&?4;^0q6%U5560B#d90k5dYVO&3X)FwR zzCXkUbkbnwt#LBWPqh_l2cm5^HDM{tG4cD#>yJyiV_4l*?TOI z4ze(}#Up}}!E|Ixx3Qf$gY#&jls+&Ui}1o40pg6VghwiL577pI2uy=W@q@|tzf+D- zsFTT)CN_$$){;AHSinVR-4ImJ2*daExw_HZ)`<~hS4x8#01B<0RK^8iJ!Q80p65Fas$J!2jvwr7GuEY zv;^84KEA{cX_-pwC2w7U$HHT)^j%2V0&4ZUTTpgKkTghj*SBmNL9F6EMp$vfekgkZ zJh5Kj2X}If2w0O8Pr^gzt-zxZ!q{bH%3)GL><|LXKxqOtndLbVi10>OX8u-4nVT@1 z!6!O%jop|^-*IPkHTno(yL0|DUW+>p?qx=}#1)r=&k$mSwo{C5*sU+!JfY-B2IQLH zX_^_%S8wEB=Gfx!GTY*21vc^@8nPlQw+d&Y@DD>}Ozj^U6YZ??wyG1?;rv`@?y^W{ zfQN2jkUdWphWImOBf1JgNdtlw#ans|`U4)vf(kzr8G%jNn+H{j*RA_DGFS@_N_Lj;-$*0eGUgj}VwS1b7;8w?Z`1#M3U~pbrxbq*Gws)y{X$;$cg{YJj8@ zNT3?EPT%Y+Ht%yz>>d9TKu^!sLl3W1%6G5n(YV(a860P;(vxf^)cdQ`wn8a0$7=W0 zE0>1@c7&ZSEY3w>Eo#p{CFqz!nqu`rP+@{;d{KlJhe>ef^wvyIK11=G!p-z>9IRmbf>d4`wOl^6_)X2I8^g9n;%up$2x!u9W`}LX z@b6(&y40oep^j?`Q4M;a< zH{7m{4mby;fJ+wHwOGyy&HOywnz3G{D-`*uVLil23uhTG zM5ckT81C4?E0~$Q*K=Pc^;uqhv`QbB(N|mfS?)(<=D|=y6Wsqx( z5~8)IjogvO%yl9#yD!$|1)O((+8|oD51^c31p!fT-Gwz!*=cBP)~Qypt~KM0g`~YF z1Gn_cIoLC)xs(I;oB3Ly$Geu#xalzDoa~^Ue06|^6^=UDz_?ADnM>k5mC-U#| zpe1YJtjcZlTAwa3c*VhCRR6DJ^zzs_mOWvZes=>iAhaf?TPxfzv^H~g6qlWUc=*Ny zo6CW4;gR8e26-Aw)CV_I`r0}E@5b%p-=f{2G$CH-k^!`>!G`!N8g;Q@rA@AT{`||fe`?PyA z47dAIevyQe7boO$M0Aj6=5U^dQJfgq?u*`-8vymnpu^xL6Be~MGo#x$Z2)hyC1iBvVzL$D3p6j3Nw@X9(3;sWq|)eR@`)p#j+1dt~I zqNd{D1BD;H5l+ct7hKiD4?rX^r*zver%A_k6UMPUz>XV^+!GzUSnKJ|BsxfiOIE>M~_tm0*_mzy1*? zU$No%zxP$9yj8v`=d#ad1Rrecq86w&@E8BIT^npEXbJ=-OB8VPUNG1DnaX1m%0AUG zqL6TS4kUPw)M}}BSmYOkek~Av-7yt9I#~bTWrX|RYx4gmw)=1IgyVle?0^prZyJocnkVb|L z4$jq8@#%`o^g-*L_B`RZV;I){TBCxL7SKES6>TtTrasf=DrW(gVx-u;#7|UZVFt*b z=pwQ5)ZDzF5^&9UI2mXDH_^U4-Yo& zqXs+Ohmp!TU>AoLFAte13PqK>fm>S7ovXmPUV7Z~RLgAbV&h`>z*k2plyI0PVPP&( z$llA%D89vu-&%%i6*C8^NU~C`SaQVN8O`PH%dYhT5C=NJp~m8KG77dwcMEYzvx9n6 zO!z(}?Qdz$=;_C4Ho$G7aG@!3!~0p^GrLK`Gzug5cZH6!%etkc^pv7qd9RX_g;!IUXz$2EKVWc>A!kmI^e zLjN>+Ld%`%VFeb>6>y;NR(2jtex6X7^ZxX*>(iw#u5ha-4Y*_P?p|h`45MBQdiQo= zA4(bIn!S-J-Sy7s;TS={AJq2|qjSxyCJ%o zUR*2&_^lwJ+i}R!5Lj05;1#jGd-;92q905wJLbN^5*lJW@U;=%ugdn;T0K-`ivRm< z04@$$O+K&CeR4cPTj0he;) zSI6(gyqfIWn`(e($3&esw}eQYYhf05`^6xeJKT5*pg?~UF=_5J$Lvrv07JF-?et-! zk>kOiam-Sn*R8NDP4+&u%&vuh4$Pl`y_a%;Q?TRDT&Ps&6QE&;W!Y}htmpl;ZXCi~MaV66(i^F^@)AD};CSU0!6f6kp`F4A#nPL7WxWMB$=pmR|V17|Sy1YrbJR_Q$!8M>gxanB*LxpUn zA$>5;jLLuE`?zmoame@}E#yf~%3JtDU+ZGL%)@8x`+b|lS9fJmL=E_2P}AP-k7MY+ zzq1!3n3#S{UHSd6Z#j7@k7Tf59@66g2+xAO*rr6hCclh{^v{Yczw+Get_>rxjnrMj zxheVlS6@+rX{k&Y`z%a8H~WUT(e}%^Kf)(YA%wcP^aZ9dKKTx0x1YaVe$Mvp$g@_u z-|Hw=e{2gi49LnAKovt+hNGzzMW2XFb3XVAvxFh*s?0m3nCai(&9^{l@~A%o`oPpK zTbDsW*Ulb*c3^z<;7}Nku4_tfc9Fxg_&Q zjXRf%8L5net0`&?)G+-;y#6wBeB z@UL#xc_Xm^OC1X9GPz~O=H&pWKjL*&CLkP!Xyv=Di%Rr&yS_ci5uj3l6pwCE%#dxe z{WdNkj6Vqe@*58~sl*9(7-Ej+Dvu+cmvU1-D12M@{L>Qjs` z|H1uo^RsQTxUz>DiCb3v);Yw453DMD#Jx)&YEn5$J)E3Q!{8V3*0FmA#(=Fkjkdgx zpeC;5YzwX;uHK6i200C2C3T9%DPm0DjI{>EuX5Oin4UhBM<(n8`gqBTwH`e62I741JZtX+@fk4BcESUVE4I98`@+S}67jLu4K zFYMFgu$2&B!VNewqy<$mj)=m6Cn7WB(@5rx20}>JjV{`^dQlF*U!_ie)}_U%)@hcM z1s8OzqWJuKH89KVDF z!;WayQj=9F=`9fTT6}0j4hmv%pdRJ2Xzsh;fKanGZ53_?<0Ly4}?MQ7i+_`oSFM|XlSujj~Br#@5<}jQA0m+r80v7VK z(u^)uQ(t?Q)_oXoKB}&a^b;G!lko(FZgB$Kddac9kYqr{7^333q=JehGG0=C5Sm~t zG|-ct4qS>x{`OJtsd*o7LHu#^a)E`h<`hTOCUr=RbtDp?rN&Z-ShHuNgr*MN=5oGX z&-8Q@H5G+b-P$Qf`^v6xKCPoqj@?vs;Ov>g%;=|&jP7s-IU>U7V*F%7Xs`K)#X=*a z*cVg1%7f0Uz}F~O%yas{{e*FSPHW-jB6HbO{ZM6Y#8H%Zuz9P+Xp=*)S-_8Cy)d~6 zvFR^qc1|y#E>kmYA0G69I~W0cHZhToi$(bf7K^6g(Lkb(XKM@L&ZH)j{p-z*7r(Dv z4yj8BullFnkDZtc$gbW&E&%wtSfKWbUwn=VazU${V9!{vfJ@S4d~cWR9AkUhug4n= zgdW7@^C8>q8TakVt<-5j8ME18#iE$AJZmuf%a|Rjxt&^*m zHu*KLSM2sF>^&iw0YAkbodQOJuffg`EnptrjsCOQkOJPj#UN@HujDk`xQ5Ok z!ch{6E#MH6QFk+Qzr17?RZp|_^?DxTz7FEP!7xC}Z2vP0V*E#Pz{bJC@!xys9BnNZ zd>*8KmE)U}f0*?~USHx0+tQ1dF>a@kh6|@ysS@qK$xB5&n-ZpGHs9}H5bI$SW)^L< zDU`zT5W+j)Lazr;JFgv=1ZSCNHa&hGe1Z>l%fBy0N1N29osb-g2ALu&{#0`0o^+bg zs&KBPu!iQM3DMyy$SP>mj+WK}4$S1bS3Of3P{eJpP|YR=N=+LXDlD|pAxst(d-egg zACFIWuO0h@og{%HCG$vBoh7`T@`0O7;A;cUx)izlt16r(Dk^uOyq;1)Sq;13N)H44 z41ox*oI|Z6oQnPxwc%wmR@5+}>fsFfX<30MwaO4<-BP#)Wwo*X7ku>q$zS`pXW%m& znloxx^d@GCYz^F~bWd~j^rlObPDj~)$Tbt0QQ%zz%AVCG8%}QIum*q4WtZL}B5Z4D zq7)j+oP|iyLwsOjH8UJ8uH7s0={D3Zt5nxoRbIW+LmKcwxY^nm{8pXiB3Dph`2*$A zff6UirnCEGO9oA9y(AL~7@a6zwF+RHKahu)oI3uMVsQ|yq}o_%jEOis$)8dM&7tdG zVKd={3lEv!(3*shFhf3ESD-4To8Cja z6f!a;K|J(ZxuM>a<1zPB2=bWc(eL9k^tPAze4=xz!;UFe>09A%b9-$+r_Uk*&WULt z){hc~KrgAwgvvd%S*nqy1Omhm7o+Qgr0+qb6&>r70mm;Jh?XN|U__iI4*KL2xn z&mY-Un=;SnbKu#*qVeM^A>VrSq@(Ze-mW&mnl&o2^v<{fGhzb+rlV2$5cHhK&yN93 z)BF7-=;Nn{u5;XmsI0Jy&kVout& zIULUsiTw$$cM~@*rl0WZZ2{9d_4z0hfU0SH$o2_;Red(OODAv;!;4widKd= ztml6bWQqDZz;Mcy;}=3qlFXE6MLDFD$u^UG?g&eg6V z7J|}41DYE-G%}7pnsXcf>GM|DInYSm#TUrj_tg8dDY6=lgC^R0?B)uqkohfB<_DZw z{iRAN%CgiQ+)iLVNkrwhxxs}gEbuGxxqP2D9)}((lHm8G;@ndj*k||Z(dgF~b69jl zC=8)MkGZSh5IW)De+=vf@Y{ozj0>qX&F+K606%C-s{U2Ft%a=`2=_;f$ z)Rr-WV_9R=!&kT~J6 zaLv#rv>7|Bs5(Kx!alx1i6&dCEYsKcT@DoSwO?(s$-cUV-+M0Pf2^@#E`ca}&cJN{ z0PK)J3xXky15u;-!9lP^?}bIE_-6{)@lQL_`>u28;1en3amhI)EmHysGuAE~T^1Wv zXCI28k8#sSTC>1$*7PSa?kYiKz`#gmRpl&jE<2E#zc>u*RQR8~r029tOeDxG4-Wi) zMp06SaIpS)rqQ*+3b$)tRzf5UvkF3e*OfI$oCKSsCX-i+IVkUIR~}&rEcz zpAKb{WG+Hks*(;nE#Yq4M6=maCU!|2C95TS2|}^hb;SZ0 zCx5(O!l0a^=RcbO;LPg%$-$-hc7)`Ugn9D2()>n(u$Pvi zx-MZG3POG=$!I1>Rk!y@I0G7R35`_>DyrV=PjPmK62EG+ax_G})f)}PUR4;V53=GD zRr12*UqTUaoIAS%`$E1<#R;)gof=V_grD8k=k!Pe78q=Ibs*YFp)caez);|2Z5oUg zpj({YZ%tVWA7(rw0+klw0IP_NR>uN3f zn6dH?{^nq$jZ;jUBq;+AV7$o&lefqZpCCnA z%7#ow&HP*bkTy-QGe(zO*o@ApZyw6KDFiE0nh`8d)GcIpvah#sF)Y;3wO7U&B%X3i zjen5lha#?CWyQYH3qUrBWVqODvRUp0b$>@rzD#@0>ZW0&AK>0jcTah1*nJgc8L> zgCS140A50${lrR#0yu+FQif@ubLAAcbX2$q3F@5&JrcSxWe-G${q?@)Px5c6uEcV% ze*s{8kR5od8feggB) zGB;&QNcL*{Tt)7=h5W)3Q1AzOk6&)|!<;+RT4RV2jDZ#~v5wplp%guQ-86R$EPwGX z;P$7hF;OTT_yBrQ3u3>Is95xl&{{n7aK3i@(_l02Kc86DJWt*8W`kue%+4Nq0(kdf z_iCGcNlOv@L_A`&%?I#;)SGwj9e(TK_&I{h8rP34rxbc6k_SK;8y!|u*U}K-hMt}C zi!ST^`D9p8&o#+VWKcDVn44s2AHfnvnc?RK3V3k$-Te#oFZGK!5$@036p(v0XjK<#p>qJJ1pYb}Z{a;SaPClbgb|0KxXx#kc&r*NPcYR;XP^r#_ zYWe@YQU)}JmC9_B=LtNun1z>(RIk0`5faNwwC;`M2)rK1p>J=f{n>Q>ITuLBVhocJH zx33j8ey4CgGj_>+-OK~0^9Uyt#f!=s|JCH%c-Br|dh`vQ89 z+atad-h6PoZ3jQA=4WqwR+#|ZH>$gFY%driwDt8@w*;v&duLMSq_cxodkWBAyRqL+ z1GT+`CuD_I_oJMrXky6tkWydLA%C#Q!0#g9`43E1e*n;+me z-eqKX&d4{87K+&5Qs@**<^2~_e{q_@k+qj-cPw3=4Z0ow11d~aTJR_Jo<35VnLdVfXV43mJYLJAQ|xw zXm4bmt)w9Q!2RkzzR(&^M1_s>{jUlZ_5McyY^NjwbKME zvNzxII@mvb(Uu^97dDmUfoOXH-1PY#z4$2iz5qN=NC?|>C-7VmG-(1DVabd585?y~ zF@5Vomd0+yDPJR>G}53=?7!ZOER>smTiET?}IIVJ$t@eA! z(J{RX&XcO?i`~UrVjF+Wq--4|41=UFVi_{OnFDrXG_JQlZteY^o-aNkC3EKz#nKWXBzDJ_RSg%qvU4Xt>j9Sm^)d5h5L+UMCPo#-r!J=~)K zC91hz|0;eqL!GRFlyB9Uu0uDWYL=inOg%j-sD`yz zA(USuo;n+hwd0K?nf-7xQFPWJw`^!uuVk;}?Zspt&w4pMg4Y>0R#B&~km3NwU{>r8$*cUQbKRs+;9Hl$gGRt=5oyqr|ri} z`>Y3`T<#O-pTKm(zu`kx86qpqku-4FeZRid>rK$UMz%GzhE$*H<x~h`C4HKTT%y*zb38e$Qg1%IEU*j@ z2G2fhs`WJ%cFYYt^ZjR&j<*|r0<`0nOSCg!qf1{Dq$Uc3;cVmSTZlaTC}N-c$m|Z; zJUek{RRSx*4Ip{$1m%X}XupfjZ006?gRWg0vtLTDRuYdvcWJ^0TX~BW88qO7BXS>zJRu{=){p2ny!;dF|tQCLT@FK zTOhb{HCCQY^62gnv{rf4Z7F6%>J}nc%DnW0iGCZ!HhE;s9LcP^JEU$rH`% zWk(ni)GKX>G}PnXXUg}3N_n1#2NZSV{UN5-zmIpP)T{1y;5_LY`!ES@&tH~Y0&kfs zFa*o_RDw#)9ijP~5Y~3>YZ!piKQE75J_&-r%-Ao@XinuwpMvwiR_sU(RB|lV4pH#J z35BYjzgaqp3Ul2YStX4X_JG)OX^`o4>$1qJUVnMARk&7zp|uw)E^NS2tUv7B^dt<%xCU!YGZRVt$<#L59HIKSSCyESR>aUP&=M&nAbLKS|?^aF`P5vHTM0Yb%Fa ze)~GPJbsE$k|GZd(_$;3Z6H^1CvV*a)v7IG`~Kx*N&}=}S23q#tagfRVtH_-xyCxg zhL=kC(7Q{cJ0`w2v<;qK`c}1xIk?Lf#G$;rTza#;Y4VrH#zrj2dI8V$FC0%>ZJ(zv zq~_VEd@BJ;t|+o#4n>)O_XdZb{S|G$-BeDf*ut0+k@cn>Poa9dJcy~_Pop+xBW4}F zQ6lJJrvbT&Szg#jd-*o`VqRxhil;dA_)<=oP$F+E`RMQw z&_8YrFn8c}rMeu{G|s$MSFsmtZu6mLxxIh8J-x~f=zWQ3i-q4yg8W12UA&DLsNTSG zQw{Lz5LoWJqncGn4j_zV4VN|b=5Xd?`vV_pZtDud05?Y_B{HyUx01KQEmw!BwCyS4 z$S3_a9q~ctj-|>I%n5h#+g7pFpg?yx_uUdl|B`_{eD6VxofZL3l&$cSCN|r}pOptHY!_5FEc}qg=z>$e};=yt7i(gfc9O; zxxPHt=(?vW3%b66a5vj5;n`xDTA+UN7Vtu(nofc3eVrLK_v~fJP&laTQ>`Vq73*s#7Q|jxG%9M~-$8q9ZqxKm3`1q)9hgt!Q z!u+89+bz8CS_EPyzgX0}ZT=#nvH4_E)9D5T#TrAHI%Z_Zk!`^f0dcz*o?7}L`((I0M@ViCar>tAfkeS*T22hEu;EyRx%+9YI&#Bgoq7r50y6b z1dYwRhs(!6MsC78R&;Dwu<70G_8=n#Bg|}R(tY|ibU#X%Yr_;XyuIpT+x08njeAce zuKp%oQM>m%o&0k=2sP$X%hzDA;LrLfR2iOgq7gPj>R*5E4w<+i#0&Q0Eki8G1{m~qr+--df)w8*hTAZ zp8#ydXh$(*V;8elXLDd{`TE#f7vFcIC6vO|`#l1my5Yk`noDiB!D=U7So@DzBfebi z5+77N&h&U@IDCVn)ASh_3xcKzScZ zDxwTZcW2E_gba zP84m21euF6;1=R%aZL60H;0&Z+P_gkF}kBQEBeFb6uGN49Ei!PS1EE}N@Wq`ikl~AL( z>=%V0fZLOOeLE*>1BT*P*!aRkK3qUOKC942;GVGVI9d=wwp^xc62b!KjpB$c5O=6Z za)?CgyLiz#(itOaj##pI4OAk|n`?=jBlqH=lpIBhl;Nd$+0{!6f%W!U(=uf zklz={leU17k5Vw8t5*PkPoeX>*<11QK>K+ ze$Pv#8fUg}sI8FdIk1xa1BZR0OU@Lh@*tD7yDaKkE4(U`_JKI>3F~&+I){XrB@h3M zl`Q|T1Gk8x$k-`HNwjjFTtIbCiAqI!YeJ`HtAqQxs;E6x*(Yfxo5uo*WTJrypzd+O zWvAD15Kbz!Q)f&GgIv6_R~Lm3$nv_eQl9Q3$oY|EqB1g_)Lq01elzJEGl^ohULr{& zh9{ph!40>uQr&3fH(sMf8{Y9keI7ZChR$?7eFLk|_c5uu_tz`)8R75ifURKd>{!KO zIPwA&rVBp{3pq8+FUE1TN!O250ER^T5rTu%j^>A9ILBH}+mdN86S+j2iSoTCr!*DXbw6}D7yI3T?=RX9%?|asA7u|!sai@N|@D0De z*-J%#T6?~2@;4WKb6vLCJhEA95ox_mV*PXlo8ZT3FS{a(m5Lj7MS|W$o9d`?hq%HM z&BNByT0IswH|gq2yeG*!S=#Ug@bo0{O0=l`pu1^YPAB8-ZhQ(Cy)XM$+ut7J{k0VX z)#+D09(`(-CkrESjo0j7#^iY3u(q`PT~>~Iv;$y^X3~& z<`Zh~zZYNF?Ek?n{qHIN|4D*Nv~+%Nw4?q9vHoG~h0g*3bCc-)9)Hy-mz67r|6D*d zK3+gEVJw=Uo!D6PbOE^D?28)mSX2?z+yTKsFz@LA@o@9L-J_JoZpa%6(B8Dist767 z`xWsRM6JD9i+$aV9H6#J?C{+MgEhItm0;$aRCgBE#q-nDtl_KqUy@muDMc>k`SWoh zbV6tO+-LdCGX&8PmD!UO-rQq0!w(YS=X^FDwvMcb zLS`S%mWzNt)d6(XNTC z>L7-6lBZ4v4$@iLX>Fl1Ain{d=i(AyshOr^=Z*a(WrS;t| zsigzZ9qoGdx#a&8jU<%!x1hqKz8c@#O=S~XO`TQi)RZQ0S$3Y2H{pD9Mo@jVUVe4y z{hawGc2z3S5xM3zGN#<@!bki)A|m@|)02w+?&f|p6yncJ9kJ0U^TH;bcK_w6!>3I*q#wd`80*CK$r9>QG z>kZMB`^ENQ`X|uAI&wHn?JMTzBFP(AZM+vd!fV#u2eS-FZ7ToS;wyu+^ry3n3%EJ^? zLUSuxNeFpAhejNW4}eiTflhW!*(@obdBhFnZD_3@tiO#BZyLgN+%;L`JL-<;@)Btm-%jz_2!SxErx`}{P5(X+VP`(-4^?QZCa)k4Hy3* zVIDEpx|pAnUl`IcTSo8@J(Os0+FvaPGZEe^^o7#LE7>}imt40{b^uJ~ z!DyNA2P%SsjZ?!R-2fdL)kbdyI|kI*;en}0mY}~nFKRIcOag=>#l{Hf(h=$E?pnpj zGS`57?T55&L#T*K#N1$|sN`X$#?fw<1M#h!yp3cLKN=^riU-c%1@$J>iqL{?( zx^_Mx^Ku&jX13kX>F{ob6PP3TC@xE{ogxordQKY2D7qqtguQ5+;$|O$m59QqMr#^f zPJQ#Rg=X_JhO9`RYsE+=sz|tmUYau^yjB}vk4`-Dz{NF8>g~!N zAK(0)Wl6PtUMl$*ssfY&hY-FjI2%a;%GOH~BniXuD>M3?4w#0dC!5y-n?1L#9353O0K;{iFsA@UY?{qSRc z+!+k8B4%e=v=Xu$0R{B+C!^%}m;Psv*@v>Hkwb-jCq#|xT!;Q-s^ z=Cve@D^e5hm-asSsR>Y@!aNOdkc+FgAnm9g7x@)mLBLxU&$V;+$&z30g=*n%`_cEb zi&FB<5MEj+OzeB|yYq)$m=VNrfN3DG%{h@X)1il`E&jKViw>ocrkJmY(K>4gll=c7 z>zukXVHzbGCllND#I|kQw(TdjC$=-OZQHhOJ2|ty_wro#59nImReQ6L-q6Rd&LJ8y zb&CWLQIryhA-EBihrmhE{$VCkb#0g!-`{b00)+v%yro{7NGM(*WREI7{Eg;s(d;OG zhvR1pvkF;F@Axw@o-y93(t%6@p5F=&j6G<;bzAf|cGkyG=S(k6AkvsHJIh8%)DWNR zy@IAF|J}0SUaWn{5Eg3QVkil&ret_62x7Jg2*6=p02jR=UoOXEer+WxG7LS=Pt7bU z++qSS&gwq2vA zx1FdDa?y2~ia3xXsskiSg7k~$^z#zcmsyc5Ey#p%zL!EhqcNP>;?X$eL=;xo-;MzS zCv2p-0!rdt7JoXHl2Lx|2~N@uPmaP>TZ()-hfz~;s43~FDIq>ZxTeexMXx zRiucUeg?Ir+vn{C{dxK|TMOEMXD81U5+^)ShnRu8?omF-TzEQff?PyzZdW2y^+kCV z7vGnP^ZMZX$**1n8L#u+$5-^2-pK7mLS{AB9l6sd-x3xJvb_Mtvfd*)ceBj zqu)m6azi1V3FH#ox3vTb?%&gv5H@`CDlW?G1O@811#6tl^VVLr_4>0Xs~oq(lKk>0 z#s@d9BFJ)SQAyiV@nJYHaF(YLksh|-aGxigKqvdd<)PvqVDJH_(Zze_110= zNf{c~e}B&S0eEmQGNyL_t;;ys|Em~dS=%2B-+g>Rs|y&8*HU&9P(|<3-St^!Z0Eaa zqmBvY{cRe`AV%Z6R0jQdnYMnbCCk z5cnYt_gR1r{FC`KMlV)8e=n$N)m53SC2t;k^*TJ{a@^6Zc(OJfBP*y`?ErYJIMVJc zk35@X%P8NxO5G5$ogkK;@w7}`e6mv}Yid6g)C>H2ew>)fm9PAxY2y_D2#+}u^CiQ_ zC81rRs*+VDoF(8JPBoS{+(5pIuX}9dp9RA%yegHMu1f(caj|a}_(uO9MQK+_~SrihpC2*z=~BaAM8n;>})S=m6Km zK?WkL4_pi=4S?Xc7}6O*Pb+{lhqab?j5nfN#<9}{ z)h`jc5b36;Z8AF@2XS>+2t%92x1Sd%*(L)Z1`;4@qz`9bG!Tbw;c-zUcucGt(Wh7C z27950Ca@7}N@BX}tN=JM&SKG^9z@L5#&YI*r@f3$;}A4cyBQ(m>4vK|CVIZM<-vmT z(?SbITR{D#%3(8CrU68X`8#SlJ2S3Y1wy%@KVs6p;YQC?&z(+-GD(Hv>a zKhdT*%nV>1EC3)lV~%Z^9joCZ0cs35L>6VAVl>M$e8X{?YFRryhUtODxERuzUgL&+ zxmHru{({(Ds0&Kp&+_fvturGj3!6XQqNdIRhZNAv zV3lvM6rWD^G3+pt_LahdesGA z?com*+;~N)x@$J7z=E;Tk_1_}9T&J$f)cZ{J&k^+C7eEB6oZbAn!t?V4`hra4jMA! zSi4et#<8^fhya#c1B_7M=~^-TbP1l-iVUTA)}ld5E2^K_Tcb6@9w*^ zQh>7_Vf*=`pt^YNO|^|j%mK$_5m~8gS?75nk%|vvS1|PK;xkCuP&+dxi}&CPOGi+q-&13;8ul|Dz5{TIqctf zj+0#hb^G>uGb1v9w{Bc)o)Ynx^U|jw7fkl-t96@kzKEVI&w?E&xkIPNA-k(`89+>F zKLdsOH}@_!Dj(k_@N|p<)}oYgQ&SRDz}?$`Jim_%X7~FWFY-r@_=@_CA-7jInsIVp zgQ%wMUj3)|hEtIb1@sgHbfXy#7T6}3bhZhkAc(LQ8rr&d|a~zT)-#IetDX*(q&q;d0aoLXnggtGiV`zrNeHNeQIb0 zZ^;#COcxYt$ZPWU%l`v8r}9syVR&rVjfisAtw-uYA#w}UnA3_0Srep1mvyiKDac9I z=y38YzFo*YspXxLQLTl7nNUgv6cia+i!8|7^-)Dnlu*}0FHrUgTr$#!2HLQxy{y~LTE_vIkt}8TL{h#0hFxae$ zQLKw|L(vo1AMl_N5X+O&3DBv!F3>=(qj6cMy14%xUE{ZFPw-nZ(}WQ!#*dJ(Oc*W( zV5A(R;Q5_1dKLD_xOCvV54Sp(1`MA<7Y)wYVb|tP$Q*|gzK#1?0UFy|;F-fN1N!Jy zDw%}QbFlquI*)~q&&#p*Mr~c;HkBD1=(i~#n89qf1>m7n4Mn5^1(-@H$3eK1?Sh0l zaX5bI9Nx<^gqMLL%is;!im5pWQu~9T`6uOolCd=u)5}Jh2J^y&6pmKM0CZ^8F|S!H z=j0Lsw8|xRlK*Saqy8E0Xa@Vn` zm@|>4rd!d&2p#Yc9$?g>8S72AxqN9$O$1r2Z5fQv`Y&euGEA@uGjuNaj?_vU{&T=z z(!b4=-qckf>QNv9JBfk7PwKl98Ah~y@yfDAH{=4^2KnP0#R5b+|CGA2QM?E)@Hmw# zi1cM`ELf+%P;W@LZbt+<7W)!i&31tioRT(tvqqu)zF67<-Jg3`;x< zksYT`Akah=Ab-C#gOgw{D24*6v>aa-F!}5Dc%ophrQmsDavH-1*(K}?vM?dVL3&W} zR7fDjvIy-V^cp-zLdMkgwzjRNb}s^!-E*^5_@|HJfT9C0{q+)PssJ7KcaBfj6-;&) z1ZZHlE2@8`8~_HVW?D@W#PsfUv{cZT+qGxuLoZkM!OmvE4iLNq9ji!#rX9n)Al~QY z2$>U6Vg+Z`C%t{OTt{wle4IK}v_0>@$0pz5L}#hmU5-=N%8^$lO5Atx0e-f)GZC79 z5US%Ri|2qmMQ#N$UKKi%0Jmk4BrPNjSOY!%uuu8d0(&2MZ-d!DPpvQM$RmF6#^7<3 zF~#Wn#s|i-fY2rFl5UMeOk2*ZEa zw3vTca)aaE8z4IUK{UOjCK_2^g!`V~B|WQag8t65^4UvCobw4jslCA5 zGc~k0S$!OUxG+MUF2fq_tFgdi(QGLUC>*iXYmDMSL`Isdd38{&vHbd~$vqYnI?ye1 zS4}tP__IJ$^>nN-yWG7jwxXYaY#Xbf?)n{{YAHAp9DP!e^?Qyi$Ku>7E|pJrXl${b zaL;AhW7+bLo^SWZl@T4f9>!9Aob9)ZK|o@wD4 z_UqWSsz(cMiCiD8vqN?&ZZeS?nUsYPZvJfawB?suFE}r2L^{?b#gZGh}p1^88 zPV1Ityr?rcjRHbx*u%#N^s3Fh7vs2alGNbL;Cu8yy7w!CS)Zgd^fwH1fNA-OD1%u~ z9eKGNuQ=z7BIt}_!3ie=5!u1%@o3oPKJ-csb{Hf58GA7S!+4kwccrs6*x{Yk?vX?e z+P#g)C!vHHl?pA!Ut?kEOU?2b@X2_X7P%fK9R_^{!)^mGA7HlmaQipt0ZVu)YRj}l zwu0JHxUyi1LMX~6Qf!A~fO2v~Z&b1q!%}G3ZQLkypeH?QfB%Ra!)P5^wBds`X&1~f z6D%)LNQ{Oe@~o(7`$B`6cIKLJ7kdNCM8=w72ncN7{`NkCMak%k;J#^7XzN1@!MoZm z+buY#eeR~^f{dAq)cuWnKkHjss+W_jb-2hR*e6tI#%4*!cXbvxpj8@XhPgjqI_Xmx zhRlnI19P?Sixc_g?AGl5%P?Y+|G<=?nr+6uyYMZ5%JIxFg53Nz@gz20|8~*(&WAVO zvpavsNV9%W!-Vha6vR0BC{Es|BzNWUA>1p(#z;)YGsqiCBzQW!+=`iG-p1;RazYvc zg4N4YxagxQI#jU@5a%T}%7sgLJRr9sw*qT1L&f(*$ne13^=*&1EWmvJ1~v zTka<@@d@xc>+EW30_p^sR4Ag>?c^=JZ5U6X7$44_ zJ{2P9q{N5XeMr-H_B6w6X04RSMW($3q*;wnvmQP{L$P!Y{Khnt z4hs?NxP`2ciwu3ncZmR*q2^nZ&(Oda6;&_jV;j=f?n4vUS|_r!*Z}8RI$+fh(F4*9 z3tHv+*+2l%HRc6Ra2Mf-A4#H!E3&vmlN1qT*mDA^3NOjHe@roxwHpE>vG#MboS=5- zdN(sorYS)I_~N$r{TAOZ3KyDHIZeCm+3L?d+1iestr3zJBsEo7hS9NkGWuP&9=!3? z;?hE|)h@(;!#r}a;bI$whkK(WeN9xH1xvZyCYjHm{pU^cmn2y%B%NcwA)zpJiZY!l zQ0X5wGTQ}RJ$m;O>PS(btmfaaQ{cG7y1G-07<*MJ0BQ$;k*TG8A`mTj$1IGY@I8?P zjJLXh9P~H~hTq@bOeBL~e3-J*JWIJYt@Fhmt&>IE_*=bNRS4V}f{7LID!I{T`s8|v zgW2E4WokJTi7L_Y$Pjvn^jhQTrlfsVza@<1MFy^WFRM1rV7G+Z`u7I_r!Vq0?CX*G zjPA{c0E(F*n%sgrwv9TL8wBAgOMF;JPlx-Pcgr0WI&=AW*l1q>)34Uo-?q&wv?3JJ zS>4(-`J+rLhq6g~W+YfAJ*s0*>l)4Y-({HFH4);b8Cd8JC>-gz1R(FK8v>Wv^@_4g9uc z1Soi$aU*jz;zSE^o?p(p@!T$0tAQ}ZlO^r1+f)PsmmxrvB$l8L-`bWGh|Z6i zD$YI{yjlqwd_f3ujrBrJI1UfqKwPon#lx5g1KPSG1y8u4#ZpQx2*eADX<1UaThTL4 zDW7%S?+kLOo{ztgCEIbG75F+Nf1g8f0jO;2yaB(m2X0ZVAsS_Le~9k}3iTjpcPpwp zKw89cjr_K>L#%IVj!rPF^}DUxmUconO-FT`LT%+!v0&S&-(bZnq&eC}{4eV}#u~N) z@N+t3WK&L34<7&KMtvy2J6}zx5as}eXJ#MPH-!{V&1?_DNO`nhUYoJB@lE%J;~a3jX2673c z6?h-@!`fx}v{bwwtLrUj8kbi5X<5rMr@;|3o8SX2z3`^9^hSvC`alCzJh41vfz{9_ zEhBUHnF5ew@!9%q=V)T$NLx!ZfUOM#nOO!uV%Yc}TGs|$J0w}seUg>NvxVoqDNX&h zwhxCfW0_a__G5V-@LFnEi-zhKQGU%4g_%Lher@o4D2IDdepi#)3JH;jhm*O;)4xC; zD(V-)C2c%?ka{vr%Y&~VerRWJd+`cD`I(0vS4Vd5)GI?7H)raO^H>W{fHi8&-O~&V zs&s#DRGKf9m#M(b77+1t4i^hvf;%pN*8uJfX&Z^T#P1?Bd0n1Pk|}#rR61IO!Gk7P7RRU+w`SSJ z#YQ_VcJ=RU+vcXppIx1y;+88_TyWzZJclgwIga#JVi57W?+Q1IOk%#Cmkw!Nv@+lo`F+njPuS%t+8#FuNQ$RDG31Ys zW-m-J1zZ2H;<7F`9F1F4v)L4(KX>Ig9|FZ4RPsMb9xIG^YzzduTyKVpoJMEa^lL}6 zVImg4l-$yTAE60ra^ovFM>t%Qdd{mDk(b@rCIYRxd^JpRfP5UfHMM=|(E6sUTXu^{ zh$KMZ$)8Ib$X_tJ*vn@q1fBw_(M@!smRf9wIFnYh(dMLGimMYp#32iu{ zeHCc1kmtdXg%3r12WT5c2j;SL%@0*?&JUGN{_<6(^>C@jxMi_6gZ}mxi$-K#%q!s3 z1WK6{S#1k-LyY`#tJS!m62cC6)zOgp)o4Bh0vWa2mAlm`3y0fqZ>Qwue zYRGB&IGrCyyyDo@%}xa{cK?Tk)-XW8g*fhxtPTM^J{{w zoCtGPp=!kd%LK0gffXWhfTfI3vstxFudPeH(n3BagxUiZCKis_c$N-i3aC|qt1Gg~ zKR+~NZDg!)h#?nlIDLDL)@Ax=)ImvrCuk&MJ++((A}z;J(lV?*NsHwyDjk6HE|^yh z6R|$bUG%ccN4|lRocP7);I|4wDo-&XuBuKt#9SioyJCHl{s}~!+++B}&pH7@;mKq- zhK!+0+Pc*%YGx44xR47K_al0tjKkaT98&(B|m_Zg^g*cLe-0xXX2!G5sNLZU&j)mp@4T}p9*g3w=Jfa z0ZK1yrX3%C5|-pCm3+eE(Go;rR4%1IV6iAv`%)JZ71-?=~6RR8Ge zPB^hcxJ|;xB|^Li5<+6$Zlg{{+=yMp0Yk$Z*VhxsuxE1tgq6iP_Z|SNl9A?trBw{! zbc!i1^(0Rl#J3 zZq{$C{4b~y8???5D?vbCJSWJyU;B999APLc9NE0Weeib~%nfVlGS}GehZP5`Q!PtM z`1p48hZs1mQ;?BVG+a&MIm3^9_n-@3*n+nC1w%X8GHj`(+fMeVN28-!tqXN);*QO9LF~X1M_*!M>y@q3#+q}-rfZ@aXg3nj5e_)LDu^d4`rW%);$>}NtJpT|~nPn@QyARi~3uo-qK6>E(79IGsRE39gxXd?ts~nhYd{{UFO7k#8 z&Tm`W2~2x!>ToDZIt+&)xjMc^I0m=iByo3#cV@1zx!JPmg*2So)&3crbJX3x8=zdW zcK(LUDEU{uGplnkPVt{a^0lYoQh?gWDOuj^Rfq(VQgr>BJQVOg15m)9{)dmc4>~PUq>{Lj-NA;djQQc*GZs<5@x=66C93{a-wr(h1g{0*V(86T!c!|auEKTF;)mtz+719~QanP^8lyQ0&E4)bj1 zY$QwV=*fB&@cEgnUzoh~l`wMM6vm!#VH{44v`pe%mf{>ov{58cPP0PA-d=uBBb7+$ zs$C$Jy$)5ark#BxdK5`IrkYbM=~tLtUkw;{RT>sexVVx{X`8ofjWsC1Ez&-K{xe9& zym4AmxnC7yn_(u!4QW_RBW=vo!n#bxzKmIV#pZcz3MXl|w-pc5n1g&&4SZB@G1E0M zL2^ZfR&dhlK2!gG`&jpkbx+)sV_qDxx_zTJDP_Jk`mJ9(r`0VB5lBY8^Zvvx?+3uI zoL_azOr(44pMIb_D;bWO3R%B<=6{n{4gJ3ta7Gwr(nTZy+$;94Lra-)NCG~#7 zN%=(F+HfhOel-uQWbBYxW>EZcaWt+gRR>uv zL`NUMdv*m-T-9-snC%B>)J`w-Mq0xAI`Vwb-0p;zw%+Xuz_2TmXwBBC-+n2&#Z*yP zdch5nleANfcW>;|{z{6`8LW!ecnR{(e+JXLKG7BI8L7<|l?Q5fivlY2H3rNr=JRm? zRsAW%tfBorsXRxCA|_ylAjn4>8y%Z9xUj~ zFZxU`$<&$N^e@*xCJ$^dv$BVz&)Rc5Lc+soP-km>nJ%Es7NAF;O7>OUqsHr~bNFO% z`?^slmBg3{2HFhZFRxRodI1=JbO6}$*!nw@3-k2a$C=M31GNBF&+IH4HcHP zA~sVlDDiG|-@=G_u~1ynmG1kKC5#GweBC8hg*m9o`uE0k{lS6iLds30fD}s5_W~S+ zLDlZB_sQED3fUiuDDq_w2idhN{qT-K=H7v3Zm*??$Wc{7jVC-ki!s1q-CyX#?S&3} z%@vE>)8(ZqjIHVXkkdA+bDS3@-jW;{>-PsZ=4fP-7)0D_h?~lS=H!dPfIFSGQp8Eh zM*NUs9K90hf3xQ>!@$c*QQaRmgG$XqjYZd!*o|1HUnz2^Z0Jk*);@m^4Jv~^u-Dh` zL#R+quS)i=PaP@jJT}-dUY=e#;ORAoM-0OSXgwM0WVoDztd9&C*(M-u6hzVlsJbEw z6~ynuXk_2kFzjo3UJ)Q_(s%!BTqFdd>j#pt*$gHaT88}F9}7dOPyw2gf2)LMN-iOexg1B4RqgQ}y`x0H%q_=`X=R&o))pZEUN<5F|x)tFntqRRObz+k(Nw{2S9FbqGwx9Zm@hBN4I=^npPati`^HeHeI(6AvTlc2d$-KZ-tGV)t*qYYf zWXY`Kl8>HU-bGWv1ad1tu21xE>eya}`q_%vfVyaJ0aL7QZd$C{&8`(@$BStSpiNT%`usiaiA_o0K|g))%IV6F%OG33(K-5FKc5 zyj;wVTR_#gah3h57IeUlb-PfJ-PwMRhd%Yyk0b=sc$}-FM(ZVLAeJGiSzp#H1c{fy z6odm~9GWqKuk0s135JGeQ{-Vsw;~z|bO?-qZ z+`(oKxVGB(`yi`l2L5D2D*KTQvoQcT^PPWRdg#Hfu3w~OwR$QJ+HIYdyPBPW!7&bM z4N!kKQ`1~PEa}eAZ;59w@5UjBi9ym^HojoC4y9wkB&Sgl6X^RjU}7=QXx(F|aWb8# z@$L;)TCFb9d;db1xBL-rFaqRb!pM!O(K34|0`@}^!u1yWui{))KmLH6YBdjl`gC@I zOoBa=f_Sd^=PFen_pGXEJ-WP_%grSKvAv-g9xTb++ddrcGZDnd!Vl&Q~YeI zu83H;%r&*q0Yr}K%oQrRv6=S*Ysl8O)sC97)9Q<<)zsdQz!;pHDNz%q?*BaEqPsa* zzgfN&vDvrSnI6V%lN-E1UkHcg`!p1*;P1iBmctr44^b(uQmRM;kiuIOLZIg5tksoc5;H zgJ74MoW>B_39Oh;Xs-bj*_CU21nk$9Zw33>DWeX)HSIvYqm)y#8tSV?;(xbu>1gO- z3UNXG)8Rb_iiL;r+#Be6{S6xtq#_w{X4yV^J~v@hbChTacML)S?N=Zbgf2e491Ogc z5vlZ~9vy$jEuIxSMUh>SN6{go;fvs1wp!5sx4?m6n~XEkF&<4EOQBadZ^|vfQN7B)XXHFX=r=19`LuMF1!s~ zo~k#zp@ng-g%7~t&HE9H6B_}Cb@Vy8KOIqpD-ppCl$k=1TbghYN8;TbU(w-p&8zqH z*C?NJSNX|bEp`Ini%x1lb)vzNb|Y$E5?2&nwfsXQP~_=jDgG%@C2KiKS|Qnp?S*(_b8loZ>QA{gay4q}u7?320qm{Y1%PWAUiKh^L{I#@ zSgJWlNaWj_@Xv&>xwA+_`1|=6`4;lSuI`l#trrdNxa<-3!NRncCOY;NUj0x|{rNpa ztReXw$5g$p%$q_z5V>k5dQQ66(I06wJ1%F4HOiO6#d0!{nQo}RPRfT<&t-9l=E^;# z)oq^z;SvBxDi2T(QsDWN2Gg==xbu_Q|^Kz*|(wwpw>)hA#hnzqhfC$LLMBVS z{UBgZ^~FJe0cB!mZxPQYaMMcFgeHLh-)YOgQ$^rZbV34jP)3&jU<6(N^k4^U$lu*P z{a0a8F%_uiy6d3VwQJ<7_|07)tPTWrH=wk0Y}OG*1{!f(ZL8LMp&z%uis z=Evz+PWTUY@7K>na^ex0WP>=eCnPfuTaypsj@WIavEmCxkGXg9PlGeVnGq-@=b-Db z>sVOyX$FaIs~<-X2mpR=K{GCXXtkxlld3bfCQVw+YIbdT5GFI^9-V#ooLnyE?LD_> zv=UeP#YDN~7_FwvqO;X(4$H&#~>PPq`@0~W#%&| zD}EQ_nFePT2rKazdRpn_CP>g%vJJLbppg4mv>i;|(vfw60sgg^kZ~! zulyS^(k&A18KQli8@hIW1lvS1w|jQ82LOExQah-_Hvn`iYtRm;0$~d`YtBG|@Rd~2 zirkL~DV;-cHzrfJrBc*@ORkvj%TfEDd{oC3tTKIbFE#!)#wq-aA^&zO9bCVYaM8-r zurEO=R@tySqnKU)V!g3j4%eQ?MQ{67pT(2Jx~`RTZbnkD?sfE_=Zgq&`7q^3sZHnQ zGVgD87NFnIwEdzh=@1HBV3XPTv*!m~y9bL1?}&`&4`fD6uO|8NMa#=8fpm0>ZRQxw`ZyfAMrl34p>}_@}c@Ntl@>wNs-u$~JO-mOy+9 zIf>Nau%M${%T4MEJfzAnj0UrmGWGzj+`?NUIgsb|H_qj`4o40F_}P#P;r z9`YR;a&6v^*3_q49Ww>Z5U`9iUUP7xR8?WUMQ5MJjT{!`4`u+_0m`^SMruxHJ}KBW zn(H3RcJ{(0de-eSC|By7Wos$wXm2r}{dz>nP}mCHo3fR$vs?P1?b~}Xqo|kt0yrF# z8A^emms&a!m^>1-!*t8@p$oEg#F5ay@BUt8KG(JQuCsDqhzqi^v{q8i<(nIg$#R~dILNIF;ZTOFBdqn1v{CUky={$3(c7-}bVzFwL? zqc{m!4mz?^o}5A5swMgrXI;ge0$9*fW_9X4&(ke)+i@#d0gmEScBCkS!7)UN>vIlO zA-8KURg84Kpk>Yc6&}ZOCiWn5`b;}mogK8U5n9y!2;VIUNxjEI!&okPjD zRg6V&3eA!6W7!NY3xAY@7W@U2Jvz2*xHmdySE%wImvb?;74;l7r01he0DwScSD<-t zM|^ZW)9VaSfNR7V-hj6WK^9nAIY03Sv#IWBC?~RIvnmsNL4J+Ie>vs+< z1-H9|b7`|fEx&ia>{S`0Q`NVNy71%u;A9Qw{QZtQu+7h+OIk15pW-?N|9tcU5r=n zPEp^Qs)uI|zCX2Qhv@+6spKN0w(R6y=l>8K(?Yg1Bo-hFh0bfEOVSgLU@c2`S_fSN ziKc6Aj{r{e9&P(Th87hdLimYBA9Z2i+r6B%;0hPggoFdTME=LM4^Ykg#96JzChetU z0iwB7-8!w2B}m}iI_88U9R6OCLX9&X?gdkP8=6wlB8ir;g2ugPnK2`gb8{a+xL!17 z=m8G7plvc$xpS7GCyc$%13xExG}N4ZVj)ikr*j@X?qf;v8#_&PsG9jMy=cyF8`70$ z)JDTGTRvAl6YeUh7;qe13#tAK_MS>Om&AfA_B3UK;N()VN%x#yWy&+Ti_KYNI$wli zEKC2RoO29!P5mhu($A(YY5y?v_aR?~uTJ~r#+tQXm=B${nhdm>Rxr|YI!HZ+sHbJC z-uU#Q{I}%&o$x(kB4JO*&nwa6btm^d;>V8pIoYl-u7z7@8~_9(4Zz5)jg&!aTL0$S zZ7Sn4H5eKp`;XHTS5)z6ukhfpMHhTKw&JGvm>FcM~~9NdJz42_n_!vG<5a@9%OqEy^%a`2s|nxF_QRq=!-lvF@EQ z>(kcP)GGzVu*+ zp+~Olf(o4CbI`i98@4JFmcp0!`&t&o+rlQ1CoWT}lUTk}Ronr*o_Dl}x+;gdVhynq zJhMCEhDoaIpsM1Fi8?;yx4qdThPfk%CWHStmT+(K7I~s~_IQT}xw|{wlCb&tNmv8$ z0j_+`2hZM39nyun2Oix+2|ONK?i>uO-LCFGAGb4^9KQ-1yFJ4fYNx4k&PQVT31YR# zy1WBTYC4 z+5Q#L-9?}G&j75~7^i*#O)S9K3r{~c2xx<7->KZ%urJ((Zc<;3J6dF~ihPM}dXX`B zAmh3%X5D*{JjdI?7U=K1Nm&Z`8}Siu2>OB6NcHu44T|+?m%~i}*STDj=Uw=$v-zWo zHJvn$uG7P?Ef+K9QU?Ficw=0x+cLxroJEJ=%44nNbWL1FHkg9>uS>vRY#(XogPoPo zUxlqfv6*>mj+%7%qA8F+=Z|GKld+O|K^mLy9arM>U~g$h!Nb)pyC5d_yq4fB=qVwC zC(hPxRt&yj>!1s_Z@m?T3GzD?YuUbCP5bW9m*{*mg^BF^)G&Is5c@lNG%qPTg^*%V z<_I$SkDoldMziO&%u#@-&QGlUOl$rq)Nhl7eZ|hE@aC2;%Q4ha!(kZL5%{u?uTT_} zp@(%DDzSY>aT_34OKn!aW-Ioz?B{KBC!JRy;HN*GjHPQ+hjWzOZfA9NKbK>bgH48U zE5TjVU%ydqBb#sFTVxO^5VkFE1?(|wcnj}qYKyN0$|YA`|rCm-$^i zd@#9F`;7o2@%t##h6b_lINXcjH1uW&A=%mIuQ;Xdh)Nsg*9m8aprO%ThkMkb`ctva z8swQaB>Eb_j>&-VFucV|7>HHFsUdVJzD;|u28uXPlNC9NEmnM^gs6#!V$MULR$Pr1 zgq8>GiLUL8ptIwKH>SXGb-s^(-8KsX_@<~N644_My?pj~VOK~vIVFGm>-!Y)@sf*= z^k{6~6=?C&D^yvG08qwxo_4kFmFG8}TBJTn?X9a$mkxj~{rU}?f>5Gqo->M!1+a(B zK`_%eMV7$$BkRJ^lWbOqr5dTkYrKl91_c@ThE@vfEm>^gDL594P?+Up>1-z6M_#|U zgU1iNj;46`nHCF6CX{;$^Nv>oE=DSpFOZ0&z(%6=xJV7u!eCL zFA9%>_4i1m9uLSfnTo57t(Hp4_Z6gW`Jgd*{b09gy_lZc=b>etq3Q`k%JY3_3?B9fetrJ( zpQp;d%se!ti+dCc{SFQQMqvcn3v>HPiiPNMG|eR-3fGh(>kP9LD`8-K#?T<72B$$$ zjZ(mom9rm_hV7VT>3%jV$9{2*m^gygi6^5eeWAB26Dp$;fqs0_OfvU4A2#BgoXNYp z)X<@~n0T4E-E8mbMt~d6q6Y3Q*LdYzWN?E_SV!xw|5>386Y$qjy|32kLiZoL==wac z!Fmvc9p552F*XMflEFmtYsWOOi~%MW_iaF4I+QX_As$MG9kGrDy0cj%r$hmBT{+`l z?au3SCzA2v?>VG|Dk5z|$YJNIp9)gbadHOGM}x2;7Vh5yhn30BRP_yrT{Wx{&G%tz z>wP6-J`Jc!Zjnji*V&vOy6gDSQp54nzgQftmazn(3*3ZOVcaDx=M9{u*5$Z+%-{f- zLmeZaWnn&S7oT8^lJo1R&G3G?`#_vTpq zLRijCb4F9nY1TwOK`H|zgceA_@zDWfYMX5-v}H!HlK9>5$dV3RM)8u-!Ev&X6pV2C z)M)dwM7!1!+nlPv4_N5^c_e)=@(|#E81XZh)N^c_v?vPt*#dbe1PL%oO5~VZ1GoB) zGD5X06UeCk=o3!6&a6c`+9f#~Hh>BVA)3qIo$djTKimc6=kiU6Z)GIByK$_d^$O7R=A^KlWO*qrK;7ye4Suwk7fB1pBacf%%6zhQsk%w1mJ z8w3x?Zcs^yJ-_rw!VObXYo`UMkyE||)0vTa_l8vlxz_zfFtiV#r-+0gOfc3ECWYhx zW0wf?l=BB2F#z5KVu~w+sK?Gj6)kOP^I*aX{ETQN}eZaMornN z?L%ZNOZ<)F_z4ol@%m|U$#CyUh!!Bo!wC^2Gw>W^lRlbF{>^-xx8?=#Ye!OGq^2*? z*F@_S#bnk3lP}#aV3$1y|L%{IYaJ>?X>(ZVE5mW$WHQd;E1XZ?3!D_qNFq1XN#z6X zhr1pDuHgNPmI4C1{vzg=sBQ=!5$_Wrh^sr7Act(OW5kn~cS2Et*wXdQv2}e!UGooh zy369T1ajXW3%|d&ODA2(RG3}~OfLE(9Jd>||l>QaqhxzY? zWGq<6V=GRl;%P{)HkLcuR^qj@APL#FPDUx&M4BZb7^EDC0Ex}%Orsyh^<8kxrn|QL z&u$sK7ws@`qqbQyN^~HnIB#;^?JHkRv!)FV zI!&;~LbaG8p4xRl?c~8yU)NEVIVN{VIrC}CEkG4qB}g)e{k^JBO=$Z&=9$W*OlIe{ zq6Gr{2%5y#^|%0~$fiiZvtDF-`?!`&J?Ph=v`_Lq)E!)YToIed!h`ZSRQL2Bon$1D zLw>OV_KYfqTSpt}k2#ZSF&oTo|F8Ialv3l)2O4;vlBO=kp~>*Joo?pq_()XxMU97nkRC+!4nmgDF4->%&i`ZU9Kth=wrw5Twr$%s zE4FR(k8RtwE4H0VQn77Yr}o+R_D*j#zV7&q1|YAvh|wgj3u}Ylb9+_JYle0ODeT86!|5$tP=vW_foA5!}Hw-zivlr zL=hGNls1?foL7(r#G%GPBl39RZh4d{bh7tMRi&dj;mm2rNxq%3;VpY7>dM$)SwEgb za|YM_sEgugF9t>(2sy+ROz2_4tjU$#o@%*MgCucB5LsgJ8m&{Foe7iW!7;>)gK(Gr z; zInC^NXVZkmQu4SECVd4}@9@F?pjpF|45=k}$sF#8$k<>8N@e01!q*n+Um-QEIQm15xd|8q`igM8tmr@I1kxjQ@O%==YKhhtvC~35#9> zfOVX|0^~;!1<=YQ4Xj%levJy?EolY04(X#+t`-4tJgb@=eTxg_c?Z@ha)R5{MfJJ1 zOXunn+S47;*>bg7j6}f#s;BXpP9;iC-#X^IG8%aN>V?Udcy0&)8!2C{3YzH>*F$VNNz zvx^5POv`gcY+D0eCfu5dDyR0y*KBEnhl}*6MeU4N_qw9}tIqe>%r6th=WpsZ^w#uL z#n0_vIFPK%;*onfO1nF}?Cr+@@d0HNGPzNb{k;%aJ3uVBRHA6q!)sKP&^F)zZHVYu znqg0*0v@uhQ-)~ESZ#*utK_Fw8?Z>;=jVkL#N<_e>=4fVMnP|r8a|=|eS)@$OIl-! zhqt>FZLsXlxP{{k{5^tl`=PH?;VIbI5@KT9^a$ucb3&egX+p~Q8nOV~g7mtAnh5f{ z!L_P_VJR~a?(w5GpqC6F3hrHKY#%0tvPYo7hQsI~IxX61CSYh`l};FhfG?_1Ll)vj z7->NvIp$Ko6MCKw!tC=^<&pV^EU!B`rG5QMA0utr-k?*lQ4aR`Sq%TQ9H%@<-EIGd zk3Qyp1E7pBefhP0WN!ktLHJ?@d8+ueWr1p!pTH2YiOi`>l-R+@WGW7JW1WK8!j2-p--+mV|)b)2`lQZT;qJa*72iMiXeaGL>SU(|YSr+{Vm>^x6r> z`w`oGz;yWp;)x_oEit;a{X}_^8Gi&%JiP%@Sn{=3Ti#Fun>Yb5(Z`=XL(xSfb&A!& zp@ya18anJk5^s?Rg3E(^=<{;nkl&Hal1#k55_L$q4CMZWQuO3}cQ{*#iroRN;-gEN zyx_CN=}f}>MjEFW_a(9vy(o@?nRK}vOIwFNBQMWbB>6XrBCl#@`tA|-O!18wFedA; z8pF7pIUMPi>&OVS<=OACG{OxtH2)Jv7HzF?rNL<6ZNL$X&gsdh6CbMy1$>_XP@NZ} zFlP3qF0RgIMt1)>{RhFu%)y*qe??A##Kp-3!}$Nn5KRAXvG7mjaM}2$a?~08L&B7q zplEg@<11R2PPy|X>+&c&D_q<`YVC7doBg3&u-h~M%mvkvW~s>aOv_I@g41Di%`srW zDsfYnFopf3JdsR=IBQeQIna&=yDL~8-93x&hH^ra(t9#7-DZctHowXn}azuUmtMD||-u_BXM zBncV*+Ewl!ppug+2@R|w;>#(vji&-N3J#DnDYkM9U{}JdCR`gJv9fW(cYCtH>`LbOd3Fgg003zm$QyN!f?$DkcK~O(Aw-* zzjKg;1F#+P)cer&d-n@rIJ1uFAz|XB^xG=PjEBxB6y?`|AQxbmyTCCKv+22#@}081 zVCEyYdd@_ja6LUJg_9yF0?}!2g z>}Jkip??r09h{Bu{asPQQ<%k=W2`A!?t6OdGgl8GoNjg^ zhITPyX16`@cWJsoFL=+iba&Viii(|pO$ggcVbz+l})nhH{1=t-u|L_nz%6DD^OO zQD#qRP~B`43f%K})tF$zJ4RagH@>@HDoj^bANtMoYr!&6(st3Kzij8n32TO*fs)&B zD8QF_HhQ9>BEu$duX}NT2+LO`W@@6P9r^4HEKRXGJeae`)f4b9da4C3_tpsb{3SP# zVPe`dOOR?3Xve;N*ev*9%|n2Xm)bmWPlmZzWI$K;!^W2_?S}sG?alFZbfPbHFzelo7qWfE~ zk3v2!Q&e!y9MRO7F{ItW9-sSV$}*@_RJd-9KE>_;2faK<3!LJW~pw^xGK*O z4p)Ddbk7{!DA$P<=jgAydzo1BzVO%J%hsC>04M{fYb|gI56X2S#cBhu2xf zNh;3Z905-M4OxNQ0VkYzRUm&Um^LDS zI6mU4;#axF6teOiO9Q~(bFhEwBMBf;&TPPjYlDSzOK=YX2`|4fQGOZefi+3sJT5kN z8q?W$1$HkoOZef&KOqFn#^HRlZy3&b(9-;SG_Y$>>;ECHyV?XIq6_rw>Z)%XKd56f=r*g%XWh|+{H2SA-X`e4{L>oiHQphIq93y2DUoR$x3ws zs9NcXqB=qU?E1yf+@RL-{2Tm;YU+f3LzLhXTVFsa6+3MyG~l zd-a*24Sq7@C}!8H%V&7~clOkwx`M9TXcOG$k_)yCHRiAM z0(GTc-(AA>jOKPjIJo?69Gl?#tqeZ6n<72hQ0qCUZk57qwH@eoJZqyDwv^f1LaP=w zimc^4e&KeYJz;tEa41d$yJj8+m!`kp~Y}ZlIj)YvG3crDa`k ze%`ZsIq?T<%yPM3#F%i7bGeJ-N5u@~<96OAIYmnTT_@&cC)(z$xzaWJJ*$T6TU3Ca zPlX2qLMueNws@rw#Zmxsb4nK+aTR5{hN@J3& zeLixkfDh#}B!cfz)&IG5?fc9a|D)@F9`$b=D`s3jy*ysP@1UZJ3*raZ4zOjyZc zV7AUafzv(#--oLUt_~Pq#+QfPb0eSBG5x$z4e5WEBuSS)MdL?%SbsNkN)4&P(&@zs zJ2ZMj?UYeN8H0`>&8yoI02mS8$~fvH?EQFlOVTUtAE6BUUZzpfM**9@*mCbs(F*e& z)O|JVgCt-I;Hxlj)yBz=6?p6%*6*#zGCKrqq+7Ql@L!6(hA9L&CQMk7HBw5;<&en6 zoKnLJYp>YLB)zwWG;bW6HT1rI(p$)=y$&I)IeTn4A;3v>GRKXRo9`4A;32?xfLB&!tVimCw~omLI7GnnsqnE6uE<3F$?#KNVQG?lD`GGt z{N*@xu&9c>j57=GL4R^7Rl+97pFGyd`x~O&4r(&{B$-&u7^h%P^P#8Y|+%=li0|DIadA&*@W2iR1Y{kc3Q0*%YApO!Dn%((_4uSPR>^#Iz ziT&8|RLIGw3XkJ!&i@kk6?K>Q6`G#~`3`rVXJIK((W<^S6zvL#^0K)tI5GB6*@#ho zG@N(-LboYhT8+o|uvjf-bRnh}^rOYWi>i|#W;=!v)-`{k;9|}cqm&9$Z<56%lDj5c z1P#V4kfn$mAi8sntf0ivlpA3us${%efyBRsR-~ol3HVb|O>}opm8&&%K~4mFUHIu* z*oXE3suck9HG6E*-BVP^QZ9nIDxUWw?o5PW}g zg<-P*Y>WBXY$I>5JowXy&o1pTV;U(nzS%rdc7;#^Z%2909WL>wln<$9V#q~#fsFtS zAXzd9h<*+9q|Px~92JE+TdXsSJ5`nHD7OoOT@Ne?Ev?2`WQ{N`7tA~of1VuHct+vd zoBgX_w@c_Hwx?vQmA zmgw(SWRG@MyZ(&qF9dy-+h0Wb_a{uZjIVv0vQ20yL6-V)?Fi<}roRGGV(Lk_q3gJG+K8AJQ&xmeWJxnz{5oqn(Q$1lGu6!CW$|(GI{{d)m}PqB@=M3}JIA6GV?5Ui-(;k$QzG;$Xg-&HGEmw5VqKz4)@ zx3h9%Iz+MIt@=q5tO_Fxt1PP|Q?GF;`7KHd8yeeWs}l(0j&M$6)*AP;fvhQ6opOvF zLH<;L{4tqsI2t=tH(#8nN+{dQJzdC$=yR3@hh_ODdyG@IZlgTpB8L@RCP_(sH~RGB z0a1uT)7Hb?Cnz|TG8~estV#esKnC?LU6jHSp9j}E@b^#(iwZ2SMI|KZG#)S(1^FUB zU~nF>r=M`A-0ChA?HUv?brAX>$;?;L1nVA(xA#7;X1mgpv!|ibcktv%5(N3uerekX z{$|LZk~1vgG1)-+S2vr!evk^>1>S;qFmxV#W;R3EgF}}11~4#N26kEv_+G;iNy&>q zmoslH#w3QsciN0`Rp5Z;zYr^oRA8H4i@cBM$(=Izvq+*O9*0V7hR$3bSH9C!;UwY0ksx33)a?5Nfjrh`F-k-6f~;RT&23>xaAGD{3@R$+m9F#ydNPuQp~eYNW7 zinisfxL$2ryS5In=Ft0(J}IELK@S?cYt}ql+Pw}R-Ov^UrYC{maLd(XZ?U*GAIyL_ zFHU4;OAM+5k)?2Y{iOyF9jZpsql+GhHO{6|$ahms{Y3l$2sNZ?zDrB0CCMftJ-WtH zV)B=ov_nmi7W+1;uI;FRl)~(VR)c!+Y?aBe08dXU>W}9@b6~6Yc{yjZ+|TdBrU$)=?lH#%%w>^;m)b@l;!c|IYfksCIOk{Y zFW2wWV`@Gu`L99q? z(a)X_9#31eaGLXRQKs6BHKp6lUc|wrI(a&4;GK~fk#AxN8CSDOpEeueP5(A~zhgyr z|I1N6qOhPuF^jL$GamdYzk-@0Lhni08#a;EIV>w|mzFBj0EMCq?ai)exq zz@IczFn$d+lLX3!PYed@MvI!NI6{AgDl$^J**+uvzP<3jdV0`A&yI5vFPNpDk%AMW zR?g0ZIM|IaK2U^CQTatBLZH0~2JhhhzR<6#p}hkiI^0YK$}fzEKuN6GxbFvRIL_TB{cY*#R~y+_hR zI}Wa-2Su`6%dm`J;tpKk<)Od&_U?l2+|XZ@+g>3@eCS9sN+;o)8kZwoIFZCBqxYGO zeINF&4-jws-&{Rj&Vyhh{1~UoJ{!9F5f|+ke_2EL3_j(*5dM6BZ7E`6Q6^%B0UFJ0 z7gv%FWQRdgEv|p_V43ZFb)0LzGf-$L#r)tKX5^^>n*~0Ol-}}0m@v+cZS;NaJzs6b z3x3_-e{V4&6884_04Cr^^##>}HEJdVJPmy8p&N$qsO`%b6cqF{6Qv+E!rjAIY&qUPFiHMRSrJ z9LH5l;xfgN^JyR}N}GW8sSaQi=${;sgYzInH+U5R5MiO45-;J&Wg{i=Dl(VN4B|6R z55%2MOzQ3A?{p(nB2-|ebY^5kR4`_CR?c)MXCi8VrjEk~2b%v){p}`XSAhJ~J-v(( zoYgs-)&`r@rrQVyR+QX^7@0CE^_cy_kAOY`xlCd%f{!JwZ1~B0?hW4a%%}K`@g+OO zcsAG9sPFP=7w92^BF;fFvh(P{sPEcq^Vj|I&chClLh(i6o~P-yn`E%RkHS-*aFk!% zQS%1i`KcO9@H{+TYkVTMuN*snE3ZpI$RzI_Sg>^&AwJ7_tk~&;qEx48Si5pQjRmjn zv0ieJ^L=7Ppu3n0KGJ`L`GEQOmLJLzVV@pP?h9 zy##uWwv0BXH;kmiaN=XB3dd3V50|>d_6Fs3uR#T$p4Q2o$vF@wk^Z=zeK~%gom^cV+S7tP`Fa;h zPTl0xv81+1ZBMHEJKot&_`DNwu+k^hW4S(;%RFdy(ie5b9&mxKa*qnu%zYFY5a0B1oovX;$k z1u0WMkxtI{o0sql<&@Td5*-SJ)cPQaG+AKj=VmuzWf4^_8Lb&&9iozp))?fHcgk@W ze)={Ud0K(}58x#+0=3-ge-&p2aXN;?(qLNiD+s-tQ)d@DQb70aQaM?0E;?>y`d{DZlQQ8oSmmubk?WQigR2 zblC-)@dm>#0T&153WCtIvubCob!Cj4qUcR@ATL< ziqou%pE1!8!M-)N3yq6O&V5yDES7yU`x(6g5>NsTjelO9o-XgX3+KNg9n5(!_Z^u= zcBW6er=S?6LeNv38m98;z*z(q7rc2`uxo!YiPZ&;RuDAZBN1U_fro_yM8+Oo&ogGM z@*R2XW{>}5PnnlT_^-2to^scgsjRiS1(~4WjklMEYzmx5*S8sU!#WyQ$nlF7jr2lv zpprl?m=wMYQW|A8n_Z=80gVI@gnFZe7#ryv`C)3dU&rCG-BFk&F?})&Z%sHFYu{y! zx)rm_V9-`!Bp3fFUjMrW;2(lzg#WERW`(c=^}$T5$Rc=vo0a6Ssx3dVvZT>(LehkH zdA#$-6+(afcai~u#}Y5-fp0c1?4vR1EOCaqdBsk+`ER<(Q;f5 zbB7I4tyAL>7NqCJ0X3b>RkHotNIF}8E%kIugJu(bVmct85Q3H4L2j{76X!rP)Zb{d z^b+sIH*^Pj`#EYdf?&|ekVK)_%%eyhugr=zKiH>USyv+C@IyCKHONL~ez>&tK*MyMkCY6y`fAmywJU8Zz8YqywW0*1+w4)cR)XOhY1vD|2Z zxN@_IOdYgit%he~^zN<;?(W6XB&Boq%1OI8YLA9S@TNFp@MQl);wiSm=@3UKz}w!7 zRaF;lP3JIxS%D$aMPm?|Ez3AH=kjC*&pzbn{%-yZcPsH=#^QKKxW_~Mj<${&ev$Cl zE&4tbyKq^ygE=0t{oXg&Rl`pG-vcG6Ajl%(8@Mb z--#J1KB0}vX_;sVSxG5asE$Zhu@dQ&_Ia4Qot3z>V5aYgq19zuC9htLBazLO*zZ zmRq}hP_7J0P^o}~;6TiFj@#}5K7vhcv()2Hgmy#Mb7M>LA?d`2C<)zfiN7`_fZocl z7WJL(U6}&F`NIj#!5LyFwYo9Bc5@#ER8D2BMqAu=m<&eT?y3Lx*e;qk$AG7!jO~~U zI$GNDWzE`^JGB}3jt~ZVu_6q`s5?X<|g+UyRjx>;o$RUEDQ#ZY};R&F?;^IX~~cx!F6H%_yXmec02WxRDu z`wc}>fKX3rF=j+2@j~h%;+SyWuX4N1SjA{6g{_d#7F`t-YZVMRlnnbi?N@d>g&9Qb zNE_odk^BAe+(nbGWfPq)G^DXi&}>SCdVgH3Zv~zoCWcc$O*%3OhN^SU=o_@gJw6hK z3ArlZNqJlXD+0W*B~c|<>jJJLfNO}e%NIU7_c;$w9x(6Ce(d)vL*or_lhl@ z_=bHM&f0|mRS(}mVz3zk$tK$EPMmD&sU}+)N%N8nH&WsX8#b$_83a>g#%0djS{5zzRJ;vffeK|gv9A3&$@-syPQADB3tuguDaHy` z-h=w0@~@dqCmpN#g-Y_33h5X^K-u6yUPincuDsbFPJ9{UNHfN-O_slMnU-ayiC7xi zcAbB7zX-%#B#KmWtWdZ#@~g`lUH+Pkc>Y;zW2io%Y*VJH+)GMpm=W?d)rKcBXIFFq zRMAKTP_>2iYmmgxJl^~Xh7hq6RUjO)KGA1&uHr75H8r$~jI2GMz3>QHi<6?{sNx`J zoDFY&yu?5-(sRzhZJ#A%Q`i9Ni2%fLRI*Z zqAeTV`2}sLII(WaHa3Q@AZcf=*{j_IkYNj&mMo|GBDP|3@VmR+k38zSGqsvQL{E+c zu3fdZ;#{}NL+dGTH4wOtWbrOx!OHjSy<6AL9p~54vpvZ3_ZmQ~mU#@jF`T1<74T9p zQJ=^a090r3XRsElLUP+(Y&U?nIb>X>i|dIg#{4jyJexVc*fr>I_il}aC$WM7Y%qXA z{N~_=z=T;uxxmKL9kFtRS)wPF+>9+mm_nvqTaNScR~Eexk&M{P37$jK4%!#Mi&DS~ z38jju;24XDB!r!>l>*rkOH7B$>Kv z%nC5R_EbDMqnG)&dG_g!6!x_{gj5}Ns(~MvRf=us0~q=?zf6v2)VZURJR6++l;RQh zxz^it-(Z_FJ&SvgulR3^k?1X-nwPA|*Hb78qxyMu^e_9&c>?D` zxhzp07h=p*7gK(}!aGj1t_c!<6qwcu2TJO+J?JpdD*ut#LTW_|uj1A&e5@Qnh5uet z)BX-81Y|1!K94Abg1uITy@5vzPT0Pmv8&X51qT)NlmiH%NraQ1zB~#^O$YYP0GgOG zj`WinKx5xDS=zMv0fEg_g5qj@xwXtSw@XkH*DtJTkZ;(ZZ`>F`_l$SHv=;rDEQk+2 zqO+6D_pKb|eE4tRvBT&D5Fp7|yUeY}$PEq7KBC-FBUwB}T=!xJlt@!o6HsZfR4I(w2!+i9W-L!f~v@ z1en372}aX_lfa_nuCj9NogxF&63!>Tr|3YTAaFHGm0Td_2d%Svw*D;N$1BLa_S%GM z113}woVn@{fd=AGAlMOzP6xTPQ*>Q$3iBuMFxAA#kVHVc4hx25_@>meGsI;U3TkkE z|C`XTXQFqs4O?8?#O7EpDts?1h|D`MQLHyDu7ylQ$HJIs7J_v!;_TNDTb?|3W#Stq05iI=YtiS6QmXa@`(saZt|tztzG!LuoP0B_@LF%1{! zr}}2jz_h;Us2gUlfL^EfHtcXhfWw2ONW^` z2kx)t*ts)~K{wcy2iX^&W+7c(qYThl+Xoq$l3hV$ZD5Ipydd*;|Yd&=sl1qE10(0V{=0TcfpQ`RF% zx;yF5KAVLX*wutx&mAfwp{%uX{;|){p={xo#m?4MdOnghnLoU|fK_cnu8^to_CJ3- zmD%)m9NP7R+1M>A+ppnfAfFeUBjBULt@PdhmRsm+{Hg;3Rs zu^`uB%o77UNH!M@0x0I({S8Z?dSP&w-z>_jpB9>i0^D4PAa2*e$ z`wBz0bHs)-nDl5A^4$Ln3|3kdE&#aJ*wv&-ow49{8}Hg<3N!!yGpl7S6vxsMU2?bX zGfh;8i=BtrDxx|vb(2&s52;bmCD?0gFYWsVp=#xeG*%K+0!AzhgSkQv{;^t~n`qgj z+2#T%EjK8W!0R9wS_oZtKKor~Z!1lS&((=&1Y0a1oCgqnNogyo)g#xC>aRFx*WFRd zsG;|0K;c}q4EtUG7D_5$y*}y-VLStn>eF<0JMlGMjKLB?9uJx4je>vK7#-P$CL7`S zim)kXK$ORd0=US+FzWkv{qb}*C_D;Z7_Atn;wy`{=w6JyyU2eR zRh?G$!0_cC88#XLaYK$RcpU(%)It7 z^6dGn>GdLqI5iQuaVf+L2;>;~sG!Tv!;S$ICc!@7nae1=E=S|C%Ka*UO<#<2&v_1f z51GhLKtas?x+F^d)&!91$Q^F#7!M4KatfI}Awu{^gmE1fg7+d>qu);2F!Oj#v!VBn z(};A;8zhp|-^Pl)W$5_f2K05f!f_?=An0<%4c989G*@q%J+a6Y@sTW-Lt&kT@E@Lj zzu3G;%!5|0j219OvImPoXkVRA9S{7DFVJE%s(*X^FBw>wmgl($CY)#0KuA9XF}$2? zao|E&`ID#XgRQO~U?IOvjQ=j$nE!)vW#M4{Z&I;UOUvQ#U%P9*fe{>14UVIY)Yc^5 zn;gfQFa)dr6d0(s@y2jPX&eF})cwxyC~=t-?KY3#Sm0vvypgK<-m0Qmhi$)hg{I`C zIn_}`dw0qlNdMX3WU^?#G%`xgqY1&D<{1tdmYbqVPU44mbu|9g3Iu>^y=CdCnRM(| zk0!tsvGx6>Va-|bkI#-$9~wA=r=mkH+hP_zJa2@2g3lb6n9Mnf_yQa|$BVh0a<*Mx zW5$&d+wxLT5U0Xb>G`|*7Q(86s->T1O)!1e;!L0Yw|mo3WPbSB1jkD;S(ynY{1w@+ z+Vid%ju=wK`8oRvSZ$=8PIJbO4=1@&|6Kr|w8Q+u0;){KbV|K^sm$`hTAuP>!D2MS z=*>oO&`K3Sd9Fy-E9`K*l!r~YFAudB?MC|C%!Q7p0CoNV<RKYfBH%a$&y`|h#eP2IP@`M8YpIq^L38{^ORvp-p zcwZ2S2PvU_qKAB)Xw0(8hfH0@9dPb%%hhw|i6sMX7bFMA$Pa5G z$DIEtL{9rXr6wt}=-OajgRD*rK!bqv0WYefHTG_d%QmSdHvX=5)>y;sKm_u9R!+o&s#B+t7wt63HJisTHef7)BW|7dvfDAbw!i(w{{VRxY6zVLv8@i8Z!fF@Km%6 zF#>4x(923T-*eV8@`jkst%-a0Hj6T)|8@i!>zMPsMDV9Rz4|aya{wduTn6TQyBGOMeJa z(K4uUp9vU9D&-o~wW8>9^&F0fh5-YJJA9gGHSyy*yNX2zVZ%Zyl3j_?KLtQXNGJ^% zWHkcl(y@sxIoybJ^;1)dz*Hcg&z<@x%8)u7Dz(EIe_f)w77Xz6rwl=aG&^N9HyOx% z!a~6L>@f63dRn6hG4bsmhDD(T$TD)hXTW3FnFVeNY8#&zJ*#zOFP#qID{chyFFvM| zgknJ1OWoR2h;l99%%M#>BjBfpFGSrIlBIZkO7)jU0juUYDPj^2^N-QtNF*cW#D^$3 z@Oy(#3dF&6ML&RF?1`U&?NU)bhal9dVz0oISpITJ*jjR~^i;m8w)C%+8>tK~K)!nj z3o(Y~x@00BSQ?>CMQ}D?2owU%SSHf}*Z@=wp)N^VZfkY;FnJGEEjuiqafVxhX^vy_ z4~q^$hQi=Z?;bY&yH|VdFX1^r`rM)dPc!rRYgMLsgABmRJ=*kqQB&1P@hm{m4Kq>@ zog`dcz;In9)9>1pUZ;e~72IXA>`M?2WfCQq?aA3mg=V)#kMJgy{Gs@P-nOYKU1znlegM1w|8P)gHaVl9RuSc1R-&>}9C zN001jtK3^UTb8ArlrDNF`H&{Ig@v9%X*!a^Zty8nH+j#SC23% zmt_yMUrR&8UomfdZK|1^RN0@kED?xq8B98L_)xZ}A8M*t2p3wg9AL-hGTbuPE2ljhr0->bTl4WfY*}@TsB~RGTBkpwE>Ec zsu;7}Q6`0n;`VOA4^$5~p-y~$KBY4RuXG`7(1SXov1PN4Q%G$&qX&1|)}^Z9#O_mH zh2`q>&Jpul2spTVSZjtEdTU$l9b5qq!WzK0R?k$#j=>FXo{d zT4<0!UP6<%-Ol);Ns!4+clsfJmjN%2SyZx7`!r2ARwO8qXm3QJ#0zUJb(98ggN`;-iTEw*KndTlZaNN@G$Ego%=|J z*M2LT%%I;bsq(&;ra%ywTj6xqmsoMt78@uN&)!)Dh!yG8nf29kptG}0ZN;6b%q>b6 z5OCTb-Zo&^P{By)20Rx*p@@7jtDjiyc39`ozq6A?E95b-9+@0Y3&`G4jeF!xP}F`0 zEhzcA^hK@T(3Bn8o#Y1;G3sQ4B7F(UF0Uknzy@pCoMTaK z2?s{-^Kg5()_|12`>&3R#qxh}F<7|RS^g{P{+l*8$C3Sa42Y?O(}FFjw!`yDXq#4m zn>cK-SBY@3=$kCUnB$?dTWY?ZD*x36gw5iNFS=rORaalUR#lxGeIc&YCmjyHZ1Kef zM}KUI6Lfju7?5dQdfy)PcE6URcI}y8dHg{w9pwwjE+~x92e0MHA<2%bxcD zKnyJ{^s^B3UOYXEwmP^?JbcI#aQA??E7-Vqa%Kaze&9{V8C1Ad9+bguj4veZ_dk5! zH!u*R1AFY_KwZMt>h&-AV?h6v6xW1TDF@f(zaG?Sd{q5y7_|sGJ9nz+OtVPcvlAVA zSQtn47!rQ*w)J%9evB&VPC4RI1HWemko*yb=ks0%>sXBKZn#`03`LldR14O1RP5He zmXIFCX|Av??9C9J_a{fI~U7+lWD9XRzum@jZv7E-otfsnLh1mnL*9PDLByr`b z#`x85>`SW)U^k@iNiW#+Lg%pG?Zf_6qt5>f^{-DrYb+&EX4`h{a#mB%PUlK5!~GB` z?&w}sHe0hXc~vdG?N#LSA_`<@q;=!QILyB_Tk(KTrYvKv%;@I~AYUe$Mh_8k`BjSt zi~yl+>(p?PYDvu=)8o#$L8Xub$nWYUt{-QCbT}VVSc&4Rg0M@qL2&U>g1E*YcO>}+ zGU%*NxO8)3(Sp}V%#qS-NB2kmZS1ojRa7hsS7lB8C!q~@1LX?&sF0Ko^_L>8&Ukwm zHq9H)3ihAuIA6bgt4;|qpzxe6*Cxv`B-HyezF}E6{`e;iy_g^fCbd^o02d+7t$W$# z;DRHWlnPWSP^`mvp&v!U!5|}SaIp&RZl#hvn`~BOW8hQ0K31zK>ozC`dLzxA;DCO_ zdZpOB85Jlg?xfarJFUcbB-@iz#cgQXGnGsR7k*)x`LJ9uw()3hcECB`u~GnOUU5}^ zr+03=H}_N&toK!nGslVlAkFpZh_z-7k=Y!*=lYfPLhVnpsW z|E3p&#*)AZ?R^PcL2{devSx032InHBBT|7v2Bg$(mB7en8P$%i7Se$mmdFpx&)b*> zuQcS@e;_&d0!8dR2`AMj{NT7PN@!xtUZXn}kID&qr3Jrj#x@iMP!c|rP&UV8Z~=9` zdAE+Qs}z?LqY+9*!`dc9qLAK((an)Sv?a&TXTGw0)O6qII1lO%mcymvLmINRjqhQo zHdaC`XTy>A3_ie3Nnk#SqMpo9)(uL+J{cV!#f%}S0`AC09jnqS5$M;O7E&RSvk#x% zxX%hQKq16UFEaxN3}BysXLlr^qj@8nLeWStcs;|d7ejw56Lg6$i63bB0kM*&#)lIG zgoM>R4<|PztL0z>5L-b|p}-MXhXF2T{Z&WnB6}nUHFMO4;!(E-=e0P{9++9qRfPD- zY9!S567azNXP{z|ivA>nf;t@^5SL*gWf#Ia3$zC^UA(>kEN^HiZ+Gw6%c-!gTgqyX zWk+)yI1cVKr}Sf(qg~|^Ck@f^DqvhuQSQFWt5bcQUI<=x>_O+$rShp=wJ)-~sdSa0 zgqT(UhT32Gjpx)a#V*z)gm^@=E_ypo*Fgdm_V0X+h$X} zW~=21iWyb_!V~H}( z4h6RQ5=M>Mvm>Vk=AHx%>e1q{_GHQdiP~vcy}zV!9z=wgwT_FpWQAOMalt`&0&i+9 z$vu*7C&3*yw13?Xax*gAqP#q&S@R@;|! zOp$Us_XC-vSF8Ta=n=-HRYyWY-+>+}8gn`G6y|$Tg(SMT&PX=d(2td7mK{l!>F%oJ z;Tk%Y9`pvGzhvlI13g<+lsyw9%Bv2_azhovrJAb36wsJ%T7YQTHPCY_DOd%ZCDqa` zJfiUdH3t=V+P^Kaz6B{}YWACx_gQZVA|QE{XQ-dTohF+uJ^A{yD0;NrgJg3qHDNO! zvUUj|Qa{^ra~hVQxW)XFY%<#e`Xlo_K}jMKep#)>pQM)MpwFxmM`h7lAi?ESbN`ad z-0DOL2+|r%G^Q@9w9XGbNZBh@)(Ty;OXw5^;0!ukj_Uh@EDH%eS)ky|KY~j7Gl}~j zN9!BiHsM6oSpzW5OPL~wU}R%c&BUnh`RGWH#$Iak8;X=Ugy7MOrr)fXxr*{P z?An9_4#b4cod;Hn%~`x)Cz&ENTWOfQ1z0n)Usl&H)L*K$3C8s2=b%7I;gwvij~ajh z`|dpCH9;^M2)yGIA3O=GY{*W$GUyU{UHB8gaA}jNVjLGoiE<;y-J65t`%;V?8)Vapyy-KPwgQ1q}qr=>6J!am3U8l7uZ8W7y-aq~4SMAWhDVEb9tlnfm2T1k245>M1&)sq$tM z!X}|7RX$o{(Blyes&%U}vk&m~+;g>MazlV?Z&#uL*pkN7(da&mlcQ3L<_lO$4>D9& zl$n~-zA3ZMPuKe%wGHjf5pF&%Kf9!S5;uKo}L+>H5y~TDi9(1_jluu#E^A$qsU3&-I^Q-5Oyk23>aj_fY)xCQ0s6)WV(T7y9Rg2yES!n4D+?ZDRnc*5VJ?XEu^1+Yug6d-jgmU9ReVZ^+It% z{7(a?2gnHzy?$IZMH;(7{H){oBkLIV@Tg)Hur);Z;qzZYH~-E^kzzcWioiMebo>~j zqkTES$q+!)R2FQ#Ul3ayR|71e%p3SRUr? z$7u=je691mR!blG&g_tzC+~p$$4owWV=b}lB%58CIf&)#iB~}#4 z@)4c>`_AkPDN&*FI9xs$-d)bl&hs}jdU^lk>W3h>@H{70N?hDOUc}0YLv;~E%5mY# zeRlDO6*%6)_B^4i`?X%YyZ`CxhtNO1q#_^=FI*yTi+{ZKW1^cfm!9KCYM^^nEo|Sj zvc6!ZL39zq>#m2ib{snruGyY+0?(r>_lqd9@S2j=L!TEJEjtj)EOu+H3tA>6f6U9a zONxS@h>xD|fVJlavvMDcA|gkKfohwS3lUpAu-reNVG8mJ#}@%CB1ifx_&*l50$o>m zM~k$mN`H+@foI>t-@1Qr(rWv>{&UlpnQpqPdf%<9(k8JSyb7;@7&aItkQ2V!WTR--Xo?7Bda7JZhNEBay_ zg2YwbRO`d_?4zF`G0_J;{(flTNnDrUvICvO-{FTLm%Pr zlIYvMu2BrDYC1mAO`aG{K`B-at)@t~+p9O1CsERIR84u|N!sY7Gn(N}mua)FJI&W# z-rm`MH1L8fvG~IcDADMCOS_+zZ(h^t4s}TA3DgA7en(S-eRbE)MU*=mO5|Xly}o6y z=YRFo*JeXO@W-mpFL&mdOR~?qxg3Sp1mu1k4!JMBM(%_2{+FB|)xr%0qA@B5qM;ZA zae@qoK*ZfqAVMxlERGkMu8KsJyvH@kOO>DoYiI` zsEh$n#^U{=t{ukvI0QuUCceL4=MdmZh#~WNM^1x9_15)+6l;dr)|eP3^qi_$U1b$2 zv@44$$@nH`s&2kp*nt}yIIXL#et&56?v#<;ZNB%Nn2vXO!7r6n$45w6VFhUxp0%OF z$ErD7#EkK|;`&3)^x6JcU1*QSGmE}uVqxhV;bG1JK7`<4(!2fbpyZtS14kWV$ywM^ zM%G(bxnrG}a2A2%s*!cQ7xPXPp%bVv0Dz{ck`#@?CO zZ;ZKh*VXOwD>g4D>X4)}1%DGNloBIgK%JCc0M!rlM_j^ZO%mbaRh~9gTRnEPy?*wL z7B3;^7N*COt{Pip48Wo#iuZYP!t1xZ?Gx5<*+Fko4LGHoNKRntkZ%SiF`F2#7&s9R zjvJw|&uIa5=JHv(j#AO*O*n__q?Fq%6ttx)#_>!ejzA(oOqXe{+kY`{KowX;QcMDR zFph+TGu;F($SAO&=3Pdf^=IF9boQ}9O*n4oeOis!5q@-54SbH8MtlyNMp`j4;%Df@ zKrZD?8p%QOxq<~nXbea!`Lm6hItYa|aE4Fl$Z)LU)TDn>KWb@P_JJR};Dc$|dpVYf zNr@&9z>3z+$O4nU5`VL4KamB%Q7V6+)24e%9*RS^$Th#Ni#$!Jd-9>(qkx7a(k&gF zv8-|pPB8xrTGtuVqNrkOk9jDMXwsi_sdr0))9dGN0qcH+nW)9Z?F}yf`DFtY$oK9G z2Wvl8P`tnkrg-@=wng2V&dF7(m)wXMUqxUOaIuL;5F`Ems&V*84{FzP}<{mTb>v5j{P!I{tr5wXD z&;G;jICcLp^M6(Vz;&2NeQK8_#J`Ht^t&*LSucT1DrkZf8Ux^gOza}{BOIe;a86Q2)nd0zR$2b(RK@P z3DV*whoxDpm=Fw;!|);jW3_Q>?1S_5z#nQL=xp3x;fkAKd&VWeMNwHmyPq^1Yjb-y z{gptM2YCjp%+5icYtqp)htCq*V+Z3KY;l5K4!R2qEU6%*B!uGsF(ob*-QC zRF^IL>%`{>4$v7Yj=!73#1Q%e{BQ-r6Vv{O!^jlMvB;Uz7iM09#bHv!9rcN{zF}xF zo2M^U?ERNOO{qJP+vAT2mqGf80-#wc=4t2N^=;|3pO zOL64GF2`8g$B_qj4F(Gi?GOlfj^il))-x?9K>i4z*EbYCfwEp#M9m@)jR|6ZG)qP# zg9!aV22h@-Q?B3P7R1R&Dy$X!J1H<2h$hTgtr=`#kvM)J(U0a3;lgME5do3!NXZv` zi3_ApZtkD_4JxtC!RAQKogHy|(|Z(?c+JUj|7Ol59obZ8(lI5jbo5eF!Lof+G5 z-L~=FU!n1fs2P#worj)IW@KAQow`+~R+8y7eV|B4hcyq$5Tq65q2J!UfdtQ?G-;mz zEWpL?V()x+`|8cNX?hj}UY;c3+3o#Vo_KkdoTa#GNU)m}t_Grs2Czo@5+f8Bl$*X+(RKJ7YZ}_=%6z7lEUB+H^&wDn49{f^sZ| z(VhBBSVkeRAp5`giC^FIyj7*rx)`1S7|30k$CB7LIH$2Y6k}Z$P4mQmpbo_3v<77q z4|+uAk=@*j)0nwczo~K>>#p_SWEKMVh(AhV$Beo@)J-w)V(erDA+aQLOOintcv%#} z6@**sz57Kyp{(2lp1~b?R7jZ!_w+e(z!78yM?c_=zEi4d8k9#IxIvzJNf0t42_L*J zN_>Gmun~f6RbLFG9dQVM57C0Go2EcM8FIk0lOFl>zQE;Id^-7};Nd@SymENz$Ifl) zQnea1;7yNbpT>RHy1J?RC^tvG(DzS$Q4b)@G!I0WcthE-eiT3oqZSDQGpUzH*@~C> zGB}z>qHg&4YX-p6SE7J*(df5$n@=>uW?yLC?}tJwSG7bMDGBUHK^$22^J7Smgg*lQ^nK!4v#*fmSw=m z9?c@k0_Rbl0p~?IPOQ~Hb}tQroL}#C1C3Tae2gA zJY%NCFMgPqa~*DcB@JTqEM4oOg}@^;WcM)gO-)^0;yPbw1^ogkflSM~m`QuA$NkX_ z3-PC~zvd)~*LuTFVHFDC^AMsyzB5rElqm4iMIIBGVBO4r?h*~I(D_$iFHnVBeD6|$ zrdGW9?L{6rYJSng`9xNyUWgEU_s@HDXc1CR@-=R-^WrG@ z;{?55MFSI0X)>r^r+P57t|SIAe%}rC?-a(g1P|YTiy{$8$jC=gPYdb&)Ry=Wn8`@d zYaQW18OdKfk_{e-X$ion8>g215i^w>GL;U;WFZ-W6#jB~tLhWG3ho1!Wlb zLIo{G!PniPm>5>@U|o^0AEpoX<~Hj+7xc+|Af<=RjSr(u9VG)to`9@If{ zrxOWblKt#s-hep`kF{2pE6#rW`=_-vov4Q#m+Kz)wMkT8Fns&bkKBN~2t0nSE zLT3V@)Aw>eXD?-#2_c5%`5ZvGkcuPcJB76EIMdk$M~?*n2$hL5bO&Dj;{uI}9spK< z7NxNIqcQZBnAH&aYKRf^Jo3GaYCDJ2Z-ayz;x4)yenz`!k2e6GphzS&A@g%SJeqle5*c?QLJH;o_@ zWF$Am3_y*3=28RV*z%Tq=}WqQyp@6`cem?4SNHt6yINaix4U<}b&K5k}4bqcf zkDI653|xJ(?&Me(fix6A8-bF`uyaSwcqoh<8xB|M)WhxnUxp{>9++jhm)DkdbHlIOgWPii~3XQvau)tWo5kW;_s7-#x=>&{LYw9;x zkcz=*1p*(^0nAf*W6AXWbrV#hdP8J@%x1@#4IE%%akgY#umC-O1YIn-(_@pu*Rf$B zoU3=dNr;}>`qxRVzhZO1&;JK==$lDzRXSI8Y)vRaK4UOfsO>2h8QgC{EOjZJPkANS zUS0_nfLsm5+&$$E7j7875c;kj%dT#zV;VTuD0?*>_?+}lfqq6i?2BGAL>`Hoxf{g_ zbzQ3p(pFFb?^zpv`GN9I^UEQWn1z$2oQOj(_Jc77-bKwp`1akQn0JWjva-LhE?9e2 zgm4nvfbBF&?y*>KQ%KZ)1{qQ@k9$1at4F?yQY!j0py`ju(js3Q# za}uxXB)Efqh8$if+izM*3DRJ3-aQNXur!KN(*m}S9aSHHX<+FwENVT+5JSWz$0)%N z*rBOxri#OE8i7M4TXAS? zu}jE6Rt1=dt3sy^70<_!q2wT8>{|LG1+z(0gOf1di629_<3`LTsVz zivy&ShgKcB7Nb4xqbP9%YT4K-B^!I0XoX6SH&+FJWQnVID0lmw7wnW_^5N#Y zYd$HC3+^;z&4qnOw_pX(VY;;!vTur5vn)WXrIPm@F zo4<)SLz^Wd`Z;&Rw5V2DqgOFsF0qK};)MdEwoz;s0ih4MH|U|8q+Xh3Ona2z(O1{E zul@^VR&K^1AHE z!8md`06|d12nQF3G~BOugFr*l%y`NkZ)#p%Q7daZv7 z+Y`wb<=hlfF{u@&(e!@5a$PU?b%nM+{Ps(lb(rnJlT{fe6=l6&9=0{yY?iySjB_6r zhr?ViiuHCg_m;&Q?&7uOhEXTR#i5>mA7AOl5w7BWdPU%|oVUqTSx1Dxb>BE00v z%V&G$g%kxyp#Ro~Tn=q#tEES!Q7!mh6}^>2*)e zn#SACn?%6|SmAo4L^xJzCF+IqhNRPg@Dv>p562~O3>~vDGmXFrjVKN$hM^1HB=jDcIVI45 z<$3av7=dmAmopvgC>xzdsxYFBeGTS+1^}cX0GQJxX)Ta1Y?xqXPXkdn$LJGFDQ4xA zR}(Ox0}4Z9N(9~zb3}jo=^OVmS6XJB(c^P0VLu6!L|XTRBO)z3bIP)mxLzXKUWL4W zFA0EBt-heEXXJyG+$Cw@?W8(s?=u`W!Pq2!0!m;aXm8L%$j3g_fiIr1uQuK8 zkxw1cqX)9Qn+MXTbsIlo9F9EkWEp&#bTrp`LqZ>wCWb17*}zp+7&xLv2eZp7wD-ze zk0G4c*yvmiT0WI!Ltg(M0|;PKnqyLn4{*Z11H`$pQ^GN?({ z5)BMSS%GBH!wV`jQ~ePd5hsd3KbQiy151$hkaoy|mOaJ2I#@CjML>beSqhoSNG^>j zldIcCr6Z79cEnQZ3_&~`ik~7A7yebw-G>j->vGnC3=e8DeLkfXUJ*l5IYbLpuH&uZnJwWt?>qo4|Id0m6Nv;V)ANzlPnTx5F`jkZhIHrw!4kPsqHdjPZ zW;5HUz{-8RX^C$#F?34W#c$+yQeoiNkCvd0S>=US1V1Ys={k(SW=I}G6NE)8eEj5o zD#$jrW-ZV0Ko#;0_B4VWGk3W4xA_AHPe+OqiKkZ?IvRfU+~MDYAi>i=fc0ipu9o$x zo_-zzRIAN$w<>4FrmU9RL;7d4o<68Q{PghQFLSOAz?WeYAQP97As`c%tYRS$x43p7 z*K-3iH#C>Ax+4{ruwo$#1v4-+Ffo_m0U{IyGcY(cFqaWg9VdTmdUJ4QU$bs(PV6_D z*tTukd1KqQZQGc5Vp|j2$;7tq@B6-U&aHFn*8ZngcdzQFpVhT@SFcS@EN*Y-qUz}Y zWTIoDXXFN`hzn~nF>VfJQEs_I9F1EmV;3w%fTlbN}NFG%@!0S9Y`jm;aG$jQ&S5{vYXotd}6{ARd25ZR+aq-==>6 zIsbzXK=}`cQ~*<;*+1T{Ha7A`wm<--h`p_Ys|(NxAZKq1bg}~o+uN7|#5`PpcBVkn z|MoVrwY2g4|N8%zhm?!aKYR$;ng7Ee<9}3^&f=CHKvP9amwzZXGqU-Is(fd4t4 ze+Bx_?tel7{yA4udpmy{&;JVePcr`w#~>vyA|)e9^FL+qZ?l-4iM^?%ojE|o!7C=)a--cTEA9{_k4O$i>Oh1E9l5|F0rp{MYl}lHULI5*D`i@TOyC z<^a&KFtG!eIG9-gTr7;f{|l~(tCJJZ&gI{<|C7squm4?6K%jpI&;)L6+1`XF#45ct ztkO@cc&-YPW^Tq%jb@n%bY;5dS_jo~$imd%@Dle<6}P}0fnYY!m~Z!DN9wMH#3&w! za6CB`LmZ*EjQdhbT4nB6xAmq}_}Unue+8kAV{0N0aUFTSz`Ey0->5I6xO~+XTh&YV*?FKG0u|vU@Ptx8t~g8i1gd-3DR{QF1J_P{*2+7 zDUnTL7`K0+qQ8lX=Ge$>7XI3ic7#iLOcdPIMbzYcu&r%p_d%FsIYw;9I%Ut-F_d6` z`3~)+FYso6RuXuOrN%%&=9h|dAbl_eP_0-mq!lCIRmhX~=_ZU9KJwZ@-875U;;l16 zb#o+|%r7ZUDlvquuCkutYCMc=PQ6OB80w{mb&7v;-Mjzdy!ewWazryWEkB0?vRtJj zpQ^L#NxlS$90M=e>dx4~%I_r1Fh)MdNDcPQHB@+3wg^pe(oN0{UJAPuD^Vb_*fWIy zYENy|;xCF6&{?E`&O8kWO+t?F&m@=(GfGhf4Y$_J5*}GHdx~I`;nZwmnTHB%fI>o= zkU4*w`E=U-TO4r-r|A%+Ir&zetM3W&P55W>(kcNl>U!zRsvtgNLO71duJ`TI!?u$? z2{$4CO|c@LMTZL%{?DJL$HeMUSaEtRD11SEqAqz4$h;IWNMU9?UfCx!<`S{s9uBkX@#OU~dz(oS)J>0DcgNB5qiR&jic8wLSv zGxe?30#!Cg56~G`K_ZG0b;2`D#Gd;3XW0GkoAXfTj{qs0-HUTLKaT}xA7P;_-d##< z-zrUc{0%TXEEyQ7#_}P?N#z$!^asAFLc{cESmaCG>qPL-hrB^7fe2(ilt`&yc|krDc3yoe@*-FB)m>7?u%s zjpG9dHU}D374VEAW~xa@o0Jp~3-AfU%cze&4d-XvmoWvsD#SB+TJ+Q00s}1R zzMhH%k@7Me@!PN*uXxB_+l(Ei!*AgZsB*$f)6$rQe&`1J+6~t#=%nZ5{B3{9OGpDf z``Q-@H-ag%a8Gi`s@_BxBq8>OX ze%%z1Krg1iPV>_3&O!%eM-HcHB?A_tv+=(TtO^Wg3WNi#Yb{NjoNrsU)po0n>s-9% zqmnG^Gz>wID*45=3*7C%? z^$4U(R<5j|@YA{m;pvM(>Q+I?h*_bFgfL#vmpSK+B5>L;PRmobtg419BjlA-0pyq- zYcw;Qd}#eYOF_z(eC(P*!l*PDth@4xW3I!aOSVw<@)ucKv+`A%1xSThhtiDDDP4w|^!sxjINwUx!~3?-3W)Jj$b_HzA&X9V||M z5F*%T!LPsYexIq)QU0PQo(h;pSFs7%2hX>+YwE~`ss(SH^xWh-9{BOT71CwJa$3mb zXM1o(@M=;CbDq+zpd{6ddOWv?y6#Vs9#x|mG`v^4Ql8!c?^%CAe6OH#eMS?$$;;o6 zLwK^O+qSVAluR7-!Yi|NYx4WyJcB)BQtodJ@AyZPJKc96qtPPYSOrJ3gD4bU({J5g zV-vKW6pgI59-*r)J)Dw{W+%w=4Tjf|0y_WsMM3r3{JjBzVJ3|`hCJXQ)?I+Xkn z@)(kN=hqhGoT7g&oG>kTO+ff}O}0?(q%|r$J?Pu@&{a74`+gDvQ?h0cv(ESA9JkHG zZ-TPvs<#Bn(^U0ZT1r1bE@34%T%Oz|pJ{JESShez6Z>$Ngs#i~2r zl?r%e()O$P>3qP|ibt(R5q}=88u4*f*NfNs@sQT7kBYU5wiWxf@FIqk19AW7lo{ZD ztb1ian9qm}?!?u=M~C`|ZrIF6{M$Ot;it*w8tjkaEkY|Wxt5RuSl`?tqp~pC4(4hUqN*NT zAQIBnOS{hVNWED0cDYDL)2c6Cl$D!t>Sc6w6B(c2GM|2>lk1-ZlI)-965Qvb9I2@tp$~KTfzWsp) zyJ{Xo2~ixB4j)r{_Ws#X(RkiIK1Wwy31oP)B5oy5nn2G~KcG&J5&edfxfpj4YWyr9 zvZz1AuSg_Wi%T~Yfl~{-Sx~2ASa3?7Lq~sn?cwSLHK-5jTUezG8nW*^%4Iv)sssIo zzgB9paiQ8*Zyq-^%nvHC`grzgYKvmBGd$8`9`qL5Qv*W-95#Ho{Y3aGpZO7jDQ(yi zT`p#plwq`UG$iSowuth?Z{O%hRXUF1maI5^EUntmaobMxvj7iSa4zW-%IglE%WQwR z`V5qgMS~^{cFeYsyR=q8H^xz76KM>W=v?YT?6Rxaj3p{#c_xe}@jOzV8qrCD`Kjji zk>^a4^nBffPg`E2Qzs~C6e2f3Ud?s=kPqB6cVSf)@%%8Z&OA7bEz>;CbWAZ|%N`x;PU1VNKdK*fW1J=UDX_)pH0>1n>?S8I4Vf^U1yAkv2s(0qg*& ziSi#E(tk$ol3{dP1S9Y=Wzth3HWRAmy+fa(nHk#DumA2&NFVB6iooV;y$0ixRF1sY zO6vh$NmXP-Nr%BIZ36ZDcqa@Ct0z0cyG-`EF)jTXn$i!J>SYhF8!XTSR`{{5*x~1sjRAvih7Mn6_*{M@u zJ-xF15dM5CePr$Q>>)`6SIZlA)Be$2j#R~mjLoXecvY6I_eKXIF%XhuG?y|1I9QLX zYYEV$6U2Zb+Yo)XZtH23I*xym?)*gL&TDwagnJfIde-cF`YM~xt|Bm)9AvUko)J`*jQcm1sp+dz*QMP}A6^*_)XhluQ z3>gEKh@-ZWNw%zi@~j? z^r?d3iw0CIPhtAYg*0;^l$(;WD;RrbO6ojCSW`)2Ns9{_OcZ}wB~h+O?m$5^rEP?k1!8Y==VdQ{I#={hrDJ z2PkMJ)>AdwQObX^Hu7iFniZ#YWE~xc?#`?b{0n%w$JmFYV8U#4a~_Y-27g5|(kTYH z5gzYBbnk?l(r`48?K=JdahN|#=w@UMG3 z_4nzh9QU`Skr}<(!|Ctr0T+;j;rbQSP!pMKTj)Q5y{1k3Z;vIybN8r@X~|lmDlKWMyPnZX-g9%AH=chi=zIWr7FrjHp(7o>T`J}Bux5n! zvq2?1+C9xG;cTnL&`8?O-EYKaikK^W^C$&|(sl=phSG#-%F~tKAlz;!`Wyd>ZJQ=8 z$M6z1r+?p5_49Jmu{_?YH~A5I^!;1qN}|<~G+cJ6sT$bieoT10{Huk{a#}{So~2sm z=9+)duw4j|vRt0&{qW9jYKmMR^4vta6FyUh)ooYN)XU8l?&_o-Oc6p;r_el)8F$Ww zdEFp=?TT=!{Qfac!u{c`fvQGRDMavfr^LP3-PEJDos9}ICH%zT=!nYsZI9j4TLZ){ zug}OVw;uf3T_~aYh_H*!e~P+2Ru+EsZ2x~ef6gmsC#Wj?5nJ;}4%bk@FH?lR=qdwg z$wrjoCI6t|iy2F|Mr`|UZK?9v;_gC(Gvj>c$`v~v4OzuyzckZz8cmB<3|`8}=WIPp z3nys4P0c=Bs;&6ZB9PHPvKc%k1Y7|_jv_;7`P3~Ze2kRy${F=cod%avI78UJV@H2{ zr}4Z+KqGjAy5yUcb@RwY75iKMDjEMBF85I1Bwa#a2O(%688l+l5{srX#Sr(`snLW~ zf+nnQ>)0fyF}O7P@4{ms(5WU*{54?a8_&8kDDGg?V*BgJs#pw#(SG+~T17+nXUl?TpSSZ!?WVdYtdkT&0=?fSbO(QnYQ>X8+hbT^IW+C;dwjRu~|gKM9y_#XWDKyCQyi3SwbKwhS7QT--18| zCeon!Tdfid(mWxD<1mHcS0J7U>*2i^N~V=WRfv>>girdJRt#U7oY1 zL`>YMo7D<6MIal9P(%EM@Du0p6|ty#_!`IIHp}?0qeac%Ob47kb}L`iMavn1CwkY9 z;!NCf`_+Q>k}!YI3(NS|-D4JV3KGh6iA|xSOu*se8c*rI8Tf?fbRC{Km5@w*< z;W_I}KdzrBxiy@z>=h2J0a|J#%Uz1&MuosS+S(>zp|*dVAH%fmrgEomZ=!|wg;Y3~ zg;~J*^3DykHes%eW?fys=1^T1JpTt`Yd{*`c%LBWOl)O3yYd4D%KO`-y4?}i~#4!?be^+v!hp^ba zxF_hxfH!|Y&da?2X`@(aR%kA4f5+(sDmDdUwMy8nl&Yb;D^f;}6aUt=R~oG3$Z{1V zCu!|KVcJid-mLSdfej9(``mi#R^Fcoj+~KFL+5Xsv#DR(gj(V93=Rw+6J^PFaveun z%^X_2#wR?;fF_=DV#9l*F6I5x#ok~F99Ogem3$`#gbFMX9c?c*U zKe>MxYihvDju_GElF7yg+=saPg84Wq)65%mfTk7aR1p8HDfPDswuT9d{s0-Zfo@wP z#!D>Qstl`-x9H>2l7#D?z%E*?5N%nb$1eqqhne%4{sD>s|GZqfpto5}hLRmhw@*Xkid0FZy{Y$iCosHVN$Ys-+*(Y{9;AycU_rxjz! zWt&7@kZ{jZBYjjhI8WLC?DKZ9rZ!Wu0hK#&0_&zK~m4`HR;IH0) zP;rASW!>74w%dE+I{Bi1YR)pp9@-B6`VLL5x!A8l_qVUVQ0+OSkMN=s=E0h|?)iU1 z4iUg{(BHbSjvwWtE~Nggrq5dLkb;KbCH^{n<#X&_ z@}|hK%c+RxTCI^r% z`fRu}-NsT((w-nCHo7@{jQnJ+#uqWjg`1$>PECddo`8bqmh18M*DdgZ$KDZvVv=hRTsuSFBsJ*oOMi8J!7$?lU6MNol8ZT5*2 z=-$!&8Tz5fs>kov&7tl zD=;W-Fo(layfz_rs-4mgtFz?gIj$6$r-UXaDqUct)7=Z(H17K3Xik4?>+tzmAGra! zC5cn`?AJQ_N*<+7FWsIDtlyyzWXfn5W*X!YsKj;?=Nh~9C|S@Yz&iEdBe$_l%bDFO z9GwZJ4iOx(zrTReJA_&hVa^B-ma)_Pm4>GO%@>0`Qm$LvZ2HiFch0z&2lo43N+4WW zXxR8kYuyju&Wpv4u`hqg1+V<=0x|#Dk}9DD*T4vYgeXf29(hv|@*T=CGR@Gh4j5IL z1O-TD{o)8nPtdsy+!VbBK44U(73{6i^ncxsndV=#P0Zc&v4sclq%|9 z-#rS+J_TZA(cF$Pr}3lswef=F-5bEUTuv(?hvO@gnYEWx*FN1RVY9GQ+44Ug$8Kp@ zW1t)Fs@H-L=5KHNx$TSl`>vjhbWn5ZTXJN4GNc-Mm4zki%!He`XzqL2`}upmrx^Kv zl|OZ#A886{8b^O9LfpFuK*3uf+-TM;;w^pC1lX<{aK70G_vAHYjw@lKJy&cN{;uF# z+5F8UmQD!u2CCa@ftUS013LH^kW1nO-RL7Dj+}D4yH0bf67bx*Iev=t-=x_}`zwJi zVa{v5VBXB_OxO+hbi2G(f6x2iRaGHjan?uFb2_TCm8E|L>q?lEW#~4Ab9!&_;+QA~ zH9d-uq0)`mDR`M(1XUQw{v3Kmt6nm-(+_$zL|`VA%;4%Z%O`jSFg-SCGNb$N`2-WNlwLhX_2kuK|BV&s7lB541m zKMX~l&xI-+o8?!YX(&+PL43*}#-*sr!7H%$F+(p~Xm)Y16^UoAP?D~j}qpRUKqo26*l z=^o^oVYmQjS!$_xDQGx3{LvTGK|kQU0y~0X^9kah($`88h{OZA|N0rMXmf*hCCA|5 zi@ZR1_kNATm)fV(!OJE$r16lKwdrU<8MS}qZNMNL3B3raIhMvIzt70?KuLGH7B(gf zFhkeGwq2hrYna>;0&SR~AKLkj^KSmHLi9CE;Oy5r+k2W-dp@~EX+@bQ1# zxK2YOT~O`S&1a>#CN@?iVO5c1n{f7ka6wp-z#TGs9p{20G+(m^Oo|qI>kp+#lphm7 zE-XEx$+XAs#ew%1^2ebA{e^i&xzur1M$n98C8hy%mj<&H$Tal~#2I+>1n7)3jadDz z!g5TA<7770XYn-Xh7OBcLNDTrs78NPB{&iVk zOV(`laAnC~xe1WoE+RT=Rdw5waeRn9Z?71$PtKv%` zbLzUF&?Wdfg^r2)Emz3mY6p@935{yl%-TMwy-9!evrv_J*bZX+CO(|{K3{4oDER~N3^S=Isi zxsuM-m$;1w^!0D1yN>ZRut=r$YY6`s$({oNL4f(`cs?LXa9fRbctvjVq=umG+T|WO z_tB&g6&{n9CBZbM{@W|1_P4okz{E}igyn}#5|Ygi*<6_j7s8G!2tI$mi6l~df}Pd6 zcnd^}ezyPJe-JdSc0g?4h7%;<*1oB_o~^y1@G^C&NxKcizF8v38*v2k#zgu4va#9%%+Q(1m>?VV+ZeRQE82qcHLUC_z+CccQoHV5G16W^KDZ`1HLr~Mi@BCbh;AUq`-jf= zj6+T;-f}c+M1u9Ph?=Md`f5Y1@0`8!-DHnSNcx6OaOl}degFhqg%BeyMnJtb6WDj+e;_BnqQdY%V)*{OaZ zN-0cG_ZM~9p?XF81shrzz>4S5R;VHajy!J9XL_hVpR@hV5uY%ZBPNkthe+)2RiXB-d#0)+_TX9R!zhWUuF*R2THlRm}lbjibz z7F5Q=udz4$n*_=hou#i3h}w%;j{OZS^)cJhT!u#M5b zznrF9M^yCg=;AYfX3i%S)r5lYf3y`tjuqh|ohk_TWQFFYQ!ooAL~WZsGgy2Rix}pl zcBK1Jd-KFC7!&VvE=4WN6?2$IDdu_d>e($bpf@F}7eiZUB`4Jt2qat_tsm(X#}R(4 z`Nkb*@8U&;6)T31(xz9C1s-O3cjY_OxPG{hujo#$y7n=D9Y$#Ego=UNFt1s^uI7_7 zPnP_pw#P#_I0I#^hSX*Ao=BEGcF?_*krKUg6Qp6NP1lXwuC@$EOX2?+@&5JJZ<8Wb zD^f9R1ER0)gxsyD^1~Naw#KrmPy7ctTYg;@uGxG`@*>W?iyZGqBD0DStCvsX-P)0n zxxx1DnD%sk^}P-p@Q6>4p@S>7>$Wyyp6G-9Lx6%>Z`=~P=`#^ODPHUN{V4Khrg>%OqrK^kjN?n^#;|1b z{!A!NA-{Z}RZiAUlR-DCEugOa@?MT%Z*y1!tstX+TxaE*&^`@R_zK(vuI!TtkjYV} zUmUaV8lgL5OjAauMDg!(PCyp7r?*nyesx@LDV}5KY2XQ$GU+v+N<#OfqORVpL>+xz zQ7&SRF|y3?9M$z!1o>V9gTvB3bJwZWj9&n|*&n0UW|G$>+qq-egW=W_mskCR%KHSZ zyr`XjNXBB|-$YSWq>LR;&k2yIs~|~l&{S!A6B7sHBvmH%JiIk!Lbsi22dm5wfET&( zN)khxv-zk(mBBha4goCm##V}kF(SF{)E_KRJF;K{X{iEIvz5E`Di+BNlv2$$^rxjL zB||^qaeyi6O_~se5ol1qOFZV0LGF+bRt86ZCUJa&2S*WC`)EmgIo^FE`QB{Q#2;uQ zq_@qDVySR}=ROwl5;awz)m5HPxQ|6>6zv8+67~(HqFO z$=P@M3C2h@s;XHZN9luilxmELHB8~)i#dv^42xqU`9obdf+5Npy(k(jE5aghrbL8) z8Y(+!RBhP=Wln&QT&iS5J|UGqN4aULtSsE5(XjWrD)unWH>kyXjj_FMYMVD%;=>Z}&1kv)P)_4xqcDI7k}9CNk0i&E$J?0rir3YC z_zYFDc9TFDc^$k4MQTHk)eLAKdH2Mkb-r{6`IkDF9uDe0d%<>5G|oV{a3zWEoK^$8 zeMgb!xCH778wAPQ7%hj)DI|%1nZ_hM2#tbU9GzV7^=8A%?$phKF}TDQ?lGkxQz%N` z1J~i}-L|RG9m#!UJGPx$-IMeX#h>bJ8U%%9#e039Af`uN{)Hz>|^~ zGAkGm+|xh-`$}B_@{V%d-9-c$u;4Co5v#lYF3mdCu-b7h!zK@*RQ6RJQjb{_z5b0 z?sxz?JHY7itCz5Ini=F5`GR!PJ%^$B1d4nW(-uTv_jjw=XW_K?*kt0LPsufpeE;U1 z;#eG_^+dDT+&NrGo;1gDceDdmgIi=JX6p_v|87`^qGEM2A+uanj}Od!Rg=YG zY}x3S7Oy&UprPY)7Gq zqK^v9oDT6P#aB|ENupm1&+u?u-2cs-f;V~7c6owr^WoDieFG8n5F56~0lT8NZY~Lb zWgFBof#rXBs|ZHEJATUH1rubkS!7X0f7@_cTFLsR&TJ98}b1&u+`;H zTu|OJ_$M$1-no+85VceE8oni1AGZ)KW`=pb*eX8g5)&t90c6BSo1pF6mAckv4NRNd zHl|tR;p^pm>A4HXu8xt@-e7lL?f#Y-LAF?~sLK9-TrM*WHcda}M@W!%x3c5u@3zhr zwcoQ8`6zy?u#+!R0M;P@XEP@pUwA5RtjXDo$(HBR`fDqujy49C?*80y69axyztu)d zg$J5aI6E1KRI=i^GY;fsU(Dnke_k=OE`GTaD2|XS0phz(-^WL3B}-mn#F& zv;H-Ioc+6HncWVlMNOb+75{#6DDJi?G;jJu5JvU?BN{x@j{m1WnKZsg&8_ zGtL+lfNIq|hL6J>_bYR|46j%Gm+OZ-Bd#O-OGR;T_+(}>194E5Ku#C!!7)ihZw4QK z=4dI_2d}?!+mZoV{ZkW0c-)>6##IGg-UTaX`Gx^cWmvXb??%fqxZaEo`qM*X0~&;; zTY=I?xOiFoSW>E1w zLJO16lm>PWr@^`{{0oWw12ZDYPHIchF7`zp+C17!r+$cB4KZ{AvX*Hwsz9XYwQ4#m5U!Qt&;0BbCGFe#MlS_g^dFTdcaj4yzw75CU1(kP#P7{HMW` zv4Wvq&hi%&pYkj-uRx_RDp6cADAetwE%;ASoQ*~pgQxOZuj4D9D4fZ;x%tN7^gNCm zFB}*!>twP0dv_ec2vROmf6lDZhnSH&8mv8!q&1o%bK#`A5odJ>6I=j)w3I!1mCS^$ z6JuR?{auO6Y>v)Linl=928)FpTIAV}OOL2lAvr+0H{|KQ0p5M*>Xy9@v#Y-&`}JR% z5=>EBI2YYLVjy@$8iYpKw2?XC*m4LtnluO`0l*1fWS>C$`*@b+sxCj!HD(JrlGLg( z!ff{2#;PB!AiHm)CUkTj42wb_`B&P?n)CjZAmNEfALhVB}btT*Nk^U;LMI=VuogSUkgW{a1 zb5+KV3pgC>x=S8nTBqQ7<(|^R@e7fD{Q0w$8Q;4dQ^#Yqeg|)Vajje6%6wJ@TOPc3 zDeviLt&7Lv%NEkNfz5idbypjT_S0p_7Cv4jXszO!DeQVAbqo=_4#^1bqCn=IU5CY% zMfj`FU^SRE3B^b0WDf=l6@f>!(pup@)_|98je9V0y<%}y+%%GP%+Q|hHZ(WZfNc~b zib);8SDNs}&STnt(QB6}N)d>o6nRe8z{gblVD{ieeZsTZ6&*I749gF{JiIy+y18OK)^q5!c$8$#w1!W(I9UDtnSq3~fJ3KWWzk1csb7|? zI~UTk!5y8f)?O{E&hkK)G2UaGncoHMUYkHI-RG~+G+XF- zGohvtsj-v@Y@IvPw3c)?wuO@ZUDA#HVbL|zRd#24&v!s>Q8p;QH0pUlD=bB&2|vSy6$9w9uIf(}N10W2foiRVlHm>VWBMa2Dn7orw9w19F1UnuZdPzLf0Y;&gB#oHH#RE&dAS~#HC_bBuO_TL*m>> zy^+v=H=$QA!p^RG6YIZHrG(z#>-2~Z=lrqMzCB)yUUrX{yD8sUiGXXTYHxNb2h(bD zZHokqJLs)G8Qw-9<9s1qRk{qJl_)FXL<3`ztzCg_`%NZKagO}2@W&jGf|>nXy~{^d z>k&cG9XBtHj&N(Okk9MF^>+%tZRu$S!G=126NY#xj%??KmZ1VXkt$nEwR(Z)cu-p zmpcEetohfw)#PLbcJg)e^%Z$&WB3D2M)XqECm8GP?}SBUhxEK&E+F^_&2TZ#grZLh zf;QHRtjGg`HswZNIn?A+N7+LLv6O#{uEhiQ7q>!~^$w`@mCH=d3 z7E}@~ywtGa%yCI;7lk7!!V@ghHmhR?<8~9(PohdS7mBFYVa_g>y@Fw>5fMpt7f&J8 zX*0r>@R5|=;OqaHXlkdUop)>U(bSnj`hOf?J#vGy@kJiEb4->;P`%?HU0A;QjKhIV z5?Cn5UcsZ?=N<9c;Hh-w=_eO|TGJH@(FI}*#D@%jV|J~Ms@kNuLgWv8DTN?Uw`j6S zwxSZPkq*{m$vp3cf9kd=+kxAS?n!NCMk7fy!^YOtJI7Fhs-~rA$$tar!FO)lGgRf( zZlWLm_2+z{{*Tw8O#M{M3*8y^#hN)n_%~quaz~KnN>hD1{RmArYYstweXD;~^8#O( zz0&u~48+bmv=Isi!|W#fS_}IpmUEdqe(7bp3`dXYegl*tne_2ErS5uoEqaX2(Bt&X zf;t&a@qWQNZ6hybk57?$E+5~}flm?C4(iyocDdx*ffYcK+7YLh+7y33;FW3%CvaUhqkPR}XrEecUH4~RY@2U}-lzJ1Ov?4q;U=<7DDU=R za6)iezyOqE^{kDWe-}BV|7mWXkgW|cX%1A&-hPp{ufx;Ev$k6=le*#ZZz8Y;l( zNTk^>1@o2rr(K1AMA2d(dcc;-=03>Op~5M`tHh>a5G=-+aORE&;%=-bK-~od8f&_=ZvnnyWcW7hb>`Bi_6JaR;i_VOvUsOgd5!peT@v z@n-IJ%ys9~j;xs(@P~@$=Nl-M!|4+Wk@mMPpSjRjN-qyG5;p_2ra#S84g=@y2LR0M z{e_dFAJPG7MbtzUYSwTQa)c_3C|=`&Yv*t0xz?F~{#Dn@BEI}=(B(3CzTL_SJ5l@` z^c&;0r5Fd?oT}3xud+b$R&O4Kd3ff_HdXre`4u7T;#FWgNCgztEfWNX zB?FOvTdTJgX&4CYgY-|YQhcOvpvB`r39Y_)uGqU$FMia2&Cjm2652ls{|lp0&u7rC;lEzoGLDXSyra zoj>gFC7lubE9{0vb=~-FEC1UET~j&{A~p_xZsKMfa(KzxD<%sCwp2Tl1CfdtsBq77 zj9>2Hw>{_hd2~IgR$cNZ43p6@g@Hr&$yPxxaDH)Z@FCS>ZEX{nmU^sVa?1ijPJlV-^n|&eZ*nkr2b=qXP8KN9JxDyN(v zw|p6k880;f?DOBr65nlZ@n*kJxPOIC;OhvmjrWXeUx*LMN&S`xvBt)jOGmsv;TsAU zSDYvuVeihM-l~R76#70V{yYG+erP^gEe;D!iU(yVQ@GQ}HWZbwJe;cImH?oCKt{|n zi!*~^}=8rZ;lM;He-2p)s=7Lp`cf%s3Kav7drj%93}X2xtTt){>&}uK5V7@N<%1U zHf9g}%)5>z%(*)V7p|mk#{-Ff8=x%~mAxI>KJG@RzH^TzR}j~JIy#(BDwOILRc)vV z*$Ef{-Pp<$x>iQ3(-6Pnh^+!E)u%Bnrrx%Nz07lMWs*p3lf6sn^iJ3ejN8iE=<-Ud z2hb%9s2C(9XO#3DoURU9gvBc@OiS61N4N`U({@pZmsuI^+J>B<|H9>ezHpA~8pbaB z-C?(TmlkyNHRD#%f}N7A&hfN#XuN35jg=C~oA$B>-ZpyP6Iem!=Z1%1l=Z93%(D%D zLcc`&aUp4DRn!ki@Nud89ZKO)bczzFGE>CzJVs=Sn?ZBMKYIbDHc8U?-qF-S!W3cc z&5{u&+|AL#kFOCCC#SxDQQkX_sl?LG>0H1y^m zB1KUS;Sk=W9BhBGZpQaVcEvu&fya>(WE=m`P;T0bBEbOO2N^hjn8!sc#r~h0(q{Z~ zGufJK6#Kp@6_J{NA0|(Rcf%}Fid=$a*w>elLlnC782eu7;>mAYf`7kg;RQ5;1iAFN zNc5ugC#Bu8J4#-0>cfqvf2d33%k1bEQV33X!u#^ zExQHa?NuWWP_Z+A3{$69nJGK#82TXDu(mynDY9c8gc=b}H4j5tl%y_`pWwMbq}DiV-B-?8r`Lf8V+xK5`b4QashsZfv9@kSZSR>NBm zb5G%STvjW;pmKuL92wMXq$|VlzIK4%5mX%z2*H)0u3EBxU6V%Gh^G2Q&XLCP5FbaE z;c`lXL_{o2J-IXoXBy(5TBE)SiLpQeK0eXD?q;h~C*whagc2FKM{%Q)-v z34l)eSIZ24dw^xfw`H%#YE0dIVaH>T77#lxZ$`)-NIzwH|22Dj*7>db8i-}uRGZnK z=1lm!OZVMDeC%ehMshI&bui`iRC9*7NG(wc()*LO9G_&4Us+8dws}r+j3~V#`mYDv zt$gQgWV>J{su``Y)k#((>rW65l3awQdgi~&m%)>N0qObxtuLAL6m-OEU%`llI~Y0* zID*krt^a2_moKA2i2oXgzt**Vl$I%Q>-tJ-0x6ttDj@J>v#L^*$|<9{UyRT}N;TIr3K*i)EjVZ)9@ zRoHkn*YXZ^uXKXerJ@Tv<9c?;bIgE}YnI!-Q_mNgWm8O0isDa_7)m;NM&hoA9+iOm zg@b7jXDL1?8-Wu66@*}lR8t0fI0zn|>Ua@EF_y{rZ0b!#6z0R~K>IjCQE<-ssMUa42Pe zP13<3jZCdzArIpd`x#y8(_MhgO&o6N8N)=buqTq+WOo|?(o+ZptL#!w|B}-YE&{}- ziK_fr#Xo*D|0Q}kZPX2@_z6>Tz+N0(h5Ml|x08@OpNL3rwQ!`PH&hRAN^<|x9=nj= zi;|vzZjn%Gqv5ouy^u*D%lS;GszvXA`6zs%HsXZB=6op#_h`0;YL-gDjvSA%5QcNu zXS0(J$-a28+zh>_Y210(1D&Rhj#G3*=X z9oFsJFX*S0$Jz>ax&BA9FBV~SIMZh0N1x@!xqt_GNWvM!w*>#iABQfE-T4RxXeq6! z9iiE1+yh}c5FY{n3*&s)bggWE)1E?mJNV;Ch=_!~&uI~n*p4%45wR+#G_jHIA;?69 zV(kFopT7DX1f(|VRR?v`3p|o%m^+a5hXZdpKpF0ktEUpo!0wm(Xav-T;A0LwLj?PC zvBKY2{Gz>%5|d-{@i5w#pzuTRhOkje!hQh&TK6oK54QB=_UlNd)+s}O%CY#E3RY(fBfSY z^*RkBq33xG$qqhU$wrM(hu^=tqp{mAAO3o1E&hw$2D1Zc@SGz0kXqJA z5R6zi>~f6W_GV)22a14|S=Knq6Q@^=^(ix_A|&}G^QhH$TY>$5q-M2UxH+x#-hC?B z!5!->7WYDBs!l0oVP>2=9LZ%ghPH7coOf*Xe1uO^0N3=2+wCwC1mj*uQ2Rc2L37d` z$DtEP-ur~zUXgnm#g&y$$yMX@XSYqPYSz3MOeli=;{P<^!@=|3bDw^vv52eV$p0dI z00xA39hi0N4sXwYS15xNJkpR;bv;DN6jSH_YbWK!Vx+LvAc#Q=T_MEI%3XP)Nvbs2 zo4y4H4`MVVnC_i zx1xJCPmUEF|JPJz@wEm2jjLcPsd5Adt%#AU>p&P6h{ad+ivAUrh&rPO()TvAab3d> z^|8VBs>z9HoQ8dSDBSZ$!z{5(+!M|NJ|2GgfQA&@dQQi?bg@dI+eN6)V5TtC7kQfhv(vNI$IJe)#Oqe7cYPCvnuDmmY}aRoQ*7` zKl|bW4hu2EdORxaiP&On1jz<&-YM%nvCE`gIh!7ThhQ*TOFX#O@gFI7>Vma|Jk?p;X+I^Y$UDz?eIu;t5|BnB|!YQp{Xw^GK8=tyR?=*b%6HgQ+(+< zi&C+DU@g2MBNu!*ZDRK#hk0QU#&|=Rrm$&$S^s`G-3minX-q3?*-2HB22}n1)31-T zg%embQOvMn9M1Z*o$JdB$-U;q0Ms z<&;3aq;e7G8V@7lYM`_J-=r<>;T=tX4F#>7U-{;B%=SVE*kixQQ5&)ZsdJ1d0sf}; zVH=c;zQP^YX@+A&XEPCjAh@;a-C~(cv#75|X}R>au)8Qk`=)}9srdw-N0*t_#$_(y zHS`}nMiVQsQ?oCKHeQ(nT3C1e0KYOlzw&l?S$l^H?t`R9TJexV$;_J<;#p!fg_!YkYaBniQGd zOif1w+Gi)z%G6lx+0w>E*p-}JVb!;HW0S{H8G|Q-{lRL?0gV20t`*qg7WAB%maXmN zK1Xv8oxIJy*Kd`m*%5B&Ayk@w+)(8C2z7kQK9xx zS!6+5_q)He)S^TeSzV2S9M|_fuTGDGa(U&CNtWueWBU0mQ(d(MTK}a}8KB{|?^R;I zRL7w?LmL-}^)ux(@q~r2-M@_=l{_#YL55l0yQtN7%Ed{C>*ras)6*R`@mCH-hZOMk z6drXsldgKS;|xGZNO6UK*KN9N`GT9S&wB(m)KrZBzG$vSg&gq`UEHqza~AV2pKXa1 zheeld@{0%D8mP1v|3|ibeh(&N7&`B}5^w`qMnFt_6%kCD8A6^!?$!*GQ2*ZDT-JZB zoF1uq(Z-JWYd&&{WZ{?>db49?4d=}tc+ZPgWl^T{)g&$P5`Fl87$k*~1oubW^MAx*qHSyxX zLDjZb^r@qN_6+Oyl6_F)H&7$GyA|7)#s>AtF?N8dOL4$mch(CEHdy1Hf4eT$Z}Z?+ zJc3wGCJJ>d1P8T$^2+bQCo*&7%kuU=&?Gn@QisChD*a}IDvHJz{{4#WGC?0ExW=#x zWdx`@$6~=X6f!ptqzoo`B&SAYC$*6EceNG>)Bepd+5a8M+8z0-Lg)tOBaAt!l7S0` z9%&uXG$ix=Lf(!wu+<@32#%2K7cCN(N%p&eVdLm#$HS-sOqSznBZW!)#~ z1KapQ*eA1pJZ7GKomS77#AQkI3tD23abmNTr(r74$Wth>iGST3W~5o1C5^_dh^=x&%ty4W*XA{#L#4^RdDEgG96ux<#Gt3itS zVmU>BT1R%6S0K#-x!}?SdEiaJ)+L?aVRQB%PRYIY2K#aN0&T@rbNtKmjna^(Ujb22 zLr(IT9`XGTu+~YNKpBONVTUt-=2RbM2_X~9*0 z|Itob7Y1Gm2RmYuFVFxlf{?)qOnPD-2P`hgf$h1lhk%OC#td*{-W3PfKOAEK|D~AY z0m5Z4_Ttn+ZGc7vtzB>K`eD1C$ti1Kw> zx=tBAV~qL{7MEFcp!PP%GrNK@9uVYzuvI447u;4VQou(P1oCTu#kb*Dsn`!7*;G5~ zQek8cnkUg~v6+@QTO>%GjOq3$;76WkH!ph{x)@Wwvef{XWsD>!pM3cA^#+ba`})V3 zdLD)Wq57ItH(bs9-+$Z_map6H3B`?DLljtB0lD@UHzNQoBVh9L9M>077I!?I`;x8GTwJdYr`}wP$qf0gkyf!i^J=Uu}E=` z3inh%D@;4Ph8V3^F1Y7ny)raHM&i7t;TyAONR8q)^|8$u%6?8yeNaNr75}3NLcpERi$i}915#p^sRFIdg1jhSG7&4>dd-z@`6%sYtA zVe3^+Bm_V$#{(X9)=@XZ#IS)SzZ^EMX&dtst{*{LJA1kZa&HI}#8foplZ|`o2Zj0d z(55;}6jVL(GiHJsQ8Yg{M97dxw9xP`vn5Y$AhZQ81wWvBx)fk z01`l;Ldh+W-qO&2X20Voma7`MokSpY;v~GGQ+p3JIpHd%Hi}wfgNo&T$c2nJ^j~}6 zoY~vq2^C0>_iD^|yHdS^0Zm6}HTL4y#rAo?gi9b>#<}+__4Gd5Qz9q!c5j5j!#jlW zmc-CC<>lzEP9KPT$A8wit?|6V!E(B*dFAdG8wFG>i@3jD%Ju=qKx8dc3LkRrpevvQ5qJ)HCdg?N&|1XM4R7Fmlm@2vQ0ID4rG99xCzmZnCEI~#tt{B~~Pxe8!O<)j0@}T;2 zzo~A2f8RWZgxARH9v2jN+=~kqg>9SuTkEMCQTrZi`yQ`KTvtnz?ui5BPH$JhxP&h)4mB_a#UR-Pu|ph%_zo! zlx{3#Yz_e*Zh)1uZ^s>onlk7onWIK93evQHz}GIDh^^OOl%q&#`(T(AY&0IbPS4Mw zsY-2+rPzr`m}glq=`)vp{?iqyJI9)2l*vbzD2C^3CI9g;NpfR|Trcx)(35-D2dS70Wq`M=AU1IN3I>BD6I$VWmwU`K&TdtRsv=YClD+$4E z_yc_~j3bvaAcR!bSHzNgOmZI+JsMIu$fF0xWGQ=2N`2NCY!}kktwoYAN7YT8=?a z`hn|EdG-S#9Mwr(0)IwfM3ISGQXS|rip(KvFR|WFC{=OM7NcSH-K7E)KAo+@0)3+l za7=g|0=^kiU+?e)@R2Z=ZRI!01Tf{tB6sD+F{i`qH1AV_Jwo_S_B7(BfKLg3-RQ_2 z``5H6a;wHLY*R)*eTUo4Hz%8qurT$4xHb>QOXmJwjj~8E8&*WNk|AjvRh<*b0@i(u zMSwk|-S&1M;rHm|iLrQCFA@@BWu63ZuXH+DeNLCu0Gd%h>=Osj01_0lTND+cR&}Ab z5TRD_XsGzP(Qk;elE3jYT=DyV`)@sO1ll12h=M^h%`+dhxwRW(cMvhW~ zbFTv4Z=AFxeWi|ByU?mA_=)w6_pVTGZ`2 z-BrBYS|Hll3$}G2xff`>o}K?Kdw-f60g{=NK^oi4VU4PA64iXVyP<()?gc5O5lzL4 zh1sAc@$%Y1X_YY5CfVB->$#22h6`NbML_&=(o_l5Hwwk2?{?2Q*d*D{)5%P#Y8A-^ zGuNpmbC1+^r%$JUqh|BU7}VGLyYPwg&-)}r&}KCnB;YGEUC7xmi{FBq;3P4=Tn({F z!AER3t;-7*96>Z0I3=X3(HP+Kh9E)bX>YokY3k9}AQW;6El1O?9c0z0ks{E{Vuh6_ zQUbn)0d)!BUPzM#{*M)<6Bht$5|qPoCJLKWfKUkTW8^r0rgKeNz&I`vXIJ(K+rc}f z#ZmJ}F=*m>$E+jz2YgMGYerlXS^Y|EK0bh62wA~?Dn2v$8epjFR_ho%5)QoSNx9-gJL)hrf#Ds*Iod5f19nEIoB7OijmdpC4ijcC9 zOHa2tYadmAfg_h>?-2f7~xDSlOu`XK`m@v`#2( zzG7k)bfqmx&{P#!{IFa?4rInYKQ(GJG!u z5W#kTFS@=p7lkf1t2B^zE5l`(k>l_l=pBDkeBcwfw$`zcy54*DDm;7el4qA06VX!Ri|nWsH90q4Pr}ll7UU(Vnjlje>*t zv4!onMPyy;5uKZWi0sS;uz7EP#{xck(NxxdslsR`z;x=pJg6?{%W6;vaX@E_>qQNv z)lbPRFJ!g}wk6E`a(Lek2VG#OLz7k`>jBc(JbzsvNYoVuVF+!~bW7tcxk<1YeV6daXdmXJfA=Q*x6`Un%j2B)fw&BMC`l#R#HB;%(87IvLdD0~|>p+&i0y#bFkkP*F8C+RKUT!>$*3NMC(-A^I#Uii|p^oH_5KZ}N2yq)vk z@_@RG<)fPZ%T_rLLeH?q@YcA0xpG6P+#Q^}D<&WyFa^G9e_0^_?<4Wm<8K6Jm~k*i z9sg>3xp~V)+$|is>H%o*bE3`!6N!hPZ;Tf;8Bk!!(X5&W=Wxx7vTTHyU^tKPw6QN= zj8$>rcYCM}AE+AU3!hd*HF4cg5iaNG)1$EvDj@Zu!<21eF}+BZ^a&1swd!>PZ4bPf z{JkR`MjN#jZXXr$-|JDp@{ph_{a@F_Hm4LE;s)>(>Fqlmj5yU6yJAR^tG?G!*MfO3 z0DN9Y+0?`=`F8gp)&BhckL6#hT9WhF)#c({<;FwLf*NU5*gi0JrkH31v%EH8C&nqn z3`vtRjLYBXhp&BoLDH{(zcfs)Mz{4YP;C)(n-qaz`wxixLA_aCcDP8pJ40XmA@8;M z!QXY8_OgC|;UfKFlO8??U*PM9hsw$(LU-HKul8_*57I?jA(@h2YT6>c(9L{>JDu5; zC#aTyw>x8uQ_e!3C2fgq0}Bx=dRA=Xkt0JH3=>?DM{dB8S zeq-$|3BFa$eYdO62uVp0(=4x2h>A5cp=XXEwc6xF;&XTuqe?tTe<2;88eF+0F}AyC zHb!Ej#YR>=2$pAm_{&ep2m#1oJ#FYtmHOixRW_+z3=`KgJ-hRuj-C<2e#e`Ow73Pa zJ0JA)&ijfv+wqeheO40&H8GeBl4}fkKf|0JmD*1M3h!t*t!Luu8FR}7*#(Yak>dFb zrs^|%8u5VbG9o@+C~s+gH7oRQ0I9i;6hB4qB*=LJ&he$PcJ8L>mZ=0Pg4#qII>}a_A_gbs?L@W%z0%RK zv}T_;0C9@nG_0iLYr$9_9mTiWGj#)(GJTLD#q3GR(Ag|CXGOHwTvl?Revd9}$`;;-m0ki2wSZH%*{rTygsoCINktNG4V7KU|V zFMLtaXSROrI+gk^?->()>JoU4Gt)R=VPLw9kSu6_oK8Ry9wrl&0FT^MPjg2eejeJ} z>K=6~z0QsAErz~d3jDPesH~WKyX?#w35UoPxZ1`3+rL_+$V?J) zx0$nl?5KY3%b%LimOz5Mi+Z+2gqPZSf&<~RDeQ5Eow-`s5Ddd0vRN*B$ER$%V@-&x z?0VS|9o7Gcn(^I#4${jzc%QtAjvxza0WK zN#M272^FRn_3fa25OE8&HM?=6`fECzx5q4MdgSLfD$~9iTwM%3+(JSj3deM2ryrQe z6TB;zU_9FyfWjR1$-%v9y3owvgBNPHd4ov8Jyd!~RqVDPr%dO6HKK@`W*zaP{xMng=~)4*>qZ&N+Q%-Glb3g| zcg9@XI&gvOO<}iUG0n5@Zt8I%3dH)xLXzCG_@ZDI;M4Hka4IB5cTFT<;!Qihmn|vw zgPitn-nUW3P#)xc<2lUz%(E5Pg<2af|CeDuYcyv~Vw6P*f;?muT0z zFqXr391m^>x&i2aBpU+zGH$bf70ANoc z2MH*a;=GBYE?@Z}t$wh9l<_vHKn&o+*l?E)-Gt7A9E4?}SNnjr`sR3_F7Y+Cq7Zri zkOdFv_^2qQjKNul>FQ8EXsIxNO_kMGEqmRt4M~fe;Gl3+SuHuC??>3JlK%R7Uz37O z)gtPh$5wAZ)QBFwl4+ym(ef(0H4v8Ofbdr*3x%_~m9ydqr^ip7M zCObjA!G*SR^t1&?6M|cSzZbD7@9$Rk1i^3ecXto&F2Mr9gFC^3UCudg zeP7*Q_s2~2dV2NKtGf2=U9)=kdP@KHV$0Q-^ajxbA0gq6eu`G1QOb#xk@gsZkaD7q zCXN1T${#A4UMn~pJOwGcgdY08H($F}BtO)@s~_7;&#>lC{Z-t_zd{E~ z=P1lhu!FzNI0SEber(ELLVPAQ^=89gA^9ecbtqmgLX^taofP=mZJ@tMjlhRn z?h)!SgZ6+#aRhiqTf#XWR69iz9%Jc;Ln1TC{0*reF?+9yf^SX(hdfRrO@QG_ASm#) z?%2EQkj;KhcBS`m2yf@07L_O`5)Vuwke<_)b4WzrX|XcFpOE%&>X@dJ-8vf6lWop< zbjcWGW)d0&%_a-vD5c2B`kjtcxp0&wzJL+FbYjoW??qjFdBfgD6a$f*`@d@)Gl!0Sr>@X$CA{lW&=_^ELp6*E6gcY3R2<5Lh2Pa(Lo zg2w52&vQ_5r}}U*VOve!%H+1hhi2B|Or>|a!+Zt(%h^cdj39X!V*s~{tf)aFWFDgx z8egPVBt=#&_VI<2&;sr5P?~8Ka2P9leF(W4`oVOnZ-qzMQo#*~QoV2@Ff%97&f&9c zp*KSQ)NpvO8~TJeAD}mvRp|o7E<{l9a&y7jDEFhodb!ESzg*%YNPVJt`m|~hGhNi+ za!VlW+6ZzX4(4h^L(q&#=};wvbl^19L6Gkld2E*IsW9I^IBRe$gH#Y^SxL$$u}12+dRqO69bPj zz4!8<%f5lGekkRewxi|ikn45DIMyl> zw`T3KPEB){4m>s`_-VPAgX}mH>+Joz$;#ksbU#_J4qE(3E{JB+_Xk02UD}U;P4iFi zVLqj19XC2Vmx$)STBq`KFTS5_c!VS#TZUoJRRC5|=;ybxHkYAh*fgs?dKa14_CR?senZ3Q_P~FNsCJ@ zX6gnJL#|}u6s#(Wf(=;kK*KBu6l%Tr%UreQ}=az!mnm~B_YYt zsn@;R?=p%`?Ypf|fppJ3;0ltQ^)P%x5fJ1Q8ID6&E8#^c<9ORR zkSO~nM()5^^yWASjH|jnv4OZ9_e(n7IkEnp0C}l00-L@4Wmw`fv117o)GgMQ!V-z)zM9NgFJpVY;Pn*Ew1_k zQ*N5`A3W?}&o1u-4ES?FfN0>S_h9Xgl~NRS0H7GC<&hqaOvCI3`?~0d$dCXVHfWTV zK(N)3ZipU~tYUuV;mdqUFU(Ta6_={?Y$zINn;F{;u1kavvpiPF^e!%#Gc7fLGh5Ds?jRc>j z$aTEZa8Z+AA3)BI*-ATb*tO{~5Gy~*{!FxP?aXFE6XNt%wm8s&D}F2tuslQPaoP*Z zqIlv!kWT?=loAORXAOLUyB+#-@O6^w!t?kmAej8fQRP~t(p%PG4>9x7Z+c(vWUZ)z zO=M@D8J6y-UNtY;Bcq|Je2iyYlN_JPOkuq$&IW$x^kdB%o>?32*D zy4n6_BKBPl{3eFQ{;d5>15X<;buOw+MT##z?i79VRU56aC zsK_>mLzGo`yL2GMFWH+W``w4z$Vx8?!n<-)k$AO`-*WHpU3AO&181y3EAkaGJtT?p zVkzH~s*+fsI;huXR(`BlKv{gx5iVIWWA}x{rsX6vow2_gsFXDIItLQybJofL>JYT?MpJ3sdBahlxb

LsqsZKleB1k3}@ zwZ^XT$%YoN$`$F04%RlLgu>;kQ@3j|v#=(8pl!SHCBULhZ%r0>r&G#LV%Xp2>f{(n zXU1rMiZag$jE@YR3{j^`H1gMhe7KxaYhUe|Q%c@ULgMjaWj~io&634X_^RNQasxVV z$Da7DRDKz*;5ahiQo8rEJg=!#HjwSYC0nCq05)pAMjeApRmc$Cc#6SW8Gi~YGsh9t z!U2?m$|D}mi_BZTDQtq=#+sPFfu5?^giiHxUx6TxZIkPGj9|w8n4wpDR6+x& zvi`BA=&o*k?o;fWf$rG5%7Jp^!hb?xOssoR?u?tWRr`< zpU7t45};S<2s6F!d`c%I--=V`zO>Fg62^<%6TTwj8fuX`?5_@V0#GnEInk!v+!;e8 z*ZHLM+jMutC!FNeYsFvO)r`uxnL^|6DX@B zKSwR|r>tg><&?zsX+W(`nYeI$w;p_>m^>PP^r^0Y^puM>hR=^7sjE+R!)hVypYw~y z?OjkFRLOce`h!1G}cO(6a8R1 zDMu%YM;>)~O5^kKD^@`~&o}X~UP;Jhcpgnvj90>z;O0I=A_mqv)6;^QdoX>9XY_`O zB@2(kJz1M0mF#N8%-gxG>$R3+Y=RIMO<@Zo?IpgMcAsAg_2OFyQj0Sv?$-cw^RoJ> zP%N6(b$kwjm;AIueWlhkaoVh^MRZV^4}Czk3P`veewn+RldWvkd?eedSoL2_}t1 zzlvBVM>y$6W|`et1+G}p-sH$f4vaallA)d8UhQFa0^Eh6Qk{xv(JYhT5t$V#-%+EH zp{S}D6YoPd0V-2v9G4wu&8c2dv5&b5(Sq&Ox=*eUbENlw_g8{HuLDjLw)a zX0Ei1-O*E5bn*Lqd3|ozH5js5eX|yN#qmB-Ebwaz5>%Bdx#0-wC`Q=U^&_4%~UjkozZ6&R{zS8^X@9 z$JC^pdx|>{W{=jsd{>{AC(GWj)A%hg3M(Puzo>Xb$$;U_4iU~|rjhEg#bpDq0<0Y% z=_UBKQu00yplX-FoFzdo@Hi`)J(j_@7ARDh8csQu*dbM|jZ{Xv;ak)6^@;%P*4i-w z$D#g^;DH#zWt7i_%#_EYqAU1!fNB#snPLz(V^nYa=7$F{s&O+P-)-U|q`2F+ZsNAk z^o%SVic4jqU#T7>$lMidU#*D;t?ZC^Y{SWKPQFPaoVYlFs(x# z2pJ&=XCKpHDW`zRYx-MNz=2ZU`#XqnuOZ(44=Kb#E_3h*KE933J}lz~@^)5Xi3jX) zCzSR*q%_6e4%va)W!SNU`@jWa)2)oz9jE9A+Q$+s&t!YtMwN=v7;cjkqBGY9IW ze1E^|n+;>Xw(!OCv(?%8^XO%InB8YJx;C}!{lQcb$Q9oI8Tb7&{H9r5>v7B>nKMUkc}x=9&-wO2n^ z=0-aA1hHif``Ow7v1x+gcIfx;#9`dk3tk9t{%;evE7WrReV~0bqB^n6%sRyPD0Gd$ zZW+K4>5=MdZ+>5^H(C-XBG6e*bQl6CgI|N=f=@ua5~pb~6*^ae=h-2LxZI6{I&za2 zb;Rov@e(@EOj3IPw)0M*m@IqO2zcYc52b&w&QbGJ8+FdcfsfIB-|~%=H6(D+*b2@X zzqeo!e=yT=o^lBZ&;QF}(VRen`2ry7cJA_5A9J8u^bt3Otclyfsd8)p-uC5Wc1_Fv zr?ybT`<`vZ#SZqnW+TcogJoNH%d||00a8&7&7N{+&TyF%Cq~c@v&kX`V z;ED4W1)fv*ktl22@ELxxuC-&rx2m;Ey}?mDkq`NKedeCEAhXRxh=T3IVWiKAYKKCX zGtAjZY^p^mw)~!M1#n+~c(EE*PL(n@Kx)}(J33?x^}+@(9qFrZ6-~Kn=S#buLq>oK zL_T5etjulP_b#<=jQfs*A4@un@&>nmIm zW_0PNsna6i)!37{AbN}Z1!u%`FCEE{!8lu;LZNSO|=pbN43oN+9ApY7qtx|0iPiR8H(_L(07 zjQY1q?EI;*$k-fWPI=sq{Qrm_fAq$*Bw5d9>m2`x!{;Ys3LJc^t337dM~A~Xk+#UB9RHp7%MQW9pr~6M>1pUZd-|k5!gFAUoKeN( zZe0Xi*|-*?30BQH#z!SbQP@|VC(cLb>#|v+)*Q0D7}1{y)JH}A?b0(*@JrQ0k@x^^ zL{3_iiAYr#qWMmJ+-v!Asway^_?5SWD=rWh zj+f_OVda)LVP$D;C_W<)4|?KGjnzWZNtrDP&&db=uX`4jDkcYN0DkM9gr&l43CyEn zbAIdoPnNl57>Al3{AT`-3|X9dmIIo}4a94CBkPlZ=i~>syy-Wq>%6r%{$+%+_S2xY z(7&fSt9rx!NArduhP|2p(fsG4Ap^Q|c*FRhltUmqsM0J*tfjaGqzezv!N&)!IR(*T z@$s_**c8kiEZwYtTs-`oiP*^WkW)cxS3K$ZjT@%FI}V+x)sH@+b_gRE@vtFnF^U() zgiVD8d-3}sn}*%qKVr&3=zpwY$R2}H80bnEnJO61%N=Bgl}F{I^|f^mX_(&Q`5npm zV&)Wc0NN9)Vj4aN#^G&Mz}o<2yXvt=#eT;K&dlrw!#b2*F{(?+5pHj)K{RKnGSmlA z1PiMY5-$#!K#@H#a0M|j$*RILm2$rRMoHy(IK)ISy((j$#{~3q zdX$UgBw?iBa}K^OYcRrM78nPqX22I17mW2doif@Nmcs>XyKtS1Zo0UYHgXpOW{kv3 zH>E$ApmunUEcT@48hI1%LU6?4np@G$Y@MorR3S{9*pb{{W<@{Na>4HL;s>Y&THrEP z7+X{J(V+kf$F|pvfxsy;!VngqD11WWVmjkCUFkHTu6D${&P;@KP@sz)P)BVAVT?Oh zzeKQdBskWoPNmm!26^U?*`bG4Bp%M}gtQbz<0Mnk0V6)t7Wro&WEEN037dxaavnAk z-a(csvZgbsR?q4Nhs(^UJKF=J)1L}K!d@9nej?VVgC@fvz{PG#1Zy9Pr89yuJwXq6mMTf!ir}4;7rKXOk9blGy^Ry#f((qNOm8%m zKMllpj_8q)-2H>$^T8YtpV1y%?A5d2`hE$v!zLqeCaijl*s1Bk372EMNP}72l|$M$=@% zZ8JGqyJi*LuSFm5>Yw`TzPOjQ$<~UD-cFCz$z^{YwWFI)%UbPSbu+f6NW|3+%(u6f ztoA$(M7BhI)nfEtyG&Of<)t5N=TtoC4!?BFAEIe}hZH3sExDM>9eu>Qv$)=|Q0n~g z;Zm72Qv4pS?0{@aIM`hLyNYhDI8?QYeF5pS>Cq*Ju?$Q*LB*Z?CIflPJm&UU)(5VT z)(<+(4P{=G20|bEHXxZS(EaGw_uGy7*;VUH1uGJn5QFT=;*h~sA>PBB+AcAbu^UaB zh?L}`d`Knb`E7n!Fm5xB&un?=v5|NVS38TiLtNCOZfx@sv-I(*POOHncC1UihjJ<7 zZyR}TpI|+}4X$64gJ*wRYisF>$DAI27_01Rb6?DawF*6v*jv-xf6V$?+-pm zk6pt^c_&T97rvx2%U+TKc{~!)<|cEvKB}zS^f_9rcwA=H=)W{+6L7G+DI}Y;j9wW{ zfT*H-qD$@Xhul?o_z7xFS?u^Dpgu^>hlN$aXH6S3dD$c(HP;(zJl#bs;1wHsT$`fP zv>4V5x}h(;_|XCR;mSj-VG-49oEOp{G^wIqZ|0-tQuwV7G*zAz^=R&3 zbFL$e6`m00xlX)13C92XSgsAc6r<-Wg3vi3)LDHhIsM}{<7b0JkQ>rlnue+LlilwF z2`loc3HTw#e*CtO3>`XY0wz;R@5TAx%$$ym?r_IWi*9fP9>S>#8KZVTV{cK10USBuJCSo`w_cK|G`?Mt?#d1|=AY6VEY_KM4|h)P zP58)p$DcJ60%A~y!useIK78ZJy@Tk!>9*WdqY$A<7p&N{cj72lo>M3bG#b96=be>% z7p8k8X?vP-^@^k;D2==l$2R0|`=?scpNL4n-H(X&Wo>42qG@LHhyA&8=2^{ej8lTf zPHCr8rmPmHk*Z#mbtJ*9UJg~Vic)MOEu5q#xus?ogC*FX#^TAC%L#(1I>nGkV&63J zp@Qo7snokIjQ6#9W~FBFP3K(R$n1!i!r%$fdsm`;4-1{!pJsvZ{qvV?xcspobW6UpqAr^{re zM@1lKJm*$dEx@}%<^%&*Q!gP((k}^C+7r-yqY;TL16epwrte*lHywg^3XVXj;zYY- zh}9NK;pHrC0Pov=Wx=xFfRNXSi-^7KgmRfWxjmLnVBaQTQ7*q34!v0*4KcG2;is`Y z^LVTRYKw6ETy7y6NwLXpSaq8Zsz#Zs^4|PT5{YR7wrtKd^+*kZrA?3@l`R4D^@~Im zZG=4%NX7iFFYL&DRF54bmt^c@~W_WI*38S)YVw}W0V#24-^`V$x; z1@swKE~$m1TMV99MUfCZ^Gb2L+1;o0+*hPAZiz&G+=v+IFji@fUG1w*gyhiJ8SAV2 z%6e*yp|!3300RjoE`SH!i+2kL@U5Z;f-my@rP^8U3DI zgM)TwRvEp(S)kIl?xjv5QjH1m_mmGAn!m(Kay__BwUto~`LoDKrM+B+HK_yw^Dvr5 z?m*CLgI;Uav9UX(tV*ys*RyT0=$CGvEX15m{;PAadh%v_SO2*aY9TJR8O6OK;8;5x zgMxWhJ~$@1Dn>d&c3npET6{R3az5!hQs$iHKbK4zooIGZsM5DPm*{V8tvyG*37R{3 zELO};eyY1Kf8Z#5ss>v3friq4iI|w4Fl1f(ZM3~nw5ky9LJsoxZ54g(VN@~h-a18_ zqZKkPH7qX}|CBl;mxLr<%;0;e7?-dl z40fd%aZQ5MW_}A{otHgy>FBP_ZiLfd*o|>SX z&PSg*o~gcKR*(f3jVJHkjI?S)+Nd4aiiW=9=WLs4HJh~&oEDk2k{Pz5+D^^_Nk6pE8>wuNgoip3}Rj00pP^)??sWRQTMU_kVQp|&MBf8 zmP;}NQc(=WFunyN7-4Vx0nR#)xIA1%(|u+voFoXh`(A`cxPPl^5W9`qAoV=NUCpf@ zI1Bko=Dc~!jBRtL>S#9UGiHkFQ(Wg3W<~ZF#kTrHGLl`&NxvnS00IBYcazk^ClAm)XD) zahc`kC#Ogb#0_RiMs@RIb~nU*yuD&98Aw#RU_{*RM1XB>muZ7D)itINw9-GbTg zT*4V4Mxm@7m}bIgA)0u8Y@Tc&$pi#)yje$W5-# zBP=Rg#8=C~+16k=WYyd;ua#($qs9CKBCBgRB8|=7+^@Ff<1uuOz*OrogRWBQe|{np z5tP%aV#1NX@u%jp^XV@~R4o4w1vFm8W--c?q z&n%(h8y(v!6vF(EdD=01rw=YX`*hYH(dlNck1KL0D9E0tqml2{N9Z9Sx33W;(PJEw zLOy%EGmDz=PyG~#Ww@_A$G?JFI|#Q5KIRxrY+XDV&u3@6n^kU48+}{rKVhG>E&l@4PNbGyq6_!5_W{t+i` zFfn%1AkuJvoPqmrTFnhRlhHDP6DgCIkL=X0CQ)NrTogg0`Oh@?rs^B+zy0tbT-Vx~A3X@3 z1s^ZBrn{d9{?6*66E^n!y?m#aYT$C8adS<~<@Wi5{@0US3_rAw4oWF8bx*tkKa104 z#}{YBW%Zx$_5WP&L4MCmW1iOqRQ@WaDCMdTAWhMMLS@!-}w{+ojVZCX-GPYaZn;WKCc@3CDsa9}{#_!Oo90bZ-D+#$NqR>j*9@)E z8RJG>VPJh#l!DZ$onG%@4YrW-Gi0-mK84#ac zUMDLwBg`BO`2ytsh{V;beF&R|?JjB~3(h0^=IyNbL62nQDSH1nEBWWK(_K^I-Dy*! zTD9Nv(alx?g|_@E=9X$f3eBFJPy5A^jdduI%XlQj-nGE_8R;-wfa+H~>-i_?h8+(d zz_G(8C1Pc~E|FJ_3PmB=1@j{K_em@Z-{|bkCw^Y@rZac)OGh_*u?-ZW4UKit%3b7$JQX4v`VzO?eBuPFJ| zX!|ZaI{c+{E8KQDwr2JtQ-1e=*US`wJlC}xe8_PBljK&5;m@7lE5R>CIJ4CRvaeQO zbPT2p6h$3}(Vq*d?FL?9qp6G40p<>7u5K>oP-|QuDjYxm|ChC5hF120B3mXqK!*XGS(Ba{@IFcV}sbINV$YE)dVc!Ne!qG;9!QAZJ?Eidov4DB#z+gHC0GpztnS`;M zIgnmLfCJ3I^?$iQ9pPy;M7V+U>gHNN1#1s;;F}94n~bBqxrvLpCj-#d$=J=x)!Z29 zVeaB;?dSmHVdZ4yW&j8a|FhbTCN=;rF!-NTAPFHCAAn8D+Qrok$i@EuCk5Ggp|h0u zjF9izx{hl6SOL>D7u3HN98QP~L7@nFpXGy64027HFoP`QX=IcWg-^OSh*o8@NIyWU zLlLg{H`cm{;@IdU846LP=xq_Hp5d`OXZ}zG*J_|%^cCQ3N}y;2Vu&%I!X+!q)Nh8) ziQXwUpfV&;1|iS6g@%fp9cZTkXHZ0N=pg`jViEc|7;((NLX(HyI|KDqQMyTpYemSjToK|$+$*(pl1@K@0%)-z%SoPVTV z(Gw`BO0q1->e147lX6wkpAn2_5bNXnw1TUE}iKr^G98z9{;KTxEd|x`3y8qto%lwHePV}yUJY1NQ8xpC1 zf2r8A8^D?U=>3t8U+Cre>R{n(Lhqma-s9PmL5XXMsa)+8% zk5ogv_>NCIs}C(i?`Palg6k7q6}HIOhq`h~udu z@^m3cv4EryuzlL__e#_fIBUfiXQ_~G3;wOd>2PQ1{ow565+KD~qeSe#qAkSJXk-1v z%KYnvd0I&+4r4PI-1+pClhf1fcBZz$f-R9i1#(^6kTF5Zr{#r@ zWb1l{m{j9ZER!kv`UK3A7|h9#wVdC>$8jO^ypiVaUy)lLiCa1Hxav|} z=7szeptMg3_WtmS(H%3DnZo=19kZ276bcky@c0EO*5eK$Yhq@f-26V^LL|k%v2s&Y z+2+k5P57D+Q)+CTm)vW{>!~SO|5$116}0dkyS8SZD-+}0!-JnImW}{HcG<294;!q4GB~HA zei4)u$`Sc>g{u$A$bSHR?Eh&kMKw*F-)6Zpb} zfnL*FpAlak0x8baa^TY@zBExW@4i$G`pdjse{3I;wBxQ(d`d*mfVe)v5wvn}>?fG@ zG*rQ!!-UE#=J9?T@RyMtpljt`$|9kDA&JQb9JBh0t~pTkEib*5n+0&VhN0E_CXJnyW@y>$P|xsw*JLkaic#sk zz8yJYwJBp)uq$I;uo`1@Vr>ulqjM`|@`&9pGc`uqv&eRwD0)7%-m>)SjQp=Z{17c) zf8miGm!MaFlQa95Y8a_&l~6dGQC07-&I?_1A>qn8VkY5gRCDTBj#p~>khAbxzHV`= zgVrR(wMewU)AqQ|)Rf^^XU@ySRG&CQ!Fwg)%DFUMRroZi?Dv|nVbglLmz_wU)T}89 z+*nG|Xo0nCTBimJ!|=izD|Yp-<^k%*@|(p0`_8Jx4#g5-Bx>C`uSj+l208~jdE#@X za?tMq7CU*t`WhWa+00}<=V*60=d_?376u62S$SlJ9@n{!YBTzBg3E01dZw4f+k^?N zvUJp;NZwxvkc)IwyTTbZ60TU}!`kuY2M3!ANeP-8eg1Qs)P$={XyJFROz>RM;4QMV z-L<%CmJ`-y8!d4(&HC8*faz-O=KaT8L4j*T(XcG5!six)QCFOtJx(BwUjVXv>)+u{ zq7^z4dYv)`If*u1mv9#*;qFt4aBmoQZGEB+mU>P?DxVfzpLOrjKK2{`@ypg-`}%9P zVVs3oZrxSJg%KY`K+gKj+%zbzyQk1$QQ%d0Y|e9jRpr%(N5D4~Lh(te;bnDe_iW|u z^XPSZn!EJzkw3jN=5p`~8F~H{=GTfS0hCe(gbT;T2{m{}3xsfSap?ot)U18Xfp1L! zntNydW^w$_k^t%oa)CL-`6W4|cqG`lCD|qT zz})B@*x9-M+q?rU$lIxZCLO+f%n_pipZ?(| z({VUYQ?kqz)BzNQi80{Gp|TVu3DYb8m5U)(n4urSBdEoGM@#46Wd2k_Tko_phxm?F z9iO&~(q=9!Qc4jmJ=KZ|>HKbbFY&c)e{KIE%QXauLQWS9#FlCG0_Eb!h+tO+H7TQk zlmX_o7?4GAoUuGORpocqr4eX$fjaMklYUhJ%6C>DO|(#L1EsG#3W&=QD&aexcn(4X z_|QVY2>V9DQr<-N!TLRXLU6d?(N-j@(63lhrCRG$E`n(i1bGjON1@B+pZClSJY%n(tZ_39;z54qy1$+oA<4pxb|S9G># zq56JIK`!(mRApX&jDZWT+9XRX+&Qnd3kG~J`U#8<&89-Nn794p2gyf=(Lq1_I*DZj zE_e5kgB;Tj65U)@V#yNR?z27*8;i`{WGxB;hG|@P+-hSI5>;H13QlFZiE z%^+kY#tIxQ)!Ns1G4g!1CW;wD46QKx#$tVW@{1qPEsc<-T+HQ}ufL@xJ9RD%P4>dM znr#^-IPLKYaJ@XOkZ52Buq0fxl~j(-DW`Fm9Rq8k&DA9ZYG;EtE~f zVg1-_P+wfAG@4%TljOxzA$^Lr7@;AK{sSVG6}r@oUU(SxdctUJ?Nc{U?qluq+hgtW zNDHV^KOSpN!+2gBm0W_3^SRS}QYun4XK?3==e=AhH~_QxNz1m{im@zP3N6(dkb7yA&j)1~o`wtgaYKCl zgUf_)gdWRo5@bP%KT##*9%tCJ|}i1Egc40k{1o9&71uGIw;K|6HAEI}SbKVjHznHC)1W zdq5rMGNRu5!hxIHTgq0hj4ok8$M8B}Cl zZbhk|LCY}WZ0y5d2CN$K;tfo0w79P3!ZS0TSU7xegI{s--2%Er`dSPs9YccNt|;lv z_*Upq6;z^Ck`U%`K-w59e3Otg!k91!wnX^mko-Em714)F@cY8Q5vm@^mIxV+_RxT*9V5c*E1ML4r_UZN?M!n&- zQAG#^jW0rbagjd#)0k+agX_`<4EA5DeO^a@L6&htd;3!X^~R(nL*?S(<^g~}lAoji F{|78s0)zkn diff --git a/README.txt b/README.txt index c02e95bf..6cae505d 100644 --- a/README.txt +++ b/README.txt @@ -137,7 +137,7 @@ Table of Contents │ slip39 -q --secret "seven replace great luggage fox rent general tower guess inside smile sing" └──── - SLIP39-2024-05-15+09.56.19-ETH-0x6E6268F14B922cb924C7683A415B30C2bf967000.pdf + SLIP39-2024-11-05+12.20.57-ETH-0x6E6268F14B922cb924C7683A415B30C2bf967000.pdf <./images/SLIP39-backup-BIP39.png> @@ -371,14 +371,14 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:21 slip39 It is recommended to not use '-s|--secret '; specify '-' to read from input - │ 2024-05-15 09:56:21 slip39 It is recommended to not use '-w|--wallet '; specify '-' to read from input - │ 2024-05-15 09:56:21 slip39.layout ETH m/44'/60'/0'/0/0 : 0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1 - │ 2024-05-15 09:56:21 slip39.layout BTC m/84'/0'/0'/0/0 : bc1q9yscq3l2yfxlvnlk3cszpqefparrv7tk24u6pl - │ 2024-05-15 09:56:21 slip39.layout DOGE m/44'/3'/0'/0/0 : DN8PNN3dipSJpLmyxtGe4EJH38EhqF8Sfy - │ 2024-05-15 09:56:21 slip39.layout LTC m/84'/2'/0'/0/0 : ltc1qe5m2mst9kjcqtfpapaanaty40qe8xtusmq4ake - │ 2024-05-15 09:56:26 slip39.layout Writing SLIP39-encoded wallet for 'SLIP39' to: SLIP39-2024-05-15+09.56.23-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf - │ SLIP39-2024-05-15+09.56.23-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf + │ 2024-11-05 12:20:59 slip39 It is recommended to not use '-s|--secret '; specify '-' to read from input + │ 2024-11-05 12:20:59 slip39 It is recommended to not use '-w|--wallet '; specify '-' to read from input + │ 2024-11-05 12:20:59 slip39.layout ETH m/44'/60'/0'/0/0 : 0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1 + │ 2024-11-05 12:20:59 slip39.layout BTC m/84'/0'/0'/0/0 : bc1q9yscq3l2yfxlvnlk3cszpqefparrv7tk24u6pl + │ 2024-11-05 12:20:59 slip39.layout DOGE m/44'/3'/0'/0/0 : DN8PNN3dipSJpLmyxtGe4EJH38EhqF8Sfy + │ 2024-11-05 12:20:59 slip39.layout LTC m/84'/2'/0'/0/0 : ltc1qe5m2mst9kjcqtfpapaanaty40qe8xtusmq4ake + │ 2024-11-05 12:21:04 slip39.layout Writing SLIP39-encoded wallet for 'SLIP39' to: SLIP39-2024-11-05+12.21.02-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf + │ SLIP39-2024-11-05+12.21.02-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf └──── @@ -398,8 +398,8 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:27 slip39.recovery Recovered 128-bit SLIP-39 Seed Entropy with 2 (all) of 2 supplied mnemonics; Seed decoded from SLIP-39 Mnemonics w/ no passphrase - │ 2024-05-15 09:56:27 slip39.recovery Recovered SLIP-39 secret; To re-generate SLIP-39 wallet, send it to: python3 -m slip39 --secret - + │ 2024-11-05 12:21:05 slip39.recovery Recovered 128-bit SLIP-39 Seed Entropy with 2 (all) of 2 supplied mnemonics; Seed decoded from SLIP-39 Mnemonics w/ no passphrase + │ 2024-11-05 12:21:05 slip39.recovery Recovered SLIP-39 secret; To re-generate SLIP-39 wallet, send it to: python3 -m slip39 --secret - │ ffffffffffffffffffffffffffffffff └──── @@ -418,13 +418,13 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:28 slip39 It is recommended to not use '-w|--wallet '; specify '-' to read from input - │ 2024-05-15 09:56:28 slip39.layout ETH m/44'/60'/0'/0/0 : 0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1 - │ 2024-05-15 09:56:28 slip39.layout BTC m/84'/0'/0'/0/0 : bc1q9yscq3l2yfxlvnlk3cszpqefparrv7tk24u6pl - │ 2024-05-15 09:56:28 slip39.layout DOGE m/44'/3'/0'/0/0 : DN8PNN3dipSJpLmyxtGe4EJH38EhqF8Sfy - │ 2024-05-15 09:56:28 slip39.layout LTC m/84'/2'/0'/0/0 : ltc1qe5m2mst9kjcqtfpapaanaty40qe8xtusmq4ake - │ 2024-05-15 09:56:33 slip39.layout Writing SLIP39-encoded wallet for 'SLIP39' to: SLIP39-2024-05-15+09.56.31-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf - │ SLIP39-2024-05-15+09.56.31-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf + │ 2024-11-05 12:21:05 slip39 It is recommended to not use '-w|--wallet '; specify '-' to read from input + │ 2024-11-05 12:21:05 slip39.layout ETH m/44'/60'/0'/0/0 : 0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1 + │ 2024-11-05 12:21:05 slip39.layout BTC m/84'/0'/0'/0/0 : bc1q9yscq3l2yfxlvnlk3cszpqefparrv7tk24u6pl + │ 2024-11-05 12:21:05 slip39.layout DOGE m/44'/3'/0'/0/0 : DN8PNN3dipSJpLmyxtGe4EJH38EhqF8Sfy + │ 2024-11-05 12:21:05 slip39.layout LTC m/84'/2'/0'/0/0 : ltc1qe5m2mst9kjcqtfpapaanaty40qe8xtusmq4ake + │ 2024-11-05 12:21:10 slip39.layout Writing SLIP39-encoded wallet for 'SLIP39' to: SLIP39-2024-11-05+12.21.08-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf + │ SLIP39-2024-11-05+12.21.08-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf └──── @@ -627,12 +627,12 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:34 slip39 It is recommended to not use '-s|--secret '; specify '-' to read from input - │ 2024-05-15 09:56:34 slip39 It is recommended to not use '-w|--wallet '; specify '-' to read from input - │ 2024-05-15 09:56:34 slip39.layout ETH m/44'/60'/0'/0/0 : 0xb44A2011A99596671d5952CdC22816089f142FB3 - │ 2024-05-15 09:56:34 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qcupw7k8enymvvsa7w35j5hq4ergtvus3zk8a8s - │ 2024-05-15 09:56:39 slip39.layout Writing SLIP39-encoded wallet for 'SLIP39' to: SLIP39-2024-05-15+09.56.37-ETH-0xb44A2011A99596671d5952CdC22816089f142FB3.pdf - │ SLIP39-2024-05-15+09.56.37-ETH-0xb44A2011A99596671d5952CdC22816089f142FB3.pdf + │ 2024-11-05 12:21:11 slip39 It is recommended to not use '-s|--secret '; specify '-' to read from input + │ 2024-11-05 12:21:11 slip39 It is recommended to not use '-w|--wallet '; specify '-' to read from input + │ 2024-11-05 12:21:11 slip39.layout ETH m/44'/60'/0'/0/0 : 0xb44A2011A99596671d5952CdC22816089f142FB3 + │ 2024-11-05 12:21:11 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qcupw7k8enymvvsa7w35j5hq4ergtvus3zk8a8s + │ 2024-11-05 12:21:15 slip39.layout Writing SLIP39-encoded wallet for 'SLIP39' to: SLIP39-2024-11-05+12.21.14-ETH-0xb44A2011A99596671d5952CdC22816089f142FB3.pdf + │ SLIP39-2024-11-05+12.21.14-ETH-0xb44A2011A99596671d5952CdC22816089f142FB3.pdf └──── @@ -717,12 +717,12 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:40 slip39.layout ETH m/44'/60'/0'/0/0 : 0x39E8B749aA2a8B063384d6F3Ae79E899752593fb - │ 2024-05-15 09:56:40 slip39.layout BTC m/84'/0'/0'/0/0 : bc1ql9pwvxje5v6res85adlad209222wev9urf5kkm + │ 2024-11-05 12:21:17 slip39.layout ETH m/44'/60'/0'/0/0 : 0x91bcF74C5E549d8831337Ab7688Ce4Be76E5e731 + │ 2024-11-05 12:21:17 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qn3ww5j584d5mz3aft4fd02jad3nceavrsvgukl │ ...later, after recovering SLIP-39 mnemonics... - │ 2024-05-15 09:56:40 slip39.layout ETH m/44'/60'/0'/0/0 : 0x39E8B749aA2a8B063384d6F3Ae79E899752593fb - │ 2024-05-15 09:56:40 slip39.layout BTC m/84'/0'/0'/0/0 : bc1ql9pwvxje5v6res85adlad209222wev9urf5kkm - │ SLIP39-2024-05-15+09.56.40-ETH-0x39E8B749aA2a8B063384d6F3Ae79E899752593fb.pdf + │ 2024-11-05 12:21:17 slip39.layout ETH m/44'/60'/0'/0/0 : 0x91bcF74C5E549d8831337Ab7688Ce4Be76E5e731 + │ 2024-11-05 12:21:17 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qn3ww5j584d5mz3aft4fd02jad3nceavrsvgukl + │ SLIP39-2024-11-05+12.21.17-ETH-0x91bcF74C5E549d8831337Ab7688Ce4Be76E5e731.pdf └──── @@ -743,11 +743,11 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:41 slip39 Assuming BIP-39 seed entropy: Ensure you recover and use via a BIP-39 Mnemonic - │ 2024-05-15 09:56:41 slip39.layout ETH m/44'/60'/0'/0/0 : 0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E - │ 2024-05-15 09:56:41 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qk0a9hr7wjfxeenz9nwenw9flhq0tmsf6vsgnn2 - │ 2024-05-15 09:56:44 slip39.layout Writing SLIP39 backup for BIP-39-encoded wallet for 'SLIP39' to: SLIP39-2024-05-15+09.56.44-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf - │ SLIP39-2024-05-15+09.56.44-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf + │ 2024-11-05 12:21:17 slip39 Assuming BIP-39 seed entropy: Ensure you recover and use via a BIP-39 Mnemonic + │ 2024-11-05 12:21:17 slip39.layout ETH m/44'/60'/0'/0/0 : 0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E + │ 2024-11-05 12:21:17 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qk0a9hr7wjfxeenz9nwenw9flhq0tmsf6vsgnn2 + │ 2024-11-05 12:21:20 slip39.layout Writing SLIP39 backup for BIP-39-encoded wallet for 'SLIP39' to: SLIP39-2024-11-05+12.21.20-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf + │ SLIP39-2024-11-05+12.21.20-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf └──── @@ -757,12 +757,12 @@ Table of Contents ┌──── │ echo -n "[[./$( \ - │ python3 -m slip39 -q --secret "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong" \ + │ python3 -m slip39 -q --secret "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong" \ │ )]]" │ └──── - <./SLIP39-2024-05-15+09.56.48-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf> + <./SLIP39-2024-11-05+12.21.23-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf> Note the presence of the BIP-39 recovery phrase on the cover sheet; this is recovered by round-tripping the original BIP-39 seed entropy, @@ -901,11 +901,11 @@ Table of Contents ┌──── │ │ - │ nonce: fc05f7cf1c49330fdef24c823de2419d116535a15111c9cf887c12b8 - │ 0: fc2cbbb624463cad49bdc8bb6bbe3c5a76a63a00ecdea34212c69218ce1d3235daa3241a5cd2e57e4525076db9702... - │ 1: 324424ea00b098a86ef514204d6affbd684c84a284eebb509446a06a60bf1c4bf6222daf1cf5ceab17cc4f9165e97... - │ 2: 725a0aa4cccd6d9566f131e6c770722ad0d214f50c64dfef305dc1c57348a1bf6d0f2dd295138362901e41708b4b8... - │ 3: c134c3d8211cd418c4cddc802af6454ca63e2f0e64ce0fdd4172cd0b5003d82216cd752ca049b98b7f435c05ff156... + │ nonce: 82c73bac971e9a875e08d9bbb5e33d5f6f83746c79009cbe55670fec + │ 0: ec1ceaa0c1bc3c08f243d8352b17b7f7106e7bf1d7aded3615243263f6d7e3c37e6dee49b44baa4a78da8892c49b2... + │ 1: a7e628045b69faa85578051fdf742fb0d73308c86d5b260e738c1885316d2af216e8ad430a9442cdff8026d737133... + │ 2: 727048bf40c114c0c55b57f06195ae2cce8b7c5e475ece70c6bfcef0b0b34232a6ed34027a088d35e6d482f09d532... + │ 3: d795560badad7965498978623880bbd1bae4f69edd9af4808ff6ef035fca33b3a79139375616589a32f7e2c2e7785... └──── @@ -946,7 +946,7 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:54 slip39.generator Decrypting accountgroups with nonce: 1b3da5de8cc987acd5b07b6b + │ 2024-11-05 12:21:28 slip39.generator Decrypting accountgroups with nonce: 6e6dbae443819e09a9b34161 │ 0: [["ETH", "m/44'/60'/0'", "xpub6C2y6te3rtGg9SspDDFbjGEgn7yxc5ZzzkBk62yz3GRKvuqdaMDS7NUbesTJ44FprxAE7hvm5ZQjDMbYWehdJQsyBCP3mL87nnB4cB47HGS"], ["BTC", "m/84'/0'/0'", "zpub6rD5AGSXPTDMSnpmczjENMT3NvVF7q5MySww6uxitUsBYgkZLeBywrcwUWhW5YkeY2aS7xc45APPgfA6s6wWfG2gnfABq6TDz9zqeMu2JCY"]] │ 1: [["ETH", "m/44'/60'/1'", "xpub6C2y6te3rtGgCPb4Gi89Qin7Da2dvnnHSuR9rLQV6bWQKiyfKyjtVzr2n9mKmTEHzr4rzK78LmdSXLSzvpZqVs4ussUU8NyXpt9nWWbKG3C"], ["BTC", "m/84'/0'/1'", "zpub6rD5AGSXPTDMUaSe3aGDqWk4uMTwcrFwytkKuDGmi3ofUkJ4dQxXHZwiXWbHHrELJAor8xGs61F8sbKS2JdQkLZRnu5PGktmr6F32nEBUBb"]] │ 2: [["ETH", "m/44'/60'/2'", "xpub6C2y6te3rtGgENnaK62SyPawqKvbde17wc2ndMGFWi2yAkk3piwEY9QK8egtE9ye9uoqiqs5WV3MTNCCP2qjUNDb8cmSg4ZsVnwQnkziXVh"], ["BTC", "m/84'/0'/2'", "zpub6rD5AGSXPTDMYx2sQPuZgceniniRXDK5tELiREjxfSGJENNxuQD3u2yfpRqnNE1JeH14Pa7MVGrofDJtyXw252ws9HgRcd82X2M4KzkUfpZ"]] @@ -968,16 +968,16 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:55 slip39.generator Decrypting accountgroups with nonce: c1aa51fd0f285fddc09010ab - │ --- 0 - │ ["ETH","m/44'/60'/0'","xpub6C2y6te3rtGg9SspDDFbjGEgn7yxc5ZzzkBk62yz3GRKvuqdaMDS7NUbesTJ44FprxAE7hvm5ZQjDMbYWehdJQsyBCP3mL87nnB4cB47HGS"] - │ ["BTC","m/84'/0'/0'","zpub6rD5AGSXPTDMSnpmczjENMT3NvVF7q5MySww6uxitUsBYgkZLeBywrcwUWhW5YkeY2aS7xc45APPgfA6s6wWfG2gnfABq6TDz9zqeMu2JCY"] - │ --- 1 - │ ["ETH","m/44'/60'/1'","xpub6C2y6te3rtGgCPb4Gi89Qin7Da2dvnnHSuR9rLQV6bWQKiyfKyjtVzr2n9mKmTEHzr4rzK78LmdSXLSzvpZqVs4ussUU8NyXpt9nWWbKG3C"] - │ ["BTC","m/84'/0'/1'","zpub6rD5AGSXPTDMUaSe3aGDqWk4uMTwcrFwytkKuDGmi3ofUkJ4dQxXHZwiXWbHHrELJAor8xGs61F8sbKS2JdQkLZRnu5PGktmr6F32nEBUBb"] - │ --- 2 - │ ["ETH","m/44'/60'/2'","xpub6C2y6te3rtGgENnaK62SyPawqKvbde17wc2ndMGFWi2yAkk3piwEY9QK8egtE9ye9uoqiqs5WV3MTNCCP2qjUNDb8cmSg4ZsVnwQnkziXVh"] - │ ["BTC","m/84'/0'/2'","zpub6rD5AGSXPTDMYx2sQPuZgceniniRXDK5tELiREjxfSGJENNxuQD3u2yfpRqnNE1JeH14Pa7MVGrofDJtyXw252ws9HgRcd82X2M4KzkUfpZ"] + │ 2024-11-05 12:21:29 slip39.generator Decrypting accountgroups with nonce: 5ee3a93fbccd3314c3d7adf2 + │ --- 0 + │ ["ETH","m/44'/60'/0'","xpub6C2y6te3rtGg9SspDDFbjGEgn7yxc5ZzzkBk62yz3GRKvuqdaMDS7NUbesTJ44FprxAE7hvm5ZQjDMbYWehdJQsyBCP3mL87nnB4cB47HGS"] + │ ["BTC","m/84'/0'/0'","zpub6rD5AGSXPTDMSnpmczjENMT3NvVF7q5MySww6uxitUsBYgkZLeBywrcwUWhW5YkeY2aS7xc45APPgfA6s6wWfG2gnfABq6TDz9zqeMu2JCY"] + │ --- 1 + │ ["ETH","m/44'/60'/1'","xpub6C2y6te3rtGgCPb4Gi89Qin7Da2dvnnHSuR9rLQV6bWQKiyfKyjtVzr2n9mKmTEHzr4rzK78LmdSXLSzvpZqVs4ussUU8NyXpt9nWWbKG3C"] + │ ["BTC","m/84'/0'/1'","zpub6rD5AGSXPTDMUaSe3aGDqWk4uMTwcrFwytkKuDGmi3ofUkJ4dQxXHZwiXWbHHrELJAor8xGs61F8sbKS2JdQkLZRnu5PGktmr6F32nEBUBb"] + │ --- 2 + │ ["ETH","m/44'/60'/2'","xpub6C2y6te3rtGgENnaK62SyPawqKvbde17wc2ndMGFWi2yAkk3piwEY9QK8egtE9ye9uoqiqs5WV3MTNCCP2qjUNDb8cmSg4ZsVnwQnkziXVh"] + │ ["BTC","m/84'/0'/2'","zpub6rD5AGSXPTDMYx2sQPuZgceniniRXDK5tELiREjxfSGJENNxuQD3u2yfpRqnNE1JeH14Pa7MVGrofDJtyXw252ws9HgRcd82X2M4KzkUfpZ"] └──── Then, it generates each client's sequence of addresses locally: you @@ -998,28 +998,28 @@ Table of Contents └──── ┌──── - │ 2024-05-15 09:56:56 slip39.generator Decrypting accountgroups with nonce: c755af19fb7a7dd227257f81 - │ --- 0 - │ ETH m/0/0 0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E - │ ETH m/0/1 0xd1a7451beB6FE0326b4B78e3909310880B781d66 - │ ETH m/0/2 0x578270B5E5B53336baC354756b763b309eCA90Ef - │ BTC m/0/0 bc1qk0a9hr7wjfxeenz9nwenw9flhq0tmsf6vsgnn2 - │ BTC m/0/1 bc1qkd33yck74lg0kaq4tdcmu3hk4yruhjayxpe9ug - │ BTC m/0/2 bc1qvr7e5aytd0hpmtaz2d443k364hprvqpm3lxr8w - │ --- 1 - │ ETH m/0/0 0x9176A747BA67C1d7F80AaDC930180b4183AfB5c4 - │ ETH m/0/1 0xa1409B655aC3e09eF261de00BAa4e85bD2820AA4 - │ ETH m/0/2 0xae22C13Ef5891Ed835C24Ed5090542DFa748c21F - │ BTC m/0/0 bc1q8pqnqs573vx3qdp0xp6qdqzvnvy8px24rxh9lp - │ BTC m/0/1 bc1qwtc58u4mmnxa29u8j07e6lmqpnrs38vefy3y24 - │ BTC m/0/2 bc1qg9s8qzm0lcetfv6umhlm3evtca5zsqv7elqd5s - │ --- 2 - │ ETH m/0/0 0x32A8b066c5dbD37147766491A32A612d313fda25 - │ ETH m/0/1 0xff8b88b975f9C296531C1E93d5e4f28757b4571A - │ ETH m/0/2 0xc95Bdf50CA542E1B689f5C06e2D8bAd0625Dfa23 - │ BTC m/0/0 bc1q09zpchmkcnny90ghkg76gd69dvaf57qwcsrhes - │ BTC m/0/1 bc1qjytdyw6zramwt4nvvpte93hfry2d4xhhqn0xg4 - │ BTC m/0/2 bc1qcummre0pxv5xj4gvyut0t84vfwjd6eu7r387v4 + │ 2024-11-05 12:21:29 slip39.generator Decrypting accountgroups with nonce: 322e654aae2c832c02985886 + │ --- 0 + │ ETH m/0/0 0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E + │ ETH m/0/1 0xd1a7451beB6FE0326b4B78e3909310880B781d66 + │ ETH m/0/2 0x578270B5E5B53336baC354756b763b309eCA90Ef + │ BTC m/0/0 bc1qk0a9hr7wjfxeenz9nwenw9flhq0tmsf6vsgnn2 + │ BTC m/0/1 bc1qkd33yck74lg0kaq4tdcmu3hk4yruhjayxpe9ug + │ BTC m/0/2 bc1qvr7e5aytd0hpmtaz2d443k364hprvqpm3lxr8w + │ --- 1 + │ ETH m/0/0 0x9176A747BA67C1d7F80AaDC930180b4183AfB5c4 + │ ETH m/0/1 0xa1409B655aC3e09eF261de00BAa4e85bD2820AA4 + │ ETH m/0/2 0xae22C13Ef5891Ed835C24Ed5090542DFa748c21F + │ BTC m/0/0 bc1q8pqnqs573vx3qdp0xp6qdqzvnvy8px24rxh9lp + │ BTC m/0/1 bc1qwtc58u4mmnxa29u8j07e6lmqpnrs38vefy3y24 + │ BTC m/0/2 bc1qg9s8qzm0lcetfv6umhlm3evtca5zsqv7elqd5s + │ --- 2 + │ ETH m/0/0 0x32A8b066c5dbD37147766491A32A612d313fda25 + │ ETH m/0/1 0xff8b88b975f9C296531C1E93d5e4f28757b4571A + │ ETH m/0/2 0xc95Bdf50CA542E1B689f5C06e2D8bAd0625Dfa23 + │ BTC m/0/0 bc1q09zpchmkcnny90ghkg76gd69dvaf57qwcsrhes + │ BTC m/0/1 bc1qjytdyw6zramwt4nvvpte93hfry2d4xhhqn0xg4 + │ BTC m/0/2 bc1qcummre0pxv5xj4gvyut0t84vfwjd6eu7r387v4 └──── You'll notice that, after this elaborate exercise of generating @@ -1443,6 +1443,10 @@ Table of Contents │ ] └──── + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + Valid random 12-word mnemonics: 6.56% + Or, about: 1 / 15.2 + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Sure enough, about 1/16 random 12-word phrases are valid BIP-39 mnemonics. OK, we've got the contents of the BIP-39 phrase dialed in. How is it used to generate accounts? @@ -1466,6 +1470,10 @@ Table of Contents │ ] └──── + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 512-bit seed: b6a6d8921942dd9806607ebc2750416b289adea669198769f2… + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 4.1.3 BIP-39 Seed to Address ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ @@ -1642,9 +1650,9 @@ Table of Contents │ ) 2>&1 └──── ┌──── - │ 2024-05-15 09:57:09 slip39.recovery BIP-39 Language detected: english - │ 2024-05-15 09:57:09 slip39.recovery Recovered 512-bit BIP-39 secret from english mnemonic - │ 2024-05-15 09:57:09 slip39.recovery Recovered BIP-39 secret; To re-generate SLIP-39 wallet, send it to: python3 -m slip39 --secret - + │ 2024-11-05 12:21:40 slip39.recovery BIP-39 Language detected: english + │ 2024-11-05 12:21:40 slip39.recovery Recovered 512-bit BIP-39 secret from english mnemonic + │ 2024-11-05 12:21:40 slip39.recovery Recovered BIP-39 secret; To re-generate SLIP-39 wallet, send it to: python3 -m slip39 --secret - │ b6a6d8921942dd9806607ebc2750416b289adea669198769f2e15ed926c3aa92bf88ece232317b4ea463e84b0fcd3b53577812ee449ccc448eb45e6f544e25b6 └──── @@ -1658,26 +1666,26 @@ Table of Contents │ ) 2>&1 | tail -20 └──── ┌──── - │ 2024-05-15 09:57:09 slip39 8 tadpole 20 spine 32 worthy 44 earth 56 thorn - │ 2024-05-15 09:57:09 slip39 9 testify 21 living 33 amuse 45 fumes 57 bulb - │ 2024-05-15 09:57:09 slip39 10 photo 22 story 34 radar 46 withdraw 58 yield - │ 2024-05-15 09:57:09 slip39 11 editor 23 sheriff 35 worthy 47 ceiling 59 album - │ 2024-05-15 09:57:09 slip39 12 spew 24 species 36 graduate 48 activity - │ 2024-05-15 09:57:09 slip39 6th 1 glen 13 moisture 25 radar 37 fiber 49 elbow - │ 2024-05-15 09:57:09 slip39 2 cause 14 testify 26 premium 38 survive 50 necklace - │ 2024-05-15 09:57:09 slip39 3 decision 15 flame 27 acne 39 single 51 forward - │ 2024-05-15 09:57:09 slip39 4 spider 16 include 28 emphasis 40 capture 52 smug - │ 2024-05-15 09:57:09 slip39 5 academic 17 home 29 deal 41 blimp 53 museum - │ 2024-05-15 09:57:09 slip39 6 romantic 18 ruin 30 western 42 response 54 custody - │ 2024-05-15 09:57:09 slip39 7 bracelet 19 desktop 31 watch 43 cylinder 55 plastic - │ 2024-05-15 09:57:09 slip39 8 enemy 20 ounce 32 fused 44 quantity 56 fantasy - │ 2024-05-15 09:57:09 slip39 9 smirk 21 cleanup 33 diploma 45 unfold 57 slavery - │ 2024-05-15 09:57:09 slip39 10 clay 22 frequent 34 beam 46 laser 58 repair - │ 2024-05-15 09:57:09 slip39 11 senior 23 taught 35 visitor 47 sprinkle 59 lamp - │ 2024-05-15 09:57:09 slip39 12 bedroom 24 artwork 36 capital 48 welcome - │ 2024-05-15 09:57:09 slip39.layout ETH m/44'/60'/0'/0/0 : 0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E - │ 2024-05-15 09:57:09 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qk0a9hr7wjfxeenz9nwenw9flhq0tmsf6vsgnn2 - │ SLIP39-2024-05-15+09.57.09-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf + │ 2024-11-05 12:21:41 slip39 8 lend 20 umbrella 32 phantom 44 tofu 56 step + │ 2024-11-05 12:21:41 slip39 9 sheriff 21 center 33 platform 45 scatter 57 screw + │ 2024-11-05 12:21:41 slip39 10 insect 22 ranked 34 alive 46 unhappy 58 criminal + │ 2024-11-05 12:21:41 slip39 11 prune 23 admit 35 exclude 47 visitor 59 texture + │ 2024-11-05 12:21:41 slip39 12 spend 24 solution 36 nuclear 48 replace + │ 2024-11-05 12:21:41 slip39 6th 1 wavy 13 pile 25 activity 37 numerous 49 frequent + │ 2024-11-05 12:21:41 slip39 2 thorn 14 flavor 26 tension 38 story 50 uncover + │ 2024-11-05 12:21:41 slip39 3 decision 15 forbid 27 segment 39 surprise 51 seafood + │ 2024-11-05 12:21:41 slip39 4 spider 16 numerous 28 muscle 40 nervous 52 width + │ 2024-11-05 12:21:41 slip39 5 acid 17 goat 29 famous 41 thunder 53 orbit + │ 2024-11-05 12:21:41 slip39 6 knife 18 typical 30 club 42 dwarf 54 loud + │ 2024-11-05 12:21:41 slip39 7 injury 19 dress 31 game 43 salary 55 fortune + │ 2024-11-05 12:21:41 slip39 8 glimpse 20 harvest 32 distance 44 scene 56 hamster + │ 2024-11-05 12:21:41 slip39 9 install 21 perfect 33 soul 45 birthday 57 friendly + │ 2024-11-05 12:21:41 slip39 10 distance 22 beaver 34 aquatic 46 building 58 endless + │ 2024-11-05 12:21:41 slip39 11 blimp 23 zero 35 genius 47 lying 59 shrimp + │ 2024-11-05 12:21:41 slip39 12 damage 24 depart 36 umbrella 48 black + │ 2024-11-05 12:21:41 slip39.layout ETH m/44'/60'/0'/0/0 : 0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E + │ 2024-11-05 12:21:41 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qk0a9hr7wjfxeenz9nwenw9flhq0tmsf6vsgnn2 + │ SLIP39-2024-11-05+12.21.41-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf └──── This `0xfc20..1B5E' address is the same Ethereum address as is recovered on a Trezor using this BIP-39 mnemonic phrase. Thus, we can @@ -1720,9 +1728,9 @@ Table of Contents │ ) 2>&1 └──── ┌──── - │ 2024-05-15 09:57:10 slip39.recovery BIP-39 Language detected: english - │ 2024-05-15 09:57:10 slip39.recovery Recovered 128-bit BIP-39 entropy from english mnemonic (no passphrase supported) - │ 2024-05-15 09:57:10 slip39.recovery Recovered BIP-39 secret; To re-generate SLIP-39 wallet, send it to: python3 -m slip39 --secret - + │ 2024-11-05 12:21:41 slip39.recovery BIP-39 Language detected: english + │ 2024-11-05 12:21:41 slip39.recovery Recovered 128-bit BIP-39 entropy from english mnemonic (no passphrase supported) + │ 2024-11-05 12:21:41 slip39.recovery Recovered BIP-39 secret; To re-generate SLIP-39 wallet, send it to: python3 -m slip39 --secret - │ ffffffffffffffffffffffffffffffff └──── @@ -1740,26 +1748,26 @@ Table of Contents │ ) 2>&1 | tail -20 └──── ┌──── - │ 2024-05-15 09:57:11 slip39 5 destroy 12 music 19 tactics - │ 2024-05-15 09:57:11 slip39 6 stadium 13 wrote 20 tricycle - │ 2024-05-15 09:57:11 slip39 7 clock 14 step - │ 2024-05-15 09:57:11 slip39 5th 1 elder 8 mother 15 preach - │ 2024-05-15 09:57:11 slip39 2 entrance 9 elephant 16 home - │ 2024-05-15 09:57:11 slip39 3 decision 10 actress 17 mineral - │ 2024-05-15 09:57:11 slip39 4 snake 11 nuclear 18 raspy - │ 2024-05-15 09:57:11 slip39 5 disaster 12 species 19 depict - │ 2024-05-15 09:57:11 slip39 6 grill 13 hanger 20 cowboy - │ 2024-05-15 09:57:11 slip39 7 huge 14 pants - │ 2024-05-15 09:57:11 slip39 6th 1 elder 8 hanger 15 transfer - │ 2024-05-15 09:57:11 slip39 2 entrance 9 resident 16 jewelry - │ 2024-05-15 09:57:11 slip39 3 decision 10 olympic 17 prevent - │ 2024-05-15 09:57:11 slip39 4 spider 11 terminal 18 hormone - │ 2024-05-15 09:57:11 slip39 5 boundary 12 sack 19 predator - │ 2024-05-15 09:57:11 slip39 6 unkind 13 change 20 burden - │ 2024-05-15 09:57:11 slip39 7 genius 14 trial - │ 2024-05-15 09:57:11 slip39.layout ETH m/44'/60'/0'/0/0 : 0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1 - │ 2024-05-15 09:57:11 slip39.layout BTC m/84'/0'/0'/0/0 : bc1q9yscq3l2yfxlvnlk3cszpqefparrv7tk24u6pl - │ SLIP39-2024-05-15+09.57.11-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf + │ 2024-11-05 12:21:42 slip39 5 bulb 12 practice 19 space + │ 2024-11-05 12:21:42 slip39 6 fraction 13 airline 20 adequate + │ 2024-11-05 12:21:42 slip39 7 express 14 dramatic + │ 2024-11-05 12:21:42 slip39 5th 1 national 8 fraction 15 elite + │ 2024-11-05 12:21:42 slip39 2 sister 9 teaspoon 16 river + │ 2024-11-05 12:21:42 slip39 3 decision 10 inside 17 benefit + │ 2024-11-05 12:21:42 slip39 4 snake 11 learn 18 midst + │ 2024-11-05 12:21:42 slip39 5 change 12 cylinder 19 shaped + │ 2024-11-05 12:21:42 slip39 6 round 13 plan 20 crush + │ 2024-11-05 12:21:42 slip39 7 sister 14 stick + │ 2024-11-05 12:21:42 slip39 6th 1 national 8 humidity 15 prospect + │ 2024-11-05 12:21:42 slip39 2 sister 9 knit 16 trial + │ 2024-11-05 12:21:42 slip39 3 decision 10 mailman 17 peaceful + │ 2024-11-05 12:21:42 slip39 4 spider 11 scout 18 voice + │ 2024-11-05 12:21:42 slip39 5 artist 12 racism 19 round + │ 2024-11-05 12:21:42 slip39 6 preach 13 curious 20 glimpse + │ 2024-11-05 12:21:42 slip39 7 pregnant 14 tactics + │ 2024-11-05 12:21:42 slip39.layout ETH m/44'/60'/0'/0/0 : 0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1 + │ 2024-11-05 12:21:42 slip39.layout BTC m/84'/0'/0'/0/0 : bc1q9yscq3l2yfxlvnlk3cszpqefparrv7tk24u6pl + │ SLIP39-2024-11-05+12.21.42-ETH-0x824b174803e688dE39aF5B3D7Cd39bE6515A19a1.pdf └──── Because we must tell `slip39' to that we're using the BIP-39 Mnemonic and Seed generation process to derived the wallet addresses from the @@ -1773,26 +1781,26 @@ Table of Contents │ ) 2>&1 | tail -20 └──── ┌──── - │ 2024-05-15 09:57:12 slip39 5 dough 12 resident 19 strategy - │ 2024-05-15 09:57:12 slip39 6 ruin 13 dragon 20 voice - │ 2024-05-15 09:57:12 slip39 7 merchant 14 cinema - │ 2024-05-15 09:57:12 slip39 5th 1 visitor 8 benefit 15 roster - │ 2024-05-15 09:57:12 slip39 2 entrance 9 beyond 16 jump - │ 2024-05-15 09:57:12 slip39 3 decision 10 grin 17 rebound - │ 2024-05-15 09:57:12 slip39 4 snake 11 famous 18 likely - │ 2024-05-15 09:57:12 slip39 5 blimp 12 zero 19 promise - │ 2024-05-15 09:57:12 slip39 6 victim 13 beard 20 vintage - │ 2024-05-15 09:57:12 slip39 7 deliver 14 miracle - │ 2024-05-15 09:57:12 slip39 6th 1 visitor 8 desire 15 random - │ 2024-05-15 09:57:12 slip39 2 entrance 9 permit 16 join - │ 2024-05-15 09:57:12 slip39 3 decision 10 elder 17 rainbow - │ 2024-05-15 09:57:12 slip39 4 spider 11 forbid 18 already - │ 2024-05-15 09:57:12 slip39 5 desktop 12 cowboy 19 carpet - │ 2024-05-15 09:57:12 slip39 6 knife 13 march 20 exclude - │ 2024-05-15 09:57:12 slip39 7 express 14 recover - │ 2024-05-15 09:57:12 slip39.layout ETH m/44'/60'/0'/0/0 : 0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E - │ 2024-05-15 09:57:12 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qk0a9hr7wjfxeenz9nwenw9flhq0tmsf6vsgnn2 - │ SLIP39-2024-05-15+09.57.12-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf + │ 2024-11-05 12:21:43 slip39 5 crunch 12 leaves 19 wireless + │ 2024-11-05 12:21:43 slip39 6 royal 13 analysis 20 thank + │ 2024-11-05 12:21:43 slip39 7 change 14 wrap + │ 2024-11-05 12:21:43 slip39 5th 1 capture 8 retailer 15 payroll + │ 2024-11-05 12:21:43 slip39 2 racism 9 emerald 16 move + │ 2024-11-05 12:21:43 slip39 3 decision 10 insect 17 tricycle + │ 2024-11-05 12:21:43 slip39 4 snake 11 herd 18 smell + │ 2024-11-05 12:21:43 slip39 5 behavior 12 genre 19 luxury + │ 2024-11-05 12:21:43 slip39 6 argue 13 vanish 20 upgrade + │ 2024-11-05 12:21:43 slip39 7 column 14 twin + │ 2024-11-05 12:21:43 slip39 6th 1 capture 8 costume 15 valid + │ 2024-11-05 12:21:43 slip39 2 racism 9 voter 16 involve + │ 2024-11-05 12:21:43 slip39 3 decision 10 forecast 17 energy + │ 2024-11-05 12:21:43 slip39 4 spider 11 kernel 18 detect + │ 2024-11-05 12:21:43 slip39 5 dilemma 12 either 19 playoff + │ 2024-11-05 12:21:43 slip39 6 deal 13 island 20 lunar + │ 2024-11-05 12:21:43 slip39 7 main 14 clinic + │ 2024-11-05 12:21:43 slip39.layout ETH m/44'/60'/0'/0/0 : 0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E + │ 2024-11-05 12:21:43 slip39.layout BTC m/84'/0'/0'/0/0 : bc1qk0a9hr7wjfxeenz9nwenw9flhq0tmsf6vsgnn2 + │ SLIP39-2024-11-05+12.21.43-ETH-0xfc2077CA7F403cBECA41B1B0F62D91B5EA631B5E.pdf └──── And, there we have it – we've recovered exactly the same Ethereum and Bitcoin wallets as would a native BIP-39 hardware wallet like a Ledger @@ -2380,17 +2388,45 @@ Table of Contents 6 Building & Installing ═══════════════════════ + If you `git clone git@github.com:pjkundert/python-slip39.git' and have + the source code, you can use the supplied GNU `make' targets to create + a venv Virtual Environment and build then install. + The `python-slip39' project is tested under both homebrew: ┌──── - │ $ brew install python-tk@3.9 + │ $ brew install python-tk@3.12 + │ $ PY3=python3.12 make venv + │ ... + │ (python-slip39-13.0.0-usr-darwin-cpython-312) bash-3.2$ + └──── + + and using [the official python.org/downloads installer]. It is also + supported under Nix (optionally prefixed with a `TARGET\=py310' and/or + `NIX_OPTS\'""= to avoid –pure and gain access to locally installed + applications like emacs, but using the nix-supplied Python3 + interpreter): + ┌──── + │ $ make nix-venv + │ ... + │ *** Activating /Users/perry/src/python-slip39-13.0.0-nix-darwin-cpython-312 VirtualEnv for Interactive /bin/bash + │ (python-slip39-13.0.0-nix-darwin-cpython-312) Perrys-MBP:python-slip39 perry$ └──── - and using [the official python.org/downloads installer]. Either of these methods will get you a `python3' executable running - version 3.9+, usable for running the `slip39' module, and the + version 3.12+, usable for running the `slip39' module, and the `slip39.gui' GUI. + To manually create your own venv and install from pypi using the + Python 3.9 to 3.12 (+ TK if using the GUI) you have at hand: + ┌──── + │ $ python3.12 -m venv python-slip39-venv + │ $ . ./python-slip39-venv/bin/activate + │ (python-slip39-venv) [you@yourhost src]$ python3 -m pip install slip39[gui] + │ ... + │ (python-slip39-venv) [you@yourhost src]$ python3 -m slip39.gui + └──── + [the official python.org/downloads installer] diff --git a/default.nix b/default.nix new file mode 100644 index 00000000..7bbe5e5c --- /dev/null +++ b/default.nix @@ -0,0 +1,77 @@ +{ pkgs ? import ./nixpkgs.nix {} }: + +with pkgs; + +let +in +{ + py313 = stdenv.mkDerivation rec { + name = "python313-with-pytest"; + + buildInputs = [ + cacert + git + gnumake + openssh + python313Full + python313Packages.pytest + python313Packages.tkinter + ]; + }; + + py312 = stdenv.mkDerivation rec { + name = "python312-with-pytest"; + + buildInputs = [ + cacert + git + gnumake + openssh + python312Full + python312Packages.pytest + python312Packages.tkinter + ]; + }; + + py311 = stdenv.mkDerivation rec { + name = "python311-with-pytest"; + + buildInputs = [ + cacert + git + gnumake + openssh + python311Full + python311Packages.pytest + python311Packages.tkinter + ]; + }; + + py310 = stdenv.mkDerivation rec { + name = "python310-with-pytest"; + + buildInputs = [ + cacert + git + gnumake + openssh + python310Full + python310Packages.pytest + python310Packages.tkinter + ]; + }; + + py39 = stdenv.mkDerivation rec { + name = "python39-with-pytest"; + + buildInputs = [ + cacert + git + gnumake + openssh + python39Full + python39Packages.pytest + python39Packages.tkinter + ]; + }; +} diff --git a/nixpkgs.nix b/nixpkgs.nix new file mode 100644 index 00000000..7880ec3d --- /dev/null +++ b/nixpkgs.nix @@ -0,0 +1,4 @@ +import (fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/refs/tags/23.11.tar.gz"; + sha256 = "1ndiv385w1qyb3b18vw13991fzb9wg4cl21wglk89grsfsnra41k"; +}) diff --git a/requirements-gui.txt b/requirements-gui.txt index 83543d6b..c9551f11 100644 --- a/requirements-gui.txt +++ b/requirements-gui.txt @@ -1 +1 @@ -pysimplegui ==4.59.0 +pysimplegui >=5.0.0,<5.1 diff --git a/requirements-invoice.txt b/requirements-invoice.txt index 103438c6..237ff415 100644 --- a/requirements-invoice.txt +++ b/requirements-invoice.txt @@ -5,6 +5,7 @@ requests >=2.20, <3 # Update to 0.9.1 w/ type deduction w/ missing/empty support #tabulate >=0.9.1,<1 +tabulate @ git+https://github.com/pjkundert/python-tabulate.git@python-slip39#egg=tabulate dkimpy[ed25519] >=1.0.5,<2 diff --git a/requirements.txt b/requirements.txt index 60c58e0a..f5da13b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,8 @@ click >=8.1.3,<9 crypto-licensing >=3.3.2,<4 cx_Freeze >=6.12 ; sys_platform == "win32" fpdf2 >=2.7.6,<3 -hdwallet >=2.2.1,<3 +#hdwallet >=2.3.0,<3 +hdwallet @ git+https://github.com/pjkundert/python-hdwallet.git@python-slip39#egg=hdwallet mnemonic >=0.2, <1 qrcode >=7.3 shamir-mnemonic >=0.2.2,<1 diff --git a/setup.py b/setup.py index 2068dcb4..6dd3a53c 100644 --- a/setup.py +++ b/setup.py @@ -171,8 +171,6 @@ "slip39.recovery": "./slip39/recovery", "slip39.generator": "./slip39/generator", "slip39.gui": "./slip39/gui", - # Until tabulate fixes empty cell type deduction, separators - "slip39.tabulate": "./slip39/tabulate", } package_data = { diff --git a/shell.nix b/shell.nix new file mode 100644 index 00000000..aab28b37 --- /dev/null +++ b/shell.nix @@ -0,0 +1,19 @@ +{ pkgs ? import ./nixpkgs.nix {} }: + +let + targets = import ./default.nix { + inherit pkgs; + }; + targeted = builtins.getEnv "TARGET"; + selected = targeted + pkgs.lib.optionalString (targeted == "") "py312"; +in + +with pkgs; + +mkShell { + buildInputs = lib.getAttrFromPath [ selected "buildInputs" ] targets; + + shellHook = '' + echo "Welcome to the Python ${selected} environment!" + ''; +} diff --git a/slip39/communications.py b/slip39/communications.py index c75bc846..1951ed11 100755 --- a/slip39/communications.py +++ b/slip39/communications.py @@ -31,8 +31,7 @@ from email import utils, message_from_file, message_from_string from email.mime import multipart, text -#from tabulate import tabulate -from .tabulate import tabulate +from tabulate import tabulate from .util import is_listlike, commas, uniq, log_cfg, log_level diff --git a/slip39/invoice/artifact.py b/slip39/invoice/artifact.py index 94aab89d..1194a8c8 100644 --- a/slip39/invoice/artifact.py +++ b/slip39/invoice/artifact.py @@ -28,7 +28,7 @@ from calendar import monthrange import fpdf -from .. import tabulate +import tabulate from crypto_licensing.misc import get_localzone, Duration diff --git a/slip39/invoice/artifact_test.py b/slip39/invoice/artifact_test.py index ae5b2f4d..ca6e5340 100644 --- a/slip39/invoice/artifact_test.py +++ b/slip39/invoice/artifact_test.py @@ -8,8 +8,7 @@ import pytest -#import tabulate -from .. import tabulate +import tabulate from crypto_licensing.misc import parse_datetime diff --git a/slip39/invoice/multipayout.py b/slip39/invoice/multipayout.py index 0efeb276..5c721576 100644 --- a/slip39/invoice/multipayout.py +++ b/slip39/invoice/multipayout.py @@ -25,8 +25,7 @@ from web3 import Web3 # noqa F401 -#from tabulate import tabulate -from ..tabulate import tabulate +from tabulate import tabulate from ..util import remainder_after, fraction_allocated, commas from .ethereum import Chain, Contract, contract_address # noqa F401 diff --git a/slip39/layout/pdf.py b/slip39/layout/pdf.py index e59e4b84..f9ac60d9 100644 --- a/slip39/layout/pdf.py +++ b/slip39/layout/pdf.py @@ -727,6 +727,7 @@ def write_pdfs( printer = printer, orientation = pdf_orient, paper_format = pdf_paper, + double_sided = double_sided, ) results[pdf_name] = details diff --git a/slip39/layout/printer.py b/slip39/layout/printer.py index 37aa5f8e..7c411157 100644 --- a/slip39/layout/printer.py +++ b/slip39/layout/printer.py @@ -87,12 +87,14 @@ def printer_output( printer = None, orientation = None, paper_format = None, + double_sided = None, ): """Output raw binary data directly to the printer, eg. ... | lpr -P "Canon_G6000_series" -o media=Letter -o sides=one-sided -o job-sheets=secret """ + double_sided = True if double_sided is None else bool( double_sided ) if sys.platform == 'darwin': command = [ '/usr/bin/lpr', '-o', 'sides=one-sided' ] command_input = binary @@ -114,6 +116,9 @@ def printer_output( # -o orientation-requested=N Specify portrait (3) or landscape (4) orientation N = { 'p': 3, 'l': 4 }[orientation.lower()[0]] command += [ '-o', f"orientation-requested={N}" ] + if double_sided: + # Regardless of desired orientation, layout assumes long-edge double-sided + command += [ '-o', "sides=two-sided-long-edge" ] log.info( f"Printing via: {' '.join( command )}" ) subproc = subprocess.run( diff --git a/slip39/tabulate/__init__.py b/slip39/tabulate/__init__.py deleted file mode 100644 index 2e93b0ee..00000000 --- a/slip39/tabulate/__init__.py +++ /dev/null @@ -1,2814 +0,0 @@ -"""Pretty-print tabular data.""" - -import warnings -from collections import namedtuple -from collections.abc import Iterable, Sized -from html import escape as htmlescape -from itertools import chain, zip_longest as izip_longest -from functools import reduce, partial -import io -import re -import math -import textwrap -import dataclasses - -try: - import wcwidth # optional wide-character (CJK) support -except ImportError: - wcwidth = None - - -def _is_file(f): - return isinstance(f, io.IOBase) - - -__all__ = ["tabulate", "tabulate_formats", "simple_separated_format"] -try: - from .version import version as __version__ # noqa: F401 -except ImportError: - pass # running __init__.py as a script, AppVeyor pytests - - -# minimum extra space in headers -MIN_PADDING = 2 - -# Whether or not to preserve leading/trailing whitespace in data. -PRESERVE_WHITESPACE = False - -_DEFAULT_FLOATFMT = "g" -_DEFAULT_INTFMT = "" -_DEFAULT_MISSINGVAL = "" -# default align will be overwritten by "left", "center" or "decimal" -# depending on the formatter -_DEFAULT_ALIGN = "default" - - -# if True, enable wide-character (CJK) support -WIDE_CHARS_MODE = wcwidth is not None - -# Constant that can be used as part of passed rows to generate a separating line -# It is purposely an unprintable character, very unlikely to be used in a table -SEPARATING_LINE = "\001" - -Line = namedtuple("Line", ["begin", "hline", "sep", "end"]) - - -DataRow = namedtuple("DataRow", ["begin", "sep", "end"]) - - -# A table structure is supposed to be: -# -# --- lineabove --------- -# headerrow -# --- linebelowheader --- -# datarow -# --- linebetweenrows --- -# ... (more datarows) ... -# --- linebetweenrows --- -# last datarow -# --- linebelow --------- -# -# TableFormat's line* elements can be -# -# - either None, if the element is not used, -# - or a Line tuple, -# - or a function: [col_widths], [col_alignments] -> string. -# -# TableFormat's *row elements can be -# -# - either None, if the element is not used, -# - or a DataRow tuple, -# - or a function: [cell_values], [col_widths], [col_alignments] -> string. -# -# padding (an integer) is the amount of white space around data values. -# -# with_header_hide: -# -# - either None, to display all table elements unconditionally, -# - or a list of elements not to be displayed if the table has column headers. -# -TableFormat = namedtuple( - "TableFormat", - [ - "lineabove", - "linebelowheader", - "linebetweenrows", - "linebelow", - "headerrow", - "datarow", - "padding", - "with_header_hide", - ], -) - - -def _is_separating_line(row): - row_type = type(row) - is_sl = (row_type == list or row_type == str) and ( - (len(row) >= 1 and row[0] == SEPARATING_LINE) - or (len(row) >= 2 and row[1] == SEPARATING_LINE) - ) - return is_sl - - -def _pipe_segment_with_colons(align, colwidth): - """Return a segment of a horizontal line with optional colons which - indicate column's alignment (as in `pipe` output format).""" - w = colwidth - if align in ["right", "decimal"]: - return ("-" * (w - 1)) + ":" - elif align == "center": - return ":" + ("-" * (w - 2)) + ":" - elif align == "left": - return ":" + ("-" * (w - 1)) - else: - return "-" * w - - -def _pipe_line_with_colons(colwidths, colaligns): - """Return a horizontal line with optional colons to indicate column's - alignment (as in `pipe` output format).""" - if not colaligns: # e.g. printing an empty data frame (github issue #15) - colaligns = [""] * len(colwidths) - segments = [_pipe_segment_with_colons(a, w) for a, w in zip(colaligns, colwidths)] - return "|" + "|".join(segments) + "|" - - -def _mediawiki_row_with_attrs(separator, cell_values, colwidths, colaligns): - alignment = { - "left": "", - "right": 'style="text-align: right;"| ', - "center": 'style="text-align: center;"| ', - "decimal": 'style="text-align: right;"| ', - } - # hard-coded padding _around_ align attribute and value together - # rather than padding parameter which affects only the value - values_with_attrs = [ - " " + alignment.get(a, "") + c + " " for c, a in zip(cell_values, colaligns) - ] - colsep = separator * 2 - return (separator + colsep.join(values_with_attrs)).rstrip() - - -def _textile_row_with_attrs(cell_values, colwidths, colaligns): - cell_values[0] += " " - alignment = {"left": "<.", "right": ">.", "center": "=.", "decimal": ">."} - values = (alignment.get(a, "") + v for a, v in zip(colaligns, cell_values)) - return "|" + "|".join(values) + "|" - - -def _html_begin_table_without_header(colwidths_ignore, colaligns_ignore): - # this table header will be suppressed if there is a header row - return "\n" - - -def _html_row_with_attrs(celltag, unsafe, cell_values, colwidths, colaligns): - alignment = { - "left": "", - "right": ' style="text-align: right;"', - "center": ' style="text-align: center;"', - "decimal": ' style="text-align: right;"', - } - if unsafe: - values_with_attrs = [ - "<{0}{1}>{2}".format(celltag, alignment.get(a, ""), c) - for c, a in zip(cell_values, colaligns) - ] - else: - values_with_attrs = [ - "<{0}{1}>{2}".format(celltag, alignment.get(a, ""), htmlescape(c)) - for c, a in zip(cell_values, colaligns) - ] - rowhtml = "{}".format("".join(values_with_attrs).rstrip()) - if celltag == "th": # it's a header row, create a new table header - rowhtml = f"
\n\n{rowhtml}\n\n" - return rowhtml - - -def _moin_row_with_attrs(celltag, cell_values, colwidths, colaligns, header=""): - alignment = { - "left": "", - "right": '', - "center": '', - "decimal": '', - } - values_with_attrs = [ - "{}{} {} ".format(celltag, alignment.get(a, ""), header + c + header) - for c, a in zip(cell_values, colaligns) - ] - return "".join(values_with_attrs) + "||" - - -def _latex_line_begin_tabular(colwidths, colaligns, booktabs=False, longtable=False): - alignment = {"left": "l", "right": "r", "center": "c", "decimal": "r"} - tabular_columns_fmt = "".join([alignment.get(a, "l") for a in colaligns]) - return "\n".join( - [ - ("\\begin{tabular}{" if not longtable else "\\begin{longtable}{") - + tabular_columns_fmt - + "}", - "\\toprule" if booktabs else "\\hline", - ] - ) - - -def _asciidoc_row(is_header, *args): - """handle header and data rows for asciidoc format""" - - def make_header_line(is_header, colwidths, colaligns): - # generate the column specifiers - - alignment = {"left": "<", "right": ">", "center": "^", "decimal": ">"} - # use the column widths generated by tabulate for the asciidoc column width specifiers - asciidoc_alignments = zip( - colwidths, [alignment[colalign] for colalign in colaligns] - ) - asciidoc_column_specifiers = [ - "{:d}{}".format(width, align) for width, align in asciidoc_alignments - ] - header_list = ['cols="' + (",".join(asciidoc_column_specifiers)) + '"'] - - # generate the list of options (currently only "header") - options_list = [] - - if is_header: - options_list.append("header") - - if options_list: - header_list += ['options="' + ",".join(options_list) + '"'] - - # generate the list of entries in the table header field - - return "[{}]\n|====".format(",".join(header_list)) - - if len(args) == 2: - # two arguments are passed if called in the context of aboveline - # print the table header with column widths and optional header tag - return make_header_line(False, *args) - - elif len(args) == 3: - # three arguments are passed if called in the context of dataline or headerline - # print the table line and make the aboveline if it is a header - - cell_values, colwidths, colaligns = args - data_line = "|" + "|".join(cell_values) - - if is_header: - return make_header_line(True, colwidths, colaligns) + "\n" + data_line - else: - return data_line - - else: - raise ValueError( - " _asciidoc_row() requires two (colwidths, colaligns) " - + "or three (cell_values, colwidths, colaligns) arguments) " - ) - - -LATEX_ESCAPE_RULES = { - r"&": r"\&", - r"%": r"\%", - r"$": r"\$", - r"#": r"\#", - r"_": r"\_", - r"^": r"\^{}", - r"{": r"\{", - r"}": r"\}", - r"~": r"\textasciitilde{}", - "\\": r"\textbackslash{}", - r"<": r"\ensuremath{<}", - r">": r"\ensuremath{>}", -} - - -def _latex_row(cell_values, colwidths, colaligns, escrules=LATEX_ESCAPE_RULES): - def escape_char(c): - return escrules.get(c, c) - - escaped_values = ["".join(map(escape_char, cell)) for cell in cell_values] - rowfmt = DataRow("", "&", "\\\\") - return _build_simple_row(escaped_values, rowfmt) - - -def _rst_escape_first_column(rows, headers): - def escape_empty(val): - if isinstance(val, (str, bytes)) and not val.strip(): - return ".." - else: - return val - - new_headers = list(headers) - new_rows = [] - if headers: - new_headers[0] = escape_empty(headers[0]) - for row in rows: - new_row = list(row) - if new_row: - new_row[0] = escape_empty(row[0]) - new_rows.append(new_row) - return new_rows, new_headers - - -_table_formats = { - "simple": TableFormat( - lineabove=Line("", "-", " ", ""), - linebelowheader=Line("", "-", " ", ""), - linebetweenrows=None, - linebelow=Line("", "-", " ", ""), - headerrow=DataRow("", " ", ""), - datarow=DataRow("", " ", ""), - padding=0, - with_header_hide=["lineabove", "linebelow"], - ), - "plain": TableFormat( - lineabove=None, - linebelowheader=None, - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("", " ", ""), - datarow=DataRow("", " ", ""), - padding=0, - with_header_hide=None, - ), - "grid": TableFormat( - lineabove=Line("+", "-", "+", "+"), - linebelowheader=Line("+", "=", "+", "+"), - linebetweenrows=Line("+", "-", "+", "+"), - linebelow=Line("+", "-", "+", "+"), - headerrow=DataRow("|", "|", "|"), - datarow=DataRow("|", "|", "|"), - padding=1, - with_header_hide=None, - ), - "simple_grid": TableFormat( - lineabove=Line("┌", "─", "┬", "┐"), - linebelowheader=Line("├", "─", "┼", "┤"), - linebetweenrows=Line("├", "─", "┼", "┤"), - linebelow=Line("└", "─", "┴", "┘"), - headerrow=DataRow("│", "│", "│"), - datarow=DataRow("│", "│", "│"), - padding=1, - with_header_hide=None, - ), - "rounded_grid": TableFormat( - lineabove=Line("╭", "─", "┬", "╮"), - linebelowheader=Line("├", "─", "┼", "┤"), - linebetweenrows=Line("├", "─", "┼", "┤"), - linebelow=Line("╰", "─", "┴", "╯"), - headerrow=DataRow("│", "│", "│"), - datarow=DataRow("│", "│", "│"), - padding=1, - with_header_hide=None, - ), - "heavy_grid": TableFormat( - lineabove=Line("┏", "━", "┳", "┓"), - linebelowheader=Line("┣", "━", "╋", "┫"), - linebetweenrows=Line("┣", "━", "╋", "┫"), - linebelow=Line("┗", "━", "┻", "┛"), - headerrow=DataRow("┃", "┃", "┃"), - datarow=DataRow("┃", "┃", "┃"), - padding=1, - with_header_hide=None, - ), - "mixed_grid": TableFormat( - lineabove=Line("┍", "━", "┯", "┑"), - linebelowheader=Line("┝", "━", "┿", "┥"), - linebetweenrows=Line("├", "─", "┼", "┤"), - linebelow=Line("┕", "━", "┷", "┙"), - headerrow=DataRow("│", "│", "│"), - datarow=DataRow("│", "│", "│"), - padding=1, - with_header_hide=None, - ), - "double_grid": TableFormat( - lineabove=Line("╔", "═", "╦", "╗"), - linebelowheader=Line("╠", "═", "╬", "╣"), - linebetweenrows=Line("╠", "═", "╬", "╣"), - linebelow=Line("╚", "═", "╩", "╝"), - headerrow=DataRow("║", "║", "║"), - datarow=DataRow("║", "║", "║"), - padding=1, - with_header_hide=None, - ), - "fancy_grid": TableFormat( - lineabove=Line("╒", "═", "╤", "╕"), - linebelowheader=Line("╞", "═", "╪", "╡"), - linebetweenrows=Line("├", "─", "┼", "┤"), - linebelow=Line("╘", "═", "╧", "╛"), - headerrow=DataRow("│", "│", "│"), - datarow=DataRow("│", "│", "│"), - padding=1, - with_header_hide=None, - ), - "outline": TableFormat( - lineabove=Line("+", "-", "+", "+"), - linebelowheader=Line("+", "=", "+", "+"), - linebetweenrows=None, - linebelow=Line("+", "-", "+", "+"), - headerrow=DataRow("|", "|", "|"), - datarow=DataRow("|", "|", "|"), - padding=1, - with_header_hide=None, - ), - "simple_outline": TableFormat( - lineabove=Line("┌", "─", "┬", "┐"), - linebelowheader=Line("├", "─", "┼", "┤"), - linebetweenrows=None, - linebelow=Line("└", "─", "┴", "┘"), - headerrow=DataRow("│", "│", "│"), - datarow=DataRow("│", "│", "│"), - padding=1, - with_header_hide=None, - ), - "rounded_outline": TableFormat( - lineabove=Line("╭", "─", "┬", "╮"), - linebelowheader=Line("├", "─", "┼", "┤"), - linebetweenrows=None, - linebelow=Line("╰", "─", "┴", "╯"), - headerrow=DataRow("│", "│", "│"), - datarow=DataRow("│", "│", "│"), - padding=1, - with_header_hide=None, - ), - "heavy_outline": TableFormat( - lineabove=Line("┏", "━", "┳", "┓"), - linebelowheader=Line("┣", "━", "╋", "┫"), - linebetweenrows=None, - linebelow=Line("┗", "━", "┻", "┛"), - headerrow=DataRow("┃", "┃", "┃"), - datarow=DataRow("┃", "┃", "┃"), - padding=1, - with_header_hide=None, - ), - "mixed_outline": TableFormat( - lineabove=Line("┍", "━", "┯", "┑"), - linebelowheader=Line("┝", "━", "┿", "┥"), - linebetweenrows=None, - linebelow=Line("┕", "━", "┷", "┙"), - headerrow=DataRow("│", "│", "│"), - datarow=DataRow("│", "│", "│"), - padding=1, - with_header_hide=None, - ), - "double_outline": TableFormat( - lineabove=Line("╔", "═", "╦", "╗"), - linebelowheader=Line("╠", "═", "╬", "╣"), - linebetweenrows=None, - linebelow=Line("╚", "═", "╩", "╝"), - headerrow=DataRow("║", "║", "║"), - datarow=DataRow("║", "║", "║"), - padding=1, - with_header_hide=None, - ), - "fancy_outline": TableFormat( - lineabove=Line("╒", "═", "╤", "╕"), - linebelowheader=Line("╞", "═", "╪", "╡"), - linebetweenrows=None, - linebelow=Line("╘", "═", "╧", "╛"), - headerrow=DataRow("│", "│", "│"), - datarow=DataRow("│", "│", "│"), - padding=1, - with_header_hide=None, - ), - "github": TableFormat( - lineabove=Line("|", "-", "|", "|"), - linebelowheader=Line("|", "-", "|", "|"), - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("|", "|", "|"), - datarow=DataRow("|", "|", "|"), - padding=1, - with_header_hide=["lineabove"], - ), - "pipe": TableFormat( - lineabove=_pipe_line_with_colons, - linebelowheader=_pipe_line_with_colons, - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("|", "|", "|"), - datarow=DataRow("|", "|", "|"), - padding=1, - with_header_hide=["lineabove"], - ), - "orgtbl": TableFormat( - lineabove=None, - linebelowheader=Line("|", "-", "+", "|"), - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("|", "|", "|"), - datarow=DataRow("|", "|", "|"), - padding=1, - with_header_hide=None, - ), - "jira": TableFormat( - lineabove=None, - linebelowheader=None, - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("||", "||", "||"), - datarow=DataRow("|", "|", "|"), - padding=1, - with_header_hide=None, - ), - "presto": TableFormat( - lineabove=None, - linebelowheader=Line("", "-", "+", ""), - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("", "|", ""), - datarow=DataRow("", "|", ""), - padding=1, - with_header_hide=None, - ), - "pretty": TableFormat( - lineabove=Line("+", "-", "+", "+"), - linebelowheader=Line("+", "-", "+", "+"), - linebetweenrows=None, - linebelow=Line("+", "-", "+", "+"), - headerrow=DataRow("|", "|", "|"), - datarow=DataRow("|", "|", "|"), - padding=1, - with_header_hide=None, - ), - "psql": TableFormat( - lineabove=Line("+", "-", "+", "+"), - linebelowheader=Line("|", "-", "+", "|"), - linebetweenrows=None, - linebelow=Line("+", "-", "+", "+"), - headerrow=DataRow("|", "|", "|"), - datarow=DataRow("|", "|", "|"), - padding=1, - with_header_hide=None, - ), - "rst": TableFormat( - lineabove=Line("", "=", " ", ""), - linebelowheader=Line("", "=", " ", ""), - linebetweenrows=None, - linebelow=Line("", "=", " ", ""), - headerrow=DataRow("", " ", ""), - datarow=DataRow("", " ", ""), - padding=0, - with_header_hide=None, - ), - "mediawiki": TableFormat( - lineabove=Line( - '{| class="wikitable" style="text-align: left;"', - "", - "", - "\n|+ \n|-", - ), - linebelowheader=Line("|-", "", "", ""), - linebetweenrows=Line("|-", "", "", ""), - linebelow=Line("|}", "", "", ""), - headerrow=partial(_mediawiki_row_with_attrs, "!"), - datarow=partial(_mediawiki_row_with_attrs, "|"), - padding=0, - with_header_hide=None, - ), - "moinmoin": TableFormat( - lineabove=None, - linebelowheader=None, - linebetweenrows=None, - linebelow=None, - headerrow=partial(_moin_row_with_attrs, "||", header="'''"), - datarow=partial(_moin_row_with_attrs, "||"), - padding=1, - with_header_hide=None, - ), - "youtrack": TableFormat( - lineabove=None, - linebelowheader=None, - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("|| ", " || ", " || "), - datarow=DataRow("| ", " | ", " |"), - padding=1, - with_header_hide=None, - ), - "html": TableFormat( - lineabove=_html_begin_table_without_header, - linebelowheader="", - linebetweenrows=None, - linebelow=Line("\n
", "", "", ""), - headerrow=partial(_html_row_with_attrs, "th", False), - datarow=partial(_html_row_with_attrs, "td", False), - padding=0, - with_header_hide=["lineabove"], - ), - "unsafehtml": TableFormat( - lineabove=_html_begin_table_without_header, - linebelowheader="", - linebetweenrows=None, - linebelow=Line("\n", "", "", ""), - headerrow=partial(_html_row_with_attrs, "th", True), - datarow=partial(_html_row_with_attrs, "td", True), - padding=0, - with_header_hide=["lineabove"], - ), - "latex": TableFormat( - lineabove=_latex_line_begin_tabular, - linebelowheader=Line("\\hline", "", "", ""), - linebetweenrows=None, - linebelow=Line("\\hline\n\\end{tabular}", "", "", ""), - headerrow=_latex_row, - datarow=_latex_row, - padding=1, - with_header_hide=None, - ), - "latex_raw": TableFormat( - lineabove=_latex_line_begin_tabular, - linebelowheader=Line("\\hline", "", "", ""), - linebetweenrows=None, - linebelow=Line("\\hline\n\\end{tabular}", "", "", ""), - headerrow=partial(_latex_row, escrules={}), - datarow=partial(_latex_row, escrules={}), - padding=1, - with_header_hide=None, - ), - "latex_booktabs": TableFormat( - lineabove=partial(_latex_line_begin_tabular, booktabs=True), - linebelowheader=Line("\\midrule", "", "", ""), - linebetweenrows=None, - linebelow=Line("\\bottomrule\n\\end{tabular}", "", "", ""), - headerrow=_latex_row, - datarow=_latex_row, - padding=1, - with_header_hide=None, - ), - "latex_longtable": TableFormat( - lineabove=partial(_latex_line_begin_tabular, longtable=True), - linebelowheader=Line("\\hline\n\\endhead", "", "", ""), - linebetweenrows=None, - linebelow=Line("\\hline\n\\end{longtable}", "", "", ""), - headerrow=_latex_row, - datarow=_latex_row, - padding=1, - with_header_hide=None, - ), - "tsv": TableFormat( - lineabove=None, - linebelowheader=None, - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("", "\t", ""), - datarow=DataRow("", "\t", ""), - padding=0, - with_header_hide=None, - ), - "textile": TableFormat( - lineabove=None, - linebelowheader=None, - linebetweenrows=None, - linebelow=None, - headerrow=DataRow("|_. ", "|_.", "|"), - datarow=_textile_row_with_attrs, - padding=1, - with_header_hide=None, - ), - "asciidoc": TableFormat( - lineabove=partial(_asciidoc_row, False), - linebelowheader=None, - linebetweenrows=None, - linebelow=Line("|====", "", "", ""), - headerrow=partial(_asciidoc_row, True), - datarow=partial(_asciidoc_row, False), - padding=1, - with_header_hide=["lineabove"], - ), -} - - -tabulate_formats = list(sorted(_table_formats.keys())) - -# The table formats for which multiline cells will be folded into subsequent -# table rows. The key is the original format specified at the API. The value is -# the format that will be used to represent the original format. -multiline_formats = { - "plain": "plain", - "simple": "simple", - "grid": "grid", - "simple_grid": "simple_grid", - "rounded_grid": "rounded_grid", - "heavy_grid": "heavy_grid", - "mixed_grid": "mixed_grid", - "double_grid": "double_grid", - "fancy_grid": "fancy_grid", - "pipe": "pipe", - "orgtbl": "orgtbl", - "jira": "jira", - "presto": "presto", - "pretty": "pretty", - "psql": "psql", - "rst": "rst", - "outline": "outline", - "simple_outline": "simple_outline", - "rounded_outline": "rounded_outline", - "heavy_outline": "heavy_outline", - "mixed_outline": "mixed_outline", - "double_outline": "double_outline", - "fancy_outline": "fancy_outline", -} - -# TODO: Add multiline support for the remaining table formats: -# - mediawiki: Replace \n with
-# - moinmoin: TBD -# - youtrack: TBD -# - html: Replace \n with
-# - latex*: Use "makecell" package: In header, replace X\nY with -# \thead{X\\Y} and in data row, replace X\nY with \makecell{X\\Y} -# - tsv: TBD -# - textile: Replace \n with
(must be well-formed XML) - -_multiline_codes = re.compile(r"\r|\n|\r\n") -_multiline_codes_bytes = re.compile(b"\r|\n|\r\n") - -# Handle ANSI escape sequences for both control sequence introducer (CSI) and -# operating system command (OSC). Both of these begin with 0x1b (or octal 033), -# which will be shown below as ESC. -# -# CSI ANSI escape codes have the following format, defined in section 5.4 of ECMA-48: -# -# CSI: ESC followed by the '[' character (0x5b) -# Parameter Bytes: 0..n bytes in the range 0x30-0x3f -# Intermediate Bytes: 0..n bytes in the range 0x20-0x2f -# Final Byte: a single byte in the range 0x40-0x7e -# -# Also include the terminal hyperlink sequences as described here: -# https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda -# -# OSC 8 ; params ; uri ST display_text OSC 8 ;; ST -# -# Example: \x1b]8;;https://example.com\x5ctext to show\x1b]8;;\x5c -# -# Where: -# OSC: ESC followed by the ']' character (0x5d) -# params: 0..n optional key value pairs separated by ':' (e.g. foo=bar:baz=qux:abc=123) -# URI: the actual URI with protocol scheme (e.g. https://, file://, ftp://) -# ST: ESC followed by the '\' character (0x5c) -_esc = r"\x1b" -_csi = rf"{_esc}\[" -_osc = rf"{_esc}\]" -_st = rf"{_esc}\\" - -_ansi_escape_pat = rf""" - ( - # terminal colors, etc - {_csi} # CSI - [\x30-\x3f]* # parameter bytes - [\x20-\x2f]* # intermediate bytes - [\x40-\x7e] # final byte - | - # terminal hyperlinks - {_osc}8; # OSC opening - (\w+=\w+:?)* # key=value params list (submatch 2) - ; # delimiter - ([^{_esc}]+) # URI - anything but ESC (submatch 3) - {_st} # ST - ([^{_esc}]+) # link text - anything but ESC (submatch 4) - {_osc}8;;{_st} # "closing" OSC sequence - ) -""" -_ansi_codes = re.compile(_ansi_escape_pat, re.VERBOSE) -_ansi_codes_bytes = re.compile(_ansi_escape_pat.encode("utf8"), re.VERBOSE) -_ansi_color_reset_code = "\033[0m" - -_float_with_thousands_separators = re.compile( - r"^(([+-]?[0-9]{1,3})(?:,([0-9]{3}))*)?(?(1)\.[0-9]*|\.[0-9]+)?$" -) - - -def simple_separated_format(separator): - """Construct a simple TableFormat with columns separated by a separator. - - >>> tsv = simple_separated_format("\\t") ; \ - tabulate([["foo", 1], ["spam", 23]], tablefmt=tsv) == 'foo \\t 1\\nspam\\t23' - True - - """ - return TableFormat( - None, - None, - None, - None, - headerrow=DataRow("", separator, ""), - datarow=DataRow("", separator, ""), - padding=0, - with_header_hide=None, - ) - - -def _isnumber_with_thousands_separator(string): - """ - >>> _isnumber_with_thousands_separator(".") - False - >>> _isnumber_with_thousands_separator("1") - True - >>> _isnumber_with_thousands_separator("1.") - True - >>> _isnumber_with_thousands_separator(".1") - True - >>> _isnumber_with_thousands_separator("1000") - False - >>> _isnumber_with_thousands_separator("1,000") - True - >>> _isnumber_with_thousands_separator("1,0000") - False - >>> _isnumber_with_thousands_separator("1,000.1234") - True - >>> _isnumber_with_thousands_separator(b"1,000.1234") - True - >>> _isnumber_with_thousands_separator("+1,000.1234") - True - >>> _isnumber_with_thousands_separator("-1,000.1234") - True - """ - try: - string = string.decode() - except (UnicodeDecodeError, AttributeError): - pass - - return bool(re.match(_float_with_thousands_separators, string)) - - -def _isconvertible(conv, string): - try: - conv(string) - return True - except (ValueError, TypeError): - return False - - -def _isnumber(string): - """ - >>> _isnumber("123.45") - True - >>> _isnumber("123") - True - >>> _isnumber("spam") - False - >>> _isnumber("123e45678") - False - >>> _isnumber("inf") - True - """ - if not _isconvertible(float, string): - return False - elif isinstance(string, (str, bytes)) and ( - math.isinf(float(string)) or math.isnan(float(string)) - ): - return string.lower() in ["inf", "-inf", "nan"] - return True - - -def _isint(string, inttype=int): - """ - >>> _isint("123") - True - >>> _isint("123.45") - False - """ - return ( - type(string) is inttype - or ( - (hasattr(string, "is_integer") or hasattr(string, "__array__")) - and str(type(string)).startswith(">> _isbool(True) - True - >>> _isbool("False") - True - >>> _isbool(1) - False - """ - return type(string) is bool or ( - isinstance(string, (bytes, str)) and string in ("True", "False") - ) - - -def _type(string, has_invisible=True, numparse=True): - """The least generic type (type(None), int, float, str, unicode). - - Treats empty string as missing for the purposes of type deduction, so as to not influence - the type of an otherwise complete column; does *not* result in missingval replacement! - - >>> _type(None) is type(None) - True - >>> _type("") is type(None) - True - >>> _type("foo") is type("") - True - >>> _type("1") is type(1) - True - >>> _type('\x1b[31m42\x1b[0m') is type(42) - True - >>> _type('\x1b[31m42\x1b[0m') is type(42) - True - - """ - - if has_invisible and isinstance(string, (str, bytes)): - string = _strip_ansi(string) - - if string is None or (isinstance(string, (bytes, str)) and not string): - return type(None) - elif hasattr(string, "isoformat"): # datetime.datetime, date, and time - return str - elif _isbool(string): - return bool - elif numparse and ( - _isint(string) or ( - isinstance(string, str) - and _isnumber_with_thousands_separator(string) - and '.' not in string - ) - ): - return int - elif numparse and ( - _isnumber(string) or ( - isinstance(string, str) - and _isnumber_with_thousands_separator(string) - ) - ): - return float - elif isinstance(string, bytes): - return bytes - else: - return str - - -def _afterpoint(string): - """Symbols after a decimal point, -1 if the string lacks the decimal point. - - >>> _afterpoint("123.45") - 2 - >>> _afterpoint("1001") - -1 - >>> _afterpoint("eggs") - -1 - >>> _afterpoint("123e45") - 2 - >>> _afterpoint("123,456.78") - 2 - - """ - if _isnumber(string) or _isnumber_with_thousands_separator(string): - if _isint(string): - return -1 - else: - pos = string.rfind(".") - pos = string.lower().rfind("e") if pos < 0 else pos - if pos >= 0: - return len(string) - pos - 1 - else: - return -1 # no point - else: - return -1 # not a number - - -def _padleft(width, s): - """Flush right. - - >>> _padleft(6, '\u044f\u0439\u0446\u0430') == ' \u044f\u0439\u0446\u0430' - True - - """ - fmt = "{0:>%ds}" % width - return fmt.format(s) - - -def _padright(width, s): - """Flush left. - - >>> _padright(6, '\u044f\u0439\u0446\u0430') == '\u044f\u0439\u0446\u0430 ' - True - - """ - fmt = "{0:<%ds}" % width - return fmt.format(s) - - -def _padboth(width, s): - """Center string. - - >>> _padboth(6, '\u044f\u0439\u0446\u0430') == ' \u044f\u0439\u0446\u0430 ' - True - - """ - fmt = "{0:^%ds}" % width - return fmt.format(s) - - -def _padnone(ignore_width, s): - return s - - -def _strip_ansi(s): - r"""Remove ANSI escape sequences, both CSI (color codes, etc) and OSC hyperlinks. - - CSI sequences are simply removed from the output, while OSC hyperlinks are replaced - with the link text. Note: it may be desirable to show the URI instead but this is not - supported. - - >>> repr(_strip_ansi('\x1B]8;;https://example.com\x1B\\This is a link\x1B]8;;\x1B\\')) - "'This is a link'" - - >>> repr(_strip_ansi('\x1b[31mred\x1b[0m text')) - "'red text'" - - """ - if isinstance(s, str): - return _ansi_codes.sub(r"\4", s) - else: # a bytestring - return _ansi_codes_bytes.sub(r"\4", s) - - -def _visible_width(s): - """Visible width of a printed string. ANSI color codes are removed. - - >>> _visible_width('\x1b[31mhello\x1b[0m'), _visible_width("world") - (5, 5) - - """ - # optional wide-character support - if wcwidth is not None and WIDE_CHARS_MODE: - len_fn = wcwidth.wcswidth - else: - len_fn = len - if isinstance(s, (str, bytes)): - return len_fn(_strip_ansi(s)) - else: - return len_fn(str(s)) - - -def _is_multiline(s): - if isinstance(s, str): - return bool(re.search(_multiline_codes, s)) - else: # a bytestring - return bool(re.search(_multiline_codes_bytes, s)) - - -def _multiline_width(multiline_s, line_width_fn=len): - """Visible width of a potentially multiline content.""" - return max(map(line_width_fn, re.split("[\r\n]", multiline_s))) - - -def _choose_width_fn(has_invisible, enable_widechars, is_multiline): - """Return a function to calculate visible cell width.""" - if has_invisible: - line_width_fn = _visible_width - elif enable_widechars: # optional wide-character support if available - line_width_fn = wcwidth.wcswidth - else: - line_width_fn = len - if is_multiline: - width_fn = lambda s: _multiline_width(s, line_width_fn) # noqa - else: - width_fn = line_width_fn - return width_fn - - -def _align_column_choose_padfn(strings, alignment, has_invisible): - if alignment == "right": - if not PRESERVE_WHITESPACE: - strings = [s.strip() for s in strings] - padfn = _padleft - elif alignment == "center": - if not PRESERVE_WHITESPACE: - strings = [s.strip() for s in strings] - padfn = _padboth - elif alignment == "decimal": - if has_invisible: - decimals = [_afterpoint(_strip_ansi(s)) for s in strings] - else: - decimals = [_afterpoint(s) for s in strings] - maxdecimals = max(decimals) - strings = [s + (maxdecimals - decs) * " " for s, decs in zip(strings, decimals)] - padfn = _padleft - elif not alignment: - padfn = _padnone - else: - if not PRESERVE_WHITESPACE: - strings = [s.strip() for s in strings] - padfn = _padright - return strings, padfn - - -def _align_column_choose_width_fn(has_invisible, enable_widechars, is_multiline): - if has_invisible: - line_width_fn = _visible_width - elif enable_widechars: # optional wide-character support if available - line_width_fn = wcwidth.wcswidth - else: - line_width_fn = len - if is_multiline: - width_fn = lambda s: _align_column_multiline_width(s, line_width_fn) # noqa - else: - width_fn = line_width_fn - return width_fn - - -def _align_column_multiline_width(multiline_s, line_width_fn=len): - """Visible width of a potentially multiline content.""" - return list(map(line_width_fn, re.split("[\r\n]", multiline_s))) - - -def _flat_list(nested_list): - ret = [] - for item in nested_list: - if isinstance(item, list): - for subitem in item: - ret.append(subitem) - else: - ret.append(item) - return ret - - -def _align_column( - strings, - alignment, - minwidth=0, - has_invisible=True, - enable_widechars=False, - is_multiline=False, -): - """[string] -> [padded_string]""" - strings, padfn = _align_column_choose_padfn(strings, alignment, has_invisible) - width_fn = _align_column_choose_width_fn( - has_invisible, enable_widechars, is_multiline - ) - - s_widths = list(map(width_fn, strings)) - maxwidth = max(max(_flat_list(s_widths)), minwidth) - # TODO: refactor column alignment in single-line and multiline modes - if is_multiline: - if not enable_widechars and not has_invisible: - padded_strings = [ - "\n".join([padfn(maxwidth, s) for s in ms.splitlines()]) - for ms in strings - ] - else: - # enable wide-character width corrections - s_lens = [[len(s) for s in re.split("[\r\n]", ms)] for ms in strings] - visible_widths = [ - [maxwidth - (w - l) for w, l in zip(mw, ml)] - for mw, ml in zip(s_widths, s_lens) - ] - # wcswidth and _visible_width don't count invisible characters; - # padfn doesn't need to apply another correction - padded_strings = [ - "\n".join([padfn(w, s) for s, w in zip((ms.splitlines() or ms), mw)]) - for ms, mw in zip(strings, visible_widths) - ] - else: # single-line cell values - if not enable_widechars and not has_invisible: - padded_strings = [padfn(maxwidth, s) for s in strings] - else: - # enable wide-character width corrections - s_lens = list(map(len, strings)) - visible_widths = [maxwidth - (w - l) for w, l in zip(s_widths, s_lens)] - # wcswidth and _visible_width don't count invisible characters; - # padfn doesn't need to apply another correction - padded_strings = [padfn(w, s) for s, w in zip(strings, visible_widths)] - return padded_strings - - -def _more_generic(type1, type2): - types = { - type(None): 0, - bool: 1, - int: 2, - float: 3, - bytes: 4, - str: 5, - } - invtypes = { - 5: str, - 4: bytes, - 3: float, - 2: int, - 1: bool, - 0: type(None), - } - moregeneric = max(types.get(type1, 5), types.get(type2, 5)) - return invtypes[moregeneric] - - -def _column_type(strings, has_invisible=True, numparse=True): - """The least generic type all column values are convertible to. - - >>> _column_type([True, False]) is bool - True - >>> _column_type(["1", "2"]) is int - True - >>> _column_type(["1", "2.3"]) is float - True - >>> _column_type(["1", "2.3", "four"]) is str - True - >>> _column_type(["four", '\u043f\u044f\u0442\u044c']) is str - True - >>> _column_type([None, "brux"]) is str - True - >>> _column_type([1, 2, None]) is int - True - >>> import datetime as dt - >>> _column_type([dt.datetime(1991,2,19), dt.time(17,35)]) is str - True - - """ - types = [_type(s, has_invisible, numparse) for s in strings] - return reduce(_more_generic, types, bool) - - -def _format(val, valtype, floatfmt, intfmt, missingval="", has_invisible=True): - """Format a value according to its deduced type. Empty values are deemed valid for any type. - - Unicode is supported: - - >>> hrow = ['\u0431\u0443\u043a\u0432\u0430', '\u0446\u0438\u0444\u0440\u0430'] ; \ - tbl = [['\u0430\u0437', 2], ['\u0431\u0443\u043a\u0438', 4]] ; \ - good_result = '\\u0431\\u0443\\u043a\\u0432\\u0430 \\u0446\\u0438\\u0444\\u0440\\u0430\\n------- -------\\n\\u0430\\u0437 2\\n\\u0431\\u0443\\u043a\\u0438 4' ; \ - tabulate(tbl, headers=hrow) == good_result - True - - """ # noqa - if val is None: - return missingval - if isinstance(val, (bytes, str)) and not val: - return "" - - if valtype is str: - return f"{val}" - elif valtype is int: - return format(val, intfmt) - elif valtype is bytes: - try: - return str(val, "ascii") - except (TypeError, UnicodeDecodeError): - return str(val) - elif valtype is float: - is_a_colored_number = has_invisible and isinstance(val, (str, bytes)) - if is_a_colored_number: - raw_val = _strip_ansi(val) - formatted_val = format(float(raw_val), floatfmt) - return val.replace(raw_val, formatted_val) - else: - if isinstance(val,str) and ',' in val: - val = val.replace(',', '') # handle thousands-separators - return format(float(val), floatfmt) - else: - return f"{val}" - - -def _align_header( - header, alignment, width, visible_width, is_multiline=False, width_fn=None -): - "Pad string header to width chars given known visible_width of the header." - if is_multiline: - header_lines = re.split(_multiline_codes, header) - padded_lines = [ - _align_header(h, alignment, width, width_fn(h)) for h in header_lines - ] - return "\n".join(padded_lines) - # else: not multiline - ninvisible = len(header) - visible_width - width += ninvisible - if alignment == "left": - return _padright(width, header) - elif alignment == "center": - return _padboth(width, header) - elif not alignment: - return f"{header}" - else: - return _padleft(width, header) - - -def _remove_separating_lines(rows): - if type(rows) == list: - separating_lines = [] - sans_rows = [] - for index, row in enumerate(rows): - if _is_separating_line(row): - separating_lines.append(index) - else: - sans_rows.append(row) - return sans_rows, separating_lines - else: - return rows, None - - -def _reinsert_separating_lines(rows, separating_lines): - if separating_lines: - for index in separating_lines: - rows.insert(index, SEPARATING_LINE) - - -def _prepend_row_index(rows, index): - """Add a left-most index column.""" - if index is None or index is False: - return rows - if isinstance(index, Sized) and len(index) != len(rows): - raise ValueError( - "index must be as long as the number of data rows: " - + "len(index)={} len(rows)={}".format(len(index), len(rows)) - ) - sans_rows, separating_lines = _remove_separating_lines(rows) - new_rows = [] - index_iter = iter(index) - for row in sans_rows: - index_v = next(index_iter) - new_rows.append([index_v] + list(row)) - rows = new_rows - _reinsert_separating_lines(rows, separating_lines) - return rows - - -def _bool(val): - "A wrapper around standard bool() which doesn't throw on NumPy arrays" - try: - return bool(val) - except ValueError: # val is likely to be a numpy array with many elements - return False - - -def _normalize_tabular_data(tabular_data, headers, showindex="default"): - """Transform a supported data type to a list of lists, and a list of headers, with headers padding. - - Supported tabular data types: - - * list-of-lists or another iterable of iterables - - * list of named tuples (usually used with headers="keys") - - * list of dicts (usually used with headers="keys") - - * list of OrderedDicts (usually used with headers="keys") - - * list of dataclasses (Python 3.7+ only, usually used with headers="keys") - - * 2D NumPy arrays - - * NumPy record arrays (usually used with headers="keys") - - * dict of iterables (usually used with headers="keys") - - * pandas.DataFrame (usually used with headers="keys") - - The first row can be used as headers if headers="firstrow", - column indices can be used as headers if headers="keys". - - If showindex="default", show row indices of the pandas.DataFrame. - If showindex="always", show row indices for all types of data. - If showindex="never", don't show row indices for all types of data. - If showindex is an iterable, show its values as row indices. - - """ - - try: - bool(headers) - is_headers2bool_broken = False # noqa - except ValueError: # numpy.ndarray, pandas.core.index.Index, ... - is_headers2bool_broken = True # noqa - headers = list(headers) - - index = None - if hasattr(tabular_data, "keys") and hasattr(tabular_data, "values"): - # dict-like and pandas.DataFrame? - if hasattr(tabular_data.values, "__call__"): - # likely a conventional dict - keys = tabular_data.keys() - rows = list( - izip_longest(*tabular_data.values()) - ) # columns have to be transposed - elif hasattr(tabular_data, "index"): - # values is a property, has .index => it's likely a pandas.DataFrame (pandas 0.11.0) - keys = list(tabular_data) - if ( - showindex in ["default", "always", True] - and tabular_data.index.name is not None - ): - if isinstance(tabular_data.index.name, list): - keys[:0] = tabular_data.index.name - else: - keys[:0] = [tabular_data.index.name] - vals = tabular_data.values # values matrix doesn't need to be transposed - # for DataFrames add an index per default - index = list(tabular_data.index) - rows = [list(row) for row in vals] - else: - raise ValueError("tabular data doesn't appear to be a dict or a DataFrame") - - if headers == "keys": - headers = list(map(str, keys)) # headers should be strings - - else: # it's a usual iterable of iterables, or a NumPy array, or an iterable of dataclasses - rows = list(tabular_data) - - if headers == "keys" and not rows: - # an empty table (issue #81) - headers = [] - elif ( - headers == "keys" - and hasattr(tabular_data, "dtype") - and getattr(tabular_data.dtype, "names") - ): - # numpy record array - headers = tabular_data.dtype.names - elif ( - headers == "keys" - and len(rows) > 0 - and isinstance(rows[0], tuple) - and hasattr(rows[0], "_fields") - ): - # namedtuple - headers = list(map(str, rows[0]._fields)) - elif len(rows) > 0 and hasattr(rows[0], "keys") and hasattr(rows[0], "values"): - # dict-like object - uniq_keys = set() # implements hashed lookup - keys = [] # storage for set - if headers == "firstrow": - firstdict = rows[0] if len(rows) > 0 else {} - keys.extend(firstdict.keys()) - uniq_keys.update(keys) - rows = rows[1:] - for row in rows: - for k in row.keys(): - # Save unique items in input order - if k not in uniq_keys: - keys.append(k) - uniq_keys.add(k) - if headers == "keys": - headers = keys - elif isinstance(headers, dict): - # a dict of headers for a list of dicts - headers = [headers.get(k, k) for k in keys] - headers = list(map(str, headers)) - elif headers == "firstrow": - if len(rows) > 0: - headers = [firstdict.get(k, k) for k in keys] - headers = list(map(str, headers)) - else: - headers = [] - elif headers: - raise ValueError( - "headers for a list of dicts is not a dict or a keyword" - ) - rows = [[row.get(k) for k in keys] for row in rows] - - elif ( - headers == "keys" - and hasattr(tabular_data, "description") - and hasattr(tabular_data, "fetchone") - and hasattr(tabular_data, "rowcount") - ): - # Python Database API cursor object (PEP 0249) - # print tabulate(cursor, headers='keys') - headers = [column[0] for column in tabular_data.description] - - elif ( - dataclasses is not None - and len(rows) > 0 - and dataclasses.is_dataclass(rows[0]) - ): - # Python 3.7+'s dataclass - field_names = [field.name for field in dataclasses.fields(rows[0])] - if headers == "keys": - headers = field_names - rows = [[getattr(row, f) for f in field_names] for row in rows] - - elif headers == "keys" and len(rows) > 0: - # keys are column indices - headers = list(map(str, range(len(rows[0])))) - - # take headers from the first row if necessary - if headers == "firstrow" and len(rows) > 0: - if index is not None: - headers = [index[0]] + list(rows[0]) - index = index[1:] - else: - headers = rows[0] - headers = list(map(str, headers)) # headers should be strings - rows = rows[1:] - elif headers == "firstrow": - headers = [] - - headers = list(map(str, headers)) - # rows = list(map(list, rows)) - rows = list(map(lambda r: r if _is_separating_line(r) else list(r), rows)) - - # add or remove an index column - showindex_is_a_str = type(showindex) in [str, bytes] - if showindex == "default" and index is not None: - rows = _prepend_row_index(rows, index) - elif isinstance(showindex, Sized) and not showindex_is_a_str: - rows = _prepend_row_index(rows, list(showindex)) - elif isinstance(showindex, Iterable) and not showindex_is_a_str: - rows = _prepend_row_index(rows, showindex) - elif showindex == "always" or (_bool(showindex) and not showindex_is_a_str): - if index is None: - index = list(range(len(rows))) - rows = _prepend_row_index(rows, index) - elif showindex == "never" or (not _bool(showindex) and not showindex_is_a_str): - pass - - # pad with empty headers for initial columns if necessary - headers_pad = 0 - if headers and len(rows) > 0: - headers_pad = max(0, len(rows[0]) - len(headers)) - headers = [""] * headers_pad + headers - - return rows, headers, headers_pad - - -def _wrap_text_to_colwidths(list_of_lists, colwidths, numparses=True): - if len(list_of_lists): - num_cols = len(list_of_lists[0]) - else: - num_cols = 0 - numparses = _expand_iterable(numparses, num_cols, True) - - result = [] - - for row in list_of_lists: - new_row = [] - for cell, width, numparse in zip(row, colwidths, numparses): - if _isnumber(cell) and numparse: - new_row.append(cell) - continue - - if width is not None: - wrapper = _CustomTextWrap(width=width) - # Cast based on our internal type handling. Any future custom - # formatting of types (such as datetimes) may need to be more - # explicit than just `str` of the object. Also doesn't work for - # custom floatfmt/intfmt, nor with any missing/blank cells. - casted_cell = ( - str(cell) if _isnumber(cell) else _type(cell, numparse)(cell) - ) - wrapped = [ - "\n".join(wrapper.wrap(line)) - for line in casted_cell.splitlines() - if line.strip() != "" - ] - new_row.append("\n".join(wrapped)) - else: - new_row.append(cell) - result.append(new_row) - - return result - - -def _to_str(s, encoding="utf8", errors="ignore"): - """ - A type safe wrapper for converting a bytestring to str. This is essentially just - a wrapper around .decode() intended for use with things like map(), but with some - specific behavior: - - 1. if the given parameter is not a bytestring, it is returned unmodified - 2. decode() is called for the given parameter and assumes utf8 encoding, but the - default error behavior is changed from 'strict' to 'ignore' - - >>> repr(_to_str(b'foo')) - "'foo'" - - >>> repr(_to_str('foo')) - "'foo'" - - >>> repr(_to_str(42)) - "'42'" - - """ - if isinstance(s, bytes): - return s.decode(encoding=encoding, errors=errors) - return str(s) - - -def tabulate( - tabular_data, - headers=(), - tablefmt="simple", - floatfmt=_DEFAULT_FLOATFMT, - intfmt=_DEFAULT_INTFMT, - numalign=_DEFAULT_ALIGN, - stralign=_DEFAULT_ALIGN, - missingval=_DEFAULT_MISSINGVAL, - showindex="default", - disable_numparse=False, - colglobalalign=None, - colalign=None, - maxcolwidths=None, - headersglobalalign=None, - headersalign=None, - rowalign=None, - maxheadercolwidths=None, -): - """Format a fixed width table for pretty printing. - - >>> print(tabulate([[1, 2.34], [-56, "8.999"], ["2", "10001"]])) - --- --------- - 1 2.34 - -56 8.999 - 2 10001 - --- --------- - - The first required argument (`tabular_data`) can be a - list-of-lists (or another iterable of iterables), a list of named - tuples, a dictionary of iterables, an iterable of dictionaries, - an iterable of dataclasses (Python 3.7+), a two-dimensional NumPy array, - NumPy record array, or a Pandas' dataframe. - - - Table headers - ------------- - - To print nice column headers, supply the second argument (`headers`): - - - `headers` can be an explicit list of column headers - - if `headers="firstrow"`, then the first row of data is used - - if `headers="keys"`, then dictionary keys or column indices are used - - Otherwise a headerless table is produced. - - If the number of headers is less than the number of columns, they - are supposed to be names of the last columns. This is consistent - with the plain-text format of R and Pandas' dataframes. - - >>> print(tabulate([["sex","age"],["Alice","F",24],["Bob","M",19]], - ... headers="firstrow")) - sex age - ----- ----- ----- - Alice F 24 - Bob M 19 - - By default, pandas.DataFrame data have an additional column called - row index. To add a similar column to all other types of data, - use `showindex="always"` or `showindex=True`. To suppress row indices - for all types of data, pass `showindex="never" or `showindex=False`. - To add a custom row index column, pass `showindex=some_iterable`. - - >>> print(tabulate([["F",24],["M",19]], showindex="always")) - - - -- - 0 F 24 - 1 M 19 - - - -- - - - Column and Headers alignment - ---------------------------- - - `tabulate` tries to detect column types automatically, and aligns - the values properly. By default it aligns decimal points of the - numbers (or flushes integer numbers to the right), and flushes - everything else to the left. Possible column alignments - (`numalign`, `stralign`) are: "right", "center", "left", "decimal" - (only for `numalign`), and None (to disable alignment). - - `colglobalalign` allows for global alignment of columns, before any - specific override from `colalign`. Possible values are: None - (defaults according to coltype), "right", "center", "decimal", - "left". - `colalign` allows for column-wise override starting from left-most - column. Possible values are: "global" (no override), "right", - "center", "decimal", "left". - `headersglobalalign` allows for global headers alignment, before any - specific override from `headersalign`. Possible values are: None - (follow columns alignment), "right", "center", "left". - `headersalign` allows for header-wise override starting from left-most - given header. Possible values are: "global" (no override), "same" - (follow column alignment), "right", "center", "left". - - Note on intended behaviour: If there is no `tabular_data`, any column - alignment argument is ignored. Hence, in this case, header - alignment cannot be inferred from column alignment. - - Table formats - ------------- - - `intfmt` is a format specification used for columns which - contain numeric data without a decimal point. This can also be - a list or tuple of format strings, one per column. - - `floatfmt` is a format specification used for columns which - contain numeric data with a decimal point. This can also be - a list or tuple of format strings, one per column. - - `None` values are replaced with a `missingval` string (like - `floatfmt`, this can also be a list of values for different - columns): - - >>> print(tabulate([["spam", 1, None], - ... ["eggs", 42, 3.14], - ... ["other", None, 2.7]], missingval="?")) - ----- -- ---- - spam 1 ? - eggs 42 3.14 - other ? 2.7 - ----- -- ---- - - Various plain-text table formats (`tablefmt`) are supported: - 'plain', 'simple', 'grid', 'pipe', 'orgtbl', 'rst', 'mediawiki', - 'latex', 'latex_raw', 'latex_booktabs', 'latex_longtable' and tsv. - Variable `tabulate_formats`contains the list of currently supported formats. - - "plain" format doesn't use any pseudographics to draw tables, - it separates columns with a double space: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "plain")) - strings numbers - spam 41.9999 - eggs 451 - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="plain")) - spam 41.9999 - eggs 451 - - "simple" format is like Pandoc simple_tables: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "simple")) - strings numbers - --------- --------- - spam 41.9999 - eggs 451 - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="simple")) - ---- -------- - spam 41.9999 - eggs 451 - ---- -------- - - "grid" is similar to tables produced by Emacs table.el package or - Pandoc grid_tables: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "grid")) - +-----------+-----------+ - | strings | numbers | - +===========+===========+ - | spam | 41.9999 | - +-----------+-----------+ - | eggs | 451 | - +-----------+-----------+ - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="grid")) - +------+----------+ - | spam | 41.9999 | - +------+----------+ - | eggs | 451 | - +------+----------+ - - "simple_grid" draws a grid using single-line box-drawing - characters: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "simple_grid")) - ┌───────────┬───────────┐ - │ strings │ numbers │ - ├───────────┼───────────┤ - │ spam │ 41.9999 │ - ├───────────┼───────────┤ - │ eggs │ 451 │ - └───────────┴───────────┘ - - "rounded_grid" draws a grid using single-line box-drawing - characters with rounded corners: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "rounded_grid")) - ╭───────────┬───────────╮ - │ strings │ numbers │ - ├───────────┼───────────┤ - │ spam │ 41.9999 │ - ├───────────┼───────────┤ - │ eggs │ 451 │ - ╰───────────┴───────────╯ - - "heavy_grid" draws a grid using bold (thick) single-line box-drawing - characters: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "heavy_grid")) - ┏━━━━━━━━━━━┳━━━━━━━━━━━┓ - ┃ strings ┃ numbers ┃ - ┣━━━━━━━━━━━╋━━━━━━━━━━━┫ - ┃ spam ┃ 41.9999 ┃ - ┣━━━━━━━━━━━╋━━━━━━━━━━━┫ - ┃ eggs ┃ 451 ┃ - ┗━━━━━━━━━━━┻━━━━━━━━━━━┛ - - "mixed_grid" draws a grid using a mix of light (thin) and heavy (thick) lines - box-drawing characters: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "mixed_grid")) - ┍━━━━━━━━━━━┯━━━━━━━━━━━┑ - │ strings │ numbers │ - ┝━━━━━━━━━━━┿━━━━━━━━━━━┥ - │ spam │ 41.9999 │ - ├───────────┼───────────┤ - │ eggs │ 451 │ - ┕━━━━━━━━━━━┷━━━━━━━━━━━┙ - - "double_grid" draws a grid using double-line box-drawing - characters: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "double_grid")) - ╔═══════════╦═══════════╗ - ║ strings ║ numbers ║ - ╠═══════════╬═══════════╣ - ║ spam ║ 41.9999 ║ - ╠═══════════╬═══════════╣ - ║ eggs ║ 451 ║ - ╚═══════════╩═══════════╝ - - "fancy_grid" draws a grid using a mix of single and - double-line box-drawing characters: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "fancy_grid")) - ╒═══════════╤═══════════╕ - │ strings │ numbers │ - ╞═══════════╪═══════════╡ - │ spam │ 41.9999 │ - ├───────────┼───────────┤ - │ eggs │ 451 │ - ╘═══════════╧═══════════╛ - - "outline" is the same as the "grid" format but doesn't draw lines between rows: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "outline")) - +-----------+-----------+ - | strings | numbers | - +===========+===========+ - | spam | 41.9999 | - | eggs | 451 | - +-----------+-----------+ - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="outline")) - +------+----------+ - | spam | 41.9999 | - | eggs | 451 | - +------+----------+ - - "simple_outline" is the same as the "simple_grid" format but doesn't draw lines between rows: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "simple_outline")) - ┌───────────┬───────────┐ - │ strings │ numbers │ - ├───────────┼───────────┤ - │ spam │ 41.9999 │ - │ eggs │ 451 │ - └───────────┴───────────┘ - - "rounded_outline" is the same as the "rounded_grid" format but doesn't draw lines between rows: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "rounded_outline")) - ╭───────────┬───────────╮ - │ strings │ numbers │ - ├───────────┼───────────┤ - │ spam │ 41.9999 │ - │ eggs │ 451 │ - ╰───────────┴───────────╯ - - "heavy_outline" is the same as the "heavy_grid" format but doesn't draw lines between rows: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "heavy_outline")) - ┏━━━━━━━━━━━┳━━━━━━━━━━━┓ - ┃ strings ┃ numbers ┃ - ┣━━━━━━━━━━━╋━━━━━━━━━━━┫ - ┃ spam ┃ 41.9999 ┃ - ┃ eggs ┃ 451 ┃ - ┗━━━━━━━━━━━┻━━━━━━━━━━━┛ - - "mixed_outline" is the same as the "mixed_grid" format but doesn't draw lines between rows: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "mixed_outline")) - ┍━━━━━━━━━━━┯━━━━━━━━━━━┑ - │ strings │ numbers │ - ┝━━━━━━━━━━━┿━━━━━━━━━━━┥ - │ spam │ 41.9999 │ - │ eggs │ 451 │ - ┕━━━━━━━━━━━┷━━━━━━━━━━━┙ - - "double_outline" is the same as the "double_grid" format but doesn't draw lines between rows: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "double_outline")) - ╔═══════════╦═══════════╗ - ║ strings ║ numbers ║ - ╠═══════════╬═══════════╣ - ║ spam ║ 41.9999 ║ - ║ eggs ║ 451 ║ - ╚═══════════╩═══════════╝ - - "fancy_outline" is the same as the "fancy_grid" format but doesn't draw lines between rows: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "fancy_outline")) - ╒═══════════╤═══════════╕ - │ strings │ numbers │ - ╞═══════════╪═══════════╡ - │ spam │ 41.9999 │ - │ eggs │ 451 │ - ╘═══════════╧═══════════╛ - - "pipe" is like tables in PHP Markdown Extra extension or Pandoc - pipe_tables: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "pipe")) - | strings | numbers | - |:----------|----------:| - | spam | 41.9999 | - | eggs | 451 | - - "presto" is like tables produce by the Presto CLI: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "presto")) - strings | numbers - -----------+----------- - spam | 41.9999 - eggs | 451 - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="pipe")) - |:-----|---------:| - | spam | 41.9999 | - | eggs | 451 | - - "orgtbl" is like tables in Emacs org-mode and orgtbl-mode. They - are slightly different from "pipe" format by not using colons to - define column alignment, and using a "+" sign to indicate line - intersections: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "orgtbl")) - | strings | numbers | - |-----------+-----------| - | spam | 41.9999 | - | eggs | 451 | - - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="orgtbl")) - | spam | 41.9999 | - | eggs | 451 | - - "rst" is like a simple table format from reStructuredText; please - note that reStructuredText accepts also "grid" tables: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], - ... ["strings", "numbers"], "rst")) - ========= ========= - strings numbers - ========= ========= - spam 41.9999 - eggs 451 - ========= ========= - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="rst")) - ==== ======== - spam 41.9999 - eggs 451 - ==== ======== - - "mediawiki" produces a table markup used in Wikipedia and on other - MediaWiki-based sites: - - >>> print(tabulate([["strings", "numbers"], ["spam", 41.9999], ["eggs", "451.0"]], - ... headers="firstrow", tablefmt="mediawiki")) - {| class="wikitable" style="text-align: left;" - |+ - |- - ! strings !! style="text-align: right;"| numbers - |- - | spam || style="text-align: right;"| 41.9999 - |- - | eggs || style="text-align: right;"| 451 - |} - - "html" produces HTML markup as an html.escape'd str - with a ._repr_html_ method so that Jupyter Lab and Notebook display the HTML - and a .str property so that the raw HTML remains accessible - the unsafehtml table format can be used if an unescaped HTML format is required: - - >>> print(tabulate([["strings", "numbers"], ["spam", 41.9999], ["eggs", "451.0"]], - ... headers="firstrow", tablefmt="html")) - - - - - - - - -
strings numbers
spam 41.9999
eggs 451
- - "latex" produces a tabular environment of LaTeX document markup: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="latex")) - \\begin{tabular}{lr} - \\hline - spam & 41.9999 \\\\ - eggs & 451 \\\\ - \\hline - \\end{tabular} - - "latex_raw" is similar to "latex", but doesn't escape special characters, - such as backslash and underscore, so LaTeX commands may embedded into - cells' values: - - >>> print(tabulate([["spam$_9$", 41.9999], ["\\\\emph{eggs}", "451.0"]], tablefmt="latex_raw")) - \\begin{tabular}{lr} - \\hline - spam$_9$ & 41.9999 \\\\ - \\emph{eggs} & 451 \\\\ - \\hline - \\end{tabular} - - "latex_booktabs" produces a tabular environment of LaTeX document markup - using the booktabs.sty package: - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="latex_booktabs")) - \\begin{tabular}{lr} - \\toprule - spam & 41.9999 \\\\ - eggs & 451 \\\\ - \\bottomrule - \\end{tabular} - - "latex_longtable" produces a tabular environment that can stretch along - multiple pages, using the longtable package for LaTeX. - - >>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="latex_longtable")) - \\begin{longtable}{lr} - \\hline - spam & 41.9999 \\\\ - eggs & 451 \\\\ - \\hline - \\end{longtable} - - - Number parsing - -------------- - By default, anything which can be parsed as a number is a number. - This ensures numbers represented as strings are aligned properly. - This can lead to weird results for particular strings such as - specific git SHAs e.g. "42992e1" will be parsed into the number - 429920 and aligned as such. - - To completely disable number parsing (and alignment), use - `disable_numparse=True`. For more fine grained control, a list column - indices is used to disable number parsing only on those columns - e.g. `disable_numparse=[0, 2]` would disable number parsing only on the - first and third columns. - - Column Widths and Auto Line Wrapping - ------------------------------------ - Tabulate will, by default, set the width of each column to the length of the - longest element in that column. However, in situations where fields are expected - to reasonably be too long to look good as a single line, tabulate can help automate - word wrapping long fields for you. Use the parameter `maxcolwidth` to provide a - list of maximal column widths - - >>> print(tabulate( \ - [('1', 'John Smith', \ - 'This is a rather long description that might look better if it is wrapped a bit')], \ - headers=("Issue Id", "Author", "Description"), \ - maxcolwidths=[None, None, 30], \ - tablefmt="grid" \ - )) - +------------+------------+-------------------------------+ - | Issue Id | Author | Description | - +============+============+===============================+ - | 1 | John Smith | This is a rather long | - | | | description that might look | - | | | better if it is wrapped a bit | - +------------+------------+-------------------------------+ - - Header column width can be specified in a similar way using `maxheadercolwidth` - - """ - - if tabular_data is None: - tabular_data = [] - - list_of_lists, headers, headers_pad = _normalize_tabular_data( - tabular_data, headers, showindex=showindex - ) - list_of_lists, separating_lines = _remove_separating_lines(list_of_lists) - - if maxcolwidths is not None: - if len(list_of_lists): - num_cols = len(list_of_lists[0]) - else: - num_cols = 0 - if isinstance(maxcolwidths, int): # Expand scalar for all columns - maxcolwidths = _expand_iterable(maxcolwidths, num_cols, maxcolwidths) - else: # Ignore col width for any 'trailing' columns - maxcolwidths = _expand_iterable(maxcolwidths, num_cols, None) - - numparses = _expand_numparse(disable_numparse, num_cols) - list_of_lists = _wrap_text_to_colwidths( - list_of_lists, maxcolwidths, numparses=numparses - ) - - if maxheadercolwidths is not None: - num_cols = len(list_of_lists[0]) - if isinstance(maxheadercolwidths, int): # Expand scalar for all columns - maxheadercolwidths = _expand_iterable( - maxheadercolwidths, num_cols, maxheadercolwidths - ) - else: # Ignore col width for any 'trailing' columns - maxheadercolwidths = _expand_iterable(maxheadercolwidths, num_cols, None) - - numparses = _expand_numparse(disable_numparse, num_cols) - headers = _wrap_text_to_colwidths( - [headers], maxheadercolwidths, numparses=numparses - )[0] - - # empty values in the first column of RST tables should be escaped (issue #82) - # "" should be escaped as "\\ " or ".." - if tablefmt == "rst": - list_of_lists, headers = _rst_escape_first_column(list_of_lists, headers) - - # PrettyTable formatting does not use any extra padding. - # Numbers are not parsed and are treated the same as strings for alignment. - # Check if pretty is the format being used and override the defaults so it - # does not impact other formats. - min_padding = MIN_PADDING - if tablefmt == "pretty": - min_padding = 0 - disable_numparse = True - numalign = "center" if numalign == _DEFAULT_ALIGN else numalign - stralign = "center" if stralign == _DEFAULT_ALIGN else stralign - else: - numalign = "decimal" if numalign == _DEFAULT_ALIGN else numalign - stralign = "left" if stralign == _DEFAULT_ALIGN else stralign - - # optimization: look for ANSI control codes once, - # enable smart width functions only if a control code is found - # - # convert the headers and rows into a single, tab-delimited string ensuring - # that any bytestrings are decoded safely (i.e. errors ignored) - plain_text = "\t".join( - chain( - # headers - map(_to_str, headers), - # rows: chain the rows together into a single iterable after mapping - # the bytestring conversino to each cell value - chain.from_iterable(map(_to_str, row) for row in list_of_lists), - ) - ) - - has_invisible = _ansi_codes.search(plain_text) is not None - - enable_widechars = wcwidth is not None and WIDE_CHARS_MODE - if ( - not isinstance(tablefmt, TableFormat) - and tablefmt in multiline_formats - and _is_multiline(plain_text) - ): - tablefmt = multiline_formats.get(tablefmt, tablefmt) - is_multiline = True - else: - is_multiline = False - width_fn = _choose_width_fn(has_invisible, enable_widechars, is_multiline) - - # format rows and columns, convert numeric values to strings - cols = list(izip_longest(*list_of_lists)) - numparses = _expand_numparse(disable_numparse, len(cols)) - coltypes = [_column_type(col, numparse=np) for col, np in zip(cols, numparses)] - if isinstance(floatfmt, str): # old version - float_formats = len(cols) * [ - floatfmt - ] # just duplicate the string to use in each column - else: # if floatfmt is list, tuple etc we have one per column - float_formats = list(floatfmt) - if len(float_formats) < len(cols): - float_formats.extend((len(cols) - len(float_formats)) * [_DEFAULT_FLOATFMT]) - if isinstance(intfmt, str): # old version - int_formats = len(cols) * [ - intfmt - ] # just duplicate the string to use in each column - else: # if intfmt is list, tuple etc we have one per column - int_formats = list(intfmt) - if len(int_formats) < len(cols): - int_formats.extend((len(cols) - len(int_formats)) * [_DEFAULT_INTFMT]) - if isinstance(missingval, str): - missing_vals = len(cols) * [missingval] - else: - missing_vals = list(missingval) - if len(missing_vals) < len(cols): - missing_vals.extend((len(cols) - len(missing_vals)) * [_DEFAULT_MISSINGVAL]) - cols = [ - [_format(v, ct, fl_fmt, int_fmt, miss_v, has_invisible) for v in c] - for c, ct, fl_fmt, int_fmt, miss_v in zip( - cols, coltypes, float_formats, int_formats, missing_vals - ) - ] - - # align columns - # first set global alignment - if colglobalalign is not None: # if global alignment provided - aligns = [colglobalalign] * len(cols) - else: # default - aligns = [numalign if ct in [int, float] else stralign for ct in coltypes] - # then specific alignements - if colalign is not None: - assert isinstance(colalign, Iterable) - if isinstance(colalign, str): - warnings.warn(f"As a string, `colalign` is interpreted as {[c for c in colalign]}. Did you mean `colglobalalign = \"{colalign}\"` or `colalign = (\"{colalign}\",)`?", stacklevel=2) - for idx, align in enumerate(colalign): - if not idx < len(aligns): - break - elif align != "global": - aligns[idx] = align - minwidths = ( - [width_fn(h) + min_padding for h in headers] if headers else [0] * len(cols) - ) - cols = [ - _align_column(c, a, minw, has_invisible, enable_widechars, is_multiline) - for c, a, minw in zip(cols, aligns, minwidths) - ] - - aligns_headers = None - if headers: - # align headers and add headers - t_cols = cols or [[""]] * len(headers) - # first set global alignment - if headersglobalalign is not None: # if global alignment provided - aligns_headers = [headersglobalalign] * len(t_cols) - else: # default - aligns_headers = aligns or [stralign] * len(headers) - # then specific header alignements - if headersalign is not None: - assert isinstance(headersalign, Iterable) - if isinstance(headersalign, str): - warnings.warn(f"As a string, `headersalign` is interpreted as {[c for c in headersalign]}. Did you mean `headersglobalalign = \"{headersalign}\"` or `headersalign = (\"{headersalign}\",)`?", stacklevel=2) - for idx, align in enumerate(headersalign): - hidx = headers_pad + idx - if not hidx < len(aligns_headers): - break - elif align == "same" and hidx < len(aligns): # same as column align - aligns_headers[hidx] = aligns[hidx] - elif align != "global": - aligns_headers[hidx] = align - minwidths = [ - max(minw, max(width_fn(cl) for cl in c)) - for minw, c in zip(minwidths, t_cols) - ] - headers = [ - _align_header(h, a, minw, width_fn(h), is_multiline, width_fn) - for h, a, minw in zip(headers, aligns_headers, minwidths) - ] - rows = list(zip(*cols)) - else: - minwidths = [max(width_fn(cl) for cl in c) for c in cols] - rows = list(zip(*cols)) - - if not isinstance(tablefmt, TableFormat): - tablefmt = _table_formats.get(tablefmt, _table_formats["simple"]) - - ra_default = rowalign if isinstance(rowalign, str) else None - rowaligns = _expand_iterable(rowalign, len(rows), ra_default) - _reinsert_separating_lines(rows, separating_lines) - - return _format_table( - tablefmt, headers, aligns_headers, rows, minwidths, aligns, is_multiline, rowaligns=rowaligns - ) - - -def _expand_numparse(disable_numparse, column_count): - """ - Return a list of bools of length `column_count` which indicates whether - number parsing should be used on each column. - If `disable_numparse` is a list of indices, each of those indices are False, - and everything else is True. - If `disable_numparse` is a bool, then the returned list is all the same. - """ - if isinstance(disable_numparse, Iterable): - numparses = [True] * column_count - for index in disable_numparse: - numparses[index] = False - return numparses - else: - return [not disable_numparse] * column_count - - -def _expand_iterable(original, num_desired, default): - """ - Expands the `original` argument to return a return a list of - length `num_desired`. If `original` is shorter than `num_desired`, it will - be padded with the value in `default`. - If `original` is not a list to begin with (i.e. scalar value) a list of - length `num_desired` completely populated with `default will be returned - """ - if isinstance(original, Iterable) and not isinstance(original, str): - return original + [default] * (num_desired - len(original)) - else: - return [default] * num_desired - - -def _pad_row(cells, padding): - if cells: - pad = " " * padding - padded_cells = [pad + cell + pad for cell in cells] - return padded_cells - else: - return cells - - -def _build_simple_row(padded_cells, rowfmt): - "Format row according to DataRow format without padding." - begin, sep, end = rowfmt - return (begin + sep.join(padded_cells) + end).rstrip() - - -def _build_row(padded_cells, colwidths, colaligns, rowfmt): - "Return a string which represents a row of data cells." - if not rowfmt: - return None - if hasattr(rowfmt, "__call__"): - return rowfmt(padded_cells, colwidths, colaligns) - else: - return _build_simple_row(padded_cells, rowfmt) - - -def _append_basic_row(lines, padded_cells, colwidths, colaligns, rowfmt, rowalign=None): - # NOTE: rowalign is ignored and exists for api compatibility with _append_multiline_row - lines.append(_build_row(padded_cells, colwidths, colaligns, rowfmt)) - return lines - - -def _align_cell_veritically(text_lines, num_lines, column_width, row_alignment): - delta_lines = num_lines - len(text_lines) - blank = [" " * column_width] - if row_alignment == "bottom": - return blank * delta_lines + text_lines - elif row_alignment == "center": - top_delta = delta_lines // 2 - bottom_delta = delta_lines - top_delta - return top_delta * blank + text_lines + bottom_delta * blank - else: - return text_lines + blank * delta_lines - - -def _append_multiline_row( - lines, padded_multiline_cells, padded_widths, colaligns, rowfmt, pad, rowalign=None -): - colwidths = [w - 2 * pad for w in padded_widths] - cells_lines = [c.splitlines() for c in padded_multiline_cells] - nlines = max(map(len, cells_lines)) # number of lines in the row - # vertically pad cells where some lines are missing - # cells_lines = [ - # (cl + [" " * w] * (nlines - len(cl))) for cl, w in zip(cells_lines, colwidths) - # ] - - cells_lines = [ - _align_cell_veritically(cl, nlines, w, rowalign) - for cl, w in zip(cells_lines, colwidths) - ] - lines_cells = [[cl[i] for cl in cells_lines] for i in range(nlines)] - for ln in lines_cells: - padded_ln = _pad_row(ln, pad) - _append_basic_row(lines, padded_ln, colwidths, colaligns, rowfmt) - return lines - - -def _build_line(colwidths, colaligns, linefmt): - "Return a string which represents a horizontal line." - if not linefmt: - return None - if hasattr(linefmt, "__call__"): - return linefmt(colwidths, colaligns) - else: - begin, fill, sep, end = linefmt - cells = [fill * w for w in colwidths] - return _build_simple_row(cells, (begin, sep, end)) - - -def _append_line(lines, colwidths, colaligns, linefmt): - lines.append(_build_line(colwidths, colaligns, linefmt)) - return lines - - -class JupyterHTMLStr(str): - """Wrap the string with a _repr_html_ method so that Jupyter - displays the HTML table""" - - def _repr_html_(self): - return self - - @property - def str(self): - """add a .str property so that the raw string is still accessible""" - return self - - -def _format_table(fmt, headers, headersaligns, rows, colwidths, colaligns, is_multiline, rowaligns): - """Produce a plain-text representation of the table.""" - lines = [] - hidden = fmt.with_header_hide if (headers and fmt.with_header_hide) else [] - pad = fmt.padding - headerrow = fmt.headerrow - - padded_widths = [(w + 2 * pad) for w in colwidths] - if is_multiline: - pad_row = lambda row, _: row # noqa do it later, in _append_multiline_row - append_row = partial(_append_multiline_row, pad=pad) - else: - pad_row = _pad_row - append_row = _append_basic_row - - padded_headers = pad_row(headers, pad) - - if fmt.lineabove and "lineabove" not in hidden: - _append_line(lines, padded_widths, colaligns, fmt.lineabove) - - if padded_headers: - append_row(lines, padded_headers, padded_widths, headersaligns, headerrow) - if fmt.linebelowheader and "linebelowheader" not in hidden: - _append_line(lines, padded_widths, colaligns, fmt.linebelowheader) - - if rows and fmt.linebetweenrows and "linebetweenrows" not in hidden: - # initial rows with a line below - for row, ralign in zip(rows[:-1], rowaligns): - append_row( - lines, - pad_row(row, pad), - padded_widths, - colaligns, - fmt.datarow, - rowalign=ralign, - ) - _append_line(lines, padded_widths, colaligns, fmt.linebetweenrows) - # the last row without a line below - append_row( - lines, - pad_row(rows[-1], pad), - padded_widths, - colaligns, - fmt.datarow, - rowalign=rowaligns[-1], - ) - else: - separating_line = ( - fmt.linebetweenrows - or fmt.linebelowheader - or fmt.linebelow - or fmt.lineabove - or Line("", "", "", "") - ) - for row in rows: - # test to see if either the 1st column or the 2nd column (account for showindex) has - # the SEPARATING_LINE flag - if _is_separating_line(row): - _append_line(lines, padded_widths, colaligns, separating_line) - else: - append_row( - lines, pad_row(row, pad), padded_widths, colaligns, fmt.datarow - ) - - if fmt.linebelow and "linebelow" not in hidden: - _append_line(lines, padded_widths, colaligns, fmt.linebelow) - - if headers or rows: - output = "\n".join(lines) - if fmt.lineabove == _html_begin_table_without_header: - return JupyterHTMLStr(output) - else: - return output - else: # a completely empty table - return "" - - -class _CustomTextWrap(textwrap.TextWrapper): - """A custom implementation of CPython's textwrap.TextWrapper. This supports - both wide characters (Korea, Japanese, Chinese) - including mixed string. - For the most part, the `_handle_long_word` and `_wrap_chunks` functions were - copy pasted out of the CPython baseline, and updated with our custom length - and line appending logic. - """ - - def __init__(self, *args, **kwargs): - self._active_codes = [] - self.max_lines = None # For python2 compatibility - textwrap.TextWrapper.__init__(self, *args, **kwargs) - - @staticmethod - def _len(item): - """Custom len that gets console column width for wide - and non-wide characters as well as ignores color codes""" - stripped = _strip_ansi(item) - if wcwidth: - return wcwidth.wcswidth(stripped) - else: - return len(stripped) - - def _update_lines(self, lines, new_line): - """Adds a new line to the list of lines the text is being wrapped into - This function will also track any ANSI color codes in this string as well - as add any colors from previous lines order to preserve the same formatting - as a single unwrapped string. - """ - code_matches = [x for x in _ansi_codes.finditer(new_line)] - color_codes = [ - code.string[code.span()[0] : code.span()[1]] for code in code_matches - ] - - # Add color codes from earlier in the unwrapped line, and then track any new ones we add. - new_line = "".join(self._active_codes) + new_line - - for code in color_codes: - if code != _ansi_color_reset_code: - self._active_codes.append(code) - else: # A single reset code resets everything - self._active_codes = [] - - # Always ensure each line is color terminted if any colors are - # still active, otherwise colors will bleed into other cells on the console - if len(self._active_codes) > 0: - new_line = new_line + _ansi_color_reset_code - - lines.append(new_line) - - def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width): - """_handle_long_word(chunks : [string], - cur_line : [string], - cur_len : int, width : int) - Handle a chunk of text (most likely a word, not whitespace) that - is too long to fit in any line. - """ - # Figure out when indent is larger than the specified width, and make - # sure at least one character is stripped off on every pass - if width < 1: - space_left = 1 - else: - space_left = width - cur_len - - # If we're allowed to break long words, then do so: put as much - # of the next chunk onto the current line as will fit. - if self.break_long_words: - # Tabulate Custom: Build the string up piece-by-piece in order to - # take each charcter's width into account - chunk = reversed_chunks[-1] - i = 1 - while self._len(chunk[:i]) <= space_left: - i = i + 1 - cur_line.append(chunk[: i - 1]) - reversed_chunks[-1] = chunk[i - 1 :] - - # Otherwise, we have to preserve the long word intact. Only add - # it to the current line if there's nothing already there -- - # that minimizes how much we violate the width constraint. - elif not cur_line: - cur_line.append(reversed_chunks.pop()) - - # If we're not allowed to break long words, and there's already - # text on the current line, do nothing. Next time through the - # main loop of _wrap_chunks(), we'll wind up here again, but - # cur_len will be zero, so the next line will be entirely - # devoted to the long word that we can't handle right now. - - def _wrap_chunks(self, chunks): - """_wrap_chunks(chunks : [string]) -> [string] - Wrap a sequence of text chunks and return a list of lines of - length 'self.width' or less. (If 'break_long_words' is false, - some lines may be longer than this.) Chunks correspond roughly - to words and the whitespace between them: each chunk is - indivisible (modulo 'break_long_words'), but a line break can - come between any two chunks. Chunks should not have internal - whitespace; ie. a chunk is either all whitespace or a "word". - Whitespace chunks will be removed from the beginning and end of - lines, but apart from that whitespace is preserved. - """ - lines = [] - if self.width <= 0: - raise ValueError("invalid width %r (must be > 0)" % self.width) - if self.max_lines is not None: - if self.max_lines > 1: - indent = self.subsequent_indent - else: - indent = self.initial_indent - if self._len(indent) + self._len(self.placeholder.lstrip()) > self.width: - raise ValueError("placeholder too large for max width") - - # Arrange in reverse order so items can be efficiently popped - # from a stack of chucks. - chunks.reverse() - - while chunks: - - # Start the list of chunks that will make up the current line. - # cur_len is just the length of all the chunks in cur_line. - cur_line = [] - cur_len = 0 - - # Figure out which static string will prefix this line. - if lines: - indent = self.subsequent_indent - else: - indent = self.initial_indent - - # Maximum width for this line. - width = self.width - self._len(indent) - - # First chunk on line is whitespace -- drop it, unless this - # is the very beginning of the text (ie. no lines started yet). - if self.drop_whitespace and chunks[-1].strip() == "" and lines: - del chunks[-1] - - while chunks: - chunk_len = self._len(chunks[-1]) - - # Can at least squeeze this chunk onto the current line. - if cur_len + chunk_len <= width: - cur_line.append(chunks.pop()) - cur_len += chunk_len - - # Nope, this line is full. - else: - break - - # The current line is full, and the next chunk is too big to - # fit on *any* line (not just this one). - if chunks and self._len(chunks[-1]) > width: - self._handle_long_word(chunks, cur_line, cur_len, width) - cur_len = sum(map(self._len, cur_line)) - - # If the last chunk on this line is all whitespace, drop it. - if self.drop_whitespace and cur_line and cur_line[-1].strip() == "": - cur_len -= self._len(cur_line[-1]) - del cur_line[-1] - - if cur_line: - if ( - self.max_lines is None - or len(lines) + 1 < self.max_lines - or ( - not chunks - or self.drop_whitespace - and len(chunks) == 1 - and not chunks[0].strip() - ) - and cur_len <= width - ): - # Convert current line back to a string and store it in - # list of all lines (return value). - self._update_lines(lines, indent + "".join(cur_line)) - else: - while cur_line: - if ( - cur_line[-1].strip() - and cur_len + self._len(self.placeholder) <= width - ): - cur_line.append(self.placeholder) - self._update_lines(lines, indent + "".join(cur_line)) - break - cur_len -= self._len(cur_line[-1]) - del cur_line[-1] - else: - if lines: - prev_line = lines[-1].rstrip() - if ( - self._len(prev_line) + self._len(self.placeholder) - <= self.width - ): - lines[-1] = prev_line + self.placeholder - break - self._update_lines(lines, indent + self.placeholder.lstrip()) - break - - return lines - - -def _main(): - """\ - Usage: tabulate [options] [FILE ...] - - Pretty-print tabular data. - See also https://github.com/astanin/python-tabulate - - FILE a filename of the file with tabular data; - if "-" or missing, read data from stdin. - - Options: - - -h, --help show this message - -1, --header use the first row of data as a table header - -o FILE, --output FILE print table to FILE (default: stdout) - -s REGEXP, --sep REGEXP use a custom column separator (default: whitespace) - -F FPFMT, --float FPFMT floating point number format (default: g) - -I INTFMT, --int INTFMT integer point number format (default: "") - -f FMT, --format FMT set output table format; supported formats: - plain, simple, grid, fancy_grid, pipe, orgtbl, - rst, mediawiki, html, latex, latex_raw, - latex_booktabs, latex_longtable, tsv - (default: simple) - """ - import getopt - import sys - import textwrap - - usage = textwrap.dedent(_main.__doc__) - try: - opts, args = getopt.getopt( - sys.argv[1:], - "h1o:s:F:A:f:", - ["help", "header", "output", "sep=", "float=", "int=", "align=", "format="], - ) - except getopt.GetoptError as e: - print(e) - print(usage) - sys.exit(2) - headers = [] - floatfmt = _DEFAULT_FLOATFMT - intfmt = _DEFAULT_INTFMT - colalign = None - tablefmt = "simple" - sep = r"\s+" - outfile = "-" - for opt, value in opts: - if opt in ["-1", "--header"]: - headers = "firstrow" - elif opt in ["-o", "--output"]: - outfile = value - elif opt in ["-F", "--float"]: - floatfmt = value - elif opt in ["-I", "--int"]: - intfmt = value - elif opt in ["-C", "--colalign"]: - colalign = value.split() - elif opt in ["-f", "--format"]: - if value not in tabulate_formats: - print("%s is not a supported table format" % value) - print(usage) - sys.exit(3) - tablefmt = value - elif opt in ["-s", "--sep"]: - sep = value - elif opt in ["-h", "--help"]: - print(usage) - sys.exit(0) - files = [sys.stdin] if not args else args - with (sys.stdout if outfile == "-" else open(outfile, "w")) as out: - for f in files: - if f == "-": - f = sys.stdin - if _is_file(f): - _pprint_file( - f, - headers=headers, - tablefmt=tablefmt, - sep=sep, - floatfmt=floatfmt, - intfmt=intfmt, - file=out, - colalign=colalign, - ) - else: - with open(f) as fobj: - _pprint_file( - fobj, - headers=headers, - tablefmt=tablefmt, - sep=sep, - floatfmt=floatfmt, - intfmt=intfmt, - file=out, - colalign=colalign, - ) - - -def _pprint_file(fobject, headers, tablefmt, sep, floatfmt, intfmt, file, colalign): - rows = fobject.readlines() - table = [re.split(sep, r.rstrip()) for r in rows if r.strip()] - print( - tabulate( - table, - headers, - tablefmt, - floatfmt=floatfmt, - intfmt=intfmt, - colalign=colalign, - ), - file=file, - ) - - -if __name__ == "__main__": - _main() diff --git a/slip39/tabulate/version.py b/slip39/tabulate/version.py deleted file mode 100644 index 8b8c4ea1..00000000 --- a/slip39/tabulate/version.py +++ /dev/null @@ -1,4 +0,0 @@ -# file generated by setuptools_scm -# don't change, don't track in version control -__version__ = version = '0.1.dev600+g6605467.d20230217' -__version_tuple__ = version_tuple = (0, 1, 'dev600', 'g6605467.d20230217') diff --git a/slip39/version.py b/slip39/version.py index d02d9439..62968a94 100644 --- a/slip39/version.py +++ b/slip39/version.py @@ -1,2 +1,2 @@ -__version_info__ = ( 12, 1, 0 ) +__version_info__ = ( 13, 0, 0 ) __version__ = '.'.join( map( str, __version_info__ ))