From f5efbe075d57ed107368c003a6b585913096f52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9C=E6=96=B9=E5=A4=95=E9=98=B3?= Date: Thu, 18 Apr 2019 19:25:27 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=9C=8D=E5=8A=A1=E7=AB=AFspringboot?= =?UTF-8?q?=E5=8D=87=E7=BA=A72.1.4,protobuf=E5=8D=87=E7=BA=A73.7.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2.android sdk升级,适配android8.0+,修复一些之前的兼容性问题 2.消息的id字段名由mid修改为id,类型由String修改为long; --- .../cim/sdk/android/CIMConnectorManager.java | 15 ++++++++++----- .../cim/sdk/android/constant/CIMConstant.java | 2 +- .../app/libs/cim-android-sdk-3.6.jar | Bin 95539 -> 95561 bytes .../app/src/main/AndroidManifest.xml | 2 +- .../cim/sdk/android/CIMConnectorManager.java | 12 +++++++----- .../cim/sdk/android/constant/CIMConstant.java | 2 +- .../cim-client-android/.idea/misc.xml | 2 +- .../app/libs/cim-android-sdk-3.6.jar | Bin 95344 -> 95359 bytes .../app/src/main/AndroidManifest.xml | 2 +- 9 files changed, 22 insertions(+), 15 deletions(-) diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java index a9c2593..7f11de3 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java @@ -26,7 +26,7 @@ import java.util.Map; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.future.IoFutureListener; @@ -76,7 +76,9 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa private ExecutorService executor = Executors.newFixedThreadPool(1); - private Semaphore semaphore = new Semaphore(1,true); + + private final AtomicBoolean CONNECTING_FLAG = new AtomicBoolean(false) ; + private CIMConnectorManager(Context ctx) { context = ctx; makeNioConnector(); @@ -127,11 +129,14 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa return; } + - if (isConnected() || !semaphore.tryAcquire()) { + if (CONNECTING_FLAG.get() || isConnected()) { return; } + CONNECTING_FLAG.set(true); + if(connector == null || connector.isDisposed()) { makeNioConnector(); } @@ -149,7 +154,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa connector.connect(remoteAddress).addListener(new IoFutureListener() { @Override public void operationComplete(ConnectFuture future) { - semaphore.release(); + CONNECTING_FLAG.set(false); future.removeListener(this); if(future.getException() != null) { handleConnectFailure(future.getException(),remoteAddress); @@ -267,7 +272,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED); context.sendBroadcast(intent); - + } @Override diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java index a631dcd..61daffb 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java @@ -96,7 +96,7 @@ public interface CIMConstant { String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED"; // 网络变化广播 - String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANAGED"; + String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANGED"; // 重试连接 String ACTION_CONNECTION_RECOVERY = "com.farsunset.cim.CONNECTION_RECOVERY"; diff --git a/cim_for_mina/cim-client-android/app/libs/cim-android-sdk-3.6.jar b/cim_for_mina/cim-client-android/app/libs/cim-android-sdk-3.6.jar index a6debcebe1398280689ed4590596e830473fbcf8..623a860593b81d64622cb5157157dd23b336f7e1 100644 GIT binary patch delta 15183 zcmZ8|1y~$Qur7-`!Civ8yN2NI?gV$&gbnU4ixYx71a}KgaCf)h1SjMzoO{nbd3><5 zQ~%#p)m1$;-OWtx5zNpL46?Eu6f_nDJUl#vReC(K5oA+XjeQv;_)tp#^#luvnVzWP z!3t6^1P}wWG*%S}rLdm+3q4qoxbuVa3lOZc`bCnWk&={Y5t=4+*$-jDqz@HBufH>v zTb3_!4cTW?s4mefeO9MEl$b3u+{rD?#;+0&e$#DeeVdua=Q`%;ce~mNe1~9&bVwV8@F8dC$aSN7SUxU3W?7P~V`Vp^6A(QT0ibTf^cv8q%7=Gafv-5<7*} z=UyfCyp^Gh#_Fw`QUEnJH`1)6ur&XqV_LDyDi+HxH| zpbD83BiX69Dv>VdCeRIf+iSM^J~6*gGKXoGIE+@ffT6_P=wTAE*CUrD4`j`9%8IP6 zA%+YLc>9wq+BSsHoi$7zRz}~GH3$tq0fr*I;!#!bw9X@VZLihe7_W>W7EVC_(Sq0! zHIQGk#;gq-Ie7s`@Pm1C1eZIeq@Ou!xSsXLVb*0hM7Tz_KBs73 zl3+Suj!9?d2Ci>seNwmOV9^DiSi$}X>gg6Rl4HY&?P&$hDZoCm5c3`&q2ohb5gesY zQj&7kT$WN!hYin+-~cG#j6m*VFmh4u=hVR7%ypp?WI9DQfxVq}k{L;!KK=rE>Gb{A z^yZ(IUqvHwyC3xu8?~w!16{|u1v@O9(#ds!o8b*5>LKCpiMR#K8gA=+93Hy&uKWXm z5+7YtQguQsM8caVx*qujXRm{DR|4~pd-c$7QMtVZ9DZ)i_Sj^^ZpH^@+@-#)E#P0m zBA zs(whN1wdAGQqTFi!7S6w!2tG#egxKY0*brfJ0t71-;yG;Jaac*T0pyHCpm3u^`GlY z%XZw2vQC<&yb>7PTY&|a>#2O*y;skyWz%8E#i+~-ivAL@9*PkUQ- zM3m*=;MqRYh_XXLK%BurK>Xh&2fn)UP=N55=UuGG<88gQ^r(7Jc=7@oxrtzEFZ};U z%|h1(qELQDq)&js!(D+V(=lJ3VcMCZF3< z)z`f(ofTg0n7>_Wtozh4-=U?~=(oQjkSN3M|M|(!3FJBkydS$Y8Y4D*+PR6Y=vtwShz1EK#_E3 zdVO7Xyw=TCXy~NDsC~-y>bapg`JN&@cmua3M@MEubJVNpD9eOT!TaeTAv&IR;3>nt zbv{C}Vd1&fORMTs_rxrrRF|>9qxDOEdvixgnTffaoU5;vl(9kWJIDZMPNuYPrX?Dh zKu&vHNJDsPPG(12TZiN0Bjh@67NfkEI>Q1;WjTBXjzzL}FDS!u zbmMpD`W0blGACwGs=9B9=fbxz`| z*7{^dqh}Hc?yTR5^g9Ri085WF zJ~aOr$Y9;j@YJA=$Z93P+|F!Wr0y5+bX7>=^`uFq6>CPLG07Hv*e-@@N#}G%RNTcG zIIdudxA$mrRqJW!VL0&r(n7B+#GjwEHLW1u#|d@S>@0A8=7XqT3m0ys zTo}>x*V(1!vt=_g$<&%AT*OBWYQ*x;@m^63+>$NfW*XPsc|$ce6T>a0<-k5Z*g1qf z;xQl0{nAf(QriMz?e-Vc0yg$q>>`$5<)TxGhAddPjMElAzrjR=TN=s;`PCoo@s+|Q zw+B`7|NJyr8I z-{L;wI9iiG9r3$s3U@xmB&)mc1&pXl*bs}^##DUTSIavs%B>PFS`rQ55c`fahf}lh zr2mLNLmnGJt_ZUj5jv{E$0p=~2PcF|^`ysyjTv;&AC^+6^OgPeu$AbHcZ^?Bn^27` znrnMDza-1kC56tf2li&8EA+NC`SQX@YASXdEkSQ8FK5H?-di z^B~>pgFmOsm>hrFl%PRpWF)l=C>(1X^}A?(qV3bQ+>o+!gPY-UL|SaO=?W#?rh|G+ zg@%(P%+pNpzO&v1=8MuKd%|X$tCM(*pG2v5w$doX=Pym4les@C2o_Psswuq7FXAbk zRP*RG-jaAqGO%^zpKXht&9G)RBEb`~vtcn}zhF0{#vnHLHcspeXFNFuZYQc}tpogqQ0PmwHX5K0mGtSe*J?5Drwm`WR2Cau7{( zQtfY46DzV)&37tJy4LHcUiVZ>rtFUA58{c6xX^pb@CRZO@ud6Be?L3-z3k>wiR+Zw zaZvE($5GQeal6UbLNt!GX-{>hAkawp6@PBAV>cx;!qwInAwG>znhGilF!1?UHn-Up zwI~b0m!HuBd~o9JW|#Wy;F>Pn-Sww>mgu}9i+@WC;o+_dlC|4ppMw5-Y=& zo-%zY?S-R$4(a6R5fejBH*_akZ5jCupM!VDo2RYU@v-+F%XCXE+kTTO%k4888Qd26}LQ?=4keHG2}(OYuLBx1PwOw{dX^l@6yX=uz`3ft=hd z5lEBz9#2r4&k=|{ou#M6i0w5U7cOWU;{by@h+Zh4BD>YXg|6~sl-f!ySPv+hynn~Jjz(8<#`9aeGS6zf~Ekx*s$kWL=XnY;LA^)$0)jxLu&o==i0 zyCyzgSDwANaUhLdEoR?3q{|##gH1mRL~K}sLB!X#;>OwN-V)p&M=)0{w&_oPWhb%6 z7Z8Ge#Xp`i%8PzOgUgR#ZWiLptz2q+np>l?e+rCoqy1i?u^MoGz{@NrT$DgKgj^Ix{*k;6Svmb$Ttslgo#reqiFR-dfffu> ze5UoV={0&cynuNa(L|4a>ui#wTDthBtKl0z6VD{;+&cPOU-)HCRnKr}WF6TBSd>(G zbW0%Hx?@A5XK@0b7nPB-c^M;5zWszOYU;Q5W17~nNe#blqh$i;U{`LjCf+ij9OhT_ zN-5}2l?_FtK9_Sh;k#~6$JLJ>K~)7_Xg9j-6V3VXfey(W<g;QuR#P{0q~rZ| zru!y#OTRpRqoXMKc79)Ihr?bUFj*L5E5}j9=stWSi{>n7T(ng4t)`|qFRxjK$DFTu zjiDXxrwd`=$aRmYrwLhk^$}6M09=}swO~yCl*}r0L|nS{;(M*ut0o_5R_3cA?&b+# z+(}@dpD(-lZR(|Wa~NQ|!BEy?ZyEn_%v@25g0!PlwWpv^zfd&*vv1@B)1;dVW*&3N z4-z)O?nNA8Uavv=#P&xft41+yw2;jQ*cuk0Yauf3}~9_|$rU25p$4P>?>B&!kMTOV93BoFL3Tsw{8)omOuC4st0!$%nKo zbipu!zF_UjiD7gJf=jQlfuOf}z%d%!TaE(b?gI{4VIQAz@mqvC`AD<&*ph(t8y!fm zJBA!Vs&Tx_U!t8ke3PIbEck))-kN?}3wRSEmvpd1Pe@DfQ~E_pGsKQK{o_fsbNH9! zXgQ%)F=dOG4XP=^w`g{s=ciWpoM{f)d4F9!o|AZO(DX#vLB0_XTnzm~0kn|3l?k{G zEqYY;(;l@F(3$v+-x&~fqZeQUSYy9{dx{rWLRX@BeE=QL-Dfme*$TX>Boy%J!Wws4MSQvL-uxy=m0L7am=St9joQiL};3Kn`_f2yEkj6Bj zLj*F>`?^G_;=!A~@ItrH4`{mMj<`-#!IaTm)VjIJ@uqk&`h$&Z`$BLUS3#|;he?WS zNhRH415!Pgc|j{{QDM0$?h{wG5U(??V%cIO#~jY7tH1|nUiP#-oZ@vc z;#wHIJj+!{LP%TB?Q#S7Il&NPn5Bp6_p8^r)6=nBFnC_PERXL*9&0)ve9;Z%@_1lv zzb)21H5oUo}OLGoLke@ zz87mt=}XqF7eD=;uyhC{7|3DlW$x?zsjTYxr<;u7%Z%<5&2!`f7A0&1PKvS1TewtY{fTum z_1H}=b$^lM6r*=fy86m`BGn%z zB+9=P>zhgDVA&kgM`C&Da1&Sc{`Pa24~)u_QVy1KMkL7t4zwQFlj_uE==G=ot6Z}t+1VF_5{PI)@$)dSEWW8aZaxv_}ss=&Z>gSEgUCkE#( zI|Ez>AHI4ikV{!r01qz|gUO8ZoHA=kDlFTg<6}sjS4zx@WrBCisnEDL3oCKExNO^K zmoJQv7q;Fx0rS95V0c?hpMnbpotm`J{O}Na zY*6X@icIn%jGk-WRT#B+OGrdv(NH{>^tafg?4jYA!1$pLO(8w%AICMiU~O-ErD*q& zGzCOe4q^KgHXyn5;tNf{mURvM% zHJSoR_&owjMnA42I@CZp>IoBGQl*YW_9Noih|Tq3_qxj5nJZ`1h|T$)mGRI6eBaEw z&Y!h@p1@{A+0X}}4c#CRjwdtv$Ey_Pa!Nc#Np&0q+ z5W={~bW3L(G0=SX_h*wk9>)Il8e~%TMPL{Ctqf2RLwEau4I9b4UAxYUgx)+b$m+^8 z%C(8gghx%F)^2`T<~(V*=%}Zf+YABu5CSP`Q1VdH-)_nSA$x*WUp$=t&-~2HX-XKO zPerXOq@zc(xW-C}RxMmX79BlGSm@{ITm@LBU#75X()C!jMuh?iwdiWwr$f9qMD!Sl zR%*Z~ZobEOH>Nbc0Q8F|NqN-_TDt)49Qvl_>3pJrq3=Xc78WR}hXflx*ft<#nqc*% zwXxn7($XfN_?rDhZhg<(vFoAGD;F}Y9MglxM_|sLRY{sy`$_E^K~WRI?CP!y3|CBU zveC?w3Gmd_7d^*B0`XQd{R5dop`?hjN=X(=s+trvfC7pd z`<}9vk~-2wIFltDhcl-98cIb32kL5LBy;A`RU-sOG>yn?YxdE59F^RbX>Btn*>W}` z^n+i8F6;dkRSqVKjL9_EIcWx`GLJP9G<3E~8I_F)3`(?`?roM9e1=azj^FBz(rq<; z9(I;}cYLp>&&K(Wg8Fol-k34l0VPW6;sY35h%!@Vxta2!IZm;1ge{W>4cun8Q=sng z)KV3Nw@wTMiFjdG4`7dH(p{Qcl}=Y_&|r1KNFB0HG(*TD0|OM?B#T~f=(I9yhldNemv`OpXAU{d6b0tZq9lo0(fX_Geg_I;usjJW?!*f7E z$q09Io#HlCp-4XE%qs+P*->*P!IuvwNSuhLtNTN;0~Ai8^I_=qE{6isDkS~AX><@6 zK1IB9RU~W{CBn0~LkD{}PA6qyYuxm^0C!f2@ga!?q?*vTa#f_j2`KJ7LYd z0GdGeS*fg8CN0Zp4SH@?zRaatQd@|?wsnN8T3U*3&$|X1n;-><$e5L`JHW24YSx+N z5K+h^@V2_Cu)(~M%?^4?@~g-j8JY@lU>=+XWEnBZbqc?pV=?CSGI{RUTFjU-<;>h} zU#@nENpM%sM-u+hnh4$uOH_R4_jUQyQu2>us}@Nuw_Z-E?^b65(gO@OZyMHOZcec9 z>>O>8U|Qc33i7@OlCg$j6850q#(~}t7vxF$c$m=JQ%)0$l^CFN@YzWypglz~@>j39 z8w(L@uj3pot*tfJ^E5S=*e7D?(>Qr)I=#nO3>R;wpjaV3UD}NEQD*rvVnASxqIcMC zNEH2ni-1u8KLZ+whrfboJI$F$|*kkF=h4wG`9*WhkK?INv-pv=IK@tXQVI7;CR>#j1i zrwSnlb#nKtXoxgkH%utRu$*t27op_qs31&*Vf*9$!T`6BG&LztAbKtF}sr2_)K^ z(r{vM!4WM>s-J;ow6fz2xZ*l= zh&l}kGSh|1j+V4|h@PR`R>rhdY0a{z)vyCl6+0u^$-FgT#{tO*8he4}-z#d(SKTKr zm10xO;at#Yzuz2$efYe=JI5Q4xg|HlJwK}2PeaEmCUNsQT-^X(*0MOyTnd%a60tlh z^1GrdE3l(+G3F%Mg7wQ3o@wS#NB0@#1E~PdZvzL}=~`%1rWth{Pa03oWApHAr0uX{ zrzpWvzt-agY)L)C=5h6`bW5ucKD zQz~OCwxCDJNn>zPj7&=2BH(K<7;#HC`8-@UV&l^CX8!PwsM2`eB?RvNz~Kn-+QTl= z?i9FNK23}ok{>qyvkAcC;w7tqtmLky`Nf(@B_zWsG9=@$j4?P1krPelVqp_G6TaYQ z6Sk4r8*y&C6O=~xNq`9-|4QMu$4d8bfg~u}W9nFGNh~~7fPxb%J&Q?FZG(-~il!;y z)Gq1xY{nU6R>g30s_uq{y-Kj9jOlRl;{^D|KztywYC{<1c1*X+i`PorGtD6>)>OVr zfLHu%*?F2Q%%AUmRJ5_EVL7sD3xIOV5o-y`La-G$9R5SlF^1Q$QbHvb$J4m;Q)QWA zWJrwvX2gTHWY>Zkz4>?8@!-l0^^fEHx3=9p?t;|jDTHFyt&6hX)4!_lvoOVelp6px zUO&G}a?p}W_lqzhY@l68ca^AT zfaetCr~(85`|A_?aU`^%J0<>S#t)VBa_r_iKi19j(=&?`i=GR&&)Azl*xADtz^;tD zq8OlpSQ0)2skYDW z9apIMjy&D=?CS|cbomjj@9mrZ#v{P)7Fg|7IQkUmW2Cdc+=Q1QRa4MBHqRXqqhcpe zGh?LFVuLJzwd%X#+J5w@$j9io>Z%XRd)@E*QGd0bJ@w2UxdW;NPqTDsyGecH5)gY@ zbDwYsBRW%i%Sca$J){=}E{M_o^V*eETjes8zfB6G>?@i)>BI21%@# zGo(!oiLE!tzKafiQ$1)hh+9}-GK$1blC<+!QXpi~-&F^Pd2?)+H+s4UbtTMjC7k2@ zO-Z)6h+#j3tz_yk=5rHF;h|ZosG<>Pn0jEOYnVQ^T11G_rY!8BhFKkikG*r>)@9x>Nb9}~ zCtfL<&>xgg7&h*XW;}$74V6REJIiEyvss(hG9jzjSy1w89`Ik$P$jdRVLw~;-Xs3 zc#9(kMg>@{tzJZrJ2phye15-Tx4ID&Qr@qvvjl<`7^w+H!ryb5%jZwgO9htA;MZhg zcx!l2p6(T42s7yO?e6@k{s=6~#^Ml`@Icwsm-CxfIlY#ZtRKFOC`W5fAVIgeMmbVX zN@mz()t6J+ra@4mMmb}4X8QDt5;#jsl2eR=-_4_XuAsjz-_W?z)jEoP{9!{dylAjp z`dO?$-lc`2uW_%2=;>gj=nADZy0h`>w<7g-1HPwEl_tW1k^4lqlSII*p3>R21nG8dXCl!#=#PKP$?+^DdNT9yIl^h3#l@ zexeuob>sS*RqPDiXHNxK{(YNoPQ4YQY_+<$pAdO6ic7u^u|j;%S$g)tQhz+FyzT?3 zHb>050(79(r;ibEIb&?)GuUcJyfTBL>^T~^kp90)XlDi@SHNk6OkHLYdZ z2QKD6DvnQY;kry!em^lTQgVMLz27(5xd#;r=JZcs6}M%LZ(x&1dAk#+tr-U=6`nsE z4a$<`%-Wh=Kh%|1CP@YVa*U@%FE~o-QZUUv|8fj`neRql$^nNFAs{yJ{+{n9E~K*7 z?u$vmzC3!uDvJRHc^M6!`-%YBnLpT>xVk1MeNviM#_G>ON^~e_<2C+T{8@f=LErm| z2@exomK?~%!hmUVo~!h$_ER1levFvJ;naQ*B1so34sFG6dQ<9d*Ve9{va?+sfX@#% zP+jaKHU}SQ7YwIAj{p8b1%;m8FwGgb)G=iK<2Ey0hcTH)Pc)DIso?`K@>fC#Uhkxu z47!AptVyWiGJ;5Q^N#yw5d-%!|E7NwJ+)e(m4beCVRXQPQ;f-)j>SNQvt!JRVcRpFfy zPxKd!6n>>;^V_7V8YH-1?<5!}g(QU1E*in@S`q8({%g6_?+=2_9EY z=cTKAHv**lQ>RrkV|erRTMA4$Y-@zr8?E@CcxD812`9fceJ0@!#NJZJ6Q}SOY+1DD zxQ$(mTHTDFRINh@Z;D~71+j>J{9yPX!>??enkMS@p|G8_u*ye<=z5e)(|WIL6zisB z@XWVi_Q|9&tpdm`|8=eNgR3#(`17|kuSZ_IDg7&3f9!=pjglQ zE5j3Wnfyv&OpD0#n03-1Seqc?%5t{K^6q3V>Y&}ui~Q+R5*-gU5`xsXc1b_dgQ|-k z+c@6xdRu*xSa=9^FDEbGaoFUK8Ld+A#HxO`zyy~Rgvk-{fcpoe0(7e}9Gmdbc}pZn zkms&Gnn%^i#nOMpRW0mHf~FBvuyQhZ)4cq!giVv;Dp=P^VFx+^4#C^*3iE=IxnO_$ zp65J!EY`cAR%HBP2Kc?BZ@umu!MRubO9$eq@y9ynuS5-FBmt)M+}{S`*msAicV{ ze?T?H{b~IjUXju9U90?q*!(`A{`=>L8zJ*bCLxpQN+(EW>pbttOCO=lo3XmDMC8ol zLIZp3(a@r~<0N?Qz|`eDtt{b2$bh80EchF}_y{6&v!fIWeRLws?+mltqF*-`1*7Q# z+NJqW@KU+s#SE{tNQ;Ea#qFw>#sZA{#WCmtKFT#cx$qu1dH3?8($F>tM)KKHON7-= zy(229_KzZw%$VB)^M@n`h{37N;p5r(q?h2e?A%XTtCPD7q=Li5C%3l!RLy zs8fMJcZ(^Lj9fAF1AUKL%!dE_lSh{z&gb{Ak=g`spn4c-!MyW3rDpRVTGgfbxkv=s zffq0@Sq^-}G1Kq{rIAgYlt>MFF zfi^}BJegKPcmE=+HH1lS_tcd}$ zrMs&VH9w||Vf@1+AY~TYb*2d3;ZH6}sp-W@hqB&adYBVQhnXq`n<2JUk@zv2=luBT z-H4skl(7ej5TSO40)@-mFYJ@WX^Nd9v`Db$wcjjd9x}@p|vQ=}P7bt7?aeA@NJ8q4e z8^udG+?{@IE1iIL;Y&}T?l-Q1DQ_5G(1}Adl?mym!kYfvLVz%Jc_aUCebpRJ;It%n zF}CD@Jd7oQFNkP9#P4?|oyu_4uo^PKenivi5o7o#Q%1{7Y1czf21{GRg{2Bpv>SG3`QGe;jiY|{Cgx+c z>Xrp!Vv_m9Lb&-nwLU+hFE9`IqgLJ)!y2`W+F6u-@CM9nX>2(h`CHY-8(R;4_5sV} zK@PY*wHtOg^bTF<4??Cp)SPN|-S^^3H)B*fhW#YJTAV0EEv6cc3pxBOfRz!#zg%0@ z=19k!mzfn@xzt3*WPp3}Cbg*77)GEfS(=WRS7J;H=x?oche)3IXRF55?}W3w0mX1+c@QkM~qLPTOZD zg&Be8b}@kjM(#F9DkKPX&+P}+vV?Ee2c|op9u6tzwP0VJ?~z~mDBd?bs;@+QhHbRr z{A4iqOrlB2cG(t9xj2|~0`gMY3FmM5nbc~IMdXVw-u*Fa;)o^E9vFSUHheCneM6qR zRy`hgYut!*W{@o;gChLY82W@m94lW$avBbtAFJJjJsY9=IiWndIP6 zpvss2^BA36xa7-QypuCDILwaIO6jv2?FCR+)_D!>$Xey8I4^JylP6IrLT{`H%g*jt z=a~5l9|jxK&B9W{&GSyw@^w;|;eNj-R#)_yis`xxkKs-|TNYy2@)(->(;F67x#}rN)wuz&*n>au z5v1ERf)^ENRDSlnm6bVkz3(FyeOfL!bkDD0zq`9MvR)wpu{*IWG^gduIV&BWbmgNb zv)0*Nc&drxM9vs3u`h{=oyf-rE!DoLn%BCMeb(ir4sPyP@`^VIaCn zWxF@~RMFrA%&6`^LjUtLmB?^&r4Z$l&axf-Lu1_dx7t{X295_qX>~NMK>2m45Fuer zxDrf;b48t7Tv^cd(H=@|xmWqx>Q3jtx9YiUDyFcM*lgC)UpER_Ba-QY4*T14gGQ<@J(t@_Z>EL6&d>ie{^wxsOZ-z z^3D2D7+NEmn=ObTlDa|8WmeQQG2RfsNS_$qcjw5Xx0zjUPBQDt>3sP=}Iz?^(m7 z$-OvbmoO!$Opc;a1C!b>z_52OB8@nZ)*@z=59E=cS3pgs4wX&JCvV4TeH2`y3Uu?| z3+hJA81fj}F=03H==4Rz9W*DQf!(dS7i~_?cMwAoarJnsgOP+9svas<+KV6yS9>4W z_odG1j+{yj2lGg5H`vFtLpg7UQ!=-oZl+|Oc}D7jZHSU4xU@0NE=68gk-CHKW6$Fu zIWUPZ8%~aWR5h=4aJ0hQ$C(#>kzf(TH5}jo+hc*=_3%+rrUrVN#}PFByQE zNnC{%R$Ewo#ahl1R8^RNPGs{(Z;hDW!z8}5__o*2{XP>Vaxr28?SWqL0LW!mJ>`J2v7(pj!QfR}lg z*3odb76JssC*1!`!=NC*E2=dc*2E1vEYQ6r0HfCGGwSOytJ+Sywk;q9>YpVSE2v8i z09zXo;`qAp@ED~B^8ye+{R1S%B#ggIzKs%FUK_u>3-i(dbYcxa0vX!?kZY|{9A00S zSxCKjZCY*jN+-?|`Je#=zvW|MzbMCUzJ68SVg7GR zOwh9n*h)1w0J_$^%^B~7wlE{{O7rLamxcm*wg-FfFz@kV8Wg7n5CnDV0N@gVx3IM= zt9P%q!BGGyI{@%OosIyQTF-UkS9cdTO8oU6MzB$d2!M_I!n5E2T)s+Q4S{*DzBht>_aJz|!K+=17rYVd zo*DwARXS)_A0Q4EfEWw_elN!|1Ar+CW_p6+zi&x^2n+%G@Gqj5w;@1&h5#JMA{5Yt zF@Q2r9uXZhVhF$>dx8J^?^7O#|Ni8n|1TX4#A*b<672 z1Kz)q{y0Y!eFMAK2Hslu+qwuy#RTl)Wpsk#fA=5$CaEca;!Od}pe+*s)=L8JOaMfX zM#`_k#5m=*|K|;P*V?=W5(I=gc)RZJfPDbPnF2gGh$EAf}hct)TLQ-InlYnRNA zVg-yUf^g3|b^(C3%$ zU|#miamf5tcJV(lG;^>_(-JJ>OpLXJWmJ{}Kw?4s^Mcz;+Pb)uKxSYEK7fPww-e~r z;5?AMEV&ckS(AViEWn1rp*eg}cxdxK81=t$JqxhB)h^M*gEp}`02x$a0l)v5Z?;yNkG8=$npOfb1!{;_XTZ33Otgkz$5AJ+!=)(eeX#vy6ejxr==9bA{8#$SO5s8tnAQva&)Ql5upHQDhFsC3kRf+iU!nI#u3APE;1n)kz--@5tFQ3c~uL$A%@GsC_5cNE%KYk zVbIG|aCXdTTIMA*68xJ+q5TWy00YIN>HznuB2ORX8GW0()&3a&=KTbJohUHy3DE@c zj*XV^Oc4PBCWuBs3hkMbeEQPKJEw%5H<2dVI?IrqSV+4Y(+l?8srb8B|0I9h8Dn z??((N(=GX``=2WC(ea|f>@=e(O$ga!rfAc3i5 z?9n>tH1VEHKCD(xSr-7|-u_9H%R@qPMB92Tp*&GiG@65psTb>+r+webP8dEiviD59 zn3Fyj-4RX~UcTPtSXYoCelw+BTR^O69BSdgrMX2t=#bUN zCqdzD_?5{&(KKK1`X)O!Lvfp@7Jq_6!82fKKsW0FE+AuDm7oiV;-$e;Idv0hdDK{s z&*j1VwL8<(ESqCrr8>cyaMf^DdU`ItFpS-Y643<^7bYA2m{VuFOI@;usJQCzG#{hv z_3d-^y1dv~$49gYA`-AmdUsW%%T)_YMiC{Ev>T`3v|+8@;&D3D1EZt1qe1Vj=;I{E zT!wCr-mX*KcK%kQjPDizi~@LNeIodWqGl$&Ma+REXxIr!oWPoHiA)N_aYB4gtNV$XG5wgVs+nqQM&b$uA2x!w$*Gpg19@k zG>E}6f5VtjGH5VNIc<{&BieyD#b_xV$ImR-UuaFKLqPB#81Z=@Zg&(KP&(hMXg&LNaO28? zR`;8Q1wA|h4Opy(lFGJ9&r&_(P5VuMN8`;M|AsUFK+hBJi4N{`1^U+so0#Vv2U#zE zoiA<^mpg;;!YEr7zJu=*O-va#^qZ#TXlH8*vddmc`JE(f1IInJShGIM^mrOO{-hq>gFkW89LKi&4=xvw7s!qXp|K9GNkNGLi_6VmCE6^ z5OA>hK9yJnF4JBaBRqZ!mZhkb0gvw`H%eJ6S}R~Szzp57f@l)1?r zY;+}PR$h{r{c4_y6Uln>Ck`=NKekLS=#M&ny%kJe7@2TIlPjiHrDIH1qD^M~-u9(; z*?1;Kaiv3RlisP-MB4Og+!*Q`iaJ{C=z>&~BJEh454U=sikZk80~rTcaR#^H#auOS zS8CSg`RRdZKJ)r1k!lB(1ATl4jyaK66RWT|mJ_Ry^voR75g?Z+vHIPm5WQ3$S7xQ% zxPjBk@kB?jW_R_T#-8%stCBCR%qqeHgN)tL3JSd*aM3bJ>7Fr|)+Ui$9;IIjn5(-v zZ@KB?x@(RryZffoc6Rkak$59ymK_ULnJTu#eT%?Q6I!dLBLB8C$>Mpk20Z3nDwfs- zImx*u!9!WcDB7b*6}!w&n!&U2uTwQNb^J<37Mu^#4W9V$ zjZC>%k9xWU`=V4&vqOu`(A0&-Cf{dGk#xKUN3?x+YJKMl#6p%;w%1>^>$&6bcr#RG#FWF8IDp@s zEY=@UgcI^2{!pK}E}5sAgU+^huwv7PSVP){L8LzD;SCjc&JMA!Qc4 zhj3X|o|iB2p|VWh)VY3UT7xo2VkIq3vN!px|A6R)%BnNr6MIYyZpT+APwJegh#l1w zAd>{fJ2-9BR5GF4Hld8KSS!2KeWu%8eGx1iqYi;=mB_Mj;Ml~l)es`uBAvIixEQ#Cff-cgB4VzR?Zd+b%o%NIz?5MVT>apOJIQ*O^PRCP)~`_@0?YlD$nzriqEw3IpGnX{U`cv zqHg%+UrG8sd|mOEyC6_(4+Ssh{VG&{c4XaAa1XogI$SUMbzMv!6t3-A7#~K0^Z6Wq5i8w(aP1*NXTVz0-?{mG0 zw6Pb_3}@A!fF|WZOVe&W;uIVGqGgo#3}Ro7k#{OhekSj{`%M7%!pdjLBU}{;>~}_i zJD7UEM4sJ7b9SVoa8^A#?i|JP-A`k;--2X%!h()scpNQFQ9!#T>YaX~jb1i~(lB24 zgixpEs0*TbquKkz!_+D&Ql)BOt7_+JMv*el<)#AZVbJT}H3NGi5JiTN7c!bWjX%)Si}Vck@l03k zM!E9QDjs(GvBx)GO0VI^c2i2BAu{bxx4nn2AjY~pWj&P?C&P_nK9mRtiuIhw7CUJB z(vOCuOIP~%T$T)Bu?pcL`Y)46`ffxP67QPMlM$Mc*QygK5U2kVD*H;$VEH-bon`Q) zhH+Ka;ntktnECdHC!HDHZt)D9CjHQFjF|s6`Q5vz(NIXi!zgQMp=dQH-j7+6_r}F4fI7+Ngrl;*Qd`WQ0zm@ z{IZz1HFk(dWSPx^#bU{wM_9MTW(sy|$u&6*3}2HOrPJ_P`J^0OHhHz)_9rl>R`qs& zf_0CDb+7#5+UGGb%fPJ^>Nwo5Bu+%Mo#W)TxBPNBRf6LyBY?ZJ04$SyBg7Xs8a&Cg zCCwF5hL!m(KmjGH@w)k)A3UMkN&@S)&!^g6p(5IyRlNNP4$GR7@{EM2u!Y}R^BCj? zp>f38@UIeCc`egh#W{MEh^P^HxV4=d3c8b}ZOt%K9PfM1S!cz4HP6YA+qlIS*{z9Z z6q?Y}IV=lXvq|cfH-HrqVux3&_*VBYT-)_Z$x|e56 zKL~n~iP*~(S5PsV{n>Z0!Q3AxraDQRM~Vo!(uwD??vTX|NR{f4VG=1evA`rz8_BXB zxo2L9QN({xrd!M$YjqOO*&WL5+%7_juTk3oyCe4+b=-Nf z*ZP*^?HXhhBoJ5&x(;1H^gji(5zf4Z_DeYoE}89U4=^yv-@+`;DCZB)o|A=XR}qkk zlESlvD)gp5S9t+JqSaa{c_hokvEi<5>jdjn%pbKo`+!PLd?#Kn$6J3`%>{%v0=K8y zf)+`4COqSrnT_u4#JpOy_CKz<*ap;Ubvli_`=J%*sQTTc-ch4ttL*r3NsFYTH#ys_ z&HZ61!7TD{Vf^kZER$WbY`J)+z8-#U+46w!EYZz z#eRwGmv-EoBy7rJc{Ka7h3Lb!?w;fFbtAf0v>)>#6bblh?6L^XOlII=2v|8bBqCeA zKV$)x0MDvYk#-78s&p9A zp52F*^CSAc3BIsIMb!K{kX7CXE8y|X_`Q~>ZrtbtdG3wyr%g-#&ArE}uD;Vd+Gk-@ z(Cx!?T2HaEVb$@4ZCX|C;FgX^@%0&B<+1`WXkC6i>bHSr9l_vYvVRRyo&Cr`>RGqJ zfvTZ;qa&uBJ@d$&NswZHfpAIr)oE{!Fkgq2=!DM2)v44IIcs_8ddQx|Otb#z_01;8 z2BDgmoM&o5`gm0``!RVVW|<1UsYZ7F>EN@+4Cale=0mA`(y83|GkrwV#Vee z!k^>J-}q!IvCg}K=WnVO7~$gl2)%_Ot{$jH$^kJG)#S_e+?*L$;J)_h z$)I_F&~!Y7=3_I(`uEwZeBegVh6bSZTFF}^_YYrx&lL2)l&~f!a}ibQhvWGrM*QbBRYT^KuLh9B7j=#( zPte|?$)`Y)WSPypZ)$j(^^=dS1zuk1*j{@KUM`7Fc9tssIirz)s$8j&z2f&6{nOH) zLeT?qlOK~`d6}pd7JI#?#}m^XN+U^N>i>cV=f-MZb8^ zE6#pjP$`|!y&<>2uf&{`hX)7P*Cj%HOKA9$&;19EWFLs<6y|0`y<~9K;0~>B#670t zAo4Q-@*_bF0{b><`xv8tnCoqs*P7h zMg}Zp&5{(56#o+}t6O$yH8((tB3}ZHe?B1!Gp$ilX|mvrfwC2I0Rba$5Yaw2EWXNs zR_CBkqL2hrkW=jYa1ybp8wt;YPUZ0l?k!@9AINgs@j5VKXdmSCFOV)^qv0O=8q4A;FPWL#4fH|DmkW4 zUO;+#Z!pUjq0Mu#S!NGl%ya5#kPI(SdGYr_A32lKva0&-L!S6{)+4Pt zH7384A$frh`3T}%gV)J=8aMF0)+>ymmDCkqxSk%@_sqEGhC}g?Iq9Q2K=lf`PAw@o z9!8mb`Ra9nMFzBJ2+TG8&7jpFTIco@cK;M;_40lH#}{`4!6H*&smCzF+;3csD7y7I zU;Y99rKE(+tZYrw#g*a9%+rlyE_~KBMFZ;~*Hdl{ zT3pp)qvIc^GBfi)i(klceW)y)x{lQDAZj zSHDLzY@fznl;p0+GS_SlEqKGNEqvRu*OXD6Lz-EYO5OI)&#be|j1<24l#-23N^O-L zLOb8Wi7LCg0Y)1wH^CpwEi2>S%BVC9W^Qtl?7d=CWEn<)o~_AB$@Xb4`(#_ail54o zldi)PnZ6&YZEUG*B*>?0%kKH~9Kb6iET_@CbI9-S(3W?O3y@eF+YJkeiLw8zG#%+N9S8Ddt;0ffe;fM79Q3a9785Qt4}o>cUR^ z3Go~$M?ahcIwFu@W%4rDK4xois|GEx-;pOE1+(^HHjKHmNF?-&wJ7q&DWgr7qZig@ za7_&0+FD;$45KXCI_2w*WL-0!WR$4K{v0)mQeROJo0ds)7=jBweF&{P)g{+>5fYmd zqJJ>l11h=8%O+0r#w`vqI$B7?4Mx|BFeVK)U`pmBFc^}@{&A32I0sSexgU*8FM;-U zhQ<47M5k4-e6@1i?-2|m?mepLvT`?5B9Jp%>KP*H*hiPad#4}*!wGgves*tOHpogW zw&sagb+Mn%T&NpkVIO6A)3iK-8F2iIWzvPu@b%YP+WXSS3K&_AT-pSQ>$1monBm%h zq(;)D#UGwvi#Ovc;e@;mH@`+m+HO9dkG!5PGd=`vCN(t>AY9nBU3o)`gBh7=T{)ie3l}T6{NFdRqQqHYpfqC@8eKq;lqNFN2tDhq5QHH zNEvnaY4D;WJKN!{^*Du~^M2rkV9@6Mbsz8?_`1vWtAa#g*Ppa?ibGztqi&0pF?cgA zASKx*4oA{evSUA7w~M{akb+f)dLvdm(UC#~5jU`sin}mR(nK?k)rx_;09An+XKHT4 zMfyu^VS-TFx*cwscT!3{S1~f~;+z*sGW=Qdkre0t$ z98JcJZ74mGbTKiQH1>vtZEETos3)a3a$0ahUtMLTm%`u}I-g(DSdIo8?U8JjLm;n` z2icdpW=cyvStaPCex;`u=?v6@V59Br^u0(Vq$y2lA7G~yM&y3+`l--WuWYM2m)6~e z3#fi)BR)Q~y+D?dNK|6S=$Auhfyc+co>Gm~>{}LcpZf6nD;=+|*^1ZsTl2Y&)sSBJ z<0AYy+*7nBDZiD~Ms<^FHf$6GK?xEeK5-x=M+6Q@kLq0l_%&H!zOGSH=DD=Y|#_ZV(Z zkVSc^4~6&v49{oe?1x59Z+C1+%eM(XMcI;8?DAFQdwD2&I18Bn5?nzc)#Y9mYXAYe z=UjrjMo7KO82H;z>xpIaCl!2Mg*Ni?0Sq%YO1Nn0SlsTZ*(*3ozgA#1(LM*f@y(3I z9t3%0q0uXaWv`jYq0eGSxezpP?!u1R7g?&T?sb>KMkq=PBGEh%IM_y81uj(3Fa}EN znyw^`=vpv@pa?n+2qTXVIGC$9OZ@>lfj-Je%i9foNEUxWCuhU4Dv!gjpD_;2?^pU2 z7S7ESLd1h`tZ&z3V`JVJdl4FLzW-5UDB7E*=*&mM|-Acq)BtN15ZV$NB7(c&f}fhK#Y%66G8|uuO#G! zNB}MJg$i^Tk1=rQyBEBaygVyMKbDabr^11Ij_NqorDDYGo_=bLr39}x46b2zHN#s* zU?C|RLmK^{V?Ek)@?|fVoNW~22ZhS#v+2b5qTQ|)uJHWx;1b8G^ujo06_@a&Qvgn> z9~UE8-mg?L--IltYOgogf@7b6eH&JSo!S}QA4g0QT;cPuG5Ww=gMAV)J>_ z7S*;2w&a_#+y68ml(CFQIaJ%Hur3me@p@Q7=gxernQTJDka`a8vp zE4c`(i;5NsUcFkh`99(td^!O#DX01VRHdU~UL2W`!RKgR10EKeEK~~;pqpG>T>MVb z>2GTH7^Czc!X;|!)EynGH1xNtun4J&1aTGGHN)8-do@N`$AcOA@q?}R?Xp;n-Ck$> z5L;NN4@r6d^vP5nFdc)nI%|hkk|)<|y&sh|OKn-$EIr}4$dzrC_67C0mN@%OpQnIG z1j|xG){&SW+qA^?o($~XV*LBKJR;<#&(x2t$SCLTCTr` zf8!2k^R^qt#vNk|^PBS;b-PZ8d#WWQL!_Bmxw=<%|Z=d!I&uTPuSKk9*b6AE*76@2t|qViLi-iRVa)jD0&IIb~uAjvH=~ zj;`bDuI92YW+MocQMHf@YWnrD^&8T+I>fg;Jk^L+2S9XD96q3>6}c0eIY6%1@J^9% zHz;ox>}DqTL5WQ3<$cfCgd@SuqCil{ChC}VL$vp$oq3V2Z`0W8??_8l$VW=^?>GA> zcpic-es_&{p%E633}nDmPVE$$bgt|D3$7VOrMY2s z;Ovz*(b_0|?g-GbEAw}898ggrnGA+@`n%_&%mllx`y2sbur zEBkz#{a_Aub~ON--hlJSdOsrv^KveN%6N}WArxsG?$_gby&4r$a-pOV8kN9-+qGdi!C#+v&3~`^aQMs*7W-Tt3H8buau&vcLP=>~ z>1xJq$A?wq(3Kw)ncfoMDT^z$V3eDuq|W)H0oi{16k-daVn35x!|?i}aqyz5=kqL; z1GF8vAwpC7G_o3oX0)BCUCgwFzU6Sz3hE4ZXBOAL} zb_|C+`3Vym6uabl@rShOxmZWi{R=MTUK zCCIImf$yJ28b{q~-b<;9m8{IH?CrA=g7j2b9HpXOzi{<>IcPW54WBm-4025;+3djm zR)O3|aZ{x#a;z2P7Cd+e^q)w7x<6UPgemtaG5tto-J*CSeD|38Q_4ioYxbu-5_*-K?X)z33@p&u%gbcTN_tgF5 zqbZ}!QjlAuOJR`D3GV$+s@G+jDgV5&jUSjw&BdM?G29f6fTO_tH4P$93>R9_TzE|q zn^fWa8o>s}rZ>Dq`wzXf<-MHB{f_?6wUgCz;E*4v%M@Ogo#T$h<=olK*-C~$c0~(K ziC`+%pJQ&8lolrVy_s=LF^A1DMCjUtwNE}AE_jQC(kIkQU&U2incHQh>D7;BkT&*< zdM(#05Odg0PEdL5O)%aOdc5!jCzJx;70X+<8OED^GR;xgk5hzHJ*#SK>hA3PZw$Ak zI+K8%R~pk!#La~^oGZ!2Ol ztvbu{wi9!&uRx#29?7sWbCLFXs&%AwV}`g`l`J?Ua`L9*18i#_6kMu?Q5 z?j<}X;{@Xj))gwoUEsET^CZVZE{Br}f zooV-SU_W}S2(Yy6(z+~^yYtuOxbMl-oiSZYvkV_$J3@{y zsxB;dZ^&rx=HwbfRvA`M+~9DB2j$gP`q1Qb-t$|Gd*1r7@{Ul-*E2Tkk^T7aNray8 z?24r09p4U^tN3?1PS8G@{4>67C;ju=tMa~0l>5jkqj;dCrmq3&F1SYg4*7PC`Fw_v z+-i%QoD$zEGUz)1>g<+5(=`>aFfi;0|LyGfAz%?z00$^u5fiL$2B54PQOSpTd7ZO* z-78q4Pax(z4lsrV01qr=4!{PcfX0~Fuz~GkZ!r-sfRj?1(-ko z1bKX!;ouHA98mE8u3&td#CM!7RxvZCoz8U1op|Bxm=eZZ7t9)^iN_8^abJ9{bp93S zY1t}T)k{gks{hroP3ca-FUOO$jg6^bJuxEmem{R@H0gt3Al(@LHraPkWb`@YRRdjf z1Kki7dj;fC;I3@(x^V4jkq{4u#1dmBFN&$^o$rCT%k|Ws@akL46CEj?;q@L*(sbv{ zb4HV#YIO`o6b38YTlQxld;XzWM^@f#t@sjf>f|=E zIjcs_ zEdHLDN{zJ7ow-G(di^5Xqc;aY+?(I9%iPZL3X|8iZE~04%gxm%~Le9=tbFKrx zz#zf@_w++1n9TM+6a38_fCKts`s=@DouTf+j0OM&<}GFF^eud#&vo;b(Exa&Pmp^> zC;EUlQ18I4E3)>4RtoCKY!?8qRGwg$w*U^XuoZy5PTt-R02}26+Rotsf3pHm)e$-x zBSBa|z8(fZS>>MhxX^Uxo!orX`>GuHki)f@np15n z!v_G@Z#3KZtyj6US?j4{V1W;E%-z$agTG9fW5x&o$IfQTz2fx&Vk6T^@DJl3q~egd zct^3SkmFExQtYBBRqq^f2H?Am3bGK<6f%aWzWphWRin_NeyihXDaK(*9f>Q}$z%}3 zf7sO0Zt56;gPWPtpM?*i?$fiSj8j{BFO80~hLXF*qjxL%4%xe(HTogQH+t)fT5P-9 z?h45VU^GhwB4ezeL%20P2T9ea<+^F-qvwi1Qu4o5Zxt#bI5%4$HO(ev~D*+<ys$gsY`NWd$(Dq@tlF8C@HKyoAkqN#hk~jA!)ip0j#F6_F zrj}Yi1snF3&G4}EUHw*{${_}uN8v-~b4<{a-^SR@Q1t0!Glk=|?#({iU6%iO;9ZCB z{pMsRj0wf_kyvE#ldL;6-&afbdj+MYU|FC!b((xOhF!YG0*_iZ7LDW4vI*nLtYcgp zar(4UTW<&#!nl$$Pyi#NqKCn^u1(=8 zMceNBR3h|&O4iCoCLIzkZhrYuohLnkZ~m&?%b}Xp^o5uQGI)#Ks!P1sH{A>%frpoaOl&-Q>m5;!%VTTk0s(qK+-;Q z3S%?H3@oZy$!iS~p+9Y6esWODtw#fL8n8jM`+Uaga_y-!&FIj%1)Ff^tKoDMN^@;+{D`}{;LC&S`O8c5zQ)m@b$r6om*f?&tx zxc^h9h&y{SmeZV3|7vYg-&aK3%&T~Pzv$X>?T5CDiDzbbnYtmji<)GxX>ybB+R~n|MZkF|k6@xDz7!m-|Kip076(7U=Sr z7@s#qo)+43+>^6Sq~c}#a8fv2%aK59f-DAA)UQ&}M7@Em_LoajGj0~?=&GS%?G$yz#=nJXY~Xf-#M)}DDUpl`Grxn&QapgP{>A(Gw2$le+dlg zUEWGr#qVSxdDna0%qC7m-uL8xuvA~ z1{Zt1E!gwezBgx{*u8oYL5Z#{8sKm1u=s5<(FgqOujBe~0&B#)Uat?`+N8Iq#_8`DIMR;&0r5J|s>Aw&2sTw=*gIt+;fmXR z5*MXu=9!%YMOCgO+Q-hKK8*C;eq%MKh?K&--2x zO<`@!8YIxx-*3I$E)1IyB~27s5m-Ji<#P~}=X>ex)Qd;JLya#-?3EzNB$_E-O=Pb! z@h<*pe~;q(^pa6LYKhKhqGv$)w)!JWTTEH>uQ8T;eWyF%f_ca~&GYX<25r*)Ov2lF z;~tWe(VXu6;x*3`hg14w(|4-Dzx?LYV=I>iii6LZ_4EXKG<*DfpHh9b0=zB&*P=H1 zONV1g_>wH|l?gTd9_VdPP=2LeEgQY?yfy9;`F_W*f%(VVsOS98fP6{r0Qn2=W4g5b z@=dc>b-gVyuyU3U`+Llkr6dxu^=oww$`8paw2zG~Z%4e-c;YUBZHh%3pInFQcj5my z60CB51ihX2LNoj9rL??|975WO^-i{kB0)i)tVl8GXk4D#lW&7-YHEom#DWQOjX%+X z(0@8o;_;j*!NF6uv6WWeFsYI-M3u4y+`G%iCM&`u3k)YqLZTb~IYVpRr5r+3O+S(E z@5Q-J@}Vhn}iKoN6(+2_b^HlVCr(lAg8!vru=3=oHU5p49@LyNSf`GCtU`t>+}E=Umz_ zv7&RPIW8a@s>ZPav*()>0a+z_y7 zn0gshw}d+1^0bG#y)?1E{qtR(94_|x;%1s71dPjphq&Y?)g8UGbof%reHlggyCrQD zti8ANEvrU*y+-=Q`4lO;^-!RGP{ifJQmiE&IJosxva`QFbk_C?bEZ4O1vkE$SR^X* ziqJzygrR@HFkS=P1Hi5e`iKDwjiLV&RO8mo1gFA50cUj%a2F;3vF=N_Ga@AHuEUDeM}QFOoRScr zfq9)Ls1+(%$C=vpw>?k0`b*!=k@@>Kb6yp+1t(wvgg{2^IN&!9kb}T?1=qMxDVCO7 zC>4?paDZPs0_f_z+dT=Pg!4J6zl3bQzXYPXpv3?LSWmCI$2BonNDEB}gup7!kTb-% zO=Bohcd>1X2W{2vga{#R6Qsur0QBJ#7N8JnQxhWrK>n{*XpZvbEr1f7?Fv9{8Ycqi z{e{oxgi_rhLjpCiDS{MmgAbJo;09bn$xVc-7>e4v(N3$|e44fE2o@AQ?Yc z&J=>t%KhbqmIJ`1031sEkR+x5t{m|EOEaJ1f4K2e%^->)N-)eIN~Bf(zY<7Iffb5J zLUB3uzj&@XE_fBfPYKN-|2r?0`j_$-Be1CjfEQYLAcv%#U;}fA3Odt&KuEGm0R^X^ zpr_ei5VUTF&8i{~fW?LR=R-57{_2MjR24{$LjWm#Nc>Cxl{r*Ol>*Ae8Du9+3gP+# z`TaLnEqK}jp!U~Pxn7cZO$fs}L>1q^REb(cRq=qmEdkij35vFaSoO!|@7pTcGGhF< zQINIu0wvGbLCMe@nG3Q`!LC*itia(f23hB9lvEIxQ~CP83EGE$^{D0XKb+7c4HMMm zfdkfc0iaPp#r}I65&V~!6xh`oAO~3!;0|j@e~2IdN6X)Rg&ay?w}B8Gg8!HB$p+$# z5JDD|@F5&Rpa*Z+Ks*s*^&=F!h=E|-U`1Pq3qbhvZ6TOK(qFz@Tgco&uH9DLX71H1uY_iiJc$@L-s~SCkVc>22R8R@PUJz0Js#MUP(%?7VDTqAj2~WDcDK= zOCuS$#tEQK31!;)^VaYL7Y4>q9tKA4UrgiM|L8Mt22esf337&X!g2Q(1ZCWz{WTp* zIENCPFu~KV09NP@jSb$w1Ym-{IYL$_vc4VT|?vh0wqqE)d^` z4zvqI9U=jgA_!)71>itIQCA44P6P$Tz&Q}`ub&pJa3?S0!@#sD{ogS|0#CXAGiGdV z5J^4me - + diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java index 6b96230..5171c34 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java @@ -25,7 +25,7 @@ import java.net.InetSocketAddress; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicBoolean; import android.content.Context; import android.content.Intent; @@ -75,7 +75,7 @@ class CIMConnectorManager extends ChannelInboundHandlerAdapter{ private EventLoopGroup loopGroup; private Channel channel;; private ExecutorService executor = Executors.newFixedThreadPool(1); - private Semaphore semaphore = new Semaphore(1,true); + private final AtomicBoolean CONNECTING_FLAG = new AtomicBoolean(false) ; private Context context; @@ -143,11 +143,13 @@ class CIMConnectorManager extends ChannelInboundHandlerAdapter{ return; } - - if (isConnected() || !semaphore.tryAcquire()) { + + if (CONNECTING_FLAG.get() || isConnected()) { return; } + CONNECTING_FLAG.set(true); + if (bootstrap == null || loopGroup.isShutdown()) { makeNioBootstrap(); } @@ -161,7 +163,7 @@ class CIMConnectorManager extends ChannelInboundHandlerAdapter{ @Override public void operationComplete(ChannelFuture future) { - semaphore.release(); + CONNECTING_FLAG.set(false); future.removeListener(this); if(!future.isSuccess() && future.cause() != null) { handleConnectFailure(future.cause(),remoteAddress); diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java index fa3afc1..9bf94b8 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java @@ -96,7 +96,7 @@ public interface CIMConstant { String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED"; // 网络变化广播 - String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANAGED"; + String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANGED"; // 重试连接 diff --git a/cim_for_netty/cim-client-android/.idea/misc.xml b/cim_for_netty/cim-client-android/.idea/misc.xml index af0bbdd..703e5d4 100644 --- a/cim_for_netty/cim-client-android/.idea/misc.xml +++ b/cim_for_netty/cim-client-android/.idea/misc.xml @@ -5,7 +5,7 @@ - + diff --git a/cim_for_netty/cim-client-android/app/libs/cim-android-sdk-3.6.jar b/cim_for_netty/cim-client-android/app/libs/cim-android-sdk-3.6.jar index 770e0aa225f33a7d8d6b80fa287b0ea450300749..48b23e86c4c72ac183af980cc750d539eadd1c45 100644 GIT binary patch delta 12284 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 delta 12409 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 diff --git a/cim_for_netty/cim-client-android/app/src/main/AndroidManifest.xml b/cim_for_netty/cim-client-android/app/src/main/AndroidManifest.xml index 69fcb1a..e6347cb 100644 --- a/cim_for_netty/cim-client-android/app/src/main/AndroidManifest.xml +++ b/cim_for_netty/cim-client-android/app/src/main/AndroidManifest.xml @@ -62,7 +62,7 @@ - +