From 2730a9438f3b564ab0a26d3a78d44c295001df31 Mon Sep 17 00:00:00 2001 From: yabwon Date: Tue, 20 Oct 2020 21:57:44 +0200 Subject: [PATCH] BasePlus, version 0.8 BasePlus, version 0.8 - New macros added:`%dedupListS()`, `%dedupListC()`, `%dedupListP()`, `%dedupListX()`, and `%QdedupListX()` --- README.md | 4 +- packages/README.md | 4 +- packages/SHA256_for_packages.txt | 3 + packages/baseplus.md | 388 ++++++++++++++++++++++++++++--- packages/baseplus.zip | Bin 43708 -> 51190 bytes 5 files changed, 362 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index c33b0df..b0eb415 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ SHA256 digest for macroArray: 42771AA7CD2A0608E1EE25F104F21CCCC296919910E4BCA7AD [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/macroarray.md "Documentation for macroArray") -- **BasePlus**\[0.7\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[0.8\] adds a bunch of functionalities I am missing in BASE SAS, such as: ``` call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -126,7 +126,7 @@ format x bool.; %put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_); ``` -SHA256 digest for BasePlus: BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82 +SHA256 digest for BasePlus: 9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8 [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/baseplus.md "Documentation for BasePlus") diff --git a/packages/README.md b/packages/README.md index 30808e7..c6a8759 100644 --- a/packages/README.md +++ b/packages/README.md @@ -80,7 +80,7 @@ SHA256 digest for macroArray: 42771AA7CD2A0608E1EE25F104F21CCCC296919910E4BCA7AD --- -- **BasePlus**\[0.7\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[0.8\] adds a bunch of functionalities I am missing in BASE SAS, such as: ``` call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -94,7 +94,7 @@ format x bool.; %put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_); ``` -SHA256 digest for BasePlus: BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82 +SHA256 digest for BasePlus: 9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8 [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/baseplus.md "Documentation for BasePlus") diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt index 12fa74b..04a3a52 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,6 @@ +/* 20201020 */ +BasePlus: 9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8 + /* 20201018 */ BasePlus: BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82 DFA: E67A0863992722A5F535F56E14EF8D19A55F74FB374447BF11B5ED74029C29CB diff --git a/packages/baseplus.md b/packages/baseplus.md index d894235..9841f48 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -1,4 +1,4 @@ -- [The BasePlus package [ver. 0.7]](#baseplus-package) +- [The BasePlus package [ver. 0.8]](#baseplus-package) - [Content description](#content-description) * [`%getVars()` macro](#getvars-macro) * [`%QgetVars()` macro](#qgetvars-macro) @@ -28,11 +28,17 @@ * [`quickSortHash()` subroutine](#quicksorthash-subroutine) * [`quickSortHashSDDV()` subroutine](#quicksorthashsddv-subroutine) * [`quickSortLight()` subroutine](#quicksortlight-subroutine) + * [`%dedupListS()` macro](#deduplists-macro) + * [`%dedupListC()` macro](#deduplistc-macro) + * [`%dedupListP()` macro](#deduplistp-macro) + * [`%dedupListX()` macro](#deduplistx-macro) + * [`%QdedupListX()` macro](#qdeduplistx-macro) + * [License](#license) --- -# The BasePlus package [ver. 0.7] ############################################### +# The BasePlus package [ver. 0.8] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -40,6 +46,7 @@ functions and functionalities I miss in the BASE SAS. It is inspired by various people, e.g. - at the SAS-L discussion list - at the communities.sas.com (SASware Ballot Ideas) +- at the Office... - etc. Kudos to all who inspired me to generate this package: @@ -149,44 +156,53 @@ Kudos to all who inspired me to generate this package: run; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -### Content ################################################################### +**Example 7**: Deduplicate values from a space separated list. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4 5 6 1 2 3 1 2 3 4 5 6; + %put *%dedupListS(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --- Package contains: -1. macro getvars -2. macro qgetvars -3. macro symdelglobal -4. format bool -5. format boolz -6. format ceil -7. format floor -8. format int -9. function arrfill -10. function arrfillc -11. function arrmissfill -12. function arrmissfillc -13. function arrmisstoleft -14. function arrmisstoleftc -15. function arrmisstoright -16. function arrmisstorightc -17. function catxfc -18. function catxfi -19. function catxfj -20. function catxfn -21. function deldataset -22. proto qsortincbyprocproto -23. function frommissingtonumberbs -24. function fromnumbertomissing -25. function quicksort4notmiss -26. function quicksorthash -27. function quicksorthashsddv -28. function quicksortlight + 1. macro deduplistc + 2. macro deduplistp + 3. macro deduplists + 4. macro deduplistx + 5. macro getvars + 6. macro qdeduplistx + 7. macro qgetvars + 8. macro symdelglobal + 9. format bool + 10. format boolz + 11. format ceil + 12. format floor + 13. format int + 14. functions arrfill + 15. functions arrfillc + 16. functions arrmissfill + 17. functions arrmissfillc + 18. functions arrmisstoleft + 19. functions arrmisstoleftc + 20. functions arrmisstoright + 21. functions arrmisstorightc + 22. functions catxfc + 23. functions catxfi + 24. functions catxfj + 25. functions catxfn + 26. functions deldataset + 27. proto qsortincbyprocproto + 28. functions frommissingtonumberbs + 29. functions fromnumbertomissing + 30. functions quicksort4notmiss + 31. functions quicksorthash + 32. functions quicksorthashsddv + 33. functions quicksortlight -*SAS package generated by generatePackage, version 20201001* +*SAS package generated by generatePackage, version 20201018* The SHA256 hash digest for package BasePlus: -`BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82` +`9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8` --- # Content description ############################################################################################ @@ -2131,6 +2147,312 @@ call quickSortLight(A) --- +## >>> `%dedupListS()` macro: <<< ####################### + +The `%dedupListS()` macro deletes duplicated values from +a *SPACE separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. + +The `%dedupListS()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListS( + list of space separated values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *space separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListS(a b c b c)*; + + %put *%dedupListS(a b,c b,c)*; + + %put *%dedupListS(%str(a b c b c))*; + + %put *%dedupListS(%str(a) %str(b) %str(c) b c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4 5 6 1 2 3 1 2 3 4 5 6; + %put *%dedupListS(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListC()` macro: <<< ####################### + +The `%dedupListC()` macro deletes duplicated values from +a *COMMA separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListC()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListC( + list,of,comma,separated,values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *comma separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListC(a,b,c,b,c)*; + + %put *%dedupListC(a,b c,b c)*; + + %put *%dedupListC(%str(a,b,c,b,c))*; + + %put *%dedupListC(%str(a),%str(b),%str(c),b,c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListC( a , b b , c , b b, c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6; + %put *%dedupListC(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListP()` macro: <<< ####################### + +The `%dedupListP()` macro deletes duplicated values from +a *PIPE(`|`) separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListP()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListP( + list|of|pipe|separated|values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *pipe separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListP(a|b|c|b|c)*; + + %put *%dedupListP(a|b c|b c)*; + + %put *%dedupListP(%str(a|b|c|b|c))*; + + %put *%dedupListP(%str(a)|%str(b)|%str(c)|b|c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListP( a | b b | c | b b| c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4|5|6|1|2|3|1|2|3|4|5|6; + %put *%dedupListP(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListX()` macro: <<< ####################### + +The `%dedupListX()` macro deletes duplicated values from +a *X separated* list of values, where the `X` represents +a *single character* separator. List, including separators, +can be no longer than a value carried by a single macrovariable. + +**Caution.** The value of `X` *has to be* in **the first** byte of the list, + just after the opening bracket, i.e. `(X...)`. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListX()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListX( +XlistXofXxXseparatedXvalues +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *X separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListX(|a|b|c|b|c)*; + + %put *%dedupListX( a b c b c)*; + + %put *%dedupListX(,a,b,c,b,c)*; + + %put *%dedupListX(XaXbXcXbXc)*; + + %put *%dedupListX(/a/b/c/b/c)*; + + data _null_; + x = "%dedupListX(%str(;a;b;c;b;c))"; + put x=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListX(| a | b.b | c | b.b| c )*; + + %put *%dedupListX(. a . b b . c . b b. c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6; + %put *%dedupListX($&list.)*; + + %let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$; + %put *%dedupListX( &list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%QdedupListX()` macro: <<< ####################### + +The `%QdedupListX()` macro deletes duplicated values from +a *X separated* list of values, where the `X` represents +a *single character* separator. List, including separators, +can be no longer than a value carried by a single macrovariable. + +**Caution.** The value of `X` *has to be* in **the first** byte of the list, + just after the opening bracket, i.e. `(X...)`. + +Returned value is **quoted** with `%superq()`. Leading and trailing spaces are ignored. + +The `%QdedupListX()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QdedupListX( +XlistXofXxXseparatedXvalues +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *X separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QdedupListX(|a|b|c|b|c)*; + + %put *%QdedupListX( a b c b c)*; + + %put *%QdedupListX(,a,b,c,b,c)*; + + %put *%QdedupListX(XaXbXcXbXc)*; + + %put *%QdedupListX(/a/b/c/b/c)*; + + %put *%QdedupListX(%str(;a;b;c;b;c))*; + + %put *%QdedupListX(%nrstr(&a&b&c&b&c))*; + + %put *%QdedupListX(%nrstr(%a%b%c%b%c))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QdedupListX(| a | b.b | c | b.b| c )*; + + %put *%QdedupListX(. a . b b . c . b b. c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6; + %put *%QdedupListX($&list.)*; + + %let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$; + %put *%QdedupListX( &list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + ## License #################################################################### Copyright (c) 2020 Bartosz Jablonski diff --git a/packages/baseplus.zip b/packages/baseplus.zip index 526456790c9a58159e4a9422b5a22ae5df69b003..a080d6ff642d6061f9573470f7b0769d6bd88ab9 100644 GIT binary patch delta 15918 zcmZ{LWk4NGw(Y?oNbulp2X}Y3;O_4377he=cXubjAwY1~;O-h6f-WFR2X0RR9jK%!Dbv2TXVmmLZK@J5cqVgqfs1XT7} zJ;l3yJ|eL@#?(t-jaVfSM8>KYUDhE}A}u2u4|%>>RlJm$L(p#Rdqa{lxQ*{Q(eBtL z>xnzA>Cv;-rb8Xd-ew$}Gmr*M>F@66WYlx;n8!sln86haXX!LZA94V*f@UGBREY2E zeq(0;@)hJ@8(V`2(>1ZH#83xcB$d%P%-hLegF|C!2k9Zh-mZLU zkG)~j;={yC_*NjR z%VMP!tEuCK*wecu@6C}=`Z8LzT?^8|==^!GzX{x#TJfN0a3zLpQWMBtueRy)t?gSN zdD7PorSFf{4J1;=*$$S7CczW6%{p2_L3cw3a2v2}A4lyr@nhrjpoCZ`Fw!L$b-U@N zg})KE2(vwQ25>pe`Dr%cyql9FLZui*Fhr_hbh9QPmS#Tu0UeC}5rJ37Wq?(aF*+&8 zus5yDj_!dqgSc2|1KkmX`=#o`D2Zt&b*Gp^lR}0rMP~3m-iKh#!goedaNWB(%pV{K zxxUN>biCzs7_Y^8ke)!LxQc^Ep-+v@o#@C-gz386+z#rWhNajHFss9!5XEyA04&K> zsX14FZj!*nBk0+vb@%dR#u7TKe48T?U|fGx`dlUXY4hf}i;vUlICGinBUt#2X(b%RWn8hoy6l0SYx^i#6%*Mt7YXbSyAn(WigD zzP{Nic0ewLXn3~`Y_;nK>4@$1gfKmO%?-F)fAlmGg4?Th zuOuDeqA&gsQ>WEc3uH9WmHn3{j4Z>*(@7@ioeq@8;AYa4pwZLb+?547=ll^@11V9z zUI>);RC{#3sy0Os*eHIzbSORt`#j9=6jBNc-c z!xcj@sD*+fx-*F%?|L7q5+DT(^Q+vP&uSZnM7)8%;6NC|5IIn-WfgtvAj|)Cttw56 zrg%NuY>6|R1Jo6orP6hz=Dx{<3$l#s@Nr{nKS!*C-}gY56pn{G-8`_Maf$x!5OZI8 z>RT+`2ZqPC0;8r`m=TTCk{g!%nA#_O*f|7SGlL@mg)B>SAXMcGXfRW-?*ePic>sHV zHn$XFa`JXX>$`c`Nmn&mEBUY^v>6U=3dt282dqGB80eXBZ^hSe$%FIDh9gcO6U$!3 z7sN+koyG=vyl&^^?G_y7v5<2)yZ|3lR7kr4s`e1QVU7b`x76%<)U1BoEND#B147&q zKGI9=_~Jk^6~|uJeqWm6z09XCM}Wa;Eb`Hc{!M>xf?Kj99ig--qnN!aCt1a#sM$<% z@K%FQYak0dikcPqaf)UO@|0+;k}p~n?(B?Qvx6Q{nK+N0vg%3-+@&_6wm4B^6uHoD zG-fnn5~WkL3$!$=xv>v;S-3qk6Q== zW(;zEH88yC6$$vAijmfZRbEMY%_S&t?e zdXuGQGJ-gsG%U#2(8T3K?ito!Msfslxn9V%eX=a_z#@=>(yi^6B+-LA)W3r`ojAJXfKW?z+Q?H%!qYa+LQs~i zT2+$!Tb}C!=HqEx{mlej==WIA?e6U{&tCYU zlqQe&b^8+=M6l$U`jHQxa@&0tJ}L*}#pnt99n-jkZK9!i2ns6(;f@A@2B>DN3CpF2 z`&A4$d9WLZs~kK$U<=A{7V&Qk7x0C1gCRajNuB^1-|1Y7QXB^HIzhLR_#dh?rU9oPhvMD`kE~BZczcpmvU4+YY1zk->7cNEiDNx{B zAR~1(FXP#_o#bx<^dENOKsqer)QmBw!&?y^GI)ftf>3FhCwy zk~OmRAK{e55P^Zu@b-^Z^RB8ydT^L|W|#hW^R(zMVT;O*wFhS~PBA-x$|aefE;xL| zra+-FXuFb$DBD7de;tM+U6d{2Noa5$H-_Dud5=kwG|P`QS&!=mx8y4O)x{H$a1O z_S?sGaeOo#{Wp=#OCWh3hmku~+x$kP_KES&l{dpOmd{uBHmt|)9oJu<;9<7(4o((S z(B5UFI$Mq`sfzkyz8RWOG8^t+yJ1N}SmR2P!P?d~9+NoBlyMc(RvzoeG)!lU+#<%@ z(rMS^hygQaZ*C+6z>{B4q~IxE}yAJZwplT zwNhh}`$|qpe}L4fz~7ah)=MWRgs^^>CWxq5!cS|jK#Pd^PD2aD?5xa&$34eBVTIyFjVC6XXnci~LfBsm(qeKYgkFpaVq zlL$9D!n8`ec{6zYgCxR!Rx%R=TdM1#6+eRpURlGt+gQdzdW)MGA-`B1)z#eFYb@UY zj(1c~Cf3s%~O12%x7M2@SE*TtdBwWd|}0W=37BnhuOG2t}@`Xqw=wqtY7ob&S=%By~F)XoI;Cofojc$CjV^eZUtVe_}e~ zRPn`P^5nw_!EH#eDOjXt2dY%?&Q zPgZv;`TYx0shnbJKYYQPcv5QE_=OoU6cY#oRbmkLHvp+`hQMuDh6KLPJ5@Cpx$&5X z_4nO&wha^e)arUnZD%8vEn3gp$)Y?wkY?|(7yJAJ@&!55#E@5XY z=lM0#i0o#}d>M)NNZ_4lXGRCmI%>YBtlAX1p*fyaj2(KfNvC+T^14Q9THyv3q@h_4;|u zXIn3a_jNAkC(K_lPO-7aEXX0D1ceTyE7QY>9()G#_?BTSmyX-|*$ySsIrJm9PM6Hk zmpb-T3UaBW`=j?1B1b{*aA0?~GefSv?$fpq4Ow-&_^|S4^fEzmupiw%@FAqnZT%$9 zIVO4Zeec*u+oNR3TIpd(z8R059zJ)xkyO7aO+t`;%Bdzag?wsviJ&WrE;dL5O5sX> z&xkuV+3dnNs;#M_AVa&_#f^%#;>6qxR-x!@+)UfGtDaBly4l)HA(gJFRp>wyM%eF( zO6iz>Tmlnv`19MuouV~O5d>PXTv+39+jjC;Q2bsHsYcCxM*KU|v1TmHawJgkIum`> z@(*{>xpsa_J2;54sM#(9WHqvM&|%4ZSO1a2D%cUPPArhszD;}alZO2REg|0??({=@ zko|6*O_0Y;mmQ9@w$SI>*)K!OoRV_U^0l8*oMErknsLDE%4KT1=Ju><5b%YYzJ}T% zzTjmcja#R#=vQHQfO&uW!v4wFA{A^1DxdG=>hD}b(G~8Xn{V$mjII(V=%JB=w5*+% z#L=I#)1E?bTL@(6iOFme>JhTKh+1Vkk%_9N zLcpG!@|jPpwtKsFxlvspq;%$9D<7G+t3iBsPz2p??M4_2pgSxQ9(8oSi(&3@Y6IQ{ z-;brDaWW1AX!VtdbiX`S{! zUob`pBUte6R0VL*kC2@5`2nBtlSvj;ckNZz&&`m@zt8%|i1iK*Z^Tf97ORhh1I3ZQW~Q+R_0jv3#7dh{R~uaelf z_LKR*O?(^E<^wPY`H}@0Cs8WYoQRb=VNwKISe+a>9o5ksaw2wLnDAu{?{t!aA!C{L z!N*rP*C#TYZgQUzeON36G@;v@t;EiBu$d^X?`_-e{p}=&t(Aug%;IwFyppwE2qICh zj_sJn62g^2@jRZ6Igmc2hR8a!PICjt=r)itlFvBb{Q2h`96|9jvCdCVf;0gcQe)J8 z?C$y>a$(&Ii8UJz%=@dpAPpSs0kjb1L!Ic`p;}{eQJKd!fn&A-&>OOMbZy^tvTyqj z&1Jsb*x@b4?qGPl>{N11!K^YAEG!KT&(%r-5GWNK)G1Hc(1K9lW~ zjOYq0%)lniOEV5OFDv0C#%D55rYn0+f`S`UxVT7{z7Bb%N_aKv;aP5nDvU;+%s86j zNdmKsk%{Hc)g$-a@nAI=L6go&2?cBIgMpzWU-9vp==KOZFDTxK=6iQ&@upE3UV-R$ zO!m}y@%K0e0w)fr6wc3n4)mJGP!h*jLbI4yBga1(RuD!e)2WAcX zK2#ByshewmNCBm5T3Kw<8RUg}Rxya%lv7N&Uq3SuC~je&{%Amf^l&^!!D^Chjg1V< zr^0*s(J<6S8yI-xkgXfx;*zJrY*mY;hlSlmRr6L3mVL2z8@@O}B&%1@KM>rUdxTuU zB-cW?g)E$Irz9}sHXtiViuW@SxSSfeoDig4Eow6`)DM)B2INKd>6muPDq}{B|XhBPIGh&&74cbz*(|E)F9$Q zO{HV|B!|S~=`-TnX}Ws?rCwe6*b`;05a)zD=geo%0!8Of$sY%vIxl)_t3M|qs!1a# ztZVZRfiB|T9w!<^rgt42N&e&(trU7X?%d?L+guH~B@73oa7IUA@jaKb;8YAlr|0Ln zuZdsd9Ftd+uCBJ{hY!-@X+{Cxe`d=}`VzAyFfR>w@3=*RYBz$N=X*_Gu3zzOLJu)1 zW0Vq+oSv5^?qjXnbnJK6$FasW0#@yu^mh-EU7!XT-U@${BOb@@Fr7WzVfBrZ+tJ22 zaj3OftEso{(1=4<6j@t?Mv6$9Nd1dCGm15#6~l2#VAyV)eIBL#s-L3Pu;lZj-%wrb z8WWaqHaGI5*gi|Y@0n*;rj)R(RI;9pS^5?R-63pSlbXU$rS>p~ac8zQ)0WjDQtydfW5TNu+(!lhX@tAT0t*``CIdx#1oW$7A0Wy#WK4 z29o)3P%j@7oATaAd}CxxB)VsFlbClD*~3#H@NvW&78wy!7V|3~1a}Y+lf=Zt({2Y9 zn!{ks@RWJ)A!g$Nh|Gm3IDhkYD`7G`bQ;FTD{HwTM6YE2@b=5|?ZES?RQ69Nlrf71 zlPZ2UvPdd#{})ZPn1|z5_^~3kd#UG$0Z_}Xmu<$lw&&fuk!#W?iAHm#$%+;3+qWtD zgraA626!H1;4x7Jo}G`7`wpGSk+@~|k|a0|%4~dd!s8bOf?d!G3XqqUqUhDgWNVb1 zP)05&OQN}Ngf2fsmd~58^w<$Ur;LCUR8`N*ko`JPSq4k@9~zq+ltOH&2{RK0oj{d? zRxA+>owA?#?2f#mIzHBPoVPhHEuRqJ(KwWJ=1(G~+i(pKut#Cbg>?*GQX=9P%y#=? z-BG5abbzw}Lb|(Sbl#@-EX!9_VI+G#bR*WufVA5+tDEXhXxJX8gqdlKvE=q^K{3wWZYx}x) z0_Q@Cm`QG!P_4A?SwZq%rTf;H$rWXLT3AU32XBkd%f-kO=U!7bTKixn+~@(Wh+DTw zS?(@h*)0NSyS1lr6Ao8G(08I!;G-`a=KE=yJOIOfk(Q#N8<|pB&OhP(&X)vNfy#n? zu&(mZ7*!%JrjiUsl9%aj?2(%2Zs4`FVIu~gyz|W2ymBkI z>-`}7cl*~k zRxDt+N5iNhl=dO@<>iJ#39RcNO5FCyiZ(m1sAC?LWmeFRFLQm3z_!6~D?)G!O?Hcp zb-O9*_5b9L>>;r_UBr-SbwxBB6yJNyGiKn zZ>a+pQ>dD%S&H)bLtoyeB~vu35H+{FQu?^(IV-)XwlkYbq^=x)pAcgPlq&rV$U zqs7i`jfN77SZy~W42!MUk*1{UW)}c&T|8ogU@|skL+WTVZG#1l&i84bTF|R&(fw6T zACi@_+#n(V5J=9AxBHKu|Vshj=q>auE=W28U8@SwFE_b!aFf$HGHh_@P#TJ@m?G8uvk)^c-3mq9(b7{ z>{}81L%Hx%>`!r%^!Mei?A7T}^|UQ6t;TTz=^D(YWkjusH0xHai&PdWk=~luU)m$R zg1Aa`l)^!4sZrf~(nd~;RwQKe^kO?W9B(v+EQ``Et1JqAlwId|{bv_1lM!U}KH&3Y zzx`CZQ^nQTR>p13koMrE99)(n`wYg}B>+UuCx*yU*aFXS8AEB%yRXy1Ar5dbZK_#hy|+T7)^gEE zifC`5N5ChvJ_g~cihPc^E}suHn3ptqc}*CCF=}n_ zu&yq_I) zFf?D%p%P+<)NB`4SGq3sP7bRZKhknBKYap%K(|CqvUB`)krhKr>zY1sv_CjwexlP4 zysc63>r(e%%{6bQ6{}I*y$W}g_kn!rcT^Eq8xN1e-DEeyn!j*W`x0Xkee8Q7;zr<1 z`3`u-Of1K!@xH{NaI=dJrY?xz##?;sCm)Vhh zIdWe%=LDn42c@^|yd`an?W}UK;~Ps^az98@g*S#t7K$h-wud~Q@F>NDOx%)f3D}{6 zsV?tUSKZsT`>eA94Pnm))N>4+SRQ;J?mV|PE9benKW;j}y88}K89DYfv>ZUX$D)<* zVE=ghaDawPW*(p}MYY;oOLet(45v!^$ZtjUclbX96`Y zn>5;GjRMQSucsd)SO=x3Mg&=byHlSW*<~c&2{jg;7@7b0I|e8 z_G~ne!}XAZwpfTUWVZLy4A!yeXfd!m%q>Rq6&iqordo^sF5NpvAsOFN>OQ!qu}gxI{+o2llSo;N`IuyKiJ+DgxzRm z(0kLp>ynfsrM}7piB?RCtBSU(eSSB#gcnT8M&m?*K!8_Vwl$v3$Xi!Y!nC6K#BtY-g=#RzBhXDeAi@NQiB$Wa9|Df!F1S5<}%0 z01|?7$Nh;2K)6j>$rxU8*@iP4I!1uy_mUgYduqjz;0W0c>k};MqM$W8>SN4waP!ds zcZ_Q*HrY!Hb}6qGxp+m`hKF)Xz@`eXf6R5u1sO`&+4}5o{G`lf2QfFKS~^jXW^2|d zpdzTv{Y1-|7F^t{iCyqy<=N4=G5_0XCJjm(tKC+^K#9STTx!QZq(M&(v7sl zlS#pZ=$Ad~XT`VbKCFKJd<)Huj@1*kn8&U7x#hgu3>f3OUi~_!CkqqJq7dvMd z`P32Cf}Bx`XWHt4Z^phPT0ko?W~9$Wxt~TaxQijDfVQf6Pl4DBzB)z1OPE3a4s}Lx zRAHshP}kd3PuVTBAc!Op8d0xxf8?MTM+CR-L7#ts6c9ZxpefQ=UbjK`UUapp z)0m|S1KO@yJ~{1BSv>|@N-5^X-?Gf5-!Uq?v$6Y303^Nsbj}j2_2$C_=`x`bG+|jB z+)Z5jeEa+bivmmowX3eV|NCI4=Y{KC#Qsd?yc$_OIYS^kRT$&K)k2=FS4|=~#|2tx z6PBml=c3UI(d3m;e=;qz1y3`XWwMk7WYTfeVGtLSR;@&FHus|7tQD{(Jyb(j+KIVm zs!EWwEo~Wms$oew+q4l*!V#(#osnG3?7emF*Ws-@6kNsrzy^T!$=Pvc1y7Le2wgb3 zHK6bML)&!uZEd~y_6tOkC$Io-v1dGw1X2kYjd;^!73>)>&F)^~4XKpc;xb;{?BxZS zD_ut>1?-cr!#gsLB!gy%+~`8;=|bIi|69)*V4IfXU-b+U3Gn}wGlzfVO!1GLZM-;G z6Ahr+6gf8Wku@?ku}vaKy_>dU#cYQiN z*efV0S(wTKW#-RPsDqG5 z)u-rK-wlk4KvUDY6-1|0>=r)ip)_+Mw|exmh6On}=EzthmYesMk&{3dz{+PLV&@&e zDN^yjQ>x+g$ws_M`nEC^cg_>sZ_-jO3r4*?g;a=6q0he-$)9sl@bpQiK?vnr=0`m^ zk*`|&2;*ZW@q^@EQ;wgeeX)W?>XT6Ngv^3vgit^8mSBk%O{7PyyXmJNm~GdLj0Hy+ z5SxR<`dQQ}NwpKfY}udM4d!-;u*y8MnGGGz7~f;K??HB@J$vDF&veV@!53Vs!BrLy zc$cp6AWiNHW#MnfoK>uxfB*0$Yz_{*P?0}FXgFvzb=k}a?2z5O`d*>cJrq#xWHOl0{{Q$}`}G5im!*=P0zToQOw z(i2WX%PM=_v`xs`<6-A-Wn@Ae9h2B?MZ0=ew7kDKd(z^2LLB5(pps99J3P1a>nlHk z+QKn~Po|WVR;yd|dbnzvIM*cME#2rgjPPrxtU&`0CmOb`O3Jg;5{9O>)>WiFwUfpq zYv&D~Wx>|`R)XtxHcvMe`Z>$A3-0`an(qBM66*6QeW$A2;i^z! zG;guDph-3VQCD}xAQy;+W4+ynpvD|RjspFN$5a1-eolUa!Uy~slXL>nEe>ecL(TzD z6qgLgo-s6h(8i9IMG?-UK(-cwtqi901O3VXZzZ6Y#q5NCJQZlcU&3e?< zn;oUj$el2@s^ABbt8JKLK5Vo(@Z;)^I_K(zokp}KDkU2L`n>z5Tm}DN5gX166xCP+ z_U<4-BRn}VvW%n6=OR^SSaM ze9#xDCtf%Q4hwwzE(_L=kBr7?x_XYb#aRagZ-kS01G)?V5a1utZSMM&cO>(?f8K${ zEF6Tz9qJ$9w1ke_y4*-b`kl;Dp<^V&46%9RR<_1vhrmB#`g?e>d`?vbRFeu zcIKSS`7FR>oMhnwQBB;q^-a3u{pA;s|1nL$oM!43OfYk@+AONyaOFn{hOQqY1Irit zbszMeDCG+jq*+UH)w^Rq$(aXuv!w0Uit@Dnyz-4D8-jH;6}5FzALr;-n=wsHWlRiPB=LFfT$rgqpz-~bUr5E zmeoE~LhCRMqh6#4<5&9SO&Z_vSq<9TjJBRGc^Yv(7?`kTDsoWZj|!*YR?BavFpsnf zw;~>hzmTNO6Qw^-v{s}2b4B4*rjOYM^vlq!c9!ZDg&?)Y_T;!W1BA3e zcD*H^nUT+S99htePEwKP6Ha$4rcYm?->Rmh`4H%@>%1>!?AN-pf{4;kz8yI~CG>u+xBL+pKh)P6;#Mw zA10}8PM1U$i%vfTf%@mm0t!!~ekL=QQ}a~4Sne$1&4buHco06k3$|WgNry)Wg?8VZ zt-1z9gjT?>H-wx+Ji!Wd0dM@yj`Ta6zb*&Zej4t|oISd}(MRyT1*khHyM}n+l)|^@ z0QvQ?Dp^bmf8zUg-AU&Wddx@Bdm#Rlj*@lkJ?uE?c(3Qr4JuVjBMhb0OB|j+pHFGR zvKS8RzwF5DlGb`nv^?xvi!ug2ivc)>;7i?K6DC9PV zbEw^qSageM$_!C9xmGoaoKm8dM5It@#xhE|C~LGUsSD0i(%JiV{Gv|3@+?wz_i{D` z{X#z9Zo_a8(dU@zb0Da z7FN-HAD62Q9Kpej#)Q3$=f8TTflq42)hBN4dkT4E=b{zZzvfx-n+8Ewlz-=07i$kE zSFbNJ3sC=0lu-VC-stg9qGkIl(fVoE`Ldb36jrq8q&MdqnqXjwn~T3xZNc36oT$KT zYaJ&gQMly+d$W9tM}ALU6XnMC87{UUc3}TBn}@)2R(kpNgO~foCX23K7N~{fX}Q{{ zUd!|1Vsf2ayVu5-h6ph8dgCk^~C-ZGt> zgS(dU=~SSoEV{3t(K;AdJmYnRh;ehcjy6OmJ}@rUrl66i4;P2FHC0Eum>C0Qh<=Kx z*N?2>7*72~JRoDj{sJt#%+qgrAQ1%Lo);+~W_TX4PNWNlMOSF)iM%c*|Q(3ZS0Y^pbZUwy6dgKkiGGsC2Ms4$`>E#O6wcyyreo z?i9oBU%ZgTlu{<+p~L}Dr#0>X1gBvH6KU_OlTpMu*!XpTfDrykF|$r*-{>E}Ev z4h~qhAN`RiNxz%SY+F5h^75Q>E2VJ@RNPY_%apUl_2>BXvveSC5Fy2AHe*9_v({20 zGWENd4!fjb8&i`Naooy7OB#Kk-c`%uSV<(POU}NCaKwAxGSSSkxzZ8)x#hv!!!@>! zvH6F+E`|6{1L!K5Oy2td(}2{iGdNe2cvTsPe*Qc&Z?fsP7g|2!H)=KO5HS&)CEweE zTk~s9aU|{!y}t3i+}-!|k!Nkw-fdrQjot6|?RN0kTuqk)3L(A@w7J31u}jjRE|6=1 zhH@8*>{m_gR(0i?3r2Op=J2A{pPHw!>RXg*J*Wl32hN$c=C2|yA9P@o1JN&9g-U_x zhAdm|0Sf9aJ$Aik(0Pp(At#~hX$tZhLi5xz@kb;O1hGmy5fwUPr=fBSVRzSUS;Fxb zgmS9_mc`rxa(hmpZ@GHcy|ABNdhxYD1V9AgCzATpD-=Qxc2SDXa)2lD*1PUg77dLC zU9*_f#h6oRHFmf_Xupi`E#|wNi=m{kRTlZfl%bbb58NpU8fRRNmd8l4X97+9d~Dtoft9!Hg0{2e+18{iE^j^GJzP9vkPu3lI#9Ho zO{v2^XN%#}6fHpTjNLZpeN+g}1J6 zOF2}glqnUq^$kL^3OC|Gg~(I}0kJ!miRWuEtuuP1y6O0Pm8a0eKE#pRXu(~pntR_K z(30DYeFn5&$@A_>8}z>yD6n9Iku-M3t*rl^mHqkK!HDyf7jt+QLA5LwakE}I-^lGZ zFt@kCEd;sbWO0jmZsX(4Ug_X7so@U!v!4P`q+J21?XO{DF5b`@cb`xJ;a_(z)OizU zzM=m0K`APqy~g!x0J(b&AUJ=oJ39XF!s9;yL__iQGZ|!G^Wc}y?_;A>klF1n4L+Cj z8d4mRS>m*^>Dl(gHscdRbA7U@{M&eYGo z5c2ozs_u_qY;;61M<>fL=y%`WbFFxET#E^0`GiKDs6OLju~g3j>z8dUSYmBx$Mse~ zTyc#r&<^W)>C9y8F9%%o}{15OrEn%7!^OTqB@YoUK*BRjGun^^9brX9nQ^ktZ}EOH=QdL$5q9E*rPr`BCKoZu z))=HHxHqw3G=i=arUTRR-y~vyu3^V4DoAtv$STf1KTNLC{!=mzhW+z6V`3((6u;=f zeic!ZFiQ9PhIhevpzX+e5}R^UImTXSwzZ;g4MYQ+Wt9HGLbSXyM&7|_gJ=v2(4zrc z1e(ORK*vZ#k>Tw;6|EmVAlT0y$h<|clowTk)f8pfEKoYvEa{BzH!hD#D&)>wv~fO+ zBx$2Fp*b_MSS~`e937}i2qMBSXyFc4S+s8@q@U|s_a*fGW?o5#pV+KC{& ze9kFnzTJ6;X99bjb`$2WaqsV7PFluAx50J}P0Y-M-}uCW!&Fs!sZQK>^?;BEX+O1p zwc5o#HIy2R9q(*qu@q%Na*F*7J%)q#D0cBgW0U5j1R+l(qMDd2!lQM6Ffaea_B)iM z2~m3{Rj4dkf-$*|V}BPA8oU#XRQV#NCdNn$gbLk`qT-SxJ*OxO+UWcMkBR0880#rf zMydY@9o~49x`e|*DIJmuT17t!;-iThoarpF!-P&903`Q8L2L?pL%)A2?gYYXSIkm6 zJD@zQ@)Hm(Ak~IP@1^d{K<8Y-K^bSdvxs!ztGx4aB1>@!lGV0y#n?C)AT^k4e^cqA zL6IqET9MbWg7R71IT?p~qE?{KHdwlhn2D%d-EoL0Y!Lj1#8eyqBR zCD`o&_nE3X>zayg>T_vL=ueerG~TyEn%J~YM`698XQR2cVF~0Q4c1VqpUDanBDI!p zPFt;Kj$=&j==JtLS*NOW1Lf7Jn`y9@$K7I2s#o>)xA)(!${cK{oj;o1<~uL8Ke=bv zHfoN6ZKlex+pma6fJO?&v8z$Y#W?i~>{l=BmJg#_vPSX28jm9W~tU$hO@AxOeU4(K^P#{(0d6?#=9^nPlC*8zgPP$&a z@bj>#Q#PHnMtwW^(B+s@-V_deKSU@t;8ns7sGmwz%w3W%Acy)>w|dfi(zbM+6EkRh zKug=A5|1+=S@zwA-(L688$9(~P5*?Xl-&W_$@^?^Zl2XpN^QAev;J&+RVheigG3gSUNTuysv+hxr;q4N0^S(Zy zpuBxyoE7D@w+6*Zsmzu&Z}ZiyrVceQmmLtlBlhz*E*M8MP3XFhkQAWWh$UdNT`Svc zpqN8XqtuCqdFRb%jpprH)j<#?upHDe;coGlfVzm<@D=$g5*jTt$$k`og=40E< zCnUtbrXF=Tv@p;RuOXz4jQRABfx%S;{@c^X)BVQ?=P&tVunPTStceu;@dS$}{xR^S z!u}X#GRuFA5V`$7hNB`L#Bah_74|>IkUI7sV^@pmkAba+`Nv>3-O zF?y}Q{!dVX~$lnI>hx>n;;n(uVvluw|=J&q}WBC7ocT=WefA7Bdzde5m z{kaU9zv5?%_6(sfH~_%;x-ta+x;gOI0R|ufbo#r$MpYY2V^ce4Q+j7ZX9XEBaP-#z z`#<{!e{XXE0|16zE2I6c_CFPwVH4!?hzWnOoAgVOyS)Mq-~fQv0R8*;!~QWLI**v> z7v}%Ag#4oZR}3#g!bBeC?`Hn~^7!>?E3ag)>sP;zKSYSHyf%hjo+gGahX1XduK)X~ zECBH4ubQn1{Q20RUro6E-w&w%y$P$>0Dy(5jl+Lq{+D;2ukQ%{wN3UUfdBpi^gn4p zDvE!xu;#U{{ou~aPYrfE5tpAd={TEtADFsH)uGf(nj0^z0`$O~3c-@vrxX35} zHS!a%3vj_t-Y2jZ0Dq6Lh-jY%tJi@u@LKQJ0RDCS89Zw$37`U!-ypJD>zrRdgu_=5 z#vjZ-plJ1kt^(5EAfF%gDkiU>`u|{3)=GdZB>8=HU?DE}vrd9|A?fd;&1c&c#lz~m~{>L5u>Q=D&#|@d#Q-t#S29DYKUB+Ii{h$G_Kk`4vpRVAxeFftrAQhwk z240g+obSB?TVH|1e*rZeegk!iF@6J6ncRTCG{F5ofbq_+K!)F-0kQg;jaSg8R}jfx zY}IbBAi{)~;y>*}XRHz)e+8z!0{{L^ZFwdzmQen_Wvvoih({klg1-qyLR1OLZ(rW4 zkK6B;4<})<1cCV1n9Dwvz3F%*GyM;;fPg=>*Uh04h)Vx-Btt1KcvNtLY$?reLa*0i zTx3E@DdX?ra49ZCb|N5w=>vMgQ|X^aNmPal@jdmIkCOJ^<*|WZGt=xvK+p!&H!gdhHni0QmZ+_bUD$+kTb)A5(DS>Hq)$ delta 8431 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