From c905e8db77468943830f31a08919c2ece2239b9e Mon Sep 17 00:00:00 2001 From: BlueFox Date: Tue, 21 May 2024 15:29:53 +0200 Subject: [PATCH] Implemented permanent display names finally. New minor version reached. --- pom.xml | 2 +- .../chatbeautifier/JoinQuitListener.java | 23 ++------- .../displaynamecolor/ChatColorCommand.java | 26 +++++----- .../chatbeautifier/utils/ConfigFilenames.java | 5 ++ .../utils/DisplayNameSetter.java | 46 ++++++++++++++++++ .../chatbeautifier/utils/FileConfig.java | 32 ++++++++++++ target/ChatBeautifier-0.3.0.jar | Bin 0 -> 19108 bytes target/original-ChatBeautifier-0.3.0.jar | Bin 0 -> 18998 bytes 8 files changed, 98 insertions(+), 36 deletions(-) create mode 100644 src/main/java/de/privacynerd/chatbeautifier/utils/ConfigFilenames.java create mode 100644 src/main/java/de/privacynerd/chatbeautifier/utils/DisplayNameSetter.java create mode 100644 src/main/java/de/privacynerd/chatbeautifier/utils/FileConfig.java create mode 100644 target/ChatBeautifier-0.3.0.jar create mode 100644 target/original-ChatBeautifier-0.3.0.jar diff --git a/pom.xml b/pom.xml index 478238a..2572f41 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.privacynerd ChatBeautifier - 0.2.4 + 0.3.0 jar ChatBeautifier diff --git a/src/main/java/de/privacynerd/chatbeautifier/JoinQuitListener.java b/src/main/java/de/privacynerd/chatbeautifier/JoinQuitListener.java index 3d434eb..1022c35 100644 --- a/src/main/java/de/privacynerd/chatbeautifier/JoinQuitListener.java +++ b/src/main/java/de/privacynerd/chatbeautifier/JoinQuitListener.java @@ -1,5 +1,6 @@ package de.privacynerd.chatbeautifier; +import de.privacynerd.chatbeautifier.utils.DisplayNameSetter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -16,25 +17,8 @@ public class JoinQuitListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - Component newName; - if(player.isOp()) { - newName = Component.text("[OP] ") - .color(NamedTextColor.RED) - .decoration(TextDecoration.BOLD, true) - .append(Component.text(player.getName()) - .color(NamedTextColor.GRAY) - .decoration(TextDecoration.BOLD, false) - ); - player.displayName(newName); - player.playerListName(newName); - } else { - newName = Component.text(player.getName()) - .color(NamedTextColor.GRAY) - .decoration(TextDecoration.BOLD, false); - player.displayName(newName); - player.playerListName(newName); - } + DisplayNameSetter.setName(player); // set display name according to color config etc... event.joinMessage(Component.text(">> ") .color(NamedTextColor.GREEN) @@ -48,11 +32,10 @@ public class JoinQuitListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); - Component displayName = player.displayName(); event.quitMessage(Component.text("<< ") .color(NamedTextColor.RED) .decoration(TextDecoration.BOLD, true) - .append(displayName)); + .append(player.displayName())); } } diff --git a/src/main/java/de/privacynerd/chatbeautifier/displaynamecolor/ChatColorCommand.java b/src/main/java/de/privacynerd/chatbeautifier/displaynamecolor/ChatColorCommand.java index 59e7334..043703d 100644 --- a/src/main/java/de/privacynerd/chatbeautifier/displaynamecolor/ChatColorCommand.java +++ b/src/main/java/de/privacynerd/chatbeautifier/displaynamecolor/ChatColorCommand.java @@ -1,6 +1,9 @@ package de.privacynerd.chatbeautifier.displaynamecolor; import de.privacynerd.chatbeautifier.ChatBeautifier; +import de.privacynerd.chatbeautifier.utils.ConfigFilenames; +import de.privacynerd.chatbeautifier.utils.DisplayNameSetter; +import de.privacynerd.chatbeautifier.utils.FileConfig; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -23,7 +26,7 @@ public class ChatColorCommand implements CommandExecutor { } Player player = (Player) commandSender; String validArgument = ""; - Component newDisplayName; + Component newName; int colorCodesListIndex; // stores the index of the color code which was requested (0 for black color code, ...) // check for the right args @@ -122,20 +125,13 @@ public class ChatColorCommand implements CommandExecutor { return true; } - if(player.isOp()) { - newDisplayName = Component.text("[OP] ") - .color(NamedTextColor.RED) - .decoration(TextDecoration.BOLD, true) - .append(Component.text(player.getName()) - .color(ChatColorUtils.getChooseColorCodes().get(colorCodesListIndex)) - .decoration(TextDecoration.BOLD, false) - ); - } else { - newDisplayName = player.displayName() - .color(ChatColorUtils.getChooseColorCodes().get(colorCodesListIndex)); - } - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + // save the selected color to the file + FileConfig chatColorConfig = new FileConfig(ConfigFilenames.chatNameColors); + chatColorConfig.set(String.valueOf(player.getUniqueId().toString()), colorCodesListIndex); + chatColorConfig.saveConfig(); + + // update name (this method respects color values in the file + DisplayNameSetter.setName(player); ChatBeautifier.INSTANCE.log("Got valid color " + validArgument); ChatBeautifier.INSTANCE.tellPlayer(Component.text("Dein neuer Name: ") diff --git a/src/main/java/de/privacynerd/chatbeautifier/utils/ConfigFilenames.java b/src/main/java/de/privacynerd/chatbeautifier/utils/ConfigFilenames.java new file mode 100644 index 0000000..8f76d9c --- /dev/null +++ b/src/main/java/de/privacynerd/chatbeautifier/utils/ConfigFilenames.java @@ -0,0 +1,5 @@ +package de.privacynerd.chatbeautifier.utils; + +public class ConfigFilenames { + public static final String chatNameColors = "chatnamecolors.yml"; +} diff --git a/src/main/java/de/privacynerd/chatbeautifier/utils/DisplayNameSetter.java b/src/main/java/de/privacynerd/chatbeautifier/utils/DisplayNameSetter.java new file mode 100644 index 0000000..4816ae5 --- /dev/null +++ b/src/main/java/de/privacynerd/chatbeautifier/utils/DisplayNameSetter.java @@ -0,0 +1,46 @@ +package de.privacynerd.chatbeautifier.utils; + +import de.privacynerd.chatbeautifier.displaynamecolor.ChatColorUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.entity.Player; + +public class DisplayNameSetter { + public static void setName(Player player, Component newName) { + player.displayName(newName); + player.playerListName(newName); + } + + public static void setName(Player player) { + Component newName; + TextColor textColor = NamedTextColor.GRAY; // default to gray + + // get a potentially saved color (set from /set-chat-color command) + FileConfig chatColorConfig = new FileConfig(ConfigFilenames.chatNameColors); + String UUID_String = player.getUniqueId().toString(); + if ( chatColorConfig.contains(UUID_String) ) { + int colorIndex = chatColorConfig.getInt(UUID_String); + textColor = ChatColorUtils.getChooseColorCodes().get(colorIndex); + } + + // now compose the name (distinguish between operators and normal players by a red, bold [OP] in the beginning + if(player.isOp()) { + newName = Component.text("[OP] ") + .color(NamedTextColor.RED) + .decoration(TextDecoration.BOLD, true) + .append(Component.text(player.getName()) + .color(textColor) + .decoration(TextDecoration.BOLD, false) + ); + } else { + newName = Component.text(player.getName()) + .color(textColor) + .decoration(TextDecoration.BOLD, false); + } + + // now set the name as display and list name + setName(player, newName); + } +} diff --git a/src/main/java/de/privacynerd/chatbeautifier/utils/FileConfig.java b/src/main/java/de/privacynerd/chatbeautifier/utils/FileConfig.java new file mode 100644 index 0000000..c545012 --- /dev/null +++ b/src/main/java/de/privacynerd/chatbeautifier/utils/FileConfig.java @@ -0,0 +1,32 @@ +package de.privacynerd.chatbeautifier.utils; + +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import java.io.IOException; + +public class FileConfig extends YamlConfiguration { + private final String path; + + public FileConfig(String folder, String filename) { + this.path = "plugins/ChatBeautifier/" + folder + "/" + filename; + + try { + load(this.path); + } catch (InvalidConfigurationException | IOException ex) { + ex.printStackTrace(); + } + } + + public FileConfig(String filename) { + this(".", filename); + } + + public void saveConfig() { + try { + save(this.path); + } catch (IOException ex){ + ex.printStackTrace(); + } + } + +} diff --git a/target/ChatBeautifier-0.3.0.jar b/target/ChatBeautifier-0.3.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..ae5fdd93e515301c9980c08ce8a95ee1f5345d01 GIT binary patch literal 19108 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 literal 0 HcmV?d00001 diff --git a/target/original-ChatBeautifier-0.3.0.jar b/target/original-ChatBeautifier-0.3.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..a090f78f25ea8a8765f23acc762f116611eb4c55 GIT binary patch literal 18998 zcmb_^1yo&GvNi;FcXtWy4#C}BgIwG#c!CEH?(Xgy^y03;-8B$A=uf6+Ub@pg)9=mt z59_XbfL-;~_Fc8BN>K(392Nuw8U!TUqh1r_cMr_VyPTNn8+s{uaYn_LV(2f$p#M=! z7tZ`z@#Wu2FQ1pc{wyZOhuJJPW(b{WLQ>)o?#L}hMsn8WV}|HX@+%u$B{u= zj!sH$(xs$M`Am*ZW>n?O5ndU3fJSb7M1^UV6|&fYc63B)@=AJe7J)%h4$_isZ)bDo z703?>eiJlbvF;Cog1ty!0{DlBe_a6Sw*vN#7OsZI?zR9&liwB2`lZ^0e=clnZs=?T zFm!RYFtq?U{*KnV_>YoM{VlDrosEs5t%=irU_$n{Ow3#?e$U|78ZiDX0}~4;duu~? zTSFUwv7NQu@2m7HGxEP>_R=iYzZd7%arC40|7RT87`g&%e^>cm3;$^SUkaN582-BF zex;@VTUwEqjuif5NB%ab(_aQb#OPFI+Y1XkP!N!paRg#-?P6wO%iwNftrztf(N73j z%(LA{*cj}nl&nt}jrS2$n3*nD)iHfewEv!Z!j%81-pbF*J0ELQ_IVu11b>sSTC z?RZa`x792{Dg&H-;zdtFyW_rKdj{i+);W~bZBEn?m@prd2dKns z?<;OpURA#--y<2BNCsn*l}1E#&TsJN4K;`FrwK;8OCbdc!zMO~ILEY0j?i^SDoMdn ztJHIp@7k-j_I3@gxl+HoSTUQZ4uZEO)3EzFbANQLm6##c7(6o5CSRLI=eRF*8Nhu-l=J+ zZP&%f4VqzAmcYbz@#g{9oszmx;72{y4bS@3YFVrE6mtt*a#`m+%Wv$9P~^@WB~csJ zDS||_zQiTMwPX)UJF1PQybhvGJ!DsD&%wj#jVp``Pf4TfF0uzsxUo2Xy?nTB9)Jj1 zoevu&yaWc9w6qnZ5)zY7pb?@Q2CtT^L)! zj9ovT6Z6I#%)lT2Gq&p-RI(+dEp5n-_^~*YL}38`{BTt{EWcDUUP_Fqd6ZZ`Rl%Nw z5v%dVw*yIM%j4|_H#*d)@yrO>2o!%Kmx4*e`fM5GZx})8T`iv`tkGIfwxOlCKKR2^ z#gwG6)~Qh_4U~v0W7g@a#$%{_&M6K`n>lZ;QyxIop{p3mWwXVw?VFi$9}>(@$(3oz z(4a5Xq||x`E+VG!UtQFvKR#TCRukXc#+T zw4}QPPAeP3EBTTFV3nY`N+vwQFaSS)BFY%Qp922vC!-mu*gWYBn(nu3=$`5ms@rJn zJdBhKGxse4oB_^yPH2+{%#7kpLk`M7Z29OsjSMH2BP;;SatR4Z8H!W2 zuomH~GUA2JdC{2S#?QPg-)7{(>m0F5ic!kdS>evL9J6roh!o-F)Wg4rtDRPi#--Ah zPYMRQ?v*jYmtWIBpOhiDJ8h}DsTUFq6&!aRv6FXEWbm3ixI`ss7a=RR&zcaB!7I~v zSiEkSQ?L5;TBEu{KQ220m9T*CkkD6Td|33Y#Gx_gGY*D)gJv~Vd|EtDKdm?9F|3&E z$D`Nc!up5N^wlTQ|2FQe#S|2_adIGM;$d=A_-&K9P7 z-#Bq{T%eQrnme*q0{d-8>?2ZIm8J(6qf(j_wPrx@13j@XIahmDn&`OyX-KVlluMk= zF?KtB1ZtQJJQhEO#>cJEW6r!P(G+t)hj6zV*F=|3AIntTIm0y?%Zw9AkB?}AhwZY7 z)P5YOL?pgT#nzf$Ki<(T--ev9oREh!j3?KaQ<;4a_afI_m|)B*8vZu6#WUQ~`<_nd zd%Pzq^Q`_rDtpycLdCvQE!g&JqCf5g>;3HUzArlg#>-A1^55(P|J(!Aer*5$+6AN7X6W>3i_-HwQ-zmi~@2iCCrQ%R08 zN1Hu!`W3$Gp}5k3nlwc(I=YS6tn5k=ER2eN3Uj{KpnvdL6&#-1?K)LC<|)l!9D3HO)-PX1f|DmBy=Bk+}LplWSP^x)$b) zI^mM0Xoee4T781)F(M%^&gVC>JyfRSynU|U+yWxpSyGeciuy>wnl8B* z?`WJRq9K}3`q?2x#4OFDI|3$DMl}>}w<0GnleBQe&uGZ@pLZB5Bx;&M{{{2@z?EbFe+J6#rOmj||T>~iT#*MwD4%Run4=uYQeP4$CE zZo~?jV#!D9=5Kt>vafMnj1k?jVEIgR*O|%&3lvKZgGePIW?L{sFlE2j(CAJ?Pz<8S zOvUIXQIM9DwsZl_B8E1yZr`$sSZ_cO!s>isC6rgtF7KU3MT)OZcM;yoX3ZJ4ti5W2 z?ha%@Lc>7p@+@D%wO(z20t*o(bsPVf-lf0kkSsQ7^DYmL(Vk1`Qy@S@EBahbjssTM z=M9TfjVM(&gcwJFpR&Gseu+45qdH~|n=Q@Qn_}1Iwd#PgpSHk*t zOZ)IGExJe#nxA2EH&@07C$ObFOygdTdPDZu7DQ{_2i7tgY${qYXp5oB>eNM51qTHt zv@POzi#AepL#AV&(97v0N8gYXrw)de#PoG)BQ%Hv%XhF=vKC~Ui*0(-e>ctqReCos zePP}}rPFoVG2OT1QAxva#H7tQrN8kc2ujKCQz%3z+sB)$5#H*hZP+$>bUbEQ5G7JH zHO_K>1m5qHbnu;&#FtK@!D=6}$!;G&pr2#bC}!I^e7S7{)#|4)=y8UtPlb{)fWjJv!Uu#|4!2}9%pY?H^f2R_Pk9R~!boqa?jbOLV4 zy8&SozHGQG+6KqxOrK3pBXN4{b4-N2x!j<>V~&hSBB2Z(b*`|@cDCtdZ-Md(Il0B< zJp+5ZdkzJC2-3Ta^*K4Baou{?>dOhE=fGr#;;}?KqSmVNdi1l&TJC$!CIQU>|C=K~ z*V^{*kg{!DK9wcJ8d|N~G6&3(?4s!q2hCDi^=P=wu61m++$_iV{I1qgnq6uJKl-Nr zVeT90A%R7&4@tz=(+E3E{1Wych5PEL{Y)`4p-#?d+!Ey}g_B|}?{)KzOj!9Tys9Yq z!@pNWXGDEX$*_v3ASiV?8IQOu6RycI5UV!DvT_})@zK4KbM}hb!EITYg!LLms0+my zz6%{G9=n5lyv_0DdAJQ0$D4Rp0l_Q*)hc(kG~3JK^PtpkRqGw@$|sz-zBS`PVp*v) zbOX~;6+t4cQNbE_L{S-6#StchAB@BBkRTyn?z_n9Ny0<0HndxhgKMCZ+|xWt)?#_ zg4M&@KJz*=v-AP#b4hT-ckGuVPL1@!2>#t^A*UoO)4eu+6u$vQ3gGnWnxCax^#QmO0dXZ{UWb$IrMfemhGE4jpH6Hmuw?=fi@{`)}dG?iMz#UY{PIWGyV#|PB1lSj-lWAf_smB z-Tzc)p|#`DFF0UN%`ioau6D@?AG{U*J=CHkyn}@YhJ}kWUF|D#&{j3CrJkZpn#nD{ zJeNy03xMXCtsCc{)`-I{!E#|NOb~mlcUTrfI&3M&SXD%uy?MEb_V}Z~ZQTh^23mT= z&1O!J=$IYsf^t7v{&js2v}Nl?Ozq;i%~$>Hy3`(n(I?BE6D=M}18%jeC13hJ0vMfk zCm`Y=3w7YZLIn}es;rVIeMfO_k>SH0zR{sn7ujetAG}!7s=Nk;OrnAe($Fwz=D?s~ z_zbyQn61Yv0e;`>2Q5p`JF@Rb&se3XJNJ^ZeNDdhfk3$ce%MCTL)b>NYuaV8Bz@F2 ziSw8-cgFT2qwXnVpk`^ha{VUAMZ z7T=N&9Jd+#!&>#5Y2k;~{V}$?Hu_~2Qo(_M$o_wuiT|93>T=e2V(3ql?~k}rDXpcJ zE;(sztvFMyg=J(M?$DO=m|gB-JEr24`>tnJJ=%^c=A;nNsTGk?@wteV$Pp!p!BJ7m z17tu+xQIz!e%0k7cG&pP69|S1CDf|tX(18|DQeS}%xPz~>UpusX}4P{D0qk7>B>hW zN^nTQHefD_CUTD>FwE|sigRLr9xllZFX!J<%um1LwA|h@uPzoTRD`$eBK-mOEy`N*5dckBjizVaXQ4bC zt7>_m2M*qZShlX}lEv_tlLT+i1u4IjUs7p6w)^wMZI=pEUvMPrCF9p&ztUX#`H!E; z15B)eri*t|I)>)<5b(+Nn>><~_&S`dlN6%{jb33@YE<8|ouY9PP`cECSzJ1s;?ctH zx!-7obEA_@i}vFus6<2ryUn%DA#^f#ifd?&>vn?#Xxs)T6^?+jQy$eq>&!Hy`T}*D zvo)cl;<<< z;rM;+tQmwIO)rZW1~Qd3gB0K_+Nv^wTewx3vW}jlF{T!~$J09D@~h%eM4-}mHx<+= z*1$nV5E+^~^t)$dH(h|l)E_{sj5NE;4CTc7yB3|>aVdVpGuijn9$wQ@ajE^k|hEHYG1 z3uIQeYUQ42hz6BRT znUjU0$)Pyp@F^wllTHqcR-(0uT!K#Si5j4JOI(soGM2D7BUJO?d*UUk?R*&T$ftG4 z?8u{q@_wRF!@2klSK>IoCsX1$v*)6geD*!Igk|SKLTx8$9I153A#*LCmddMLLrwn9 ztFa{Q{5zuBhQQkLwBnn?nmcBe{>qqo*fCvysmv0`MYT4p$GNKHMfDOl8_i%>=~TZ9 z&B($DU#zNEj7AvxZ>aQpaa-RYC3992o=%GFdP`rjd+2!iA-88W_9o8z*&+8e&WD~( z`V&orWljWVPDU9pe^{%EU~b{UtMacmqO$5|n3ZZ=*M_f=n;!+v4|^OS9*KmXbo+>7 z#RPw>u$;B}Xy1I{=Es8j*7Jt&kod{&)!EsjYlV_M&1hVuOH){WnYhKh4xI`T1kQx|3Kf-{&!mQT0e;~)XhBODoroGk3_M#?3@#rtjI=zI z16&bSZ82xove#1P%i`j!x=nq3c~ryY@`8!T0A;{eAJ&^Rr&I2m<%`w};QJ_iFs6`v zZW5t55*kVWh^~5Rz1%yXCHZ!$L9H}g5`2R&e@^N&PS0@~E!467fIY2bFp!C(=sPZg zcLc6^q`CM6R*}jmu3SW_M|lO#ixJ(7QVG)2!o4>q=X_HO-W`C|t^HPl(!Y^waUx6H zPv1b6)rnigR@7#qby1rhnX~?FMr@rE%|0Bb1zuzj_8lP6C9Md^b}3mzTqxZ~0S}fd zKA?eCSve<{iOK9zyU<8n#$gpi@Q72uSTb$ADzp?NXE}lwk}{ay%08<9Wyzd={32mm zmPtCN%`$JHjEs0Z(ih&|2$>ligxJ|m)Ej5um z)X327h#5|)+pT9b8GE6*gRO@h?CKh9^oVgIajRST&cCZs$2-*fHB%cW%{pm9Tw&kf zBH_vSVVL#em$11E14%~dD#FB#Q^e$ML-xUHoKOp>qznzB-}KRw1yVB&<1AlfSiuBd z38n9*m*cW)_ngZ0ztSZ$&h~?)Gs4E5lr`{nnwjvnv`0v1v^5t{(XqOtF2Ku0$@v7} z^37&a8%c0^{T8JyMi>^q2xx>eN2}>)DP3#3V3{lKpR&$CqVr-wl_1OO9{CQ~PH|W{ zO^m4~CK#^L?SqAwGou-slEqrBJGNZ(mc8iJP>}dH zEaJWxr#4w7b5+F{tLP8v69oLd;)qEfhc$DvV5~ehP8>t;-vYtVm$y&2;ldIw`{RX1kgRkLa&l^>j4Jx*VQ070NsA*Qw8;nTU69_) zkd)6k)V}G`aNuJr zT8?X8jfi_S<{sr|!v}w2%EmmHx;lq`+}RcZB=(gjda> zU`Vc>TN-mOKbfhdhsAZO088(Ex%QHN;GSv%kAtA-(_N6C-n?8!eh+zz8un+6>tz~# zAQB#Xig*4Aa-cQlHT5kfq0zv4C{-c0shPpYd*RJe=kky#AI8Cosc=fz9yjvso4ey% zM2PTr7TGR~2gcV+&4>P%XU#Lx5_(;NRiRsumPUq1-n=DyQ$^D#j#?RSD(U9 zS!9n96pZ-ywtYeuzH!xawX+;FXzDwO%!fR>#jN42EH^07xZ$o9o=dKlgzu}?O4H!1 zq%WER02VM1-$<6pa^p#AFW@UtTb?Hz0cFpi>&EBN%vcY2r~g!&xD-uq?S z_4`eIEDm%NxIEQeT-t|tz#gY@Bcv*Z>TyHDjvvC)i!a(t6I4G#^Ko$Pn_;&Ja@~Yz zrQV`|5bPa>kM%S@j}g^BW6{Y@rqs}&)Z-en*HUm$kh+7_qvws8aYVk#$c)91X5-(C zFn1U|b5wfJjtQKG)$eB`lW1eG z^gwr1VdGNV1JSIIOgK5Tg}|OtEm;nO)~kn!P_#k&WrBNEJZ>LS9;+b-&g-qNV#g~; z3AU*qrWsd9pnHqDA~2TKLsMyjJujhv`f+Bd<`oQupLV!`th5wMy{q_D)B(ELEZsYt zjDyoyjqHuaghi4t_m-u_a%f5AyTkZ*T&wkRu(S0wQ4jEjFY*j*Oy?RaG_ zcpIlAcDn2v`2(Id*bypBwkjX?J()K`Rsz-{q>kn$nix*n%gsXC$xeK)zO!XC@ZT#V zMvR*YVz0Mq#)NPNw!njDk*W}qCqf3(t*pdNCIN)dI zIXr*?o#-C)@cPG*1^R#n@!U_O8_k$Lz_D++0rzwdQi;7)nb2GGK*Ge{>R4zrdZ2n@ zuOk!+rA|PqE~30SDG&oQyK84VK$}#y9(q{!AWcy!;8hsYT)w?93`&6(c*kphG)h#% zAh7`lfFn?m6kRL8w?ZIoA`!Y5^NnlsdHQ48eRHM0#O7X(843UJesO+bbjH!ag3vgo zhpTow2w`FH{V6$r<%CmEhTy~n%plJ;;bvpV_iJzKM$dpXN(b{`&$zXOzHGU#_#LBt z**eR{4;;xNR?E#ksp%qyjpKGsTGJ(-e7>_@@t&lJznSsoEhQ8IU!<85exp&O;0k{w#syN2GEaCu=|d=$p0%$B zzP~oIg#9)Cnu+T?;i(Wt@#n1f0FNmh`=#pOs#|If z2JQgfl~nDjh1gZb3$J2P+pgKwq18`=*Xb)VDbwe5nAVAiXDVLl@*7gTq4ySrP+X5) z-M0lFdS|UazgjCur&i_sOeAkTICm0@h~N7}@%5Adh~^XA|57~MAD-UaqIbjRTAgpn zkLXeAip}TwE?(kw6-326UqUCNQ$V_8Pw>bkel_TceAW>pv} z`*M3!nE;g{Ono5B1_m9Lym8NEj1QwZ~8cwl$|T_zGJ9l1u`g zQDG^vzet(up)Mu`G*D&hN$p3IU#g<=Bm~G)WKW-b;sTx9xB&;mj3TNue~pu!VXGNBZ=JsuCD{3yoOwa#YzlDJ%ctu+Mn=+U`BLw=9KBRaOT|rTLrp{e|eB zB6%3MP)}0yj!CK!?(`SmK^zo5WLqR+=ptoabm}$v!O{EpSDN zUgE{Fs4FLm_c#VQK*Pthla5;SLvIgc(p>RAzknvjs!i5B1J?wW&ghgtOz+6}h1St- zxMIQY3F}XE%+MikOkh~Z$U4bTM&=4V!X9wD@}5EesD-fPTy=)Mn1UUlKtP!ORtx#z z-|;VV?{5l6gqn>8ngqH}5I80<^c8J@rJ5y$Z|7n{LV{wcDEjfM*$Kt{BXZup=uzvj zuK_AP((lFZL3=Z%i6)+>D>GIX=%COiycRxRjI=qOdVg(WeQx);Li(U}2H*0j=2OFD z1Yr=|_;-ePUKNL99#_pp7C{*h#d+=BpN4i`<6P#93-^f&S_g#?m+^j?9gCcaoX3#n zmCHO0nQ+Gsn_{gkiVR?IP(y2H417$M^mZoi}uw-xdYnRwckK1n8GtK5JWnt$YQ5) z?Vy8noKsL27Z%`z5A4UcXJG?#druc>ARQ3p&oML*=x7a8Oi(*vth2}NHHHEU;+_&M2}fLdK$RkJ)BqPDa(g(SXC_=IHR7Ey5hA&nf5hU zYVx;bvkf=uV`9jd zk#6)?8Ylfs#MGj zy#~ac&WDyv$lCf<*PhZ%g~lkuXF4u1X-0Hsw=PJzP*2wE)~Bnj%I*&dSVZ>+6%9zD z+A9r$&$Nzot(twUK) zHalr{a`=ei3P$gO%v(vqs z6ZMXS(5XA*E&*NBYEGI5!$nVKx$VuMeNj zxawqZG+k3q8oCU&Swn<#LP9E^sINwp!-Tw<78bs{?xtR(JDHlke|R`Y=rk_VlFS+u zs*TW*gynjp>3mHqAwlbS?%Por8m}l$dzS9K(>zwecRl+|h$+eN+Cc2}D>;>EUPxKr zb`h=kNUF!2T8zLU#tOAK4SNwd$Q0Q+mfUT%&>=?NBPbSaCjf=={SX2{`lM+t0YOiE ze#{XT_-=vY9BAz{XOJa(4P^_sX!wjxE>znqQ*_;J=u6oZ-DI0LM7DTM##;<`5W8>{ zDzIv5yMnj2n)c`0P45Py+caEPCnDg;z*A&cc#tJmL>oTxnHxiQkDR}fVsDF>nP^1u z&42IFv7wP)2&<9y-aF=<3=fmNK^8Bhns4p5b^${}d^AW(8`*>MllC$l1(f|PRl&tj zlP7cDIQKcxpr=u*-P$|Z5g1vHtYygn{jGV;k6#i1U+S4cVfv2VbOG|y&R0fVM5tOa<7^=Y5QW@m~z>a%*BnnULx_7RLcON!8b3wD0 z;P%`*AI@5Xku(vLcHlg}gv=0+KYw?^;kH%634HOmq!~-*CxPxxiKJ8~Gi+XpOKj7P zb^UT8ie)k&!Z%b9%xoR*>9J;pF<1Lw9``F1YoVZ8IO{OYOvo61Pv__>x zU%VSgwVw&X$tP}}(o#yV44~8HPM3vjq+ndjI-Ar7#8m8Ub3to(#Y4rmI086toXVpT zj4wIx;U;Q8T+>VwSfY#446 zc@w}*aoFBkZACFYyoB-fw{2PlE%c(3Dl;9lt@0FgtDOo`GHXbaF$e z4khte5WA5DMP_b;n(R2yV7Gb95bp)d#2h_>QEp zRWk?kUIg;Yw}Az>si=tCP@xOqSfF)bygZ{5sNpAT%0L!&@8%xe!f@7o(yxil?1ffG z5QK7Qx>fzm$W*jWPLq>WSbJxY0k$}MDC7l5wyZN+L0}{HUgIqfTpRL|;*58aoPhm= zl7sKC8T7C_pg6D$iY(D)N-HHBg=zWD}}vH-D3w?v$aprMuBi0I9FX)uP+OJXwS z^5=#}P&u!o!%=h#w`b13rRf=kxn#keEk`J<9bFp2Z=q6}h&se(A6-$1N(y%}Ib(Ok ztE@R#Rw9ZO_nOFt@;HqyV_%U(TEH{{Mu@v6^a$X^q8+7AuTj1{8>mN~*DQB)kH|EU zZ5h+4PQrsfPy<4WwNtXuWahT2CoNOD-gH;J-K+>#u#f6WWdLhc(fbHc3{!)kjoEGw z9~VuQj`PgnhM|gKQO??|P;=t0nBFvXA!xv*U`!CAw-yTuQVSaXa#=n3Xq&m7KtcH- z?%gr~8>WvIA=KW*$=6m^l~F`RcKW+2N$U1)S<1+#9wJs{OH+Mz_HP~J&N{Dg^q4*=)T?b56G~(RLJJcZKS${Kc=C#{FH50PJc-%qp+a#0nvZ;iquJ_uTfIx z14p38JCZL#t+3*jpR%dYqY0%3}_jkZd#Rc)btP z_Qa?JavWt1Smucp#!yX}uYhCTQE5E~IQ=SI{^pp|89y5h?&|9Y!Fm{sZ29cu3?IkV zz*h)a2<7`gm;iJ3kFL7i7U8*IFwV+RykPR5kGR4Rv;{>ueX>piGm(4HE;q0)msI7D z9Y}I2g|rF1q^P)6QJ5+2GLYpWM4WKXU+EpCMy2Vw*(8F8d-cm3yo#U}`ngCUhjPb8-rC zxQA5>ZR1MG+ERr*08~;Q-(elRCc{R2#SZ$ zD8_IKPajs(9C8&_53icwIMg{!UJTk0A<9{nY?B0I$U6_ z0cUl*)h8i4vdDlS41!WkvUDC7N~<}Ht|gh`ovWVRYk9ibjG+R~cj{BgqOP7)@$%ET z(3ImkqK^tvuO7qfRv&WL$zAedXucbuBvQcpRlcyplzAoA1Q?8*TmG7i^V-Tir$uZCZ+{rj(MBi^)0iWNknN>0lwZ zJtmh>nqnOsLdF0$Q?H~mc$ZAuM^@r6MjXeS1GF1C9vu~CR3jb*(Ul-q8W#07ylg8i z2`}{}UEFG;0{C?%mns`d%=4U}vX)H_>r^(lmC!^T25YPjR#_)oJ(*LEyhiIncWTSf zb&$&B8P)(U1gX~+%9I|K^1hYOE(rd6XneUm$X_=guAG8S4*>V(1sU>NQFSclrfly7 z@4$}V-R%PrBly4Wg81Yp*%5vS;TwgAKtG6Md5UoLW~-Fz2uKKR1@caJrB*Vzg)bp2 z9{~-LxccHceES8i2rS-4X8S6%oS{xa(`T~alVR#2*|MFfaV~zNnv~d*I~SBR5P>$r zHlFb_%ik{MKg>KoqoMw(3#wban-)iIvx3^@@&hjn_#}Xg{BbJ)T009} zr4u`t5<31El?^!-HdKAK&x&!XiS{o zS-(dy%k?`T`@;sQ;tTt2D5kD)ZWDDY2HtD+U*m@{I(??QEr^Nz&M_LJQjY7Yg;ZbD z#i1x4HXxwnfK7&e4pg>v{R-Ocwz}Ki-hR+jU>nETbTX$`asLpgK>Q`eI5vPz!a=nw zDOBMbj@az>Ogp=ykH8umqQrnhr2`BXwKSAL` zzrFv)%)P#aRZt-YcVj&y3gdXs0oR&pbT=IW!*DSZ{@1CC*izVbW62YNFm0NqKy&y; z3)hCQ&v#kth~39y^ML76B`F)8#hUDoBMy8FRe<3-w+p{_zNWTF5fuzQRiY4QP4C6e zGNRFQ+|^Z=yDdF00-ypmj2ih|@Nx-UXB5~NE4`ho43SBs@o!KfwonLPyX9;`@c|}W za}x>|#@p8OTNvfHMQiRS5}y&+7vvzjPj2+g^P`2>J$ADL#S67A=9(}`Ez!~~(z8qw zu_3|M*lh8{WYj-Ejwn*+fwSe!LkuTxG}VoJ#w3!;)h}Djv8%J$9Xi#eS28VGe9rCJeJN|$ zrnQB$0>g82YV1aSl6*h|}?lv!LFFvmsR0yBqQJP8ryYv!Oj{bHW)#R*-xU#cz zbOYBz+mP`TVS#0>8=PpkwA>JkY#nXz$4yLOg~!bpv1eu`2fbXEbXSWzvrU^rdd)-j zxWuV}oGap-I?9P)LxQ)JuA0E{Mh6x@8(Gl_ z;0hyiq-1M!CuI+s0;1(qK7K)n0Wp^Fb~WZX#~Ady{(P>@ys_LdGmtR*MsN^1X&^*K zFv=(NtusJW;E?1L_FE`?xa@o6@n$6MC~0~6Ds#ukfNviQ5gueQ5nN}DPNO7uA)muO zy=UJhO8<)Lf`!z#$hSYTFPRjd044G<;9DcFBk`0onI>ndca2yTaI{~CD>Kt0SO#fr z)6o*|fLb|Z1kXguHO#~bVZn=dIJRu!(+Y)_kptZDseR@)(%SmH>ZSy00jij`4(O<2 zWvJraK1)g`jN>D@ym6ZLCOX6Pv`b6zN-w#$OM!W-LSy{B1GXCx;X2j>tJzt$uzn-9f#?UjH}-{^zjQKQ7jc_I5T5ZZ_8SYI1f@c8sJ?O326<% zIreJS-9ZTEb4DjYdTPloGYbhMgWo%=o&}^61ZO<-7>6k~rgJ3)LS!M2p z49cZiw1w$a8ICr+u1>xhJGQjE4J(^GL z8;S3YkL6Z9K-woiip0-{Du3 zd#wX=zWa2a@UGLpLUk6Wl8D4HF{9yj-SC(uFzgd__mz7ag-;+cU8r;co1yph&HM0C zOArxXL;e2aXgltMN`u(xaB)cqSbEBvaylm?)lvvAXa(Qzi67isdmOS4*c!n2YNHez zG({vWs}?4X-sm5zuGLlecd?@K+{&_@;J#MYb^NA| z;T;+bQ>V%dM$HDK=1m#s@TI9N4LYM-I7Hm{fNHiIUe}!QRu-PvZg92>qZ@TWVceGM z$VFi5i9D4ilffPg^90CQ2C@3xM30sdc+v>bY!kW;n@P-3O2KafP*$g!q zvtRfW{5pxU*lv-4yd?!{|3J}5?uB~d2)&ZO&J2p=TeRYRH^6+poTq{G8`i^C$`HYb z2VoZRFUy3uZpanFN9_pC2Z=|MO(9ceJwyI67MZoMh-|2W4es8NSI@ zyNpTFIlSZ>fPghAz;wvR+DXI&2~<(Of(>OEMvZ-ap&X{%G^89B%6f5Ojc^%$1>f`{ z7U(Nh#1pE)#@A4)5 z9{8^^9Q=d)AHc;gum8w*@Ke%X34X-f|MvWlbm-;vmq72|qy6wu|5x!J-#=pTe|vrq z-@Ls3LTvnUa5VaT82wK{{wgEFPhPAqMuz{)>v#DP{yozl84`Xnb^BYU|IC;0li{y5 z{*f`^C&T8yW%#GK`2W