From d54a51a328e70be9d8082993fa0449811ef25a7c Mon Sep 17 00:00:00 2001
From: Bernardo Damele
Date: Thu, 22 Jan 2009 21:28:56 +0000
Subject: [PATCH] Updated the HTML manual for the MySQL UDF and consequently
other files. Thanks Roland!
---
.../lib_mysqludf_sys/lib_mysqludf_sys.html | 72 +++++++-
.../lib_mysqludf_sys/lib_mysqludf_sys.sql | 40 ++---
.../mysqludfsys/lib_mysqludf_sys_0.0.3.patch | 154 ++++++++++++++++--
.../mysqludfsys/lib_mysqludf_sys_0.0.3.tar.gz | Bin 15310 -> 12538 bytes
4 files changed, 229 insertions(+), 37 deletions(-)
diff --git a/extra/mysqludfsys/lib_mysqludf_sys/lib_mysqludf_sys.html b/extra/mysqludfsys/lib_mysqludf_sys/lib_mysqludf_sys.html
index 2997df399..d762f5fe1 100644
--- a/extra/mysqludfsys/lib_mysqludf_sys/lib_mysqludf_sys.html
+++ b/extra/mysqludfsys/lib_mysqludf_sys/lib_mysqludf_sys.html
@@ -23,7 +23,8 @@
This library lib_mysqludf_sys
contains a number of functions that allows one to interact with the operating system.
- sys_exec
- executes an arbitrary command, and can thus be used to launch an external application.
+ sys_eval
- executes an arbitrary command, and returns it's output.
+ sys_exec
- executes an arbitrary command, and returns it's exit code.
sys_get
- gets the value of an environment variable.
sys_set
- create an environment variable, or update the value of an existing environment variable.
@@ -31,6 +32,72 @@
Use lib_mysqludf_sys_info()
to obtain information about the currently installed version of lib_mysqludf_sys
.
+
+ sys_eval
+
+ sys_eval
takes one command string argument and executes it, returning its output.
+
+ Syntax
+sys_eval(arg1)
+ Parameters and Return Values
+
+ arg1
+ -
+ A command string valid for the current operating system or execution environment.
+
+ - returns
+ -
+ Whatever output the command pushed to the standard output stream.
+
+
+ Installation
+
+ Place the shared library binary in an appropriate location.
+ Log in to mysql as root or as another user with sufficient privileges, and select any database.
+ Then, create the function using the following DDL statement:
+
+
+CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys.so';
+
+
+ The function will be globally available in all databases.
+
+
+ The deinstall the function, run the following statement:
+
+
+DROP FUNCTION sys_eval;
+
+ Examples
+
+ None yet
+
+ A Note of Caution
+
+ Be very careful in deciding whether you need this function.
+ UDFs are available to all database users - you cannot grant EXECUTE privileges for them.
+ As the commandstring passed to sys_exec
can do pretty much everything,
+ exposing the function poses a very real security hazard.
+
+
+ Even for a benign user, it is possible to accidentally do a lot of damage with it.
+ The call will be executed with the privileges of the os user that runs MySQL,
+ so it is entirely feasible to delete MySQL's data directory, or worse.
+
+
+ The function is intended for specialized MySQL applications where one needs extended
+ control over the operating system.
+ Currently, we do not have UDF's for ftp, email and http,
+ and this function can be used to implement such functionality in case it is really necessary
+ (datawarehouse staging areas could be a case in example).
+
+
+ You have been warned! If you don't see the hazard, please don't try to find it; just trust me on this.
+
+
+ If you do decide to use this library in a production environment, make sure that only specific commands can be run and file access is limited by using AppArmor.
+
+
sys_exec
sys_exec
takes one command string argument and executes it.
@@ -92,6 +159,9 @@ DROP FUNCTION sys_exec;
You have been warned! If you don't see the hazard, please don't try to find it; just trust me on this.
+
+ If you do decide to use this library in a production environment, make sure that only specific commands can be run and file access is limited by using AppArmor.
+
sys_get
sys_get
takes the name of an environment variable and returns the value of the variable.
diff --git a/extra/mysqludfsys/lib_mysqludf_sys/lib_mysqludf_sys.sql b/extra/mysqludfsys/lib_mysqludf_sys/lib_mysqludf_sys.sql
index 7abb3d012..6fb7933ba 100644
--- a/extra/mysqludfsys/lib_mysqludf_sys/lib_mysqludf_sys.sql
+++ b/extra/mysqludfsys/lib_mysqludf_sys/lib_mysqludf_sys.sql
@@ -1,23 +1,23 @@
-/*
- lib_mysqludf_sys - a library with miscellaneous (operating) system level functions
- Copyright (C) 2007 Roland Bouman
- Copyright (C) 2008-2009 Roland Bouman and Bernardo Damele A. G.
- web: http://www.mysqludf.org/
- email: mysqludfs@gmail.com, bernardo.damele@gmail.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+/*
+ lib_mysqludf_sys - a library with miscellaneous (operating) system level functions
+ Copyright (C) 2007 Roland Bouman
+ Copyright (C) 2008-2009 Roland Bouman and Bernardo Damele A. G.
+ web: http://www.mysqludf.org/
+ email: roland.bouman@gmail.com, bernardo.damele@gmail.com
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;
diff --git a/extra/mysqludfsys/lib_mysqludf_sys_0.0.3.patch b/extra/mysqludfsys/lib_mysqludf_sys_0.0.3.patch
index 1eb0ec338..7e09a9bc7 100644
--- a/extra/mysqludfsys/lib_mysqludf_sys_0.0.3.patch
+++ b/extra/mysqludfsys/lib_mysqludf_sys_0.0.3.patch
@@ -47,7 +47,7 @@ diff -uN lib_mysqludf_sys_0.0.2/install.sh lib_mysqludf_sys/install.sh
+fi
Binary files lib_mysqludf_sys_0.0.2/lib_mysqludf_sys_0.0.2.tar.gz and lib_mysqludf_sys/lib_mysqludf_sys_0.0.2.tar.gz differ
diff -uN lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.c lib_mysqludf_sys/lib_mysqludf_sys.c
---- lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.c 2009-01-21 20:52:54.000000000 +0000
+--- lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.c 2009-01-22 12:01:55.000000000 +0000
+++ lib_mysqludf_sys/lib_mysqludf_sys.c 2009-01-21 00:06:13.000000000 +0000
@@ -1,8 +1,9 @@
/*
@@ -177,24 +177,146 @@ diff -uN lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.c lib_mysqludf_sys/lib_mysqludf
+
#endif /* HAVE_DLOPEN */
+diff -uN lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.html lib_mysqludf_sys/lib_mysqludf_sys.html
+--- lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.html 2009-01-22 12:01:55.000000000 +0000
++++ lib_mysqludf_sys/lib_mysqludf_sys.html 2009-01-22 10:21:46.000000000 +0000
+@@ -23,7 +23,8 @@
+ This library lib_mysqludf_sys
contains a number of functions that allows one to interact with the operating system.
+
+
+- sys_exec
- executes an arbitrary command, and can thus be used to launch an external application.
++ sys_eval
- executes an arbitrary command, and returns it's output.
++ sys_exec
- executes an arbitrary command, and returns it's exit code.
+ sys_get
- gets the value of an environment variable.
+ sys_set
- create an environment variable, or update the value of an existing environment variable.
+
+@@ -31,6 +32,72 @@
+ Use lib_mysqludf_sys_info()
to obtain information about the currently installed version of lib_mysqludf_sys
.
+
+
++
++ sys_eval
++
++ sys_eval
takes one command string argument and executes it, returning its output.
++
++ Syntax
++sys_eval(arg1)
++ Parameters and Return Values
++
++ arg1
++ -
++ A command string valid for the current operating system or execution environment.
++
++ - returns
++ -
++ Whatever output the command pushed to the standard output stream.
++
++
++ Installation
++
++ Place the shared library binary in an appropriate location.
++ Log in to mysql as root or as another user with sufficient privileges, and select any database.
++ Then, create the function using the following DDL statement:
++
++
++CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys.so';
++
++
++ The function will be globally available in all databases.
++
++
++ The deinstall the function, run the following statement:
++
++
++DROP FUNCTION sys_eval;
++
++ Examples
++
++ None yet
++
++ A Note of Caution
++
++ Be very careful in deciding whether you need this function.
++ UDFs are available to all database users - you cannot grant EXECUTE privileges for them.
++ As the commandstring passed to sys_exec
can do pretty much everything,
++ exposing the function poses a very real security hazard.
++
++
++ Even for a benign user, it is possible to accidentally do a lot of damage with it.
++ The call will be executed with the privileges of the os user that runs MySQL,
++ so it is entirely feasible to delete MySQL's data directory, or worse.
++
++
++ The function is intended for specialized MySQL applications where one needs extended
++ control over the operating system.
++ Currently, we do not have UDF's for ftp, email and http,
++ and this function can be used to implement such functionality in case it is really necessary
++ (datawarehouse staging areas could be a case in example).
++
++
++ You have been warned! If you don't see the hazard, please don't try to find it; just trust me on this.
++
++
++ If you do decide to use this library in a production environment, make sure that only specific commands can be run and file access is limited by using AppArmor.
++
++
+ sys_exec
+
+ sys_exec
takes one command string argument and executes it.
+@@ -92,6 +159,9 @@
+
+ You have been warned! If you don't see the hazard, please don't try to find it; just trust me on this.
+
++
++ If you do decide to use this library in a production environment, make sure that only specific commands can be run and file access is limited by using AppArmor.
++
+ sys_get
+
+ sys_get
takes the name of an environment variable and returns the value of the variable.
Binary files lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.so and lib_mysqludf_sys/lib_mysqludf_sys.so differ
diff -uN lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.sql lib_mysqludf_sys/lib_mysqludf_sys.sql
---- lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.sql 2009-01-21 20:52:54.000000000 +0000
-+++ lib_mysqludf_sys/lib_mysqludf_sys.sql 2009-01-21 00:51:00.000000000 +0000
-@@ -1,8 +1,9 @@
- /*
- lib_mysqludf_sys - a library with miscellaneous (operating) system level functions
- Copyright (C) 2007 Roland Bouman
+--- lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.sql 2009-01-22 12:01:55.000000000 +0000
++++ lib_mysqludf_sys/lib_mysqludf_sys.sql 2009-01-22 10:21:53.000000000 +0000
+@@ -1,30 +1,33 @@
+-/*
+- lib_mysqludf_sys - a library with miscellaneous (operating) system level functions
+- Copyright (C) 2007 Roland Bouman
- web: http://www.xcdsql.org/MySQL/UDF/
- email: mysqludfs@gmail.com
-+ Copyright (C) 2008-2009 Roland Bouman and Bernardo Damele A. G.
-+ web: http://www.mysqludf.org/
-+ email: mysqludfs@gmail.com, bernardo.damele@gmail.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
-@@ -19,12 +20,14 @@
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-
+- This library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- This library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with this library; if not, write to the Free Software
+- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++/*
++ lib_mysqludf_sys - a library with miscellaneous (operating) system level functions
++ Copyright (C) 2007 Roland Bouman
++ Copyright (C) 2008-2009 Roland Bouman and Bernardo Damele A. G.
++ web: http://www.mysqludf.org/
++ email: roland.bouman@gmail.com, bernardo.damele@gmail.com
++
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ This library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with this library; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-drop function lib_mysqludf_sys_info;
@@ -217,7 +339,7 @@ diff -uN lib_mysqludf_sys_0.0.2/lib_mysqludf_sys.sql lib_mysqludf_sys/lib_mysqlu
+CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';
+CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';
diff -uN lib_mysqludf_sys_0.0.2/Makefile lib_mysqludf_sys/Makefile
---- lib_mysqludf_sys_0.0.2/Makefile 2009-01-21 20:52:54.000000000 +0000
+--- lib_mysqludf_sys_0.0.2/Makefile 2009-01-22 12:01:55.000000000 +0000
+++ lib_mysqludf_sys/Makefile 2009-01-19 09:11:00.000000000 +0000
@@ -1,6 +1,4 @@
-linux: \
diff --git a/extra/mysqludfsys/lib_mysqludf_sys_0.0.3.tar.gz b/extra/mysqludfsys/lib_mysqludf_sys_0.0.3.tar.gz
index 867bcd192c887055d1cc8fd6bf8c0affdaed0c72..f4af753925460491678b806e84b8f9163785e55c 100644
GIT binary patch
literal 12538
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
literal 15310
zcmZX)1B@k3@Gd&G%^lmeZF|SIwPWwtwr$(CcXm8y$F|S8zyHg7@80Alov*7ZUnS39AUjFLpoB>j!XgPXVgH=C=w9N&^^^H%bJ388U2=0diK
zc-HPWx!|<8N%WZMu7hwd@)BBUKyw+I%Ghtx2`~%-5ST-DdQBwVc^XE$zls*uUjFUR
zC*vhek53VcD+c3#axP>*l^BQ*5&Za$?;tvLdytMtJ;t1Tq??-6i0`NI@91beVNkSW
z*)>QZW#Kre9SNYp7#RnFp}PxxDGEEe)OdRWvMJdDCChT=P-?z`eF!jor+k8Vs_+nl
zt^Lx!V}5d#JE+0$h>s6VLYx!lLXvcNUO$Odx(k7veoZYg`;hT&KC;BfZ9bC3QbxQy
z2GOnbihx9;+2!S!=)~OnLc?VlNww&uv@#U67^1kgH0O#;FJd(9SnvjapYIleVqfXs
zgcpLuTfTwba{mpV!BRsfJ$8NDz3#susXO$6;N_lzI0>8^L7C*`5FvRruqDklMJ74e
zr94ED@Mxj%YAN(&N+igSW`EXdkNdexu6R7@92N=lxNm%)_EsR0$U~D55X@8+6X3)f
z@vgBkizPMB(8)VtOO_>rQGIZDT`}3|W9sCkW;*FLmS@$MO?36t+@zbTru`rj(llGp
zsnQi--09fx!y}~NtV-QfSP?Oqa8ljG=?jrPUmNtdRMpu~T?na(|G5u^|Np<5ybRI7$vHbhLO?I|^xK6;Pq?p3_
zD_ToAVa~?t^74LJK+e-%o*$~(iOHz=EJ?|Rn_gbf1vQEm8w*cGHC3HPD|-aZTU72l
zv^*o|*x_krCn@_JqqHF>&Yk-^hK{cwO^U7jUnw6QRkZleG$}IN#KKO`Q@n9mm74PW
z2fsH1+2Dbm@_Sj$lvH)i8R^I6I#NorZX4kYG;%dQvMHe%-_Kr4dFpW=hED{m>WD&v
zcuK`HUS3YZ#Yqh|J}Mf_Zb=mt6~&Y?2kn??k;1}MbTz2Y4h27Kt9jpStk@VKb;k7H
zA@=6#+$nJ<6v;m^(#8R7L@9;N7gFRV%TfIX8Hw;q@jSgmn+x*txl5q0-H=n7Ohcpv-*z7AKqzk@LRL5T<@t04H7ZxI~F|2Y(f
zz4Uonv!-|UWG+mei!cOb7}^&p!pf7Ht)dDwWDMgan%ZqOVw-l@QkjbFf;|Zkz13+p
zYFm|9wgdVZ_lU*d;-Bp^T@491iai}c#1W;&DJx{ilK;-A>-AG++ORcL&`_hDl(ok)
zMT9Ds=hfxt=-XH%JHtiCvQn)K%j@ctzP784$SI`uM2NXJGgnw5pLd&gGT46bZdj>;j2uYmW0uG+K*PeWIA~HD@_2W)loOa?S8Ww@cDY6=OY`a+qq^Irl1NS^;&tU2lwMyWVcj-TTYKxz=fJ@e0G;&RI0FbC|NGUS1Vya+blIKJVH@1m&QD`n(Uv^ug`8
z+u>=!lOxjPX(98=Cky3@s3gFn$=Sxj9@O9%AmQP%xpc5_=<$2SRH}IrPo{O9c5@OB
zW#E7jZzj)d1c|k7;1&j!(8QEY2606gnuv+vLbyq#gk5n5@xe@uA@RX_+9U1^rsl*}
zk7IL{%`jri+^+Q-QJvt2kxFOA@zO5>+z>hXTc%LdNF@_kbV$1&W2jhMO2()v38v(q
zFT(QBKDn5o>6x}
zJtv#CO?9fKkS*zuk3N8>rKN>pBW}qzIv9bmA8hzUy4pD}Z)hQOtXi`kttndNZaz94`rNfoPP*OIMoh08QnJ__yfs-J9+^~T
zf^Z$AkAYeFW}H3u%}rkIE6a-(M({LOwut!u?N1E2(6gfuSOT%kv-cTP*Zm`JP6(Y_<1+5
zUA6vtHNBO%emX33&j$&=eePG$PK0m04qm_h_hbm??{Od8`&{_Ievx@CsmLN7nA`gZ
zb%o85*&n`Ai~&;a=g13ANmr!sb~ksY0;|qK1vg9lz!`6y{*{JXmwl4%f8}J`Th=O(
zK=fz;^+q^WRA0@eHuW5FHa?}M*0tZ+rx?fpC7o%xk{Mz~VE8>^JxqoquIJt_+xF+9
z;SwH97IudUq{d+Z;XCIxVE_))2fL|E15XCh#!#eDr4s|sSSFuz=*G4KY?Kc(1(BC=
zz^h}Q_xMn(@w<7@B>27|W-QYlmG)pm+f!ZJ6}dJ^wB;lHY=wROfXT<+N7z0=zv+Gm
zrij1!Vc>UZ;rGd0bp*(N(UF0K!TWXUod$oxpMIS%^UGej60a
zxwrrMv~B3K5ixjVCvr40cs^q6c9^5E#|}$8`JjXwG&~+ebUAbwG<^3?iSVQ&@J=K~
zbox&N(GjTJLUORm>N|qd4|B&ns8lEu2>aJtJ;6I!qrE&>hyR^O8Ylwh9~}n#1WOHx
z9JmY?hWzT(e=CIS13w$II`jh*=4%`VK?j4t-@Fh(c?uw+p;!J7ceH~^vAtKuuOKjH
z*E0q1FQ}=@_B(Sh=e)&$L?4kUKjJr%JC{5Q_EM_)yy5ljISX0p#tf~hv{wb)w3v%Y
z?38X>V=Gzw2wZHbTb7YxMK&u(AN=;b%>x-OIXSxN^n35aDZ02ys$>&z<$|Aa@w!Zm
zX`{R?)#S+c!|+3Gfe&B~M|Fh_}M&}hC4^8lY^C1HeY
zG&~1o5RHzOB@7wZ6-E=LQ(?m})l*W)ULQy(ZGAixxGz=@cV^)LQh*+*7&}5=lI&12
z7t#$%75(W{hNA(`v-Lqe2UdNi`E$xr5#~V7Lx1J_BJ5)&WL3fA*Qn>1%+2#17jf!x
zeT&{_lUAps7Vg2!dnV4__#MhaS_F$#SEit~P~#v^V&goE-dzq@)S&(FD9%rw!qH-7
zltJ@h0bG}}N+Mw-x4xy5Nt~a!2X|zMf%~D&??k|AXwZD9w};!C3eHZ**Im+XJerSi
zbMUAkB3~cUHu!BMG?5iL?CxWekb_sD7+kL5kMpI|DD;tu2Z`{e?lrW~Lj|=TNK3-u
zs@_E0N!sc@$50hnYBI!lYQMSD?bcZM2`$SQeHhi)=2JKkrlO}I)TE5y?VRD&VsY@8kpD<9C-j6QQ7~2vHGKObyn;w
zdbV=a`m*hGsG^#=%5@9CwaF{M&TepfX>3N^?07QTzH!83{aA>1JckJzAoEAj%;wYs
zH%e7V$;y8(I?Slj6<94sgk%zIYD(YGqUm2A5o498nD?};WIEBDGVi#&so#Fyn!#pq
zR8$EWNfS^p%}+F+%mt)Vy~GpjMdsvn@P_R*Z8sIN;}lrkiBl6;u|{d#JBZFBRcVc^
zJ}n5S-R^jn{iqXia2WX+UoK`5^kT^pN0iIwj#|0TyP4+;c{)e9zy~PgvSyAx`c!^-
zOBxs9@_lgRX4OcY)GM~Pd(hI>W#@WlXJ9PM`O?wW<>Pucr=>-0#-igXTyy48A&bF{hRZH*B3^X<|aE^@RQpBvFd24S6_NA|L8#3{Q8(O4*zQobSRUe+`{oA!R8o{r?OFEK4
z7G|IK{0DELFJ|09O+f$Sxl`ci@C^yvVDGrVmY4|3>g-#7(ZS(s$D8Z+fQo;m_G-d{
zWk)l^BoFu=>YD-BzVp(;!;SR2n(9kg;l4@|)Ax73M?JPNHlmb7a*?iO7HtCn8^n|S
z*3UI4b=3KA*1Ddt*x>S%|M)GJfBP6{#NX58T9|lV9NG6V@5pPQ70Uh2tg
z>&wG`=RM3UH*M8~pM97=+6@EnM8?H7thQ!(%wH+WFZ_oqqewC3s-f
zu-qED!&=frPUwdJ#NsKy`>F^FmN>EB?m{mscgBIzqN!U_2$+)|v+-
zmWxYg9fzeld>**
zyBc8YJEo#O!B1}a&4jPa@;>v<$32N2l~DSP7@W!duP50XKv}SItwxGGm_Iba{ksxP
zCIZH`P+`&uIQYQ`tO?1dN_I}Sd}!fvaj1V8ofzB9(70IG>P_QS8xu*TLri}i0m
zJnopzPrB3hSPTNBgsqA47KfuANL;5z1-$3-nSHZJ-0u#3AsSEG;mQKi7z&4)MXPC>t$t@CD2Qg;;N!n+}}M#9IR4_~I@
zPVSmr=1lqLS3tYH;+zZgc$E~hLT|o`;kFXCm#HY|d6?hjA!vYCUBYH31
z1YuCuTm#vKbSHf+N{JUYOy>{GJ^jHeSz26`?>x78X*@Pu2kaQD0fJ_3zQm`8k&~Ca
zBH#rLfUjv2Yokb(K7OWs&dndAsBE)vF!tVRejr_G7nxn^KuykZo{a6mT&$GDz^C
zkfrxY1mSKk0@?QlC0Vw=6#2$xyI-hK~!pF7=i(iho-(L$#rEEb&&oUT`~!=3UH01^?uAW8=W+z9C+FlMzcJ}S{RnIA
zyC4=vHZVC~BHPg*N``fcv$Y$(w|YP1U)!9G+N_yB)sGYobx)DuASF#rMJil*N^;lG
z@VK1qMBS98R8MLhrt}F%q5tw&*>xes1J~#Lk#<*Z60tuw**}Av#Muoxu6NctnOfaV
zOn8M-@Xxo~nC5c`^(#oz-KEBF;+S-mo+!ofI`oq{tcvyb2xo3+vgdofpB(r98ly^B
z7MBq6aGUX5l2zXL?BEo4YKPmFcAG$t^V|E7vY?uHZWx$WD`_@*(yqeEwkf&6-CW64UZeD)U;exwxM(PoRNV{8R`DCtY{dOC0y))}kl`
z+)8vuONo-70`A_(^pA*%a|E{>Y~_!mt~Aw{Cwr-!YXQ6OUWph?-R%l+a1vE6fTHhZ
zEXTYOrQ8Zy{UO;S()4=CP&Hl`j855*64s=$BnI#Va7ZnK;wwLAD-kDW-+$-IX?C~r
zv)%8%Zs&7(IGnxq=5*s7PG_>t9daFbcDdZ2TqF#8v71eo?Ayyb)_j``bSVs6-33f*
zEnH@HPZt6={({O$zT6*sL7T2XYvauCFJnQBiCs`TI4bAnVe-9ARTYj)W1)@+`gPJK
zN3LSakVaQOC#(3qJU6@z0p#BDYV}SI-xZ?FG;oeAMn^5YIn&&nBzJO5kZA*i!rAw~M^yaW@HA$x$~6T9C$R
zps4Vh@oG0o66j>{J9w@=?-P8>UgUK&8&<2}6CBM>;1v>V&Ho10t+mHp#AnN1=yg;-
zmM7>2R2zuX!__rMYRC?;2w-y
zke|TsgEnlsB5&@XyWX){QCc{E5xdRH=Aqt)J3@#H#=5wk(=VF&w>f5NnE7ZJU=(i%
z8x`je=5hE*)Yb$c%NB7hjZY5>os(SXhx1EGvk(kcYYjW%KZ&@Mb(E(ja&5GMZ!2=4
z1q`Yw7D$P8g`hmJ>}IN>rYXiXvfrih=sRo(?46|4UmXzQy!n{?CM^pD@B#Tk5`xid
zX%P+M8um@_!zNdlVUuR}hszW)=H|b$U@H>d71hQ&w`Nr?EeFU*1T@s=#lb{n1aSxp
z@%Y#${L{Tn-xzJ;Kh}m7$EeNCC;z%2Mv$D$OLgx8vXk0%y^QGowR9o*GODTG9bnn#
z0NHLPslmGgyPV`u73N8Pae8t+*GK{F$@7x17a%u7qu;)rX_^$<4`f8zE%!HCvaJ
zO~dz-G`cb+thHvc7;W|&Y_LKKW;n8vc1&3(?(*Fyj^7!FaZ@nRt{%K$)d@=|XT`i8
z{9iDz$Xj*xvLg%vzxgCkp3T4C)Hey}zLPYhh=0dQ-;CL(XU(G`tYV90
z$Wk8*-i(@oVY{0%Ah_zjhpVg7EmpUsC~~Y>-t|$)BiN}xQ);l5Aw(W#=_TC{efV~#
zskZ+XjjyXqVXW$u$633u7$%~VJh6k<58?vIh_n{GLzA*M+6QzJ6huLPc*|dDN^lYB
z8ZugFsXiBl-nG$XiP}o3F(pn{`cQ>3%i5vTO!_q7YTCBI5iCH^sxO947&aRc>^oc<
z;b+|DUDhBM&EPE{gLO7Zi+b4CqE{iQVjmUU13QW6{3SayVv@v4RBwan3k30FTsoDPjJzS
zC(VQJeZGDeulv~rWTEp#sG@Vlwy^#xG_P`L=AdHB$AVSVOYC((UN`wfH0
z@s{za#<^Rf(U+i{p*jE
z)}nUF-i?b``rF1vO33oJaIj8Z_&fe4oxOhJWF$i5L(Fo@-vo}U25LqOlJ9OT=wt4W
z9}@7vO;JLo9|i>2+@*iFOVu=3wOMv+tWoNWek9T{<$sr7J1FgD&VsdOw2h0?1Uk1*
zwC6g$Z=6qC3zqCQqtvX>wyG{UkDWWFtO(9sr9+4v20F;@UloVWl6yAi3*<5$SkwiFM6a9;mIxk7jdsr^-bFwdl_y2S0HIE-}
zINBw|fp0N)n7oX4ImO_+b++RIIdSh|t+N;%XfKouH8O@V^ht;ORn(mnr2)|&fmboI
z)_hkc-VZBs1V)0NoF0>1_>Lef-1v|u518I}w3uIy)csP_DoA(d_-Fgd0kyiIA6_xa
zprdMD!;z*u=N&mYY=Z|sD25k{>8X7z!2flPW`h1^1
z?_PVGr^{PgN{NQ9dWrlD;i5~Pxljm_@UGm0QNsp2C$(6D2HdP!_;alAysGmnM*HW^
zNTuB;YF}1^JZ2Ktl?aN*i`VudNZMX+6KD=uFjZQ4%KpJ_u!f7`^^ujQbfV7sA{C&K
z8U>m7_NNqbPj>b$xp;c_-N|r)j17yA(16mh!PG4
ztHr@7NRk>WCjLEZ(X7z5CYO*i3AKci(kSx#;nGx(&v`}X#&P0F
zNIy@ma*RNOy{ca1Q7$zdlaArK1r;}!j3xt!50^Zwbgzy8Z=^|4KN-H4#IO=ecaRq*
z{x_F1cT7;jCEgi13w;Ptv}koKPRk{&!IPjf|#K@
zYpD2xhodiEkNQhc7Ci-H+OkTTeI{6~PCLNtkno`GJWvcX1CDZ2H$^nJZltY5&2}s$
zyil9M#ZgQFSIZPKP5gl!o>VwK`>EG2`4FhUV{g>4&4h?$LD*xRD
z@0vPM4Y3TyleCf%GAq6Y_9LC5y7ZK-R5^W>q#C8<`fvnPCYRC$(V+fi8-LJ>Q|Agw
z-l9?|C0pDmgOIJ17lBek(uPH|Dp-oii1{8;sliWCczOg|)l6!Z4&*N)u>5*DiD2QB
zn-*DgpC@sC1iV!Y8cXIy@w_MetmcOZ(?~G-95FG!%*{;6G07?%C>u(?>%FVtLZisC}G5Ebs8i>68$N7mM=}$v{ce&V;$0!z_?TI;x+lz`UYv>W8laC|i%u6?bx?I-iQvIK
z{I95Xc3=TzE#E7@0AJHpnk|{4&~5vwL_Ea#JjN?%I+!&1nI$$=EVV=<>2QS9l6Yb@
zZN^H&EGA#|rA|1ajdGV9`ryP=o0p-sFICMnC4Ftm3Z196
zh*_SP=&6NQ3sVV)jtdDrrY3NBT@mF|`3V^{aYa2fu1?ru3KM>M$;ZKkeF8-#9$Bfx
zHHBH#L6Dn|OPG6DdV+duEV+4@#@u0W^sQ~M(7WsB!5ErJu}o*`zYW7B7|cg_DhV%y
zDVg7E3KcmiPQk;@h$p)${Hh`~P#x?I+5?C86f(04o6g1fcEVo#Ap(EaFxc=$rF%&2
zH(q$ACfo>~{UoBzvJV8Q%?BYMp=IY4*}|X|r{$=mVwCkOei<*Zpsm)uP*C!g5gj6Q
zOp~LLGsMc;skUQKcfW!A;V{YSU7i0~!dfe(6Z>VJCvi^lZ&c>Ignw^;9G3aC0U@eO
z6Ge0;r(@`3X-0D50sMGNPeeWLB%z}3TnojN*Tc=|VDop&^Xp1XLa`pBdM=pQG<~Zc
zeFaIqLx>cZl9q=NWk_z7P%$aEExe7dg=4Dx9F>*jUP09?<+&XBtp_+KKeU8*)17?Q
z=ReIoX1Qn4_Eh^KO>Hh3IEXI<+Fe8kX=S{$a*G|X>C{`D>JeRpl*5;CXaYeo0CxQ*
zZSUlsE*QU;bJ4)VKw8{@jk&)3*$7U6xKuWTtr(kBw7T47Q6Cs?daXF~sN3TRX|JNj
zh^EBH(wTLo#XnkktSzuG)|*py&eG%WFKxMtRF?r!Br%m}w96Nq9{zCc1@=L7R7)8Z
znB(OtOr;V@_ktCkT4-7rug#@Nh&S$kWCR{%?ow@`D;TZ*Sx^mOq<|0PEiV_^st8p=
zr%rg>zuX!j6_!ct!LR^HM8fQ1>a-clS4hv1&>Y0d!sGXLZ$WiP{K%HMp*#qi>(keJ
zTj(!=s6HB;EZ%y4h|LQ|dWdt+1cK1&dw6K@^J1#xb%69VG+v+A5AHN&g4C3S13x^AF$;_uE|@WgROq;VOH
z&Sdl7GkO&QXHT+L9I$kvB#jh%qA1nhJ~)h$!coR8ST#Ya(g+>_HEcRhh?x4=!K88(
zD8UjMYzp5{YUxMyf`!466g`NFNEDX*u*8{cM;v+zFt=sNKooootgOS}8ek2!@<_+`M510scRv+9W(8^j5zM-+g_+xkudybmW;#BRGaaMKp6cLI5nE&Es%GDyqEbNJ
z-sajYR9DU3__6h`5@hoN$x=c0FF2~$SRQzYH*G_;yvZQdLCDG!-p$&{-<=b0BsZ5=
zt$Cm|8Zp_fZ6T1OM1irjVZTw;gG6OY6hgEQJzJ105>$v889-4!7Q&~+nV$SFF%D+S|0x98`tL@eNe|%$krOuLB
zzw_oi;W{v*oI-IRDM|*sN`ob%dNX+N}Lz*!uCkj
z6_+zo>zWy|z^J}nerKfbu?7F6zeIO;U&^wl%_!;kX@1yy`DW}Y8a`HdKw=A+4O{+q
z7USjf-CXniJp~}@w^Z4YSV&bg6-U`#Ws}I%@%yHeq3ZmxRUwM>Tv0eMlQPC)ft++a
zv1YnSu%5D|xcb~oo55`!n)65k=C`B~;@k=>QiEWoI>rq$7*iHrrp&03ppx;TEtZ~4
z-cc)q7WDEw<69p`%z>7u)xe@UU*1v-~*v&-cV+6Xw&Dlzc5b{L0
zf8$@Y>Kp4T+DXsNJz48p7Wvew5n9Z7(=RP6yEm>=0Zxmp7ab}5M^z4>=mO^4Z*OO3
z>%v-);}{43!=Jk;A5Kk8M4OMx_181vhhJ8yayUK+y_rLBurH&-R4)>8j
zOWwtDDZhrkCxm~Xtds3hwGZ#B$RTs%?Qbva_b#c3mo(tj5$MCzZyLT
zC>*g&@Qi#C4z8&yw_V%=(3~TJB>uCJ-Q?d1Q$9Fw%uvY{Vh!Ggc%%0Hf!>{zOSy^a
z#5baiY|}aTNJAcM-^qm%_D_e;^GKy!$xl*9jK_b4KhNaPcb8dyvzti0xz0Ra3(|8
zQ6UI=v}gpB^JP%x^cys;%}jA7ll}F=E%dE@&e_!%dKWJFh0tYevjPxWxs?Fc$9;Os
z-Zt*Q0>8AGN3(#5!-KOJAen;~UnPH3u`gd)P}&^`y9@m{2^tV^FmS}S3i{Cn0teDW
zfE2jDyhA``<$}0F0XPTWvTq>F9YY*{*kK{WI}~`(_JMG7#HP?k6xd#G60jWRCiCci
ztNSN+LVqVtqQX5sRjsJWg9k*=%BBw;(Ejn>)mK}MtD7}VtW>z&VTj{)E8~qTr?%`M
z^PNvdzUKJEa+Jaiu5s-4CjG75A;qp+T<0kB1mBdLBG6)Glv3+o$6lT72V>O|%e}K}
zN+9KLs&-$N;={}{VPUzQ1e)m2Tgsjwm7~o~aPyGm>C}6R4-0?lVv8hHIaTCP*s`uT
zM6M(=eJx*4QB`g#A(WYY)jkG16feR-zc}N3tG+Qm4dItGpgq+47E&|v!V}R*PV0uvQmtotc$kW}xyV9ZX+3|n1z1I|%
z?M@eOe+F-mT34a-i4!K^W){pE^WS^6%Xa_HcaBRC<4yt7&Nt#AFxN%J;rK=b(Hm)1
zg5s0OgKU1w>PFcSa3hq3y7I!~?oIF=ydCy#+VpAYVcL{C>_huFdp0ukpy6Taq9=w6
zH;8%&9(J-E(Zs+Syo0>%g=~oTGbn=jMMrhPkF*cn@J@y4+s*7=pTf&~YHsz31%j0d7K38_xZWK$7F}rLKZ)
zT;MCy9mJP8rp^HL9xk&N*xk6jKtT{TtWmX(neROec~6m}fzepAOSS8M`mNa11A9XF
zDemjg?IX)|m&KI|_
zooTXzSwYld_V_SB$q)>FXQDI2bGDgSmM!B@-J$%@j^Zo5V-Ul@7qS`SV%)x$ZPO^Z
z*49t1;rLI(Ea!p5A3}0IQ-i)e)iUEkTgkQY`q}0R1$D@g!5&<2VMeeHM;40GIIz&w
zHpcVl3^N{_!d^1$+zj(x@UwNlOmm*NuFa5&a$+>IQtQ-?Mg62{x4zrJi2r^z&TXwz
zuh<`-H!eJk#o`jMq*5k(Up}DRh~Kq%47jcyMJQ<>&KLf919AL#J^&U
z?5&1OtI|L7&6k-~oK?vRSru5LE0>MmuSWSBv(1G3+p;FY(Sr$Q51V^iPR{k>iPgDPd*a<6i$8$TtN^_h4Oa%JcN=6uk-eO|pv%j?=|&
zW4}opLLJxqUa!#2X=*x3TUyzH%c|)cv)fTG#h6~&gnoGG3AT<@2-{zJw@z2(_KoeR
z7@K7gFyX32^Qa>Jno?TmL0Sruk7DIj7|+TqNfzgGqno{Z+AQu+&7m+)w6q1UUQv
zGFM4eITX9QepU;4930j^PWSk{PhuChbcZAw#Y1(rSj^20t@KUfgy=K+bsE{|yMin~
zJKP!RsGJTNZCf%s+{;^eFQFCh=qke)hc&`-B5;`<15E9f%Q5F8qqjb|eSzvsJ}=(E
zNgoyNb=pM+GRHf*nZ;5ydcbc!?ew-z^OM9twX;3&blJ&(E6h{6gSYR-MI7A1&ryx1
z;p3exN6wq8%GmZ^V_!rk*wcvhExdBt3PCHtz7d2@`@*V{L4un6n33pj1q
zp{BkZSN{?87)_@Oad{PU3nKHWrFo@#HC3eHJ*1A={qz$EAy2N|!0eW<$0ISuhWx=`
zMvDt^GyV-YnCce+);pOA2~4v4(#-xdfWlSS+RN|WDXp%QJ|&6K*)*(p=4x>SEXOM`
zy|($c9y8kj!q*$;n(-$4B?Zkam51__KrnwrOTf76DXEQr$!vjjAwMx3rw
zEc+%XqQ&CB+)zc(oQ};S(Jmj+cWavD=zl~xR)~t!mS}T?DFvCEk|Psa7;o?A+3VHl
zXKK|Ep+#41?OI0;U4}}YIH3sCG%9h$``Dn}9sxKGi9tBZbn1ev0{fxYcQIHhN9*s|
z`d%r(P5L(xrke_@%lmT&&z!Nx$JR6?kUe(XAqy+^Sg~umIQ-e2Rf8slYX<>QR6mkj
z9#iQggJnkrA&a5_&7mV@^yuWa7CjiKU`8ve=?ZCG+`s0hxyTf9M2+ayO!x1cygIA`9NlVO1GHDcd3o^24&=UDqr=Tls7cciKcSxoh)?ju
z5+NuPu3qm;AtW=@3#b#`UDA*Rjp$#aU3=535X5t^F8ws`{=c^as@$n@CtSOJWc-79
z^GrJUgZjz}9OaVN>;_B3c%p;g&yqO^^_66Xoug5a^GAN7ZE#9`h-
zRhjxOkn}F-G|We7D3OE}wsZ;T87{@Ve6oy2`GEWR`Y~1S&R=1?rvp5c@Rly=?ZR%f
zBI&{9BVG%;Y&?;8#f)}xCo~H5Xq5NZ-oATC{Ul&vSeg!Wna3c$14WFXZtNWXt-BAq
zREkEqLhkDLT>928F&BpK2m%Jq9=AUH^?6T!B`*1J0?)q^pgICpEq_l>yfBL14U{Zj
zBVf99s)+nDE>&pv8?a~Jl_A(wllP879bDw>q4CCa8=?s^Y2=bS6xojl#`B9Tzd-fj
zmkaV7yg|Xl;_-wM3}!%)CCY*KG?pXjyai!a_L#sEQK`T}B_OeIBN90m?9;kjC1n~C
zIh!zw5jjg6Kqc^~^!Oxw7kaz4DYA6){^CXm>Y&~WZS3-a19Tz~QRHkxC7|aT63N70
zGbj8=?fpr#i!9>e+6LCx&HI96^~mlI`{3=mm5X}UX#d8HJZLaFSbX?u^VT0@lsi2c
zo6AK+8S`M!_Qi_o=ymT{mg{reY4eVX);Iv!HjsG#P=wx^I`m4k?Z6gvMaf$F1Mb&T
z&lkxu2uBV$JGPoA_57Ga4MP3^UEw4a8Vz`JezAhCtT^&s}VUin%{RDJVD)J84vrThP-Hhu44P9ka1D?uE7NKL>?@9_a3Mn
z2d%4rlYtuE1p;lVftka>7b@KxMGxDUs^4^72`n|s^3~7s8ztS+#F4yx4b#E;Olso?^Zjw4aZt_=6>^_oqu%@|DG9CA_~9+&0MxpugYn
z6HbzM{L6OehGwqC>)|;&+n0=ngMG?}nBX#q5@1Fuz2m3u){r*Q==|H==WS{jXnHzT
zECI-dw=Mx4xI|JlX5^n=ISgo`MWDyU_J8^T4m$WV-R)MNw{9nCR4}dY?vsHskuX1b
zG*9S%9R#2Dp7-Qk0K0@6I(J6b6bk++H@m^{Ka@b$5-seir<2YXr~B4%qgCy-9NhMl
zg*6^!Au@Ndk5c7Dah)1IQEecord%?2*KIak^dJh4wWMAvN?3k;QeQUo8pZtZSX=M^
zZ5U;=m8rkt+n4J{G261NqU(g8$KoA_4C)(t8w*S**oyE
z7R(*k$_LuY134@Nai5ChJ{C5*-(BRKW?3$PdPKHH7eN>2*Ecu2u&0C1UfJ&;25^2*
zlv5-)ntn9&flQk`CTUw7GFp!qMQ{aT{W20<{WuC-{X806eH7J!F>Gxcw75MNjQFJq
za=5l5ipkcd9a{LtI5}K>ryN=dw^)@YPkJ8966}|_@R7f@O<6C4oycPx#@co%3|TgS
zwm2*8VHC{I#fSItPt`T=yLbbXU#av%IR?>h^=c{G%zb1(jq^1$L4{BGs`TU7i7f!;
zH$~XDc^FzS;o_hD2|6a>?;?V%%JgdJjTjE-A7fq3bppy&*uotl!5@tKwOhs7lJ%XF
z4Pl`N7mvRs^RUKS_lF{@Gr!;19?Y<{RV@V20omsAhwT6y3#)>`yHy0)(XB&Y)L&XO
zGAqr>DhK~ad60`|*Q<%HTwNGmih<_%)-G>THdd11(8M%6IyE|n2<=DF&R(CQz5PX1
z**w9A#bJ}|<^YosPNIg&z=(C`XwPT5KXKO7>=cvacko)U+qnV+NC~)h_|D$@=Kk)+
z*%gh&LLc|Tn}+JTGW36Ok!H#dRy9
zH|w*kgX#Q&J~qnAuTk=&qSwyf`c?f88jBt~i-pZTT9`Fme?5C-AuG
z^Fc0))4$UoDh;0Gdy2()Q;Xsvc1P<>l!(v$(!QU5^P|hT{_{3x9;0g8X;cl<{f@W-
zSw)tU>!}3lA!incK`R4Bg$vpM=0(7wZ0kZ@{Gdqk{!03EPCg{TY%NBWBPL46CyJDD
z9jAt;mPu1*6Q?g*Jg>892C4q%{N2#``IeAgGBF?N!cR?9=~R_u+Kn2Y71Ap)<5N36
zUET=!xs9c{LmFdCLS=pfdEA?v`5p!d{Zrj!ZkvXk^BqeUOfK=0-#^@_Q9l
z&p-P+8uZa;)h-*cozb1s0aRsuQjisc?e5at2;p`C);dP(JgY{!!7{4FVjBv!3t{7_
z=(0=jG)268A0}#um8o&uvV>YrPCuYv!kBYSnkfDZTsU8BlaZ}qxj-*_{Z$74H31Vg
zYouzH!We1v<-y9+Y3;PLpl4F;%V9g(a{^kia(76=?^6(%N~F2@itj@Jzt5s1ARk{
z?B!mnza8|pakqn+GC3KKG50!WT-6#`_5}re$)-N@iOuPiw$)KSc6gU*@aF?M8n6h`
zF2WMR3qh+=kh3L-a&+Qd
zF@*bxP29_@!gXQDs7gb`0;XbhS;`-TtgKguUl#U;wPzwCyC|tk4~yiyh`T%1Nzl`0
zW(<7stqP@1n?TAtP{X!mp^XP3U_)?PbexEQVBt@5_tDQ`;++G?IzY9>e>HnyJ(W7>
z71&t}qA^&`r$`}0Xf_&;wu4p87-UA-nR&mMFr*kZ8uj*U&p+4cUj7XT1v!zaBII+q
z91!aKS9bTX5f5^ak^&AUnC+uGD`LkFJ3c2!rN=Ndi-fNt*cCi1@Wd}ZX7_C)L`r