From 9fd3d6ce27b2dd8147144d26a72b7fa5efb856b1 Mon Sep 17 00:00:00 2001 From: Rafael Andrei Vinasco Soler <vinascor@jupyterMiLAB> Date: Fri, 19 Feb 2021 12:41:59 -0500 Subject: [PATCH] sincronizar readme --- README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ gauss.png | Bin 0 -> 12882 bytes 2 files changed, 56 insertions(+) create mode 100644 gauss.png diff --git a/README.md b/README.md index 4faac69..3bf36c7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,61 @@ # Ejercicios para practicar numpy y optimización con scipy +**NUEVO PLAZO DE ENTREGA: Feb/18 a la media noche COL/PER/ECU - 1:00 a.m del 19/02 VEN** + + +# ADICIONES - FEB/17 + +## Para quienes tengan dificultad en comprender el ajuste sobre la región 2D + +Pueden empezar resolviendo un problema más sencillo, de nuevo en 1 dimensión +asà como en el ejemplo de la clase. En este caso, después de recortar el cuadradito +de una estrella, vamos a tomar solo los pixeles de la lÃnea que pasa por la mitad +de la estrella, es decir tenemos un vector de valores de intensidad luminosa. +Si los grafican, deben obtener algo similar a esto: + + +La idea entonces es ajustar una función gaussiana común y corriente, agregando una +constante aditiva. Cuando dominen este problema (y escriban su solución para entregar) +pueden retomar el problema original a ver si lo entienden mejor. + +La diferencia será +que ya no tendrán una función de una variable, si no de dos. Es decir: + +* En el problema +simplificado tenemos $y=y(x)$. 'x' es nuestra variable independiente y representa las +distintas posiciones a lo largo de la linea 1D, mientras 'y', que representa las +intensidades luminosas en cada posición, es nuestra variable dependiente, los datos +a los cuales deseamos ajustar el modelo + +* En el problema planteado originalmente se desea ajustar una función de 2 variables: +$z=z(x,y)$. 'x','y' son las variables independientes, y juntas representan todas las +posiciones sobre el cuadrito 2D del recorte de la estrella; deberán usar meshgrid +para obtener todas las combinaciones (fila, columna) de los pixeles en la imagen. +Por su parte, 'z', que es la variable dependiente, es el brillo de cada pixel, y +corresponde a los valores que vienen almacenados en la propia imagen. Esos valores +de 'z' son nuestros datos, a los cuales queremos ajustar el modelo de gaussiana 2D, +algo del estilo: zmodel = gauss2D(x,y) + +Una vez logren ajustar una de esas gausianas 1D, la idea es repetir en varias estrellas +y sacar una estadÃstica sobre el ancho de ellas. + + +## Para quienes ya dominaron el ejercicio inicial + +Olvidé comentar sobre la incertidumbre, que obviamente existe siempre que tomamos +cualquier medida. En el caso de las imágenes, el conteo de fotones es un proceso que +sigue la estadÃstica de Poisson, y si el flujo luminoso es grande (llegan muchos fotones) +esto acaba derivando en una estadÃstica gaussiana. En ese caso podemos modelar la +incertidumbre como la raÃz cuadrada del flujo observado. + +Como ejercicio final, repita los ajustes realizados inicialmente, esta vez teniendo +en cuenta la incertidumbre de los datos, para ver si surge algún cambio en los resultados. +Encuentre una forma de programar sus rutinas de modo que sean fácilmente reutilizables; +con una buena implementación, este nuevo ajuste debe ser cuestión de un par de minutos +con pocos o ningún paso manual. + + + ## Resolución espacial En observaciones astronómicas e imágenes en general, llamamos resolución espacial diff --git a/gauss.png b/gauss.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5badc0d2c12058c935a89f0ba34151265de013 GIT binary patch literal 12882 zcmZ{LbySr>zwQR<Mv#_fBi#a0f(X(L(y@_Hx*LQIsB|M8f^@euQqtWW($XDw^gCyr zd)K<hwftkx`|g?9GrxSEhtJB2(%2Ye7!U{qTjq_VDg=V?3H%R2Lj)rSEFTdd5N=W# zNpW?z*}YVEJwo%Ei*z$Xay&f<zPg@&)+a<Vt~OHblu#O4*nC#F?P)lzn=>@LH!)A1 zh;i{5LU$t9=fym&3KClT&;C&)6tB_9kRRKJNNu1<A|*X-SQ^UdN>g;!a8^52?fY|c zgqvSrllQ&A$9d3w&@nt!Dw_rZp{BRuM1nxj2q2J`i4X`L6aw+%M1WAsgAE!ZLVB=; z+|z0b3qQ!og-B(Wmm9~Mxw^XY^YhPBK~7QPWGAMld+OwhHCYHT%*}u2=0fk9Fx;VU zXQ!vBD+wWm*~-tx-}ABN`ete{*o5R46v!59&P`8WUSB)-X7)x9-V?8CtznP}N6(pz zdOs$mR3Vkv#(&3ezx?Nq657$l1^;CrR7~~K@RMPf<Mu$*{1CPO5(Kh>toy(1*~rW^ z$!PoFz`)S(&%uFB0f%0tnZm1A0jl}D6H(9yiIfndA)TP#CYPkK=KeXoC%@<&e+fKI z33)ddc=M*t0Rs664gtai?Q=U5AWp#<?1cZO9jjn`go@MXc~R2R@{lUzn$ZG5+b4yy zphEB{R`H-=Qk6b;9)S{3DJlJKezG~UjqWFjT(J3t1#d5}tnBQIKT8p+c92hm_&*bq zl9P$q_1q4Z#cLkD|L|dLbyZeQj!`k?^7dq?wyG*cz}}?IANlI)ipuNoqeN!wI}}K} zsqDdG)6MCaQbK&ZV!G(vbU7@vn^m`_sH%#WhlhucFK%{pa<ay5rCr4HTvAf9=xsS- z0x6`<0h(P=!OhKGQB`%ClVC7g4ntkz>g?=H_deHFRgKn+L!$`~5BEIZJ32X;tFwoB zdJ3`g00W5OvKY?r^YbezDw;Cz4BJoizB$L2&@9$@J$JCT*Jw3Uk(89g(Q^A3EP@u( zYv<s=%*v`)@4(Q_6&M&;Qc@Dbs5H6sgq&OsP0(=@>))JeCg$eU7%pc!6UH4uGqbZh zf5^B@kengl;i|;^*QKXVpN55nd0(Fz&+l$*<S0KoSZWzMKPo6F`1lBw?3V3ALt7J~ zAD7jB*RrvOhDP+0TvS|2Jc((YO<-wt4Gj)xF*?P~;D*|kMu&&}eqclBEG;ZJH_M|d zI!&=C+~vD?59#1<%)Ch<L@)EzRT&hpbmT)t+;XVpV+p>i=1*f~0o%2;wXKP`xxO|j zrhw#j_6(y|Ylcr);GN-3&&~b#@k0$KRn*zpnJlcUyBqZa1MK`X#4R8ofQ5zSM?=G@ ztA4#h;0wsVQ+fTB`<<+#BM+=X)xdy~hW^D1vj2>0ml+|@(9_Wc)HLPfY%I7gogE#? zym|AVi&mkfrHzh`c5ra0sHmtSpPQW};xN$D(5SW?gQB9M>X|`)1`>`U-ycQz&NsUA zu(9p8etbm0sAy$rDd=;1Igrdx%wf>zb>*N3gBWpXBiP#h8T+o(a(}(c9QS^zM4!s{ zw!F0TPqX)paws|^%0FqT2Zs34ZixE5&m+k4FA$92=>NR_UpQz7Vc~B$_&fIB;oxtG zfPe>oLxkVw@|creN8U!s7&(XsuJnl<6My3#0|hq6$ogZy#f~3WIYoh=vsW0B^bm(V z1(FOM_!}iN1qi=9`n%*mKX&IKL4^1Xmv!Jl3YGI!^=)l%T<l3VH-kpN%0}-ft7?aS z*sZuJV4uOfmYPw!!cHV^#2{KYZ=>9a+1Hm^O7FNzbIoS!9kn!=L$Sc73f=9xKfG^n z+Vr1*$3Ex9;&}Gv8FRr0+ipArG=ehTspRAtmyM+sv5R(OEPU|39M5=XptV+llw)Hq zis;jSBl81n&9;WR=ac(W(+bQW2)61`knr0iMc~dY8o9(^fHUAEHo(C#lzOev^%Kq# zSMy@d`pK8eX78v;Bx?EA_gIdOedz-BI!n#7Y-3(tIHBahQ3!9!kS6(4OA6GdA`x+@ z<zHIl5@gd`P8C@+#9&#WZ|{V^6mJ2ioESt|9GYFMo%xZ06&$`tNEFMOQ(Q=mSs+SW z@YOqY!Y(3k{7M$g*&Hmq8(+?knTrb7E+wofp<XZ01GEK=3~<A1xD~~kl5_PQ*3}u< zdOF~o2(1J)arQde#(HBPu)qL_TuRfLU6$`QJch8TbOTMmZ@U$ED-Su8^nFLc*5qjc zhS!bTO`-)X+$<69UwFAG=<04~i+b~FXU4KT+~2Xs+lVmI(go=0mGJS;;g5b6hL(Q} zO7MEwAy+ApY=f!Ayo8ONy1emPXs@---f^Zf{>2Or=f^|w4mkrKRx*Pmf?20I*RZf% z7M8P<h`c~1#)87Nq4cST$4K?BvB?b1v3MJK`Qw-;KKUaC?Q?NiZ7NBqM3pE>BiBd0 zVHz^WYqK>X!h&LKy(%1oQ`e@5H$XTsQ3#Mv#mf=Ejcva6Z5ZgerGqyh=m{E0Ehizo zm49j1%J&ElO0CSgoHQc)OB{&?{9Z!*7z<Qg89~CB0B}muk{+c`!J_k{qkj?|PF3U; z_oy$iS&?9!0*hn`%IdsX85vcXnIYQ{-m^eX1fy7ISeXfhZ5ZrP=Q_AMyEZ!fc{lKB zckd^riF~UbG}<OIS(?^OiBFOE-wKDABmwh{1Z`(rxiu8gf?x-?h&46Osv6`Pt6v$e zS)rk;F;{kUFfHM^%Y)nBqNHFed{a9Yo&UJal8m@8#vLN#&x!Cdn65`bM(PhiTmF{D zWS&Y{1X!FT5Itc2I#KvF0UFUaOo*CE8Jnyvr|}mkuxWSW-1m%K-z_u?)Vm7`qt3Cl zaQu8>U<@T&>+sBo3&F_G*v4k;=8VVq?QG)K6EBgs@~RMQj@R%uLWKi)WULGgaIvBp zD>-$`iX*&TQ;&#HusPhX$}QZOnCr5&%m&mUw=X;T(trs>BeC%?oM6#jV$*NzW^#n^ zzHER*hLoa$ExyIB>W_ukZTwG_A&Cl(DK@btodN7}n5E2*s5S19KToX5P-@?lb^$aG zxvEOySzZWY2zpPS@+fU2_$<cpt0P;Z_`akZ-|Q(Xl=@v=@~Tb~G5h`yOF`*W!Q-8* zmx+F+A_51wb(8upKO7G2DkM7qn?MZAW-39K^FG<!oz;QiR5oa%o{EQ}9|nVAXX4?C z*Ud;4lORfPa#1MQ7k^-}mu|kdp2X)Km^FLq$AT)4TRi&4YN`2(fKlf{g`Y&{x>kEi zge5rS8D>a+ef`z%bYDtgH%=5S9JI1gG~M+NvB|nu*#fS0s#i7^TSy!ndg3zZYOh~+ zUZ3q^Vqom-?vmne?d-HK|3VelATti}+K^B5D_K<~$~`_l?xyl>%*lE8E0(Fcx;lYf zU#H4q1QZ_4cjt4txw)~iu^AcEp{!*@^LOghGFg5~p_XI03f9)v=0j;B?#Jsz+LeSD zod*j)PL7X#ZjZXPE6q}c-5q+P8A!ChQul8>%`0b-4%xoFI{Ezh^ICTVBOIjA_q8l> zzi>q_sd;&MMMUlf_?Lbz%aYTS&b|)Q7sMEQxc~Ej^YlgRb<2+*LK7lic3juj*H6dQ zls4AaKS?AGA6D>l)-*j)mwP-uUHyW{+HHG#JKw{!0Tl@ePohNs2N5NuqP4w)!|K%P z;Bm&vJ6mCaswQNVa*K{WE?5^K5s~Uc`mo5D{pF!?G3OIvVoy)c5R>uY!)SgBPt4Gd zuE74<Py2a>zUAho3A-OpwcJ-nL?~HV?Zva{ws&-NM^Lr6{#o?*_jf<p{A@Dr<?TIk z7)|x>yL9vte2u1jWNx<=407?p=hHBLoB0f%`5NowurLJ^lU0yK4ZV(DgLH{a{(L$5 z4f%W7Ma|4%8~pYHeQMInxAKaLiob`_UENP@y!Ohw+4btmoOdV5`E8JpkcxC`aV(b{ zmj8x1XR{4X23+}160o1qwA*b9{7*@6bJsr#riqJ|=y`ZtZ;ySSId8t&Os4X=r0LR! zf<%$LSW2aio=7CxUS+@5<?oMJ(*!m*U1v`xMFeRjAJZaMW{#WBS9{r*VNHP-&&kKj zE9`Zte6!XOjBC5ptRR$|ot>SPWwO-ltv<;R`M3)C*@%HbzPR|BuyBTQYf^ia^<2&A zsndRht!szdx8mac8tXaEipK#pkesrTlClz<r;&bfflN?n&~=1Vwv3XJ@9Jm9D&4AQ zgcz=_7j<=YD%n!TrVN{H<r70h%Z~-A>5M%p$afyV^{RbW^xlZm;`HMFm`#om--F=j zm$cN%`3jqjR~(hz=xK-yad?jF%jm5s__vP?4iF-OGQ_H+NS!iC9JEf8te$~^oFx1$ z_V+4<69WSS6B82@q=_#>Ej~yXSXfN^oNV$hs5!i)MMa{QFD@?TG3&qFDJ*>^qx$T= zX?bvQvDx?GUR1tRlNuo}DYEkJ_V28Nai06tQ;KQAU*qFlb|=~1+b9-mF4a4lUmPqv zLcx05;AClOnIEVG11SuHC^{y_{_8-dGFSutj%#CcQ%X`&Svz)imC?t?CxnPCiPKoZ z)O7uDrQ>hOESDx_Zq7(U&&9>X${Je3LQjtbO1f>#vFZ;~zy_u6mWppuXJ%$B%`bcn z`QDG`ef##UsE8F4Q%zbLRYS+|XtlF057ILd=V)gKYUZr_rCM7<iJl0t`@98m5|X!? znr16w8KBtmL8}y^WX(;(2ZJgq;&;B|c`9UKx!=Cg3kW36I{Y4d8mQQ*fkuGGEpZTz z8j^1=pZbE2gQGO}MkfdkM?yxnUTmzdu8uoC7QNZy=?iwIme1v*Sci#ox^#D>Qp<)g z@$otT9!w=AB`s|_C!<-9(=yPmFzx+>PbU>lp{=eyK0a=Gr5P2=xzOzG2_gz8xNU4~ zR8&-=qN3*0S1sJ~Lnx9AN3l@ZVv$wG7TJ5b<+sAkaRid|M$<$IFvlWkUV%tK`1Gm5 zU7g#}D(Dup486e)hbAV@_G_2Y_&&sIz&}r>GSJeR{8?<GlL|GuA(ZZr(_bIHjW!do z=q=1Ab=gthrwdRwNgJH1t`40Wd0NVUXyY)WYfKCO+1a^$e<{Ha4938~;QahNo(hwZ z@%y{Jc#(^FM_6}wb!{yNSgogL8l13`(`oIJkC4SMwV7Ca(@G9|w5?CC%7moCo8s_f z)~~dTRz$SO@%Lva;m`!$kk7D*;@BVGtftFoL_|ac1+QY1L^Jm#5(xFfHMAZ!Z?7oP zwB<vmvA@8xXuJ4&YcM)_si<NTDj>OkqG^c?e6BXc15iLj+#*6oxyIVh{78LH%NQHj z^Ogxg?g7akLCdBml18{$JyTh)#b@FAx0!iDWaMFl?`?Kbkvuv6qid3)_q1F}!Nms) zC0wvH^P}sJWpK;k3~?(N84%p9ZEY`(jy`|+GHSsKIypW*K6Z9?wOo1p!EJX>PXdYA z*;%`s`poKyy9>zdoY>yh)^*NzIv26<0ST`PC8}bXKr>E%B52JH!|r6UkmF|mWU;QA zni|L)=rsEJ`r6vszV|2T-C^Vx*Sn>d>!%=YOTB}y$~tBjzn7T6%DAmIA||FnMcqC_ zn5xCA_7Cxr%gopo{H~Z<QC>b%4hz070Zj;K@KZ#+bztJ`hRuzjEd~AHXiY*~oS=XJ z91h>|g(vYHUR+E;=<=+rgs)GA;=;nB1+!7Dt&e^WMsYM}+;^r6U1St1WRLtz7c%#} zEOYs>ztRC7uAp$D0tg^oyB_485MmD1F0?SvZ${Bc2L%RhE5W};fDZWf{-WjL;$o<; z&lAMzys#zT2XD|(y?*`L#^xZDl*fXqt%!meK3pKHQJ_wjsE35!FM)w~U>>PNIrf#u z+-xwVx2|t;@;Ug&$k-ii{?~-%64*f)wceX92MM#St*zE(;Tm-8b8~Y%+}x)c=n#y8 zgVb~Bnhb$sHe_O$$v3d8p={1fQP9zr-=5xrV+O6h%igs8X8+gu`T6_18{k)-pdAM0 z+R29^)lNhx-JBx;&o^xGX>eAwm~U_nDF`$%e%#RZ1i5hq?F-C~6)PR7uQ!H~O3>k3 zbF+c3mWIZ}N=Gnq92W%3|GlJ+#eh+yEfX|^iGg7wJ3=%`%-6@or6zf>?^}Mp<w|=X zHa0ekW>IU;7sUSXv5XvrR?WvToxn*`L8v_48i|aI1QiAmF>yj{?B0Am4?X?*dT$Ji zR!NGmJGYc3VFnpKokcZ>9-r}|qoPK>E2Z-<y3sK(1kPrSSWrBD%I_3l{3HZ5_`T#c z%s<5zACo|X%4T~sM^I1@+<*v;>3UBTkNM!~$w^1z7v%o%j>5PMPJ9WFr|}gZb9D8G z_jUUloxWFj_^FeavDcd;mmqq3_zEj$E5oeY+L_35j+yYt`$m=QG^0r*GtWX&yv=qn zoytHtQdwPnYLVT#RI|3uf3mRCn^x2KS8wmt-5=kGOhP(}%C(9wA&zd<buvGH|3WD5 zcrL_VTPNVq%wWNVP@XL&#LkcDKUaths%=aOI|H_Vm0rYGKGG609`4`dpB1z4p#^0z zBuZ)7D>=MLdgoC7U`;D6C=pUI-j{q7wHiC#7GCcTIp%6^YHGi0dl<h71z&hj!l;GA zO!7QM5gE^l(J!LK0gfxQvBJ{k>n?KJpWWRL-M+WoYDyySV04o&pMcPZ&Rfsh+fNpZ zOvCR=(&y^dI&vHRV}*gr*yHYO3M4O2a6`aU05EjdVpD|@`|0rPEY8kSzeu3XNatyI zB$|d!!i2^0Q6I20Ef5v;^irau0V))qmL_W26G_TrMj`6;w%yzNHL8OnXX0vL3-NP+ z81(n|dtMxXcqM#yI_B=~4y^m*$B)U+ttA3|Y5e9XV%+T1(M7OwE#TXRB^jyupjK)N zKrJjNsIgr-*x5+}vjZ&a=g*&X(&4Rs73@6&D`EGlZLU%gT}C=sW9wYbE-plbgcKqk zr?b@`{sAYyd!p!qaj9_7&@TH7?<<_PRk5lxTKmatPk%4RC&U?ZzJ_t>H+#7cB=Ozf z-}m<Rc85Pr27Uyb92B${YY}2L(`A{Jl_$8qmmL6U;~dsRIwNs+v$N_%;Y{==%Duk6 zc3pI51W*bqD=QscM_1QoC$V9p{hAc;|I_WUCm5Z7>pl04I8eX|gN#AteL9k__MLOG z{d1zxvpUd0sx&y9Y!2M~_3#E=X0faFn7#xKC0W^uO4ubcDrzu@1>Tn{!2roieBsO- zH1`Fcz?6*~cXL_NlIxwhxzLLjC3^K0Sy`*&`D&HsLuTp>7|g*1#l_e#w!Ba18hYr@ z3F#682y!~BK1`K>dR0(Jh}^L(B%}`%h>spU;+mWcOWd-_q=hP_2%aeDKec)$<<X#y z7viZ9B9X>(tv;FG($YeqTJoQq<Sz9=yBLNqe{$6Ji-WAIzpYK-c{k4|5BcM;#Jn@B zXO~XAp<e@D*@`+sjH5-b@d=)D?*1H7kRpDBMzH*d4LJq7|HT<0JrTe)eDeqo^)oZA zP>m*gGv56a@c#T0k>}%R1NSOAfX4LSUUj0lTImMyeKO`kAjqb&s-U6Q%P$K3e8tU- zK_C-K5^4?0;bnym!%*SzdavY$K6lR7WFqjst$WOpLnEJ2i-VSyMQQA{B0EkU#DeOv z>u2=2F^akd+ZYk*@-k9y%(Kh_ryYrP#m~sj1H)uaQ+$#On*Y2J{>VfEFK!nbbQMgb z-)0XV_wqqe%dLIhR;}bX-M-y^-WY2hU`x&G1^}iR0;U9!kB<-~ud!$&&~eZp?I&jc zJ6Iga4)J3W4-iBnIIyCo9yY>hhYOLT;dGI`-J<!0`!f;lV@?h;=6ZezA*yjyd4x$6 zWBSKxf$e%D$JiL1Xf5Or@vZ#h`bvcl#-R8mdy5C1pE-Prg!<)BBGJyAV0`FF_@ff+ z!%VbNbn#G`m#29R<X)(|J0qPzLHqo+K5AOh)|rT2&)PAKqp3xhIR;e3h`%at20UNM zc%4k~Z$3+t+tgxP<9!m57nylzCr<w!b}kb#`*HS8waY$ZmIzPR77_5)l_91_1vj|R zz8Zy&?D5n26#*vN;a80QUosEnZNjPfB)>|8x)@QZ)u@PK5a=flAA`B1eA~rCxOx$| z`^P~H5`9y&!f>sp1DS=ts!Gs$uRJV(iwi^14l48ltyBUPOMOtnmZPPOn=4j=IT9W= zhi4EknZf9BT$PxrJ;OQ|`WM*5M2n!Wf$z;oPtW$<^$IDxlOEY(<V*hIB8EhBL2;bY zp@b7P;xvyf$}4Iq@IbA)`a5O*<6l^41VzVzoH8kE6BAVph;Te?wL?T01ClFwp_e;E zOYtWq1%HnO(Rk<19kZb}+ebL(=jnholr~Ip{i4O9<2YkPLOnr*uh+uD0&Ezm4|Hxc z@V@u$+&<i_8W<rmZ*xW0J`87|Ua;8OX7R8DF9%L=8Kc{|Ltly~BAM@8j0XtelakJ* zq6IvD*M1@Cb~$xy1$?C<H{Z7ZLuB?iO7$xJxrzs+Y%KaPUameXCGndybmdQ6=!4_@ z$8YMavN++MzUAv*A;=-UFGwE9Oodc;+Yo5T+oAPux%CjyjVo}vv=EJi9v9HlzN)Kq zHSF`;;M5ar{mo}#O3BF`lw*#zOQtQg8S<ZgFkQa=Q(0nB&{3&4X)`B-En0Sm5Gz!? z<B05Alia(r_SgWLej#gBoKAORE_D1xxxZg09$Jlh&Xi96sNK}ylC3e;7+Z6jw0)Lk zFb{e=3f*vowZ`#ePsIF#u$K9M58?hdFv_pmCtuf(@%E_{-%1o2d*R<1M&?EmakDUE ze#)Ck@yQIcRDR&JR@LN3f%lqTq}vEr@N@8w8^t}I3e&_6(59|v;KGA(f9x|WKtn`s z;FS5C*_9u}mA{fz$0e^ZfCJ2A?l5}fT^|Ks0r;YmaWoc%2)FY#@4*bwaah}B&|;If z5CHrV7x^1alTS6A3`rI__!pSWbtM|m>X#P7oe-iV)Cj`)iPkFh#}-Q_m}tJwayMr( zX00&bdMq7Acf8xZ>l>JBqp5DBn2|RL&V}Z0Y*^W{&Q_*ssqyTM=g)@Y%wkiwUO%_8 z-Lel4w{V+zBtLOjp_)UcqTE_00u5?#_Be5nd&WH45)d^&@3J#H_nVtRreZ-(2Wt_c zxu@BhoytgNpu_9`(s9PEWqw^-StAG~_WV6rO3PXuLQxvN%`xe#Z<wcVIV}2O`>Rf= zX5>eud^fVAPFzFz{U&}qNo-64NEOW3lj$oH<!3AC+a;+*hzRqTm8juR6;BWz6gGk@ zuPEfoE+m}N&;^Z<rcIU!vKv||Ux0Mc57^&$K=E0}nlo2^ol&o5-!Q8YsLl=#XTP=+ zwow}oj(IX(Dbm>&a#U{m10j^FWX4N`PRmKB87!G=@Y<`tp`H9}W&H}{Hn&94S4jGO zo%mW($5gfhv4D-)hrkJAt~2IUSo@PjD-MS7;0~5yqX|2yH62gsa&L2S>*BU2sgoFm z9VV-!N10sTt9X4^C4Fok#|AzUIqt(En_9%dX(%tS;Na*|VtU)GK%P=zGKj$nO~a=m zTjJwA^oi*y;}Kc*K|W4)og$m6658482wprtzh1hMbTxO!!LI_Z!}HDY(|;u<+U2PF zjyIsK{2tC^rQq!1;1NY@b(5ZOaS}e*mbp<3pta~sc~a*f0!vKRz5n@nY%rDOoz6xd z=;egy3b%dmEdyqb_vCRyFZw*x5xu&%MjYkjNO67ar^_z%^(>ZpQ@u>V1ZV{5H=8fr z1lB5`UHs^}Jf6()a7o#hp3bD{q~EEKKC!YEc~)&{J%o=w{9UqGf&~wH{}DpBL~k{) zSFKk0=3A`bt(h1J-B`7Jf$6I^B<9sv-fg2AGKK3!)Lo{FFa4T3N~z=|Xmk2k_-~G! zt&5|Uma<Kax?<(}eiyyzHrd(Qa{JSCA$qwS0J6U&Z_@JeGJvI6^&7?)7Z;;HLXyO7 z?0N;B{GB32q%KXdw-Ol@%S4{L?Bxqd8OcN)9Uai4xZhqL4G#}ro&07Y`~pxffC+-W zVo2;^9+XV-EmKA}oB?uO)#daEnh%IXe%*Vhx^}IanTJ)Cp3^hE@z&<b#~uaIo4QX} z@wE;(e6RYB*18`~zl-TNy4l~H?}JWo$@^j<iSI)=mDv3+meRK))KlqE6HQ?rYQ%_d z0@4P3?2u4%uPzCtr5#P@EEyt#Wy#i##1nnQ0a~D`IeB@sw&Zo9K%VTI8Wk2c;Cnaa z8yFmHZfdHorKQ_NZ7wfu($_D^ihkIWXF3+H59{(GeZn_A5%;S`h>X--n7cwcdWtTN z*HyEO5Y8kd^rNy8&|L~gavhSH%HMKwoSmFZ&CPYerp(MJ!$Ls`GIIaBFYj5A5Q50S z-x(QiPDjEx<^N1^lo+<8L8Hj?qltPj;{7?F5D`6=SY2H`b?xlxdMq)RA_#L1&=V^C z_`2Q?Wq+dcu4^YMuoKokl^9Xh6x8B#*s2br4P3sMDAWRo04f$qMoZt&(9pud-OfZ| zJXcRtIFcLeb}#ryCPJ9`H^~Wp&D7y2XkLm7xO*QvF*(Tq7TeXqp~2_w#oA(P>&q}H z$D4EOg)sGCl<;$f29lZE=;9k>N<pLei*k(<ISV!~r-9mK0!DRIT(Vn~0`C|AM+mze z8eJZ)Sb4_DG9;VX^EQrm_G~8P?V`XfjkjMZoTxRa3sxM4{y{Iwk;|@EReR;eS09_i zN%|b~Nq?MqXjNjUmCwx095SS`rSoevPyR#;%dcNmbKgBYS<tR_R2=G?uaugCmVP*Y z*xu+nU0PXP-QV3cg~38Qk+j0w;&wrQ1Nn)ZjoFp>HJ@5C+YvJHL2c>Vs?FuEkEi4Y z9-f{LfSslYUo123u#-m2NS`h~YdO_=c<<xhdX$vJIG8drN%!6A*~!4w8ybCT0f9@< zw*oV{{sAg_K)(711lX$~+BLbxF%E4x$qbvRCt0F55W+11{tb_8Y!trJAMe`QvY3yB zVD0Niaa5;aJ8R_Zs638ugj<3Oba8R{`t@s-+gGXV-v0io+S+s;a~vC4$h4--EHhzM z)^e35vK4ox{wwq2Dq|+Jn9@?)_wRQAD)hr;U&lJduvqf}FsiI<Y<EKsw?jUx*!7S| z@=zB3Gp&dFUvr)XiiQ5&+Sf&irGo{8W*d1Gj6=dF{htXKC0@OPnV9gBDTs@U1BdbQ z5{AtX^#4K-eD!W_#<{j|OhGN{-OBd;o8-Z<!Lg%z^15{K&u9c1&ujn}tDaf+;P^cl zM;{<>74P~;FgvwhCiZI;pg{Uy$AQ=m_)r2ISq||>a@5vpee|We+rPQKMilGTKIi3q z7AFgv{AG#%#$GihCFCbN_Fzr|iQcqPf#b(cr|zmC4O<7}&JXmfPIl}fBE$!DBMhBC z-<B70L!uGdO-+Vd0Xa)IMiNu-110a*mTU&f_h~2n4+j&kq+YCa-RwXkloM~Y<hJ$t z?I*c~i93ceq~euDFs-bt>Tq}e{FX+u-<nJCIzm3<xSy{Fpv|@P_05f%GY&7=KtN5+ zrQ`2u(JW7TR4GccPL7|YUG=A%Zw}1yDjoWj)$YY=tMMgfoeR21cshf=*h4^7f@vj! zj9r5@?*GO9WqYEKFG>4P;jQ_*1i^-Hh}5X&?ekY1iE*%2qZu;!as&YaLa41Xy0J-M zwiWiZ$0Gp(GwXjJi~s9m=$t~DSSSer&%=)5$yT=oN9lM*hCL-^SsWw<-CLe=K5|<} z(E1f4c|4To0O&((Y}A8EVGY7Z0u_J!5K_s)QYDPLO_RRfY9*iP9TsjlvR?p@$7jZ+ zcciQ9x5{Dic_4FKL3w%9kx(_?Q&NUEx$TlU&MU}heiI5vT?Y=_&KoJIsk%BkRomaK zhzJhIAs&xvJHIJE1EVW|V3%ASGeY|x{tJ*|fN$sK0M3AqkB<?!3b1CY?%0F`G0>L= zpyC3{#=*eQDKipxcdu_9VtM{tvkkHPt4=BqZv3aoZSU*r8yj<MhocL*0Jv`pZ^66T z_ra&;NJ&wVsFTTpH|cD5%JH@h2mnA!3+oEC2dF-P5W~Y4TYOuhDy@5NH?x31WczzM zkWa98b4f=~rUHN#PyzDtSXfw%fav(1?sGk3p8izW&F=bi+h3%5a8OaACkUJT)D@db zR4>sNB-+0IuRIY{Vw7ZLFMRL40wq+Gl_P<aAvw8kdQ!bdc`ZFLk%WjyYVOJ7$F#RC zE%o*80FnY44pX6wnwsbA>?KuIPOCpZg9PRUCIikz#QHWeJ^i5#mFihy^q1`lR1!hA z!wfloCE+6^n)MKl=3%i-urXEUH~{R|Ic$7!S;G~(9d7aU#l?*Ppa%N+9#kofwV|-Z z<LtdePx}4o_mUF!_i|cV#2R~Nfy4%QQ}uhZ)ggElo)<P;qGYZI^XRy^jBw>rgPl%! zIwmH7bAA1qzc4yG`@-|wN}^}!;odc%1+g7e#b&t@nTO}+qMqlh?=(3v#=bmZL8Ga! zudmt<#(7E$2l)y89EpyOu9HC?U^kVOmE>YRjXK4X3niL`9UUF}`}@B4SLXPsgW*qw zB$?&4O7xC)*#+-L<v11^-D6Y|2h+ur&}3v~v#f1xY|c+kcIRqs$<@4f3<(zlTe^DS z=ma2SVq#(f;ZToDs7|q{-Eu1c-Oc(F#pljID8{7}o_33vWo{$0*N@uU+Z!Al1X`ga z;tb_yqoboQUc9KNtbFbC!Xz|A1&fUL88tOE3(IcxlmSf04Dd+sNR2|xks2W(Ar2ri z%FW&E<7kmQOva6YDiq}9kqA1_cXMrQYyc%pd3kxL=XZr<O<moa4qUP2HcoV)0D?!> z)d_UH6s1`QHh~AlTwY&SfBP0(k?cXp#?FpxAm*h$D^kl$aMxh#vR;!%9NzIXEQ0Ic z>0d<<)*OO_8z%-PCWl^KhHC!p?JdaFSnN`@v|6PGXQ!tWoJM~4>|$bKK!vvB@JTMw zW~sReAmarE%>4Ydd3n!%wZwO2b6HJu>gwu-|3+*#Wd}MdbeezCB01}pq4ANI0=QkV zOlnSlYCzG%rdtEVJ(!MFGeJpss~Z~()0vwjzOzLZl9E3cn>_QSwHlqAoOqu<uh3@& zq(Y#C@u5ju+}aRuPBa>;*J!b_Igx>u0Mys5wJ9ztvik6$u(<ecJw^%K(2~#1J~Ac| znoE`7jtB_a_UJJ&F=HUu|D^zff`a1X<AIBSHwcM|rKP38(d)Jk1p*yZVPRog2m@w_ z<yu!5N(4HH0F7?ty}s2eUf3+DMg|6HCH4s^DHO!S{DABQ1d<!@B_)xw*sYR^cR{o2 zjfd@+4Pu~h^8xJ2s~{{u>OHJcJzVxOroXv~;&m%GrI801AGcdSU^iyejI%;DYACw_ zJ`BeL3aIiFaPD5a#kH$zYk*N@duhBg_8nJR?jk4%r4OrG+x==I;bLzF{FIZ!l~+ni zN>ORZ7mk^lg~>@tSO%=xbq-yo=7fZVr>7tC+j6k9o(D{JcS}n$UhWz`%yxEetagSV zHhu!7uGK4ruo|%6qUo6#26}oYXXm)MxX%}?d;9wf3kx&sn)>=cqR8b|jt5&+va{o) z`IeRCZ~rHbMXRd&6Ee77;OI36U0aA0`v6eX)X>=e)8P6iO*ZH8l(J*XKHMGM!>OG4 zpEk=)j2Kk$p_C%CeSIuqV(Ip_K0eL0wfwHo*kKC`i@f}NbSx~w<s~Tv>YbpjDrIs& zsxsKA>HlyE!=vq&8_o`yn4j-YEHYj1^yfV4?&>l-n6C#s?OzIW|Ao`mFkn3ZK|G|X zHvc7WVh6Y!pxn1x;vddyTL1(Kg+ejxs($x>g_)a67dK_qmxFo*5LbYJ!S72|)6}f7 z7|8<Q@RypV#>U&>%vUrtG$yt8dG!mSp;)u$z)oD3yr;Um8EI(RkXF#Yc9d&|TjSfd z_}mE#3j=W=OY0cmPysPHp1n9bTd;6{fAeQ<W(FAr1&|nDEbuw1RrEsKz-21@)l`<| z<qg{u<>h7UU~F+T5wco+*eLrn^{f5ch($Ps;OaVHueL7tDu)31a}L5jD7Bp&99}rA ze=-`{0udJj8=C=+MIm5!b-cj=OzoRY%ro39Kwp*lx&XynH9Z3m5CDd8<5yg^bOaO* z;BGY$TS+aZw#7wJK|%M024~0LgWyzZs;dWjdhkZH?a;>VZZ5i=FN)H5Ek{9F{csp8 zhD9lyh*#luWHQTbg%+a?m&qQ9jf)#d7Zc;;93C052b>s4Xg|EJDq59fb5yNoDj0-? z_43sl>gqzt`41+v42w%ki7(R^78d~_^xzHpCCUYOa4;avo0^*RLoX)EVcj5NuI%pa zE-&NZ;gx|q0G!g7T|$AsivgE!2Ew__%uG-ufau{4bQBl+bLOGUmb_$Dwulfk4!;nf zpZ&iTasOZW98k9Wf8}%k&&z*j0TjevU7a940RaIaA>97&7ys*}mpH(otmf;EK;cY+ z0kpb^k8>50pNl8{r+`5GyNlu9=lgTOt#EK~05#Y!2LdSQEIGkXoSf8zHGeNFvjawp zfPesM2aqxo`94en)SD!t(dX_OoH>BmcLArry2=f{0cr-IMzz3IcB%x@Ly4Z{wt##p zVDE4Ctt~A9&nFG4K|rAc)h2+eeJ_420nc4g)xi&x%5HlG8FK(^#nSzGEr>n!b}Rls zFhcXKy4o2ODPWFgOibwL=qvYiQrX%~9%pm5Eye20=^i`z85tR%AOI5B)y;uq&>FKb zGhdgJ?=1fns6e5QB}`zjR}vCBy1EZnL%#8`v9~)~Ex(3_w4M>d@ni!qFfjh!7f4<1 z9v-S!%D@{G6chks{p86Lz?_7IhXd>U0e)-dt6)G^0s2kI<J3Y=VK)Pz6|3=bH3S|B zBC)bqi9u5mUWMatMVP4E*XLlTK!GzG2FOv6gKH}*0eO#xg*9%Ym9GvcRKSFc-UWd* z@g)Go=)@1GiH~@IJ5ZP{ovU~J4ayj&+7vP0#lb;#E-w735gi~+(%#zJ^E&QjM5h5N zkQHzRgcz@Z9G8pgufQ0@o%D1=Z||o2#o9%W5WFlF`Ov>yAYR4$31%4la};>r!_95^ zg$}0BbZ9HZ^z5vexp{D4V9vL1ZXO;eNJxzri=JIxoPZDqS`Q%m1qITz=h*1zqT3pF z7jC>OpnJ1b^Yb8TV38wVJ8(uaGQCP-cjMF3)8pgny1H}O5s$_Yfriec)epfIq^hjf zA!Ov_xD*1*K$-hPi`;Ya80c`|fq~u+cNg$TbOI>nQmKmz&<9lYoB~$!x%KR~uov4w zOrcjoEX>T4McS|29qZl$>76~mE*3p@*|fB#fQ$*mOtF)G9-yt6Z2~f;1aSXlWo5n! zznoBuXR@*y#B63N-tEs;gDA2Hh<u=I1~p|sz@rQPEr+}7Gnp7D2qMk5$9+H=f`)^W zE3pRL7pRo(ZS^G42qMYy^Yejp>iTjm0+dQXC=JT2{M~`_uZ)1KqKAXrFDWIp^Jjl= zkCmO>#om6zr`Pb|dJ5=`(}Y|HCnhvJrx$*>hTYQDTF*@m4<7=BmztWVa5F;UqjfHX z$}$j6FP40LfvBqGX5mkb)eN_BI~<HGk&v4LmKS)LZR3#?43>SrxIb4rH9l_PTU1hF zV`W7F2;358e2L?elQS{78D-!_ydg46jzy)V9864YuYq1u=IHKXiNmnj3v~S;RlxB8 z=@cP)-P6$l>-_R0fx~d~z6fa18=QB6OY?v<0t(*kSy|tkxuwYx{oTF2qJ=F`qV4SH zsH;1j?P%<G0a00kq0bDc+>14LeR$$jG*nbFe{ccLGFn9+*9pXOU<q)%S$;^!M<h8T z6ChLv1#GE7lgIhq%;BNk{yC_4pp1;TRHBXFzQIS)o`b$uM`sqq91&q*AFwbA3JM?t zsW~|Q0EOFM83B+YUxKR8;?)9Zj)Cq5#8DX;nZHVU&{F^!ajIAs*y<lZ%zIyNf1fR7 zV_^Y|TuMa5kUuge85tQ0E@h+5LIW6+eEoU>6!tsg`JhVzS|I6g3VRoqwCC13Qc{0U zI60ZTB>&0FE+kGiAlu0@8NL3Ys;Y`c1Gu;6o1Q>3FJeAO;p^)QP7wqE1_p-I7tXRk zUC`Y<cAO}Bf4K%6l{ropbVk6a_Lo`=vqyk=zm}FBYd-P4|Lq%u^Hes+0wmhxSvQc@ z0AmM;Siu)Ba7ejL0Z(~$b_TRG@JJA|R{V94fsXb+e?{<LI_du>(1Wr64)p(PR-ksh e_XU07!-Kw*O_ay_9?)MyATqBNB}*iX{QnOQH=Dlz literal 0 HcmV?d00001 -- GitLab