From 1f103368ec0cd2df9252450a82ca776062e80604 Mon Sep 17 00:00:00 2001 From: Xalag Date: Fri, 15 Apr 2022 18:58:07 +0200 Subject: [PATCH] Added support for Sanitas SBF 72 (#811) --- .../core/bluetooth/BluetoothFactory.java | 3 + .../core/bluetooth/BluetoothSanitasSBF72.java | 137 ++++++++++++++++++ docs/scales/sanitas_sbf72.jpg | Bin 0 -> 26981 bytes 3 files changed, 140 insertions(+) create mode 100644 android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothSanitasSBF72.java create mode 100644 docs/scales/sanitas_sbf72.jpg diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java index 61dfd9da..c7ff1c0e 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java @@ -123,6 +123,9 @@ public class BluetoothFactory { if (deviceName.equals("SBF77") || deviceName.equals("BF950")) { return new BluetoothBeurerBF950(context, deviceName); } + if (deviceName.equals("SBF72")) { + return new BluetoothSanitasSBF72(context); + } return null; } } diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothSanitasSBF72.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothSanitasSBF72.java new file mode 100644 index 00000000..342ea234 --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothSanitasSBF72.java @@ -0,0 +1,137 @@ +/* Copyright (C) 2021 olie.xdev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +/* +* Based on source-code by weliem/blessed-android +*/ + +package com.health.openscale.core.bluetooth; + +import android.content.Context; + +import com.health.openscale.core.datatypes.ScaleMeasurement; +import com.welie.blessed.BluetoothBytesParser; + +import java.util.UUID; + +import timber.log.Timber; + +import static com.welie.blessed.BluetoothBytesParser.FORMAT_UINT8; + +public class BluetoothSanitasSBF72 extends BluetoothStandardWeightProfile { + private String deviceName = "SBF72"; + + private static final UUID SERVICE_SBF72_CUSTOM = BluetoothGattUuid.fromShortCode(0xffff); + + private static final UUID CHARACTERISTIC_SCALE_SETTINGS = BluetoothGattUuid.fromShortCode(0x0000); + private static final UUID CHARACTERISTIC_USER_LIST = BluetoothGattUuid.fromShortCode(0x0001); + private static final UUID CHARACTERISTIC_ACTIVITY_LEVEL = BluetoothGattUuid.fromShortCode(0x0004); + private static final UUID CHARACTERISTIC_REFER_WEIGHT_BF = BluetoothGattUuid.fromShortCode(0x000b); + private static final UUID CHARACTERISTIC_TAKE_MEASUREMENT = BluetoothGattUuid.fromShortCode(0x0006); + + public BluetoothSanitasSBF72(Context context) { + super(context); + } + + @Override + public String driverName() { + return deviceName; + } + + @Override + protected int getVendorSpecificMaxUserCount() { + return 8; + } + + @Override + protected void enterScaleUserConsentUi(int appScaleUserId, int scaleUserIndex) { + //Requests the scale to display the pin for the user in it's display. + //As parameter we need to send a pin-index to the custom user-list characteristic. + //For user with index 1 the pin-index is 0x11, for user with index 2 it is 0x12 and so on. + int scalePinIndex = scaleUserIndex + 16; + BluetoothBytesParser parser = new BluetoothBytesParser(); + parser.setIntValue(scalePinIndex, FORMAT_UINT8); + writeBytes(SERVICE_SBF72_CUSTOM, CHARACTERISTIC_USER_LIST, parser.getValue()); + + //opens the input screen for the pin in the app + super.enterScaleUserConsentUi(appScaleUserId, scaleUserIndex); + } + + @Override + public void onBluetoothNotify(UUID characteristic, byte[] value) { + if (characteristic.equals(CHARACTERISTIC_USER_LIST)) { + //the if condition is to catch the response to "display-pin-on-scale", because this response would produce an error in handleVendorSpecificUserList(). + if (value != null && value.length > 0 && value[0] != 17) { + handleVendorSpecificUserList(value); + } + } + else { + super.onBluetoothNotify(characteristic, value); + } + } + + @Override + protected ScaleMeasurement bodyCompositionMeasurementToScaleMeasurement(byte[] value) { + ScaleMeasurement measurement = super.bodyCompositionMeasurementToScaleMeasurement(value); + float weight = measurement.getWeight(); + if (weight == 0.f && previousMeasurement != null) { + weight = previousMeasurement.getWeight(); + } + if (weight != 0.f) { + float water = Math.round(((measurement.getWater() / weight) * 10000.f))/100.f; + measurement.setWater(water); + } + return measurement; + } + + @Override + protected void setNotifyVendorSpecificUserList() { + if (setNotificationOn(SERVICE_SBF72_CUSTOM, CHARACTERISTIC_USER_LIST)) { + Timber.d("setNotifyVendorSpecificUserList() OK"); + } else { + Timber.d("setNotifyVendorSpecificUserList() FAILED"); + } + } + + @Override + protected synchronized void requestVendorSpecificUserList() { + BluetoothBytesParser parser = new BluetoothBytesParser(); + parser.setIntValue(0, FORMAT_UINT8); + writeBytes(SERVICE_SBF72_CUSTOM, CHARACTERISTIC_USER_LIST, parser.getValue()); + } + + @Override + protected void writeActivityLevel() { + BluetoothBytesParser parser = new BluetoothBytesParser(); + int activityLevel = this.selectedUser.getActivityLevel().toInt() + 1; + Timber.d(String.format("activityLevel: %d", activityLevel)); + parser.setIntValue(activityLevel, FORMAT_UINT8); + writeBytes(SERVICE_SBF72_CUSTOM, CHARACTERISTIC_ACTIVITY_LEVEL, parser.getValue()); + } + + @Override + protected void writeInitials() { + Timber.d("Write user initials is not supported by " + deviceName + "!"); + } + + @Override + protected synchronized void requestMeasurement() { + BluetoothBytesParser parser = new BluetoothBytesParser(); + parser.setIntValue(0, FORMAT_UINT8); + writeBytes(SERVICE_SBF72_CUSTOM, CHARACTERISTIC_TAKE_MEASUREMENT, parser.getValue()); + } + +} diff --git a/docs/scales/sanitas_sbf72.jpg b/docs/scales/sanitas_sbf72.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7ff2493decd12de7dc66055d5b13d1f57ddbdcd GIT binary patch literal 26981 zcmbTd3pkY9`#=1Qb0Wnk38NG6MGygT(-@U)r@B01U>wVvGJ=XoKS;sz8;L}H22xG-|qtN<*`WHvH2{Ac1RQbhdx18|A#(JMsL!4K^tFi;mrdB&tEtPK@QmP za~EXQ!7Dg3-yH8|dFc!`AmmWMxe!_OA=N{N)gb7w>R~k_3d=9s{oxyI6X{-M|Iz&6*D z2gbz>-GxDdzsJSB?Jn1U`sdzxm;0Z3nY%py(DHYA|7mmRF5f@&k-Pl=j_2-{zv=A| zbXV}7HU@XoHpjrDsjUg!z4Kr6-G6D)f5xw-s!HPe-4BN+NZh|^4o{GH|Jf(A{9S*) z3+#8n?|A|CfgtkVJj7XX^56Y{YKZ)IKbthqKVx$v^Zwn>9?*vGZ<^Cy;J@hq%!^Ym z_+Rxxf76^7Z+^0^AQ59jK$d~)?Ekj2|63hkk2X$wa6RUfY&JXm?|V={eBj!w2kqVi zahZUi9Va$R7+61!gz%_>RpT`M=ffG1AXo#A+;G`(s(kTvdMFzU^EQ%?QwwcymR zfmPu=_j@+~>@klhcn3%3KpP%O=(l`u*>axU@t<|%ISff}_PG_b(cydrJ{;!%&&q&u z8x`Dh=D6+e`n|tPc>M4B?26wd==Jw=KnymY7yG*u<&^)fAGm{*RMm7iGyk9E|Bymi zuQT5MvfgJdp1XVo$Q>Ge@uIAcirOJ9&;<`n^xs|lSG(}M{#U#3y!&tM!g(+FSb&Q& zyUmh4%yrh%#KhCV$==M;#+0MUAg*JaW*jARF(Bl!lew|%i9g(A`M*IzK$C5OPKv4gYL!bXmf7@*Hn_k##bIi#E%#G8h zthetOu%BE=Kp*t_uln=xd0buQ0@np6ch|OLFSM#Bnw$WrjQAA z1X6>v!T%$WGISU^1n!{!%ku`C&znGj&?V?9bQ!`z=OJGx1oVW2yde}Q4@0Wp`6GZb z2dx6Z_ZOgZn{NsLEe?U_AF++1ha&X51r{r-mY|KGYm5(H^20#Qi&x6UgQ zf+`XqNaFLqb^D1BByt0SUN&4hbNS3>Pe6JgE+26A{Q`0z{09Vy0ht#(8SJBec=LOh zkTC@D4zStt3P2U6L(oPVo4sDZW^aIf;{F0buLIcqV2${Ac=>pF`1pAF`1$z+1h)$c zZrLIT-zFloeHUCpVi$bpPD$wl2+2KiQag9b9+Z`nS3oJEb|aKkm656kkSHXl6Bs`~ zzo3Ain4q8-QgWvx^8fRP{TkXKz~#nuf*ZCE;@Sb@-T`AbLI}V-yx_Fw9Qc2Kz)=In z%P+7+a4Tp~4wMIso12S=o0pe|2egjj97Q}kct!WB8S#lZp5fmY1V0>mCr?1m`1u=g zr}o+X>Ry+xZxP(NOJcX=0eJ-^N)fGbL{m#!$KNRL#Z~G#i?nlD*}M%MW+= z4WD?gD404|f@}WNbDP@t@%x#(PVRfxdz(E!)$|)NiA058)eJ){&vtCfi_kgs1vl8h z(&&-gA~m!9)8v4waerRglOsR8$YRgluj{hzjgPSwQdic9ES9AG^wy7Ts2N<~;Uxi& zuQ@Y0@-vH~tYbr$K93DJuefqAO}$`4D$e7qYQ!8_GZQzzh}mGGBY6-f&XYFsQmwH# z$(>_Io7WCDPbjsrzJ_DIPX?~9V57f=RoqSto~og*Rf{}Tug6lZ@bp_x)ApzCH8yCK zUEWuTc=2=0uw8y|5a%>Lh_!Pi8~c2&2*cVQdJa zjvMqzed)ebnTePo=%+>EAUf8bNHVCcK*RPGG zp2h@RNmS=%9X?}CVKLr3Rvt$$!<3T&~|>4U`O&jr1EBd>&gpl{>Z7U_JiP+B%(o(&lUb%Qo9 ztj=XE-nU<$09|do(tR)gz!pzJ{7NO4)hT*=mJqgeS5XOJG z2b-pMprf*73TkCO$Sr;RA>4TTx_1&AdQDU4&)(+cxjx}4b1`0be9BEnA--HV0PEdx z21`JGOr3yObs1d}&vky8t<)+!6~s-GijGg?GOo6uV-~Q6LULp{b%e?xfoB+7ek+LJ*ji0dcDmn zwuj#Cq99yjBCqDG`>Cm6>Na~w^HbaQ!VSE+-CZ=LlVbnfdU8%AQ0|q^4cN1m%GZpNB4%1i zojzv2zRZTYOTr}N39bk*B$K{(6Q3y9)RooDS*!C)#UwVAnaGA_@Z*pATj7d9BK~sZ zQ$9WAwB~Oasl_LAUwlQpt!e{;t?&D5Vkt-jE0=#Npp_MQD%u2nq}D$PotdPMd0!HF zdMrbBL1rNmnNWU*E?@6oky(q$TE|0Q z3GvWML08frgs%?P;a+*@@7-WlvDR@qO9(_xh2$SRr(b*%d0P`;@?aF`A~vM+<1JHO zf_Tfh75%kJi+b}NKN@yQL6u$;GQzOwC$b?I`^Ca%~7Mw45!pjF>s-f0=Uy6iKp2Q)w@VpbKq8+ zw#HvVj5_$jD*5{|@NVu-uq=|`)!}rCsu=vnwuM?>5}y~rR4@IDvn7ddgb-$h)oV8t zjOeh6Gk0^qlJp~o!jigA29f>69_v}JCyrj=B1O@o%>BL_><_P8iDyGUUM4lzRCsL< zncuVCyym*I(Rq*bWL5uh^<(rf83T_Dp9jR&;@yBNjuCd2^;?#2?Y*cRqi)mhs=#e9 zRu?~;l6qz+=YaCw%2?_J^skxSSJ)7&uP#uIpfy8y^vdtNmUgJV`EXCXa@>(B%6tBg z=6z?(cegITW`&Mf@oFYTI>j+8U%k2~e$L0b3CU0JndG-J6}=QGXq!(EL6h3JYswk1 z=J)HaXGpq1=QFC-^V3MuH*N7p<}3uRry5z8MR42GiZ-+dXWvKJ9>C1jpz%CeAQLCRbz119;1u1n!Ajn??+4{#y#o* zucQ{ny#@ja7$@6SVZC{^$79csYU4H2)S*xI@T!GJUGW2D-{mMF*`slIyE312%uNU- z9Tm|LafKR$*MG6n#wB8<>*NhDi^0;QClt^R(2c^Dmdr;A3_}5|x%5?Xi+mKT3?{1= z4R?l79k`Y#Et=>m62DW25p`P-Xw#V?2?-zAUC_}TBWR^=;R`FCcC3=q>zF(;I%g;y zKpYA$QQmiFG(8xpz>lC)+0YGR8T$Lx)Y+2sqn<1Gfd=YPV?O?=>VN3UPOX_0lVSa{ znXEOyDb5LTq?!Ho%WZ5(@Q0c;Uc2|{W$riK559vw>JnC5Qdf?mp9U|Du%U~tY$&mW z2v0(eo$FBCa{v9RZ5d+P3_rsS1JR;V66tzn&=E9gU0nu@*`1zYp;w}nZqLxZyujd@+?xCoB zw`oOxHzkJ^R@;H&^F9QNZFTm0(9jn`BQY+mw8K~ z6%?*VPiI4ukLDR>*cj%9KI*Tf@ z0y?1{&9_YAS#vr+MU%$vNqJDnH6GiSH4ax>e)LCW9;}b4f3dnQ#ZpTQW1p9w8vkK` zciE*csoHF4VP}5LN2ldaYaF&ie75BwoVjzQD2zLM&Gq(Qw9cB4VCK{W0?*BD{$Am5 z{V(xv>fZ)zaQ%Vfr%s&DYd!Tfg_`1L5EpAN73EKE#QE9K*^r_=1%lUJ9iKyIgseHp zwxS;lXG+Lq3?N}!^!ay_-!HZZud>hy_X@fH*uc4A)1jp`y3V`@bqKMAad_fo#jfuB zF>KGrgQK$|XYh$FMyKvcRLT4?7K5C>EMo9g>5KDQ4{2%iyLxpNnhmWSW$Lma!%F*M zT+<7ek=|0DR-t*-OIN8|j5H<(4gp=Wkr=9xlizR4wOc$bH>kJgt~b5xMrT*M=3BX1_n^Myw+}4whI#}Wd;nIR_!s(h^bnoUV%ub@ zQPmvy_BKShsrsx%v%&*g+~mvMQzn+9*w3me{q>{~-`a*7758UD?#;iRj8(mMQ@3r| zi-vx*69Rl&xZre2V=NNZFlBAivb&Ib&QvpWH<^pTyPG5lHP7JyKh?!V=ht*b3N8>O zh%3~ebsY9O5M5rZA8$(t*E=ToS-)t~?{y|7M`gsOb;P>TD@~+T+P76hX2_aoVkq(n zdl*|Kt-t07q?Sbr^Dvs z_BzL@xgk@n>%Y2YB>gDG89QF*$sKcmWV-xY^;?3Y&MX~SGH-3L=t{LcJkMfQtQ^~Q zJna6f=$?ycSoPIgu9%!Cq4OFoOk+pQ8-cfDtZts$AEKLJ^{D4n`3=Tr_qm$^*hyRy zDQT_qK}p;`2j3}rmH>Jf3so_!3H~y^Es(DE%o?3I-=c{DgYJPtRfXwkS1IU*)(FVl zFS%}7dsV9Q0yg&ZHJ$zblE(+?g4xi7Jl;SG_s-vH=^o%?G1IGA71*2=T+E_K;#6D# zam|kny>pFeVMB;uTpcbaa+xN2WP-_t{&H;{ReJ3+HW|3wzuIHB$D8nSr04^d?3`I5 z08~+rW!l`dx%|y#k^`g-msHO!3wuX0vTZKby3?2SRi}+h(4+@ln3gM0$aC?v#?NT@ z?%7WOw0TT1pS=C9CFNSZV$U)yR%cbJ{3?l9mvcM$!kU7loH53aX{gs&v!Q)Ifll+7 zVJ3$kp4Fa8@gKNmgBi~51aJPzhVGQ|IH|>TS3g@5fvk z;~IT9HqmIDf^aigM8^p4)ha+c!_)@|rl`U>!!7;PA;($^KZPk9^HN_u#__?$7Ti5g z4fBQ()`27Szi&QqV^KkthFeSzA@{{dVo|;%V@GRK=tzbm-T?`%ImMZw49R?mB-|)0 zcm=2C;oaX?tJ~!HOXUlI@3^ee!_vGL?a$zAh$c=&!+GNSx`fiv@pv5v*jk(KOp7uk zA8fSNZbafn)5E9i&`k)NHg4-3ZSA||&yE+tyGJMo^=ybUBID+UCyAy_YJrILxK(F~ z&csF(Yl7t>)ObN*C+T$%x;4WJUjw{ASrtm*dP}t}&RcSc(^(iAUYRLWmDDIP+BSP!`oH0IrTY_6^-x2_gI8xSO}$PtqIO1ngvi~N5(Oq zs%QJ9x|a7Nob5fdrX5RbE%cv|8!zcOwTYC&<9D}uAkjJD0IYF|*-jBc(H+|dOXtaG zA3{^iZso{|8&@|u%6(_e-d6FS1KR*wc-jJUV(SU7BW7h4K2`AVaHmHl&fe-YITotL z9x?xe4SlHDaw#IDGC+UdkE0t1~<#-HwSqD zb{f|)E!_x4d?+2RdTrz6U96K1hrR?E!7B^k&_^dPA|45=BvZZcJeqKlQ@bG_$}m6H zLP$k2DLi_F#m%H$O%1>aF3ju+8k$Od%!brFyvob<(saF#w}YSjhGPin&n3PZaW zXv%zeNZ)YEJkU*G#?lZ*o?3D2z0-X?$goLufwtd7l)C;lBe(2M>cTBHG=TV&5)&nn z{g(JM^}FM!mkr>_}f=FI=<-HevU`%2R)~6UW8iRj@TC2T{5+(UNXE)$RHyco}4>ShPc+oC4(Zes;`c- zp)Q+gLxH9OzvJ?0c;9U^LpWwaNa->_{%vmfz=lH_E&JI}g#zn(r)wrYdiATxkp7-w zpSEf(m#yo~-=f8bM1d2dvtZ)|bLwlILXqbW+(V_YiXKv_Ksw8yu$7~tj_(>$Ev;OO zi0p_Ygwd;o%mww4Z)Qx@`1mQP39On)7;~+SD~yar)L78u5XF$@lufjnJ*(`qjsuU1 z$IQ2x)t%_pwc+w1VQ@3JD!$OV_N_c#?ySE>ANq+c!_L|LQE$tfVQYeh%GxsSy9a-V zw9Z-Ax|IT!X^TCpc5u}-W?OLF-L$h=_ zVcd`pNt5xyg-3_vZvGc=cf{NO{cOWLiD&F?&X@vdXL~3oD>@{mVXmHey8_|D@~WZP zDbZ^J_et}G3T^uXx3Jgaf(R!0qHw%Ew)1wso^t}`!&5Fi%ATIK#R@q!5Zhl5hh$K? zLDrUrjX#5p#km&(m@G%4M;74RG7}N zXW+e^jdfe&5x->UxB&nmjr>psySO*%$;+#t2f&NJ<~$p9Comy11_$^7gf`K6%vwzN zYe9S%gb{q$P!va-(d2$H5Q|;)X{CY>Sq6Z)OOlyW)UC5wt}6*))Y8>y8|Rr%il)=} zNwr<184H}Gn@BBmKw-+-R8}+#JG#~(G3vaXcu$VLQ24&N7&83o|CPBDH+;VXGj+Y^ zhJ}dRGL9FV%Eg7ao*loH*^y+$4qI*idwbw|)~yMl2iZ{TE6&kg7wzn66rMm7nLGs+ zi41073mj&t8PVlkCO&7JgGL52BI&U1jPt~~k~p;n5~W~~@)HGRIIguD!Z->|i>wzy zA@9o)Zn7V;Rr)pWUhs0BHXkc+`GUVQeE^9@o&tcFhl#g%&lV=dogeSTqC&8wRxqu^a^{f zSd@FNt|FFyID!G}qz-&TtUynnt~ra8?>rUr3isHX2u~C3GX%tOxKZt3?(~en;T4x}`VQ>nqBh)kxEc%+N>FYf9imOt8}0@8dz_ z9MQurlhS1dV)ZLzv#+u#n25o5t_k)W*ayr_Ggjzyy;!0WIRI=}G4p2l4dz#S;_AfU zr|M_*TkgvZ%hWi(p_wU~mK4BxNsd!%?cFhAdU$;lR>x_35;nOt*e;OTO~A%v6~4qa zWerjw;|-;+HKM^orvSvm&ld4UQmW{d`6ZJ8sW8uJqqYNyagd^9uzd1FK+w>0X`A1P-Z(sQ@D#+{PtF==>t zMfLN^{)biHtP@M*6VC<`@3{yGKtfkO`Ed^ypDepyZ~wdjxSAbLznVDxbGkcStGIQ= zYB6x8FK+t02=Hnf&UrkIu=W$#xXNkPPCAwKpydEq?YFK^uMmJgH5QDe>ty-8Gn?u#o2u*HPYlXAR>|3|?yRzHY=# zj2P!L<+dAHkD${9-JK*N+LHi=;f3D-`>~LZx8j4-QOy+eddH4EVa&;sdvCu}A24Nw z?vaeTCBO9L%KWCN7$gPU<9109=XT8v6(}H#8|;?~H&~wJNXZ=~!b&Ev0-^@j+kxO1 zKPEQbRDLl0msOdd+l+QXse2qvPpIQ~F258VqDjzn@Q_U?sUwE0y+HCtPFZ1-CWu#` z1ApHIpZqg-TH*R1PmiQ8Jdzw85ya?RIUS+!_L_(&_GCSy6d(>4m78JP>h^c^e!D4p z`aI%or|W~nD-ZgOBB^AijeVx295wsv#?A1Mh7H9{Td3-q9n9IByQUS$Nyy;b@)6v4 z0ZwNEcrQ<+-hxLdnl^V6c=i1sjqidxjipn#VYXUYG-bE|ws27kz66j{__q*vjITjH zp_eK(b|*eM2g$W_swI+molj4p5J;oSl!rtE;vT5@Ei##lPlFJGXi8NDffxS7y@{qA ze%`1PH#K0t!PC?FB-h~Hg8WPMyh+633_wu+*e3TRm%y2K3W#FoIgeNQD;3svx9SpqtV+!>gEL3{cmZx9~UX>?iow5!V$y9pu{#49Q_YtoA zj%)mdUr)Z_X&*ER)hNw9bRZYKXDOg>FGgF+8eoxHx$GErQH`*FH2Is5M6 z@BmceZQqfPZ{*}=#_K7^>YmR|FOJ`Qs&cw+*RH;(nxOYv6`w{X3ZC#D)1IO~-`ibd zDL!l$QhHdUY<)}YkKQJ)ua#W-$xgZBjp}}ci*p^+Kgt%9mEZQOx*WUks5!dq6xZ#a z0q=)!BH_VCW%Y9s^)+{YoyVig_Zsu=KRaG8?&>i6^1;QYiYIPAe01oPS2=#_NUzrx z-On-KPJ2rSPutV4*$)4;^>~F2w))10j)P%GOdBsW?=Pk9@7gnMLX*6?Nb4@3wnm(9 zS}82|Nllu5Ev=T`(Vf$kFyk3)@|LxuW6?UX^gu<8KTpj2?*~8R?HBrBV%57R+C7dX zUKcHel_V~qyG8Y%hN+hY=erlb9ddd2{gN6nb8)HUq*eE|lZBQ+OBXdhiZ$)?|Knid zE!j_ydnB>sYEg-v(a0YKH|QPMoVeCAfBo9U<~vF~pGlf;74&zrb}Al=-> zrb!Rkxw<^Rr5S1~&t+BYwcDccPTQirQ~U@6;jJuDvmVpr!KHMC%(1AnkpQ(MZ)xP1 z@%MW(!SZyBLPOnN6Qf|dKV8X<@J4vjCtqA>gwRKXp)Ni_@a>W&1i z0w0*A7yk&pRAaJq2eaum>{1$^?Qz0SG-Dp&*LwFV;(GXkxU|d7%U1)=Mkn|#J=&sB zB#%ekLW0DipLM$mFt-jGYOS8dtT6H^E6!|4PC6C$^#g9M!}RJ2N<>0I!ivbzm5f|B z2KPZ+#D-m@;M^Zo)gX-3VTLJ=#59(_rr*-LTHO3ii8hL1h^B8Wu|nH#tk?u0wl7iz zlMqHuBHh&~XABGA`FCRz&FPua>Xvxp?dx4%~mEBnEjx^j_XSbc=1t+hVo!!I3-6jXfzZw*b+qIojA3eeKN0dg{ zfp8%gg6WrQP>ZB(xp^mW{k+R`(ID=d2^&i0cI(1T9Jq#=9%4gHMZ-zKc0Z1rwoVt@ z@7Bp#X7ONF=(r1he*h26y_pR*gqwT((3iIB%!k{a{gSzMp?e0`S%V|yOC<#WU2SdU z+_(f8$&{T+P&_E@w2{h;{)%|o!a{dE^3>$}HO^vHtaR!Eh~<7T(V!X;-u$7n>ez#pI33Qeo2pi+_qW(V-AGuGnt~xcEGYP|=}fF&=bOtQ!MXUak^$^`TmHxtW!S zkyq9XJ z!7g7vw|=xN>6cnoc^@oU0>5u?&%?SR@YSy_KevN>|M<+BlfR1xxX~02Wt2Gr@ZxAF z6FUoxD4MA^@JoMZnc>gBEo@FaX!k?p5J0FY1f>s+Y-sy}?=}8{Yqn1N=oKQX7e;_> z7|5!#0Vx|GhPec!OUTB}zKjD7;!+1c;QE1^>(bzsc)4Mz8W}|+8~EHQ1+9W&WvH*8AM!$Z;Wtzne0KK{G zk}<~lM9*hQ=PzILBIs=ZLze>g&^!4RTnDgNfdM$b`;*cHu&Io~h>J9i&(~A0N$bs; ztLe5v4NZg0Tj*bw7Go zAEh>B!?(<^*cOFd@a9SrE|7Arq%`}TR^LtOw`Q2>EReh|7F^Uxa@hOIx8F{VVDIh| zo480Rn6ft9Vix7Qwy@UTF%TnYS5`2P6bfu~$YwZcoZwL~kS0ySWsHtn= zfN`86g=PAcf?dddA#K&#AS*&&Y_-Q|EXcjSk&nOO zPh1axqU2pQH@5Rda+0}Mh%V`9xM0`?&0~g)9_>fk9%pP0JO+CE712^iaKI1Dx zBFJ!i#lY**z*!L{UMFllVU;kqQ>v#joEJBIrvv!y0yhM@HI~dWmNkWCsdp?22xA(1 zJL5z8>(_=y*pRfwe2wS$KpnmlH@YVbaJA>AN%d3?Kauz1a8VUf-xfJ#JDjZ)tkyZ{ zD-+|K48a9a!G<>gh%` z>ASV4Fbix<97P!(36!3_6_Vt&O{5&PfX*lrz{vPwA_-1fOJt@kB)yuC*Ac<_nQU)Q zEk?NM0u9}rmO4k7wulS{u3j}V(;$ONQJ{dVPOMg|{-fr3QX7}1Ldw1KCJp|5=QpCv zIY-&!sLGk+WqXO+vFGdifV8&V6gjPb{rG!XLXq5DHzkYNJmr$zgL?L`3Q-(vpnqXP zh@ZLW&MI#|pBgb%6M`E)I=I+{D|XjBTAQi`c;HbZ3i}@(xPLcB5ShPu>CW7IzDiik zA4gQBueBdH5H+uF+!?+n@wz)+={*g%ec{r~7v1_qfw#&^SEW7zDRjNfiKGB$B`1`E zqixw;KsPzmcHlB*ug6{$P0`Tx>5i#WCp>R7?3ml;7A~{!#$KEreET(p#$B!qDRf|N zBE|`xvt$wvIUwU_MmI@d&P3#Xj%`2&Z0n`)(x8<{U=!U;Xs=(8^N{NLi2zRTQTu0W znyefCl0dkCiO{C8F9q9TQR|=4d)omqr(6w?f-N)o8bjinYdawZ*o#qZKfMA+{m1uD zH~AOFe{3ooy`Iab@`ZCHFqO{r&tUQakgh1RwRrLP-^kN9^XeujK z&Yhc4U#zf5;)a)HIB<>O^>tXsBHLgCcdF^__|uxyV&y|XXBhIzW2`(D9JoR#QrVJ7 z?H1?&e@f?$+yxmB?M0GVAq9^W{;0tz+(DBDs15OSOq+VHjD5L^{u)Gy8wKP5bCb-p+6 za%!zzZgK3%i&2Etm__ID=*p77X5}0)R$u92@mPRXNmx@$jub};l#_Qp%6$ID$6d`ZXdfXWgW#)ybmcW}U7LC`A z-lk`(P20HPx~uJiMko>pH(nL_7_s^MOvFuj{YNl0f{7hC1kMy{SlakO3H9ZX2@R#I zVm}O$0qaZ7i7NF+OU-|qLaglici-DJ_R-6?c30WPd*GVy0Y6>fcTa7V0gZ)=HU((^W143V`aLsw%>`MrVk6;x979uxybx*f(Ra_#9)ZR*uDPQ^~2klgWp**|wK4=}qHVE@}2{ssMaT7n0TIH7?7d@xA^0AyqdM4FeU$f49rw9i9Su@8@`|OEcXHR;DJ{TJjd=~FK*pdNshcs zY(#R?4TOV+t>s>`A+t=Lb|1$gy+|MSo`>cI-4WX7`ek==0U<0Wu?@t z^uC&eCy1g_{}t-1zvyx2H~dFZmrTQ{mWYj!lS9#>YKZMaadfiV=_w~ z(Qug>r)9Dn0kW&7Kd^5KBAh|EL0DiOEm6G)Uy)q$#K@g`bI;1Ycn_vhz#ai(m zLdA&D4rfQ)F+;)%Q#yZsMOA`8=C`YbBefE%k6@!h!M2M0R_aq$5s@IzD#%n9p0zL* zvnR=MrK3n~+E7?3(t%e+`cX589OS;16r`tA%@|D?^4pbtajq>2C-KSnN`p93A&j2- z0S{80Ab$~7IeLM*z#s&u88&$rvC4dMk_6Q(_+)~OWHQQbIB@L%QQ;?b(!1xjWs5ME z-N^nX4Y*%w*!sn`*-KNe;M&@S@iN=FT z?a6zYSt~y7y7K7*ZcFdA@{FwCFMKChf;)}Db ztQ@+#2=!DkCcgH?P%9I^({om3L!bw*+G@2_pMdzK&J`-Kc4E4zgsPGR4iV7dhC5|t3> z=OyXegz_DwOY~u<>J77N_EaD!j?T(i%B?5V z2!Z#5U0-$x2De=P@}=Z?x_fhDMt^?aI4d$0c;0+t1V^KhsVnJyh_%2}W=NOGFfgYH zLLd)}BHnpg=YBf6fFcW^MAjAytYx9vINnfNSalZld8_~pJ!nx|JC^lmAWJ55_6Ck- z3RK(E&SSVOg{mv@Z(?|&?%S2QKD-sZ+HXCi1N7MXZghN7#o>DXiVsROspvJM{vhD8 z$BD@)R@<2~%hK!D_tiL7-D_Pp=j3WwJOGiXq+@Y}WLt}SZKri9y6}uLC~K)8Z)Vjw zW`RuNyYmxUwnW|+BZqD(l5m!ckqgLnEn{jT=FC4w0f-26N{dI=>@mg z&y-qs@|IbEYB3Z|ZK_ig$e&ng??7Jx*vy`ulSKEX$B0$Hv#5?B%g_zB$gnb}NRYX% z6qKu!D_HR%?nzLj+708^K;*2t!xtvZmszXefJ(v^W-n1IjO`f%58JMQSUy)dQwB3! z)KNcGx}cGMQfBM!IS&Gc0d5X|zW!zDV%gi8uKVsOiu<%nOh`u^-2-W{$=g~H^K)$I zPr`JY>#n)8-li`AB1zrI=xX4wzjPY@HUru@8~x~ z5XjpBZnc8hoXo~HW5y|5HwdYb@N+7wz91tQBt8z!nfzp&kWJNCSP*aa<;z^!+se!tI^ zOb}WF2=idLUQhWoaD?75ZrvCMdIk79hXBTGueb8*7#)h5g#6RK5Ijz&Z!`coKa})( zt*8A^u+S!3=$;=BEDmv)^mZjJGEtpfMM|Vb7pn8|Y$QY}V9=ByiGs!aO!#XXPF@W- zAvkshdc8djsD2ux$y}h&R2W7eUw5@d`c?ZN!3_#P>G}{YLD*?R%}k35JSU<_VO*Iq z8Q#*5V8~`GckjM9Lt%aGf?oQZk;Et+R?EN!<>sK&47aSdL0{DAaj&P$r6V1<5RTo1 zD8_jA!$lI`EJo7C`8iENrVPsHpyyZ&bPAoj7_P)JYtdu@;B0b&T7EHnf9i^LS^MC} z)(Nb&kHFHH_ztPgABtk`g~N|Z6o$to4`gm!!~H0H6duTLb;BKW=Q#^gNR<^T*4ZVL z*R%#snFxc2dRayy7jEadu4L zKI67%w!=n(_>wTCSpn^pq7D+XlqCT41kr37C#eSS?npxdr7By$VL)(LmTq>wl z-ILlBk8pFg97q$^3n?TtjUuen;-m2+ohum`AZ5%z|eCBv1?sfxf|4YxsO*QZ{ z!&P`Ll4aP9`F;QBn#FImJ5+Z{8p2yyWsh;c3d&ro!SAnC#f$`TIb0C^26y^ zTa8CBD#b*>>Y=z;8-D>)83jVs;`ircmv)WM!5wGIjpoEtBKGWLdEw{Pc8%-$G8J6r zjNsB*v8@CE0ffUVC!@=!G4MSheG##*?*PHw;c-ZZSj=%YC<1TQkdsQSMnq>pMWKH% z%#dLR&!R|!g?B>*848oBJ1h-_&<*y1Zr%<&7d`rCd&Xv?@|JPn&`*5E0QbE(8shvS zxbN0ri2+c_6F2rKW{jG4ObMI;Z;#PxZXmv4KGX#T))*~fKGmhA;R@apemtg0&7v0FPm3_LgJwSPca8r1{rR_TZJBw z6-_VJ!dsn&2bo*x26IwaQ~+SGiNdN`_kq%BM|X}Xq@Eg~+wpwWF|}cq%#GCzvIA*V z@pv~>4AIKU(F_H3OF6!w%xv%~thPX!AZC6AWb*CPx7~}#vFe?%IYWbt{~~;ymEfik zd@$pM7?Tr81yd(;c@T5Q88IRAxIBt-e1-m-1dg=-I(BL*|Q8 zZP;U_xRn~rupzU=#v=R}PAK>6ob;WF#B*o729-ql z4(lUJb*h&?_1S;b8B8n?Wi)pIFYHKu%_;Mi72>!@$DGlX_mo`PDAT~vL$%hvv&RfE zbhva*#4W=aehjZfdL0TUIofdD$Ab;95gLAI&#*;94L0bdLRAu&YO57k|9T-JJ;!rI2`~^^1Zm@ouN(^?45g68t^`g#{RN z3r+cevaD#56Wsv@yiTYXucSyvYmhrHiq~~C6hKnYKv7^+iluc~8Pvgab3I^sw%h3~ z!GUpM!XN{ zPMWpqFR@U=%*kk8?YS$!Qa^>udur?-{JMapIIX^^_N`8;6}JXv96KHCY@vA26;-)d zA~wR$jQxR`s@mLmywc5;*O*~Tu<@S2=W6s@*^f@qDIQ&t$6|s`nQ`AdghKU_xY8MR zKR{YS;hm!9avj_s3uwO19k?C;h#(dR#;@2s zVIF`(VdE>nwb+J1G~o>o$fG(lpr)n59rk`cK;`3?5%JzE zC%T&m=0Wy zn{wa2c|!Qoq$3=e3@D4d=3In?m1R-A9uiI;fJ=fL9UX7@r(SA$i`uOjL!mQ_lhHhY zuPdy<5bN8z<&KZXa&|m*b*gm~tDn_9URC*MuEk#VQBcd}hmiPN=4lWzQBM7RnpY1+ ztK!~?HnZwPSl9jX=49_Trx)u5+q#8=6qq1uLtv?gO_?1I&(EaD?n#nVi+fF3CZk`U zA)}ejC*ur-G=y>{Bd!~5?ysBy^0~}QWo9?t^9CFGh306GI7F9kiQwRl9{V93BEDgi zo+_mm<2|9&w5z_m_Tg~s$B6SAS01h^htoru{ueagp7$KyZrf0w4XuGHzh|M$n z;+tWK;(V*lR)gUdBl3P z-G-yz4JF_q`RT=~+-At>X)|?0UTI!sc#K^wR?Uw58n`>DPR=lcsup+|u~=4&U_!s2 z*2e7{P~)^f5`?hu59!dnWl|VPpf@_S{F{fKCr~#%ffN3_6DSu}q`YZst{Y+S+=i36 zGY3qa-YLqt7rp`7S`|2CIXj41az6D9h%m@oPm~5|4g5B%@G(LZ{!%XwJDgRvI9C19 z9H^N%yc)xTx1jHCO11+GZ?fjh5FqhM`UlyOfv$8JpE(}sf~{kaM66b487q62mA-)X($&hMTiJAS)3*sY*J##IQ3N)F0bhXr4)X0QV zvsiui%Z6+6p{#x9;IpViCz1J%|K zNY}~vnJ-OM3?OqN@Bm9f0qWg&H{H1wNZ}V5B)dDo%A`QZ(kL$`hk*)eg?q(_Effyt z`s#t-b52B0ht1t z)uQ<2J^YkQ^%8s`doXLOZ0NIXSm;}(r&ilV%oJe$a~dFJ8Fk^RWan*Lw+N7sDYeO_ zG8s85AT|jp_=%u@nyR*OTMR#Na(0W^<5I}=G)=LlAonUs#QOI>v!Q3fI1La1$~aHk z3B-gHj8ikcbbKYH8n>nWn#(&Ki-p6)HrM24kH6-;XTT4!fxaOXhkrbe?-!nZ(6f?A zCyPsljFGvjg?QnU5QTKc4A~5?D}y>(4sde98!WJmPBIw+iSgQ{S69L@!^s``?Wrt1 z|2G4*Q$rKYap?NBF&uEZboX}Wj?D`iqNXj~nQ;dtA$ujG# zN{(4bSS>ub=4vbb;GXUK3}>1wMf`czkTsrH8B(FZ1>JanQieOgEUnFu5RET&zD0t> zbvGxqSd-`n@q)wyt{p812P{_S{}lD@@l5|;{Bw^)GP&PMv2MsjZX?ZoE*q((h{6a- zB)5@LtufbPx#hAUm-?7UMJY`eVH-+vze~v6X4dbe@9**Z{kIw0-tY4|=RD8zJkJ5T zF=E(%tPCu^4|~3VS8@Co!pPh}gh7l}0O8vxyqF)rnr+8R=%vOgw0s&QZ>qFpmJz=z zW7;kX?W{`!DP3I>%50l;f@c?AM0HeMUQ+|@RZqZC^|tgFpQ^v<#C791ZN_LXm8=N8 zm?yccPLyU;Aw4MX;;SV`Wfg>|n=xBdOB6s_pq062u4Xena<*X!m__LnI9qxuy;9#&GYZ1) zxJ6gl{|wkR8d%d{_`LPK%24KpX>)ebD^4?r%09(wPu}4YsqIG)^I0_tq|#`E*0_s| zrds^I8hKK}IXV2TPtETgvUJK)#j*m!)YnUu%W1>r5=EraBOu?W1O2nJIwh5WvGM0O zsEJ;SL5vW=!3FrdGdWTtYkq)Fb9I-dRcBb3(DGc4XjmbDS5^zGlRq@I_2g9IkhagWTtSr1898ENS`K`nvYEqIL+Y= z7*v2mVwMg7m~a!0xMgbK#z;f77M1VpPSYrKC+%01GoKY0O@cT>gpL6AbekOlSh>(U z91tqr2_gYbrN(vpK)41brUpQQ4j6-J&}jxmnRrA z%NqdG@>)wJGe~WfG6WpC=|iGD5OKnzy&n)fyc2eqFwcGqb86iuuos>=3c_`~7>??* zha6iDdDm0-3eaa&49QJXE5zdP85A}j=v~ulZ2%+I(9Bi`9h$;@$_Gr`=rX&7!W7c9 zMjAqh0zBADJcr}CDfFb7F4Gd@CBT!q3*O=X*;{eWQ2^>gIDfOz0jZ2zRyNrwBmiZX zsIZFwk7hPig4n{3*{jg(kvuXE+k}i5Rw^6N2;x z9rrFn-3#1DjA7jUy{$>@AIL^QyGUJubf4+-&5Iu1qfYe7=8u7GJFn>d^X>ZgryaBQ zFoAl==3tomDEZ1PN`+MnxF)s&;GW_Au6gARBMIVwwq$_H+0!yo4OGe{_}<3e4wUD~ zNR9vdtVjR36|FtYoGN7lfR=pIfzcLD^Jdi6L04F>IyjAx4IMt`!+SOU&)L5#Uvv4M z6^l5W0=*YHe2LJ_4_Us(eWEZqL(zF~c?3J5&=OxVZn6~KDS%Rk&e%aND50f5^G}`-d>qilvHpC-;>9X$ z(Z!KGC4eZ#JUMceD^-%)b0eu%bS@7G013hALh;l?P(63wlO^9Jj33)61^^jpt+WW7 z3t*g1?90xBx7J!DxqF`Bdl~qt!~ZLvb^CH*#id4#L?nm7@FQT&fr?B^E-6Ev>J0+8 zu8sA$BfP-Tf9HoXjj7OS%u~R%RXH~-Kjxb*5c?D3?q%M=1vj^aaJ?ni#QjpjTV~rP zQs%Auh|x56e@AQekwYTNzQE7TUlEoE36raRH&g(1`>SrugGGN3b-VADWNQOs_{NE!n%`yG)Lv(U|U zPqZ@G3(moR_yZrFw=wc3%2yvFVUGiIS#67VxCAigFv;))8LfS>m!YBu9L4@LxFNP% z+IIu`IcS8ho56mUX(y#{N+|-Q?PbAowOt};WAsQGjs@|4kp3WEvg$C@S*Iug$-kRm z2NY&oXF%}Z1lgA0PM54}4{B;#d!+6*FvByT0vNc zab>Fpt3+d=I7X3-eDnDBnsoxT#v)54RecJuBFGs4PK0xYv#l4})}z$_~G?4rB{ zqF?JNUSB9L5P8LIEu|r5|HD>`f?vRF=Q{|P5rTLhB952 zLwoAqJHCdoSxT5$AE`GO7W%NE^PBK}%D6#0NU(otQ9RJB+r0x|VcVmsSjAxp6HQ>X zO8lp$umFy6i>1nLhRCK79r!7s<#}6UH2ET$fEDrz@LuZ$flu?hF+J z!-Y5iCC=9X7JOUlHJ5LnC}W?UumL2y@XNk7Fr*rQeOOSdfjS6~n*`%7^X&xBmWA!O&k7)eiU$x!OD#tH(-4PdxFfqdiOjXAwE zkOvr?OlG^`2ID$tV!T!>g=cQFf@V?(5TEW2pbKgH46dgi!I7&-4}TJ;0#4d}I|O@G zmX`!GO(K>20LCjdMOj4wkxW(#*BiW!#LrG6GTbAg0GA0`QhSAE6^k z1B~5W?iS_Q7%|KEklK!!iFJnsq}Lf?jwO4+3JApQW4VzO1wq~9lYb%CST&3yQ!QZ0 zo%LKd=g_|pok8Aypr-SXgkmRo302(I|L>Dh54zR>cZ~s&WKe%hiY@$_G?KkJkuJ$y zd;|b|jSBI~!5BmfGURTK9$Fjg&8Aibdz+xkC?p3Ay$)iO!t#C)FJ{?#1hxYVSq11J zAy$D?Kn#O#tJ%Vtm3Yu5%|#HJQWmHxvJCtz1FqduO>BS10nRdMHieU zFMnjq6ERUQhL=cEI6q!Kh^kwj*)z#VW-%qPX^mv!add6D<}VE-xlzC;_8!AReKh*xPE%5U?j;;y8L#a+0Yo zS_M|sR=6!Y)VZFY5^%3fY8o%Lwy0db%si{Q)v8M59Wa*M5P6QDuQ=FIwWxfpNxEpQ zQl#(NpoL)b24FE_2cmjwV@`QEQGIxkD9}3VO{O{?q}LSq0-?XIc9j*I}tB!%r6#Adv%1_%9JVIL`$I>$ib|4HJf()%l2nIE^ z2{3LA{1)cfR@;Z*PbCNO%PsqzFzlrba@OyI&XdfUiVpNw!d>g3CJ=r%eZHBgF^5x*m&$59|ykaq&`bcz^b??W19 z-b36|9o>RY0Kew{;Jt0$;;XhQqhW)%1EJAgR9+-VwEy*{Sa(MEKI6KAvBQ@tx*ItF z_t69C&ey65s-k(oXK~g`CD>p9xaiMFzE7vV*V$ zr73w~UPX}s63_pvySFM{Xhc=)xMz3O1mo4W&^`{cxTTKk;tas1TE#0BGgvrwlu zcJv@d`$9H`7>bHbJxu(d@Y8YM+|MsMA{Qp#Ha2fwL40xVSX?A<1n6C+^@-sIO+dZl zPWnu=|3f3%3|ox##%t>{ZS|EMe3?zi<5S*zDpRh+ znE6CjsGX1i9}zu43V=Zh8Q#QerN908bUy&Oik+^xln-|#A&p7MfM&PC-*^6;>~1#l z1RC&l#$4$S^V4^4Mi+d|C0N%XpbdpWE*Pz{5qYlzZ9s{}*NM6N26|lve!tGT8kT-4 zKOq75${3naj=n1J#@4L;I8N8?` zhwqB(YxUAD7}?uLc8`GOWqtJt7ka|HxUl*o#v+*9lCuxkCN-tccFwQv&^9f-x~0|HS@$+;BSVS0#~~#%2D?K&-ul6x+QV+k z%SKEJ>@!!&ApG`8wCbWRtfYk%TSSE)jP!l+B8!wQPKE3@@~)53FFK2J?~4iLXIRwq zpS>q)Qg~~0Z>c{2IZHY#_1kelB`;(Y0W^SGJX-}M@mX_MmHOzBl-E@8QnQP^dakKHo`*QLm43ugF1 zq5Jpm{?7hVpnd4`jHF?W_BW@(l2PyCgJ~1FG?_iAe)>WwW3e#m@h6Ii2$VZq$AWC9 z#V*l-XHp)S-!6gE`n=RBn09!lZc=uDl^kVs-FeS387aBTDG~u!!B#8>iJOCTGtDHq zk#oM&>H6F9eU)x23!j!IWX4!50&X+AHcrP1zk;23&X6g8`unA_0r!x$jO03j7qN(6 z)F)L(-f{26BIcrd8%}?9Id;o!Rjg2aqg(j}Jc!Q7PAV&h6pDf4u!vOZVgosw&r)Fu zNX&4iBm7-Y!aY=Q9_(ki*3J)db8cf#!~;YnO*%!&Vh*=0%1}2GotB_z?va?l9ucKu zx$gku4q_Ofg5&o72dLn`5Gi%NfK%@PbBHWh_|Uhw?WOyx$XCIvy~jUpDEBU57b0J5 z#meNMk3IQ@t-2_q=SNkj@cBuX#P;J(|2E<{blG@Mew!dTF#MQgNUB1(buK2MP{hR+ zsk^<8xP>f~Tma20~3ufASB?y;_qN5jWA<-u3f;`u zGlHcy-sksOvO%fA(Q*o1UHUe(7yEIv&xg%zAlt8&{GwANqrR5xxqa=oq?=D!#s?1J zC+-ifXC*4;*uF0j3y;73;H?Zfsde98Y^%@8e`mowta36ut!T%C{?gb;rAZmOcXD0K zmz0yio{=ddt7t~e#iV_)W^xyhg2T7`ZpPJ>4IF2wTuhf!BOqC4T`(Wlv%Sh!T0>_J zyx&V?qVBaS$DG$a#v%1xrajv3ntqHh(I4#pTPDSE$Z4Daz`5wThMO}3?@s(zn=~OU zeJf($e-;`U?CIZuq_z$jxS$`I_FY12_F?O>9-J3|bAp6VEmkWp$XsQou6!R+F20aaVn&w1O%>^sYp zF0w->AHl&Fv}z#?U58d1lmXSw%K#b&rQMoH6(u-`p>ame0?(%H69!Th0OdKoT*wTw z@&|*PNyG^<3ZlKz^OD#p%xSxpMnKmBYqc?rJ_ zw|0QKH>v&@nSFOPUU*j2f~(YZKGyoiR-`UlJQ=O8_42{9Mnr{s{D->vCX)?hF?J^H z|$NJ|5<*8uIO>Lxm|n_b}=p1y16dI;)%SQX=AKYATbvAw)`e+1F5?rj@?*3Mq(+;?PuzrtQ-hb){tpw)$K5C@!YZPmbr8Rk= zpp?%$hT;2oNfI~->1aZRFWE_7Hrs#DX8V<^u>oU#G7rT|eLdWkQ>9S5+5?S=Z#8yl zY4x)w^|P*DzWpdf)h-=Is8{`(bLc&L-m&Fd$0dK>LaA^G*`fMC@#kkvUIF$FwMaMV zu_f;Gh|8?GbeHq`8<$A}Bv&Hf(i^#oq6>~^EM^J*4$TU_`Lei*l_kDb>>2m+Dyc_@ zsGkm4=$Lgo+9t?h2t-3A-<)ImGWFNnU0<1AyE5it%`&`_+8fQURN@ zq||0h5kTeeqV9k7#C{|f#dI~e;o&Y51anlrzYpO~dvUw+lsvGI^SpBTfY%&B(3b4M zQh&QrI{4rXMeti`+4Z3z#(Mm9)jZu@m>pIOf?tlgw8Du1ZM~GO9f}`ulH)GxH&Z{_ zh*}iut8kojA__(ItO8VZ!+J>i{`?*cKYjUBpDKedknloL(L#m0pNzdzL5~0E-)?mg z8p19-nM@3IM#Q*2N}!B8-hlGWc}lvjo5}jHzJEn5at?Uj8QoNEAy|plHW->c;&h!4 zw=VzTOT(UHEc*Aj9y>jy=d+)`V~_)iD}7En&CX$WH)nB0DuU3QBScFR)2I% zpUVu`mZ7E;?H2B4e9!p?n;L;i`vf>SEk(obI*92C{d&&XKtdh@=mY#jB93unA1K!;t! zrrqTv4@W}7bjIBcmxix8{nkG&ckN@HT~^FK%~*HUvo^EUNC7!W*t8`ito4W=>$pps z!EHa)>#mrBvvSjaAqxb9O#46`QNA~p)N)OZJNBJGiXlZuL>|JJxbP{(ohP+DzZg@` zy*5T)Dpi5LaLFk9q4QhT5e%$Mxpn)jg7s2XW`W|l5{ag;rKjW8S|*3Dx;|*G1>DE( z>}Iap-pHflO>@il{dyfec?Vuft=?hemvHiF;0s&tG?Bc5A72F^`|VX=64${si!q+@ zPsHBll`CM|!;@Db4Q6#p1=nKzw+^DnU&uCxm(Ny`wK#rG;O$3QYh0;g5%=Kf@2?4>U`ck|?%YgxD3GKP7A>TLnlv&$Nsm@CZ-iKyDUv|X_~z^aDxIp7mb#+E{chyOx?eP90KvQ*eF zvac533=#0~3aaZA1w3bjjAG=jd0s4BvPHJ$B>pA(?N_}H==!%8QWFo%L>nI%T>Gz6 zQQUopQl9lN8s8#&<%Utno!b0ImsA-qU&H@GikdgCg-o70d?PqkYw}^})x8~O-^vQv z@;)!DPHOS8q$9=rfcx!w4T%=X#M`lNbj(AeU7K5-`s^FPN9-690VwRA)y>eq5Y#^4 zc2%K6NAJF$YLqblD##dHN-jYc3Y}=D9RQ!4TFxhO*{`>X4 zUmtQ|q#@^uGc?n^{_-O;P75{ejU&AzyN|53+5**|h)*Q{UuX)+D1<-QExeO9SIH;W z7!??~J!GKsGJfIkEE7;SB)R5UGINi{hoiQWuT{G4r>Wq;&4c{-3sKwd)UsHCShJ9g z5ViL)$D29G_GGNmXI_bd*8Q zBS~%@h!0aM=@K^i9z0=dFU5E0FlKOJ^C+mxC5Js<55LSe)fe3QeHY$;2tXrh9!2Fx z;SVUE5vjd5*1Qn^mRPW3z^9L+w~3Q|b8P&&q{QId%4-r}0ct!{XF3?<<{8;p`yV!O z?JCyV@j*Tw^>>yn*e~ybkHi)T(fj|cE7zb5qtA!XroQM>Ze-^ z=Q5v`JbhP1yDI)CB-}fdj qB;{P|b*c#1SygyCuEWnCF;2AX?e98w44)@+EAQv`ic{8qzyBYf$B3Q) literal 0 HcmV?d00001