From 852ff91b7d3a72a3917a911d593e8a49ee548f6b Mon Sep 17 00:00:00 2001 From: Rune Harlyk Date: Tue, 19 Nov 2024 17:20:40 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=8A=20Adds=20control=20flow,=20kinemat?= =?UTF-8?q?ic=20and=20motion=20controller=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/flowchart.png | Bin 0 -> 72060 bytes readme.md | 86 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 images/flowchart.png diff --git a/images/flowchart.png b/images/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..0c6d3a25498f6afe8fedc7abe2cc69e05ecc8134 GIT binary patch literal 72060 zcmeFYcT`jB(?1#u$`J)D2nvGrSP)Qa=SB7r182;3b|&++?v-@D%TyY5}<-nG8`6_RH^`I6>!8!e%x%LUqg}8D*i{$y zw8GKPcekvEw%^r??8`v7e+~(6SrYkr-`aeez1!v29J)|!TW9<3>47V!)SrX}-2QFt zIq%f=yO&?J27MhKI+nKSkB^yul^3=BrEGC@x1Przo0V%{ee}GuYgJmraFkjJyltB6 zQ_Sy?6TXEA*%^^G!DHmMa%{Pv(`Q~-juKsZ3moh}fB(;EK=Iv{P?HhEP>2Y}?hfR< zVRs{h&w9eyUAuRl=0zgMvgp~7)L4v|R5_MN8=MVHC>t;gW%BtnWOo<#&ZV!!P^Nfj zcIN)hI+nI~Av==Y#l71(tXwr7F^8HPt?771*?v06r2wm`%2zo3aO46~N+q>9db-I+ zj;*hJ`XMQdrE}?11n%7&`CwQWr;ap#`eA>Cty7lVu=>ND*u>$&33KG}hyAVRky4|z zS3hNXqAJ-r-~iqnbgukS4QA@?BWvW0&Teb4SbsMN)H^!Oj1m_%)4F%h_q*>-5|8wl z5QTGeru`&U%e+B8G|UZjFzQX%RBlfouP@0Nj5PfcyaWWQsks1CU~Tg*EHg(+fnFP( zhq|Z?tAjvocV|`^Y(1FsMaMrqqj^`A=s^^U*MbovP(4dP*JXCD>IwWLVj7Rl-H8?+ zm}PMZ0y(!R98y_ih?4&HUJJRmYBdOSdDk(Rg5v6$a=Vu0M61_+c~}sL5T1u^+Q?S` zfgI%c3NMzejaF7{d~iSt1VW?tguA!3X(^I0_TR>8hPHnBx^l_*h$9FT5PT=_enxp~ zmUrRN$CRa@UhiiVBNNFnOZ0}-AJ@XiNCH^#l|-k{_r)-H^_6X(VZ;QX0+SlN5uKU_baEh1IUyUM(IUwm!}=yhPA z)0>Ez@|6=_rW*+d?}UXL|90~ZAe6I{DchKfvew*k?l7P;&yka<&q0^yyc<0@ zJ{b13ChCJ_00^YAHwio*oBMw3DzKFc6a(fSJX>i>GCu|aeGD6>&CPnk6u?^>_{#>* zLjk?U&v=7dfY7t`8D*)_yIVW~HEd?6s*bA+=-`;iY%}*t^Hy*=c;et$(fQZ0;2={j z5V!(v-F2L>_9+C6ajHb^K$7GrljoqE#P1)L+$Ee-^r=aY{YcCvgz>0Bc*SLzX@RQw%%^N6F7 z!_AmFt|D;f7-q!04`sGK$wzLGhVorkb^orIF99e?9l+KJoiRv+0e$UPKpGGTo`=Pq zl;~>^P!n{pgH|~*7N%n|$pR<$NC12aF?$z08zkSfp*D^gSX0)SwA4+{6bQo&kD_>` zdiSUP(A@P=0#eY%b5IxnPY`H700xTXU*@dFZ|zlcjk9LJO;3K96675`mja#-jAJtc z>2$p0l8^3@5x?QHp(iB&qyX2)E?oZvxV{0-C5b+T?Koz%0R$?FjeyK7%YE;+`p*Gc z6!Qy_Rw+^_#khUA0vu$oUw8N%B6R+(vvqHX#7vK)X9^ayYzv4)lgC@e=~w5PiPL6P zB?qxw9iO$LPXf*92{rtI`v5Zcz3SZO9sA#0?!VOB0C2omH~b0ZQ`a)WK%fIBTUL1& zZk7Q3oH^2NL3{i1u-DDyWkJ`=pSBl&TCom1`(Om222jCxr<&s#I zi($b?IWCNQ^Pxx?_Ki}*-cjHHH@B+1I2L&@Y+h@=6LzcPp|E>Cy;*BbCFC!u>qj5A z7rSmYYr#ID2ZX!6EA4^)f)ytD^&6s|330M*Y@KovQAwUwS?6NU77? z!`lN&N7u(FD?cIR9L{{B2NFHTNp#(Iv;>nLcw<(3?G5r*pDUTl2C54}wcjF`DbVwI z?6B60p;wEf+HX5Ml?-J*SAFjRU|DjL4K~{dduAE7fWAYWBOB}Wx>%~OkN=QKRw2fR zT12ubLcCb>y5rgRdolT2=}wLH*LKG!McA;G)Wj~}kf9x%;Nu%#XG`^PW-U$Glw@q= zz}mj3y^roDVQobXV{M=35M2jUmtCJY_FbC(CG>pmuJab}-CbM$fa6Or-aF`5yM-W} zIZT4MqMIgWDMth0;KK&~R7Fu%#C6sJ6mP*&(+S(mwA?Lo^y{6LGg)P(QQe|QDeriH z@TfRC?%0BKhm#`B^(cpY*Z&bGw8{3HdD*4C^!3al7@hYM$2tciPPcfScOR%wUjd8I z`BS?3r^RH0vNkFca6slI9KsI>y{D!mQe*fe)DEv z*9P;l%O=h5Z5xBv=8a!x9b3T3s_6<_B}`YPbH;GF!Zu@2Mt^4qakC;2f0UN@UANS< zuXdsAd}kEss_(h?u3ToSU&Uvu{p+Cz+_El4&B{b8U5gid89(F1u`g~M7m?1wvoJg6 zwm{=?rn_GW+`6u~`%V%o#A)rfujo@QA9rGHf>L42+JD$aWxKRuKLa({-OM2w;4PoG zdKQ<|m7h{7KU3axH5dZ7^o?lIVN9kz z!JrvS8BQlePldL~oCm*~cs1f>1FPYco@E{U%O1YJF%{o}&U^4Q>ub%_rEbT`oK`Cv zWSZMm<;^UQpe?N4zhSb9X2tE|T6_$QB3a9b?+Uq6T7#Gi3k zVYZ`@=JgXQ7J;*Q*npg?yFcfwKM-J7i$@sHgeOg`=bmbN41^Sa>JH1A>XmU*R;M+m zV0PSleX-;-L`ll2{NhOCnD#(PmG{!N_{9k3R(JDkWt$7)b$;l1T$W;n1y`gLS=44w z>ii0Co7B(Anu(yD5wGkWJ+~0tYOG6cP<3mkqC*I_^OkE_N0T@28Loh=`4gR?4XAZs z5eK`%bqJhw@|)LVs?M)}=N0Hd`n~!x@ph_qic@<3Rw&Ec-INS#92A~W)gLy*R|P>Y ziIOS(*DuN{dAj#B@OMFt>lsGxTlD@2ii*w?@{-O)oaoYZQ1&y{Q?xBHKY=vD)2O4` z-TKENs1NyiZcvRaa_)tUJB100KvP8==9;W%;Az3sPb|?Bb~he}ZJ245cZL@j$l#_g z=;*bj$-IR*P3b<9#`q`_ynljz9A1J;+adQCe;7|{V2UW(hdbdzdfN~YH(}X@yb&Le z*Ue5z5;O4QNp&eb+w`dB1@C>=Dx#*-OZ}8T(P=Lo6qgcIzQaV--+(rLlkoh}$jt&c zYtQs%hm0#v!d(hlWf_w&Z|8l&UBl11-)%O1R;AHW)u?o?T&s2BNHCe1bUDK(1YYh? zvLts#{#{@)maf?$ave>D3Fh1LS%Kxee#hf+yRpE$N+DqCkXgkV7 zo(ivtxK{8nGkkvVsa~`jM^TyMU{cI^A@sOBTz>%zO3-_ja7AYo;YF9GZq&gvZ~a0rtL`Yrv$(AFm8a6d7eA2r(uj{EG zt?PtUY8Jhsdf3O(=9h z-eYOb zSZ6HM*N0-SM0Gdim1?)fcCWq$1J|J9OYvVFx@pB#rs29@!$?}$Ix}19?eO`n8PkL& z{uPLRb|GDei((j&-Sf-kEI)O74XZm}9kl9xZMSPxwzKW4rGNOH>2dk0U`&P*^}@?u zoK-L(=D|)Z(Qid@759_1EXl}2p{n^f#t3}FQyY<~S;NF!>b}eyg|~mW-m>Fx{yP;! zK#?%JL>4!orgp6Opk3U%o(a8U(C4-Fdbyq#h8q7grkhP!CEY0GG>&`83Z<**+s zZXb17*2wa)sd4$J%+09SsBDWbe1MkAO^h>G5!CaxyL8F&#eDL-_SRJUo{%qY9@zVx zDbAw}w|X~|pT2bX*8eobuj3$s5n(eoh!UpMy)*Nv$3vHS1i2bIF!gw^zqV}E2xvXG zK)syzPnSgj`G=gIt8aiFL3fMHh7+0g{=|diH;sFF0{c!bOzrx_$?rNzKKNuSG%u?n z09{x9u_bBAW+F;v!r(lFN?iG!S)@Kw95mA6vA;QAykc4MTR6*rJbs_}?ZSPZv@;kU zAJ=U;Pp0&Dcp z1}$k*594Xu)O!TI=~TZBKksl=Ka~L{$JN5$b5fa@ZuIZH1y8Wt%tWr|PWhyS&Lj3R{_}P3!^`F*ib{g(HVF z^nb@IYq~6JD9hky@9=l`Pg6xGhtubxne6;PoFxQ{x9Z+arm%g=EU<|CjK&%pRc;}q zxxqcrraTZe*BzqEduf9`niLpSfR!mx z&ev`;4p4eKMQ+VLRXhl7gx}fZN_=t2!0JJq5auUJj%qAD+b3P5@ZN9Dvb(R}KfLLh zd}-I6ifys9bQ><)2hSc!Y+}@w=wC4}31#jF`?5 zD6f5-AzJ&|u`LV)l++TQJ6Mak#STX9gj%dBe3MB)rO+GcE#Vxthc-DlrB;O1w{P|d zWl;J9?30-2?g+|D%OoZypS9E9YuBBP{XY5R($XA23CKR@E$w&sU#1IcpvfkxbjI_` zS1YOgdT8&j2d5D!N3sd&-)n$%ipuWSH5G#_PP{R(3$u%B+8b2*CuTQZ&Hk(Sh<>yB ziMQQ~G5d(u3pdge#w(JwHoWfq5r>J{cLSVeVIOiX`Ic;~E2nPj5h9GAQ=kI_1<3Yb zQ&8;p_^^BW|{3>PPU>KHn~gc65jRCW}3IY!pY|lJ@^W(;q)uu8Dl-Vd!sX2 zmnX2&K-Z1f&B*q?SSZb|vv$nyc^MjdU6r^oy$}{;YD3Pec&DkWdcFR}0?UW@AMVtn zM+>$^t*~~H$=FU`F+J5pC+rJd`(eb^^Ks+IB<|Tu%ipohGUXooM2EB<2^kxRU^4FJ zY(+zBsQbPV4Zf+c^wJ~0`X@CaiR^wlDaGm7diz9wXVcE{JW6%4=g_+~k55!qMasf; zBc%K^;|01^N$@uYb}fQhnDql0M)vu<6WfS~&R)wYhAl5Ky4SUN#kw1D9zC>qrPO;u z|LjfplO^PoZXseC))4Ht!=Kv{lt${l(6dBEb)g&!i0qH^wg4Zv(jT6$Ki68zw=9>v zv|ae-@8GrrDzl1q6A8Wvhux>s7CQ3{WGF-INp`^4 z%j=K#Q3i$MW>W5c5s3u56RHQYv}X?R<9fQy7$w%*SWrZQHp~RJ<8oY5-v?+6UO6>?YC_x?jh%x$rK4fa`k!A_W{fs7AN6;Rj^Is|V z&rNp9@|0|oNstCyisNuZc~WIS3JYn$Xsu=7v9V0>MWAgcsePL6b#HZ(y*}{tz}yx! ztIG7M_Wo$^jOaZ=@{tS$Eq@2vSO4GT?oiQ>NeK*T=io0$dG4f(G`;Cevuw3sT*x2) z!FDcgw>}h*N9!;Yh*vk2n?t}!pKMD42ZDn#OnF9RcK-fHbtASj7dmp2J;M9vEMZ4c zE(O5eHN6*l3X#kd<`_YIG+w9y12Rz3#Sn*yV6Uxr+;=2u@D)l9S?u-$RX&pWD>CAa zz`Vs|lFWpgm!Ex;DpTrm=gUFQYiTpLj+>bM&c(KaK_Mr9RJgSHvRTMOA1shh5 zA2x~G3*^}Q(3=6?dLEY@7CCR`u4#+Is?rU&KG}XEsuLe~J{LRR;T+u%NW8du0{zta zj+Mea&`)YVI~|qMV-dt@jp$*A=jcy$?0_E5?o4#Shtl~VmG2ld=`VdI=TMu zbMzehP6*2ES|z9{TQFw_)p$m!UN;Tb%UtyWb~FM*je=j^O<&7!zPXBb@uXJjE0~CA zoh-EU$Rag3@^dcGZBvFG&@(!3&sNyhjqr!xFk>M-6G{xqgJc$^)GGJ#GwZWrQ( zj#V5%fB3U?VIM{&yS)%;E;FBf^lkEec-qO7k7#(iOaLV7p?d&2d-~k-zyU)L$=dQoJye;~lrp+K-xBHG2qVyv=`cZbwuI zO^QgZ=X?HD-#>DkJaR6LWW`0MpgVH9J{TcJy}f65C!K6`amd_Ul|D=Z6ayqw(-b@w zkG-k#XQoVwUE-VBsg`k-cLITc?hNLI+#>r_CpfdHrKWt^l7SC=*%eIg%S43jI+it}U*W_^{vYUb8tMeO9^tChe z$MLg;j{^!0&|r8E_$MU}H5Q?HDncw(vi&>F*cCM<^uBxa!OEO)uE<1QA^608{gR_k ze^QQ?Yp6NGwPe~0mN?-U4GK~bGCK}#qdh)ah}lblUXnuMt$qg^uXh#S1R|z<)}z z!h(U2(OF#dsHWuka4N|;6-zAlxyKoIb~?-Vq94p7LAVtjW1;@gm2kexj^Pdi0Z+HO zTeq2szqlJ38jq_H`-Jv?fU#K>#m22Y5YtWuMekrOfjd4wj_=lOgSf2zUWbMsbN!^w z3=J;0@AGbAV0+P~Th=BiGQ@Ef`KkI>1&AGWWb$5LKJ15VgU_ybJnF3v95*h2iuh8jt%M+Fe*pFL9($6H3wm~|3GJp zFOKoBra7DiKIo^T>v>4Ot;MJCpl)Kz@*gFbQ}~TCmm(E7e7)s<7uLO+pet7`{e135 zx)g;X)gRG^VDJU!8|g1C%zt6ST`AqzZjFe-i!09(uZpzOMm+^ZnCHHk4cYwm)?CpE78l%jwr3V^0pR{ zS{Ztyw{~*RRm=3)eZ<&{cO?nRn5)UAZt#bp8r0uPmH%C}mh5gkHZ;bA@a( zL*u7OTa-s&#)6L-<=#yn0Cm4QR&qSVF_(@dHE43|+wv1#q%8Q>@JLS4XG~;+ZPLvT z;S67>yskIj2efO9g?NcFp zc-LE)A~WxoOnm7<>9&kpdYuiyOoCrM%>Ea`K&&gXw)J%AxNUO#kypLa`lRDoI>9$| zR14coZ4}Sor(O44pE&+~fCD^68p1sFS=!v7GBmor4W3+2&`IF;JX-mab1+HxPyuHCf#km3`60wyHsWv z)IUm>C)%CDamh`n;tzlND%$Xg8`e!sH<(jJe&w&JUE~+-DS8TiIx9vy=P^<&b^+=j zVb9ZxKF9>QjsuiQm7pG#<~fk&=7mxllyWECoiX!Fdul~5VX^hwerr6HVWv1uW!Zo< z^%q85D)+|O{W$k6l>w@>8_JnR=$|o5pE_9lJndAb!U6=?iG=!u+=sGZblnnj;o8coc zbCZbs>wr+QRx;N5k81v-n*VZS{r?x#1gJ|3ZT#odth%Sm=4DPlbiO+;PNK|B>dXO8 zE{K99BmFz#^`gB3hwj*&ryrhOaLUsUi}EC+_wA=2DzrMh2KG4la3_5T&LxbH7q56E z+yp%5^QU*AM~lPG(?QCu4)uB1QxE&~3M8{H|Cp7K`I$$Uu#pU4)tSg?B-TtEA0-Hd zMEK0j)@ZoRze9x&AhAY>W=8knhdVoTB{Tm7duW%aKxD0ongAXw+F5y`7?}SDmQiM& zth7=^P38Xht~xnas&B3wo6DnTRynAe z8vr8bZ*^WH`QUh7z9ez03ZR!g(heu(6L+4r-w?A5c-{b5Q}CZP|IyEXu<;+i_)kpu zPdxljF8F^v7Z6;;?|LG?T*ExrNvnxe9ef!bpu4>9)WbiHn-h$p1K6zQ`GF*BGk(kZ zopta7O~h%F2C+g+;SLFhQD0RJl-$m(?clY0rtab?)7PRN?9`$zvK8@r40yWsB-TH( z5K;N-rm@1fD88Ci_Uui$EYiH9sv%KmC-jfB-hMh8BUd$@06eHXBZ^_kKHloQI&HW#Fp$#34p>!fw>HK&VxFgk#YFP7%q$<8cvXGF zTl;1{A_6xLUfw6`)o^4(A3g%YdzrvJy0b1$*u|Z}SkYRiXB*QORy1|f#69yv{WkOC zEI?L497a4!HB75imtF~!E;eR!x$}blP75fCf$qf4dtt%T=|YOQpDU({tZqk5R6X2D z>+nK;MO#sZ9n=h`EAZle7@KVX&DiE=V@}u{9S|#=z|51I#naF6WLMVqC6Wiq7ib$j zqC0$Zd_CL8FIOTlL7cFu*A4e%Tr{0s2?^s-=#e#bCwq9KkE$Z+`dN`fY2KIk2_Ai}!O4o&%*oVP z9lB^mS@y~Kuh6r%d&Uss<&R>cc(;B4L*>LC&8ENgDVWFy6HyF~bu&d#q7wbWj#n##nZf{ku&*RBgC)}6U7_DN6}#H zuhQ?{!+<+wPOPeKT^qybl0NrJ=-mJkR{BRao%j~L6G4o3G-72U!^co{^)Y?8a|?%` zqpl7x1PMRJQMmnh)Hlkb`PpnXJs7(6)`LE1EYE`GddKoiMMn$$1kS$lK2`IOs*gG--%d$;v%ujNVht`FZq(g z!fgd7EQHykWHC+l#3 zXVP0jPOzwCHa|DJ-JoY8Wbs6v4co85XNQmXgz`eM5nU%1Y?J^G$*i=lQm^XAWJZpc zVY&=xaGM2hlG(9;t*BRxJgboLWYxp|^PBKEKMZW`wI=p#;a`%3M&O8N*-_j<&beE? zr+5Yl@X(A+V=i382$h(fu?V}Sao+&7@V9usn0==n)(m8fktZfI=e}k15CWUnoW(WW zx!{Sk4E#|AKpCtovJn3n)BS3ZUnkq|b@VdV zCGSk?v8J$`{Ms&B&!fTJ2Hc61h0uu;mO@3Z6UGaDv^E0A*&$%b&DJ({4(IQl4`W5r z7z&c=j?gnjo}aiTYFu&h;mCMlkFcp3E~@87@TrLTeE@U;XEkOC5HLN$?kM)OvP5}- z(-OBFG8C6%qXJl&l8u1OgU=FDhUc2yN0xyF9A#I@x|t7Lr|B zu;qIJiw$upAs)c{MmCF|V+y}^V!ze)K ze$Ic9M{X%^0~9lEL^1U?6aFyMM7LUa?_~Q-u^P$$#~z=AS=kI$8-1EYb6U*jj5$e6 zUATNE*k4rFJR#CD5oqZ(i5&n^03@Y zWvh{2{LKQ(l$w@E3@g&*B1J>frhYfFX!AdAKR?M*GckS6+?c$RJ^;Mf0i9y()@zz4 zJz2<}7104Zi4Yc3l|7X^*FQs@#^`U5z{Wucz;TK?mCShhu)jd1N0q;j;TL{hcDry( zOdQOQfmtRwl%5}A3p>=@;QiP-Kw2kIZyzSI@5CKISSF53#mvUZ`De}}jxKnJLIM7N0(n3&W7p7?oo2cSzrFWkxm=$XXKtEwOLhbO=zGFk2dTI9cO z>11wTPT042^0#VJWB=#T7Vcsv@8|ea1WDTZb)AITG3Hbr1Kxv=4u}r0`*B}|7^j7t z?d$@OGiPjcK>eb;e{U*b6+Yi}X)kXjUvh8jf4^8lGlQl2P6d%yRckDgEtm*?U83w& z)xSxI-J(+dKJMR(fe>B-B!<%^4(0@pU)1_j2mkG2AltMm#O$c!?~}$CEhLw64s8K+ z>e9QV9ghF9^RJ5~ByAC9Qhh0l!3`%iJS>5`RNwNxf?sz2m&Fn!{==FQ=f{Cp?g0Wr z@z%_(&I-Tm{4a}tnts6q5>DJHU@zcKA!dC{;r3s4{&g|HvHod-|8E($gr19;DQOml zOw{!t=BV1v0O0-)Q2mc^5{g3&_kid7$K|?LZBJNs8Y5~SPbdd6T9~L1k`*d`M86x$ z;bUZuCN6`!>Rzei|J!1SlwF@mSC(&nwUDOkY^uOpF5IheOCv!H6#ecUXb$U`HK211 zEDb}8?*F?6#aFR9i0R3WUFoI1*=NVZNuf=rPN^WOQ2C>U`dA=JltdZ4LG#=?XYrGT@SV$*X(b}wZ zRtldMUnwh}Z`Y#qUhA=C^iZ$BOSHzrOhQNLZAm0c$lSObN;vfLld#>oRHIT*#rJ0p zhE-{i{aBnhJt{V8Ho}`Rfx64ugE#fqkAc1w82Q07DW!%NFU9?cf^TG3uF@V{2J9n&aHZ$ppob!uZi0YnP7H5w5U047Q$$_M$Fplt~RLW z=lE$6n8 zqp89O-w4R_G+{kZ{o=uH%Df9j{hJ?Qhl=SvSzwFUa!AFAj-Gk2HCYqNsUkP1NOaWiKisKg^$kzN5kbt zd%438c<;+BPcZyuH)N6RsFAtqjqU`GEPu&gk3dAlkiXGeBDA?eh*~We{;e&C*#4lQ=yRC&T)TJuq{pb z2bk?4%C*vKHEun7-T)h{$sl+1rT{lo!3`Iq(Z5Y-m_`UZKQi?D|6B%5ro3YzvbsYO z8+8WxOB1IJ?gaC+O(*o;`OszJ2E-J9c}?1wo2Xh4bJ+TTd$3JdhRnHv z!}jemxA_fA3WmdN24QQ^)xpI1WHIni5!s)IgH3b}21oQ^nX%p4jU;F|*4@lgz3k1| zVup;`;8tc!LtuxB(J05~e<$GB`k4BK9vRQBYNnP7{}!~eZ|+k)w6v6oJCUl1S6)@^ z0yHsx&_83++U;@TG=F{KA2E;J$ld!dyHA7zVq^~$Dn_U4#J=RQ4DZ|h_D~mo-MfdS zwUV+AdG}ivPPE$}J{HPN$tETks*83BU3<1VXCq)4=iEGivpWahCXuqp$TtAl1&HVW zEGW|GM_2Tv=WhFJB+1W&ZYR)Q*;kE?9A)dLbWx?72lU>0%a19KRYkd{!5T!NSHa(W z|7Me8z6s}?Vs5$3pV*qSF41Y#s)2zCR-?+!d-v^@KPwo#ZY%qBKoGGlZ|_8fNHr?? zwSykEIiqoZWeb<-x$C|@9fh? zs<&g`Pd3kduhd77HasiE8uYVHLpLVrPZaMG>aP4N=v=rikcK_f&Vkh2i#EKKWFc+kU_5(r2{Rn|AjGBVlq}~ zo}E^x607Ip-;Xv*59;OP8vqgHW8$1T66eVy`%!D3)?<Lcq|m+ z)x-ESD2Nzgd+%TVXEJ>U<4K^7-oxHEDRhEF5*W|3sF8(`$xyXWrrQFWc zEq>l9ug0}qQ6z+=IRSap3W%S2|p*@s=*A6*kmo~@YP(OGE^0QAB z9tH8#yl6jUot<#tNE#w-FI?mb@ywWODn<)+ef}5BHX9qey88Hi7}K85Z*(o#Th%uw z!pppKiJF|m6(gQkWUuY4?=YmUX&J8f`HEnV&GjZ?m_^tYV57qpQ^sd3+=M8UaF6s-thRZ+HYw#oL zj^b;?8-CWweqeV&k)+d@yR8g))6>v)!-*IBw9x1}z-ssN6r($9m?&nau9l8Rws>q@ zZY*?m0O`=tMzR_(y^km2o2JHJ2sc}$y^SLa;A(@>9th1x$6KkwT%XnP%P6&{B)? z!E3?*i{x}L!nYBmBacULQu5Y%j__Ugu5OcgbDY7!<++;B3@)e8iGW`P_TY$FuTdMms}`NdDj(-l+1lu;H>p2TfE|1N3cw zwu}h%Fp?&Vri5Kz2m8O5JN>4o&6}Kih_*86X9FJT)AmpF(N%L_sV~=B*5maPqJ$|N z{*KJm*=HNh=p*7jj_9wDrc!5=>yd~K$X0(G*r@^rDx$|SsiXT*jb1p|Z2Bv9Bkb%J zYXmU|rG@w^AYlFuNgOZPYsU{#P(b zoqP_0)iTVpg@I|?aa;|Lw`Y3QGbCx1rzebtmd?9@R|o9q_0vUub;%>x|-psmSz8yZyZy%z$Vy__5tt!~l@y zTOh}x_a8E7cMKh!B5Yc@1|Ic1F_+{VqbQ*w45wf7H-iSbzBhiW?ebgU=J}ot?-Z7l zsTj%R9y#ucq7b**rZSQ!XZeMV%h71Alql%jRnn}jlBQ>TeZ93tWkTy~I%T9Emfe|z zAO`GfZ!^9<2x(UF%k-(NNC3XkT#Y^&;2I3IrRf51vGu}HH& zbJCdIs%mk)!(8vxJ^df4tKFxGnvbFb@XFYZuqf&3z(yRaYoVC@(cuiE_$dPn=QdS) zEvQ}xn~)`=H^658z9D6qkBw_3tkJa`GVjiq2(e!li6Fyph$h&w%QnbbhMwZL`uaqn z-C}}bghurXQUuFr_WwX5Uh$6)CzN)@cYOR(1+PCTz3)iSG$NfW|G8a7>7J9{;HD3q z6UU;ylqby#Qhsw6Gh+{|Oy1tFC);J$iIH&vC|}T7DT=@apx)i|#(ekf0&~XhQV!Xp zIv=Sj@bfSVA#Gv!vRVQaM&9`-58nR+K9)j2VC-nRl_md(ZC$#{`>Io={310I9l!9j z;e-6QFt3!6#(ikCp#_&X(&hz4#m5G#7&*g%u0k;^cPle+q4&JdLUhnV|(BYs_G_p>W6=@;g9`+6}p z!zMkU%F5gFN!{%b19eZAj8!gYH$5pP9=6xY+dylUA@NOYr8Swqf731ho&>QO<3?7u z>YvAdyXm57Y#0;_#?vc88O%~ZNrDNpk#S&@`kf(%YM2vDo-ry>Q^xu! zX)pDkIZsT09Wai57_(8IN%$;tI#9JO@M{1-_{SSUqXTO4|H1P(To1Vm$LGKBVNLu{ zQWDQyG;h)wOB1i+Q%YIP-QCjsQD7%Gp^RqopqpN)EtRWotWd5!TKB`|nqQ+52ldWIK%L@GZBRD^H%bM542Y{tn?{5wKUh)+MDE9s2oGbbv(7yRP_ykghEl6Cs5AvW8VKL#5y*azf3)^A%K;2d1}vrRSTEjeI75^ z@wKHB#S6^_D@SKs(m&!~oG|628(+S`_8!cKL)AMupHdxMxfz*A(N`Dg0xx?zG5i@t z&Av3c;H2>i+|?b*ocE}#a4}EMUSQz|j*cv@VyL(`x(GW;{uO}%vyN)^%g(S~ST}sx zm^hz>=B9c5A%jmlt66RLsV5+VpUz6Ftey>P)iMcUg`}5jb~Tpxky;O3S`~-W;)TIgGO_4^;HrXuN#B4W-^csF1m$}tj2O)AhgPNtg7cCsj9yTq>ah5oA9UEqUj)vEWtVb+X)Hpo^4AKb#>E97 z6{N7Azz97H5X9>mv#*noBC57&&B(j`eymMjwo3!8x-_rk2u^)=6oX}$*XEfX7x2;G zj$$G-j?~R`hc`(jT~eby$@Mi+tse-MyBhPr4Lq2}fB6Yb#hRuofzJ)Ci8x(sT775IU8+4+?kx2ioCK`tG?WVI+L#xuzT|6QT2EfRkyI9aQzK3*cqc5hFkUUmGQfmHVVmLQucxHRr%3TBOA%={NmO zQ2XeE7TZWF{dc2IR+105Ik&^cN)03W9&fb&P~U{Guc>RHr0Og+gWo7AJvhQ}miG2t zUdZ#wzIhd{x?LKbG?2qjSsKvMPPchdHH=DMRsCMT4(QDMgwA0|v&BlZ2R)UnnxLox zMoYXnO%zb{tE$)ol1Gr5zd25_xDa7QLQPpIQ;j@xqnTa+v=+C& z?RLW;XK$z(x`5-wr5sed&_Jn5)^(Eo5nq$Q+LpbeGZEI516{eh}31BNyiavXrgk`(>r$7djxaz<>lnESNTc{7Ru%B>dp$w@QE1H zdxwZRCha$@yM;TS|H7Hjf;n?vp!Czz0jl3PAnQ6x>xLgEe1%eYE3L=Kf-eaZ2<8!O z)q2=*rF?v(&XGVw7LgJU9hq&R@kSj_p$5dKEUj7>NEPn z%`xL)G3C694idBzcd~~yUxQz_1;2%XUUu0+^t{5Fip=oQibrm#8M3WJhz3=v#t>w| z#aUC}WzLb(NwZoiMH#EcNJcx}Tp0WOU0q4AD?371DPOm^M;!il;ZidTpp}>b@~E`{YvAiX(z2#bb5pn*A`T- z;v+Y4Mx_7O#%ez2+1Lc9RWOBHJ+8AgWqZp;dEjZs>Vpj%w>fu4$?bW8H~Ba$gFbWS zU~`65H^Z@M+MR0RmB6(g;$`hZ8MaKGI7dTy(V>>5C)IbkN;ofy>~#qM|}XT4cw9 zs0=|trOa3nBb7a6gxHE8pu`11B}75M0V1+N5=9}}V8T!k0z_tr0U{(MWb(TS4s4(H z`}Fzz`TMgJ@B7?y&v~8K8TVpLxUkns@Yt)hi*GE5l1MYy<(tocprtfx9a?EPp#$IJ z<0jRHREz4mOG`%p`fT>H(qC)n&4OMjN!i~oEmb4G75w|i}tqr%6@NjoIzYZDe zUXs6V8*#r4wNM}L(-li^6x|CiD z)yrzFrQd5G;4qjpww`7Nksse`@`7qtF&y>CJT5RUut~nj=Z_V7&b;0WNTq^`hDAk1 ztA!yZLb-2pMopA7?F_^ zYEa=i7dzQ!L+c|Im6`R@;L1O3WagiBEzi`)c;zL5X;CFzASm$Ju7TEPbBdL_hR|X6 zT4G$R_Cw3HAKPHGaRd3vJ`=dahVmSCDFwTXh+f&`x6cMyyVc6sI2?L8#~X#S=Azz{ zt(mJ&-4st;CFoy>{Fq8i(GDhK`TAJvD1sh)6FuelTQ9ScQN6-y4XkOf9TxX?$Ca#7 z5t=iOZhIHefJF~jSScR9t+mW-U;>wLMQa@OO@T)- zVqT1fICku=-%vwPV)xdC30IoOy6-6IHU+hK*|5!2x;E0|Z+~n!Td&8y_>$F6+h!Sb zf0Ae0k9_#!pWOmtt*vWggDk&to9r6Zu%2KC9MF^XvMOz5SNsbq*C2FwcVP|*u`n;j zDDjD+=^s}d=VDvT2M*qpqM4;z3!+a(*J1X$qUm}~9N~D5WE=QNP1eMumubCi{gY7? z30!$*8YWFGUThUv}9lpP1ii>=&p z!j=}enR1(BH-E<+SnhG;jpa{?!vQb+&jogDq7NS5Eamh$MZ*Q60HnruDL#%1SFcBI zcrm&@4nWXSO?Nd-wX})xhy^`o_J4JYRhEW|r-YOb*Y)wS%!`bYatm#VH4z5nUBPDawW*P{iRovWMt#{E_=>=7d$ z!qjvU#ft?7$uOs0%;m~D;EtbQ=VpjPUU5Kan9rr9Vr8++~$v@vm=0ot9pBQN>gLnZ$St3byN zp7*e;0)MCEwu=v91zcLnznX$%u4blh$#pk1k2aSS`}6guv`Qf>W`<-)qpn4Tu|>rs z2neOCYXw>kw%Fa=mwC#h)3=Mco*Q>2yP}dVKXpnCEy&6EG z?6}2wcz!cAB>4*!*vU}xR~H*CS3GlP6>ZYx{yJp&IBJX4E`koKur#2MPD~myIL~fr zd`!XoqWxifLZr79x4%Gnb=pu-*8!h>{;`8Y4d$c1MfL#pS*A7l9O)DYV1=! zlo)_$j?OKw&2hCt`rBd;PcZh+@?-`@#hPtIr`+~yew_4SJd8ONz4nNS!NKY^wW+<& zZ~uHS2ELx1*F3Nvdyp0}GtAD~RsCh7ZO0TC*sVHNNa&-~tknny?KCnBFz%vMl6li5 z(wtj_Hf_WnvGfJ(m&*Hk&zvrL&Kbe?YT;Hk;7^?|v|UHu=4HoSiIQXx5$iB5A}97K zKRkX(z&?5vN;ST_SQ=wVy7Qv^6`SApv+-H4#8@bb7AzFJtqL9Hv4-QTFU|n=2V;zV zrWB@$S8Jo!y23=Z6Eh#tG_i;8x2DNYiJs@WA+5!Q|0}hR#aE)7-FD88kfKS5CDPjv zuJr=1v`BdB?}gr!+}3jG;qK^O(dNr--Bf$$=o-`aTkEdqXv#Q+SGtZxMadNOz|nxn zH!Bxlh1Y)1?QMUz18Q&eMi=L@utM1X6KJLB6o5s9JN_07Rh`lR=sm2W5e zuIe2;Nco~u!bHIz7}jIup(XQdelh6!VaHzGIa_1P zhy*gDEKYV%DZi8{^fXJOcl}mVN&#Cuao@wniJM{UwO%TTzs>=Y+{~2 z0R)_@rj6gL=38C#2q5@wh$HvyQg1=p$L z5{`ZibDOJla)V-^xFI-pLF?^_3yDd=O_0qpvji%<9}u0zbzN-bzA!zMNLil8u!%83 zu-z>xZl5_&e#*^?{W^3wMkHz-p>5}8PB5Ux8?~gTF->V^DMkfOq}%M%16%^fFMZ1w z)Ol?b$JynBtDn0Ig-P_q13Qe2smbx)Ap73o-Q~|La}KBW!r&)jGf-~M11$dg2PGFN z8Z8mxV1kC!)Of{>0M-_prrQC}8^cBBNw5}DpVhe_!iCdM^7IviI|}}6i6C{*da%c; zYWJ@M!a>%PM;U3(!?`c*l#QAAQXFnzPKkNJ^R}H8`&C9;u2V}gpor+vlGjxmevL|@ ztog%}UVf*H^5`<_HTLbP0e-}BR$+mgctXRJGN(Bz)V)P3n9~+eG+NvDXbo35#K9@0 zz^Y5-RPP&meXC@@%vOlI*^fj;OEIwnk40Rnbn=DQEz^{P8KuKf@mX2!KR{$iOAJ66 z>voiRr|N2(#8aLQ&>rfue7Xp}6pcRqUaU)e!f`-(N!9F$5Le_#5Wz0%-Kn7+co6F* z6l;)@3#Vjoz<JEQ;W`~wN4l#Hb zYd7I7ZU}19r|e(zZDfON_xl?U1{yI9whp>9JH2@XHSQhu-NVpoyvrXNSk)CP2eM`z zAT%_VO$xJUMXEMPKUL!go)irRKY9KsR?>}_8p|fE2Aj}EwSqDN6~Fu`{8Y;P>hioBg=@*TXr6 zWXyF9BoTd>5KAXD8yKVQ=woDo9>4gGz}We4hazBYBfJsqf`IdI?9{f&_V3nXxBAPq z`!%Bf{k{j3C{%+q%Dc3^CW7m|!v1FmlYSFl2q`^!!tT(u@DZQZ9OL|St+=&p7k&_~a?vW;UXb~hiVaXbd+x&b|SQK8c10{|W zFMsiPI7ls<8@tVq{N@XnO;LJS-D!OK+6p6rH2o#diubCGR<0xaUg5f`B~Z(PXp=kP z4KZ$Q>UIM2J-@@I_Z>Uw6@%+#{e0L@HJD&_x$jELn)l-*4Pwtu-D)~4`9op!gKvpC z(b#18Hc8JG8ERKEJpr;j*}j{$=uS77Vq?C!nZwQIUTl}R0X96xo{ z<8LR;_q4JxOp{n6x+3~Qp;L_dgZqA#l=4l%?imOncRnd)CA-D@kff+!-8YdB0?EDj zH-M{FYb~s~xw&M#0=fB^jVaVAuwU;Q$&rFDR~B76o!-JX9w5JL9PpIb9Ye9U9sF4S zaQjQXPOzPgCU!Eo7u$IuLqbKI8f$Ash;H*6cNA8`_t+F(hOLP75U2AC++s}P%et_s zxA{jY*+lX9^TdD%x&eb*_}SGObSt z{8NmHji^MX3jG9~6~~vjY@8e?EmkK2^N={+zLMa@IzWrhV0-mfRH*n1aOBo8>`p1K zHyrNP*%)3D|4k&D1xYvfT7US47)2>y5v_;BSFRFb@TP=u@~%Czw<@0d4272+?XFD@ z94rmEd{P@8f<0D6@Jk%m=UMxih$n1?$F$IrQ^--y1lH3{u_s>F`h#BP8(vczEXQl) zC$ACTkc9&_%YLCpH_?kr{rDr$D8-FXD6d8(8$REXHF2xx_^`Rd-ymZ0@YTZd0Jm}P z7i@%8sOoNPNdwj_q=jTm&d&;OFnxI?EHjnTrm=t^*0UtR64gR*YjhBMmfeCCCjs(F zz+CQgyux-e=G^SI6jZedqWu5FKOsju6nYeTvOqm-FZg>fBXawZS7TV38HjMbHWf(f z>9wg3=I!hKZ9lg%d)B4B`%1|dqIT!JKebtTd<5%y=ty7D6>gnV(&cgeu*k-@5$-m$ zu86@B$8_fosG_F#&^tjH?_5X+iNJU9nW}#>D4_lpfSDY3Oq#TzUA~qw(HMOPR6Ppd z!jMaxzHGjO&ablMS-s`n+Rv3CHBI-3%COZdAQNUAmur2&iY)zj!47hgzok#R9=7Ps znrES%@fLY6^*FnHPez9rpKv`w>)~sW=OU!(2^h7JZGB?HG~P3;3%`grfi2SM$T=EFsNwO8x|S8 zOzrL?m>I9i>AN<0%E;=A^wR||ui3W_L;FOBs!F^=YXmzUQ}l}j28*rilU^-0Mh`hRhjiE^j~Zo2#^p@5T%DFOao`1ZQfpsWK5ESv zV6|N+jXG@NNAfKpOTC?#_HCUJ0%_T!0P0Wb78QmThDXu;#LneJghJ1wuMDjeT5GKx zxD0bT{#vi*!6$v>wBc|C1}h?mqzxHgt(^r^a@)hq543b_Y*R5xL~J}vb6r>xzZj5J z7H1$t+VQJEk7Q(Z#*$?xZZ5POZ+ktboWNk3Sb8`bw|bRnHV#6Y2PG??{%)`9*>UCwIyCL+2a3guzh)ci9v?bU%xph%K)Y3o68|4+_zmzEf~ zsC$0w5yJwa^7k8K1+NKV(H~bPcBDmK(0JZlb}jAd?c!x0R!k6e~) zYG2frzR!*n?6J%}Yi(huFAk4;0BasMd{Fkp>E&CMX9KiOmGV?iH!DxnPbYM1?3?)H z#(_g2#sq{8)jlX=^ zm-TYYV^ELakW-vy)y5(xQn)#cOScX0*HfFd7QSw-veisYIO!8zl7DPV(-ajJeSP!k zE$WNLyao$BdXZ+fthYHohUIe&>jH#G#picmFWff%>Ncn+jaoYIWX?!i&|BkXtpix2 zRxd;ZqP0!s@WPKT@BvHz$w_l<4yLcuh#X90&O0Wx)%}w#z1EC#g4~gi1vwV$o3)ff zP@0!Ge&@}Jt?)rX$;E})%EZmmrm0+8Z{gz{hBfAGw8c-Cq{Pj>t`QJyOVxy0Qln$Z zwK4?ljY@9LNNaFZz7$P=>>~)Re5;&$(a7GY?s(J%=*^VWRvNz}7xgBXS;-*@!ZDG= zlhrL{ci6|6=|g5cloRBDW~RC03fjRj*vJd)s{y3+i4S%N0^%~sDz&!k zj&iv6L&xKT-pUtgG)lL0JYfQM;9BqJN<9kJI=vM>$MVe|ytUfzTg;87}WV`bWSaDOt+!OmA zyWD58(cLBnA7fJgu$*n@T1v9oY_SD*(9ZPyAI$tyId|{vp5;n!e|6=h9{J*eab?uo zl&gr@p(p8AyO#D`X&&&fQ=XZ4zSfR&>d%pME{V<6mW0Hjb;_3O=$BBI)AO3WVrokLn${3XGJ0WF zKP=1?wwk5YY8TjEzS635*{`{;Ire09vzHai@#)IM#~XqhY(m|Y4F^dZ=?Mf|OjIbOI7(>vYPv$asJZL7@4Mb z0{@?sSSTbMp23)wLONzB{#+nra6NIu1Ip2z2HmIrNi~*ujZ74K-IFWM_>penQbEWh z%92~b#i8Hw*{2v)BbSG?qehBHCw`I4;I1>Nf|{nCZ$&+Jc@Eq9yGft%QywdLXd}HBHqtXN#1G}~=KU0_GJ5x0s^WmK?{`UW* z?-DM~+VACo#d)?D(tdw*d~=0rQjMv(E%FK{Y;hAo7=^lSZmF4(MI?MIEsqsuD|C}r^0Dtl)k}lOG@7o@%;(-{W>0deyBT`)DaqA==h{n<#}rFy%?Nz zmG7@UE(oNnIYL*lzB$LOw8lq3DDI5B1!f_13+|)s`PKw~`YJOtw2)cUfgwnEz%ff} z1RT58sF(3zxNCE9CWxJux!=Ba#% ztO`AUvWM-5wZ}hjYB2QX$cD~;U@sLuo9DS$_FSHSCJuJr{3+X$h{tN3mrik5Y&0JhE6l+xlQEJG+~2+X{Ar2d+dD1Dji<>4q z7M2GPV=7Ce1ixn|xC&|V{l2?F=kp&WNNob4uhRM7z{l*fxG9cu9=~s$UwR{`5vK32_%q|)B5GsTI(WA(J0EK(wN~1&16t|g^2V;%i0H>MRXZQxMX)!taJnb)5mUr>H@_zOKtD5@3|}qwKf`Y4AV)u<0Q}8Q(a1X&vW?Ac zEMB`n8J~J=yK__qZ2g1yz{@{3Xsl?LzMz&lcbFrHbl7DjN}K)(6NzK_6+}e6FEPNDZtRS*qm&maf4`>{&NJK^XN#@9_>p`+EhReu+5h;-JGH-utxvJ) zZ&1_#PddOlU2xsMO;Z%4G}vaZ7ILASE80S{-;n#(D-Nf#Cfc4IwXYalwNUK$93 zcuEx5&FcHjL0oTftgpe}1Jb9A_V4yf^|~AOd)YQU^5%mQ_dbQzP3VkC$&PRl$v-)O zsH^#b3}!J(Q#17+<6|?xFa*Ut&pYjK)v(WTlcLJMce77m@TFY;Ew=iZ6B`DNJ+~^} zt$$d&>Le4-5!rs;=erS&YMnw{vfo|}I-xmaPb;Jd+I%TH?IX${wtcVvuv9#jCfdXjqL zsu`y(YO@9SE+Ql_5%|SD@wE)d~_v^`;YV}&5n=uk* z{t0WkG0B(Q$hot5KgpWpsd*hnE0^?=pMLL~3I6so#CrEnhlG+|(i2$RR`q}y#Tb)` zD5hEO!GT7X{+OCrxPj{5Q;SdB?#tBGH`R~|AMLs$KYCHeSN+J%)IR4TSCgfti}oZd zns8h6t8(Sr%m=$^-745b7@KeVL);20f3j~LH2XcZ4LdphfB7;~8@J}+2Hdg+4aAO( zStGS>r-ons~)M&sjXkjNeN^X9!^&V+Z@33ngWl!GIt&cs= zc}3Y}k-#L{ILT*9EOn2{jEQcM@(Y||%$9Wo%sbnmQm`KLkt^;vqE2-EIc;~Dwwbfz zBBiT@5j)!bz7-zMGI-_Q7-RHopB_Z`Z-VB?#XP8M3}Hp>n0L8>d{XH@vy4B7-Ga!3 zz$?6|JgJasvTPpYXjQlPT(qnLYw=Bd{?9yb2L73xo_u+1Dr|5qW-~CFREvsgctilB z7!A^|WB+a?r?s~w&f9yYg$Wn8)-kG&ZJ!#(FS4k3Cm+-M6UCoVBmRnn^5EmR;Un*6 z!02ve$eBcA$q*0L6?nQ8O<17m?ki80{=}=lO>AZ|1eloBUMD5162_2S>9Zl*jRK4# z$9(Zs;)zNP94m%L1^Mm2TylJV1nSqI#ofVtb)0NTGh$$W`6@gsgs|;C*k!zY>S{(t z{f{wk6Fo-A?Om;aJU8czkEp%Sw1RW}VR5VwDb4uTYhgQsdtdY#K9LOGG&u+i;(KNN zspcgKDtHDS)qk6Ulz^1uUy6q{6-gMYNIzBV-U6{}WbTd7O^o{Z@$yIr+_+7Uk5~QI z2OF%tTIrY}Bz-AvfjyG@hEcxGuR=jwqUJR8k=-Fphu2xB0wO+idKIteBYdNU?6S9 zrt|L?|7%+Tf5B}EH?n>wO8j`OJ+{k9Id9V97d6OH_7i4*4GqrE!*^HC{nh>%7M*hT z^K9{d=lx(H<$HB3yn^L~8=4JyL{#329(hIVFz087;HduYyA@Qx;ry-XO^>F2Zsp5^ z#x>pYy!XAu7}FAkzTMa!TaqH=QS?%%`QypXx5!84$w1D3zyGHhckmHoB1j3SH2xcG z(*Xs1`(|qOBnr|2FzDZHMQ!^gCc{H)4jBO!1*V_BV#}vV(EqGqSr)f6{U%qRT|Va| zNRIy{EIjSJgO4Pt?*b6~FJW`e;6_P3vQLP7JtTyDpww_r4 zF*+O-_`SB62(YmxWy=bQG#2D4{0^dNIfu{X;G>b7vOt-x1*0LZ!%_JfQtDKzKuof7 zTHM2vh*nPZ61U8QBx#w-YI$x8dpxBHD#rM!it|b-?RTxw+JAVAWwJCXdhef|`i1rM zx1E#YtQ%ZFf1jFuvX$KLYX=@a`S4!93bk`;&Me@ub<2#8B$x+2lAqds{75o!lTz)( zjbMdx1icWLR!S^)uL7@%IOts$~gHc9nRhTA)o#$F~@+MZ)&f;8(9h8JaMtn5ms)wr^ zSx9ir4ZU`kf(pM6@BSnd`$XuwQ?3U^DgitR?SY?=3NXp83wn6tBG5=`xJRs*?5-Ml z?i^tO61X2w<3op&sk{W@i2HF=WuC9Qi{om+~w%v&rA=_W@toh{|OZ zOM0e+fwF~^YV}lql-8Zj53L#~0(NgYLrtJ_Qd#E`0t7YS)tpxQa& zm@K~@DmFzuWa)Rq`9ZJ1xLfCanPK&MnnyF2bLqktD{*&$k1cUP3q4Hm452Td8tv|{ ztLg4Pzy|#oO*nXNxZ7xO>NJZT{^#WuXsQ(->_fym>kWpInZVJ$82aF<+JRNb*ENp_ zFJ*?cvm2$@S!zfjVQPpg4gq``pqO+MC+!%%fngzwdxFU^;Pg}(ZxHS=81<@A39Yb` zPqBBO1$pNiIhX%YMPoRIl6@)#2z5^;)GvIx=xMK^YFwu1D^D;u;yNsp9n;+x9HQ70 z+$8%{-xD5;>Zc(YdY$Z*zk0L|E*P*s4&<_noEstLqlug~n8%d~ft4R+2l&W&N;LJ( zh%m(upub7n0^IeZY@&q15Rj)nS}-_JESN1d_*HDnuF|nDk9qsdL;~~{I|IZ_G&_Gg zJLMonPUTYkCF}H@jb#=V?6`O>lK5K7an{jaGb4MOwGJAoy4yi(Jtku((1Ua@gD{>5 zIA-VRLIO7;`OG?XgznXakeef7Mt7y;Rkrg;j6X}?{g+}iA$yx*&tz=atM@W-4}xW3 zo#Q6B3cx7ZWlj)oPMThM|A1&^@!sqfCB$hjvAFm3ZTYs5)O@~FRShQHwH zGp`P6DClT>aaiTr+pIt4v`vM`g&y}e3G!v6Z@K&NC0PD?r~#EL*gsbVn-D1Nnk~02 z^1)q~Nr5}1!XK0Mmq;d``JVxb)i6HAc;!Y%wd2oKscl)-X&9-%pzAbpK+NzjkvT3! z@9=@1%iz@YnZB7!&P@efUB#YNQ*J|7Z`{sg{VtC`gyIjB*j0!PDowO!NHKZPpH>JH z7{3h`PR+1UP#5!@!pxD{P2rXNpJ+_=-y^n1m8>24NWtgw;FP$X5u0Z9VQ}RYLLq|Gw{@^{0TA= z{~;zV8(c^kd@M7i>>A!#4fj>gweu&@Xg1$i#$ffueFem7lsKOLPSDwktU#A#Bfz-^ zy?-Aejh?F1J@0G<%mnIH6Bu<_F*=_m?xd&#R_9h~Zrm_Z1>+V^5TIUDL(f zz&jdsfjVu2rSLkRHmd~5XuhjLAWufz+MiJ)%*m5(U4|;R#U?vYZ57JZ>H_&@fo+sA zGwyF^X)@y%B_OM3eFvzj_JLLx6ZVrnM+gZYO@3u*I0Y@fS4@|I#u5JWDFJ;IX{-@6 zkc>tlXCz@$DD)E)kL?g)UcF3qv}PxqkRXBsC0XfpO8DlFLShub2nY|+JxQa<8ano} zLylf}Ev%JdGQuW^D|dQAYnjn;<ZzEeYNyZYF6l5^ zt+KvIvUx7btR>@Pd`zOfzuGwF-Qz(ZT$0jUA4?XrO9I`mr zc^$kGAGB&6G7C?}j22OMII#E*3yGJyv zL^1Nriws4Vh`Nw7UD>urSR7~k^CY_R77_Bt`t@drgoHhn%`r-;GL7S~SLk4(HcR%-ja~l3ydY5% zdPFc}dxvr%4PE(WmNu%WlRTy|>YWP8AwMv|Ri>}7s#YsN|7h|X!D@eI!AAHE`jZ6w3^_fyA*S?iLXuqu) zM^lFpxRbncN{n|<`ym`^pYqF`DMh=Vq(*)GSvT!_Zki_~(p!=Knw`dSkpj!77*k=4 zkb3ro04EiN}4>0)6mJmwx3!gLG*#pEKl z0r^K9W_+Yn$v<`K*YJ~|^T&M!KMQgYPRlWca+=IpAlL3t*AmsAic3E64nqiJ`x&K& zrhOIV_ikq-s7wc3U=Vf%n84f%^YxUGuWA1+ovtW-=VITuLZc(0KjfT zh!&IcGGP98ctKoXv=C@8z<|QT+h@pnx!^aD`>-FFR-W^+kRs3UgYeuTo|@%`hW;n9Z7 zc{9`?&o&Jqmdz2HWcmdalLV!uPcLyLf5?<8ztlMg0$B#WSQ(o5hNUqfG6-*Oe}6iN zbv1Tu*Vi3SC%lmOJ8XME5d|OuU_=ugVe|=7c z%V_y7#GpcW#|!BBGkpKo3-%U={9Za|K1P62-Kk>0v-cZb$*z>nB4U{K!n!$M!}D~` zC_4cY*$II4fn&)8cK#}`{5X=S)v+U0EEUp+rxR2C;L(qh>k;T*(A{jWs{e7%dm4V5 z6R-~rujzdn7BEr0^F-)KYsqc*RX-XqPtP!TdHVj}neR9RaWwKq${knszpFfl% zuZmFG6puzVQ^obML9|Pn0IsazoMkc)@f-&Mk7cTOCj1U{F2U{X-?(XCg3`lh*2L3m z(1{K~O35ATT{p|YF$T!3F z>wyZ+PP>pDezw7s%42e4`#{W$r6iM^9Q>w8&x!24a!MM?h;F{`DZ(<0sdH`tQUWTQ)A;=9 z;17X=@Ax>($Fs!Efs4($+ZG(X@ktLfXAMydL)7@QadAeWimY%a1LcOc+lsLj91kCt zsyFw)sz;91pAM`D;CzW!J2@L_8gr*u7t&%SD^VIA?e>iHF4e~lT?i)FL;Qg7G9eMH zC#GAlR`WXKSL3JS&`uBlzR%z$&$BSRrH+UmFEl2aUYHzSuNc-k?IT~NsFeU$~ffb=L5`9 zRbPdJX#2a=C&SFTT{O-ZO#jpL@-TO3DmiO52UL1KhsaN&k!7OklxG+=3AB#Ami0>V z=RXYv{|;35o(eb);RF?{A-iCLuB?Y6-)8`;LcY(z-~M7V*hO)HyWB#TA~+@z4u21YM6tYfXGGzKcHm}zK2Uerfo2s~3t-C< zHm8q;$?jpu+Do%81>giW4AH^YAeA4@pD(+rDm%}kspRZnmqSO*r~h;2IX;t}BV&}> zMH6@*!y}1P?u;?nH5XZ_8q!aKN8aa1PM)W%Ww0QP;3Kkd^Yg&?UH4Th(-mh#pHBw7 z9sKW+L{I3%`=0eU((H8eX|eW=M!$bZ;omVgKAQoD?xOv7QdwWVIc3p=;$2QK#?0A{ zns%>CrjiYuKUm0Ixf@JotLlC_l80T4bf_6m>_AD z5wYFay%J0Ux|rkf3N=1TGr`Pj1Om&pc*$E=ZeWqqoMoDkP2-9dpbw3?`c!lt$JQ!h zbT4D3a3+ErYA9i=5zdIBG5;12StiR`@+T9s_=}0zeg{mC7%t|VU!VLCBDfvK!Gw}W7M#$Y=7oG}TV zw8XLPUV)0!TNmh4zzJlOZr6^%>64tvBR-wv53-Yt;)$qXv6bmV<_PF6)oGu6ikc{* zMiBJ1jJ+~oibp}HlUdl>H6f9Qbdwi0d=t?$<4%ES_&u=ZvQ%A+tZPOIhIITiZTF+8 z&VNkR9ziB?yk|AcpXRIm>#%zV9^ZXx`d7z(EOTsHTc-E{1-1q*dTEIpfRuoSk<3nQ z{GTwhacuidMDBI)g+cIR8IKFTJZ<)we>MAdnc0t=Lz~eAT75h5=3OpJcbQCY@YaTT zuu2s~)RSVhGlEZn3k)#HO@7l~O&+Lt)=2fhi$rqltJ5-bAVW@q-GI&s()zz9+3cNJXy!p#)+{Ki$&mM|0oAi{)>BM9Fy zO!#xsRi>o~w47E}%wLsND^nJp0>Q=(u6#Kufph@VlVJ@?7Tv*0o{YnO*Xef(KdVBX<)uSsK(KZw*ezAvt=W#^sg*`LoQLpa2Vuq#89SU~lW4 z4QeIAj;rW8yz}~@bU&_2`I0pj6>ejdarL0e8m2MF87e=@szyM^1Js8Lmn(Rc0Uhj-BzdH5)p@WWjp+p}{9yV#lxhc*IlsVLhr3@lNq8RFII$ffqmIIcJmH03d&bPH#iaPA%D$tt2sG)sqQD2j8h- zXJ}`)Y`US9F4lmYL2>Jy6m@DV#NY<>D3{8qlp}TLhft;&&Tq5C6e@iBY{UuUUM!In zBD-V9YGnVWqmu8B7YIeh2Qw($Ogv-tr$e_4m1EMbzqkMK@yVilQ)^fa% z1!wOD6-!AT6^YZ)MV+97F#?`^Jfe&Wx;wy|k7VmF%EA9MFOX{bllVKxO&feuq|)BS zJEwOYP6d@sS2btceip?6H9P$d{7D~gWNL&m)m*8b{<{-8D0o>gLD)U z%r)3SpQFa!U`_CxkmNa6KOC|DJuN%JNm$UnX zCxB=kR9l=8DK#-cyP%%$l;*EE0$MVCexv}8n9Qw#JgTTt4p*J0nOE*sm1OQ+2|2?& zJ<-k|6?>$^=d-4TFtrLKp{Mu}v7q}>+O+QWdG5p!%eX8o`Sy;^b?Rn_S|WseLW@ zSm#ZT!DbCm;d#`tVl=vnV}t>t(=s|WBgY}8zy2{!1X3Ir4}opwTmo&j{Q;&EjXCJs zZj+zKq%MXGeN0%zet^t;?+fP5lfbZN_*nbHckQ5E2OI&QOnvlV0P&}}^C3(2VXe)$ z&lE!v-$4HIF~no=FZv2RWILsds`($+!6=Cn%F z57R?y7xTzN%yit7i7t63OdTHkQKekbgDcX*5#0VU@xb_1wY~r z4g0HG!$7W4B_GE7&-b!BueVIK^`gRP35D`WJ0@T+EyU>46FEdyjI<9p-=FRG!m`@1 z^}t&|BKYNfu^AIu70Qqp(E7)nm(6I%+j!K|I7tiq^U%l)i*Z!gqtJFyHtAvY_0Fz5 z|NHb-p(7-4yfq?Xwya^T9o&k1LXk4%Ljr#yj@omfh`Fc*)lrVKeIzn&7zPBNZxNZ-CACRq$@$=iw|_ zvN9ujojVF%vXd#;<3B$@^3BZL%xc5`pEkL+7sRfvNR7l^Rm6!cvbk7Ynu??tHpgz> zS9Q0-&TV={rq@&zHz*H?HpIe(LBo&0eR0tI12J{R4VOO$ER}7tBRKX!S?}UR?p3~S z?`5loFkutLxT(|)ypU*sisfxpd^j@EEF4EQ!9_cs9#Z<`F8(c+6>XH72+?qPp{FnX zxuR$BdE%0E6G%XO->~ zf2X7#Wp+Uc@x;)NZmJ#|Pp`u+?7rGp^vjpyp=)N$Hh|x}`Fk0-TCD2^e!patQ2c6% z%b*_MK=7J94>EFK@G`(Wk3{15Er-gYx6mq=-mEJ8&sR%k0;q(nX;I<7TQAIq-dcoN zNFNWgf?@7Y?!lmdErShY)V^rUpdLA+J?mo6Ye0J zA`;u|_O>#3??*?yEVurwhmg98=dNq?Rx4y_#tf9m@@P0;LNetnls{=vD zax8PSB_x%1xCajRL)mfN2Am*ImV?Z}^V{9x*P)h)ZaReoU-VsK6TV_EpTmt~uTMmFHR^!r{9 z@%$l!$+3OqtT7=Yrc3&6gNLyZ!Xb)%r>&a(Zpkb3k%VqrX$5$6;QEY52WAX*&kR!B zMW<&TPS|*u_MI{B3}_$n3M+e{q@CM#_L)}(8$nl8nGgXj~P?#Ds?b$_gnFxGHnvcR4OQ6WfOVFX%Skv zchbv7xpVP|Q*8TzL_%&8Nx++w7+LL-b}U_Eyy$5EyA9HJFZe;{%e=1}{(2ss0Irwf znJA|uD_lw#v!)00767EBn32t9IFZQIdc!+xvoucMZJKh2psE=~Fe9)n(SXeqdvp${a1|N1z$z>Ni}R&mUms=G6D7 zjDQ3>ep|6aR{8_wC4w=vUd+Wk@%FUkOS0F+NWe9<@DC{cjaADPCzVM9{8L16WWr=S z#fDu|)Z~>_oSW*&et}8AkLWSL4dT6TJVUy6Zsgg9E>38z1~m8oiA^~spHZ6iZm;4U z<<7|+*4iJfk-d)TS0;_G5+-fL4WU^>n+u|gI+=S_rijY(mK3;QI0IoDb*;dIk}gRV zB})WVW|uz9b+aA!a|x><;BtN@Bd#`&ZK?Ur7;0?qqZ*dsxM2vnsd~7EBRr)=K>45& z@!kc>eL1#8Le>D*BlWia?E$inh+~_!W!yajH&V+xsZP!(a`ms2nfZk<-&xZ|x0LZ8 z#$wfM$=2KpAx>G6w}fT2ejxvn727H#i+hx7`|)l`b}`qxdVjmLd396JzMdQFaG};V zi14A)kxyGxYPD0w&g{dybtw$RZ;l)HzN5Us>a2kZ(EeFE%=iQ$!(uIXz0mZW1GD)G z!B>07o1n(=ScB~~h|p+?2CL92DkB8}-r+g5jkPcx+&LpomJQy{ErZp-l&gJi+G--1 z7XqNgsT4Km-X0h2LvP9^4bFF$M`eb_h>le@vv7;m6^YyY31(8$sG1gPX&Iu#uVW9~ zK!~KLyuj{f@%UE)B04-V%KU}@Z=yjA+$5v+PFS9wx@hRKqxK~m(}mwxiL?Cqww52p z2=2XOS6fGZI}|3U4enj`t}z_jisPQM@hXU}S(r6Gk(yGhakiN?{9Dg4vpI!7X$$|L zF2qiXZj}+CiK(>&^>g}FIkvR4N!}mtMLo4b35s4WZEhFDQ(g{|a=2AYf#mdJzrvJ) z0QUQ_o0~ts^)-T2U?80x(|gIot1#znE<5-|A~udG{{T=7{;@UL}9lEC?Ijhiz z8zdFS60cF}4|h!69uW2F7i>cKZ_e7H1B;>xf^3!dUX0vd|8eA_sE)q#RU`Er>9?FP zk;_1qNI5cN%6*@9v$A>wB9B|s9c$WrDw~g_pBiEh+@7%2-lKEw_Z&X6G1|H?xv-qg z`1QYm26FgkXgJbEa{TyKMLUxFgK}TL>BA3;&YJSH&$(i?GX@G^9pl?K2gh&2Jh;Pt zccFB2B6l;Gnfryj+rm(>cpWXZ+tRomge5(%RyX6VU5(?t?ANzHlG|!16Cx^bcZN;j z%_%zpYn7yu;{}auxb}th!NJ_%wobC&YSnw!D50$?&rUyeTKLTL-NB(ja=#6-d;I;& zHWyl65r)Iyi|WqSxaMz!?iR*sLCfB@jubvWP;qT27S3@V(OV`Ef}6i+^*hS=ff7Hd zCy(#OZ15*!E{88Abia&#{DNBlt{fv3F44I;sW%)AV>tGwQFi2=e~lgUT84rR6z=C% z6#mUc%9%8m==;U`uA|1)9dvk;#(9^g z{6nPg521q<8NlfSB;=p@QL@*n#%|qL_7RK?n{e9yzxLids;R5{ACC30T5Po_h*p7$ zMS(yN2M`IQRgnrJWkv`@NdXx`fXEO6!M5TMlqkv|AgNeD2oM3uz!Zyy$QTtFBq0bP zM8-%031R$QXtA{Q`S!bhf4uKn@7udv3s;hR?m7GH@w4|n*R6(sZ?0{|QVzCgH699o z=VKi((?f%g&%L#Nkz*hbV|4GTbA;^UFr)@ynlt#kq)~zM_M`}N-@A&t<3n=x8;yRv zMsIN6r7rQk{U?Rcrt!V!n!+^NkIBqoGcFapbNGdQ%Fol-z`@Nuh6cF(Hsm0MY{%@K zU7yFzx$=8H>Inu;5H;P%nVu5N&WU?}!MDe#Be6}!j}Y4P(lNQ+wq^gwSob1$4Km~D zu8f+m8&+%d7;Y?T56{&h1}{nE;;E2^jYsd-JT|DvoI1^}``G@4=qh1{S)6({cO-SY zK{X!#Nt^qlEvNIC9QHA<8sPZx>FHgRpB92FW#x6WgQeZ0N$hVoHLX>==BlXxD_xHOh0HdFDb6Dw~R%j|L(*KSHKC`{Nd)N!D3!G}Z zKdjI?RXf=kNw?k5o6U8=WojZU<7*O2W+&I(t%eBLv7W1jb}#b-;1Xu8HHu|7Ev^&6 zsp#9v)c5a^nf7D>F9ldU_O$Tan=PKFVn`|xz*F0+DK{q-##XB#z;WA?(#Ev*J{uVF z?BK~D{E7BwuZK5nRJGxbz^rn7GR1z`$Zh5c841UJI4WTu7u1FSmsa`}h}odp=zI6y zdKLVuFv;hq{D_X!{e=`F_o^K z6sARAW7Gp@=msEi7{Q!kI}o>5R?mNN4O^9Bn|i{aI(2#~I_Yf~a9rxl&vJi!-1t-? z@Ujb8cO3PSKJIjz?(an5EpYhi@m(oB;Xk6k+PnAqo1Z?jn0k|7SgT`B{Q~#M_S)6_ z@2>COyW3i;?hEA~FMXc=^MAlb-cOB_jqPvL5e$kvHznN*%{02@!uUD275lt2_r#ZX zqu1T~eES}P&bhBPMh?-?^R)K4q6PP1nv5^vl`V**@f)4P8{VTVL z==zs2Bf7Q1wwdfsRj#WL*&q-*Z!=^60*Xwuk$*UK^?pxR1~SR`)UMdGB#e2SeVw?ciU7Ub&|_6ovT9y zvw7SRQ*o7;K{%$M+o{WgEa?yJF9l|QuiBwUfp%b;pmlUC(_9i|8(yg|PUY;>9PXPP z3u)*$VrMa6le;c&o$GZic=r?iTH(H?aLuEIpC`NGx{!lW7=;gc9WAoFR9k^fO*Cv= zQ1jPHmfR?W$`w%E1|0aC1Tk z=<9eb-n>rjXKAvd5tel9)xMYI7%nD}@nEx0UR84vJo~USs}7Z7 z#k#BSmWtD3PUR(TCr{h569g^X{=m)*a=y-|1KbA4RgnjH>)2g(OrcHRL7vxoMG4f` zu^ZAjBg8yoKRn1(#Wpz#ku~2FLI@#kz>LhBwBV46O!DV0%EHu`8Ftp7wKsMq$FxzD zoM6nLKRVFjrNEK}E=0cy+h@efZfhW#R(7}hyQ&7V?I|j%VTu6%%I{1snag;xvOUC9 z&5eq~{Ty!bu4tSi!o}-b~_6eyBZAldpoE+ z@8cvUuQ#n$Z9W2aV--0_jp7?dbuf3%6+KKA#!5pq!6Z?>U_h1UtzA-O+tl0+5AVhf zg#^BYc9`2>D*ZI1p~m(N33DkfKR0qkY{-^Oi_R%&rPW+Ug_yO924kegbW zTJVE}knoLV>s$@qWpW*^?#Y4$-=RB2H_%ex>19P9*{KBQ5=mrG8YyycsuYk7Sw`?? ziGXpg?O45zi)y3vdB4IfTD^amy2wz<3+kfqLY*n0sB;(R1RnZSdXjcJouV(M$)X#; zIYQAhTD_0FTg0i7(jOKY5}+8$fq-hnmzfu>+0D|D~*K$-CC66MY5H0 z@hRmEXW)bo?vm842I;Bv%B+-wA3xH339fCnQAsVn%jILP?K{bj%>SNBMW9(Fj{UWE zyomj3*P|u)&`fLw{LK)m>?_J4SJPa=U|L=x7ko%o*VqAMUr(|+?WY?soBJvz8(b8J zClkeQS{yGM<#Ow4s*TEG^cCaPTpuhmW&_r_1}TcvLzG1sh)}^`%R`p*0ANBIzRJa} zxu)eIuk@2&AAxipGtG4<6?Fs;C2me}dF{?c z`&-DGxFwiSXGv8*`)JnX*^1Liau2f(`1wW_1%5kWRJwI1A|VHJ*s|tQo1$}*__Ohf zCa^N(E{0z$Nv}Df(o5B?ZM(nDHE-S8y^v*jTm@1kgv{JuXL6=%(U!jQBwBNa|6q&#YR1jr3-ts|`0k<`m;ycsF$b(vN*c$SYa#gpSM2QCUJy#Pqyqzy;?vHm~6r3KQ8ZJ)HQ3Urn91n~Ele}v=870|-WKVDO4rB3LtdrPF1(kw%5`cvw`RR6sp%e; z5ZcLv;OdX;yjB(LaVcnA@b^df2dKg zqXl*E=QI)7#C2z}voL~TTcdpr-Buc)4ADfQ3$yqrcd0R8-3m()7Kshef#E|2n`FT_ z5523WWSlr-rT0P>0SMXN1TE{Ft?joO&zyBHZ1gF(!G2rsbHCh_tP&+5_#|(#x3~oF ztS1_(_c);~Qe=%>lsVr_TqvKl$tkZIeHn4DNa;|yh+2uG7CmDpX>Mf0nMhe9rd0{8 z2=oiwAPI~bjsD&PdAXs(-VS_i0ES2s?K-JRbk>#%aD0-UC_4F{CGPEeiF=C~Da@rh zA8ydj85(jz`IJZ1=qM%#P(@5Mts~}Z(bSWdqdHQmjb-8B6yuds7v=3Qp(HaZJS(7m zzyQI7Uuz?hw5g=EEE;xH=lXFE-Y|^QU~TtK|;Ugur%}TL~SAszh9e5rWC@ zc;Tedo-6vUnvd14;xj~TVm-``E}X-)ZEVLoB#h(loCm+Fwc{~;napcJPCB)tL@nM0 zf7s8i7c)|IAf9G4$CeV;!|tBKBF7D8x3k&_)^}^&DTOI)&&pVTl{1nwTb|wlv}V{H z9T@^%G|WJbb%!0uB%eIrL@%+mAm)3mLIsf5rP{#Bm>IWzc(GNhk-$CxqF zwt3ARc={(c;6|ZCqx&ZYbuDWi4NhTaZV-L)AK#*RfD>8Jei0`p-OI>-kZ~09-NE0< ztfq|QON?!I48J_Mv3j_@vS{>W$tAB)NP`2mG9OM*3dFc2vzv&QW6axIMqkZIhINT0 z2kmTY210FVgr5}QaYG&UtsbvY!_eq8t-!vZo#{m-xS62lX6Ntzk*??dpex5n?KU;| zW_qK;PHUunLB^PxcCwC^@JH^;A~VcR9q2W&cBjrulod*tX?heFTLT+H0cvPpIgK28RXrZ z*tbPpTR581ZMi-rv*}kC5>Z_GIHwbT*f4Y+>r>Gw4yk@QY@lgn(Z0A3(9456>UgX; zk@Qm=pK^ZMcvsY$*_w%io45nRbf?d&-}`>ux3%CZ$Jz<@<8CTWeTVLUzIoxAYD$Xi zwBE1raQ-Lbensat&sgpZsBrMS)&V}jA_-Wt-%u|@P!5=uPn6%9th;J@EzqbMKQ10WJmN{rp%52U zQ{c?glBXTkc+^uS`yhvVIY(6s$EC{e57Nis)$+6Ry%)$lXg!K(2h1_(j?)EV{2d=*u=OR8Ax6$ zvrccGfJ>1Ix76Em4@UTCdb#uG$R@b^-J#~ji4qp2a{c=_#a6dAUZ#hXn^tx_kvZ_+=d@{!aNvc4F#7kM8)Onc5`NDO}f>59#%DL#LXo1M756>JMIuq zh?8{q{U|q+YS~U0o)Bdq9OvxxDpN4Jq~>!nv}skIzM`Llm!7?56MYw<_aP??@Y5EZ zFq65Ros0WW6i9}bJEt{de@Sz$J6$Opbb`qAReufx)X2WhBx^Q!r+IzzW z_RG_r=o6E0@8Axl>*k?Q8*RF8(T)^~GvrH%Y2kU})5@s)2a!dVbi;aSwXbx`6T~JA zT=9j!MjGi?om$;mXTUp*yhR9Ub}#X@Rk5cAyLKMS&z0;b`j3e@waWGobsf#v*X~-i z^MiU?HT~5pvj}ER zNB2v@xj-3Q{@mqyqu}J|+~I(}3Slf*4@_lsdiXR26~QCbmz6o-rAB7zjGyc|YG)9~ znk8YXhR=^N=+|?lY7#--Im-tak7&-J0fpC$xuN-p+zK7r+nw{HI@|v5PD$(&@;Vbk zdw7M;23sLp9zc5&qaFa{0RnRzO+VdZZXh1fi+5+{l3;1#HTcLg|WR~9+>Vm1gs zXGgoJ_Rt}7s}U1}^W`2P#vVQt;4L+Jfaub~x&y_GN7x3;0aZ+tj%`Ho3A>;SQFS-| zAbPvVv^p0{$`KGnSELD}-aRqJSTE_kP2y`xcMDCO7_|G+PsupsjJs88jC1(X zrw8w}EKF3j4;&t#G>7s{o|0Hn%JtB~1|F-*wfJbn2)<~qarjWt89@c$C3MszJL3?p zuZ<8^j-!*WD%)EFH8`y}^J0J6%j<#$WY)eh=X310;wL`KF}}KpC#2XwYFR^3Cc@79 z-?q7^Hxj$QZ&j>Uj63ddJV|y-7hs@0MCP>iWoMzJb0qHr!S2Vdi_YX5B_4L@yHlnf zt3*7(WXzzcEahf!h7O`UFtj+Z)USmr6~7kkCJ10`p81=UnoFv``!kjKmh>#0q*UrMI+howHEweFKX@`y%XP5uuu(~V`As0%<)qI=kdj2aXb287~&3v2=lfQHg}lTy!Cw^CAdQvyF|pJ*flK}eC2IeY zM1evW%g*DUpe+EsNW8yJ{&PmiNJ&BG#36~m)cisyo`NOC|BQl$l#q#sfz;1sv8?w5PXX zyP{*+P-;o8h}*I!QF~yoI1A=KVA(n~_Cvy_7JVL_-4P`x}6_{q!Ps_0fgK zoZmsVKl!Cgstlvnn|%?05>v0a+ZVci0qAoRgO;M-b}?=XYY{G+SG+7SvA>X!GD&?J zRbr>H2f#^g$x+^8c`Vw&P#$i5ys82VD8FZz^NUoBso@WI6@<*_{0@7pWV)+=Wx7A1 zZb0u1Ky zJA4B-5O0!p0aguaYDzo%*Ja zDTpX;9ZzkDtv0>G|KcFJXTGX_MwYcJF%PAQWS8hS_nJ0_U}tBibS2~RfxgU^xtQv< zPsrfy+3Q^I{Uua2q#3=6G>W3-{R@O zIUc8@(j}0xTH}`wDZhUt;U2Y)Q+JtAewG$I=b{?-qqb1h|F2&A4H6-2O--cjDL}ssizh93U*U&v~##G8C{AjVTqlM-@`H1bV2M169$niHk_TzuvrPTbTU2^CJtNoZl9j>1l z*w;Eya>MnSN0RG__1Fxgvq;;CxYK2GMzAZRe8dUz=>VH(Z!Saj592o|%FARid3Y4O zEsX|1<$u>aZvUux;Li_-&r70g;wkWT?v>8xQsj4wr?${4GA*`9=4~V;uJY@mYsf2% zgnjNidYm-&>o?mx;|{Ph0FLmj^a->CjChfY6f@$yI3)%TS7RP1$|M<5IouIdu-KM; zP2$79Wbpx4*5u)0T4N0;)kgW0a`6|Ii=oJc&}AD5ptNI$7_+LhwawfS<@kq#i!*ez zJ{~wTApHcpppBDXAI01$4Dk0l!Z(KTj}1c5I6`^bivmd+pp*+e<>U}mPO3<>1B3VY zkP7_aA5~zzkW&7mi)B-sPZjXol4#z`8b!S!_oR7%M-Jd5OJyBBRm`oG+l`REB@k2%+uSY`d%p?COpl080g7*Z?b zdR$7Q9ZKAK-&Lm(X$b5FQpC=HULNlW{gmxqX?xCjvXgj|W0Gi!#+(x2YhcmC>ovEE zUs1}r$CvTB6?qlg!bQAt)nlQyM_v6(H69;lRWsl8*EzHWOB4n zYHkJKfsI+FReFnJS~F%tDZ-eFq?2AA<9=APlw}V42ZQLz1e(!oHb}dl#)(j}3W5|2*LbeMkD9Ei@BmUO!J)cwfbgJMH#RY?=e|+Lh{qx zI9fa$!hPxSSum>n5&YtMqvL!?f`bR&uqS1r^CQO{Xbm&;Ep~C?P+LX@Mx{3zV}Iuf z`8ILSqGgx24M!JZpa}67@j6BWsM8;^?Z=l?-W%DK+NO@#rx{}WlR*3#+0iV0s-gf9 zHFIxoDtlG%hCkf5;vVPQsm0zWgDpDl8Z6tFMZWXmDTPl*dR%E^h5Z_IB1nxZGHNfj zq^xt*T`P2c9!*=_%yn|H9`4pM?jH>^EhyE3Q_j(;T5kM^B3?w(_(iJq=@Ct-v*$sy zjfHH{+B1r)Yg&3=i4r=TDDcx*^L-zhzVFiX&&1gK&UBg7oRvMfTcE?4yKiRKT(?HU z;_uVe$YSDTe3Tt6IDF{O)XuA?jeTn0_ge2;mO$b1%USYBE4UVAj)0~lSlahBaxIMv ziF5NNvD~1_^3aSbl*L%Nv$*e2w6sfKl_!Y^Wb?uAP(=UD6J{*@%W|%MWJh_vCHulA=@)BAI$kW8fZ5St z5g1Q>4!&I;S2u+{SP{jKi3!wx#McY5*U8Xuoy9?2abx^~2rQ49)a3;2m~bhzKTjCV z6->$!OrMFiNvi6`SyQ(BJ!nk{gDSn=)+2!iCvTBIV=IfIu6Y?5lKgOP^ol3;&4vv#>_(vd={JSd>u;hw-93jddLw$FDO13C03RzqfdXi3wl6ZE{Wq&Gi z$qy-81~UKjK$jOY$pndgU=0RDs49UQeYp3ohj#34&(rvgg5yibn{@gpg66n^XC@b}=-vwM2lG zDo$x4GT7CUDK-Jw0%+|X(|%KPxs>I`c>K)bLrV!-T1wrdGxMDc*u5G_YL6*5xITYo zwX5BGdr2S8TgOgkPESQzyqkVTe4?>D(xUtjb%ujfOH!T|xK$^YM@ulrlyzmEdO^0% zjUItM^g`8p5|YU1=ng;1yY|hPm$HP?o|oez+nBChN+n8geuV99Q9%b;55_Jzu3O6r zAGzL)Umkr$&J-Q;+dNglOxw7}n_1MV<`kV8TlN*_Uhf=6mHNAom9$prb(1z}Lg@r+ z{0`X)G?|CB{6^0j?&0&ZP6Vsy8!+opK9DGyu2Nu+sL-Nmv+&kB54{wY!t$FU6v@@4 zQE<>B{@1NE*9!zB2h&w~(El2Vs2!9H5||32_3xt1s0{_N>}Qxd9wUSQ(Tjn zVRMQ0!Qc$B=py|XD%6}kc6K+qY!E;&UmoQ_4mN}vPCch^Xda)_9Og7(@4%Ojbh|PI zdp0h73fK{@B}e_}4&44q^I;58B)Y<_)M$}kdFgcx7F!e1WYvt=gnWwfM^;f3S507t zG~1A#8AOpr0tO~B!j!Gl*NM8dvE!{hSUJ!klC*ZVyNmrYl9n^pi}9kyh~}P&*}kY;3ULrCDv?wL-HqHb^VEncUx*Yne)iWGKca@eVPfvPpUd{u5obB~Sdrcz2x z<~t+BdIwk~EDLPrNH}at@+4F^R~Cauk#x|OgZjkn-iduBe7A8oe$8NWcal!DFtBwq zM@;}pZjva9?zFh_0Vp6;y`xy(UgB%CHdI}D$Z_2LidKJ#<{06Xj7FIz3h55q;#HR9$8K|Q57*F zcssL9Qd_A{>47;cs3yvi0X>D&7jxWJ>S|o04dc;mn~*l6R6B0kCldt^Y9ey`CU3I) zhE}>YrTtnw=k9{dTYp+sg)3^2)|xCi?SdgyRss3G`mVaM1PG{ThfkhE8g$>jD4s(uevPN_ zr%R1eWx>S2Bl8rwpZ+ourd#XDG#BQ;sqT7voa>rcB@yJ8gCtA;-LmU(G8Y8_#u1!i zrC~{*BUv@JcxYiVN1_mxdU}Kg4bqV<-lRbii;5z7nHHLGlBGd3ci^tX9GbPK$LV4d zlUD3{oa;xt!vkCQCzhM6wV}}5oQr8d6?Ub;$V$oK@{f<){JF49HD+!OB_}po`_Yrp zldTcZ@m!vyYN8nTO#AT-(cwg(ai`fcOTZsJ zm+F;Kg4WnSZ-!>KtyI`P_7_*b*WfGs)n!7QiOd=*PTT^}BBvOmniFOU)>mcZ&h(eM ziKC*Cmy6n3!d@3gLK*s7*=0^Hff8$6bsrqkSCsrF-D_JgCkF2P>&*i_2geCt^Ldyvu$A7BmogfJB$jeH%K%>-&!9S3Vv19 z+=P(=Ny2gcL{tP&JQENSs$Uj*I1EcUtQkl<=M%J&-HRj+lyk`m-@a~7yXSf_A?YL^ z(g<#yZ1}!f;#B_jwv97(vg8KGuuygNQLp$Q|B-xndjs)u#P(K~&kLK*LX3+?ZxKyl z7RjQV$Zn}|^>C`t0SVC=K*IIDI>nkKAg{*N1(uX<%v+8$78U(JY~`CRbm^ zv%S(VUskqD3nvjY3%O*XQA8RS`E^;1iz)*&89<7zFQ%bh|Rg7P%EF{~Pu(%*+D+>}bI z7ttQMbDbca!hNoGe80dPnt86^_*Dpu&xQ2=&aqxED3WMG?U`$;eO&|CXWCE7+Z2nQ z?fYV;$kQsl7tEJGSb-(O==O`yJKa2c?=AH3X=Uw-@+0t^5bEyKiN)YTKvCy(;T7Xv z^^i;l{YG+=vn$)|?G8JBuIt6&=54f}{y@(=(D_y8gFXpHHRZ$40gz2r174xP0k6HX z|2ch(3w|LS2j@_$3QnU>l@9CG#?MaiM~`Hs#w1n;Mkdy}*W{qSyHt5+d4`K{@ae^H zdI!P47I4Qu{`o`tW*<;%1LQs;2$GY$uKmF*M)>e6-$CjY9m5KX z&3#JwX~1q0+&z+mP(T?{{hHE4vQA3CFkMfSDvZ@5_Xwq(ju#UGw{qD^0pq;a=Xp2e z=mKs$G&n02O7jpnPu6`FI@-5Y*0kOAeL?4cEez6HTF-^uE)ju3x-7ju8k_^z?@Gs~ zMV3;`NlkG#8o?mb-P?A!#N z`cTA960&AY(dA6RTGprsZ^3K=%UK1NTnMHvq-P7-1RCG(0j)!wu}aG0@aq2y&! z(Wdq;VD{J`T|Kdy#25g#gyT|$^T0q_Y=I@6iHoQi^};sgR(L)WrBQG-5p989sy=jh z-^f)5IIqAscp-!RCSV!!_^-8(h(k-h+QZ$}@X^WEr%EBMC`kS~xes$;dl^b&k?QpZ zsV}0l4|IST!dM&^0R6$WCC67N=+s6Vn{23)=Ls7dK|tP zeH9zVD5BZ%yvu1H!DoTc96ZaySe?+9p(QdbZ+ZTB{?Nf5uu^a+zZzR#Jhb)g3QhIl zS{~;2-z|#q85@W%tHHmOjZq%cBb;U@!n)Doj<0VI{6^wgtk+IMDk-=XEGw$#(K+1|mB{>hO5YM>%Y}}es$9^gKT3nMwvKDU`|4z6uXtR(K zRb2kk+h;?@?~GCs);%#E6)QAqF=#oMxQm&R*H@k;7X+;EsyXk`eI^0(Q>`^~@c>eX{;Zy*P-tUa*T^cQK)xE9_5 zlqz4I%vw-U%z8TmDftut^zSMy(t^YDplZp;{HC)&rE@=Kq6MdJm=1*79|rv&GI z$yS@NtB}-@XaV>y3$Vrxc8g4Jdl-w5`nH+;IL#Drtd7d($M4w-`3g^gDRi zL4t&)9CC&;di)OiGi=5ZyLSR?>wb!sukzemn|5d*AE*^E^71I<+y%QLzIj zO(HSFny|bmgH!ATHZt?!`R3B9m-n=IlPlcH|03b=B?;f^sPdpI937og;Cy!z{Hv(6ja`>FPeu^g3Gv z0BhusXxBRscxYDS;MSv%69Yz!!~bjX8%ieUW`C`k9ir-ekP7$BaCg5~cv`Q=a#dmX z{DCaLLDTl&o^)C>(eQPbVesj6+9#nJp-uMv2?DS5jB@9GZ)R2OIgCZMK_K53Rs0vD z>D*{z3-Plw(o4OfhaA|{;c(A@TZX6!KWE18+>@xQblRTKkn_;jzm2-I;+($MPFcf1 zQJAp$bJ13j21nVlba2RTTx>rLbh->yokYiVfnjx+I;s)66~htHjSZ^>iQ|3IPfH9v zZ}F=p>y*Ytp`Y5PB*amXEnH`pn*!)R>(Z^iM-m~p*6Iz~+L-MZ0>QIZC%C&Ylu2h{sX#Bjg=zA~!qJ0Bdiv?@8u1Cm((Nyb@ zdyDMqhnmfGxH#Nh8d3k~QK!d=qB|Pg_9^z3-oD9~9(Pd94rdMO8dx<2MI9SOD+<_F zq~KO0NbvPPFV;wfm>oO4JGl3?*Lqcy^P?PYa`9ld?9m=;jQy6z89yu&nD-Fg{#*j4 znQQoZzag&ShY|vu4|Du8FVga=UiI&DPfNKC?2l1F{4Yq^aJTIIiA*c6UI;l8ks>$E zU1#E%kJ3vtL1zHqc~vw`XH?x|gyysx3fP7Tm(fOVRT|$Qs?5!xIQlNKsS`iCr6BWt zq78su7@yKDIA!D_yj z;{nyGj?T)^p*G9NQNbg|a(nAczE=79ApcBX4s;*TdGlM(hDvWS;x;*Z3TW9VD%G*F zm1m^n=^>A=@~^Ok_#2o;Fb8YKrwO$lx5N5K<2^WQ`($aO1c=cZFjeK8mkbt3gv!`j z)_wQ@A=HMmnXO4=M;JxS?w4g`;VjqC9;Xg%;*x%qDmT3b#h&|`sMvutCY8J1= zsz113@Q=FxbGgiicbjnLA2PEa_GYxw{vnn4!S=SIb--pD+W!y5LjNvpB|rZ;O};`# z|J}8}Hgx^Vkbh|<{a4ohTA}m*u!ihJ>DR^%p|hNUR^L~yP{mRiqXWRV?yKG`h7pBd zuX+sB)X-tm&(JOW1qRTqs9{O3Z~6!O|#dF&1`_MB{<1GL8i{jz_clkUnR z#z23Z*}`Jh*Ke`Dv%_^>VzyZBY7MmSB!nGna=xt{_5)Cc*iHx`DMl{)i5GZ4MK@6k z?sLEf&esr+lW?;8W%9T&;9e``KdBj7`8s*J=KRekiZ}(jCemfG zkS})93@>>%Kaa+by84RefMO&#kjxLaPdrCb$1FXQ-=o?K)Ltxh7|LBqbGK%IcLPR= zmr73p#Nu%;QqS+pUD?m-J3`&koBgG-NHhK_eCaveNTNEwCvJuq7b)Y%0i``{+3RR_ zGb2+BSZsYEP{`slO(wz+7aPShP`f4S#cIR~$r~v}cJm`99BZIHp7f@JtFMV9*s)J_Tb0fbwx`)>#+a>=O*6iGdJgR zHRHG*e#^65v1qUouU(6mw=mxtsfle1+<=L z?WJ7zi|a>a4-hkTCQS_hjnd5Q)Lj(Utu}x^5duF- z-N}D~kpE-|tIA_8{KPzfV~W1{joKXqP_NW3Mo{PkFvAu3J1fL|H!v8Hry!R7{rNyo z;;6A&Z!HD?rblyNr;GA*Y0tv-(I+T@0(Fi|SK0RRpw<`;zYL`KC{ z&)hZ4Pz8hNpQ2|=aLivmi<_avLEq0oU348C-P(IlCZOQ!3*A;dZdRimiyf6$O}z7( ze+x#$$`j(|uD-^ZZ*=&Jbm8B|auY&G^D}muE*lAqDIjNP#&b7R(+ANRx!QEPFdR=} zUSFDwS<4>Sq?w#Kz?bt=TN+eBJV0=}`D_xv7%hC!ou#zZ*rB+|*D%IH_%!Lt^@GEePi~?qK#FgoVi0XiiU_egP0A zuY1G6*|!-zF*+t9`4sotC1wqScV(~+6F#x>>HnBvn56c@AY3kLLmcn7uBt z!p-*F^yE~9W{jd60PM6czqEvSgF>pa<~W9?g;u5pnYUq`7w^bD03t11R*n z5SPt_Bdm%2?YGcVvZI4XbT_=|y&~^%n;V@&Pg5%?b6Fzveog+|Q%?6>A0p0MhHv>B zF}DNfDXe7?j@W;hwx#dL?Yb@ZVtZG9kmG-5811g#R+;oeP{n^p(L#8u5ybikNOvN?(_?94O!ne&KACee&4sZMwYQ+h!T?LUTFunW1?`17LypK}p4Es@ zmQFZ|qZ&ul_#lvNj0^n*Or`Q0e-cGwF>3u|ta9E$%;XfO3E%q}==oE>H6)4*2-hCR z3@2z}p#vj5vt5)X{0|#I@M0^k$#k6MAyR_NX6a_Bio~#L6$p4O%Ddq?yN_8XVF=;U zDk!))qy<7%`d9?KNvnDlsCF3t)+)B9Ya7rkyBPs8@>}u}=RQ&gf^E`thTlfb^G{&W zFA}_NEX=2_Z5At&@?tN=EUb<5mn8sq<}Hl;B)9OWeybXn1+)4VHY#mfiyy9kZCJAkl%?pr98=SE zXNE+Xe=_68ocb6PHE>^3su;QgoNJbDj1DF$fsj{{z0ebvsoPViN5<|`rfZgN?Lyfz zCs{=3(wK4>qFT~chKN}Wdc@71j&bHlNtBwnrRPU@IQ>TV=Z`jWh*d)eBVluLQr6r) zfJ!?Sed`$;O?CrCA&wpFw=|6Y6+_y!fNMHkIF%Hq_zcAJ3LQRADoT9TFLnOYN0h{8 z6Vf&-nDLCz1Qdc}6}86J9EK1=?(epMGJ&;fVC0F2n2r&(ArKH~ADNkJdo!!4S-DB7 zD&0b^jqTO6I6R|$2oz#A_sWdlSJrlOk=n_Wni&>z{^>~S8_?s?i776BNZNK2J1=dM z_W<$Cym0vo0ZagV0UUsLh~xQcA^+epn52GT-wf+8C`8IawajU1TKP&~A4A8pfR%3A z0iwrd%|CJB4w$=kEAVMF=eH+FYvN`sNR(4o zw0Li@y^&RY=0gdS@_60yf=Y4?H;Gp0AD1ANj z7GPPHVU5)A$*K!n!4I1JzONnLA!(0#J%anWWPaEkC*U|B%$L)$4&ah|W1t=UX&d}`P!HSAt> z;qq{6+`?cbbB@i#=}=~V#_>GJ9PID}xI*a9n>BU*xXiWkber%GcjyKgHKkY}PuLh-pmBgA;MSC>$A1h+Q zweQ5%OyAQq|MNhwcbfc#Gpkxefx_hRX3z48V zglZu6oqRlMr#W?FCff?HZ#|+Ahnkv?-wB(J>oB$_BqaCsQT;Wi?d(1RsqLQMKx8&b zd&YaF`&?(`PZlhP%i5BC2Bpro`@D1LbX3>n1x_C5!uri|m)Si+g*b{tDYi%;Q2_0= z5zJztS}kVdW)Yyr@mHBo1Y*f-WEIC%1e_*jVEgD>F7G4I#-8;|fvWgwZN)}L$1Tdj zbn2X7Dp!keS>X->r5fS~ddu1->qKDC)(nnohbD;vIum4p@U&Iw?SB`S64S_xQh@s` zK_ED3Dr9(n%M%W4PG&V%{I`qoR;TvrmA_ukEUlDJ9sAn_0g3_sHm+9K3;TF@;$j>)h_Xf#m1^L(0w|laZRA#ukQ{X z1zwu)`&Hn(4tSf(Z`apt1>0(EW$Qm${@`8FakH{;tnnwdLmMvvZ!7)%nzgwl@qcMZ ztOJcfFAhsepun-=zg-tP(`=*HsUb$77i|>Pe|&zX*TMa>qx9whMKLt%(u>rph3*A? z;;QA_+=_FXhxH&H+xh6&bCHY{_c79q#hjybpx?Ocgug@FgT93KlM8WtVi{<31x}=7(6I~H=0^xe*!ngj; zS??F{@JrnyZ@Vp(rI#a88wLJf#QM_!{OtEjpZnIBUIB4UX!CLwGu}_+ozNR*98}*| z{z4KX=`-jk;GbW!e9N2Rr^DHv3oet1K~?>MT~&sh_oJod-*(~V%^rqcb)Rg^Ho8Eb zb~jtT4K#1Z`%fg+ej@BTMd_cgCU^dHeQk)y)-6LWwDR*W!`5&ugdNQJab2cKKJ2Luq@|Jhel>4!tY)+k z9xO-L&j#P*QX0dfIz$ez&jfu``aNT@_KBpg{`hC24>73>qBmUcz>3-?(c=uu4R0(? z_?M4Pv)%ra($W9NFBk6uj-lQfiJdFU{LyI36FS{sOaL1K&UITkVAA>F_L4!pJg@i5 f{Qu2=%H(S!x;jGkR0N3^*L=eA)Uo0tXMX%Y9<_Ef literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 5ea2bf6..9a7f6a5 100644 --- a/readme.md +++ b/readme.md @@ -39,8 +39,55 @@ By focusing on practicality and simplicity in both hardware and software, it off - **Self-Hosted**: Complete autonomy, from code to execution. +## 📐 Robot specifications + +### 🌊 Robot control flow + +The robots is implemented using a sense, plan, act control flow. + +![control flow](images/flowchart.png) + +## 🦾 Kinematics + +To enable complex movements, it's beneficial to be able to describe the robot state using a world reference frame, instead of using raw joint angles. + +The robot's body pose in the world reference frame is represented as + +$$T_{body}=\left[x_b,y_b,z_b,\phi, \theta,\psi\right]$$ + +Where + +- $x_b, y_b, z_b$ are cartesian coordinates of the robot's body center. +- $\phi, \theta,\psi$ are the roll, pitch and yaw angles, describing the body orientation. + +The feet positions in the world reference frame are: + +$$P_{feet}=\\{(x_{f_i},y_{f_i},z_{f_i})|i=1,2,3,4\\}$$ + +where $x_{f_i}, y_{f_i}, z_{f_i}$ are cartesian coordinates for each foot $i$. + +Solving the inverse kinematics yields target angles for the actuators. + + + + + + + ### 🎮 Controller +The controller is a svelte app, which get embedded in the firmware of the robot. +Which mean that new releases and OTA updates includes the latest controller. + +The controller includes full control over robot settings like network and calibration, and a visualization. + controller ### 🛠️ Documentation @@ -64,6 +111,45 @@ You can find a description for the current esp32 firmware and controller [here]( The kinematic for the robot is from this [kinematics paper](https://www.researchgate.net/publication/320307716_Inverse_Kinematic_Analysis_Of_A_Quadruped_Robot). A C++ and TypeScript library was written to enable onboard calculation and fast development iteration using the robot mirroring. --> +## 🏁 Motion state controller + +The motion controller is a finite state machine with state allowing for static and dynamic posing, 8-phase crawl and bezier based trot gait, and choreographed animation. + +### Controller Input Mapping + +The controller input is interpret different between the modes. For the walking it it looks like this: + +| Controller Input | Mapped to Gait Step | Range | +| ---------------- | ------------------- | ------- | +| Left x joystick | Step x | -1 to 1 | +| Left y joystick | Step z | -1 to 1 | +| Right x joystick | Step angle | -1 to 1 | +| Right y joystick | Body pitch angle | -1 to 1 | +| Height slider | Body height | 0 to 1 | +| Speed slider | Step velocity | 0 to 1 | +| S1 slider | Step height | 0 to 1 | +| Stop button | E stop command | 0 or 1 | + + +### 8-phase crawl gait + +The 8-phase crawl gait works by lifting one leg at a time while shifting its body weight away from the leg. + +As the name implies, the gait consist of 8 discrete phases, which represents which feet should be contact the ground or be in swing. + +At each time step the phase time $t\in [0,1]$ is updated. When $t\geq 1$ the phase index is updated and phase time is reset. + +Is derived from [mike4192 spotMicro](https://github.com/mike4192/spotMicro) + +### Trot gait (12 point bezier curve) + +The trot gait implements a phase time $t\in[0,1]$, but instead of using contact phases we define a swing/stance ratio of phase time offset for each leg. + +The stance controller implements a sin curve to control the depth of steps. + +The swing controller implements a bezier curve using 12 control points centered around the robot leg. + +Rotation is calulated using the same curve ## 🔮 Getting started 1. Clone and open the new project