From d3183bcbeb9090105fc5f91cc68ced7814cc3a77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 22 Sep 2014 09:10:20 +0200 Subject: [PATCH 01/46] Update README.md --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index 82ab3af..c3b1b75 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,27 @@ AndroidShell (Mac Os Commands) ============ +

DB

+ +__DB Getter (Script)__ + +``` +#!/bin/bash + +# Android 4.3+ changes app's internal directory permissions and you can not just pull your +# databases to your computer, so I did this as a workaround to extract my databases. +# I only use it for debug, use it under your responsability. + +package=$1 +db_name=$2 +path="/data/data/$package/" + +rm $db_name +adb shell "su -c 'cd $path; chmod -R 777 databases; exit'; exit" +adb pull $path/databases/$db_name +open $db_name +``` +

MAPS

__Debug KeyStore__ From 8464f531378b48ee344a5b6f2c9e2e3368668c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 22 Sep 2014 09:11:45 +0200 Subject: [PATCH 02/46] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c3b1b75..b3849cb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ AndroidShell (Mac Os Commands) ============ -

DB

+

DataBase

__DB Getter (Script)__ @@ -9,8 +9,8 @@ __DB Getter (Script)__ #!/bin/bash # Android 4.3+ changes app's internal directory permissions and you can not just pull your -# databases to your computer, so I did this as a workaround to extract my databases. -# I only use it for debug, use it under your responsability. +# databases to your computer, so this is a workaround to extract your databases. +# I only use it for debug, use it under YOUR responsability. package=$1 db_name=$2 From b1e80c21994f2a3372effd4a22b84c1f9cc626ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 22 Sep 2014 09:13:08 +0200 Subject: [PATCH 03/46] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b3849cb..dd3ad8f 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,14 @@ AndroidShell (Mac Os Commands)

DataBase

