From 141b735cccf3ac386e26e0e861f2514e8da85686 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 11 Mar 2026 22:03:01 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=A4=ED=83=9C=EC=A1=B0=EC=82=AC=20?= =?UTF-8?q?=EC=A0=81=ED=95=A9=EC=97=AC=EB=B6=80=20log=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 1986631 -> 1986631 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/8.14/fileHashes/fileHashes.bin | Bin 143083 -> 143133 bytes .../.gradle/8.14/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.14/fileHashes/resourceHashesCache.bin | Bin 22849 -> 23019 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes gukyuin/stblt-check/.gradle/file-system.probe | Bin 8 -> 8 bytes .../kamcoback/config/RestTemplateConfig.class | Bin 918 -> 1175 bytes ...xternalHttpClient$ExternalCallResult.class | Bin 2634 -> 2634 bytes .../resttemplate/ExternalHttpClient.class | Bin 6404 -> 7439 bytes .../service/GukYuinApiStbltJobService.class | Bin 10195 -> 14708 bytes .../stblt-check/build/libs/stblt-check.jar | Bin 99470749 -> 99473411 bytes .../compileJava/previous-compilation-data.bin | Bin 188735 -> 188737 bytes .../kamcoback/config/RestTemplateConfig.java | 7 +- .../resttemplate/ExternalHttpClient.java | 37 +- .../service/GukYuinApiStbltJobService.java | 320 +++++++++++++----- .../src/main/resources/application-local.yml | 4 +- 17 files changed, 272 insertions(+), 96 deletions(-) diff --git a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin index b3cfda8713ba6bd952c3e4fe6574a1fbf88b5cbc..b371af47c787004af3eccd3dc157b26c42f67b0d 100644 GIT binary patch delta 5261 zcmd6rXH-~;?O zO!o3K*~?2OjTs*9^Ub^gOTN`C4VxQ2H#BO%k_Agbe(bMV;1eQz<~)4Ly?&ui<7<6K z?@Ns+>HQIroQ43fRPWtA#>!S$zWI!o-tTFtS=QW)%FJFmkb79zLw1?M9gS`}(JY}3j@@qAO zd}m{?pM1~B+(AEiCOtn}Zyv!}IN1O75b1q4aO1hL&1;{tDx6q_i(a`(Ba!r5Dv|J8 zS&QHL*V)1{>o^mt&&exs88T5Zt2xv}e=eT;j+kU)uMS#3$as6Dy+p7{I=n1$?Y&#R z-we8Ucwf}XKmC)&x{5Yir9`-t=rQ$r)z)8UKFHW@HYcDpS4@Yr6wY0-9V_K?lGw#d zLY90N$^qm=n%KhA6iz{Qh^GFJ6z*Zcu)pbL`;ayI>E$)gGm4+TO$z$H@D(q7i1bcF zj2^3ntfe=CdYx-M)b_aig;%=!9*_qaofDp#nxC4wt$3dEkf|wlnI2NOI@741?nJPa zzR%Z2{rW20o=Lxqf4HG}<-;d_Gi+;za*v^6wNXFFwsGnMlQ$Zf>Z>*y9gr&OckImf zFYR%?pw)HlDz|LlE`s+>jxDZUc2-cjfREGvE5+z@P8eA>=V`frS=VyMDdPr~z4m}# zbw(Mcv7zB%bHAI%r9nlIk#e=D~KNwGs8?m<|*{(*}$XG@7LB8*Ul0_D))>h8m z({Y#~Qwo6-C5ab{2XiyGFTLKzP(!P!$Jy|Z6`sc96RIVP(!~`wBe>Ud{QE5gUY3tK zP;Y8~IW{v?s?Q9Sy(;;;iQV!=)8<>&?fcV5&eSbmx$5zm?!t!%0#i&!#y&_k)jvq4 zgFW<Hgs57b*|j~2N2&)!bC!W&GOyAl z%{0cjUOkFWcNI=K{A-;u*SKzT+28) zUG_K?>P%ew$J;)xEk#SNFvJd5z2)+k7kFq_2 z?@2D8bcy79lN%@}Me<(c9!hN_KY`Ss417p6O%Ct6eP;O*^pHBNNl=3;&r`30qF3GZ+7;US-gR@f5W+3UljeHWHb9K_b` zn7Z`|y<^@?76$zE+E1NvMW{H;3$is`_Z^fxjbgr!DJ)B9NvqD9*ra$E}t3h z;J=))!^nQI;&uX8pmc*65gtN#z=qqQJ09r@$3=D&nZb-5iG~V=5?+e%7{Yo}w&JfW zb^^~R#?B(k3gC8uHqX%+78WT@AzXAWqLb~*6^o819AJ=K79m`U;z!f-=oi~DpEFo{ z!q^qezkq)53Vsy5f__{#)~%f7u5g{%^fzQV7OejjMUHM@70uucgw@vE4yZb(aD^!% zypC{(x%i~dtgYe1d4&KeqH_(MqYCCk-cY&0H4)xM_}-GuPtHE28Z1{bcoiWV+FY@Q z8YYOa3gHWDZo3GrpysB^5`JM0xhXo3vyvZ5Z(&gBBrZ*NRjY(9G4Xd~cPzLq5O_tQ z0-se3-bZ-TnoX;At+*^^kj&KdJ=3*OrL(RT|4?XIg8@1v>#g@4l^cubK5kNKbbZ^L z_(rcO8~ZEL3>b0Hg7s2;O`(QHR+l^!A&}L4Z~6%RI>L^*kS1#f_-Zx#-3EmFO~o;* zQQ1OsleIbMM5hj&V>6&h`htXhu3!VM;C*@3g8lO<}lTZ6ooI_jDe%%S5c zRgj$`28&ucjO<4lSWA8Bb_~8MXNx{0$r}9E@UA8Yko`o#KS62(F>81yT7>9#Gj_67 z)v|N3^ts9eJfE?$#aOGRQ#Oc{pwvF2pOHM2$Dh#wG#^v9TXKcq9c|VNKB;3_1?Ug2 zqds&u`X$}D64nDNNUCF}%O12()KNcDi1Lp*)>l17#pNrrc_v1BvKXoVK1ql$!$zLDu+NBu>u!=3k%44$!4Gd zd8awsUI9%?SGdn0smDA+I(sG6q4aKLg&&}l%ZMMjkFvCt4j>Ov*0<6jq!DGGHtI#1 zQ3kcK_4iVgnk{m6Kqu#!DIses8|qes*QIQ$C$+OLn&)loXWKD}dqw;Fue?e~Z|F?q z`;y~0hMq~hJ2{DRS`z;asYH1qi62OApnR9akD=|N)Lf!m7N~t~y2FBGw%cE$@7+#) z$QzX9$?R*T17%|}dx^H8bWY)ikasA9Q+R)B5T&MO5j$gocblo}Xf(&3eF)RNl%I*?|F!X@i6w z5S7ZhnkJTqP`0M>)5tmO>cq{w4?QnRO`a{AlZbh|EyT<*A&|eB zRXL6E$2POK`z;Krl(91+C*H^fvX7V%a0PbA-bUvjWh;p}DyUI9(Jv(*{l{B_-7FZw zK8+mQ;~U-@YQpdMt`FEVYTbN>oX1=|(6MBurstC!JJ*K`2}1=5-wzJ8{(S%U>n`4@ zU30qu_5*uwHR7)oS&Hu{KYJC}q_KY1iV*sw@%`xw^v^kSdQi_52EaDv(>jFd_G~uG z<_c=KBf@%wl`1wvRZdRMV4Kb=HDe{ObT%vv=&!e7e#=mMXZS_*o6yfmXCJ>UD6gjT z%ZL_Fg)iRHQDhBDd6slKS&wpImUIeTCrVAcIadbqaN$#kdB}?@5lUJ-x zKzPWE4e9u-w>ThuEus&A|13?2I|a?kF6zaP8u=g1KQ&;ENQLm%E&$nwJ@ zmOxu3Zy=kR#2G5HAiiWD%7i%1hipUnMHbtUIVe|Wu^pL#vNVhB$n7XwvUq<|^k;0F z%#Rd^GPTOgkCgoxn$5Q1Zj?{5*-4QuO1+T7r*g`P(&BWnYZk0ovL>)5XHCJH6>HY4*|28Ino?h$Yxn&w|G&9^ z@DB4ToSf)yEU%aBn-TrH{Gm+v5J@V;d#F#rd5*P0e>cSX{+IgLY*moWf8(9hCjEwU zW~HhqkD_x$cIQ*#?nzy59ZjbXjc?@WJlVeY9l;&s{DQhh&m JZ$V_e{|Ab`up delta 5014 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 QV7!E{83}?-E;r)pQbmnyPrMhp6@y5-uLdi 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 ZOeKX3eO1pVb6?sd^jPx#>ZEdz3IGyFRapQ4 delta 54 zcmV-60LlOBvjM@f0kAX}0f3V=81S<_86W|(bsAv!p))42 z-2c#uHw(f>6|&%>L@UNRODs#JSYeeB%7RZNM;>;)fbm3PK&HS%4D12Z5AviD*%hS$ vWEhn(Qev7!pWjEmq2|Pf% delta 221 zcmYL?Jqp4=5QV?p5M$QF#6;u29w3Ef5Nte&NAV02(8fauf`x@(YvGZ^*;TaIx9<(_ zn>mF0z&u{p8?a`!GmF&FBn&VSEh0r#-*r`Q)JnC_M>W@ZjFvK@3ZI5(Qa`<7o65{4 z2la!O=_C_Cef$ztpafg~q~`sDlUnqXESkc{R?29ob%7 delta 71 zcmX>la!O=_C_7{MWHI)IK$4R~ee!*FO)x7ENJeuc1Ihgyeqd64vMHxJn58@~ diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.class index 7214690076011182cf68628ad780b651a30c8b66..e1dc6118e9c5ccd92b989552f7896afa702c9d5f 100644 GIT binary patch literal 7439 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 delta 2542 zcmZ`*YgAlU75>h=?wvb_0ftwGggge4zzmc;%)@DlObAIRA&>%TNJ`^0Aq0Xz!jRTh z9Ut*+ZSiPK;-f|z@DY`SW`JU1wHn&mhp|5DBN4T=KH4AtbGbCj@7w{5uH~9_?m2g# zefIv&-rwGL9*LeTI1EvF}gcp`t;)uAUK(UG$ zK{exXsTrrovfzVXA`@BaAxHhwC*Ipx*_=4m)!XT%)m(`@lM zoTX)T7FJ<{KDkk#th8>g65b-!Z5Ak*jlwp@XNyEF zwyH{FgU7&jf%R&abBVfQ6fip5aHm8)cBo9V+P@Qx2AU*xX*B7p=r}%T=9=5kEYX5i zb<$j2XrT&sYdm{we7p7gUj4pL#k{Nh?YP&#eu=juE)XJ+kUHz#WLDvT#6fhZ*SvS| zrBmWCx>VRI_8mcwfp=-cd5jE{ADr(2aBtDK- zZYBEC1hSBghb2CVN0g8eOY><+;!{vVL*?Q#s!}du5L<2zthm5jBGDK=v@|!%rY5QXVt{1t>-f8Z z?;>f^Y#yG%_t;I_Na^q6X*!?a>Ianh=wz?0Xwp>^euy~rPGKvqVgdDDm_6a6v)r^E z-32j?XJBe>5YTgUsaHRuJz=k&=Q)SHdNE0NPJ8(he#|gw#cTKpTfHUn@iJu|EaWYI zil4#2&jD=boJRi(x=2HQg;3H!wJZ(l6@pKL`sFN?YxouIrmg*&R(?Zk$qJY^5i?L_ zz-J(|%Ru%&kbhHm)sTU90|oUI1^$lQLk81#ooDjgybJI=$BP^>dFrR@D|6N88SdBq=)$tKuT=N#Q=0&!MZx*3%@q1!Bg!IIk#`Y~20qQwKS>N{Ch;XFMi6Mw(yx}M@byW2(}@dq1oBDv;aOaT zM5J%zLO-!2xO0rHbpWLpwDB#aULpJ}kU!W+lV$Tz%gCmuX;25!gfoA$fnom~R!ua) zj_@kaYp4x8t)XUy$1xg?TtZH`{1Q%HpvYkdNcV8CI(1OAQ>xB;%C!5s-p@?x?-P$` zUNcX5OyMbxTfYJ(Uc(+*({7j9R;e0rOyI&89@P%TEe>;d^FLDN!0Y%EXAR@eod3e% R;(8VS%9UlW9C!mF_-}#o@FoBN diff --git a/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.class b/gukyuin/stblt-check/build/classes/java/main/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.class index 92a425eeafcb209b47cabac755b730d549a47967..38d7d5ae56da05862942331fccfa57860a1307c5 100644 GIT binary patch literal 14708 zcmcIr3t$x0)jnr-lih3v2nnwR(NR%J2!xkN6A?oQ5+DJSfCWUlNhV=ovzzV%4A%Mz z76la*6crQ{4OXn-VN56@)>f^*eQ0g1)xK-B*-dS&wzgIIzk6qPGn;HM+E!%e&V8JF z?>Xn5^PO{tmp(muoQR5*kuFlm<{-ODX_U@1vo_FJu+Gz18z`u)GYU1H+I0mXJ-FUm zs~21nS+_jm^%pmJtHL$D@Pa^1mC?d&;A~#xGjy zS??(bdmHtFMS)t6Z>}e-7v(N7!hlP6DHQn7U6(j{|?t4k;1r&xr&uT0|haS}Gs~hw{qt?A?D|Q&|*dDuko7UuyXkBejU@9$k_onDA zZDR8`cQ|Ph(@HVh)c9=4)P1@q=(mvCy;JivHTjxXhr*t4B&5yKz~j{=i_4cRDy=S^ zt3~&MuSpY3W~$5+ywf*}kRV%N$dX?7q_-U~%yJGj> zF622~2=jcV^HRvjP<<)2#Wid7+At2DlP*XxMN=?P@Ac`kuDUv3n^Rm}GJmyDFT4un z{gO(BRK(;kdog8OC>sZ;NUUX+Sj$CB3kS3o3k`F1eQU&eFUCn&Sryisv?&v(7#!(( z^6}WNJ+a*#kV;$hwtIxQwAei@(TBE1w}Hu0!8EWp*0x`RbfSkL9m#K#b55GWG`WXr zyfwP@+Sm=(^(G)?hSTRH*q4i-SI{hTjwGf1Y_$>$oky2AXue8iv;b@9$MiNt)-}WA z7Sx3Uar0Xxb(3jOl5R3hUG#Zrz^=`sMJkmG8<^Ihhs)}mw3z8K>(>6`^NB+x&gVti zWG7w9RV` z4;9p+dk^0YpJyQf23|&AcF=N_R?teO+5Jdhp!AruQ~A+F-cXonT#8d=^=_gUj^Qf0 z!a=K5`U-iHyrV(H9`bI~r6VnKQZ3Vz_!*dLoGkN{q&^3mcfumLNT+%SHK??Pyl~S! zp1aH+*5SNhDAs#?5q)tz6I`OzBbq&=u~;XJg^%e=DYn(u5cI9dT_*PGS1CYEn9>_6 zZEOkyasVT&a1vHg5Z~G~b8Clo!VYWkt=)Yi4DKXtE&OWi!A-CnP6Cr_r134Sm}`s) z2f`j-wI_%(QWA*x!_q*8BDJ-8DAZF?@A3M2-gL2!o>xht)aPjm>2(<17;@2i+Tfro z1p~2O1Hecly(l1%NY3~LR-TDU$*`*g!@kCJ-4|q7Ulx9`8ex;ap3t1Bahq)N)ik>G zfnf9i%(KDsxVu_K*Q#_KT@U2t4eLQqH~=|~h$AnF(aOwvY`KLtIp{`}z99sh-GlSu zT_E)}o=}B;WmxpRNu`@<3owfx6}|DC>0lgm3)98@99FBzEm`Aln5&23GRr-o@Z4}< z+#&%P7V6C?yJ#!jrqVWHJ=38XOT93kcQECzEUPXpw|H)N?*ie#BVHl--pm+B+l54T zFs=F@N>oVeZlL1gkk?aCr3WHD7u`emI_N%?cG2!QsFeVHMZm9@)iEgn9NlwMEXveN zOJ`WZ2WXFj_Nw$CJp|>IVoHYlIFtUs2A~d;qII~HVo!V^h(4^+Bh<>2(dhL@LUTRM z!2hEXMB#shdyKL{ZWz3IH=MgIt^-s8U0PTgDX}rAnvFZ~d+XNd?qks>I=Wlh zy4pYp*mKvh=%Yt^6X|4HVGx-XKjjwWwPj!T4ZGkkV%Hx4#=5S1$D^^k4@BFq)ryyt zY27l?FJiiD5n{$e%YJc9im=oe12uStiI=S?&^u7KuR=;$Zh6s0D>8qI=t_>TGvpI!MSnQ`Mvc5IB{b7w$n;Ua(SQ~8W1;lD` zIZRz8`3sN|@rAVoRf{VCObwj=eU)CK|6@`E66}{Fq!F4uQLdmKc1#am+2|`+i_kt4 z0JKDORfBC77{<})4i)|Z{m?-_Qt8L^3eyB(EC)CiMtVaKc72)f{>34KCA|!ZX^2y3 zyMulbHy_d&mR?z_H-)_czmtB-A=p5%DIy<)B}x^eg&x|4442(t;s@N2rw20Y8#ln*?Z1`YqGk9%;%5 z&w64c7D=2KW7|~#Z4!Fu798QE-!q+W_?*j%D=Q4dB1oCM5@%cBVjS>I(Jh;!TlP&d z=?b2`t}>iLcl+smbdzag4!3xOU0+kjQ&2_sg=^U)x+Fs>MuyQ|SXSlM6G+SYx?gRR3M2 ze~4=I6i*bDs4(v+b&C9r>kvu?9dSnMhOByz`hNC4@4h0 zAfiL*e)b-T-G3lC5i-ficBYC`QA#EhL$qmiLV|Gg&V9m1?%WT}7v9au$aU8DB%Jy# ztb50i=$6jz9Xq2pZx_o;MOCz3zf(BS+gh~crvEf&SgwsX7Ln^@uyu;jeD{rJbA>h@ z{?Y8A37?C+Quo$v(JlLtxfACTAq~4!&SVt;A`}kl9%MqtBv}!owgA=@jYZi+JXqx+ zoCUR#IV|{!r2h30f2}a11@p{8k&ClA$HBu?9?sCwF+IrIq+Js5`2c+bK|n57Log6& zLV|J*VwECO3nfzTOW3sPvb8sK6c?=_$I zrdx6F>Bx`tP=-&-O?v@*j%L}JQ$k9BUE91v; zTG$iG^r{z(&cFCK^-Bnb5)_Ctt`^6}K?c4d2u&FD%W06@?lWwYR&06@q5RO&64d zu7Kd_S_dP|Xap~Eh1k%zQlTwQMy7DE;SE+JkP~1llV|f>l}kmqDFQ%*g-*T%s8M== zO6mOL{mN8cAo@AcPXZ$cFZ#SOXi2~?V^9luI1jE+c`+|Rt}DrT7)QbMMab!;P}$E1 zNmI-&y+$R|{J2ccPbrhQ2xMY5;XMoyER_x~E(j-AGhJZf4>S4FPxNdMvjQQwR$his znlEDtq}r}D2-Y;X1*V&p8Q~cYEqb^m4!~lqw|C(!8Os3s z#@Q}7rwdSWQ8uOVBw?)9sO;sn&{vPYx!e=3U4!eYl;_%FFIG6&2M|%=WCYJ{nH{&D zL?mh@bjrqEqnzWbDhC<9B|}76^SnV}%967{izV{+_~5G|yxzeZRKAkofGk;{co#4x z5G?hDkkw2|S(t)N;U%)k!2lRYrG4$QA%FnwT5R9#@%tOg#>5d9W+w?X#11_cJ+wL2 z+JTFyJFNFS(!Xo7F497}aISitlaWQs?Ipr^qXFElf^+hu>3AkDr z@{3b!U{=0f@7 zg|~{pOxV&M0CDQWXmth&LyX9D6yK`yZM+R4*S{L^_@F{bSCes(uW<1le5ZrAtGt8n zVmkX&7oFv}YLr=Pfz^%cS7cqRW~9XD35AMsKl9QSP^uC+V&s*|{Oi3TaTQ+d_alQW z;1|}Ky~r16tO=|uxJ37hz8?gUh!^L+QVzaMSNj@E+j=xCHa#9tdBu_xJ6?Ukv`fo5*iH? z6cR&`0%0ocZ@vM=ew4rO{lr4L}8cqE4`G z&KF~yCEtw+?LK)0m1S9p%w|B@V8Zn)!L)dKF~Q_sDOz;FU5mNEG!#XqIji>t3$j<% z>lNW6;+HGnSvM(AsZh{G;EbL;+y88yYRf!= z^%wr6G)dlOgX}H(7n*6wmB!!YjKmbROsum^{2?HS+ zoEBV50T%KK91rP}g)K9^J`lNO{C^%6emXF^?9RUi_q)#u^c6eP*a^jP2T&?X6qFpW>?FGb#44}@VLaQ`JgXalRV z<^%%aP&nvmGW0r>#mz&~s5^^)$F%&v#2-V@@+6rGH6)$?fRFF^ZIyq(Kg{BHaBFBq z*9m*okCtWeHjwCYag<{Y?pFEF0u32=@X|jR5D16U;ScyLko?W!zw~^D7k43XO z+ey4B_;B#2;!ROpicPUQlr&XIR~+#RKgoBme|=ybK0TB+0HXGoxC#CiW~}G!W$WoT z2N{|%AD~a>((&AhXSVo$NIr2fDWAAg z!&4F8z@g7QC}-k%FaF*a;$8TTm3cRN@OwX+rlTX{nV!e(#0SMdegMDFSNx8{r04J+ zlvJY^@8t*a2Hs%-ilC6O1mwpO*-vzkqqu_xwNs8Q%h^sN3+=WUX|@^ZwiyoF4Cf&l zn|)>{ovq-ud2DuWqBJ2g2kg-F4vKWrMkgHCWt= z8$i}JL6i``o}jITYKx08{DMJlwViG)93lqaj#*rSwpf;XNGIKyPT6;L(9RCJ-_=h0 zviEn;H`}SLFiZ44;|Th=uJ(`CLLdS3$3dqBKR6&L{lL5Q8p=4=NlbCohr=7}d$M7;=p7-i>`4M3IOq z9PJ)$?!Q`;#Qu49;TSo-*gd9`OEA58-g0=JsF`opNG2FPPS7Z``ZvhqTuMhuej=cNv6rToII7KhRE%l-6(f-*jnYyJ2Y5X>IPk!z*N zg{KX)v-`AX4kF9;7Qe^u)2qBfsjwH(tIDOy2Kn4*pDCWyNFUhmfcYD1ZxB!W9ro?w zi3Qn6i8P8P;amIyI-RD_c$$ho)96B2-Fb9AEujnOa+(RM zMbu2Q=mxrow$R0NE1q{!G3}-~U``1>3M!?8G?&`x5_%Dz;l4o&>0MexA8;mp!h><0 zIfNa!P*Zs*O4&RT_i?9DIqnLUa4uDHK2`BTs^$uOXj(P!`@wm3%qOT z3f@d#;k&2?ZlabSraC@M4g4Go-izet*D1hn;S0t0C<5+;_yY>VIb5lXrH#sX`noci zu2H6;Jd>_dX3_P^Lb^ezpcds)`i4?Zo0Tx#q->y@m5p?ZvWae2w&A&h?o@WtcI7DT zP@bi`l$YsVrd*k{qF z_KWGHeE}=>#cZ=zbDDiM-s{+DZ{SRO6A!jWc!+%?XW6geq4w)J+kP|ZZ{r;M9eD0W z`-5n2Mf(A?KY{kAP=5^V&+steYdM`pgU2dA#QSIjxN|NfQbeP{tBL#ww~`yXn1ej! zej3A@l{S79ty%n{(!}57$7m?Ou6XzWKTbLPmU20N3w6VkvC0^Jg4;lEC-32dD2)Vv zj`JZ%dK5VGARj@U8~Zy?&YQ(mwxRqa#tz~YHW$D_5e?ymHa9;7*Q8Rr?I3sZQOe+a zTM>U7V_gCRnD{`Hj`7pL33lx4IH)L;ZT}WO11feJZhwqVU_=^?vhU|-QA(#V_J{d9 zC^_hK@aH*{ocvv!CXH<7Zofxk%oRV6Q)SHm0_J}ay6LS#c739(*c#lFmmo{v%S>I{5qfEZ|!j^D#UaN$r=(CZXEp zV4@v$!}6Zu%kw5YiGR?M|0EsFoA@NX*aO^v3(?0dL0g{DKQ0s+Cb6PuA0|Fy13gg^ zc+n;&9b`j?EHq`IGRq1xvs@znGccnv8&Yy$=m!&|!+<*|M+uJN1g)x&_P!=Bf1&{b zGJxuUs)R$}x-^>DX}G<5;m{fsnqePqzlWUJ$6F~qhu0OR$>EJ|_)MTa(RNmRNWk=g zo!o>lzMaD-DB4PA#G5y!Xf8~bD!jMQ_h=J+hi;?iXgfaoyBF^d(hH#W5*>j!o`ps~M?b=!*YM}3 z^g2p!;rDI&1^tCym%^QI$UvScECk-*Ay@>&Jov~-*b4=#`VIdGXVixEwDFJm6{tfM z?d4a|nuhr*`6mp%%X231z0v%3#)2z)n z7H9Ju^!u2m;&-Kkq94;)_=Ped4mJaj^RZB&k(m&G9$;5H-*N!2MigQw^K){)Mg)?{ zuX8IANFcE86~nl)kM~3284Cqhf&yao0aNJcO92+@7l}CPOt}e!L)l6P-+q|JiWA8) zlrlCk5^D3N+}K+(CPOX%5?y|Ux=L~?NPqLM`8WJqv-ErZqb$A4f8zJdy1(-KX6Xa| z&}{t&|H~}>J5l-+B`4@kg<;*QWGI=GL2u%z;u*zr5X|Om9;*ya&)|j15M?N3DA~#| IWdynZ9~U!85C8xG literal 10195 zcmb_i3t&`Ldj9^r?qs-GiDMZtoL_+Z_#H6q5ub$9LBYP;QTyW8h>+ikn;_Cbd3Zl9K_^gH+7N$w;W1QccN zz31_t^Z)1jpNH>%`p$O%ERsC|6bOprR@8`>q6ozrN_1!l2(FG=oso@3XVi*B+uWB{ zBf2q?GLxHPQ8ThEy|E=7ODyV&HQB9k`$ns^$?XwnT}i7w7B>Z<`VGb=BN8_f9g!wG z8B26j2NA>=4Z4oAFji1Ld;puwJJLoxRo9WQl4gyOBAs)ljwDpMCdeI^>o^-B!3FKH zM4Pv#+IXxZ)*3gLTFIt#a+BFDIL{+s$2!eOy<&HXVVl*J&5G;sI?llaL1EnL5KOAK zk{uDF%ZRQwBW&s5uGMq?22SkgFq72*oF}MX+hm(v;W;zs+!j9i);BYI_hzU?TZYpv@w-h5#Ex?V@}e@3K;MN7771q8vWNz6*LE3Gy)y^EF(d<4Rm5 zxGs+%PL-Y@d@@ki$5OUn$|z#+B$u{h@rW8lz+NM$$pUunX#)0W&+C~TyB)ZUK{Xa= zSg7M#TqhXoDDU7pgk>sr7uB_JYGqvzi?CQjjgBR#6`Vb!=XD9&q#DsqY%=0$b9uX9 z!qhtdaeE`G)pE;p+<-a`j-_flyKL$*sjms(Cc*M7NAu2%qs(*LGtVB$Y}*@7nsz#w z2%tf5rAu_K((7EsjZ>82ffx6N+pXllA?o^LFCTmMkz>1dyBb`LJ zk;MsF7&}6$^V-Q+6IN+ht)p4-78;Ucb_f|>Z=@Q{J8d=g79A~EL-{7yFkCr2sB5@Y zaD5)k`4zZkeWGKDX;VEKjFi2^wx-l8OL3Fg&G!JlEC?=2#f(UkX{F;q+zvxStBxqB zmae&WtmqmmVJb~6uy}x%<%gkfFg2td9U9i_h+%_ZoWpmnP3HL~tj&T-zr}Xfs`fCF zJHa6u*U^cDptLiVNT-$<-6>`BZybF>09`z!ZvJU#Xln~1iIfIgM;e<1mkjNR=iF)7 z5#=dX(QnY5@RLW#WvuoU&MTL^`ZHM1N5$FqojSU4m!QNQHAKzfG4E8rvUq+qfGvV+ zv*4wUD|kM*H}hgo=7B?WI`<#j^;+h+Lj%2A!)&833J*N6KXY(z_}HFZ%5y1i5Wu~H zjw}so74@F(?AY$UOz+-sD_yaYg>qft%nLg*`?iIT9{zUb`JNePw%As|B6qQQ!@OwT ztuIkl4h`|+0%-~22|TIcDIHJa ztNFcdUOIv@N~Tc4JR| zw|A=as9ijTm1Zg(r>P6&7*Nlf{f1!j+GVS6YFS;^cw5+1ZhD} z?_)gTAY(8g2Q7d87e3$`zP0;KjbN;C!(_5by%>S<_JTS8;q_ocpo3=_z=HG zFKj04WOtKEO+PzFMr`8#zK|^1j?x$x z=t2A${#?Uf==e+gBpW+BTXv;N5R6SSOO7SYMk~>nj>m^ZV4m|Kd1P3ENcpV>n0a2GwOn(rk-GRf$9yiH~)Bf={_;BhlSp*y`jaje2rJ z)0m<$(t$LFP>hdAL<)5&l46RAr6DJX&YnjuW_%=ks_K~<*C44qiKa_HN*OGuNN8y+ zshG*lww60EG2+!h86&zTXX!Flsgp0;$`0YK2+4TL450)c1>|hfa^l03smv~6rG)5& z$TE%;a{C%r*Vk)u&go`f)D0*5a;gz-yhCRz=jw8va<(c8s!K$>YnY)NkcqmSuUf}? ztt(RrH9sihMCR zhLxPMc4kdbE|;mARO&KKrZYM_SploTNElB3uQ+r|YJ&NG<*bPtsT57h$*8D896jaA zG-I|-vo5hImQpppMTvyP$`tJbjbx}kZgsX=8zaligv!XxHcqMVrZkT-VZO6us!K_# zJ!y2Bo2}%=NULciQjvB;`QPq{F}Om+(O;4*b_y9JJ>_n9?kukYnwrH)u}$VZJh)iO zsXMO7)<%nJtTvO8e0?loHl{mU&EzVB45(eJ`ed__jHz$0vB+K@BS%&F4D~3vLT*`> z+tiZj#401Tk=SyhRpvre>XaJDKweOrkNPRa?q1-@g@Qww6p`bu#a!=mQCFG9;Km(C zU*@w9Y+$cYdgu56KIkjhSJ{%=bM>lfg9$?EGOnbf6 zw!%%u54y4JZ^Nhwi#1SR!*HVPtf9bYGlRr)igw(TkwNO z$qfT2H;u`XItF5f1-}-8m?1-Pd(3WOZ7GoTKZ2XTm}ARL5*Z!RqH!+>3pQElWYk>h+(BLBrHvzRs%ELQL@;$!qn{#XP0OZ! zvJmQAdGWBy7h9H{vXe%ai|$l8eo|J9SId>=C)w)jup{vY?VjS7l}ZPLN?ET< zOhuHcj>U3qxzLnn>!ibgH5!!?>ExA}By?FWE6UaXcMQ8nIY|s$RxBxAaEPr-S{>iS zoSfX9=*0~LtKXY{Vb-g%xm-4t%cW%{a+hM{Ze4DbmU3xf!@a8EK3U-zr82Xwi` z`Pvqghh)1Z59_i+9?6z?o%lVL*ko-D$8#pGBDDO&PrcJ!^5k><=kHOjG2-ziUQH0kdR>A6krQT_DNS}V z{yG!rQc6D0NWVW+6=cAZi)$J+C-c$d>C;`!^JHAj7b%x2%sM~V(&EoqQJ|p})J0){a z%A57MsN?56cFpHN;WHSLX-81li_$}Cvdrf%N%Qwoxq`pCJ4&vUtN0~yHGVmaLdi7g zMcEtdb!P`j8N53!X7D~lp(IN|-Hvl4_fWKuECo4j{9%j>o!gI!0;so(4`Wg-t~@d$BQO_2G_QY_2L+Q}3=Qc1TbE028O@cHQH3sbTjy zE2y{oD~fvYpfg8(ZubU}haFB&MR90nFTPS$Qc>~&&Z{Wt#WNqE+(D=VqE_|2Fu2%$XPzsIvpgC;d3Y`4x=O3iT)t7I-WFUxNq5|lkF2yh&8~AT-;?yXMP)Jdex~MUCP)m~3j1*R3GgiaKI$le+VG~Dh zW=}Wn!(G^hyLp4S1yAv7H@4y>+~i&krm$fo1^zp?+Xfx%B#J=&DGe3% z$z^Y1oPx0UJoI?V>dR~^kado`S0Tae9AdET2HJ@SsS&Lbl{W9KT{d`caj~4YE=kH} z=j~4EmMz}fJ%evs`SvKO&1FomRvweb8Aa^k^DBHF;PVMSe~tI$$&ymm{hpGq(uzGJ J&&qC8{6AKGZ~g!P diff --git a/gukyuin/stblt-check/build/libs/stblt-check.jar b/gukyuin/stblt-check/build/libs/stblt-check.jar index 2b9735e16704fe657ff2f8a88cfbfcf3bac38631..14ada160f8f63f3df1719eb430f7a32a994babf8 100644 GIT binary patch delta 33277 zcmZtO2{@G9|37fdjGdzF`@YM*Cm|w4_AUDsh3r{IC1g#>WNShQ*%FhYl0-sjQ3_=# zgrroo{?BKor>E!p`*&UM*L9rbUe4Te7!b>=2QshgT zRV=iSf@f%`Y00I~w=_L8~!Q@jm0w?vK_FUAykt9lk;rjn~Af;n4 zQk16NgP6a^G7`*AU^bB0aF|s_^1k;T{!ja6!p|Srjf8_6F&Ckkgr?*J745{{D;%Zb5~rk)$Jxxj?C`|MAa>5riZ$ zOau)v4CRGwR{W=dxJ`Bm$4hDz!-!DEC>H*69MxzHrS63lWtN$U`f^J+R#LPy<`Nxc zYLzf<XmI+cERX*?WXaes_GJ9PES!}O$}yN_?>9a-o$5w%&mcYvtZ zVb>cnFgdB_SlnJi+*_BK+QwiZcQ3`U+l(e6SGH5+WUysz`RrX4jPV7qf5#6#&{Pi<*!c^ALll0 z4QMG`%ubbb^5sjE-=w3e6`o*bERbo!?r&biWKUBm(@$!YvlP$vz2Tcs!=vHNpnCi1 z^%OpJr;A?4b0V7Z2k!5=Y7m}V7~&|3U#JkV)pn66GSPf%-8ktcz~Xc#LG7ZUk9bgR z*oelx*9zk_5`Nj&tCZ#XmN)_*H|^=y%3T%QJG?nt$)GyFp1<9a)nS)qQPf34rVYYc zx*Mws*6;8t3)Kx*mARWz&8lYB;Mg*2nx3Xh4T!r38ylMF*@fa&iz4oCkaykvb^ss3 z+oIK)PL*)QfOhbhMUY=<)O2J1dZ2=(>SBrFk;-jqZsHHV=Ir@sHeYr~jKAs;cj|%2 zDQ||5&g906;Y&8Q{uxhH+MnEfFnsJ>a`9(=^AJBj=K$$VxH-Yla7kgry;5GMh&*>VHG(_PI&CNgSVe3Z_p);BH7}A=5f*puHejcTH>Wk zoqqN;Jh`URL0|e@n$1kzMi^%~#RP|M?ui}2jvDXN*Z{&via`uot||$`=2RV#~Qy^F0-6DIob0BcZFH}Ifu?f{A&8PgF;3IJL*$bk^~&_ zQ?iHWQ}TwGRL1sg(ug-nbI-7SnBcf@g;wailAqJzk2%ff0~C8D8&2!pu<{fA^uufY z2U}3t;x2pr12?mIqvx(LXfh2Hp4lp|-CAF7nf8Ngv-N z@68`ud>i(xMhnEevO1jb^}L3(_8tDx&qwy)Tke{R&mY}AWy`ByKdpL2uGBfLs!+S$ z*vP{|GS(%m{_^eF$b`K`UUzn~xW2`(9R9R)xGnX$KUegn9#!w=CJr_6mLD(b&lKw} z=gog(qRCWQ)2cgB;JN%HTG%}&S2bG?b%!+;?g!1g{Y42J45{CY{BIrG{ygmbY44Rl$7hRm&u&^skoX_0 z*z?#o_&(M+DKDKnx5g_dapT!I&!n->ZgF1Ch3pjV+TLBor=1u1m6BP$Ae-E)Wd;?3?Ugv$kyn7es=Ce{iBN{z0IEwiYqClG$}?o|?P zPRfl^tiZARkEz@miEg?4qUo0Zg<88ePXfYs_HH;o?^hbEv5BD~E$#qyL)5hCT5~FK zZcQes0Kc!a_u2(DJ~pE$O%<9)Tm;p7cY>C4qXXEr8tRGr9f+gcqahOVm(FXjAD86V z?Ul2_jAbdpqd&NptZZ#2K_ zN}hdojclLA$rr5(GB)&6&T7N<{w18-WzR02)?AC2D72Bd{8MW_?`d_1LfAov^RL$3 zYqLiVJz5&=SPb;?n9a{ya?yxmwh0uA)(d~$f9k4kT58cvJ=LheGgPxDFuQVQsBf&g=e|dZ{CVZVe>ZkOlhnoTdDhvjlRPJ^jn=uX(dsOvs$EN4T zq?i}`i~6c9O((q=ngd)}+PBmUl)OCf$#~~AEtXF%mgi(KS-)cRo0rz!Nu9ooH{NpX ziE>)Oy_yD}?>N(ULmx73%TDB%rGzKAzv=G%_G5a#eW(YX?phXaMl=3dILY+e^!A8C ziD|#DP79^7Y>ctCJ8Hy?%w+G=JCrL|n9)|;(0|^0q1o1^OI9>g!;f>;p;P&mY!$QA zN52&(M=y;R1vo1HGcx$jl$-b0PxsDlS(7i=CR8K!t?2REmKC{%pX#qVQeU2;TIo+p zKNc5X#=$kz$c<0wWmwlAT;RVQN!QH&A#`KYDtyY}l7W8N>V zLKN{-92_4z*L#wByPcGhRcpucolXWQ%AYtg^!X~Cb*E6P1nyh2+g*Z~C0*HZ_cPH{ z*VW&CvswF69wnqx%lNuYeZny6I;p94j!NfA(Y|WZ&c*Jl_;J0_8=GPTU)&`y3)|VB z(Qm1}Fy^Y2%tG=hBlX>xu{o2mCs1#X-R%V);;fUOq{VmGpJjWm$GDf5psDHV z)^>;e(^QN)KZ+y%`fj3zujx2 zKrA=8TsyljoWvW0pTep5N%4ieik+DZ<>bj2rVUt=2g!lHn&i{G;F_0<7^a|CiQbi<~@?;`%o9Wu46~~FYCR6R&2SGmP1#Yb}shdS2#Z$XLO<-94RmyZ}UGw zvUe5I_7{8O#Ms3l%6hjr$v_;T(@8B{#19S(vWVlVJtJ3^%ZAQ z;&(HPg52#1hOby>9NwMX($dS^uokj1{;fGv?#py0X6=LGW{29`&hHn-28|X2wMq*) z=EUxMr!*f|ez5y&Xw@?5)Jr_Uo2S8GlcEvR%lp-qPakoeEPSo;K#gxr@`u9X;?)>d ziH6O`_#>oWzMa>$F>bBIONulGYA=0~%vf7~T)5uvvaVerKT~!=iTaH+(~foVVWl+A z{-`m>GWnHP0`E63H*()J!o;pc2M)Q1>AbV8oW|LUia!oE>sW|A)^WBh0$;kP>~?|L z`CI%P!iI+*y&5Qf<0QMe%B_pXI}aaiHu-FO;d$)@j@{lx7A_tE-U(S7Sy`uEur3;g zx9}$(_(^rW@zR1|C7z+9BldZdKl{coG2GItwfd6wLLbsOW|B;7W$g!!Nqc28>Q5}x zpK7FA4qtsGUGwODhz)Pe%o)#gyrormt@F>76T5e>>wjawcgcpa^F(cl zr(5OynTKVk^lJMVKS?fxSUopA9r<$8cf7Az^l@(&hYPj=b(U@}i_ddsm($uzyLk0O z8B4q~4!*Zj9u(w|a8q$twpB76N*=WWPCfPX4&XgYE!0?^tF&_-6dI_YuQkKhmZLDdp_y| zQ=CSUk@&sL9cu3Hgh9Qaj?o8qaY1#Dpr#-4k`P z3Sa0tt?#I_MKj!Wv=qM@#U@7*Ivn)EVO8pWErFv}3A-XBZFEg7!f*?Lhjt79uTS?1 z)oX6O-1R~ud&8}DXC7O@5mvhA_Ga#%I9>;s2K$`ahc9cXui29?EO%d?>r`EWBctW& z&pe*nc?orHXEV7}uPp65Il2DpA#3NICz(-WRjE-vtOKp`qt`A^tEoOE@OgAy7w=v0 zZDE+37991ArT(&#?4Ozzn_@ThJ#UM0)}w!9;#4Kz=v`n<4El#_&;|n82ZsH%(kr zM~?_dV`Z3i%JZc^J0-ekEa5hhWUDZql*7rc#ki95>8QP?c9hm);iGbdOjdw62#2ec1sO-&kObMmMCYsVB zPMYe%e4rdrjtv$KzJs|z`SMpR+Le;-5>APv+mBhKRKlYb0@{Hf@iA&)Bb^+=BvZDC zo?z`JoU6mok%EUY>y-I}2TG)Kk1%xfl%s3I>?V5Z!#Kt$9$&jn|xGgKZ2yOkC=H%9UMM^TqpDe^Y*W! zC)fFW!_fbAni~z5aKgme?Xdr+KQTG~)1*Wirooy~Dk-l3^e08rVlPs5_E%*R19p|t zll(kP*mwyiL3+f3&8AesBom=hg*3#5O{6?xLUY$k*$_OXg85}87)W7R3D+NCm`Krr z*!+L@{il_icyq@Rj)4>*iakb|CGsi5U=kX<_V1CAhmewGvCfn_bZh>1CoCjI1#B|q zsz%S`DkxoGMoA}>u{M8g1$`+>+NOq$ryLA`sJK8j2k!*OAa`I!r!&5_$*KQR>h{EK^G8GSH(; z4!U3|V~I^R@C@}F9_vQg$v-C{LfpD%3CBqCNx|Nr9H#si${CB0@EO>AN^kO&O+JRO zTrA!H9@pbMtRrR5=+K2I?3%0Z*oC5f^jbO)nsU4%s2k8P#w63yoCgRyXdyO;O_ zYystwFPi(`E%#B&Mv~MsY#il2FOrX*^1=~`kbX>J&rqi1->nm0yTZK|H;?^DnV5f1 zIMfYJIA94oNoo0a?`x=qnbf?3-AvgWOdNS1!X%M3tUcun$d~Z@pIAmh$5+bbN_z1X z>rc7nQOT5)`5h}nd7Ghc3Urhb=_gi+G9Go&Ca!tFgYd1?xaX8{eTuD!Q$AF8Z?C0M~;%;yFo;Jjc zv!q;Wa9-pM4Wb4nQX(7f;9nau^Fbe)kX*TNw14J@()&JYU?=tS;=WQE;I`K$gj*zU zl!W$2dBYH(9&KKj#4nB8`tN&zT-7R%VaoPLedEhijq?g|{5(!8Tks<;#C|L3(S5i=kA(+l;*Npdh$) z4D7(UkzZ>P`rKxY(gi-RKwUPF_U^`6lJ`t%*n`WWypHI$JxbX%+}@xY(IOb$-NDW{ zRmy9LewuM6e;54Wf+K%>C!wDJo>DfX>4CdOnQHVY7y9;a0NvLKnts1ua&#y3A&-O? z=xivw42=G`9LfNgRj5-W(S+b~Dc@)FBXNFz1`v~@&|8G~74_jHxklkCDW?PDC`}}b zSlqwY{O?Kvs-!2mly~xY zeof#?DEt01o{cm&jr;vE*`HZpBT3EUdMFpl@-j|`a{lNx9#8q;jr_eH_RdD!7>mxj zjfQrTa+~^}7J6bw9GvuSX4)&{mz9JrYIVvtD)J|X{oO~LBqvSFO}Q4)3u8zgs6@IVL;Hg~Ed=i@JaK5?{il+Nh3>OnqL__2fdDjj{q zNYF{396Skq?>kDlbY9|VMJXlhQCcFURFz6AOgZ?>Tv|_}K^nZ??~$}5gACf8l*2_$ z=!bOp@D3fg?%9kboH&v8INa?!Ptp2Nj)8npz^BJ-L)O0J-k{Wm+bZNeQh#H+g52>-V1)A$+GRlc(L2;h%5bNnRUu6Bh3% zNNdO_N=bRou1wEuc*1~PiNVR>cJYj)d`R@8#N_Su7rM&Nl^-cTa-_T~gIDlQis-)m zPh7q|c#w-~XFuMI0xeI|3>H?78f%82ll>KO3m;^8G21)ODqYc;`LZzKDS_Xh5EZZYj;iZqq58|i zhq--?iZZ%(N-^h)8Eq#?g|19ZX=BqoK8~!t%{D*e?_eg{6{(z*o>9ha(nOcYvHivi zS5t2GN;OUq*TQIQiAI*4GGoOi#~{{S3@NoV{&7zJ;o(~>_BcJOuF(=uoJj8NO$o?f z`yLhNa@3*I{Qh(SUPp4%eVICElc=bx_^Sc|?3{yVl)KeEzBGi#V-z{B%DuF=*6}iY zSAMCdJ(Fut=7N0x>s%VgwaJQxzAAyznDNK$iPdtK7Q$u|EgN=5oC?w6A5D7vq&<V68%cw)x|^|7`vs*OxmA0*7@YgE0%U0m$Nf9Zh6-%hj~LNlkZJ;BIo&2p#9K*UrRiKD>0l=Q)FrPDuZY{1Sl{hD}$mn8bIxY8W55(x8i} zQPoe3ZrW9-ZS+0Ctc9JXG&6Jmnd)-xk8v!CS0=7LC^8v|+iUrNE9wTvNd_;2Bm3DU zPnXDU_#7NzQ(kVjcJsW>Rwp-~Uc+0JE3V)AXHUg!8Je|tiq%yV3G~qX=n{jsW^{;Y z$0&yOO|!MRl$En*GKejd^J!RFl-+OaJ>sz4gFW~??nqS9))S6{Gwv!2T}N=SGS|Jj z_i)^6Dp6XH`yh7ZYi5PSJA)HSZJJy7xyG>^Lfsr!#!^qqHY68p6kw4YNsjMS!~``9 zJV`k|tg3WZ%lXIIqn5hQ#I(*;jNnssIO<-#Q5tWp@(#5ocy+fqd`wwA)~X_Y$JF?g zp-!gyE$3Kzt^~7yyjJ7ICv~^dXwNi$Zo)3_hE%wP`_w&4l*I2kdz)ReVr=f91&RhUL)Aem&j>2hXD!3t?Nuw!~O}3Eochc(${H zgR6L{1M?On(X!@wSULo*Zoz{++*BCRrGABOf zHz^xB&cC(K$Gp`b%<6$=oAKIb+#xZ7z_TMS>_RvuR0|b+nv2J01yV|0_nh8Q8SZuZ z*N2oq!vkgO?{0Bt?l-J>!65fDjhEy3)nc3Q?KkUR+s|D;(R(;PtdZqQ&9md~Hr8^~ z_^&EN$1M#a()#*WXIGaFOr?)*(oY`OShQIY7WAH8!oB-gxcYTO`EB2#w%%DE$0Xr1 z`WL6z)KqUZ#KapN)^_nRIKSy*ypU&aMTl+ocUu=1+v%G=&qBMWWzXI`m7;phq{(?C zxJysjWQHTcPhC2}A)_%mPyUd$kWSagw<%Hl(?o-w?fl;NlrCJo@@d;;!tJh{YI@u9 z-hs#m0{ayvjrQlc^SROZy_>j86(4gxu3ApIH2>ATD*xU`{Q2c#mcJY;agoEzZ^tf4 zbSwm}-EAAHD#$5dVUK^O$D6bo79+Wo;zxVxZl`eLV7zYVv%4#z2e-aheYc=P+Q!=+ zkH3PCI$Gyx(_9x}>Uut^I%weyb)VVHmRp}0C`FFg%s&qh2{PXePLuR`Mn?ib9 zur6e$oTYJ8w^I@H#=?`}%CHcGuf;Y+8KZwpApy`Ia*4EX*GmXm9T; zK6E^y^@5;e{fQ5L)@&cJ?jPki3zU`AQ`U_*8ef^>u}`FOlVp5$dyTdq#I+7MeerN! zzUw;JLYJVYjJYT~Q8h2ad{ARjXj)3+yIs%y_q<+XGFg67okRDN5|5|<#2pUID0#KB zd~Z$lxsbKE$BBJ!%H`@lrJj2++d9pKt!|%uqIa$C`K){0x1);V%U{-yi6z?hG`{Eb zaUM17d*^|7K3(_ydK9mid>q?~#zga^rfgE?%TL)eRt~OWers>@&AG6Lx1Z|IV=905@mcxG3;AU$Pxe!ZZd_e(+3IC?giG1w7|VN~LplZ+dtT$95Qh(! z4*Tq&N!;J(sxTIapKxnY8s9#j?^Pip%OcS>Y_m0%>#Lq%8#i&AF!PILCiSNFLI0sg zs^9#^?y2}(tg3!UfAD$WdGm@uHLqA9U2kiT{aIdV`J+PJ6YsZ{ns7f*Po3T)n=L{x z4|q_>yfG^D!Aqwy)rBqwl_|-+FP#oPn_I-vj^(kIM;uF0buPn8?d*!rFkaMgtqjla zmcFt#c<#tisV&`SYB_it_Xt{gRtr4FNr!)GnBS4qdBQmbkrsb9B@;}R>q176PI13V@o7b8W=MBjQ`wQdU+0@zP4Vn0C454MJxyyuW$FS++gLgO?f}05}0GY zLv(yIgK+h+=&NUJDzd0d-se8#s8jQJFj{CuBgS{SWFM=`+(+}L0=;LC(w(lke1enB zL=wAUTKY_Ldf2=pD}U#JVugve*IqlR*-y2nE-yj21npa=bbnIO^#}V0{ z?NA$u3u0(2%4&c1P%$!oysPj-YUXUczua5Kt0o5}F)nM?w#@bFFDJTMjpe(aY5M=t z>r^zjI}j;896PDtP%~5Y1Rv5^L~6EUa%dDS2^YmT4_Gma*9=&NgjvPiWMP zT-~Qi?i>@T>glt2*C|Vja>j~M+OS;5l2VP;$Fb%96-RQqFPJpzz2c~TcJpFnr@1D5 zn9c)iwSS{hYIX>7WX(~|2c%;n2XrPsg}jVgW@n2FbqG@3&vv}|G%AvMu=E7)8@Z-JH@-dQd0?^mi+ROc&ObWm=3g8$9y`f9x-}{c ze?MTO$yeWHKeZ#_r_9)(c#>c8Q`3Qfz>)-?Lj5n5x8;l6PYhi3-Q&L6I-}DZbj_Kw zVyvN9X7cOpTJ>%55=Hmh-e|V0>*GE6N>}Y!RedIQOz^I#A9M1*|7i23J=2$J&+v;k z@aA6$e4}#3l=(H=yK{R(6<@Hke`tA3KRo#JU|r6&1xsst@DU zJLlJK{lYO8-7QA{Gv^y|(00^vl`AQ#m9Y)uB=RIUc5+Xw#vzGGR>f$WJ4Lcjj@Bip zXR1x6X=Qs#y|;ejn3Q|ytz$=ZWMN@zN?4m|U1RO=ozGv6L@oN>8qmkMYlaTTN3wh5 zDm|bf7TCKadxhGU^siR$g|D4L+o%tt5gF7}?m47?3DE#57xApT7;+DSS zRU@9yqJ*<~=_JZjvw!Y%`l^1nx_Uc{dDS*utz5igrO>0@59hWTTD_5Ra^~Id$0@+d zh_}6MQY!ny@?2S0_ywn;Z9-PXPiGZ;msIBQb%)e(vOf$TZ|*5`+FWO8 zw&%2O4`db*rG+;dXfC8Oy1K0FIQ ztgJLVHu}^I(9cwF9p8&3$xi8pSww6g*sjNI`8CdUuCyt_i!11R+_o4? zFGKdlOEnyk2F&N_)@&1|Il1qhI%|2Y{XDPT*?m`{6GjycI}aVVO*+~#v> zM?tkt{b-tUHl5oUaX$Z^D9+odn+1(+i6E7>3cjbpHIBr=_GN=B91|0mn#2I zezcp(nIiF>btNNZX8SJ$_3o1^k=f#%Jl7yKb~LE`S8=#4oyGIAyHnkg`itMYro!g; z)3^F`3ee%Plj?7T@7ZaOww4r}*Rg#Oj%jJl+9WaLLF_I_XuZ2#@B4RZt5y!un+@zo zLuZ}&kC4vvYhMtEkreyUps^U({UgU=(emZf)aA?N65A}Tg`!4>8}eFO ztHcduaplQ=#qZx4nJmv|csk_+Gczh~}LUEevs>(&?MTTdh>m4`n&wr4-f+7r_ucJJ||f5pZx^t1FvV`n7H_l!*@ zR6iQc82X-fWDx(daB!#1FYAPav7Fr}D|@)Jf9>bB8tf&qrS!h`Pc@yLtYR*|P~&%^ zvhK`d`^$IBn}y9q_{*pb_*f29PcojZP+p4EDJvbCa(i|tWr&*4vbn0Cqw;upq~MxQ zEq7#6r1ekwyYW{y-%O7#V!IJv9hhgqQ#z9ynWOf_L&n_u7hX*cpU>~{ivNif`VYd- zqi6>?6h01c%3zO9X=f?LpRK^v+dZH0En7Tgq?orS++;S?TyoScFR&wIPdDw(ACJ8G z`1V*Oxttn2_uWJ&Kjhryft)w@_v(&{JL&{s9Uro_nuOAyOpV!|0~*o+x~7TuIq79j7>}}aa_k@X?AEO zYX|o9#PamSGBLf^H-FDoITgXXlaWP~uQJd4XnVd@x6Emiiu^lxPd2}@l7rUUnXJwH zoGdt;4DU7Ne|NIlt}pHAh1-Ag^<@Uf2ksZ9lx!?FRHU+&1r)R?nA7tOz@9j?P=W|P9x|Y9fI_dRRy>pSCxgV4T z?er&SXP*T(PkZg66>Kg^_20$$+4;_-%{{e*-aYBP@*kUC?m6D8K$sTTwKd7dIrpXW zf!joR(ua>$9l`BP_-6jD_yWh3>#s?3O$ixIuT_oZdsj4rW%Vz!&fo)RgJZe%+pfMp z{wXA3-{2j5{i$~S?2r&@qHDk_riC3^2TFHmM2R?GJe}|Be)kjaCD#S%C(jKq^&-5! z?z@9Vf`ghq9Wp0P3@njsQa`aKy_@<;*M6h$+n0!6r^bG%k%V6V3o7`H&#}x;+dzha?6X{ z5jH0dBpx~Ir|7`ks&8_CC0#tL>0QNadw!P9NZNe7+oeghg8NKvmmYm7%wyt=AZ@!T z9nrJpLygKC{P9_QVa?v2_tUWs-{}N;Qt2*gWC{OlKJ4|#O~`j@`H_>^-}HI8Sm-LJv%-=&{2pdH`pwSp3JXhUa^}=XGPL_YtK*=qx9YN6uwK~O zR4o*2a*($E?(UP_3#Dc%Z_=-;Rv0DtGlx{uT1~sk^p#!XsW!d#^vlCiqWq}4-=zr2 z8!3^a2Q8y>Zu2}At$XS}t97d6EZaq`=D6P5{!BcI#~;>gUuDH#&-9pHjOH zn*?UD1}=JoC!=o|KEA_in*2*3K=Jsv*~)l={80I*+Zyw!wTO0>$@^iF_)E&+f+3Q^ zvxN*hW$U&TdpXLDU%FAOd}AZw@cD2H*BR(%q~Vl{G(irty4w|(_s z^iv ztMOltI)B~tV@JV6^^J#g{x7!88MUmkC5C+dS^U$d;3uD4VwZ&O$I{y^AvSyR?asg2 zua{K&o%v$~)wMxqH4~mQC5BA-+xtDwOV9Uj^y4o1MF;;MEegYyx5Q0F6{-Ed{~wL~ zcXkglmvDllU3X}eDWCq}@6x`<{GY#Klq9T-(QGE-v*6>znnBt?%EvgHAJE29J_X8s zL_1CXgeK}S?G7lA(1&I;^zbK>X}88`QRq{9?Dh}eUxn|1}NK63{i|wj8S%=n4p-V z>_jm`F-O^jVu50bVui9B#Tvy1WeiW`bM%3c%?6i*Z{ z6mJwC6kilS6n~Telt7dqlzk}hx`d$YM>&8JiV}trj&cws0woe93MCpP1|=3H4&@L^ zJW2veB1#ep9wiy&Fv<~>qbMmT$52vH(ooV-j-zCtWTIrDWTWJuV-WsFMMFD6441fi204+cV&;twrBftbO11tb5umRWzumSAACSWtb z0dN9b05`w`@B(}QKOg`I0z!Z=AOeU2Vt_ax0Z0N;fHWWj$O3YJJfHw50$TtjKp9X0 zQ~@vj210=S zzyTl>2m``_gFplj2}A+WKnxHI!~utZcpw2t1d;$ekPI9KjsQo26yO+;3Zwz)z;Pf0 z$ON*0Y#;~71x^5Yz)9c~kPn;&3IGCd1}FrIfMTEoC}MBp4y29yI8z<12=%1Ko@We=mu^B zJ-{8H7w7}-0{y@}U;r2dhJgFP17H|<2s{EF15bbv;3@D77zLgKFMu&%9GC!J0vj210=SzyTl>2m``_ zgFplj2}A+WKnxHI!~utZcpw2t1d;$ekPI9KjsQo26yO+;3Zwz)z;Pf0$ON*0Y#;~7 z1x^5Yz)9c~kPn;&3IGCd1}FrIfMTEoC}MBp4y29yI8z<12=%1Ko@We=mu^BJ-{8H7w7}- z0{y@}U;r2dhJgFP17H|<2s{EF15bbv;3@D77zLgKFMu&%9GC!J01x4rl0I@(Ea0rM85`aV?3BUu%z+vDBa1=-ZjsdAa8jubg2Qq+6APdL_a)4am1ds=u z1Wp0@z-gcWAOL58LZApJ21*1hd;`7%KY*XWFATcW0$32*`201vt$;qT z4KM(<1BQSRU<~X4OaN10CtwDc1G@kVz!I7 z8E6IC01|KoXa}wW*MJV76SxlC0B!cYKUITA{Szr#B2i^h;z#^~& zyaSej_rMD90r&{40-u1-z!zW*SO>lW-+=GH58x;83yW@lI8>kpXaEd=1#kc@KnKtR z3;-j*1TX_E04uNo*a)xz?7${qGr$3G0$cz$zyt6Cd;mWn00;s?fG{8ehyr4OI3NK? z0#bl9AOpw(a)3Ob04M@m03|>fPyti{H9#HE05kzDKpW5jbOAkJE1(Z-0}O!efFWQ6 z7y~;16TlSM377%qz%IZ7umr4t-GDV<1MC580Xx7RZ~z-9&i#k1>^&#fdYU4oB;}f zBA^&30ZM_h01-F`lmX>H1#ljy1gd~)-~vzs)B<(DMW7yN02+ZNpc%LXv;dcZR-g?a z0at)_;3{wp=m0u_>%a}*CeQ`k0=j|QKo4*S=mq+KyFfp14;TOjfg#{N@BkPF9s-Ym z$G{U{1b7NO14e=8zzbju7zZYRm%uAv5|{#}ff?X6@CKL#=74$NE$#-o{oy?IFwTv^ zHzar#aVq^-RCFUY1&LyKh>_EaI5Bct5h^*-L6Nxnb`jS>Sq9c~5R2s@4lXR>c;REr z8*fqRu=3w+=>q5v-Y6CC->1`X5<5_Z1Qvbz=|=3zUd3<{zo7~lO2wq04VIIrFNjw0 zgwIEbVW?#GyRXDL>YKc}h{F<}qG~NlHQVx48Xls&&=O9cQgKsS6!l9%737ati36w< zP2SiJv~p||xzveDG31gaS{0U3YDT3va-D+c5-yfpx`0ZQI&rZjTqtD+))%p8k4>n; z;CDrkII3U~U&5JCD)4I`(IMtnrkWPCEPA@rzli9OfIcMiPGuZkRUZDF&`~DYe#NcK&3P%@}&3@K0SDEcxI{hd85I z(TXe>SX#N_;dA;{NntCw@g!%1)kA5l?7TJ4$IJ zFDN7bKgaI2+O;0>4y_lPPESQ;_MhFJ{Cga%al=PEp!&~#6H$qe=1baNn zA>Kpn%#`*f26PXj5veD)Xb=_9k~NeILl2esXpT`DOo`{vmy+Zi-X%9=Ho|-3md41C8DjGmnk?o&}p`toZ&2;_urW86bti+wL zvJZJgTyWH$BWQ#(j*80uKO-*R{Jr^Ws5AKwvWd@8iI1ke`*(xB4qDKLe7Ihy#7D!_ z_g4cQaR62FlAGtr&9no5Hxst>W0;AaXh9&#RD_}uAI;tels<&yAq+b)k@Fc1J>i@_ ziSiyP96ftxl$wfa0iE5h{~W8?Bl0lvS_#Dc=pMjFQ~ZQnWk6m#h@QMC4l!)sKYLpw z_n8>~s}CE|Wh?r7dh)EKE0q=Gptpq(6BU)mfA&QG`aeTp^&x)pkfh7gs2LUZy#7w-3c0zfz1ap?e1JSERkKQ{z z|JljS4}XngB4%tuR}y(wx(a6^ucIL%bW~K1{~6N$>GzP02IxB~xpU4Owc2%b5{~HY z<@BG<-`D=yK0N^~kHk)FMB^wg-gQ*sqcQmLcORk{S{X@zyjk&e^GA_rvs)SdceCYG z#7T3wW&gXF66I36iw5)2lwkjA)+1j_yA7eihW@VxVPYGqq`Y#kZ{&O&M7s(>XYk+a z*_r9@Aq2GK5(_ce{hyg-Eb6$t4~^qM;~f5T<~19Bk0YeFG?EjT@C2(04T_5J&3yO%yCh#brh=L1X zuBa%YsGuxvxG!j_i2`Q1i|K1=xl-m8w_|UbnOkmXWp1D50;!}XB8W!5uDGFlW;=6c?%an%p%CdEV2GHLH%UJgBiF>yxmqe5F2EhwLx_els^upf<2G>zx2a6=dQoV;m&4^$~MI!@}GS`8YVpka2@#Vso}!YH<< zb#d6zC1Z82TV=7U19a*cKX@grXwtQFYW2)R1`uy}g zKU{2z6Qafe%KrCVoaxYuy7a;!N(@bDX5OC5n96rus)qH6QmmbhdL5&j}BtC3$gE*O--9D zG?K_4jdl~lUnG#c8}s@9_L zB`YBNyP>8*IR7Ob8wej4DahoRZC*0BqV5nt ze|n0dJdM-0gTw3P^I`WJ_dr{lL)`QXzP!@J0R{}cnmbp{&oIqBM-ap;Zcoc{kH>}QV z_?)|ERlj?hPxeE~v@yaXrrRCsIT9P{44Z>dq$gi(ldWi(e=$&@=jr92VrK-qaOCi5axN%W<#SbnCV+5C!(*0l&Nl-3b_unja~u*?6@#)c7YCseBND9DldVqSz>hU-fNDB2 zuhq11$y2Q!6t~3MKlHETQ?`q(o=DE-Bh03b=4Si48!%7KCZD`UC++U|0MoDt4rX4a zjeHDYp0rI4=_F7Vwz{qX@T6^WmLCh?uK)qW=>h(l3xyyG%1{u{cS&pl9LDWmr^vuY zLSw9G<4cS>9wI{wBgpXPLg{Z=M=TSRg{=scDBVI)2BX&ksMb;dF(gvH=}7tJMCoJy zQ3hpU{%vezWW(*pabR791axG7t3_o9Msk+s3G_rK14S}8Pdc)&yQ zqp?Iv+^R z;*;a*pTS$xcBTY)#yvk;G3cp%HCnMMU6aqrpHC=f+~9Z^G#^~v%&gRtnfmGruY0hr z%wr6u_9-4S%uRS_p3wxJyHB25%6A?qR*e10><4{5v=OeRr!7DjbK$A`#KhGDg)MWb zA;WX}`Os2)$_?Ua-}~*`W8)o#JDn7hdkt7+qtaS5I5Ta|1cp;UqZU;+Kff<+gq?Nd z4D_U3Q><+`49dc`?6r}R$phu{@AWY^Z{@k#*=_Awb*Zj8Xj0+n1m&~su!R8$u6T?u zdc)4HhpE{&&j^(PqVo~&@ruX(LMhYBv<~|0OPUwCVlL%UZM(8Cn_<<@N8RSLT1=tT z5V;1M2vZ%Va#MLXYyg>rPzLQI0{;1yfII2;OEq_!N$5C@E7!hnpiS;-ZW0y4+Ps6> zVmI0`7tv>gsWX93g+_my2|Ii*+wCE?q%7RSjW!97dLe`}WJKF^_QW2DwXxXQ4Kayb zSLg{wW4!3quo=8z-Y#T6vrOx$cW`#_pyp_-9H51RZ>~Iu?c~468Q<4rq?3ox7$xco z-*q>?IX@G5+1d3piB0vVc`%$TR;0LMR_uL3C}kEd{#~oyit1TkC3uNY@qrZSE3EJM zneF`(R>QEi%m<+tQmniFeoqHS3YcxZFzXD;!e%xV_1K_J`t}e9XF38{u8ng-@IlzW z1(8tENvDWtoDhR>LKI^)bPhM$qkE;a56#NU#l@Zo0z&42kU7`GR%U#rb+OfbV~xKz z7JIN?)l=@sxJr${sujzlk2AvkT%`E^*SL{!0Gc2LqQt1}s%EEriEU^bLWX%8%1fpv zup<(iQlIyEpB@bntZ0$RQSSF=1&}(@07B+juX^qt$c=DC(DFeX7;l>F0dE^boO`s){4HQ`- zjRS<}Yo~RC)jytUXdsbfZJWoYQ70!XvR}QV(9}n?_!NJD{*If&2iCZmk)T?mfD~VX%=|$Y_v|G?(-{k8|t0jcc?=F zA6gBBfwHi6AJ~Xc=Y`mrX%`TAN$|$W$r%fsn; zA|s}J^mASM(klpF^ax%w)@1camW`f%Z#mL{W?aSDOY}H<5jQ>kGaC_+LQ|gP!#?8Z zz}2?sI`HI%)TsAjx`(N0gl*J(MKOA9rAC{7A6m|>7jRQ5!TdPVB7DjyHg(&_H=?|8 zkAays?-ijNY*d;EU$Xt3QuDeg&9M=7)BoCsP+55*`DiikRQv@S8AmDrQyw7x7I48u z5qjOlZ<{*nJI)|%MJ=&Tb0R1U%e`VFBhLvNQ`W!F;32wk zFPI!xLv#y%0!%7*ifvSCc!bWFG_h(RrpM8Eov7HKyG|)ft?x!Y24!JhC4%Lv|L>B6 zmnjnAJ@PP0#9MtC!Y#K+SyrY+D1&Z0P|Ci)n1_C}*wI5DRqW_UX+YX27rQuCL6DKV zt)nx|2JAxR`1Dnt-?kBIWI%(KbLibgwe;{h?q0MQ#V*Q>`tH2gV#A6uEm%3<-c#?g zDaK1*7w+jz8$LmXXBq>MJv_U7{ysA_EP>hZiA|N{E==o=pm5S%EvonxL#wU6-hhs z!it7|%DdpOKS2zECk1Thw>t%2C)B4-Af4zi1pJiPtf7^4I_Uumhq?(fF66(G8_>TR zUWu#v_zlBr8`Vq(?#C|mq%05#tOm}mAd-}pIXU{hZ8^a->@z-2)8Y^4pNstj62iRolRq5yrS)J2vm-U=6o@3{+4FpT+x`5;v`puX z?uAc3Hl+upg6O53m~mO3m43M)&0WoB^gfur?8zv&CYq#dYh9o}-c#U7lTd80MEoF% z!Bh+}7rFtauhQ-}DWj`}1^6XxZbqMFxyp}z^4})=i$Ro>joMg?2wD#!o|O-v2ZC6+ zj5@3VNBO9zP>=e#umSBrF<9|bujzR&3L6?#Ij!aGy0MuWfrwXrjVsc#ql$uzR&V8~ za%@eJK7B<|puzk@Fsa&gJ^59!)lT=!jsye+=g8}NEslKYTmma!=e)t z`!|nG=pII)le^=)G^IdVvJSJ!dkY3#{rzfpLw7F95$g0gaYi|2N*r^eID|JBTJ>Fj zX6yD3Pf*RT@O2p$H)pfB4wi9FySv8=wQjwSE5DLc>ta62$>4>|@Sfz9%u+L+4z%GZbgGUTLV%;Gx@MFMl7Uw-=AG-9Cz zbQHi4wP=BzBHd~2S2Gn4!%KKv_G2ZHlmVijvM0R(O$OydCHRbD%|4_0yUMhI>c*vA z6}?3rcf_s#bX986MsS1GY|kkQ^{FvMX-+Q$BctsUMS4VJ^C=LE{f3KuQan?kxQjED zMzoeQn12zS1kp>4KD%3?mq&Ih{`B^bJWo9Sq@h-i4fm$uAbP2-5AHJ>E!IGk`u5+s zV3g-7VWeYFTxehWJjK>SoMUMC9&|+=_xyrF{`W5^!BhlBuzIp@zCv?)=A#v%dpYA0 z{tyr?Ny*2bADSf?Pkwo((AKXz zl@;t1^a|g+k>FttDx1e^6o6IjNzYJjr)2$H!zd3wT?22Kr0hn_vq~odT~*tFS2xtv zkiEkZLv}|Fw|m>Wwt;D+;@C+g5KM#Ddo+JhbYx z9PBn~yFeewMo++SqSyHJV=s%y9}#e{dLXv1M(LgVYV}1(3|6m3CgT>qWis;OKZZmw zn;1^Mhxs?^T$Ir?5mYaBsGPn9k<7dTsrC_mIk2{LEVO=_g9n;SFuJM>kEUB0bd=Yd zj(5avl$Mi@9bgnVF64zzU)4D+!z$PVj4o>YukTqITr) zAX9dOA-z5UjA-@7!5tc{-nj#RvuYogVBsC>NWRSgr1tC&6%`<3tTl@}=c-EnlPj3;Ea(Uc#v`cAU-L zX+g_D3}QIf+yyaEU8r2vsPl_UT961h!Ro66S2W7maRm(C8S4huzCnTJYO@c1(yTzE zI50z~)+yfS#35jeL}2lvdP$I_MWFFg0iZ9NU6U4rh-Y<2QXz;Q>W6dgXw+%S9W9Lh z*vti67u+$;$kJaa^E5w#C)c7p5Q%KTc&c}X`%aS=G=URpuyRkM8-L!_f{nOxA8bFi zu`bm(%QuMhrZg19G&Q{y1RFQGr-jo2oPS-&1KX1?i-Bj*=gwK?%ywqx-kkVSuED_rTmunjJ32#>ho7IHr`~7z z5>BlHSB?;Syn(LBAU}(#kJX3^*%rcE7D6-cqQf%Ii7wg{GSS;bn@PU}OEkJ^R%9Z$ zn`T2M&UMr5#Ot6zo)Q0Pa~`YEbve@?(iF);o)2lBWP2MCYx-$2M21d3 zQ;55+hxUPiIoyyw8ZV1Xg}tIR(#X<~av^@`V!_OQ+B05qp_({-I^i?1pQ*v^8lY*D zwK<#Jm}Xqd53t_RWu&+zpK1Nn8i*e>Ce^O4A$>YWbsU|^dH!p-tE}HNKeB4bZ`ukn zvC5HYMjX=bX9^Qy2K`JH!3KrP4Ct9uKX6k<<$r{HF|Im|F7y8>u-Xs{?4$oF;Mu|& z)dKeygU&aGTsaX>AC*OT8TB(o_F6E-IBUh|#aM<5J7S31dW*2p4H1sU{Y+_Yv^1ST z?otk0ksd_0TfOd2r@017^gL>J{9VX_g#tvSNk3DTJ57~-jLLue`%fi~%6R%1&XjR< z>iG6N{j-b645D;WKU0)jHjb`FRSY}ur(Z{*BDHMEjz3$*U7<~{);NZ%?-F2Y005p|>U5sp*)nG%GsIi3$Kmh@lbZsxXH(bK7>OZ@1TWFc8@#az0Q z09hT^M^@)5IMD~FBO~lW4<<8L*|NyY@kEtbKU0oTw#X}j^U;N_uAbXI)b29Q&e~Jv zo9GuK^Ab$o&mt5&T zy9pk#>uF@}klXr=anRObL?>tlInm0W z#A_uaP8&Z?euce?iDb7^j;gZzjVHRf`6tgi92QA-2{H8#4GjtTyz+C^ zuhxif^PHSszl<8F%)|DN z*h5K5q7L$dNlGbm&K?jSXDpY}0ZmTKG;Z7Je|e8lz0vIM?@A_n4gI{7v^u5E-bfhd zJYR77`FmX}gDn#+tjqe)bb0r932ubUmLqSRo^#cAmQ{q{>Ib> z_hY(&`E4hK8wclq-!!f1@zJ4uGtSpn`leW~XWwt7(Yd<7@!1#M={%s{OcXM5z zqvQ5By=+*ZH2IiRi{@ot8UMIvThDynKQ1q6tNA&9k(i>y0Gej~LHR7=@c59UDkXIu z^3CnxB5XIoNmcyUXfq?&%X7|@S4HVFJVXU&8^#9_FH;}1GLz06dLC4_CQh~4AlXf; zf6o1N1z%6gKVRv7q}RMy%6+j0v1Ll&MUQjms?~b7uDx?)*6brY#}~`E7w}6+Uk~iE zDR9_cE}ML8SIYVT!b7m&UIO<`r*>(jX?lm|;j+6^m$3tv*gVSl_PF`$gaDl?PoGBt zcVB0Bxp2gHi1UmuYIv=#B;y}%xkao+I7p{EV4lO?Mq2K-L}d&8+Jf8m8`_+EOk5AC z4@uW!OGJQ;xT4i9emu{)jPkGk5C3>@`v40UwS5|fF_Uhg2I6f{l zgz;*H^(ous0qgS5=FOe_PM$6I$#-?Y7x;)h~vW{TR0riAThKkZ0+J^4-RprA z-ki&sPcvuFzt9;{pky5+VI&-`B+%g+^D1PDnr^p}Q`7o6jO`i{rY~&f%VypDSX!go zrS$NuN#&7>Be(d57Rg;(&c2Z%YrMzG)N{Ut+2>as+ka*rr#-OHDLrkeVsOGZzti+p zxj;#8sQ<#-?N%H=ajlpwHgA@e^h#I8brb}h_FBN67Epia+!Ke}DW)bDx2^sb`?z9I zS}ANVv;VBbt`65b_TS&FKWrvbvb;$-dH-Nx^0|ri-O)#PMqT^y*=)VEMkl+V=Sc6A zO3wbvG4)9W8!t<&Z+c^V`&sb9c_QsdN)N|#9y1WEh=&AeH-~*;U*1xj3k;q zK1p^qAa1x8iK;B`6b=*K&X*mvZdrF%XHCrFv-Z!sb;B-t2>!^}S+T}+JIm|Bjji*u zCzwsT8sdA$=4{14`W36Ol@c%PwO3AMUrySabdf*cn!xq#gW|#}cL$APbIQJ|NAJJ$ zeL>cqDuuxBm+pT(VkDC(7%M^Ceiy7nTndVLtjDu`%RSrF`zOTSKTqEp|4=Qk`OS{~ z&tBC(j|rD*m>gO-aa>^cic^Y{i}%Tes@>kK*ibd??VkCn2B&749Gr65KKK`BU989b zx83ZZ{CyK=EqQ&#rK{vIuac;GZ}a~5W_N=$gr4qOHP%ea;1m%gJ#%3pe{qLV<2B9I zpEN#s2JaB)+GW$RvuVY{xVVS=lvGY@&0d@>VA2?@YAYRslLLdC907XHQ7Hpiy_;ZQ9z}T^pEs9px?g7Psyu07cMtF5c4s=Qd1@BYvpn<0Ha{W;@1w|g&> z4yrfuu`%08I}v+ya+XhB{+Dk==;JKf)?Ynk#M~!)!+6XR8mC@qGcQORx_i~`M_WRl z{!sk3ddsl5@7teOjL{_q>VM7kejyyM=yqRw{CAl#za2N~NU@E$?#6bnhFYgD^VAkw zXOMA;c5j~lEdPSZh5e;DR^ID#Vu(<6sRzL^#DwYk9v^cVVT#P0H|yelIQvRz?N{Xy z&AR@TpVk(u)4L%x#PXN-oRf-?UGICNlkRA3+5P-$G2Jh~zeQoX}dHB_R% zJmPMe_AG12CuYZQhQ9N2nGNxqjneEy7B1_rnzk00G(Bsv2}oJ>>D=?F-#SXz30(sjC65{f zH}A?EieF80I`+{k+U?{mffCQE=zU+7rce7dbIj(Po9ShH`#kGKKff>KeZ59l{`44! zOtCuQavtsztDTo*jEohg3VGK>d)ppA87&wZEpp(U=sM@MoR(6LiB{aHdk3xZ^C z3jg@5T}@LdXn$lBEA=$fJFVm~`}LhosTE=GinmTnTypV&;g+yE)o$;OtyfN`u5-Ge zD0Qc7lHI(}Svd`3`+SzRc$Hc8=@VAy-Yf36$V)74v?$Q@nEteL;aiX9LgGS}c^a{BwcC9IZT3@6 zX1h?&m=`TAr}C`oUlmPu{jE@DaMdEBxV_YCcK0H4!5?Gn=1op~;c@0p=Iya9d@UPV zRy!LfnO^6udEzu7)a`EE@7v?PF^;^{kUnVn{Zz1!vemY($qxSa*1I)5)p{H@Gv(fL z!@8rbS6uWsz5B$<`3i1szjuB4GV7G(s+)w^3-iqr>2h7M{5!Jm)+>B%iQQ*==4C|Q z#Cac#lfUh^q}%5hPBCuKOISHp?S7rXiKRmC`^B7u-#or|-ah$qao&YB;aYU{JC3aU z1PSird*<(t8NM(X*jyha(bTA2RJq&c7vJ6=RqJ9dSQS>=$ z+5CGqu-}F(u<6<$dV&@f()374uJZfp6%S{>+wgXw(ktJ)$@#~7=XBOdwAbmJy1ngw zalV|4ThS`1rm4aY&&b~zpSMa!Dt27xgzY_Ly&_G^l@I5=48Nn;*dHfa+Bc9d@LBPS zmig2KOTzqT*EgZ+HHynVJW3j>$vVEdWpap_@NSWqU485e^`;YY3tZAC1U$68>!a%- zU$ZcA$_?53hniGFj)~^pcNFH+jmT!%)ks84oh zSNel=?X!U&_40byQ(dS05MZx&`d#<2M8|}A;BHU(`yy|FUppWDhDTOD{@Jgt+9$!| zD?{$zM_72y_Fyl#wtDO=u}xA2vu`9!w6yBbSS{jmJBhAsY-Ot+ZoI>)Z=+L%f0TKf zQrSj+f+>?RwU0jJlJx3yvU_S~%XZJDcZ(KS-2M7FEQn|QVCgoqI}&#mPHNGZsB~R) zLEmkWh6iuli!4`E8@4BK5uS!J zC$2$OPpu!QihP)=`09xUXV$>p@dF`FE0!CnCw;PxYR_Q5n=Y_gELVGR(yob_V^3HJ z7$3K`GTXSERU`gMH_5ptYLkQe8~LK1%(;a>^KPuQcDv|!tx~Hh`Kx5{_B^?}=x%jqk_bHnRu%#zvp4Z~54B?dq8OXGLD~6$lr$%rKc! zeCt%1{#Boxr}x`$ESl)tq7t7WbJEYr?s~7+fcMM2n*$Cvhp=_al?*c8y*cBrReXD~ z2VZ(=t&CESqV~f{59T&AHv08M|B(7{LC4^9sM{m+tj@wctl~%GH`eKOS$mvRA6O&3 zeae&?)vq7;V)E2W9OVo9WKa5~y^iv;&*6E!u&H}xZB^658cP)(3-W-LRb1p2^YZXy z!F$Q5cal->@Dr(b_?Q5?D!w9da{}nW)QcGTx*7&=Utg@0LIp4CW&~zw zaL+{1wMV=*;z9|+2j1LRT>TAnG3upkRy^H{Y#rWn{it`?TyJ>I+p?R^A`EB3D!6V* zbX}@(cq1RqAs|PX+mcLAre6Kv-R=eTox!}_bWQTjnHzSH?n%A$;%h6}B6mzaeaydW zskOwlgdC&$P&v)TbZ_#VQ2!*|mrR7m!E0}+4ZKNn#4geKxi3%BPf=elT&krn<_?~w zD^qW;{ntkq48A}wrW%EJ(-BPwa>J|X4&=_^LK8Hqv0t4dYmecoHqbv(Iky&$${`Hq z_A|w~@mJ|-RQ|4Av76WM8Enl;vGYoTwU4hnp0LFVug)sVyDo@x7Y z49PDMaC4Qpzwgpt{`R)(t7pdL*-|nHZ7=$C#72+F3v4@NpGb3{9k*zL?{#x;&%7bhrhYGIYj?NbssitF|pYe zYwCZZcTfxe+YicIpRe>+WOH07xopI4dS}N$^1qJEB}AP2nQGi~8jNk!DfQpR3Xxf|-2D?6 zkN)e}TnaIe%ZmK+X3GNjs)tYjMY#)%7_+HLuF;sWSo?(OP#0jV+!VQ|nsHQp%UsahAm?guF zwqS%)3*q}XYN0f7$Q94US#ub>sJ@ZC#`0qc(M5PJ=vg!3s9L9O8O!MK#UqCk1OrCK zE`|ul(~d!XABC42xrke9#}MMjVq7=|=NV*$Ro58K#G}P{?!0toI59^rROTLE%4ixx zE+oIBfu_~CEh`zkRPC@Vh9_4)jIoe5x(Knw1INOb;f&j44j0aZRytV*u54#c#zux9 z_f0gzg{lWT$&(QF!u@@GBO{So2xk=8Z#8b}X2uh$8Mqv7P;36PRchSqM8-9$+o4~n zjaTE=rZO_Aa`2Uz85epD!!Pci|2Bd!TZ%nY&1Be9O~as%5VGZN?FDbmGDe z?xk)h+jak}m^-77v7f2~wLJ;DKpf|-Uo+lQXX)P!$Qt;w>~G_QH*{W@JM^9*Nwqqkz9{0vCh6;6)g4+-um4P=< z+@DOct{m5im)ZGW6*FS#%6_IicQc)NpSlR(CTYeIo6BTzvYAZk1cw!qiv&48{wyL7 zGn7)`hOwBww;_2igPHDDVTMR$s|HI;eG5*7SmOf z>;U=LLpH|wc^2A=Eo4p>{wIeEIY+4RiF`WwuedNF%EsFQ^8)jk7+HzDW03h=(X?lY&8Lm;`YsD&I@D8SWy%sfqP6Vx`R_UDKVkB#ex zLTg?#t62YYWS4T{+L`8@FcB6%r{*hDoJik_og{{s*QwzaM(vG)WY5Sa18Q?ti?9T^ zGZ?I=0{`T2A?H5X0WO^9lc`%1`KuJQoi|iii>W&BdxjaOR+lBoiI~8m&Jw)2;vz-P z^FNDV%Q{810|i~Uj!~?IRK5I-EM00)AU97nnI%Y= z@ud%s(d2UpEEC~u+zfjGfAfJGq!|YmX>qn}WihzFHnUXz_YpaOdhxisu{I18&1U z7WK0p7w#Ov)aJvxj~PcYm!(1Ob8;A)z-5i)ZqH=}%KklauuO}6(o?`ka#8lLUrX)= z3$Bo#L)W=kAh0;%_&y%N`L#Y0>TxzajkZymlU}+`_P%>5iErf`hT>jvrp%It_;A*} zHL_zbo2~C??C$LBJlGl0-rd>Vd2ohJ(9Rj&(gD8~FFLqRtJ`Rc`l6DD-+O*P{9Q9p zv-JJXTemhV)EZCgvyxUbWf${hu9>+uLs!iyks;&jVi`7Qs;kG_t-^mljiuT0#`MmL z5bZ|%Gw-rm}r z+f<)d=serqJ8xcyf2&(r+M4+KTA{LIziic3@Ao^QIXBYkRk-n~`e>{5?$4iUEq>KH zzDB}@=H+VfdD5WYld3hkPODZfIHIZFWqGX2J>-OVPi5zO<#*m+9#wsLd}MH(clDPd zr5Of_Lw8+E-ZzSteXhJv^1QLWI{G>L`iwBej~}bg8$2AGyzIw|xZJj&Sea?-FQ>0> z6s?ZTE2=l8jWu+sOEX?wcQaxBvQoO0qfN*ilNSZeOcmdY2E{rqH}8GFQT=6?$qa9U zE9r_KChW2)4?XLv6L{mD)c5t~S?Lq@>G)=+zAWEnXj-3V+L-;o{q(Ox$F)SN+x@I$ z+1Jjj*7x>aw9upad}XR(&5&)3p+?~$XKV35L+JyqXVq~ zBv$VUpZ-?0D>Cf|e|4Uvx16zk-MMxAr4@dG+Uz$nu0kEt1quXen`^9Um%fO$sQ!M4 z$r0DSTVS!wLwpQxPo`7wEC!~`K+%y#z zE;g08EaRr3!kz7+p5-;6SJ~At{Hk_X^1e{%&%*j$cJ2o=R$RI}Uy>cU_{Uz8!B6$o z$5viGoXsAyDB(e9;rnggN1FxDCROK}ihP&1uthcq@+IrXTWJ09ztAte#FKJACC*63=O=SwRe}mk|j@oZ`%l!|9 zPj%*$Ca?Kym|C)KN4slbw)s(8qZ`Hx3AYL6ja4fZxZct1j7LiY6C~LuPh6>6ZO)i$ z6`#tpRUj%frd9Z2p`hK(+h2LYt_js^_?^$No;1HheO$uHgww&X#zaYBn3klJNbb_i z_T({zzH)jk{9pCd^a3*{geJcGT6EiKjauFIJC}biTEvWBJ;&F^FrcBucHeD__*)m| z8vXQZ_WZTfcT+Zvec|f{|FpY(nlhW>UhFS-|GwGXT0vQ@uhaEsS7L7VWz&oAw0(nV zm8*JbxlSrOYg)zGuNZs>wKj@YDzHD!aeD5k^4TbV(+nr2G!=_CuV<{Y+?Qq;CZnu1 zNi({1(doUVdLNbFq(muyn!H9^+Dkm|x(s_$)DN4Afx6>ijmuu|V@F2r=wE&`#NfP- zrR2@4p&ky~Zgo1w4m|$y+TiPw=oF=juxq%cD0yCJmi{OeGKY080bCdfNhD!(z#DZ6lO>dY;RH7a#_ zRYd|sHr7AA(%yKq)Oxa?uk>}VedDu#O8dULy!Z9nlgk#n{M_Os9|R{T9ZS`{t&(5T?bvAz) zC$706ci>S&5w|LSarEV{9c@qR6a>mYjn$azE)cf%Shcj&G(x}9!97>Z@7KG8HLkmJ z4qOZux)KoU(2>4fwD69bA)k`lnK8?>iv5GXwb>J$rDlg4-CxKojQLy{ahUrv_3WHm z4^+PTiL=UI?obJPZa8g+%nS*O$nn=!vt=G7q<(%kJ>h`=E>*99XCF4tp7xF{VB7b@ zh4D#5PAfd+=XPJ~MFraojhK7am$-A5X)Zlg+Pu zjac^L%L7j~CcHMWX*h0En_GYC#2W3y;Iq4Xdgb%jj(a8K;v%LR^!oqco#(sAhsV8r@^h1llEg3VZM>q4jk|Q?uEFDD?I-P^KidB#WFTeVwSoiki^{fKWM7zn*K4=nr1P>0FIN9x{#sDC z?An)*9~!%+dmT7a)}$&c^;E}9a#2y_$!XFeqE~Ar?%sN&Z*XQXIkl#-$0%p7rDa;_ zD+R%l3!moi7E2i+5U-Z>@DY2AI~ zhwtg2@ez-or*^V`8MYits9Wj$C0+Bd^ZqUDy@O$2qF9OYX(cJ`pw*Cr!N*hd#{ZtTn_*eL2 zHvdYR+nB`X$M(!lk&2k3-#%d38Fr=T{!7N;Gi61a29KsUJaF2;Haqgw_44n>>Kute zo!hKs8*aIdT@;_U#U^Xpo^p*|li22sZs*SHG)iijn)P4%=+rBbW}@U=CUfCS=6>h% z_GX#73%Z> zPv5xK95uD$_DADx)vYJ5Zq+$w=@sn!!7(HF@C&7YeK9^!v-`)kFU>i; z?a9noV+ZLmQzIn2`${(G)WxZ;F+4U=4S7Ogm`Hd}*veUgKzRQQR+^36i8 z^@KN^Wfz=CKI17olt~M+_0AR;b5b)csm0FUHQ0swx;2m;e_};qjf=R;p_?Ti9Nu|- zx;`=DRMgHmY_f@#1&!xW-yngFpPOE0KxV)xh zVdOWKzuR4h^G@sH+UyCQd^ft`_XF0CoyK!S%%^dLPF=f}Ibrzj<=v3EBf%bl()qvUk;T$QfQlCGU=3A}mhdCW!M%>Y#h<^emRvsT-1viaeU9v|`)T_- zA64BvZ86=b#x_+y`=e3*o8GI$-84TdnYZWpzlJa$i&+a~FOn|VbJ!zza?H7G=NT0W zA^VaZKD+!gVZhHneCOvl{Z((bzIr?7?BapC^Nyy4mc* zKj-vZCMI5e+0eF$UZJR-<;$JCAmep6`(AR1G!@%PhWZSY^2fc$Gh@Hk8Ur}&l1$|S}nOFOY_TVKaS5(R^zGKyU9^0 z@8@2rV1C`S!QiS4y=Us?uNy_qeijG{m#@6Mz59!s^jWieX+2u&dPN(riq@uENY`7~ z3$bPFw!Td7U!-yAT=f|C=HDJagrnP?JSL`cCx5%OGx6e}f!WkwU%%~1Jv=X1XHz24 zs<+OivNK*V_8|As+n~N10rC5;JUh+PW~j2QT)3cIX>U0_(mmn33yryBP&?~Mc-OX| zHKqry8ovoTanB{uU;D~N_eOeypLKpQeZ?UabsGz-Ei*5*eTX>MHup`S z!1~qz^8-&WMR@q1zH%nb`h2l>dG6cgdu|53-R5eq+4a!LYlTrw#GvllHVMzBPwxfB zw|cKL)p%x{$j)kAtGp?5Y2gAL|LK0ZYbV;DYYJw1d8#!AYj)SSyItz;{Tlk-y-~kT zxq|auC+5v0Ywy610d`k+wP>Gyc1FWK<5BgE9U314A5={mlrWcAX)!x3A+0NX{v;9m z${T#@A6-o1W;D(I`D4h$MI(Ayo%`FGqzVK7JzqXsOgN`1V8O27ADH_vS}M$(bF6Df zr{>VgjUr#jSO#p0k;+ep`&OgGYQ$ zR8M%{27|>B8&hUmRRnXbU*62a)FBz-fh+S$}(8#i8wltiVted*3ab1E(?7=*rQq8#?e&5AiHDzn;$=HHB;^;-62=Z%n=ca6S9Ogxuz%(t!Qmb|oVmB0nUS7cmVmPgWo zCa25Ir|sSi?h%cTD4KPte<;;4`_BA@EEd<@cFlv@>nXim`x5J`g%r;hJS}}GICYiM z4PN~XhYV^R&s)oGdYGes@#!S?<=k`XYb@f!i;MX53J;uIW3c9{*dFb!>g_)p+E$4R zOCCDZwle>uqptnMyD83@=e>6!kqZ2j60(TD@LDot-M-H?0pGfz!T-GKj( z&2c?7m(4a984#CS?LI8}(|4o z=fj2DwV$&f_#pTp1Rw+<#y|)`2t$ZKh(d@#h(ky~jD?Vdkb;ngkb#hekb{tiP=HW` zP=Zi~P=Qc|P=ip17zd#Np$Rb_LJLA0VgiH?gf7HH2t5dW2m=U12qOq%2os1&5R)OM zK$t>Ig)oDd1~DDN9AXB+j5N;5QA>1K6AUq+wAeKOQLo9_@2H^wY3*iUh4}tqW03r|~2x0|9 zFvLoT5QtR}p%AMf!XVZ_ghQ-_h=5oJ5ecy#A_^iJA_igu#72l%h)ociA=nUGAmSjl zLc~KPKx~6ZgxC&|1d$Ap0xrgg6CJ0#OQa8sZGZS%`BG zWf12fxDe$K7a%S|R6tZhR6$fj)IiiiT!N^BsE25PXoR>7aRuTk#5IT}i0cqHAZ|i5 zL)?OBfoO%e4bcX12jVV7JH$PR4v0>O`w$Nxx*)nC9zyg$Jc4)(@dTn5q7ULJ#50KJ z5HBEJLcD@_4e<0K_|pL5LxU_YfZ-K0tL%tfq`d58@%AF)O35PQS{aYURDXT$|rfGk8@kwu6b zvKVnkJP=RB3t57ABTJEGh!5h6_#yttawGr=M1qhNNHDSz2|-pNp~z|^3|WJOBWsZe zWE~QTtVg1dXe0*NfNVr!kxj^EgpF)L;*hOKJd%KHLlTkgND`8aq#!$xR3r`AiKHVL z$S!0zvIogT_99sb2ib@0N3xLvNDguk$wdg{5R!)+Mvfr)NC8ra97T>H$B`3A5mJnt zL{1?kNGWm}IfI-<&LL&Ud4!9UBNvd1NCi@fR3X(!4N{9-Lh6uuqycF}E+bcvtH?E^ z3Av8kKyD(<$StG=X+>@$ZO9$uF4B(NLpqR7kl(y8{Lvu6 zi_j1{!a$e^3*kff5dlOH8G{HR!iWeWiijcNhy*egkwl~rX+#E*MdT29L;+Dmln`Y^ z1yM!R5Ori6qJd~4;}I=H8<~LUAiBszL=VwN3=l)a2r))XkV(j7WC~)6OhwF)X~=ZM z9GQX4L@W?XWENtD%tq!Qa}jG~9%6&cM{E&0#2#@#91$nP8F4`tAPW&!WD(+qEJoZB z55yDkLY5%j$Wmk(;)D1ieuzJ^90@=IksxFR5{#@wLXcHRD6$#}L)IYS$XX-yan~-c?}uLpC5AkyvCCvKe6`TaY+pD-w?+Alr~cWIK|CBqJ%v4kQ&xLv|wRNCvVC z*^TT$GLgMV7Q#XHA^VYRhqK4Te8DBzO@T zLPr<~6Ja5I2tOi#2qI$;Aw(DvK|~QTL>!So#v+o46e5ktAhL)YB9AB_iii@TjHn>0 zh#I1fj6*aKO=LWxg=ixa5FJDpnTY5i`iKEyh!`QphzT+YnT$+9Op&RG88Qu-j+i4e zkeP@DVu{Q`tdQBr9AqwHjm$%Akokx$Vu#ox4u~V-gg7HE$O2>`;)*On+>phHJK}+O zB3{T6#2Z7@lv5fwxgQA5;` zafk+@iHt|I5N%`vqJ!un6A?W`A2C1-5hKJHF+nCFlaVQiDKZr?L#83q5p!e)G83^t zERk7=6*3!{gUm&&k$H#>G9R%;>=1jz0dYi}5NE^%S%54=T#-eH8?qR2M?4Tu#0y!1 zcq2=ZWrz>ri})e_$Z{kA2}FXB6-Y3$5(z<8A)&}>Bn(-Dgd=N_2xJ`+iL6JWkZ2?Z z*???BVv$YAW`vDwLE@0DNIa5&Y(o-}?MM=mjHDntkW?fM*@>hh8OSbVH?jxGMD`+C z2nX4R>_@VZ14s^X5XnUd+(2$3&B!gJ z1!+ZYBW=hXV+(SB$PUJrF0O>-yk%veR@(6j1JVAPqKIAF#40(>cKwcuRkk`l? zq#t>U3?T22L1YMdk9Ssm5Me|F5k28`*-yAzP7nBmvomBqH09BqSM0L3SXiNE)&eNk=k}UC3@^50Z)OMY0eM zvJcshWFrTV9ONL9ix9{mBo8@^96|Dt0;CW*iX20ZBPWm|q!>AgoI*;FQsgvp204qI zL&}iz2p1_wE+7|?3ZxRLLaLD(q!zh^)FJgq1Ja0GMy?=Nk!wg3aviyW+(ep@TSyDi zirhxpkUPj-q#e13bReC`edGbsg>)kiksjm`@)&u7^df!8Q{)-)9C?AfL|!p#VEAMD znA01MEw9-z?hVtpi2+HNCv2yv9C5$@4Rai3Rlj}1T+D|l!t>)BW+gdy7~$L6PLm@{ zKD}YeNBP#oWE={Bu_cI;ILJuGnN2ZpUK#D3<%^8A1-(Z0&ndJhracv+| z&5&Y~DQDP#)np1c#gnQytN9*m#MCMM%sFHh8&X@z6vOn--e5y&GcL=8KjmIaW=2Aa zYRhsP?iOA%*lGbhwB+npgd2QLRl(0ArxI`-F<)Fh?-hb~T0hfY6-$l$`}BFEO11hB zYOsDI&VV0Xmgrxx3H}BRYY@J#;CRz{hx~}v>HSRoiOzPsG)X!&+Z`5|S@CS&TM-_f z)k^UD{ir4#{mCjbh)1xoYUKL&^vO1M!r#XS!{5hSk1Bj|Em_!=EOxM2dc6pZhi4;$ zhsSG6;6*L3!9UF8!tibP_Y@X8)@&i5Jqrb z=um$Q?+wd@$lO(Au1nm=T>MjcVb1G#x(MNE0|m)-Ua6JJ5{K=mfS5IEo#(gxTUmvy zkt}j%TNsqy4VyK6RE;UyN7lfwu*`OKo&*GwLs0%0DWIipsocHnOf7V!vLQ71c@VO96G2M*0)zJGV+=DZO# zIPk~*5}ee@b^L_kNpl*5tXm*iztb9y*LgS;qj$;mf)RBIoD@KX+(04|d%xubF$?~t z+gR-16N?ZlJB4T7BdWlZ|2gxHdA2Uu2)$Jq!^5*|)b`COBHOei|304slM2WYs#bq? zngOH~X!a!|iV&H&jNA;r`du!uuo+!&N{{^W`h4Do^CN0-U;+YZLT~n;M$I9mKx?Y_ zTSSmJ0?TB`Ev+JRBdY)A$`BJA{?xUcgLR`X{mmW2ff)+Kh@11E2-&OI)-??gu&F5m zJUpJGHnpj7L^T4ZFHj;^=>#bSTI015xg40hKy<`OZ2S0LRUn*>kKr6yJgQNp=D*eW z$@vYaMm=FZ0|gp?>)%{zjspp@lbq@Xn+7;@2vr^)mr?C`wvjb#I56wM7-Eb2pUnzR zt4un?;^8?Y|L@K|_<*WGPGlfJPK-cZ6h>k-+SeA<#bihj-{J4Tsq@6ePP1bhtib~g>7r2^AjTR|i@-@2sPp}4 z&Cd5X;mleE)6k5rAuBMl#zCw>_M!q)v=zc5b5&v11@iCk2n$Fl(A>oT&E+F!W{@Ly zbFWQqw+r;r3r-fhQN5g{@VA~gq3Z+_n~>|Ygp>kpj53)!XT)hl^@z;nQ6J7tpTH30 z6lpL72m{zp)W|*)QVO)U{t|R>O43r=8USBJ8MKeL2^b3>dH5ba6KIat15-DfArqj zK6^wJK60iBS?ak$Os17rnkB~5&+BhPga`C9ClMPL!QNw#&!K}M@H9r|Hd47$i5|=) zH~cN66ll8h$!b$MFcF0k;p2w6P?rdUlmaczh0L8r%|^j7bY%z<-!I{<5!(-*Z!M?| z*N8aW8oftt<21KX^BIG22u`?F3b&i1>i^d3_Zm@8hwO+jjB^S!?G;o8 zIZFknWhG;H03?f~lSL9&jVuBaU`Py)(%98|KIQ}EaMs<2?v8%2n-Vsn8aYRX4B2S5 z2d;O`+JAGI9HmGGKOyS*XHO|ZN`W?K{fL4bm_|d4Gce{WljvDzPU9o@meaVT%d4OZ zQ=kj(qxRNN^xwL2gd)tjK^+5KNGb645tm>M4xF^ju+hYSnWr$5Hje$b>KM+AIEEA< zvhOR6pLmxJj}+vFOkaWphvNSfOk_wBCt(@2j!H6DHswz)Oaj7znL6Z%8Qy=2*h5Nz zCXha&2yqUU$&<~ulDVO~M&{x?9x~)c=Syfr?1v4uhX(<#Q5&t6IkH9t)KDhd>w=U5 zZFcsET+ZtpxVB2tphE(9FwZEoKgb|jQ=56mGV*!X=Tb$9+GX%eM6Pu!uSrxY?CSAw zC5^sl6Z3`(Tl&Ci$m?J!rf56!$qYNuL4P(a22u*NiqB+*E%69GN>Bsj-{EuBH!|0Nnl0sjo|1b)+Va1` zmSw_jwi>mC&7&%Emi>f1qYcmVLMnKw<`fRC!g_oEr=BSxz5-?{;9UI$6*e2fjwWxB zkEaKhM;}gt24v znYCDccpWgcj06$e@C}C9zi)1ZdaFL=!v**n&PcaW2jikLSWJ1T%Rz^J+C#K>#YMbr~JFRh24W*pP`#o(9MOTR_8R4tmjK!C!bE| zsqcgR`30`d(Qgx13<=)we&&1*Ok5*KJ-Co3pm6xh@!z0^`u}YILn01N5nI9*s>zeB zhiYmM9fNH?3>Wl*QJwHIB|9;f1Jm6M58Y&qx?^V>haE-M=%pX-F zZ^7RhLd3ktKco8+NGb5b;eh{7BWL6h=YsBGg=S1pcNk4{*e3W05whP^av)D}2TO!1w^VpK7mWn?i^PPH$bT2&n|7*ZW0zxAZ^zF1Do+T71HAq=BoWTLYE zKB~?S7|usRYP_|WE1vJGLtGoPK2aKW*j6lx{nNJ{D6;|wewg|rZfy6v=N+fc&7D5Nstw1|;h0K`7feDdBi40gq9Yli6 z)x0yDTiMQ(p>_+|sNxo^%jg)+g*lN_{%4Qpk!5x~{98tV1M?{#k$5syV5-!`}>f!jjW{%-(8e$3%xsahocCh~R z@?E)br4XY3e#Lcf%!q1)QUcuU$*$Q#N`dxM{NG$bq6BiNzBQ3$CM*3d!_T>?!Wwz3 z$ZytZ9plL&Gl>K6MLTt6bNWAe!uOAJw8$K5LOAiy<|sl+fmTjsEGFlAk{~x?*KXJE zy>OL{hj&EZQD>Fe1hSRIoPJ%F5OF^Vnj&k2q^?`n4422XssDb7S)@nS2qm}m66`kx z8fy-@$bnO8&5|Y7v|pzWzb=tYtxxaS`wfQKsjwG=N3A?2M+!!d@Hweb6cQzl~BCv?26Bfu`gAcR5ULnF`|o z2d1oI5jl`eopMEFK}r9A3kq{!@+t*lS>Zhx;l#xMylc*aHWX+VgZ?c}y_U`H7?-OL zx8H8)<>-fz!Brz_a5BPJ;?#zbM{O3o_$knG!$uS#C%#f3bF0bRl650;IWPm3IHAAu z&qmCE6nvW&^S6i;aR8P{{QDhB!bY;lr2l=`{d;?QMwOX5>b8k5K`SqM=X`;!bB23^ z&!`i}K9+2DHTet@=P9rjf4+!?VI*KwvD<92*dk(G#-CTvNS89T-%xljv>7?7@aL^$ zVHXZeuO-eozl|lu=^y=5f^lQ`ngpnu3M&d9Rd;{l$hz*y(15CeCroz>KYCC+u!Iq4Vm zUGcuP*1_@6$vM!;(O=0+XAKvo!w($PGrJP`Q-|7qGQ*kEd;m_>3|KaNw;*%V4v@LJ z#B=yKmOMj#k{SKO85|uhOM+Ou7p`9NdLQ|hv!loV!{>&Zx(J1h$)*M%r9gY$IGkac z1z%&U!Vk(zPBbNk=fRLQ74EtkqjuQZYvi~vmXmWIhAaYVj3sNt2RCLp!j{+JKsTyJ zz|E002BC%&9o9hzaB$^(Eq`+*2?tmvMCL9bbGNopxkM^{WMJ0_Lzc?$cZ4hM4Cmq> z_418+F2ohQBbz84S!e>;1V{YWcj}p`tcwVSx@PpDE*9tAEItF`4t$(K4>je(k249o z{ryaBdU`kcQJctxkJIQPn?*Uhl0*%N=60BCm5|KFm;A9ZV{xH0r&w*Q!f?(S%%KGv z5*d(KOk)QUFCpPbpQ<9yshA)?j_^JJ&C_@_i0zQDr?HEPyO408&o|cO+%VTvB?|}= z*bakOn1gQwJ-l;>UGQ0&6T8bxkjQ|AQ|U+2|131mo->Z9f&AfG9A^C-F?bfB{>$gx zRsN@>PW>E3;%4rDC5fHzo%Jf4g9C5Em5+(5O6Ai_we>*sO4co8)%_x`1gM=%6^~@;FpiPt}p+w+rC z`TTipA}SxIGbUPKp*&4|Ht_}$^J#tsgy|vNNiXedII9-ds1QrwqaaZVD$_Emh!#kA z(L8twy*zAf=j&FE_@`Da;wXI7rU}m=S|MRaUmA9o^El?N2H{kQYjHV@YuVvOghIlR zHdmJrJ%W3=dvb>aRfIFIszVIEH~+IM+s=?hTxhpDhs&<)>yR97E*mP#(?bh$inbAuO5>yfZ+-UTV+Q|lp7(j*y}kSH?)UBPd|Yu|-Fqd%Bpq`4qb@B5pp@Dd zCDvcl&fvp5#U%Om!)plqSZCi-;&$cic3YKlZLD&SjvC{T+qJFAJ;icFPv;Zb^^I=V zV5d9Esz>r6-Jm~vBZnYc7~v=*___34eZy6<;YKvg~K0nm$s!%tFE8vag7xjR6pQ>QFbJtCm@7|k{R>Dq`?CiYhT6T-} zx-5sd9)%QwY#DRzmaFu&W`9&uOcuR+@gD-GsIy~ExxPHI?)yQM66L4_-v>{j@i?a| zJSOq7IKCA#EAAMX!nql{2r|T1J8+F)vGNUU_izo&d3pjej%w4u09+>sz_GA<9ur}2 z&;fdmj9r9xn5rx}XS0EI96kP+cZ_3LHU27601Xq3VC*-EErroM)nopFuop**5cpKG zE$TK8EU>!%Wx?q~6EgC_s|c^srR}5qq9{CyuL+!D>vcF-|Apf6IusLR$kI!5Ez{`E zxxx=aoNc`KF|A!ZTZk}%EVb?QLV@byndg-t-7ETfl_2zra zMyx$|EE5wf>l)MgqwM?_wKMdE|WcK;CE!F%b$L7{|WX1%(rFg66M8)hn8-6`$G|G z#e=Sa`mkrK96i$37d-{PS{)VI)D!zpG6S_S!CzW!xJzQXn*YY+VItmajzfLrbC zWh7cmO-COd5~Qkf$B;yP!jPPbjh``%oVaVqa#;DEA>NM|9&4s=(MF44IWF>%W#M&J z`)*dgp@s)*t|`Y{9BavkDgQ*(MEF{A`U}3?rXQVS;5i+^@A>#y7AcfpQo9e>EjjL( zUD>P@wba?ws^SPs_jp?b5AlX`8~?eEzPcTVBbcW))Xr6AtNc+);#GcMGIfNwIzLr~ z;PC|=w0>XcWX>u~Bgj!n2j(erh6us|5^2JA6axgQBB%f}&T~Ffoog2;sX z4$(3modlU;l?^e>biP`W&^J<6DT&$2me@Z+9QkEG&q&YA?C0@`u7X3^@~Ql2Rljl| z`%9hS zBMNv@pa;4S4tEzAqeoa$M*#-v__=Y^Q$x=(u|tN}tT99@-Tf>TCOIJ(z713F@k6A1dyE~9e;1r&h zP)3lZ;;)t&!;v_iE5vk_KC|3FQ%boJjY1L*b^jm<9qj=)L1K<7I$B}i(a8#a=wG|U zq3Whp8OWGXWjtp+2AyT26@E))unZE_$h^dm!PN9>ZmiUjO_I(%HKSMqfwV{xf8p9i zkSD4eafBdMjhoVJpmbWZ@d7?(fB2v$vh@j1t`BKNQ;YWG_^4KPXmO+I$-!0}CdyEM ztY|Y3da})kL>T7Gw`nBC01H4#>b z?F6}MO8d74%5HqiSjc6OJ_z97U~yOBM+BL|o{udAY2ti88a0rg|8N`jRvl2u&te@x zhVTl-io7I}>}1c)WF)H4`nbV>dyzDAFwxe!niFx@<7So10FlO`waN;(r*CDX+F*@RZy(=f{}1KZ!JYsB diff --git a/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin index 82f2fe00d5f2d093f19e894380473f8e47c56a45..7e4200ec0759eb7ecb5f7908a2451d481b5dc2c7 100644 GIT binary patch delta 137 zcmV;40CxYs!VAH|3$PCY5brKG1O{?$d_t?yY+lz5Y_lH%APW$@-3!hobp~(6bpl=% zN3{pDPYuih5P6ozEw?!4unV7NoW-3fld~%jrUek6fy+Iu-RMj-^aWu^eSFcg;T6dc r1p|lz#sssiCOQlc%LD)b00EN)$^rlY00EeT_A-a|G6A>tG6G4il6N%d delta 135 zcmV;20C@kw!VAB`3$PCY5b47);PIG>501YW~-?JYAAPW$c*NQ~q_%V1!;Y0Pp zeP;@@PYuih5Xy&4aSA3WEqUAfuKfXk#j`6ArUei{;4VU$$BZ`w{X<>BtU|c6;T6dc p0|JNwv#%yP3=hfz00001m<7uO00001lY{s&hxjr9xA-ywNv=d8Hhlm9 diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/RestTemplateConfig.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/RestTemplateConfig.java index c1e1a87..9f88eab 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/RestTemplateConfig.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/RestTemplateConfig.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.config; +import java.time.Duration; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -10,6 +11,10 @@ public class RestTemplateConfig { @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { - return builder.build(); + + return builder + .connectTimeout(Duration.ofSeconds(5)) + .readTimeout(Duration.ofSeconds(120)) // read timeout + .build(); } } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.java index e4e656d..259ec39 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/config/resttemplate/ExternalHttpClient.java @@ -25,6 +25,11 @@ public class ExternalHttpClient { public ExternalCallResult call( String url, HttpMethod method, Object body, HttpHeaders headers, Class responseType) { + long start = System.currentTimeMillis(); + + log.info("[API-REQ] {} {}", method, url); + log.debug("[API-REQ] headers={}", headers); + // responseType 기반으로 Accept 동적 세팅 HttpHeaders resolvedHeaders = resolveHeaders(headers, responseType); logRequestBody(body); @@ -32,39 +37,67 @@ public class ExternalHttpClient { HttpEntity entity = new HttpEntity<>(body, resolvedHeaders); try { + // String: raw bytes -> UTF-8 string if (responseType == String.class) { ResponseEntity res = restTemplate.exchange(url, method, entity, byte[].class); + + long elapsed = System.currentTimeMillis() - start; + log.info("[API-RES] status={} elapsed={}ms", res.getStatusCodeValue(), elapsed); + String raw = (res.getBody() == null) ? null : new String(res.getBody(), StandardCharsets.UTF_8); + log.debug("[API-RES] body={}", raw); + @SuppressWarnings("unchecked") T casted = (T) raw; + return new ExternalCallResult<>(res.getStatusCodeValue(), true, casted, null); } - // byte[]: raw bytes로 받고, JSON이면 에러로 처리 + // byte[] if (responseType == byte[].class) { ResponseEntity res = restTemplate.exchange(url, method, entity, byte[].class); + long elapsed = System.currentTimeMillis() - start; + log.info("[API-RES] status={} elapsed={}ms", res.getStatusCodeValue(), elapsed); + MediaType ct = res.getHeaders().getContentType(); byte[] bytes = res.getBody(); if (isJsonLike(ct)) { String err = (bytes == null) ? null : new String(bytes, StandardCharsets.UTF_8); + log.warn("[API-RES] JSON error body={}", err); return new ExternalCallResult<>(res.getStatusCodeValue(), false, null, err); } @SuppressWarnings("unchecked") T casted = (T) bytes; + return new ExternalCallResult<>(res.getStatusCodeValue(), true, casted, null); } - // DTO 등: 일반 역직렬화 + // DTO ResponseEntity res = restTemplate.exchange(url, method, entity, responseType); + + long elapsed = System.currentTimeMillis() - start; + + log.info("[API-RES] status={} elapsed={}ms", res.getStatusCodeValue(), elapsed); + log.debug("[API-RES] body={}", res.getBody()); + return new ExternalCallResult<>(res.getStatusCodeValue(), true, res.getBody(), null); } catch (HttpStatusCodeException e) { + + long elapsed = System.currentTimeMillis() - start; + + log.error( + "[API-ERROR] status={} elapsed={}ms body={}", + e.getStatusCode().value(), + elapsed, + e.getResponseBodyAsString()); + return new ExternalCallResult<>( e.getStatusCode().value(), false, null, e.getResponseBodyAsString()); } diff --git a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.java b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.java index 7756d19..c547be5 100644 --- a/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.java +++ b/gukyuin/stblt-check/src/main/java/com/kamco/cd/kamcoback/service/GukYuinApiStbltJobService.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.service; +import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.StbltResult; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctDto; @@ -11,6 +12,8 @@ import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.UUID; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -24,116 +27,251 @@ public class GukYuinApiStbltJobService { private final GukYuinStbltJobCoreService gukYuinStbltJobCoreService; private final GukYuinApiService gukYuinApiService; + private final ObjectMapper objectMapper; @Value("${spring.profiles.active}") private String profile; - /** - * 실행중인 profile - * - * @return - */ - private boolean isLocalProfile() { - return "local".equalsIgnoreCase(profile); - } - public void runTask() { findGukYuinEligibleForSurvey(null); } /** 국유인 연동 후, 실태조사 적합여부 확인하여 update */ public void findGukYuinEligibleForSurvey(LocalDate baseDate) { + long jobStart = System.currentTimeMillis(); + String jobId = UUID.randomUUID().toString().substring(0, 8); - log.info("[Step 1-1] 국유인 연동 PNU 완료된 추론 회차 정보 가져오기 "); - log.info(" learn 테이블의 apply_status : {}", GukYuinStatus.PNU_COMPLETED.getId()); - List list = - gukYuinStbltJobCoreService.findGukYuinEligibleForSurveyList( - GukYuinStatus.PNU_COMPLETED.getId()); + int totalTargetCount = 0; + int successCount = 0; + int failCount = 0; + int emptyCount = 0; - log.info("[Step 1-2] 국유인 연동 PNU 완료된 추론 회차 갯수 : {}", list == null ? 0 : list.size()); - if (list.isEmpty()) { - log.info("[Step 1-3] 국유인 연동 PNU 완료된 추론 회차 갯수 없어서 return"); - return; - } + log.info("=== Jenkins Job : AM00-PNU-UPDATE-DATA 를 수행한 이후 진행해야 함 ==="); + log.info("=== AM00-PNU-UPDATE-DATA 수행 내용"); + log.info("=== 1) 추론결과 폴리곤 tb_map_sheet_anal_data_inference_geom 테이블에 pnu 갯수 업데이트"); + log.info("=== 2) 추론 tb_map_sheet_learn 테이블의 apply_status = PNU_COMPLETED 로 업데이트"); + log.info("* 이 과정이 수행되어야 아래 쿼리에서 조건을 조회할 수 있음"); - log.info("[Step 2-1] 추론 회차 list 로 for문 실행하기 "); - for (LearnKeyDto dto : list) { - try { - String targetDate = - LocalDate.now(ZoneId.of("Asia/Seoul")) - .minusDays(1) - .format(DateTimeFormatter.ofPattern("yyyyMMdd")); + log.info("[JOB-START][{}] GukYuinApiStbltJob 시작", jobId); + log.info("[JOB-START][{}] profile={}, BATCH_DATE={}", jobId, profile, baseDate); - log.info("[Step 2-2] 실태조사 적합여부 조회 날짜 확인 : {}", targetDate); - if (baseDate != null) { // 파라미터가 있으면 - targetDate = baseDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); - log.info("[Step 2-3] 수동호출 baseDate 가 있을 경우, 실태조사 적합여부 조회 날짜 확인 : {}", targetDate); - } + try { + log.info("[Step 1-1][{}] 국유인 연동 PNU 완료된 추론 회차 정보 조회 시작", jobId); - log.info("[Step 3-1] 국유인 실태조사 적합여부 API 호출 시작 "); - log.info(" === 값 확인 - uid : {}", dto.getUid()); - log.info(" === 값 확인 - targetDate : {}", targetDate); - RlbDtctDto result = gukYuinApiService.findRlbDtctList(dto.getUid(), targetDate, "Y"); + log.info("[Step 1-1] 조회 대상 추론 회차 조건 : "); + log.info( + "===== 추론 tb_map_sheet_learn 테이블의 apply_status = {}", + GukYuinStatus.PNU_COMPLETED.getId()); + log.info("===== 추론결과 폴리곤 tb_map_sheet_anal_data_inference_geom 테이블의 pnu > 0"); + log.info("===== 추론결과 폴리곤 tb_map_sheet_anal_data_inference_geom 테이블의 fit_state is null"); + List list = + gukYuinStbltJobCoreService.findGukYuinEligibleForSurveyList( + GukYuinStatus.PNU_COMPLETED.getId()); - if (result == null || result.getResult() == null || result.getResult().isEmpty()) { - log.info("[GUKYUIN] empty result chnDtctId={}", dto.getUid()); - log.info("=== 국유인 API 조회 결과 없어서 continue"); - continue; - } + totalTargetCount = (list == null) ? 0 : list.size(); - log.info("[Step 4-1] 국유인 실태조사 적합여부 result 값으로 데이터 업데이트"); - log.info(" === 데이터 갯수 : {}", result.getResult() == null ? 0 : result.getResult().size()); + log.info("[Step 1-2][{}] 조회 대상 추론 회차 수={}", jobId, totalTargetCount); - for (RlbDtctMastDto stbltDto : result.getResult()) { - log.info("[Step 4-2] 국유인 실태조사 적합여부 결과 가져오기"); - String resultUid = stbltDto.getChnDtctObjtId(); - log.info(" == 테이블 tb_pnu 에 적합여부 리턴 결과를 upsert 진행, 객체 uid : {}", resultUid); - gukYuinStbltJobCoreService.updateGukYuinEligibleForSurvey(resultUid, stbltDto); - } - - Map resultMap = - result.getResult().stream() - .collect(Collectors.groupingBy(RlbDtctMastDto::getChnDtctObjtId)) - .entrySet() - .stream() - .collect( - Collectors.toMap( - Map.Entry::getKey, - e -> { - List pnuList = e.getValue(); - - log.info("[Step 4-3] 국유인 실태조사 적합여부 업데이트 값을 객체 uid 기준으로 DTO 생성"); - boolean hasY = pnuList.stream().anyMatch(v -> "Y".equals(v.getStbltYn())); - - String fitYn = hasY ? "Y" : "N"; - - RlbDtctMastDto selected = - hasY - ? pnuList.stream() - .filter(v -> "Y".equals(v.getStbltYn())) - .findFirst() - .orElse(null) - : pnuList.stream() - .filter(v -> "N".equals(v.getStbltYn())) - .findFirst() - .orElse(null); - - log.info(" === selected DTO : {}", selected); - if (selected == null) { - log.info(" === selected NULL"); - return null; // 방어 코드 - } - - return new StbltResult( - fitYn, selected.getIncyCd(), selected.getIncyRsnCont()); - })); - - log.info("[Step 4-4] 국유인 실태조사 적합여부, 사유, 내용을 inference_geom 테이블에 update"); - resultMap.forEach(gukYuinStbltJobCoreService::updateGukYuinObjectStbltYn); - - } catch (Exception e) { - log.error("[GUKYUIN] failed uid={}", dto.getUid(), e); + if (list == null || list.isEmpty()) { + log.info("[Step 1-3][{}] 처리 대상 없음. job 종료", jobId); + return; } + + log.info("[Step 2-1][{}] 대상 회차 for문 처리 시작", jobId); + + int index = 0; + for (LearnKeyDto dto : list) { + index++; + long itemStart = System.currentTimeMillis(); + String uid = dto.getUid(); + + try { + log.info("[ITEM-START][{}][{}/{}] uid={} 처리 시작", jobId, index, totalTargetCount, uid); + + String targetDate = + LocalDate.now(ZoneId.of("Asia/Seoul")) + .minusDays(1) + .format(DateTimeFormatter.ofPattern("yyyyMMdd")); + + log.info("[Step 2-2][{}] 기본은 어제 날짜 targetDate={}", jobId, targetDate); + + if (baseDate != null) { + targetDate = baseDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); + log.info("[Step 2-3][{}] baseDate 파라미터가 있으면 targetDate={}", jobId, targetDate); + } + + log.info( + "[Step 3-1][{}] 국유인 실태조사 적합여부 API 호출 시작 uid={}, targetDate={}", + jobId, + uid, + targetDate); + + long apiStart = System.currentTimeMillis(); + RlbDtctDto result = gukYuinApiService.findRlbDtctList(uid, targetDate, "Y"); + long apiEnd = System.currentTimeMillis(); + + try { + log.info("[Step 3-2] API result JSON : {}", objectMapper.writeValueAsString(result)); + } catch (Exception e) { + log.error("result json convert error", e); + } + + int resultSize = + (result == null || result.getResult() == null) ? 0 : result.getResult().size(); + + log.info( + "[Step 3-2][{}] API 호출 종료 uid={}, resultSize={}, elapsed={}ms", + jobId, + uid, + resultSize, + (apiEnd - apiStart)); + + if (result == null) { + log.warn("[ITEM-WARN][{}] API result 가 null 입니다. uid={}", jobId, uid); + emptyCount++; + continue; + } + + if (result.getResult() == null || result.getResult().isEmpty()) { + log.info("[ITEM-EMPTY][{}] API 조회 결과 없음 uid={}", jobId, uid); + emptyCount++; + continue; + } + + log.info( + "[Step 4-1][{}] API 결과 기반 tb_pnu upsert 시작 uid={}, count={}", + jobId, + uid, + result.getResult().size()); + + int upsertCount = 0; + for (RlbDtctMastDto stbltDto : result.getResult()) { + String resultUid = stbltDto.getChnDtctObjtId(); + log.debug( + "[Step 4-2][{}] tb_pnu upsert 대상 resultUid={}, stbltYn={}, incyCd={}", + jobId, + resultUid, + stbltDto.getStbltYn(), + stbltDto.getIncyCd()); + + gukYuinStbltJobCoreService.updateGukYuinEligibleForSurvey(resultUid, stbltDto); + upsertCount++; + } + + log.info( + "[Step 4-2][{}] tb_pnu upsert 완료 uid={}, upsertCount={}", jobId, uid, upsertCount); + + log.info("[Step 4-3] 1개 폴리곤 객체 objtId 에 여러 pnu가 존재할 수 있음."); + log.info("1개 폴리곤 객체 objtId에 여러 pnu의 적합여부가 들어온다면 "); + log.info("폴리곤 객체 objtId 에 해당하는 pnu의 적합여부가 하나라도 Y가 있다면 Y (적합)"); + log.info("Y가 없다면 N (부적합) 으로 판단한다."); + Map resultMap = + result.getResult().stream() + .collect(Collectors.groupingBy(RlbDtctMastDto::getChnDtctObjtId)) + .entrySet() + .stream() + .map( + e -> { + String resultUid = e.getKey(); + List pnuList = e.getValue(); + + log.debug( + "[Step 4-3][{}] 객체별 결과 집계 resultUid={}, rowCount={}", + jobId, + resultUid, + pnuList == null ? 0 : pnuList.size()); + + boolean hasY = pnuList.stream().anyMatch(v -> "Y".equals(v.getStbltYn())); + String fitYn = hasY ? "Y" : "N"; + log.info("=== 적합여부 fitYn={}", fitYn); + + RlbDtctMastDto selected = + hasY + ? pnuList.stream() + .filter(v -> "Y".equals(v.getStbltYn())) + .findFirst() + .orElse(null) + : pnuList.stream() + .filter(v -> "N".equals(v.getStbltYn())) + .findFirst() + .orElse(null); + + log.info( + "객체 objtId 에 해당하는 pnuList 중에서 적합여부: {}에 해당하는 첫번째 값을 조회한다. => selected", + fitYn); + if (selected == null) { + log.warn("[Step 4-3][{}] selected null resultUid={}", jobId, resultUid); + return null; + } + + log.debug( + "[Step 4-3][{}] resultUid={}, fitYn={}, incyCd={}, incyRsnCont={}", + jobId, + resultUid, + fitYn, + selected.getIncyCd(), + selected.getIncyRsnCont()); + + return Map.entry( + resultUid, + new StbltResult( + fitYn, selected.getIncyCd(), selected.getIncyRsnCont())); + }) + .filter(Objects::nonNull) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + log.info( + "[Step 4-4][{}] inference_geom 에 적합여부 update 시작 uid={}, objectCount={}", + jobId, + uid, + resultMap.size()); + + int objectUpdateCount = 0; + for (Map.Entry entry : resultMap.entrySet()) { + log.info("result_uid: {}", entry.getKey()); + log.info("StbltResult: {}", entry.getValue()); + + gukYuinStbltJobCoreService.updateGukYuinObjectStbltYn(entry.getKey(), entry.getValue()); + objectUpdateCount++; + } + + log.info( + "[Step 4-5][{}] inference_geom update 완료 uid={}, objectUpdateCount={}", + jobId, + uid, + objectUpdateCount); + + successCount++; + log.info( + "[ITEM-END][{}][{}/{}] uid={} 처리 완료 elapsed={}ms", + jobId, + index, + totalTargetCount, + uid, + (System.currentTimeMillis() - itemStart)); + + } catch (Exception e) { + failCount++; + log.error( + "[ITEM-ERROR][{}][{}/{}] uid={} 처리 실패 elapsed={}ms", + jobId, + index, + totalTargetCount, + uid, + (System.currentTimeMillis() - itemStart), + e); + } + } + + } finally { + log.info( + "[JOB-END][{}] totalTargetCount={}, successCount={}, failCount={}, emptyCount={}, totalElapsed={}ms", + jobId, + totalTargetCount, + successCount, + failCount, + emptyCount, + (System.currentTimeMillis() - jobStart)); } } } diff --git a/kamco-make-dataset-generation/src/main/resources/application-local.yml b/kamco-make-dataset-generation/src/main/resources/application-local.yml index 1cbbe32..891fb67 100644 --- a/kamco-make-dataset-generation/src/main/resources/application-local.yml +++ b/kamco-make-dataset-generation/src/main/resources/application-local.yml @@ -1,8 +1,8 @@ spring: datasource: - url: jdbc:postgresql://localhost:5432/kamco_cds + url: jdbc:postgresql://192.168.2.127:15432/kamco_cds username: kamco_cds - password: kamco_cds + password: kamco_cds_Q!W@E#R$ batch: job: name: exportGeoJsonJob # 기본 실행 Job 지정