From 2c72ce04f6a873e3b3e235266326bbd19ee6cd0e Mon Sep 17 00:00:00 2001 From: JiangQiang Date: Mon, 10 Apr 2023 10:51:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E5=BC=8F=E8=AE=AF=E9=A3=9E=E8=AF=AD?= =?UTF-8?q?=E9=9F=B3=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/encodings.xml | 2 - app/build.gradle | 1 + app/libs/DataCollection.jar | Bin 0 -> 83195 bytes app/src/main/AndroidManifest.xml | 13 + .../business/activity/MainActivity.java | 9 +- .../business/adapter/HoneywellAdapter.java | 76 ++++ .../business/service/ScanServiceEDA50P.java | 258 ++++++++++++++ .../business/service/ScanServiceZEBRA.java | 333 ++++++++++++++++++ build.gradle | 2 +- 9 files changed, 687 insertions(+), 7 deletions(-) create mode 100644 app/libs/DataCollection.jar create mode 100644 app/src/main/java/chaoran/business/adapter/HoneywellAdapter.java create mode 100644 app/src/main/java/chaoran/business/service/ScanServiceEDA50P.java create mode 100644 app/src/main/java/chaoran/business/service/ScanServiceZEBRA.java diff --git a/.idea/encodings.xml b/.idea/encodings.xml index f50231d..21b26fd 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -7,8 +7,6 @@ - - diff --git a/app/build.gradle b/app/build.gradle index 0ac67eb..ea68322 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,6 +61,7 @@ android { }*/ } dependencies { + compileOnly 'com.symbol:emdk:+' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'com.google.code.gson:gson:2.6.2' diff --git a/app/libs/DataCollection.jar b/app/libs/DataCollection.jar new file mode 100644 index 0000000000000000000000000000000000000000..1f01b165442760212d9492994b757e28fcb853a5 GIT binary patch literal 83195 zcma%jWprFglcku+VrFJ$W@cu_5=#~{SO2nZBNQ3ev~ zj}ah$4O9HLlTklM{O4pjA$cirF%?yMIq@60$q88*I{GXIoAp>Xw4(6K^$#tYRg9qGV;SBYR*Fpw0#V+6rdkAzn!j~fd9M;t&=(x(a+xy z`+Wa#7cf9TpLh1({{q|D&8Y|TvmVJOLeA8KmkVq{_u0GOG$ zSlQb-n>l^8GBNw}0)KB%*8klFgk7xwrXu!s=2jN;CIBO6=i~$#g>^yHkeMN9DG~Sk zz857!rSEkjYUohGNf@IEQpCu#$?zGRDwz8#6?<15YiP0A=dZXX}$y$S$yLqo2xWL$M{P0(F>a4RbCrnW?@KjeA?1%L+@T@n+Vg9b3(?l(D@UXIEUks1Fw!`>) zKYyNCr97v6fpQmxA7%1ktYOwBY3c$E5qU{#zR#xhlp2G;~^;V+4xGX12 zh5(DzZS%|3x{kBPlNO#=wqF5zQ(nhNQ}xsKANX<|#%0aaJ|F_6uB5J{97&%^p23g~ zXvTo8r8n=_!s3B|14}tGn~?_GEa>c+pR8(WcPc5B@xTZvlxa`YfVp>_|5V*xhZeQ?6vw z0R>&snq6vEb3%z0<5jz-Ql~h7gdllw6zR85E0urR{omUh^MBY8U~ge=1^5K|KUkmY zA7;tgTZsQTpOooeD-o@_u8bmt#0MGxe+u#?s0Js@zfK~$xgkHv>;)5nwCz|Z>~#1LZU`)p)U z45qkilu;*Ww1Jcaj1@c<9!c7)BieFOnyQ3KcvTFQt_ITrwmIv@tV3eHeHhP}o*iV1 z&a@Y^Jx`!fS?^}T?ODR{llio>jOqP`E4{70%OI`DVb=LtAMb#}iRtn!w+QKBGE`Hm zVaKkAZ3pFkMuXBtpoQb%Xlr>C7}~l8Bf6f(Xx4y_!K`DGp~t%Ukn>Qc-VSHUUNQ%O z0%@Ms{lL3TMqbJ2yx~`ZYtf3&gIZWt;7GjP@mV+7NDiQGsk&hne#n8LCz#L_t%XMR>(-Z!h1Z zO`H8TFg~_>a8|&GCS%+P3cLb5EwPayG<0bEhh+@W*DU+uHmWLrOkVY_s&>1ez8${; zCS6`DYdAcyk;WEZnRfN~z|_%w9${50`EoL`hG{yPM_=a5sRS=-Jtz{uj4JMeVAK+e z9&WwGO8`O45nGTtdLJylD(0?4zEQ&u!Fg0l-9%#%m|Wav6~8qd*feEuIAm!V3+hAZ zISeNWNf4aJ$ncs70tc+l-2gQrU2Ek{&;VM#W=u@^pdsTE@>w36LWUUM`5gEy6P>a- z78HU$=G@tP{#z`SW%Q6TNESi8{jjbb4SsWqYa57MTuJ= zy-S3iFr2O!6<18iBRkIfGXh@{DELj)g3x=$12j>om|2gc+dWgP!d;a%e^x6NQVQ+y zbh{K5QG+BTbyi)F>eK=BP-ysXinx^eXbKFZua)8NV1HmpBx;hS^)qHgf9{cgVCe6+ ztp6PvnEyh9ik2xDTC z;6R)55+V!A-#6D7jU&>j(gU;14=R8(WJ{RaG0G(R0o8uvnd$a?G8xK!g*QjDF{*V& zHYGu2Cq1G9d~F+9SDgWIp()wl5Z9joj)Mj|fv#R>t@LoTkAI=#?#~8#ijHp_P4q$F z!7Q6Y^L^uX^^I4BrA+Wl zA$4@Fu^&x4!@c*HCO;+yn_sy39|Z=G(851F#zacxNa5-W)Y)BENea!&W8%tYEf|jt z>Rhxjva5ixsiOS3MV3(3Ml9u0&;^2$#|;>-m_UlH@QIPiSgk4UaIzk5N{bkhwK!VZLVfAAe*P zK*klnE11B0R22qWlNz>2_>kvC+3XJx(_oBc5_=)ls~Sh;EhwS0v*V(2Rm0`OLiY>kbGgCmY`^w6wXL6^pQ^@8x~wsw(4;ok!*ti- zS=VK{v)%7YKfia-ZC2lMVOYER^pv@XbzT)SW)@zV8`=T!M5ajEOfGirOdh~R!&rU# zA(TiUl?m{JaGmK{2wfkvkNvNAC>#iRAWxa<%KP2vLeiXSk z>5d6>E)=EIz--lfmi2lDog&Mko3m%<<*v)eX!DLEa6D>R3&RnYMB}J6$j&03tCZZ4 zd0_4gjOr>0ON%+3RZ4GPlC>$V$_%OO`X&P)+bm5?|VMaA=vA6%PB~JFN?@)Gu7s7D8``$tBr29k(etLOZBgs%9QDu zpT@oE3()Ok$?S(H&L#QP^fv9f#1`fjn**fE=Inm7#xOc-RmH2$3!x`RGN^dbsj$ZI zt|=)$Y{SYM72HZXf6&sKs!Gs2<9*ZM{I%#Y41dgiJZ6nGF2$P;$Sj&uYLxOspxbY3 zk@h!<$>`=OqIb7Q;$3xF1OJh}C#x!H;u>x~UOd2__5=5U30t8>4F*{T1peCefcEjw z76y$}{^(Y(grWSJfv2%3d>>nW8firVvK*J8^0>)-y*fKP8zkO+{XT;F%fVjM zLQ#SHP)*8Rt9XsM0YkP{IW}qdE>k?TMXpeh0#&!NTG3dQq&j*=D`ziZdJowKIwZhC5Et0i6#?S+#@>;MD@yN4e)DB!=mm=m>E6+pYgAPQ({KC>IECuFJ+vOJb z1qQcvHZr+`MZf$zO$U3@zWuD`Jl#UtG8{5eAv?A%kw<6-jH)Cb#It2wKTod4nfLhx13lKLUHRl{F3<{gdu;Dh z?h3IJGG&32pE!5d5vjf9(qkK9U>V1570JGD_kzEyOVTILcVZT4E+pl4V-|^7mxLTH znT?rJC`9XWv!fwU64V~6_=G@K8=FO1Z{kT=;cFf_tS?SuJ?%P4Z zS!oORnge5dXZ25B$AY=HxwV-w`-fEwBGMq>< zezC+Ey)3h@iov2O#|){;DE`hf4>ePWe* z5Vo+1{X&+o$bWMboI)+J0SrIL5oE#e_qGq@Smgo4>_VwO@<%wctPy$pkc{W<0y~aeL^Yt__%l!_+u}?_9IYh1qT9(g8QdzhWLN% z1^-!Dk*c`38vn;O@TP!chWo*Lepi#UZpa8>hSLTwv6bib1KK$eZRNX=kalGzH*bvu zm-@xZrYmUa1>^?^O5#xNhCRy{_-9a)j5Mso^hW|K^t}fUZR>d9;Qbfgt%rxh=aDUe zH;`>yeCjrAVa#RJqM$bXKmv}8KE`}QWg+rl!V=-M;dR_ehd5hdSf?p>NDuH!r;rEE zCvwPE)J_88dq~`;xEniX#tA;}B0-b527QkhAvv9tog(RsQ*3$>!?k)1bu8gRlhs98 zPi_vjfm!zYvdx7AvMFlv#vBvvA)`Tq3W zUy_U8lJHE9tb6etHR!T$eBgeIEiiYk-OQdt8(pC2OhP zS3e~@|26TLrbLY~Yv;<yo2PhK?B*P$Vw9(1gj|%4GA?y{{psWGj6!MQj$P>``c{ zx{L)kLKG(xepP*Xj#guVFVvk>kAbb4>$?)RouIUYy%LKBTd8}*NE2VN)PQRHSRe=#2jtM)X`kTeH;e47Vh)XNfFpR2`g_`kJrhz+;`ok}S z>Q{{DsA<&bjuK+wL1dcLfDJW4UtL8a9_%G;F{}sGjS(p{n!IP1GfMni7&L;tfCvQ# zeK8PFYW^V$YW;yzILH&!me7*Iohl}mo--Xq4)RQCZ6I$lxCZwC{``lOPz8su0m8X`DjoW zGtwDXi<2wg+!vBi>qQT}+@_iA#SGN^KlkraAg-mSDNMJs;_7cNB=9XH+87Uu8wL4Z z-rzR&2j!#mUe8+;$6IfGbiJ;I1=Dv1ny|fc?ogau@h2F1zd+xk z93X2Mx>VGcUJV)B&O?9*K#f85ywy-+bT48-kB=vF>HRvnh zU!7QQ5$BWktw&JiRfE!i2-6S2?9BqqKB1$;HQ^3cU^5Q-Ys8URzqUi#_LqouiAP@5 z`bZ(tV?h3f!Vaqk9|`f*7{grgHtm<`9dEWYuxwsM13*_w3@zoz>HL-2g5j$aVHE4C zJ(QwRz|_E2;D--Ie{ftZEM9Ns)c)`>FHHkq{jLkmo9iztS5}_X=VQS~Q2A^5l309SG_x{1HoJ>EYjgI#WXBji}AJser1XkQSY*s8KUX82*Y-);c_uy0!iT?geJA})#7V$m<( zcFQ;L7Zl<53M^mDn;~ECOEA@ZJAx+)<}*Q$@ zBQVz|6Z`Ku8I=DKfsL$8|3$j~eE~}T_Y;IZXUQ4a8CjS)k^WVECac+gR-Z_|EvPkg z6bxvT_Art^l;cE1QHL-n!7IT948Qqq=r23DZ;~w21co#CjfsL-?;>7FU|H0{Gsww^ zBu<}AUGUCKo}FE6`SrX5r43Xv))1Btnu6h_!R*L`EiekFLGRRru0mZH(FY=3v=-vr z5b@4lDGmgNO29qix9*X*p5t-|Sh`QnraOT@i1Mqk&1Xa<^~8=r*;xUV z@{mN7*+#1(vKUSmYB)XyJI-JuRj)+{8H|cVk;gp8T6%)*7JQ=+THLN z`rD%;vD_F;OT@5w)FdA5Rzd8XWA_-c(7xO5gC7Qivj(7!~$i6(E7FCxsWZmV~jrS>?I_I&*&detk%a9Iq=QL zbkJmBC+;=hblc-xVc?>q=Q2lg%)cMEH;wJr?vM>!c^t}m8l;)cIPPWYb4hIKDxG&G zDRtcER3fk-yLK?H14U$9o`ZXE(7D@M$p@(28%e0k3^4vY3%%wuhTmosNwtGKq9mOC zQOr$1C^w~m;SBp`a#Xqsj7>+lt;3y|7-l$DE&`SyVfiFq0t6w|GAC?^C_?J$w-Iin zOCqNi6Hh&feGGJbZ+V4TJ;#n*iiF2Mz_0D-55@na=#zY)M#+Xfgc&fq8GKD$M(T8c z6>A-w`U-rHlkZjpI#zBH9E45$#&JNfYXepIaZd~w6UGl0W?n5$aT%1~Dg?cJ`$BV9J}>vxV~I6B)zDRL_rSX=BA zDP}7Oa+I{9kh+l6F&kzxc5|!p2>&W|RnufKF(gGHs`VlyTSpNsR8`fD2cHo%uoJgS zuSD5-Dd_Rs_J?e*3#}gK3#lC6x9c~crAYX%aC^Ww_iIXlkgU9#;m+4_co6t0NfNBQ z6+{%Rh1m4-4)u61S84FE>q^l~IQ%5B{5B(iv(_DdJm+gcGJ%}3{=+K|9y1>yUtcAs z^Hc$Yh8-y$>*5NAi94F#VGp_e3)ngJds^OV4L))M(b#qg>xTe${efjRZ;=5Gw$8jA zov&5Ht!&;Sp%~|u!)|QeGohC@j{*B1`FN*SB=7=DS19lT%{vzJQMopcA-r$Jc$rr; z@I5J~_C>$9)~z)EFVil{j45aLsQv0 ziM8Gfchq=Z-Q@;0vGr4ng4luOpm?Txec@BB3Ph!U+M^V+E0u&h@j&crgpdQi!i`sx z7ryz+slp_cyorFo2jD%+cX4Hgi)IdlyK`nrV_nNO=12_^@0izWzg|Z%0gBjRX>US= z`SJtqa}c%!?K?OyZ$lsg`Fudnfopr#mx%~pK^oUku3f}qEn1G}s+2shwsQ`_br&{n z?QWhyf42B5{N|&mYx18V0Ng;l;(?ZWiu|-Q$Yl`Ck-7L%W*I$5l8$mDtoOzq&~QH( zN2G}IZ7|x9o!zqN`L>UeYFd!EN}~0+{M&2GH?#D3No_+j!mMv>v821h7kc8XYgH1V z{Zn{5w`0emyh(6wSaU_c+q@ZZ!kOjiT+Q@woDD06x)dyuW%y<#p+)ht*3vS{McTXPSyn~1`J z{}D?3T$)-9kAt-(zmy}WvzfnJ(yn2E#Nz5j{1W6zT?JEU%orby_(kyEMKg9JS~XTw zuHA@QN2dyDZL$Mzcv^DBkZXi0QBw_@l+^W(O0hWDMdzwolA@uUku3s~2kwRKx_Ep9 z8H4$jh~yyFUI7Z%Km)Z|WlzO&YS1-9(d@~X+(h1e5Gt2oe3&IZZAYdUnJR$HbzumQ zdHd6}LK5p3kYwaQDeTs59HR>2MTZwI>!n({pMPCJhQ0{ic(*cg9QC`uzfxyUR)N%d zDQO8iMmu}rXQl8DtoYj}l^6L$*$Pl9#f=SOBV@{OI4;J(Zz7z7v|(lFY?E#K(qsc? zu%{VIlDmM+v^^wwrqpoCpFX(8IjYP(mPNS6-I{_dgTmtOAQpO_p22s=NRbZEl{(bg zXT5fvQvo{H@?o09)>t9sv-XLCjF`VyJ@UL{QJXmjl^uiSXq~^26qk6Yn`hDj(de@y zhdG27;u^PW?jT7-CWFu*Afi>KjfdVwO>YNF+^Vh-=3Bo;cz=wiYqYCN?_d3hAS)iI zgqd8Keyumt+EtgUZEEyag3;0=3?{<-g<=iui1B6K!l};3JnH_-FkNjuFP#*E5{0^S z`5j2}7yi-mHhkNL!A#c-H_ieWz>;Wvhqf-rlzqb_UK=O@8T0F=&Lj3sm)+&f0~n;| zOQ(;H7hXRdb`e`N$d3w0$&N-VYbU5!(S7B)LF6nTp>B2xm?Kg9jbiK3WT?t|lhJ0I z;JfXD{CWT{@)ApMw2cNS%kFp-CjA6~#+sy*b7s-AIWUsa{P1;tU?B+3Z$-}RSa}sv zamG?y<7iD8LQU0xLW_B8Fm##YY@!~9l`luR1?DYVBll}~CLja5%c zgRHX$H}=OTiDTLpSmyHz4{o=vV~=94NMh2wcw>-0awYrlp<{;Xb`4|=8;t- z#h1roUiRE+9MMw{bjI5HH4~@!ze^LIP^`%LcnBbd->)jB<*3-~0itbIc;gIyCX$>2bdam+s zsbc1h()_|6ca;&-Rzu{DeCe#a-n6_d-;KK57r>eZFeecpkrx^Ek4$yreiR;4$sh7@ zCK~4Vg@6kBD4|3^_PB`VQgitQB{1-LqgpU?ei)#p&;MX)5OP|>3TqK1wmu5p3M5{h zRz;E`W$}H&q^Hzoqpeut$f++)=X+D`)6HPIHq3}6_;9bjAwYl_l5X>#=SYw~OV||W z(w4&b4YkQx*kfw0FM9jY!0|FNrz3k^$*9g4HHi|_-;N2P2+@&c-L4ab$C+#ImGpu< z_=v~wD1XJHb>#zm3C+cD!yzKgq7ef@=@u)@Tc+9YTCF&^x-w=EHs-I_7H3nOWiU20 zQ2+5T=+TB8JeifRmlk$PCHDp=Rgo%6c|H+unttJ)0;pg=zl4 z@r%&{bvn-i&Y8;WXJOjqs!TTak}+RJxsdi^F!ehsNL-_kt@|In26+#`pSYsSjF0o3=w{`3Fj~3$u@y=t;XStri66 z7Y9n^P8Hhe%^Bv4MhGX#b9Of;ZRN1nz8Ar3dXb2V>7m$W@4@Bd2hz$#Sj$@GoxS!{ zev!#Jf+9wq*uRgh>gETsTsXA3tQei=H#y@I#aSpSEzO(Fx-$(yc#GIsC~VR~nt2Tr zVqAH7Lb=xc(QzkM@Hs9r*2g8nStp&82g0dg12@dkrBx>n$J3SzMTd9^9N?GtAQlD^ zP~WNvk$mO{LM7@fQ6r)ID{xc5MigZxQn_PCjnacLQ*mQ9AX7&?R1qfZg$SlxwZB@eqRT!_8FVY0G#sioV3 zNXKgAY=ux=$f=JF(B~A=H>^;Y+$kE+U0LUYum2cAes>jxs@$*Pm)GEPYp8o*;6JOR`Pn#12Wq^U z`py|#RNvOt_Sc*<-VoMS7Q)4OTY4eqW2RJk5VLJ;3KZ!YxIiZxk5@e-_M$3s+ zK-^&&M}N=_W`+>jFnCEcwdrqtIJb%zVo*bg<4R3Yzr$q46}KIe5(_x<^b--sFAj}0 zIijhwOb_niwrY0ODw$|PvCcXOrCSp3+E_+UGZr<@!w%v-i4MFs{v#gf6NFcJH)nza zi4KypY*D*epbrHlNCAlR^T;kNT|a_{+pXE&0DC52fWu>`^QgMbv%Jeg6SA#l^=|j< z+uF=5A%2z8>-@EGes}uyNO>SQWDq9LEI(xRhV`FQnn}vz!+4ednO78G-dAKWmY8Q6;KheEG{Q%gU)bSfDXLk>LFuwlVMr0s^+iLIfs|M zRZMWVJTo{UzLtVu#WfZmSsTs_WOvN-^oNBG;07I)l06yT%W=+#?8qhO-ig2YS~K)k zU7SqLS+aBmV3>jD%c90OIy&vX*lPog0 z$vp16ue83g|7-5)@8u@7oVb;^C~FzV1Zkax2-?B6f)F}^BjPm#>HK|8;Pw4uw> z-ln6ZsUA1R29J3b)JDygkn9FD)ro69hjpBK30WFt*C}qmZ!q3sj|7Ck_b*x=E>^dS zEccU-bd(yM=B+#RG;PuvMw%5WIm`pVXuTxT9*dfobD@jRvk~%j6`m6q&uQpzf+lig zMdl*Sz6O&bJ4zH$@4XnUW>wPkmk^MpPJ0v_Ole?^#3;UvawUC{@K}?yeQf$ch*cEN ztDJ7%(q?7hrZRy03;Hw`?2GyPhH0Z45eYsQpn*X4tHAQQH6}fAA+qhq=Eyq>o(E(w zqC#`@IMEsZ5HldU?na>g)m+(VYxzm?N|NUc%L{YQ4>he9Cy5EcF53zY&AhUgA*~YJ zcTAV&iu6V`pfueAhIhg~32p2YMB%dyf4#{wYfJBu>?h7nyTex7oDUSKxl7?_Sfc$7 z|Hs-hYa<~3q0Q3&Bq9F2wuJWY*IvcS!p_LW)yYiJ$jQjo>{G4f{8wKl@lS$pZ+b5w2uGw7^a%00^aVjwz@i_U#M zP|Cqe%?;a;B_)uH&NNa?JeM$(B}Ur8GJGVf#9879EeO85Z*vE%a<{i#K|hC{sqA)C zvk&tio1Vj5gH$f@X`IKZ^H~mXxdu9pq=@`%KBvCsPy2!H zDITjgsVs!_{ZO9EQo9@MU@yZ4M{b!Yw^pjsEKR-3JWC6H1a1xA!``z*4rKR9=bOd- zJ;(gn-i)r8f3nT=`o3OiXAVT-j|&H8c;pRigU-%i(8Z z%t`%v^)&#Y%e60XBuQkYC{5wTFGxZf;^!e21g3p-wQr~q;lbi zN-#veovILxdI}*3&B01TRp={<%-#l~3-97gu*ZA_wgPG#AB_`@fHR*ldF#;Z2zDjd zw!^BF+pb=a$K&mQ>|G=kmzG6S8cNF$MzgTaI4G_NmNv46NFHCLU7BZn=AXQlhtsuU z7yCe{ujTkg?Ht1rEYB4}BFPx*pS_LODF>{|9%vUt^(%WYjd+4_soixUcs#Q=6)kYE zkdTaMv;dP7A3S{^?FpDr3_%$^a8xNyjA%3gQ#2-!)?{)VD2@uDAkvv?P8Z^rHcp&P z#-TPkd$DMyCo#ZU46Z<2h@H{g8Avibh!-`mOev0zXtV-TG&1nac=9Ju92SBxlu#4p zXaJHaJbt(!vQiuerZXo{@H?p0&Isq7Z=5LVel?P5_NM1E;veveYw&3R|Af{m9v(X4Ttc!p~Hp<=Lf!|wOdNd z60)dV|ImE|;!jG0PDY1ujmN#%@gCdp{qXh$ZW~hE*36@rrMT_v&=7hFBv3!2?zd!J zc$e$;93i*_RI8TEI%R9sQ7d0u{HCf$F$3VeuT=V+eP!KwDy$9q6<#mPx%nJ0aHm|I z)a&oi*aH_9dB@6PHWUMz-?QgZN`JCa(XgMuXsMs7-j2cLr{54WHItyGF+8s7Fp%@1 zK}dq6eT_SK(6ScHju23WCAzmwxrvu0IyG11?9w>>ss4n78pNyt+4(e4>_3ux)c*@3 zO4*s)|0_ausp$M6fa70yNug8pEG#H+vT5y&$jc+7rmU9=3Qv3P1X!$-c}cZIhFW~Y zAZD~NUH1`eUtYOk&d4q+x0viEBEC&?lpbb2{mNP;=;`)>^rzz-4TO6jOY?_>Yr#5W zbRXUR5~K&=1&7bFqA-xi%1fr$gs3<2pj&zHRjx~}tNWN6%v{@IjYqDTwX`zlG3VID z4I1@~r20~z^!s}L&pOqXSl+2m#mnmX6PRRT?;zpb(%B;)2$yd9;;|;iNZS5-mX5kh zW)a^bhehsD#!dfm27>KZsL7bBf!#glmn2UxWv>#G=NB;k#o_b!8QDfHdlX6B-4H0* z=Go)kU7Yj9f~xeI8ZFx?mQ`+9^4FYIin@(?J)QG*gf4dlI+-7nF*W#>_%_ov6-Hqh zF+0XLC2&L*RpyvR`fl> zlzg@u;c*_@#~;&WkWAJ|BI_I72SwbopiPJ-F$OeYOt_-Z@Ead9L#UD3LeD6EX_-qr z!H8OcA*rZ?extDgCQY&?_AgSFgNReEC?w)4bW$w9bxBgi}^9U4QK=A0Orh;z}q=PZ@{!@jUVFb7QikVVPr^FR==?pirWK|O;I*ed14&YQ`u0l&4zz*`mpO?Bj#jGblg6GqLL@46M zMjVFhhAL)#i@*rpRmF29m*8G*7GLbGd?yE z?W9B9LWyWpx~@^|9II^c{j;)xIf}fv^I-vB;N2WZf_jPAm@& z_z&hk1@yOoaE)ogSeN8h>l9n-q{@Ps75h&|301qhJ9tTE(ehXBT`{5YT!T3huw)5{ zO=FYQ=b(+umfJC6`|pD<);W~&Ts|yoMI>9_a!8Z#iVyBASCadxk36GP@wN^K`y4lB zdR)M|o)cb; zkhA7A6g8y??M|Og79%@xyi+YvH^DuW*JX1mJO|mB|SEAo8?DId)sQ!=8xltYGr!p zIhl`_WmLaGqx)taXsLdi!dB5XHYYPjPpR(*>q7!TuBySgGYS0X7S*oqkNjw4dQxO-i6Y!C+}T>^$6j_?q*;WpT5f z+p_^u2d-hP8Oel~jw!2&ofAtG=!l16+%n{#I|9qy!0p7H1+EF90q4QgNeQ6<7lH|C zASs4NVayq>!cA_%8O?&NKY!%}2mR%~DpbSR9qrKAa@dB=9q*7$clJ6IX>0K+B`~9p z1a#&emzQ_N%Uv=cL0xfuj~jf;;q?oNPE&=Jn`mEu;K8c+*TLT~EvL9rm!;>xXvMh& zgc<8Lhw~+Y!|!{;&?L!hS=Wnkm#fq6sUUQ%Gj!bM0glqOk=@yHckAG}3>a{$doep0 zd@@1}yLUCd15A9&>?(UX@ws&@A&W%IUteqNxKG-1pa*C)yCrA$GEzosf8FDB=M$#j zv^b+b#7{JS*K09(*@T&Ho~F9oUU8(^bDLs#{8#|sDj|I-rY^f|#j~kP!)fd^GNHAB zKH7jIVuxZ~4q)C@SQ)hS@f)5hCf6Ow;I%Sqq#9snDfbCYHL4m&F}lyG!v!{P+D7k+ za&;pJjAl-ws-I&v+bBq928fsYz`k;oMT5&#;nwkO`! zZ*At?nyUz`tvl9EoDnZ~gTDE3;(N67Dl3ovJJ5NBx;isA8C-(hLe7%ekwIXQGI9=4 z_4T9%d1DA;@084W57@Q6Bh-N)V@s3)btc@wd`@-}vFF>IhPMuzSI!uPD=MB@vDw{6 zxKz}tH$;ob?9QOVGp%wpX`FSmn6l8By+;s(2wT4)@u6$BZl$_s14_|I{MIx!9SFUi zgE+xrGRl(TLCuRd9bI$33sh1WT0Cd`D*Pb%|} z!z`QX?`ly>B)P4)8O>Xn5jWvP^v+v!%PnX6%Mj%^ou}~FTnWxMU3*~$oYq9S%~-qd zj3cumYYq~rjUr?|p_pktcNys%}<8!;b2+b5DcH zQZkPBOHLKBEA8^0$%zY>^V!8~g>3em;h%BOL9EvftxOh4iEkF!gsZ1jMnbr`E9G0J z^4M4TgT9**GY37J3TOBAn-X&eg_<(w>q+dvp|jDK9LGA5@Nj-D%-J(8vlNDtnGG!7 zSYn2|x{Q&kn>GahIA`4hQQyU@>X*=rmT7uMu(<-g7?AfQptr@-TOs@Clr`blqgM7z zGgOnZLM*nXIxj|zpXZmZNb;luTa*-t>dXmy*z=uOBR#| z1|GXT*W1qGuym~J1}c~Qj&t~U+W3AvyMLEFeV#vt7|hL3<#GY#>Px%Wo()B4rbNnUFWG& zL{;E}SXfOpzuFc^&hsPKQ>H7>o-k;M3WjGBOnD_V>^Njr;n$#3kj zs}p&7;z05!i*O(Q0@)AO_BV@-kyGgsyB=yL>|rHkCStdxFo>9r_7n3TUWzgqbi{ob zl4Z%H3lQ2aaTx2X>qa21Nw(NzYZgxzybrJZZf`{8v~eCu9r$F8_=numwZL$55@z%$ z5@i_s*%`$zNkz0DQdevz}}GxGRmm=~RuncpG)NVN$>9rVdRwFtnUhb{m8=EL&$skVxV zk=>{2K;GU(1Yl%kYi9c2vWH|PJsFVCLnq6NXaeK3FQJ~a)hT(c!ca7fgBTMJj(9G{ z+2NaPrxtgpx3h>x5@K%Z@swVcMwgR(Szgmv7bA!3JpL+YrtyQJbeRY(xB!%he7K}5 z9%iWIIk#vTkWC~Q*TMnGqcW1$cv++0Ux<8anj)-&fBW9(^TI4+e7|fd6g+-k6$*>1 z%FH39WlK(}o~xq?(wV!%qGF345f40X%MBc}%o7e=znz@L!=%d{nSapB_sm(p4_;!n zOfS2DWlQR+q)^}&#l4BzhBL#A@U42Gfy`&7*yPy%ij-C_ha{n|x@1u@ZJ#MaX1Z>U z>i%1M^{B(|kf&wO!!*9pEX3iq_VCO7uPcVONlMN>klJ{SK)Ry1Ukf|*0dOC6(^30R z>U%$lkEQR>Zjqf~m<9?EX3XnGTbrR_WhjR$a2|CC37^gwmkedZEb|Cmb<|C{Cf4|eBYxu1{nx;(ZJ z=6l#)AXLQSl1TMEl;tY^nOY_}8j_UyQX4J2hN))BL>gb5nZ}+@vy@z-{w?scqTGib zR86uc6U)}alwZ!%+u zU-UbP>s)Sx`MzwsYN{<-H`h>tbQ0CEsr*PO$jKTlJ@>3Gb%{kZ{Uj^F-DL>P*m?Q$ zQih>OCrhMU!EBJ5A!4Q=3od5o;%rQ={X59`$WLW3o6d7?TB!NGFcqA&)2_$A#TlQadL^f@UgSa}IlH*#u>?yq=nZZo3=&H- zgfw8PqhiSIdkn+FOxiEw`VyaM>-!M45agFY>-n&T!)L_cqoh-jWk15f6R6seoRWH` z>C$a26MNPMyj1uknMQk@7GEhsZCY1DNI!er9v7HOSwUn*&<4rg1)^?$UXtg%T@K-nS0-Cmzx6=|Bn)M>eRm z&+HHs*&Sx)7pKIBtA6h3D{r0WHO3!N$0y60UgOh6CI9hw5ar*y>3>OiKUtFhIPIBW zWAjev9BzqCpV6*nseg$Q;UHWT`0oFR-QP0>!;(cWnsr=p|2 z0l!mTPnySPfT^TpPozKim``Ut-My?U0O_>lhDGzRFa4I>vBO8NC~3Da*&Ggy<_>Bm zNsju8HQ)S9BvOLr9%$4}lI+fg>k{HS(!nn#o!xuzPP9BfnP^CUG7*=v2^e{XX!QAsB5XluM>(MWqc-yz=kEsWai7qAYN`|&dql( z(v5GdI17k8V(C0_d_#r#mrw6mtywbDesHKcpD);@ z>L1OklCU4^t>;-U49v_cV9lK&N8_HPhqF)jcFz-rfHbS)dIwJ|qKkv*3dMVxC&*0B z#F6vubd%iWdxYMmGWDv%QO1fw_eP;Rvi(e@rxD^S{#n+LOduI;l9M%H`eEGA7J6zp z#Mi$e$(UKhL|v)GC1#%G%uir5Nb~?=C*PJ?I;!6r4M$yXjn%s63ts8CsQBxcVQw@+ zfk(mszO`zD;155u=VNC;{`52dfAq8eIQ##94}kxv7W=O{RuLyNBNsDM5hDP=*vQ1@ zuK*d{1=BBx6m0P(C98T14QQGjwmGXJC4`CyG3?>OkmF^Ddkm^I-vND8H2zfHZKF3% zOfzond31nc<{uaQDv-ZI#wqHTSVj8&)-I1=ovPWcKZrRrCtfK<58Kk2?82*w@~Y+} z-7HH&5`3S^6ZJGnj~%@8k?}JOvyO@AlrR78#%i)EnUyiiEa4!lKnJTury0&O%>`!_v+zu+fsWCi$a z1pJqxGx}c)+k43aedI1oV4gCApncs>A3+}==>n@;V8HI43lEh@OXHLa`d!~gQF!3o zAi;JlbIvNeWl(79{Q8b!4}K;wMv)co6pqMxH#%paaQP*No^|a00{IxA$fWie<|d zR~cci-(H9`^!#Ql%fDyBwU;VO-DDY6^P>B1@}mZ<^7`e?8;=4c@cJC;sgm8%9@c~} zZ@yB}3Zcev$|G9|IGIld;4&s<3N79s5|iAjjrueKRRKXh-J6e9^suUp`9E;V&eb*J*aSY6)X23W+@a@XjG`KUeSs&@k^%wNd6 zE2FatyaUE@e!??=uoQBj%Wq#dY{m6FnX*|ZMm#g=*SSVseDW!6eU#U@mdoH&PXfb3 z>8V#xyX*)<#ANqCj=D%Yu&`BQ2O)mg#t>_aK1;r^RySLpgH6i#h&)3w+bhJ~IgN}i zTj3T8{Gx(4~DQWxQF`54bqY>EXw_fwj*FRaRhY-0l@=sW<|J8%~`v-&& z{C)U0wKB4>vv+o}GI9QgM+Gqc|0j$7-wXW<&)FJJekdboA2D=ZX7vb~S?oxQf;)I85ndPqtCm`I?4~2070yThAhi4Dw^25=h%bbO3TI(Qz_6-+R`( z=5uzk=|qbtY;J6|2hYu~u7|g2FZ-`s?=v>FphrVJ#O|01ErtZT@cNj(V9}JJOlW;XY{P=x7(oZPXucnx}%6p}3-r@rm1CP33I9D#1 zxyx4}P~2By%?C0@yp1ph!y2sK%^`^fuzOl;zI;)Ki;vNaIU0Mg*!oe17&(hqQ;gkc zLZwc(w(wiwh8*3MIX$HXFWsR8qIDPoQQH!a^=sEC@C;Uu<$^NQpIzSZ?tQ2us`V5* zzv(O9<7+0r#ql(eP&sf7!W8ywZ>RbCgCADu6J+r8S(oEe8bXEBGG<Z7X8-Mh^^$Mzzb zMYPRSO)T;5;BUs`l%N0*xUW&brbT0t8%qC&vv**#G)mS5t14|9m9}l$wr$(CZQI&u z+cqn0XI46MvQPJY=FHsF{oI*F_r6|&HqS;1d4YryA6=He79c*)2&>K>GQiDnX{zR?J zt>!U_;ljdx))7@zYhhxv*TD4AJ;1ceU}0=MK-=C_&+8*A@~gG`AxuUdfk>Fzi2P?? zu(bKe6bY?oOg1()4hC)-y>VX)c4l9Y_9+VXM&a_Xu_!YUcdW}B)4SFHt=i8gT$=sa z#(7z+9Nida-_Cm)2E!47b;?h42m0fM_TJax(Q({zL+a(Rfv2M|6dHJa(C9W57O|0% z=eE9SM{Mq$n{a-)WiLwF?1Gt6eiH9#`daYKT$YQdbG7uMed0G9PDAo$O7bF#nFeq3 zw=*M(j1nX%V#PkbYuW}$v({mBk?aD?aZ##dC(DWeX|f9EhuxqU*L}ZUpvcWq2ljMk z2hlAndRb2>QJOkyD}~_-3r-Wv=F8`L2#m(aHZ1{+cjCrA#rt__s!A4^p7~qL&Pj#E zTS%Y6{gzgp;_d?Q6%!>860rjV6bdL-aFJrWHGX#5*5)rgg0bm&0O=_=@vpnqh|UN^<(@1Ce+vz4x8) z1_O*RpVj&usUZ(L6=96~e0GBr2K*DJzcUI+3W?Ws7g0XLiziMk;ZzlrLdH$?7BKdU1S*|R2gD%lMH&vdJg&}FNfFds-dAF;XqY*LwH0?)~z<7y@lTUUhkU! zE`5r_&`1(-X=3TYl0W$wIp}BEzU*^jOwS)`9WvLxeI3ACE#_y*zV*BI2=9%of6dp< z4@M_C+=-Q-R{N|V^H$~BeLRhmbcieXh2rKR(hl^gfX2hj9AQ^+InbV}e4^8&L& zhF@ENszvjw3q1#s4B@4jzf`_3Wn@b`n+jyfL|@~%PGDVKxs3zASAms z!Y_mE|5lD+gmkcXD>QbBE#-F@>`$wf_BYhWP%e2CXJgpAYmQCQuh27)yw&zD+{28)^>!~-UG#K-w`%`n+NycKrUZH~@d;ph8+Gm^mmM>@2oSTKQ z>;$ny-bgo*t-$!7i|KiAPF;X&of3aEQ2Hl2TM3`7uM2D5W;83H7lkx9cTdV{>RBp3 zNuNXxV^&5vJ9^5ZfLTLfH|-+NGjTNi5u1Wm#Dw_8A$=;JMb7D!xEZpjYVxNJaA8*# zN^@+#<2K`5l{1iGwn0@e2WV7twRXeB8ZN|gozY*Q)`&n-Hs~^fEY>Bq_acPul65i0x%}sRP$YkGH1shehRwQ-zI> zMjHGio69xr*1>Cj+I8!dr+wiZ-0bd67x|=ZFiu{xD25wCs3rc@6ZVAk`im89e3L7` zkIbHs?q_3G>6Zu_S!ulc1!k_`JD(YD_P%_=oOfP%7x_A4?ACs!uHW)AqCoyIJCRAe zmlgtBB=@DX0j}pr$GUn6T!aX|$*r6x8B650B~-dP#|JW{GyJ)mO^160X?SBmR1Mm+ z7cj=?H&faULcPFD-(3dLG|cnO4nwt75T7$3WTUE&ga8R2h8@P;Zql-DV0Ex(LrJ4y zU8$>rBOb{}?B^T12)T2eWLM<$6KMXQo_{nF!5r`lXx}Dg<_Q03O!jYNJO906`ENxB zk+}7@M(+PcsIwI&B)(-kRWb&+mQ3{BJK(qm$SZ<31#WT(zxd%Kt`fKG85`0eI(~-TBp?unNM~NN`fnrz(*}W z122IztfUL9rC|kiDJt?}10T*W>t63!mC%ij4WA`1OWZ)%kB@XOE<2Rz8I;{@`f4*{ z=FXd-e*$^vSyL;NC!MwWQM$t(c>tHJGKSDs{bjtb5?Y;up3AAaE-`Vh-$PkQIS13G zV2LFggo8jH$s5UT87F7476^C%;3sKnOq>uQ+f%ulf5CyW^cYL&Df!m9 z*bY{c8DbwYkko1PV&=c(l2BO|Z_1tYcAadC(c&AO|3$^@Ss4KB@rmK>M}H2EKaP@n z&Wa=}ZZxz9SV)(qt-cVAKo$}jx&4qad_!1t6FBmh2UU)7Kl;I#w#W9=CjisPm!ZzQ zccwL-YnoGihfx<~KFj%!z%Jp>vf6*QLHXb1=)a$TGW>t4CjZw=B3a>|o;wREHkvA$ zH&Dp+W^Ea^=SE6jcV6*j5z$ZPMwT{{`}Whh;-U%e z1K7udz4EpEt9grRx^@X=s@-dZO(2WGHs)caG4E z&ab9wP^;qb>>(tucwZ&?k5}8xjmv6KU0q9dhHoEC`$mpnk95y^+`9; zK|PPkGrZRPIZLyP>?Euj%9Vc&7{^c?D0CH@mYiAU8RImr+{OIxe>nj?>a25*?GD#G zpj7L%o^&HQ3m^IOUvsUio7|?W@2_e5Ka%VI4RPharwLVKBU9slb|uxS?q0};7(OH& zYw1>?amha-S0cbO4I6R8GK82=lJsCD2*8!?S8)>jyRx#SdvPCbs;arG0PC8X?=VCv+aeBxBssBp8{!0yggq|EX7a=#-dN9#V z!pvP`;CS%u9v22fz}vcA0S^_taslglaZ?qbJmtNzV}y>!f4Af z@4yR&46!x}9|F({?nv6Xj@c~@=6rp-A7#iKPamkMZ81EgNia@O>&En@7rmw zi670RloOn?WJ(t}3{A zn>3hx1&a8xWgrk9sViM;qqm;Z1t}f& zjMiG8);u+$$aS2|O6=6?eBw-)u^9i5gRdqp&FgATXq$!r;7dw`TPfLG#M2hIeS`lF z%#Rwv5u$sHfoP5dm8f4&VMR0JRxQ?8V69c|TM5Aq^P5wZ6eSe`HG7s6-P4SEF)x_T zs4Vm5GxiDqi6anjOPMeP0SA9;ll#JwT6(TD+BNcf$R|Nuu1kZ$7|9zL5XuP&4+ad! z)lsL7fnqBC$F-V2QTYgrEc-@L;V$W}1|3ssHA!PlP}(hLCqiiYvZWE1I=t2`4FXyt zBv#6Gt(PuxQDmM!4ui*=rW}Ku$X;r)U}`i*)v8xi*rZ;D|7``Y~e1lUQEGz=7 zh8F^B3eyr8u+oFWRHj5nbpE&vz=OB|g_6njdk(9p`M|T{Vm<0)z#DZnw{?lzZwpt+ zhAlA&*>zT%6O46$@p&%_cNdoH<6mgl(`Oi;$~{*OpIBb_N{2n;eD}xG{>VOOJzWl)KI@?QE$tc{oR-L!#I2VI0ySrXr+W1l zd&Y`C4`@Av4cjKpyXrd$yVA-tz#+U(LV8G_nn*574>BK5jCE>d8$ z%6(byYKXNF&U$KghR(`w%7dCZom+6xt1tBS5UINsME%1bG1g>iz6K*g)qzQ9$(W{$ z^+~J&HUyj&>_ofdjx+YMkvHW4iy{C+m8bjNGfpnA^a7X*nc-1LHbOcu?)k(%H{foK z538o;<^InX6J%YF688843IOT&uEh+@*NO6drZ84Edtb6HXGZeHnef;9PgpA3biesm zXjG{J8&M)U|38Y<)v|e?;48mcqh^ZB&>X-C#&wS=;rq(p4?Qv44>K11RsT5f#jwnx z)=ps41~3Tka-gV|wJNkXKyYv3P3np||Ln%nAjn^Cwl6dG)Gucg(KMC7qF0@5ne&@! zl^9;~(|M3@--(>g#`rUd8gqUlVeU|AdMAE{5bq={utD!15~Ih24nZ1|Pw#h$eOCQx z$Nz1f=8pXsA3XO*o(gkBT(rLR;t(?ESxY$5)DS{tAG(SkYHzSz-J@$6aOk-e%s+EZ zbLyLo4ehsu(Gu!szj}0S@fR6{KaF%L7SDC#o^P>PpH`lb0J@ zSTLS=0WWkMFVw_;6S)&kqv#ZVR|gZO&CazX-U@fNXl`TaU4^y2!Mv*|Dhoh;C zB}S1GvjAqqE+gR0E(JZi=8t*S974>p=zu)6#8{f;!R(^r-0J|&I+4m%SQg3>N!=Ow zup8e%Ns{zzB@-v`N_8yu=3T0N}eh{hGu=y{-+9;?FSrD2lTzyWsrL!;y7@wk01 z<%n_4F9)JK+27Zx?-2GrXd(2!luhJ~wgAR+DV6&gXLhcz&zxYbib__f z`N4`&g2}`ks-KsNN=DCM-L+W-ippr}2dWN7AVf+=$_GjZnWZN!D#B@q0_uH*OVNww zg(rYw$*$(2<|c}Lwzn{3a@Sz#hbB{zV|njMB{nkoa5}0kFBQKQJ}`d z{cJdflkR*38-DFy2Eh?P6u~zAm0JV~h)RU(LGJ$i-r3ynmE7kz@qyv(Yx_VIThyi8$H1bHs=na^8MD+k) zZXDK`7t#?Ls~~z=5D$5{ur zY2wxxSD$I_=ZHN&v7r=$;SBV!na?y+Ef}PAi~IW3BYNV^x~gygwOaUEX@9#=vS1%K z1$D*tgi1p!m~jZciK!gPZl>(BaL!GH*1kLg5nK?1n(4$Hw4Ik{bsTLKbX#wnZ5HXl zhOWpc+7j$q{u!bmuJNcLwENc=@d2lip6%y*Q=@?no_etGiBR4+ERT%4R8-PgR+(?7WeOn{g-GX+tw zUL1O2z?`{=niSH>5MYcGD%5(euMtj|_4Qeo%MsS0g_FiGBSOI=6VV7D_Uktj6;UMm zkMN>M`{b(*OJf-#e&rAA%Qiy{zN4`e&&26i1eMy$#p90F~oA(wj? zy0moZCv;~|Ua#|Jjcz1r>PLIO>lE>o9g?2VQH3pT)61T{{9D7(VyyCPc)S9gZ4+C% zy4q5rQ{LGYJ;C9Yk@Umekh98EA=YH|>Iq3Bj>w8#Wfl5OPNT&qt5Wwn&Ax`+n1m-t zeiF&%@N1OO@jdTYcKVnr)%lg|KbmC>ZSl<2e>BVgvAy{}5;rJ0n45kZ1pU9n4RU=F z0^fWg)ywE^se$MXRBES%R=X7%a_}I&!Vk9VJM455y=}7xOX^oY9tzCg0YUtco->Db zS8bthj~}-XdJ)}xqIr~d{3q^D*iz~atvmIR!0Z{8Ulc3bw{KXQl*!~xTxKcq!a3E+ zlx-c=5>old*?#p5%+WI%yBxX^ zoh6YRXP@tz_HFCC09L*6eXnG{kMQ5$ynlm6|BGv-Y@_e;jlAj`SQ-CsWUGHtwHH(+ zcAA$(o#%?1=gC?tk&7tE`lNrqnR7G|o(d%_o|(2$wB7){likW_1ehT}A53o!v>j*d z`gnDB0kMtfgF;-KHrVEw{PD{_fRc4ECF9ab*k0(^h@?soEFE=@>tFW(Zvl zRcjl?Q%T=@cDoxf){id!n~pMBi{689eHB~A_t zU>r10Y(iQ5mLFOB5wBW~j)g);V=`rm_}g$&qDGJfZ^-CF z8PCs7j%%E!aP50k%yFp`{8glq6l{~L>MjsA5Fs+r!%{Y2WLRA2(EUd=p-pV5tiB_e z`yVGq|3@5_f4O8ut7tlID8YX&yHIb)*H|Z@{(`B&!se`=hgwMzNaP?IvcVTuB)h?z zFvUg@mLO&?dclE~YDEq~)7ijK0Ed%uKXkoeL=WL^IKv#NxQ&`-*YNImyUf{gd_U&x z`GEaHz$0x4j&@)t4_j+Q7p2PB=|LU1avKuBiZW?@gG%#+AKZe{Nq9^Nd4xjsp#Osy zBoZ{!0ExJHBP~fOE^nFors`dyG}jV9Md22UQN;nX0v~A-clLE~R>d^H zsn7s3aVyoKgYX%ms3@l*-{*{Ch^|T>P)HG@uQX)8DHlJ|6!4_%<%iN=ZfYx9KIYnd zToP=1r~(7$B8FU5p*A3ma^5PO7SY^VmZ>s;;%|xadyh~cAIf8j`P_Neq1&szuCJKl zlXXoF5N#DIG-T~HnZ4Yhg5o8R7Dkr4S+P^*K+05l?9_3@VIu9wWi4#Q(QTHDs^4VE z4^QGLkN0p2SYMDUxeLvFlJlLo3Ohbrwf?Hb+-9DsS8a|W*0&ZfEN{OVxR`cr{JjJw zugtS(9soyW-;%HCB@pFePv@OU_h(iA4}PLoZ6b9qNPUBir!qps%)E6dk31X{kto!Aj!6xIZsy`K@pilNW?4 zY>lyQyJ$qX4O}6|?otex4IqBh*j zN%7+k#0d||dR7e(mKch0L*%DXs_a=N56HDhRPO1&c`O9Le1lzrdc}AL?}tVC{U7tbb5onDRxR-ldosa6_92fA}xRfYrL% zYW(}54Eu%+{(ZK`|DWqDA!7q))9;lA{~{X6{WG<<#1=_wYF0k_x7w+qObWP0;Gt{* zYd1OZiibE^aQJf}^G+oH>4&>19OSGw;J2f9yz2U<8{Xf({Du7k%?Vqv+C*PhFI*;5 zV*}xBOM@GX1%=bL&!x=4LFyzDKJAcyUmgav*2~h@E~jyrN`-|h0|Agnln_`^)YwLW z(k(&S9hrY7_75v1P%hDhwS18>4)UfIL%pJ!yL%BIuBTK&Z(W(EC7`9RM@9r4=s{!f z|0`gU9=1A(K`M+nie;R|$$N)XXi?}-qJN!>E^xi_wVgYGcWfGT#02$CxSjg;%+BlA z1%Y>w7tEg9tNE3QCIv2wT_b}LUhne&=|N6Ty`7z4QoksYS^1Y00;h_eWlq@E+)gV* zPuVIta5*BbZrUL5BLQ&xUsTvRuz~^l@BBRfA75Ld|M~p?w>>Z3@f+V7cleO6J_v|D zzVUL?n65nGhVVZn7RuzL6p}WGhk6h;v%~6o@%6+bKX2i=pjE}XPJkZr;Tvs|Un}M< z06UZKj_W(JyuLr#`a=<+J8AU_{iOR101Nin9)Rm6O;ee`x(l6fEPXJ7&N@%=s{TmY zpkNQ=7$gLe9B`6`FlvEv7Q4-1^{=7@Duc{8TPDlEYhVuMR%r0X5t}7T*T_};G@Ztc z1(dT(kwimm!|oQ}-1?RZUbZQk%I*p|;vMkeZPD1cN>M^_H3wxf&BXKks5b+2u`QE> z$X=xS`S+DHNt&g!y2IBwfHy|)-IWTcKlS2hizO0Dlv|WzF&M>Tf%wIQVX^UH)Xe-s zrrHpu{{EM_+Ow_l4p~ zpw4x)IVi}HLCA5MWLj>+SZCZVEdy;n*CE>E1jZL+k67%`)AvL*$^X4nbXM?N_h&7L z1=G2=@s89RzFqYDl_lEa3Hl$8?}lAnYUFod#sA~u`)`_s==qcxkhmsQl{^YZL$|HL*VjYMYAT6?HF)X$WQDpDq}62~Gh%v3!FZYM#Wj*2nJ z-%kM#Wr&^=4Vny}r>H?tc{+dE;6eFZtF1y$E%!~~k9cyB`ni9wyM_DEgI2CWnQ87wjBu1{ z#w@pdr8-}~{t;A>#I%#|6;eM6{$o)8gLv_OxsLve6CA8`uCTy|{Mk%xrCE^F@dqR* zLQVoGKo!0X<)>!WPcYN>7HL;JbVMtKAha7CH>hlc&Ud?;+L;5kZ&ORWCZ_bPEicc% zS=U-Fz8^22K)q}#1ZI2^5ZdAKWK2;a<}S1m^ikiV7dQAJLM|IVbXhhMwj2hgOGrwa z^cqrY^|Z#IbHtQ2#14U$psxJ4S>QkymDv23sPT!-6eh0u@+TH)R-XRZMEWdi?}hrq zPfv68cDnlz9zg<1t9pDW3D@~1Y1;^W{k)Vr5Ee9VxEjWwqpVINv&pn(EpnSONwg3I+V9BKe1ds192!Xv1TmQHd4e!*ItN zh4q~yWUpqc%>2S}kq|nBW`};aiCOg}XhEhf(@~rmC#%$b3?N#1L-cYHi@J&#jy6hb z+4{Q$%?Bw-S;{i49ZE}F`SA!G-cam?LA@z*ROmLnimc&jBZ}fEIp+ChefAo2TchHZ z(*t%Brbz=CL8J_3tv+R#=rD7$zRnPyLH2n})SE2+TDb^ydAhRkdxsUKgDgP+qte4E z($PM1#M91|R9or>#U6GfW=dVvE(pWoJODG0aKf%oqI%C#hh9|LmB9&uQ`c^?^Q!f= zV$+37y@s&9Jk2{qGZjhC4F2WaT2*l{9|lypGCuN-5%@F2Xz|3u*$xva?!}Xzh3rDNeeOI`XX#dLiP%A>>!1u~V;TJM ze@hymXEU7_B!gyg=?nZ`7A@mTOoJ5u{I9Ecuw#bA`dz%h{{PVt|33)&{{k_+AiS`K z9=|RoYXHs3gDNt|PBLC3L_zQgcB9RRk)tW~2U^%7^~R!q#D)_bn~IB@Urme;raaAwxcNOTu~Zk$0K-|9bH?bp?2IXt3M(`tk_PyB)+Y5XeQJ6K)nb7&L2JC3ZP~*AZ_QRk=zYx=!fXrsmx)jEr=; z)lq-u$!%3j=;;ZVLOVV$knqthh=dy*hkG3?=CMzw;Zf>48#-)n6+rvFENls~LCiw{ zQIquh_tKDZd+RzWk4m3Pgrl>)bntWQvk=Hcgr)PXI0R2|r0m4?%*h_dOP4HKZt_m< z!qD;I6PlBK*LycVnr@QzcG*3zxQNaCi=+dh?p=7M_ud2w6@ks%P<8ur1dUB1W1F_m z<}Q-%($ETpnp76;ZT6j^FUSVr_n+2oZ|w-MX12VV8|rFjD~l9tXS+apQmzX!diG&o zj)%PUbCdJ&(nf<*jtCthYT^!nPe-5F^nH@@OPb0$eQbgOi3okY5*-1(C zUMJ0oPk4!upf~Js6R7 zzGZy*a3r^`8lp8i*BxK(xeG_5SQQ;?LwwgjgEE@3b-LBmewS&uGbn!UdJcSlE)4RW zAChcmlSiYKeC2%`q-=kd1lb_v^j7xyQbsEsz3w^PTZFuIy@k_$Z%j}Q@8Y@D2!2j| zb`5sZ?!=eePP*Y$xZO^Gx^0&2RP4K=1N<$MHRe&iE&sOU+aoOR>pKu5N}eKK7()nt z88G*1fhBHOGeQNX4v+7a@@?Rw0}!t+Z{YNcnlj<){I-D^9+;B}1|c{mbsDFTiskX)2t(2-P%~kwb)wSK;4Fqd2$ij5HRtt zsesJXO(lLO*42?R`DBVfaoMCFz4OlK4EB&^YXi0=G28|Ymhq~Nli^yw zRGc6}7bkJR7`4_Riog0jR`i-`+%VCOw{#$9@FwRFFZ@G4c|;-bRLI7OsJw2uzI;Xa zm4P$$aXW)R@JqM897q8!_!ccQ==gM zB&51)w|QHyRq&XW!s=E{=yGm)c6lmaOi0xmvJxk<38|>Pg3?Mw^ZR%E)l{~SqMlvG zgy2`G)e-*+a0sTpB|15aqYAD&$)9#B<6JDMM1ib)D%e7g8D{w#;9qkk2fY{qd1g`E zZ{it0ve!4=tjEgnKv`u^6+r+?GD_2@UZ&`>}uvsw1^333mI=i!Y?b>H=VP*ye%gxJ7{KVu^h5`w|z*df)?Qn zkkFSd4u`>ku|9=#88&iv`tZ=M9v+lziJPEk!NMTOt3xTq$}@4c<)Y|G&Gq}q$r{{l zDAF-zI9(`bWXCM5zrZ3?i2GMawUok&zm>4{=Y)TokRkULeq*j)EcPnJ{F1rc#Jtli zELla3Oz5(^g8!47ndBxO^aS(V5(Z@EsdxuZr|_8&jM8RBEC^>iK^e@@20fIbwUaZ6 z)B-wiSEk@D%%%O>5>;6$sj;l7n|D)(psJ~1V2E+07+EXCc;nt+!f^SOniB{Xb0Z-t z&Dsq1%(%clMw~bo`l_L~36v_nvWBpgcyn%H4hzEBCQQ&N8kcBS2230Yr%yp@0NcOX#LO+fhIT%FliM;ag5$XIqr9|q5mjv($s*BU3hO>~7oSWK=x z;KD|w(o{&iN$%|lRwd1b8$d1!&yt9kh5}MjAR|4x(!qX4!GC0MELAFTFvb$Pe`&`) znBuC~ZH&H*5ak-$f(&l37=ZYT)$mrqiDug4grL3uW%(~&CnEMC$#{3jEv$cpxBKz1ftU07S+-k8VP!cM&X!*2LsH5bw>&fClrCG|(k zqD5@tE zIbFt%;)A+_~cej4yLbP-Q{<3z41VtDvas z0i!vz?Q2PlKuBT`BD9ROMY+V+I>+AQ%Mz@xr79}7rqN>u|^8sW4*!X}5ciLe6ZQFKoAR;$9r-mKd3 z7KVM2Gz=oic<+DxR+ZO0FJJ)cSU0S@n#I5;?Cq^v-D!WNk3D6}sXaMkcJkCD3d>~; zGOC-$Jd2nhPHbyMfcMS{@s_bj8oOYp%C+|C5A=?lR0GrQTBg5Pow0O!OpF=hD7P+t zMUDp160+HPeNbznL3x9gUh1z;X?3*K5j}3FU#E`FxySG0!4y`2WL3?j7C$jKbxfiQ zfafIx;vhE_!$Qdvn0;ky`nYGJsf!{=UPC+aKt0=v($)=_99o7^QfPoP?YebtmJ>b>%O%5o9fopbc3pM!>g*^9GbGqtjgp5iW=ax2bpnejVHv57t`JDB6T)Jwo zjOZ4_Zt-in=~*NBMn}x?cam=g;02QnWIJt)n)>kHOY?C7-vdi%Z`IaWfCZCp0xj}R z>;Uwkks!pA`G)jxLELgxSFvkL{9dP=-M%EWQb>w@nYxp6sKO*o>jJP zh;75}0mI$y1!hGslh)DjAZ`g1)?D*vZcb0qqNFBr7Ts(NxI-fYIQXj=+8?OeyIk2` z&WkwFYOi0&06lj^LNr?_;ear|ZfWm?z}|~L<{8fHX9(>5L;&Hxs zx<--BW4e7Rmu3#1;?Vx!zug=b`|>HPGeL7Ul@*QDim#?ew}@T)2=j1g4ChCt-wgJu zt*GRs$&os(x+AsOn?;v=Qha(4Fr?m^*_1@%7@q&gvPfUU6WS(y4=@Q*aqhlKwP{nk zZrC_rq!t8if2}mQ8d1wa+l)lwINEz}S4$}d`NA5%B_Yz22j6t-Q_Xv!W{L(Se7T1& zd&PN=C>*zWAgGEFjrQ_ej@hvWck+z|Uz)&87n!7(TjK5Y@Js-R^bapAaP9uyrRRdU zyvOn-KyH3yFdN9`p2NL)Kt%0HBUs1i*V1d%A)!L6i1vf*Xu?Y2BGZljRM(f3OdN{a zlSr-uKVXNCdWV#%I{t-Du&~s_m$&`+7i&$Gp4&Fzy<@9~!b*X~7q^0$F=KknQQ_#c zbWY2{OkLE#t-62OA*G6Nq%dkh`5aS5TQh^G{o~z8*M^!LqSSGWe_tz>YfVw#(XS8b zOE<(JhYT|GFVUOGVIPrWFF7a9NTfz6!T*h3^dWJQEvF>X91%PX*&khm34e&d|w-nk!$^4&-Kqr%=Lv-?CD~L)2cD`x!cZL zyCVxDI~G`%%_(FR2v|r#+Hx#KUKnY{VZ=5ZO1&#FZLbkAlNK!+r*TJ4ys|CA@ZH^S zsoOgz(!g%OuNRR7v>1{`b|Gt;6wZV-D+4(f|DQ5;xNJ?U@~c7bkmwh9i4=SAf@*;S z5bP)x*LFJP%OASUP%M!vu)vPr3#_hxJ(xx%@P@pw?u*^Xfijkc@CY6LT;% zQEhnkD^b@e;y{|Z6Y#gCONS~2W3Vf6ejHhZ6Ax!6i<^!TGcmGTds&n6Si_)See9es z(D*HG5}MzgwzYFeZ}j*Za^W=uu{>L?nPbdF-M3+8b;n|hCET6lQt>NXBTxiO0_LiB z@2wAu9d_-i{4Wc?ssT|wV>mYq2zH{J0~=e$nQYPF_KE^$zTCXoA)F?x0HaIMYr}+w zLR)qSMlE{tTS(UM1W1W_lVB#2WMzW0RI}TdtoFI0F5@)ej@3n2z7att6L5O`PV$;j zjU^Ef%JgM0;tGl@2FryR=0)BTjr(6zO0>Tv%qqKVu@QTS1H;9M9jxixxP|e|7;9w) zt46HEGsv=Jb+&)_vM1cfQ7g|sN!!Ls5<#Os!4w3?WW;*W^K%|ZT>TagkhN0rGpRBr zq|ay1{)~zl)Gns#H&Qw&DsPSvsK$e3I?#U|Dt=K@mu14pI#Aunk<8gj|HN7soP50L z@QG}E4CDV3F;Vv@5?bd<5ek(!(#-0@K8H4Qm522czS)Rj7U1OHs&OS4SR&UvSP4|S zu%m276>Z_0e<^NQ8FeVsN!5`dC_BwZnUaK(oMLksoFbNZ#gcm4ioXy%9YTzH<{S*D ziLAYqtG1`JfmM!`C40$J9J4&vidyMN!o^~?wm5HYx3AOq;8|cV5 zq(*!CogV$L9`groijQGrCLXA9GB68NWV+ufSW}sdZN(#3UTG7y-hwaR47+rWR?&|# z!l|qU7DQ!L$52K_5|2GYLVH_eg>Q}(eYOD|q0VY>B1y$013>6^yo2&r(BglP>**S( zwWrjbmYL`)OLSC>t!WtyZlC0TCLze-uTHa`PU!udZ!@mG^Ncl5_x|4RsxvEHTDKtS z%AnIjkKZHB8f7F>FHcJJ>QJs-zPas2L0YY)K7OJqf_9bPKa7@gf|BlG4C>HCl6j>y5xzv9f9mHA-HasREJT^bS@d%(10sAIO9S- zd}=v&@^5reGpXiOx=}P9c(Y6Y)%VsrjG45gS&7Y_Vd?}Dk}g%3dWE}6|0whF9H&6vh~Ni%V$9DPQR`4YG)jiJpi^~oyQ%_ z!l((Z@wVLdb?GZC+2<3*C$s-3QB(B7kEtv}Z{^VZlpgr1|cmw8<(v(vfX(J{Dhbtr&iA7Wu?;3!Eo_W;NqGnCa za8+mh%XOqRoZ(kxl7@jaqZTI#F{yVAJ|Ux)M12YuBN2t`0B1>PVK7km)i(e+!7maQ z@#}3>vTO=Tz*hO^CTtIjbU*`+ID3(9CXGBu!OG-p8M2>lCcfl&OX>XRLu-M4)c z=Hm;R;95NsHx&&HWh879xR81%WY<;c;EWFz5rY9P+<5Y6I6zYz6zWN%AXcIzZpt$& z1rr4oEp{%3)EG6fG!9MIy8LTo?cro*R-XGC1^V3dNG8nq?%wgxSy9?hEh&1bO(MfW z5g6a}U zOU$GtKEE_TMHV1pLfa;Fh0TI^qks~LJtZkSza0SL(9FF7kbZ)?&yjY*l)jAp`R)RmDD{+Dm~H)aa_M zWVv?962_-m-tx|JYF#1sm9?i?igUY`I`va8WDB@4rJ4Zq1}h@yc+AZrMbSJy_M zydX1c@+zEdG-jOMTT@l`WJw7?s&5OIaXZA7Nvh70Fv6V``qTdJ|Q zvTR;D8ms8NZtipGL=A2|W-9N{vBrNhIlo&eYk6x~t&u4kc)gJacmvceAFWK!vb?@T z&ohb~VB%~b(LObbuI`T-#R{Lwu`KW!{N%c3H1xHReV8y|klKj9==ec=DpmPnIi2R3 zw~KE@b1*>jF0$XOv>XAs-p-L>5qMJ-R-T|>;!r!al{RiftF{bc8^}O7Q6UWt2e*ci z8dFBPm5cuKGU|P1&&KN`ebbI1o#lPGS5BdX;cjl9r10AX2mBI4 zrl^rDfR{;f1F;PlHFI{Fue?(&a{|5AH=eOK+$5S}tzO#PDId;+A?43I1h69dw=g#+ zSw#$8vZPT#=-UN?)PCGZ0ZZ&M-jR&46v&v>*NSDco}QDf-G36iAn_j>3P^ z_{~nFS)vH(!%ySOti~3sdq!5z;?AFRnKL~Rl{Ik+qi68shD^nTi8Bi4L>6N~+(zP& zbWYY76No5;ifKux&&hX{pP0d+X6bIRYafw_#VEguuyu$7WseHhb$uw&sNR{LuUj-o z&q(}jxL+N;oc@JiosgUuXS$gN$xTOT(8WoK^LwiYcRLM9f5fc9xL;$y4PC5?o7QIl zN(*@w8Vq@0FjR=k$WXG;qWX&^GVT*N!g-vAXI*(wT+BWhsi0Kz1QeJIlmobWXm2Di zas#YS$E)kkE1}{|>xF2E92*(1q7Ys#);zuhneEWHZrXR!mjj| z`v_5b+5>iw({^9eu}G~pN63WDI!DP>@5*W1Rp(6Dl1X(LFnd)LsNzNIHm*S7mIHYH zR*DlpVP~Vk@n)L0^~@$j?HDKnhhCc6NGk_a?QPcOgDZR0HPwYEUK06N*bF9J?V;4E zA_k{6+hp~ot8+uTuZGpma${yE9q>l7$xK}p+AB((lvnm^Cv}%q`|t^K^}}lFiH3Pg zjT^cma0?wesjCh(72ku;aZP4lpH^6y>4`d(!3t!o&U1$UgyWr_wv5+i-Kz1Ysi{#tG6)t@; z@(TMDuw1rkfh$@`M=|fN6wn&{p z-z5DqM5VmC|5%p5;?CGq7g;95pcG&P@0;GAtNH;4JXCrIwRg)F zqzf-w9<7;Ot9!Mc)^OpL`ik|D_EysCc%mji?yQ&NLciR^4W~r-=Y;k5@|dX1KzO_s z1^({?n5gk%_vAbB6fbL@gr6C+tVt3jjx2v4kAL4QkAi8HKbV;?Mea#)U~I&X<@y_ajez{5u`UShZtEtzuXGQgUThRVmKojcPv*B-z845ohc02uMm zUx^nc{$K39RZwJ6w5Ev`?(T(q;ckVyyKCa^R!~s5ySrQA?(R~!L*j)eP!%=36hSKYBvC$Fvksv<^4j%o8TJ(|e%enrC z=XQxSi4ti*oei47m)0){*4IR4mE>)7cT>D3Xvtxu$=Is!zVvE%W}NSVK-0ci^GQlZ%lp*GO!rCQWjss$^+riJf#)@E- zqJsQ(!#!JIbE`dFCTU7zCONg?zO``?8AT;sj$){a`pPcW=-TFt7*g7V+uJRZ{at%p zh2Ayi5&5nG4NEP(N1m1Lk({2AN#iey!0G~qR20jm1uF5m)p!ff$=ay+R~H}t?X1nIW&qSj`&`ZNc(b^DrH3?<5}JH zH{x@;I>m}1?64AD4V`nHtbK3wwpM4od5;uj(=lFUyF0bUU#HZlRFjmJh4 z71Pcn&s;n(&UNGon16;MyHlld8`&sPO0$R(a8Iq`<}x&(@i0dnNwtZ;A8P|B1pp~wL?FNg)$ixEFX0CFXkBMyrt#2$L;cDSBC= zKxt5Pe;@4=T7MwblX5=`2ACa`j}QR+!~)ZY2-Xh%_yYC{{(uB42OC4br`z?sU+UGZ z8s0m#pY2jTiS#>RfVn{eFk}EOL`D->zMw$_+jVUt{-D-bc5G3X6O86r;x zLI)u?A-P zph}qhFaG=kqCnhW{h&>FRLDA7Z)j(M0aG9c{0=-Zc{_A_GLX(0Z@>!53yT;!4r>d# zI}$k4uMfY2*c}UO`Z-7QL=1F8xPldq2f~0ngI|BXA}B$jp$o!y{{muzo?(n31SLR9 zK+XXIplL7*3@JG;QVyjzwm05DSI{GRH{O#WOdrvc5R5Sl*eG}x&Yx}I8m>14hz1du z0F)16p?nhWPsj3y1%)HL!-G;`0IS{cV_F9N;E=FUb>X@aME~1z*GL zD1#t@UGTj`Po%-uu);DRa^Mim=edXsNdF}J`Xp+CNk)eTne6@D2j)pNm<&1~2j~PL zA__|G|D0I;eq{`>1F#$+;LDQ$j0h5#cwi1XFdcXe8JG_wgZM}Ql0klC0P`V|pT3Lw z7bN_@JwEfWM#81={EYn227ch|f8aa?hCT(tzUO0o%nuEZY*7I?(P8gyJi85D+9iU)}nI+J<7h(DD*z7IuYSD zK(7F~4;6pgA0?kdm%to;MFS?~2!4r%LM1x}!XfO|D1i2?Jd@<+&7d{0?`rTT;+M|s z-Cx3o&gC4YDyJy1kh`CL8Q;2uBlr{lN$L`w?JLETM^}aHDVyrQ9*6;C$B#b$^snZx zOaDGLCcW)k|4pCLcTyM+Fx}w#*T1HSk}=?6KZv2#z@_37@l2++QsLErpucJzzh8YS z%$?X2zFxuw-~uSur)4!tRhQVt>JSUBuo8nWLYG>*L{5675!zCqW)AA*vEDG@4wfpClt832K?n;LOe zE7k0U^3;c`x*a?D7S;~;wbxCDFEAl6_w+(gYm{t|1yafCHoTBjSZnU(iSo}Hdzv}N zQ!$t=#Sr>N1htc$-q)|vaZv3Cv^-Uy&_MpMn3AdXol_BBYT%TfUQ=6nO`0;u$(%2L z^qO_CI(|}_EO2zJ@8DpLoh)$n>0U5^b!4pXm8P0bVDh+$ohMecIt&?;Y#!S!`Ul#^ z-4E;b{nEXr?X0J-!|(SEoWyTn2w%f3{SIlT_<}a+u?0Jo5A+TD3rv8p?_Hr|)6$kw z_9>hD!>D_F;%xHIRJ&ZXh~Y%%gR%#hFGCr>^Ou33khl zxyENgGP;r3o{5L|kJNmE%7(4W zG;B*zDUn|m*yd%)1mU$jtd7&56IaK+aXaP@>i4&(J`+WUrG+|4Qgu65MMYGq2wHE* zi+93{cifA2)Qett&p>5&m&6$ZK2s&u(v5-Xx@RXQOJUmypGr86nV`}p)Fwdq`i)5? zbPe-Z-v$kwzFVm)W$_JpaitV42if|RnFY)JxL#Ij-v;I|eCq?#QD3N+M*TT0zJe=l zGJx(Wci=esz|3u=eH{$92BuvDt*8EBAdm*`Z!F>(SuPzNfgYE17ME1QyRSkJ} ziFV9VwVLt7)tS{FJlr4sAJ&bLN}5ADeX7I9pU;|}lY5#;tD9&Zh< zs{c}!x;0!T#wy%SNRm|d{i`NI`fh{9WrEUD?@fop<|1A&W!`PGfJN^2KyFtnRVIj%c?;DW6Vp-eJ-zzWSA)VI zL(%c$n3HohjGffXiu*fSmz6O~c)SD3Fj_-i_*RoXq`5DY*>kErx3S~{kl1hL*!k`) z8hpWhwV5bC4Lnd(7EaUkwFhqi+;Iuf6Kr&H)nB3uFgjK9XA@;JQ9|X-37fzP zhm9RxMobQ(Z%D!PVX)2*oO#olw(MB`$D4HU^@~pK1kH_CJuDK@9FxzonGwK%1+G{c zw&~EPx}|n%tiI-i^VnghBWt?53%}&dR(mAE|mFT2e5c>*lg1^szx{XKr@r5rWJF4%+WF#|ZL6#Xf#a1sQ;CKNq*eC@ zdf!&Q_Igx6YDL=XqLx$BQMKn3xHe~MsVY)aIuVLsit-J3H+*l317+6OVys`I<4@t* zb3vZwmjOU)oEOj$K446K_-QOhaS_Qaf~Dvu%3KW=Cm|KOX7}CkNVxQT^dD*W%VQ|h z70S1~H;Bx8#230=zdm~?F4>gp+MFzM>;Mm89h>7FQQ6%Y@BD3S^eeQy4o>Zf@5#=V zdJt0UBaE%EBg*8&}ij%+s>u4%i9<>q8V5~}J0`5_M zWU8$j`*#*<>9z@1qW zHZ;GT^v$q0S5~FJDV^YeNk%5O$|5uDs53}9D67%tX<1< zf3t5(w%;(yJLXPITRyi8>{@EuwCpq!rR$IUJ5o4GTtkDuwk~X}z7i3lHK1L$g_@Ln z0ZX-qW&?41LwvUw#DIS%#|&-k$oOkR*m=Fy@aiABLwL`=;~k%$5ert) z3))n2`Sf!70j?3gQ;F}Wh^le7c6U-6FKMqd&Nyi=wxPP*eh(fBX#N+tWw5o0+?(|~ zda-G3J6W5)Q{@S8>tjdBldo&EC8JCUeYKhiw->s_Jga{{*N`uw53)@k`f=~gJ|9`^ zQ^V=HGyx=CDTc?l4QP}qzA#nybd9rP>#|^k*0{jrk!N+*(_N`Ax13!GB11cK`2e!R zxrV8yyEX0ImV6$g@v0F2^3o<=eMquRc$+*}r%kG?!uE9iVmQ|i$S~EGWUM(slS+d-X|vxsELeVVH|+vO&0Fk#YqIM1+O|z!Yf7L>>lPnXoG_Fz zCIkR8i>;3sxXE_Fmn19p-v17MnEB*VF}fvmY`q}-ayY`zb=rn6WyO6Ys1mnP2HLhde@jl%~6WRh>%XhPf?9v zSo*>{-!UfsJywA^zz{+*M0*G;(Z(mugyu{m8XGR)4<&|=Q{H*P9|TR8ZF<+uEzw6 zJOtx?GQdbaD^Ld34SXc_wygZd`_sNu8<~Mr3@17hj-L1{#Wk450flS+Pk?%+6{4gp zM>o!GZ&v#k%#7Js;Rey(W6aAH(66+GS+~Ap{_$S_jBT}jK>DBQbi;@RT0}DYjM?KT z*CO{j`!C0l^}ItWov{>VC>vA_4J?L*X&@|-f#1T|^W^-$(+vL_%GsF}W3T?W(1Inr z!CA#c*R&6=ph1!d=EmS^PweYFYYQr;SIv}@iqAeehwhE{n5d{#lB zuDm~K*J=oVSFShjbJ-@_iUfWHCy}t8lg%(<@dMz=+~oT53|7(y#?d;zSY+MzBo;&% zcUqeLxbKq}2lUlw&uZVR$qZNZ>e?&8noMh9nJDkygH8ud*kuIw4Q zl;D3CXCjJP=A5C_^y(z3lTW;^T}BvX|GtKX%gX+~ZLDS=-7qV!)506K9K|0|llMC$ zP=FxdwgU^k*gc>=TB3NhCT>)lG-kHBObp}1zo z@ya^l*-Fj*3(<@ND+dDWx;_>?!wm6KF=9DolN*1(=>pC^pG#^?N^tP%`@fszuJzR# z-a|*v>^D28LmZIqAM7wDdau+iEeW^m=+QNmP;EwZi_nF+GCEmq?TLniRMnND3o{o0 z57GCBsgd!iB3SNy}lar=I*A|b!uB^ z7b0`}iM8>h7yuOklR4#qNuFh130pCN4=ziItPN3887KJ?)pv1Bv4xCQ8#4_3M%5_! zoUE|ckY>dNY6n?4u?0>WaZfns55L{)^7(1&pfa)t{n@U^JhubB>YLeZ5`}$Auh}|(x=k404Z*kzK zDD1#hB$i%U;}3PC-nxT6cW{3+*?u1vI6jWdrvbmt*M%#fW{;LX;B17wyK2vhFrfAT zk3Zma1gD*Q8# zkfl=_jdQz+(+PjJFPBBBb+*r7Sd*lueQp-}tu~EO)2>Jgk6dxdS2DNa(X7q7A_T6^ znxZD!uB64ThxhA>&Ay(GvGUWfN7fo}M3kJenv(zNwsNN5HmW1q``gk&?;zTGs~;(!q!1xZKJiVr}WZfs;b>WMGj0d5rMI5S7LU%joZlq%|=0* zBbC3Uxy9x*q~8=*;5K#8WuPtu_(`W-&D_BbeV#$)v-^Ntk|ceE+HS3D`E!Ltkw9GB zGU~wp*J#48rk`o-XjU_vKUypLFO)cP%Q_V023jx+DBLoPIvg0?V2*KhWpG+ugF>;` zgoRUveC|G|jbM+{K5FStw2V^Ndj&0k};h* zf>nMJxa#H$bBs;Y((t{xBPIXh@{&8YBGXp+A2q>Z7BGJ%t360E>qw`d!FrCvD7uhQ zwfW6L3TcliemEJk(MM}oNk_~C2S>R)f`R+cO3jM~NB$qrjJ4UUs^Mq>U!ui@CO%VH z6lFkfS;Dg$m1c!)PInrgOSVF|7l$l|&pRM}@aH)XhY}6bktc1P;k!=oR}{4j?f5n= zyu_VsAPd25DjzPjHe1~Ob8a}MgSXx9U;V8Vo1om=l947`_C?hF5wl7hoNOvl3_v&*2LL=hVre{IhG&YzO#nvS!v~gq7*0y} zR;BT|7w9?-R{hAR1oUMz+6r)hG8&EnBaV#m(E}9MauVVBNS20XJQ~HWPF0K>TW651 z3Eeyq%I~vd&fuwNb;ksWS=wk^LaM*EL%%Gkh`DrDlbiK$u)2~$+5qM^bm}cED^7MZ ziq>>|K^KB=1z}op`oxtE^;_QQ$`_bz3S?;Khd}+)I$50&TF+?51&z%H9hzM$gLJrb z4er5;15EEEIvhUF{Q{=Arv$0d@M7NMAz1>}x$(%m(PI5nVFE^E@oXO=s$F*hfc;L0 zo)vYe^2GpbD?&}(I`6I{mfsJv{PtYfNm}3G0Q!z0TGWWP2IuGD-2JaZ&bOUsSY8Na zS2;=?90{LHH--B|s-mpF_mL41h@6+E2PDMJy?3&xvR2_?N%Xj^s7jv}t(gqLjd`AV z6FYe?5d6%^K8pQlR%+Xl#21EvwsX-x8K59>ytLX2i~D1VKMJK4^aPO>>huhJ{NFK? z-btrv%rGd2&aedur;zFN?OA_y^d~x|C+4Cxst1qFqo&Ac>Bd#t`4=g(CgI_Ik-F+S zJd)`oZws(j3HY}sn3r0vt#A8i(74w~m1O=!PTE0q&nh}iiIEQMgVX#&p9v$?9_KEy zOVZ%VHK8}Jd(<_0GdAO&Dh)w1lFuJu_a|1m$ZzCHf_&IGtois!i5@z)cUw2`JEos8 zR_VG7{yTi*(3TOJq|C<&iN*p;wsx9UQ$e3pdm(szm$?bj^cktsCPT%_yXA+|xXuyj z!3CWAD$J>7sRaR>ovXreRE}Cy>!Y3|30PaJKQpmyI;0CalV3S&3z>M@T+YOoH8yjJ z2v{k-PX3Bnl9}5r7|cj?P&>=Z|SmuYfkFIC3M^%yKgClH1ioRK&N11bkNq~o9rTI*bSf=0tmM0~R za<4pX^AxmHmAN*Unpy|r}%rBOop(KZAKo#40;EG9|pgS|d8cOUPk7v`JCV0*MA5cynC%|t*#s%H;SRjMp)}Q4oY2Jj}kdJN^1ix0W zs;WsscPeg3|46A~{2|AsWDwa ztjVnIv=Bnw5(iXZ0eDbWgIfzkTEQ!V%#-DenCd~=r=U;-$T8w4n4eG&znB|Ke75QL=QlS2a4by{{}9X z+~BzG(W~Fu!H_EBs|h#XoHcNAG&!>T7G}>o`u1X0NST+=na6Q*eWRD zlPvv&-Xd6&N4f_c5+=uoz5|Ep9#5lv$r#=n|LeEGrl?s6 zEynWTz^>(O#FzxcD>~^+O*lu@!cqRW_mQ%rt?_G`~~sj>>!YRoA7>S{AihgO3>L!A++P9A$ zoAAIrT_!}s5Up3@s?qxPF*5v-q`N{4rpp?lp+?e=Th$u;AsnH1#y3W3mt}aZSW^#W zhi$r*c4?KKIpZOm5-dZ+c$`U+@Qz~aDjA+=8LlZA?oAm4o_Pn%Uj?N^Wa?B@`J`iG zHtXz5dkB*?+a0P}ngg%2Alc0`uiI$-Gx%7F!@AV8)jUzdiYw$Z@q4R3z%{irtEnG3 zcaB%@LK!2@`O@8ZST{!sSzdG>l{h39+H}<+zAuzXfK1;P?4F~2nLPX7{pMuR6^gGE}*pG_w%zHae^wFnjKtYX|6 zPsso@JXhGhjn(&-UvbtFjePmIr(FBH%NacSZS~6|l-C=4R^Io5)&NMu#%Cr+-f(8X z+T*u2UZ3Zq4fR|P%J%tP!C;5@!E+~asr?kpmW?8AdG}s7WPLv{&wQJ}>>{0^>YA2^ zNZh68@O4Q3DppEBf-;#|masyfkeHc&N}hkn;iKuSZ_Mx`2Ii);Zl~}l*gNOw??Fr` zt&Xek#ImrY7;j|(`F4U>U4OamM1WGBitXOI=}Sb(X#=Qhds zxNdT0aKt%_K53AqlY}9hs}dq!g;;DrJysFcL^wN7kY2yvNQEWO)O2*Z${Md7800-Y zTQH{%K8b6J+nAM$6{vpunA27FDVw{Q#+^RCUrY%I;|)m5T#{he}lw%2Nii1O;r%hWIJ~RxRCSH zr(F_kh#9=Ap-lNi_Q+ix`jQj_Xj)Q!C~Ug-EFffm?It|=^P9y7Omd+oZE zpO;i9%lg?6cVL=44-Um+tl;6~CH2%H+NS62@50Lkzftuy<8$|5Xw!vXJ1cIB1*{@>3k z&ZaeUFte4;OqRsD-hrqe$~rW>-x3lrwQ3&Hs$Iq$%_SEn$TyOLQM-4#k7b{c+mq4Z z0`<^*Rq_x2`JHHj!chP**NDuwuSqA)wDi?Gy=Z8wt1j;DYHI<*`2MM1-ZS){5!!Cm zTSY~NXuvrMZ^5uf>For4W`6hl0tZv5_U8!ou=)u{57*e_^Nw)+(5OG*>>;XU!ZEqi zp|e}UU^gL&xb2pZzzn8$L-$|s^Wx!=n&m^52QRN>4L^X+F@??0*`v-0A%UwW^}9Z< z7}S0B#?0^$jzJbWrF}4fLUt?I!;c`Y{2m}7XF~Ci#g<2G2bVrkKbB6+@*Qi=syZG$EK{XLK!*V&B$_NuvhSEa*_TRbW;Q&F^k>R9 zcu)J$2>zra$v$4M+xq1?`7MRP@AJlA#jr0gJ5VBXj{XT>=yy)FUe@N)` zg55w=C|{q`KXLuV&2}*wzl_ka{n9=x$oo$2sduO+?Yu^|ZW~vvc$Ei1y5=I{`*MUN z_UOX0P<(>PxHSE)aFx5U@E%EQX~?&SsGeTh~_ET9}a}9 zP>d~8-UduM@+rrntQbQaIcP2i$$f1Dwn9bOPDxGr`z=o1`60jN9yPOhAE?fB9rA$Tj*Vt8!J!MDn)Z$34=>@o5 z+1T)}(j7T@29mgxX|Z zkDrq}p-J-Br3n|UwvNAi57o^n@<4{wiykljZ1QLp?V%^~QLstT9$~{A(489Fk(RrJ z(NV4F7Nr&<0}@5%3fEXK{)&(Pe=$AG(%$wTcpV?LH;xB8xp4t`dR6aWhcSfbWO7ESKH-QZ-*A6 z4coNfDC_Q}EZ=piSX_`=H<wj{adzUvgEwcOLjv3hK=!{iCq|P_ylL^z^36I7M83ZFLXcM zLa^9`GB5QeCm7eXf+$YM5aXe*2FUnS6zW;ziFvs}!J52;0%v)Le5BV)4Y^l7o z8wb;8f&B+Vf?cf7{sPOCx8&#}0Q`M4CnhJRn%xMetd71tj_k_~B`jh9lajycC`#zw zd}020JAI+&I4g>kPB6=s0QrE3nc^8{)_zzeZR6sJyPttT`mvJRmYnS=!VLGYo6F+0 z0s#jm|ADL>KR+Pz<$_u$H_mp{g5B4Cl%32g#$7>dyE%=ZZ8$6>ckjvPvIuu32}h_F zVAkU@r6f6*Od!PVN#U};eB3tw}v)oOYp6oly#*}Qo3;RRM`-o89&XR%ucr7fG zg0UbwPSFx56I4}PR=G)O<6tRO-sZ53df{AJah$(ItQcZ+Nk-mikRMXkR(-j=Hf<^Q z6w)0>7$p%_xuiD3c*PyVr*{jLZ-~SsLLdSt?BIGpP9)|~D?7GuAdC+YV(P}rB1+QY zpP?RL1QhkD1(r-3+3goN*g@s}^jsS$$Gk;^5mcNvH67z3FI?Vq9#{8@7^t_QlIYnc z)+4i@FzKPeEoB|ryGQK{FR}m;0tOd5GhNH5=#HYyx1U(n^(w6 zoCRpF)LS$V`AlY{wj{r(il-=uS2}qjk>HRGhwCts%4*(lOiw*^L>U9qYcO&82JILE zVpr*}RXrI3D0PTdxMM^jTS{wchi{bj%4eo-bjOG2g_OlNGAzTWw(!Y5vEQT zI@w#<9C$}1d*uIJzJJ4U+DmKS)^dRhwCwOnjg5*wh>3EO!8~I~(eTG7ORRUf-x5zt zUEvzt)oI{4|4Z$^9h*o$vyv3&Tm!W+q_sia(ur;Td*?Sm7eDpkyfOM=vy?5=

e|T!{_v+yI-$O)4pPj&?i2z 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 OapN_AKZ1+@T*mY-q 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 + + @@ -38,6 +40,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/chaoran/business/activity/MainActivity.java b/app/src/main/java/chaoran/business/activity/MainActivity.java index f5c9091..e80f7c8 100644 --- a/app/src/main/java/chaoran/business/activity/MainActivity.java +++ b/app/src/main/java/chaoran/business/activity/MainActivity.java @@ -35,6 +35,8 @@ import chaoran.business.engine.impl.NetworkSettingEngine; import chaoran.business.engine.SettingEngine; import chaoran.business.engine.impl.TekVoiceEngine; import chaoran.business.engine.VoiceEngine; +import chaoran.business.service.ScanServiceEDA50P; +import chaoran.business.service.ScanServiceZEBRA; import chaoran.business.utils.LocalAddressUtil; import chaoran.business.utils.StatusBarUtil; @@ -54,7 +56,6 @@ public class MainActivity extends AppCompatActivity implements ResultListener{ private ProgressBar progressBar; private ActionBar actionBar; - @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -72,7 +73,7 @@ public class MainActivity extends AppCompatActivity implements ResultListener{ BrandEnum brand = BrandEnum.code(Build.MANUFACTURER); Toast.makeText(this, Build.MANUFACTURER, Toast.LENGTH_LONG).show(); Log.i("brand===",brand.toString()); - /* switch (brand) { + switch (brand) { case UROBO: adapter = new UroBoAdapter(this, this); break; @@ -88,7 +89,7 @@ public class MainActivity extends AppCompatActivity implements ResultListener{ } if (null != adapter) { adapter.start(); - }*/ + } } @SuppressLint("JavascriptInterface") private void initView() { @@ -195,7 +196,7 @@ public class MainActivity extends AppCompatActivity implements ResultListener{ } @Override protected void onDestroy() { -// adapter.stop(); + adapter.stop(); super.onDestroy(); if (diPlayer != null) { diPlayer.stop(); diff --git a/app/src/main/java/chaoran/business/adapter/HoneywellAdapter.java b/app/src/main/java/chaoran/business/adapter/HoneywellAdapter.java new file mode 100644 index 0000000..45195f4 --- /dev/null +++ b/app/src/main/java/chaoran/business/adapter/HoneywellAdapter.java @@ -0,0 +1,76 @@ +package chaoran.business.adapter; + + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Build; + +import chaoran.business.activity.MainActivity; +import chaoran.business.activity.ResultListener; +import chaoran.business.service.ScanServiceEDA50P; +import chaoran.business.service.ScanServiceZEBRA; +import chaoran.business.strategy.Strategy; + + +public class HoneywellAdapter implements Adapter { + private Context context; + private Strategy strategy; + private ResultListener resultListener; + private Intent intent = null; + + public HoneywellAdapter(Context context, ResultListener resultListener) { + this.context = context; + this.resultListener = resultListener; + strategy = new Receiver(); + } + + @Override + public void start() { + strategy.executeStrategy(resultListener); + openContinueScan(); + } + + @Override + public void stop() { + strategy.exclusiveStrategy(); + } + + public class Receiver extends BroadcastReceiver implements Strategy { + + @Override + public void onReceive(Context context, Intent intent) { + resultListener.result(intent.getStringExtra("data")); + } + + @Override + public void executeStrategy(ResultListener resultListener) { + IntentFilter filter = new IntentFilter(); + filter.addAction("com.honeywell.scan.broadcast"); + context.registerReceiver(this, filter); + } + + @Override + public void exclusiveStrategy() { + context.unregisterReceiver(this); + } + } + public void openContinueScan(){ + if("eda50p".equals(Build.MODEL.toLowerCase())){ + intent = new Intent(context, ScanServiceEDA50P.class); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + context.getApplicationContext().startForegroundService(intent); + }else { + context.getApplicationContext().startService(intent); + } + }else if("tc26".equals(Build.MODEL.toLowerCase())){ + intent = new Intent(context, ScanServiceZEBRA.class); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + context.getApplicationContext().startForegroundService(intent); + }else { + context.getApplicationContext().startService(intent); + } + } + } +} diff --git a/app/src/main/java/chaoran/business/service/ScanServiceEDA50P.java b/app/src/main/java/chaoran/business/service/ScanServiceEDA50P.java new file mode 100644 index 0000000..c0daeb3 --- /dev/null +++ b/app/src/main/java/chaoran/business/service/ScanServiceEDA50P.java @@ -0,0 +1,258 @@ +package chaoran.business.service; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; + +import com.honeywell.aidc.AidcManager; +import com.honeywell.aidc.BarcodeDeviceConnectionEvent; +import com.honeywell.aidc.BarcodeFailureEvent; +import com.honeywell.aidc.BarcodeReadEvent; +import com.honeywell.aidc.BarcodeReader; +import com.honeywell.aidc.BarcodeReaderInfo; +import com.honeywell.aidc.ScannerNotClaimedException; +import com.honeywell.aidc.ScannerUnavailableException; +import com.honeywell.aidc.TriggerStateChangeEvent; +import com.honeywell.aidc.UnsupportedPropertyException; + +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + + +public class ScanServiceEDA50P extends Service + implements BarcodeReader.BarcodeListener, BarcodeReader.TriggerListener, AidcManager.BarcodeDeviceListener{ + private final String TAG = "TestScanService"; + + private NotificationManager notificationManager; + private String notificationId = "channelId"; + private String notificationName = "channelName"; + + private String _Suffix = "\n"; + + + private AidcManager mAidcManager; + private BarcodeReader mBarcodeReader; + private BarcodeReader mInternalScannerReader; + private boolean mKeyPressed = false; + private boolean isContinue = true; + + //必须要实现的方法 + @Override + public IBinder onBind(Intent intent) { + // Log.i(TAG, "onBind方法被调用!"); + return null; + } + + //Service被创建时调用 + @Override + public void onCreate() { + // Log.i(TAG, "onCreate方法被调用!"); + super.onCreate(); + super.onCreate(); + notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + NotificationChannel channel = null; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { //适配8.0service + channel = new NotificationChannel(notificationId, notificationName, NotificationManager.IMPORTANCE_HIGH); + notificationManager.createNotificationChannel(channel); + Notification notification = new Notification.Builder(getApplicationContext(), notificationId).build(); + //startForeground(1,getNotification()); + startForeground(1, notification); + } + + AidcManager.create(this, new MyCreatedCallback()); + } + + //Service被启动时调用 + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.i(TAG, "onStartCommand方法被调用!"); + return super.onStartCommand(intent, flags, startId); + } + + //Service被关闭之前回调 + @Override + public void onDestroy() { + Log.i(TAG, "onDestory方法被调用!"); + super.onDestroy(); + + if (this.mInternalScannerReader != null) { + this.mInternalScannerReader.removeBarcodeListener(this); + this.mInternalScannerReader.removeTriggerListener(this); + this.mInternalScannerReader.close(); + this.mInternalScannerReader = null; + Log.d(TAG, "Close internal scanner"); + } + if (this.mAidcManager != null) { + this.mAidcManager.removeBarcodeDeviceListener(this); + this.mAidcManager.close(); + } + + } + class MyCreatedCallback implements AidcManager.CreatedCallback { + MyCreatedCallback() { + } + + @Override + public void onCreated(AidcManager aidcManager) { + Log.d(TAG, "MyCreatedCallback onCreate !!!"); + mAidcManager = aidcManager; + mAidcManager.addBarcodeDeviceListener(ScanServiceEDA50P.this); + initAllBarcodeReaderAndSetDefault(); + } + } + void initAllBarcodeReaderAndSetDefault() { + List readerList = mAidcManager.listBarcodeDevices(); + Log.d(TAG, "initAllBarcodeReaderAndSetDefault readerList = "+readerList); + mInternalScannerReader = null; + for (BarcodeReaderInfo reader : readerList) { + if ("dcs.scanner.imager".equals(reader.getName())) { + mInternalScannerReader = initBarcodeReader(mInternalScannerReader, reader.getName()); + } + } + Log.d(TAG, "initAllBarcodeReaderAndSetDefault mInternalScannerReader = "+mInternalScannerReader); + + if (mInternalScannerReader != null) { + mBarcodeReader = mInternalScannerReader; + } + else { + Log.d(TAG, "No reader find"); + } + if (mBarcodeReader != null) { + try { + mBarcodeReader.addBarcodeListener(this); + mBarcodeReader.addTriggerListener(this); + } + catch (Throwable e2) { + e2.printStackTrace(); + } + try { + mBarcodeReader.setProperty(BarcodeReader.PROPERTY_NOTIFICATION_GOOD_READ_ENABLED, true); + mBarcodeReader.setProperty(BarcodeReader.PROPERTY_EAN_13_CHECK_DIGIT_TRANSMIT_ENABLED, true); + + } catch (UnsupportedPropertyException e) { + e.printStackTrace(); + } + + } + } + + BarcodeReader initBarcodeReader(BarcodeReader mReader, String mReaderName) { + if (mReader == null) { + try { + if (mReaderName == null) { + mReader = mAidcManager.createBarcodeReader(); + } else { + mReader = mAidcManager.createBarcodeReader(mReaderName); + } + } + catch (Exception e) { + Log.e(TAG, "error", e); + } + try { + mReader.claim(); + Log.d(TAG, "Call DCS interface claim() " + mReaderName); + } catch (ScannerUnavailableException e) { + e.printStackTrace(); + } + try { + mReader.setProperty(BarcodeReader.PROPERTY_TRIGGER_CONTROL_MODE, BarcodeReader.TRIGGER_CONTROL_MODE_CLIENT_CONTROL); + mReader.setProperty(BarcodeReader.PROPERTY_DATA_PROCESSOR_LAUNCH_EZ_CONFIG, false); + mReader.setProperty(BarcodeReader.PROPERTY_TRIGGER_AUTO_MODE_TIMEOUT, 300); + + } catch (UnsupportedPropertyException e2) { + e2.printStackTrace(); + } + } + return mReader; + } + + public void onBarcodeDeviceConnectionEvent(BarcodeDeviceConnectionEvent event) { + Log.d(TAG, event.getBarcodeReaderInfo() + " Connection status: " + event.getConnectionStatus()); + } + + public void onBarcodeEvent(final BarcodeReadEvent event) { + String barcodeDate = new String(event.getBarcodeData().getBytes(event.getCharset())); + Intent intent2 = new Intent("com.pda.scan.result"); + intent2.putExtra("data",barcodeDate); + sendBroadcast(intent2); + if(isContinue) { + executorService.execute(new MyThread(mBarcodeReader)); + } + } + ExecutorService executorService = Executors.newSingleThreadExecutor(); + class MyThread implements Runnable{ + private BarcodeReader mBarcodeReader; + public MyThread(BarcodeReader mBarcodeReader){ + this.mBarcodeReader = mBarcodeReader; + } + @Override + public void run() { + { + try { + Thread.sleep(1000); + mBarcodeReader.decode(true); + } catch (ScannerNotClaimedException e) { + Log.e(TAG, "catch ScannerNotClaimedException",e); + e.printStackTrace(); + } catch (ScannerUnavailableException e2) { + Log.e(TAG, "catch ScannerUnavailableException",e2); + e2.printStackTrace(); + } catch (Exception e3) { + e3.printStackTrace(); + } + + } + } + } + public void onFailureEvent(final BarcodeFailureEvent event) { + //Log.d(TAG, "Enter onFailureEvent ===> " + event.getTimestamp()); + if(isContinue) { + try { + Thread.sleep(200); + } catch (Exception ex) { + ex.printStackTrace(); + } + // doScan(true); + } + } + + public void onTriggerEvent(TriggerStateChangeEvent event) { + if (event.getState()) { + if (!mKeyPressed) { + mKeyPressed = true; + doScan(true); + }else{ + mKeyPressed = false; + doScan(false); + } + } else { + //mKeyPressed = false; + // doScan(false); + } + // Log.d(TAG, "OnTriggerEvent status: " + event.getState()); + } + void doScan(boolean do_scan) { + try { + if (do_scan) { + // Log.d(TAG, "Start a new Scan!"); + } else { + // Log.d(TAG, "Cancel last Scan!"); + } + mBarcodeReader.decode(do_scan); + } catch (ScannerNotClaimedException e) { + Log.e(TAG, "catch ScannerNotClaimedException",e); + e.printStackTrace(); + } catch (ScannerUnavailableException e2) { + Log.e(TAG, "catch ScannerUnavailableException",e2); + e2.printStackTrace(); + } catch (Exception e3) { + e3.printStackTrace(); + } + } +} diff --git a/app/src/main/java/chaoran/business/service/ScanServiceZEBRA.java b/app/src/main/java/chaoran/business/service/ScanServiceZEBRA.java new file mode 100644 index 0000000..ecf4058 --- /dev/null +++ b/app/src/main/java/chaoran/business/service/ScanServiceZEBRA.java @@ -0,0 +1,333 @@ +package chaoran.business.service; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.IBinder; +import android.util.Log; + +import com.symbol.emdk.EMDKManager; +import com.symbol.emdk.EMDKResults; +import com.symbol.emdk.barcode.BarcodeManager; +import com.symbol.emdk.barcode.ScanDataCollection; +import com.symbol.emdk.barcode.Scanner; +import com.symbol.emdk.barcode.ScannerConfig; +import com.symbol.emdk.barcode.ScannerException; +import com.symbol.emdk.barcode.ScannerResults; +import com.symbol.emdk.barcode.StatusData; + +import java.util.ArrayList; + +public class ScanServiceZEBRA extends Service implements EMDKManager.EMDKListener, Scanner.DataListener, Scanner.StatusListener { + private final String TAG = "ScanService"; + + private NotificationManager notificationManager; + private String notificationId = "ScanServiceId"; + private String notificationName = "ScanServiceName"; + + private EMDKManager emdkManager = null; + private BarcodeManager barcodeManager = null; + private Scanner scanner = null; + + private String statusString = ""; + + private boolean bSoftTriggerSelected = true; + + @Override + public IBinder onBind(Intent intent) { + Log.i(TAG, "onBind方法被调用!"); + return null; + } + + //Service被创建时调用 + @Override + public void onCreate() { + Log.i(TAG, "onCreate方法被调用!"); + super.onCreate(); + notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + NotificationChannel channel = null; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { //适配8.0service + channel = new NotificationChannel(notificationId, notificationName, NotificationManager.IMPORTANCE_HIGH); + notificationManager.createNotificationChannel(channel); + Notification notification = new Notification.Builder(getApplicationContext(), notificationId).build(); + //startForeground(1,getNotification()); + startForeground(1, notification); + } + EMDKResults results = EMDKManager.getEMDKManager(getApplicationContext(), this); + final IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction("com.pda.scan.trigger"); + registerReceiver(myCodeReceiver, intentFilter); + } + private MyCodeReceiver myCodeReceiver = new MyCodeReceiver(); + + public class MyCodeReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + int keyCode = intent.getIntExtra("data",0); + if(keyCode == 103 || keyCode == 10036){ + if(bSoftTriggerSelected){ + bSoftTriggerSelected = false; + }else{ + bSoftTriggerSelected = true; + cancelRead(); + } + } + } + } + /* private Notification getNotification() { + Notification.Builder builder = new Notification.Builder(this) + .setContentTitle("连续扫描服务") + .setContentText("正在运行"); + builder.setChannelId(notificationId); + Notification notification = builder.build(); + return notification; + }*/ + + //Service被启动时调用 + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.i(TAG, "onStartCommand方法被调用!"); + + //setconfig(); + initScanner(); + return super.onStartCommand(intent, flags, startId); + } + public void setconfig(){ + Intent i = new Intent(); + i.setAction("com.symbol.datawedge.api.ACTION"); + i.putExtra("com.symbol.datawedge.api.SET_DEFAULT_PROFILE", "myProfile"); + sendBroadcast(i); + } + @Override + public void onOpened(EMDKManager emdkManager) { + updateStatus("EMDK open success!"); + this.emdkManager = emdkManager; + // Acquire the barcode manager resources + initBarcodeManager(); + // Enumerate scanner devices + // enumerateScannerDevices(); + initScanner(); + } + + @Override + public void onClosed() { + // Release all the resources + if (emdkManager != null) { + emdkManager.release(); + emdkManager = null; + } + updateStatus("EMDK closed unexpectedly! Please close and restart the application."); + } + + @Override + public void onDestroy() { + super.onDestroy(); + // Release all the resources + if (emdkManager != null) { + emdkManager.release(); + emdkManager = null; + } + + } + + @Override + public void onData(ScanDataCollection scanDataCollection) { + if ((scanDataCollection != null) && (scanDataCollection.getResult() == ScannerResults.SUCCESS)) { + ArrayList scanData = scanDataCollection.getScanData(); + for (ScanDataCollection.ScanData data : scanData) { + updateData(data.getData()); + } + } + } + + @Override + public void onStatus(StatusData statusData) { + StatusData.ScannerStates state = statusData.getState(); + switch (state) { + case IDLE: + statusString = statusData.getFriendlyName() + " is enabled and idle..."; + updateStatus(statusString); + // set trigger type + if(bSoftTriggerSelected) { + scanner.triggerType = Scanner.TriggerType.SOFT_ALWAYS; + setDecoders(); + } else { + scanner.triggerType = Scanner.TriggerType.HARD; + cancelRead(); + } + // submit read + if (!scanner.isReadPending()) { + try { + Thread.sleep(1000); + Log.i("jqtest:", "scan"); + scanner.read(); + } catch (Exception e) { + e.printStackTrace(); + updateStatus(e.getMessage()); + try { + deInitScanner(); + Thread.sleep(200); + }catch (Exception e1){ + e1.printStackTrace(); + } + initScanner(); + } + } + break; + case WAITING: + statusString = "Scanner is waiting for trigger press..."; + updateStatus(statusString); + break; + case SCANNING: + statusString = "Scanning..."; + updateStatus(statusString); + break; + case DISABLED: + statusString = statusData.getFriendlyName() + " is disabled."; + updateStatus(statusString); + break; + case ERROR: + statusString = "An error has occurred."; + updateStatus(statusString); + break; + default: + break; + } + } + + + private void initScanner() { + if (scanner == null) { + if (barcodeManager != null) { + scanner = barcodeManager.getDevice(BarcodeManager.DeviceIdentifier.DEFAULT); + } else { + updateStatus("Failed to get the specified scanner device! Please close and restart the application."); + return; + } + if (scanner != null) { + scanner.addDataListener(this); + scanner.addStatusListener(this); + try { + scanner.enable(); + } catch (ScannerException e) { + updateStatus(e.getMessage()); + deInitScanner(); + } + } else { + updateStatus("Failed to initialize the scanner device."); + } + } + } + + private void deInitScanner() { + if (scanner != null) { + try { + scanner.disable(); + } catch (Exception e) { + updateStatus(e.getMessage()); + } + + try { + scanner.removeDataListener(this); + scanner.removeStatusListener(this); + } catch (Exception e) { + updateStatus(e.getMessage()); + } + + try { + scanner.release(); + } catch (Exception e) { + updateStatus(e.getMessage()); + } + scanner = null; + } + } + + private void initBarcodeManager() { + barcodeManager = (BarcodeManager) emdkManager.getInstance(EMDKManager.FEATURE_TYPE.BARCODE); + + } + + private void deInitBarcodeManager() { + if (emdkManager != null) { + emdkManager.release(EMDKManager.FEATURE_TYPE.BARCODE); + } + } + + +/* private void enumerateScannerDevices() { + if (barcodeManager != null) { + List deviceList = barcodeManager.getSupportedDevicesInfo(); + if ((deviceList != null) && (deviceList.size() != 0)) { + Iterator it = deviceList.iterator(); + while (it.hasNext()) { + ScannerInfo scnInfo = it.next(); + if (scnInfo.isDefaultScanner()) { + scannerInfo = scnInfo; + Log.i("scannerInfo", scannerInfo.getFriendlyName()); + break; + } + } + } + } + }*/ + + private void setDecoders() { + if (scanner != null) { + try { + ScannerConfig config = scanner.getConfig(); + // Set EAN8 + config.decoderParams.ean8.enabled = true; + // Set EAN13 + config.decoderParams.ean13.enabled = true; + // Set Code39 + config.decoderParams.code39.enabled = true; + //Set Code128 + config.decoderParams.code128.enabled = true; +// config.readerParams.readerSpecific.imagerSpecific.aimType = ScannerConfig.AimType.PRESENTATION; + scanner.setConfig(config); + } catch (ScannerException e) { + } + } + } + + private void cancelRead() { + if (scanner != null) { + if (scanner.isReadPending()) { + try { + scanner.cancelRead(); + } catch (ScannerException e) { + updateStatus(e.getMessage()); + } + } + } + } + + private void updateStatus(final String status) { + //Log.i("status",status); +// runOnUiThread(new Runnable() { +// @Override +// public void run() { +// textViewStatus.setText("" + status); +// } +// }); + } + + private void updateData(final String result) { + new Thread() { + @Override + public void run() { + super.run(); + Intent intent2 = new Intent("com.pda.scan.result"); + intent2.putExtra("data", result); + sendBroadcast(intent2); + Log.i(TAG, result); + } + }.start(); + } +} diff --git a/build.gradle b/build.gradle index c8d7712..53524a2 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath "com.android.tools.build:gradle:4.1.0" + classpath 'com.android.tools.build:gradle:4.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files