-__DB Getter (Script)__ +__DB Getter (Script)__ [by Ignasi](https://gist.github.com/ignasi) ``` #!/bin/bash # Android 4.3+ changes app's internal directory permissions and you can not just pull your # databases to your computer, so this is a workaround to extract your databases. -# I only use it for debug, use it under YOUR responsability. +# I only use it for debug, use it under YOUR responsability. IT REQUIRES ROOT package=$1 db_name=$2 From be923271e38bf8240c3daaff3e17bc122a22fecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 22 Sep 2014 09:22:57 +0200 Subject: [PATCH 04/46] Update README.md --- README.md | 54 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index dd3ad8f..d5557e8 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,23 @@ AndroidShell (Mac Os Commands) -============ +============================= -

DataBase

+Summary: +
+Maps
+
ADB
+
Database
+
-__DB Getter (Script)__ [by Ignasi](https://gist.github.com/ignasi) - -``` -#!/bin/bash - -# Android 4.3+ changes app's internal directory permissions and you can not just pull your -# databases to your computer, so this is a workaround to extract your databases. -# I only use it for debug, use it under YOUR responsability. IT REQUIRES ROOT - -package=$1 -db_name=$2 -path="/data/data/$package/" - -rm $db_name -adb shell "su -c 'cd $path; chmod -R 777 databases; exit'; exit" -adb pull $path/databases/$db_name -open $db_name -``` - -

MAPS

+
+### MAPS __Debug KeyStore__ ``` keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android ``` -

ADB

+ +### ADB

View connected devices

``` @@ -206,6 +194,26 @@ adb shell monkey -p your.package.name -v 500 ``` Complete information at http://developer.android.com/tools/help/monkey.html + +### Database +__DB Getter (Script)__ [by Ignasi](https://gist.github.com/ignasi) + +``` +#!/bin/bash + +# Android 4.3+ changes app's internal directory permissions and you can not just pull your +# databases to your computer, so this is a workaround to extract your databases. +# I only use it for debug, use it under YOUR responsability. IT REQUIRES ROOT + +package=$1 +db_name=$2 +path="/data/data/$package/" + +rm $db_name +adb shell "su -c 'cd $path; chmod -R 777 databases; exit'; exit" +adb pull $path/databases/$db_name +open $db_name +``` From aae00fd3afdcdfb90b75fa7832daf046b5281885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 16 Jan 2015 23:48:46 +0100 Subject: [PATCH 05/46] Update README.md added battery info command --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index d5557e8..f1b1b29 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,13 @@ cd apps/com.package.name > - works on Nexus 5 at least, might not work with other devices. > __allowBackup=false will break thos method__ +

Check Battery Stats

+``` +$adb shell dumpsys batterystats +// Global and per-UID statistics +// options: --help +``` +

Use ADB over Wi-Fi without extra application or software

__Prerequisites__ Android device and computer should be connected in same network. From b5fb6accdaa16a785fdb3ff102c54209a305b4b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Sun, 25 Jan 2015 17:03:15 +0100 Subject: [PATCH 06/46] Update README.md --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index f1b1b29..712b78d 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,25 @@ adb shell monkey -p your.package.name -v 500 ``` Complete information at http://developer.android.com/tools/help/monkey.html +

Indentify Frame Rate Issues

+``` +cd platform-tools/ +// Before executing next command, go to Settings --> Developer Options --> Enable Profile GPU rendering option +// And make sure to kill your application first or at least to kill the window that you want to profile, and then you run the command: +adb shell dumpsys gfxinfo +``` +Purpose of Dumpsys is identifying frame rate issues and fix them. + +What matter is the three columns shown. Copy paste results in a spreadsheet. And you will get a result like this one: + +[Image] + +This is the data you can grab. You can create a stack graph, so every bar contains the sum of the three columns on the left in the data we output. Is the time it takes to update the display list on every frame. + +* The middle column is called process display list. It's the time we take to draw the actual display list +* The last column is the time we take to swap the buffers, so to give the buffer back to surface flinger. Scrolling or doing any kind of actions should be below 16 millisecond limit. So this app is running at 60FPS, we're vsync'd, everything is going great. You can see that most of the time, you should spend most of the time in process display list, so drawing, executing the display list should be where you spend the bulk of the time. +* The blue part is your code. When you write your Java code, your `onDraw()` method, and this is where you can do most of the optimizations + ### Database From 8bd67ddb292dd21ee024740fce6a46f4d618ceed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Di=CC=81ez=20Sa=CC=81nchez?= Date: Sun, 25 Jan 2015 17:09:57 +0100 Subject: [PATCH 07/46] Added new tool --- README.md | 4 ++-- images/dumpsys_sample.png | Bin 0 -> 159477 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 images/dumpsys_sample.png diff --git a/README.md b/README.md index 712b78d..7f54803 100644 --- a/README.md +++ b/README.md @@ -201,7 +201,7 @@ adb shell monkey -p your.package.name -v 500 ``` Complete information at http://developer.android.com/tools/help/monkey.html -

Indentify Frame Rate Issues

+

Indentify Frame Rate Issues (Dumpsys)

``` cd platform-tools/ // Before executing next command, go to Settings --> Developer Options --> Enable Profile GPU rendering option @@ -212,7 +212,7 @@ Purpose of Dumpsys is identifying frame rate issues and fix them. What matter is the three columns shown. Copy paste results in a spreadsheet. And you will get a result like this one: -[Image] +![Image](./images/dumpsys_sample.png) This is the data you can grab. You can create a stack graph, so every bar contains the sum of the three columns on the left in the data we output. Is the time it takes to update the display list on every frame. diff --git a/images/dumpsys_sample.png b/images/dumpsys_sample.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a5247323ffe61acb1820b6dd72d95e92270ce1 GIT binary patch literal 159477 zcmeFYRa9Ne5-yCpLvUwd!QI{6EjTPJxVyW%ySoz{g1ZL@?(Xi8pM7+n@ju?DJH}m4 zb5(a$SJmvQuI~P3xT3rSA{;Ip2nYzGl%%LK2nbjs2nc8q4AduubgjA=1O%?yLPSJS zN<@TM(ZSZ#!pZ~$L^3=%66KLNqp4Pt_ol-(+YPdJ9BsF#+K z!aq5z#2)sV${+q`kwtzkv0p0b>Wr2}$nMY#PKAr>&!NlPrKHT4Y41?Xb}A{-%dO+| zS-wgssmJ6xVtQh`nCH&)7aVys&(KLGj$d>hG4A-Tn_QTsLG=e|WEnqGa|e;Kjg>s= zihR9FB*Kb(c~=z*NZ17XV7(L`@DC}1#V7391$Yf&SX6|)4lUOJ?(v+O1zbXV)agug zj(T{hEVU#w)bpNt+C`$^3>)hr30Of=C&5}Z2|0c9#8Tc~6{&#SbOO>g4)}NfNqgpD zO7m`oIG`^Ge2^cb6O*4n7zAby+LFm&?N|opSql9G>NR>|12*m5zyQku#$yv$^P6kP*6P(YNp`$e(+Zy{KP0h0aSJPc0y>9;G}hERiJo6{8SJ;y@ZNT zUwaJ|!R7r_@^G5`Be%Y`!rBDtU18q^l3d|N`NJ~83ZW1d2s=sQ%=tNy7>|G%3CqVp z??FR~C@In=!N3wTH9@T)d=VB?#BqYD2=?)x62{6uRYbl+!Sxf*bDhD$_NT7HuYx-5 zjWnQ`2=Lxkbi>JlG3#lwBkUxg53bzWwL|wp?S_5qd%v=D!v}@IQ4(ZDMGp#ZCGnSJ zP4EkgbCv{E4p1ezm!z2sUlV(YSK4EN3e7jh#zv09ml~xV zy&AF_YuWQ-*TXKb)t;BIHi~12X9xTm-wTtU=qIu-zAvaRv_Q}wQDSsf7)%HSVOAl* zB~dC8e6lRcHIhz%ESiO=ZUG-t+z8nLiYrPiigtKQn8<)s0)kZTo+KPOc_Mp)wA6hO zO%Y|$Bam4u(n>;4_#lxZPG*#H^!Et(-ZX|*1nOWknh2^&vr3He3N7p`&Qm&GK)NHYA@scuc`MvVKvYfJO(S{^?v2(H3+<38Lu}qPI%w_^%F{*_J zD+g|9bBww?kIZRd^!SX)gbA3*9I$y5Ke3ITg*GyEA@M$LfAnCKFr^E?BPnsT;>5w7 z+MVtbrs(ULB4@Fk z{&r+R2B{2_o_(cJ*ABs8tTcR*PSQ>?ToP`QM{+k6OA=p_N|Gxz2aSMQZy9zut&&!` zgW!I|*b!J8BocfpJRD}$w=2mn>TJr0>blh)nm=Tmb>ws>W#r1570we@%Gv|kBRv{C z>R;UNQ4!li5~1`9HFpDsXhL`c2PI9CnCV%DSk>6N*akB~Sv%M$f871(Yht%xGv`~N zuweOt-W2(Rr)k)U)#=T7@o4^-caHpo**Vea@xe;wR{yc{G$?_I%>A9q0Uw#`frlx} zC>x3Up2w2gF{?5wx5K>SN~c0suK_`8v}(7CqsFv`^tbr$SepkM%k`CYR9A*autytY ztysob=2)|wZ#m&P&N;?=CLY^z z<8w!97lMysgkLDRApHCxp~{UJ-o_? z=lEnojjD`qj4v2|={J90zTf{ku9BLoP0|(6xZ_02&QAKEd8Q#xTpGbbI2=3CbmQX2C zCR4_ngR!W$FoSFe!06p~y1!F9<`XtH?5-2&=QmauN*mEo&4x9hAGaD!5Q&ygT@ri? zbR%A+?%;j>HFlL;sxexHR&_GQG`5^^%lw<=@o*t+VQqoHlJ&Qh4oh9ikB1p z3Iht?*?QShEv+prW6KFwm7srzpNhu}-m*V(;YM1?v9xSYA16kZi?_4|(POT>5f_d}>P==PjYUSHl3 z0A5^VMZMg)+HPn*ERQ+*ZL2rE ze+r~aXJ()|h-Tr?_~pUNOM+~zD}j_Lfy^jv$|hvo53_(ydc5F(`3^S{dQez_aGrq) zVxK6KSZ@p6RmA$FSVI%TbcM8oEX^r5eBh+RreHR9jZBuYQKx5k#J&i3l7MW!l$20p zmX>s@6&exc^P3tircOU$^S`9#frETA<6r?Iyh*%)pVWfe=b4@ie^#;C7OI*~nsTz- z#t29r16RTL0x_WoG<4=igfX#mUR?mjQn>=%3#D2ldlk{BXPs|8YG( zT-J{$P7n}55Ghe1RX5PHE{izevKIN%Gn%KU>7II zS5d5BLK?;8uUIXnfBL#7j*OU@XAiRK4A$RAC{Nel>SvM0@ju<>-zz8xbXgrMpC_e= zC@*SX1H;!s1_cAuSM7JQqkUU}7P7wau7lU$Ohg6yrx#~1{AD3aj`6e}5d4{izq3)b zG+b)!!AZj0frG8zF@MK@S9FjL{OdL4U82STn^VOg7Qgw&-EUMZGhfKyM>#4%WHCQ2 zWuXWp8^#B}!UZ*>Q-#~V4Q+W9rCLab47P#`!8~rS9K}3fU~_opI<20*p2yVwKGtxX zL{00kZf*jq)9&!WrSG3Xap0&+zq#EL5yG1ba`6(iPg^Aqu@fH_@?LG{5H56`-)BH0Bx5Y@H6DGkBtP;_$qV^9!xelOg#Hup67Q_seuuRqh^E-67htm< zu}yKF@Yt)+%HF;{!Y^MdQ;)|}sJg&lRVS&e>|4OwAf zv+W<+o7Nq7yxbnh-AefACkJDb1YG8};%xnMt}L@<{LpTI%Wy93KzPM&ij*Ci8Q(bQ)&s znVRl3Q_Fj0cw&Qp6s(JSZvOQB87-$cYH@0cnDCUzVY}iF4$Uk3AeGe`WsBw$ypPcD zW3G|LnVCF+cGYH8*v4T6@B}p$?bHM1JSy4&rYwm*p=3JvAbkD)YVV3H5Fxf>Z$Ng$ z*sD1-CRwi9haE4mj&tt;G0kI?lA3Zp6rJgEcZ6zNJBjCVTSPv3Di>sbI7N_|mL{kv zVeM@4WqYFsztsR5nXpMKik!JW)^EfLc^q4WkqxFwb87V~pviKdNqao1jX+%WvWSzE zCx6gDp353iqpIwi|3_TPH`gEbeN)+<GV~i$~ z2b##O12bAnMGeU>*$^)rLzULaGX#37LIUS@-G#-FG%icD)<7pu7xU*OZ5G^PpP682ZRBu;}{ zuwh)jRRXsLCOYU3LhQahJIWK%gvBOCdSeSr@!AbhP*4h&t$OSO&(7hoW`17=f)ui_ zk!p|$=Gd;cTibSDmk@Aj@h-PIjGO)fgLM%oI26pcnn5GhtnwMN4=CG28e+UB!MP?JMpu)f*9&Z6LJ?>P5EMA$|Lp~(_%-)&(Lj)0I{{`XXF0d=Qejr z?`U~UlJ^3VSz0nhJ;%5;I|^+f-lQY9;ZT`5255<)kyHT2f~%w(4uNRh2*o^d3JI6@ z>v@Z}X_whF;p6!S3d*jDAAgT{m;GJ$HN#p`JiP)Xxy2DsR~TF%G>=6K_|2Smf@+O9 z3=Y;w(%3nLFm#YHVU8d~LcrNWbwnA5u>3}-drzsSW-3~H2e}W?#$2qQ)$_ydr|Yzy zLW}XK?KRv$@&+%R(sto)mj$4=R3X?o&lkHO%4RuoCoG~Y(ec*nCSn7$ziAIjJ5;U&V71=da#nbF#0C;${m?GK@W z+w9)hV_4)ighG@p&}txtNWf4fQ4?_suY@{C+wsJm!fOHzecC0(D$!}|;o>|Qbao~| z0QY5=q2l6nMdHW#ES+o*sg8w&^7dSh;-SbB3`bGu1%qxo@K>6sO1nB8c&5$Wd+zb8OYR%D z1MFRIreE>0GR7-U6GR#4zox%{#6X(Ol+M*D9KsFN8xNmBeCoX!LUh@P>gIq@c|dU4 zMbCUQqbi~!i|otn9sO6ri43(Sj)ckpSE5UWSD&gjL?CvLCfy!b!K-Q^PLR+9-e9}I z^ZWh6SyccorMrjq7F>MecmiyQ_FDt%8`^iGy&a6uL{CzxYpPc^x*E;*hU4W?5D@$- zD=o1_=~s683S^X92Nb-A@KgN_F%PiLaf^y&G|`Ma4;m)pjU}wUd`HqC_9oFH_TPwI zzDK3SQu-?1=ki5)fjOm7l0Jrr=OWN{w`X`_qt&NBHE2o6A*35_^onx?8hW~|jZ6RQ zN~0?jdQidPHd0>+9(|-kTXL9g=w9fx1MFfkPujj?UT#h}yLeq-AuPd7_Nr^1v^`%0 z{9H$W+|txp`gL!Tj2d(~HwqrTMtxy1L27ki_*hK625*+9>*ezvY3P1OTbpMNCB3WC zj@{7=$+*z{?pxa}y)KzhuHVVP@vqWt7ebp_p6($wL14V25oCyuG1GHZTOv+dDYdJ#9BZ1<~(0^2cpoX1qGMITX*b{eU>gb zM~&7CF^mWdn-GVh1wW0m&C)k~1=ge81f*QghB@oAB-W=32(vid`yQq)s*5LC2I?8X{C6QWnl)QW zOU)EF6(5c`4wXu4dp`W3iNXL?BL@Uccrjwb3iyr=^2{9}_UF+Y8&}~o-wYAYou*#3 zD{vUC@k2T5P51z5SvpFPA)IR=z?QH_t~)7>8og`op_h?n`GsJk@+0R2A23rT|M}j^ zP<}z;385EaYLPeyC()uZOY^-f`4_p+v@asVp+Sg&hyyWXrNO#BUe;I1uaRBnn0D~y-zzLJ<2n3`nzWJx1Pr+ z95I6ZrrKmLTc`00Hdg;n*imw+d>N3flSMfc$hReT#qYOp?5IjaZVV$((C2J%-#ogV zP%rg{pvVklNQI5$Tf`71)B+hf-IRqz6DF9KSQ>{f4E;*A6JjBsjEAR?azgeUaex63 z>F(7WsDcQgf!sVYNUf1^a9-z@`i^rwF*(W%NKj;Pesu^9l79$M%!cG(`?Q9ly%^W= z@pTkh`3p$gB32-wPiRm18L9oNci2C+`7UMw_?{T3V_9e(24^n;vyL*v1v|poA|Q7G zZswYcS)z(?Qw}==d-uQfAHydADe6)lGK!vVh|U@JPPpfR%7lxhx8_)Y5rotG-+GOa zWxn%FK)&eX421(tUoA?htJXCsHR#XK+&@{U!C=+SQN)d7cAJpc#LdLmo(fWX06x)UQd(rNunVz?kExfT! zW-qn6KSOxCkc?oHk>V7R!b(FgH55~^W}1hFhjrz45%tKfeoZKrC43P?$AZ}gt4kfOwTbW#+P0lYe99tC?Z=3uO5g-Cz3V` z#TX()?xLPzBi_oY;V$Mg&0AiAGfpwdRz!4pJXE!?pgBK`TM?P*^PS!&TF2hUoH(hW zm;QXI%Ip>tOjstw6oDjzZgKxIOH!S$qB*XPaHD0*x?$+a5rhfLfm2i1XIDjEz@ie zy>e#GI+G%ZCe_S^(vawV#&ncHIw=7!!N(_y<%=KAM>Il13FRa+iXhd7x0DEz0CX&Q zA1OrUp_n+;(0{6ssfZyEzzrRY!5d#9PNKXFMIwK5s5`XEJl;ikd%8B3kFXWN6_v6A zKx#HX6T0PnHHjcKoznz)x)!*+CTl*Mv7qX545!_JH^o%89~vcRe92c$*?T}Ka_^3h z5(+Vb&k5N+ao_Qan#kkw8{JXJQaVV7iv1w;YdC|Yj;K7DShu=^zBtZ(nl`Q@KhB?G zE3T-*1LV;f*F@EILsE~QYrEFH)EUI`-h|08<2)9J%kaCYyo~ur&Gk~|xRE9-u`Gv0 z0uuvI^x}qJ>zy*imJ<;a`<&heU}^HI>vEV8*O6A98eQ~pi{B_2YSCij2ytI6D;{)`=*sOMz;znQ`O~TJZy)~VD%%O{z=XGgGOP`F?(sW zEMO>Y4zB}Qw3p%>k)8vx4X7`PVIaSy2Z;#h=t9GhRjmDM}P9MFU02=lCHS9*%zk? zNY(;jOaWSgdOEwfz2}TsY@|##sqhR4ot@pMDf#!-Jr?0xn=@B3zYXb~Ys?C562l&1oGR$bBB;(6&g7s?;zxjx*pu-VfP7 zVYxEzYfP_0r?s!lbUfT8iP^G};2e=k%HvOMZ@4LrZM@^@jO!ZrKXwr8MX;T_^?deC zD8m6&vK*r%QUJ4cn>Zww&McGKp=?^$3-RLtnV{i)GNe6xgL2Oa`JBgjZxhZWz&W&1 zspxmG>=o7>3)UQQV3r0&yhcdB(AJiJVBCzZAg^nEkOw2F3NfZE`0a^FV3FdcJyakY zIpmpOTYBt=RBPxM@g_iGJM;tzAq+3xcn~%u5o<}2dyokFYCsTEr@Dg_2FW3dxIU&c zC>cb4tVAg_*W*TtNQbK|-cEix&&B`@9pRKx%`%K(euJpCy= z`2*zqsYd;r|Bma8)ZCbd9N5D_rtL~3L+8<6luYUx!Vlj+ps7>cSEOf5+ijQK{c%uY z_ADO;oLkCY2BB4gChepGq(HPnsn$)`DPe){0Ig!yXmmymrk;ZwtCR%Z_Fe~mShK8$ zE^|kB6ssD8y6l;p`_zyVk*Y|UI7}79fS`~fe|thf-ENRkM^QcI4JXtJa{f~yy^de&~2i^;CD#swpH#5Ag1Wt0G&N2yg!Pj4a1tv{~ zZv%r*P?L6=VQ~KMuqZu_s<`!CW??B$sIqU@kM`-HbgtXJZ{Fuj?!&OK;|Y~005{by zZg;a1okaUVVdz-$bz1V!O8S?A-=##PXjdUd$;qo+XKQC;c0tKA^(3~ZUfFb(LqkXL z`i%%~7oaJ)RUw;1^w}!mThzJI zC__Y&vj)W~_<&vVjUOHQ^Ons-n-GV28MYK1p>Os-VoxBg6h8P-B``WZ9?(AzrTJ(P z7oA;B#8?NU)44^-y|6(W6%Z&`<-NRu4p>ZsvVsfEOmFvwtecBl`4-l<^TRFX8Vm-D zzn}bOk|)Yr+E(M?8wg?DE=D&$S+q})Vb)}`!#kcftjid7cpqo*lyHHG&LBV@4M66+ z>X{-wku~~rB;pkgJ+3g!bbH9t?tRo7I%Bwacbg_v0nw`OL@(9vln8i*g4i485#!AJ z*yP!`MoNXUKMq&skRETn8-Ig{A`m>tJ~lSIig2>qq7>@(x^75}Lgzg9S0=Xc%i9~h z4Jtb8x5`E{J~>D@asYv`xaz6!m7LNH0qDlxMRMM-2L3XeTJk1-pC2cm&EMPhkqo4k zGyaB>j(1|E6kz{!m30_;0!vA};25A7ZH8?VXQ(c+Xs?%EjEi6+fzK2(OyQyss)oFf z+BCrMjL+9VV4rY1ucGkmKzgcVhe@}qu0uz0oGm(iDv|URIRl&!@!hR!>kE+CLNcbD zNG?E3ssIlVDY0Xp&7BHrJQ<`+A{{S`-RaMz~u|7FD0Cl5P~9S{C9BG z&!UJ|Y1jdD&ajyv<9((aFl&$#2K|cMEQ3oyj-3*i`K0^rHjJ^2ztw;l0JT%p$>7ytbkMH$7Q`(iN_EO)4{QGs4p*YrEm7T&2`&hC=B+CX&I>ixD^s z9$thOG;KmUBqHV`%^`(EjX1?2iPv@=9EiK?xUT-RoqYJiVQ5-D4$wcUkHHN!on^cC z9OBxIuB58-wa4l94u*b|S&!clO5XdMwD~#;{KghCkNHW1g9bw}5I@fQIeh^7vh8kQ z>Xx@iXMzTL)06^%?F^=H)Ngo8zFb1KV4~R4rC@DOJRHif5F$u)1hKPD6k)-Emxqzhjb=pNZyyG_m z1sOeVja%Kv0b`zucTiEx3CR32aJ_h2nVdt0|K_NWkZ^&>oJyBmiHynk34oy{Qv0NY zCi*TaEoo6UEceH<>=Y0)Ve5=C#PW)h5XXX?bG@%bf7EfDIrDg-jt|7aqM?ogR7tj!DRm+ap&2SyBBzV zNyYwrMa4t7JIF3|Igwhs)f0P3DVT#p$x&%|4?$HoynrZS!Cfkxhpy|4J&?L1%U1Lg^+s*{f z_}Nh;74K;u81=;;U3gLIA$e^?te!ODE8EN$*lEN&;P_FPQZE=BV+ ze2Kl*d2v(?Dn{JG5`&;g*&CcUdln$nz>mJOoQ`j8T0t&ZQi=17e5?oz zlE)NGf{u?|(_|(~2)}oY8KN49{YjYI;nUW9|BRYzu>iR3P26Ye8p&&9X?WD78*2sm z{4;l+V(g!XNQ)@5(t1o5!HMUhVzU91u(XsF{C1-@g^k|}HKETL1c@)qJYN+5`*sL$@1~# z)XVb8Es{4gRFKsX+UJ#yfpCo3U6~T>j)5;gZ1}tu{1!@3&~FYUk~hGHA{VzJo0lmS zNPzO`2}C2Zfiun|DZk6!kToOKT|?;ixc$tnWOTFjMu2=k9}@bN5uv7QDrSmTDA%S^ zafoxoecEGInSI~DWJ-5c^|Fg`ORl5ZJhh zc?A#SrW21&NKn!)bIVp00bMq9j#S-q9t*v zV3VJ_#*lp`z5{ZRSyinlAfPI`e)pfJP=rn`XVZPy{(@e-TYI4a@EK)9K|LV%clR86 zkBGXwBz|Bqroy0$s5Uu!B|tc$qudJJDq~gjoisu3jYczlXD~S-=v6ez@ZPvEOr{NW z#JPQn8rS*j;tQIE?$*)NqKx|pZ{A@d%B@}&|4>&rd!1bT`@>F9aOaHOZkLod+8!i&rpbdc(M2TlwVV1l+tw$6?>$ zNeD&xWZB{Pcq085KZ>$%gop1MZ(p=7>l$y*J_Y??T_Oq7*7ic|A>m{Hx_bjC&lKzv ztOeZloB)qJk{uu^3FbNAxV?s18yh=a(Z3^MpGkF>ziOK8AT>|fY!OB@ zM<{qCi#NF7J=1O(lU9~_&bpz?U1ZI*`*5kU#hEn+N@LzfK_syV#4u-Kr{HnmJfj)U z(RDUhaWXnEV+8EzBmhn((pj)Y>s166QGx5%h}1BF`$Od7Xo3}mb=@zf=$$-Z+474E znPrZ=&Vk_X{8dmhQ&QwB170{ZB$~;bw>{u`9|(boOegpbjE92Sbho0I<@&Ez{m6v` zx;N;;oG=1@jFNH3vCoE{0HFgwgl58k1DpSz|9uws(O_|bOqEofZbNV~&I9@c8D$cn z--{!LeSp1>(=7<+l;PUzq`cN~)W$Dy&b-|uOGtyc^OokO=kD5#3r%6sQo5!~mpERv zpE$gjHRVD+oBRB_PL@z~Z7s|R`~(6(8x_d8PVN6jmP<=nV$q7Q0tp~CxqBbH(VJNj zqb#v{kV-7Wts4R|A{QiQ4!Zu7JgcK5K5pI4F%b-qF8?aPj4~E;|Jzw;J7?edWx_(A z0M48IbkrgV`ITC{hx?gIJ#%9S7)ps!$EVbulT~MT!~P@JlaZOT`8;HJoKaXmOBVO_ z9Gb{$W<15lLKCa&927)aji}$@&tRmjr+50$(+$;*Obuoof6Nz4bo?E`0KJ7s2~O27 zWcG({18#0a6gCqal#VuATxHve`yp;jw)iUP^ywesAQc?5adVra_)+uqQaV{QOSWDw zT(7SjkuD4ZfkJq5B2Efksr_3xILdlHo#>60N17=SG7mAs^2ph)1laMyX zcVaTz7=#qhLlZU)|G8Jl>^ilGD#CACtp-@{ENW67Rj2F1AYBS;!>ezvEIpVLoh=PI z*wx~0urK?=#exWpO8VLi9(c=)dh?=|)I9%wYzRe0*ah;grlx zJsa2e*(i(k#GnjzvgAxBOV=~=i##L=*RY!h@NF+_>B%%ZJ&JWW@5frtO%+@oN~1Cw zh*h$rxv1X8!jjB8n<9OXjc-17+1<;(RWO`-sS#o0X9aP$<=-wH5A7NM)6QCX9?G{GJ4IE{L+Nu{xp;?^{zT)h6;6s&$48%z#$o{#tp;LZGr& z$f8OjzJ9!;+&FF)_^WmZ-S0zsxynI(H50g@dnh!QoNa0SZtXu;GSj_Ovcz#E&2uqW zJIQc86O%82eYuCCS=|_U*0vmpR^SY7ao2vo$v8BCnET@Kv5+*A&h`@ZOUW#|2|gXc z#lBVTvA6qseXpFP_E}Iix!FllnzcFZuDMr;D}A~>b!q~Mk4NLN!76P+TrMz8vh-5< zpd*C!Hy?-RCT)yRbLNKG=Doll2Gc*gKa1oMzw-Ay?0_-i(+WeDd`G%0|JJkLrF67B zWwe`js*PR-=-~qaK%^pMxQreGS!KUnB{mIrSu!@&Ra*M?${A+GvhDa0Uds8-#q@ zccqDcNZyPS${J{R6e{!f29a^v48s_DDRfTG)9TZb#PGHg-d5?2_O3faHTjVfa%9*w z1vr(u;h%?pL41Urt~yLQd7&^~qNG&AqohXy;9%{-Ks`8Hmyw(kDgeZqR~YqVE`I0GYx4h=R(*$AE7 zHrbYXC0x9|6Mn^1 z1iP1`RZ@<>7VN|a2Xaalf*J39p~0G2^~Z8elBdTDwDH;)ZGf?W{jClY^tg@Nv3nqT z^3cFgc53%6_*YT%ttvF3y{H--p^D4F1Wp;e)4Ixnk@&Y$N$GRBioxut5{3&Fb1X8m zIE)(FdShb}3V7zVP&!dc)YZ}9S6qmpsjWCjv24>f_k$g?7Aubw+C56xs zk`4#lE&zzpkPTU|UrJl=yGsIne#;KofV{}PXB%6Tvh7vB1xV~0W>%Ocow-ZK(6xN| zn`4M3$oykQNv>K_6l>N9(HuTJ(29K9-_gE7AQN^5lKKv^YxHp#3SU1fkP@&{B&ZDY ztZt`1AxguRKx&nF;T}{2XM~W)$qF+EPK6C<-*y`^ut_*`yh06CVd5_ksHz^f_tD~g2anL8bKwkyXQEUC=}n%Wr58<$4eXM z%avS0Qgt3F!77H|wdkeQB4EnqN?~dOHXvanZ!OZ`+SawWU**#8VPI14(~1m5vhaK@ z1_~L2dwPgxY!3Mtad4x8DyE5|9KMq!_miX}eo=lG!V{yX{2SO4n-Bu(8}m4#yp5!h z7|@u}>E9s6PvB_Jg^)qs=vliF9NLOA1CZqJ*iyzQ7zB#+Xemoh?XGW(2~+C%GtvJA zoK1FX{36Jgkil&su zZ$b9C5|KBpBtkTAfypeVmRwn-_i&*6ueScy5(dO0v;u{k92{oTe2=b3GXqbp$>XyZ zwLgBa@wl9&c~86g#-0y8Zr+l)d)Y9}<(NNuj<3eFlVbb@>AZsno20mow)j=ljf%<# z4@xp40fPXMK6%jC{0VmPJV?K6!qRt}o$B^jY|uhccj~jOv>dt=N)@yz_Yq{yoD}D? zE!L@*_1eTdfT^w5pPn(A;kmJy+k_F-1{sV0^xA5SV8Q0MmRN(p0oBgvmfyW>=fY^$ z%o*}K8^l^3Yz8p%CrU|IvW*clO<-)m`BUS-br3#vQsNWkEE0Ef%1h_&=4}$zS07pJ z)MX+V=JC$>nNQ$By}hJ~lpak{HdPq26YRxWm+_zdpKs0ao&4`HrRRK??hJRPlq(bs zHLg6L3oOm}>9SR7&qFka6K(e5Z`0@o+nd5582@bH9z11l%kSKFzl&@AuLmzPn(Ivg zdGu8)BHmxWKXh6~qO;<-or*~PDW`^_7VU7yaVE52nCqt3l{?Wmq^^8kDvO!du|BWC zK{~zp@q?=QtfTs&ZeNofCU3oYarb7ESZqt$Br`3m=lesIiQ}r03cIwN?FJ%3I^r^U z_~gNk2)3dOk>{B`kMl`VbaeFcY3)y&-1iAHYY&f=?&HkvQO(d5CAN{nTlNmyMN^hW z5?tNjzcA4K!GbqB7r-fYym5A8@XTk0q2kv`)FqfppZ<2H>i3lH$=MA;tY}Vag(^B@ zdz*m<+=3fiPG-Ex7h>xo4Ddf(m1zU8P^y$}XZ6EpmHOVjHtX&C+&|RjRvRRDu|!n! zGELMjKSx?BhH>&lDSR0|uVxGkdL%A(_LQmTZ|3hW4;0IL@w&VI)f2BZMI~Kauy5x8 zI{CKNNw@11cwBDL@mc?`w>hp7dK?L*Zn$`52oYf=B~bi#-hz_U5&HX+HSX>jcjHVr zo5ttTXwtDC5H9y z*~Js``6Wk;P;J;Nfxoi-XvzVDW{J}zg~KDQ3ca=|@TbWGZ%`3Yk8RavW8NJs=s(%8 zJw9h{Xm?n0Zw-ncv5WI_4c%0iP4WU(bzB=z3kLYPeX#aGW4PU%SF5`L{3pKdFh65s zW2by31i~M#2_DXJT>a}>UHuv4xY@>4mfF`!(`0Bng$3~cuFVFes3_^{$7qUg-jRa* zsXwGmP`@_(wg&FCC+C|gHsh2{*APz%g*MwJ)&~7sxuq|kad{D8q)xFa;fL4V+FNO4 z5@y!;v~P{L<~)1JVj^iO^!=ItWw!dipTE?pz?kzq$dlB%y<+$a%G+1RHKh<|(|vG%)`spalhpiJ4cCi}P6T$idQOp+qr(?BHPVy2}W)HF|ML6U@g#(s+qF z_UqlW3gpuNOpzhzpQdlqYV3cngo%qwA;~7s4`yxF`4)I1gxa?PcGiDT8-(#&4Sna( zplgA33f&Dc4dmj9;8Ob9{!s+9GW#jUYuPXiM-1tpe)|RGqFCU6RE= zU(JyK1R(wVC$mz-3y43lPPL$IN(GcEdD&GVtk<^h3vs-3z<*@tUD{V5!T3j`_Jl*B z2HqF8Nt)C3a~aqe+j{&rDO$mUB}~}BPecF>P$X?O9Lj0c5Owe^IbASa?Y4j}fM%k! zEb9D!J0}F~)6RTab(0E92qWfk2EVpmwzXSatx!{Rd}o48-v6dLZBgQ=F>M6#jo_X* zVw5Bk5f@2=@u$GtakD{vaOU=ZcRYgsoNBKH*hyhN;>6(bR>>pEzRm5RRq@Xcj`T_F z|DMME;eIg(xKj>lH6GC*fX0tlyqK3G0ZmFmx;B{|v( zL2IZ*zz%*NH-zRxc~64ltCJl@6j-*U0E^eh%Nf7yU!g8t^-p&paDWAhndW2EceYwp zT3UXt{k4f2Xv=NSklJavuJoQqGeUTHL~=jp69y>Xm$+klwKNVlT;?SNin!uKzS;+W z6N0p2@6R=r;rS+p(e|%b;4cpGk~=Xpr=GBAsZqOZCh)4I{Y|fd=(V1xvHY02!|A!f zd%L#VV0?VMxwFAYA{M{?@*@X%X>T5AtmpZfMa*uEq>O5YXh8>QN zG4C6f?>V}kC%l9nd-(*A>hZ|LV56{bE#gCXUCgaF@!#n6E;S#4|5+OSy9M+9jM5r{ zxi2-E4Q>4ScwCiX@Se=^{TN4`1?gXccMj}o^n7#29dMb>;X}!C9%XO8TdYhtV_(J_ z&Q&i-n6TZ&IJ;YIR*^1aUORw%Uvi*$*})>zq&HdmjTd1dWsBqCCNcJj>XOaGs5*7~ z%~QRwilWp1>f?d$2jJGRPW2AmatL673E7`__H7k{f+l;!1Li5{-?!`5XU&yWcFC7w zLBEW$_CoGfDTJg--v$3WZC zX}T4^mVGB;%sgGeCh*D9jv>v}Nm!g$&$Sa&MwML^vg6=h$FxK?rUB5MR!^jm4X ze8@8H?;(D>Mhq*~oP(bHPmrCpgTtKoaI<0TtZDdp?`tn{BO(r6V*a%+=OD=Crq{0A zYv#{qyw9!1#rCoN;pj<-;^N}g4lYFV+A-CXjq9)#jZ>rH2`ffuOSF_>~e>FHV5CkXX zE!AzFe;ubLZ>nsvIxDaA0qznPwwQx;SwWtQE=On1-)zbmvEMYp=8WRDD0#d5e@wk) zSeskZHjES89ZGPA7K*!Dk<#MsuEjmLyOiR^-QC@_Sa2;)vEuTDz3=^e@9!i>=9*b+ zWp`8|D18!xlxKBB?NGS`nhwQ* zUzseL5>)f#Zq4`;>*kx6|87*aImcI|^0+a9>{AAXM)d3Q(Spea!}3LP={!`@JQnE) zJyp_wia?pQxkpHs5BYQ?Y>8jP8Sk8upt<@hB<25!_WD5Jh>bpOAoh$sfG7Mf#uCDBVtM1f zJSG!5n);DP-?8Xfs{cuB;0{Sw$kuCBCmW-nrZ}X4!0N4b@IkwrRz$lUksdtof8WbN zeCsYjNx*+F0r(e%gv2xKh_I5zWe;f9-A&qFH)y@HR8F1_X^&h*pmxTC`8R}BX98r* zUHNC!bYMYH9*iS4tcgu0PJ@M!iCk*nSaQXQ;ZK2c+c-_m)GvIPdnFS8M$m4Dw@uU4 zy|Pu8w_o|~HALuo{S9Gh_vukgve%fAvN^e~RanOmGs zk13TXK|{}e#a^CS{T|J{Z|mwfiay1*EH`6w^DgY<2v?$M_Ja(xCp^P{dNGCsd;XA5 z??UiF8W>!0nvk?8e)hXUx#G&*EW41Yc4JL%G0_~xPc(y?&|G*4BAox}X8ILiQBnUo zCd07G3WwdRHv5%HomqWEvomSPzQ1;$d{4yT`54LjPmDX&f3|{zMqEg(#~<9jeQFIi z{N>qN|0y!B`H4U!1K80cr~Y4NA!c9>(Zd?iD&Da_P()07GD*}-9&>nmw89XNi{z!> z3NfEB`P0AOCNz4>i<=#i8!D)}ee~i@QWi0@v_la81qj|W3nG(%Xa=!IeJ;=+lBdKC zr!YO$+a^y)iGllffV&cw{{TRcC1D8O1zDXoE@4y>6a_k{>Mdev(vuGVx2cT@!w*@k zJDE%csZ1{d;zrGK$;Jv39Fc7G>D0sjQ%d#No8YGKl_xh)&;(#P_7zxayrBPXEDPjZ zw3!0%y6r@AvRV<~;ofb~{6D&(e$!2O=k}R392adVr`XD3n)3F4ksp;8@~OC9_o&`2 z;HyJ`sLD0t!?Iw?<$rekzseS!9A+f1C4|lGAK2+11%TcZ0E|=!UuT8W;Y$zuGz*3! zZ2j+$Pycf>L@DTzo`bvjbioFq4X{7XNd*t9{wFsCqX>MFN19(_pTsNR+EZgbLBWh$RRl33(8MNJXR# ze7J6Pj;De6i_S*qPbRL~qayMD8EOd%^n~!|S`Khx1?SGJ4yT6>^Hc1gnEE7-0;HD@9OACVwQ8x+=?mIb0`(DZd95Z+Etb z4Vf-g7$w6@rG0oZI~R!1M;HF5Z0f$Dgvi_B&eZ5D)s1Log+-0{hrWlp{-x}Y@cNq~ zBx9Zyhf6rkHE<)STsnGUN@3f8a$y1YUptblJl1R8U~c24ol=}5L+Ta~7sQ*{;?VQ1 zbO7K+PR=AncnM%cpfX%5s?Fr(zo}{Xj0~Q#ELCV)oF);qfuX`6f2gX8 z39|+SPOhL?U2<#!AT&)DQ))KUO;%L*9`tz3nuQ+`N0^;0uJ)j(G7})7qC1B&C$9ye zVK?b)oywohcLbvPX&C5YqNFiXWpJ%&g#mc9)O4&YrOdxSg*VB9#}brL4haG>M9{Kk zUl25UFfd^*ga}l$Ubir~1Mj=!7#vR1!_+n*q%G_(zezaWFQM1Zs<78q&FVK!zX zwZV8K6Pq7l)1|dr;NQuYFl$HuQ%D*-zSXL}<9Nnhl+#AcmHjsYC&0qm=O3^I@__sZ zsB|%e1kEzsbM0VcmN^u63|W@`x{|?)?tcPO1?F_CGLwnP|6<=?K-`3p8UX_d?u9=d zO7?dAuvMu#MoJds0xq#a3cNMee7q?KifOS3ex0y6j?cDxLlF>_2BRf0(IRWwTpO@O%*NpVB@CR`rEI$(7> z$Ui_zNJz<5^(pD6sE9vuy-VONkXj4kn6#z431~)vRRRP4r%>rsd2D``Ek?%&jBt>f z*D5Mv(nvD5YpzbY$y7qIuiEqFFKzpbDgd$xDHPi$!5T=C#Y@tF;ycJCYnFH`juy%e z0qI1@-zsUu;2dgHbQqT)SBHd(BxFz)g>tUMLbx@8pQM%-LOBdJgtx#NB2rt3;=5oG zK^WqNXzExhev$uzQ3pJ0;4oUTyl0X@)yn?y&Ic5dYIZ5ku3aU0kabW4b-p)ml zoQ3LZXhlvkImLTrz(EEW#K=nH%8#|FV)aofaTtMJzD-0Y(C5;F|4VUmQ1=ZG)5?7g zxJ}p9Z=17B+ejxEA^BGS$4Nj|HmHeP3I6dtAQ!;gu+8&;=m%fO5L$4>N^fKqt8_uy)-54c2MXdyxqYCwcWY&=Lhw-pspDY6A=#-mcgV2*J` z*dTr&k*kCJ3^vx^*$lB0;PIPE8h28jo-Y277e*IbD@D#He3~}uCBgD&5o~hU-OwxrK%{F^@FvTT1NvrlIG8;j2iX1pd@&frq=A z^gGAE9Yg;aH5-~t+~ZX8v%>ah72OB`)FbL|+tX6sNy*L=TnI5eg;b8u%|`$b6)K)4 z3Tz|6CGI2}dWSOQTvt=F)ceG#{lly0a&Ii9jCrNMUzSApTG5?9fEn#9$5h#Ac7LMl&H`TAbxdD+#2r4Bg?r!N0d%5(Ys7(O zpQlA+T6~~iH)PzW^L2*>PtGy0z6BEzGMGL|GsJ+l5AkIevH4uF6rcgj{F3Iixg=ZL z!x%huy}%9ibM0!QGyHr%Y0((7E&e$0@^qbLoRe}Wlzd64Zg=R?Tq4+Dyq) zqm2mELtA&EJ2S@0%DjBK;$}mg-SoCtxkQ-aVEGU*Ht?x9s^7mV1sUR#JFIp*WDcq& z)JGHzl0C@JFt$T!_8UJ9jPBvdm{fr+&J^IhP_Tu~@Pih@*;!*0^r5EJVjh;`tBPn< zmhLj#=iMU{YK*wZYdB&Wo376JX4)|5*o z_PvisY-iipijZ6O=AG2w5Yoqga(8??j`2BD5;iAb)2lx`wB-Nx5aqMz=0lK=7)QFh zw009H$~UZ9-7e7O4nAAEuZ>gGnMxsOuIo8r?uU9d4`+a<RqPnuuH;re%UesaVnI=eo#urUph|0(P;4p&u<-Y&lSy_klFvc z5stDW`q=_d;awh7Q|oQO$Yt>zT|O2Z6Rh-rYKF!8&-I^(UfAOye;e}EpOSVQaRnk{3SzhqK%(k+;lLz(PUYs`)qFy&N{ z-i^`3sRpHwIMj+#wuP8yiGA+p=!Ny71(`it2$1J$&hiJ-r4{DuWAGD+GKI=2UHHU} za(c{n;HiIUy zd7l1&FqX7=A109TIRmieN&O^eXQV{qZN{gjRxa78&C?015bu6XR*$_vIS+}KCtVQ& zQp&3x7HM(fv#0Wco}yjiQ5!LtoxYD8@?t#GQrs1f*9sMk36#`NqJSR%$l^4Lo-e#K4qD^0eh zrg*L*nDBA1lVwayT%guQp1O_S($eKg)OF1HK@8gHIME3eKg-!8QMkB*YlB2GC)H93 zY+Ibi7{95D*wU4U)dpG9=5%%w_kM!gSg$}_Y)4SWGv`OGtN$|i?YkHkL+(inwDO_I zyjiis!grXg_5n|o9uW4bMj z7rG3%5>qIKUa%+mNDtrZkb+!nD{_Tww;NI%-88;jX`Q#^nWq%*76-t?PXv4(?_x|vCxq6-V-G6;1d+Z^9f_@yy ze%c3Sq}tlqp-WWm=6EJ(#5CM|$sR?^%6e!mI(fRkii7bRg>W6%qoAO?4W*3z<|eWc z>k!RgUhSxhJKIhzWGGKQU5{3;Xom{dam3nn!Gg2wHyc!A@q)^H)qt)R^+eAvZ#X`HC$+t0qyok?SPtO`L1*xW2Ht(8P=Mx&yZY8}I+}!&X1nKWK`IoPH&;ON ztP??rvRZ-zs?uMj`eJbPs*IVYk zIS6A37DLEj%J0yFu95uyC01g3&`x`6b+$7XN=oYTW{||b`T7I`JlY;sJpAnOn-?k| zar(r%Wm>(9;PNSMi8AF-CN8ByxfR4Aqu=*z%Vcg|AY360}uG!hYZrx zy+A!6-*yHazX1OhJTTKzpOLreHP#m+ zx;jPTo*GSHu5IBStv7_^0Uk8iDL7NvaY~#0NHalJNJYj@0$T@}QYprN%2{jn_=TU# zarY!F@F#PtPWZB%jK={eccdmF0lfx#Sdrf(57<-xVCyl!TwA3ei zw4FW}Gi)Y>j`9c@ph&^WA$Q1;R+y?gm@yBRi_Yf;#lAZ)W+C1GdJ)U`aS-4Eyq@Q2 zRv!8l-1J0UileF3+p*J%=RmTv>N6!OHm0EYg5mIB5OWm;yAYkA`SWWi-)KJLnrY9b zA3|UkImtd&j*&=L%jA@+Xa`lio%(NFB~L((qIi*T>0?Gt9_1cSQn|jQ92*)kgc%Ri zh_zH)wQ-=kf_2i~=R9naQN_LC{!8d0TxrQ%__oC&5h_gmorHfYq>Xbobh7c9{pxEC z$iciJTQdLS_xk8FB8U=@+BcZ_!jUvXQB(ern*DA*CB5bXQDr_#)DK@}8JP>l)ZGRr zj9IY0)O=F?K2!y(+)w>h>H{H;bq5Y!8O_ZU^d~y+!^Ub3ne7*`gZCO)TEYDfh1Rjf6<30EYW=-zpg3Q>>#k@9S;wR+_gv0gl; zwC^D*e&!XEdlHxwx~S%inNf1pl|NwU#aq+$Dr`>-a7_VoQuTAa1Oumt8q%4qmdBC_ z9#@k)IUjXBec*gtu)oKDRDb=|#ZH&ehP!LhNF{`GsC-$R&g@HMlQo=Dayu#tqp~d1 z!*yu;?DI*FA%2g0mdZmv*{;HkEj#EKj&nwOdU(ZcWOGW>%zoxqDg_OF2Y<2 z6y4Jt>8V$H0hsEH_i6$#3QjwN6SBaj+=ZVeXga2 zTgOIwEN!R{^Iod=vmop7H9Tr%Vkv=%ND$IK(fscV0eqnAR&r!iD%$iMNfY@t)CJsH zlH{+r4rz46)nVs^vX+kfiHIq>k?aB5ZhzEeHa{5V;%0fSeQy<+pza4^W9F83Jx4(m z>3zI6noOBuS()hSGAWWT;|ey0HqU}d6O8zlG}M|DZJ|d1D(iwE3eM3YRwgOg7f*G< z&tJS=?)RU+G?G5v2eaBuZzEI>k$aUNOJI~r&l1S}F6KB^pC;ZGL(0jP6ETty)8-s` zEG^h*p0t@C6~_;+*q&)iCj`@XGeVy-d#6zDlf`F!M0y`l>N4Ys->icIvK7f$Mz5y0 zd>F94X;A8d3O^AX+rjOjOFegK^NYeUp%t~VjwDPk99`)ttla%)zNVTNrX)@i8!VP< z;P*n{XZJR-^nB@eXUgw>o+EF4A0w^u8I6K?o?B`6y!l*`kFM$~M~*iqB`2_ZX&fpCW1?d?3r-}6TGPaY-q;*UAxK?Qo2Bg%1G>O9f51C}uf#gWd7sf4FlGLw z%MXrkQ-d-9ok+-X2zk9yG_M%fZuzoTdx;;yuxO0Y0~cdGo+-l9tTt~Cmf^E;J}ne| zgK!9m;Z!Ktur#X?z`kxT`@)8U;-m%xML^`m3Ch+~9#0q+%a8!4DYvs4RqcUmw3b9mAQyQWrs zby@LJPS)3&Y)oGwxm0}Nv+wlk;xCG9ra<=GB!Xdt+qvPQQVN*d|8$u^zu$ax3C`pA zV-|$oDyAid*-OM%VWflr;aZy9r`{tXWQhx z)+3`6`|$aS8vm==lNbqDK$;Y3bf8UHq1nW^WpT@eD9D|-$6HX~YH9HO#|HA>ziUR{ z@TtBCk%JGOS;ASIk7xFtO|PEs?s5_w|?xn%Uc zwV`&yP~3MMUbG#@A#j*t1NPRF>+I_JL7=InhBr;QvHYB1U(f$?bJk^rVaa@!x6_z# z-Kc4R#9vz6kf)P={&VF9vlw4t46DKCkU5-LK6zk|q*wXwGsB{hC7Y@f4cr4F^nyi( zLLi*S{`}`&M$`Ii${U2uvCyn-`6R^E0T+u*pdM2RPIpoyB-}Xq zaW?ytJ!V+7bBPCMw@HhQ&d6Z`>*bTphaknBD;%z@9*+#u12{!v@!hQtYW~BYIlb2a zAYW;JLFI#BbgWF4 z$rM8{k8o>o6__y{P_5zk5p}l7-rJLX(EX|wd9x?{T&vJ^jp3T_&%yZ_=|AR;n9S1h~qKqAV0R>Y+lOERx%bz=*cwqYgTYjBdSrP zxQ(@t;HQR2Vqhzz7nXwua~KDfu(|q%a&r@m(pcYa11T=@mN>RwdtebyL80$tnn@S5 zW8m&`jVF1xb}zMhkcng{fr=9WTV^wU-yAme7ip-{T*TYV5dM6~IY%*ARkGo^stMA+ zHZ3tbGhJkWA(c)i_QOh6{dKFre3kq`yT!k1y+f@QnYvzJWLPzm07F#LVYya-N(k2j z=d~6a#wXOD4LMGcfr8>B&uVC>yhS#du6XykMA9ryiw`NKKp=j1ok9&Wmz7W{j^md8s)Z`lLu@u^}R=+ z<~o|>rjw_Mf?>^Mk@PhZJ%tMVr7x@Wbtfc9l4i~Td>LN}fvlo&Yqzgiz(H_zwWTx0Q_pqc<4xMS9Z@#|Uv|PZNCbKR1h~!` zAN-DoBKf#W=Qq}QH^8=xD11l3@AFU(87VN3&D^apiWO{Zn@n@5O&e05a1`1B0LH0> z;CbaLKFE}z+@YEje%wx2c<9M>k=E;R(m~(lj{TEsj;VrgD0SI6IlOSLelhv&yTp5s z4G)4kksF;Zc}`)Nt)zjyu<#Oh;}}a$c_V znSYZ}!zHP`)hckH^+d45#v2I%*v)(2ZK>5KhU3V@0YbCCD5F%FU- zqt+iZoU@;uJCn4$Lr~0PdUN0w z3-;Nl-C*3|F~)kR7b0xVk4dNaf%!FVyP*x9|8--%cD}*75fL#uHe0WL2GMMb{LD+e zlwVKukp?<`xAN{VN*O~G`pX*aa&w3FvdI2Y!4d3Ln2b^y89uQQ z&qh*;>8Fo1vN#*614@OwFi4}zPmL{2`7BQt*6xIu!*-%BM3`fN!T+}5EyzLZGg;HQ z1M1idBO|hpkzIEvkLHV&;E_Z+Z&`*=(Vt%#!CqbW9XBVj0xQ09p*=KVPk=d?!qlSE z^Vy7vP3j+bPiFhK8fLcGrS-Sv8EiYoG4QB)C)2RS4dc?^g3H%h+=n_Z>GW&nB{4N^ z7(MUWexG)`iSzLfMF6VdXmB4Xqf=^;Z@S|_;%NWAEf z&hh%)HyK*EOd=Wkl4=YCIG)gMviY+v=n7p#q|@q*rC9Tg9J_>*RLS{ncxxE8&k|pX zve~fNrCH>>?(T9z!*I1QrO>9d`Xt}Q2A%|jj5F;=)}Zsjn#vR(g+|;^TmufPFKn~d z=r6I%MQ_w;wtjs{aKyxV$XEQJr2;vJP!60;Z53gWnPgct*`piYbKT$|mFwPEY9+(G zbv0S1RN43@f2eeX{D8uD}Em$i-Tg%6ZJ<<6RCtSR$Hv*A*X+1u1-m z%{Fd*HumLZTS#3b?l)eS#y{qVwG9XP@@+i%K{8Z!o5C+-qmlkIW#g zCa$XJ`WtY4FpyY!FvSTbO4re;O~X5h8^Tgj>xM!dv7dL(celd&G@ogAgbCD<9hMQe zKY_K+9Gf6Nh&AB~A~@>#Ewo2z3s*d%$H=x_A8t*b&u#nB4Q1~mF^i9SmdJHDhte;_ zabPI9nZ?>J2#xYkA1$8*cTXB{;t7X6UWBM&(C_=$D=DmgbLiIISE<`(w?CDA>tFZ1 z#k`nq7|ioRChWS3PRgfDvgd{A(}mdc&2-FHh^n$6S%w33f4ows*)-X&*|4AkrSUzx zne=+F==FPBfy)?0QXkhr z?(gNIxU5_ zU~H>%G}MsgOMCZrPaC6TuStM&YT%`m`1_8lPX@vhltJ)Sr2QqRz5HpX(*CBuhv2qR zH+4#&@L(Y{Wf*DI0_?zMqHJe7zg7e~sReE6nGfIC(}DF9S6EHB?$MnFVdh;Jr=qsG zymqyaDG~#Yx5unos(9^q-OXM~R1&hJtKK>mCx3{8Z2ta=13J-54-IriW)i5lJX{}6 z%yK#Zv91qQK`KVhxiT*jYK{0Nlgrd*4sRYGvsGLX{A?hi%mHQCYfejA1%*%(iQsQ> zxI%7$1!2hrHZQnX10({=Qb~?&ufu>y?BoHG*3;Itbc~iineSbiM52y+yRFk~#rPJSJ|Cs{QA^BI}>;w$`|&%->LR@ z2*J~mqEY&A=YYPwlEW~@K^*3)S2JJ{f6{af3ua=vT+XcQZzGNqO4GSIT3+7VuwxaL z126B2di&4#9*OtHk{|h>ymtsxMNG6Plx<<=(}zv_jKBSHiDtU&$s;v|ly{IZ5Xv~l zG&ESrU;Q=WWyfHeEAEZ@!RF*M8>x zhH1Z1rE~KRI-5&{Ztd@^2dT`Rqc0o#3eoobyK-228>qW2zg@_VrJi`to+Hj!VeM}qSvr=CH2c^K zAcU{Z@2|R_Y4*ch(K%;z`VHI5Kv(_V9?j!l{a2UA@a#KTuLm-Ha^BToKWjJ!V(h0h z*Z_NfDBy>Xivk9*{?y69)WR4OFeeO&;f71j*@tQWYojHthmZ~Kc#MM0geCTvz1|s} zxeS`z=&$HjtRdv_EWfL{#H~4iDI)a2GWw0J@tn@SwjtE!5W4_C5QH^~Df~p~c}_|5 zojz=OTH2sF)t}`)3}GAdsjP;L=gbZ8yh)?SeB|xuBjJyj>2{CyT3Z5;-b{MT(2FY$ zy&D-2GoGQ8SVBeP-AFQQTEVDjm0WA!?g`{QgdK7w3`A~`GHwfw1UGF3jP%)JIqHD? z-tUYwq}Z{2!+y87zKb#M1g%~n5S{SN#KzOaosG#1I=PTdC^}i~xBbca%j(DnR@b$j zx%|2wS{-nUG?{m`rDt@edzg{50>yHKX+?e`HnJT1=cI};Z)?Y4w|zkMNOcrd2N+Vu zE3psDbmR!WZ<^kh(0@T@iAwLLJhbt`8cT*8f3ci*ps&L=2-!v3lTZ9jf0la05l`Elk8W=HWf-ry(~=2koMkP46+`+<%JlsBi*YC#opcf7_d` zz(7||`>!sPTI}*OURDIpQ5MvmA%K*d&r&Z%GiDpU>P@{9YH*KD)0F)t!@8K+nw<<`CBlz+VY{zKV-15*)?^#mKxi{P?lor<3=*{Esb* z6K6WEh9@QV9`k3y&#Ky`?E$>J&Z$f|T*gY8cFx%0e9A0EieKn&A)=!S!<58p%8|ro z@|Zz#>@JIc8qxP`eqhKhz^N`|z4<0{O2C-ItI+zu3GT2`sXX|Df!m~DdUVFb$&cNM z*sETGC`$IIf|hySIbmC~k%QX;0wJQ~beN$4D-+sSZ_vp&< zp7x755?0QEGV01-q-Tk_M|uzsuoeM9o4I5J-#RGd&oi;h(!vj)i^Y>!(s#7`qTM6sWYrLj5q9WxsROTBdY}+_1vAb**-uO5L4EnaaQIH z5zibBuMEcQcvja?btvG0&S@esWmlK98k#mgEmly)g`&?9I-3-s>~Pfy81IakrfVQv z2J?<3vl_4*(l#FpIcO*jI@bxBP5K@KxH&&&@V6QJ^ko# zy1`3N@3Zl;ov2*`s4?Q5hSO!$o3GzyV%4ne>tX02lfeo;V?H2=yqs@uJ28d%jw@08*5EB4&`bZHO+eheVvaQkoN;c0sJ|J3PqhjxJ_@IC+5r%F{~gNM8Z zar>KZB8R-2LnkO$T>taKG@K<5{YLlOqWf1hW`b5v!GpR&0e5%w>T*{81PgAV+8Iofw zvBFkj9%KJ}iSKpG?0)$>{P1Zu+t^Q)V#}FCIMCnCZfX}tUF+j_)Ikt-Yqc1BKK>#$ zX$l9;ow(mXRaH-R6;CqCc}(ZTJgOLQ85T2cS`~6I0HE~*u*A^7)WXZlpVv+Z+^|&j zG+NbMdD3s(a6Z96}6y51{${QxRJc#pmGaIgt0bDfZ0%R~spPDE<_MH4P9 zvx$<1ynu#BM((4SL91N|)Ye%tmgo^)0z+^jvrS{$?l-y5=$_S|GYcis4QgU3>;$w2 z2==VN^3Il=@~tu6eBlLtHfAhW<(jWI9AUQM_U9N=7r8jHfBqf#o1>W4W=}t8W?#zq z$jNE@=U)0x4aTz@dDH{{jWfHTn7@IvzdHZpd(54v4blPHmniF>I-a=ql>jsG`2fa) zOff71sl^xmXr(i5aewEiUFJ`Gjf}w?%$E@aIKJ0n<_1XHyJo}NO z?RDyvb*MKOoSF#9yftmur%kH$Y7H6xylEK#Zh8f62n8`FZ%Jn8tJXqymCs0el9I7gi|xxHtwriAv4=$Mkf`-|k#C+kincu*-L< z>#-$5)MpqOlUye#yORLT8&jd;ZnU-8AnWV=w}u%2w9Ng}Gg=af8-0g?I@PrHh|OwO zb>NOPj-L0$z-x8~w{-&Z2>O-4f{xXnvm=*Q^FnifqDd&&af5CO01U#VXpqDxePWt{ zC&jzF0QDm}Wj6Qxcm3Rg2hp@YqLScnEb@y7pfI7#5x&FMee_IQFD+}k;Y=NllH726 zS|{OVr=p~)t1T^K?BlRs_4468^PPmyUdOU=KR;BxdOnc94s^*dm3b9r9MvA?$NBS> z=|>b+Te;tg-J^Qgg%Z0nV21l$e1sL}{g{WHpEnkghMyR6JR#7^1Uvk}3`)~;s#~Nb zD({`Q#;4zR@OYMl^R@5<2v(9Czh)M%w1kAcQQ=IT^29C3Qd%*(ykoziXAq-f)WP}Z z)z2=Zmw>yHC#w&go2GuRzxytDrKJ7^@&^9s%2hkuD%B3Mnp%hi-yEbKZ{%z_^R?Ozjbmi^$TiTcCSrgUCa?Yvs zN?2Q64#no3px_y0A??cV;per!0l zFC7EweW$%g(yH>e(ffNaG@>chq%WE0H95JJ>;(U+{gzuKgqj-LA<+8I5c-XHS;%pH zsJm1N+7dJ8u(<_+oQ-9g>L3Go2iqDptUN072W5jzca}P@Y0sOJmg^zE>!HK0$D-Gd z9S_T8_b3M5AA5||JMSm#3;hll5RnT^F=`RNQPkYtDReF)SjNmN^uHbyrWu#S#nBUG08a&Kq|P) zgMul?dHsXseOzu+p@M*TFUubOi1G(3LX$NUH7SNaa4i4HIn>?v*$hj<4)gAAXY2w# z_0Q`j;vpn0H3ZN|Z)jPyF|C!4XNf>JEHaY)0xK?(_3p9u>L)F`k4&{(4d;eJHAV5k z!!qU;@NoJBj6iX&jnbr(lv;VQHDnDo%5vZDc})cPK*4^ZST;<3zO z1dz8uXzUS~PjI=d*z{Wue9L$eRX+Tr<;BvGdP{?lLderY$m42y1F5t6DIXmlmf3t+ z*4iC8d?1|G!QEm|7s;t{_JEIg%lrB~y!+$txMO+W6V@VV$~QfW8}}o$vEVb=S3p)! ziFW}K$?pc?xPvoTYFtX+0rq|aG{v3|s`B8Qm z`F;noC&Ja$%)nfhPczuocDFY8=i2JX?wr?dGEJfA-fA}v%~av)JuQj0aZ)F)6;bTi z#+%5PutR0zl=d&@7_aZ2SA?IM4sZQlZ+~^YaKG|Bm%Z-k7i5x2A6e<3_tqUeWNzGN zUQfL|`ZeZ@p}}q!)@#hQ7YRKCb5?AKBLJuzR@zqNnNl^28b|mVeo+#S4Ufvnu{|Og zuBV=T84yu6kPT5vM&P|Vln86shvW4T%KavYK;!!q0Ytyu{18(u+W5__k$#GhNV>q~ z$Jk-rIEStrd4~_@-ResMTnjlqqCQl^$s`jT*+3r6ld=VH^ zwc{vyRC*Na)|O!$eP{x{C=%%YzpPwlCt~djnO?85i`Kr`w27>9e=vI*{j;uknk}AI zz^2jKX9)cDGet@(*tGb!+xMY>TZ}{#yVV5F8$4&bQd0vmSdjQWmqp0dlzsT3XZzk2 zE^1g=RNIGHWuu<#(%%~8ET!(0V`sHTDLy8;v`Jdj$1D80g26SZbykb+B~dkLT3?VG zuC?C08%_ksSk;W1o9hro>QEhmGyED|mU{@+e+q6k+g^y-kr*qey@JCEcG7mmATqD> zS~#FwBEuT8H;i)W05kBxn%)28CK3bR*mic;9p~=JyJ?`pX$QPG7Cq%e{jg+6k}Xy2 zWYJMXFP@4MbJ^4!#?TrJ{^ln~8Ni0fpu^R*ih$xt8qchRWQ1NG;>7p@V^4F&j@YP! zm4o71PBpuqAbtFT#b0sKIE$P;cv|~g-}J^cG~4z@?V2e1Piz(ri(e|C2IM)Q-(&L4 zI2!iSAiVBoKP6sg{_&OU@&(^v^ zRTgC+zNgz)H0(0yd0PF%1EbmMLx`#GD2fvc7@fPs$r4yejZtWP zoK1O`*4e$)b5KCMl7Kjh8daY|a$=Lu&+RwvC}Ur@^o&45R5<@P6=F4Xg^ERxQxZbG z!EYtQk9*0^$(^H&uiH5?uD=Uh< zv!UFL^veCh1Bv=QzBkj?`F{6cHjMoM?3BM{h-({vkZmR}W4ERvp`332sw`OJkCbQO z8N#q}FmyrA9-YMfK0N>6%aH^>>Tmzs-z4^h_I{5mH8Ur{1bQ-lSK1qL1lfM9OtrC} zck1XFKiaV)sju$Nxa0Ev_20IAWoeD<)ou^4fpQm%$pn!N(AU$I6FOd_LDL*Occ%z_ zc@GqH3T58zwiwAz{)zK}l9}$-hcChS%2-0hvDQ|E%F@>Pa3|V2g;7gveZ4i)lSEj4 z?OJeKkM!L!6YDbcy{!=>hoipvOrLb%D=C?Q;W2<;v{O}Vt`^c%Nb`g`!+L%7(9;Y^B(!|24 z+=h(N0q`#Ruj;;(A+H(rs1>z%H?pO0&&HQ*N_3%tawXifu~F6wU8C*p#~Q{uSA^TM zHTl;q;V1n=Y-wl9f@lsilz^ZFJZ#p2MSVZP=L-EtNY}lfoxi%-i!$zPp+fsm>Gfo4 zcCqs&^6+i7VWg_CdEyu5jlU;uRaQyyHkfsCZ9+_T7Z(slB79RFoKV-KBjwoI+I8%l zj;!2>kFFe74{HAK$=LZ|;GKXqU7d5JArOIxvg)UdVv+D`vdSpX_OtoyUAsekw_Drq zLb!;hbHKwDgoO+0mN(PreY?`Kf+9m}VrwP_RByLqzh^IWHl~6WqNWx$S>}85J}QU9 zZvVg|!s;+qox}n@)+0BUmyq%Bo0dyG4_5D)t2;mcu+XFm!uYW>BF{#3923yXe){>B^q|uI6hz-t zLEw2N^;zN9{a08qBsqrA{Ipn#xJzC5Tk_YPjfqhk2_6`yNasHtw|aoyMLnPBZ?^XN z5Hz<aJfu)tUE4U*R+Im0@#K#CN{Lz|dR+MKfA`ui!G=%+aFW0v{PzoyI%nYF0Sm zh;qKCIC4bXpL{Am;0^V}KkA$WFbf*{*g{c=qIpAkX$VLD<_J&NVVbCaD%!*IHToL) zc~VcyQr4{+GZ2e+xd#vtmn}@p*N1snPa}&ni~k3fMJ~S~5B=C9i0|%w%i)AL?Eu~E zuC&kbB<^S05GG&Ek}8!IhmLaOrEgE`uqoNNsw0iEu-{?#`xMH&(9>Q~&UNyS41K-D z#KGLcY&hmntN8w+Kdh=nW=A1!eLEa${$01I=|a*iK<5Y>(%jSm0FcUmu?;B1c#wMx zQ@Ic?WbqJrbiH~98;LP1_b5I+ndD9$?7C~NquV#hgsd5PmG%4+vUHI}o1w~I+)f*I ziM&74TH7i9ef8IuAB6Nz0eO{-Zb{j-pHmI>N!h3I?R!F>-JPNA$fP#C02u<+`)D3} z22)ICe`V$wQl(2Wdc-zo$JOXXId+%Oz~(pl?ywCD?iK%et0v zpZ2@#UDlB{6eO0Mg?uW5s(Tf=@TtFx*ZO;vX!?U~cV<4*lRWmm$EwU)+gD$EHT~Z2 z{T@eheH}T3uu{SD4*`|G_L6b(>~rk2*Ue+@9Aob9#{G?S1qJ#K{@@Q-GkZTh_w2Lj zxBv6sPR~5c=BEW+f2W^r-(d>3r;wO*QFfSXUx&Ovxr1Ry>G4@RD4%VF^6lHV<5R!p zA~QulP-JQRu((pEboFYwN}teccUhMQpUSA@sjOKY^kaSSfP0=E%>cA&SYGeDb}GWT zemz|qG=Wp7M4`;e_XxkL4wfT#6o+UJMXBfCB8w`Y`Ee&hkCbQq zNA?|Pu(`D5-#G#xDx-QHF-gbDAF7t6~$^v=R}_fs?tvQ=Ir-)mBop2 z$?toexSLn&EX2DgUR$Ym?{+9?18_C~r%)(u-D9xOypeY9UP)U6Hro*f*(i+kgbz^G z?%%$aPPaBvql2X!Yx&0J&2+c-5smY58Z^(uU`6Fm*9@gB9{2rZI`8w|?*Xj+HQgWW zVfdKu5FCtPxc1gox^w4F&Zb@<>k7ZSd~B!JPaDY7R=SGZy8|M^vud^v$vD( z0%v=BJ9nyt2_j!SK)~oPwn%sR<8*a=84 z5*Stw_j$n#h^nEY?v%A#jbjXTJZT|`S48E~FG6VD<)PLnJAc~ocd zO&?`|Uj54q#6C*x_I29AefpELu>Y%+*w9|uk2{2Z!Yw!XfePMtc%IQ-bvz;O{C z;nT6!!cA8z-Ier}uY4u_$~S*yZZ(wem6N}x5UC2E_E5y%+}e!g48Q%`znxB>KArv# zl-j@e?q8(e`n$iCI^D%KVzj&M^ejrSg{azGk!PLBrWNBLKNS=$5xZPX6qD;`&*X|S z>yZEeKmbWZK~yA#H7H)9{^m_*(V@(19H;f%bLsgPUrK}a3h9&`bf_?(Xlr2|`2;4^ zg?~|K6(4eofkR6M1s_x_U3}ps&TK@P6@~*0)0HFZfHMBs-yp_e^{1+#)jgl^=WIR7 z-xqRN)7aWbr`9u`6|-7tS5}$Uzi>XCe);8eYNd@b%kJx-pJEuyvT)gnQajzg$}EG2 z-p+QUQ?v}VFhRssJ7xx4&6i$EFP@>JumO;)QJBJl4ltj1b|Bcta&_uo?LwD3=}g+%!GnJXflxDb5%TS4z~$)|p_M22XF5c+%!7w(jZ0~? zN%!C6D|{%y9X4T}zewCuFM_`pBu(fxK~pj-QCcf%eiY~;E+cc1n8zANOj_T8(+`#b zgTcA;=hEH1HIk_rT+83eu=D56r#2gLQ~L#QeGc^cwL+C*+5lH$tCy}ji$*&rWr^)8 z@2AM!lJtPV`DnsR>G@|brh&4NvNT1mRqH?O75dmmB%_qkALTW6Vtd_A4J@G^rc_>M2H?X7D8!rOt)zNHTxcQ$XO zt=o6fXy1Yr0$;zPq+8fcE7P>ZfyrY==d^r|#jj2$%gkUS zv2hWplEKTP@g+R=336Kk ztQ~N*xe0tAo5FfD4K-SoDt8c_tBAFSg2roWYplQhJeJsJQ5d@EMK*w4$5JKHL*6b3 zdwgtGEe{?m!8hrBh&MY(?L8TmmQ*j9N%qf^b zGe#PJh+${ohC5v-L&E5wG@%6R8yj45u-KXE0&i18PJ(A(H*h7IM&M8SXFN-oz;>n& zOAQ*$HgUmNAd`WDG>T_`3QBta%I;@$B`LDYiIylS0gu(-pLj{!rW;Q0rY+=5bM$k; z>r;w217h}mkTT5${AmW(kpTbhFk_YmS83|^kRRZ0w9d+me7Z@s4u5WW>i~<0;l)oh zJlQ_Sd2oD|kmeTXi3>bdWmc2*m%sF-w5DYdXMg?BTtWL+UinOV`|WqqrAr^C^XJc} z%aWG0isK0}@Bmnoke6?w zYcEc0cw!CtO(bhbmxxO4^witcy>Ja}-c>@m947 z`MhW&Rh-HArMJHI5RXK2BySswzY>meaOuDmSYcU=N5M6j73j2XrrqHdeCOs*ErN&S z-x)X!^3tyiSSQ;avD^j=aLa4(3=)RH8cJgih-Uo4;sWQhu+LYJoc_c#Y1Xxf^CA6HnRr}W@T0yw^=uPFE7{dgDF~V zk0?*3;dVIcV2EOtqQAp>TsMMkV{t^r#CghjxyZD1PlTVes?%xj`=XTy82+#XjE~rC zZ!?hXzt3`vzlKhCm^EYB*TAKVUsx1kEuIDoW+b8$m$p9Ff|rj|F>tKP?CSbzdU^fj zsTn;KPYCRK*KdCFo9U}x{VGeg23UpHQmX^;A2U~PGa&>&3pMc7X#oH#O01z%TZ}{66a#{U}vlxGsCJ<2tv0Qn247Z z;0!TOhnt?xYm1I z#CZaa-MG}Kj;=ezpgxj5vY*l#id=~O2XfHEX>URm)u@*|^x(M-^w%wx1hAhXj^xu{ zzI*TzI3{ttK8Pi2tbrb~0hU>Z2AdomxaBH7oO(VI((Nt!-uHzIA=Bo>uJdlN!Lglg zr8PD@wwpK8HnTQb(esgs3j<}cjlprVw6-J9p>S%P<<9;W7JNj1apW>DUXCX*=CLZX zj~oFdKS5lT*n+n*!7a>VMD%)5LYcKoC_00DLyE+dnw2VCmSE-E)O#JS&l#4mr$(RQ zX&2&UBIhz340u1eZW4W{k;UL*(!b7PbxJINw-V5zgbMH`lD4kT<%xBQz20>cslQBv z)itKOFS11XrF81-7a8TfP7H+K(#^p@NrcHLV@i&nCSyo<=0QmAWd>GU~ag5%QM z5Y}Nm?GW6zSc;I+{Ee`C;XX0%b=3I`4iq0T;G(UR?Ip{U{k4LN_j%eBV$&D*EE~ap z%zN*TyD#yh@SuPrPi7cy(AKVnKHq3MXgtT|tjON(v@G{*K3b&Mv5JU@PVaL@3P@JT z+~(P32P)ObZgIW{umj>aK@qb)0aMsanX}wrNS&+AO$Wd@8Nr#hCDt48MUx{F+k@Mz zXTAfz&azCy8M8b*TLdRVPOQ0i_oKA4{S)ZwawTXyT20Tr_zk+`&p>03VLaLW@;p55 zZGH3NK7L{K);sI@F)Fnq>q(1gA?&;r<&SW!J_`H%Uk260e`e^gk|1DB>T_ICUjdrf z5bqpkQ#FDjET>A_9R9w$^=>-d_?TwLv~`yq_NP&Xm>RWz$~lz{GIGLKR}?tEJe9wJ zDV138n9q{6+PnuE>Uf-9ePd*oaaDHk;xzCY5pq}=bJjhVMT$7hm+8@9Q;g@%?rglD zRyeL`)Z~b--m59C1HJtcaZ6>kEXiVd%__sw?4Lhl>p%fqmDh|48;5;;sRv*5+29q& zZnl|PXQ@HUfyRJilf?btbuf8iU-bXM4 zWn)|?4bX#HHB+I{>f9HiX^&qh1|Bnk0vp!yXnUFGm1FhvBz@#=XZuFFb>+M4@%!`C z<%q0SXDxNld^xQ=_xCBYO6^{Ed?ogHIFH^NuvUHq?nfm(lrNWk z?agpcfp{JCH#zd}t<>556KL=*sZnMd&m>M{V+pQHH-(4WlQerSf1hk+_KBpQB3q`+ zjlq6%zauQx@VN$d?0hbx3&phc@PJkLO@}KiQ{+@0{JyzyIc?qfD;nUN^iB6u=geo* zX|3F?m&pwFh^R#)n#fI9Pp``u%D5UomvqBtHiD-h1!_fa06Oi(OCnB*In#?|4pvkk zbPcAl8XgNpXVzr>T)T0VBHaTv!jlafoEt?XJ6M}|u7T;6u8sk5StkZKt-scz?s-2^9|LJ@Pq*geqhQIP-lH$W)ZE-QZ*mro268Im+#qzR=%yT6|Q& zHN>3k&~n*JQK@NF)30h5qDMRy;Kp=VkRYai$ZiB(hqN)0V|U6jbh zZ4w*HNlXPc?$VVq)$Lb%9Ll?1E6zFOl!NGG-BC|xD;%$f)9(WK337o>amW>C!4^vC zf>ltxFl{KaXcTt*KF16Ru%lg8jI$un$3B`!D=v1uk75}BULFg_*~U#yaad_~=!kib zwWNzPnot9m@~6&wF?fsjPx;5e$%wV8qv37jD}-Q6*${rA zAcZgfb)hs{aMVLG3|my)w_f=Dt<;ztQO??)ESwuGGib7az3KX|0Sb{*O#747fu4xx z5~ZP-M2%VXWCRCK%nLWp z+Ub*T+ijwedq=;m97gH%l$kg}QA0z$Kc5dLKCTd785G~9^#Y!Y^21GSNJZH4 zwp3;x0T1kJCm|sU@lXa9;$pHmi!d*7DrGq28-mt!T-8CpZXC#q8%p@bFxiOB1aaUy z-_<@AlH}Xa(aeU+p>b`LxED3MNY?&M%AE!8TnH4rA`s3tP6uTFn`R%jGg{1{ow^R4KpQNqxH`C54 zpa1RhHMGCYOu+M8r}iif^}39iI{Q}0FCzIKam+Ml{AprNdN=qeMuX$9+N_IqT}3;D zsLDo3&qq|k$d_y%mMdrzJRViz$NLlOq)|WtTsx%H-u!eh(p)$+mAkRKElu_=7 zQD!4!!G=8X0a#wX*Gn4(H@vJtj+?E(rN64(oVG{k)8>}S>?5LR$#x+SU`|;sGihc? z+0}Rc59N#>=}4uLR2nei9)W_JXbJ&8vpfxjr3S-ckIO~t?9#>~R~gWV^M#kGHW`|FMsuGHKDeVC;FW68^-Gs3l+_$j!P4m=4G2 z3g-}kE-7%G57Q&@Whv)f%W~A<3i716P*SM$bSxeY8*?qPC8)snlo54Fhv-yzaq15N zojcfqeh5?ZXhQck>t!2A@7>WEIyMBG8^RQTOIKkalmXtFMa zl7C?an@AM|fJ*toU%EsDWAix8RcWUMKK6c;p6O7hMOEkcSLW(6;MB-oSf;8F+w;lz~+qWvAWYF~l= z<-mZ)!?=><%8uZQg6RWoW#9q;1J9Pr*-_WY79Xlmxed5`=uil*jl0)51>pyb89!vL z`W-f9cGBAEFQ?Pb{xWc0BJIgg^G-%B7vQ5uA7vhsXR$P|Oe!sv(Ag6)!t|?#qS0#i z#DdRJjB-whzi5cWQ(Dg}+CC^xuSZ?^6och;lp2Se61M`u&7xfyo@4P_(88p;=%`d8 zw8}(Brl)Yd25}tH(BpJCiDRBrj>-{uz*In&&Q87lUizPadx2lXR2|ias<`5@6p=zv%pK^;1V${&5DHW7 zM5SA%GqfSR+({c&6n0g|asyyAIdnS?R=4M^N+Hmb?XZ7@`q4reYxUZ(Bx9wRl54EG zv4;*}2G7Uxlbp`|N zbn49OY4t1?%-A41omUsFX-S%+^Md`X>ur%vD7AjB-1oe>u%^t`3M3n-><&jaiFYZj zv_F6?*efx31^@dfvJY0LT2_z!<5HP@L?oIj>S9zsr2z9a-JGBX&|T~ySqpet6rC;& zzbW7+z3h@~MBGV|6)oTEu9jKd`zd}N3#M@;A4H)YLjltz@bba;Krz+=*1e)Ca4Cdr zo+wpJ8%Z0FN^3A8cWO6W0jC0oXCBa~s=01U0q7c9h2nH!NWh77fo@RJ=rz;E$6Htx z`8?>(kPZ%2?6X)HU-kqD@IQt1^O&z#DJSwvIzZ2?;^5)4^ew`kHY9t9f394XANed& zj}`K8e=S__AnWm`)nAlWXpI3H{2a1NUlEpNQI1uFJqCF69ND00l%KLvrdAZWY+F^W zi19F7fdu$!u$zx?+PHfuHG4l`Y2;;;nDumi@bhW4%V`qL(-bdv??)|_=`ycBjJiBR zn9i0!JHODC`kyes=fec8OX26)!G0hpxfE;80G7b{4$|cQ6Sm-4J}KqI{Dk#T4Hdyq z(FHW3Usu+9)uE~Oy9klC8)AC)Wm3&n#Q=b7UyD2d)d4K_8wUAqoyx8yhtI*F<6M!<+q&QhWFj1J=uoQ!n9V!7p&R z>DkJZ72@$gSFd!&OZZHH*rS9l1XEZ-D((TVc%PD9awu;!ShPGMZa|yEv!%R`nOVzl zGTc&`eMEE)cJv3A*Q&yRGAe!{6lLHL$VDV05?*`Lr+C*IVu-&Aw*3*a^=@zK08#x2 zB`%Y5#S}I7?5c;-X>I*i*pT{LXkM&)LJ7!URKn7Vpvnp|=@nQOC$d0rMS+=`iZ8~f zP^=K_x+^0rU5Np)(Li(Uau#a$>RP(^v-R}KCTEB;^?2rE1`s`$8Dx8QD8BJl{D5OA zUv~C(7xB4c=`3CGh&Db`!CH`S>UkdHvvt>&XuXb966&ckn^n-xP_1^?OBK_`RY_Ta;`ieHa2!doM795XSK7+w?; z<`F5ueaI+KTlf@o*uyc!Yp{J86a~%cKDA%U(7XRp+PM2e_>nJaabnMCz!}`zeEPe6 z9b(>wZt$fWtsH!XEANLbwGseFp0aH4BJ{{gX@u_%?`?_A*lZZHx$TM#9dADU@_GSN6dMuUM$Ca$|AfCCwWEIl3(P0jTJ9p8Ih0$v?WIvTwsH{-IUm-Vgx9o-_Kj+!oVKdT=pQQBhYTCsjc8{}XI~)^q>in-V z`;FBwJxe;2z~EtUrWI+*GMKq6YdNY2D3!cgAKjtrl#|W>C9few9=Wby2Rm4NrHS>{ zoXg$S@>gMVK9~m$4Oyg+FY2CWji`Aj{NC%Bc(B~erp&KCH&sEk3?iL-=71ukC|ecp zQ+OB-`e|$PPTJo1D6O`?PdS~2=d_akb&7lik;?4X=oFJzH1e2^w~!A~a1BF3$TA^b z=G5EO%(I+$&n;AWB7(zXYV(R}v#hKB-f%09b`({I=n`WZX*mijIO)S=%kwu{QC z#A^*?IzOC9@FWE{P~r|j&Ya*le>p#$ueA*Zx6?}ZGDW!;Q||*l`#lRZET##Lx9^M%zUuJ#L+zDLAtzvKQamK3sRzt8vHhwo$IyTdYr`v_vDG`BxsIAkXDaT^NOvH&} z?ZokPSG7HY1Lsw=0{4$4;w_tshex;BIU+aMRG8@0%cFj(Y8>!TuYVRC_<{?;C{He0VkIe-d3ZKmLs-|C?LV^L_w6bM@T8h9A{_Zg7) zw^*+`x{QUIw$fpcvi2HeWj3j7OQsno;pGuImtu{!DHqr14%~hlZU9GvyFAkdoPiEO{?vVIG6Y$OlP)tiTk7uf_M#Gh@TKhOKxkVouy5sMg*h?L>?d z{sKb8QCyj5V}#goAK>=JP~ep0XnLODh-C(B_G+bDOjX`Xo4c$pT&2ULbCMI*>#uG$xRPLb=+b2RhtaMt{RTl6<0gl-yLMvB- ztvvF>URrn_XP-P;Y&2`oKB5jo&ed#Dr-Z^8R>B8URD?+jB&$(+>)UUn-uM1vdTH}^ zYNN}3<-hpNlwMM)r5(x#xtI^@==-S)S-b16r}Ykn>p<&t1b%w3B2T0qaK^FcZ6~a=EPerH`O92G_@(99 ztq!12yjZ+pBMZkiH5lW`M9Yau+pE%POi$QAKL|MI- z`m8f-Baj+zYsUBleu@ct%e1%{xdKw26&ODgzp5VXzPa0oy!lMlkn-12Vvv9h&b zK~GLJkQ949*gWA^(gs*(hApj?1E$1j+_B3!(=AhO5;ZCiVSi);*#H`8-PvU$P=~d* zr_^vzdKi_UN1;?{^_(IwGW1Ef5A$u<>!;f{eww!L{UuZ6Z^D0A`#aC1)91gIx+}j< z)+isdTog9*RvE>9GWV6)B30sPi0le~Wta#02g8FgWoAo-A@k)>yu;(_X1T2yK?~y) z7lVQ+{&;QOyPj@b`!?<7`Gy3TMtZG6O<;2&;O`5?B@ck(jbB>s8#%zrQ<7 zyFF%#2A9~h`X+-31~05rO~Wq|>hgn6+huyVhI@D5rdc<|iYRyedv>egF3X@c4?5@! zJlQ_P4B(1;d7F(17GK5r7~M5 zs`MZ8Rt~A&Z3wOpLSQIKJfAK;W9YFnc36jV6~hgqh|1=ri0YkI*}_7gN?)11;m!3rMj1$eORl?soxy2BCpn#upT%qCTnJa z=6>s2{1!xes+SA7}5pRqx%FQ4z^ z1po}p+N`x~qGW)}TF1d{pE`A3n@sQk zZ&4+dqI7mwQ+xAlI=69~e8JZ?imZ4msx1bN)tPYxG$T8=XFavX*8PqlXTS+D8%Q#| zAVXD#?B`(6qo4+(Tl9Xc_m5)$IYN;2r~yIpn`TeCociJa7G?u7a&Wanojh-wlG)a& zkcyv*Y{LOSoYTtv0bHF9!XL}rSwJ)0CPFD-PA3t(iuWKu5z}OKoW`^Hsaic?S6)VzXFp_;vK?O9YK-C<7jf* zXDT`JD+paw z(`-BiN$6lJ8WmA1n2}AUV{9IR0U`|lyzWZQ@PKqFq99hm&G7?NFwA8Bg3R)_pz zWH){)eV+0=C=_M68DKpcG5y`}^PfyXj@a4ECZ!g5%scbN&cPU}VhEJ~&6|VtXa75r z;KuEA2IKh-`pwt=%PZ;Jmr!WCM9{RS8)<2G&9eg($`XoDF)eHO!*Eep57Of3v60IR z-b036PkojhG}F)Xj>Z4L_8vCCDWxlUEC*@v%Io}s3(+OyUzAy=df#sUI{kHyaYd2S@X%L2Ga#XumT7uvkE;}8I3WkjF%ZG6e3a22zzHr~0GzIrrkozWsJ)^nGY3^`ijtMoi_&Q-z^ zV&!qD2XPJru56**lXx$1>st`tpfZ*BljbHhrIS|siTcXSG{#B*YH?+XN}gbi;=MZ` zu|DX#G~9QXEn_Eob2Y7<`8B?_!k2#oK-}*5M$;arM;8UzigDUoP1Z3I-sbZRZ z#PL%D3{tD;$miL_{|rs{K6#$K&eZ)bmd{4s-96gb;ymHESvvYN@}q4tHQQu;;rcnP zh+iZ#WlmYr>3JW?mjY`@9%7vuakN{LHQEi9w=|e1Zw^uV3@nxHX&F>SsvbiA1eXTy z74+hk?-fw{84IccGCvRrn3eccfW^Xdn>YTu_nB4e0e(lEC~4p zJ$xMJU4(?6zHQn_CvAY!`&eo@nL^p=U}4s>1pyq=nNLhhhhmOG3r(}=EaautCDJ@J z9x}^`=u!JXD?j1#-7+9CD2p*%{9*|n%-SD$nFlxzc#wr7bt`Ai1KNu+E7KcXH{~tY zq7vCMR6wd^kN82HkR|0&eyYr7zH%18!g0kX!L8UaQ7scgf*jcezKitH#|I?KXPKt~ z&WMg*f*p`szwyBQ$VGYL5-yclNVdDn*OxZ$V zyk_+ITYt{J4_f&+zDXc}%L5Y?*ZiCOiezOk8nOk2esLWstI0%}2$Oz?dD}}n+C!i;5LyO`$cDC}GE_e?9D&NDeXaIfI?KM{r!gtB|3| zcG@V}P-wSxkq_s5Gqq1!9y&gyHJen1Tz-DjO&1nnz`f}gX$0QkCmy)lAUy0_e{Mx7 z*m%Tl`OzlnJadl#+jP|!jr=$|%f+;4eC@;nOT(0`^eW;3={d zh*{C+Zs)6BpuQC@5L>>)J!7yORU6J#X+pdj!An~9RbuE2cy}r@2iQ62$Jv%a9G;=6 zpSpE7y_s@Q9@}cW=GN5kEhnh8*+5 zVdkyYYC3!ND;)FlRRFIBijD|=va+@lHiNWBH#kX&8J6KEv}LBJX=6hN3ZX@jlkF?& zG(A_XCw@Js>6%yCOVduH4~M8fkwvRdcj<>NR2)^R@Y4vi%>nJB!F@Ioz0a3&-yjRD zM7zk3p;P@@5+9C}3o|e&Oo$hM?3_Q#S z0GOre!#}MKI7QKpWf0Opnm$0)-F7ONkQ*wkD7JD>&@_m{6Sx?$PIkcBX9w5~>OXQ5 zn1c%AjL8-$_r32WW{&mXzrvl!+pPqK#)IuS)?!}(EV{Exj%7%H|{xB znPyhC_QD#+x0tzH#wo8%h43$u=JrQa6PSkT(7fRlUZUThmG{%vAiE_lX6l!x!3 z+`Yy0(Z{fkO5+#73rZ7=p>Vb_G_e4*JiE^22y6gr#D*}qr(oTK5t%tKEN{XM2DAj3 z5AAG5ZY<-h(KKQz66HC*NHlm6CHf+=8fCME6@;?L@_Bc= znec{!8+%R6zE3*W4954WS-j8jP&-UD+NQ(h;_z5K6af!#D?#Pz9|4d6io{GI_O>_# zyT^C7UH6E8dllTQeSv2s`0=o`ILs(voJ-b@>9vc7^+82CK_kzZEGoOo?oaKi$uyB`NS`4W!oHi*1nP2Y=m+m!u^(7a4c1J;&6r| zL0|fX^~wQ)*G|CMrGLcc2(3sT7Ee3~6~3g7Z>TfN(_tX2Oc};{d--Xc^Nd`N>>V{h z)8mQn{ig@PjeqGXGJw~S>uGp;6ZR!3RXUDztKW`Wwtz_}CYr9l(L)-U1Zd?_6d zUcfD~5XIT?P(7D^coDJXdBD^~nL6a|X0sumoLwn_jH4g@sjL@e(CVdP={=Nk2QtA6 zx%5ZRWKK%Z7&4v@d%!xJnz2Hbr;zD8X`MmJ2m^>qm2y8|VY3_*Wo6OlK%WQ-t9BSm zsNXKNbYRwoQZddDZmFmN*@i>i?Soq4ULpn20#OriD;5J?InH5AHVN+Fw+vq%v1IN` zk+Cd&{PCQv{~(vLAMEOJCNb+9m8w7lhUC8-Q2Eb&i0GCyUjdJD#j?LB-xz)!jyR8O z_=$W8EbE*LaF{~WAwPM~$J6sadG)SJ9LykNE1HrH6`=oeVA-EleiE88;~W(@tmG~)>5y;3B`I2nCoAS#R6h_qMnJ^M3>C6n=uUHMRT)CZP!cA> z$%fN2c6R#dG)i=XPR9AzQ(9*HiVap;mrs3%uWVY6dmWj85#KD3K%a5;GD`k!BP`+xE?fg10lNr7s_iKV;f@ z=m5gc;G&`p2TqscNT8w{s-lg~$h>*WG*!7ZKno_rBg!JZ9;UMnVUY?1kS|m5ur+x{ z;c{IUEr1E5Hu9Qs)4COKidzM$$Rh^tMcz?Y_&nBvm(?a-So%yD@d^lmwD_q&)*oWB z30b+zKw@hEue2E)Fw4Jt zc6H$DmEDze%JYYN!?e!QkhDXa2EQ_T%=%EKMhwF7Q0B-7q0B~001}QFO-$$bBQKRl z!9UJIA+JN}Hq!CB;B9MOYrpbp9R8U?q*MIc|Bus^r8)r4QxJU2J^vGk5t)T6M)a}Mc!O7!qGHa_D%mKUD${;n z#^)j1Hf*?uU>KQhPyF1l1WgA^2N%jTinJEs#$b!@oA0EJjsKKdcQ)xnFY@WlE*n?A z0~C(hLD5oxJB!$3_&nq+#{p$+Yq5xpLnyz@zYX~G;!f}5w6*aQrl|gc(Kb`ML}?DM z(5YjMM(8x@WTII{8Ljv+y1ghW8|hyEsacLA^-<8bH*a$M(O<`<;A*MJ^?ybAef$p4 zaj-r(k%h+^HvaVW1@ z$SRCfj+m?@DAZ;-0a_W42mE&K_tUjEcGBkUt7*N5WtNU>bheq!eEEFZJtOZ##OP1* z=PpsWu;|{u{vo>NpQO&}2Xt`j#9B!&yznjXrSko(xo{ocZExR9cW?d`?DZqs#=EJ# z@?1Lm%-2~C^UDBxkxNU?EJwY-g9_a)o05htJ{ZxwOzp2@ZKLDk5d741Few)H!kNJ4 ztPJ+~yBr{|rPIcqH>|{_x{5w3SrTWyGk3pvk#2hwm(#xMX^pnI%K5Tx<{rqD<&<*_ zdq~Lg7+zIM2GJRn+{X&9nQ(^ zu#dqnxv@^HP`dW=%@iPq@Unas(fU?=V%5V{52eTP-bKxwVY>Im-QJs8+%pwV!zR^5%YE!|>{4!|jZSv8KT?{Wx2Gp*rW&cO(%;$i? z6=wiH9K2t*(8Hja zyra=JHB|%vgsoOtl#Rq@m$Z$dpyhQNq0&H^O&oH~`b2jS$EW^0f0Fr8muk*!+_|bp z_$?9Ty>L;^{f)B>p16y5tA?j^%7{HGtra)m-S)ygVBFNWH zz$s^~N3P#wC`NHyN6Hn7EPNc!`vLHZn6qwK0bx0g+E&bH*v^Q}YZ#596PS+-v1=RY z-P%rn{%^jWp1Jmy>7t4)6FFT@GUx)&j>rvHJfUFJt@WnP7Fp}2V(YrYC_q6sUXI^U z47pe(F%(65Jy(QSnxoLZUci769>^T-AtU3Rx6;G>3SQ4NAOIwWZ6J8S1V$da$v6B3 zyvIq0jsyFTSZ=^)W>;B4L1h$TIj@Z5y&E~Imv-$<=BW{AT2fJXihT}4Yf5c!|K>5RXhzoJ+Hz_1Du&r|4M zGQN3~e4^i>TqGm~cyyo;!s!4Q@*PofN*{8nTtdrSFZZDe^Tb6y(aLO4OZt~gClBc< z{o^5G*m8O0f>DBJZL@G}G~xw$MR1c*>lx&H@@UMCmN4@&1xjj*p0+{f?gIZ#i)kdL zHoGmphfQ#d#vFE%Bu0lYw`*s2*$kBKT~6ua|CqLT-e3xD#1~td!w*n~FVP&afFazP zOz}E(K8h7=MIoa#TFK*b*4#2`CDv+y@~7Zydh{8Vg&3jFVZ{QC}Jvvlpz$Dh&J&cHW0P$HPgx_$0aG`p?^#@ftCRSlO13;Sz5r#l5~nC&lee|*zv4BLxlUM zQmeO>25osJa?7P9GgJo3vQ58!gUfS9fx)LmM+}YnP_cx zd4rdhS^d1mv3NOFC*S5W`YPpZAws5{xY2`C<$y86|Aq4o>>XbDLC8B^F z15(2aCy7JRrVz@o3U2MGj9b53`pp{~=}-UHKTQ{Y_Lu1y*wLlRU-)~M(+gk3ig=2) zkAp>L133eTH&@Tv0YGql0G&fD}^sX@Q{}~bu`M_X$$V^bP|5@VL z50nZmkH_tT{j^rXkrYe5lqVG}ZjKUP*}u%VMrf?t`7CG{D(b`Xism`|*klMp)newv z0YB#vx`cp_K6`%~QVwl$O%Hv1{c_I_h+E1>N=3yD)A^4Au)jvCG zxVJ)#VbLh$656UthRRJWATPM)Al@;rgIufGL0*}G7AU7~a_3;@7t@pEuh2)8W%`*l zdQpKWk`+-OVmb#;q)W_l4$ye|eC?;t!SGms+FZRIHodIxQad_Pw1`kh$a8>ZJYbiY z13feneh#Y9LA99-?~~o_oA0Any@`nZ1Pk#Fdy!s9E9btP8mnI%kHJ3j1a;pyiH$T`Yq<5u?iMAFVi+r2J!|vzj||xvYdt%3TAWJ zk28HHv01{R0$R_3uM&0R@>Y7|4>_l_x1CtM5GwhLztTXD;IO1w&QIMUU|z< zT^Taf;ha<;1KTb2534nKL@5m7vd^-e&+m*1I3(!|JL&Z1I>&IGNiS}2>=b;l+oNq- zJ=%|BtZ)J?oKvwe?P=SimOcmJ_HalU|2Xe4B_9<8&tVC7Hiu1zEI)#|4w;qwrKHR* zlo{|UKD|ONsa3M^G%H$K-U&yOaJ}vTKJ>&6*|7!Q9ZWc^&c(wcTnVjsopN(f8-{Hx z;uk(<=}fPeAVIot6(wmG<%^k)0kjbILawS1v3<4(l`CJA37JnSUMbU6agXbv%oBL< ziWrYSnAMYO^7?q)_OoCMN(Pp9gH3Zul8*XJ15Qt%|0ZhRVq(#+dXmUELWY;2;1){=s_+L%Fte zRkJMGL>O%acic%AW z1*=PYq!kyX!|WJQr$JVPa#sp${1H#=pMV|c0Ai7UA&|`Dft__=!&GzogS5N(?X=6O z5&f1{)mJeX4CqQPlEoZlwpIYE?F5V^jtw|W7x%Vrq}GkUN{w~a29HjIll9a&^9Abv z8jRYd^^MM1)8jo~<)P$5DqV2ZIrA_pjZH(jUo zS4_q9ADv-CpgNT(i5_*z9Z&cl@+a2if?x6Dn(|=63Wo5#N>{$u{J@2qr<&GRFuQ>HtHR6=oia1m2`Z+|4&4akmiRO320Qao#9joR+ZzKiy${Da%a!-rZLIG@rm{nq zFX|cS_NORAbk1{dAcuRD8pARM7HjdD*>zyH!Dn~N0Um7&I%`Q=*j0H~#VC?mPk1wo z3q)e@pRM}^?NrK2r&j@|^m_0+Kt+vN2W&7Id1in4)!Ca-tiy)bE`e$xL>wGK=K)5I zHearc4YCYgSiMY<9OwhAEN_7(2NurWc!sRF4fb>frq6)AcL`HCOWxMmyCIaFtMJh^ z+CK1*Wgfw%`K5HOM<2u{PUMuQ=TJTs+&qXTUdc;kf?T57+qB2SBi9mT3i4ou1OcyQ z9<$;Zrt!9S?l35Qm!f``6Hl1EV!+-*5ntJbr&?OJx$iAPW?tZBJ`j$^uk6Zu@jBy?8 zRftkDERAvzcFS#7SY~4i8WIg4{No)j18o!Ddzop2giV6)|b;P zdPyt!rF?HWXxOI1XU&^yfY05zo-W)SrDs9K8COlvC#`RvrxRJ{2up;U2DBJyakCgA zRd~TGK;5P5=~E8MgjS_?72#$mUuy*%MrVRQJdj}#FG{4};hd~lS~;!10}EBtjALu5 zEAKwbPm?|d`zg!@$KAPvW+?xHtT>?FGO`qgbuwI^rY*Q)(aiVX)GoBAPZif4ys*n|j2;oQn zS{|kMG29(z3|Zv-{*NxDxBu{u)91H7NarX^Z}ocm#((`=DZNCSUp=5JunJMUaT(>o zs9GWaY%fg|DF4z;l$Q@ssP4g+D=VP7mrgx@D)reoi6jVIShZ*y!Y&j6{lt_0Sw_yr zOBR`i(=uaMJts?8Ab0Z%6U8Nzr)d8IKFGP@kmXzq9!bn4zsY-f8IH3CnUn%A&=HT6 zA$t{`5qyk4W1Pp6eMasi$Tw#kx9BH)2k%iJ+9YPv-JSPRd;6#OVZwHh(dF_(KQYY@ ztw<8-jgD{rl|v1(FR`ys8D*vq*sFe-lBuyFCy&I%@`gU`KMy+r60!g&0B8n*nOQ{s z+n>a;8exTiQeNOf3CHjfex@g3Rb@-zi^{k3IDk)!*xbk;{&a9fL#y~KU{SYRIippM zlMhj5H#r&NW?E$#U$^-);<0H>oJHN`i~Y{h*%m4-pe%A^QdMM6!dd>dDR~bU3_dGf zjuO%MF_wmw(io6+ld>S=xKH!b!JP3l*B%a#2~;M7?|civOoIx3;vNFbSU8v~7&e$p zMwxVruuc{Zq?<_2OTetbQvq=l$t7=xW!5rT*lG^5D8I>aRHjC<5NgCUt#E0fn7xJw z9P3i9A&PpS^lV?>OxJ#ddedVg56cWreSRaYd=6!HofrtQBRjGV`t8{LL{wXKc7PFE4Gh}6b2ETKj4bB#2!}=BJ+lp3$K9VkGwJ+Xx%r%rHj1> zJ$`U0ZC|;YwpTV%@7+;4ixRuWTFh0f076Sz(soEq=MZZNqby`^G0AIv~Lk zwc;i|GT4gm)td$$vJ$~S@`33TmZdU_UuJZ3JDjsvG#dFiEM%0ivPPQG6ek|!=@E)e zvt{SySA#Bd$GYR@5Ytho0p;)Ay+qxQ})oXSh#*JMrq z*1cZ(>pyubZTDx;3)#N<51&olbEiNzr-1NllDGmr8AoDf(oM;a2;x_MX=)*t zctv~6$$=Gq+RKf(fMcM)wfP=oyaaGI#FA~h^#TURFOZnR3pnb@W9}@n-@fwVeatQ} zQ=uhVT<}itPsO<60p9Z6_8tDnZ_W_Eag~n&-Pu7#UVv9wm%ny4oqp~cRPbd=3hiTg z8A~&eC05Z9vV&iFRBnys3^BMw*#~yVB@D!Ca(rc!eISL}PG8ntdj%O_d7r7^^Dx^LWr;y+ z6sl-As(AWj1JAFbPax*A!d&RdyT!YUSeJ#@e8v zH=UyCufQlYL`SQJD~)l%H}N$6$5?SiM4s&N!r8!i1=Iu(JVRLsX;1vPt1u{NcrB9` zP`qVjg2q^e*_kR~XoFgWw95`Cvm#!LMF++2<_9Ug`TsFSzeakLq1S)odV1~e(94}C zFJzLSEZU)*Z5{=BgvCv3z;M863hZnh4L=M4k=SwDa5pSh7Q8A|2RI8N+PK96eiq@n zDx!&0Z6IJ9qkP(fir!%NYPxrAhYbuUOME7D2W7Uib}^kj_w(TSRe+%62BZV>B-m`T zcu<`cmHeu_K#!n<;XGtf$;*LGT4D^pc0Yam@9w8f_7$)p8zq+U12cI|j#)ELZ5Sat zqXQ*PEI}cR`bknht0@9@H#unQ79Llj5=#|ax3;>vlG>+SYpTj%S)n{vlu-a$#-el5 zg5yO2j^r$<=zu4&eu$^C6O2kmsByH!w)?P{%E>MTH!a5tU=l^(k{^tGn()Pyp*eu9K70S1> z^*-6qc{cBplX!s>ay2Njbe!*uY8*=%Q-MGU%Y2x~t#tvxw#QrfT0)KVMbN&$GSac# zrS%T2-5HPpXA%$6`Hl5-@z#2Jkqv`)Jb7Y+w$MYKS=MQ;tnfsbJX!`+l?fje5l`Oj zZjmGhj_xg{J?B7S}yU9{0+SSU>rL!pKsq-u;p|b_`vfy#&7L}M$ zK7xWyd21e^OZq;o0A*{EIaaRg-Up>bbdI;QwQ3^ORQ<{vN;hW1%88#4(nc# z#od=_x93y$^mA$T^j8XNtsBLdDT&3%U=R2ePiq*_%IRnbA;iblS&IvPkx^NZC9)gU za-uA!C|h(S72Z^I3;gl4%ZWSpZvF@n^#Ut@P&77mjsKyl1F?!0Zy&$ggP6HiV)2OCTO7? zIlb9b2r79UB5K`~Z(xccLb!i@kXHEu7h6BL2=gH6=bio#Rog$sH&RQ;V z{t6>5I-MP?5$;`DW#IWam08-#b5~xZh;(oOJi1}FpKjlHle2LDUrt@P1mK%keRom3 z*wxy)30j>hwmezUvfc5*6%W2lI=ur2%2E{&)N$*>2Llk<^jp-2ij0_s$}$BN4h5;v zROoVS4TF>6=w;T_{tmO$F9B>uK9jkMCGst)V^h)cNkPD~bfENf7}5j+gut=yt+1;c@(l8&{m0&zWrm?h<-b@ zd!FI}{NA0kwZ*y0Sdyef6qEFlPlYPz8_bq@WEyDmaA`<%JFVfJQ>rY9B&C zekq*s;(PWkZ_xBN4l1J@@?HYSWsSr|f&1)q-`;!+YZnRvGZ&+~$envXVEyW5>T)VZ z18aWAwJUt(DSwBz24h+&isDwW$VVQw9a>dg#b<yXDT{Ft^-LUwxC z2xzq^U5?Mf1zTpGi`l4Rb}6?!fLW)hF4NE;aUZflp0Huskq007Y>YV$`O)Vy<)Z=k zQkhL}v6zL=*0$YH`dO|o1LIuK+rngp2!R_F2RKFn^Rt+~4lI{iyJs)DQKZJ*Kx$VQOKkW#dIfWlVr5A6DVOf=A9- zSNm7i-MSHv&87~ljY@|3Qids)+@Re2AquxgN3uTv9@*i{=2K^wp|YK@ub|Nr;O9u} zb+8L;kxj^>XrE*ZkHm*$LRM2Ys@84Oe@j1yV8mZhqOtsK$Y<&ucso$)DC3MA44(6r z*0%3pGnTgbdHYz4kIsO1;3*;mGwN}$lbZu(;27AxQ|9gaAEwpjA5->s;mR{iGM-EA zwVx-#^Te=Tm7B8Ig+p$_89k?@P{#phiblG6$!rsRi= z%3?%@653(s{nfYLNpJkiKT0q6K8&MEy0n46@n6xnUqwJ;4HHxWF7RoaMQUIP%F~*S zHfvVdppbUhCD}qq+BnQSuAEi@fQaD7s|bl#1%&|pQJ6$?(Ib5F16?JVW*s5`@!}}1 z@GJ#Vz%d<4Aq-FdPG>_S=04oPqQb%B@ySyKUjg4z9^{N$#j`Q?@6fiemZra^s!Sn~ zUu($MqSy)Iu6w7ZwIPHw2;f!f=~)>}CMpCfkS#0fC?s0H{;;xWq4DPdil;Yl@VD`} z^2VH-L~w+=m{Txh9GH2C7GM|82xL2RyD+U@L9-cPrCpFzycCy0D0Y=&iB*X92TZ+& zvT0rFxa0+o{8_`Xze^ulS`qlfrJq4qBhG31wKZqdw^2?9cVa*@;>;+mR`Ho!^32x6 ze!6iTYv=}6nD$=-^g=p&;TJh2?Mozfy76Eas0SDE$9-5R+aW;3k!Y%1{Y46T5(m7| z=BsurJK5!HcOB>wAMF4?cGSHA?|y}kL5dw(tH}T>jz5E0!_{Ec9xLSGH{`RmBP_pN z)@gT}9|6yH&5Qubor-rT`@kxTYuj^|c)*AXWSZx9BG&SWkW5r?OA?X=Z%8ZSajzb# zP7r=7(!{;UgP2EjwE`6otc$M4kx2J%vndjbSEBtjH`$TC{XNQfg?8bQO{f+s6($G) z7!oTdp8H$N(>g{yxlymci5e>KV&I0d5?_jfqAO}K+b9k9I3Q|;Wk8#|>DI<4=}tk; zP%`QW4$!r{_LRwNb!8EPIAs~cafEOSVi0u-veCMsy`((sN4WK!b7O#J6 zH9hwmOviWmXhOF*q7fA+TlFj`=}^wv=_a&c@QE_F#SxB!P3nH?XPgFchBK7!rQQ2) z&^DRsp&n6P>!EWX25!pf`@lz#DVHxI7r4)|&h$hGJaBge-dFAL4i8d~UD|k?zM;*) zt4SMIK8VK_mSppZC36jFaqv_>k;2JOG1#O%=jNxRrVvqJ*H~jvux`5^ErvA*8R1vS zIxS9T7&>$4OrkQ#G#1{3W9OUwZ8%Ro0FHyURZf9eX|hh)rBIxBk_AH%Z{b^+m%T(E zqtH7Tp7_dO<1Ns~k!kDCr89QiU1wYvEMgGoGe{l55WAicNIf-ZQIU9FINK*Y;t5t} zX)ZQG=&hpAj$>-r~c1S#_(<TgAFRQd8l4Wg#&W4n$&AR85NMC0<3W7aujNZX+=T+VQJ@F z+ZLPlLMa_S4{(Ly;>v8)C5j|weZyJBz&~^WpJ9y%rNF>>&V<wBUhYU!%c>AR=*AK7s&}jJ#W#$JvE_sOvfg>IR)$sK0Cs<3qM~8O_0m)iA zc(avWA;NjC#az?1cH}E%V_luRqYDMXQto#_udwF&!3jDJHjy-jY*6HjW-IK7jty+m zSBnOph#g^K3P`bLjltuDr9-Aw8xptVEkk%tP*l=-@4{y&BYoOl$AJu1YCbgK@)lcF zGzX&DSA`BM7|ZTG|M;-aMKpXTYdHB9W!V!$K=Nv^3-?^Fec)$%M7d@M3s9II(bwO( zjkW(HI_J08@AHmTPb=N`IS&|KX<^;xEb16YMvp9D@l~l}b28Z*lnWKV;vX0CCU`)o z91LEp5xM4ccmZn|yJy#im@A zBaHZDcBk<^14xu5jT%_~qOK;*%*%uI&jr#;d6NgYhGc0KC%+J8ykfp0`mr#w*zsT` zb`!844jD!Jb|k(*YH&`Pka3onGWdapXsA(I^O)~sqp3UIDxnWOb>l%KojOj;IguwQ`_BW`aqXaf)ff{qHp zMQG8d!STO{3p7&iz^gA5GiDy?M_Zf^-)dh&R&#u3Z#`|?gvrRukZW88s z@eU*-GuyLQjeo=c>HRsu%4{ZT=sxc3?`h#$r$apzpO3vi{A;Wk>zp5Xfho#X+PU?^ zbZ&bqU8KETlhLDsI_kN^_UBe=Ch2p;TcRVm!RkrgIVNaWXzqp{#ied1H%g4VfU++)0P4lfuZHs&+vvAwTwmC7tRNz z)#GDa3SlX&Qz*BtHwB&oNXsP$EE1}+<0!nU>B8AW#J%OSj{2#vlW$NaXm4!mGR=`F zdbnv}rQaCeDtu!%3uex(h2qyi5p~&114~PsP7zgw8%ZjxOnPAYFW)eNZ}xAX+-RY> z!l2_UYgb<+%U>U78&8&Fdj8g1OS0EM?TNK>S#dT46GNXV$;DXiWK;-HHtB4KY=+zY zi1Qp*{Q4PFX7FeCJRRsMVs~>V)?~`G6wDP^j|&=HMH_P937uL0m)h2Yr4yl`(1}vl z5!0ok*nsHNwtVRnBI~HhUAB-kVP%)D0*@aaDw^ zCo4QbvvGz8K24y@*nuz0gX&V?PI@<(df3?5PFMcq!-R1-F>VQ!#E(pzrbzCBS0s&F zKrL&T_yCvDyf@x{dd&nw-r=Z_($jLpGA)r67sd^q9E9dl!Za~(rXq3I+pyf`@Z=qS z4CV@A5av412kmajBalvA`7)qi3iJ%v?gs1Rw>Z(2qxn|v(I+{(MpVz^c3Dz`D`a8R zPZ&`{_>Z>BjF2@RG00o(puAGbEk29eV3|S4kC3Bfxvis@O251;C}D|vFl5;#T+Yjr zY(ieDSkv~B156kAYk9@u+Qd%_WZsxcILr_Vs5k_Dv4J<>N`HnGTeD{yi3)o9mV2}Twy*GQd?8xr(^2~RxDpUalG}r)oV0WtrP7*_+sBq8< zg&cg5Uu1{$W{3YVKRCh;GaMn4w!;>iqJnL+(aj!!7UroYpyuh$_ny(;_shM{y;Ufn z(F{Krjm~@b*?Z^CT)A@P%9SfuPP4N+<$M3_e~q$0xqk*_HYl|?lAH-@WRniPE>nXB zj%rdmD689$@A!aYi-%Xq1`8@Z>2rFm^eMl-yW~*+s!kyOUmW*YIpf!sB3dY>`(w7P zxmL#a_R5(VEAEj6YyW^1oBdbISR)rhx#jo`hAJIW#->VdsBhz7ZC4w{Pu=PizsJwH zXq_2*p!P3e0ehEuYRqTt-H;y%Tos|jQV2w7=L5hh6E-*A^~z7~hO%1gFVm*o@P`kE z)9PxEJDQ71mwyegwwG#y)^n~6xZ9>NeHNwLkURty@O}j+PCo;iJsNLBw7wc*kec@Y_J7yM-d=rjor+qr^*bNMgl z?>zWBP^4cW5EkyLTw0p`F{OLD}2+5yJiw_40_R62F5I z{7*p)Wfu4z)G>w6`%E3uG9_E|;13rJ_Th^teNA>#p3qqfQpJ|EXiO|~M=(yiDD7>A z_+WXp?&L`y0vUJ792K@!z}k^B#3?{6kkfYo&S)Xofq~w&FI?iohw!;Pjljw-9Vjx4 z_$U*))U_V-lUE#$B>tjj`PP_bDqE?^R|)`y*JoA|0;c{ne0e(m`G9}?yemsUcfh>I z)dM;#pf3-)PKdQN*?$%T9XuYDis&jbzVl-qy*19qk5jAC^dxu_A-9i*ZecxouW?k+ zoIhD*2E0PYO7b~~7D#^AN{PQb;Jj%Fh@W38=S*Sf`TmFKu~!MRi-iuWqElp6zXrhP zDlmTkKCa1GXybmq^5=qz*vBM0fTxDyGsP;aLIY0Hq+XN*9hSN)0eD4YjH~zhYb@)!0Z_0opv=Hy zvU3>-e~UQ2h>m@S4me6-56iH8sAZG9WyDJ%1AcYX4OIo&gHcW9Q+`c5yS5NLtsiNp z4u(ni2uuzKP8wZyW9Vb`+!(48=QJ7rBES#l=1#YwCAq@>V5Qw zd*$%@&kF;vwVEQEj?NS99*V5x@fn@`7uf(Ft@A0Pm~`B`OlMTxkP35*WCQkU@3J_q z$7sTId>4h6Hk?lSoM{eS>RY9kvf_*3zVON{oL#1ev-0|1zg7<4yHw5~U^l*0%5Oi# z!}Hh63UiN+SxD9IT&;>D++~HFTG3L)k#;J%wYpn-syE7l7BGiLx>S%Mm1fSu3kl9t zrc{UsPu}bN9x4qA2r_~S03+@(e`o!C863OGJH2Oyeh{rp?#D{N+}1w(;b9Dm9E~hx z*dzuTUaHy!peT=kr2=$3nuz-V!MBo)vsoC$B8|0!ZQiLc%A4k|W+fsBWPSxFNpSUs zqQXL{x<{c(rb0=Y@Kw!$dyb-w)HBl{r;tqSc=Alp=`KRot-P4Wge9+o@Eb7)aKy0G z3R_oo7pv@FYyMUsA9+U@*F|FXYJn$cEX^hv@B-DDL=gSt${t(^C`Bzd+qDP@PT%V8 zZ85a8paX!gT4A1Pl(+yS)T1utLw;+wqA4>3YZMvok0`4~)$dUdkA~r+^sG})2uo|? zLM(r2+W1JGm}52Maxr#DYYz?d7BqOq)7n3GM+ouaO0Pd@wkfyw#}H{=&FPSNVdGmg ziY$z@0kt74Ycxh@(NKpsAeMsMMqcH%3Uw{X={b@9g7oQwWa`c)Q{tX^Kq%fFQC!_Y zqopS~XYTbele!0LXnsIJ(2C=H*vat~EX=Pn+VKk%(*x$Dlm7fAl6(nTU}dqDC2Z!s zp}9I_?8!wAF;+FT)>_f-navlO^Z0cTr4>y_ z)jge=r_bEudis`m!pQ^VR|VbUXOlUZBCvLAEjNTuz|7otQq# zipKyC?9KB(p0GbDm1^O1mGFr&09OG&LgPoF)?f+R(zZ$8sBQcu{ZE2F`jo(irw-83 z?Kss2np7B+VT6VisOdoQ!Ebu2;waA|U?eRxRTtaezhCz5FnwqCa}>;*hAN}=ua@;8 z{NKC4yB$7mznIsxN-Ok>PZa>elAcnq2Lf<#G6G3pTgz%`^C7>QT`H? z^$lzzf2EZm9IbG~iYYmXga3>UkK1-l?IpU6W8wx35qNEJPRCB#0AGCY7i`iKxbae! zMj{C=r=3lyT-H67GqEW1P1-M}{BQ`tf+KGW!{lWZ0bm7;9BmbE+e0vlIkV47amM%l3SsDEFe=XlOWP&$8!fRlj_J#;E=KPNL-$ZGDpZuZmgR~v+{)joo zDql=>+Mm47F~=SOJK*Jo7h#hhIm=m1nj4g5$p#e5pRxLIkQgwpA7r=AV!bsF15 z=O+qn^T9f9nua#r%&&&u?9kYG8Y>h12BaKzV9@yFq5f0=N$_-f%Mij3>?Zgl8GK@l zWz^FTPIs{rAT|n(S}%yN#sGfFMt+;T$X#l$szyfDL+DS&t5`QFm{lw9yG+T1?OVU+tXqUm%!m3yK+Z(=rDWG?B%Nx*X94 z&Vfe&wKg4TU=IbK`rKp!e>!zx>LypDZ#if*Nym>KreD0Qe@jFgPid3z{92#hs9na_%8HwL@lR?5k1Lnkaa$5TlaCSK36_pkZgW>nOLcuYdB&#=<4y9I~?r%0v0hXqJ&b(6&Qd? z-Sx$%3BAOlYg95;5;Dx!VN>eTdxlStm5P|-B4NFV9BM@rOzXLTmX1oTAMe?G9c$^W zH|~_3>kQAMyQZT`aw|`3dsmc8;M#4=P33w7NBTl z&Ac=vM%>3!GwzIu^@TZ1{n4uk#rqjL{qT*Sl!rf@lxNI8ZONB@r&})k(U+Jirlk=& z0#ZSkp;TVFqm$HGj=F5Km&h3Np^Z)D3GDVJh0_d16 zZT?XoP3-q698XdDq#8x?OC|Pn8lrTX<_dZLK2DCrYN=HjMg^@YCveo@wR>~7?Eb~y zmF=hCH)u0~ho1gj1{wbN%ajGXYaj%BOb^J(HYqHUf0Q9lWA};A;xWWpG~DK(jXR_A z)ZTI7D0do)JDlJC!?M45n8oXJ8sn!uGIj7Q2@ONXxg#0W5yvyqco8jz2Q2M56JAZz z&W8o*^a;1hne3DYw_Yv19n>@CvkwsB6L#evpg8o|DP)eN-m6+~A%uAYzjSEKuRNeK zU|xOa3T$3w3pQgQNqL5Nw*I!_c(UH2AuxBGpX;v$B+Oa{wdDgwXbBu!`6tme@M}Dx zS5Q`%FryxiIy=B~tUhj4)?0kQs1EdH!Hm0KjF>MsU~0z%<#vDPoigEMFSl5;{hS}& zrtZAUI}Ja~BswCW?5BaPe3sN?wvQ)W5o!I!+vnh40X?3*Wf16BI}d_T=_9Q~0SP-W zEg}s_LshW;>Xen<8@x>SlPZM42z(l*Ue&e8x9^YLz>^V%tXhP}TL^-(z8)5l#E_e0_wGbLd_%^pw zR>E&Tp!0G3Q##Dd*UX^}?5jNZ7nC1zrCj7PhtQ6C(FtGU15tBDezeepU-Ml{*jS0) zBuF^v1w(j>ot9|BJH#%DRhFCrw!{=a;Z$S^OW9gI;uTQ9@@^9TgwfjX$Rv1sG#-{d z#vykk8KR)s28`G-V8M~Qb7|`SkaIey{MmM;13;c?n}#p#)Q*R!OxcZN$edP2<2wDb zW%KNJkhyevn^7Mg;>>St|HR8TVA64&lg#zk81(!RTN*Nl+j{@i|9rQs{MPyGP&lWY zrDwHVBP$dJHB%LE^J|bf_0Q3vF7u*1s@JSb7r%uzKBO&JQt}ZPVpcEl^TIje!gh_b z>sW_r+XUd~(%KnT+c0x#O1r73s4?w`+lEti z*?95kKfu!eUAPT}mI~$u&*f?9boN8Q<-&JW!&G=k#2i&*pr?AZc&6(xDZKXB79B|{S4;|{Fqq&z!&@P z@eWDU*PMbjI!FHgp$#t<7Z#2zP}DMfM=S-l(V7DB=`%So^ze!yoxrWbGt75oFJUYk z<&Z*Q*s#BGy{uyKov}K(O#cDO>`Nf@9Fo?95*YqQTHA1>>4a>`ZWj$&*TNeP?`dH& zAzPivK74+)7Sn=;pSbKv1n#%#@L4*9k-pX^T!g-r2^=#dnh@3UqN2IrcvnXw*pf3z zSn~MtN0^xMv7%wU(F&XpArem&JYWea9MfvQC1ic6<>+(8sfm_XJd>u8m;QP__7<&)#9{kYkor~9xG1Oucmw&Cvc1c zUcdP3*Y-N`ZJx}Jpgzs9+rz=$d%(B_-B6H@7&4w=+2+J7N77Os;Zx?(KuZ?Uu^_6; zT*?7^W-Ci<1M27#{Nk`PJmbzOJ%)dWE@-0TDF3+6t3%lpAv4+_C2Nx{-2?-Qa~=mX zMw|*$6d387dbrE%D}4PfQ7)d)+FV1x&|2R1z0EH$LtF`Ld7E5*YT@T_k03xi%H6oh zC(l|HBQp7(EdzN`B=VoI+<*x{+8U>EWnDy@8NCUq0U?Q+I8OMtKDbp@-o9QgP8so} z^Dtdml+ABH6Inf5MVYm8tvsS_fOtf*PH_RNq7L6EFXq(sqt`KJ*qLLG^zN6++6Enr z@+DG&=Rd)P8^IgZlPOJ1`JkwJw14Lrz>!Sncb}$=v4S(oI!72N4_!Q5xs@C^YGoa% zl;F80q~x+)kZ3c?*BtvPpF!MQ#7V%<=sI+s-+KA&a`S)vet8j=86kokeEets4V{^b zES6(s8FpF{(F{O7Qn_d!NW*oq8}wVBK3HW}3*B9B^zzL+ffNc$xnOn;Of#g&<_yqxiuqFujfMINE^@vJ z5gBBLLvLU-(JXg|jcf##pqg?pXjPCZ5MCoN1DB8fxu>Uk%=!>Mfj&bRA;cn4U6VPVvE^#{k1$(Po<|4$OxuN0*`5ex^!@ zPR~On*pIj4FtJ1j2Wg&kEF7`VtMxf=jUO-huAej|oGvi@=5svS2Va&>bwx4c5x}TD zl%Mkn*)x`UF`&0%hXO<+k78YP4_#@8kV zcNyR$Uh97X-$1^Ra}|W7Q5$;Mx(%PQ4!nvT*e~nEFUJXd#Hqd7JT&ztV4v`Fboij` zY`=wUXTN2RE$ui0bd2>6<`}^@Gv<>X>^>~V(_fUu3I-1Nr*nI+j1OKbn<%uy9>*$Z zRaDtMd>wwdPC2otM_jL@YZ(yUZ`aO=$m-4%3`1lMG1UaP$ zn$a#g!k^OD!lK+Jd^iOfY8BrKB77&=?`Nl@8XX#@)5aGHjJ4S)bPoJIzWC63-w|M1DEpl6WGQGip| z^|YQp(dqx_w;pR*HjcN-neB~oaeuF@(H~-Y27@aormT}m2ZT((3D84)B^tb-jO5X4 zenh4mGE^3te*N*`*WT4u``133pPs?+9EG0kWYAP=j~QQUnm3rniYgP;I~4?G_T1~z zrRT{tV}a7%eT3fujd<^QD$bBoOz1_9-)A_A)x;>h3zcHv0M$AJXx@WbL=u%$L1mhV z3mCM=yj+J<9a2P1A#EFEu%MESnF=w-x}}v#dFf&*&nfr42g5sM;nI&kDC{0m_Go`K z9J0r98KF-Ms2Jq7UM$kGGCTBZv#DKvK)hXqM`hb4T9)Fs~{7kv#uHbv3qhSDsSu%LNnhZAK zeaj_NNC3*;MkWrgJb^?$>zQEf2R#VSYft5kqH#)v^P!!BvN8l$H>*dfQ~*2dX@?18 z9W=z!%-@XFuhl}{0{8w)9Px9EEq4XC%D&~4@iDfpnPW}quvl?6xxw^+AHsOsaIBGYb{e7e00vfaJ8^7mZr#W(7M6}J zR)`cxfG{%ul#TV(_v44hW&3T?*}hZOnU{9>9!dmy3_3sLK^(dgZ1*U_X;6=in6?A_x)3DaO&fKzcC%^GigQ09!?3Te)$ z!(h(bWP;43xq|b-rBZJE$FhU=H^DsC;gF8$(Ypv+=2OB>9qN|(sg4KHinB0$u~Xvw z?>)*+1Px6-6%i zDGd@9S!D83I+C<3Br9p*&1hrz5I>p+I6&pjGqct~jdsuZ zfX*3^w(fzQMSXTuMCim>4V_cib%FN5CPpVL*mSZ7w$H8~@H9{4pg4L=w`Gueg*;R| zW+A0GC=bFP(hLt*iGM-dZa15YI%_R^`s(X!aOfl4%6_|ET<1F zXy5_OcNA4W@(jk_a<$?og38ZS9RCK}opOf8Z_944$#6020V5(-*pWjOZuLRKNE$OH zpQlk0tzY8i%<;O<{Kdia9qP(1N(=k*a)MNE^*h8wp+!-AaPwYy<$wH9`E6GBo}))D zuIPZN@Y2xzybqqaRL*~mhp$snIp#JWRWx%#5gCCd4re9rC>l22&KHveI+cIR==Q7c zm;DEma~i$cIEecWyRRS|}r%@z6G4iV@C9+1x;9 zI|MXB1LkIruuQreM6Zj5{AmSj?TFM=dHob89_|&aRXye5P%3y-oTVN7q-Lk(WcqGd zTY1PcR$B5mVW@DkeqfEUP7faJ=~EY6Otbz#bM34v*^an7&PHZpIMv?af^abBdux%?zO zdCkB0>FihwyzJLpu6M&9KV`nGBTXc^yDfwa3Khyf#h}t; zITKFWNONU_#|}I4lbuU=ucIQ;yN1gY0iwyfwtseZe7 zg}HDcvl39A$W#LX@ny_3fRUYJ>eGPw--FKCx14ZKa?1tC;2RlDApI;7No1!v?Q%;f z=||SgzX!L}4gdimP};>)$+#9HbhA$SpLoP2Yg$KhWHY-BmD_KyhG5F#OynMk4p*Kn zqo=-2x-St3dGfd;tJx-P${yHkb=YV0Z)n?{g=8dRdN}zYNh<^Ro3n4Pv-PwJt7D`= zu$R0eWYXZ*%-QOEVV%X?mT4Lc-j+cddyBOA`+VwC%@Gx{ z3DajULG5qpX`3E6cd^LzG=-5?<{pB3D)?zQA4^}1afF#NoP5aq9Cp#L002M$Nkl?&Taq;<%r>`|d_qe(a` z|LnUcqAMt(UqvEtK}Q?S2sd!4qMYPa*hs|DD6`;+EBkj?*o4mH$ejA!jJfaq7g5m8 zZD4gp>0DLmBHvpM(LSWoqYy_`NmsQwtRY6wiu>&MC!sBtSZk?9xCV!2yVZ`!L!K&oGmXI zF&@yt3ISjhCeD09d1bL7Q!*^K5vzb_^s0JTw>=HcX!1ki^PD-D$%OElvX_{IG>p99 zR%A{M=pOaUDvjl;6NKqhWs(`zRl~IcKS!!UM;oXvtIeG^w@F*GK?AHI><}YZk2(Ry zgh6GYp)4FxS$emzt~rH>_jI<aXQc6qIeM9V`)Nj&J0j)3&3NPrp~OGnZ?)Vbp14|sy_P*3`l zwQabl*%5G*!Olp%@Jztd2t4-ecRH0SNZBTeci|@uzj;0GNUZXz@=YEjK$DcbzKmoZ z^05Wd1Z?@>ak%Zfun4-Ofr%}h@Sp6U5anf9a3b9?Ct&S;fXKKC8=+^yBJ3;&ZJ37A zJLag>HH;Q$JMyoK1=Fbxz6ze}bduSL0Kh%Q~4PVQiJACL`&XDC03gXEz+rEm4{6KE+VR;d$tREHNU2%mw;( z5VNpMZBH#(lBd_LyhO%3x`rkuD>@o!UPf3YR*sme2OXsQz>clkOo895N9VNF>chjp z3!>a{$pUwAhEvl{_}OeJThkelyop0-83_1%fC)K7Vnp20p#NL1#n+zWwtHf@Cz^UbXe0?DK1rk586Iq z3%*zR2g6t~Wp?~rDeVUGVL;|SrIAU4MIV!)ROiZOrvUDA#H0q6*0pK3?~mX89_Hk3 zwD5kg1k+P+PU0n$vG{IotjsjjR5}%E<0qfKTl>raQRXP#`um!T+Y=pu+*sQ4tb4u7 zoMv`|JZ%Evy9D0`29{ZRk}A#FP@g$TD=ctOQR^Yaoo3KO!ufs5`Ro~{yEjJs^T$>z zXPFDp9iWZQFE)5Xd2mwcv40VgQ?E66*~^|%tKHms<&Xt#6p4Dq5emxte}1`)|AsKg zRVUG(d#RMK{1;#1q(OwZ^DQVJ=d^VZ8V*}|n$A4d6&fOZEN|yqMoE=GOTtu|I)tyK zBO8%Nxv9L6#(>Z|%g31UtIQPv8rf(7@K1Rv5cM>lT>PiJSiTCHG^Tqi?7w=96?w+t z1c&S*AY37za!ova(pUvb6Q)5bX^_vwai?7VF==2pI0M}7`iJGhcLDH?s?45(`iYOC z>nUu* zZ~E4N$ah0YN8z5t(>G2$Tep0!bb3yrWx{rqzC)(P98*O+_l5N)5@U%<8i!J?>0@$)yA^ zcohc?j~WR;83AePhYFK)l*$fkyJEhL;|EpXt`!F{y20%%^46*HXAiN;?o$U{6TyhO zgpy8TCu=%dnS*j%fMRz+g^d6`roC-&3SkI_OzChU;L$x!v!b0)2~-i@++reApSjEw z(nPD0*rn{H!joL1xKl>Ko%B^wEi#)ui^M!8O>1Fbg)4!aoRdrbXlQ&RAXj~Ae~rJq zlrz2)Mw;7MEErC-{`TEYkTlZ4UpRV6K!D8Y(9b3xVccPAA{Ofo^SBG!4R&3Sm_KBk z$?CX^d!1guoivmQ(KSrBxeOCj+eo>8F@Aod%vR1^mVe6>4QGbwqea0a2DM_yNLG#X zmTZ*tLjZ-@c(DRlb&W?mlDUaF-2{Q@0SYzTlNn4{4N6TqC*d-TrfDEf96rI>pz=vP z+do8hnBRB4H<7?3icqSx(a1|E_=YU;sLCvX5vpL8 z#%2Hd{j&ad8IL>*qc%Rin<6Q}iz?mBHPZTcNDGsB|S+kKPWpJ<#^P?&PjnO`C$_(UWcST&bP z_~fyDf|pXx;tl*dlwN5d9xXjmN1*jA9dYK_@65`rU$7{ZDIIRV=Lj~__vu8CEJ@4Z zDj04%Rrkt<5nTM}ygqpV*kMp^)scUPh@ppzn>tt_sgZm_`H;?SV0oYaIAMGim-=Ef zBYr|8Y4rq`7)_MmU;zs!_a{VXys|hEK`dBL!;%z2nq&)90NkEMRlp-?*PBaAFmPV~WJ zfC5MNny6JOC2E^d(z2^9Xk|*nu>|4SWZK4sa4m0$bGw#8zmQm(=SmI;pv(XUFa@FE z(|(gL_4GaC)wp_F_F6b$hb+jQA3H3r-1i~`;GN1LwwW4dog(|nwnT*3PCc2h6VUCq z56Zzd2MeLp4zOz8x^YxKe220)-pO<{htOaA&xYlhKlyU$v5ESCG-Lx{&VHMd6t-|qjm+_08Jv&-Dvz+?+hAwi=TT}XQ5Wg0RfAaKkVJD z5IQb2w(c8&r`_x2VCScVc?X4-T`<_*aC-O_WO9zShA#+KS%!Em{*+U!t`rdIw?+^# zOZhi=RRr~IiVRXSPIPu1)~rlaqzPto71q( z(r{^=WPdmW*J@VnyJD05^$t1gK=?8pH(AXppBJ8Wf#**fAifP#>eq%hNZuQ-<~>jZFL*zY529{VCUz&Cyh0XJoZZIStCa=IrpkxY2x=okqonl# z$*fH)RykJVYwdOD7_3c+KT{=*-1C@TbKM&l1^M_R@{OQkb8ycbFAA=OimgqLLyua; zg(Fq*=GjMYLe*7^848gy3|_kZ{=IT=i=z?&sgYKTV)s5OhdM=#-o#Aw{D@_RO-kVb zJ-qm09N#^E*D zl4#BkUWLxFOj$1({?v{UW=I&$TE84~_Y5kt54z64kOJyz#3sfamZFH*i+rtu?CQ zA&}_6V_kZr1LRBxE4@R@J*>4JlfDx9!JN<$_0dhm!NBavr7lqR`0fr@t>b(ktCGeX zheY65AMnum!5>lePMvJyst5@?@$)PlBmlnr^OUfuJAw%iD3gFd8FXi zak~+>3yFDwM@B5`)UevwQzS&B5>Hul@Nir%y-c{bwelh(>G;~&Is=F`!YYxNDOa{0 zz?(-~^f8g&ymz%+CvyaT%$X-~P5#W6BZZXHBIQI)mnKa%lUIZ5r`*wB9LZdl=}NYf zwL@$=H7(oF)H%t?WqP4K&%uiLwIg7e8^;k#+g<96h9BD%EeaF174)!^&KvOHeL7Pv zAY@NVo$`K#KL-xL57^fD%7|u_dU=dWv_!lJ+ zhFToV%C%RH%fo}~Ws`|kUFNOP2`gK)hgty~LWqDd(XeD?EZNQKqO;;f$+1$N;=3@d z@!LyCi73Q8gt7HBeq~?)M4A9yvkWjZOs-#z!si4gcyeOIM_f%;#lXco3VDPCLVvPv z?~+xf9Pip?zEf|Ea+@g@M7P1F@wAzbAmL|>9RTr=NQG`VFx|*7 z81rm8dgEgC%#$>;T&$;rGxvG6tdHq4X~U!(%wFvxO7ZG>7mlho*Acxlw(w z1Gix3j83L1pmD=P)P59j6c^?K4tosAisZ@$JHxHhdRGEy$+9$3fZzz`*~+eW)GMp( zsxV|Vv`Wp?t@W5+*kek?f_XGO8$woS&+HJAj%NW3;FUA<6`y(tL|RvZWS+5e`s^fh zQL4&Eua$C{omQEqbHtqWvuD4~y!CI9{&PWMa(JWMz40pL!~V8xhtxluvRLW|SkS}` zWghBGC_Ky0&Xe`SjtwMk_&XoWkpaSEhE2|V&%d$aS+ngU{>_gMpXyXHb>V&ER>2a# zC;gc06eg%vNMyH*wImMyiiinvtU{Cz1ZWxaOQuXJ@|c&%P&0}QFweR+TnE0Z>k+6I z@M@VMS7z5p7@I58O?n*mF=Kwd3wG@DY`;G#J2$q=8S2LhagWYymh=CLQHFEupRGnm zy6TxT5S%u0BRq`1X_{qjI3ALJ>J9vxeZ6^KSQlCv(+Sfuoq4&&5FURj=rDze1d=&Y z|BHAKxZ6I_S=`)ZFH=gmKh>H{mY`2n^od9QBCPN?Z6@;Y4&MVTBQJb*;TOHS(%&DI z;lp8B-JWC-<{5Z4o7yA{$}GoaTN}n}Q>FyjqbGeb?fl=q&m7}g#@C62qDvXFxi!GI zC=2oqkN41m=XaSt(kCv{J_h%h&ai)+ebrT%Q`pvZ>BYN?H+h3jjlwH!^>LA9w#KtV z$1W9|`shwRo&qK>H0+nVJd(~mAp@U=N;+pG$GI3|WI+c$m@$WbLi++wtn@Ae?>^;7 z=gDC=VWtc;s02{_Ea$M9p7Dprd~B}x`EB`~eBo(1`c$Tjq$0Bro;4EmEj?(avF+Eu zAx(edq(B-Zio8c9*uTq(EdT!1vi}P84qa9TcP{tHMiZv*vRA6gN1*{IhwEj{(@nI{ z9HB_jX!O`EU{1qwyge@0enh3b%C)EPfRSiiTzq1Ks)i6o^pUGN;QA(m`jg9WJlkM; z&-ePZey_j!G+%45NFjxoV9bTC5oy4Q2osM~fK#xS=_JC*k0_WnP8}hOcMOY#$6n`% z#bD7L5D=bNqzsPYz&-R0?%mlLWIO8K{he~m z0*|i8AEpCj3!zeoBYNn;qm&Ko>P@>sT3U&)ba%cxXa)n3wC8J;qpY`F=?Kz)DGo zRFq^0g-!+5X3o1xtPQ%I6W~jFt;=gP;vW4t#Y(~E3eZLikI3?(d74xBdPf^&ooDAF zI>KN%J8#szXvN>4J^WmdlQ`y~AwfQe29@Umnkasj6YK~WMyGOKFRb(ilp)h7V4Gzw zBk_z%$?? z9oXNQG9C_C#K-Wb%E_qvF7c#a&9lKmYy8@~-+h+1!8p(Q)fj$h9s`4)CZe}s*-6VKF*L=P|lLQoYo`58YtT862pHV+x{ ztvPh7It#zgTSR25;$<&GIKKrr$f^Fbv zE1un>Y-uLu&s{0!{~__8XYMV6v<{csQGoZk>kYre+a7&-PbZFNK{890=wW<aY-L6->k9D9*Y$2W!_?AM^gQR^_Q>oQ*y&U{XBG_lHY(CKjf9p` zI~V(9``&+I%9UFSzRrBwjk0+j1H$kd(8^QrdgacgyX8m!(+|owj^0mQaAfQ78tpH- zsFT2?VhAV77AI**w@i(qE?VZ77Q=P6+y^E13If(TBoEL>rvN)Tyj zbxkff!0d_wHrFe5Z2;A;4U!JMWecfASiggOAFJi*Y#akEyw=cBSH5>46fV zWLnTP>6ucrXlP8@s#UQSB~fuzz|!DH5G!cKOd)ZPIb6S>Y;N(2LXHK)A;4-$vXPLg z{@IlwjE%^r7;`H{q1VWsUphg3{^2)lBDwvhR6Y(vv4*PG#^7U$$1n5Ud*oN_gU zcvZ#O^i0lG*pgIyQr-kq2~KZ7dg3p7%e#JjH|I6?>;=GgRjnwGp%rg3DE!65Qwr=o0 zp);py6AVdCJ=q-z7Bu+MG=xTqYdN2OaEC&sgR#NR89f@4&3;+?%6jRpP={!6=ynEI zg}zx$+R{J)o)>TYfkVx+p~3~Glq-B`6yC`(my->A^a+{q(j`r>%qvTQcA-TZD zf4_GIrHi`bYJEC5o!Mpb{jgeuk6A^)V%W2YK2K&`rwnFm=QFHcP>iddQR$RgY}#NY zf2RnW42W*)!rOdzcMa)Uho=211mDS8=#N+Gh;kda4J?9$D1pz*!Gl?O|NC#0T?{-s z7+Wdp{+6kjE)^9>uy& zT^P`|Y6L>^N}&+iJVI89zeLEK&zK%_JpKT3I?A@iqPla;?t-?%XDKZX#UbGti%YlP z#lXM_kfW-Kw-Gq6pv*e$V5&9O44xExQgdXc$9(A=E<*(zvq$c|kA7CVoclgroXr%W zLiyRzi$Jzl4V)z?XrP=<8$_aZAUiOPM{-Z+AJDFmBj7I>1)NVV(OF@~6pRF_`ch8* zGS6Cy#W{cl?q%tbUR&0!470qJK?p@`E}(#mPZLI##z&Xv{Qj7B_Dc4t?{vQ*qfwa8 z5l;C-NCSUP-EWlHQw8VgK(-zO=Gd%a`dg(}J2;}*gdvWxxT&-B=}D^qI1KR7D_HRE zT`hZCGywE6zxGd7%h|27W#0|36_Zv_Kyu1z+2TmqE<+>xv=;7_M|Fv1N%jnb`YSiW zOjQu&LuIZSsQIn{gQ1(xc{Uy{zcQl&C9Vl&W17ag_11FAa}zJ2o1d`0-x8+@fBM#d zG=8k0+%v35t(&Q=WZM#QhoDlg_@v4aBbyafX{QoO3q3yAMM-!Q!G4DQ2;V|r&dZ&5 zeo%h#=RZV2gq8@Q^dFHS>BVckBd?Jg;)6hKUABti1@Gn6KE+RIVA9eucLGixQobA& z+N&FLGkB=VR0Rw7)>*bQ^63%9wInEH=0bH{&_r)N3*T(;QE&y$Ib7;xRklf|C}OoC zIw?t^6UeeV$wuBo=QKE`CrEPKl(Fy0!187Z@|W*G4=mvt%+zeY5wOd$alWwdU{b9P z%!BO1pS#=dv3Ku}$2Y4GSwI)mWs3)Aww ze@#WRuCYh*fV$KdHh@%06A>; zu=255?!`hbqn?6rm&G+J_n884c)%X0PSHW8>@hTm)n8>9H90)$Hhgp=upC1T<{3yA z$uYNMNe5larLxPNM9f#cNSD>qT4=lMliEiH_L&FLWlDoP7R<4l&)uPg5Duqf&&e~z zR{ikyn{X|^>JqwnuD6<8`yIb!*hhjjFUB`4cgx`u!q(bQKcA#+v^IVN?y;L+D{UIA zcnN0w=pV}$bxdB&2bBtFCjBI>Jg3r^PH^Oi+-Lro1NvZEKKNVM1cTcdhtjEA&wcw| z+4?32#B8yf1&il0m1NGAhJ>#N-LQG09XqO^L+z`a)-h&&s5_aUel^(3XjPexGRK?w zh!bc3M8k%NI6a5eN#7{|nRF`SBXn~xkbH`~m0Qf0{E*Ir4VL*4jw}M)N_ynE7SkQ} zPG?j^1C6OTecZlKrT`K4#4RzaUN!`^8ZgxcI7}-zLp|6anAOE8wq4rXGzIvD&QQsH zvz2vJ6PzEEnJTh&h?S!EfCi1>{zdOO{Ju^&tVR|ZJm7KaD+g=k%ma>x_s{_xyF{|E zOhXbDaTByan{<41%Q5T`DCOL#!>+4v#Ad#BCw$TGGRlEG8_%voDyE<@;*rBvs2feP zgr+RWa`iywkd7?rG04Mm7kQ~{pm-U{J7QN0=|6MM6tW`iqBM~=%qP#O1M(nclMWW} zQ!ZvR-2bq#3QVQNMd#!W&vl z9AQ;?ReUUDT6u=}tum-^l9fKrO9T{%UkyMFurlit7e6Xo`wEB4xIznW;;*pq}D8{X{tgvcsPp2vpmLXD+ z3(SdcqDJ<|n~DR1k%qeu9kC%mE0kG32USh<(%#b2Q#gt_H8Ul@M0Q67dj1vy*2_M^ z&QLujf*D&_0mZW}&!;`Ack>IrNvj5k1y!GlZsInN2_NC6hqx1^hC7|0yyIuTgQO0$ zEladiroX_<4}Z!xtd2yR99#nTpE2Tal}ISF(5d5e3aoR(Sa3MW3s}Y%Q)%G*$AKn<#0;?E^hM&aI11;8$jv1=unLUYY42GV# zc9RC4Ud(8nt-Js|z~W+O(e8q6by^TJ?z1kBHhgy8EMLk3nC;c_P3`DeLcp>1tEGBH z!KRUA#KmKC-Qa$R&B*q?kK%86%0>=}=5UiFNx?+C7Nk8sz zGSEcs33)Dj#0tvhyFhXL)x(liX0TeLq;7H6`nkPXImfWhRL$oBvWDqRBUX2L=!xsN z+!eMxAKlma6LTgKal&iC2Mp?~hZ0WL)E}e0w%uqHe4Vho5 zIoSD>%ttq#B(|(74Bv3^v@ZH$9cn`w*1!g+eAvVY4C4VAXML`*^6HQAKE<^b=HxBO z0Zc~vjILF}gC0m&wm!=IfLYvw_r_B3KRuw+~(k5+F=!rLBm0=cbSgXnW zz=p>2Pn{#pk*0m7yIIfH*`IJ_gg=ZQ>%Bt)oG|6W%j6S2>@)P;XM|y_Hg(GRMioO* z?z3wFGMZ@+^2mS%wi9}pGvC9Ue1~Jz(k)XOlnx_4BNoQZ2|FOo0jC1?(5NTUKuamOY5R@?c}H1C zbB%`g1JimX516(I3nFRx?hBU##>Um&J)~~0vWj?y6}&6G92#rs z#nb26{YII!&~XvAF|)us+|xk9$?4E4I`ETeP{2K7wbrI4Aq%z5?LdG0-?u>p~!q- zG+9i3DzPZ5;MgF_EyIB#;ql8v$|mtjUH{?DBQh9Ij>7(z7j4USEjSVr-QW@hM` zvQIi=B;7WdldAHw8l5b7Lnr_R1cj?02ot)DOd^ zikcD4q8$T%P(0v7qyTj%q>KlwjB&}g|Z?Sf3)6kUaqD?J?;uQRO zNI8X{K>+2ae)E@CwIq4VXMV^55yS0)^U=@WD`WQUW@DM`fPyYpe*a&5xs(^+6}2^$#Z2&M{#aP$x?(#gOA`%i+4x9oKm16BlHDal7|f9 zRAu1_-BtK4A8A#~hG+PS31zAGPJz(hANh2^@R1AwR&zc^Qb_^0lBhX?7jbP={lP1-IvfMD%B+pZ5;F-X`r%ZdlmbGk!t zgpBC`v(OQMTq@(Af0wHJxy^=U&E=5)G%NII1K6BgKK<;@l5U+<$H)q23g5<+zko}H zfDt+SxDGkN0x;@G1qtm%1+Flapxon{Gt7fEZg7j^1YjJMS%tyOA&DkAt6bX{$ZaaG z;W+|SD`Vxs%FLhy_=K0sbqav`R9|^h#92|KNt@0|5aV%0YIEZ+>ELU41>zGTokU+g z8Q4BRNPZ0o_HUMoE zs#+0xDqf<~z?QmT5%?Ch3Ykr7o!WqZ1QGFp;dk>cFH!6vIT3@S@Y?5=0P(}WeiLh- zNnelVqx{kKxWz!VPH@?{ts+h2|!{i$Nv^^M|vM7djne@a< zW!QLxl_7Dy+CbcR`&QYxcD+2!P&Ws{5B0#=CS1x7l zK`d|C1`ysPQrshDjjcCHZpP0Co-=Gq`!=kOVJ zzhI{gjRgl_b;PhV-*nQ~DR_M}{aVXa;CLcQI0Jeq2|+aFhUcj|Xt@}_TCx2mMD92r zt+#SS_2R{Rl5evk9jsL`@?_xR2iOMC%g+)5eyAni>Jz8 z$^e;T=fIJ`6a`6`X2>s%g8)-!s6=w?0$Ir{v$DxFpbHF`*r8c{NPEHF!*08>aHk9M z=k{ur#}sC8Iid*DxpuMQJcbn_S`MTW`P`IE+7OsB)4IedcuAQ&aR2-|Y4G`U7Bcj| zdE-WT`Q?|(jq5kcXl12*@4MeEzyAk+K=18W&zg)AB?8cbU;fHe`qTgkqm;2Cd&w+T zj_W_WiUsLX*>^e{{LyFVk6l>O`&Bclp$*wUmVc6via}*u)2Yosf>ma&k6}0ETV=e; zeC=z6T2ZX=^QD0=vkJfQYv9#e^*i}e;a0qA^u{N_g<($IdT2(ka-3-s%-ciau-ORt zQ0Rhz0J++@%Xd8T48loMoDe8X1*Bru-20oMlq%^mO~X~%Q?^90S3hQ0N()B-2*k^T zl0Wl#@+vGp-~VX4%>MkRoSQ&e2zW-`d_ITaS$q3Q!yz{C)WjWim zk+#`47nlY#*`#KomT_!AivqDzdRRyJq7YKaRnHY}>xt3mfE6~+NLf3=? zzF`vAIHs3dLMKKIfF*671w_Y_E9C&bq<>JYb$8%T1Y%Yhd%O^eYGKy~cDIH0m?Y4K zCXD4Tm>*zX8ly*uk?q_Nl1Y@1HEn1?CbiT?sYS@!Nn!OCqZPD32j|L)qY`XaH=?0D zgct;+u}5hj9vD;)eADrR0Lt)e&qiUmFYy2^LZvX=jArQETa61*Y649dFc#_hHzvKe ze)Mh`{OIlSlHpJ=IIO9xsLXPAL%74Io-2!g{4dM>Fa2S;J$eQM`%zi@(yj8s=HHZy z485*VxoyaUBTQo%fSK3^-{ie{*I!ySUu%960EH`MOD^U6n(+W|QB`67ZRxp71oW2> zPC1}M(dnqvTFRs;Jt9M-Gs+SQlRH8-s6ngy7sxfxBlMos||PcO#Y=u>ze2Io7Z5*_v+Dx z`q;g8Bt-|FNnP^^mkLCD`R_@NK+MEIIfaK9Ztt*V&FDi656oY3_lG%5<>=eZOSens zf4Nt7&LQVuV|PtrThJ(~YN<0iAXk6ENCb6B3#f@Z?PZ|O2z)F593{98lS4FdrHxK?-#9H32R3=r* z$4fNDBJzl5anm{dpl2trajo&h*S2WA3or7m$+sZn_j#uE0f#9U0}cUkPH}WrzCUp8 z>pmJS1v8;{JGHDEJ~BmFAjkDm5n6>>dI{Uy9K+Y?6o{%k4RM^$t5K|vV9C5$VE1Sb zdSeP#;sM`L2=Se;1zG0Qs%9|aY6(~m?dU`=Fp*@A(8*AKLK*8)r5$17L*V*3VSTKY zUY>*#J}_N?LlaL?>#?KCh_wkTjFhbJvQ9(VG{J@1!ZS*%=LasxXx-1@Dxp^`tBOZr zer|t$b&c=;XIVYM;`7o=FO@(2(?4aD^j7(czxa!C_T1U>jc@`*4UAJ>75@sl@#dus$D{BSR zJp|_p+L6Z#I$Y(DojOb^5S36Ijpn_PGl?(24Ac8Hf&>*6p+3b-z$Q&x2nt%z5wJC| z7=#=2<`-cShNn5(t2)VmR>&oV|Jc6_<%BF^q6UC>42=8*^qnf^Bj`exv~n5O7=N6%Pvz55AGMmN4m=6~p#~ z`6L{1B!t)!R5*Uf>+;92x|&*jUj7s&G5(V*E5 zYPE0?Ql<#l2H4Hl48?SV4ocL5R(q~F1p3vL@#0_Mg;Q-P9m2CL8a#bSS%?d?u~VbT zaLPQ-+0Q?sQ#UP#OmdwaVR65LA|^gd+$;ZU2{f8#vHMq#j8-irAha8huBRiZ(Ascx zXi!o{nT#wjF5*`LxsbER)D#v@Jv>*QWAR!a#a=_JmMh_)K9-05QMtPLT>06Bua~Rq zFOg;DyPp}A-)8Ha^AO8}5v&e<5KF@b4xVJEGdV9CH*>%v?>vK4@{#~}QvNAt1BiFx zNhjk$d*>pv4{?{(?x>N_O(EhOKLNJz8|J}F`mWH(cH!wEQ<>aKXr`j?igA#27DyDShf+wb|^N(i0BIe8Gb##L&FSLMSX-F!>F zMSy5YE4NzS1`%A%Xxu%fVa7baXv+GR4mdQ_BY^4$3H&2$eNrkY3~^P$X;7ocVOi*%~kX|>Gn&6)bdXVR`*Bm!I!1l7m*Rh}Tj zWd4Thc&K%Nyf3KhD#q@wIs{V3xo?E)!NalQVTyIjIAy9ht}_2wC35HOz4GCm|5R8f zRak3S+p`a`PSSSeDE3--CPf}R3 zK*iCAf)%=KbFH#;k^?JN?xDyZu&|Y~aOa{9#L98RsT?u~ojc`%8!a1OIR-w;_FTzu zt!HN43S};xZl-JLm%1X#5#WgwVp-&RNfsAHBW>^}9pplv9T426aqq!ix&0HSUX`27 zA4bN$1^Vz0{U#!*bQ3=wiQs5B)IrImOxN99-ksytfX?e9#ldh zd7XBCa#(kTVV5%p=NX3Cvzn1#hhB-M5(u&msbUzbWF!)gxRYOfgp*Tlu-pxI&NC_B zNlFM~tOHX_C+68pCROpWvMLn3qBxz(kB@mx5~t{CJSzA|OVc6qu4sT%u&nF%UfwP@ z-+hI-ipVq)`T9R&82-#EbFlWY&?$seq*S6R4wd34;wp3INn+@{H!BXM)8B;;9YxSDl=~O?l9H@{~`9=3jl3{hB>3SB1cZTPm|2CmY3=mNnRtw6J|PYv#^(xRUfyoJo(Oj|`49w&$b? z1IDXyj4Yxkbi}bE(Kr7jyvD+qAv8I_s_#*_!H-I7yhD_Z`~59u2w@3@4iATGG!!&| zfXXm7JXxEhn&%9^6HgN7;#o+-@;y*N+~ zY=?r>)2kwU=pr80H>cs$p+?in6acd??&K|&EeI|cdzoR6Cca*ALDGDpGyub+OC4HG zZqhni*L)NICU4v=m$s||pLn*T_$Ix|o$|NwxB{a-8a{Ejf0C=QYCJNZ_$nsp$iiz@ z;LyS!oH$p!W$*@io92m+LF0z3N?$)-FHda`%0;%t%8GiFw;@Bc*x`Y|CY7I-L24=bL7?{j$h*g3~h%)o=dwJy|j!=8M8=WnsSzjshJ zkJv$iG$xl(9!*Og58f7n`KHd+sLd}lCC~DhN*@98i_{IyDo2)~Q-SOkW!NT-Ig0S*pTEzviVw>ECY=`eR~>o&A$bSB6rM2hXzj14z+2F@L*wsW z!Yiyn*ywIyC>bGN?x&+{67q#rCjumNYlLotg21vyfNv>l?*`{b*7jMHy+=5E$ixn< zZ0`)|vi0Moo$|r|QLWSK)caEzAWp$b0CDjWrpY5Lu#C%I+i_u~?Qib&$Meu-R# zVPt$HNqv`6_RN;9Mz87eEC}ZwAEV_A*#cX`NIIwH+6HC|QQ$fMZJ8NL|9I0D4*#3KQ#w*;f_| z2m;tbRuNICN)hv3U0Wv28{y=iN}ZYjML@d07x5Q#1Wpqx{pVslm`tGJ5H9E(|2oJ%KpMFpKY+A5ijzorp@5!^D%xs2vp z)&t`tF0FkGulbDgRxk6>K39CiE9F6gM)NuO$NTiXBE&EvN=1e*_nDjLKAOy1?r{*y z)cF*FQ1M8IQy&z%SeYa}Ff)X0LOydhp9!1ts{Ycg!m985CVcz=qC#kWQ%MtRVHjQI zO#WB4g--Z|9){tw`3YTlkfu%*iE=G?zj2RCB;zC&UX@mU(?|cx6W;MqN!i<@&pTkY z3fdNaQK~$+hO*s9PEFW$sV>@Wwi9i7M&^56n75Blh#87VV@2YDT$s9GA31zIQvc!sz7BdmZS6iTiZLGzJ{L5P-! zRJwFZC};N@o?ua9y|h4PapQ?CW? zT**pR>yN2RD$*k_)&coIuFf9d+-;sT!Fsd9uQ;s zD)~z)q=Tn?IB|HMxyNO1x9l>Rdjal;9E-R?xbUG!HBLCEpyq{Qsg8%rr@Ru*dC-oA zI0Bl*y!bf+kw~Q3rR-+VWxB`6665W=?n_OcZOgKlm$>4X&RVU|l^c*RW31wfw@HS% z=dPR5Xws)FRGS!prT_py07*naRBET>N$IE@N>7b+?7|p%`w}O%UEiimAQXmz#bwHm zI5i8FJ?Lq<%_YLT>v)X76n}7P+pt9BTXMzS`fEMQDTZ$|-GxSImo{?3)??dOSyam? z!a34grKs2mG?sq(F;k+bl2PW!JgY2sJY~)_n0ml+Sy16OFC}>+$TA#< zZ|k39Rjo{*l!}n}!ZL0RCp*bsUbT}ZMF=54{sRW6iMEt2S>Z=t__=HU*u5g0T zDZt9vIuc;Kd?75$LfG;Rcdvhyr(v5`JcvIapIp z8RO_lEgI(4bloKf6`#vZRIqTM__+6|XSWA5D`3kdg*b1k9frb?j28*P5t$j*k*4N% ziAR00q4Cc*1+Bp>UR})z9yL<+YsyC7*6C%5r@RfDkG|JO6%b(zIsL=-(dP_hyGk1V z=t_%pxco%9z{f7~nt{8#tCF4B9nd#cXXl4mFK9$!y(LS|k z!pK(>SA+|fmIE*NPJDT8a2HUNSm6Lj9Q>5L5MLTO963YtGEPg!q^Z(HQXXp3A5d^S zPY9Pa5#&vUQHp5kU3khH@!ijO$XvM`l?y+(a3>un${%itCCKgOl9qhIRpkMnMXYAl zhsM>g$(-MbsEBBX78A!j;pY{ELI}!&;b|C@hLudJaS(9|&MJ`(QQP(?_o7IFymH7t z75l1wlD1?s95}nBl8S~49aC4#ymh65mUwx#tdm{wq3#Y*;2;C}6nBO+!68Gygb#=o z@1#mv!J_6#qU0~->bE9sTJy>qmhOk&d?!j9?=hSw}h||!swL-X4T^74QfII^7qcmm&@dBcmz^P64rZ_ zvna3|SlZXn!Vj1x=NjKyGo3y`JVyrv0<10#c%LaqN2KE#3dtgWJ2yNHPq>G$pK}Kn ze2$$32y?&i(hIp1$ba@{e^y?3<<;^}|M-tSW5y_WnI=NO@|Od2?Y((3h(UEc_!WL^ zTmz%Aa%sQQr&e&P9o&<~Ib#oP9Pf$*nU+*fSKRp4aDhVwu)fFTLEqC(e7q|5rmH*= zej2cR^OZ2UlH&>!xRE7`mxSYjO*)Vz3*UJ4J)+ju%51Nu&oQ5QSWb+3;R3i z)t9?WEW3kJu!>Sk`YTw))*6Mj;s7pIWaUfn!}>wRHO#7G{A}>OCqbFx=m)+Tmu~e+{{xlmjo@c+lH2`_M{gt0wEu40$9-M6+fBTPm z<>H@QL?XJC6AdK2_mSsfM@Y3IhxEXWV5cNP-M=HVvdIKo<27)-?TIf4F0rs!Tyc&vJikExeltEDz?DhB)*iqN%HE=_r<5 z&1?1KH^SSH@_oz!NiA_}Is_swqMZUGn029bmZkeInqT*otXo|fnkHS%+yn_8{xX`T zmDM#Y`|D+Mgk^S>PLYit@oShG_jD@KyM8A=Y1L<7JKleRIuz>DA3RfPgyHW_v+DYq%>Gr63uD;*c-DpD`0yDsSS z7-CM9PPv(1!M4d(n7k$P^(JjvS5t1@mSGIxm*yUSUz+9WEwLUVSX^A_{Opu(8g^(F;(-zTGv=G4Iy2JW z8LpRGi>Elfii1Jm>$6OadY0|$&Sk446+o#0Ux0gL7k3qhjD2&g@CtLWr)*9>#B$~$ zqb^#{3JUcc%WIeI9F<|I-3$x%CJNb00CkE z0)rV~*6yC(ySnzZ{XD-n^Q*51fTUpfrU7Kt`A#lxzFTI#nI})4Om<#i`+j8RgGK77 zhX+JAJhf%1NGew8KenUPTM_VA%MsK#_5c7`)bBtR4)WkTwCY`#WlGjlWE#yt=uy`5 z>U|aafA(BE>v6EmnEPBI=4vS1t)QdaO~MfqeMjfOigR3g#tgr(X~#Xiv5#_lfvIIZKbHIbSuj8Ez*`Z$Fn!m{8#TvRkZfAJ|_yTr%m4);` z1H%ljA3Xw_7J?q#t$>xy;IiiNMu2|9Q^XulUUfzt{~_yZA951t{dsoApxw-#+i9<_ zo@=Y@4pX&y{6YhPW9RXx_vj`M2$TTwYFB-5GKaD+(Lb*E&dxoMD^LHS{pU&L~^Zm|?3K`&QpCcq};;fn4C=KLx?}6^Sij;nZkJnlt)fiurFvHGd1*1r!g}V`ij5+2Gf=HXI$*!V5;AZ5Bs)Jr#o>K zXN0ce#*?w37!9E?jO~5kwlN+UyTeE4+VwBI-fleid+pwn-wmF^BaIQA%qR3q%)mq!P;(Y-B2;-`0{Ra4U??2gtKoAd zCQtJCd>D|VC1Z*{J5SBDa1LnIrt)YMM+ugEVyizN06ho*fY6u>fG})+WOtZl2t1N8 zd+idC>_2L!j^DxIGJ}UBj_LK`f0n%xg(mJ91ogX4V zQ?Q~N{AEB#yzSEX;Sv^ygBqWf+>VFDS!TM@Sp+|M%oKY1(E%BY55wi}Y6Vb!(JTsg zh~xu@Ln*7X&H+mBRgjcvj=-0AegP`}h%kc*GUuJTpT5Mx;WjXSKM>!9-kC_GHbfdp}kmW-{%rc((%$L^N zJbQXR;mK`=2hF8hRhOqQfE>KQ7bjJB4Jf;$B2AayIy%TFD%Dm9S>C2@D1W{FKYg6f*l7{g?+mADlCYw0@A$WhN;Pk$@7dvv2Ei zJM)Dvx7p{v#+en*=hgqthd*cwpL~bCi|@4+gsCzt!r?_3IL5er$cV=+uh=^BWS92( zfH^$ck9#Rw7J^x>wFVcljnMV-e?pz!Sv%iuUU``#ohbu8NLc1UbMevb_R{wKc9s24 z`E->w3lG*WM$=jas}`93K@I})$j!@A5>(<7%@dj9vnz!}b_<9feAuVV4f8NHo?f*_ z^mrNkrmb0bjU->T-GiQFXRia^SxL~|`}4Qk z4l|@4pm)4>r+wppqU~Ry1F|B7F>DunDBC=GIb?EX_02D~g;&4cZc~1htcA79^TFD(3s{3VYviNSgnTTa+GZHJnP+LTv?B%Yf}#lPU1XZuPj#w>lJ z(VDwMc}1=bW}x?2Q~QJiIgWU3dGXA1?L5me|?ZZ~h2s&|z$8`OH?LHHN(}eB!!21xj=G!2bcU5EX92&B?9qqJY&^hd zP@^=&Ydk$J___wW2Xrw#2oX~Qez~f2XKCHnGsmHVZXxAw>ge>?+gEJ`{?yQ zZa-iCMviS=|M`V>`R04=&8?5=1lcp+j$-DPIdZvEBWw*A)KY=y-eN;+C> z#>b@-`E+;`g~(=DEiKf5Dw1_pOU6i1A}MI(sZL6Nm48sdO9qC4>Gh)1h@l*n6*%Sh zk`-^Uj*Lj%0YIF`yA0hJpwDxn9n(e_QD)>g#mIr}9H$96Q}u+6`eG+TP4`fJ7^9xso6CWG5Ic=oc=j<|#NlPdW3?^4ju{ zf$EcYXp20EI;ik;)W7=yNB1tUPcP4B;@`Vd9eI_X7^QHExilc%(o=rJhdw#sZkEbs z*6uZh$mqjF;iiBpM({Y7#F&~IfPvJXwp9u#pkMJD%fqPQ2@h`!-yuaU^Fc_Op)2ju zyIU~1N&PMZoy|)xwGUqZYWu<2&#^Tc8~1Y{%G$$s+w+GW2aFE8{v(4%8(D6@x79ZO z=N~j)_(Y#R1g>ct8Q<31C)UA|(TA0Yiy*ZHT9ua~_`SlyOP_6L|H(gRrtl&k*DkOe za_pPxJd-w(*BK&zTlOCk(uEXat={3kg|CTFkihbg0I+h@VbL(zWrywF^hbG$MwvEe|b!wQ$ z>hp+jP$>@6Wsqx`vU>P24>2@?6>%a6Pq&MpAYr*>`o!VB$v z%I~eSZ@?Q5sC*Q>_~7Gqb@x_VV}zRTA)uq?ogsAzlwJUp8whz>{TWo3yV@-aImMoRdx0 z8Tdbk;#~8W4@06kpr1|m%nxQ?dhtc-Ewe@}_P+GRFScvfueD2;DbT;KOAWG6htVwq zOI_*}j4Guc5UZhnuSqq?>qJ`@k&ZY>bS4ZRSI3zU5pkwfy1{|VMjf0+^!TDz{3J3z z#cMSQ^P4U$tMG)Y0v|X{r^RIBIjlZ)|i*dH~kwNq+yW#V9XD77RbEHr=aWG z$PHfSH2gT@$PK8OQFxjU_>)K1A!+Bx?+yrZ%ljGLU*gk9F`MD5^kp{qUtuQ0{XvJp zb5csSK@)w+Ym92C3O^naa|192FvL25w7S;E0Lhnh?)kWK@338TMj3kBXI9&T;}_ez zYoBf3I`>7MXiwVJ2M^kt%U4(l!CVc6s(<67{_8pl29L?nv4#xDWxnFS&)vneVt zB>A!9W><;%Esok`kLCyOJ!pUT|4^3OxAQPz|FrMyGIvkLwD??N);^?TW-KtzqrQ8> zcH*eN%K{VDWqHw%D{BgdnEc5@()b}=KzVdv;43y~s{HFUL`VUXW?i%VENf}R$tZFf zoP(djP8fW464sL>cJNdpp`=TCj^<>Y+TtOnIx)*Zjo@Jg`pkyRG0=C$#xtMIc16$gz*h{VZ*<56TULp8k-@6@IX+vGiVE4$_?5_w7VfkaCc^uG39Gc zGk00lpRNWiCX|cLgz>?Y`pcn4`6_yma(KOGt>3m2Jv>o6=IloXte3 z!DyHJsZ2eP<5d||dH{y=v(k4Emk#k4Xu=f$`)ulamsiO@TYss2_u}W;3Ma~4J@Z!k zJSS3Np+pd>sk_n!kB>uh43gaT%LhO8$Et>>`8N!#msU-ebOS-@4e&acbYW)@p0*Li=#$QhT&?iFQ5T)(^MawG%1^__c4Yn-xLI zYv2-}MAWN(eyy*0VP6r66)3IbsknfLpAHoKgXc+Hh=P|{f)#YL#sl~~GHx9+aNA@S zf|*8EZSc^I4N3c_1gL)}tnuF?e4FjJ{_fmM?b~d{=WP3hb1$}6*~R1pd!FsHCT&KF zyYb-)Cn};F@K&;sMJ)-d=sK{q^O~v|B6BwbvMBzQ$n{ukt`}$-co7 zcBw=33@Y0aeswdCz46VK-xv6uiMs$P_mEwCbLxa7jdVPhE_Y2-9(x)}c6$mFeP^oABHB}H-PFJW%U z7YxBtvYH$NX?nnd;eRr9be$O|K9M#Y}pjf~-uKJjZ)|Xu)h>U021->>u&#Rm@ zI(1&Rfoq+q=L2T!p1AvX$0hG67dp3eR_J7rQLG!7%ZVTG9CI?3WnA286zxRNPk+Rh zSL={{&lr$6;8a(>T(--0T{S2X#|^&o=%Fdahe3=^#qKM1V&pBAijD=m{^`0Fq83ZW zGQuLa!yj^tFb01Y1FW8QZ}5=v79B7Hd)G)RBPU0uhJDv(eHeJIr3 zI5G=GerH{+59W6ru%}y@&unSK$o24($L*sJZ?zX06wDm)aRtg;{Vdz!a9r~drzmBI z5_G{5;#^Wzdhg;ebN| zRo6gEMYjD#7m^{r>uDt!^JN_Q%qB;r`Kn_gNu44OBS2n3ur~JaVw-z(*w(l1aS9S~ zyw>z2fH@vY*J%qLVGKstVeqiW(h_+^&M|DsTN7CqDhx=ARxbaYad}I12v_JF`j)Th zRRRL&j}(E8W|8xkIb%JJcyska`+z~o77xAl?MvrB(>}MvdO;sJfjQM^VTmd&1nUvF zv%Q&ANyva7u)M9ITznACAt6cEj`491gW6qQ?fMYD%Ro@*sm3RIP8^dtIpTgT67oZOCEJ?Tcq%;y4EtwBDTb~ zWxeAvE_9K@rBac_NK*VWr==5}CtjSSGD=K+AP_9F9C%U3x`B(e<)kX(GK0l^zaXX$ zvpref%6#O`JG@o$C~E8JA#pBR+nZZu?eRHm!67r*%Y3wDf5ux0>jeD!3Vz9vDz(Q0 z3c`aQW;%e3E#VU~)hY;lAJEYEdAQh{=QKgqQg4#BwXo85`Tk>()5GMi&9DZYC0Pe& zkZFbX2uvnu9|?V2|3_ig4ZY22(Rh((&2>`cpri)#( z*Ks64Sb<6NrVr1kU_FXd6DB|92aOmLJ8&dSiwO+@^aE31v6CZUl(c%1Xvh`|(m6Ec zl-J_E8oApSRnr25#-$!KU=AM4rET+-NOUM~{^#OHlm>8i{0=lcKHM2imV?D8`HJ4D zm*^^%PGcrcbVJ9`Q3h2w6t~bFuk_42!lD>T6+U6^DJydl5re6f#wm+9l-5(pCLd0S z2j?x`3B8dZO*=}u{M>6V)xugl1pz;yk$|ZK!U!xic{AuT=x7J@rSU3H=PZ>kgFj)( zUnOH1kcZ2UI$Uq8UW~9#Wmy0NtpzqA-(v>-{cqoF2k$UAzyK<`TL#fr(g{-@Ov!0L z53zs_trzIbXXs2^8sicK>lUP;A)QVXF6^|4fTD5o-CbbJP;r*Qkb2}cO}}}9vu74I zUhfhW27DQ;+Cy|12hGp`cHXa=(SfsXRw?U`8i|fNXNPPqKM#RB@84}d{^3vBxySFe zs}A&eu=>(J=YfG)jQJJz=;X^C_4J6o;AD-%7q(vjH6QhG4D$uBE@zIAPL_uQKm3{B zU*)Ug-L|j(`1r@ur-rUFXo|2(i&LkOqst%t5g&QI3s)sM^gu*h>Avb+-~cerp{w~- z@_=zy2fiI@H~#9~w)Z}hTC65Pq;_!acL_@)$~{CBn!lXAN<9cR&WyM!->PLVPCu}c_^4C4Fa9?x?rLhPngm>bl?TNd#l`^XFcnC#AD3*-`t^TW__?_rBS-SeLUz-1@6*)bmfDZ--|$ zGt>I;!@c&Sf5jGC8+RG#I)G+ui4FFMZt+`YTJu>ZS{7)G;RCrdgC5>(+YWhIKEZ(a z5i`v97SB<7M;r!2^X8)KOr3Kbv~OQl_LtilCompT?^oPD$n$|czuJ1y^(^IQ(ILfe zof=5pp;Atl=xO6A<7HYZnU&QmrJt5Wpyv%D{N9Iu5U_Lq6>b=XWEn67f|hU^z42i{ zTElg^BPfqH!cRHz=gFCP<+3FP3w~+VipS2yH2P2BNl>P205rDX?J!2$tYa9!8~Y$F zE(eJr^eKEX3_Z@}3C?!eW#x4*2<7?6Ct{yQV>v*BSDrI~Ay0G@o@893B|tB$M1`@E zx6{f^B&Nry0SpIvQG2j~lV`dv4WEXJ@I10)0vdm5P$YmUCvkPxE58_s?uxS!D#E9o zy1a7rKbbNlzTl*16R#amb?4HCC(;XVH`d`?v##!~1?CYqc>Gr_vP9UMhj}=-TcD%z zPz8^9bpVsC*c{L>OSr&nhue|4Z|IZ$v85kX*f|7AIOx(DC*ItO55pBJ+47x+O_Wby zQ+}qDOv#7No#hj|uJnZmFg28LIvF6$FQlDYa(K5qyx9RHM|5KOIv~lFbYQu=Tf+>a zj9F$OS2vlLf3(gl6noY3_HuQLE#v42+_uXThfes?eD_s4pQW$2`+IM)H}iwG@X_~K zs`7x>pN~OD`S5{cdrXIMXO*wmnYHI6wzWN8f}`89bRe%bQ(wUevs2Q-rB1%P3$GO? zziAG#Zv3X-Qe*khN42dodg!_EZ< zeAjQu9>4HH`yy(;KqXhKkxz8Pkv&eC;4o(HWwsKeh8v)x;K#B^`rQu~-!<`0(H`C;cFJ8Mwqp^<^M z`N64bMD0Drneq;oMThvpuSXamPwiqNr+>(=<%q<=H4>o(0SArYpP5W&E7fzJuVl)B zs)ZtXm~x%Jm|`MCW1T0)0jFD!d1>2~+ktV)8<^Ay;Hp-Lz`WpQrq{vnG1tJWIO&?e z;RF5*5BJU%FS3XF{)b!bc*Hje2Oof&Hpm7!Xx&g*~1Ui+&1~YLqDgcE| zGZg?t(}vPUl(?xp1yzlvTA(o^mX9E*o6H42IG>^`JT9P8wkqrN7q1CUXxsD!=GU2q zZplQcS(1}D8jFN_2x#diTaq)2@FeF)P2y!&kQxw5osevNn%^#$h}2mcqye1v$o)v? z_+r}Ac4D|_bSE_8S!X4~2Q!`E%^s)f#fDA1GoX@`hq#1^i^7bRnMrDaNI$;*18fF3 z#0n{^%C4FuZ%3}-qIa(hW+tubOGQolD@GQIia3YUAJ|Exz`K74i01CbqRW~2flHuGAS=<<~X;=Y=+87;HUWsQ&D&L41ifv+E# zU2SZwG|!amJe_@8y3*$U;H&N4&VL1-FSjSRf7>$mL7mz3l;pP_WbDsSk(`0h8o za^Q)h9EtEFkYzT>pJDfoGrXdor*a?o`Wtyoch1LkdE%aM%7DmPAnJ0%&mEe&khRkF zN3TTY$CQ%bH2-O;61slXI;pL#E#*iT7`s4qJayooXW{-nTd3V-3#7MLN4mB69PRVC zojJ=|cSf;1e*8z>qz#6l(o)*{l*05HH{^@X(Me9(@~*OwUGYVuMu@F@C3QZC7k-4y zFakZ!+k{Ty3fpO}N}qFJgASZI-op9 zc50h4D@~p(6*CR+W9r5pTbFI|O8zmUgiVfpb|9-QqG&+EolEXK&>;Mc0un}$5aRCN zP)_I=20#>easi{O+R@_^2M{{5&UG<>r-4dK9>^j72n~!x4j#%Gb zZ&xQ*(irI!-3A z6{Js_+c(=~%6y)DikQ7}nQe6->#VCLd5*eIbH!%UhIt^@ZxfV9UEU603*99slQZPY z`bXvKYAeWR^Y^!d*H!2#46~UP`EI`(#P$kk1()g$Y26_$9YhAFT)L&_7Vg!;x z933eQEZKk^6%20=`4nl>5l1%;pMugDO=zY$8UD1ZS{cv@FQ+xt_@v2k(kpE9v?C-D9!6#u-PJ3blGER`d67#l1}(9ss7ByT^bRHcL`K#q%{=k~C&@2A7#8UC zzQ6N=o`65qu{i6>Z^spy62lGHX<-B#F6o40kcH=pu7gl0J!%Kuq-_)~b)+K=s7U3# zDi0n5r*7n{_z0QAU?fpp__;*!;lPVzjJBQSECyH0Di_C9QvKYXV>|Kw5V@hw$beONP} z4xZJwnjgAQg|${Q3=yxxuU;Ypy5L^*LVfdZApfO5yc1U?ZH(n@C|>eVz7EjSU9$|r z9W21>>rA$}tq3IC$2HW}7Q1W?%W^}F)m z)ds_7I^CqBx04O(B#LxvDo#mzGW(bZj#t_iZxLLr%nn$MF?zY+=>DnOc)&DjfKDYx zA96nQUTIy&DFbqOH@^tDhNKgG#&M}h|Affhd;{3n9uPvk4BaFPaXRrxXr!k+sW7hh zonw%-z(8t_j}#Ypd$Pcw)>%T+Y=wvBvvOsihYcVsFX2Zo&ZyV`qUF)q%Xx6jv-DwkjHav4ST+zvC&INK(efmY955w=q&Adb99=sSla8$iTmre-KD!abWmza7j{ZmEa8 z!6jgX@gr^&^rz!#9MoJYgN?Kr>S&k)PtQX7z*+QcfFrG^^f0j6o?L&4*uc;VvH$5bx2nG89^%^Dg+HQDNgMULH@W zN*$N90n=rVNt0MNhzO<;$RD#-;>hdvF0eGihxhoaOePN_oxX4dTVV3@w3EJ;k^I&t zoHFQj_&KL#!dh-)UboJ@z!$5}wTFCg;Ba;IaI>9xaHGA(m&R-lp1cnJ-B4W|Vp3cA z@B~@X$b|~ zLMt_yGi<1;aztb{E1`;vjuP(pjE+~j_($GggQ{^{+3z(2Gb5CgyIvg(L>7RnF2JLF z0pP&jA+4|Gp3n*Tkw}irq~1I1O%#G)MYnzv{98I%5hd z@sp5g1uI8s6QYMkK15X>iCE_Y2NvlCh6n??z!3>giRtO`Dxc062FwCZo}RDYI*Ni3 z7hthaDF_FdXp6jR%$DrzsRKP9;)+4r3w9uU7IDKS7q9X`xsuPeK{O&&Uc=VgT=J)F zpv^4U<``JXqDS259Pk1l6X2yLC>#Jm6?&vW!!~KInivqL|L_33{D^ZRdYH5}$cedZ zxjwQO!b!_^V-P)@ItTOciam2e#1!kMvy*94WK{ooqsKdWKf;@#4el~f++KgN-CVlJ zI@B|KPj=j1zB1oldGZ{C&~0YE*)wBjuPtuw<-ki|K!*BDz2x!@!o-lRp zt|0Dd3-Z?9=Zi}Z$6&{prJHlS{h@xNK92(4=ELGU%V*jT*yigy7rww+OoZ~v(7$5McEU?hmw5=&V#TDSBbv{ z?l*ccYcX0kQtDKY`ofdCK!TNJxY6*9F?wV%vw!s!Dn2Vv;tFrg3{in-RE5o)Q+V;4 z--bM0p#t#~{i0j^SZNJcz5!M^3c}w(Mf+2Y76^a~UOwnJm|mXrOpV24G8^ z(>y)Lpsh{M;AEoc!Xj8~4EL=6#fUk_a(w1oJM-m#)aG9LY6i6$;*Ae}(vH6M=WXu( zhrDKdn7IVzT)Ec_q+M`i@rfQjHRL%TUK*rnV`VTO(_xuOj`J(@q{F0TkxnrJ>93iL zDo4OIt}>j$GF=qj!HaD8fYWrEJ`@D5bndzI!9zC2v# zh1E8HfdR1~yoSBCdWi$%Y9PFJ!pTrKe%{V3T;@yS)wbe!rQqD-Q{@vL27Emn=ZrgB z!Zl`amiBEgev!?EEJJ?PYW?d)McpvP^if#F)6h{>Jj+jI6|9+~f9Xooj?V}ZO0xhk zpz*Xe=~&;?budTi;28{wmXuMCh3}k%PgBHNGvYu6QO_jGU+OF||0dkv)1fy`Y0B4X z%oZN+e$@81eh7bmjUFGckLVhEj(!%c?J!%&gBU7wu;bu-@Dwzk`YG9n>}_wb*om6Z zg)D6p{7?YNL@3uJrXv^w)8Gm2g0mQ^d?uwfAr+~~UxTc|&F{oXV?w9L#=iEqW6VEN zjPMB#AHOnm!yjI#bG1^GFl|7c#;yqt(z0>*(}tDx)TNBYlT5()*YO^3ch?R#72Afs z@6Qfd?y%@CFB%b$R}HLE6l=*}_=oPSf&*ftdyl|9A#{OCy*CXuGs%F=%Ie#eEF}=0 zbfxgfV|8@MvWs006d-n&THTc6hR$qaj^n+nE~WJl!3LwcGyU-iRqzoh+im zAGV^?6+i|G@Tn}Fk;%Y3ASH{2&?}u=kQJKDynrlXWhAC-1NX!ed5s;imcN&QSO+Mc z=mxUIzckfbh0A~v!vG+&7syuYHRV(M9cM>qIPqE&ZF+DOK2y9ZXTa*GvWP6q)<8tdR*Ggqum&{~hg~Lp*7nGMDgsE@cG>@Gv%3dpIM*v2wr;sCU2$s$XUX6FQ zB*PkE1*Y=YX^xDezC>q>YZ<`oKYJf>)jq)!9=wiqD!eW>WT$=ONqhtnj(;5|iQcywi4; z#4U0jvUbsvhPK&CZfRky?Yh1e#LkMT+tL?^M~~wB@VgNC5HR+IoH+|0S9zs*j(oid zPfA68Krqo)!eX^dPQ@-T;wkeyELAr0S`XC;b=iTtZyNy472c9lA34C6x;|ACjGhVx zsQ(O|O?V}~uoS?w-X_W3GtpOM4%Jr&KM|2^vRPgxGbH2Lg9 zKCHXQ@PrSPj(5nHnqIcIdyD!n`|TW+@KJ(wSN>HB2Ga z&|VI(N=E0#blAyVx}r$?80j5nQb;qperU%cMpG%%swmMQ>GGVJO0)a$3Lo}k$!eT+ zU=pxCkS;!X5N!rK!qlZHmunxaeGtx&8N7SEUD&|F>@tISNZ+xxa;d#G>z<16!(h!m zR2!Zp4%`h#Uhu`q>!}x?p%FvA{29~ZBAc?R*TR=O?M^yb6NPPaYQYH^*Ze-@B**(0 z!M)?Hc7J)DeRFB+v`GiLnPj35JaI(IatiToBJ=I_%k8hPf2sYLog5m=t}c8q(|+=o zf7bqB|Ks*Nhb$}uKI1@?&eM;*q8n#PQQQzw$-+N8A2HaR<&Dogv$o3{yp7?sI^o=! z%ahDT{B|(g3#}Trg=z!l<`0e1TV`H0{!}C5ox!yc zRfQ$CG6Yt1KJC`pLTd_i8K0bb)tHO60aVz~iZuVnEUmUift z;Tp8ZU5>(UkI0DY`I;0ZMnU0;R3H;@3Yt9tj=D1 zer0^%$4=K@Y}fzrzi#)ge1Xl?FSkvG{WsVcev8h-8LWC(vMe=d9K3KXpg5NdSb6>8Jg;}Hi#Tt}!toT5^WjJP?cV?LT{b+Y z!(|+>{F%G$>(Bp>Y=pj)S>Pvmb!+W9)pB%Y7+k3$)R*`TCtf{E=;?ZC$nDhZ`bp&S zCY&DYHT42t>_w8Qyb9N-+d@>9jv?WS>@Xlq8n{KDI_BLOJ7{O`*(8Xo!CMO)S zbHdfnwU5ue!il}SQF-I5?X`3C9ey+l9(M*Q=UpY0eCqRQXIT4LGK42!U9KeEScKG_ zuv=L>Qz;4a1$R6Q?%)}yy>l1Z&gZ|}e)z(2w#nPd&KGa8t@0WRe0XKAJp<1P`~UjE zlw2I~fz%c@_7h}#Z}l2HEVk>*uXE7A^X=TjYwhL7KVuK_)*iT8fMv4|pq!mv0M8%l)h&U)y9x^ofJvN60V(=HtD0~CIlnPUVBElS z3N^t!m_VSCN#k4<0N_m}bs zk-_EQ)B(%r6p9CsV@SdyX#<|N4NkRS^D|b*op@haW`Iiz6^FDns=9P8repl76DUmr zmb~76l^ax&J~C(pbRkrF8#E{Q13SQaVBDtCR!Fx9x|J-`s9GU3OUa4)kp2|+NE}Z6M`=A1?;)Qt#-I~ zuRVXnM(TXH;6V*+RuDqskIpkHBA`RqQmv`|iUJrc5cKu5dmfq+Bwz^7Nwl2EC61K4 zAU!Vd28A~_cgu5vg*c{CvQ6QBwyh)%Hg*wQ=KIfYLnUR+iW`j zoy%WpH+YqImw~_|CS~@h`x&?g?|2jg8JX0*`}q2B;m!_;jj_Zf2KZ$JK;1B}N)o?KTLAD{u$L+6^D7U74Az zm#(+jKl(4)o$Fs~kBL}*<1#yUEU@eYo7FSQ*W_RiGYv)I2P}B}u}#Qtu?F9!g=e!U zhi%3jpLT_1lt-o~i3*;JSK7i?{+Lt0-pJrmdwFN}3|o#}W&pa#;1fH_gotlXb~(Xo z>u|3<<~9EoZ*R8QxnT!*svb)d)Hm=PGO%>OP?VY6g~NK)?|iPi`5wb#F8mge0t{{) zv>J9oBrEc@MJ!#i2Xv5|?-C4IkGYi9qjvK!gbrLr&{(E4%g24{<(TDBcg|gJ8vtKG zpufxKGVp$U_0@Ls%oUbPd5EzPRX#)2A>QLF&GdpxnhoIB!2R;^%CCW7e;*O5aZ|js zgj7iGR>)LJD;a)Y-MI>BRMg}#1<%AN_Ii>!qMzBM+{iUxD!;L&onAJ>G}-|0Qv?EY z+Q%0@GC$?SR<6HTY-Y^Md8l@Qml-rP#Si)lC;;!Gk+5n$k)tAO-bSVfNBRCi;$gSOmeX$H{#DaT|2vPvsFxmGHKFor(yyW`Y8A93xm?sIE-A$itcI@>Pu zx^MIN5ntl(x8uEycK^rUYKK4ii+1sZmC+bQY&dvI<}eJs@Yz|4-UJCu7pSKVKxLE{ z{<$pKUvxvtv34>LolrU|{N}5AQTdhK8A1n^DG#E3%ORmEAN`dtVf==xJ{68hAs1){ z?ok~$cM$&G!g~8TM^ApV_I%s0pWuu5MLI6LxN1AnPniro6%l^nEdyE$mqC{oxe8u= z0O71luY=Bl`se+aPO!5}4ykeS94U)@<-EZ11;0+7+u=l>JsO}3ak(kG-Ck-*ba1Nk zQ(RSkw(HUix44p}bgYiJ2*|N1QLBl#;1VDKDprqA5Wf_RazHk~0&85b8M1M8uB6pN zWjUw9T@C>T8OvRGowAB410rT$+sQ|KaP$GqY>VtTE$aXPKmbWZK~z4S+1Udg1XfrT zp4o5m(b-#8nuzdcgTf7b6?*!&X3L2a7C>cE4s|kS4qXdx;$#p?DEtPoKk*bziqpY# z@{26?N?qX>O?T1N5SknTouERN?w^2+jNFq(!e~2|i0oU}dg%}vwn*Hgtbhv}{0Q6Y zZ0V~?cA|fXWV{Sw>3|_p#^!;_z^Z_@8XMX<2R1xLxJaIJKdY;9$tPXm{lSQSuXk&8HM zt_|M$;GI9?^3jQp#yG2Oj0OY8TKi}{eXoS(_ z@CQHqptBkbxwfjZDXXxSsbAXr%E~@bLnzH9W=M`W9?c^fkN8Mn4@0LRJmj>V%}W?p zdK^E5InU9PD-ZYEKY90W+TQNXwgwW9LbM_HpTnc4P;pSzW56Z+@THz_b<|-I#dsiKIA>g0;oE>NkmvH7Dmu24dnYgNh zHB(gjAAA`qNQc`#`ikFHqLa&_ZAh#mJc_rsMB>pE^~tfRxmnPGUchFS6F>eU&WE%4 zE#mpO5!9A_=pmdm35J3yDUZ2+wToULI3x%H`H-eR(QDBVpHUg`>ETK~gtr-Fu&X|$ zjnih^x`rzo*2_VK=}ZnPB7l#6Y$U@UpwpkHn_HDuP=uEHhd4kk;W)C+cG*U4k>h%Z zae+XQcMbWV=fl8)`~X)*p4ur<9r3Q$^bzBP*Y4JDAIo;JIS)A&_9H%&y2HTn+8I`b zAOZ^wLc`h+J%>?3@KtMbLl$g=mDhCrT;Yd^vOWdpo1n7o)|3usmgM8s*)*zzBZ7b1 z_k+dr>^#Drt;;MUqD^gcJhc-Aw&f=a%(lMtMmt&mXYKC(qqfcId|T`waO>J@%>R>y zjkQST7(lvXgL}x%a8#@{a*Mw5?)oKm>$^nCxprsmWd`(Xun&i*)h)0*T*WQ^5u5((YaTO8fT3 zH+j2sx$QB_yTga2$H?n)S$Aj;O3_YymNg}39rYf7DFvzz;u4=c&)&~(^k8-rocEYS zD_shdW;M#$W(9zTzqr2b`l;C~J_@H$HejCw z!$4=qTX{Q!zyUUK;y38;SUXdRQ$R#yZIx?I@t4t}!*!oR&JlMHLD!t6RRS~Zj2gbqYR(rqJ9I@afe=_ zfafkv2~_SNocN^|Gl{{~*!d*wdaADWbe_^kJamFvYSMD110xpvU64~61zTa636=a7 z2O{y(0BP35$1M5ab?DjwSqHDJ1kIOCk$$jF`|boM>txd(_!{tpTa!9 zwAMD6InkKAXR5Q53YPkXaaD_y&~ z=;+wTl8SbQ&hf(RPP;O@2|p~tBb*92>;gL*95eI7A(<&ZswdyM&>i}IQ$9LR>cDHT zHh57(>LP=3?*ZwZodH~K-Cq&P5ns@mYa-VqgQV1ix{!*c;XucD2R>8wM>YfHom?qr z5tU02f@0FzR7{QJbzW%mlyR*)h$43-g=SIs#oxhq&Cr&xscV#p z(%802=8`>WfTgZkXGZyUJxSqI#`0V5lMFw~mNF7fWIbPpAa3YISxHnW0rEcO%;#X0 zwEC7KK|;oHrCsp)oVy2gD5no{y0KKtqX5*bB_@qRshmRdXN2+cMA&>TL)har_C0p~ z_=v%qyUA?uhC>^(i2dQQkoB58lvx1~!7>!rJZ&)IL>{oJ6GRf_xNCc)BiWK#+QJn5 zNeXa6q+G1aW|%nBl=D)AdwapUrPJ&}zP;hz%X z0hrYYhHzzXtL)KCKxikxx#zPwK0;BJi|y5Z#(wx1d}bfO#fo(`y22@Ta`N(Gf|>0k%(-KDDM1blC>Ra3egI z#@_oW6?rp08URScN@@&H#TUGAV$vzs^gRLMN>9_cLrMHn44B5Dd^s9sFd<02qy;hH#!bni&~;4)D2zI+<@33W}_%B(UUC5tgaAwB}mSpBLjvOgN5(~ZIDJ^t3^T!DX4qf1p$zbphXHM}= zs*P{~ASDE;i`G>h#Bz07HDg9zW~r0DI4kdz!^FwAoHl}#g`P7v2<6`m861KyuUhOdzv!!vQSK8 z)p6;WJ3ZupPFmN6dX%18)~O?hw1!+}QE_3@L|pMT5-bH@(>_Ax{RMX@SZ;?akK6Nn ztaAaH&iu;50&;rbg!^|YZ%i|GIQA%v26fQ>hknA5atSU!x%dI60fWP-k}A)NnWS}3 z>3cx;d+LU`I{xxjnBOEP)C1y*-qmEuRu8xxN7zzlW^!;vy`pWW4~i};EpP0K;m9Vg zJoF*gV8Jp8nh6uqtJ)&0wjx~{1AFg=w;3qi<>Rh*uCfgpvz)%=cyQ?rb_U_-T*`NR z@H7S#p+(^wA2W{$?xDY8-(Mqv@`9n7eJvFPrt_G5NhiX%o>*_QDqPi7id+Wt8gg3I zx<{X8O>|b*mDOoWv?&LX8w|joEL~=qfI4u4G2Ytjxj=xOy6L-S@-dxsO25`OdAPf9 zq5b&6o9*8}_j~OD2c|q^586Ej`Ukw}%wFV*2jAKtcOZxyV9o3_cOO_!ob8UCMeDr) z>@T&?4us8rz|8EKH@?#LUVo+CVaJX+;N6AgBaRu~VpoHuvNHhiCctaLSlDvn;2 z`Yjw87mG=S;tz1#05GKA3a6{e6<&nyon&=X1u@CmgX1sL?H~H4h+hK(1gHeo>Mbw=As#On9r#EOf^E7n#{PE zJowQ+<;*I6FS}8Vm3UJIBXQtY(6V|{7{W~<5RV}Ib^ChS&c$i`O?prs5-E4|}VDys_{EGULLA*?ZWy%3{3% z#tVMJ13gO&H9XhAb+jQiOm`rNk++qmo`NNR$e8^%Z2+NB6s$k;AT?>kUqRxA#K~f| z-Y(^~_$sL<8BS>lD}O-lvbMiOWI#HEZ!sB<1Z zjWg_(jJYL-U?9!gArhaEb?iYg+sjwaw=?rMnDIky2e7=Fbsc7Gl++w;`M~U5`!z))yoflSke&Lm&Q#FS5v1ye zcfv&292|5QKkY{Ss919XlQI}khKaBLj=R!?Ge;ZBCqD ziaKq3ui5Kb_#y8;%*sscV|-zaa7i}!F=X#>jNp0wP5ZL#_y*z0+6DGs{l{(j_kO?a z?mx`>&c`e*;i(k@bizsMx)zN>dKlMSR7m8Ikc^DhbHOvn#3M}Aca`{6B zt|<)i2Z^^)YLl4YF3AdPXgX`~eHipD6!Iu1m;s{J@-~alV%wf4AM$i~to=OL%tMn8 z`VKhdH!_gLT;VAeD(8UXE{^=c3ysc3lrXq_ zDwUz$-U;LHqz4%>X;{qVe+HaJ8czmO(m}{O@itgxly4hY=>o3?#e4$$pLD~g{=|`3 z_Z|;GvdNd8?)1jkNVg!&ki4No+)!unpn()5*pdZ^z(gZN2fYR&7%4Y+t@TZT?6@t* zkP1{}i~6~@yU;ZcegbbTnF#1Y!%qo(1k52y%`(FO^?2GMN z7hY$uHq)+eb8_1vUn0Zrd1O9tU)6hWwRYond$7)mS~{-7oxfq3%LAGV=9kHBXl|0%Na9pZHr@v$6ZaZawWxkG6 zIQ;|PG_>%klhq*i%&jjAHQ~|U0nD#>?Etbq~p$;22Q@~#;H!O zl8%4nhuehnZaLH5of_^X%W23AhtUT3Tfeiuk z;{3@aj$q?1{B&Z$B>psm0BH}tN(;CpK?U`p)eo24;>n&yN3+K7M~LaEsA)yEw}^yJ z`=Y@|F_P`tz_rgz<-Id6wjVKr`7Rqn%~7GZS=)J!WiSVPgz5mgvrq)VsxloMs>$Nt zyZDW$xOnyJnbs9C)|m`sE4A{b-2qP<5UKb)?7;SFIG_W!>GH)}4nMV&h97U{?mAd) z4C%8BWV5!_*YpfNN8ea|nqpBuwU4p0*6o_DKB7IiXYC=%b4J%K`CJ_1-m}_U2d2S6 z26dp*4!Ardyo-}K@mq?nW%p7h;k7>=D7L%6+X@D>wT~`qap!r!<)qG4%3C|1<7~BG z=)eK3hhymcReEAnWYNSgeqF!C|LgGc+rg~mnvN4wPU((d3^AgfVOiT=3?^Jqv3;__r z`K2Z-A-ARIHl6fGUBZvm$SX#vc;${$jHCHlJv5(tXVTW-RYB-Wc??(y6tAiX2K5@z_ zS$Xox0|${cYoSg_>@IwhFByoF5C3yT>2fx1`2qe>N6N1Ca)|*zaXmINWi7egirMp?d5J- z@oc@SKy)E&51-!EW6AEl#4f!XRMz~DMDA2o>W9%n6ph&F=*QAmF6u*G>$8Aj{}VQV z{670!@n!WQxgN5G)4}_^uznO+JM~3pO{mwd8JDK@$IXV+iXEM=2t7>1!F@}{6sxPWY8)d znl|kou(tcX3$L_qUiuxr(!Scx&V1C?&c5AV;sez)K15(+kNLvIws?pxkDR4-Foyy1 zjQS_&#n-r56At1?KEu9e@LMff`)x@Ve~MbmpsX1Q5iWhjCh3Q4MUl_4515fbk~n<1 zk2YBCTKgMqlSU>hvS2|*X8$LCky#t7j4TLS|D-@FD|XOyFVYy)r_G3nLKBr`$ zJeB&jy~~b5h+iewX%j6W<{l}>I_+_RHOOp66$`2rb=x?XoQ=9JO=k!nQg3$``OtLs zVt6|^*lP!rffI(altCn*oTMr>dpxh`OyUzK&t*#@5AmgoE~qjJt4#Q{Q8qPu9rc(z zf{yYaKKX$y%E_9K*4%rQXL#}#N4AH|pvtE+H_D4~TxN;VF$-LM$?r$CG)8QT4`kME zblrLJ5F3yAK4zzwIo_fyu#93MZ&0j<_7C83KuNvSwj8kirS{lGL*A=>`C#Ebv6ch& zhwZ}Lo#yt!Idr^6xj3kW1$l(ltjnh|MnMCLsC|M(%iGaHwrLY1VKk*kxl~crc04+D z4xRMbAm~~)A^(AShJSv82eX#A#eM417E&E7X8r)NllNPT?fJ9q-nr+QSvk+b@zreQ zb7|*RdujhJn=kLQ1sb)By!$g+IpHcn~hZ-Yu2dz;*x;3Q+HY|pH2}F^Tm}xO^m9!#Ko_TE{MuljCDFh zyYDql1J13}R2CbD1M?@o@}yy8jj;wM#;IcledJD74UHb|37`5aLSCS6;}Qpd6TZwC zgT-Bo37lWm+JWjY*EC_B-5WmO9SD{-lnFBwoJr!x|NNvucW$e!j4ovaV@N{}6g>|B zIuZ)3?&_eJkU!JC%x8KT7CVJkwdv- zo)WO!xaiC@o|&zM7uSDP2jfhFFkJ>U3ap!Ui(41o;~6mtl-|&(gYD=qH)}=E^*DGk z9^OjQN)z+Yamf^*((hE-&=yf-2pT+{FQbf$-0&||Vo&XO^rQgTx!J^qug9zub!1B9-1;*i1p5$DH0 zSi0KoGkfZBp-cN)?b3ty+lw6G%UMvtJE=9IuV&Ec$#;>}Qg-gS&$xpuUxYIQ$SlK!aU$u zZu3{Uu7jg2Y+hd*Z~J5LH)*THNT}4J%nD#TbJ$SMI4|o{wK=62sd6biVZAt^q+^t| zu18mz*{laf2Cvzq3vU|Y6na3DU!QnV{=$LLkG?D`2SB^%?>4W!-#c@yZSF7gp`a(D zF<7HqeBf{xwKvNb`+Nnz&DZ#@(q7`@p)2=pP!~7bdEoq7|InvjWS*yjqW;j7ma~x# z0%h;W4~W^@+MOkYktZiZ+>E1SWIZZ_!QlcTE+dpRw+N1pyMlQ$J&u6M#@IGZNZ4|- z9a$&TC{;`q>(rMpL82aw6y7osO(h16X}~+sl^bWFoz?aYoI0ynT<*bPGoX$!xO~!| zmYfOo0ng%9elLftK3MHjpd0M)aDz7T&f+x&#;n2xV3mVxuAp_7E4VG#Jw6({!^d3i z9eba0+u~vFK5uW1nLtw}ErR>Z&iaw6LirJ|{7R2@X}wYZc^oHF^Dy3E0n#0jX5h-7 z_mMd9L?a`^GkO0F9?X8ayr?Qv3jT4a%2XPCt~tVJzVLcG_l-a07|d5$U$dV54xjw( zU$nLNzTGZA-r`tMDz)g`zPw%{ zA;!u`WHrUCx`g-{GUwhCd-}JH$0YZB`ufyDWDG&STZ|hX+*=Q zEPHP%z370e0SN;D;A$OhjlKOEIpSMKNV8jrOr>lx>$(=D0Yj-HMuS_w@FS1phD%)X z3L`HvEUa91I!^A&;z$A}SH!*(k6Qdk*t1d=r){KK8fcJ&dOf0m5inX+2yK-*C;ly{#4x&uQNgp8>+sYx&BhS z`1Svet%+V{rg^nJ{^<`|`_8{;mp5);M^Bh3+ueEG?%%o7?reOQ z!S)9%otkg!>wI{3j=|mRweU9+yigB+o!1F_3SVqiJ*)Im3<@C*0`EA>#4+1^8R#J@%|3JoJ_Dvh~QYgUAWdZKJy3d{oNPZ{rwHT zFg^X)N5 zG5hgRmI?SE(S`MHU*@POgDGV8E=Pjsia)Ef18fJ{6m;Ufi z*=FlamJ*z!{21J_4*Bllg{u45358d-ES0jZ;l`2ZJQdmJW@%0;UJ#0t3-q~5qhFOgpg)z*#EF|u!w;h1=vgB+1m>*RoHBB>JI||@ zx0!w31OruMjuVMkwdSlwM!Kv;oXvsK&RIL?mARM{8aI9{kPWbGoO&5Fr}-dy%9&Ee zr!%FnIOE44!ltG{@r!(i{l}aM&e%X7GYY;e)_nH--sPn`(HT08At2~e5uIMoGr2|a z%A^S;ODB=Co&ezqK0C;Yta_zf4!SG3QhwQQ*A00k=M%ZzK?Z6u`h~zWnQ$PK0i_HX zM?&}^92g=^vJ7f1R+W!&Ba1%!rR1G5_NJFC;;i(dL3H4H2W6TLJv(b7S4G>7Ts?s) zFs4nXheBXRT@=v2lyNeFlf1?Z9)>@6X-OLwI0Cb?)JF$^3~1+`@E}G9vGN5r6F>Wp z+x@-Yr6XVB^)>rqUVNDkIGi;?%P2to)cQFw!UYvBos{>)C>a;wu_Pq}LMJh8SMm-GbwHhCN(o#zil_xWsk#UM21HT#GRnpBAC2VlHSloQVpBmJ8(lE z1*4w)E9bqgiZLanA^z?{55M=&N`{KH#qTns^!}C4wr`z(vprs7Eg$46f3U*B?MNkwNd{C5qiTQxfLGU~7KI;AW>G7R*#1J#!wJr+122P(EF>y?>0 zjI;69m$=x~um$XhD>~Yl2`zFQFbG|J^^5K3uvny@I=XYao#g>(g;`Wt zx=ooqeD2M5%dMmqu=P7jZS93ko}q4XZ0o}eq&{AMo>}oTZ1FW-ZCkOt)Q$YwW{_1y zbeZK(7VEM%W7akUMHwyTqaW)q`5dI4wwW$lu!+$$t%3OnIpv5M6~1E4>;w`a^f%GX z#3MejjGH!z%ZFAlq`jCX|7D(2uI8|OfvB(w_Fp)z=sfusa^;-q{uXQe3ux_PX)UnsI?S6v? zv(p7fk=sxydjF~l7^a9Bh`7h&?kwjuFJEr&un7MBwHMkvYi63KZg66V700bfQXhK5 zNM?V6SBwsj?IdSe?>5Kre@kpI&8&h;7MMA3&>Qgl0a|x)IBWT4r?+WEiADqzpvP(KFg8CKA!LpU>(({fgn6}tb=5AIOZvL%HxPBIek5+ zo*eY&HEA&vyv7Mt?4?vXJ==x+n{FLa!_w-q5nXGgi5d=m^I$<*bR1((qEl3UJ)C1t z>73a%=;-?E?fr#+*d9IkBha%}m0sfJF-KLh$E1rqYIy)$JCYQS^)>w0J>?Bg%H^Oa zUpI%3k|psOX_7tp6s!0bENhx+C#g!|mu}?5*Rwo~(B_rRa>_BeWV17jQ1IcJ$JsuZ zki9rMGijz1CL%OL&jA165}%84)M@G4oFWEb!khZ7I%?{)6Kc5V*$V6%5k?$5~X@)YmrGSj`C|!Stj%EM3|ZssJ9pXcb{*C6V)QkS4{2XS2ayPLs)YvJV~TB0q;Sz_>L+M~zLZv65) z;_+KN!X+aKRW2Qd1nao7g#}Q*+BC~5ZNv7bQbaI$a&frg;{y-vp`D)sBd-G-^(tL$ z>JGX-SXt*a|7u&{KmgG#xUO^cc00!)|EzrsdflK-J($1PHrS{1c!>et@?w(7S(p&^}==c_ zerMW+#|Q0|wQsjST=*$7<$HC48izXkck_j=xD4a6e;>6fK8dnnIhT=^B6t2UG4J8Nmb}7x^j|TEQSa zW)QOb+Lzn*H~#zf)3sOAK-+i!b({U(<91Z@Qn%+9!P|%zd*yY z1DXL7X-V%TPeL>=!Jt=@L`E0ZJ^7@q5>9<`4JG4%J=UQsB*dEdL9#cviJiI+*eVeUto&lU6#>_dpWgaUIG`(a=92pRc zizNhpMCSU^Y+`>z$4?%Sb3x_o(DQZQmq6PDyq!lg^`Qsmc+%$hrjYzp<-`3P6-XyRW#L`5&eeuR6hAi0vRjboV`@cptCJgr?RYqr)Iwm zXxlfa#6Lor%%1LHcMsT|g9kOYVzNXhw9uti&ns^cIo)oa2Uq!=VbX-9$GkzDXMoRx z6tKHI1#Gi3#uFY;G}{MD=h{y%zRJ4tlXixKbF7mebG-5c%NZg{GUT&7eW)?c539UN zKG@y9*FL#<%-hC)+0O8=FnVIVpMh)RdKY{2n6>*iSFZBF zz!CDil|AsNT5M8ISfl>u!&CT^N$qoZLIrpyWl`lXZ|;^t+rhYK)&vTlDI4J}GVmjd zx+_hPsJh@Y3vbCZv`_3a>3-t}vne%ZsA9aVDOFwi-P&UzdtsDG_o2BiJXRiS3h9|8 z!ysmnc=FH$x#tg%g0lWFz@$O>WHpDunx_HUtP&>9UdBYz#ZYZ@aTtyVEJfXlrQ z#YW*3%`V!y&#``QpMAM~_u}us?~}I77thyOZ112$o&=N|hw_$LI#coSCog#8M%fgP z(v}~%Q3e}2fWj94+U63#NQ-|3`2LVe%mAjzD zgAYXF61^R6J$Q8)j5HoVan?UD>amir|MTtatDkSnSI@E@?lB$sF6-#F+O5C*Kik}m zowmNmHan>ZMWd)zW{s$`)v4npTG5DbYN50(tHUGU$krtknMtqT~@MrLqylOaI zRzi}p-c`LIo5+)0xdsMxEPWHqVS7tPGP@R)Ho*YLV}7^jI3BP}$Qim5j*j)1$)$Ac z^5*OZ<$$oWbkYaR-0m|NxW9g_z0Xm=dwb`gKwCQ4ZqJ>t29Xh|A7qSjQ3kKPas|%T zctXcgLvy&J%;w>5l(i41>eM=&hk$rsfN+YzL9(M(V3bFR70YXMPzey$89$%`Yq5wT zv6WsJ29%sxHm7y2-bjR)$iiRhG7PBidT6V3+oraH&$)BCTw>9I7hk{nRk$Ugvy?1T zx@B6dw9Ti-dofwO8(HZJY#le*&f6!@xjpLdVXVgy4}Y>}xe)1prG;1I zGQv3SsT25XEj*ggHjwcDvG-n2mLf?BQRJ1gdlbeT(hMa zAIJy(b$p`nfiG*eYiqjzjcW@o#0-ED=;`TcU0P*UYI$#F^80>%PG${_Z!|s>dQRrK z=bR889v&VZ9v({irGP4O+D*$xgKgV*0s@(;@-Gr(3Z4){2jA<8-MwYT5@dZYOsY<}0Jy!vllA&4|9-8N*}mYaav-89TlrbW_bQuR~0l+T`7i#2~))%{e!5fGoVt(@CYYDna3%_`q3h=u$rAB=ht;JqzL0_K&!-|KrHu2~e?c87&dSL}IUmafA1%Y>y)lzj# zIZR?*i!zS#JHp(>Qf5^EsplxnVj&7q-h@SD^HJQ22j%I|ca?zw>lXJKxzUO#3jCU; zU%qqs?whgex7>U9)}vCkbeEPqb60Tl6K&ztxujB(5G3xsawZ{1wJ5Udz<~7wy9aJ% zWCyrGCn?|;5&B=!sc!)l4a(1kn_8gtEknG}4<&V!k)SaadQGsI=OlAxj%fIg-Fy>X z4x|oVZ&{5oL0UpTd0N<(`H7n#F~Fg3`

QD-mkoYVp!3PLSkrf5qe#H_>vI?S7ps`Vmp!%vimd-58Ct*Muj0$(vB}@Mf@0} zdX}s0h~=naR_%mve3v|=DH?pMY>n~VNe3Lkgm1Tl@(S$;eBgFe_EQM3<5qFttAb#= zAm%*8jGsx>l`Mx! zrSSEuxP%%*Co)?JTAsuW-x>$L5n>xK{q68mR$0S?SVc#NYv9j(6t1Akuk`Y=ZLf0U zyQ7mn3CB-iQ>AvmKDwTM_WALhHk>`jk+l=;(c+!9GP(dMCNqlH*XOkF$*_5*BMW^( zXLxR6ak;f`{y}^4!8d8GnY)a+=mCbA9okeEf=1sUPN67L1*15k@GV@=@T_t-gcw6p zJC{tS%A!$7GA19La4f{}3Nnc8#OUOY44{`I#K|z}L@D=S`Yb~VCdEeHd<~VJuzU2lisJD zh7$GqYZ;Q73P01=jrhFVa46(0BQ4-14oHYgHNlD@z9k~a9~mgFFof}p+=by?oP-$_ zMwo{2hlVm`d*ki)?ED+dF}z3^hW)mmwWS9iwl@ZA?cyO;3pz3h-~AffzoLw$qGCT~g?=Tej@YZ*r+kk~fhi!W2MVouV z7JN_HafEPkd9OUgn1Wl$13DxC&QL6=xF72-G~U2EvwE__uq|UHSbYyc$nuk0M8xpc zH~CIDg;1B>j+c5jt3=`$*MDikk4>SkxdOs~1~I=0nx|s|={U!iAMqf(3TddFxcumq zL~$of>WPWz&wZpqNdxTA*j`Y5F`>bS+D*hd~9}h>MjwrOJo(SlH56xn;WU(xRbY7#dcP3QPpU@ROK! zbWnY`!4B(dJJ}$!jHHZyNv9OLVr3i~c>}UD4Fk)Iq0^D#=@mK3>j;%irB9sY(;?cT z^*)-rgp+>UK64Q!Q>i-3x)`|ezetX9ut!xZ!Vo-)El;E+Yq@&8pTtV4dDfWo8_S_EoHuVrSR;L1vdhZUb)d0|MY(( zowc^XG_4^Ww+F+y_LSX-4(YhM)4+kWi!nji1z-ASw-R1Pn1ZthP7kL!hIaZ|=&(z< z?2!2h$~K+cF1`SIniuXpzTzxB$dCNx8~7i=$XTy|d?t5PZ|daEX4~8tuszsM=?pz@ zgAEqO4j(e@hS|Km#W&QYrAud^r@HW8&FgEe%!V&0x72e!tW;t4Vu@5A-A;v-jNex( z>Q+?<{He&k*LB7eVd}&$k!E#NeuP2sR4BQ@)fNrhLpBEgZ0-ib4~r~RIBbhp5*A{u z6@%_Fi6oXIlvtNDK zHa6DV`L+Fa-j(-JWrS8js!Q#ZQhtY0!Zsm(q=oPO^USUDQvoo0#EAk)17IVk66>PI zBi@e@gaKzBO6V|%c5Zii6{X=$gT`{njc)b`&jkf ztIK$mUtkkTkOYkq&$~^vG5f0;CBAxar%$n<2A|?cZUlsD@YcQi&LSX&V)wA1KXj_W z6z8+E7-or4fJ^Ml`I?Ovhn^gyL)WJatPZw$nV|8r<7J0%o5fL&FTc}%Hh$RdGDmrp z4#fsr`>neugy>H1kOmGDItSGbMK)}AaxLYdbuF;#k*pa{C9H6lj#Z<~qmrPw*%Aok zd|UJUQj(~cNs(W>_%ybG^eGD=FDY}vtB|IXX-xl+IM7MBl5T4GR-5_3zeH*JUR&GW zYLhG^9e(`R?dZ`j+w?BVnBn;I^7rih>`gy$uu*0|m2`frw^etM8`e8zQ{o%iv^$u2 z+5snw8BIp;)0^_pJA4DQj9@qt*2y^i#G;q;(odT9T?0W>Iub|VhL+m?R#+Yu*Xg$< zqJNb|u;Ggm>F67T0!iHZIw3z3gOQY2sNJtkV}gfhF!#3(`PhkqsP0ku0SEIetYkza zNXgs!OoEX?K@LBk$$~L>HMp1=mb>RG{T!w2{SpT^zoRglyQEv+0V_!I0-K;TF`>%N z19P5*DI3>i;-Vm=awO%@UNuZLw#wnGocr=FYDNVn_0FIIh>Sp?_GYd%7Hn20^Yw&# zn(1{H+RVf|;0lyVy2Bgvf`4Jv=S5ulEA-^U>3chjbbfK}dfObm1XK_1VC%AjH@FMY@w&94$5mU)__aC;^7kAsmiT}be*>{;Ifx%?>31z-Vm{|!I zI2|wnp3Fj&XLiqy)bT- z{u!jag%RSSV zwZE_m)|C~{dBwK?21luOdJ(uNK|?_p=Q6pN>JVD)BOIQfz<+@P|6=zX_Asop^q`li z)XWx3+QNy_KzN6!Ovm)aqE~dptsM2Q_j(Z4@Nw?myPy?COhaJFm!A3ep-+W15?8qi zGf69UX&ja2dR9)w+9qH6SpT%CJJVF(;wEPo`|h84%18NDLEtX@%D<4rH&=RFmA;O} z+dRo!%277~1|{ADU%x`}5M^|m`Gb3t3VrALkp@#)9&>QYgNdbfp0;`g>+LR`sMwJp zi)5x{qLE^30K{DNKk?dIZS3M)TRr+C6ySa4-Ho^VZ0olI96MF+Hydkr>KFKelT#4r zZ6JQ8n77VgB=3_4Y(pjK&0laV8V2EX!lY$?^=~Xz1v_V~swP>!mV*G8ki&PCfRaSq zW4Q~h5(HWar+BF-L=4l$SsJ=H%X(vDzCXLrUflle_DdT2X)M`OD753xQ7E22Xl(EV zoc`)@E7)S=d-fM0hy4O!R&0E^^^j!s4(Ov!A5OfRR!TEKmt`=@T^)l}kU22w{} zrZ1klbzwrA?wwfXpyC50>G*3I@h!NL)r1iz=sZdt>W{chx`ABzx65Tp!n8)~;^ zu3k!Q2d=z3K^;n`0{C+8Je5FetzYIN)?s2ettS=agrlID(ld4Z6|m=+k^$7QYi2q) z``hzLasgc7)E$@jr!4SGy8zK$=)FR{-j%;Aoq&;+y!naZ_nGPdM>gu)8

}mTk;s$v%rXmZ8kZICRV_F)Bo;i}*tNZh{Rc23%jKXyT^^J2^m|H(+YYQiB zhKcLb8xPx^p=Y~0-;GLSMTc8uEICRRlHdG1Wj0xh+8rK~7jwye)#LOtLtgkPvSh3w zb8bd%zSH(^U26|WYiEb;On&?q3`0L>_;~|`Q5Nmevl8&G;IQe}lH(;V3jaL>^ggTo zw`pXJa{y!Gl7nLk@+8%-Kohjbhg5szHHDA76? zUHvK=;3^(AoqZF*C+|@KeB~-Sy2jGu`$At`0Tj@t&$lV);-7gvq&$w<-eiQ8`ZKR_ zru)R7vr3opI$#ML^Bnhn{(rWKRXPN$&b9m$fhijxDFn>DfBq|3oMU9ee3}y9B~%hB z`OxxX&bc%v{fmNrADV4q6@AQP|9dl+S>eiYq|Cj#L`TCiQZaY9t!O1~ zg`Kzr%itA=d;?$FymZ^3SDw!NVzIDe0(_}IX}Kbl1>k!+D3&vB`kQvjy(+u@ISHwv&=S@vC`GJE zeSIkxMhP%5jqf#OZTo@@;S*hVMx`^^f{s_ynFs=Lsvyg=l zeR{?<4gYuv9y)X|bO$7GNXKNM2~lDw@LSJ-G@l~a!IG-R@y~okz_Y7>ZH54jn0)Wy z9?X6z18y=;WE1Ps7nck<12pvF+a!Z~_cW|-6^BOb%q+KO^UF-h@o*ljtSIaUSav7b zT}R8V@?dsrwcTV2!wiQIXtdTNu#s_g0Nhom!Q1Xm!3KQbfHHi-nhFdW{ZtIo%by4n z+5C8w8^1d9EjdfRSDD) z-?el1e%5B0RIVyCq~TH6D13@pi)pO^FDo|kK!lMmTvcVQ#$Ht6df^@W2=4<{nXX|` z9b=gME*lXpq41nP_es0WYE`$?LOmsHMXD4FqU@+LYXR!+d>x1Col`c+J)WV;PTjSZ ziaWQ}LbmVk2stYQcj^Q`?u}_BQOQ!6sXW?DX0DBuuoqHB18RgEZ@!!N{*tz37qaST z;VOFTZ-Z;Yt59C*`O35T*j&_9L_iFodP6-%T%ht~BD6vL%}CM(646@Lk?@ z6O?%IBAG4Uyc-sjrQC6>b%;G0(@|Gg;68%DSI9?L2ZE}ErQ#)mXZcOqxF}@x@{#g0 zjYQz7CsD*pN1qXNBE)S2=R!mC@9?E%JK#P-L#iW!wR-gV@@YB+Uu;gVzy>3qBuFss z3X$-9`{lb>nhO=DTIivDP&7+nnB|SlliG0MM%%sqZVoiCGv=Jj>4(2)H#fdy%FPaq zqV-33!Zm49ApPRCDw}wkvdSg2rO3Oy5(>II#Fz32{)wKSlp}6Ett{K*pi>a!|C8z2 zHuGD5*v8*}2L+M6IB6(eu)Wh4P)p3Rae`qKr7yIl^fMhb(j)3Y)+F>dVk?F|HCVU*AXYOg%<}pOyODSDrJ@LmLTST$NG^S zhu|GNp=}ncIhvO`09f%MYH%@`%51`mrFB1i0&M+)x9{A-6pXYuK@hp#AUToN;tMYu zFw_WaVQ@qLQV?-8@$SNzg@Euj<>+G4Ec$}A%!X4qCz8?bd0Z?7KZcT*?GOhXk@K^^YJ*?>O`G1LbIan{$UERzUDIAAGv*51Z2K&0 z3cK1Wa@Em6{G~}Q9;b5CoTrTHS>;8jWSF)O-W#`_;7>YcYJquIspijeH>h=r>=$^_ z$!iid0Hq6Fag=Ov?*jYjUl%q{!|48NZsd<|%T$AfMkYIZ8963l^DqK`BrVHqrh)6{By|g?Ff_JC)wg_ ziY;g^(bb+O%@W8JQ`{@>zN88!Ke}r@bALZ2$Pof&oBcx{u<3N;JogcfZ@h%1Y?*n9 zIlYGTt-9V~2~Vhhr=ze37e?=2){13 zYGNV?E-c`P7J`azIpL}Wp|^rmsvW3AHMLXB2`?UnL!Q3pjt?J&NADI-1)R5DdPuei z_KF+jfVAY3;2gT>C;sq=@bOIE4b){Tu##!xnZ8#SC-41tahlqfwDvM=FGk&&bo~15 zHuA$iYpdt)v<;^EOl)IO_^%^vj(Mh+4)?IMlqKKzzRCAerLMjXuqe<&;ddFDUuWL= z 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¬QEmjSG%u&dCcicY*P5FU-F3cfL+z=YCWOw1sn(eXTtH! z?tz>+h?ZE9m(GH;DR*U5?3Ucx_Sm1on(!aEqxgj%G{@YsgxSj*1ZVhV_o0#YX|H5A z-Qj?6z@^7J*KZQDN1rpeK8@{~-jIC9bZ2Rus1mf4IjRVRnFn>*K=&AZZ&4fed(kfh z#{;p-a#DH@4*n1Uw*68^LmJ{q&QTlA1tGNS%z#UqMWi6l4a9RhiAWtGo*lmVLh-(e zRo{$;Ro`K^xE4}&PepG1fG^@HD9hvRX${K_+tiq;EGNdJWZsnNz23WWYQ+SQ7bLP? zMl&M2x8KC}1nVw!JtFK>cN=Jna>X-9^2W;3S$om<-X}ES0@SH|2fN;=z$*y{j}|RV zZi<1G`*({>%V3#gN&4jpobC=eRcCbWc+_lPR!1c{j*ghH0AcYylK#Hl6tWl>79+~- zvx+Q_?~GW8!Wv6a?=n8}F{N;#AhXOF@1Wmb{h-KT96#PG&YIf;w6o=5~+&8Df^E+ao`RfkoFE^mb- z0~otXmG?$T&MCSj#sk5;rQBTrc+pn7%55COd4XRsxwB4Ce@C3BP~KhJfVfiTM)p2F z&4y_vzaCzSryHZ4T+_-EmlvU{t|VZQih9)qgCO$M(Owamh}E;8?aCR})nTyqD_FI1 z=3BSa+(A#Q)s zA#T#wxUAwLDL2%AY?w~4Fu=Y+mF54w1t}d7)mFVOPH=b(AplrF_r$trZz3xy1xHu* zgki4n^cx+14y&#=VFJX9p=ji7wRkTAkkAvfd2dm?w zrMTCD$Xf=)-@Uq)a-Cv|hC7BOq7CxZe72=jfTAzGF)6P7%P-%VF~zRjPap2aq+qoZ zgeX|fSz3?-VqY?~esrstdwNei(F^F%g?RZVZ)O#Uh)Fs9B6Z3BoJ`W3YTq$7Qj?|`m7yYwJPm#}m`s6He7ZiUA~Rp!p-PvOW6_^G-Ye@iu|e@Emv@|R zk&Mk>NNNA96QozgciUeoTC;6nXZ0mu{1uSd!rcjvkL_NoReh%CfW2O?0Bt96Hb0e& zOLpsy-;OOxrV`mUoU0UDGwpk73!~FDsvIW#wxv$_>R;sB$UM^u*^0YU01fNdZr*8= zS$A2E7Oxxjx@TutLs8+C$(-_ELY}AA!aShbmpJ9G;V z%CwV}r~Kva8~pj3i59^>WMcIf-SKat{oN6|_)AXSlxs#{yrbpu z>_bY?+4TRruIHwxV8(1g8|5RCe}??~SAZJjD@$B?VMDvK=wYb$FG10N6J{FP;r8JY zR^&s&1A%X71k-SRE)4pIBJ~L-Q~iqG1xQtCB(8DI{d1%+h+O&VSZg4&>t~^Vjp|f+ zHC3RR!5~t@tAIHFzewQTH8c1&zqp6~Enjbb&_Sdcf_vxhzmtCixh_Zv9X1E(Z>Dwp zEeOc^`dr@9#fShK6B`o`TRcnL%ltC@)8ooJIP}>}{PuKhuSd4#&QD=YgKchl{_56d1b}M4nTP{+hkaXO!!LRRA3l zcUM=9^uEwN<=J>nCD?a`FgT^S;Q|$l#8?cQEUc^v%cJ82u)eyfatxzl@7gu8p9Xmt z!K*zqq+K^(NxSSTOFN%Ehc|lwz|=&SQ`3e77tuIOH#OG|b{OEO3-UYAr`r7<5(eXp zm6?D}L$%xo+f;2(1e=nc7!zsVBhpG?G|aZlJ}uc!E>tBg?{C#z;6$$6vR&3lL*?3r z&94axG_oL@NYMEdsP?e!FaV2~eqmq$veh+qw(z+iHy-mp^ted7-1g=EHf~VEzY5)GuHkczy3{;PzUnojzoE*k+jsA_kIP{$ zsA~+e4qI^JvHpZ4-~gY=wD}q1qb`QJ!?Wqb8sJ$sFmDTri}7g5^*a~$^@Gn#P08&> zXw-oG51ZjxXB$~{(a{IEP2B*4)3%*cBsz7}_rvLo5)kUYo9thC)#DC;3N-Ie;MVF} znEdBqxOLxA%Srd|Q))?nITy>dy9|#*KW1DRy}QCbRoo@qSs93{jIFy?Rj+<)X)CVT7|!O2 z=)@^qp2ota=g(@Ba1tP<6PK`aGKj+_x3{$3F2LOd9Y>=r{nspEqnCe1>p>^6 z?O*AP>m?e<&T@fRPBbRI8$Gvkv06tA03MYGRGcG0r=scWvGw)m>+o+i)LXzYb^9zE zOR?EtOoI=rK+~fPe2ptiG&EsOfou^$v$fK%L4Zq_pzPOXhyR{f_9) zQO{f65-iU2CypN)~$ z@4;l&h1;p+!f7kIan#RYePQVMP;TD`ag>SMvRnvOI19odLa6J+TXv(-O{lVw&E16J zhzR>@@UTG?Yh6Lt`KDd+;M8?o=|&P`_@+Hcw;r)f=(a4;p(j)iEqdSL)E%pdg3fEE zjRK5(HdKw@upGiqt|G_p6d16}fNpO^%Ax@h%?oshmR#s$5pT;2(z{!Ut>!xq$MlD7 zP-|-+ns@u|!grVZVU=e6Fu%jO>AE`gI^e}J(4jtH4QB_I@LziFvm0rgE?ev9Jqhg7 zY%4zR0-WK)>E&SayN(Ov4nCds_7>>f%%{9b$p3}M{|9Dzt7@d=m#$bu_C91j)!==X5L|Ffx9~}ao=uU zSb&L7umQb44(VTK5}Ct~8yhXF z@ILxna@3e!S6An$x7CVX3}dq?_nAY%&Z+-oc}%iN`brd+I$M>F>wf6vqS`y3(6dEF zq$T|tssHoGx4ARm_yFW6Uiltn3?KE|j=@>$__m{J%SS@20SMC?-PX-C7<*;FVK@7Q zlh4Yc(opJ;3yQxJ2}2cezOWBR{r1;uUqCpP1c@4ltacl1`x%wA2$+Ibf9u*EHzu-470jwO?*zK?vS=mG4Q;IR=c>*H5=zfLk^Y3FwR+U(4n@Y;#E% z*mP^1(QwrbnV1Od889K>bq8rc41rd?i0?coB>Eb-DyS6 z<2pj9SN7_B4$(#uElO1E_8xznNgVGc>Xeq^OkNJlh^h5;9 z4gvID1?hjA@SksnxNBqH5M8@t@mFA92lrnA{(kZ*PXg-bv#|fJ=nS9!g<`)`w7&j# zDN`5}sdin=%)Ij*lKyuwbK|dK=Czr+=6{zm`NRTZ*Es*)cK1J3%io5(5+m Date: Sun, 25 Jan 2015 17:44:21 +0100 Subject: [PATCH 08/46] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 7f54803..6c6c09e 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,15 @@ This is the data you can grab. You can create a stack graph, so every bar contai * The last column is the time we take to swap the buffers, so to give the buffer back to surface flinger. Scrolling or doing any kind of actions should be below 16 millisecond limit. So this app is running at 60FPS, we're vsync'd, everything is going great. You can see that most of the time, you should spend most of the time in process display list, so drawing, executing the display list should be where you spend the bulk of the time. * The blue part is your code. When you write your Java code, your `onDraw()` method, and this is where you can do most of the optimizations +There is a distinction between the GPU composition with frame buffers and overlays. So you can use a tool called __dumpsys surface flinger__ to see the state of overlays and frame buffers in the system. +``` +adb shell dumpsys SurfaceFlinger +``` + +You're going to get a list with all the windows currently visible on the screen. + +More info about this tool, [here](https://www.youtube.com/watch?v=Q8m9sHdyXnE#t=2469) + ### Database From 07ada9811c8e2127d0fc359ddb102c447a1f22cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Wed, 17 Jun 2015 13:50:16 +0200 Subject: [PATCH 09/46] Update README.md --- README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6c6c09e..5d0e06e 100644 --- a/README.md +++ b/README.md @@ -3,17 +3,23 @@ AndroidShell (Mac Os Commands) Summary:
-Maps
+
SHA1
ADB
Database

-
-### MAPS - + +### SHA1 +In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate): __Debug KeyStore__ ``` keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android +// or +keytool -list -v -keystore {path_to_keystore}/debug.keystore -alias androiddebugkey -storepass android -keypass android +``` +__Release KeyStore__ +``` +keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alias_name} -storepass {store_pass} -keypass {keypass} ``` From 97520a0aa4bc5d586cf7a211bcd59c95e2a0a728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Wed, 17 Jun 2015 13:50:34 +0200 Subject: [PATCH 10/46] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5d0e06e..1f36a8c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Summary: ### SHA1 -In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate): +In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate):
__Debug KeyStore__ ``` keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android From 9cbec9c1f32e3c34989d9269c096fcf9ccbf425f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Wed, 17 Jun 2015 13:50:48 +0200 Subject: [PATCH 11/46] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f36a8c..7d37277 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,8 @@ Summary: ### SHA1 -In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate):
+In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate): + __Debug KeyStore__ ``` keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android From f65f551ebe053925c1fbdb7e4317adff03e2b464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 26 Jun 2015 10:29:02 +0200 Subject: [PATCH 12/46] Added Auto Backup Data section --- README.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7d37277..64393b6 100644 --- a/README.md +++ b/README.md @@ -118,10 +118,21 @@ cd apps/com.package.name > __allowBackup=false will break thos method__

Check Battery Stats

-``` +```sh $adb shell dumpsys batterystats -// Global and per-UID statistics -// options: --help +# Global and per-UID statistics +# options: --help +``` + +

Auto Backup Data (Only in Android M)

+``` +$adb shell bmgr + +$adb shell bmgr run +# do some work in the app +$adb shell bmgr fullbackup com.domain.android.app_name +# uninstall and reinstall the app +$adb shell bmgr restore com.domain.android.app_name ```

Use ADB over Wi-Fi without extra application or software

From e3188711129e45639ad11beab4671fa009e3c7d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 26 Jun 2015 10:36:17 +0200 Subject: [PATCH 13/46] naming refactor due to sh style (markdown) --- README.md | 180 +++++++++++++++++++++++++++--------------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/README.md b/README.md index 64393b6..e958ea6 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,13 @@ Summary: In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate): __Debug KeyStore__ -``` +```sh keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -// or +# or keytool -list -v -keystore {path_to_keystore}/debug.keystore -alias androiddebugkey -storepass android -keypass android ``` __Release KeyStore__ -``` +```sh keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alias_name} -storepass {store_pass} -keypass {keypass} ``` @@ -27,89 +27,89 @@ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alias_ ### ADB

