From b777d3581c6f17619264f4d6ee5a535d51450ab9 Mon Sep 17 00:00:00 2001 From: Andrii Kulian Date: Mon, 1 Nov 2021 18:32:34 -0700 Subject: [PATCH] Add support for sticky placeholders Normally placeholders are finished when there is not enough space to show them by the side of the primary activity. However, in some cases it makes sense to continue showing the placeholder stacked on top when the window is small after it first appeared in a split with a larger window size. This CL introduces an option to make placeholders sticky and behave similar to regular split rules in stacked case for consistency. Bug: 202810486 Test: New option in the demo app Change-Id: I60e8973679d95f52aaa231581a3063d9f30d4be3 --- .../extensions/embedding/SplitContainer.java | 7 +++ .../extensions/embedding/SplitController.java | 47 ++++++++++++++++++ .../embedding/TaskFragmentContainer.java | 6 +++ .../Jetpack/window-extensions-release.aar | Bin 18462 -> 18590 bytes 4 files changed, 60 insertions(+) diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java index 1e9fda6599d5a..06918d1e2aa4a 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java @@ -84,6 +84,13 @@ class SplitContainer { return shouldFinishSecondaryWithPrimary || isPlaceholderContainer; } + static boolean isStickyPlaceholderRule(@NonNull SplitRule splitRule) { + if (!(splitRule instanceof SplitPlaceholderRule)) { + return false; + } + return ((SplitPlaceholderRule) splitRule).isSticky(); + } + @Override public String toString() { return "SplitContainer{" diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java index 9014102d3f552..45041bc3cc7f0 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java @@ -16,6 +16,8 @@ package androidx.window.extensions.embedding; +import static androidx.window.extensions.embedding.SplitContainer.isStickyPlaceholderRule; + import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; @@ -460,6 +462,11 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen return false; } + if (isStickyPlaceholderRule(splitContainer.getSplitRule())) { + // The placeholder should remain after it was first shown. + return false; + } + if (mPresenter.shouldShowSideBySide(splitContainer)) { return false; } @@ -643,6 +650,46 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen return false; } + /** + * Checks whether the associated container should be destroyed together with a finishing + * container. There is a case when primary containers for placeholders should be retained + * despite the rule configuration to finish primary with secondary - if they are marked as + * 'sticky' and the placeholder was finished when fully overlapping the primary container. + * @return {@code true} if the associated container should be retained (and not be finished). + */ + boolean shouldRetainAssociatedContainer(@NonNull TaskFragmentContainer finishingContainer, + @NonNull TaskFragmentContainer associatedContainer) { + SplitContainer splitContainer = getActiveSplitForContainers(associatedContainer, + finishingContainer); + if (splitContainer == null) { + // Containers are not in the same split, no need to retain. + return false; + } + + if (!isStickyPlaceholderRule(splitContainer.getSplitRule())) { + // Currently only the containers associated with sticky placeholders can be retained. + return false; + } + + // When sticky placeholder is stacked on top of the main container it should not cause the + // destruction of the primary one. + return !mPresenter.shouldShowSideBySide(splitContainer); + } + + /** + * @see #shouldRetainAssociatedContainer(TaskFragmentContainer, TaskFragmentContainer) + */ + boolean shouldRetainAssociatedActivity(@NonNull TaskFragmentContainer finishingContainer, + @NonNull Activity associatedActivity) { + TaskFragmentContainer associatedContainer = getContainerWithActivity( + associatedActivity.getActivityToken()); + if (associatedContainer == null) { + return false; + } + + return shouldRetainAssociatedContainer(finishingContainer, associatedContainer); + } + private final class LifecycleCallbacks implements ActivityLifecycleCallbacks { @Override diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java index 6805fde685b09..a1a53bc937811 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java @@ -228,6 +228,9 @@ class TaskFragmentContainer { // Finish dependent containers for (TaskFragmentContainer container : mContainersToFinishOnExit) { + if (controller.shouldRetainAssociatedContainer(this, container)) { + continue; + } container.finish(true /* shouldFinishDependent */, presenter, wct, controller); } @@ -235,6 +238,9 @@ class TaskFragmentContainer { // Finish associated activities for (Activity activity : mActivitiesToFinishOnExit) { + if (controller.shouldRetainAssociatedActivity(this, activity)) { + continue; + } activity.finish(); } mActivitiesToFinishOnExit.clear(); diff --git a/libs/WindowManager/Jetpack/window-extensions-release.aar b/libs/WindowManager/Jetpack/window-extensions-release.aar index 830d13dd6dc52f30d28940d1b98bf16cc82f0daf..b7ccfe541d359a109251451b603dad230fb47af1 100644 GIT binary patch delta 17031 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 delta 16918 zcmV(uK3Y( zD?41{*~-Pkw_MiSIq}*JJ;6s@EfX~4oVtrdU7}cu&4jfs7_$|#q(1hMY;oqu;rV}N zGm&Zjj*ed&SvGwQk@P&f(XGX3`@(BNJ8qd*KIcp~1b;!6L(e%4(2Qoeh%Jv8#SFNO0C?{awAp z@on6UyAQlFpO`t6`CrS=`6kyBB>sPRO2N#i*^xX`W-N5I-)49IF}G~8zsm-#^U`0k zpR91Le=v8$2f6%R_ui_j`bF*CtXFh1x-WO#=iNQA$DP;&CK|^qZdztU*C2<<_ z-S-&;J1)FscU9&4L*M9wW)F7kjkwuAN$O@wdfc3pjnnTJi>EwyezPf~>#~3EN8xF* z9RUh&&A%;Fi01ov%_7?9jZIL_rgaOB2_EdVOW9L>Vs&d$yU6eG_M4?)_JvFJ1H9Qe z=HLC6x&RnsUw9c90&pe=Lk3QK$ss4PGQYG0XIgkW)j#`?fyA-*e?{~yHFuP}+v2=h zB*$#wiZgFEOm6uWE1n^o8N7eCr}q2OD1q|m#Gu6Ke-ta{ng9IQQgPYpd_udc=GIRq zXWSEZ5Pj{k>WcdMId^R*y*%=fYwg)1j31U9l$mnkqPml6>oiZ_??I|n{u|9!NX?&= z_Gp2&^UQNn%58^2SPwldx$r78s^e{YkN2;pjgpNa%hNcLFHPCv+8Td!iz9h${WQDv z7j_yM*W{~)Z4r*#eY;OfCBb@r&A)F~rtDvPh&S48vtY?(yYu4y55*a`@9nL&`y#mV zw!vPjJMD1?Vm~)TJ2@UPI~}@%W4D7{0k?`Of9~w>8Y5h;X%Y{GbR7uKVnuh+t$AVL(I$awLIr zCMuvfpQ2lb>=aPUBLF`WUh4>?g8*+(tjCmv=C(GD^rCKdCJyG-CN@q6 zR_g!ut>}MzDQJIZPG@9g;OH0}Rb$hm04rLRiztQh0FPJ9b(17#Vwj_pFD1di(1{3x zRp3MDPWapa?*&Al$~qiVJs)R%d?fX_=Hpulv~i941$m3HD}iCXnTY$Uh(yLsSDn)A zX8gqZ2S%iBb0v=@o!qS|RYZKdM$c`7f_{-uy9AwL54C^lVTG+y&~x%Uha137W!LlGl(W_9k zuz&_L{s<>kg4t5> zvV(qpE2R0r!*NG?=Uq2Qu31z4J1bs943`1`qKsXl_OE#>x$(F)e{yf+jeD!wQQYcNomDEJcca4-wLzq=R zVbdDn{OX|<*=782n4}^ZLyBo>ev?ufU*JDGY(|}UH{_SYl7Bgj^Ph8=f`hG#xv`1E z-yN5!Bx{Moi0FOO*k}{aVb6~XEay>-C-i?1bFimGK^oj+nB3xgthj-Po2qL*ZDIXU zkpT=x^7vM)biUG8FeOawZ+b93Hj9({n$2(XscoPm5c;9?>-^Q6;HSw_H@$uszz7au zu=}XO*~0*A!6VgY0Ij?PcK&qG9R?p1?aW=mWG~|)QN-exVV&@x?X_K|DJf8CS3-Z| z9CSKbxM2~B)TT{`y`4`_`SUuU`LD38%1pk6SZg+y`cE{I?}sYbNYmn+7-7{T8;7?pEU?y%%t|E>$ALp+Tu zPOZCQr-kHR+Zo{%8wfsYgSDQcekooZs!!6?=Ia1&9hr^drRH23AogTa16$y0XowQP0iK%Dkd49QedccF9atZ|! z-CA>w!nm%^*L)QUDc!f_i^?_g^*zf;aX?*YwLEhywEhmUyju`_k#n6dc&I#$qK45*ere)nXWdLg#E$I}^%Fyvz}9OwlX0RayGa6kJ(wEVkwUz zh{`*gL^o%c3mhIQKj$K-_6-{@KU4%I4jk&MDza?hIugLj?9?TBuyY1fC@<`9zH4Ll z7GPw9CU}_G-SE6Rtg__?;^_-S^@u$U3~pm#|2n9=OT|- zV_j5$_9UX=Lj%hCX*YHKOl3sANwO`V_T5#U*jNlj3l_(TnVV;wJ z4CU{n%M^Y3(sX~Pj?sqKq3&Cw{hb25VIn3YUJ3vPc-C>{ZSlM%1@z@zB6rIuQq|z9 zjuN?zml(u#9;r8}@A%K19+(oXCFJ|v^TcIQ0|V~jl!!F$+}i1e7(GeGqf{z8cSChg z@+*TKL33LxRdB3p)QRO~SZa#r1>X<-&GsZ|#ks=H=e2+K_*^k|s}8+aYNu~xGv1Wd z+`7t$Pz49+nRPI>R|*N-Z4M349ZsK_C6f;D+;~mS4crpA!DzY*7Tzd|Lz9(GIo;Mc zD@3JsfiH@tLsYP_tifYVQl2lRu+0G5$0giF(x&j^yQo*CZKPC$!aPOtd&{YneI6Y_ zSRRoc$C-cO#AVu|u!mpKgt33JkagQ-4V0_poZ}o__17_g`zsa+v%t?%<^AM{#Ck;> z%i<9j%ir5)fA5>e;a9t)7h1Q|PnPBb-Tvysp#c!rFG({DM) z`HIpeMj_x^K3r{LyG6#y+UkzY>Sq#-_u0UgQ8Rx{b;Qayr|9{+!ECWn{jx@r=$K{* zkQ1X_E0j)-%(&SRx5vin>)bux&K)UyEKg}13u9%;)E56-`4r_Dp3&vb4+AlIq}*u3 zJN7@%fj-t1leJ%CJQyG#_P;U*{t=nfbRAJtF@5CXOlR4qkdGi5P^l=)l|uc9B%Z%o zc7K1RT>28bBQ75wY_ohe@bjwy?gie5zn*&mvmCvX*hn#R)W%CX?lounI9t9oc-zvW zSNoxN)@|D*=kVso`vZg@yW)iqeR!tCj<*S)f@uTJB4g3E7>3P`u*m^yLd#T`A#|h4 zYb+DY$eP-L5u7Uv4fI##4g)nO@z1(-H0yt&uanh)Ptdp(_Ir>Vs>JzBbk z&PsLS!8V!4dU!YU0V?qPs4Nq0L)c{g)!mm4NfYG+D08Wbsqv?`{$TI|9E0SDfr z%%vXFTFg2|%X8$kqYwEj@`fSUI0Wd%Ecz+66`Y$a&8>}Ebv)}gXKHp^wwPH$qlZ>z=hKMC%~p#V(Wl0hqtSIcI6ob9ayKQmgZ57nA2RNrxS zwv=->l1z@%jIEfM(@6{}?AkGHS74&K-sF!cErjv&NM6&*Ak-2PqHp})aiItj}z6M z8b49nF|;ygGm^2A5;wkQwu6c_qBopW?JZhFU9^nlh-XK!n!l)+GBnA2@^hvXfq znx}N%W3Jak9p2M>1^Sa&g7@~BjECMXAV8l%O)6seCzG_M^PS*I55=^;sr6LmClSEXMRhSE;lZYaosB}IBj;L-H4(_QE>l&Fw!Ezp}3p+NQ@yq5KV zhF8kcy}?~5=<+|)P+oeW>2*o8+N3;HheNZ{cf8M1*#Jg4Kgp_>swv~iWwC`QW1h~N zVTnXqlidY+nQ;?MHNc&@lEi<`4p=JEdl55#qKS0vYEoyQWSH{EIdaFd-nid~uNvuR z;Tw!&QcB%t+35e)b&Qe6GJ8~V1bnFff;&i*CxdOfXxCa+;!xE(_SM!>lVP=uw#9>1 z&bZOc)w4%f!-79U*Q%4J{gp}VnRsb50$E&aAD!{e5w#Zxe3`6Udy;?cyApl{Tzz>B z@{+}ym|aS2RP`g;Ph=~Ey)2=<8+pXhNPa;c*CQxoeh9bkbw7`C#;2JlHy7;B`k~GS zCEKtk9QdPlFcI(ch#`>f^bnScH|z}uW8n<@g{u6AEGc$)2HXVXc}R2{OUF?fV2g|(g@1>HX)1k1LwRB>phq&6ZfK=m$SkmV2! z+JBU(Aws%AoJ@Zh5#%RBrRP&#D|gd1DXYVO$IEoh%A=lb539@j5ysmd&0gb*!pmR3 zcVw>|1rUBZ@We7xso&LNdBtD-`PQlqauGUM8c4qAsECfu#x#_R`m*6 zS)vg}fA$u-T*lT8NC}aHU@1k@O*%z**7S*PQ;*>7(ecG)dX=Y|@6X%SOQ6c_TSyk2 z=r7>Z*nCl4(Ksl^lq1`PfO*Nao-|w=%O{cmNVT3Pl?hVLHK^Unj8O-T0qY48g5(ADUSmU6y^4K@rIl-BmlPI|i4NE}>b~(MoajT8#LRlxw6) zVd>3u)IoHeLK7m7(na?BSIve|T?6eP#||8~lwDp=o8AUCtwPD^ZI6;>HQOd}SgR01 z6~rVvbxcz+tUYCISbx=4v9rR_9ws)ed);35A*g>?LbZmnwY8n77|%&eyGJm^riG#_ z5e?Q?$q5c8xH3wp16V1gGAPR`*OKtjGJT|4NP-w@zKoCJ>HeX%I;FUe^zT~hhwxQ6 zmD{jkE-q&`+)P?1x+Op8BTIpc9$;OopK6RP+TM;CcPT|5$(4U-4J^{yDD`MYM-NL5 zdA5H>M^ep4;HJ<@GrQzV_39E8_URqM$&X+0*$Uu?`*?lt|C6O0PueMaz39%qW zlY+}X*Dx8Uav3ebZVWyN%MI5{x_}LyO*1&JHsDafAKgD7c5YeVrePD&69<-dXp)Cp zSu8!`c$0u8i^f0Vh|t74WSF$u|8UI$$l`w`$Ic!LU*Y$z9nso01Zgtk0vv@6HeuT? zPPwSuC_*NWmd!9)0IY9qH^rWSUZ^!pt>Byvf%>QVqX zad9KMXNhyP0J*b^gw;zn;SZVpaevB>&-<`=(IjoGF$_nf#y5#>-J7wEZRZYLx5NSd zyJOi?9pY2I8P6aqEyk$@n^lmnSE!6(0;z9fGa+bX4DfwVrHs=5p3!l5-)>u3rOqjEzW0?vxQ47zlKiNpXin ztvh0?XQIv9_F%mFlAy{KNDR~M>-WRF%N>OrZbI1yp&V~7CJZ||*;0Q{40pBr&e-g!b_P$e@D05eoeF>>Q%3W=&MpT9>4)JUeq`M~zrvQRU# zqF-Ieq>`V6V}IzMEDKc@blIs{NJ~3cEUF+zXINO5*VWf_?N!wn)GKi|T2R-9h{5^x z9fuF_;W~j%d~`MobZ&pp4UtecUJH>fa0*56*YgF?b30xzL31q19NvNLqzb~&4cZ99 z*Yr+*P<7F@iEUcuMgO#3|8xcQXG3ehpaFya8sk6#0kQl~4XtcvW$q+tV`}@4bXdjO zc2xz{2ba4(-Q9X9Evg>p^aVII#S*p6sBG4A?@X6HbW^+1^I-i)Uts5tX@AF7>ZY9Pt zv`pK1m5o48M5#8iStmK;F0y-HkZtz}D%4iUS2a&)^)?K@TGjWBR4O0S9jer;)YAF} zdP>CHAito~4BpsERilto-jnb>@99E~gliihgGVIwE?|E<&9)jTWg{DkHd?K?%1-V$ zKa zK~)RVXSILq9;>IV?U)w|V?w0}96W(bw~-?G+M#{JOO+`mBa0toZBA*GzsJ_bG^)+B zB!CmI>7&}yWA8Y8zJNI%&)H$ViL#)xno^;Og?DJLEsopEHDS*bpa@k<--t`K;OrF& zhenDwn=;K9!VWbyp_YV`q-&5BRMT*(&a3~L7sY@56pFHP8GBqqthY@h8;G+C3EkGR^pUA-r6T}Y z6>EPyTQbFI%;RsI|A53)_(+JO{HowX=naVx2CvNa<(rM35dQ$9A5=y+i8;{sefcDN z0Xq~T_CvBT7$}=?hf%l8CqYh%V$tVkaAZMF^SCCd zz!b4{aFXz~dC?qnv+Q!Bx=1F}r4Q@}DnZF^(RT-dKd_!1mkMDOqZ=5o+nY>6E$V+J zvtXpkeP6ZX9#)vc!eli905kh-G?l@8Z6tJr9AI*qva4QH?&(mi|vfPm&ZwnSK9((j-7a`ug^U(GLdBXTJt9-uK zg?a!10-A^U|88si#wrR1<_`aPv8jJuP1;sl6!o3VWoN)Sjm$cu(0oP!nB!vih5{@N zF}@HJ)&`qYm71mob9L6V^tJke*u2jYgj(YhwZ=4>bPTR4a2P>Xv`_}t=Ef6kF-*%0 zC$rgv*CB6<@B95K0Z`?Z8nTg_87gHtwS#UfoTv@OO(l`L=!Wv%Pf%z{l52lKU;;7) zV+rk3H2n+7k1r9@uA^wGn%f;;Qt0`%Jl7z-%&{MV(-Ux4LnqWR#a#Ei(_j6iN7|}x zEMiwx7h~rE0ZdLLJN0STeZh$rGpsL|ri~!0$w?GTo-^?#%H^vKyN)I!Mk$^S_qpA~ z%{9kM>Hg+3=gf*3V5=Ano2Y;0`XPw)$Ez8d3q(wh7dBkItg`irzLc9ShU>DrEOhD6VY7}E~I>2 z#bX9lS7OADC5Vx!GZivNY^+lPS{pO5dxxkfUo2q>%wAkaKNpRWMN)uuhc!axVr4NjFz3H#M(&1z6b z#r}-TU-O*3xLL+rVASmL-rv?W?^PR7$caBA^m7#cHx#|}FHPld22E-1X1)MMnD~xmIcl24}b=8Jo9s|9n`E`FDfAR{3o`Qels&oO7a{}@e z@7jC>@(H9`f`2o0-7>=K;zzuS=Jne=0rslkzWNGrB@g;m3~?oev8CFE2W*QHaN<99 zDdCe)q5ShC;e-pTR2j(mhiVa^T$z6X$@kl?c#`;Cdv^W23J7uC3KxoH+QC)aL(;oK zXh&#j=cj)^bBgW}mAEW85RftAKamptiBtZaOSILM#eZ>$t05|AGZY0nJz;T4xN9Ae zlr&6ekdSB@?65yBFK5_cPr-to55W7T#Ctop0l3VWw#=HK_vd8oH<^BDNd*a#~ zPJ|OMH&1qI1P!c_<>}Bq@JC5`+Lk=B9oARF)gn8y7nWcgqh(y-oDhH1idxv&>39F(;o*@IkNEisdvJYyHc^98 zd=+Ptr3o480nDN+<~exNcpaQW0M$X|lv#o5h`1{w!EI^Q$i!eGSU7<42b%iVconI6 zv)!GUp0b~mvaR3lyX;!!*5RJF1C_DDi}@61rAnZ)u5PUm=xaNJ~7(Cy z^oum!Cv5Ch7Vh{RGA$DhUy79#u#5B@%wNdvA)!)DL|s>^Nm^0Jx6)D2%6`2y7HM6aSgx7LscvCHu zJ>BEjgAzC4_GLm2FbaYxoYa56rXWIiPatZWc^37!UdVvDUI%~Hp8+xQ^$bSX!15@G z5#l?XxhaFJ^!wp?HP4G2iYeFb1L=Z+FM~Hdl0EePX*%U0v80cwUNWsB(FFyqG)2Xg zwV>e#(=d;~quR7GEJPkonZ1#Ji;Y5NgBUqA{bRcuR_kZ{EI)$!Jk)>fZum6!YLs&p zZ~@uy0WHPc;QFXIRw^CN3+F*^hw?mq)XXa)v9;_g$>9wR$KvnKXfzAB8UXSITpa-W zLIbRR`9>qGZ}~>&w=R&GyS#`acn?~T5TqU?tK7$XHe6BWD5Q>ErxB>LqIt`S2@bzN zzr7u|*Pws9_PA5B3G(Leeb1z>-`-#(E;#H3hciFZ1;zI@wkGYYwW)~< zo}!v_#&SmDW3LKPymJa_$xm*T<0OqbwJo*KJs@U@L+Tx`bcRpK7vFr5yja>7!#+yv z;F36j?pWC7&4@pB&bN=E5wXEG=aHZ3DEmT2w?%aQ6U0rwXZ3%K(*O1o_(<2a8i4sp ziGyJ0`v<5QqOb^921leJJ%9IgA~0q=5K&YBjGsYMc}?fsla}VLv`HjL!GM&e(Mfsb zH9M=#B8@kIj={Z z1h6pQKoW(7x&*G<6roob)_8KK{j3?*cQo&($j|R|ndX0XIZYE!!-?`odCbQ>lAu{I zzC&O)e!LjV@ogbBvEj-qejUPf^;eHvJWRdo(F)!sXsq?x>c-Gs)Wv1%2UkAbi`-s* zPid{xUo`}GA4$<}tz`S1T60zv&vNy2644i-XXMSTa`jW5O!HQ!-+tR1CyQKz)%%t9 z`u{4X#s7b~5M^axWb)PaZyE1@&VK9FHsw(S5#N*0sp_HCL`M-s1!;>M@M3ZcEX@>x{cT@nPGV>?icO|9>w2|pNtLW_uXsuo1?BQ4Y253q(Zli4cd=J zzQ|&XcQLiB;cnjdY^B}>hsmAL2v26HFr}D5&Sp-*U+&wNqf}w#jb;hI-R*H^CZvBs0Yua&x9MBkRFI7|-e>Quh4W}#ibLb@ zp|lZOb|vb~aU9YxbzyWF^#(~ECQu*ay#bd5w|vWdg1!C1MPG923)gq_borwOd9NQ8u=wX(Aqu&Z#TA$E0ZFzAbcguOnoBHj7UyXh(|TqoHCnP_C+b3v<`o{ z*q9OnkRKa~Oo^6z=4NAHm5>uV$IRy2C-Z_`HJf=Oh~OSg(Q$QS=JI~z|%@MG>1ZyzpFC|yROGRDi4 zZQb35xvYgAPD8DAgQIN2tu>nk*m-}tvu+EeX+g&nHtA0WF~n|CE^iWV_KLs-42DxR zG~I=BDx!sPsysC+Ezw7_A7XZzuZUz@hyeoh8;aoR39IP2(%;fH?E{0TF(Jk-(uTz@ zE7LRXFTl@MW{L zSk*+M?}tAhaqWmzP-su?@hUi4?&0;4%+HMw1x9ke`h}E|toRE9)42j=<)PPsZ1%Tv zT{*t^em} z+U^wYgjTZo=PA71CxImg1_XZu4);%VN&Ht+_#a&oYTC-$s;KYq&B!xC#0p9|?A3rN zhw}LqbdTJ+8pRw5s``p#n>gJctMTz}bW>5g>00;wtI9t=z4Qc5Xr!Ec`z}B6l#V-C z|0oGh7z8VvIy|!CS=GMKxbU(7|MB+tt9aE5MiK^gJcr!1raUMZa^8Oe-w696n6>_G zTbB~KiL_oDX)P)j#5K=N-lvnkA418CqJJGy12h7gC|TD4wW)wGi&fS}7Hh1bxq?tJ zZH(JclOy_oMi0^bzzzHcadm!mNt^SFjcd9 zBrm5{O0=pUyHh~!AH943T9gfdD%_L;_71XNQ5_&DLj#8f_S;i1wLuCzy@=HH9k6(glksic5cYaa47YOmo}vZbO0= zl2{ixIVn+tn)45-0Cp!-OqbX{&R?mtBT#D#&fBb_!D)s4U>}OlxYUFC(X3X+XH**! zO*8Xq0zuGBrzd2=tO49fL#xh%?di;(DkUcDHN6w`FdcceHqi>doFM_0OL}3D&j^~kyP7-)itT!*vP<0^YP}y@P6xb z3aSvYx-r<~miZ#RY%rTJPbT^wV+;nxgL@LQCE14r%_8KUKZu58{ZvK#^hWvMJWJi@ zhL$?5iB0eg6j@L8cI4vS`D3un8LxxTiju~ zZ^k=nym!Nvsc_=ZGPNF!+kIvgB1SHR)eWTiF2^Y@%bE;HDY#;Hd>%KdQF*52o`p1{ z_+z;)YFOKWL2K-FJ_PMVFzm(%AYNGZo=fA58xkA+9piNuGiK*Ayr@EGppjJXvTi4d zz0QCN=;MD*6ZnXyuTjAKCKXneRE)*J&Thr!{WC{6qS9LOjv%hBfmZL*gn`r`HkoVY zV)X|xcY?)FAG0408W38`5*v2uOH=a_l>Hbj_=QM&rh>g;b81mm1+r*sZh_vB-Lz*A zO3JGQyO2L4;&SX^V@OJK;JoWBgpnbRxM9VYJT*TVh|Npa3$08e!eYED=X8H*06yqYhM>zL26y=T&NU(O;S z>H2>{%ldq1p1w~Bd{W>UOD9QzcdS3n_5z#BR!$`^JP-ZpP?fJeD>YjlV&A<*OH%WE zQIg*gA}z9(L;S@J9R*rOTzC&IuG?UQ(zpu)0sUylygn9XTD|lFeSh=2{4^ zbt%_n%z@NRQiz^*fD_km0v)+Z&|-NXJ364-(oDV{&}HTt^K9P=7N_~9or^nD)a-wZ zTrDF6ei9X<|HR3>0pGHW+noC9EuHxsMe*XTdpJhRF`=&E_zdN!{A z@%F;)$6iBeC#Xf*YM6j;LV&GSa>G!D-#p^*Eqvct)m=7G3Q!+Qt0LR0`yhXV7KrG! z>-#)*F3H+iEuhXj7EIer3r2>nC6eZ;qS~OSmP9?C-r-VNnNf+o3rs$`m@n%s+ghx% zO2M^grOFgOqY7Mv&LXqm2*=!dp(&bNx!mHTv)jm2Tsvxmb7JrSH1d=%uvtV;Tec&$ z>04q*>s~17ZPuJr&4+==>7Rdf6X2zDy+#eF@M6I~1dEcvOxl)%%8;xt%ovTXfRt%$ zctO~x$K0M6 z`sv9EdM)WW$IOtEA?zV&lo~=I&m5Ienk_}6{oIlcymmlQ$Ur0&uicnn8thuTJc*fF zK2EPTaE)O>IaIYoiH?5_4Z$F{TO)|=F0Y&&^DXAUu9p-OUP>3qVCq#^@9{G+Nvh{+ zp%a@KH7Q!^J9MZKI7a;;nuDP%uX1`*A~16;8)#I)0Jh=09M-AZ?eaIX6jGDHn9D96 z53sm5b5rp-ZRTyLxo#EE~F)=lMbFu?7HVrf-8 zl50~)Hx4!*7strwM?_Agc%Gxuh0cFVOo9eM7St9IX5m1P&n zQ_rK1!xYTQ45-htc5QFd-u9~2j_YFmrW5jG&I#Je<0-G(Kh{f z`l6@?(ikPwUmJfxWtKwakcJ=|^hoh7$S0zyby64dTw~t@wC*5nsw%$o#(D>Pw+e^% zE-s-1)(}^k|B(I`cKB}D>_|S_3*b-ibIJ0J3~B!nnRXD%JHVc7I)W0_J+1QD2vOLN zK9dAvTe>I|_ol$$B}g$KOCL$2Ub&Rf2P)jsj3cM~15|&^j_dO?pR7~L#GSl^sZaMa zqKj8&{b%{lhmMj9V<$RX_MbFQoOz>^*`=PxbRi+ku9^1LZ`|fXqQZdE5ZLq%)q5@E z@wlay-Y?UE4!ygyn5KbZJ`U`!!6rb)t*SbvQt5@Z-VzpGf-@w|vWT#khu^}cP(*sU zQ~43Kc*K9X(q<-`?m&rK$ao|#3{P-KSg>6|Hi^)m;bX6&HhY~3Xpt>nah5TKl7lBr z{H**=GeU7PLeTEE$*|UXSk%XD^9OSE#aHr z)66_gsSl~+6&KdvYUJRLWwBRghxp{%e4dR`BFleMgVR9Gc;ri)be%bEHFM@|CIkc$ zKLO9Hlh=xd_80_~XSzD_<#T)fx@#BDh8WprI~xeHyh~q?1gQip+Sm!Tj%@3EMl629 z{FxWaUK4pIevP0$0Rgf7_q=Fj;BM>eL@#3QX!q+<%*4RS+2J3|s2bHR1tJIw_?T<4 zJQaVvBH7WUkAkqxLZyUM%H`{JVlSsODm)vjyPxNI0^&sT7V z%WSa5_%WL}12&(w-jRMZ@uwydBr&Y0QO~D=LIhb=wz6(fYww`%`hT{N4r*WbS8yPp z4cPywg~Wd4^}oW$pDdK9_Uef8E4ODuhy#ccwyi29h1bhcBdMr_M+eY~2n%XWy#RkT zjI(Jjoh6L}0s=1CJMaem_2=}R=1%62po#g+yvCl`Iioh0*Ga4?zq=GRA7*)8a&A6P z5I^5uUiyIA;cO_|Mc82I4ANwb$)&k;r;cHh^Y&JzMClG|y-*gNm_Xo`eOc-MB>Y%f z8S9t#*B6M_XEw!+ZIyE&(e4v3 zNP2Cj`>;4pwc!i$8$Gbo8|SSSYwoNIBnOwN8i=x_{#!Tqr@5fqFN*G=W<-Bh?AEib z;)0fktlthCbRp10xLe^%HT+d6`>M6NM^IW!(7zIWs|T-m)-v6D)?z6_6okp9ccb)o z-U&=zsn+Yi*I4O0#Zk$hCYgbwN`jb)gf`S0&hMpt{z!M3ss73mgmde~wUg)@1sx(uRR3spkM4w-$dAG(bKcpsrMdr3qyOlbHxxt8t^ER#MfXE9m+C$RWuD z)wyhvR&5k;exHrYOh#f3wbm^H@ukk8e#iVfz?8e;A%B}oa!nMT`xcH_IBOKrGmzxI z(2l%;nQIiYXwx&OmTgVCE{i!gkACS=;VQ;98-X?1e>%zpv|}jb)VzPC$emPpmw4Qs zm9Y>E*HSF^>(^bCD2O?W-A|2)BpM~9)m&$wDWG2~Pc4dr$a!P?Y~l{sg^&>#_MS0Z zRbxsaWw$;-BxXG)%tF23{y8DOBUwIOn#mm%5=w562Ip(OjRFcgx7M@P_q5qfc7glW?%A zO-9f7QW->1em$+4ce93OgfnorlsA{eyv2kRTkT{}KusW3bB&fiUYEpGt&t381D5Uw zatSkL-pc}lv#rj62lG%D6yc5!8l=G-ENf9sRnKFEjYj_HF$#ZYmLjN!4dC>bG*48f z(KNd&4!E0l(O`uyi?>lGZC84E{M5%6*(ylRhvU@c_)c=gQ&heaEO1YxO0!$q&k$$m zTBOXN!V_smGN7K?lZi`Xg?5=^qblh*`d)gTYC>$5%|J~y{WuR2_e?a2rjyNXZB(s= z&$?z1rU2|P;Bd!v&(D_8J86 z3Mq3Ld}Bf~a*H5O?ZUMYBHxnMkLq98$it#<*tX* zX!m(JJRm3ie&n0W#gvI(@tx|;Rpk<89zx`vP%$$-u=JHmC4B4yF%d0qMeUYTPF*RI znPGNNBuns_30LZPw_9=0M8#O!+7CKL2jY4AiII92Wv##7-*7dcel!+4? z{mU0yl#k!^kd*n(v5dbWdps}@5bysecKuytC-ZNE--K5MF~5R5BO-vj-o?6pr8a-h z?Mi|EfXG7wNlK7{MwMpHaV0Y;;mmlLZ1v$EabDLBO;B{4aQMwD{$rA-lZWq97pD{O z65N;QZvW6-2+0~fF~f>XyeS!Rrdo-wm^x0xf;H1j2Sl>&wiYII=Um^=i7?hQOPpaV(nlV+5fyj)EfmVNGP{4l=e+AR zRi^y9vd_~X8r}-lcxQstf~}Gzx~Pnc5>~7J?2C+~!31U!ZO|sC0OPLdWSkh!T@s}m*x=96;6kToec5s`V3V#$t-;u06)*2xxFxew7(q zsnFany1JH4Yje{G#koVcd&b}19Ln^E77dWmKbDP@Ur&NT@SHd zm@~iDp2BvEwhAfig4tm8i`83kWFI925NcMlJ3H#SHcfdOO|2g!INtE1{@CV(&WdZi zSOO*0JGR>T;u!}~|5Ja2I`hkBscT+WeCB#6Ni5YuWV26&&j;=Ws<&# zNxSqevm`b9#hj3Ina4_ZBdQsDm4A*_1@o3*f^E;G1C*4#dY{22y_2oqIDb2L(duSJ zH7=*5*vSYuZ6c&$FNxkY-?4kSy=#Q#>%#0^{+KiZ+fB()@2qvyLkYDl0kNT3DU{42 z>qdqvvrvD+i#~r2V1*@b*&MQI3BK1Fucm@UNwo=gsy*;Ssd-RPam)0jH5HY?=o>Oa zNPq7$2y!<Qk%e(3WyW(8wh7pAwbyr3X>Z$2Cw{TI-|Pqx2k5OaT{pk3&PIaZD?vv-=`C#Kt5 z<+AIJY+aCBx*!LBA&;|6z5`*jiEXvMnCuFyYh!IenW>O+qAh7?8pJAo@vGS)NVGX) zH-sAi3prLr6aJ zr>S=sFUFwDsr)0Dm zMW14z*rnQp=PS7J37=g&~ zFowLN59Nr*$C>!}kBScH-+1PwhYKA3*Y)2{reCM5sEQ!1q?{Q2zY`AK-w8+m?{Bn! z@D81eiNoK2E*R+;=on}Xtn9uTFfc+ZNPhwb0{MSGh2Y7CI6SVe18Y~ zeVgJBFdo{!wrTM@!tV=ye;}wZ{nh2a-!Xn)GW!F=h54^8p#6^Vduj6r1{2r6Sm^u? z^?T+m{s&YC_g~NB|AvD3k30QWar=*hOyI9XaRq5G@W1^U<=3kT0thJR-&o-P0JE?} zC;|nrWW%tSlifx*8?W2BF1