From e06e2519a047e0d74c46b3a4addf6992bdc47647 Mon Sep 17 00:00:00 2001 From: Vagner Bessa Date: Tue, 25 Oct 2022 08:59:38 -0300 Subject: [PATCH] Add: test to 'skiprow' feature --- .gitignore | 3 - example_skiprows.ods | Bin 0 -> 10656 bytes pandas_ods_reader/algo.py | 10 +- pandas_ods_reader/main.py | 4 +- pandas_ods_reader/parsers/fods.py | 3 +- poetry.lock | 24 +- test.ipynb | 176 ------------- tests/rsc/example_col_lengths.ods | Bin 10388 -> 10443 bytes tests/rsc/example_skiprows.fods | 423 ++++++++++++++++++++++++++++++ tests/rsc/example_skiprows.ods | Bin 0 -> 10656 bytes tests/test_read_ods.py | 11 + 11 files changed, 453 insertions(+), 201 deletions(-) create mode 100644 example_skiprows.ods delete mode 100644 test.ipynb create mode 100644 tests/rsc/example_skiprows.fods create mode 100644 tests/rsc/example_skiprows.ods diff --git a/.gitignore b/.gitignore index e342915..167d464 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,3 @@ venv/ # vim config .vim/ - -*.ods -.py39/ diff --git a/example_skiprows.ods b/example_skiprows.ods new file mode 100644 index 0000000000000000000000000000000000000000..ef5b079bd25228d041bd9ce86d5d05ebea2c0e7a GIT binary patch literal 10656 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.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +dev = ["coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "sphinx", "sphinx-notfound-page", "zope.interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "zope.interface"] +tests-no-zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six"] [[package]] name = "black" @@ -38,7 +38,7 @@ tomli = ">=0.2.6,<2.0.0" typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\""} typing-extensions = [ {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, + {version = ">=3.10.0.0,<3.10.0.1 || >3.10.0.1", markers = "python_version >= \"3.10\""}, ] [package.extras] @@ -89,9 +89,9 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] perf = ["ipython"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pep517", "pyfakefs", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "pytest-perf (>=0.9.2)"] [[package]] name = "iniconfig" @@ -112,7 +112,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] -htmlsoup = ["beautifulsoup4"] +htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=0.29.7)"] [[package]] @@ -156,7 +156,7 @@ python-dateutil = ">=2.7.3" pytz = ">=2017.2" [package.extras] -test = ["pytest (>=4.0.2)", "pytest-xdist", "hypothesis (>=3.58)"] +test = ["hypothesis (>=3.58)", "pytest (>=4.0.2)", "pytest-xdist"] [[package]] name = "pathspec" @@ -307,13 +307,13 @@ optional = false python-versions = ">=3.6" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["func-timeout", "jaraco.itertools", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "d9c435fd7f0ded3ef3a28aa6a93b4b47ea1ccbd9cda9c0133bd33c405fe53706" +content-hash = "f0f7573338f20f81f960b8c0f670e525b77b081975a7f8918b11d3e7f65cec57" [metadata.files] atomicwrites = [ diff --git a/test.ipynb b/test.ipynb deleted file mode 100644 index 0c02ddb..0000000 --- a/test.ipynb +++ /dev/null @@ -1,176 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from pandas_ods_reader import read_ods" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "file_path = \"Dicionário_Microdados_Enem_2021.ods\"" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
column.0column.1column.2column.3column.4column.5
0NU_INSCRICAONúmero de inscrição1NoneNone12.0Numérica
1NU_ANOAno do EnemNoneNone4.0Numérica
2TP_FAIXA_ETARIAFaixa etária21Menor de 17 anos2.0Numérica
3NoneNone217 anosNaNNone
4NoneNone318 anosNaNNone
\n", - "
" - ], - "text/plain": [ - " column.0 column.1 column.2 column.3 \\\n", - "0 NU_INSCRICAO Número de inscrição1 None None \n", - "1 NU_ANO Ano do Enem None None \n", - "2 TP_FAIXA_ETARIA Faixa etária2 1 Menor de 17 anos \n", - "3 None None 2 17 anos \n", - "4 None None 3 18 anos \n", - "\n", - " column.4 column.5 \n", - "0 12.0 Numérica \n", - "1 4.0 Numérica \n", - "2 2.0 Numérica \n", - "3 NaN None \n", - "4 NaN None " - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data = read_ods(file_path, headers=False, skiprows=5)\n", - "data.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.9.14 ('.py39': venv)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.14" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "6ea8410887842cf63ab95c5e43eca8b07627ccf142be6aa1d4d3a20bcd58cd50" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tests/rsc/example_col_lengths.ods b/tests/rsc/example_col_lengths.ods index 9dd3fa7ac1f3883097607c603e67d83e92720a52..eb781ca379f92ab2964fb1e007b15353d0bf0c38 100644 GIT binary patch delta 9002 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 diff --git a/tests/rsc/example_skiprows.fods b/tests/rsc/example_skiprows.fods new file mode 100644 index 0000000..5af778a --- /dev/null +++ b/tests/rsc/example_skiprows.fods @@ -0,0 +1,423 @@ + + + + Lukas Jansen2019-01-27T03:31:08.9314826322022-10-25T08:45:33.990049580PT2M33S2LibreOffice/6.4.7.2$Linux_X86_64 LibreOffice_project/40$Build-2 + + + 0 + 0 + 11288 + 4967 + + + view1 + + + 5 + 2 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 100 + 60 + true + false + + + Sheet1 + 1861 + 0 + 100 + 60 + false + true + true + true + 12632256 + true + true + true + true + false + false + false + 1000 + 1000 + 1 + 1 + true + false + + + + + true + true + true + false + 1000 + true + 1 + 12632256 + true + true + true + kwH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMAtAAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luZGFqdXN0bWVudD0wLDAsMCwwCmNvbG9yZGVwdGg9MjQKcHNsZXZlbD0wCnBkZmRldmljZT0xCmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4RGF0YQpQYWdlU2l6ZTpBNAAAEgBDT01QQVRfRFVQTEVYX01PREUPAER1cGxleE1vZGU6Ok9mZg== + 1000 + 7 + false + true + true + 1 + true + false + true + false + true + true + Generic Printer + false + 0 + 3 + true + false + false + false + true + false + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ??? + + + + Page 1 + + + + + + + ???(???) + + + 00/00/0000, 00:00:00 + + + + + Page 1/ 99 + + + + + + + + + + + + A + + + B + + + C + + + D + + + E + + + + + skip this + + + + + a + + + b + + + c + + + d + + + e + + + + + 10 + + + 0 + + + 58 + + + 29 + + + 77 + + + + + 5 + + + 47 + + + 50 + + + 99 + + + 79 + + + + + 75 + + + 25 + + + 86 + + + 47 + + + 65 + + + + + 82 + + + 45 + + + 88 + + + 48 + + + 74 + + + + + 72 + + + 47 + + + 57 + + + 82 + + + 46 + + + + + 40 + + + 54 + + + 26 + + + 97 + + + 1 + + + + + 54 + + + 26 + + + 99 + + + 63 + + + 49 + + + + + 87 + + + 24 + + + 47 + + + 87 + + + 15 + + + + + + + \ No newline at end of file diff --git a/tests/rsc/example_skiprows.ods b/tests/rsc/example_skiprows.ods new file mode 100644 index 0000000000000000000000000000000000000000..ef5b079bd25228d041bd9ce86d5d05ebea2c0e7a GIT binary patch literal 10656 zcmc(FWmp{B(k{VCf+PfYcL)+J1b27$Ver8Q*97-Ka1Ao};O-FIgF6IwClLISbDn*& z_xZB-z2C1}{q!@dr@P)&-PK)dt*Td11`hre3=A?144R&nT7WfAC^HNU%+LMtFBp&o z29||Os#E=9D)B^tw&3p{<$yw-&km8 zYv*M5Q}rKgB>9b=1<1$@2xbwsa0D6If&W4Icb$SAjU1i8|7F;_p0sw&4z(;@D{^1T}WaNLnPLJmON1i{nKt?tera-VGvxAB0 zP|T2x-)jv2BfbFO@Qfe}0)hi=f4$}Bwl{&A2rQ?`FPB;(W7L%(g}a|8)=I?Lmm{lE z4vYwU!z%LIRXG53RQ;0X)jJHljm-5q^SpC2H4G%lL?@PhIiKkpTx{rh4B`WrxSm^& zRA$k-CZF*sG?BMYa@$Kj@2-kOMj?(6w)np8iO(~E^LvvAfw`` zQH^qQPz`DH2f+vw*?xaVKf(rinJ)JDGbNt(%!Ab)!{%|nEIz|yhRBhbrQqke8~Wdx z%MNw@mObOl-46loPUBrC%M`JOsceS|yNz$%9=7h8M;`E2ORJnktp$g(&90-is!mDN zBuW)!kdUh`&BqX)z`*#y!NC0c8~EMh``6b9bTndi1zAU^v`41Ae${lzfYGP{0FXWj zD^o^)r>aw}tWr=LJY!qX7)dm18guW}F6cbIS;n<=HrT`kP!UK)r+0s{2N_M_mXjp> zuqiIN2wEkXSI7@1Nk*@BbN@t`__|5p{lzv+O9Wz}Gqh4TU+#9`hN9z#BQI4RBWq1Z zY}9iX&8ikLmY4D_Cxf_sDRs5UNmEiijvg>Qd}f=-?s)C`<&4lblV()k&x$Q9)YQ0B znHAev>HxNCf+&$f?fFM`$q?6ed;s$|`>?(vV~QRXFQK5_X6(&<-;k>txo;dc@s1Lu zazunOOwHC2DnNOcK{6{}%W4kHES?I4JaLOUD?q|KFbSJ1vww>RXX}RbB z_~YnDa@T_$LP_6)(8vMG{0GFhVq}-tErFfK^nEc-!bc=Iha-)jH!N%Wv$@_cjwUa+ zy&LYk>(QtGfIVI69&^6|d@BImZdzB`zHu&vu^+b*SWxGC!$Vtr9%^ipe8+8J5rfP1 zrlmpCbC1UI9`>iZ5n8Fp>L1U1An#@!Vp-hjbRmkB;OKU9-?_iLujX z`?>ura==u%k((r058t3spet=w6gF*b)=G`l6M>bB*NrC6uOiZ`H%TNE`31LTB8HD5bNi zdp;a}h6{Y!?=Qx%)q|E>hH9(UD}Gbd=Ct!1gB83JOHG2! z1p9@aH0y-du+SIL5=n-!E4Cat*kOMhY1dky<(ACSQ!lS7Jn^?Vt%HszlQb}3bQC^& z$%M_xQ59zVHJ||fRc?K7Ofqm4n+*y;BYquGQf}uhUi&(zAaK&Z}qC-&)U zR2$!7o9acDE|;i7NI8g52YNp0!Ox`!|mF$jfp! zWJ^dLOGqQ@UUs5K%Q9B!v0vf7lhZIcM%jQ=yELdqjX?<6AL&#G_(onP_R@qpEBVt6 zk)5b_V#?abWHgx~dDR;&`rqeQ0RfDP`>M{cW0htDfZ7!wUt(7d=kifqLXBVM0CjsYtHr!i-GfCUJqlJRn-gY1oAxcE?G~2 zq!y#Re80l+x>nXUu9V~}r;>&q%5{?7QxTU>AmtX?9&e-Yit!QTxe?ZK`SUYMY2w=2 zd)81$-U!%)yFmwzCh(=*w-4=6&XUZy)bfu}hUp^_=$!+aVPWkyHS8{baQyOa^!0TsPkl5yu^=-#ZMM8>!ULF7Kp-n>ctU0r-TKE&z;y! z3iiopl@5l)O}`FJVPOd`?%zyyQEb=tCOWt?ATaUDS|`I@7{4ZWZhxS4{@xg1=uk7W z$TUHp{oekn7|~}{VN1Ob(6d(bIW!F)*6dS3GvDml`G5k1CAKuE690TyEtkTtNm*&g zFjvU}zoD#TTBzrhMsjP@*X1JGL4y|Yd{LItk`iXY#?h)*OfR*gHH@rFniFhbQEWZ4 zAaw=e4>DKA`mwVcsCN#QJw??ANrq}~BuO})?4SI=sOH+VVt^Y&^cak{eV&sTUvQ^c zF@RWhn|u4Y&37VmxGDs*W~hizAa_R#%2YqTWyr}MBX!R3|E!q zXTys*M{sw0H{DMWbiKDU{VIdh7^2h;MmlE6`OvBF2hOhc858%&gzt2C7UKft9@1I3 zK%IhmffrrP*3lg%DK2m8eA`HwMntz(iJbN770Jb)c zKi3V9!`p_A4ES+)Yq`|0n@N)QcuyPpiHbg+U230Ln+9n;-n%(bVs$u%9+O4X}Ibc~$p**HS4h zh+|rY+YADt#CAokHa2mpnBOH|rfxHj?JEV4xcRQ@=4;Qb!|e|C9*P#F<38!J@}Hlh zQ^GB@HkofA5U(ulu`o2X8ub@Rv!)b55%}~fU2y1FbPqMzL>zU{lS=amTO{9?V5R8v z<+BurZ>cUOHrsI{I?3>?snkLXk<=^Xi>mz*+5NDy>!OO;;YooIER2tsdbFX)=?b-o z&b!2w<^z=F=I(M|G_-VULf|$d<{W#zc#}Dnge+f%%VJ_tF$RitDbZhwu+25naa|u* z;VfxiKOI@wP(rS)u2kctflW1Br2DLvhz4Gi%CF9FN6=nX%BzzamA6~;M{O3)pEA4^ zz<_8^#s{Qf`%a!p;v~9${%&$|c2y(iu^oEIt}E`l`AuC*`Y0+XPokDW1+YGP?w8w+ zcX=B8rHvu4_O0ISLE5lWVYM|84&tGj7boo#nNmE-bG#>1+~l;>FJd$jsG5_F@;o`i zUW085HZ7w?w}{Q~6PFe(M`J7Ul5U<2*L&8|XrMI=M_N#P#HJjl{OTBMMZXa#Dz65q zybnfT+TQSj!#7ag(2bEuT?v@ti3BNNz#dA`e`I#ZaPN31KqOYnVvdjo zmcV8RM8E|WA6uF?1NNcaC(`zdSmypu-=c!TmeXd)54na5aYLPRE`4gG*=wh)(X(`I zaYSjQAu-20x)`@uLm|xKps#f$OzNvv_$i2Qwo%1nXqk>{zd0Haq(0U8N^s$K)PbG) zbUr_iEBdINI&wqx_&f3IcVpse@=5JfnPEAHXLn0>9AAeUpOjJx@o8{$J+H2g(|o~g z6M()}f~3-1i}}H!i8Ozrjv7UuwHim2A>)+qg-R0pt?EhvG)d238Behv0182YY>s5Q zOFSz~PCWZz(de;#LmIj93B$=rtAR5JLGL@DTeNMg}<> zAp$T44XyDuVGzN`>R~Ln?XZNiLmlu_6x8t^onj>LXIZv5)Zr70srM_S5@q6?yEZ0f zy6&%~bxb*+?=%n5Y)#lvjKc8d^yP3_{cKFr?N{{LPVJ0%&~38>;4yKvsN)s7UMB(u zUVGuP-~BwlgDRrP!bD zbK9w$E$m(`=KLKtB6tDyEL_GGK6{{-O;31+m9END79YmIP;)7LxpzKe+O6EHyKAch z_8in&A2bTIPGaUi*0;Rr!h%YKGhPOx>|68g@Dm8Iv|LCM1=2Ot-D%114K$@GeAsP2 z1!P`ZJRB*O+#~!P9iSe;V;cxCFuiR5G&=mu6o7$_jutj%|62VVXzPGexL*yO7pHx) zCn9KMD#~88&nf3Zz93a-RS_q8!wG17F)X0UUvuA(6^7toIG!W_O^AG$=asPYikSoV zid@hqgimm=;>oYN`fVRKzvbf7!- z8BCdhGrwtl!;S5%7fsJKjT~qIRqw;UJV>Nl?d?_sU?fhI?&FKC4~UD3=H%$AwIW?n zeM73l*dQH=Vo=xmT0JlqG!V0bgu$edRA`VN;e!?+aQWURGWZ$S*F_wJj(sudZpklY z+ZX{xu6u_TeF!nn^Q(;cC%mP`aUB&DFeUwNWk+p;a2b%r4q#xNVY}%Flp_7tANU4l zB$(H0dq=c-zpq6h#b%DgBELr^p*WG$tFyhw0@A!DWc!d>@%6H5885$==vw>X-iy-;8))-=TDZ=D?Lun(0ZV+PY% zZo&&c`&E1R6|@%sA#uz*x06PiZW3iBY)2j)e(?iESuJY4-H6NY*TC%eK&EzDxVD_l z4-$^}Xry*PJk`*s&S*&m71(PgpQrweM42z#IJ*|!-<&jKkfE$0v3a!FBa$@(5;`N< z6Xa>ED|BoyzNM%l>9%<(W08>}#Dk@+ipMCoqhuU5u(8Kth<6SyR@jTeR8}I|oJa9b zbiY4?9Z|p6+=U#^A=*=XDnQPL_Zl|a`JA?8U39&VMi|;L0vbbl0>_%-y#bTAH>=3& zGty&6aYncvmOkhvZ3hk^ji3Y!HZ5%D|+bk!h0pMmMPwn^@N* zWvpaeqiHkD_Gv?{391Nx(}T$Qt;~K@9KI}njC|$WQQ@lbe2Tc?MP2IiL(i1$87<4! zjb%}L4{95N@y{-47IWFy-pxmrbN#_SdRHUIs*p>M{>n@cFNA5!yFl|yN3B!=&dPgB zK;oc$ZKdr%Av-d!|DvGjkj^j{G26o90OOr|x>3#=>a;uwV5_nsr1aq4bmM}iaN~QO z%IAgoN_~?_d&BP@4-IFT#y#9z(m(97PkQ8Wa{&{*y9y$;t*Rsf5l3n5Q99sf^A(>b z4!TYq_uYTQ01r(l@AeEiJ1JBeKcCMn+UrF)HA`-CTr?gwF|o#@j;p{~Ef5Qg=<*e; z1p==RjI8~EH{Gh1YbUA(+s!*O`|_W+q(KlD8j9kg>C}6~4jT~YJ559$&SYi$^mHpQ zmpTUH38%P2dPawsbCUP5*1b+%IWVCy`G|%rY7yqi5~=H}q@EVN!YjcKMFY6Pz!t?X zc48XrUEq(6GTZKSKUoYDpQbf+L)&c$LXj z;sA{ljqi)Z#?-~+QOj8VrdR9OHTus0ok4{#VfGlHpHTb}p#P{0&)dg6o7(3~ifOV}rfts==+NxlEX+r};Gb4RVBONCbH84=e9jM}Asb^vg z0GeA_0*$TBO)M>~4NcultsIOj-7IY!%xzuG?cKrFrVb!WHyfafy*1du!O7Xx+0Dz{ z8SLrm=;7h10rJ(c`Jiv_uMZ9e+WMM12U>bXgFOQ5e4=bV#JPV60sF={1}3|Nrn~#c zxQC{=M`n6|%6$*g3wAXR^aMwFSp|OZO!Tvj_H&H(caIP8N)7<0hd3sOx@U&FW=DDF z$9Vhs`uYZj1cio&2Kq;Y1crr$2Svn&L?$PE6OP>F3g1#7vw;pPzba- zv!uDSv>Z~_1g)sADTdUQ7uM9)CP3TL%RAF6dm)wWSvCE+^#jn_c4%E^VdFqv(`Z5S zSWRdx}lYpv9-3M_%CIjzf|V7*A#Wt7x&j>4AkfJHxzU>RgJY2 z^t3ljv=>iyR*v^I&G%K$4>YcfG_8GY?(XVn?;h&x8ye{A9_a7u7@F)GpC2FWoEsaM znVlV&+Ztb3A79#@Us@emIT%?xp8U2u`)zH0ZEtk_e0ukMe)Du;_iT3edTrv%>Qw*g z?9jn%*Z$JT>iqc5(%8xJ;NIHQ*~;+w#>DaF{N?uK+3v#C-onN4;@!#8_V(7+!Rg`g z_U`GA)BW}D$D7}ecW*DYew^)}ot>XvTwPwDe!srGx;VMLKEJ=ekGIMqe=M>QN{I@o zy3QTUp(@4#iD8bLlXv_1dl~#NW@kxtgW|wKXuasp%7N^pAINp$IWTR{;Qf0E8NY51 zYrde@RA3#6qa`5Hc&$Qbj#{T`nsC=E&D-};&+KD_W$Rdu$LvG1DHk|Ka0EQ^794cu zgM=IJcJXlUy0mpCFmkr60gt(YA@^z{exB#_0>?(({|LZuB^XaTlC9Ejb)iB#9z>9C zrjA_$gPR|_$P-EXbfa|KRD+$t=Z5M4>!V6(@+n@u!wY!t4(M$M;(O4mHCc{xQo&2W zdcO|VX+lyQ1$b?PMgQX^H$8$H+QT{OgZCS@C65w|JCf2~^kiBA`qn$5w#&wn`*zzK z9cIC;B>UAOD9qevZvnhlaPYPFIQ>>xy4FMzvjruD(!`^#E{+zHo^Ny3*VY9Nx!rU1 z^mulm<=P+>?B%UZ+a>N|JZz0FjVd0#%bdG5w@W^|Sm9=vVfS@$j}`BO`fYkY-H6-l zZ@p!d*1Eba&kD|vd2!Taaf&`1-hdr-opE@e;6SGCl~5QchL=wm5F|VTkZ~I z!cO_UY*tk+j{65P%G$uZt_vyb9T;vZeSYsEQNUbNx^MyOB((Jdo)m8l!!R-{u5W-nl0@ z({%YG>C3TCZ-Mc?UqC?6en|rE|I=*4c{U+QQtXCPq$ojgI}m-5pyM+Jv^j(!@Ark^`((bkk}@ z+Hr|5UW3v=ooRjE9GkdI|E9aEgbDWxBRoyHYVLN=kp2)TAB}>hi?{T%wLbi{jj8k> z@Lw!enuP5K1dmJL*87L{kSG!cxY+2;G`VbPt@p?t%rNUR2`*K1PYk^oIGVbWsSP}N zuh9S$_Ef-xlW7po znthZ#e$MV3vL6j1>c)3v#;|lt6bI%{~-tqI4fb7Ep}07NpuG@l)3L zC&UwMMltx!GsrjgJHL*UY2Bn+9$h6LV+yGsgl~9CvMHk)DIkB1z-?rpf@y&(p(3!{ zkR(6Lyh!_=P2OigWa`wo{{&;eUhg^3fD<`07TW}qo-9KOQS!SY{j!e?OwO!}^@|-@ z<0y~e&99LI4XCiR1AIMfecBgLqImDCL66w}>8+gGIKA1p3&tI+2bDRr{D-G!RP;1; zY*ESDIkHN~ia%T=m&xQ3&Xg;!m9f>M8ET=$+*Fk_@Y~ou*kjPWTGSwcW;5DQ-2(S4 zg(fJud~jb-QzSd(z;-gP2T^^+F^s6@HxgD@TJ)IvB4z?Uyi+{?Xoj?L?9Bq=$aig# zd@u2(ew_I4-NTk2W&(L$UH-@=@VqBrhu`kUBY&|&TzanodcB6Ypp@Z|nmxX0wzM-< zqF+62pf070;6)lReZtWI@2jW#7704wf$z=mGG%hcrp zARxj@-G0=#z^KtT?Nxrqap~r;F&3KRc0hL(h8vf10S6`XIzH`qo@TP?!J*Y$s}-j+ z-+HSjo->HVP{{HE8<%LPI{M8=o=y&zkF&eFLrt0Hu(V9QOJaP2=f~HDPX-h62|YB^ z*Mll`g4vTJAWVAhESmC)v;>vX;5m_ie9%Nf>`OKl@i#%+n-gZr&`I?6W?esw{+-=U z1u5H;11Wo-yuJjl@rjta4q%t-v;$D^+y4@5@GD>J9?oiI7$6MTk=teIn1% zdjsK;a~9b>ACPkvj1&2^FXI; zvrij(udYRQ&K^ZEaMjicU3bug&BnfHNheI&>U}we@)DBvSwC0PfYTIfu%4tP%v5D~ zY+7_$G~lJiA#Wv*rqF0Y0yi@1+J1N!YN`6AIqpn|6#x>o3y|Vpg z2b;0GAH9cZZ<%i0STQqS#^sAr(JO^Wt7iRwYyyZMU~#`&8_GP--+P=Z!$^tAi*E?q!{9tJON!bY*kunwDQ=|?!M zuoY=^Dxw-s&<-a^Gm^Ghno~;k9i>$9`4hz(&dc|d4^soIJDe#f&{?blzEm2U{dIUY z{%m#C!crkSG>n6?oYeE~8SM4&*VG`5$-AfBy!kS2O$!LJ&LwD}k*JvH&4+R@AT_xJ z7*rK9?)gaJRsZCV@4lTCoxLKbO^bx-?0gy5ECFaFlyKJ$qrp-Z*XM1k+&D-rWAxNs zQ%a%nm6_B*(Mx;+L7YVLq(7p;7Qxgbgd_lD7%W_e682z~u0W+Y{Dj~Kzy1bFbNtiy zi+&jMMQEL62FjeP%O98jU8hf6T2f?vtkW~X|6B?^fqez@_cW=W{`n<;kf#1y>(>?k zUPApkR()*#JuT|5egD$>Z+KRHRiB=T{E z|Hu~n7end4wfu&hF?UN|JM6+!uV&=@R#U3n*FB|;(sgtIg#<#8+3d5 z*X;5intzw*_|+x;W8UNM(jI@H{PCFn96f%<