From cf1e506009d577cb4bbbfe5687a7660a7151d5fb Mon Sep 17 00:00:00 2001 From: Matheus Rocha Vieira Date: Fri, 4 Sep 2020 17:21:27 -0300 Subject: [PATCH] feat: Add ClickUp Embed Service (#1465) * Add Clickup Embed Service * Transparency Icon Co-authored-by: Tom Moor --- app/embeds/ClickUp.js | 22 ++++++++++++++++++++++ app/embeds/ClickUp.test.js | 17 +++++++++++++++++ app/embeds/index.js | 8 ++++++++ public/images/clickup.png | Bin 0 -> 14895 bytes 4 files changed, 47 insertions(+) create mode 100644 app/embeds/ClickUp.js create mode 100644 app/embeds/ClickUp.test.js create mode 100644 public/images/clickup.png diff --git a/app/embeds/ClickUp.js b/app/embeds/ClickUp.js new file mode 100644 index 000000000..f09da5ecc --- /dev/null +++ b/app/embeds/ClickUp.js @@ -0,0 +1,22 @@ +// @flow +import * as React from "react"; +import Frame from "./components/Frame"; + +const URL_REGEX = new RegExp( + "^https?://share.clickup.com/[a-z]/[a-z]/(.*)/(.*)$" +); + +type Props = {| + attrs: {| + href: string, + matches: string[], + |}, +|}; + +export default class ClickUp extends React.Component { + static ENABLED = [URL_REGEX]; + + render() { + return ; + } +} diff --git a/app/embeds/ClickUp.test.js b/app/embeds/ClickUp.test.js new file mode 100644 index 000000000..3014b49a7 --- /dev/null +++ b/app/embeds/ClickUp.test.js @@ -0,0 +1,17 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import ClickUp from "./ClickUp"; + +describe("ClickUp", () => { + const match = ClickUp.ENABLED[0]; + test("to be enabled on share link", () => { + expect( + "https://share.clickup.com/b/h/6-9310960-2/c9d837d74182317".match(match) + ).toBeTruthy(); + }); + + test("to not be enabled elsewhere", () => { + expect("https://share.clickup.com".match(match)).toBe(null); + expect("https://clickup.com/".match(match)).toBe(null); + expect("https://clickup.com/features".match(match)).toBe(null); + }); +}); diff --git a/app/embeds/index.js b/app/embeds/index.js index 27319b9d0..939a6d921 100644 --- a/app/embeds/index.js +++ b/app/embeds/index.js @@ -3,6 +3,7 @@ import * as React from "react"; import styled from "styled-components"; import Abstract from "./Abstract"; import Airtable from "./Airtable"; +import ClickUp from "./ClickUp"; import Codepen from "./Codepen"; import Figma from "./Figma"; import Framer from "./Framer"; @@ -57,6 +58,13 @@ export default [ component: Airtable, matcher: matcher(Airtable), }, + { + title: "ClickUp", + keywords: "project", + icon: () => , + component: ClickUp, + matcher: matcher(ClickUp), + }, { title: "Codepen", keywords: "code editor", diff --git a/public/images/clickup.png b/public/images/clickup.png new file mode 100644 index 0000000000000000000000000000000000000000..2d16de1baed6d814ed7d469728fa5ad937afe085 GIT binary patch literal 14895 zcmV+~I?%<5P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rf2owziH#I^Xq5uFnGf6~2RCwCeeR+_a$93QD z^*6JNJ+QzMAV2^-0Meu=nK#8lA}P@lBU`j2Q?_i`k(`PTl`Si-*oi6?r&5mN#IBT6 zz6;e-_bp@AWg2R zWKe^d`Hud+uYd3Oz1OdM2`72A-(5zy>~Y||8$0~i!WmfTU4?%8dMx!{i+($WPHcdF zM2L|?j0i0uL?E<4XhER`n#i`T&)kU}bTNtvtiw2+f)Pxj%OhxFNasX%ZVNj%f4Xhl zwBU3Nfa>F0P*a~<{$`5$U9QW4({J4u0rH=mzcWA)oIgporQh~lx3%Ej0(jvV+7m~? zi}OHl2|ynNfH(rY0OAn<4B~Ns2%rYUeNfnkux2+x^DwA$2aRoih8Lb_>B<=p(TW(Z zxF>Gf1+43g@Uh;NKztuKUIA*)B(xJ~Vi%$9`p)MN86gto&gBrx4yOn-eIT?9ij2?_ znwA6%0ndPKL5*#P{~r3_{G022`n_L*>h{Ss*a<@+NR8ZYTLP@lAs~7o;3O0x1P*8> z1_cHn+abWmw2>R6{V^fJEeKs8pJPb1AeskwH>i6X!rCvQJNFIPg%0X|4nUj$_yX|K2hkq+B$jvo0pj9C%nW|=7fudvd(A<_y=^DHb>F*r zPx}ch^9KN&3d&+cPM*@g0Mec!kv9g2IlW~cL~t{F#hp7rErc!ED!6vR>~4hR{M?-T zBqqH{J3bvNf~M!=WS{vs_P^Z?`u$Al{@n4zq)KZKMA9c&!t`E(b7Q71(l*$tnyJ0&9mE`aE`heN%d) zx`r2$TKE;@fTZaGXkUvs{}IgJ{{f7i)rk+hz67{^=TR)&bqC^?7T?Q9`8N@93J4*Y zVxnQ7d4o&>G@CqdVOk1U6&Sm5%7FO&Fpyox`3@?ywva>Dk-l@h>1Qh16pfdA62U3j z6Ty@FEIWS4{nXosyhI4A{s7BI-449a5g1MS-cF-E{_k=8>p#)|=)K^_ZZd%R8_QU8 z?sZpSj{glJrVC}mN$x8@WJIlT2D*Y*TO0OT>z<9x{u2fyUIm4`cCoaVwOdGm?`$I1 zeyQQ6_Ib&Vtp&tg(@wsI+Vo{$7#gH-|GC+9ar)* ze+gzr=wC1c{J_W*AB-R7KF)JoZ%BjXTRNl!-D^23&>sFolq$3AHMeM_){IKfoMuH% zZ`JPNqOd#Bb3&n!x;=XH?1Uj48_&|Icmhg4}olG?=z-RzG9+UtT1X4h$0-Oqgz)9K=pwzEI zSeyfr>!v(+sWgQNh-RAA97~5~z)g6|a|^BFN+^ow@?d*loR1&SY*YdTyLPRuy07lP z#ABH-!g2AYxb)18eB>bnTtBuJv;5N>Fp>@IRZG_1^s81Sc$0$$uCr~)MgQp zLUIM1Y#!MOf_8>8#r1gu=2Crr7&OHN*@6nlz<$-TA?MeGt$LP{bXC^CV^I3t6+V$o zBN`x1BA)nJ+H~Dihxf#b(c`PVUC<7r6;-T|9%3;+xnt#2hJ?UF&*LF&dJ{-qOP%kq zm@P$W>7ZDKE0qQ$?PP#sGEzCOfXuoPDu3#Uk90g$fKlcGU=<=Jn01JhSPqkf3WHvT z-A3a4+_??%`|~GNzl%n7TLkwm#=?^qc5s5<$PuRyh*=#M7sBp-mY{IXS12OBLmffz zWDAvqDseGsl;<*R^L2<21=u>Z;!P_{$5)J(DSIHfI}wibNeo0umc#%wtYl7@wkA{5 zbUWeBpB6!s+v__X3KEN4vIzz_rz3@04*^@R!vIkqh*KO-T-)K}xD-rX1c#O*Z9Gis z1a#3T-Cy|-PwhR^uGl2GV`A<|ro7z?jqlWgtiV`xZ7ypqM0s2Rmh;sJ>A^H7F%TP< zfQ!W`fK|;biKvJ^=i^C19@5GA81~>6V7tqhz%*ctAoi~8AYx0h3c~bC`O+J%RX8)@ zS|cd~s4lV4?Br)uPn98x`D{(=sWh|F87#3ZA(`ixq>QtqQRPcH27qEI035(bsWuis zz4;}%AIjPd?PTJl?d+3E3;;20^X7FJE7pFsK2{8Xt(4q#>t zbVRsft&JjR>a$@QBZ5KZ!iFY@JG#6SJl5h|K(F{f@+1@o( z4qS-Q5Yk2DwX@yWVPFzS>8{!f*dD5gP0;;DB_~sO|b&zk{GiT(ukOs8E%a#Wf)=?6#QVDqBV1v5{5he}xz4RD^ zC8wp7%_frroE;m_R=_~3m@^X)gCl0is&Mcir;eq3Q%pHigXm&rAz;zDuIyWLLXf;q zCYYchmJE1U#FT+C0jZ9u_?LmM(m@?}s`^rixzrVSzEa1vF1e99nTzWc*2WLYJF_3% z4WyV?OrL3{h9ORC%_n;&X1+N+r}$)6GY!hx8PiZ~WVX0j1v<0k3@~wWmZ?{QGH2_Y zBs2&ypDX59z6THVk+h_D-*dkBxWzi zN6{%1tN^KS^Fx96>0co>(b;-|U9(ym(+Xh7VMYMZW~-3F$)tw7$z|4dD0r6XiIUu$ zm}UUfpmW*P=>EvNLF40~jhoT?=3jxAW*vpiHY=NE%X;PA5s7V!+14<{`ZUGn31p60 zYboaEix8F%?~`-m&U2dO)8Ce7G=|PDN^+_w(Pnnw9S>CTa`u^XuZfTInp+IwE8qsU zYOOp|Bc?C=!NyE$5t@)ATtarhE<_3@(T+$Fn>KSK(8wBe-~1+Y-}1wtHDdsP?i+su zv~~(hw|ow9?gfzZy_~hU&IibI6SpaO0;D25NEj8I)JNBeP6E^n2iKruY<`?nllh6A zMDfL5OEop=Y%n{EOoR?+q$!)77XBAW; zW5n=SHD0SF+2J}GQT?^ah4Z}%ssNwBHS$=PHSPbTUW@@>oV7M#?2jeaPBziCdav-Bc~uQ4a=W;C7_0wZ7x_yn|!uxTSkZ@LkkOE1cu zTfK#R`$QYIMmv(mn;cjGL@Hv+%bRKxmyi%MTT(%1?+H^+wzai^ZEJ*E#G7u>TgAC4=<0E@+fZU=KEertkC(&(c!3ZNCWc+s zf1|-)u4s)&OaefZh>~5_LIrqj%&9)p;-(}vIYdd>tju7wBtm{e&1v*mrwDW|I1g*y z`*t+jHoqvi@(LTaVEjivfQ4J9u>8=iK2d&z}S11P-gOOVV(jk?u7W%|jSQ)*OB+%p-#@>AuMsK(bG}6HbG&W}NT%`~w@q?tf43g0&VZ$+kL(*{0j2kfzA_N1L3N6gY zRQ{KxxQ&pkfS>E6fSby8)Z&RAd(ExbbuzCmD<$At&Oy&i_eL&!a+F+rw*s!wxtcv2 z3Um@E@iP;s1;VB&jKA+1j9&ek6ko5_ivmW^e*?n!6lTBnar6)E2GICqlL=kO@u>>8 z4Ezh9un{8`3#h4JG2ud01!(CXXObyvr#Ih%6?1hgG^C{i6UP`W+blYA-;rj{>C{L+ zosuFbFj)7e>6ql&VTwAtk3u38Br^g77w4txq$!^iB3Nc9QcQLxADiy0kIs&1O#a-p z=w5W@>H$0C)j#+QX21RkEIs>BiiL9@5OJQJ7&B?gNeef%l>BeEJ^hwr48Zbtw2-Gh zE^{K%X{w?HU>x#z;zEJ4@eO_Y))-s0-uV2U7W(YSduC(P5*{UXXz9qr9~jILL;<63+>XhgyAsW&wXX`e0MJaGigh>qBEtB3%s+Gs zVq8uHQW7$f5XsR4fe=a3s)?V-$dD2y;zTw%3kX6cNKwBldCSL$DP|WBQ#Q>^858lp zl)}tnxX_h0t4}l>J=u~BiXLb&vSYzEgy=F;BvgW&r}t?}Hwpt22x4;ozsru;Hr)E&jzE8dAPu^vb7{GVtSW>T!2NfvWRu`q>fey#Y9 zVkTEX>awE`D$_O{Pxgt6Tonqy(w*5nbDiL@+_el5b)w?nOtEA_isXZFXP-{j{D)5= z>Wxcw%W}v7v^*yi#dDUT)Y!LAXf{n?>gO-O_*=FEomFJYFBjydgUJi7M;Kp+Be#7T zy<_`;rb*^DMyrHj12+}+<(SteG<5JFnnvcqlag5F0TmtE6jKh!+)m3VWowY*;|?6= zlC*|1%S={o%Jsv#(8niB(s!vv%9cP=lv2u)!+c3$k_iEG0Q!vXj&)f7D;HwT6M=_9{o*2y9g>7o#5p9&Zx>>*KR>Xs=EnBfDmUpNM=zSj z^siokk=IOrzu`RTYx&4N9J=k(II-tJxA=;LQ|v-0A0lP2ij{d*2$L!{ov;8@^K+6z zS-5B00ic~zv&^lh^=0E}Nug{KG}bflwSbHwD94HHW5D1;D0XpU8BWPI4iOXAZNl`2 zUWd-MiPc3T*GyAbT~ptmo57(wZpQH^zLjHjuKLQplMjQ2^|wD3g8;(;S#EcPON9Z( zqKi-oC0SDQo5>Vq`>sQUK1%YwxhRyk@QTQd-D-N0!JP(c-*G0UfAI&vxcD}AB_Q!@j{jH&7joJ% z-I9zv1t7KvlU=NT-|uFk7N`E$b?B~Ny;!;# z9ml4tZ$dM^9*6Gz8?;MvX*xj^t3_@ENMdIxF%keJ-6#VStO7v3hMFtwWz%kLFAW39 zU;}B=+Q4)9X}A$5)<7vw1k2kgXiipRVi)Twn~V`Lu%3h1qB(UG8-95Q*8b=gPz!7~&_q-M73e z%kLn5mz9i(Z{h5FDcEt)Z7EYTa@Gh={k5|(dEJJbIa|Hg(*C13@R>U>`_MC~lN#3a zBBRCFj?=K^JwJqrv$wA5b-|3;J&$7VH*dz`%)Y$nk)$&v>*Pr+LuW{4KTUb~ki?%u zEI|goNK@7%OmfixJ-mL-k*pF-&kB`jxdgfZWe(mEj1a-p7Q}*NEy$ebUUShTHh*|K z#x9y#-3|tD;)#RU_o;7TVb=k0gFLvAm_BDB$Y?RLc|ErM_?xlrg0t0ft=c^t+=D&0 z-Hf>dJFNmFa7DJ@A{9nWwhWgV2b6?ug`72gZ@SW82P_dg%`{*PTo+owSpdhH$qz<2 z_C5KgbvW%`o`sR^FMoi3CG9!(oxRxq>2G7{`J>4XhJ5XYbwGq=U;q)Fb>rCf&NpDg zl|Ps>Q>*t{I(i6u?)Xd0?Eao()hGrUOp6CWE<&Ub3lPa`Elktx9Dp92o=b7?K-?9L zNf)Lhf{{ARhgQlAbDS#+aBBD?lGZTRzhfGk|HT>TZ0N2ow*81BU*C!SH$Q;h@e`?D zMTRaFTy_8hXc&=OG~-=tx#4o0cKxLYBddE~y@fgKx%01a@bPbFkWqmd2ST1^gi(qe%cP=z)?Xz=#%vh-sAt@&zbIPrgLJOr5Z0$%jP-Xk8c0+SSb|$HhLL z|EtGw@UI_5ySxl;8tD9>9HK}qlulLQoS+Yc-eQYqzkCmt<`!`J4_}GyD=7V`U!Bo0 zG~?^hatAsvUxY@Iv8pmrh#3!wY9#ZOt!s=$#br&vQbmUhZIQ9!vH(xO&6nnMTp*cW zs}cc_E8*cb*D{I7gxt}<;hPVmd)f##zHbw#dF6hucXSE+KJy3;-?}T$DQaBxhb*^% ze0`aDC`Ej1BUwGhzS|$h((D3uyz3f_POm~3#f*Iq-HT`MzZ)@ja=OwbLEIpL2VMfo zy0q4Y6szsN(!;gU@p5D@KLlvulTDl_H=8D>Fr*VD8A3s_&2AP$o*%muvHzp{(VW`F zDQ`dJ74_fZ{&_t6v4?Q%o_#4A2{sKRjh>0-3eYhRc1R2vQz0GYP$n`C-v2a~=9h5J zP1j&@>nkfNIQZ0K*!itn(OYgop<8ONe2=VTRkhKL5c#qk8qoaV;Dd_+e@SAnC}M^# z!>m;Trm-xjlUw?kk&4S8V6xL_DGyC`Ov}ew?ES;N=$z8Q)KxE!MbABc6wiF*Vaz@L z0?;&hf*NI>;Od%U3XgOmbsjrSmP%@{S%ne^IP&CvEPeLtIQOP&Fn!L;3!`TC?!n`? zeGQ8zmVq!*WVK|pM+p*F+9+VkkRW-G%Q$%GfCQ!N7TvvJp1B>un1L#6vRKTVxr9sQ z_Yj1nxmY@vvcNNHW{kgP4bJ|L+cAFL_)G6O29Dly2)jS>C>EZZ1$6+{_7kB3abBL^ zlPk{0<>v_bJRJmyZhty&&4x*w`=eK4(}icd8I3Rgnmu$F-}~Dy;@F}6X;@g9un{2X zH=rmpT~BDEM0@Jux|;= zFDzr-6>AaJtQ?27i!JtjelPZXd>4Ah`#_WDFG*T7q-#ak07ohgAw&vkUp_t}Z36-# zRqasFC6YNb==WP3*>wOhMy%hq@uVOxFD&BWTkgPtox8z#nSZ9Vynoa>GXhfs*57ta zI<86g2RWuZHp(ZZxBn9YF<&p8+n^&voU`pCO03$~TZupQ0g(A;t1=*>T)!c{4BEEL zHzKVbv9O6lz@e`mMR#KtXMJefP>_4adf4-cJ=p)nec-kQnxG{@$xp>Jup-)`h2ptB zs$m^2Oa=MT5iMJOiBw>N`9B1-%Mnl9`Y=w+F5-1Rd?`jJ2g9hg*T-YGe;0cm*#%G+ zzEGX2`x=-r$XT^r?KbA8GP6Sw_&ZB>?C7!8EXBXjPdd8_RW{C2r1B+w;1c zcIF_v77=l)&>&Y2GGX5r4x_WNi__n~xd@*Y_b=h;|GpcCZ$F&1UWOZyLmbuuKM8#} zFl>3E3@ot%DYFp70;RShB4q){JcOg<-UGO0?7nvw7U!37;fH9u#6y;0E>o-aOsjh;?NaB zfb&RFM2;!Ri$=LnnNGiy=_lDj5CQ$=h&`Wp9wQsO*nHy#fPlFt=JDho?Z(jukAs^$ zYUKdKKzr$0kr^yyzxlYBpG-PB^{=s1TaroIcZnLY2w?1ebUzkOd<&Pn^Yu7oTMF}b zKe!8zeDe|X+5qHmh;w|K!b_*M4Hs`-v>4ArqUuR7iY^lmO9sG%YMllhu~zB6j}Cesre02wmXGKiY%2T_;ju zTMjW4C`f@m>%SzFPE)g{i1te7G6ys7+J^r>1ET=tkR>MOeQ?iF-1Ygpap{ehBF2dO zZ}}b;7h6!%De9KR_0=YsCG2sU&K|IV_%?xNZNTk|8Wt(}5*58=(*kopUtH(By2?E8 zaApT%+T^MdIB?2xxq2Z#>f{-=A9=FjveeF+(?-DDV)2FLG+-d1ize%HY)dlzH2==~ zCG1Fy8Jc@$N{m~Q{!x5m0~a2-uq6n&^w%-AJvKE8Y6vH0=k-{tJ(Fib@yz75S+v1s z9fyWLj)jv6f}d2bF||f4lF5<^PVt?j0%EDltkqKcDAFnQfimwG474PAuGCHaIS>%J z)!emJWM;F;4G?M^_ra@GH0`xO|$e{t>tQ>ofg8# zS>|S#o9pKe?HZSH6SyS{m5h{-BC!l^+JPrZ0~!oif~2$v#1$Enb7Ib9v6^4w$6^p9 zyz%hp1!Nyd=b-3_Vo9_Nyd1;M7u&+234FFBU-YaLu!qJS>&Ta84jo{HkA?|Po#FC?jeV+8B> z@&K-A#}(q~R$>K|sPxZCp`;2Lx)K08U<&CIwwnPb$sG^#wQ561fsil=!iEdr979&E z7s1P(-D@{{>%q>q=G=g9OEfnNG*{0fZKr+?xi8qX9x^XX$W=7Wb_=bP!onby;aU`e zAfZx+VbgPMDn-6askwF9ORx|^O|v8vkgF!eijXKII}JAhF^gdda9c7_E*M-VP$3vr zFwf2;oA!yR);$jBQr{SiMh8>8_D8l(Hp}4%lx)urt#_#GKH4CSyPASmfW?JyNcC#U ztz!ko-9R{#rYQ9j=(PEk(u{itrY1W|yd`u3$=Y<0L6S3CRQwq8ybvM7O4k0_sT>7su!xW;ZX%Kq!~= zldpt=9H|clWbqc(q=sk6(7d+-Cq7uTtzg#%oTG8Yau#MKSY!6WycfB64`BXu*Dds1 zh0preG}5Ne4uag26TV?ST(ehh24c=+8S{ke9C`VWs3c&dooGzk11+xvVszWMXkmyP ztEM&3zp~BH)#FMt%GuYNE^?ly%)xiR43&$IO#el4#L8)>T?1ySy$%-I>U7onQH>N( zXt!e$PIEJ;l!eqWO!&Yx{pg6#_>*YH7 z3HUIt&~U0nLo`{mI@mV&c706j{k8dY%Y>zUy4tJ)RjfJe!6m(^vjB@LOK-G8#rINqoCmcWY#`D|Qae<$R$gzdLzQ$$ z2NNq9156kstS&<&c{oqFve+mQV=!V`#v@yTh@j~_84W75Q-Bo>R6j@A_u8|mux5~= zYNZD^r!l45$c(F*bL$(i1Rf-bM9iF)?bptUYkypf2{@l!_-40X27%N}XA`Y|oWxx) z8BMv!utbMAUk_&iJIXzYHAA(D^g3MoXa+*J!MbxgIQq;o+P-L-&mSQ#1tEgz&8CY{ zv!!54sTPiqP6h)DA71FE>r?MxH;Pz8Kct; z&VThDW5@Xnm&VH}bEUpN z19u~#Rhw#W_$I-GAQfCQ$zp7SO;OViRJr@EYaJc>Kv^~u&HGnC((t)K6 zOXZhTl=m?C7_##i)&T~uwWy1;6x*G-%NoHESby#)F82(`g+pWQZ?(9>%(=Ho+8b)7q2#MJ={k}G6#IPIHv*tfpT3-n?x3YC z<+4}qafKWsmizrs7dZdb85b@%lah+yYUyR51DyV*QC#w&DXcrEoH{bIvxhr=_b?7U zz69!$Rz7mb9hPgyxUtTRA?=spJElB~lag;uHPpyMiMCI_=XVSah_UAlpcPik#pB}^O{>dap*9|Ya zJM_pB?)XnH;Dz12TqX-0r-cJJ71^;C2u3~5Z7;UTJ8Q3kp8?9BF~{1Qw~gYapWKA4 z+lH?|aO7wYw|w&m?tg3+{Wj)tW)YssObei))^s=}fc2SY1ZvjHAxQE#0H9BvvCOe= zw8;ZQ3c5*$2e>pNMi@dNfpWpL5jupEy$(LKggbtJ28VYp zr$0uY2kBY0kt@(LSrV;i;0EtW!G{AsZKI;y7}8=;o41bQ$9`fX&N%Dj%RemlBJO!` z7GJx221n;xP%c=Idy~E*{ViHd256z7&;(b(u)Q{mLRR?EpP$j=*m}N*0yy;%VxFCo zFDeoA7_M%@$O#1}c>uP&p@Yl*`6M>{;7gx~cKC^9-1)~xvG3u!8fG#*Sj zMhY*;SCbSZxYXzxHzI&Oer7L~>|`J%T(TU5f#o%m+{J|CkOP>VS=SIDq$h923Fp3N z6c_#C7{)gK{paHz-`B^tKXwdH-F_ma5}Tx*QCMyuS89{v*&6J|0WPMUQdkXPEDPiYsA4`WAQ#DTQp6tc4D!Sl!X+OZ$2spDK{I-ClYFw*@?6A2e>0B< z{$dVuGcC}qOtT|RO0cr#su>o*n_9aQxN9Z}ufJvz*S>izCMIA0#PD99aqr{v_&@g? z#|v{ky)V_|T8kwT$eL>F#2NceeeUYa3x&*J2L^rY%pP;=QXB#>1YoE%pa$8;dXBjj zi)OmeU}8(ab-y!?t#4SJ3Dz8e{f{i;yZ>tzyYE{8a@tC{IL{HTY}Um$m;O2@ zeY%7*&K|*aZ=J-s=Z~UUg(UU}Ej+FM9gG(~J1>ee+mm0)=2HRt<2dEK z)m`vRUd+JaY{blg7BB4Y$JiOBkC9nA#Aq;j|7mZth@mUBD`@aHy}R z5A^V{uO7pJWBoKGhn&w11}2BBUP4G=v2K}oLLm%E3Ca3gvswWC=~+FFeG~v&jyW9| zv>|9vZ2)KBT_8@`ROtRt`trz(tygz&{cn$B?Y38MiD0fQ+^g|={%DJjeRUR39au(a zV7^xR#Kpxzyi8F_pDdsyfW3LIe6<7E{#F-RjyA6qn;RNjE+pk>%f$o|3-{BX$fiRX z6HEEgKzQ!kE$;Ze1H~jjjvL#ze=xT^AVrB{RAG|(@(73g+e+O?uCtP#4G(~Xvwf@ zG@vqv`5(<7p#wv7@}rZ{LrDJ z`jUh70}_!LQ)dKR{Yz_b?hRcutGlA$KiDfW@W9SKK7Z#T_Rhr2mL=~k@vgCCAM@Ju zQkM@O2#xBn2!+M9zAsajn#n3OxJYVMRnBT6{6SWdqc_7;niil)j$6%ACULTgd;=VP zF5+vyw}3-CTU_=tqnOz6|2FxWUu1m!fgZm6-6b4fWKbukK{eAPp`s)=peERg6+Hp7 z4l9OSU7u;FRK>lX>!dcR2AE)Rt{&y`({3&=Nr^1$4FT-_8W5FI#u;3FCZF-L!cPi} zr4x+rd}ayz9%*s)&yC`YOFIbPzdx5W^u-M9KG5Q?@9N>f-F@@{P~-p7xqwUX6{OyW zvSz7D?Je20-zG^8A!Fj|T>e4M$zXR3|7@YDP+=PetgN?_3HUa=UQ3aBLA?km-eWWE z_CQ%&auVR#`}%m{nHH~m`v@+6_Xwt6#iYo|UdQGbw?Ej!Hy-HW@EmkpTJyt%a(Gff z%)T>J=2sU=Go}r(0_w&ryeiHGP>uokpL=>}-85)&T(oV0wGNg*T4i{I_&5b!urHUai;M0^|NCT72Wa9(Fz7 zruy)lohrwfp~H`UTv{?%#SmdY<$J9k3xL%POtSP~e?*xc)3FQZ z@QZXMMB`mCfWJX0J=Lm)?0;P~hCRG1nxi}^wF7KCyTSR_cW~ZyU7WHlq)GDsfG=iX z<~ZYfPqw)0;U1peAJK~db*f^4YUojc)896*;KBDoZnI0Exo92a9|)09<^DZxh6nw@ zj+SHJ*s?dLJC#Ja4PBuuz>|Uh;H`iZw^iEgCENoJ1~8N%e0VG)SdEP!`P|*lMuf z;$xIr3p>X8-;_%>l$AIc;I?meJ85AaV}wtCnKUT@_V(U^8k|H@;alQh{gFtkn&=!h zxWYHp0;kn!Mh2rZ2CO@+!ItwHoPK_TP1^&eHwBDM5;`MAK4nEP+ZI?@U>rTh*!O(I z?!7IZ-Wze?NW_U=zCSU&4Gn0kR);wE!#*^U!F}B?rN0iu3hZ)Um1XqLR6n06Q~u}- z%|7|a*K@97lCx#J^t_sIWx?!PG{=Ptm zqDYJw(nPwLi}n(zgwU`OClxL(R}Ct_qH-JQcQOskB}7&mO#|m?2Nq!w>1Z8Xcw~Or zW`SuG>{c!sOmujFe2%(gUr--gNFF(vE{`o@L$_6>&N27$(^(UjANOtfDKLqt=VU+z z%|Z`52O$YYa21#_*xl>Ardngz9aGDA5&yDjoV&jElZHn_K$Rqj3%kmZBnP%Co$G(6 z%pH|Tl>n~5bzqeY%=QtAVa8Hu*tO->0&$WzME4!Y?Ao*YD~~E;=~_^AzEL5pr0rXB zK96zx6#}HvQZ+3U7R+0jfqSWj086b#d7qvos}Km-aM6m#Dqq7ll&>NEsx?_!>xJsV zxiN39$V;rw(lPU1eU7V;sDaG9;ITT05Sm>CXTv~ zN)QKqa{ly8Teq8_&`N?+NT>6S1DpX0qTg(QQXyFO_E|j|XtMUjrN8vQML>o;1KSrd z`EZ}5-}S=kt%4hVwVRAmDmP%u1^{#fVL*c`(jzB$K)f}u@9diQ1d5(Z-!!Fx`@&O8@y7TI%VrY2THojpTmB)Co-2Baym^Mi1mR`;~CMm}j%K6}aH z{X#55oQ0PT+sDKDiPW!?ml`J+P#-S)GPwRx{446B^P+HA;Wg0j0+vM> zMQ0V@_#0qv%I$ycl)_iZk(F6hw=>Lw6l|sF$`$+nq_0YRs(Uh?5h~_xqG5c%2xz@x zK39)8gvP3nr{l?}wjNbv10o1Zeem8eI!O-_Xi0G^ny(1SO8fLGj=q!ksl#3#aKA20 zz5{lq*|CS>G2ERdTSoNpt!isWCHYbeJ|4zGuKj4&LQ3^7vw%TJ9LM>xBatVntrctM>G= zHTRcn?sWov?!W!U3(tl3UluU7k^V<$@IdCPo-_}?fjXQS@^cuIK6yhcv&`a#R%)tf z!;`uEo9oc*rFCQ(+nkh9tnh1vaB_t^AJ(USyN`IO6ih~*!_W{On(E^7_^GuBr(X`- zdt2NyvKGIOfMbBwP!78VGo_X0F$OxYXu+)_$^+tKXAbTe^0X^yE@h$cw%|qf5{72PYA3 z`cuNTDZ-g=#9xk#;nOJpdU0-;2IAoIW`^(d0^$2&P!~+&=p=$%3Xr3AtamvCh{`28ObV9#3r)wQu?`+)`R+ zb!kn5FPt%f|Ge{fyYT1Nje>||>1V<}yDwnj1v<3h9QyT<34ELamYoo%=k!wjBEGB$ zEr#{yfM~c+Hf_`k54)xcVI8DXdGQr*fW^eEa6b~746$1-A}reAA%gZ|RB9zwI5d&K z`sbs-+=7V%;rQAPK70BY{l=jMdS1WtBT2)I^e~_3L!>N7oGpcGpKM2Iv4%;mzk~>0Eto5U z=AV-a8&*W%sd~5tp`TNh)C4@WzDvLJ<}J-{Opefj&s;xRjCu`4<}ZGkaoWY8N4~%p z%|FjSzkC93=N4NSJOZFWT2+{eWqxu$2fz)E`!_?ERYJ6aH2sU)u5P%o^Zfdf&;s*R zPo?FyQfXNfo)5lbQyn{Se6HQnT4zFRc;yO8H^~gHj;pAR*7dk}uw2%yP?_`}n+tWBiuh z0>6zJm&87{5~J||i$WN{!Z4@;I7_8p$IAb%W*(LRLrZ9)l-laDg}M4Mf5#9IV=jC3 zE6v7S5?d^e)*!bRT0`>%=hsV3PZS4rY zeEK9FTW+cUA1)tR5ySrr_aHY4Mv!ob0000bbVXQnWMOn=I%9HWVRU5xGB7eQEigDO zGB8vzGdeIcIyE&dFf=+aFj)|Yf&c&jC3HntbYx+4WjbwdWNBu305UK#FfA}REiy1v hF*7