From 91da5be26025245bdc627903be0f51146e8adf38 Mon Sep 17 00:00:00 2001
From: Sheldon <39169452+sketchmind@users.noreply.github.com>
Date: Wed, 27 Jul 2022 21:25:13 +0800
Subject: [PATCH] [fix] 300 error cherry-pick and other bug
---
docs/docs/en/guide/task/seatunnel.md | 82 ++++++++++++++++++
docs/docs/en/guide/task/stored-procedure.md | 2 +-
docs/docs/en/guide/task/zeppelin.md | 53 +++++++++++
docs/docs/zh/guide/task/seatunnel.md | 82 ++++++++++++++++++
.../dev/project/workflow_date_manual.png | Bin 0 -> 25415 bytes
.../new_ui/dev/security/create-cluster.png | Bin 0 -> 641597 bytes
.../new_ui/dev/security/create-namespace.png | Bin 0 -> 771019 bytes
docs/img/tasks/demo/seatunnel_task01.png | Bin 0 -> 158509 bytes
docs/img/tasks/demo/seatunnel_task02.png | Bin 0 -> 207915 bytes
docs/img/tasks/icons/seatunnel.png | Bin 0 -> 5405 bytes
.../api/service/QueueServiceTest.java | 22 +----
.../api/service/ResourcesServiceTest.java | 38 ++++----
.../api/service/TenantServiceTest.java | 22 +----
13 files changed, 240 insertions(+), 61 deletions(-)
create mode 100644 docs/docs/en/guide/task/seatunnel.md
create mode 100644 docs/docs/en/guide/task/zeppelin.md
create mode 100644 docs/docs/zh/guide/task/seatunnel.md
create mode 100644 docs/img/new_ui/dev/project/workflow_date_manual.png
create mode 100644 docs/img/new_ui/dev/security/create-cluster.png
create mode 100644 docs/img/new_ui/dev/security/create-namespace.png
create mode 100644 docs/img/tasks/demo/seatunnel_task01.png
create mode 100644 docs/img/tasks/demo/seatunnel_task02.png
create mode 100644 docs/img/tasks/icons/seatunnel.png
diff --git a/docs/docs/en/guide/task/seatunnel.md b/docs/docs/en/guide/task/seatunnel.md
new file mode 100644
index 0000000000..e748360665
--- /dev/null
+++ b/docs/docs/en/guide/task/seatunnel.md
@@ -0,0 +1,82 @@
+# Apache SeaTunnel
+
+## Overview
+
+`SeaTunnel` task type for creating and executing `SeaTunnel` tasks. When the worker executes this task, it will parse the config file through the `start-seatunnel-spark.sh` or `start-seatunnel-flink.sh` command.
+Click [here](https://seatunnel.apache.org/) for more information about `Apache SeaTunnel`.
+
+## Create Task
+
+- Click Project Management -> Project Name -> Workflow Definition, and click the "Create Workflow" button to enter the DAG editing page.
+- Drag the
from the toolbar to the drawing board.
+
+## Task Parameter
+
+- Node name: The node name in a workflow definition is unique.
+- Run flag: Identifies whether this node can be scheduled normally, if it does not need to be executed, you can turn on the prohibition switch.
+- Descriptive information: describe the function of the node.
+- Task priority: When the number of worker threads is insufficient, they are executed in order from high to low, and when the priority is the same, they are executed according to the first-in first-out principle.
+- Worker grouping: Tasks are assigned to the machines of the worker group to execute. If Default is selected, a worker machine will be randomly selected for execution.
+- Environment Name: Configure the environment name in which to run the script.
+- Number of failed retry attempts: The number of times the task failed to be resubmitted.
+- Failed retry interval: The time, in cents, interval for resubmitting the task after a failed task.
+- Cpu quota: Assign the specified CPU time quota to the task executed. Takes a percentage value. Default -1 means unlimited. For example, the full CPU load of one core is 100%,and that of 16 cores is 1600%. This function is controlled by [task.resource.limit.state](../../architecture/configuration.md)
+- Max memory:Assign the specified max memory to the task executed. Exceeding this limit will trigger oom to be killed and will not automatically retry. Takes an MB value. Default -1 means unlimited. This function is controlled by [task.resource.limit.state](../../architecture/configuration.md)
+- Delayed execution time: The time, in cents, that a task is delayed in execution.
+- Timeout alarm: Check the timeout alarm and timeout failure. When the task exceeds the "timeout period", an alarm email will be sent and the task execution will fail.
+- Engine: Supports FLINK and SPARK
+ - FLINK
+ - Run model: supports `run` and `run-application` modes
+ - Option parameters: used to add the parameters of the Flink engine, such as `-m yarn-cluster -ynm seatunnel`
+ - SPARK
+ - Deployment mode: specify the deployment mode, `cluster` `client` `local`
+ - Master: Specify the `Master` model, `yarn` `local` `spark` `mesos`, where `spark` and `mesos` need to specify the `Master` service address, for example: 127.0.0.1:7077
+ > Click [here](https://seatunnel.apache.org/docs/2.1.2/command/usage) for more information on the usage of `Apache SeaTunnel command`
+- Custom Configuration: Supports custom configuration or select configuration file from Resource Center
+ > Click [here](https://seatunnel.apache.org/docs/2.1.2/concept/config) for more information about `Apache SeaTunnel config` file
+- Script: Customize configuration information on the task node, including four parts: `env` `source` `transform` `sink`
+- Resource file: The configuration file of the resource center can be referenced in the task node, and only one configuration file can be referenced.
+- Predecessor task: Selecting a predecessor task for the current task will set the selected predecessor task as upstream of the current task.
+
+## Task Example
+
+This sample demonstrates using the Flink engine to read data from a Fake source and print to the console.
+
+### Configuring the SeaTunnel environment in DolphinScheduler
+
+If you want to use the SeaTunnel task type in the production environment, you need to configure the required environment first. The configuration file is as follows: `/dolphinscheduler/conf/env/dolphinscheduler_env.sh`.
+
+
+
+### Configuring SeaTunnel Task Node
+
+According to the above parameter description, configure the required content.
+
+
+
+### Config example
+
+```Config
+
+env {
+ execution.parallelism = 1
+}
+
+source {
+ FakeSource {
+ result_table_name = "fake"
+ field_name = "name,age"
+ }
+}
+
+transform {
+ sql {
+ sql = "select name,age from fake"
+ }
+}
+
+sink {
+ ConsoleSink {}
+}
+
+```
diff --git a/docs/docs/en/guide/task/stored-procedure.md b/docs/docs/en/guide/task/stored-procedure.md
index 5f307878df..5aff75207c 100644
--- a/docs/docs/en/guide/task/stored-procedure.md
+++ b/docs/docs/en/guide/task/stored-procedure.md
@@ -5,7 +5,7 @@
> Drag from the toolbar  task node into the canvas, as shown in the figure below:
-
+
>ua(vnYFVTZ~m$h09|ddDX-3V)wP->%RORFe__z^*+n&VjW;E7=o8H z2?ff@XCXBVSj{9^K~#!4l6Ms`4Ha{V15-idlnP8};7-(n?o &t9wfA T>+$Z@Z=%CNRrOrc9 z9Te%*KQORT(duH7NJMi@cTrtnz*+*a4E<_auAjd{?{hS*;JqIWU}K9K6ui02wgd%T zD%Gp%RN^1W9KAc2)>~Cuk=s_mPZsAN-Zi;mp3Y#`U$H2r^WX;Q!wnvnm+aT}D^z1< z<}!5Sip^^sS9ZjZR}Yxz)HagSPw!S3s7^9pNL`gw2*?tD!nt3PmX>B t;9;10C(mQk7dae1b@$iK4VI#kQFonYCn$p~ui@KXZG2=j8ptm~7IvpqTg4#;p zC*f2J*>XUQE)fA4-<(e9ak2-wd1RqIIrt-~nQT#P*%$O9@|4n=^V82XJ^P|GAIGK& z_qD23qNAhN%Q~r zmZ?HVt@LbWNTaTcUo38Z6?5Te+a2I9c3#)AD4Ha}kB9G;F?QT#aFqkgHB-#ql-xI~ z-qXGA*D1Lix^Uo22c~-DH;uZiaB#Oo;rD*lX4SQxlK0
{-?|RKF6CHe58d9ZdtE}cBVA1-aTXPN6ed5 z-Rga7-WX35_ UPp3QBOt zorpDIspk!lL9SJf_7%6eonzPN2bJ7=>-nk)RuU2}+6@yfB0oS%)O@lu7Sq>I7Mnb6 zG_S_?XD!9Ud%n1N^+z2WMev8(WGD>Pyg7~Nf-Ulk5i =e%w4WJoo!;H>p{gtH1r&uO-Z;v9Pk{` zu@Bj3Bcma=1b;aX4r)G~A;>u^w_sis<;S2Q<57ZdIQ`=U15M&%6|sGnLkn5}l~07> z>UdDY!NQP{cf=Xb*;TB!OUL;{I8l&N3Cp%_l4VS|(D5g~4uhIkGX3wE(lVDn!Q|Pb zFELEGlp0^-MzI83s@9V`=EnMTv|ZN(g~+U%X`C;TpkFN0TLEF!` pUsyX 8ieE%#HQ){P3!-DE-yPz%qS+T~1;YhxE^QJK#%6-XVediiC zXssPgx|&t@73*WVh`~`!9%m{v6GxB5T O-f&iiX zCxJQIDbIQ)$`V&xHE8YnT^#0g(L!UldJ*?y`-s?kDnzyqSkxzU@GkNwR
{ zfx4!xnOCWA(#@hLp0v`c#v>@HNQ0!Mr-(sRCvOxUyGTi=J;?p-r7ri<3(T=r)*t?{ zDQSVE6Gd_NNjN8-BaMbwK9?PNDHVa+0XmVHQR6YiaGbS(J67oB`qH@}Ypi5%IDGMI zyxwtXNuE0@aapNZ$!75ayZ0NDRUQt9a1@jH9PiGjZBBkXHpa58)=0@6{N$uRazqr| zXJ6tZ4m&IGC=l_RN)@s{*zHNZWBmo%qDpk{k6ZwkxkRi=@SE6x`cMpbW{ASDDb`mp z0=*dKx^Hh&UZH!dX{cu?@;JodO1&6=5xSD~?p(ZtiS$!lBndn}l#c=f?o)&(xI@!s zd-l-{fONcpY0iSB*&&4%;f2Cm!}cDYwJ%Vr)cD;_pZjx=h`L?09Wf+0c=@nV7p-9b zS&!&|B`M*J+CrOw^%?yGJfB$GF{D^-m>uEF(J3s0c*j8`#A-VJ>ZYK&nj_0Ffw z5?%GDBH&BWrp&E<(j&9sbo;o}Oq<5N?kcx~)hdsZ9o VpR(k-JzdMJJ!CCk%`CNzqvI-814elul`Vh$j0 zD_o`EEX}FWGpTqn-{ s3?}mCS~HCi<;Z|$RUud z kzTg!P%PU{QD`}>y7YQvvQfw+QKt$pHQw&@;VxFfpcw;Us+HdN--{~lgaST zcFyQ~4rQ2VT@Nrz+MD0y{HmQ_^di {iJg&u zRwr1K_)gNSlDsBO6R#xHoL-cDLc`%yOZUmW!(bVH$hY-w+e>-W4O0B@LX5cdLMw(b zy171}2#Cj98&F06tT%&l`=u)L9OR`r0Ej;{w_UFp#k|GZRzXmd92Hl;H4H;uP@eGN zF&ugt3F7hqHwzM rh-hKvs+npVNbY_J4>DwW3IWbh;N830<9&svrsF>?zSWQ;OI~V?!?V ze=wub?7GrE>sKQ9wFTFVNtr>XV2in9f?nFpc_q}!w|_puq9sNl%#$g$wAbURgj zX@Sv|AGYc43>8 +Wt z+P>Kw*wqYDaO>RFa4uu)sIY!lfBE&4ufX8Ph;;2Ga5=3~clx8dw3liUfR?aZFlN)_ zAVyv2WYMGg$%gH+idV&jBv9unfR(;$ke5)LHPjzf0=oWsi*Yo3z<;Xz?X)m)hxS%Z z1#5hF$4B_q?m*#$y vEO0p??T8*pw ?V{g`xi@BE;IVg+~%!b8r?~ zIJ V8Dv-B2Dj z&Wa9ti|m3pn1(#f#&^Issx26ZMPf_{{qtOthhvxU>&&~pDbm>+`p@UBl8p}r4>!rs*(?@y%g!IX$ffayV<=|wkYa=ov{-Vb z!`Mok0yWOy8`;aX`<@A>&-EN!S5w_7=%G!4?+S;`!1p$g$CxFZ(tV$|MEAr@Zk9AK zH|=`u_8kTDoqj_SOxQf6iP!zm_srSA&F`BnVb7$HTgEB4j9G%9n#H1Uc`J9H(u}lA zqCKM`oB?UlZ*gIsi}vpRj~>Bm`|~X`!G_TmMf}n3i1TkkE%MVx?F7xNdaerrGWSLu zTI+D0RtGpxsPh+gKSxr)`vKj64(49Q4UVjQ( `@rE}EbzfY#!kEBl3)7NuO#+h z@~*(xgM^LskDCgI^DC~U$CyDy6)Z6-X%OBwq}$HVQ%3#5NLY_pi}ymw+zZ&WXe!nk zswYM=QtS%5ZO1@*xX%kD+~2@XHWUIA`S?cq-oRb9kYl!sMUyQmpVhf_G3ZD2%uFp* z;_aiqXt^u_o+Me8e6c1U;sar0UU;&ik@82H>t?xvGbGkkeKNhx53egjW*z8^H!diE z9a%Eg=~E!R%%P;l4|RnkNCi;hRYbHrH!Q6?&pi-sYf(6cp~1VW#*qImnpO>QXK>uL zSn{aQ(})WiZ(QY+Sxo3C`C4n$lfKp6SZ7H+B(^*-J%4>{q%k_e=cyJEKduw|1jYSO zS8uQ|Z!6vrb0uq)6*n2R6d+q5K#s{klxnqd<|<>GiljHQpn0GbW8FKe(Q-aEgA_L; zCY$9*f^`&LGab0&*84m+E0=HOc|D6d6qewQrE+w^K2wOvw5E+B;%LaO&QzLqalEaw zK^KJ0gb^~%+JY;wqsBC)xb4l{hSvg)->oQBPA @5;z89<2N4Z$1<00c!`gXNn#y{2gT?x)$BqoV+5;wLCY$RxIFnKX z<%R--!m~m@(W0Tv)|u(MT0dtVix806E9zqYU|5*P5wWCWMW6EC<;NGL;>E}}^k}5c z`05>DQ3SG&8{}$nF2|?_w`51RcOs#&?ImpbeZa&kXd;MvwL+wI6jSL5FY?i1^?c|M z;WSlOa9joJyBp&2rDvs+;y6tXwp5{(_*DJc!C~w}!8*qFC+QG<>_CvlT2PJ|_^eL) zqdz^vVle6R-BS@zC@{70^R#BOw>R^km0V8KV>XE?)F|s^4N*o2VTk48rKT`NYVLv* zU%5uWw-@bOOsF}p?l>H~f4V#>l^)l3wr S@ zkL{DHc@qBh8d~RUc^Y$t$Xt9D8Wgy;!twV}*>9rHS{n%tj7j=k;urDG7{6CnJz)=` zoxU9TmJuM*7tm;;!9#Rnu+9I9E h$Z*B* zx`n|yz9PLfsb1NWHbKVZZl2**a({L&@Jkc2PG~_%_LWQZS>;G6ZYhjh=9($S&v5@$ zHlWum(9xBp1+R&`Gw4#yyC8*{FoQ9wW&iF{3T#})`)-9$UO#rK)$t2n?JQNGv6mpd z4e^3YxuX6Tg*yU$*5`%qSZYW%UavFc@{KI^7NU%gt3Fshp;Cf+T8wG*w!C*-8GlJe z&eB}lM_|iDkV+$$jovh>&scj^tg7EDAnuj6(K3bMg}+vvN8IE1)Fu#x=CQe5aA&Ye z)2f#r>{z8HEBRzsYDsBt_tQ;VqqKg*tYmb!d27c+9Q0Y`9vy@> XoSRN)yR0h>CyGPOOeF z4If> O5u%f*cAG~7TL-9~Ytr_qwR+yA08Mddo7BfigSvx~1AE5teCl)n9R7%;% zGF!2jWT<+>%EXRYt MJbZ=*Gx@In+ 6q^$~E9rayesn8IN)# zE^L R3+3UpL47Q=L o)H@ycM zA<3PZFL)Ozu_q}OCf&0yL{T)h{Wkm`*|;P7@%lB`dLJaOXOdr;dw=FW8dW)PDH^?+ zJ89 wD<~faNO#L68 z%z5k@edu^ ejLO9Ks$xE zUqrH0qQ>h|$EVD#cu}}ESuww)tyw5Ievl~|ll?9DwC{a(v&ZPZJ-dN{{BaZ=rpH7F zM$+hIKHD(+0+xJFO6J(U&8PL8FqIVy${l(nH Dds)OFaTr#umlJjI!wV3_XJhMB-Y;taV%jCJj5T>;8TZ(hrk$Rfd_{iI3!%Bw@@ zd30=h&VXWCh8cIb*%O5^xhcnNk;O%a{y`Oa0^VP5zebnvc4Zvcje?xy#^ah;oc? zq?;gdjfT!f$mafAv;M2fu&1Ow8T^z26rN8l14L;dMfm}5a!4UzIy-KxUMGRm@YD-o zbB-FC0WR8(XTvf&Mp4y{L%ei)u5-`#1X3`kJm9XjK!4Gzs;dkYcy=To-8MS T{y|A{SK&AD7Cl;D98Tk;tIN#syiR`!N6=v`$s?0q&=Da*uhhvLkR GwGp8ri->%_~JifO;Xxm=t@0{{a*nOtGOg^A0Up znRPYt;W(A}oFqLtuAB`z-=<2;JRUd99g6X#;0n 6mAl`~ zx0o@MeA%Ri5zj*A3b?ElUy+%KC0i`4!m?SXu9~{|Oi-p99Dc&8&u|km*1auSCtp(x zql?;IHpn^FyJoadSV5{7=`&xiW!7o5^6qV6XCk6Q(}DCIS}r}D!k^+~dPYC;YBJ}G z4VR>#JylG(NOro`=E~7}JH^{}tcOY<(|}5`!bv$ZoB6nn+TAeHfbQQC!yp5K0BZ|t z6zt&=z(~lTyD77}O(B|DIBTiD)QeDOR@EaByis&9oQ!m&b|c9AbwCxv_0-k7(Fy-I zbh7dz=7yBQF@D&qk_K#i0T1#j3Qefh6MXO=iiAEsG4Y$68B7FlOiSh3LS@Ztq4G Kj7?{vw}+Ek=#$vg#m=5PgeoX%9-VUPKxnVc4fh%^)GRFax(Ijg8IL`e!9%YsP#V z;+NBV8az+IoZ8$WQiP(EYHJzNALWak7GFGR@ayDu2xAUlB4W*lt9AED$@_H}qI#`= zRK^(2W+%rBe6&lX8OLByI6|E5ke?ZSzzmL4c>{5vR||0$EF#jzq|bgOjY;PqI_wuh z#PF`?YkRpTRx+$yD(tAYdI~DO@Se 5*zxmZUG^>$?6pl+*)>ohEGQte9kBf~Du2hc-bOizkh1_A?5dk7%?(y|qpcSVRN zv)|w}73)VcAIosu`%c+Nsv2|3S{Bue`$)2p?fdn$moe`9Xo8inM(=G)gXD)PF&)ZG z%~Pt4N5!^Z7QjDpkh+vFE0rgRRO94RQ%bM3_f&m8UQ6GXK8n@Ngs9nTg}%#&875v! zW0cK^@P-%1&9aV14LUfJjj4>yFB$GzCODNGr|b)9o2()Uo(i2W(+SqsRbnxKdR*<4 z>d*wIWNG=px!6u0N@a8G_;=6bs6ZqvW0)Fm(+O?6mpjWa1v;_{t#YTgE$Gn0AJ*%y zXwBO<(^>_g%T1x??L|6x(~zrGQqj7?n7;<5Lr#DH<-iCLF6Q5$=falMqkGL}#3H zZ=6cul5a2^GD`B6j+Kwre%Df5M7-I{EL-tLwLP1#B<$G|I*BvpK2zB#>2qe!GB>Iq zp)P3B4Ha<825o4`+QU0J>_;B3Z5J=*n2{C> 4h6~}2`<+6!T57+uEJdCJ zyW5e z{;HJoKk3N7fwsf*0WWA8Uv>tQb@*<6 <99@X%KTu zbVl&A$;&XVV)5SD#w;Hiyn EK`$-1YJ`YZ dX&i{oq^+s#}k6yk2zOnw|CKUG^F z4~#U{%G(KN&B1}&eXn+(7xKZSeQZU#mH5mVT{}U2&NT>kf|kyob4jIKQhUoaW>o~# zS)#sO ;Ya`8`n&EtLHy~jUuG n;`#2me{dcTOX}N$ z2mwvVr)tP0`G>SJI>V*>lC|qCJG?^d=8=vU9F8fTR$4&F3t`Dz>FOd>WH{(7#u z%%g=wF8p$tWtFPO*u^Lia4F@y@cC#MX`p^|iF+UCo;xC LcJdlh%rH z&i*FlV1=_oD#YRjyZ~=wi;ARmEFoc~CwRg~wr^K$HNMCb>oUf978-Jq=d2iN9_wAA zJtMPN77I(~_C8aIdy6_5*cWj5x|CY4qI^%^`&A5XEM|LWi+atgScNmy;#zADru|Yp z?|gwTYeL>anKMZ0tPGo0HAjKgB9{^ Akbz1G1dyh-Rmin-psoV =dGM7c4y)@0-+?-|~-iY}Ip_ zjkR;9f6|?eB@UgGj+K1m4%G?quj0>tVC10x9^Ns6B@wgt){n;o*6Fbb;^&7xjlq1> z(Oo>#9J3$Hf#RkWvLJ5lFTc7O|9JDo+FtLw*!xJIS}qz|`Y>OarFlWzR~QTup*o;7 z7oQUsN4?+QdfZ%} (C6DmjnV3V7WU zG|Yx9>tVYeL8m9-GB4fqLzFltGux)~%Hxxo8U6g3)&^qR4Fp_AMX1Itc#Q{@=5wy2 zGy+PUKDQ-|D=Pw|&+CxnOVe&H*Wk6yN5zL#x%^C_a*`bLeQX{v9%zf1JZMOAqu&>n zUXxQ;7AZ&g9dAuWLw05oYiwqvSsDNkmE?h4J|~Lfta+~um9!*{)^rx;9&;j}SWL)r zK<}(JpQdGsm}X3FeZ5!x_E%A9L3~ujNe#Z>_!LHoZNaaFGdwfVey#f`U^%SK`uj*a z8%h2!2js7Q*B{q#!)u+=Chf9R=PU62IhmEGr9B2GBoP0mxm$QnhoUMTF0%fL(eMK; zXxzvM_t;&0tOUhh;llOi>SV1ZYApb+Ajoe$jsG}`F#>mN70tbwl=G@rqweOkM^JwL zV(tVMK%k$Hdbv!;f>JPdkb1Iw!s5B`*paV#GbS~f(^q!VFE{LoC1>+f&hVatqp-Gb zvT33>pD!AAn|ZHJd~RG;FK5;ST(tHvfZf$bYY(1=)Ttk!9XeaufBx~&TW33rmV~pm zwW+s4HU)!=TfauiuUmu25+| l~; z{F<`v9_iCXI+t}byX)<;!;#pxFsuokUpFwJkNWP6ciaq7vhXW50-q%K1yD?u5oIK3 zt}}*rl>i-Qo80aq@@_#a{1@vA($NPlfp;G2bYFk2ov^Mai@?KvQ0X#T##?r(naP$a zcw!Wktbfv`8d^3u#rL#f$w~pUVVP~+(cs+llX1^BHt;wkKfyIPfX0aHV>yVWi<74S zq`ueD{B}0WZ{X40!HhiQ5k-z^yMoLoiyyrXCfIY}J7<%C@eqn7*u~B?>B3NUrLm1` z1%dbsZB#_PgcWFZBAc$0pOU6%gD><`mqE3;_7j`xGVR7Td7Km5Bdo`5(NKT q+HkvSKMTEZU`J!BfWgmHDm{Y@m zxHLZ3vh)+J-t~DO+~azj7p^O=xLu@bW)l}$Nx`rmIF23g#iT%C^~A?%<%wHv?n)^g z2X5}{-zP=N)80#hGkAqObBc *%d!soe@3{RZx}g_E8ibw1 zHB%$GcsQRU*S>j>Gm?C`p(T;NA>6;)BEr u^XC?Z<`)t9IDTA|(LLXHv0ivs=JhybxZ_<=hD{9*Jw&NtUmwViv zon$pyMrj^B%tlUZ_UwyeI`e)}yFa2ea24^)hWKozj3Z!#CRt4Q4ldM-x=8To)G~1I zdrW!$;Xz~*$ZOSdUdkA*1K;L7$@RH9Mql5HY@~-epVxy=+I3M$6$urObH5kBRV$x7 zq9FQu+M%n8IiiFNIUWpXdr>4y80$WX96*_aO)AH5B=Qo_>+6f+s1~aCMl% bXDn4w-PCn5}KI@A*;k^z%P6CDz!x)R8yLnKJ) ;|#_0s4jPAfYFVPGIjHw?HOPKP$QI4u=0$zi<*ZT3dLp{F;Ku z!9 bUPqTRga5VYUH_6Dl{P>pQkiBiva^Ko_m+t{dV-Dg|XcITuqEa!UY z2@gnPNFf<#$F(icL7vT`!<02XGjN$)YGFEwY7KxjcP|Uq$c%UnF5h^V&7!A_gGsEA zb^?E(di|W&0cU~#C}97n`J{>EKmZYkgZCL+@6SN!4Nl4ShI!}D20fX1v6{9_SY#qy zJE<$~N02>|SYY1E*eLHsyTAH#1g>ZL$Sk<)Hq>`i<{7MkB&&Ctc5~pfdhXiwL}U5< zt>aZ*p;Fj~lKbPmO0SnnF)D!Tdee&ZK}#lE0WNlz65kme4{2mlPn<@yr>jxSeDccsZjOl-3z9rc*Ok#vqMdOvJ+FH_oQj} z{sI7EutWSJ_ht~5)rLs=N+UZi3o NWiUmD3oKzVwKZ*o(5eGaIHWIWzEW-x+cvU!T`rLi*^ez7Kkt?p-v2Bi zz%Gc(u9Y4eCSEUil5QYmHRvkC%V^I2j+DH>*m;Ru4g@1}U=iJ#zg*>lLtW !_hZPrU-_jf(L5UNd~Qtpzyb+>kC2%xh*yU9 zAr9u$lbxW?$$C+}db!V@Wu&sziZrx4PB;iXI(gnx>1QNym0>gDf{VXf@69xoBXn}S zONVq9h02kotd5ApMCSmh%8djkUHb63@g9AQ>*~kB-U*ooS<)pk?OEIGAMY|D!(S8P zHWN-7kEbjh-4iY@!sk!J{UGYGcKSok=a*bQ2V7@!qw@qUr(O5gxFn=_$Kw`TrfpmJ zYduD7&+`%Q7WcSa2h(>yl%>_}r=&kD5D)M8;^jpzvX6zx?_Siz!=gMjlpPI)x($z( zwe;V6oDtBJiG44_J5Sw|=K`+EBq~tOtB}bJr7gSfKWs+1g~oIqy45-?b)Xc#Dq`2U zQ&Fr=2<{O0fNvy`rbswYB?2NgTw$f&3eYdYAv{@4ooT?{t$b;w1W;w#?{13_jOC}= z9qt(9w+B?bL28qma5AE-y4uECl265Hcov>bK7&Z;t6CbYqT86(?PrNlP!2R=t9Au? z!l(xoFk60%O7>lW`F6Ou>zTUq%O{B1Q~RkP5Bo#g-l;u_tatB^3<^fRi?Nt?211$~ z5@u3Q4|icgXA!9r@#L)r3HBr_%ragt=rs|9W|dQ8gM(XouW{O`2E)pX^k&4;w$r_mWCiQ4dGk5Fz0c>uJzz`Bd|X%oS9A|VE> !FZZN{@{=Bb7!dKtn=J z-ZM-b@%PS=(=&^|&+i4zp|JYoo=HtQ05s^xabfhl3nTI@j*+LtM!2u!uf O1Oxp!MWInoN5X;KP0?Pi7e3zLs#VZG**XalTu> zmb%3i2L16f#x#g|rdrsK{we6vxcs8x;|iVN*%w`Ptr#rchShJ03c3Be6Xn#?$7L&q z7qJG(qC_#co;^Q&p3R<)_u6DQxL0jW`@sahyNn(9T=w|%ulu7Mt3*_5rpOA6OgLTt zKV+R%R9sE8twV5aB*EQ-ySux)Yw+OSKnU&-+}+(FxVyVM4UN0Q k$ psIvQL>qZj!r3R9w3tCl&^$yq;A`HpSU zLIWyNKlY#TIC!!52n*yEs;IX`I$5h@5aDlgo{Q2S|NRaX$2jLiT;#yANG6hO_CKRB z1<6P*50{3(Va}gDmzX%M03w89no(j7^b)DS{6WG#mP8Z__TIl=Bv3d4X#-wl9+W5& zh`+#MBCQv=PUrk}XaqA{;6ORhM=uxNoaV4q-SS@LkUV{s-z3<-fwXY}-;Ubf*Sg+x z-7G~<$rt<9H5J+mceNFGkysp+lmZGN!hMMbYkg9 u!(i ZhEtJ=N`AQ|Fabe!5lX1aji5HYT`t2@7RJU8E(154aMqKa5`Q3D}dRuGOCAQe; zj7tg&m&~ir*)w` CJ_}T35#>Gst!{nhFvvHTd_?=_ffalKHV<=k YeFnnLvzFH+DF1Z+eu!U9v=;`vt7ol}1H_dQC%jo#>^U z*yk{=v(A&`05Vm#q^!iwub~Y-Z_`moU|fLM$gV+wTPd#$v}!~9w!`=F**h`4tyaJ3 zU=qAA`I|}$?E&~r6VF-(_jUZiNxHwJ?Y-C5k^+hPZUNQ4cjff~U4d)$^)Jr+Ni7!h z4K~24Fc_%0dHan3F6+M`|Aw%m9SIf2Y?MFV@9jT0uIO?=gm?L{n4BeUO?qd-ozuRT z<1Yh@zRZHAag?j#tK9v~d}KZT7J^WTpKE2En|fQHidt_%#<1WI7(p|z%kCT!&JY*i zV(5I_eU)i7Q2|fb`#LjVg>InLDpAg7S<`KUvW=Z~E e_J9TUE|WyfVEjdV9dcPG>wB-JG9lLqg!p#-VF_evtF^m+N9d*ws>g~cSq zA_t<%XRUKvmzE48q)Nx%hkT6)sfUzDs(x2ke$048>@lS;mq=26a@hlUqG^J3Q9&o# z2xc`@0P^)>JK^qX0fd?9&qM3r_`&rUqvBe#y&=nZ8!|S9I|?0~Mp$roO`RP{*0G3s zT{pfUN3g*%-0lklFKm!q4jN3T7hOkiEX7X>6G#F~@rZ#XT;p%Xg#R$gYfK_S2|`xy zQ0 YW#ohv5YMEXy<6+~ALV6G5Y@FeV` z+7SVcCF3M?F2Qic7!ODNq*gDYVz-7{9iNz{O?}50R5I~wrylN4=`XdlfhzE^t#9!v zifA44YiGxCSj>8oP83tl#b+Yh^nq*_ojKA)?W)_LpTF)bAj*B$kjhqqK5*L+C8CVP zEZi;v(^CVnRXsf4x|w8G{#8ncigAAM0vNtkv$W4fhfstabC4N9ldC{C7aaJbYcD)j zA9{0HyaLZH =oBw4|C6#s z!36W ZT-tR5z9_W&-R2W@P#&1h-x6Ic^=aY>$6`L25@SAt{N6$185h)Z2|hsmX*?rQ z8lM d}OlNH`WaT@5rusBT2lV0rtOg>g=b4 zKsw-}^iikW8jV{`Nt)udX+?#k98unGoE$cADYA~yhQgjt*0SHOH{5v>&zmnCr9PUz zcRUFzn#zqa8Dp$fHdN-O+Z%hcUM$EALxABql;=f;L}x6XSJPzTp1lGcIhT7Fj_qzj z(NX#{G(?HgB3`dCdZR45=3ETnI@~=l0idxy#tXUNguiO6WRl2>^t0{$Od6E!C JT;La_0RCV>jFR8W$c zMzLNSa5vpD88l+wY}I9Wl)lTjdVKTxG#m1~7yCUIzY?0`5oGXivqJ@{<37lmHp9q| z5uB>|!$pWN2DD~4&gal(0T&g-+N~*UxerEK6S)#6E6Q@rVM~QOHLjC>OPb_5300!# zps?ua^6Y_o{0EiSkdnZnz8_1Uo$_gcs2+2R;EDFss4=le&kBqM2fjNFejVheA2K1( zX+Li7FTN$b;bhZ(CXA#^`EEfAE&ss 7MonZu!0niWO>;&4QStK zx}U$Hk~*q 7OWm2yMlsV6 zRIF}PyF0Dp^(t&dEc_*Vsw)hcd!ADr ~$F_2xm@?3iP8)Dx+ShhGk9Ce3| z)D>tm6 2W>EjMs z*?F$f4RJ28_nMf82|mROjvQ!*`<%V^i5~tpVQ5EyM5)Ag;+Z=~HgBVg%fQz@U^3WL zM6oLq)ccq(7GQrHpL&(+?3%4?x|}|Uua#;v-MSXgGGXwkzSkY6_*({+q##}dFMwYh z4dS&N2oR@&0Xi5mu!FJ-;Z!E&EUkLmqMM{#0aO^7eBGtM#5d;XpSUlvM5nzYT)z`t zB)%hCA&Kz+So_&KkeeDZtP{EL!!J@YmCqRet{W1tzaYGM8O*u=I+GIVSe(HsOVT(P z?4{nJB_KeZ+0KquA|UOm=bFB?z=#T4NvY_YuxHx%ou+*3Mm9PJH{EhQmnY{+lG{zy zFmEftupP`Z;D0%vYz>RRuO?IBlfz%}EcdQP#XhMm&`H@j-}AR8xSH++RXB?1yUSCC zaBsxUM^<*%B-dUf1#?yJg0qUY
k8JwaDtCO?f*m=5yc;FUN+$MHnf0 zqGT6>qVhzlK<7rXiCc}2zkI#$R{pN#nODnA>R%Q`z(W(l=lJ9tGYWW$s*U8vTL3)E zYY^?@Anjpb?4QECg!ny%$Xe07peIuCdzVb966JFfY^X-gTUch4fJ6pFZ{Wh)1{wY} zXF0MJ7kE{9;t5~`4<>^jMg=t95}!4r!oC;zYT~yPV-hRB)VDLL!&uVgJXhV8=}i}v zY^eAwq-ffCt|%maRasCjjC!;ZkTwlDF#R(lGd &XCfL-3fe|f4gu~RkR zn4`#BqqEFpS3DY?RX>lFu;;wV`Vpd)DEfAE?J0w)IDJRM>eV#&=LbSFP(gJCqq*)v z ? zF5R20hSn@M+HKRAxq;?R+c3a`qC60l-nGv1M}oxF0EEAMGa+xV_~p&pRl{D7!oP#) zOsjV8R0f~@)Z^KZAWIl!WjdW&Mkwy3x1(s6IRfvwrC;s5`q!azCNmAK4L*EXs;e(5 zyb03IwW2D{b#d9wgU`kvBN4qpmln!WpP>V1uA3KCD$I17=z4D@8H~HqWzQev9C1}% zaK-nG{n6SG=qvK)tabaPIK8~ZiU~pY^yNZkmDrv-M)p3 zA0L858@?Y~2NPRw^#Z{SMUbL=qLNug@1>krpCXN1Q3R2Xwsi=9@psR8{iEW_bd$t^ zR6JGQ=QDyEk}oliTc@v+Y-lhU-Jd<@0`DxI!AHpPYI8fi{`)`8!Y=PQ-9L^AAzC{2 z5XR=GTK(rz{gpUt)XEG_n3c*e&5PzQ9*9%CC zl`__wn&QcKxK+zs`-So=#9^lyBqiM`+ar9UGboLha(s44>?R*r{A4nbXmy_9DMBx# zwn{3)TU*5ldXe=$T>Z;iH_bN0@PR$iVePBb4ru&5tIV&rE+-zN+dt9Kj32mtd1~v1 zZ^M6w!A~>&VRw**_ua6Hq)YoXrhT9}_qJ6Hn?`cXF6Wh@?N4ulU ~ zusq5;GGSp{mL?Eq`~9)n_3;AgqwFGM-26-%8`+zY TOxg`{J0C&Ili7zizE^+qPD|I=p|a>l?%D zEr0bM`#0(N$Xd&UdqHuewprbDUSdaW_q&i@)px(HI>9Gs6N6|nK8F2?-g{eT{z7?{ zW4v*{W0h*98&%!FbwRx~>alX`x$=}(E{ilcH^cA~%DVCq= r zLS#l%{>hJXCQu`w;x|v%TJ7AgE_r`6%HA9erpBw8RBtiwEJG^u`CASD2I~go;P#JS z#ks? {EXD7-)IXMVFSxR)`-jJS z=5ULOR*Q#P-WkMPl&z_gE}L!=)Ip{H36Sy~U3A$1*dts`oV$#=uw$Rh>_|Y^Nd$xl zeX?M9E8!ZXAuNrzFM=U{^dr^gD;i{@P@OR&i6`c3+EuI`I=D)j-}ad$JrE#V#iR5~ zh33uwu9evaV*7B&*I64>gkiz_` Epf1j3tpbQC#T#Re}o1w=ooSn%OoR z#krBi;B(}8JcDHzTQsDdicX@&by~-(TtOXrZ&?Vrg9>}B@w2`IGu7=sRioGp7dXG6 z=D;IE0|6?BDDHMpM1VtHbCUGvr2(ijsq?AhbF*44tc!9-4-02=&BT?6l#!O@s(8tS z{HRJKD-jdz*N)nl9 y9D9hF3jN2%^tx$|9I@AQm$4haGNF!TFZTUNw|JUO%<^R*|&vH&&Q3RKJhw^?4fJ{1AA zQofO$Qhc^j!tlmXh=UMVD3~A@54PFoN|z=r{TGMR>e(;$o^oXnmIv!4JVN}r^ oqO+aS{{Z1>m{4REAo)93r@V+Rb=*^*NN5pzKF`G0Mt{Y z9>ept{F@{#XmidtB6Dkc4PNYEX3vTchTUAZ^i1?+b{JvC==D&a(vW>#E9F$Rr=h3x zy2=oRyPa^zE)2>86$}k #mK{lLp`3Sp490w> z?N0O?2m8dUQO_Fm=&O)=K_8SifDiM*7m(j5l6jVIpbILMFUWgUFVR*0Rho`Cj_M)z zRn?t31U$y2Xv#iY?1*&nqd5b>8 f0kMGd4{Ya zVOWoFxh%elr~DPl>FVF0VxOo8wn+HNZL`Ox@Cp|p>Zs(cA)w}DzbfgQzd=pJ*GQW^ z%O~@mJ-lR{_br$Xw;R%r8=|syb_d%MN!UOQuo)GA$)IKLHt!6Ex{Cy1fr-|F<1cJy zCU1}~O1%qY+sZGq>LgNswij3+%JbQv`(G?n*@W;<&N$=j5ecY Dh6I_Gb^DG{IEA&DM^Fn`o(!I
ztpYkf)x86Cv|}ny^97bWLG-WIy~!3R;O0PfnyG>ir$Q$w++&M*s*>z@W8poCDw4O* z;`s~9Yo)h}Ls#mxdBb!0Z1u^$BW{CW`13J-X^e;c*K2JR&{)Z+rw*FZAbe(ZYtpP% z!E;4>0pVYiXNkL=z`h42@=d0tb_~0yetDC^3n|9(U8`{sKDH(mA{7D6@{9XNcm49I zf3Q`|6wZ~WhcuA>Sx@s+Oov77D(+@V${&SKFcbDxd=o8k7Cd*g3G}0==1EW36Rno# zNhj3x3C7@{NlhOrd@#0o;#O;Pjf+wU`}-m8Y+haYQ<&(2;y_^rXAt69(zDgMZ1w<` zm@|1=x$c7;PcY{&@7DteVVtnK7~u?6yOh3NvpdwWODyzU)W3m8Op!z0?o$P-%^A3! ztVC^FfuW&KWfGC)ltTem?+GGWE@O6WbAVqPXuEk~E}PI;L0`<>mr;5ZX2It0^55Tk z5OdU(|N7^m!yFG^O*#VN3=20K5= zR_PNYU>rc-(;VSbtP99)D-x7``}rIj;oS0cz#pib# PtHh8q~q=R$)vFh!18@l0}b zZszB0>_$!UR $KFE;6Oo6ApDCq=4rRY75F z8*ATkmg8!&-uGiZh~KvCz1*J#4IaW>?$k9USG64&FhgyIP%ItaCpRV +0jX?({7o#n(+C6U zOWtd30#P7|A>C%Y1^zWbtk2)aj?d3);-(0FB_R)QC1Kx?`~&Y==ca0u>`9P@VLaE` zK<&y9@q_!RZ)8xUJuK$5RPf_QFncWRHOkB|L6LFExXn0A%gw-6u^^5Q&+LP+v7#ra zg}IACP{LrP2PVDxl|sfF@qy0A$dl2}1dQWGJHc Dd(#7@CKy`0(m@q(b=4I60x)5$x#z}2>2M+L8i zeW_(I9Cy8+#Kt5jyqi~%deylLkcI`Mbj%>BCRX)?tZ2nW`(@va{wXvut>Cp(zhbo} z-OEKhJ5|}b6cR;&D|Z>vVXgimCp=Siu`dWdML17>D(7Xk)v=5!KYXzZ@oD^|IR((@ z+7-RDLetw9e=%oB{yVU*VEJK4`%2G+C5QwRih*4tvMQ2O`ne#nt=r=-$Rxmgo$9f^ zN0>a *TRpRJtPGvt@Lyk<*^<}f5x?YjHS-}d*=-La##w`GC zk1=0g (yEt#eXlI1Xc`@e1LOg*i@~z zvxbSi u>_((V}oF^o=60}zLRdUMqSC<4aQW%6nW+E4=J z+}3ZQHU>YKG{^y_s{GaehQL7PmawgBs`*^wBb