View connected devices

-``` -adb devices +```sh +$adb devices ``` If multiple devices are attached, use `adb -s DEVICE_ID` to target a specific device

Install an application

-``` -adb install -r file.apk -// Optional -r argument reinstalls and keeps any data if the application is already installed on the device +```sh +$adb install -r file.apk +# optional -r argument reinstalls and keeps any data if the application is already installed on the device ```

Uninstall an application

-``` -adb uninstall com.package.name +```sh +$adb uninstall com.package.name ``` To uninstall the application using uninstall dialog: -``` -adb shell am start -a android.intent.action.DELETE -d package:com.package.name +```sh +$adb shell am start -a android.intent.action.DELETE -d package:com.package.name ```

Start an activity

-``` -adb shell am start -n com.package.name/.ActivityName -adb shell am start -n com.package.name/com.package.name.ActivityName +```sh +$adb shell am start -n com.package.name/.ActivityName +$adb shell am start -n com.package.name/com.package.name.ActivityName ```

Take a screenshot

-``` -adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen_name.png +```sh +$adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen_name.png ``` Explanation of this command, [here](http://blog.shvetsov.com/2013/02/grab-android-screenshot-to-computer-via.html)

Power button

-``` -adb shell input keyevent 26 -adb shell inout text "KEYCODE_POWER" +```sh +$adb shell input keyevent 26 +$adb shell inout text "KEYCODE_POWER" ``` This command sends the power button event to turn the device ON/OFF

Unlock screen

-``` -adb shell input keyevent 82 -adb shell inout text "KEYCODE_MENU" +```sh +$adb shell input keyevent 82 +$adb shell inout text "KEYCODE_MENU" ``` This command sends the event that unlocks the lockscreen on the device. It can be combined with the power button command above to turn on and unlock the device -``` -adb shell input keyevent 26 82 -adb shell inout text "KEYCODE_POWER" "KEYCODE_MENU" +```sh +$adb shell input keyevent 26 82 +$adb shell inout text "KEYCODE_POWER" "KEYCODE_MENU" ```

Print all installed packages

-``` -adb shell pm list packages -f +```sh +$adb shell pm list packages -f ```

Simulate application being killed

-``` -// 1 - Exit your app using home button -// 2 - After that -adb shell ps // Find the process id -adb shell ps | grep your.app.package // Then find the line with app name package -adb shell kill -9 21997 // Kill the app by PID -// 3 - Now return to the app using the task switcher +```sh +# exit your app using home button +# after that +$adb shell ps // Find the process id +$adb shell ps | grep your.app.package // Then find the line with app name package +$adb shell kill -9 21997 // Kill the app by PID +# now return to the app using the task switcher ```

Screen recording using Android 4.4

-``` -adb shell screenrecord --verbose /sdcard/nexus5.mp4 // Basic recording from shell -// Press Ctrl-C to stop -screenrecord --verbose --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds -screenrecord --verbose --bit-rate 8000000 --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds with 8Mbps bitrate -screenrecord --verbose --rotate /sdcard/nexus5.mp4 // Record in portrait view / horizontal +```sh +$adb shell screenrecord --verbose /sdcard/nexus5.mp4 // Basic recording from shell +# press Ctrl-C to stop +$screenrecord --verbose --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds +$screenrecord --verbose --bit-rate 8000000 --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds with 8Mbps bitrate +$screenrecord --verbose --rotate /sdcard/nexus5.mp4 // Record in portrait view / horizontal ```

Retrieve application's private data and databases for non debug application without root access

-``` -// Get a backup of your application data -adb backup --apk com.package.name -// Change the .ab in .tar -dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar -// Untar backup.tar +```sh +# get a backup of your application data +$adb backup --apk com.package.name +# Change the .ab in .tar +$dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar +# untar backup.tar tar xfv backup.tar -// Go in you app private dir -cd apps/com.package.name +# go in you app private dir +$cd apps/com.package.name ``` > You'll need : > - adb activated @@ -120,12 +120,12 @@ cd apps/com.package.name

Check Battery Stats

```sh $adb shell dumpsys batterystats -# Global and per-UID statistics +# global and per-UID statistics # options: --help ```

Auto Backup Data (Only in Android M)

-``` +```sh $adb shell bmgr $adb shell bmgr run @@ -140,71 +140,71 @@ __Prerequisites__ Android device and computer should be connected in same network. * Connect Android device with USB cable to computer * Use following command in terminal to make sure adb is running in USB mode. -``` +```sh $adb usb -// Restarting in USB mode -// Connect to the device over USB. +# restarting in USB mode +# connect to the device over USB. ``` * Execute following command in terminal to make sure adb identify/list gets connected with the device. -``` +```sh $adb devices ``` * Change adb mode from USB to tcpip using following command. -``` +```sh $adb tcpip 5555 -// Restarting in TCP mode port: 5555 +# restarting in TCP mode port: 5555 ``` * Now, adb is running over TCP/IP mode, Let’s find IP address of Android device. Go to Settings in Android device -> About -> Status -> IP address. note down the IP address of connected Android Device. * Use following command to connect ADB with IP address -``` +```sh $adb connect #.#.#.# -// Connected to #.#.#.#:5555 +# connected to #.#.#.#:5555 ``` * Now adb is working over Wi-fi, You can remove USB cable from Android device. * To confirm adb is working over Wi-fi and your device is still connect. you can use following command -``` +```sh $adb devices -#.#.#.#:5555 device +*.*.*.*:5555 device ``` You’re now ready to go!, Enjoy ADB over Wi-fi. Use following command to change ADB mode to USB -``` +```sh $adb usb ```

Filter by tagname in logcat

-``` -adb logcat -s TAG_NAME -adb logcat -s TAG_NAME_1 TAG_NAME_2 +```sh +$adb logcat -s TAG_NAME +$adb logcat -s TAG_NAME_1 TAG_NAME_2 ```

Filter by priority in logcat

-``` -adb logcat "*:" +```sh +$adb logcat "*:" // Where can be V (Verbose), D (Debug), I (Info), W (Warning), E (Error), F (Fatal), S (Silent) ``` It can be combined with tagname command, to filter by tagname and priority -``` -adb logcat -s TEST: W +```sh +$adb logcat -s TEST: W ```

Filter using grep in logcat

-``` -adb logcat | grep "term" -adb logcat | grep "term1\|term2" +```sh +$adb logcat | grep "term" +$adb logcat | grep "term1\|term2" ````

See the executed SQL statements in plain text in logcat

-``` -adb shell setprop log.tag.SQLiteLog V -adb shell setprop log.tag.SQLiteStatements V -adb shell stop -adb shell start +```sh +$adb shell setprop log.tag.SQLiteLog V +$adb shell setprop log.tag.SQLiteStatements V +$adb shell stop +$adb shell start ``` That's it. Whenever any of the installed apps now accesses the database you should see the executed statement in the log output. @@ -212,19 +212,19 @@ That's it. Whenever any of the installed apps now accesses the database you shou The Monkey is a program that runs on your emulator or device and generates pseudo-random streams of user events such as clicks, touches, or gestures, as well as a number of system-level events. You can use the Monkey to stress-test applications that you are developing, in a random yet repeatable manner. -``` -adb shell monkey [options] -// Basic, make 500 random actions -adb shell monkey -p your.package.name -v 500 +```sh +$adb shell monkey [options] +# basic, make 500 random actions +$adb shell monkey -p your.package.name -v 500 ``` Complete information at http://developer.android.com/tools/help/monkey.html

Indentify Frame Rate Issues (Dumpsys)

-``` -cd platform-tools/ -// Before executing next command, go to Settings --> Developer Options --> Enable Profile GPU rendering option -// And make sure to kill your application first or at least to kill the window that you want to profile, and then you run the command: -adb shell dumpsys gfxinfo +```sh +$cd platform-tools/ +# before executing next command, go to Settings --> Developer Options --> Enable Profile GPU rendering option +# and make sure to kill your application first or at least to kill the window that you want to profile, and then you run the command: +$adb shell dumpsys gfxinfo ``` Purpose of Dumpsys is identifying frame rate issues and fix them. @@ -239,8 +239,8 @@ This is the data you can grab. You can create a stack graph, so every bar contai * The blue part is your code. When you write your Java code, your `onDraw()` method, and this is where you can do most of the optimizations There is a distinction between the GPU composition with frame buffers and overlays. So you can use a tool called __dumpsys surface flinger__ to see the state of overlays and frame buffers in the system. -``` -adb shell dumpsys SurfaceFlinger +```sh +$adb shell dumpsys SurfaceFlinger ``` You're going to get a list with all the windows currently visible on the screen. @@ -252,10 +252,10 @@ More info about this tool, [here](https://www.youtube.com/watch?v=Q8m9sHdyXnE#t= __DB Getter (Script)__ [by Ignasi](https://gist.github.com/ignasi) -``` +```sh #!/bin/bash -# Android 4.3+ changes app's internal directory permissions and you can not just pull your +# android 4.3+ changes app's internal directory permissions and you can not just pull your # databases to your computer, so this is a workaround to extract your databases. # I only use it for debug, use it under YOUR responsability. IT REQUIRES ROOT From 56f323220ff9ebea6b461d4ad4844edcd955decd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 26 Jun 2015 14:29:18 +0200 Subject: [PATCH 14/46] Update README.md added fingerprint simulation --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e958ea6..4d9af15 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ $adb shell dumpsys batterystats # options: --help ``` -

Auto Backup Data (Only in Android M)

+

Auto Backup Data (only in Android M)

```sh $adb shell bmgr @@ -135,6 +135,11 @@ $adb shell bmgr fullbackup com.domain.android.app_name $adb shell bmgr restore com.domain.android.app_name ``` +

Simulate fingerprint inputs (only in Android M)

+```sh +$ adb -e emu finger touch 1 +``` +

Use ADB over Wi-Fi without extra application or software

__Prerequisites__ Android device and computer should be connected in same network. From 5d4f71b936e37bda6d510a8dfe63453c2266cce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 26 Jun 2015 15:30:15 +0200 Subject: [PATCH 15/46] small refactor adding console spacings in instructions --- README.md | 113 +++++++++++++++++++++++++++--------------------------- 1 file changed, 56 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 4d9af15..6f58bfa 100644 --- a/README.md +++ b/README.md @@ -3,24 +3,23 @@ AndroidShell (Mac Os Commands) Summary:
-SHA1
-
ADB
-
Database
+*
SHA1
+*
ADB
+*
Database

-
-### SHA1 +### SHA1 In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate): __Debug KeyStore__ ```sh -keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android +$ keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android # or -keytool -list -v -keystore {path_to_keystore}/debug.keystore -alias androiddebugkey -storepass android -keypass android +$ keytool -list -v -keystore {path_to_keystore}/debug.keystore -alias androiddebugkey -storepass android -keypass android ``` __Release KeyStore__ ```sh -keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alias_name} -storepass {store_pass} -keypass {keypass} +$ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alias_name} -storepass {store_pass} -keypass {keypass} ``` @@ -28,88 +27,88 @@ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alias_

View connected devices

```sh -$adb devices +$ adb devices ``` If multiple devices are attached, use `adb -s DEVICE_ID` to target a specific device

Install an application

```sh -$adb install -r file.apk +$ adb install -r file.apk # optional -r argument reinstalls and keeps any data if the application is already installed on the device ```

Uninstall an application

```sh -$adb uninstall com.package.name +$ adb uninstall com.package.name ``` To uninstall the application using uninstall dialog: ```sh -$adb shell am start -a android.intent.action.DELETE -d package:com.package.name +$ adb shell am start -a android.intent.action.DELETE -d package:com.package.name ```

Start an activity

```sh -$adb shell am start -n com.package.name/.ActivityName +$ adb shell am start -n com.package.name/.ActivityName $adb shell am start -n com.package.name/com.package.name.ActivityName ```

Take a screenshot

```sh -$adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen_name.png +$ adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen_name.png ``` Explanation of this command, [here](http://blog.shvetsov.com/2013/02/grab-android-screenshot-to-computer-via.html)

Power button

```sh -$adb shell input keyevent 26 -$adb shell inout text "KEYCODE_POWER" +$ adb shell input keyevent 26 +$ adb shell inout text "KEYCODE_POWER" ``` This command sends the power button event to turn the device ON/OFF

Unlock screen

```sh -$adb shell input keyevent 82 -$adb shell inout text "KEYCODE_MENU" +$ adb shell input keyevent 82 +$ adb shell inout text "KEYCODE_MENU" ``` This command sends the event that unlocks the lockscreen on the device. It can be combined with the power button command above to turn on and unlock the device ```sh -$adb shell input keyevent 26 82 -$adb shell inout text "KEYCODE_POWER" "KEYCODE_MENU" +$ adb shell input keyevent 26 82 +$ adb shell inout text "KEYCODE_POWER" "KEYCODE_MENU" ```

Print all installed packages

```sh -$adb shell pm list packages -f +$ adb shell pm list packages -f ```

Simulate application being killed

```sh # exit your app using home button # after that -$adb shell ps // Find the process id -$adb shell ps | grep your.app.package // Then find the line with app name package -$adb shell kill -9 21997 // Kill the app by PID +$ adb shell ps // Find the process id +$ adb shell ps | grep your.app.package // Then find the line with app name package +$ adb shell kill -9 21997 // Kill the app by PID # now return to the app using the task switcher ```

Screen recording using Android 4.4

```sh -$adb shell screenrecord --verbose /sdcard/nexus5.mp4 // Basic recording from shell +$ adb shell screenrecord --verbose /sdcard/nexus5.mp4 // Basic recording from shell # press Ctrl-C to stop -$screenrecord --verbose --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds -$screenrecord --verbose --bit-rate 8000000 --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds with 8Mbps bitrate -$screenrecord --verbose --rotate /sdcard/nexus5.mp4 // Record in portrait view / horizontal +$ screenrecord --verbose --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds +$ screenrecord --verbose --bit-rate 8000000 --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds with 8Mbps bitrate +$ screenrecord --verbose --rotate /sdcard/nexus5.mp4 // Record in portrait view / horizontal ```

Retrieve application's private data and databases for non debug application without root access

```sh # get a backup of your application data -$adb backup --apk com.package.name +$ adb backup --apk com.package.name # Change the .ab in .tar -$dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar +$ dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar # untar backup.tar tar xfv backup.tar # go in you app private dir -$cd apps/com.package.name +$ cd apps/com.package.name ``` > You'll need : > - adb activated @@ -119,20 +118,20 @@ $cd apps/com.package.name

Check Battery Stats

```sh -$adb shell dumpsys batterystats +$ adb shell dumpsys batterystats # global and per-UID statistics # options: --help ```

Auto Backup Data (only in Android M)

```sh -$adb shell bmgr +$ adb shell bmgr -$adb shell bmgr run +$ adb shell bmgr run # do some work in the app -$adb shell bmgr fullbackup com.domain.android.app_name +$ adb shell bmgr fullbackup com.domain.android.app_name # uninstall and reinstall the app -$adb shell bmgr restore com.domain.android.app_name +$ adb shell bmgr restore com.domain.android.app_name ```

Simulate fingerprint inputs (only in Android M)

@@ -146,70 +145,70 @@ Android device and computer should be connected in same network. * Connect Android device with USB cable to computer * Use following command in terminal to make sure adb is running in USB mode. ```sh -$adb usb +$ adb usb # restarting in USB mode # connect to the device over USB. ``` * Execute following command in terminal to make sure adb identify/list gets connected with the device. ```sh -$adb devices +$ adb devices ``` * Change adb mode from USB to tcpip using following command. ```sh -$adb tcpip 5555 +$ adb tcpip 5555 # restarting in TCP mode port: 5555 ``` * Now, adb is running over TCP/IP mode, Let’s find IP address of Android device. Go to Settings in Android device -> About -> Status -> IP address. note down the IP address of connected Android Device. * Use following command to connect ADB with IP address ```sh -$adb connect #.#.#.# +$ adb connect #.#.#.# # connected to #.#.#.#:5555 ``` * Now adb is working over Wi-fi, You can remove USB cable from Android device. * To confirm adb is working over Wi-fi and your device is still connect. you can use following command ```sh -$adb devices +$ adb devices *.*.*.*:5555 device ``` You’re now ready to go!, Enjoy ADB over Wi-fi. Use following command to change ADB mode to USB ```sh -$adb usb +$ adb usb ```

Filter by tagname in logcat

```sh -$adb logcat -s TAG_NAME -$adb logcat -s TAG_NAME_1 TAG_NAME_2 +$ adb logcat -s TAG_NAME +$ adb logcat -s TAG_NAME_1 TAG_NAME_2 ```

Filter by priority in logcat

```sh -$adb logcat "*:" +$ adb logcat "*:" // Where can be V (Verbose), D (Debug), I (Info), W (Warning), E (Error), F (Fatal), S (Silent) ``` It can be combined with tagname command, to filter by tagname and priority ```sh -$adb logcat -s TEST: W +$ adb logcat -s TEST: W ```

Filter using grep in logcat

```sh -$adb logcat | grep "term" -$adb logcat | grep "term1\|term2" +$ adb logcat | grep "term" +$ adb logcat | grep "term1\|term2" ````

See the executed SQL statements in plain text in logcat

```sh -$adb shell setprop log.tag.SQLiteLog V -$adb shell setprop log.tag.SQLiteStatements V -$adb shell stop -$adb shell start +$ adb shell setprop log.tag.SQLiteLog V +$ adb shell setprop log.tag.SQLiteStatements V +$ adb shell stop +$ adb shell start ``` That's it. Whenever any of the installed apps now accesses the database you should see the executed statement in the log output. @@ -218,18 +217,18 @@ That's it. Whenever any of the installed apps now accesses the database you shou The Monkey is a program that runs on your emulator or device and generates pseudo-random streams of user events such as clicks, touches, or gestures, as well as a number of system-level events. You can use the Monkey to stress-test applications that you are developing, in a random yet repeatable manner. ```sh -$adb shell monkey [options] +$ adb shell monkey [options] # basic, make 500 random actions -$adb shell monkey -p your.package.name -v 500 +$ adb shell monkey -p your.package.name -v 500 ``` Complete information at http://developer.android.com/tools/help/monkey.html

Indentify Frame Rate Issues (Dumpsys)

```sh -$cd platform-tools/ +$ cd platform-tools/ # before executing next command, go to Settings --> Developer Options --> Enable Profile GPU rendering option # and make sure to kill your application first or at least to kill the window that you want to profile, and then you run the command: -$adb shell dumpsys gfxinfo +$ adb shell dumpsys gfxinfo ``` Purpose of Dumpsys is identifying frame rate issues and fix them. @@ -245,7 +244,7 @@ This is the data you can grab. You can create a stack graph, so every bar contai There is a distinction between the GPU composition with frame buffers and overlays. So you can use a tool called __dumpsys surface flinger__ to see the state of overlays and frame buffers in the system. ```sh -$adb shell dumpsys SurfaceFlinger +$ adb shell dumpsys SurfaceFlinger ``` You're going to get a list with all the windows currently visible on the screen. From aed86d533ba27a53a541ddfd4c767da4f06c7cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Sun, 13 Sep 2015 13:35:15 +0200 Subject: [PATCH 16/46] added strictmode adb command --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 6f58bfa..bf772c2 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,19 @@ $ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alia
### ADB +

Watching StrictMode

+ +If you’re using `penaltyLog()`, the default, just run +```sh +adb logcat +``` +and watch the terminal output. Any violations will be logged to your console, slightly rate-limited for duplicate elimination. + +If you want to get fancier, turn on `penaltyDropbox()` and they’ll be written to the DropBoxManager, where you can extract them later with +```sh +adb shell dumpsys dropbox data_app_strictmode --print +``` +

View connected devices

```sh $ adb devices From ca217926b1ab06f6b310bbf93a9333dee53b6a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 28 Sep 2015 11:29:22 +0200 Subject: [PATCH 17/46] added instruction to find out what processor does an android device have inside --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index bf772c2..5ff2bd7 100644 --- a/README.md +++ b/README.md @@ -236,6 +236,11 @@ $ adb shell monkey -p your.package.name -v 500 ``` Complete information at http://developer.android.com/tools/help/monkey.html +

Find out processor version on Android Device (check if it's an ARM, for example)

+```sh +$ adb shell cat /proc/cpuinfo +``` +

Indentify Frame Rate Issues (Dumpsys)

```sh $ cd platform-tools/ From cccc9985a5c18f87cfd99925b82eeb301e4502a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Wed, 4 Nov 2015 02:54:10 +0100 Subject: [PATCH 18/46] Update README.md refactored file --- README.md | 338 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 209 insertions(+), 129 deletions(-) diff --git a/README.md b/README.md index 5ff2bd7..b0811b1 100644 --- a/README.md +++ b/README.md @@ -1,251 +1,311 @@ -AndroidShell (Mac Os Commands) -============================= - -Summary: -
-* SHA1
-*
ADB
-*
Database
+# AndroidShell (Mac Os Commands) + +#### Table of Contents + +-
__SHA-1__ + - __Debug Keystore__ + - __Release Keystore__ +- __ADB__ + - __Database__ + - __Watching StrictMode__ + - __View connected devices__ + - __Install an application__ + - __Uninstall an application__ + - __Start an Activity__ + - __Take an screenshot__ + - __Power button__ + - __Unlock screen__ + - __Print all installed packages__ + - __Simulate application being killed__ + - __Screen recording using Android 4.4__ + - __Check battery stats__ + - __Auto Backup Data (only in Android M)__ + - __Simulate fingerprint inputs (only in Android M)__ + - __Filter by tagname in Logcat__ + - __Filter by priority in Logcat__ + - __Filter using grep in Logcat__ + - __See the executed SQL statements in plain text in Logcat__ + - __Testing - Execute Monkey to test user interaction__ + - __Find out processor version on Android Device (check if it's an ARM, for example)__ + - __Retrieve application's private data and databases for non debug application without root access__ + - __Indentify Frame Rate Issues (Dumpsys)__ + - __Use ADB over Wi-Fi without extra application or software__ +
-### SHA1 + +### SHA-1 In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate): -__Debug KeyStore__ + +#### Debug KeyStore ```sh $ keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -# or +``` +or + +```sh $ keytool -list -v -keystore {path_to_keystore}/debug.keystore -alias androiddebugkey -storepass android -keypass android ``` -__Release KeyStore__ + +#### Release KeyStore ```sh $ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alias_name} -storepass {store_pass} -keypass {keypass} ``` +
+
-### ADB +### ADB -

Watching StrictMode

+ +#### Database + +[__This__](https://gist.github.com/ignasi is a Database getter script, developed by [__Ignasi__](https://github.com/ignasi) +```sh +#!/bin/bash + +# android 4.3+ changes app's internal directory permissions and you can not just pull your +# databases to your computer, so this is a workaround to extract your databases. +# I only use it for debug, use it under YOUR responsability. IT REQUIRES ROOT + +package=$1 +db_name=$2 +path="/data/data/$package/" + +rm $db_name +adb shell "su -c 'cd $path; chmod -R 777 databases; exit'; exit" +adb pull $path/databases/$db_name +open $db_name +``` + + +#### Watching StrictMode If you’re using `penaltyLog()`, the default, just run ```sh -adb logcat +$ adb logcat ``` and watch the terminal output. Any violations will be logged to your console, slightly rate-limited for duplicate elimination. If you want to get fancier, turn on `penaltyDropbox()` and they’ll be written to the DropBoxManager, where you can extract them later with ```sh -adb shell dumpsys dropbox data_app_strictmode --print +$ adb shell dumpsys dropbox data_app_strictmode --print ``` -

View connected devices

+
+#### View connected device + ```sh $ adb devices ``` If multiple devices are attached, use `adb -s DEVICE_ID` to target a specific device -

Install an application

+
+#### Install an application + ```sh $ adb install -r file.apk -# optional -r argument reinstalls and keeps any data if the application is already installed on the device +# Optional -r argument reinstalls and keeps any data if the application is already installed on the device. ``` -

Uninstall an application

+
+#### Uninstall an application + ```sh $ adb uninstall com.package.name ``` + To uninstall the application using uninstall dialog: ```sh $ adb shell am start -a android.intent.action.DELETE -d package:com.package.name ``` -

Start an activity

+
+#### Start an Activity + ```sh $ adb shell am start -n com.package.name/.ActivityName -$adb shell am start -n com.package.name/com.package.name.ActivityName +$ adb shell am start -n com.package.name/com.package.name.ActivityName ``` -

Take a screenshot

+ +
+#### Take an screenshot + ```sh $ adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen_name.png ``` -Explanation of this command, [here](http://blog.shvetsov.com/2013/02/grab-android-screenshot-to-computer-via.html) -

Power button

+Explanation of this command, [__here__](http://blog.shvetsov.com/2013/02/grab-android-screenshot-to-computer-via.html) + +
+#### Power button + +This command sends the power button event to turn the device ON/OFF. ```sh $ adb shell input keyevent 26 $ adb shell inout text "KEYCODE_POWER" ``` -This command sends the power button event to turn the device ON/OFF -

Unlock screen

+
+#### Unlock screen + +This command sends the event that unlocks the lockscreen on the device. It can be combined with the power button command above to turn on and unlock the device + ```sh $ adb shell input keyevent 82 $ adb shell inout text "KEYCODE_MENU" -``` -This command sends the event that unlocks the lockscreen on the device. It can be combined with the power button command above to turn on and unlock the device -```sh + $ adb shell input keyevent 26 82 $ adb shell inout text "KEYCODE_POWER" "KEYCODE_MENU" ``` -

Print all installed packages

+
+#### Print all installed packages + ```sh $ adb shell pm list packages -f ``` -

Simulate application being killed

+
+#### Simulate application being killed + ```sh # exit your app using home button -# after that +# After that. $ adb shell ps // Find the process id $ adb shell ps | grep your.app.package // Then find the line with app name package $ adb shell kill -9 21997 // Kill the app by PID -# now return to the app using the task switcher +# Now return to the app using the task switcher. ``` -

Screen recording using Android 4.4

+
+#### Screen recording using Android 4.4 + ```sh $ adb shell screenrecord --verbose /sdcard/nexus5.mp4 // Basic recording from shell -# press Ctrl-C to stop +# Press Ctrl-C to stop. $ screenrecord --verbose --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds $ screenrecord --verbose --bit-rate 8000000 --time-limit 30 /sdcard/nexus5.mp4 // Recording for 30 seconds with 8Mbps bitrate $ screenrecord --verbose --rotate /sdcard/nexus5.mp4 // Record in portrait view / horizontal ``` -

Retrieve application's private data and databases for non debug application without root access

-```sh -# get a backup of your application data -$ adb backup --apk com.package.name -# Change the .ab in .tar -$ dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar -# untar backup.tar -tar xfv backup.tar -# go in you app private dir -$ cd apps/com.package.name -``` -> You'll need : -> - adb activated -> - physical access to unlocked device -> - works on Nexus 5 at least, might not work with other devices. -> __allowBackup=false will break thos method__ +
+#### Check battery stats -

Check Battery Stats

```sh $ adb shell dumpsys batterystats -# global and per-UID statistics -# options: --help +# Global and per-UID statistics. +# Options: --help. ``` -

Auto Backup Data (only in Android M)

+
+#### Auto Backup Data (only in Android M) + ```sh $ adb shell bmgr $ adb shell bmgr run -# do some work in the app +# Do some work in the app. $ adb shell bmgr fullbackup com.domain.android.app_name -# uninstall and reinstall the app +# Uninstall and reinstall the app. $ adb shell bmgr restore com.domain.android.app_name ``` -

Simulate fingerprint inputs (only in Android M)

-```sh -$ adb -e emu finger touch 1 -``` - -

Use ADB over Wi-Fi without extra application or software

-__Prerequisites__ -Android device and computer should be connected in same network. -* Connect Android device with USB cable to computer -* Use following command in terminal to make sure adb is running in USB mode. -```sh -$ adb usb -# restarting in USB mode -# connect to the device over USB. -``` - -* Execute following command in terminal to make sure adb identify/list gets connected with the device. -```sh -$ adb devices -``` - -* Change adb mode from USB to tcpip using following command. -```sh -$ adb tcpip 5555 -# restarting in TCP mode port: 5555 -``` +
+#### Simulate fingerprint inputs (only in Android M) -* Now, adb is running over TCP/IP mode, Let’s find IP address of Android device. Go to Settings in Android device -> About -> Status -> IP address. note down the IP address of connected Android Device. -* Use following command to connect ADB with IP address ```sh -$ adb connect #.#.#.# -# connected to #.#.#.#:5555 -``` - -* Now adb is working over Wi-fi, You can remove USB cable from Android device. -* To confirm adb is working over Wi-fi and your device is still connect. you can use following command -```sh -$ adb devices -*.*.*.*:5555 device +$ adb -e emu finger touch 1 ``` -You’re now ready to go!, Enjoy ADB over Wi-fi. -Use following command to change ADB mode to USB -```sh -$ adb usb -``` + +#### Filter by tagname in Logcat -

Filter by tagname in logcat

```sh $ adb logcat -s TAG_NAME $ adb logcat -s TAG_NAME_1 TAG_NAME_2 ``` -

Filter by priority in logcat

+
+#### Filter by priority in Logcat + ```sh $ adb logcat "*:" -// Where can be V (Verbose), D (Debug), I (Info), W (Warning), E (Error), F (Fatal), S (Silent) +# Where can be V (Verbose), D (Debug), I (Info), W (Warning), E (Error), F (Fatal), S (Silent). ``` + It can be combined with tagname command, to filter by tagname and priority ```sh $ adb logcat -s TEST: W ``` -

Filter using grep in logcat

+
+#### Filter using grep in Logcat + ```sh $ adb logcat | grep "term" $ adb logcat | grep "term1\|term2" ```` -

See the executed SQL statements in plain text in logcat

+
+#### See the executed SQL statements in plain text in Logcat + ```sh $ adb shell setprop log.tag.SQLiteLog V $ adb shell setprop log.tag.SQLiteStatements V $ adb shell stop $ adb shell start ``` + That's it. Whenever any of the installed apps now accesses the database you should see the executed statement in the log output. -

Testing - Execute Monkey to test user interaction

+
+#### Testing - Execute Monkey to test user interaction The Monkey is a program that runs on your emulator or device and generates pseudo-random streams of user events such as clicks, touches, or gestures, as well as a number of system-level events. You can use the Monkey to stress-test applications that you are developing, in a random yet repeatable manner. ```sh $ adb shell monkey [options] -# basic, make 500 random actions +# Basic, make 500 random actions. $ adb shell monkey -p your.package.name -v 500 ``` + Complete information at http://developer.android.com/tools/help/monkey.html -

Find out processor version on Android Device (check if it's an ARM, for example)

+
+#### Find out processor version on Android Device (check if it's an ARM, for example) + ```sh $ adb shell cat /proc/cpuinfo ``` -

Indentify Frame Rate Issues (Dumpsys)

+
+#### Retrieve application's private data and databases for non debug application without root access + +```sh +# Get a backup of your application data. +$ adb backup --apk com.package.name +# Change the .ab in .tar. +$ dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar +# Untar backup.tar. +tar xfv backup.tar +# Go in you app private dir. +$ cd apps/com.package.name +``` +> You'll need : +> - adb activated +> - physical access to unlocked device +> - works on Nexus 5 at least, might not work with other devices. +> __allowBackup=false will break thos method__ + + +#### Indentify Frame Rate Issues (Dumpsys) + ```sh $ cd platform-tools/ -# before executing next command, go to Settings --> Developer Options --> Enable Profile GPU rendering option -# and make sure to kill your application first or at least to kill the window that you want to profile, and then you run the command: +# Before executing next command, go to Settings --> Developer Options --> Enable Profile GPU rendering option. +# And make sure to kill your application first or at least to kill the window that you want to profile, and then you run the command: $ adb shell dumpsys gfxinfo ``` Purpose of Dumpsys is identifying frame rate issues and fix them. @@ -267,28 +327,48 @@ $ adb shell dumpsys SurfaceFlinger You're going to get a list with all the windows currently visible on the screen. -More info about this tool, [here](https://www.youtube.com/watch?v=Q8m9sHdyXnE#t=2469) +More info about this tool, [__here__](https://www.youtube.com/watch?v=Q8m9sHdyXnE#t=2469) + + +#### Use ADB over Wi-Fi without extra application or software + +__Prerequisites__ +Android device and computer should be connected in same network. +* Connect Android device with USB cable to computer +* Use following command in terminal to make sure adb is running in USB mode. +```sh +$ adb usb +# Restarting in USB mode. +# Connect to the device over USB. +``` - -### Database +* Execute following command in terminal to make sure adb identify/list gets connected with the device. +```sh +$ adb devices +``` -__DB Getter (Script)__ [by Ignasi](https://gist.github.com/ignasi) +* Change adb mode from USB to tcpip using following command. +```sh +$ adb tcpip 5555 +# Restarting in TCP mode port: 5555. +``` +* Now, adb is running over TCP/IP mode, Let’s find IP address of Android device. Go to Settings in Android device -> About -> Status -> IP address. note down the IP address of connected Android Device. +* Use following command to connect ADB with IP address ```sh -#!/bin/bash - -# android 4.3+ changes app's internal directory permissions and you can not just pull your -# databases to your computer, so this is a workaround to extract your databases. -# I only use it for debug, use it under YOUR responsability. IT REQUIRES ROOT - -package=$1 -db_name=$2 -path="/data/data/$package/" - -rm $db_name -adb shell "su -c 'cd $path; chmod -R 777 databases; exit'; exit" -adb pull $path/databases/$db_name -open $db_name +$ adb connect #.#.#.# +# Connected to #.#.#.#:5555. ``` +* Now adb is working over Wi-fi, You can remove USB cable from Android device. +* To confirm adb is working over Wi-fi and your device is still connect. you can use following command +```sh +$ adb devices +*.*.*.*:5555 device +``` +You’re now ready to go!, Enjoy ADB over Wi-fi. +Use following command to change ADB mode to USB +```sh +$ adb usb +``` From 80a493d6905b62f3b76ddb4638da99fb843d5c5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Wed, 4 Nov 2015 02:57:21 +0100 Subject: [PATCH 19/46] Update README.md fixed bugs --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b0811b1..9fc9588 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ or $ keytool -list -v -keystore {path_to_keystore}/debug.keystore -alias androiddebugkey -storepass android -keypass android ``` + #### Release KeyStore ```sh $ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alias_name} -storepass {store_pass} -keypass {keypass} @@ -61,7 +62,7 @@ $ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alia #### Database -[__This__](https://gist.github.com/ignasi is a Database getter script, developed by [__Ignasi__](https://github.com/ignasi) +[__This__](https://gist.github.com/ignasi) is a Database getter script, developed by [__Ignasi__](https://github.com/ignasi) ```sh #!/bin/bash From a6eefc639c028b3169ef6bbf1ff3b6c0661c68ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Wed, 4 Nov 2015 17:57:54 +0100 Subject: [PATCH 20/46] Update README.md added aapt tooling and an example of use case --- README.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9fc9588..d40c1fe 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,9 @@ - __Retrieve application's private data and databases for non debug application without root access__ - __Indentify Frame Rate Issues (Dumpsys)__ - __Use ADB over Wi-Fi without extra application or software__ - +- __AAPT__ + - __Check Permissions in order to avoid Play Store app filtering__ +
@@ -373,3 +375,69 @@ Use following command to change ADB mode to USB ```sh $ adb usb ``` + +
+ +
+### AAPT + + +#### Check Permissions in order to avoid Play Store app filtering + +[__Source__](https://goo.gl/jpxeLO) + +Certain permissions also imply certain features. Google Play uses these to filter out apps just as it would with explicit requirements. Developers should __NOT__ rely on this implicit behavior, they should always declare explicitly every feature their app needs. + +__aapt__ allows us, among other things, to see the contents of an app’s manifest. This is not as easy as simply unpacking the apk and reading the manifest as you’ll find it’s in a binary format. Here is the result of running the SDK-provided aapt tool in its apk: +```sh +$ aapt dump badging com.your-app.apk +``` +Output +``` +package: name='com.germanwings.android' versionCode='3' versionName='1.0.2' sdkVersion:'10' targetSdkVersion:'17' +uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' +uses-permission:'android.permission.INTERNET' +uses-permission:'android.permission.ACCESS_FINE_LOCATION' +uses-permission:'android.permission.ACCESS_COARSE_LOCATION' +uses-permission:'com.germanwings.android.permission.C2D_MESSAGE' +uses-permission:'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS' +uses-permission:'android.permission.INTERNET' +uses-permission:'android.permission.GET_ACCOUNTS' +uses-permission:'android.permission.WAKE_LOCK' +uses-permission:'android.permission.READ_PHONE_STATE' +uses-permission:'com.google.android.c2dm.permission.RECEIVE' +uses-permission:'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS' +uses-permission:'android.permission.ACCESS_MOCK_LOCATION' +uses-permission:'android.permission.ACCESS_NETWORK_STATE' +uses-permission:'android.permission.ACCESS_GPS' +uses-permission:'android.permission.ACCESS_LOCATION' +uses-permission:'android.permission.READ_EXTERNAL_STORAGE' +application-label:'Germanwings' +application-icon-120:'res/drawable-ldpi/ic_launcher.png' +application-icon-160:'res/drawable-mdpi/ic_launcher.png' +application-icon-240:'res/drawable-hdpi/ic_launcher.png' +application-icon-320:'res/drawable-xhdpi/ic_launcher.png' +application: label='Germanwings' icon='res/drawable-mdpi/ic_launcher.png' +launchable-activity: name='com.germanwings.android.presentation.activity.DashboardActivity' label='Germanwings' icon='' +uses-feature:'android.hardware.location' +uses-implied-feature:'android.hardware.location','requested a location access permission' +uses-feature:'android.hardware.location.gps' +uses-implied-feature:'android.hardware.location.gps','requested android.permission.ACCESS_FINE_LOCATION permission' +uses-feature:'android.hardware.location.network' +uses-implied-feature:'android.hardware.location.network','requested android.permission.ACCESS_COURSE_LOCATION permission' +uses-feature:'android.hardware.touchscreen' +uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' +uses-feature:'android.hardware.screen.portrait' +uses-implied-feature:'android.hardware.screen.portrait','one or more activities have specified a portrait orientation' +main +other-activities +other-receivers +other-services +supports-screens: 'small' 'normal' 'large' 'xlarge' +supports-any-density: 'true' +locales: '--_--' +densities: '120' '160' '240' '320' +``` + + + From dd953e097a9693c0b0e5aacc0bb5e960b4cfb8b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Thu, 12 Nov 2015 10:14:19 +0100 Subject: [PATCH 21/46] Update README.md add new permissions section --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index d40c1fe..f15c181 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ - __Retrieve application's private data and databases for non debug application without root access__ - __Indentify Frame Rate Issues (Dumpsys)__ - __Use ADB over Wi-Fi without extra application or software__ + - __Test new Marshmallow permissions__ - __AAPT__ - __Check Permissions in order to avoid Play Store app filtering__ @@ -376,6 +377,18 @@ Use following command to change ADB mode to USB $ adb usb ``` + +#### Test new Marshmallow permissions + +In order to test permissions targeting API 23+, we could use following commands to programatically grant and revoke permissions on the device: +```sh +$adb pm grant +``` +or +```sh +$adb pm revoke +``` +
From 9852abf379aa3e4e89989e69ff7ab0e28b7b3613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 29 Jan 2016 16:44:50 +0000 Subject: [PATCH 22/46] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index f15c181..4354f90 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ - __See the executed SQL statements in plain text in Logcat__ - __Testing - Execute Monkey to test user interaction__ - __Find out processor version on Android Device (check if it's an ARM, for example)__ + - __Find out Application Binary Interface (ABI) in different devices__ - __Retrieve application's private data and databases for non debug application without root access__ - __Indentify Frame Rate Issues (Dumpsys)__ - __Use ADB over Wi-Fi without extra application or software__ @@ -284,6 +285,14 @@ Complete information at http://developer.android.com/tools/help/monkey.html $ adb shell cat /proc/cpuinfo ``` + +#### Find out Application Binary Interface (ABI) in different devices + +__ABI__ (Application Binary Interface) is gonna tell us if an Android device support 64-bit. So using the next command the developer know if the device is __32-bit__ or __64-bit__ based. +```sh +$ adb shell getprop ro.product.cpu.abi\ +``` + #### Retrieve application's private data and databases for non debug application without root access From 20998745a995cf0f0e5ad8f5a992348de5a822b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Sun, 3 Apr 2016 22:04:28 +0100 Subject: [PATCH 23/46] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 4354f90..0eca918 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ - __Power button__ - __Unlock screen__ - __Print all installed packages__ + - __Get the path of an installed application__ - __Simulate application being killed__ - __Screen recording using Android 4.4__ - __Check battery stats__ @@ -172,6 +173,13 @@ $ adb shell inout text "KEYCODE_POWER" "KEYCODE_MENU" $ adb shell pm list packages -f ``` + +#### Get the path of an installed application + +```sh +$ adb shell pm path app.package.application-name +``` + #### Simulate application being killed From 0cefd700c3825b5ebe759e1b01e89a4b76eca8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Sun, 3 Apr 2016 22:07:29 +0100 Subject: [PATCH 24/46] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 0eca918..20f1a5a 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ - __Install an application__ - __Uninstall an application__ - __Start an Activity__ + - __Open a deep linking intent__ - __Take an screenshot__ - __Power button__ - __Unlock screen__ @@ -135,6 +136,13 @@ $ adb shell am start -n com.package.name/.ActivityName $ adb shell am start -n com.package.name/com.package.name.ActivityName ``` + +#### Open a deep linking intent + +```sh +$ adb shell am start -n android.intent.action.VIEW -d "scheme://app/deep/linking" +``` + #### Take an screenshot From 1eae92f956dc156ea2f966263dab86afa45c20b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Sun, 3 Apr 2016 22:10:52 +0100 Subject: [PATCH 25/46] Update README.md --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 20f1a5a..f2906f5 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,11 @@ - __SHA-1__ - __Debug Keystore__ - __Release Keystore__ -- __ADB__ + - __ADB__ - __Database__ - __Watching StrictMode__ - __View connected devices__ + - __List of running services__ - __Install an application__ - __Uninstall an application__ - __Start an Activity__ @@ -106,8 +107,16 @@ $ adb shell dumpsys dropbox data_app_strictmode --print ```sh $ adb devices ``` + If multiple devices are attached, use `adb -s DEVICE_ID` to target a specific device + +#### List of running services + +```sh +$ adb shell dumpsys activity services +``` + #### Install an application From 8573d555401c4147342364db280a7f86b6f198dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 22 Apr 2016 22:53:45 +0100 Subject: [PATCH 26/46] Updated readme with Testing your app with App Standby --- README.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f2906f5..1e9fc3e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ - __SHA-1__ - __Debug Keystore__ - __Release Keystore__ - - __ADB__ +- __ADB__ - __Database__ - __Watching StrictMode__ - __View connected devices__ @@ -32,6 +32,7 @@ - __Find out processor version on Android Device (check if it's an ARM, for example)__ - __Find out Application Binary Interface (ABI) in different devices__ - __Retrieve application's private data and databases for non debug application without root access__ + - __Testing your app with App Standby__ - __Indentify Frame Rate Issues (Dumpsys)__ - __Use ADB over Wi-Fi without extra application or software__ - __Test new Marshmallow permissions__ @@ -425,6 +426,30 @@ $adb pm revoke
+ +#### Testing your app with App Standby + +[__Source__](http://developer.android.com/intl/ru/training/monitoring-device-state/doze-standby.html?utm_campaign=android_series_appstandby_012116&utm_source=medium&utm_medium=blog#testing_your_app_with_app_standby) + +To test the App Standby mode with your app: + +1- Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. +2- Connect the device to your development machine and install your app. +3- Run your app and leave it active. +4- Force the app into App Standby mode by running the following commands: +```sh +$ adb shell dumpsys battery unplug +$ adb shell am set-inactive true +``` +5- Simulate waking your app using the following commands: +```sh +$ adb shell am set-inactive false +$ adb shell am get-inactive +``` +6- Observe the behavior of your app after waking it. Make sure the app recovers gracefully from standby mode. In particular, you should check if your app's Notifications and background jobs continue to function as expected. + +
+
### AAPT From 7cfc673bccd68db604eb80b6cc307e9a1e65b0e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 22 Apr 2016 22:54:25 +0100 Subject: [PATCH 27/46] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e9fc3e..91224ce 100644 --- a/README.md +++ b/README.md @@ -32,10 +32,10 @@ - __Find out processor version on Android Device (check if it's an ARM, for example)__ - __Find out Application Binary Interface (ABI) in different devices__ - __Retrieve application's private data and databases for non debug application without root access__ - - __Testing your app with App Standby__ - __Indentify Frame Rate Issues (Dumpsys)__ - __Use ADB over Wi-Fi without extra application or software__ - __Test new Marshmallow permissions__ + - __Testing your app with App Standby__ - __AAPT__ - __Check Permissions in order to avoid Play Store app filtering__ From acae923ea710f79a24d0cb9eb008bec4fc30ad10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 22 Apr 2016 23:51:03 +0100 Subject: [PATCH 28/46] Updated readme with Testing your app with Doze --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index 91224ce..9efeefa 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ - __Use ADB over Wi-Fi without extra application or software__ - __Test new Marshmallow permissions__ - __Testing your app with App Standby__ + - __Testing your app with Doze__ - __AAPT__ - __Check Permissions in order to avoid Play Store app filtering__ @@ -450,6 +451,27 @@ $ adb shell am get-inactive
+ +#### Testing your app with Doze + +[__Source__](http://developer.android.com/intl/ru/training/monitoring-device-state/doze-standby.html?utm_campaign=android_series_appstandby_012116&utm_source=medium&utm_medium=blog#testing_your_app_with_app_standby) + +You can test Doze mode by following these steps: + +1- Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. +2- Connect the device to your development machine and install your app. +3- Run your app and leave it active. +4- Shut off the device screen. (The app remains active.) +5- Force the system to cycle through Doze modes by running the following commands: +```java +$ adb shell dumpsys battery unplug +$ adb shell dumpsys deviceidle step +``` +You may need to run the second command more than once. Repeat it until the device state changes to idle. +6- Observe the behavior of your app after you reactivate the device. Make sure the app recovers gracefully when the device exits Doze. + +
+
### AAPT From 720be51c534f925498604674e6a1338982b86639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 22 Apr 2016 23:52:45 +0100 Subject: [PATCH 29/46] Fixed broken linebreaks --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 9efeefa..34f902d 100644 --- a/README.md +++ b/README.md @@ -434,20 +434,20 @@ $adb pm revoke To test the App Standby mode with your app: -1- Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. -2- Connect the device to your development machine and install your app. -3- Run your app and leave it active. -4- Force the app into App Standby mode by running the following commands: +1. Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. +2. Connect the device to your development machine and install your app. +3. Run your app and leave it active. +4. Force the app into App Standby mode by running the following commands: ```sh $ adb shell dumpsys battery unplug $ adb shell am set-inactive true ``` -5- Simulate waking your app using the following commands: +5. Simulate waking your app using the following commands: ```sh $ adb shell am set-inactive false $ adb shell am get-inactive ``` -6- Observe the behavior of your app after waking it. Make sure the app recovers gracefully from standby mode. In particular, you should check if your app's Notifications and background jobs continue to function as expected. +6. Observe the behavior of your app after waking it. Make sure the app recovers gracefully from standby mode. In particular, you should check if your app's Notifications and background jobs continue to function as expected.
@@ -458,17 +458,17 @@ $ adb shell am get-inactive You can test Doze mode by following these steps: -1- Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. -2- Connect the device to your development machine and install your app. -3- Run your app and leave it active. -4- Shut off the device screen. (The app remains active.) -5- Force the system to cycle through Doze modes by running the following commands: +1. Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. +2. Connect the device to your development machine and install your app. +3. Run your app and leave it active. +4. Shut off the device screen. (The app remains active.) +5. Force the system to cycle through Doze modes by running the following commands: ```java $ adb shell dumpsys battery unplug $ adb shell dumpsys deviceidle step ``` You may need to run the second command more than once. Repeat it until the device state changes to idle. -6- Observe the behavior of your app after you reactivate the device. Make sure the app recovers gracefully when the device exits Doze. +6. Observe the behavior of your app after you reactivate the device. Make sure the app recovers gracefully when the device exits Doze.
From 35d6efa1797048246646e88fc20da0bc9930986a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 22 Apr 2016 23:54:43 +0100 Subject: [PATCH 30/46] Fixed broken linebreaks and section, again. --- README.md | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 34f902d..6879184 100644 --- a/README.md +++ b/README.md @@ -434,20 +434,22 @@ $adb pm revoke To test the App Standby mode with your app: -1. Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. -2. Connect the device to your development machine and install your app. -3. Run your app and leave it active. -4. Force the app into App Standby mode by running the following commands: +- Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. +- Connect the device to your development machine and install your app. +- Run your app and leave it active. +- Force the app into App Standby mode by running the following commands: ```sh $ adb shell dumpsys battery unplug $ adb shell am set-inactive true ``` -5. Simulate waking your app using the following commands: + +- Simulate waking your app using the following commands: ```sh $ adb shell am set-inactive false $ adb shell am get-inactive ``` -6. Observe the behavior of your app after waking it. Make sure the app recovers gracefully from standby mode. In particular, you should check if your app's Notifications and background jobs continue to function as expected. + +- Observe the behavior of your app after waking it. Make sure the app recovers gracefully from standby mode. In particular, you should check if your app's Notifications and background jobs continue to function as expected.
@@ -458,17 +460,19 @@ $ adb shell am get-inactive You can test Doze mode by following these steps: -1. Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. -2. Connect the device to your development machine and install your app. -3. Run your app and leave it active. -4. Shut off the device screen. (The app remains active.) -5. Force the system to cycle through Doze modes by running the following commands: +- Configure a hardware device or virtual device with an Android 6.0 (API level 23) or higher system image. +- Connect the device to your development machine and install your app. +- Run your app and leave it active. +- Shut off the device screen. (The app remains active.) +- Force the system to cycle through Doze modes by running the following commands: ```java $ adb shell dumpsys battery unplug $ adb shell dumpsys deviceidle step ``` + You may need to run the second command more than once. Repeat it until the device state changes to idle. -6. Observe the behavior of your app after you reactivate the device. Make sure the app recovers gracefully when the device exits Doze. + +- Observe the behavior of your app after you reactivate the device. Make sure the app recovers gracefully when the device exits Doze.
From a024a5a6ac1b7f8cdc7e41771cd308a0da674f84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez?= Date: Fri, 8 Jul 2016 22:28:39 +0100 Subject: [PATCH 31/46] added launchtime adb watcher --- README.md | 90 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 6879184..84d82f7 100644 --- a/README.md +++ b/README.md @@ -3,33 +3,34 @@ #### Table of Contents -
__SHA-1__ - - __Debug Keystore__ - - __Release Keystore__ + - __Debug Keystore__ + - __Release Keystore__ - __ADB__ - - __Database__ - - __Watching StrictMode__ - - __View connected devices__ - - __List of running services__ - - __Install an application__ - - __Uninstall an application__ - - __Start an Activity__ - - __Open a deep linking intent__ - - __Take an screenshot__ - - __Power button__ - - __Unlock screen__ - - __Print all installed packages__ - - __Get the path of an installed application__ - - __Simulate application being killed__ - - __Screen recording using Android 4.4__ - - __Check battery stats__ - - __Auto Backup Data (only in Android M)__ - - __Simulate fingerprint inputs (only in Android M)__ - - __Filter by tagname in Logcat__ - - __Filter by priority in Logcat__ - - __Filter using grep in Logcat__ - - __See the executed SQL statements in plain text in Logcat__ - - __Testing - Execute Monkey to test user interaction__ - - __Find out processor version on Android Device (check if it's an ARM, for example)__ + - __Show cold start Activity time__ + - __Database__ + - __Watching StrictMode__ + - __View connected devices__ + - __List of running services__ + - __Install an application__ + - __Uninstall an application__ + - __Start an Activity__ + - __Open a deep linking intent__ + - __Take an screenshot__ + - __Power button__ + - __Unlock screen__ + - __Print all installed packages__ + - __Get the path of an installed application__ + - __Simulate application being killed__ + - __Screen recording using Android 4.4__ + - __Check battery stats__ + - __Auto Backup Data (only in Android M)__ + - __Simulate fingerprint inputs (only in Android M)__ + - __Filter by tagname in Logcat__ + - __Filter by priority in Logcat__ + - __Filter using grep in Logcat__ + - __See the executed SQL statements in plain text in Logcat__ + - __Testing - Execute Monkey to test user interaction__ + - __Find out processor version on Android Device (check if it's an ARM, for example)__ - __Find out Application Binary Interface (ABI) in different devices__ - __Retrieve application's private data and databases for non debug application without root access__ - __Indentify Frame Rate Issues (Dumpsys)__ @@ -68,21 +69,33 @@ $ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alia ### ADB + +#### Show cold start Activity time + +```sh +$ adb logcat | grep "ActivityManager" +``` + +The output would be something similar to: +``` +ActivityManager: Displayed com.example.launchtime/.LaunchTime: +666ms +``` + #### Database [__This__](https://gist.github.com/ignasi) is a Database getter script, developed by [__Ignasi__](https://github.com/ignasi) ```sh #!/bin/bash - -# android 4.3+ changes app's internal directory permissions and you can not just pull your + +# android 4.3+ changes app's internal directory permissions and you can not just pull your # databases to your computer, so this is a workaround to extract your databases. # I only use it for debug, use it under YOUR responsability. IT REQUIRES ROOT - + package=$1 db_name=$2 path="/data/data/$package/" - + rm $db_name adb shell "su -c 'cd $path; chmod -R 777 databases; exit'; exit" adb pull $path/databases/$db_name @@ -92,9 +105,9 @@ open $db_name #### Watching StrictMode -If you’re using `penaltyLog()`, the default, just run +If you’re using `penaltyLog()`, the default, just run ```sh -$ adb logcat +$ adb logcat ``` and watch the terminal output. Any violations will be logged to your console, slightly rate-limited for duplicate elimination. @@ -300,7 +313,7 @@ The Monkey is a program that runs on your emulator or device and generates pseud ```sh $ adb shell monkey [options] # Basic, make 500 random actions. -$ adb shell monkey -p your.package.name -v 500 +$ adb shell monkey -p your.package.name -v 500 ``` Complete information at http://developer.android.com/tools/help/monkey.html @@ -354,7 +367,7 @@ What matter is the three columns shown. Copy paste results in a spreadsheet. And ![Image](./images/dumpsys_sample.png) -This is the data you can grab. You can create a stack graph, so every bar contains the sum of the three columns on the left in the data we output. Is the time it takes to update the display list on every frame. +This is the data you can grab. You can create a stack graph, so every bar contains the sum of the three columns on the left in the data we output. Is the time it takes to update the display list on every frame. * The middle column is called process display list. It's the time we take to draw the actual display list * The last column is the time we take to swap the buffers, so to give the buffer back to surface flinger. Scrolling or doing any kind of actions should be below 16 millisecond limit. So this app is running at 60FPS, we're vsync'd, everything is going great. You can see that most of the time, you should spend most of the time in process display list, so drawing, executing the display list should be where you spend the bulk of the time. @@ -387,7 +400,7 @@ $ adb usb $ adb devices ``` -* Change adb mode from USB to tcpip using following command. +* Change adb mode from USB to tcpip using following command. ```sh $ adb tcpip 5555 # Restarting in TCP mode port: 5555. @@ -396,7 +409,7 @@ $ adb tcpip 5555 * Now, adb is running over TCP/IP mode, Let’s find IP address of Android device. Go to Settings in Android device -> About -> Status -> IP address. note down the IP address of connected Android Device. * Use following command to connect ADB with IP address ```sh -$ adb connect #.#.#.# +$ adb connect #.#.#.# # Connected to #.#.#.#:5555. ``` @@ -420,7 +433,7 @@ In order to test permissions targeting API 23+, we could use following commands ```sh $adb pm grant ``` -or +or ```sh $adb pm revoke ``` @@ -536,6 +549,3 @@ supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240' '320' ``` - - - From 4198bde58a5a43a2005615907badb8b62e2e6785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar?= Date: Tue, 16 Aug 2016 10:43:04 +0200 Subject: [PATCH 32/46] Added test alarms section/ --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index 84d82f7..2798efa 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ - __See the executed SQL statements in plain text in Logcat__ - __Testing - Execute Monkey to test user interaction__ - __Find out processor version on Android Device (check if it's an ARM, for example)__ + - [__Test Alarms__](#test-alarms) - __Find out Application Binary Interface (ABI) in different devices__ - __Retrieve application's private data and databases for non debug application without root access__ - __Indentify Frame Rate Issues (Dumpsys)__ @@ -325,6 +326,25 @@ Complete information at http://developer.android.com/tools/help/monkey.html $ adb shell cat /proc/cpuinfo ``` +#### Test Alarms + +[__Source__](http://vitovalov.com/2016/07/18/adb-date-changer.html) + +To check the alarms that are set on the connected device and to know more about them: + +```shell +$ adb shell dumpsys alarm +``` + +To see the alarms from you app you can grep with your package keywords: +```shell +$ adb shell dumpsys alarm | grep -A 3 google +``` + +So now you can see if you have correctly implemented your alarms functionality using AlarmManager API. + +[__More info here__](http://vitovalov.com/2016/07/18/adb-date-changer.html) + #### Find out Application Binary Interface (ABI) in different devices From eab5658be3badd685c92ed09d434a7e003299d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Tue, 30 Aug 2016 07:49:52 +0100 Subject: [PATCH 33/46] Android Nightmode enabler section (adb) --- README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2798efa..a30e92c 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,9 @@ - __Test new Marshmallow permissions__ - __Testing your app with App Standby__ - __Testing your app with Doze__ -- __AAPT__ - - __Check Permissions in order to avoid Play Store app filtering__ + - __Enabling Night Mode on Android Nougat__ + - __AAPT__ + - __Check Permissions in order to avoid Play Store app filtering__
@@ -507,6 +508,17 @@ You may need to run the second command more than once. Repeat it until the devic - Observe the behavior of your app after you reactivate the device. Make sure the app recovers gracefully when the device exits Doze. +
+ + +#### Enabling Night Mode on Android Nougat + +[__Source__](http://michaelevans.org/blog/2016/08/23/enabling-night-mode-on-android-nougat/) +``` +$ adb -d shell am start --ez show_night_mode true com.android.systemui/.tuner.TunerActivity +``` + +
From f558206f213c5a1a0acd674acee56e2db05be987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Tue, 30 Aug 2016 07:50:37 +0100 Subject: [PATCH 34/46] Wrong format fixed --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a30e92c..c500283 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ - __Testing your app with App Standby__ - __Testing your app with Doze__ - __Enabling Night Mode on Android Nougat__ - - __AAPT__ +- __AAPT__ - __Check Permissions in order to avoid Play Store app filtering__
From b0cac5ba6401ef0bd13f6485a06dbbd753810559 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar?= Date: Mon, 5 Sep 2016 19:38:24 +0100 Subject: [PATCH 35/46] Added Content Provider Query section --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index c500283..ad69024 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ - __Testing - Execute Monkey to test user interaction__ - __Find out processor version on Android Device (check if it's an ARM, for example)__ - [__Test Alarms__](#test-alarms) + - [__Query a Content Provider__](#query-a-content-provider) - __Find out Application Binary Interface (ABI) in different devices__ - __Retrieve application's private data and databases for non debug application without root access__ - __Indentify Frame Rate Issues (Dumpsys)__ @@ -346,6 +347,12 @@ So now you can see if you have correctly implemented your alarms functionality u [__More info here__](http://vitovalov.com/2016/07/18/adb-date-changer.html) +#### Query a Content Provider + +```shell +$ adb shell content query --uri content://your.package.name --projection name +``` + #### Find out Application Binary Interface (ABI) in different devices From 0609374372d5df67a50ceaef5c956b5064e776fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Thu, 10 Nov 2016 15:58:31 +0100 Subject: [PATCH 36/46] Update README.md added more adb actions. --- README.md | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ad69024..c5346e0 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ - __Debug Keystore__ - __Release Keystore__ - __ADB__ + - __Server actions__ - __Show cold start Activity time__ - __Database__ - __Watching StrictMode__ @@ -72,6 +73,19 @@ $ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alia ### ADB + +### Server actions + +The following command kills the adb server: +```sh +adb kill-server +``` + +This starts the adb server: +```sh +adb start-server +``` + #### Show cold start Activity time @@ -139,8 +153,9 @@ $ adb shell dumpsys activity services #### Install an application ```sh -$ adb install -r file.apk -# Optional -r argument reinstalls and keeps any data if the application is already installed on the device. +$ adb install -r file.apk // (or com.package.name) +# optional -r argument reinstalls and keeps any data if the application is already installed on the device. +# optional -s argument installs the app on the SD card instead of the internal storage. ``` @@ -155,6 +170,12 @@ To uninstall the application using uninstall dialog: $ adb shell am start -a android.intent.action.DELETE -d package:com.package.name ``` +To keep the data in the cache directory, add `-k` + +```sh +$ adb uninstall -k com.package.name +``` + #### Start an Activity @@ -525,7 +546,6 @@ You may need to run the second command more than once. Repeat it until the devic $ adb -d shell am start --ez show_night_mode true com.android.systemui/.tuner.TunerActivity ``` -
From 5e1932dac251e1a5ec13fe5b7a67479f14f99c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Thu, 10 Nov 2016 16:31:19 +0100 Subject: [PATCH 37/46] Update README.md push and pull local files to device/emulator. --- README.md | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c5346e0..88fb188 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ - __Testing your app with App Standby__ - __Testing your app with Doze__ - __Enabling Night Mode on Android Nougat__ + - [__Copy files from/to a device/emulator__](#copy-files-emulator) - __AAPT__ - __Check Permissions in order to avoid Play Store app filtering__ @@ -74,7 +75,7 @@ $ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alia ### ADB -### Server actions +#### Server actions The following command kills the adb server: ```sh @@ -548,6 +549,35 @@ $ adb -d shell am start --ez show_night_mode true com.android.systemui/.tuner.Tu
+
+##### Copy files from/to a device/emulator + +[__Source__](http://crushingcode.co/do-you-like-to-adb/) + +To push a file/dir to device: +```sh +$ adb push +``` +where `` is file in your local system i.e my_image.png and `` is file location in device/emulator i.e `/sdcard/Downloads/my_image.png` + +Sample: +```sh +$ adb push ~/Downloads/my_image.png /sdcard/Downloads/my_image.png +``` +To pull a file/dir from device + +```sh +$ adb pull [] +``` +where `` is file in your local system i.e my_image.png and `` is file location in device/emulator i.e `/sdcard/Downloads/my_image.png`. + +Sample: +```sh +adb pull /sdcard/Downloads/my_image.png my_image.png +``` + +
+
### AAPT From a09406ce7d7c613e61c299119a36ac580b07b1fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 9 Dec 2016 11:42:43 +0000 Subject: [PATCH 38/46] Update README.md Added device selection instructions. --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 88fb188..1bffd31 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ - __Debug Keystore__ - __Release Keystore__ - __ADB__ + - [__Select a device when multiple devices are connected__](#select-a-device-when-multiple-devices-are-connected) - __Server actions__ - __Show cold start Activity time__ - __Database__ @@ -74,6 +75,14 @@ $ keytool -list -v -keystore {path_to_keystore}/my-release.keystore -alias {alia ### ADB +#### Select a device when multiple devices are connected + +You can use `adb devices -l` to check information related to them, in order to select the one you want. Then: +``` +adb -s +``` +where is the number listed when you use `adb devices` and are the instructions you want to execute over the device. + #### Server actions From 2784dcdf53fd65da4d503c4b49fde3f193d6188c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 9 Dec 2016 11:43:28 +0000 Subject: [PATCH 39/46] Update README.md fixed error related to instructions. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1bffd31..250f1c4 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ You can use `adb devices -l` to check information related to them, in order to s ``` adb -s ``` -where is the number listed when you use `adb devices` and are the instructions you want to execute over the device. +where `` is the number listed when you use `adb devices` and `` are the instructions you want to execute over the device. #### Server actions From 2ec208919c77ca81a8db896e8b02caac0c3a76fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Sun, 16 Apr 2017 08:43:03 +0100 Subject: [PATCH 40/46] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 250f1c4..d1a0d3d 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,8 @@
-
### SHA-1 + In order to get SHA1 to use it in many services, like Google+ Sign In, Maps, In app purchases, we should generate keys for every keystore (certificate): From 27527c65a39fd33cb257b2f371886ae0500cbcdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 17 Apr 2017 17:52:10 +0100 Subject: [PATCH 41/46] Update README.md --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index d1a0d3d..5fc0b90 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ - __Testing your app with Doze__ - __Enabling Night Mode on Android Nougat__ - [__Copy files from/to a device/emulator__](#copy-files-emulator) + - [Trigger a notification without GCM](trigger-a-notification-without-gcm) - __AAPT__ - __Check Permissions in order to avoid Play Store app filtering__ @@ -585,6 +586,28 @@ Sample: adb pull /sdcard/Downloads/my_image.png my_image.png ``` +#### Trigger a notification without GCM + +[Source](https://plus.google.com/108612553581259107752/posts/ERVnjUAjsbZ) + +**IMPORTANT**: Remember to remove **temporally** the following attribute from the declaration of the Broadcast Receiver you want to test, in the Manifest: +``` +android:permission="com.google.android.c2dm.permission.SEND" +``` + +It's based on enabling broadcast receivers. +``` +am broadcast -a -n / +``` + +Some examples could be: +``` +adb shell am broadcast -a com.whereismywifeserver.intent.TEST --es sms_body "test from adb" +adb shell am broadcast -a com.google.android.c2dm.intent.REGISTRATION -n de.example/.GCMBroadcastReceiver +--es "registration_id" "1234" +``` +where `--es` define extra as string +
From c176abc29b445790bdb07177c0cfbebbc4077cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 17 Apr 2017 17:53:59 +0100 Subject: [PATCH 42/46] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5fc0b90..dd193f1 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ - __Testing your app with Doze__ - __Enabling Night Mode on Android Nougat__ - [__Copy files from/to a device/emulator__](#copy-files-emulator) - - [Trigger a notification without GCM](trigger-a-notification-without-gcm) + - [__Trigger a notification without GCM__](trigger-a-notification-without-gcm) - __AAPT__ - __Check Permissions in order to avoid Play Store app filtering__ From 6712a83734f930209fdf23a7fb7108e136146f2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 17 Apr 2017 17:54:32 +0100 Subject: [PATCH 43/46] Updated bold title in the table of content From 72e40cf5bc987ddd04860a45640613118aed8adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Mon, 17 Apr 2017 17:56:02 +0100 Subject: [PATCH 44/46] Update README.md --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index dd193f1..1d44a16 100644 --- a/README.md +++ b/README.md @@ -35,16 +35,16 @@ - __Find out processor version on Android Device (check if it's an ARM, for example)__ - [__Test Alarms__](#test-alarms) - [__Query a Content Provider__](#query-a-content-provider) - - __Find out Application Binary Interface (ABI) in different devices__ - - __Retrieve application's private data and databases for non debug application without root access__ - - __Indentify Frame Rate Issues (Dumpsys)__ - - __Use ADB over Wi-Fi without extra application or software__ - - __Test new Marshmallow permissions__ - - __Testing your app with App Standby__ - - __Testing your app with Doze__ - - __Enabling Night Mode on Android Nougat__ - - [__Copy files from/to a device/emulator__](#copy-files-emulator) - - [__Trigger a notification without GCM__](trigger-a-notification-without-gcm) + - __Find out Application Binary Interface (ABI) in different devices__ + - __Retrieve application's private data and databases for non debug application without root access__ + - __Indentify Frame Rate Issues (Dumpsys)__ + - __Use ADB over Wi-Fi without extra application or software__ + - __Test new Marshmallow permissions__ + - __Testing your app with App Standby__ + - __Testing your app with Doze__ + - __Enabling Night Mode on Android Nougat__ + - [__Copy files from/to a device/emulator__](#copy-files-emulator) + - [__Trigger a notification without GCM__](#trigger-a-notification-without-gcm) - __AAPT__ - __Check Permissions in order to avoid Play Store app filtering__ From a204fdf1380bfc2890fd6578f6b4dec6e92cc14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Sat, 29 Apr 2017 11:03:03 -0400 Subject: [PATCH 45/46] Update README.md --- README.md | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1d44a16..1e2db2d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - __ADB__ - [__Select a device when multiple devices are connected__](#select-a-device-when-multiple-devices-are-connected) - __Server actions__ - - __Show cold start Activity time__ + - [__Show launcher activity cold start time__](#show-launcher-activity-cold-start-time) - __Database__ - __Watching StrictMode__ - __View connected devices__ @@ -97,17 +97,44 @@ This starts the adb server: adb start-server ``` - -#### Show cold start Activity time +
-```sh +#### Show launcher activity cold start time + +[__Source__](https://www.youtube.com/watch?v=oJAS7T-qurk) + +``` $ adb logcat | grep "ActivityManager" ``` The output would be something similar to: + +``` +ActivityManager: Displayed com.example.launchtime/: +666ms +``` + +If we also use want to show the content ready time, we should use the API method `reportFullyDrawn`: + ``` -ActivityManager: Displayed com.example.launchtime/.LaunchTime: +666ms +ActivityCompatAdditions.reportFullyDrawn(this); ``` +Then the time output will be the actual time that takes to Activity to be ready: +``` +ActivityManager: Displayed com.example.launchtime/.LaunchTimeActivity: +666ms +ActivityManager: Fully drawn com.example.launchtime/.LaunchTimeActivity: +1s440ms +``` + +Amount of time that takes to draw the first frame + the content. + +We can also use the `Activity` start command from ADB, with the `W` flag: + +``` +adb shell am start -W com.package.name/.LauncherScreenActivity +``` + +We will see 3 times related to starting times. + +
#### Database From 85cbd6c60a4d1dbf8ee40c8ffb63536ceb4ac73b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20D=C3=ADez=20S=C3=A1nchez?= Date: Fri, 8 Jun 2018 11:24:27 -0400 Subject: [PATCH 46/46] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 1e2db2d..72a8cd2 100644 --- a/README.md +++ b/README.md @@ -228,6 +228,11 @@ $ adb shell am start -n com.package.name/com.package.name.ActivityName ```sh $ adb shell am start -n android.intent.action.VIEW -d "scheme://app/deep/linking" ``` +or +```sh +$ adb shell am start -n android.intent.action.VIEW -d "https://name.app/user-settings/324" com.packaging.app +``` + #### Take an screenshot