From 79ec4464d26955ce02cfc8fc986c38683f55fc7d Mon Sep 17 00:00:00 2001 From: huifer Date: Thu, 5 Mar 2020 09:12:23 +0800 Subject: [PATCH] Spring-MessageConverter --- README.md | 3 +- .../Spring/message/Spring-MessageConverter.md | 197 ++++++++++++++++++ .../springmessage/image-20200305085013723.png | Bin 0 -> 26891 bytes .../springmessage/image-20200305085845017.png | Bin 0 -> 13675 bytes .../springmessage/image-20200305090846313.png | Bin 0 -> 9807 bytes 5 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 docs/Spring/message/Spring-MessageConverter.md create mode 100644 images/springmessage/image-20200305085013723.png create mode 100644 images/springmessage/image-20200305085845017.png create mode 100644 images/springmessage/image-20200305090846313.png diff --git a/README.md b/README.md index fb742e8..e7f170a 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,8 @@ ### Spring Message - [Spring EnableJMS](/docs/Spring/message/Spring-EnableJms.md) - +- [Spring JmsTemplate](/docs/Spring/message/Spring-JmsTemplate.md) +- [Spring MessageConverter](/docs/Spring/message/Spring-MessageConverter.md) ## MyBatis ### 基础支持层 - [反射工具箱和 TypeHandler 系列](docs/Mybatis/基础支持层/1、反射工具箱和TypeHandler系列.md) diff --git a/docs/Spring/message/Spring-MessageConverter.md b/docs/Spring/message/Spring-MessageConverter.md new file mode 100644 index 0000000..a31b930 --- /dev/null +++ b/docs/Spring/message/Spring-MessageConverter.md @@ -0,0 +1,197 @@ +# Spring MessageConverter +- Author: [HuiFer](https://github.com/huifer) +- 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) +- 源码路径: `org.springframework.messaging.converter.MessageConverter` +## MessageConverter +- 消息转换接口 +- 类图如下 +![image-20200305085013723](/images/springmessage/image-20200305085013723.png) +- 两个方法 +1. fromMessage: 从消息转换到Object +```java + Object fromMessage(Message message, Class targetClass); +``` +2. toMessage: 从Object转换到消息 +```java + Message toMessage(Object payload, @Nullable MessageHeaders headers); +``` + + + + + +| 序号 | class | 作用 | +| ---- | ------------------------------- | -------------------- | +| 1 | ByteArrayMessageConverter | byte数组消息转换器 | +| 2 | MappingJackson2MessageConverter | jackson2的消息转换器 | +| 3 | MarshallingMessageConverter | xml的消息转换器 | +| 4 | StringMessageConverter | 字符串消息转换器 | + + + + + +## AbstractMessageConverter + +类图: + +![image-20200305085845017](/images/springmessage/image-20200305085845017.png) + +### fromMessage + +```java + @Override + @Nullable + public final Object fromMessage(Message message, Class targetClass) { + return fromMessage(message, targetClass, null); + } + + @Override + @Nullable + public final Object fromMessage(Message message, Class targetClass, @Nullable Object conversionHint) { + if (!canConvertFrom(message, targetClass)) { + return null; + } + return convertFromInternal(message, targetClass, conversionHint); + } + + + // 子类实现 + @Nullable + protected Object convertFromInternal( + Message message, Class targetClass, @Nullable Object conversionHint) { + + return null; + } + +``` + +- 真正的转换过程 + +```JAVA + @Override + protected Object convertFromInternal(Message message, Class targetClass, @Nullable Object conversionHint) { + Charset charset = getContentTypeCharset(getMimeType(message.getHeaders())); + Object payload = message.getPayload(); + return (payload instanceof String ? payload : new String((byte[]) payload, charset)); + } + +``` + + + +### toMessage + +```JAVA + @Override + @Nullable + public final Message toMessage(Object payload, @Nullable MessageHeaders headers) { + return toMessage(payload, headers, null); + } + +``` + + + +```JAVA + @Override + @Nullable + public final Message toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { + if (!canConvertTo(payload, headers)) { + return null; + } + // 子类实现 + Object payloadToUse = convertToInternal(payload, headers, conversionHint); + if (payloadToUse == null) { + return null; + } + + MimeType mimeType = getDefaultContentType(payloadToUse); + if (headers != null) { + MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(headers, MessageHeaderAccessor.class); + if (accessor != null && accessor.isMutable()) { + if (mimeType != null) { + accessor.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType); + } + // 创建信息对象 + return MessageBuilder.createMessage(payloadToUse, accessor.getMessageHeaders()); + } + } + + MessageBuilder builder = MessageBuilder.withPayload(payloadToUse); + if (headers != null) { + builder.copyHeaders(headers); + } + if (mimeType != null) { + builder.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType); + } + return builder.build(); + } + + +``` + +- `org.springframework.messaging.converter.StringMessageConverter#convertToInternal` + + ```JAVA + @Override + @Nullable + protected Object convertToInternal( + Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { + + if (byte[].class == getSerializedPayloadClass()) { + // 获取编码 + Charset charset = getContentTypeCharset(getMimeType(headers)); + // 获取byte数组 + payload = ((String) payload).getBytes(charset); + } + return payload; + } + + ``` + + + +- 创建**Message**对象 + + ```JAVA + @SuppressWarnings("unchecked") + public static Message createMessage(@Nullable T payload, MessageHeaders messageHeaders) { + Assert.notNull(payload, "Payload must not be null"); + Assert.notNull(messageHeaders, "MessageHeaders must not be null"); + if (payload instanceof Throwable) { + return (Message) new ErrorMessage((Throwable) payload, messageHeaders); + } + else { + return new GenericMessage<>(payload, messageHeaders); + } + } + + ``` + + + + ```JAVA + @SuppressWarnings("unchecked") + public Message build() { + if (this.originalMessage != null && !this.headerAccessor.isModified()) { + return this.originalMessage; + } + MessageHeaders headersToUse = this.headerAccessor.toMessageHeaders(); + if (this.payload instanceof Throwable) { + return (Message) new ErrorMessage((Throwable) this.payload, headersToUse); + } + else { + return new GenericMessage<>(this.payload, headersToUse); + } + } + + ``` + + + +- 两种创建方式基本相同,如果出现异常组装异常消息对象`ErrorMessage`,成功创建`GenericMessage` + +![image-20200305090846313](/images/springmessage/image-20200305090846313.png) + +从类图上看`ErrorMessage`是`GenericMessage`的子类 \ No newline at end of file diff --git a/images/springmessage/image-20200305085013723.png b/images/springmessage/image-20200305085013723.png new file mode 100644 index 0000000000000000000000000000000000000000..d1955f1f48d1214c02b49ed639e55d3d2418e6cc GIT binary patch literal 26891 zcmeFYXIxX=w(uK7L{Z?efC2)K3erL89Rvjly@Xywq<85Z3!o^VRH>muLJ7S$ML>E9 zp;ze%MS*|>lH3)1_C9;RXP^C^d+xXUJM&8xbImr!9COSu|7-GAOGBBOijfKg0#U0x zey9TioyCAaWQ*s|0XcGVl3^gwpCFZo5A=M~HfQ|;^;Twy#KYug6|T?7D#|$I-#8_( z7oOiXd_+bu3a6+pteR^0Q>Uz!>Kfk9prj--!9PIvvun}!&iv=E-pEhfzwyVUn!*)@ zOTEuHdXMlQ&t7@a_nNJ*`-i_Qi*%^RYT8j>{i^9&UqGoxr4cLAGyxCZGNC?CVN8a3RplUx2YnK&L9CCd&Vg^ zayLqgqg8y8x-pdp=m?~7rx+Lq3r{Vtrv0M;Jxl$uRC6t(+?U^PTgN}+;wp=nI#Q~K zDUe!|<$py16y*Yn!X7maoJXVK_jnSFt5oZ){rHUE*>5A8q@ZKpV2%lnDY3aPMJ@{C z#tN{{d+ITc>V4n{o$EvsO&Mw3rR}u5?!n+<#E9ywnSRcv)d&5=>b0s1fSS_J1AAR) zmxPg*4rwrP??k={=T&9PNE&(VzW1Y46|53=%}ZPkf;D$grW!&%Wbd}38l1X?-&NZ? zXJk)_xhK%a)}qN}YU|`%KZ$FH`2BQ=ijm4~m1#AFvGWU)_AHG>K|>H|!CkPYV&I1M z;UrHg8XvN3^-2TZ_@!7+$tdwVzHu}_&3KW8+SMc3DLhMHuT@_`9)A?IRP^B0ODsw( zLd5@J;+SLuJj5^q?68`$ax}F|c-~yQ8cIVqfvQoCb%DC2hx_azGAz!9!JDZC8Rpp}Gz{==V)yTNM z$fc(m2)rszzyRU7<$_Qg> z#P#->6u@Ymw1@`Kp>(tNX#alcpdS+!Rgy>A{mpkeHx7C&?ps_P!wz{UdQ|;r-tm0A zi1xs%r%211Th=>be<}8Qw%Nozi!%>Ya&(xoo)}H`m!2$A!MIuprTl0CqJis7UnEId z-|g8Q{3NIWr2Na)7dgPNG3@3st$W7 zbAHx`_Y;px30`Fp!BTi{?7m!<`h2lLbZ#mCXwtIo?T8$3R@RFG^O8lnqRX^hV3A%{ z;|i@xS=y1;^Rop6XK=#7@YCjfTSaX|w3b3Y!^Wb>biB_rXFm%hpLr)JvtFP?`^&tm zR_(Vr#<2icV(v4{0Drj%?OX|#avBZi$Tph_j?GQ$H%|75x+@cq$4yg=#DoNBUTjbw z&S|}oY46GgSD5q<=?UPj!?@3mxB4>>@0rAn6OSJd)B|^bh4b#hsW%a4heWj+Oid=< zcM$y4QQwQkn>ngAT8M6|ybN%#+Xwd_YlbSxvT}I@ZN0yW^Y%#ek4Y;mihD`2q;UJC zUF)fjToM30>n1Rl-r@f zRHBH&g>*P8BvD-6=TdZBl4W6gvtrfrU7smz+_icBhe_1$#!cQKt3m?bH%wkyahie! znc*fK4~oT6=Rk`}R%$XbWb#9~NK z2Gp~uFa8-^$62JzG!_h5{-I;&mVWukXEG{}a@n=W6>(lV}H zX5mFly%uKEa@NZqNx3BAcBRpC5XZEW^!tUZg2m3iyiR^%&k zbVddPRbjXPnd7%R!+N`Xe#_{+p=?}7_^?gY zJ=!4S&Pecm7Kgs5xn9D*uLKFdV5=C5ryOys$Skn zy>`#$eQESXt;e6LklLIu93`KgVPQ_fXEfdSDSE;8AnKbbh2!+O_PWo)57-Wnaa*QE zgI?jDV?WC3$7lhwN$Z~l_CSzuZFEcdu4oflo#|*I(?0|aJdX~G9VjIJ63Rjg{i$>; zXOvA_Ys0m)KvrV(BY(SoC&-y!ls&<2OI1i@u|8p{?6|C=va&h|>%v^6%q?j;utr&} zoAfOQ=RZjk1Whi&!%Rd%He`>+oNl+D9~pXUb(P< zWWiLMS)3^9X5qHXlG@4&k797 zAeHT&gx=!PYUj|@B1}UuB}Nt)yX2TJQeMOANSBeJKf3Rw_3spxYt9xz=Zv##S><3K zwu3y!6&3YPR(fZ-1-=n4^4u#Z@%s%!M-S!+W(nJsN_g4l3Q*LmBCL(8U<72;# zuCZ~-l>n@}fjW>KRdEV;^@Pu0)%OV>>j5sS(ipg3C!8DFy`6|L6qf+t>(H4PCwG zaq!e92~@ZFmLtQ{2MFZavQGm!bk=pCq7D-Z!K{Rrz0-y*g|5 zvX@}HCMQy}CQdQ=YSt{W%W@hB(lpy-fH)Au|KZE-8JWX==>BT7*v#KwoUpdD_#n-ywY4RX{P=rFJ7*HCn$8i|8)!jMm4sC#SM> zl2#?i_qDyEO&#gb5PJ7CmJe0_lqfwr%MQE~W;n$z(qGczC%5?l& zfnx4)Sl0m44g~aqu0Gd+-vP~UJOrRpS-b?3jr~Bl5jJ0)Nl+0PTi~eCvnjNCA9_?0 z)Us3_E0j+LGL~y!bo=DRG2tYdmzT#?Zouk;0;DtjV>eQcbriI4TZF?}G%1)oG@|>l zX40(78Y!R$`f@&x2DN$ohEMW5?J|sH|M8bcO~3>hNSgdq9YEp#rny%MBE$RK0NFz6 zPYnkID(S0Q-XMuTr0`ounF+~pg3}~z8=wE(dX=DuXdiHz`;SWh?L!>U`YoXuvonA( z{ssc_JVJba4J2Jw{qcKt?5tOF`@H|L^^(3c>dJqt1jzT_A#X!qU=G?zBcFL~1=tb) zzf!wfPFfo8$}`sIJ`ADCZ=>JpdU_T&_JRiFp|qyHH?M-yRF(W2HoY60X3frn+WfPv zzUx6+NXJ~3&o(=2+gC!*4X=@3r|CKiDqZ+JPygP$fU*B;JN)7811#>bycu2t|BYKK z2`fc)aJ|@TPxf@3~+0)+Vq+6 z+2<2du>zeE`Wrb`9kNrpSF)Ge0=@S6yn!Mh-@BwEaUI*gJQ1767`dyZ&YKi+1n)I< z&WR|u25jq=NE(iOA2dOn+sj-f;_RE#bdD-Fj)ivy3PhfxjaO3g*efEGr(;c;M| zshpI-8`Og8TqSlfQxl3SR(mk9ohK^c-gJaNb@TntcJkcH?DZRuKRyZ(wzUquD~k)o zg(s{ZYs!u}3h`Vc;Oww_Vgmuq{Tz?AkLDfB4(J$}b&J&<_pYJlW<^AxO%T@g`VI)= z@%lrVkroBY7Q^iE42#kqtuZ>Rs!k!GwW6w?d_dL7`FlZ=!qj=!9u<}}>jl@q{r6^u z*N(BRDj^|z#*>P#29E24`8Rvqamqw0l?d!G>-F`Mr}EK&^BE^C{Inj z`do^PW9v}ASrWV3FPS31r6I@@?Rfls#kk4=DtObodIzPv#9^M(YZYXjLSg)~U=qx5 z63RbcYf1!5a0hffj0&>Lb=gD<2)U-`%a%RBTLdZic;9!JlGbFEKDb_@5v=F2^Txda zpE430!x122k9T$oy!QxGQ@~p{_oe|32V3VC8w~isxCQw2?3^gsO+A`V+V8MKV#=m< z>5E$kSgYcTsI^`T!P?-=;X&7r_C=)uL#!FY`<5bjd-L|L*S8kKP(eDouAWDP72~>F z7Uu3U!VV*R4eYn%&B<;#T>mrK=HrR8q@&?l@!-NI!1_UquX>-5fiwU=0=@4H;Ga>L zPrM{H8h(9Lq^hqQPDSBI$=${ypJ0Px*fX=fVIH}0gRd*mc`DvOTZS*Q$R*h`J$4$E zc18%I5od zup+;n zJNPFbS9e?sEadjythNYh)6$5;1_=Q$QB+`sqg_koxNQpi)Jf|O+5&(Or5kbBwRzgn z?kHH#$0BUPx5YvoJG+Gq(Vvm1HxbJAzG=6R#Uokl7ez38aSgklkN1=0Vo(C)$o&zh z!A8U`a{BN`igS-DOWvfw2{>o!=Fm*in4Lu)*Q0~6vN>g}7x-YKM!d-cLtBG_Bq=vm zkxW9}TyChx8oyaFwvU}J{PDOHM?|xj9Zbt{<`eUF4``j-7&guv9;w{fUzN)kk(;YC z5L3!nsb>_wJ1W^^le$Y8GtwvF;~3a?3%?g85br&5^x^q9?o#vxV0&uwdJjZ{;t(Cw zuekn7KC98deB-pn;<@?i&Z^_QUd+yq-g5u-w$}YG?E+lEkLAofw*I8vxynC3#Ua6v zwT++Rf$?gvODv*?>nmRdggH1{!Y)o zZqh}{!_lGjgp@-lC@N4^XB9W4oHkUOS~(i9{Ln02F9@bT^V)K%E-=~q8CYeO+iTzO z#Toy*_F94Qo8eiXXs!zTnr`8kG6ar9f8nl7t#W&rd_1RCXEe@E@z?<&9uTb`QrF&r zORJ7noEEd;w%orqJ0h3ue?(b265iN4Qd4{xysn2YtoTaSVC9z9bV-qUn>jlnt`%7d z&Hd$ltHH^zY0fw;AHQTZ+Hb>Yi`3Y{j96%PN+5P(f92QA|GZmb@oIpmBiBYnRfGdRHuKdgA|iFo?X2{r-#Z85Lx2@#ohj*_zvP%=;AQr$HcowW?@ z2M?$Yxkuf*HdHPze%^)Sg;}o@igN4Pt9LSq)**1MrbVT*(e`@{YV4O-3k=&o z*f$u?`_) za&$Vb-p7#@QB^?J4Occ;&pV7`u596-hg~UUx+UPsimwVmoSA;jBYwAZPLOZQG>FiA zfsZiC@16&Ea4l9KpcIz^BH~b8;4I9|S;{(w!oPUCpYCTnQ_J5YmfeBA-)|apgyW_& z_e$+#gM^g**qTvSv9wtKu^1N{SEfPnj}%F)h(C$(x-vNSR)M0(K##?(EFH_R+Naq$ z1D_mIAl!0B{3dqA=gd(L$k~%?zdCfjuAcH=KgaIrEhzV866093Ez>OQI?0%aWz63W zrg1iFRxa3?SuU293wu4WEUwMQ)#Pt%ou7CT6nCcc{V>X%jOs$1w__AhE6& zXrmovYib7D=B3(7S>&XUhnics)tS(D)N=R8KyL6H*WxB>gg;VARt{ZOQ4soQ~@5z+Gy$Xg=4;v$H3# z5A9Fx>3cjr?i!NqqvISI37_M~pYs`_W#vN^OjpJqEd>Y35_y7{l5$mrCq^-b-_qGe|GOr#Rx}F{ACZ^4?4PF~Sp<1ib2>*2S_0J~WV)e58`o z*&`snKN{GmoyXEb!Dsk!PquaWm-fmk3+m$?8an;Q*3nmc`eooVR(bH}?zJMd&O@zY ztdc0(tv6~~Q2!wP!l~+7`@w@9&p+4f(yUSxos@F<>^wwj(zGKgM^!8jQeeP|7BuOX$(=+!j*pV8cM=E$L9S=)D}B_`I(=I za#Rpn3BNx^C3E~sCCqatr;&v*`@4XFXhpP}nbc3Et+eCh{FBnhE0D_#7!-$>vaN0J zrvoH#+iG=1Y@k3I_ahtKbYTXIX>vk0#7AWk{HJ3NYQ30fl} z(?qJ5{%{(ZM%a%`>!3ckDAv>69m@tu*b%of z|N8+`8dEVBo)mi~pfFt^>8)Y95hQ=f?~x=IEPMG=3;u^DAEuU- zhjDC=lxvsmbQey9N7roQDLC^u6;@U!1v<-_P+8_(^i5|E6z=t(DfxwTDrwrkfVUp) z@H_eb$!*b14K(!OKlq{P_%#3g)Baof6 zl6G6q`reC+?*NYyJ{n!TM0poD)05JFLP$bammU4gf@mLs=6}i^1)Wa zldWn#|K(va(zp7dGj+Dipthy{$$KUM;PLiha3gc301Y_Ld@9*M8aOU>I{74>0ojp} z5MfLW&|cAqfdd5BqnlInM7@d*RA)1g=7lAk1NqXEHZJ8NDe$|?CSyt_WT75RVm6K_ zBA!#l7#kud*gyl4{sVwXZC0r0QFzB2K1_BAs7*wURlRFn67)m*v(#+dkN!?gaahe6(At3L zU)3s4s}0mEomTTARb#ZxS-W9I3Cegy3NzeI8KQu3IA#Lls1H{{p`Majq&bztT~r4k zoHa8sK$GKjk`B?sUZ4dA5*=g7yPs2bqkP32kY0SPr?A2JeJMF;@QL_Mn#%37sr~s? zRl@8C=%vyW0N;7vLj3CeY52CWH}s+%56F$5?H9WQReoLLC6K&O&nfA%1?=oJJ)tA1 zpiL*AI(hMwVuEUK0dcaTj_IAhkm{2AYWW zVyVwIm0Wy$>TjEIbw#HuNuFHcrA2JclSlx=frN8@uXX@Kg^q=*o+UfEi3davT?3X- zsQ#)`QX5%a-LL>KqSMJD4ej63UEuZUlC-n_OSOiV{-Hga-}1FRT_-_ZX-Ysw0Cwuw zGy?RQUa=L(TaW;h0U*&z%R~TLKDobt5y(6>A>jA_zT8QO**N(x)&6sfzmay?4IJPP zK!c=j008$qrP`q#Lw^?#prgOR_CJjKwCBI!>whrnfUrkPW)`)1Ki zyszP^lW6M5$VmJ|QB0%588?>a&nx2Ng1!N)(@tslzI$YJv~vx1SQAu2iw7+nr3A=P z4*6T>7WBH*_D;`+f$U^~LU8W+#ce^5FnMaT#k=C9;4^kI>y)6uah+p{(6J~Ik~mHO zV^>*suSZQF$bvDqxB^6{Hwi@FHP1V6^hE_0S%FbtF@y7Mvl=PpQ)Z00n?QjSRKfWN zN?}g}-zBUYaI)eqv@N-}0M>I1u(azh-dBJ~Aa15u?$d!`UQ9IIv7M&Mn^^Ka)Nt*D zI^CJFmzvRCgQXLKUQKLza`EAIPN`~QkaG(P3xR+rjsWs)YqyT4SWnIVCZy4X z`6p0mw4sIm9)f{I*gDLlR|+3Z#$X}-_V46eJ$NQ@AGev0n`{u0?w!&|>B6JdU}J#- zVVC_E|MHSiC!!ZForNE)4Jz66)%KD<+{-L2o${-WakkIj7>eCMia7M~Ha9oI2lmhK zg{<1k{B$?JI=(aKEj_-6q^+Xa4klKe?M)ZZyNMhlHWhHu4vy9}uCDtG2IY$|So0B@ zqEJIeZS`f)TAGYHD7l>sVC1y=#@4!E?bm(hWJAXV)fKrOUFI&4tTYifjLpjP{VE4qKwz%qr+dVH?OGB~^;f46e*xiEg4o86t89K(M40ei z%ByP$#F8;<)qJDh^t2@z`Xx#_4={MlMys=HmVfPV~whT%R z8X(yl?J0y4TZTXqden>%X*)U)bJN112^w(Ss{c`hG8j(i4Ae9#!{Nq>-s1nnPfwXJ z%IbfF5m!r)qifOY*P9P8aZxWCwqO_tVc>R<@rYuKw3xo)my6ZkH7gThPngVFLh9*V zz9ku$(nh6tzH?D2WT6-u!m)Sr4vdZ*0pGS0d6~Hm^nJ(A&Iay0jsjD~_TPKvf|t*M z&fiArH=9x77a7!9S1p>I2FCqQvaBVaRH{^{2*~D$h#-P~-&0bx@oTARYBk*{k;qh} z@UGtam^;m3TCkXY;>fb`FYkQSX2q?fkL@@GTQ(#%RVws~T5mkI4t?rxo=vJ~$?Q-w z`1Y0Y$(Rn`r1wKQ?O73*=h-bG4kZmOgn(IkTVX?sxaoP`LYMi^wClS;y;wwiPKA%! z=tP7Py0esk+KHhQEhH9ct`G1l^#}0(9}sodpl|%Om(2dm&`rL;9Vup=I-F@p+})TM z1HrGu`9UUMC{sjwZBC{4 z^9JarM^lxX9(;x^CdYf~kJ#8YYTn-QRKFflfd6XsiXBIWdvUSff9+ydRnXEc_Gm(a z(t+z86|@_XnQGfj%RDSLkZF!Ktyz<8?f4@yIP=Bc3-q|#c5o)+vBa?iD2>UIdEs+K zuy-;ThjZ0C(aj(MLBHc)XhU2KzyqbNlA+K*Xfa&tgAaCzyT9@h%-!hi&1mkh@Qh%M zb{_pZEYS&U$u_{(*)=#D*O7$R)ceBsgO)z9h3I09b!d%DN_x024W{rNa{-uAo z$Ongpe7War+M*^Un3wA!LVIZ&mNm>HvLi>vcodl1hpl!LUwn2HjuBJ0MGPAJrrAyT zG)w2u@93tncugIJY12Fxo{`WCVwi?pkjfUF?cgw))~C+U;_7s(E;gs<3gvqAXZKyf zOI~$8Z}c??8jZoR->1XYD=dHdJG!SF#KdTerDmn6OI0IOLu44%np#x9JN9sD4ypSb zYSRiR+H|Fg1OxuL5>xj6fmzCE%fJ}ofjZM$@0Ok(Oh|i(uK_&ReGRd~q=#pm>f{hN zQ*zi2zO4+K)Y{R$q|ftDqJXU$-iNg3NvZUF|*X#C9NanmAxKmObtCG`#m-Bhz* z?Fk}8-iO_%uykkcK3up4CO#iO{MkrOdyn?iMHOPx1?moDrN)nQO{VjkX@v__U#*en zPrAuv)}>HZKr5l-Z4$uA=z4nRJkK-FX(p4*=t{0r+Iz**Uq|c1mu4!j8Q^A9tmU`K z4sz!&XRM3xU;iN8?z=5Pm5!Ld*EAaN>yNO0e}lM?O?Zac6wD(~jNKwJb0T!L?pc<9 zZrg#Mhp>bBmawi(LX1oCVY@$p(Q`VXXYOig)>aHz`+#PNL}=z3Cd$;sPj41cyz37k7ZTe0rtufckKIOB z;;CM2t42?4eG*0V>V5g)9w~AuIsYB@QFx(xKZv9K2W02I51IfMv&eu2wOPkOX<_+hI- z5aWC(G^ueH$Jo1aK&vrYrYbk`1smaM@Hl^L>n-v}*PT>73tt6Sv*9vJLmdQxkE}sUy^D6$e-|bV-8^IkkYwT=MCr@Xc=YTA){8Cy^cyDbS4OLKZ zdY;A^s~1%1Un!`oN@!6bv+7(&*MY)bt4J}6_{1dUeoB(MgBGmpi^=_AZQDMP^i|e@MAtgP>j8~b zQgtt}MB5l)iQZlt8bbwm_O0NITkzC(-Su$-KqyKa(0qd(0kHBOqbt!0a5F#8%`7p7@qUCg*@13pg(q#IQ@lVXrdy zwy+jor?6^5!&2r`rMV)bJB~G0b2c(kTa-aQo7`T7M}K;j;%Bh z&SB9)JRa3HpY<8Wqle09st@y|2G2&daL4DGc!3oGWu}1E|f;$+N3_tvR7kkut(QhqvhsGey$dl;g1|Vly^A7q%z+9 zN9Y)@ukPW@VTmgX${NcFILyr>5MQrPqR z4Kw{R{g5W2QB?A;Xi;TPeU9sxMy)N@dzpxE@dGp-l?-M~$*n19$#+E`AW%A67#8Pg zy>9(Ar?ypV-6WpU(GM!ED7w}Vg{1c_X2G`#3dOWu#wo6*@jojSusO;=1 z&I;QmT(~tiws8a*qdMygYzIfdrdz=DzDDA|n!F{y3fb+T;+y&e>+8EzV)7$vwUkRo z>*1_s(Av?-J~@9Dt6dtgwOJ|#u{cK*CuGE_)2p!Ex?N7se%`@(%QLHCC^4}HTm)}8 zX;{x@YK9-fYZD#JP}#M{UX7gaYb8@$Pc0ZtoNnDN`j$M;dO0@MBYOF3at>l`Y4L?n za`Iqu@(zcG?3$2}zLdp>F9|~xk)lCjs&b{Xh*=dWksaibG4r&R!B-V);_;}2GO!5+ zn)Z>iN5#1F-ya||omwv@=eJyO@~)=Q7oSr{x{aucMBuuBo01 zpARg^=ugfgM&tE#k<^dIoeLYGJ8=33;YbZoyPI@tDi*`JTz03~|^{ z!v(a|FR(R1dPnV2aJf2mVqJ+bKBaV~ZI?=_=Aj~8VdkF(-+5LDK3EW^fx*^vV2J^} z9_oXo?M~SeIIxs+gHX-QnyM!=h5c@VwQCH#8Hh5NlD2f2&VopYc)HFi&<5T6KKke9 zp$JTD{B%tu8_Z!XzvI2f+LGb(Dpuw$+ljQ8xH3^0VQH_#yXqOmJJBhT@M$gDOFM9z zu;^Fc$3m2;IWQcwb>Y%(4~o58p4<>ct-B{>NJ*$#1n<9oQ7M@^-Yniv2RHLr28L8r3M!&E z23=c*U(4_b%4#$#giClTdGA|Kg0zM9IXzPK8_`B_z4ZMjG2D= z;_x=Dsq}Rz+7sP@>kBuRPQG)!bEjzw*wO&ULZPhbUTty@szcQt9k1DWc)vMVIlJ+C zRx?&_F0p7LR1L+GR0_H?*slGBXW4nU>s7wP+y1-IHZ90I*J9fY``)+5?B7>^;HTo5 zv+)uSz+!uvmlfXY!moUQ;Z{auZZh+}l6LF<9!O?;4^T-C$<{9qNZNpWuWNdak(JT! zg4{N8Drw{`Dbl^9pOC;VkjlUJj`@uz=KYyliTf2JNMmFUYL; zZ$9(Rx`BbY4&%{3JUQ8S7uOSj&kCyT7b2B3xWXjQ5|G1LGM$W&wCl^?V0#(N~Lmaf`oYm>4?U8IYXg=&2z(=Hw?uG95= z6NmZCo8@nA>SoXYlAGS<1inCo>Kr+ZNV0PjsK$22SS&$iz4E!5f8tnUbDN}*m<9}K zxJRug>?$e5UJLVav%}R?)r6#^d7Z;fOo%VU#|#Wk1S;N90c&U!Gy>O->!?qM{FK7X zi=wHdu{5)&G_=-h9N(NeklKKuYCu!@n)sMKFfb!)0F)Klcxn>t`gNpYp5t`eaGnMA zS+B50pq#Fc*4imh>UP>~zpqjsk!NTsKOO|N7-AeK)|=fFaC54BAY7 z|AuY@s#~BTS(p6VGz8E-su43V4io?i{?jjd)@uy|=aKgTOwx^#WUUJ?=|}~E7ad+G zx-x&C^vZ1s9-r}l%*`Z88&6M?*6s66QZWag^c-Nk`rD-*qd@JRS+8h7T*Kx#;YPkN@2zXiKJuU$Z;R$M6(x7p*c*1P07#J|55t9Zq{JW=fr#(F| z-2jSJ1I0*9mp2Y1kb2xK^~fU$*nlCuJ{5$Mn&h#**?#~&dp>=djqc*`hosbYYAL6W^bg8OSIdF) ze_hrs88i#fyHzJ988jqT?(+2r=!HGb`#YCr#1oZk80pYgmx1w&wE2`h)BlSO|4Tm-8qzSd>*^`K^W7o`gMA&6eUddisS8El?YVG!GXaOZ|*5 zPz1gQ-l9A+hak$#+jqY2XS|nLUZ6+@LUdV|k%kkhvw^IAk*}`4?|B2{rt+7+;!NN- zb8r|h)!Ul!>jTzp==iB?0f9K_EG$x8Fc3`(jp_BjcLlT)Zw!^C7I8MtRzo5`fRARrM~+Oodv~T`8_G2Ci^Wi=JO$~5F?`kX=W;r zFW+BYwzkkz!mvN3YrTuL#!vDZ=!fxNdT~M4YLcs`cjlFWv~>QShYy!Dt`;<+qo)*i{?%Lw$o}f+{uAD*{N}a{ujxL6JTMs+ghFB6xCz zq_CpDx`=-ZbZa*?`VjEzAoGrKB-sh_Qb1`GFk?^dFH?Z>9W!oghQyxO~26m1YwZFVkp0_mtX=!M_oGIM}-f2NAyp8rCC~d!#wrOeRiJ z;=7+)!M}EAG}fpkQnxjJumy?h>id1UEPEAH7TL~~0G4)DOAv>^FK>3*fyB7-e|`%1 z|76`iu%5vGX$W-f53g?ivDJHFwgxVYjJ$umlJY3kB4*_X zW0>Ds^DK-Mw!$f%`Ex3O=Axy^GjqSOg81pAM%4Ho59pT8^6uh3-qcm5QN`$}c}4yl zw$2KVxcyZQl5BR)F+(z+4w=8+eN4?Eb4esK!Aa zM!~1~!RkE+o`%=IGIzz$kp>UM+G}Z`>xqt2`zA{9-fL$Q?0GX-E&}0~T=TEuj5NQx zhkFHmgok2>f!lphG5QtLq5Uu4MA#Ke%kMg_B=h10cPE9G%DR{lcHb^qU?TcAuGgiF zY;hpfkhFtx2$tHW?6;|#?8Zt)e`@+hsNUDS)@6LuF1eJ$J8+e)TP+1~OH9sWIdG*j zwRQA4(o?pw(mJ)?_}6M>gX^w~*hAwlHv|tbYnpdAKE5F8>_}ORFChrIdENB|OO*oz zKAvT{!Ksfn=rw%70M{s8qT?Vjnb|&%)g$`ZfWJx!qqq1Dl%AYekmGV=FZNjq25Wxo z%}D5lwKlhaU8|f5=zTN{b~n73i3C40x{&Qbe;#B;HUt_y(&i!tQ|x5{NW?MDKGmyL zkGrPQ#blKqbpdYloq{!OFTp(ZdM;TEjo#7^UT4C*S`>>P_%bV2FHZgtlGiJ;RT>i0 zY8-5N%f-Z|M&igv?i#spw>#?P;$OPBV`1s2dM z2O|nE_!N2#J(AR@@V4t;ooc8+@t2r~JU$$&9g%0#Y-21=mMgw5+p{TstEO5hc;=z4 zEVnEEQB3nz(4&ug_xnBZqN}><;xi9vWriUl0u{lSjdqC0>*ZAW7AgQ$nDkJ5r z%5dT#wTO+WW(QbDzEHu;T*v+)_v*r6N|I;lHayt$oec+91NxEC&qwZVtB(Fo-?^|M zE9x>9Tk$nP_$(zFmZHdcxvbUen83X=*G!71Kegn2Z53A+(hPA{)p?xyqM_WKPDKax zLM8#Oc-V`5-uO&Cx#mFt zUDj*IM#pbk)sW9N-%PR9{shN7H4{RuKObv=_Mp#s>1M*!6#NJ$pR zq8f)5`K9Dl@)QFZ& zloq2c|k z#tepE5h*RiT->Oz#!g&24)@ciDifQ-=%GwkFg-X-pp~ne*!ZcNvSLu?=aT8t&1JEi z>d+{o8IZ`Yy&LY;)30V==mbG+JTEzOC!1|0#G{$Lpox)^o==E9-&MPd%Anik22R3S zn@jU$`g;nFE;zD$^9k>@%?nG*5Bh_My?Zg%l$gT{R1nV(&r%qusy5P|rd4jleiKu6dHU?SW%>7X1>LxaKE;8bg=Te{c$i1vi!VR*e&|0g}?qQrnUL&MNi}e9FFUh zYA1Ejcs7-KrW$+as1*O|`mBPG$*g$u;Yi`#!;h8tb>TsY8@8+WId*pR-%3BoD5G** zjfsU8q)7xD&m%;of=A-zbe6CB)cap*P!U62crIziJ-zoDP%=ZygUI)?(^+;b7vi%j z)4Mdf3X-$F_!v@F6k$pq%%ZYt)OD;O&5a4GvP~+O7*Bm{B>$$xF6$BE^;p5wJI~R{Ex)O1 z-*>=iZF=9+yo))E>2mnuQ-mFN4}sWEJ-}x)SY& z)w@;3BJq0V!8}<1@0VvMn_j+`A);i=k-uCG?ACrhhxg+C;x6;oCbWQN|(1Vdu=v@68>cE2nXGW2m@&)T<;qrg>`Am%$LVYd&Sm$?UCX zzupVf%QJpIqF*|;+kP}p&hVhx6Pf8aDmnFmTXek4UDILn(=+O%g|aQH*9B5aUV^r9_qHn#G5{IX;d&4)>+Q>GOiA6 z)-auvPtZhk3U5u}XZ4y}s?uD1JwMF(;c2julO@A<*6b8D2%+-_SiPW%JI04izut5< ziOJIn%fWW$3EI7yL>qVESz(W==RKbIcx{72X(_{<<|z}I9Pjm42CI%m7k^5{2&mfI zdxwQlKxb`b%h9+ev|jIpo~3wi;VmQ0lRb2{SnCXSnx<68DLK$325XLv+mo;LXAU5G zcf9O8_1-0J3seb-+IN?N(W7@e^S0L9h*A>4;O0Qusl(ddN3n?~`TL5LsQrOPFO*^o z42-ndrM~1X9>bPi1=V@uTJ|#VC0HbJPlEAcbPP)9rjw(s)uY&GzFDn4LvMF{-h}gDIGfdJH*$|batu`#FEq3`XRHoR7xy78LQ+HUu%pKBp6b(Jmr2ch z`|;Ik6S@p7T`$bIPJjP&^(~C+3yJBN4mF>Yg0$w=lM;oDKQ#?sitH(G4C>PGnwG@t z%LwmQH+lvnG~@QM^Glj zAmiC8GpdQUWpt$19}P>*Ua`HQv8%YzS+HoL+ibpBkm_(9caoHlqej8~tIzTw;SMn& zDz_?|IA89Tp>cBpk$5PR8?70oW%^EZ_ac?M_~1N)QL>I(;kBD7L{~9E^+xYtLUu;- z_2M~1)L1S|z)>Fiuz7dEx1?uaK7)zl(s)3s13If5iY{Vsb+qf^4HEf($~(`frj}@r z>%A9IL{VuHg@}p>2#5$szsi*kp(GHxUIZjTigXB|q9{d>4v``t0RkknfP|(}r9%i+ zh}4ik=n)7dFP3+`AKrTJt@S>>{pFlFYt5WJGiTP!Ip??k<5k4xpdC?d>(-rtqLha% zFs{~&Hmp>mdXU+aa@2g^ARAko$}`{jd|mbKp*Xhn!~g^3=GkiJJww!M$D}004P8>& zeav(9(>b3qkC~I^4+g``D&eGyB(^@pN zk?`W;{#rp!MkCO4$Z~s{h82^he8QG_kLxYN`kflR;BDtsnY~W8gMo{Cu9)Mt>u+21 z1q$kU&8aw1)cu_Cgly$}cwrDy)opAfy^^fZMFN`+*_n6TMKpVCJqj0KcjDbCn6eJe_gu)| zu{nbO-1^Fbc4)jFk$CBW$~jz-SdR6J><%4NYVip>u~`+FnE^M9vSst9)~jF~DG{k~ zFH~MAR;tj;Xu-@W-=BHL%OLceP9iTkxrmKaB#D2tMjw!J%xDSbeS3zb%=Mdg0sjA@J=F2K&5 zSg_=`GZ=lG2oZ$AKSupUdsi1BRW6`wTW>oCmnZh#Ag{_5(fpWaB;iUb!TPc|aEEzE zzxVS5O?=(_E0uR1b;z%@yhmSlTgdsN$;#5(`qr(uR8i(|7~W}^4m*2aTRd-W zNX~pEQevYu=onG46H^>%CZU*BH>#<}DmU#TZZDz88*WIAcwA}{m2g50v>-oQpizEn zd2A%u%l)ikw`nwqBrtPi?I{~nE+kPJ*aOQ_oySAR!K6XR`t-7I`AiW*4Yknx2%qIyIWmcO=E(bwp+sXW% z*$Z;+N}#)y9w5CIN<*$Jvyv;AU~m%H7r|yVkWCt+PF!i=E^OfrqAw)KSXNKV*qqGF zyYQS#;;n}j4i1Ivhh?F;YB68AcshaTcH%7uWGfH#!ia>KF%IUmzMk6gxDf+RrgGEg zhOdsRm7+VVmn<5bl_I5$9@wU!<)2M>ykvLlXYMOoEyU+;i7Vr%RravWnH+q9|BJVl z=#wQj>INy~zY*P4%Vl<_cte)W@zdy(-Rp>-&6d)(dLpr?W@!OYjo{Rf z12#a^tsAr#;&Qi!wY~AB)e{*d+E!r$eY0U%bw`7VD8>-%oZ>ulHnQGa%CyCOm zZpSZuY9+#2FG*UL=*rp#fk?j9R@l#W=93tVv^bd8Fr@GA(+6Q*dO%i;^OuL5u_tF| zO-nGncOXX5W#uAbRszmy9MX3Ado_qx-4E0_!5vm(aAwkBT;UZ-rS*WM{%AdTOFc@+ z{-~`ii)$iE$~Kgj7`ICB?zi&;*32b|g#yI@oV4jeA@#C+o4b-t+_iW!=d}<%I3?+V zZkLQmYP+cjuFYE{xOG)Axu60pcD|xl;fSzs#EOnNEX$2Mf>dwfSJ(nma?RKu_Q%0& zeDo!PNjXY_ff9pP?;)jH%%}G320I#trD`>boN`@VqqE+Xep!U77N1;V9@ z8=_+2ZE_QtaFt9a^f)3WqXF||am0D_+75fr#v14C{hi~u<8m`r4bSi`!EY2JO$Vy2 zkbIIVn7KWG_{ZG!Bm7?pj|DBgSFX|XmoJE!9YbnQ57J_hyo@(rT-23Pmac#l145jZ zb2Tz;&*s)7nm2wk!Iu*!WZ`*0>_Zf=d*cxr#9C{NGoPKOD#&lGL6?y?&u zX(_n$iL{SOC0+BJA6um=nqFJq^``5E4qV>a=uzt8$^~Y!>C2k$%oz;L=gI`Ej9=mq zVOBfr#4)A7BWizTd-Z#%+-BJOfov4BzsQ;T1S*av#fH=>)NGqQQ{T!CaC?ybv;&Uz zX_Oe4#Pgwr5W@6~6Sz7o_Upcdh0WAkeEo9o{_b?9-q_{~9!Qqaq2q;b4wHBU4ODkbawASUwOaYH-4@qK z%~STipk$LHVV9B5c4iqez7@)NV3vq1_Ji?LsSUq9(a&|5)m`fe5mVM8ccco_trjqhZz5DqmhlI< z79P(%Q^?ACL(tN5pI!>^wSF>))$8vbf1Yr|6J5V$2d`UQ@-AJ=-^=)vhRnrK6 z=|+&2xLUk=tjX6 zqGUV1TP}HCS9+M8%$(^nu(6(U2pNf4Tcr=h3Xbtu3*VY8Y~oENXE*s|l-@z^q@67! zoBLTQ3muKN7pE|!g&rE{#KPO7A?r~g_urwLzzJaE(oJ7N%WZD@!e|C;ygrTdf~C1H zHrJViC3eFo47m%oF%_IX_|A`KX?X+mv5N7}xuv0+u-c1(-C_<+i~URca^T{W(7uu2 zD=AC584u}uv7!;@LDmSfE?`_>kExWdJXA3u;GB?<=a=e0#COWbv1 ztIFkpQ5|XL&rVhMKW^+0-;?OWjmU|&>_}ad|I+R4T#JSr%4+b~#&!-CPD|{e(DN1~ zK7&lCzttgHcL@tez()QxCbFIv)1}-U94X7*H(1>jC7fJk?RUmzZ1UL4%o>Z(^YYFU zqYNs;(K;5WXoqNCm5jtFu^{hEbtHDfu!@>=XggfuO^XBUgqk_~@w5ag&mT@VB8oX7 zCgTBW0A+aAscGeW*XrxVmL<1atuxe(vhJEN#7G3-l?c|F?jdNdosX}OFCC43c5xjA zt?LabHKWxTdc$s{3RT-#ZEEH3m0UvG(Kfn{ctYm?^x|Xvd2ScGK7gv27Kl5)X4f&6 z1Kh8(zFGA-yW8U?$FbzWyj(q{I&43|`#QFE$_Byt^6noj{YwTwRnfR3#|N&rcL@-H zB940?FcM2!9z$!=^{k(wf*mS>r>yG?ltuRHp>UM`U_qJ-B;QP9(gvgIBow1Kxd`>{ z+=hA#F^&l|Ph=4iDI&L7>v3p|`HVp0tFDrC+PzqwJ`4`S==m*3Rn!XRn}baEblZqy zeLd_P#N%qfvn{~^vn>Py7q<7sT`SxqR1^|vF_f2_Hoa zxXQ;W?On%-o04g@x-CQ-;{Jw{wv|x|Yd{!xKEg0)lbIWt>QwkVL|AGjrauNGyIH~) z{ko|1j6MBJVO73;TEluON1ggwru|IAR5OFzwm)Px@(?7xi!DZbLbM)OtraGPFk&B; zm-AQ@R-VUCSl`Q_@{?nWnh!&uZxfIUSQv4tI~9iXZ|_nR%Y1={1)A3FN^>q3?@!Tj!cn@l#%14Op{}4&*a#ay+B~J2(Awl$^m%{>_z> zlG~(ZC98U0KD!qm&$}r3EWUfY+hN^R+r^+ZFY~In=i`SsA+clH*X+_CCV?U5L;0sV6q#%7Gt&iN+q+){8Hh#wu079&uZtr& zvjj3c*wVXsNGk1-1}{Ws6#uZ!XHmIm?~|CWr@NrvU5f%O@0Bmcf=UUf4O0`tQ4c{C zKQMcYL&wt0c1PIBY@gp<`yirx3)MTC^GOHeE6$gNp_S7LORkDs$7Tz%Bp*pdqj}>s zKCsD|Rs7Bb#WFTEq`bG;?IoC*Os2#buvdgIgNrRnbZU09dANni1dVKnEH$66%d)U5 z@Hng$4`Ix-(l}N;01YG*}ez0>t8eJK@ zlT&Y14hq~K%~H(VMXOH(@+}q>&*VUFcAZ&huXup0zY_zffWOgoDtl5+BcrFHfxeQ= zsT!3pPj{or6+|lq)X*c9IhN`xFGkfE34o1x?>RM&xEZHmZ~ym4Ku?i9pGv7|<)u>? z`g1XSnSs@yOKA@oTu24ISL5s4*QAJa8-#Qmde$xQ z+d=`H%qh8jK}%41Fo~(i(zN&t^4GDfX)%BKdeEdff|pejw%f$Q;+Dz43fIsxuI@Bg z#zV$_1Z#}2`F~U`LaIm1PHoAWGqaeO;lQ~q%QFzIBc&JvX~O!`7v~&yOD+aBm0E#c7YCQ)8~Re732=m~fTF`;n43Wo z)J;%uKP-7oi}mj6te(I8Jcc+-Bhue<59Qa}1?*QU`+=PmF;QG=nG$Uw(UP_)U=j^O3QlvjuPZFGR?>X z&VbL`N;t|&RB)tgc87IT&($Xb74}C38OyE6ckbmrH0^;Nx4Oc<4g?Q(yn0BX)Ukvc zt0cz5Px7=;yrrz&j&+9=94nD7_loD#=Ovi8Qsu39M~pdPi3Z;8^pjAlpW+#-MSM{3 zk!)g>{P0Uqz)XiCa(hw~ka^d%8Gs{BKNF&wRj>5io~IrhuL$nk44_VO&W>InZti7K zr$5$RWTtJPY^|VIp)UPReSqu6Wp*Q0c3j1?Ucn8+r~ntQ3&(T~%w6yJKNGad&f);~ zR&y08_3V@vFuHuHBWV_lQ zIuxF30ppVuclX9?TZ6icCDa9OM|cyrD6gf$%^-HWg3inyTbZTH!Q@pPUS$$$Qq++W z86Lmkjn2x)AEUSF*(4fuzq*%CJr+d2_4SH@;CexQ8;crZ904d5#lv>^>O-D#&r;Dr zud(#@CuqR6#YG$m(?pJ#iUDq3A#t~lEW!lSvPsvn?;)e@P z|JQIU_nrIe7*gz$f{_evfx5(xHQ%{Kx(5iu{#~fqF2tK>NblLxeDikaQ@!(Zv)O^( zI`5;Bgcqive`o+PdM2(lo^B~2!qz>kH%`0K4p9(`lA7dWEqIz+zD#XJ)}kNZ;twe# zCjk@PtObwxF)Za))B_Q`3aqcgJr_0ql%xYaYETG9eGvU+8hINDW1^=fS)k}X|1n6nWzyrfVtv>S8Xb(9wna1QQ8J^l+Sv<%N!m90*joXcD9UuDr<=Gy?ea`^D*$d2c`{wra_RdaY{bJ~Y!<}w& zoJxp4XE#MCelI|9GiJ7$QpZ z09?06A5u~r7o#!0L2!Qbz)fL6gm;k;C9#;}C4PQC*_9aXw(oiA5EC$Tf2-3FfP4t9 z{t(Ln+Sc5I*b2|ugo7fMWb~JTXYypQ>cu@KoVOJy`TQ-aZyXrht%rVQYvjVkb5o49+jHCoZ+wKiS>g5 z$Bml_lkd_M8r0XCnoarqKgQzVX8C{5WO>?dR_+>~C8%VLNWbi_bp%nVT%os3+}oiBG+9ny{3Is`pnV&T%6d}0CdrGjOLU2{C06M9u2*q$?hW}(K7^c zmZOUIVCQp(gXJ~S|3-LOT;3rN^kwz5HuJ=_`U|4&6{oDACPw^2QHY>CSiq{^`X@04 zH0uZCB{9aX54D`&3sSj{P8xPuJHiRUZM6ig-Z-6DwnfC1~j;0A_2PxiE zy2}dbPpq01mp^ApZ_kx@-?r|a;2vHT196K1Hm~7T%AL~ZT*Le1Vp{!_;>sqwmSa>_ zW2U{g8{1E-PrTeCCq4=NZ6He{NYeV94!h5ixslPM^8g}oBL1MRYLFGiU0s8yk^7WG zO`IIisN8O{WKtK@rH6DY|5Sw#A;Jc4W9vv`g-5-kPul_2UHO9Bn$&a4kH0&?Uo*}2 zUY*PT&?8wh3JX^OxtlxLJdWx-TMVr>m3%#9Vr2Aw+mWr^x-{L}VfFfVnZ*MK3OSB* z7`1+-s|p@+x6MGLeN%p9*`r%7o;JZn-@ky_GH-pbA~zvrF~#iKw+P-Uhm2x^mwa} z|9mlckBC8yPbKJ9GcANU`r1%9jAQa5*Wkxlt6pPIewqN4|_ z``$Vq9dY6Jd3=tnQBo#>#EGvle{^en>D-pbdfBaUZ?&Q0q@;cc=f==D+Ix;rH*+ z^Q=sfUk-Br$ouHFyTFwnr*}@u>#%mVS@$~oBmG`o=zr*$pKuYYykCInAOAPF?f-3& aOs;ST3SS;*x#L^w>)bZ{3v=tvlm7rt(c_2! literal 0 HcmV?d00001 diff --git a/images/springmessage/image-20200305085845017.png b/images/springmessage/image-20200305085845017.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0c83c389dbd8f99cdb0ab9e5e0ae5fa7ce6f01 GIT binary patch literal 13675 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 literal 0 HcmV?d00001 diff --git a/images/springmessage/image-20200305090846313.png b/images/springmessage/image-20200305090846313.png new file mode 100644 index 0000000000000000000000000000000000000000..e11a46d2c49f472668016467a2c6c5f9b97e6e6a GIT binary patch literal 9807 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 OMNw8&ruvOZ@P7b5^Pubi literal 0 HcmV?d00001