From 04a4d2cdd6317e282a9218dfa2f41cbe21d03c74 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Thu, 3 Dec 2020 09:40:39 +0100 Subject: [PATCH] Preparing the 1.10.0 release --- CHANGELOG.md | 4 +++ README.md | 12 ++++++++ assets/frontmatter-panel.png | Bin 0 -> 60480 bytes assets/media/main.js | 23 -------------- assets/media/styles.css | 41 +++++++++++++++++++++++-- package-lock.json | 9 ++++++ package.json | 18 +++++++---- src/constants/settings.ts | 4 ++- src/models/PanelSettings.ts | 1 + src/viewpanel/CommandToCode.ts | 4 ++- src/viewpanel/ViewPanel.tsx | 4 +-- src/viewpanel/components/Tag.tsx | 13 ++++++-- src/viewpanel/components/TagPicker.tsx | 12 ++++++-- src/viewpanel/components/Tags.tsx | 15 +++++++-- src/webview/ExplorerView.ts | 34 ++++++++++++++++++-- 15 files changed, 148 insertions(+), 46 deletions(-) create mode 100644 assets/frontmatter-panel.png delete mode 100644 assets/media/main.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a2d8091..d7c6d201 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## [1.10.0] - 2020-12-03 + +- FrontMatter panel implemented. This panel allows you to control all extension actions, but not only that. It makes adding tags and categories in a easier way to your page. + ## [1.9.0] - 2020-11-25 - [#23](https://github.com/estruyf/vscode-front-matter/issues/23): Implemented the option to create and use templates for article creation (front matter will be updates as well). diff --git a/README.md b/README.md index 3cbbc58c..9bbe340d 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,18 @@ The extension will automatically verify if your title and description are SEO co > If you see something missing in your article creation flow, please feel free to reach out. +## FrontMatter Panel (introduced in 1.10.0) + +In version `1.10.0` of this extension, the FrontMatter panel got introduced. This panel allows you to perform most of the extension actions by just a click on the button. + +![FrontMatter Panel](./assets/frontmatter-panel.png) + +Originally this panel was created to make it easier to add tags and categories to your articles. As the current vscode multi-select is not optimal to use. + +To leverage most of the capabilities of the extension. SEO information and common actions like slug optimization, updating the date and publish/drafting the article. + +> **Info**: By default the tags/categories picker allows you to insert none existing tags/categories. When you enter a none existing tag/category, the panel shows an add `+` icon in front of that button. This allows you to store this tag/category to your settings. If you want to disable this feature, you can do that by setting the `frontMatter.panel.freeform` setting to `false`. + ## Creating articles from templates By default, the extension looks for files stored in a `.templates` folder which should be located in the root of your website project. diff --git a/assets/frontmatter-panel.png b/assets/frontmatter-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4a4ffb8f5f344ab145b13ded8fb3f49c4422d9 GIT binary patch literal 60480 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%0Aes$*lrC8gu zg_3J*dw@=Rb%(nAiBnr5uEe5})ws#%>I*;qO6}_Sdx)?wjY@o{lcm#!X=^ZPfvDo4 zRrpd?}~Px(O@D}C+p zp%yZoQ9eRC-Q7pdQ)KVL7F=*GyAi#Zg=x?UMsIWe$xIH%S zijbGtJ$Q0GW<{-7`_+D8+BWvCy>*1W4Q80t(c9Us*BFe(X;1CK%jRJx;;=echc7SwRwd0xALKBm7 zC@XbfUe1RyE$q^A8WNReEH!1v;T< z(H(ZBA3s1r?6j>VfAni>8>u}cuZoXDSZL9S-#PtS4+h-Op%Pj4U1|hewa@lZt$rbk zbCt|tsWtt+Pakpue}^_WIxj!}>XDFCw?6vw?5;PTdf%YGxe=8~oOKD_;0{V9Gv*$X zkj-)g!(n#b-uu|Hxe}D7u6d}-@zoC(4=Mrf@4#@tK{NgE4asEERXxM0K;ePvwtO9SHEll1G}f8w+Yw z6CJ_73ia1i9zn@n569V>4C&~UEs+}*4(pbK@e{Z{@t`wLw5DUi&|unP*6HNP;c zP3DmO#h}sQ76Y5!=%Vb!QIv%HrCk#1703N}@9jl#<^us+oZYS?WsuD2SPrD9@EM&i zzOg%&>?d$pBre=R9Qiy(&UD-psSB#i?H&}lobggfg9*H$I!`D%ffP6 z!BQoBB0rokjUH&+5NDHb5LcD&PL^-57`b5pB>?F9GbKfmtlR%mcZXXR2ASuq-oMj40W`A^WZ zpVwYl54)14sk0mbUURI za#YcSg-PnA3_87|)*3l=5njWE_}v5(_4Y1ifaV=<5)Gx9Q$be9H8Y%?>5DqB=`rr*tVy{n@Bmmxk0YDV7nN<^Kr1}Op0jj?jBb~^= zTE40-c?c&^(y*8ApYuWQvh>u2o(ORVqv1s`T)Qd7HdoMEMC_;p8Mlut`6}J}T|zfk zibpHrH|B>eIX{m)8Jtv3*yG+WddijKAvo4Q%-c~`OsYR~`QDw2?M+B@!Nj#)bTx1` zGibrYmKZtnUKCuptO9f%C=@VISQP;)?EWT+cxs9k2NDqiUs)g}pQlo#7i|>Q=OVw1 zi5OrL(5c32+y7D}=$_ayB?L07M^6}=)@A&W>bq*`U2xpF)5uyc^IDv^_kN{LFtWh0%*gvm?;#fZMl3( z4Bj*G{1@P*k0l9o;@Pl+bm{;Si}=;y%#1riUaS3)5}*X7VEV!y$5O~F=jjcCS#}0( z5(Jbgv}iDS10L{r6Un}Q@*X7wX{e_=Jsd4YT>G0KONYvZYq^RY8DI`ItyDhS?) zl1gD6075WV!z_BE`yV#M3T_U&G_U>K-^5EYGFggC4C+v*lAr_m3EJ>^b=tiRPuG38k3prt1O07sej}* zP-H6-q@N6ybJ_A8KCZa54xz4&CyR=#maC;(J1TN$N7?$v%j`SUS5r=Z>B@k^Mi{^s zPhm+QOpnvwel%A>$71rUvIuZP3|O~#8Z6J>5;s8nm9JXC+4lutx!DWVqtmGED=-L_ z;&a$pH&A#G{R=M>fGWQ-%Qgrtmm8~kwaICwzsAS;N;OM-v9lJdp3MM=d<0F>__2=x zvl1ICuzBmJedTp~Xn(U6z=9KaXHr>GyJO?vP`z>>5)&~odO7Ox@ThuFjt1i|XYXfc zU(&!JJZL?|p4jEe!+LQ;6BwyHWA}5^Qy1P6GC(rrgAkC3O3CAmNp6`KvLKVLz^O4YOqX5<8(Ys-t#{U^4T#^ ztVuuo$Y$J*s~h%8*HlR22}EzC>r4!IOJ*HI-G0CLp1JV*_iskaRj!pS9L|WOj4{RX zYjx`s6F%>=qPaPZi#KN1-}lOlXX|eO7-HnW`35`hzyqCeV{L$z3Z=20{_W7yL^Mrq z^12KbBbxX+Z0EX;z3Y-ZfZxm?D&j3g6!nE5bGQW%QaK>QWe|YZ4WzXSgK;^-bd{@q z`~YurWUfzAZXX-z9~}AtTWvQ-F{XcDQQ>1#*xI(a0sl5sdJAsSz9mMXb7-#WJXCg z_q1f+D1{ePCkg+{TWowG(D|G88t!#}F>f5M(!=iW`TdT+Gl`5slb|7$%aQ-PIrpcy zHLXuub9gZpGcaNk$>{~j&Qt^P3zBaM8Uk;tPwT27`8oDh2?F%(C$ancMqRNCOsiq8 zD(qu1say%>RtGyX$>gc1P*m0#s_IF{k5 zGnqjS^#qiad>rd6b%5Dotr)F_sM4a!#jlv{p(Fu+ZEaOjwekz$syl=8ogL<-`P=Pq z?+2#UVe5&3zk#e*AW8PBntd<&Nr~n|aAfxYr4Uz0ZVIx59O_-6-Y~xFUpHKJT-0*R z9YugYxT1QFiq0uj|Vbv zL&b_EW+gaxl|xXolsCi?k4>8C*c}4&24)-M@;1Azh8Qgr1M*n^GgG8UGCS}xRuNld zEM3cHW{jKWS?H1UX_0)@=6xtiv6$SKQ zJ|FD}V6l4g5R^#)=Z9`@o!A|YRrrSW|8bAgp}(aR>7|!os1TuzmxfFU>plxYO_wTgeq6~K8Kvg~*w1=u5T5xmbTHrqOD^gS}Fe|a@d zuLM+3ahK@KT5Y%AeW($7+Lys-RKo@dn)yq)`Gb*u(85j0?z8S?!+>?$0VtVM#|auX zL9sOIN)uz~mF@98Zf|??fCv~9k3|s=gdcn#RD+$KUbapGi%K>k_n$~+i{;NVhD?{c zL=jxs52XP4X}V%AozwB__tC_x31*|8ol2_-S}sMWdmnLdBubX(vPb`BEuTMRUR*~c zNH@7&A5+X}*oFb8jf7vBt{I-sO*}UMb7~miC6f8UpiP;E!qcf#@+p<7WX%EW&N!tq zHL)%qh?5%~IA?&$`^s0Lkj?%<`2sL-icA;3b+-X({=msrQZn>cp{zi&-2tK168>i^ zzWz|G997+?iDVWDR*PkFwl%k!=FtZ8B~svM(9C1uK(`-k9-!b|xPf(9iNG6f1A1!~ zdDtCGse`*b1z6v}nK1S3!;*^Gn^z9$k;AkUn=!h|mC@GWOo;)I!HTg8I6iUBnLwvayEPDz!0%f+rbbP|1)OxcJ8d~TeyCjEo5-Lu7>-j&PK)f|L#zGRYK2Vxq^qlR@KnhPR2I~StNDyI1Dc8qi_&#pIcDrW>Z z1hWm0%Bs*V0YG-eddlC0)8!h1Nk50mubzj8oRo62#@>yR<#9-)f*S$1HX2eqG<&MMR zl0Vq9pG%Dj_^cZ&*R%lqT!sg-$GykC{Iu`%=V)$1sdC@!@$qtEs!~_LeRcb6zA9(g zVaXgwy?zgux!4!wdp$RY$aU`ZwE9WFABqF%tM{hxip!sUU9z6&e?SOWj-8WXB68)* zY~3)uM;s;EZ!69AE@qS2eycq~0DtC}0URtU7zB)WAAmf~isTEz-L4l59sY2jejfhu zdTI!pCET{va;@E+0@Vcgod?L%V01pgeJel_Hi_Ee-iOQFk}X!CH~|U8WtSV_O9NP) zhgGd{RLUkUuaSUp&a+>(;0@e2%eF2E?~OV>*n#VG33P&-_&0dH1=82W3FiJU>fSOc ztM82h6nqho?k?#Tkp@WtK^mmHq`SKj=|;MxLmDKdC8WE%QyS**Q~zt$e3+R}v(~J| z7uK8i-uIqoKl|BxpI|id*D#|2G;L&0K2Or9ilnX1)a5)}ZIS?TLr1k^eXdBE*@1^A zyHVGLU>8$=Ks4iH7$;WMHpNmJzmLh_$xCUZbqj9d4L%bhmN&?P$ziSQR*=5wf~M4q zz69p7zFBM5p`$;rf>fxV2jd=#GmaIyS_hB7hX>EnM#i_o22!W{9`^%7SN`%y;0^u< zP6jn{Ycuj;M7^vzwDJv1R<@r>8~cQ9j$J1lt83QBH{`fwqOuD>n!VrsJ|6}i^fli` zUH%>sj}PJC+qdpsp9|8|!{zXuIeKb{ zAn7t$s%cuF--ZEk(&e52s&I0!_SL-c)9z6Q$m0edAxA(bm;d&t!}j6sV)n3_^~%QA ziCo^jJDjM}ep}w7QlsA1)qZfZ%frg|s}n#+A2A?4)}lJU{tD)9sU!QZf~Fq2ul%W@ zWo4xS#cJ)OkA_2I-4my*MH?*8eUgK#4VLhhy@l`Uhh#bkA%qIWOND8iHd)U?xUeXp zyLIqtfgiNHgM})5TTi;b#$vXH=|dUz!74K(xlMn`UOidh6{NduC&=vqtk=Wh_Rer~ zFr(wL&v>Djn~r>I=Euq;;^>$T>@SS}_`4{UQo$7Y`#1O=BFIOu97$n0X=tQqQeo0( z)n~#j#|N&6$`WkoJz5sO90I{SYUrJi&kIum!H>XEB5N4IwTKESB=aRqeVUCcw*lM( zlqw9J(_D6GyB!brwoduk3}bCHmUaDBb<5B81rj$=Zvz_ye!9)~cjL0>6(wO!MWR@U zbU!_}^C~-?aj{(J{i~{ZC_y<9p~e`?Tmg_z+8*w`dY zR|i!hVJ=ejcLr@oxWP49bP&X$v0`9&TFbQ)SYc-6%X@jTT3R=MnvI0}f=0E{;ET(A z`a0Wxwbz>-YBHE=(yghF0=hg_0fR;%fBb;43=G)kFF1%MtV}}))~`&-vXP8Z78hM# z^8b4gos}{%nn%EvRb9jA&U=y96zpk_sJar$hlYMeBAqpf;YsSwAGu9 zgp>v0Z^1Ws95I2IqjILdaCGS@6rI)o!xNYycAiog{cV+e_C&xW-SHZ~_}_b83Xlq) zHnF;mSAv@Fwk=CC)5Y))?8ZZEb-y^NNvh{foa9L*=Q;A|T$JOSg9`BU12Mv1fsKzW zWn};4I-`Qw5@>(r8&g+^7e297(EfcB0qA>-p2*p`rh^U?{#dZ!?LJlyn48zDu0W>b z>yalGPDl$1(a0Il+ACjV-UFBGdW_7QUmnHU9_LE)6Slx2*g*EIChEsCY=@mOma<5& zR!(g`4u~H0JwPEIsawmn6vw2g=4Gu_XRUjKzm0_ddicC@(Pfj!Wi^aL(T04{<6@rr z(d`_@7Ypz*tc|!3F4uH-H287M@OhDsQgp+ud|_L z27rLfolBU2zUe6Hfj{wKVHy7|ZPOb|;Z#QpS z1uDMn$=bUlUYE)|ZI|^pN3E2qkH6ZRJ$FlL4M1geMe1yEIW@Y`qDUiU*KPHNy4Jrm zghd8g-?&FN(EaVHOv28Rn{LDj;A84@@;9Mx5?hYi5oR3ik5XP4{ls;-Tn-xl?B~i0 zmgdKjURYg@`7aB=PNfU})1wPjSBz9y)OUQ&M8_@$^m#MARQP+~La_u{;`4zH%3lkiFNJfyVm11S zY7Y&>j4@f}O*nmoZJ|zcHbJdCtfpf$N!$*FmYE@5`v2kh#|8uMlwGIv`)@U(P4>z1 zG%^gT_o(I^@Q>spP$Rw{TGn%th@p~7N#K=%^#PuH)p8x5VxVMJ6|P{jTF?NvrYQH( zNwG1MUe-ZSqF(!f8IG55OG9_7eLGzHyKA*$iVh!#>6kc=I(VBATg&=&>_>0;qaDQ6 zW32}bk44YFwQ;3ccpf-*6x-4Pm;?T4hNB;sGbaAjuokT^`-M^X)`TE^Jiv5u@&iK# zjypJV*0NFRWiF}>wq}F<@f9Bv%pc`UC6|wPs7o^YJ#dQp@{e6+Z^u5`B*2V3@15+F zsNhmWF`9}sE(wa54+r!FIVO?smF4&I59&$JD!*HokUOI?gn1tW6ZQJlX8NSFA6Pcw zi>E>0LeWYWCyT*oo)q`%?Y!i%9Vv0~VKc&G z;@C~ag)JIR&H1A)0UIERMlFWxd;p$~+2<-&w>P_wsKqL^0hray-2LU|Hn^P4GNvMc z=lx)Hl?vs*{u;FpVtZ){bu}U$$~KtHF*MjSzB{cdOrjffNulMa)0W04#V z)zSu0sm>{U$uj)Yr>MsU#H{Rl-cVMDQq@N}zV5Qdg9gbjY-V|rG*7Wh(CmL4A?ZTl zfEg!^)yPM4u1 zV$)6QIG)bC85d^qO{y0peV7W>N2kCmJ@xj*Jlx!d>>Mg9ak!m*R*GPdQlX+?Wr&-1 z<~y1FEe3*Ah?C$Zqu2fILGK&QY<+8hTur+n!mPNjys^B14{G1AQK3baZ$7M)@w@PsgQ(gPFq4@AS9x^3~7Z2{s!8ImFI8sP*_@C;e91h~}lSd^k{LB_j(wiio)VUZe z!@jwOXszc{`Vl6i_^}+^?}OQ1TH0>fr41qg5=zj>8J7F$5btTI(P@qjOMp3u-?&Dm zkt_ZhhzqL?W7whY?ahtxu(bQldR6}tW_81vnj5+0{ z)+|3t_q;ZtRVs|7dnpnjY}4`F>!g?Z`-fSTp+Uspm)%VsbxUZi6Tl*8gB+CD6#R@s z7~eS|$AX|@qpzt$ z4X(UjqFP4Dx_Y`N)A7<6N8R_ju_%%M@TH3!KSRs&fM{ZtqVKtz)3WZ*BoO5$W!Izw zHYL?js{%V!mPSf}NMAI2mCKyU4@O6aY;{gEqlr&-^WZ9F(i!%L^7_8}L`uhgc&-Xs z#h{I)Z~)+$e5|QZBU!9yg3Fq(B{UN_gRl%H7`xR*RTeNymFixH>CDX*mj|vhJSu?o ztAeq+d|!Y#f(lV&FVLL*PAqYW@2-LuXv=f*LuPP=zTkmItZ0=0^wtt>7?;Ro-h zmJk9%0}+#C?hLz?P}6_vCBPpC&k|ZHLAc1G@x8We!fh0Kl$14d`|b23WkZGaLeMc; zF<%$!(!kSr)(Nm^YC90qh|lD+QGKyyB61#N~eS@`9nrAP(2YucaQ0LX@* zD|ri5ebH~Mk}Y^Mhbwll=W20r0?aV<%i*ZnP0dukKJ}3ZmS>L|1?;@68A_?lPgw05 z^CU;eZJ5p=cgpgqk^56f%yMHJv{-rac4UAI{WSU`nt_vohMHDF48iZiR)`8M!nX5^ z3fKIxB-C9+sj^tmi^MUPVU{giA*|ZU-HmHz6k3q~p-j9PHlgY&FY2d{#iP?1AUsl1 zh0cteOartzNIwBWnScv<52B=x9=MA~D`E{zeZ>vGK@*(l?!@H7ZI1OV@%<%>;G7;c z-};*S(i5+~CgLF0a?X_^5wORCf=ee%^Sdhc;t{wtYU%RX)7XRt>0i)le}F-_Kv`dS zV;xAk)UQyE9WTlUjL-Im3z{tm@$WiciU793;ho&YN#!;E;%sqQ_`c|`X*-+?_WH%4 zLNmmhCgAqGz6PawarNS;*78VRR~-I?NF;P0eyKRpKE)=Muw(OnJFW6oBF!o-X|MVTC zs1fUwHbF()O>BVGW5tBPc>?buKC`dK&*Q}?G<%R^`gCyuZX#VwC*KZ@nD=mxVYQ_V za7n#s%eranphl6thKEqh5cUyxSyyz70S-pVrQ?M+TLAy-jvy4LtEX!sh8tHeEPe!| zHJD*BAi%M+`&65%>lq77x9Gq$)y!qa_yrM9Ia%6(bO!v2`iiPknLW zzP&^ad>=W9SAr~wweP*s);u?*LBSV2(Wuj@cfnmuI}H3DkFeOhqDH)PW)sY4unW-a zc`K-(=EhZiWA&HmRp7&ET&XZkm~TFRwq>ptLhksJ)i<0vt?ebc(K`Vj-#BL9ub#!i z5t_e_h|2eh6g;oDsWn*+e~FPO4PhUgZ~YQxw9lWt1=jg79l5>naC>)*s;jb=`w>-Q zT<%Q3==y_6Tit*#f#8u@#Chku6V~Z#>3vD5rOM7T9=P~t9-t#sveCmQj(>G7meI3> z#RBbg3*waQX%&m(kU7o)^9d6|)JJd_AQbeYySqpz@a8ulw#Hu5yt1b%M^Cdm#ZxJo zGIj$F>7AKQm3?ohr;2FHf;3ZSDwWMm2>Kl~1jK|@lMIU?(obiCbn)Q01^!~a9mL7Y z`@0)9B)917RlT`!PLLt+q5skQen%J>_?{OU9fwgZNBx@~E<6#ExvU=<1;g?V)0Vi7 zD>0{UStF?@yD|(&RZwAXRE22;qezLKcPR@7wbNK4+O*Deyo70@kaaA-%`nJl z(xvRkvZupT`6P=z$k(pxqW_kc#uB2c%kj$jdHE2#Mzb?XEcQw3TST9AxZHL7o9mfp z+6#t#(B$@s<&=!Y>Q(SW#P&~GhiNPsP{$gbtTf$PJ#g6UKW04nWmJX2N;b#yo(4zq zGRse|8EfUuOHK3;tW?)8I1F1j( zRn=#h`Z1k?f1|wemE`+1SEKLDvWG0C9~9C6_>}pF~Pm)GI}9x zMqhoh#Kds|l3;d;cf$xc;)94?#jy}IdH{b}-J6A-{OOwGz*VJM6i=stRAW@!@3D>3 z+9Z@9!v1Q)5laOrwGW*ZI@(Ln_AJLjHusP?|Fg*sFSfqePgI;u{h4SWQTAK)Bj-fn95zV8!4_ zOGn9N3A^+EkS&Uv1y_&8DqE7=U<2FsVu;B@>f$_uJ(U?9cJyU-t#Bct)OpiUEJ2nsfLEJv{&YYD0?_Ka=3(;x@rI zUoODSjkAFtGO2w$e!6T`FFRqq-65=tSxfsg6=E+iO#7-ILtmwXHZNvVzZV_u^y9BAOy$qX;C{9< z*?fh?MsBMs#={V`#?JwG{rXMaHEX3=3iIIzPTn!Xf;W(fY)`RpQv_cI)~VNt3x`70 z)OOZ7FZsY$F&gy|9^_NWUg8#scEg`m-C-drlQu)i-QcQs->(Os1-j5NqjFIY+`A!tF%tEbo2SAtW0f{)p0(FoB8;PnnP!;GS{!6H^PmTDVJ&C z8~gC8IO3vh*Umd8rv_0!9*-1hpZvnRkG@xam@@;%T5hYhzthNV50}!PY_RGV;~Z=W zz;{(GBfT7ro$K#(i-NVh9E(l6u}do*bxp`Oevhv)t)c>R-p2XehEZ6seI!5`YV!bk zeZQC6X=t;lt2~goZ}uuQ-wx3#gTcPIsY2KdbvnYvT4nojF+3tet!o)u?x0vv^X0!c zD&~$1b4o8=(_&vR>uQ-lymCvOXq2Z%A;K2v(&xp~KTHe((Oj(ehXafUWhp7sbN70VsgSHF}*(v4c1K+2Nu#j<^q7*s&`hYEPFBWDfVdpD0Il zJ{o?s_>?{Pe&*t&qy#Yr9gY8O z)@C;=(bCGx?!k|=D71+8Y130kbmw15h=38=QlgVl)P@^)@bQmS0Aj1tl>7&lKW1TY zL$=saQms0_0NLB)i@ec$0w{3?CPEDU_ngQ(_~Dbm`^8|ke+EAsK&movI{#-h0*5!9 z4g~+dA4H4E{<5xhz#!<@)`svGCimO}KjF6r4n3rQ2Eu?RakU7@TK~S~Z;(5Zde?$x z_D=-C1YV$Nee|F23ViKKelVrodk9kz{`-#Bz;d|n>xTnA{P7QbLm=pWu=;`j?LTnx$z>Oi2Uy?ctbRR0=#i)3FaS7?Da?!KM+&|{(Z+KAutApfo1-8 z+HOF`!T;qH2r4ZA<^s@X|D{`MX!ZR&TvDGijGnlAu~E-T)A7QZl~UPEUk0@*@o*CU zwBLR||D838r8oguMyt~akVz=<37s+rlpXm-M~mJlas@3jt)c(rUt#&Y|CJ?~z!Z0N zx+y6nM?0c+#G?Ni2dG9R~-8`1SPjf7cEIomAK)1Y_F7nd~O9|E?O)x=4{qGFVX`>vxCuf&rvqZ#3nXxjGyDZ4l@b{+Z|W7?hX4 zzuTn8`Ti-HjsZXT{4Z-13oCas^9X?`0wh7I5IZkHae zEX8LW=6KKz*2S{ucOfGEPUf=9ljQ#Uivpfw5F3Cw1+u6pSy+BqMJEbPWW7buj6y;I znh)uW9-+5jd|;&P07kpN>szRU`yRHkBh~;ow|6;f*e#7IDs7OsKHFZ69{lsO^EskM zJu1)xlX4|xj^Y6@dF=zb_^}tjBrPRhC`QBc z^GehkzxaH;KcQ%ySOS{^KiI_TD}TIqK%?9KO!Z8ZPrF0kuWT_x5FIrmZEp|8V7dE2 z@}jYKpe0@hqJUpwKyAh#!+Y#s>9UbzTqS%8rXAufo_CPZUDEOqIpT@vZrds_VSLQ% zk^}_UIiU+OAtx#5NE$R;w{yRctRI3PSdhV1d{utXgqJ4Z0{XdVAf4#V6b`ay@&y0o zfYC!rA8g`()KSk1Xgu5G?yjyvhZK5crfonsTC&@MI5$l$q~}oab|5Nae_aMlJPvJk za4?ksT>_$QnB>;0fTmm1hjC0}eS@HVB(TbCQo4R=jz%{{cqz#lM02ejwme|d*fkA)cmRy> z8elxJ_x7H(xg8V6-hz&Z;nGod?(0*H(?OOqnKxG=yH6>@4}*=nL-EL&LH3O}lJ3Wj ztN#L|+Jgle7_C&Mz*thLmOZOOmrXyMeXg@ho=G7ul>xEfT#uP*<=EsRWhR z*eq&G&NEREqzV+YkBH9dzQduF7Xjh91-tbid3UxHoD|`4{2=+J!{(dUMEj3)()g_R zE1mksY5hU-jU}yeX$tSvTFmd$1L|)^1M;P^2V0nlNZQRe2Rv<;Hvs+TLfLO{F@!&r zBwmC-Q}UZnz1)Allqx$07wcF1Bo&@@(X%I#tO1&s+j#5!e_2o_(nlM>x8aX&jQpf^q z=%O&1uM7}qvJojXWsGGehLKu5+~19lhYyDG>t&tDrOC}X6I(ir^;&ZnX0hsEa*U|e zT9)(?SUSM%1d{w9%vb=c+Sr-fLA_YS?H`>FV5~+;nlf`L#5gcvir>RwdN;N*BKYiL zmFll<1gs+i7XJp!L?NXo)~Ktm#DY41wz1nh`N$v3vEiAm@U(yYh{ZxoD`qk0%66{G zB*v%+)Bs6Gm7mTi++u-zuLN9pV3ON229311cLHo|>LztvI==b7wJW!04CMS9^`I(7 zIuE@1fzUw!BCqehLv;yzLPLYL8Oy@^nZ-gSbkJVL&|d;S5UE@rA7W|hB)BvQK&oXe zPP|3N4`+rso~Ja6Dk~sI`1fuo!JPDwwXexXsV}diY*xEW#2_6+mydaLq#wioQgm#O z2YkBTPhCC{s@IC0ZvEK}9b(zW9Yl|Ng+>S?$)izhF=~VnI{|XjW(W3~U?mB)0zs9b zO54Worvw;^XVU1_LEJX@h3WGm(l#f^Iphuz&K#2U${ zUeg0svf@;xO;m6Gbr$CTs<1#8d=Ae{6Idv?4SPiRZ{)Ecbx9RE+9yHs#5B6auFnK@ z@S%UD@B%^9Xtj1`wD$DkBCWLF2EVqd=CL z2_aN$IlnKABS6m#pw`xq2t#;gAS}esZm4AbEOf8J9`B>~9POO+d9ONu{FsvHQWyv` z{KPf1P;4hN6d;fPn=ELzK{}P&l&x`+sMN@r4wWReoBF=@(+hGGd;Cc~0T;5o=Jq5;nw);a7*GS%}C(9YE0YD7R=> z(i0k#5CZIr$LK*=tS`4+Sx(ITIUR-(CT6$?0{Ks{`7k+RuQLSwcpYU^4F8s3QfEjO z1CA9sboU6oEOKH#k{LQec;XXw1>zSmyW>Uq^!9Crd!CDH2*1&=4IHsvwmmo6dV;sU zQ&3vIm#HC@;*-xyh4g&xCkuzkHlH3LaT@j*bEKf-b_q)QqdL<^oI297pI`}0LdHfq zxbpCHwqu@qaGzt&^m8Tg?s@#OtWJ_feVu+Z{A54pJ>0`a$>o%Gu9 z=qw|1AJL@11cvxUB1f!W(j=epAfeJ4Zf&PCgT@-}Vt{-*ujPB@b|FgZdOZoex&8l& z!hiGdGc@tqlRyG2v|-$`&P$FiGc=!26A3_-zM2HIl7kxB+;=d)P5|RQlOu)e!oK{! zpu`&@K-!_dkm<|96X6o{TzKM7!Ud@tYR_<@)9;VaX8*8W)LVc*E1NmgCI3S{sLuet z?N}nOg#Uxy{{Q?isj>kZhjU4otEb%2bK~AW2Sg@Dx;>sJSj5VBn2~AN_7|g~5(1Rn zw%jNGFL&xAI1PS*@i70ymev53!v@hy{!3iV0HQ)K!GlO=}&x$Moz%PGjY;n^ev6tjN6gg zkk}rtWByTucP}s|Nn-k2)R{Ri#PDN3#XmTP#VmAi?C1w+n^V*m4+^v;#9u0eN-hY* zF3V@6;}{~W#}mnLM7|>k@1LZdR*erEwNE+ukwN3g$%Ns0mFB5a zN^JeCjKtl@FH;|Fwd}~B&9(7W*XAYK`}dm%UkZx{gc~EM#SakGPJC!O#;EzazkW54 z5efH-*rxRxiWHy$>O$nsvM%l*HlOw@+di{|*f@&*%4YK|*CZX)8PSvVKC;>LQf9{f z?w+Gv`u>3ybN1R1-iF<6?!yv^)1<0bkgU+Eg|-`T6=*@9lyA_EiQXd*?dKMsFvpd> zb}=rdfyqJVuyG4xa(#?HePZBI-yn@v0{U_;gQ0IohHHf#Bh{v4pBNL>rKvO`ZH~p( z1Jl_}(i|ctV}xAncCJ48gyjyQ5Ijnp$I;7<4=7Uw!?n!4dEDpor2z@~v6JO_^tlWxU)6H`&_b zTIGZp%F}JTprMq6pf2+Sl6WFpuOH2x?I%L5^AX%>wO!90i6tY8f-GWl8)c?le)jSW zNcJ>hw={}cMx`qgviI7~nVv4jo85i!3PL0{SCUBERuNq(zD}u0^yGDFnOm&PK}@Sw z*1B~|xFeJiCv8O6X;pK)dsVFb1N|dmLh+Nu)cQ$sKMS$J-UST!XnrSTTKrT6zbQS2 zPDjbr75N_x#5HFbgnThHlatJJi)RHnhCk0nhsc)flh;A|*b~jrrc3+x|np2%i%n zU;cVYEjJpj8^8Iu)$Mh5ywG3)vH$K4*7(Vs7hA{xvz2-Wto5PrRq2eIC>?e$`L~0T z?KGt_NvxidLk7Ho^Ps zG?qP=4!!#OyT#$YE{m03n&S>lb=?Cz_g6Af)e{dIZi-qJa|e;qaR@s$5$kNu%?ic$ zbFwXo4V#kns(oL6UBkRZaVga=X7J3YX$@Go*px!Q=(24r`O+4lor|y*{cSVGyfaL! zTje|l+}4k4TW(orgD3>5E{$w}VRs~1k?xDKRhX8Y+%`j{MyoW7M4jq1uCZ<5rgc66 zmtk14a7I&DN=2-e+KFn}b9}6pt0UEIHgmsJA_)vzyAHh*i3`pf>IlPJauvc-7pJ89 zbN{B}A>uZ5f^N#j;RvLU4B6L84nsSmY{$=;9DliQqBUz_8H*YvtB z=+7mX&FYpOiZ5^>8G1*`gJyk)lagxM z)etG*kACTX?-@qd?S9}H7E&)Our$8t^g&tjyf#iu1QZ3bd`Y_Fda!FHoe%C^VN}7Wz zzx6$6!3`D$6CuRag8#fwqj9q6zD)1%`$ehpx@$!SG+l;#4%~jST` zUHr7+H_FCjbI0_AAtPhJk8qu)8m7A}o~E%fo=J6{Xo{`J6PvhB6F%*juuPAo-K;UE zPM|?)@cCk3RH?>M;}#;V=VrD1CZX53tkA9vmC0a0KSag<#A-J#uZZYS&w2Vxs>bu$ zj5~j;@|Z69&NME-s`@65`e6YE$#8w&0)nw5@MHCJ;4jsFni|6pM0(^_`A*xoF#sAbSEk)Xo~LdyXM;hSntk7Hr6x$1gA<&6N6%jxay!Uq)<8qh{Z z@9mkl?5I`f1!&*6&2X8{y^wiZmkN=1|K!Ct+Q!xeW3v)Cj|DE%v=c76`l5%M-Po61 z@IMxv=LQX9ltw;?Mmek3#%;U`>=>7aH^&v)C~;7phemaC65e{RSr;YXa(1yQ8@pEP+{lH<5hc)raj7t1aS+x<9}tXVoY(|YR>_X|uA?7E zn4(R+L$-X{R1aU-@e_X9ghm*%*y|_Du0JJ$$Ua&xbTjkY71tMW*M&p+zJT9?1%8Wj z#h2FQy50A33V9TV1IZkdE1J%l=q~NaD zRUUZ%S5P5NG}=TpVUQ+LZ`t}Jq=C;X4DupRdM!4f=>3JD*TbH4yCl@ocm4j;jfwDr z7yR&of&0ToW;CH?IRD>13}1*|I8&k1bcY)nKxKU(g1^uqM^^h8EW&*Q)USh|C}@!GjGyxZY# z+aQ_ozO&J=KYpZClZWRH(6i#eBjY&*Pwecw&uTn4rf13g1LiN08*B}2NVOnZ$5KMq zvJ%HcL0gBb=FJI^Yck*8~u5bTAqm7FL_B%vxbZPD z`c_yI`ydUz<%nh&aDiq}AR+S^36g34-wy)fV%eSPjiX{fL>JxE9DkK5vQ}pn0c4y3 za8k_BKW3vMXR6oQCH=+lFX99WK63~ygJgQO#Cdq9AY`JdR$vU3(@uVdguiw7;#}ys z>EGM{mB!&%`u+Q{Zje7)>)FlP2yA#XV8^0s)*s)&ZS@MYe0PY4O-;P1<Fx<%Mh?+GvxeW6Q$PC!M?r` z!>Ar?5)$UA3&4rF55YJ>ehZwhKPx|!v3AKRB+cI2?AS7kuu`w=;*m( zJ~-bP6xq5A97f8*zqyQ5?9xJEh`B&kxzRNrE9EMEE zFRC>nnQ%LP8eO2x99+6^@h^_>dwc&Glm9(AA0DF7B%{1PkKX0RtkpEt*v|0Jy+=W6 z$h5F*iwlELRa2 zx524Hr{qwYGc(FCD8dVTePGS2&=_HQN2jLfcCozrYAyS`($%V2MyjPr7-?IP=flC3 zOQXz9fa~(_>cT#9;hml>X7;Nw#rL5VIyY$B$2Au+FWgNG_^#|`(XLE8q0+-U+bLu} zK(<^Guv~~a^x$tVDyg8`_-syMZ!6f8?;G7)_T<|&>6@b&8W}Zrs1#4WNNK!>xmt;1B&Tc|6oSR{lx}VO^do59@k)>}#jZT9Aeb&_P%N>FD z3lhj76RD6d^5uJ-ydxp^-BN13zPbroVB#EygO~_wd#}1Lx}YJN6b{u_cU2d_1~mC~ z#8pQNR6z7X#$FuO?H||WErns!_7P<7@W8oRtcN|gOWB#Es=W=GLRm|Xob{Ze(q@`v z?ybP0JY8^fz0g8hSz8h&qCBq1&EpQbh+@Q8AGh0)jKPmvcg`GGZMh11ubLjmtX&}9 z%4OnP~zaHSFO`{Ax1*+u_eYkwZa5}ny=zh~6&TSQu9x7Q-23{nyO zs?yq00~2ku*Gi7Yg;b#XcRI20X_bT``3m19UVhaS#@er|ZK#Y>9@?;1ALZgxaxD$M zP%Ho1Ro>^K^W)cGR&}8^xYM+t%(Si2O24tDuHWjHI_VD-zW#QO@&cJ8%#wmpp|HmW ztM}5~q{iW!R#$x!OQFwLXwg@^7b`vuOp42wMLd-Kb{)Ihwh<^wWY_HD4t0EL^IUa2 zL9EE_SQN5-5a%J)zE&4b^u**O`rsX*Rw}J&#X&1gO}8ZaIA^3=o$uI^vW1vLlmxNC znTHnwo|(5z%Ngj+9~pD>XQ*g1`DhW87Mb>XDuj|6$7_m}Rqk~j4##c2P%6g{+#nd7 z`at82yw>t;DlA|cFLw=9RPe>my~pbagPIr*shwZUMr^;{tdWS#-l?`t6 zYtFw*v*dq2#wQ;jZPhVLe@}>Hn<7!a(RFVoDGa>Bo8i`p&qS9I7KNrRs9mOSZaEim4;of%|R6ZMTRjZD%~=cy{vR3SzDRd^`Iig_Q06n zd~>}qqAys6BTn&Qy9M}}x4(khHs3zAiUPJ{Ojx8}Bl(5A;fe;32&YY}QFf>aMB z95~T98XtbSK2>0KG>K>!YTPvlU3s!QNh9sK=&qubT&wKmY25av-tL5bd-UbtuH7)t z2?~5H6jb0q{}XN$ylDt(&B65qzKQy`!ryO(K4h*wGwo4vRl`!XHETdd6Q+P=uYupS zqzqquHc=zYllNPuXv0HZU18mZL{5lbcYXW4>6`$mJIeBTC#m&IxU!1$SSO?o?zzy` zl-VZjfcDkciv?x)Rfct?4tAr>{$_IOvsacPwu<&-6*P*a%C48Aa)whK#aB?Mi}XAb z<%ge!s1QiH17D&j$-&~jfGPc%Y;%r-Pkfqi1c9vm{)rC+Ge zQ;;%PB5IiC*7ERmJuaqqbU6Ag%WT4De0b>fh1_vPc*^gXEY&rs z%6Rq#yOc{aVg_Z?P5kWU#UfPB;BPxtn59llP@0Z5x+yiduv2kU(-EZZA( z>TWVY>F-p9ITdV9HBl3VX07TS^;kGi0z{IEm`{Z6A`S|E({-!GSD?2enO)47y6DVE z^Fa-=rCPkR2u!LEdg7)+IwYvv!%u+<0X4?&Nt{x&fDI&4iBAbhp&ga>%&JWGlSJP@5 z+HAU?g}q+S950=vo-A(#a+4kK?`%M6U4H#A4x{xl(1q-M=-w%O0!P%O(#Z!aEIoD$ z+5_GYb(9E#Z*jU=Ndr!`N(+`Xr3A~i_86pc%oTmxIn^sWZLS8R%4PEJj6d_=?hdj> zPY}y*Iz-{m1c*Ni4Ru+B>*Ih!2!99{3Mob60|HSf9b^8I{EeCh109cQ+jh9GpV2&w7W*021DGHq>% zAo|9RVwH*)UtuHgYiYioe>*v%@Xld%9zfOc|M8iX!uYWdPNe9JOQKaOVXfgx5Qb~` z#{HpL0?`j=&m4C)OoY`xOp0@%K9o6qSvT8Erxc&ZLW=IR8o7#II84fElFDF*M4k)U z=x5C-%dmy_@e)GKCe|#rJw53Sk;h6Gv<-3|6WI6(>gP8ShHPipV1`Z}0a8_@M{w&8 z@1qmK(XpX>Lb+`62VROGgSBZ*!z_*V5Bg0+&2SFt4OsjC=3$>#9xvb7+gCk$3<{OL z@kM5G?zycix+EJyBaKjS+$*jq6N2Oss4zzw01j@^s%Us$7 z6@lh|q}EFNYBhpiNUe1~^=a*&ttlb}GT>s9ob&VYOqaEQwQy;D5RBIuEoQ3F_P&`- zGC94i|JSy(r#-o8>bOTgh5TtG+QR@=o-3sp`j?age@Vn{1=K2v#aqo^9(OPRO=>$a zmCQfcmV}?T+xYpgFHkN?0_7ENEIKU%L+qp02Q-9y@rGcO`1kJuBEhf#b`%V^eZNLLMfLv*?wD0t|2>kuvqX>ad9UJ#VA0E5i>$tQu zCTEw*;$jA>CKuly`+r&nG{KCYKM3%)5)Z1>Yc0_U2zIgAH`ul7tTPAIoYW%;{xw<9 zkEhj-5#kOMIB4EU`TxXmKIE-$4qGb>r2cjwvUCudgfn94}xu?drcJQp;p-cJ6}G*)UE#2!4J<-|9+4Q zIlyFA%AxyzCV;`t(3pq+uO0>|U_dw^@!2ShqF(g8=ULk~W@X6jAUm_Naer5|033$% zR$6lIyKGnEsw1E@v%S59zq$@8cy)fkWo*v;8S8v^A{t>3??qY5#oLOYi@f(0JZ@9o zz0B;!<_X-Gw~WPZqNt6&vbuKic_`}E7dnaUg1KxL@k86q zy-T*@*QGbsn^JgQGsezW3f)Vdd=L(?mVtW(c8h7MS`DxIoLX}_tnBQ&g7}+gfnoSq zl_s#uI3uH4RU~jbNPqx}IrcH$lW!ok;+j9Cu^nVl0C7f59euk61?mK(%ZumjtJ*_b z&TdI&LNfBe-!VQO4MG0SVsED{UlZbQpS2~wl5UK>?%vvZUir`}cr~QVzomb%JDxi> z+xj$G;2j+Jz>CAhvh;2wLH3os0w|+!JE!$W2^WyLIV$_lij%Iu{d_P>!an@r&v{d? zEEAgGHE&xoRseSAS!!x>zZ&uiHq>;|?2$ghrm!C6wfI6( zxj3$t|GKQM=qbg-XBI~qJyCI#8pt7*LIDDwIti#FekPJ5_W2^fgD;M|14(^XScqA)*<=Pz9{ce8u z%~K&TCwIb{#%>-9q_P~A7HW1I_MWiG%bX{3DCk|Ka7WDEFUCyF@AsoFxmi6l{`jF7 zy?4juYu72|KOP-ZgfKH*VL`9S(U(Oyh_s2^*411G|5brr>fp9p=_J0vMsQZW2$jq7 zMR}9OrllZ1-|y)LkNgnNy(;3sehO51$SwL|BsT_oAf(;@3HszP3W9J8lRv)WT8~`P zD~ouoX7e*R#=;_{hfBLMkFS&C@1-Vu9mXlMtDJ{4%M}Arw&{&g4(KuRZwveF<+Icu zDe+Cl5s$4S@A>geCwVW@z}kl!+Wmqo3#*pPaxKrAt*N{emxrTMs~ofZn%}RE+|i-~ zWfyE7Mjd5t3SbY%d_$Og(({Jc8)p~GaP3O555PasWz9FLWi7`KOi>H-JTv`?0iFFH z`pphKN+YJT3ik61cWca*yLtX)0i>QBv081t_}Fn%#!F{H+goWjsUIr2Qy<`{tyZdSA`}Sn_WIm|W0>{Y52tPL768jiy-?gTdJMLrQ zJQteqh?~3~h)~#Hwi>;dFPcpvrU}ku=Gk1*ovwE)`)y9Pl|4xORrmgA)arUZncH6Q z+;}pL;hRdHWw`Sa~hIWMLXjz>e-)XPqb(gO$dHPg6UwYZtYj z2cyWIx=Pr~ec=5~i}KEXgZD}r`T&qT^S_qa(P{LdNxY6zUn>#Yedn$=m}}|kdn(hM zr|$p89FfFrJ$1++=s6V6Y@2Ys>v$RK=B_`h|IloeX&!N}I;k1Ql&GDvIxO8QnP>KI z!fVqn3`vIHuCD44Iet>|m?{6RI*q(L0PA0>U-W^69EvUX=AXfq;`4>zZW9i-1<}+s*kd19usD&v$NeC{N6W zn0C=ze0L2KarVikwqN*SE~j>R=+KK{_y!qoSn`7Cq1ryqBe~XL%Bh^8^>fLRZe3#a z&p;{l^M(CUbv08ou8U%*>u=Ks<#HYZ>1_V4k@yi7=CX?iMio;Rr9>7T$}Op{rQQ(n z%f**y{^JsW=B2ly0=NxryOKK4)yj)uO9#XS!3ES#7rH76t6eB z(e|>_6iqoh z@bYDjQrlzA=Xl+=S}YG`>#qDFgiGJ^DX4pUGVdH%oH&TY#wj?<)yEAOTfR>34O7dI z`^ZuV4Dn!=J)gylg1qN1b*U8+XjdI<6Ezqu zE}I0y15a=dTS``#X*nG48KdAf4s3^n!O+b`EX_W4k?x9gy z8UX?6mTnk8I+eyiq(r()y1PqSx}`fL_a5VY|NDLSoZT;;gHz8ubJy?sU6Cx?*LrZ8 zD|3f{P;qT`j<0-w;`@hE2f0i$$7^-`-n-NxGN*nd^%%*oLnVDD8M#$knU^zs|CQYgoPZA8BYJj%bV^3 zc>Do_&OZPigsLq49k%~2fUouQ0|r{HM|~Fivfs&e|HKIbd)=SzA$#Sk@qgYq@G+>N zKIv&D8YKkkmU;8xR-bFoM@csZ$e6heg-jkD>guK?D8n77(g(m*- z|3F(P6xKQtY)>tZVMpjS-I1%7Lj?-S7*Gbvf)-r{Jo5OPg=*Q<>Ln=n?m`i=@h=yX z{<(zG7*Jzj9qf)|MHQl_I<7a^z*Yd^x#S4mF+|#Z7VU6{9r&+4bq^K&SCGmyNj2FW z*n)}^BZy76X0&;k*LTsqwiI~EYUGiQH{X#as0ST1|8(B}mVlx2OXx)etxa#`6np#o zKY%J#usGOlHv(o%Pg9!u8uTwoHWyI--jPr>&}oB;Ey*xzH+p-OTv2RK>M1LK=>;MT z%`?NaTR~RV!pZBtdl0BC8vFY`)$G~r);}?;p!Z`AUh4)rr`*I_ZA^s*HuDX-gI|Mf zfMO*Y1b)lDeqDDA>T}ST*V$Pr#t`o^z_R~$nGynsjUDc-N5SShiRo*on;=v?qqta^ z{_E2wsLhY`Ek2LqY+yjSA5J(fe=2ZUFC4S#`umdoWGEKmVALkN-CL{}OTfqlZq@v~ z!bba=a~1S^=>cb%oqT7n>RD48i;O|qziCf{yU%2ead5hBNHy@rx(W*{ig83dmJ)|N zi`9RBU0-c@({cK9{UiY?sh8B_87#GI<;;G8Gz9?f{8?U7C7ReiNZfK?)XP}{ABZ8Z znel6m3Svq}bMeeyCB~hJ8b^QA?olO35F0P*VzSqiaI`=n%B)o?0r<{Y^d3(MynwG9 zD;tv8%T}kxe@#KG4RA`e3w=zdz%vRN}T`Od}KS2;nFG8+tK{O>76j^x@ui zZkQN3AY;~BsuD3NHuh`EL_{069hxB+bV1X^FPZPhtnTI*%#8Nht~E_r4(M9&y@=H+5={sNTZTWkPDba$8XS%tsMR7neV6DcNNj*W zkJIPobrPHXQX8u9z;)fxfZ%fcDqKtlyaUulgV3R(y0xxjP#Lzyt5P&l0X3;`g46@+ z=?aC0t3x>sC4H;;hI)9KxPZ&%!^m@(B7C4?9Uvpo%~4n&*8$<0Kr2ZUTF{rK2hi3Y z9qbUz382mk=}|$EAYLMk3`TB*8+y`jr&=K>Jr@V=R@X-*2K_A0HFm2=Olq+;a(y5H^AAd8(72`;_m_Z zgd}wpaK&<-7Zv$JehvH|T%G{32+8#n<7gEj3|Jl^E4@mC2`()CUc^Ao#ZzoMz}2rp z^)!xs6u#FX^b>MRBu)sa$YXX=+1c6AFday&~W|ceoQk!)MJEY+-`Un8Ixl zt3?Y)1|EbXeM<+qKRurK&j6DmE4J1@tQ5a}DlG1U3L}4lMaeSkC(efB`C2tr2vGJ< z%cQQr2kshUkZ>GOA+Bw&N5HbbCA~4<*mwm@2jJl4wOIO{S-hXPXRcHvA@_g%aR8)P zL4E%g79te%+?s-ODCP}@xTt8dKE@v5qO zNg5l4p-uz*())}I4AJ`Dza;4t6B*{cFIn0z(O&*p*j7_~=SR{$`XFbx-J=tV>`Zu> z74DK8UjWSReh`PC*pRMAUiktIrXcru7+V7t8YvfU+d@YZ8l_X*;+`_9=pPXIJrihg z$Q?LR%40Z4-rfSc%rx?94Ri2hlX0}&BD=APDsVyS4{i&0Qi#Ot$!n)W=L0-7Z< z-r%WqMm0V!et2dy@auX9;*z(Ry|#gq9YOVO%@#?nI@gMY5^*wA!n-99)dP)>&g-fB zpB?B42$h{Y&Q6WY{FWts(soB{?Pp3yS-&o7{XyZPg*N*2Bmv`^ak|~wt^WaN;N;d_YzT-wlTn~_=9It_N;SCe+*G<-z1Hlc>|2_y_2YsC& z&{}0{IRDz4Riq1B4C1sL&Bn6fPxy1{#IlBWhZL#;Pbw|PWHISmkF!4EJ;HRcNT)M^ z`}eg{OUY>pyZyNchEDLaQ@%dHy0^Y8A%2cj@_P$WmO@s{g2t)bfocBT*(ng`LFwwX z-2VL^47&ziXzGnRiSYLs`vBdZhUzi@!-`GeSn*n%FZw@>`u~eJNLk+@E;5pnj?ku2 zQE9hbyZ7gq0HLzqeBT9U&Fq9fozZKw}i=3Ps);GWyuDb!bH;LQ@tF~%uCw(9k2ai_I4 z1C0c_jg5`(*(%gUiY`Fq1~;wT04dTMt6INx_%aki5OD6M>;e1bJFs<}%QJv9-@WNf z1>$(HF3)nERe!~rUQ7)ki}m+M3V8tz@p8ZnnFZ97LtAhMYp@_cl%TW)F0LV^?Ox}= zsq*eu{p5Ba5uYtJA0&h8G##?KPyP%&MPww#IY^9nG)2n|!6^t^$Y$25VrQ<~Z)p+h zPY14SL~>?knG0|a3t1qj1qsirKc*XiEhaqA=jIEO+vN?g9*1v07Qk&zExYMqxT725 zlmXCXaZ+Nj9~1&29U3^&FSw)hEHt;aP=@OPojM_p<$F>ESJ#T)UYfvO?-ghmoor8y zGzcf+DdrGfq{*I-;`yAGbE2sUj|)`)7V(%$Qcx_RHwSl;$}I9ep;&;R@6A+?y#Tfp30CeUH5Sfc7Zvc4u`WzV%nfCn`&B(-t{-(hxoeAF$Ve?u0Mw;-GSqf zi!R*u8^jV!>7gwJU8r;dHLb0_57_R#aQ&{3VK+e1{sE`}yTM}Zf`QZnFl_y^cH=B~ zb1A{D;qiKkPs2C6`8hqzQ*bjPW}F6vYa;RWU{9r$UKHv)PJr6M-3Ys?*ORT-qJrR? zITmk-Fj#2?;t$|9&ndUSb5!fwtC+O_8MK<`Lk%ERpq_L%9Bj5KLwiv=Z$J`8Z?R$P z3b;XVA-D`UcRKSsvw-4A8iQOU{~aBO-Og>y^Pv9CFnq#KixtgB>#eDPSH0*7%H=_Di)ewAdSqU3hK~%Gw2PcC-0{+Rr|)YI*EZ)5nx5}3er^VOO*>J1 zPt)Ift)C;P!UjR7{CK2Aa1I2Y;8|ZqFO`iAff&?Rb9L2&VrYvU-k@Txc%fAoceXQ~ zC5a3b-e)fGe~X*IY5G>tkr*71xGla*q%aMTi`{o1=Cl8z7b04v;%{%9J!?}rOD7ZT zWGWLG;1(Y4{cfcKxJU2gfNA#PBeT}m_S5aM!H@90jd7vB#rPIDiP8g0+LS!YFx?QR zTHv>Kg7s7*$Q}dBeTE{OfTLw@J%Ts_IO_h4JNTC3b*eSH3$|^|CJZR$xuTBG^+}B- z?4+pf@a^_&?SwZ2?7He{4cIM@1)R4i(#ZAre%GEoT!@YB#Nr9S5Fy(~^IdGLvnC$d zhcVpFD3&_TV_oru#b+0vKLssQyha-=5+W+?!u}p)NT`BJ&@xzvmcQUYv?xW$?i;Fw zuD3>PSC@Ksr)vzNM{1ab^!2BfJ$*~A z8;Eeu4X|8iAXM+8TnPrf!HK}5wmb>T{WUPMEIQ%6LaYrBM*}KvC1(xfI-i+OL-0fA zmpXVCkdkwsXi-w@?)3e8sVa2~k5h%}gs&J90=ccU+UViUE_l(cz&EcJoB$!Pu+ zT+0z|9}BPw$EvQ5XJ73riP=VR+P!qUnE}1VYvI=Z`&1akpwn!D$YwF^ObcibU>P)( z2ZemF{bj6aBr-$b=pr`dG3s8Qc7VCQUVAOr~wj}ZySPxJvpRBzC|nt;f? zaGITGvjzQ5-78#?5KX{4xEB*_AT|`CY*c>$vl`7d)aSkKnZ$6~y;E6ma?N&eBYJz~ z#8QK=WAA56Tw_MD2I}FVN1weNC7kp9BL-iHyS0Hl20CzvPL9N&M8&vXf%M|z9~AEn zn!@)@h&s|-tqSWvQ{18z-tKKe@Qf$hjjhA^tz&Yo=Xy`bU1hdpplVVH_+6){ch2W`*0r+U1~4-ep4%%aq3VCiY*AtER@H@S`=A^WalZ^QY zV%q_RQjy@)R7xKZf*wUq#)(Ygx>G)}dBNd_PQ_F8xOmRw3mRRWAA|TzOw+yL%1C|b zc&5TCu?Lq*qSxsmO^cqPi?1MQBfqDa5bkeW`7sx2Xc4_pUCGj^cs2=@Z*=z25XY8C z@+ODrqTes7Q!~-Jgq!DEHBVUKN3*QtZ>G;sO7%vAZcLBGQF5mdD0eI8JmlzY<0%aX zY&t&K!A5=(Jsz;vbvVKbb&Z#I%{$Z6xqd}V=l#^AX{PH-L@1E~!=wUqmZpmt8hp54 zg^Pppx~7Ev^5}O|%4=FId4(t1SN9Xdqi2KqDZfEJz?Jt=+O95#=ZL2r3(eY{`yORV zRqsm%-meYv8+JXiH5$@D89R^mCk$Yl$W5? z%zzx&#*sj@$>DXDNtP(*Kusx6*Z?n2p14y1EGms{TGxjM=lc*_Bo>pz5A~GFc=cXf zZh3j5IxZ#C>RBE{6JwvFekjl~JR<#!F{@htGR_ByaaQNNdg3nd@#@n+dCoL0Rx1WuH`{3K^S*Q(DLa`(%{AB$IPF z_^fN$v310td8mcnZG&Y`Lr~2bxQIXlwT+K?K=|menyYlz z*=zFXsAg8L{+F||lK*+yek3RwrafS2cb#~k)p;)C*H!<7>NNIre!iv&DOx-ef2w!zFLD4N zI}xa9(f|FOkz>H$q4rvT@)7=Dc>GCDpAA`faLCIfmF08hJp+@7^-7I_(TJ~Xgh)9h9=}J*|8z z;JsjO&A)8{wZ)`Fnv=&wRnd2}vI=?ObYB~V>F5n|#(IY_%&nei6B+HC^6Hp=*8M?w1jHJ$H*Zu+MVRKf z{q|^S78HKYyyUq%FB{O?Ooz4EDCsBQ^VaQ)j7PS)?080%j^EtEm6yQ2fpkCT%`mN>$iuA%e|~fi z)pqd!tLZRd{`^9ngGQFqK^+K&-=oSbxt(*_*bi=EYo=r|vYXQNO0AaP3-oxV&WkFZ zug9-mG~wQitKEinNZ>!N!|(U|0sGkQA^kK487?d!ZCdTj&<>9U6)}`o?-J-eM(N}D)nf95OswUU@~HC8 z*1~>ayD+RQhrG@xba;BK?62Dxl|>xeZnqK7n5Aa2%JxXB8U1s01Lc&aT-vVM+{tJ} z2(y)#F~{`>_0(akiWXYX6P083({)#MOOR%FX{CHt@Iqz4N>}$rDI(}*lymJDT(t6| z&6OoYqfyeocuXUXC&uX|oh)3T^5kT;g;l1AH6_Y|`S!*%q>jU+{-of%3Pf@)-YB#}sX$c8WrRS|jm)Xle}}q^MSOo9-HH^b(w0p+^F1a>i)w8S3(vAyH|HGenO;sN6G2P$< z_?PKwF+g*&a^iluQpPd15?{8}?S4D;O7uk3&XU&Vd+rZWZT!N-V#)8LxBYQa<8h5X z36%N;dRQF&u|Ht9QLo-RJSHr9J~jWT7gq5ZUF9PuP&XB{17%;)sgH8pppO>8-;VL4jV zh4Rx>oO#*U>nAAgw=KcnGYV}uu_4D;Cuzat1wqqMGP@kwqGz#5?k^dLY1_NpG`Pp0 z!eL`I)$!Fo(pvjRM$E_5p-S{8-UzM|JA!Uo*eBHV7caS$w+*odGb%H-jHwcD)+?wt ziQ0N@M=>?5Gq`T24Zps_ml_>0l!dhC3jgxA5;3=y(@iP&*65T@b zdE(20*eS_I>hy3c#8yw1N9FvL>R(CJ=L2##TeiD}$+%BHs9(QQ4fwjeC6z6Dg2VKT zWlWD?0NeDB3Mu|G3Cg_J47XxUO+4%J?q%p4)s?7k{2tdw%2Suo>XzrDcKu(qUv3f8 zj7AYpo%cLCu0w~q$_<+~q3<-E@u|!%uqwOwi!{8$L@RY6URpagI;nNiEVujqBcN2t z1^?JmSs_zzT4$nJbPhn-JHmN5AGpa7FQWF1{U-dz3X|e zy4#o%WJSlW{jLYDt-&TA`I|2M&9yB% zeVcLU{p`+PYY1EU!3hsO9k~Sm?0kIC>3)?hlw{AXL+<>}muc?c0@x`u47i=5ePtv52=BoQtlpT^4K#{uJslG((LY1L7^KMX6f*fRJKdA%jm@ zdudsF_%$I0<9l4*2}3*qUIoMH3_8&~nf0zh~8|(NcCm>!2RC)Ht)bZqyEs=3k4QQU(`MbvhpplE8A3c54Q|4hDj9AC{ek0Ah zSe^*U*7Y^V3TYG8bDm&w291`89mt|+T8-L}#$=9SzPGSwUGhQ**7aO+zU12-SeF&d zNHdA+Ep;GK;nKCTiVPlh-p*}NeQWiy0Ci8$o?nUEd;B-bEVjD?w^z<7Ra3kDm)~`z zciOK^ebU}Skf{t=1P2{HQGbved8Ja*rO{{hmkEIaB(nwM+6B_d7 z>3&L17Y=O9v7bL*t!OLRQ`f{3ebPIMd53Iiv1e#7u+R9@Mo8I5!8f;$@!$fplgqb? zGg=uJeo6foDO2v+?l(feHrG7P@dF1xQv}cr;T%Ws zLs!X86VDXSiu)O?8r^DL4d@zNx+q1-+WNQ3nu8+};?b-3xhe(K!*IGOX4nJAhHt}H zDy;;jztUyeVHhEDrP!n>-tx@ENSJIhx}Zm!@9!a2SlNy*U-uso$t>dPIy+)=CWYh> zqrsNgXOIOFjt*kfPy*xrMIKHbsvh z#B}x(m8Le^Hlb_{V7*PGT4Yb=K0Tq!;rg`Qf4(OmscZWR*OmcG>#$wOi#(}OX~4x! znbLixYDwxl0WtwL=@l=(=SpVykznacl<>F~?bI8xkok=W9{+S@f|d>LJyhhGqe8Wu zSZ?b{<<0SeEia~-_kG>nF@P6#f3El4Vkc4=eKWRq0fS-3kDIvlZEX2*|3!S6wI`go zXm5CBFiL(L$^MKn3A&)mP9-YJi;o)$39|n{U+eWeGjX~!N#|=_^*v+lZj(nMWYfZu z^d#Mv`WqO(x$|9qqSsRxWw#YDY4U*}ZY`zKA zIni6y6N^^8i`I|t&4kGV+lN!aA&)wIMMdix@V=}vmb%DAafdM6uTjs;(|Jf>JK6-* zbFb8JldX8M;Yc_fX;2ap5>@f#0fd@@H;0%r&$q@pI_yJoLsVgd(zqr24A%8%RkuXk z(5ZOmiuVWcfcfgE51rculs)HtQ!Znw>)%g`!GGpR! zHygL*sg{c+I}B>$3T^6Se7ydHwcBHAJMD!aL8f8-Uz?l@O+K;rMUgD8b8w?9it32M+V@xHFGfB#rF)z^Yja2uYptb3SkSb-hlb;Oe<4$O zX7%Zye`*LnGNF{XHsdWe&3m8crgdqeqcjiWFG?Cu&OhD%HX*oW^0`N+1M_;Bkr3xH zt;p@YX@1#}gWMq@<)p;Pq>>%l5+U=QcQ1M#w4eP-P%o5LSh)8H+Fh9k2|aib<7ZP^ ztT4@Ud}fnsk)5Wsp!L5dGsbfDdXJE%C7aAr*D*L6XR(rRL`Tn_NkvYym}{; z=iNEN zMj`BNsyhK^sJE?MOBjS)Ec#>a!M9{^a-+;Am=M)aKqby5m#`8Xs{GXrB2dF0SrX8W(*JH6DpZKrahLxHx!!wpvUQt@D1XF zgotYg>z2`EvK6W*Lb9zpU)p?dE7!^eJVAcbM<(DDG&+v{&-rVwWgzE(`?!+_db`T;My=fo}6l9Y{cw@;(Jicv$PuImO;9Y`nN4pD%QaveaE_TkBt41(HP1HwgY zOiXIM{g#LIJZKjO#Mx{b`&6cO{$tMaDFBv%O>D1xDN)Oc)E5p#;yK>BSFlA$nxHmt zND6=@T;wO$9f@51!)s$?!3!eTD|wtqlpePRvdGA4ms@@iP9qVE^tKKyA9LNFG`tP9 z7d$N=_-;1e_0Lm@0`Wk*P9c=|dNOm5_?ZP@T8zOW@NG1yC3buI8rBSHI>Ox4KW@R> zI&jurEb2MS9K=REpRxgvEg=MQW}i{eXqo<`!UFCzAY;PhQ$%#n%&AvMA>v<&E^F^R zjdl5hiNezlL!n}8?Ln=r*hGVG{sN6Xu}_|~)iNtls6~?U*s5f6(=Pp3w7A;)yxnR# zKy#gO;`sA|$aD^a_lq@Z8`M^(0)1h)HTX%>8ZRa>l@RtneAWTru~>~ytjYd@(|mx& zFNnKn{(tZB1sawCiF5v+$b}n;%;fr`Kf{-G{)^T=MKYCK7&Pr&=_U8(Ti%aLaZ5h_ zIkX6HTp$IP1mN<^bn0_H0MhpEO;qm7Ao$xpI(bT-A4jO&LRwOj)cV+;M&~ zC~^c7!E(;ao_9SN`<`zo9(7p)!1lKYt!sW%-5xEmO^G?8-A89Ll&~x~8vP_23lPc} zHK@X;5%=Pq8bc25Vx*}CoLy}OU+riLV7C&&$E#>xZv8+ts4U z3oYq%H#_dPO;0ZRixCQPsCKZ;+r8-aLlKm1zpsLG`xB>r_Yi|8U3EvZdVPK8;)ont z@m>UdIUN+DtAjSu+n0dS=x7SZbO4sEBv4<{VW{mu4hP!c?j( z_pM~~Z4nLIU3RL|yi`Bb5;cNB*hGSpB6TowAFUMWf|XVgJFhmaywk-muV|y zPMXkOdhW2}!mHH$hO!8ZgtO;{2XN?=_rwy59)*09;Y}3FNlpa7i(>va$ntEzHOb_n zLmUH&+xnTd3jpYHb@#W{$pjxOT{XxhCzVe(C{?jpPk&Rnxg6MPPhOj`5PhIG;5sF0 z`|d&^fxn1#c)bp!FI?`)h=&EYiDio*t{qr>f!LH$w*?-%|UO7$qzy3!3Q)hN_w6CM0aE3F>*MXuJ>aretp9Q}gN4@m^+ zlp2pBBOjt|PL0epC^cTcs66|~RPp)l^m&=tJ!(A5f)ia=&FhS2*!U2^f(%Pvko^d$+J?k=@o zTqhIT4z;_2IF;Usf|2W${mGc{AgrrRbmH_UC-maml(C|ZV{E6=-*6XdC}EHYq;H*z zMVQ)-)K$}TbZ&7fF(FDq8YP!Io@d)4*)K<@<7@;o4R@N)JXy*1DyX1mlEYa2QR78% z&T!;clj^(R27((t<|H7K)S5Y#IzQjxGPS2x)t1D^5}Qv*DwvMR?4fY5>)ssm??T@6 zO^x)rJd?ZQG9pgxCqoHZdP^V3#u!y58lJo<9+Rq&fB#ZeQ{j;Pq9`k0kU%n z$35Bbz2MGS&q@0Yr}0p(3KYk7yj7Q$I@CARiC5Rh8$YJW+>ZKBO$ssT<)c@vCM=t6 z=Swr{-S=N}plya8{@C+5kYs7WI`=5Iv~cj+UyU=(!I2EDEHT^+Mo8w_HhfeX!X8D$ zDG_|S%Tk5!wVx4pEP`dHkCu8M2uL4${vy}r^PWmCawK>{E60B1oEFWON`{^N5)YAG z{Y22Mj`~_NggDwy*yHEYk-9|c^Y*td7YZ(cV_^$?=Mh4?_KYo_l;orU*BNUl<{Kt>SpB~4rVqCzP~ z;_l04^T5;yo@`a=uu840T_`R8<7cirvsQ0m*O9zLc}X8L@v$#XJ1Bl;K0sKCNWczU zuFcDlO&fFnE<^Dg!pA6+p6K#8X&uwb5&3#Rcx$@FbFKJHX_hkLo%Pf=YPHZB@ts_= zcN2R`1Cz8zoTS1Rc#qYAjfPBi*^jxI<(G9}3P>U6n^uu%BGGNvs-hZY9UpTshAgyf z1+IG(GYIL52Yo0Qmknw#geVbnEm@0*Up>#&fC9zsI6tx2c*j@u6hUT5)C!K{*0{E% zFk8H0Hd}iKYdhSLp-5Jn>7JI=-jjah8f1fd0hjN4fY=oy2HL)DOv384K{@l<7VloD zykbv--oLPuq) zyWZ=#H;_~gqjqk9jWN!;_!1Klp-SNRjWlk?IFDyI7j`~S>Q2dRtaWT>(8{}rHfG{q zl4>Co+FR-iEa9+_d&VqnTGaY7eX{N~bCiYW52qG$V;?L1R%Y3^_cx#b%Q5es)^Mc! ziEN}^!57eV#fLL3ocse_Ld)aO~Z;Z!ex1@LQgKbJ60;f_EFqp9%TJ+Y{a2kC~%&dMx!rUGANJR!B&<3B&Ub zw+ZDI>+QNxv>TU)Vv;eG0s-;3bbmvIIO-H;<4rDCsdjFH?{{w4Sr@W?t$SHAHu~ag zG{d8bK85BskQDlA1~$oeX5qBeexeiay%0+T~{Q6l6*g zx1jfGv^F^8cbIn!kATw?nWDuZ8JM`i@?>%z2{*%OnzAs7Hsf|Q&-J#dJhB|A)V;#7&GSd1C5PMC^R@KW0a4S zr*vHFyD3*~Lgl64Iw`D{yf?;I6#1)E6q%Q0{bv~EjE$rUABX1p#*S(kmVh)8afdhg z^VYID4w{H&*&nyz#a?F~VllZr8z_0dhk;KVR5D-Pko*)dq+1?DS{%2>} zBk0HZ$c{+}2B&9@8QJRoA+r9)Af%BfDd$iy$sX1jK+=}m*=v@AmgxU}Lw00Y7DE=G zsCb@8rv2&j=iF(y1_S5|Bb~P=RXpb)8PtIyZo4}CUz3;r%e(@Gdp3{<*pBDN1FUEL z7&}bM-xs9GDTlduc+~8oNE3L0@VQdpd}DOFWcl}_LWST8HIo>(ogeDq<~GGt+!!&g z6^V%?m$_qk8V^JghTK6Ml^`vH#>940bUwxj{8>ue#%O@4QFQn2sq0|ke6(G<;Bz^J1S zi;os49l@pxnfy(A{SA?jz+I80UaQawz2d6y1TasjVe7q4>gr!662wO6!@;osK2--7 z*f0-Q+Muk+{HV)uEMGdJP6745W$(UnBVYD9`@@0{|NUTtcO$ zq79YdN?n~Q;+6;+Zu3Q{kz$N#dGhMBe$!`v2P6ezqmUhJi0*hN90#|O0vmk^BL*6E zA|dJy#No~_1bPhk2>y#5dcvup?WFgvr`HJQu*|7v7@|z`#k)vM^PkzZk9Gdl_<-pO zY>g%B6!iHzJjj7L!13_gkHr{d{C)3PezZaV^U0XV{#0|H>e{u98~>*(u{Hd^&GwoF$#tybUp&H;2}Ob3*a;zbZ?Q>_EUVhj=RpyW?s<>h=t}) z+W;YkAAxLU#vEJJW%E5;;te;U2QnS=QDRvpdtE4SpOSfz4h#AI!B88lcr9-LA(J?I zU%bI)npc>F8B7SL0Q$F!Mj@Ew81#{+PVqpHinj|CIu>KOAK*cL52ipyIZm}JPpyqE@}ZC+nz*_C3iTgs$_9+13-LuvZtAU9$N*O+15Y4J+o(J(kOfnRxlY?00%6sr7hI$U)KRH$t*QT^aYuMbT#Beq16<8CUZ~3iw7%a#5HMUC zrb*6}kdVLx4?JWINc00Da@j1!BomPCE+Waejk1dL`v$;WJrLOP-7)yvMm{_Zhl_l89tK6p=ylMv;I$c)~pR6cP7)J?bw%3{Ue-=1E=SK$i2Y4fQ5e>Z#yXk2K1+`<} zy(_mDhfNgevw?3qa@4tO05KLlXv2LO3fK9=-3Wjj5cTVwSK@kl$@L0VelU z!Btr-U-k_a4_YV^F@^Sh!^uVUYJg-c=q4>nyQ|xqy<2B~h-e$mYC&)UDr6%9 zI+tB=vX+R1doxcy5k~K_x$3>u*{$Xh_y+SnxApP~ zy#0p6La$+Kp&}IT$aX*g!_f6Fn1KSY*k8>r8(3Yi{YBXs()*K$Jgu&qg2rxNWjhLkXz#$3w= z-a8cLRSiN0TkV~euds+lY`>xFq7&Q;N%#cpRbF9|ym<|yEVTzpn@4VtLVD2s@e2in zBa8*wkoBt9zZ_Xa!0}BmZ4EAJh3EcBdVs)HPQw;tmKn&iwD}*C<|$rlDs{`t%jFB= zzI#>67-f0AZZlXE578GR-n=P^b4aE^fnpZ-^~rk@mibEXekyv`23$^2VO?s_Zre=7 zbvI{1;5{JTICRzsJ1}ww(kAD5py6vJ{jpoe_FG2&ga+Fn#SNi|7x`YW2?yF%DUsMB zTw8^wB0q=3wLBkz^48_2+YM;vmAry33&Rzk4Hyrwq+q{*%+*;liqf!)0D9dGP9oz_ zRJ+FO3U6sc*!8QZF|6F+kO*eGz|IKDZ4rkhiR%)Yr3g}vMD!B^@v1AhAm4m`nMBX~ zmub@DC{8R#`I5IQe6Y1lrsnOz-@Twv6QKOQ13RJYAxMcR=^@w(|JBElOz0nO&o0)5 zMa`v0Wc-QpJs2jp(}IHp{BK#p$Bq2EwR|PnwM>e;hfPdMpVFY3lybC)LPW7}Jba=N zD5KejO=6rnkl&$Gv2^=(tE?n)UGmY6Wmm>ekvzR5Kvjyjdt~QCj z*ie6|SvI;+?Zp{qbw0=WvOl8o@Z$NBWQkz^vTVf_KClpK%~aC}euloieU?tzfK1TOJU z!HJTjh&QOXsP~__1}=d`dYUP*|CAMHWb!ORSrsP1ysj#0@lIrzOrBw~lSmjdIG*3h z?4e^t4@a|~)=Q_T57(54s4^5zNV>p@VC&hmdu|_6kuAjo!qLF$1ABKEDpg`&(G2Fe z8@BFvCU#H5eWR!lJv^@6&ReNYV+F(0QH=G2;tgpBOo3%ZSW@Uye&ZyoYJ4`Fga6gu zb%iyVb!!QziHMYdC?Z4>iWD(`3{^r4Fm%xY6;K8Qq{>Jn5Me-ilQ=ktG!c}d5<`(* zLjV=&RRV#~r6wZ1{TrVD{@k2%cXGGCZ`ZZUde@h|-gWE7n6_v)HOsy#?DLnLmL%-A zIlCEEm>~vI!E@Pzp7RWw2?aEYJbBLRk-rUDwe1RhY6w^{zGXL4)VbF|4JH3k#!1s_phJeEs#KXCgq=!S^59XJPM2-1_LdD<}jI z!d)_`D^x!yc-hz{edf*W!-ttGu=0+ol@<%m!z4lx665F0PO3PVb5!Rh2mf-rsIJ^W z0uk~Jlz+)pKK(le!bil+z%8oP|33NYAOT|WA~W$W%3~=qpdkz-{h&uX=w8S{g70%& z@Ob+7V0RLzgbn6q7IF(Y zrbdS&NrjcrUMqUgr`byU53>?6?_pB(0tq+5p%@S$%3!RtlY`UZ2Xe$f3M4Y|Whr@! zhsA?AhDH#@iO`X@4juRHqw|@cZbYjKjQ! znQcJC%IsdHn?QwV4&w&w7$bh8o@@UAH+%W8nG6Ey$JQU9AoVO7|J6Ow83C9B1I!~xiw3y zN3fzIkC_d@vmcAw)#Bed`RsxC<52I~O=la2Z~=Xwvk;A$UZER_3{OhHLEvCy-)O*u9(8VuL(^RF*YflT`lnRxC_l}m+G zJ_n#HNF(vYx%}J=p(Wr#FGVl@reHkyppnac)cQweZmy&+4!7!lt$20I)0HTLQlHKs zERg{>&0a^1(c(@A7ydN|%Hk#@W*xz`2;?Z7bkq4I6L8ry5!J>IuwSHH*>KU?@qNHa zeQKRf@W$`14mir^*R_ZcI7kK7AS!j$gNCDm978E8K7S@VK2>$=$@>=6#cEKkL!zlN3_P?d2x5(aK;PUQSGPUDY|2w0 zoU%O1L$2AEoxdgD`WHB7%7Fj+YXl352y!Fd5% z12S?HSR=eh;lc9OOI1`UL${s677eKlFxX=X{7U1og>%+lOq|zZbR>Hdaay8rxAXA%LPHRxBl?3Rj!PK!?)m5e@rWc)!NM+#usvr65?u=W0o$I zxURAXob@R{^Phole&)tdXIpQ&q&E#XR7@pt0#os^#&o(kR6_1oxY036TgAWD_No%= zU8i@m5nEAOr97+2esuqdnq(yh?(o7N2}Vf5mxsXu{xE(U%VptoY@ zXRD(Y?`lEmkaXt@<4YANvo{-bF>nqXfdtS)e-W6QGp`JIQ@{qwmbBr&Ua2>&`u7en zsF+d~X#@}xK8q-(rr*KOeU^dUV5u2Jytn4j(x?PhZAH@L8UVTmjDvlY?TRSHr$LY3 zqj{Fai)@2UB={6aJfKZkBhnKrVUJ|6Hs<@asUrT9&t^wNeW<)XPeKe52F$VsPN^^O z=yP_!eVVM^5@ndcSHIcl_-;<%AY$)}?!EDPz0hs>%GoSd<=doN(pUj|F!!@Jk;9W> z7B0X9jl+4>Zca0)aC53-5V37kHnFJYSH2CYZf^^d4z@{7^CVcZPfw1;ok!8pT?h!q z0TQ0uuD}`i=|B+#2ajuF>W(`-o4{GBNa&epf0z@X{D_q;GBhpE*PY#ZZe{l4#`%yI z&Rwtr8lM@6oMk4T6VMCcQ00g|iPOM_3A0UVyte%vtthlitaLI%M(pQ|`TWM`HDt8z zm__WT`b+-G`1-jHzKKUyXzRf&d#q24C!Fb*DKUj+z)WMD-%K4-*yjCf(7_#)armAk zMbA%YyZocozM4?YywY!j9D26(O)vHfN2!Bk7w=WT$Fzw4vwjBK%9YPGDvk)*0UD59 zX?lk>ouF`(rG44zOu4-vbUOz(9Wa{vFiJU`{LnJ2d%ekT4nZ9m8L^ClX(7k(e*8Km zVQGmfIqom@ERr8|VvFC_?L7v^P+|V$*#URK!dh1Ixd{|9ylTEr=9S}SFr{0!g3KQ* zX$(kZ-&tjxRB8-^oq8)zsF1wZ9Cwx_pv51=)EuuFuqPbN62{Z2nWe0+(b8{VW();x z&`XnpV_J#%p+)4;po8fsm$o6KcR(L1XXF7&c&Y&Ak?oUKJ*VKus%QDH8hii;M-!e? zPskkpOg6^%Rx5V48*T4i_fV^9yp6TAS?)6-9P9|5M>+ zs_D@SsBin;oPn?T7a5A~jV@_E*fc$!g1b)?z_qM$RQ=j}{)Ws;;;XO7zS2&9jZgJ3 zTkWv{vS*1Lkp{7MiymcU3EC0>qerg9I6=`Qz^-$QeV81Y&OWTZ8r`WCC`Q5HUlBDY zYR8^%HsgYlbfl(MSB{mjN;ptN7@Owu1+~uG-Zi+L&_G~>_4Q{OEs3ede`Ef|xbNwd zjjZmKA$29qAM6}->&umkPVH#-QgC50)?NdCRN@#^CaWAM|7+qA5ximwxv*uidMF~p zPjy&CesLikm{1-97M`F#}Oa z^9*6IX5iu5fHWxPStwBJYT&*{F(7+Ul9=QT#Pqf%D0oH~70L&mPYiBJQY&3yjh$Y? zjRvka8SzdSP}${Ejk>+67EdSVk>lfaYM-0E9}?((5n;Z<+}a7LV2jzE-L0oPt)n!vZZZTJ?6-7*yMF+PV<7siYC{zVg~xu zCEPP6H6*YmkCQz*1*_f96d9x&O#BRLyD|_Kd#O^&3m3{3?REM9-bG^uz$d+cZe2|G z7wOs;HJ|>V4FV)Nt9sw}eQNw-VQrjszqL+pT?P8W65w#l9Y`YoTwU;PPHo4K!?h2i z1L)H3SJ|V~YCAduKH^3#H+uNGWUf*6Q z1Axj7WX83ui6-%iT+*7H68%>}Eo5EYff5!c+kYLvLun2ZoA+N0-69X6t&=W>)$W{k z<@zD+eW!zAk^UFn)d$k$gxy3UU7r0HY^MUSEk;=kAo<5ux+osvb&Cs-h&CCeJ0Z&e literal 0 HcmV?d00001 diff --git a/assets/media/main.js b/assets/media/main.js deleted file mode 100644 index 69118208..00000000 --- a/assets/media/main.js +++ /dev/null @@ -1,23 +0,0 @@ - -(function () { - const vscode = acquireVsCodeApi(); - - window.addEventListener('message', event => { - const message = event.data; - - switch (message.type) { - case 'addColor': - addColor(); - break; - case 'clearColors': - colors = []; - updateColorList(colors); - break; - } - }); - - window.onload = function() { - vscode.postMessage({ command: 'get-data' }); - console.log('Ready to accept data.'); - }; -}()); \ No newline at end of file diff --git a/assets/media/styles.css b/assets/media/styles.css index 1afcb9d8..5820b27c 100644 --- a/assets/media/styles.css +++ b/assets/media/styles.css @@ -101,6 +101,10 @@ border: 1px solid rgba(0, 0, 0, .9); } +.article__tags input { + border: 1px solid var(--vscode-inputValidation-infoBorder); +} + .article__tags ul { color: var(--vscode-dropdown-foreground); background-color: var(--vscode-dropdown-background); @@ -117,6 +121,7 @@ } .article__tags li[data-focus="true"] { + color: var(--vscode-button-foreground); background-color: var(--vscode-button-hoverBackground); } @@ -128,18 +133,50 @@ margin-top: 1rem; } -.article__tags__items__btn { +.article__tags__items__item { display: inline-block; margin-bottom: .5rem; margin-right: .5rem; +} + +.article__tags__items__item_add, +.article__tags__items__item_delete { + display: inline-block; width: auto; } -.article__tags__items__btn span { +.article__tags__items__item svg { + display: inline; + vertical-align: bottom; +} + +.article__tags__items__item_delete span { margin-left: .5rem; } .article__tags__items__pill_notexists { color: var(--vscode-inputValidation-errorForeground); background-color: var(--vscode-inputValidation-errorBackground); + padding-left: .5rem; +} + +.article__tags__items__pill_notexists:hover { + color: var(--vscode-inputValidation-errorForeground); + background-color: var(--vscode-inputValidation-errorBackground); + + filter: contrast(60%); +} + +.article__tags__items__item_add { + color: var(--vscode-inputValidation-infoForeground); + background-color: var(--vscode-inputValidation-infoBackground); + border-right: 1px solid var(--vscode-inputValidation-infoBorder); +} + +.article__tags__items__item_add:hover { + color: var(--vscode-inputValidation-infoForeground); + background-color: var(--vscode-inputValidation-infoBackground); + border-right: 1px solid var(--vscode-inputValidation-infoBorder); + + filter: contrast(60%); } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 191db0f8..c8ae26f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,6 +71,15 @@ "react-transition-group": "^4.4.0" } }, + "@material-ui/icons": { + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.2.tgz", + "integrity": "sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.4.4" + } + }, "@material-ui/lab": { "version": "4.0.0-alpha.56", "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.56.tgz", diff --git a/package.json b/package.json index 040c266d..97852f27 100644 --- a/package.json +++ b/package.json @@ -146,6 +146,11 @@ "type": "string", "default": "yyyy-MM-dd", "description": "Specify the prefix you want to add for your new article filenames." + }, + "frontMatter.panel.freeform": { + "type": "boolean", + "default": true, + "markdownDescription": "Specifies if you want to allow yourself from entering unknown tags/categories in the tag picker (when enabled, you will have the option to store them afterwards). Default: true." } } }, @@ -217,6 +222,10 @@ "test-compile": "tsc -p ./" }, "devDependencies": { + "@iarna/toml": "2.2.3", + "@material-ui/core": "4.11.1", + "@material-ui/icons": "4.11.2", + "@material-ui/lab": "4.0.0-alpha.56", "@types/glob": "7.1.3", "@types/js-yaml": "3.12.1", "@types/mocha": "^5.2.6", @@ -229,16 +238,13 @@ "gray-matter": "4.0.2", "html-loader": "1.3.2", "html-webpack-plugin": "4.5.0", + "react": "17.0.1", + "react-dom": "17.0.1", "ts-loader": "8.0.3", "tslint": "6.1.3", "typescript": "4.0.2", "webpack": "4.44.2", - "webpack-cli": "3.3.12", - "@iarna/toml": "2.2.3", - "@material-ui/core": "4.11.1", - "@material-ui/lab": "4.0.0-alpha.56", - "react": "17.0.1", - "react-dom": "17.0.1" + "webpack-cli": "3.3.12" }, "dependencies": {} } diff --git a/src/constants/settings.ts b/src/constants/settings.ts index a8958c5a..c690f22f 100644 --- a/src/constants/settings.ts +++ b/src/constants/settings.ts @@ -20,4 +20,6 @@ export const SETTING_SEO_TITLE_LENGTH = "taxonomy.seoTitleLength"; export const SETTING_SEO_DESCRIPTION_LENGTH = "taxonomy.seoDescriptionLength"; export const SETTING_TEMPLATES_FOLDER = "templates.folder"; -export const SETTING_TEMPLATES_PREFIX = "templates.prefix"; \ No newline at end of file +export const SETTING_TEMPLATES_PREFIX = "templates.prefix"; + +export const SETTING_PANEL_FREEFORM = "panel.freeform"; \ No newline at end of file diff --git a/src/models/PanelSettings.ts b/src/models/PanelSettings.ts index 30b0154f..03d6061a 100644 --- a/src/models/PanelSettings.ts +++ b/src/models/PanelSettings.ts @@ -4,6 +4,7 @@ export interface PanelSettings { slug: Slug; tags: string[]; categories: string[]; + freeform: boolean; } export interface SEO { diff --git a/src/viewpanel/CommandToCode.ts b/src/viewpanel/CommandToCode.ts index 52c9e630..b3e02fcf 100644 --- a/src/viewpanel/CommandToCode.ts +++ b/src/viewpanel/CommandToCode.ts @@ -4,5 +4,7 @@ export enum CommandToCode { updateDate = 'update-date', publish = 'publish', updateTags = "update-tags", - updateCategories = "update-categories" + updateCategories = "update-categories", + addTagToSettings = "add-tag", + addCategoryToSettings = "add-category" } \ No newline at end of file diff --git a/src/viewpanel/ViewPanel.tsx b/src/viewpanel/ViewPanel.tsx index 3291e68d..e51bd77e 100644 --- a/src/viewpanel/ViewPanel.tsx +++ b/src/viewpanel/ViewPanel.tsx @@ -35,10 +35,10 @@ export const ViewPanel: React.FunctionComponent = (props: React settings && metadata && } { - (settings && settings.tags && settings.tags.length > 0) && + (settings && settings.tags && settings.tags.length > 0) && } { - (settings && settings.categories && settings.categories.length > 0) && + (settings && settings.categories && settings.categories.length > 0) && } ); diff --git a/src/viewpanel/components/Tag.tsx b/src/viewpanel/components/Tag.tsx index c94d7ecc..3646ec5e 100644 --- a/src/viewpanel/components/Tag.tsx +++ b/src/viewpanel/components/Tag.tsx @@ -1,17 +1,26 @@ import * as React from 'react'; +import AddIcon from '@material-ui/icons/Add'; +import DeleteIcon from '@material-ui/icons/Delete'; export interface ITagProps { className: string; value: string; title: string; + onCreate?: (tags: string) => void; onRemove: (tags: string) => void; } export const Tag: React.FunctionComponent = (props: React.PropsWithChildren) => { - const { value, className, title, onRemove } = props; + const { value, className, title, onRemove, onCreate } = props; return ( - +
+ { + onCreate && + + } + +
); }; \ No newline at end of file diff --git a/src/viewpanel/components/TagPicker.tsx b/src/viewpanel/components/TagPicker.tsx index e7ade408..6f78e577 100644 --- a/src/viewpanel/components/TagPicker.tsx +++ b/src/viewpanel/components/TagPicker.tsx @@ -10,10 +10,11 @@ export interface ITagPickerProps { type: string; crntSelected: string[]; options: string[]; + freeform: boolean; } export const TagPicker: React.FunctionComponent = (props: React.PropsWithChildren) => { - const { type, crntSelected, options } = props; + const { type, crntSelected, options, freeform } = props; const [ selected, setSelected ] = React.useState([]); const prevSelected = usePrevious(crntSelected); @@ -21,7 +22,7 @@ export const TagPicker: React.FunctionComponent = (props: React id: 'use-autocomplete', options: options, multiple: true, - autoComplete: true, + freeSolo: freeform, value: crntSelected, getOptionDisabled: (option) => selected.includes(option), onChange: (e, values: string[]) => { @@ -37,6 +38,11 @@ export const TagPicker: React.FunctionComponent = (props: React sendUpdate(newSelection); }; + const onCreate = (tag: string) => { + const cmdType = type === TagType.tags ? CommandToCode.addTagToSettings : CommandToCode.addCategoryToSettings; + MessageHelper.sendMessage(cmdType, tag); + }; + const sendUpdate = (values: string[]) => { const cmdType = type === TagType.tags ? CommandToCode.updateTags : CommandToCode.updateCategories; MessageHelper.sendMessage(cmdType, values); @@ -66,7 +72,7 @@ export const TagPicker: React.FunctionComponent = (props: React ) : null } - + ); }; \ No newline at end of file diff --git a/src/viewpanel/components/Tags.tsx b/src/viewpanel/components/Tags.tsx index 25d6b520..131161d7 100644 --- a/src/viewpanel/components/Tags.tsx +++ b/src/viewpanel/components/Tags.tsx @@ -5,17 +5,26 @@ export interface ITagsProps { values: string[]; options: string[]; + onCreate: (tags: string) => void; onRemove: (tags: string) => void; } export const Tags: React.FunctionComponent = (props: React.PropsWithChildren) => { - const { values, options, onRemove } = props; + const { values, options, onCreate, onRemove } = props; + + const knownTags = values.filter(v => options.includes(v)); + const unknownTags = values.filter(v => !options.includes(v)); return (
{ - values.map(t => ( - + knownTags.map(t => ( + + )) + } + { + unknownTags.map(t => ( + )) }
diff --git a/src/webview/ExplorerView.ts b/src/webview/ExplorerView.ts index 4d6169e0..18a4b6be 100644 --- a/src/webview/ExplorerView.ts +++ b/src/webview/ExplorerView.ts @@ -1,11 +1,12 @@ import { PanelSettings } from './../models/PanelSettings'; import { CancellationToken, Disposable, Uri, Webview, WebviewView, WebviewViewProvider, WebviewViewResolveContext, window, workspace } from "vscode"; -import { CONFIG_KEY, SETTING_SEO_DESCRIPTION_LENGTH, SETTING_SEO_TITLE_LENGTH, SETTING_SLUG_PREFIX, SETTING_SLUG_SUFFIX, SETTING_TAXONOMY_CATEGORIES, SETTING_TAXONOMY_TAGS } from "../constants"; -import { ArticleHelper } from "../helpers"; +import { CONFIG_KEY, SETTING_PANEL_FREEFORM, SETTING_SEO_DESCRIPTION_LENGTH, SETTING_SEO_TITLE_LENGTH, SETTING_SLUG_PREFIX, SETTING_SLUG_SUFFIX, SETTING_TAXONOMY_CATEGORIES, SETTING_TAXONOMY_TAGS } from "../constants"; +import { ArticleHelper, SettingsHelper } from "../helpers"; import { Command } from "../viewpanel/Command"; import { CommandToCode } from '../viewpanel/CommandToCode'; import { Article } from '../commands'; import { TagType } from '../viewpanel/TagType'; +import { TaxonomyType } from '../models'; export class ExplorerView implements WebviewViewProvider, Disposable { @@ -88,6 +89,12 @@ export class ExplorerView implements WebviewViewProvider, Disposable { case CommandToCode.updateCategories: this.updateTags(TagType.categories, msg.data || []); break; + case CommandToCode.addTagToSettings: + this.addTags(TagType.tags, msg.data); + break; + case CommandToCode.addCategoryToSettings: + this.addTags(TagType.categories, msg.data); + break; } }); @@ -135,7 +142,8 @@ export class ExplorerView implements WebviewViewProvider, Disposable { suffix: config.get(SETTING_SLUG_SUFFIX) || "" }, tags: config.get(SETTING_TAXONOMY_TAGS) || [], - categories: config.get(SETTING_TAXONOMY_CATEGORIES) || [] + categories: config.get(SETTING_TAXONOMY_CATEGORIES) || [], + freeform: config.get(SETTING_PANEL_FREEFORM) } as PanelSettings }); } @@ -172,6 +180,26 @@ export class ExplorerView implements WebviewViewProvider, Disposable { } } + /** + * Add tag to the settings + * @param tagType + * @param value + */ + private async addTags(tagType: TagType, value: string) { + if (value) { + const config = workspace.getConfiguration(CONFIG_KEY); + let options = tagType === TagType.tags ? config.get(SETTING_TAXONOMY_TAGS) : config.get(SETTING_TAXONOMY_CATEGORIES); + + if (!options) { + options = []; + } + + options.push(value); + const taxType = tagType === TagType.tags ? TaxonomyType.Tag : TaxonomyType.Category; + await SettingsHelper.update(taxType, options); + } + } + /** * Post data to the panel * @param msg