From 30b5586a1f81edf5439fe6eaa2538827c7faf0d9 Mon Sep 17 00:00:00 2001 From: LukVal54 Date: Thu, 27 Nov 2025 15:35:15 +0100 Subject: [PATCH] Haruns Sachen auf meinen branch zum testen --- imageInput.c | 2 +- imageInput.o | Bin 0 -> 9656 bytes matrix.c | 139 ++++++++++++++++++++++++++++++++++++++++++--- matrix.h | 8 ++- runImageInputTests | Bin 0 -> 58152 bytes 5 files changed, 140 insertions(+), 9 deletions(-) create mode 100644 imageInput.o create mode 100755 runImageInputTests diff --git a/imageInput.c b/imageInput.c index 3a91291..c327694 100644 --- a/imageInput.c +++ b/imageInput.c @@ -206,7 +206,7 @@ void clearSeries(GrayScaleImageSeries *series) //von innen nach außen freen if(series == NULL) { - return; + return;//beendet Funktion. Fall series == NULL würde das ausführen der folgenden zu einem segmentation fault führen. } if(series->images != NULL) { diff --git a/imageInput.o b/imageInput.o new file mode 100644 index 0000000000000000000000000000000000000000..d021903afb4a086ef918cafba41f795d03b5a3e0 GIT binary patch literal 9656 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 literal 0 HcmV?d00001 diff --git a/matrix.c b/matrix.c index ad00628..5bdaacc 100644 --- a/matrix.c +++ b/matrix.c @@ -4,32 +4,157 @@ // TODO Matrix-Funktionen implementieren +//Matrix dimensionieren Matrix createMatrix(unsigned int rows, unsigned int cols) { - + Matrix m; //Struktur anlegen, Varibale m von Typ Matrix + + //Sonderfall aus Unit-Test, wenn rows == 0 oder cols == 0, darf kein Speicher allokiert werden + if(rows==0 || cols==0){ + m.rows = 0; + m.cols = 0; + m.buffer = NULL; + return m; +} + + //Normalfall + m.rows = rows; // strukurvariable.feldname --> Struktur-Zugriffsoperator + m.cols = cols; + m.buffer = malloc((rows * cols) * sizeof(MatrixType)); //Speicher reserviert für Elemente + + return m; } void clearMatrix(Matrix *matrix) { - + // falls Speicher existiert (buffer NICHT NULL ist): freigeben + if(matrix->buffer != NULL) + { + free(matrix->buffer);// Speicher freigegeben aber zeigt irgendwo hin (dangling pointer) + } + + //Matrix in definierten leeren Zustand setzen + matrix->buffer = NULL; // dangling pointer zurücksetzen + matrix->rows = 0; + matrix->cols = 0; } +//Wert in Matrix schreiben und wo genau void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - + // Sicherheit: wenn buffer == NULL (kein gültiger Speicher) oder Index außerhalb der Matrix --> return + if(matrix.buffer == NULL || rowIdx >= matrix.rows || colIdx >= matrix.cols) + { + return; + } + //index = Zeile * Anzahl_Spalten + Spalte + unsigned int index = rowIdx * matrix.cols + colIdx; + + // Schreibt value direkt an die berechnete Position im Matrixspeicher + matrix.buffer[index] = value; } MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - + if (matrix.buffer == NULL || rowIdx >= matrix.rows || colIdx >= matrix.cols) + { + return 0; + } + + unsigned int index = rowIdx * matrix.cols + colIdx; + + return matrix.buffer[index]; } Matrix add(const Matrix matrix1, const Matrix matrix2) { - + Matrix result; + + //Zeilen müssen gleich sein + if (matrix1.rows != matrix2.rows) + { + result.rows = 0; + result.cols = 0; + result.buffer = NULL; + return result; + } + + + //Spalten müssen gleich sein (mit broadcasting) + //Fälle: gleiche Spalten ok, matrix1 hat 1 Spalte, matrix2 hat 1 Spalte + //sonst inkompatibel + if (matrix1.cols != matrix2.cols && matrix1.cols != 1 && matrix2.cols != 1) + { + result.rows = 0; + result.cols = 0; + result.buffer = NULL; + return result; + } + + result.rows = matrix1.rows; + result.cols = (matrix1.cols > matrix2.cols) ? matrix1.cols : matrix2.cols; + + result.buffer = malloc(result.rows * result.cols * sizeof(MatrixType)); + + for (unsigned int r = 0; r < result.rows; r++) + { + for (unsigned int c = 0; c < result.cols; c++) + { + // Bestimme Spalte für matrix1: + // Wenn nur 1 Spalte -> immer Spalte 0 benutzen + unsigned int c1 = (matrix1.cols == 1) ? 0 : c; + + // Bestimme Spalte für matrix2: + unsigned int c2 = (matrix2.cols == 1) ? 0 : c; + + MatrixType v1 = getMatrixAt(matrix1, r, c1); + MatrixType v2 = getMatrixAt(matrix2, r, c2); + + setMatrixAt(v1 + v2, result, r, c); + } + } + + return result; } + Matrix multiply(const Matrix matrix1, const Matrix matrix2) { - -} \ No newline at end of file + Matrix result; + + if(matrix1.cols != matrix2.rows) + { + result.rows = 0; + result.cols = 0; + result.buffer = NULL; + return result; + } + + + result.rows = matrix1.rows; + result.cols = matrix2.cols; + + result.buffer = malloc(result.rows * result.cols * sizeof(MatrixType)); + + for (unsigned int r = 0; r < result.rows; r++) + { + for (unsigned int c = 0; c < result.cols; c++) + { + MatrixType sum = 0; + + // gemeinsame Dimension = matrix1.cols = matrix2.rows + for (unsigned int i = 0; i < matrix1.cols; i++) + { + MatrixType a = getMatrixAt(matrix1, r, i); + MatrixType b = getMatrixAt(matrix2, i, c); + + sum += a * b; + } + + setMatrixAt(sum, result, r, c); + } + } + + return result; +} + diff --git a/matrix.h b/matrix.h index cc640d1..cc96f0e 100644 --- a/matrix.h +++ b/matrix.h @@ -1,4 +1,5 @@ #ifndef MATRIX_H +#ifndef MATRIX_H #define MATRIX_H #define UNDEFINED_MATRIX_VALUE 0 @@ -6,6 +7,11 @@ typedef float MatrixType; // TODO Matrixtyp definieren +typedef struct { + unsigned int rows; + unsigned int cols; + MatrixType* buffer; //buffer Pointer zeigt auf Heap, mit malloc dort dann Speicher reservieren +} Matrix; Matrix createMatrix(unsigned int rows, unsigned int cols); @@ -16,4 +22,4 @@ Matrix add(const Matrix matrix1, const Matrix matrix2); Matrix multiply(const Matrix matrix1, const Matrix matrix2); -#endif +#endif \ No newline at end of file diff --git a/runImageInputTests b/runImageInputTests new file mode 100755 index 0000000000000000000000000000000000000000..3d8d1557b6fa998892d3f4a80f8d973553d47964 GIT binary patch literal 58152 zcmeFadwf*Y*+07Hmf4d8av|K+jDX6W0Ln!{CcwZ12t*(n6ih-gxkxTFnF*H`MFVP# zzJgjsr4p@GY882HUqyltKn-5nVy#MB+NK_`L1-J5YFfdZ?{}@W_w1Pj+xK@q=lpZJ zA+y$cZtGdkde*ZpvuE$y{0rvTZ8pug?Ao;&OFoZJfaIs9?fi`>D%cb)LGx*sYnN$p zfH?8z6Bwp4XQX9zi7--K(K(QkZ>PfVwEIwE*~dh?NPI?8Lqn!6g_DU-m1KH6R~C&_ zOO|EwQP=hrvfN(j6B#3IQhIbyFpOPNz!tm?Z^KMYXy8L2X_Hm;(4<)kaeRTPh@D6a~y9kX`Iq%o7O99vsGc7jlW zda(}r#@vOunth|zLYTpC;8`Y~7rRv5|*6GJCMk9fcmE%*y%4L78XsiWZ^27NDNlJM7C0Z2n# zSdZuzS)phi;Zr|vG=>yP-7j{(wOs~9@de-mE&v~S0r<5SfX}%A{N@Y5Ctm=ba{)N* z-&4D4F93fWa4-I1FPgI_Iqa97;Nvd=#}?+xjrv)uC-dp0MzsattNAc0ZB0 zj#c|aN}o2y1OaUpxOF@k_G28N-rX`w6i5+lhWzk(jHr4uESRJY)#AEb2ls= zm@YmWPKNsLAtz1TYsCQqyV{b{LAT;?iAeVomK(VJuZkgX@Eb>J_RW+Pkak_yCT)-D- z*l?`j$n1vJhR;eGvVUFDkbAVG!T)YU=iUAzfkywa{kk8mX=rW#**9HXfd+p^pngM# zmb7Uq93ar@Z%+U^=@tLGNv|A5^6R8mT9RI54u8lU3T)d?PoaQWQa~F7v_Zfbf*bwq zMCk(cW}q>*LxSE5G<7QI4PH1|tdB6APLqs?^x{rsQ^pJ4Ai$IcO#x*CEjWfqa}?ru`)~Vum3Hx zSbI;H#q7IH(iMb_48M={M( z3A-A?p2yr^MjE)pa!8S8d1->E5~I?mOS^DWCvgueT$Ek72#t1^J$*IJ81<7-BV^_1 zjsA0iZ2{ZSq?fg%mphVP_J5tZ=Tfk~S`guHZQlS^j_~>o=WMsWE_h*vN_L_$Lr168 z49OhZSs02yi}Cdy&_=!$6Cx*tr2V&`jsw?o#J-O;XJpI?b_N5o><==7>c+s*rg1`Z zfkRX|xOWhQh&Xkil#=?BN(G$9Ewx@})*3czU4dE+t;R(fuw{jaQ7Sob2gS~X?;Y62 z+~pwLdlxHhNAbWb34q;)9@u*~VFTs>c5@j-Ng%tu(b7hplc?jdY7VfXe1>^j04 z3EM{4gGqo*C+uFrju7@M!bSkrJ{4+6?E<%-*#d$#4oGcs@g@4Mz(S~HvaI+cSh7D&9 zVBXN$g*;XL_)jl(sK5#_mM|*Qhn-o(mlO*oncbD&Yvlc)rGersg;+K?T40yQP90 zta>@>Wdt#+cm|f2Rj|uCWLuYDg*1gLB=p(QhTL}>vX3-ksq>=$NQ1w<)z2l2cIr>~ z01IpgWzZ-pa|mP&Gg(tC_(;RdL`I9oTwqcgv%&BuXW+hz;;CqcP}C92Mi~ru$`>}% zd~gLNT#2w9Ays4cG1G@1I4hdX+NK@~Dc_hc*%K>+Y_#7*HoBhT z7+CK=Vs0@lq&t$}kit~hFig2g4aE90bnav35LD4$83_wTh(_Q&!9>=Hj^|ux zE(?YS8ePA<30P>uRe%g<$#XHj0#Hf%)_Jnumwh5|AIC!Y3`BL(a*sn4M&Ol@(Wqo( zm@;xG!^vhT>bt)%3zoLT^;V5k$P`?{hWHik4>n+h;-xu!`XmqI$9b z3~aA(zXP28+wTJS zKn-&nNRVw1#2W-9B&Z_6auSS|Y&nFkC3FsQiYb7a%E~tP)y&}_$NDhZ2Ua{%f@dcLHEX& zlRz{+p9HG$O9&N>&q7XBAJzELh9G&Vvk#yHgv^&zyWcXcY zL-=f?|7?9*^5&MLO+QBKZr^ZrE0UzmoQ@A%fsgk0|3-6d=)Co|G$!e{_M#53<6a<6 z=M!f3@3R2OCjNlPnM9g>dk>MKc^iqmO!jSvP|>_wkfUg`Qx*j$)3qb8fS>2$w|1>;+m2d=`Ye|u-WJE;W~kBbq{OEvap}RNv96uWJ={{?VcUcq!+{jiXOVso=+yy2WV_XZc5&Nv zgeg_4Bs;1~x|3s+kedLZrYBAhLQz&XU%-~h7SvaE#5cM$0UFr?nqH$t{${A-Key&> z$#;UX`dj!;fX@aX>KcCJi=<_k6I}9(WqbvF2A0Jg!yy;R`r7fH+MP_BC+YJD$c>X8XM>nqP}b9fuwDTnp9|)4;d^<56+PWke1O9^YS1URYPDT;^2NW&s>FCi& zmiAw$Jv}pGdCI!O&p@YCIa`h?gCl zk*4Cgg#tuZ-=$R*6ZpNReu3z%FW zCA1Du_*@!UW)M1xxvL~|hZa)IizKt?+yN%@R132m(1U ztohtYEQ7GmMNpBQaSjv`^(UYVrJf^HDAgn-Kq)0*uPLEJO4w^k*kO@S251kO;phbG z>+Ci$$6w>`2&?m)pj@Yn033KM_7KVr__AP?bSj`u;@vnp7ia3HuL3=Wl1V?3^aZ5< zo7|PPQOZYvN_rR99GZCsl3`fN&}TsdHqwo*%533AVJtdbmKCbBwB!36OSD=MZ zrXw&BY7T`%z~w3cIL6wZ!7f&seU;Ebd>vv8s!k3iVbO&WiH#Q>N~}SD2c*%)q0pKB zk27P|YpJ~Lgw>?onlQV;e;jH*2S%tRn(&OwM>XLwND)=T`k^wT)=#k>k-EQ#J!E4p zBpDuZ2>MFRA2Ly@>z|dj7Cp9##{sRbE4u4F{NK|1^Z60I|0?rQdVl3$K<<(<-1Jb?Naz-a+7|PI@}B$VAMhLx*2uw$NxK{{w^!x79Yuclv}*>C*c0GLgQxC>r|yKO?rHSzYw(|I^zV_|IJNnLAuC$Z=+sp-smIXK1DEFVc2`z(>py06X3SI^Y;5`D@$C1Mno?J9$ z@5Y*AXP`0MA~4|pB^t;hi7pHW$T>c@TSI^UN7}WszSADMzP?jW+Vo#=e4KVBZGKvf z0G#ablqArA0Nsen%wn5pcmW(bIdFThy^Hj>2ius!5*&c1o-ky*0vQJ)GR$JE3@{5B zNFjr#|EE`o#^9VzDZoR$27epSI?>k>4bV0NuksPey~MWwflHzPrGgKeMD7xqYyr3M z^rTHZlNT-G*~b(tRvc?4VAptz4S|IYw&5H)_ZT7nDW_r4pQpLH z*vVnN8@pmS$|(OiZW&;M*7kvLN;x+?NM!CFY9YrwH~w;NSZktGtZC%dywNWlV-e@K zR#(EDZXKHV2f9|WEsX8T*?y?_K_znfqZq*w_?sjYr{(j(lcHyl#s6DW^AihX;$SVx@N zt%)tTza1Ot_V4!P4(|lAC%&ujTNEC3E%#G5%ee!o+t8L2$9bz4_G=3-f#h+y*CfEXP z3dazxHHnM6R@djVx;e%dzmumkqSLOw#Axtx=2WjHZRYnL)Jt{&qm!uXVzaJ~u@eMT z)b%ze{Z`kV-Rrswb%};w<3EzLi8n_fIw302)5Avu1}zwmF@mu+2r_1NmoW=644;u* zDKx+LVzZ}Doa%&gKw1Y>*74{1A&|yVLYrc4lgw?zFN!e3=%O={E&M!%$@90hpTWwD z1EfKU7bX~lrJ5Yjf5cu8eQO=ifz!r-KBTsfjW|x&O-t@>-;aSThxCsmvfYAw5=dwu z?71FQz!sBccI&&zzh&?L%ocXxe7eJlk9KF&Q2vTT*}26W&HO?{j1`V(9LA*No;6lm zaJFNa5oi0g%ttxfk>5yH!68brzY`TD4Sx>@Sny&3I@;gG3J<#_tir--6BIDU% z>?OI*H7F0!Fk+GZV}UtqVs-+jNj5Em!(Oz9-8#` zW8dDSe_(wDUo@LE%4|{xc8As`{SBi{F4#U4m`Ia8kmFD^X&3m>q+5L5nzRa*Ml8B`I=n@uN1u}Ev7Jc8dVuqMJ9fwTX7M2`e=t-z zCicA7&dHpC-E}uAHu`Fl%t!UrT4+(fVUIiMu0O&~jH!*zHwNIGq>F~h-iHs@>jR94 z{5EsOJS!%|eF$Z5;S{zmY8Dbpp3YN0fJjryt)`SsRw*ee7Vhgw!s(mYJNw`q`;s0r z8hAR(lsVFrnStDzRFisr59;9SLCeW|3v9Rre$k0#YI|rca$<4x3r0k7yz?M;a5OD8 zLF+)=euv!B!K$<0fO%WnzXO1bAf?EO75CHB;OX`fL=;FwU$(Z-;M%Cw^)UCbUFyo3XqTBH-}LKd6eGhx=vP-w5eW>9^uO`F=DoH;kX7HI|%4(%>A`o z8{R`x2(v8*3SibRQPrlEGEJ0PQ7#1vgl#m_0M0h8u3ul%%}gJ>|L>aVaWETZdPL@< z%+v@;qTMi4-C&U$1v6O;;o!_kyb+(Xdyk%tzVlCWyz}E?0I`k~Xb$(1O|62j(_mwZ**!bZu=v49DVLa0KzKuA@`CHT1prIKaeSuuAL&55h0S zUXUhf^rLC`f;%*l5+mC{j)FarA~$9<;HgXSsVHU8GzewMr27)YF|y6=p=2?Omd41AbC1fiR_-Y| z^hqG52T_yC8wAGQ)0DUX3~daNBCNEb6p0!~%&;gl7spF-wXFW(il#rpFWKZ ztXyc<0fAvYLueppj8@kNle)S7hri$; z9ANI6TjZ{JPY=81-(quMU1xJjX-7b4LqI?T=S_^RHK@TD^R+S`HRelEotXAQ#Yoz; zka>$z2JcN`|MTwK0k+5)yC7+_Nl;g*b6SAV7bmeZNy-aZRGZ^1br1%QXQ?*gz3 zkygyGZdp|VWW0}i;WbuB7)sP<*9i{!pW1(fbjhtNy(N{o=`RN0qTU}d~1j}jq z13$OMNuOaB%jqtvTOq3xhv~~y)zN-ea5|98t|ycQaTPRqbdYJFbt^Nmw#T>1Va1 z1J%@Tc-L}ba06#Tabj>0_LFD|B4=y6Q!3hmn}}&Vi=qeL5md(znT{rHS})>xb_;xi zyLh;{bcj`GG)%)?{P()c*Z>*z8;;mQx}?W#uviV=m-dEi1#E@8c@RJw{Ou$Q4~#}1 zGtu&gHe$TAcONeu*71VDV;L`h#x2s)E2c-ri=?-V7dhbMc)`s^SebCe%CYjS;)ltb zkfj?GfM5@8=fYwOHn!FEl@aT8Y|7XGpso@}AZm>$htVLp+z?j(FD~v{UGtQ1i`D19 z4Vkz@0dlUv&9!&D`%QGbu{sQHz{UClK9kL99&UuX)p-*f7567V>C?F1$B0FLmieey z^t-p%hBFpF8HaU}^pmq6Mf~JApwM_5M8x>Xqe6n!)Bb{Wi~BBy2Qf-`V`4HS<3|jLpGlkcOQ`6)0F`Xv zO1l@7r1#ZbEW7bM_G_@;DE}Gr$hHIr5eHr(ahpKCi-oI+%py`O%nt*J>UcXOmO1+~ zSsk3=C@PS%(^Haw`dA5Gw3w-ui@sLZxQuRw&Nu>$xZ{#Hs$iB7XSwaL$>tQ?0)S&* zEo_W4Y*Eh$^ckZ69OXp3V-feOoyDzbXL<5J7^}U|aIEygS5f)9U8Uo2_xJAAKJD~G z0!kWOxh90mA9%QHmI+BBq`@`80LbG}?zN2@c2Zn@qmekDN=D#=9BjoJU2}moe3WuI z$gHt!ax2a1YQs$`2tOSGIiALG&KI{;Ecig0owmLbO9Ys&1GF)I`q`UZUFvsc*2>?e zRCVshbQahH*$wVA9i4~GWrH^)}E)~v9~QsHEf$vZsq0F4|uc@4wkrUobnYr5`7 zRqz*{D2RKn(A@2;UEV;lmDyHT6%t;^u2Na~9ez2)!+r_vzs8iq=5`&Gh#ZMAn_bGdF+h$JG85^+!>Diz{O zc0wBwJ58Z)9Tq}ol7xPDK%*Po4Lt4^5&rx=llBLawjXF$9LA{8<*$;ZEqeOo@6ma! zS&84XmsgckPslH?EG!M?my}oFqq?TDFqEIKg@U!AIe?56B%0U1c6G2Q6fE{Gtgaff zFn7U%2t{aZ$ciU!jaFM-8O#qAmU_Egny4>8pG6hD9L@2Ww4_5Tk2mJuBcd4wXizmUt3-qDz7TdDTEHZV)UI;SYA=PsOp9q zJT`&-wzRNRkZCpF-p|^cU|B`5=4$Wk!cef>yQ;dXDiriql^2zTyrsdzFPD^51w-Cy zJUqc$S6ESATpp|mdDjGMii1^SIVw#4>|m&{7&5Aqj4D$|MX(l7E02|L$?6~~gZQYb zYrs=e*R3*3eKX4|ivKtDu})r#=4&~bOO|MJGP4$FS#uXITI|<^Kaceae8kf=?+t~u z5-2e8!yBsht_*rh;aVYR9V#oVilR|?G`cnlSzY4|ekWX5LA*trrs%7xL(zDzzam%} ztO|KG@62`R5`)K^jmKWptn+4<*J7j=m0`Mwy1dsHR)mAK7^flc4dtP-@+$A_U`43V ztEjxos>9yQ+Ep0J*+K8pYVWM-%GHH6K{9~2bhP(|GIWS&drozERfsLIR1&ezYGP>u zVGvawmCff!(uHiG7d;sj+*VV-*W^8+{t7|yY50NfKdjEc`7?38lbam}U z`ZCg^NPm8?tE&U)i9=mo$vDnDjY%>C=}64hIY^&Jx*F+Ek#0e{7wK-K*I_+!6zO@S z9Y|lt!Ydg^cDu2>%s~2Etgn|M&B7Keg!C(<+mQYMo7g=_e}nWG(t}ve@b-~=a9AAhG2uSL2a zJBe*bZ^XuF57IFwz>icr34WxNpMYQ2v}$}WJq78*r@)W&zj4&O7Ab$BvkmEQ@cr5z zq&9p{dkpCWeDU9jbj{zv@6oj1Bb|cupGfnNuK5!7Lz?sz?2oh->29R_;qg(zJ7IsM zcOy*}vy7&tK`mak^@}yz+GN|{M7O@h=1xuq>>~V?HFtFlApx$QY31{FNV^`i=w5LR z!)FHmrtC$Xg!E3H(|f?Yq=Ys4Ms3ERYer5SCd8624}V{QcOy3rnZ1+mw9o1l=lHG- zst6s{0(=8}^I4=O-u@KP0>2I5KLFo9ia*ul-vj&y@aYTTj{*Pgfvzrh6u;f%?*#s* z7y~nqn)R<2)rtBM$?pSx7LH2RN8!UJz5w_i0AC%2zs1CF1pW;0ZzBep_Hn%7B!Or@ z@DDQt>-e(la1?&OiEje_C&2HC!vEC7 zw*Ws2Tf7V5+kpQa@H_}J^>gHyaexm6OvW5?A-orOKjxG_!;d2TAKR$_`^N`-BIc3_ zQS!%_@(X~!1ar&wDE>!G{*AythB@c`sP_HBY+n=b*_ewigl_>}`+ZkeWmNrTX8mpC z$Kj4Ws{ZpPo(}{Zhq>*FDE=WP-V6MsKXrBS*L0Eg_cQT6;K$5ahiyQJY!@`sx8n}EL*bL#jg{YRVjYXN=&=2(9e-e=<5fWP4kZhwoiZ=q>l zF1~&MJnm+T=$|Lh+5mvOz&{531}h$U;-&%jHE`QvaP*5j;MV-5tEKSM;1hog_|?GoG=EU!f3E*n;6E1l zj|Ki?f&W1J9)+uMCGzq<{ZLZkLXzGMBi#np{4SVo4{i4ux089-7#r0h6Hc zT%+;oD--h*TOx6_SNlZDr6aE#)o|lX1WPD!^;cusQ(+a z{adZ*ajqw}gQ_|W_qU7kJcU>6|DPqs^Xg+OEK&Vkr_wuB`mjo$QR&MneN&|$s`L|; zeyP$pk55$5PotC(lb7#%E+BW3K{S zU89l8zLh=XQ}Tuw1TiW7(ymRxr_rO)1QP$>=(e8mvcAtuyrF+ev>3BA4LQ5^W2h+Q z8RIKeQ5fUPX>vqoWPR_L{FCE-g5Z!bK%&VtNk1gPsP7-ilKvTEfb~fKX|h4Tqo1Uo zZuySG$|BqI6|k~B^HjeZ;@ecbFv?b5=C8z`Y^yGYMpS<>i1_hm+h|{cWRi(=Xkk!0 zwc&v3wm0yZcoR%Q`W5)I+w{ko*xfHNak~GDiSBL?xH#VOZ@0Uy28W}V`4MRp?{vEG zjg98uvATU^zfr{KE^b2Ywz#KJa+L66P@lO>dIRnply)QYvypdQnz|8rSEB2z)AMuW z;(pBHm(JezBGuw}u;%(omYi{yvD7I`y5_DW=|7wf?kb_@CM0?#K0d>rX97O(7rS5V+ml@mkvJDIvDw2&;=OS*doO@}68fVQH@i2r(GuQ4pT_z1KOvu( zP=(L9ISJQ+Dp^b9MqdvBREUhKuNPYuH`hTyPLHGA?n4+iq1+!+zvl z*VW7q_xv12bX~)IhG!nMc1>e`if0|+)0y{qUL~)O`GDt#l$ptVj%O(IGnvox%%eWD zS3#8ZA2^C8c1w8b^=cI4N3QVGv4Kz^fV7WH4q5qXDa z1$9_d1v&Mehe?0kt;pZ)X=8pF2lf_EHs#;c0QfeKm+<8eA>ZWrn7k{f!%okissGJ9 z_uuUqPWky`kl*7eC%l0Aw0JV9!^+1%|GH*B13_`_kAdh_N;#u?SA*28uK?Pu6CS?< zAJj(l7NOUp(0d-VaqF9yy%;jw`u)fX+UE?~K7c+0=Avp)`5@!qkZkEfh#kx}|PWMFg1z?S?5>QA`dK@pB*8QluOoA^VH1p7ktZ{pJh z%sL5uhaPL601rq!8ivdix3dC}#CL4}L@D(%sF0Sr1tL>YJMfvBngOn~)J0HvKxQfDGRJoO}mW~O=onVH&w&)KQ(01`+Yj;3!-Z2`>#TAyZ! z7+_26W9QeMX&G32Cib<{;9A-+Koa|jf}Zv`HN039lGC1J;Sy08koE`z#-;X+P}iF_ z0reyf5ryGtlZY8A3K?malV_MHOi6o{h08?2m-Z6txm*+iX`5LXZD+saXvyD@F2hb! z#6JU_UIezU=6V`Q@_I^N;vgt_I_Z|m{7qCLSLS^%Q{we9{~_~vGT)E9%Vhp8!f%xM z?=yds$lK2%-^eoq^OZlW#BMK zuvOCs>|4tQE(gfAS`4SH1=@g07EAb8YF<=`mu)*6Avwzwr#4_at6$2;TJsX$Z6dX8 z-$&XBtmXQf0I+XeHSl+ALLL$Jtp!rfGASo-&_q?4pHgrQF4t`Ntl7R5Msw>A!$1SB zq=4CctTr!kevj0)Js#Ca>2sv?vVr{4);6~kX#3U@Syw>Sr43k2lBhXT>KV+aELKj46M;zQ8%Q?z`>c$Ele|Ov_vM+$Q@sLG|yT z@5cKe1JB^YM9*vBMPyD=>I}S>f|EG_>|1jNO;@eUm$af|2AUm%*#LA-trL!<+r+Zs zO^hEdD`J=Om!b2zFDuka!AXfOU9Bh7QX+c!5U19^YRxMb6RW|d78A_6^#}2(mJ&|p zb+IOJj@O}}SQ9uWmIJJbHGy-|eIyZU0_SAr<(j}bg?YIqa86}jt_hr1GcVT!&TE*L zYXavq=H;5eIh}dACUE+gmumuNCi8Ml;GD_4ToX8Fr$aTlCUDN-!dtEhoB`@7*96Wi z=H;5eId2W}a!ugOW)I6XfpZ~;nOqY%7mb1(xh8O4cMbA#P2gO12WaG)zCK(OM72L!1oF0 z%{4*X!^|41Q@Jb@LEi1m27gkrJMOn25JBFpGb@9<+d~JGLEatDd?IRi3V0FZ-3c!s zn>4`PYXD{`5#-%T%*r6|PQC1B+W{wRQ%1cj{>Xu${r^diS%wKEO3? zm-qx^`#MNS5fSoTX6;+^Qq%hR1bU$&>Vug00i~;$I1F@YK@2zB4zk>lCdrNEzis3}} z+sV=uvQ*LceU^sH(k<{EYSZrof$^-!h^Wt-iZr7_*}?JbV8_<>TSX5i8a@0fnNvvS z*xGSx-v?PtWs5NbYXdkQ#aJwYBVz~Y)MmqKDvtjM%S6WU*dvzr*hntA?dcrGjz#zg z;LphqH-fl0$8gCo9kay%nI)Vp@rNl-UG5Q6GlM60}dF7%%d2LlB=qxZD-=Qo9173pdd2V{9o*!J`qE zWuKt`kc!0f(K%wXpg;X7%Jx6PfPK;d#-x{`McfRO?#H5fOm_VyJ^o&djQ|&=5E@v{4nxOZtkW%E2zUx zH+R#Xn=b}ffX~!EZYMobf5&z=ifLlAnkF`@X=1aQCN`^SVzZhi zHmhl3vzjJ0t7&4hnkF`@X=1aQCN`^SVzZhiHmhl3vzjJ1tGyrXg~~p$4Mb(}tkJ0d zldVhiUz}8`t}Z zg5ICIas6UZNbdg}3zvw(fd1T#>zCR&uD$)a8`p=3!tnmwjq5{2A)`O_(}#(|l>Xd} z>z9dwuRnL=`sJb!=+E7_KH7d53gl?LxEt3q?Bz%tbev0| zTwf~l+>PtGGSA((e!a|dH?HT&Ja^;zGMVRYT)$D~xf|DS68V8Nh;4w!(X!eHWt0L> z11Q|yuEjru{2;~wo0njm;Rbvpl&b#1pmb{S`$;*Dl$R3haX1v^plb*mB7yulmdV}= znuv*vv<^LFzXX&z@)F7i40aEW zX^|g1fa7Wm!5+s>gWZJzVH+#$$sgPD8tkG<@j2!`dYl$_dy%!{@73{oy3<#aLQJCf&FT6Bv+nXbj(NXmRtUP~}6 zuP6ttB5;OeFR-$677-N<)#4vT{-QOsr;lLR(@OciLD^r6KaBj~WKw1l>~Zk-pQe$| z8{x76-(I7Jk_Bi-6P+o&837jPdEPnzjfS*(5Z0X)@2C$Z%yifu=4B#_#+C`FG zn=jcf)@^sXcO@XUmQT@ace@{Cm@OYaNwYP$pAh+p6ExdBZm#YwDW7zuX1mwTh1(@1 zn(cl!S8Q7PZbqDk+^Zl3%~J8wdy3HB956%q$?QZ&O6Gmh%=;qDJE_TT{i#f!VB26aXPV5rqnUS` z%$Gk5?QFZ{X*CS{R$s+Z1As#0HLn>IjRuz3i9)$j2vzXK2B%(H15aKWNXG_{maX? z{aSF#)_fXAdz!5|9Y>UXt50fwCeCP$)c!AV(c1qtE?WD)#Zh|)4oZjP4B)dksb0nK zTQu9}s!*2xB|GU0Aqjpqys#*w+0LpWRc94LpCHkpxZAJs36;eil%X%Xx+QVRBX|l(o>)meD zD=YeeDh6alPl$?OP#UBuQqNL$%~!5vlVm;O4tvqQ8E~p0bJ?9=xukLT+$QVobg`?1 z>j=;LhbqH$gsc72B|GbBYj+Cjf5SzQ;7phoUJAfMQ5~q>2U76OO53p6rp| z2s_|3N%qKZ6*eHP@H=IN+1k)QaXi25>VKuISo~^2R6HJ?CHv&%=!#!)$v~ni-lK}D z;#Z?9-Wy$UbEM)lnske^?*v(~-5jSsXT_qkw>ZBRapHN^xm%sGbDLD>KH!wjg3cD5 z`=FD@7K|(Dm$6yjcTyIeC;el(_`^=4gYKlcA5lfb8TQvURV>gPtmgM%6>A2EHgq(} ztDQSDq^{zpDZ)tCL+p^=oR6x7u9$$N>Z?^TZ^(IS@*O9C8fxFVRQ67dXb1z4h=;YJ z9T+d^uaG$G&K|b`DwDJ2$GDDx_Q7q>5!ykL9XZEGu52 zD$bJ?->fRm(T1j?xwg4Zd$*cKV%W%<=0?{Ph^{Fsx~6&2HO-IIl+AJYm7`>|Pqan+ zj!3l020N-K;9$oij;SEvAc_H6#sE=dz*RB8!59E*$~Jy2x-T-@oO49S>+=p7ub;k6 z4*D*KirDFXT3>U@$_moUShT5PUixei1DrhJLPw@gWv@F_F$W=>Dvx}CQ&fk89eCv^ z*+B6_D$&3avwh*>DC<=AQrs+G!I#-J)v<}wCVv4asaGFbA2Lio(P#` zj?bWv88XXNv3SJ95mM!ouo5pBGVgF0BT|ISdR5FBkv-BU$R>zSBV@j+@FHY-X`9K8 z&dVjG_`MsbZQH-5EySRlEZTyIEKM;*6?5dEoa&H+Qq7iE3q#P$#Gt%J*#UMG!DX7T z1H4QQ(rZN@i$Pk$p)=6&!^>h7+0@@qWS~RFOr^*mRaA-$j#lKNXhklLQRI?nMZ6J3 z{!T?)j?=@WB70yBUbgLjr6OY1a48e0@DQhp1#;-PRn00q=n9)7E#OfVFVKdrq91-{ zpV+OYya7f{pV^J|rf|d0RZ-RSg*c01&j@3mwR4Pex)QejyIs!GsA&+Uf7@~U>Y+Z- zmc!zcZ92r7#6)`BtVuNS_eM>!)Bm7~YJU2os#r~oZK~pcHflVF`(8VTZrc!_sAr4# zWNnuYG}^V-E*Fo=g3YQ}ARDqz$y2qxX4IyQUdyoesC|wS&F>?5*|t}jq90Y%O7vr@ zSRfa7kK1LKTds``aK5_L{_3SZA>%&rNmYfm!-N zz+l$K+(WBm*kAPe1l>I*_2>-xz;Jt=!b~+WUfeY(H&(-yHOjQniz(;4?Giakdh>&JgW#604h%U z4}({%a+0*6H*=^>wVfO!Ija??ZTm$R!OCK&O;vr8H$<4oDCVTkW4o@g@l2T(!McB% zVG(WUaJp-{ZIu$d-W0rsf`z1XQ}9~0Hr>XxL$tI}Z$n9KT$=F72E{wYid?-xzgl(Q^ifm`KHPF zKBIfn?foTZyUF<+ISc5KO>+F?Wr(S`NrsE1<5w4zX||`-*wV)Rn!4ZPS8}GAa!#0X z?oo0i=e-8!g#RID-j04!gJ(?6iK2!)gHGK|yc`F?y6qhLp7dwHi;=GGCbp&6lKZFF zQj;9L2lu|LcOP#5$7+t=GX`e$B^cg$4aI{F*aT7~V-B+q(-IP{MG^RZAip}{nuMtd zS?DRJ!sz(orH?Hk0T|cR1RF4My(A%uS$(G9xWcVC1%N8rvigwFbE%fqXB-IPl>mq) zJV6N%HBms~}xZ9RsAJBusR+Xd@4twiJ9u`RVQjMZigG@5#=3{u(}rt`XD6%RWhveS!mVIXH|+ zV7hK^WqSbN>5-1WmkHAQQzC7bW>4*_T>n z;EB=0qlcMb8Jh0Y#&gWrY+v{8#RLl|oOR#})v@Dh*VPsWSJ#ePJ7rQnzAn;gLxnY= zu}g@?tZ4Une9UN$={865*qKAG%^o&%`gliTsLXDIq$Z%8+GF_qSHd;awYs{teC;?q z9$imXE;$5rcR%C=>{-TOF(&TgH`mZKxQ(U>k$KDgdxkP=Ig* z0y#iom2MG&rG++3=y*wwI^r34;BMPGUB#!n|5?`t-@6ENQ9>d<`b z!`MC@7p|=tS5dxl(v{;%i;7ggj;RgT2FFzJ=ceN(k1MY#st6YcH9@KhvOBs##)&?N zqSVHY3(My?mh;)HvCnfw#}o(I6VV-*pI=*ES{n@Ihm8KK2^WR(=VUGLOF$&YuC10` z35HuLS0gW6Kyc*e1Co!u6CX0GWEoWGd^{SnO!5jP@t|8gO|q)6f_?;Vh^UORxIA{_ z=6Q$5W*^o^U$Cp*J~nNaePkcK8UOZacBkV3e%MF!VWPi+Pg~r)xR%%U`ReOS>+M7O zd?7%gxRdtF`!qMtAXGnT0tIp}kXQ794EvaWmt;YGlx!j9h!BIUV=F)G6H)|tUR=4T zw^@|*)VPySLZ4r!?=T^sG+(>m+66P_H|@};oBys|CVXrsI?JK`N_cHdjQD@wpRAoy z#6G!z3)P1H9hd2;hmE^m9q~5((oK3eTvx9jYp&BbHP_Kz^RLp^+J~k!;jfN=Z@u*v z!OJps{U-d>ju&3jH^0`r4iIT_y;j(GUff;!P46_Xo$p8-tCv0bnqI1x>wnfa|Ij|M z?>hUaG!WSx#UVxOxb*X7>t92cWPcIX-+D@aL4T|HsgICtUaN1#XY)GIPxB}2+r94r zy`Ieaj}`BMPu}{%QTw5zw^#Jl6(080srF=(R$y$l~1tldX28vQL^5E=WH5W-o^*tI&2;ro4I)#u}OIr{3Uj;gV{b~uur zaD16=>7bRlbd$kWN_)@ckOs>*Ny{%uq01`9T)2* zzLUq^*&)iIxVm@hcDz<6sM3Bk>a`gsn+{R*CSUWWH9HnGXEtxn(D9o=r%j*4Px~B3 z7MuP;*r%t}ZOYErq1Tt`!yI*=J9?G)zIgC~x8L4>02KBnemJV;Fy-M3@M$$dLc)$Q2l`(j7k zj^_PM{Cs+J(@cFFa(W*D(E9-5NSLOJSbzqsse{7VG^^aoF#Y^vWBzDXt%UU(rqv3Xz9 z*6eV2=rPrTvU+`M{U&KkX|o5*>Ks44O-9U;ILBIjtm7li>liXt&k#KN=SUpl(fuK`4V9qZfzMt#he&S%l0`O!1bqaquTJ;x7m8bkA&v>Zw7!0a7*}S0upRcx z`oCzO*7tY%F8!e$Wj8v?^BkqnGGUtI3hyNSBZxJP@n`$6 zv}XI2Bt&mmF`p2#dQ}g@-n=>aX6$$8XPyMm!N`IN(VRXBetkrvuhUJK$Y5?^QZ` zCDO5i9U=Y!{p}YV>%7EC|D?+~u=M)I(Mtr_I1ugL*Q_GNlm81LG_W&9lH)r^9DTeH zw~V&+z$D>t{iZ0Pa{TQ=JMQBAaVL;AD)FtFHbKR*9lL~gi{rjai>Nhs;DBGc9ra~+%#eZnE%&{uZ(O*w3a}?hphVK<#N8hn;>Em~- zd137fYj@l@aqC;l9OrFg>9?jqKSA)`r+>d2tZs(@1IyeF#OxQE^~?0-$Ci~HyJ=Zw z{R_VO7v!}|ztJ~;2ZFu$w`1S_A3hltOQoB!m~@JVJa^yH^}HFYifqQ_={~Syt#yTM zzS!DfAz?i81vlzSST`x-j1Ba-GQ0?5T;a+vURN-#W_6{^%*@SNFne4n_Gd+7CXAgp zMQnTLF3k02F7Zwnd*#HjjKCS94ou&lU7 zE8(N?wFilyRNFJ46m%H4%d!}MWX#h ztHu;n6xNoFSzUwE0Qneu3a)|J!itJ9Mb%ZHs={ON$CT7mhpTWnPzpUmWhhH_#aLYf zP5EjJAgZdtS6PWC;*Tj=%{M4e8|o(HkHIS!YSv93KWX%Mw6cW4#sq6>s;W`Q$@1ef zR8c#o5--H4n9fs!^1_NS!L`96**)VYOhJaH5u&52*gIAE>@S$SDxV8nOFz-*vLBd} z9eP7`O|c{?7OxoKnTX|Z2A*UdjpWa)uC6eSF7mS$!DC>6d~ETH|I?Rz<-x!1OZY;J zpL|OP7gykYGC26b8!0$AaS)Whx;z+rCKTOYI7}O-4tHjS@#>i>@y?rt7=y7daEX3F zO%~5o)Qe>Dg^%!SVsMYJx$$ zWg@=<@1ePneB6MZUs6$6TC2^iDO|UtsIVd^8nQ&n;2SGsWwlB|E|ijQ;8+r>$tkQw zJqR)KuRR zTosz21=XvHelrrl#+uEcuy zHX_8@GS~&jc64Q?WSF}a?iO32KSBGj$G5(qw_7{&Q;a4b` zuY(cv(z&G-7&h4}qJ+Eat*?c$2oUdwi3|d^z;yAP^0mQ=r3~#xqtw8)@XPnbp!ur{ zi?7nkLYEaIRMf7zAR}WDV`Z$)(Q#J2fU8H( zUO0c@q8k=!`PCK0Mz63bJfZHfRuRj32)u|MP{wo@(PqsUB*I7*uM}=9gs}DCGdh^I z)+*%t!g`JXJ-^#bu)t*SD-7!%8;Xh$c`6Ibt3ZcvdqFBJZm?VeSx;inOvWz}|B)7j zYY@mP!j%+?%CT7Ox%ydw%*9%MxQgo*8UHw;$|;R#~uURX|9W zQIa$jm{*l>qr>pND?eZOrHtjjE;n;Q{?bLVLo;h@@glXkP#ND#EUH<6wXzH`f?EUz zwIDSeK)l6E37fmvpSje(IDcs%b0MQnbrn_?T6t}LNW2fLs(dBZw31VZU0R)E36E;> z6RQx}lXDg<%3PYCwIqKb8no?-H{jh2&Z^(~3g8T^y_pSA=S%XIq5L z(!i)xesSr$CmV#F)7s)qwZL{Mu}mM+fBT8i1MCr1TT zNl@<+lO__DGccS@#jC)AHFK(K{AxuZ8Kr52YVuudraTzd%tuR*FGZ6`OX~x{wVLQM zd_h%=e8f6Nm6=t=k{71I?#5U+MLKNJ()@+~xmexJQH_m4MZlSh7h@^7bWy&@M9~Uk zMM1I_UZ1%jYj(cG;Fn79V-XqT3}+1zi*jco9&*p8rWetMnZZ(q31#Ocs|$-TzGP>J zFi8X*#L|Zr7K??mszRAHSWIfg<#pw?)oPB9CQub)RObifOY@YUNe{KUr?J3b{nv%d zi&m+(-)V@u`DmObhfdFCHpYe@^QLUelI+X{3yg7SwAShrQcxNAwBA3;VF(haEu_zOrZ^f9lRSR3oV3zYn6~FT|sqiMl7?l?- z&KDucBv~MrnmiwnFyW^{b(4lpt>i3(<4FOPg=_O`xz>kOREHxdSY)XFk&aIJs(Z5V z!pflNT_IO>fq2cRdmG?Q4@&@o671IF(PEiI3mYXjHelKgbkO~3l~@rG$wqhcCK0&#Y&D$77mVu_n(CRp+nftYM1A>mtoOR`_xlEa91v1ZT_R zr-+|mC5atwesOuJn1@6^%vq2*cL}En`mMC4#Yh@nKWTV2_TXWx16N{i6g5$(04C## z8UVs-rkl*f9%P*{8)p_5XV;cym55+aQf?VCVz%MCHm%CY&K3@&ddwJL!BW!zqPh#s z7ozieY@LaLqsa9EgSf1HcCe%nbGR6P;VOh5vjK1)qbe>uj6gVRQFcz|;;bc$7Q&jL zvYH_5RS}5?>RqN%_>!OyESCL7cdNLqA|M@51T^u&-+bu;vEzhOn~K&k-XRPU@kXNq z)YszjwiT@KM5hbdSv(poL14lBf~_~!fp{rz1g&c3f*dQ{9uIhUU@R{@2VY#OXue;- zI7c>a;xW#U4LT!@U~T7W z31@qFeFuLwJnhwZ4}$>WV;lY`$9xZjLOhMshBrhS?{!dM?JzPuwf6(SDaW`yXrrq5 zlMB#)q3Dg9O`b=Y7oTfNIkC@z<5QjpkA41}`0)eav5&`_3i_V(%mmz~rD(#>6T3dIk3>dfdw|uFVQwpy2q0g1GQw6`_yu z=okD*LtIS?Zan?Pkn`UPzEjDGSM&!J+<4pzZo3xOFBH5brrzHxc$FFwwm_AF3v+?gw`sS0j9ti`Z1ADKY~p7VVIVzhUR zf*U`_GT_q{-1za90nb+QV}C_fq~Ni?Mcbg@vA=bDNWo)&K=+D*&lw{1|Uv0R^$97%c_??VNBKP~n>C!>X- zQnj7R&W4m3f_{KzydTDZ=K`LJ{)&B`Xd&P!_-8!z%JB0lMIZZ9*GB~0kQzyMDmiV+ zZ!cA-*DgT+o{}H?0F*ynfc_grAN$0N0Z`Z&YY}ZUZPW$eeCD248>p>T^NYbV1N5|m zrs4^@TU>m8U{CUIx&XXVz>~BGlYD}oPv+$HDB#KXS=8Mz^)@N`*k9xCQSjKO>bxc3 zQl|CuxT25!dEDO>JoZ`Gd^B6CJy|o>DTb_Jgc}7*I$6MzwAd$yEL8B=AIROJ;IYq| z4J&x;<1Zdi@YtWry`bQ+&kH)J;IY3;{+)uy{#Kli)u#W)KIMG4g2(>YZjyq>KC^qJ zg2(=-uF{~NG7Ty$Y^l zfkFLapQLj+;MB7z#?BJ}r<{#S&M+m1&z7T{*cS#YRPfkm-19fUJ;i~06#XkReL`}v zlK+T;$3E-hrx%d(2H@1QKAfJ>RyPd$rK03eub?!Om&cp>TWX|jV&N=to$IN`+H@VU8X$n)4{%}U@5dL>Da6Al# z&{Xgx8yXC#-~m()H|)4g_>)NMbj_aI-t9HODmU?^d*JH(hY(si{oU5E)y!Y5R4Su` zpjvm^u1<_F+zD{%WLso-aLxTr=LnFX1pc!lhJW^R%YG&6&D+{!b zpq7a0pk)kqcq#oS`+sSO=K&Kso=>otyQYPRR1@cxUY}cCbc?qZoXgz8JGbUmSLSgY z!dBoGm$h|y0Rr!hn`<=)pleG@Z!AKYn}cfPM(U<)1LDCShTbMyQuW5omD;?U&ZqNN z`~i<#AN_su`R$bhdH;m{bg(uxHpO-cYeBo~qi0^0UP}ZqEgiI+-a$Nt!Emp;+39k@X<6oJ{p~ZN!izZ5U5Z(c z=GqeyJ6Is*_&q2*xc{L}B1bXSVCfo+(71sR=9(B@!&h^o>a^nCzt%S5^^$4 z+)P<;L)U|z+o^Y(&_c*Z6S!4*B&?Ns6Vu7zNQwFZUOwFsu@f29e(#5{_;MIJV#nJS6hL*eLDzXzyAyEX2#(=FtcZQ z^QemHd22^M0h96E zmjodng#}@GbX@PWH!&&%dwR)v0Pc*uit3Jc=8osj+++vNahhj2`RK`bls8+A{cUtw z@8aFcim>SREMIRl_F4y4Vxdt%SX!%AxP9UHf9cbJ6J-FJnzz%5s-~P|`2SAPru2fZ zdlotRPG|VDi7HB2cBU0mTq<7t_av>lhBU;VPgJ?(d<@=r4-Uf10{%k$qcX#W$>@HYIJ;?I)tQ@nPY)sZ1h!0;D} zzfk-)k4PkqOIaJ=^ous?DAe#LSE?vwcwRau{<-KqJt>KQrMZUNT@*t6`ec=x*A;&e1|$E3mM#4X z0WA(T8_!ZZj(?zyLJWVuS49a= zS9Y9~jk z;%SX(v$B-3>^b16&i3E<*gG2%F-toaY*Rs=vd`=Im89PA^sjuv&APL6M)6?`<$u_a z8oU2WseJv_#^C!6K|J-MAtkkOtyX*oRw~j@K9hXcZhYF5;@=xH{$EOjeqakf2EU{D zbp75s6~GlTxCEPxZz(+*!SX>^w(-4`j>Agi)ANb2$t{8r4;244UEJ8N;;)83JAdr` kkM3`F?jY;8*`Fl)8+h7qOXmv3awPtl`-1u?0VKujUknJ$>i_@% literal 0 HcmV?d00001