From 4ad4d57befb9c48dea7e4972e42de2d1d36e9032 Mon Sep 17 00:00:00 2001 From: langolierz Date: Sun, 6 May 2018 15:57:19 +1200 Subject: [PATCH 01/12] Update settings_default.json --- json_objects/settings_default.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json_objects/settings_default.json b/json_objects/settings_default.json index 123a32a..d93d263 100644 --- a/json_objects/settings_default.json +++ b/json_objects/settings_default.json @@ -81,9 +81,9 @@ "value": "disabled" }, "STATUS": { - "action": null, + "action": "get_midi_status", "options": [], - "value": "disconnected" + "value": null } }, "other": { From 631afb55abd986292814e1584d090106b3dcf8d3 Mon Sep 17 00:00:00 2001 From: langolierz Date: Sun, 6 May 2018 15:59:22 +1200 Subject: [PATCH 02/12] Update another_hdmi_bug.md --- .../another_hdmi_bug.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/documentation/exploring_feature_notes/another_hdmi_bug.md b/documentation/exploring_feature_notes/another_hdmi_bug.md index 8b13789..41ad30c 100644 --- a/documentation/exploring_feature_notes/another_hdmi_bug.md +++ b/documentation/exploring_feature_notes/another_hdmi_bug.md @@ -1 +1,36 @@ +# hdmi drop out bug +some time between when i did compatablitiy testing , and now - high res videos now often (and conistently cause hdmi drop outs. all 1080 do , and some 720 also) - on my hdmi-to-vga computer display. + +also (possiblely related) when trying it on full hdmi projector, it drops out playing all video no matter the resolution ! whats going on ? + +some research sugests that not enough power can cause this problem. + possible fixes / things to rule out include : + + - trying signal-boost in config + - try overclocking the pi + - try an old version of the code + - try an old version of firmware + - try changing some other config settings (camera mode etc) + - try creating a new img from old img (with bare minimum) and update piece by piece until it doesnt work. + +## results: + +### vga-hdmi display + +- signal boosting didnt help , +- old version of code didnt help +- old firmware improved a little bit but didnt fix +- changing config etc didnt help +- turning off raspi2fb didnt help + +### drastic measures ! : + +- flashed a new sd with old raspbian from last year. only installing the minimal to play video. + +- while running old code it plays better but not perfect - still drops from time to time but mostly working. +- tried installing some newer dependacies , still running old code : + +# solved ? + +by chance i tried switching the video output to composite and back - somehow after this the hdmi plays 1080 videos just fine. no idea why or when it was introduced , but i created an action to run this on startup and seems fine now. phew. From 2f7d6c5a7d87c59f605d07828c87e6880433e98c Mon Sep 17 00:00:00 2001 From: langolierz Date: Sun, 6 May 2018 15:59:33 +1200 Subject: [PATCH 03/12] Update README.md --- dotfiles/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dotfiles/README.md b/dotfiles/README.md index da5466b..5781a48 100644 --- a/dotfiles/README.md +++ b/dotfiles/README.md @@ -99,7 +99,7 @@ start_x=1 audio_pwm_mode=0 ## persisting composite settings -sdtv_mode=0 +sdtv_mode=00 sdtv_aspect=1 ## switch for enabling lcd screen (the next line is being used even if its commented out) @@ -120,7 +120,7 @@ you can find the current keymappings using `xmodmap -pke` and for the specifical xmodmap -pke | grep Nu >> defaultKeymap which prints only the default numpad keys to a file for reference later. -keys can be manually remapped using `xmodmap -e "keycode 82=a" for testing. +keys can be manually remapped using `xmodmap -e "keycode 82=a"` for testing. In order to have the custom keymap work on startup we have added the line `xmodmap ~/r_e_c_u_r/dotfiles/.remap` to the launcher script where the file `.remap` has a list of the keycodes that you want to include. @@ -134,10 +134,10 @@ i had some success using [pishrink], following the instructions on readme exactl - the flow is using dd to copy the image from the pi to an external drive `sudo dd bs=4M if=/dev/mmcblk0 of=/media/pi/FLASH DRIVE/recur.img` -- then use pishrink to reduce this image `sudo pishrink.sh recur.img` <- try without auto disk expand ? +- then use pishrink to reduce this image `sudo pishrink.sh -s recur.img` it fails the first time but works straight after - not sure why ! - then gzip to zip this : `sudo gzip recur.img` -[pishrink]:https://github.com/Drewsif/PiShrink +[pishrink]: https://github.com/Drewsif/PiShrink [LCD-show-170703]: www.waveshare.com/w/uplosd/0/00/LCD-show-170703.tar.gz [raspi2fb]: https://github.com/AndrewFromMelbourne/raspi2fb From 5f9fd9588f5b68f4ae2b0439894fdd86e28868a3 Mon Sep 17 00:00:00 2001 From: Tim Caldwell Date: Sun, 6 May 2018 16:20:23 +1200 Subject: [PATCH 04/12] added stl of 3d print enclosure --- documentation/baseplate.stl | Bin 0 -> 163484 bytes documentation/topplate.stl | Bin 0 -> 37484 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 documentation/baseplate.stl create mode 100644 documentation/topplate.stl diff --git a/documentation/baseplate.stl b/documentation/baseplate.stl new file mode 100644 index 0000000000000000000000000000000000000000..0f2074dfd1a488abe12ff1be795f55853bdd1a88 GIT binary patch literal 163484 zcmb5X4YaLURi63vtu~^N@LM1jN*Soqx?%|wsDyYAUIZOtnn3WXrQngK5kW^lMOh#Gef(KuQhB4(ft@t$7qeAheI z`+aloqugQ18fVUD&Gj?aTyw4c?Qj3H=X~SYtH0(sPrv#ruYcV2kG=l!k9*?PPkrV$ zKJ(dM{qToB{P^n6{NIP}H%$izpLJ%Mrqwt7`Va2i=W~ASY%5>-g5SOOEXw!1>s@P< zr|Gu%`>E;Y&R#gzi3x;DoM8EM&`E@iN>Ho+ecEXwBwjDdt+f+cc;VcYfBFmP$Mn2c zeUJJP5+|nV4MBYPWlO>(OX8k)onDjp<^OV3>+v)_;o;9{|2yhJSy~VI2><@jkNj+F zl@l&m5}--2?r8$)1j^F-^_RUd`f+N44JTZ(BtVnE7@;2+Gbd1%)+2tGHa_=rE;JiX zxMWFyCPD9*rn{SeIf1gYrs+++A0KEooN$Q~EWc}ujY?3f|NYXbX@`xFc)cjM!MQZ+ z`3hs@5-0i?wwf>>eXN3T$&$e8n$6$}bM6F3ms;HyF3r3o2$w7g*qC|Z3f|%by@Xob zr!URCJqVX93D}ses1-*b)LsYwGm@-)dt~`C80=^M67daadrBtWtp+-ZzB}p zu)5Tb<*J3hViet;x3I4BIl+2;-0G?Y0dJrd?R_Q$XVB+AJu%ify^pJtTD13>5cEX% z;|u2yNBD20-5?_M71M2(@OQ*>kNI1PwsL;%tP{N)e;0xJr>T2M#CBiv^Zf&wZBq-v zB~F|@eKXeibm}SZYpWKeZG>yx{Grzcam$C6#Jp9$GkAoX+ZYn~5@c9Km~)i5YEc@k z8iZ?M2BF1Rf|3ZAVAdc(RP#|-_MA2@AOG7+(~9G>Iez5&Zzm96op{`fN&ozBe*Sv9 z4G^xSk=`6%IVVccAM}GDM!nHIvzxJ|w=fuh- zn*Y!L-FyFzt(p^&Urm>f7dF~_*?cey3oVV+<-PaKTQ#{vo{xIvyRZAul5mL=(^Kf} zPdWYmg$G;bV_|@se4-xv0Z7k;5H4{--m^KrZb7)j33=#!zU-O>;Swjb3a}^6 zcAQ)v+%388FdwR^?t?Cw+32hGW5Js3uJee%2KHX1t!*HUJ1>S#&$o-xXI z&tg~fLt{1l&GC;k=`_K^|KdyE`9zlIab?!?rZCoo6AwCnKJIN^QR0;ouJw@V>d5Pl zm$77}R{hoSTh~`iH$@Atn4YlK-)j_gi4)Je@kfJxeQA{wu64!HYlC>evzHOh>lKX_ z9-LIr&Vz6*WomVI zzM{uI*wA|XjW^$O)>}K@4P4@c*5;|zJ&RU3;aXaous63cTJ?dmijU~+`1>OFnOx$8 zV&%y_cP+)r%zbhOANjl7A#uy~n=fM-_hQ2~J_Tsg*8VZSa)}cU`^Xz2GSquGCtT}_ zi3IP$VPM!8lKXznk43%s)XHnx-KsfpThRQJY;J=)Br-_9NzHLv-g2&7;)F)G+;Xm5 z;)Hghr=EWQd~{bXaY9~s!;6=MOPm;9*$IvA$|X+7chg1^E^$KfD*KUyOPo;Tt7GL7 zCv;uvBV`#$lo%Gwwa@sIN@5#3^Gz@t6ZXt1LNa0?QWG5 z%5X3@Ga^rS*auxpcQTc5i4)p);R`bxlS`aX3k$Jw!nJZgU&h_ZB~IiRE{T;BuI1~0 z-Vc{Jq1mkK!*>IDc&wGoKKjm?bFTXYdRivDvp(V>bzS* zU9P3_mYdXmvjvH?P_N={y>*rr2-i}%-tVR-wmT&G7~+TL!OPJd`Rt3H5MSlTh@$e)lWzxS zL|;)QCZ_MAF0CkNiLMdOCE3Cjqe`o?=jttdR|Ib5MVuTNoRIB$L+^FDmikn0=tsR* zuGK=^>8hqWx?g|u+v247@ODq7oebymPaXew{QZ;5PXQ*EIH7Vm*RHk^(30(6F1JxG z@p`}gwwrpZmY)K+#EC~d{rN%MT5h9U;zT(+=NeS2Fjm9fb+d7suXELl5p_bgzo|q~ zCtORdDmTKDOLPZ-n`WTPPo={Z+=@481?8!w#p@+JN-nj7f*7Gd-z$;8#yG~i0ZqpC42B!)l`T!GPD7S z6QfTH-<=VzrE#mi>k`ck?t0wztmiWuPUusIdbi|txz_L!e1fGX8ru`I7yC0Tm+%aW zo}faxN1scKiB7o036@WMvR%S zL6QGa=Y>AGf+{weF}zdzIMx(Ce>hGa0LP zPH+Z&{<&&@;SJBcR=zvd-B{<9Kuq0E&=cK{FP!@)Z@BY|L9}zu;rLu0PZ*9B%)f7% zmtYP4hwuHiyQb-=Q6eaDV!mpB;1U1nuK)2>w_Lk}h!y-d$G0|{Q_^!u2 z?778;Yh6D6@qvec=5B}3%xcJN#6ThRy zM3*@6H^(Fx;XpKe1;QmuLOy-r-2eSwu4-OBt)AGt-3gSX^}zo52P2#lE?E+wN!$=C zXHIuYUed-*r_R0VhzF*2DWJLX2=A z&~p$jSrVX0JSXtP zQ0sJ9_f^X>V^wHeo6WxzzXXjO)!HCEhAK1o7djy}KAYI}FdJdYti&6_d zd-(rOxEA^WIoDt-tU9rBNnhJ>3iFy~t!kf`#J(Lnq!aqYv_5t3glp+jr}AX~%Io#m z<@Bso?KuEG_Xg`u=rgZkBcDQo#0h<3R-f#5i4*#Su0GlC5-0SzNd2aTOPtWBC-pgf zmpGwM7t7}#`K%fwPN=5*`~!{xzshITAaNpFyL{??a)}d{b62~g?FOxGR3A2+a4n5t z`NSlj9Du|L%~SdOBcB|A#0hyx`7~qY5+`)mclmhvEeI!EYk275$$s ztN!#bBu;odp7+D+axM8=M$sIr?Q7zWnIFe}A~NLZZS8y8{b{QBCN#>(Uhrg9e`cb6 zI}@J?^S+0KOPpYt-#-1@2x`rr%h+P0ec$l|XT4sO(Q2@l29b#s)b+427C$Debute*!8y&)N*@u)xriwky^C(nGo!` zkK2WFK7*V!u1;#v-e*E^27UhPsvYZYtn<%=peMQ?V~<)P!mXb9*+2XNkKrtD+T66K zxA;s^^94Rrv^u=sEywTr=0SwSiS`LrTZ5amzW=d0y!hVLPb~@8>fau@r0>c^t0oXG zsl;Zzi=dyk2$xi1vnJ7ceDNdC`Yn9YFe6A) z>&mOXIBeYgq9-&PAkYsGE~&(3O#=P|0=u&lEK}?9@uT{D+|X<|;gU*Vq&sm&Hk@FY zT7USltF0gS)N+0FdDoy-E~$k20q?lyc)Rh5HqzVonz!Et!X=f^`aqA{ins}DQVB-X`Ddw4s8y(UjN#Lo4UX>bUDL+uqDv})7J|T>KlZA}BVHXkF-G@k zm*fjy^@^|WME8Sld-j!Z*h*p7cNhRc0&;$WnPH0y{y<-pV-rjcS$0J@Hx}*|X9~h$++s|VJ zoEW?F(|R7noQOFCS_MK`23Be%w9cD0fQSwv5c{;|QTCi@ekbFSIpGlw24uqtk6p6O zc!f5JaETMLm&9rt;aWb1^M1I*36Dxaqzxxr%Y9*P!zE659Gly4!nNF|=Qdn2Cq`77 z+i=2Tm#@va4VO6KQE6_&3D@$dG`FESfcI(sQ6A%ld>1~VId_Q@W1dbTTubA|OvY`v z#0kyQ$%JcZ+?emW4VTObA2noZQJk!HT@giD;zJe^Fq)|f%$yU%&fzx)~5IquKH z{C<1xmF3&lDDx(Lv*wesPPn8J(?sI7AN?Qic;1Kp_2V(`x|N5-34d1g!nxZ&_gfyP zR=K1SxA#`Hx)Ix_*S_{!PLrTS<@-+$_!_SXp13-E!T<7?cR&4M-+P@)wh=hvlK8Lh ze$)9MfBOIPB_bfH#O>_{;nkf$tG?-*KDw2Fmgr#v#IUhhkGA84JqY}rt(p_J?(pv6x!TR-A^cTTvZ60LD1tejxE_ai>j(|kC=&+aIxgysYO1RI!hCs?KyKWUU-IpLB@$gfa0Y=Crv zWoq&BPpuCpTv7?G4~!9PU<90CnOgi*b~9FO5-zEP);Z2-uz{I$f@Ny)(`AcSNw}mE zt%ZtkBF;F$GPPuz-wn4`opDJe7*X@Y68EA`s8y&p$1vXGWutq>C6#C`48mq`&xst} zrX^qCcf*}7F76rjoEXvPp8npK&1h8;ilU<>tXJ_ddmcpd zmOUq2OEEu3Hwl+iLi5pPa1Z@x-m>R}b_3L_y(_&W371qteucVW1Gb#du7-MZ50*%Bp{*c=t2 z#VfuI4HA~AMS7YtUZLl((X&2EDzQ15^*rL0*QHiLi=)t58}re}DhQWUqP5Ux5PQ^~ z6D(7UvpG%ltL`O1xTF%BqnRhhoxT$+Q;S~NzFpD$cy=$^y`7RuY>s9tDn4oOx>%+b zSJyPnR&5Y2sl?`pM2{uNefm0QU8JeSxYFjsqfZbnsYDxT5f|YlBVMtt9=k$|(N6vF znCOy9s2?>_vo6xTAN`rB9NlOY{EP9N^HB-SN8NEq^t~izjk}Nh$_bZLLVi_uPS!=5 zTHHmoKAdn#CA2O6>k1mTiOv=-_-7zDh< zi5%UgCGW}eU=l8=#O8=Z_r$oNcS2qQEv>5V0<>=guESETFrSL z#2O63C6(A5k?4^DxlcbwO%o(qwJ49Mgf~q&;gU+U`OtX~nGE99p%Wweyg%Qom#s=d zad)(Y^(sD+z}kZitSl#7OEEu3Hwl+iLi5q)d=EBa2K(DvQI~cDl(l!Imn7kmO31HT z-9f;=oY1a@dUFq!wFDG($ZuKgc;5v80C6&-RZ*v_s7)y}*wCpZ( zpZzGaCObhU;S%OPPVA3UYWBkkmZ`-SHrp{)-Vc{lqS@Oqx~z*dwK&ptqK{UM8Kk5V z`#bNJNU&aN(PQjpB5Vv#q@)u2JMWfAuwH7>^X-Nu*N00gvA^?fiFJ{t7T0_m!yS=< zl1j9Z7I6{2J7Nh5)=Mo$BK4!ks~}ub3H77L-H0Vlu-y9*xsT?<3C3DVDxvx4`v+r* z)kT_G+!^FoPPn8J@+)`;#tNhpEK`d+9DSNkY>9A5CA2;eZ$V%LoM4$++^MzBop4Dd zw9YZtuz{I$f@Nwk<7oZxOeP4IRHC(TN%XrV)Z97CPeG`c;rY^`dNN;G>qs|C^Kyx%R6$kAXL=GeWBt^^SP8{cfp^ zZab4zqRofSYKWr9uln5*i4lEtw`4b7Nht1)matyM$Lx6!=(!WFrTrt%YDu`H5}FVA z6Z#P|7`acMk0?`1`{3+EAB0P^f1oAWuhJ9425dRuTDfb>+mmofCA2;;M(79DpcA<} zw|bRJ%x+kMa7iV!&U@~IQ&GRgVPsI2fqI$MG+$8kiB^GdNhMl8oahk_`4uJgrpTfw zYy_ct$1PXO4O_kZyK=ZbRuS8saIGAL9r;yjRc4c{mxOXr_!C-%J<98HEzKr#YA0M$ z3FXw?cVn-0f@NySD|t3>!X=f^*#Q28ezY;`pWSf}CrvG_u3aaVo>|0-a>CAPVFUZ2 z*TpimMqKGIl*%8N907x zmYh&L$4pg1^8tT?jpi-=wB6?;>ZO);pFFE2;S$<&LVkt1VFR|DV3}IEi|RCygi9)+ z^#Ol^4UB*jEK^I_K%Ui-a7iV!&M|YaG4d(Z`< zdUFq!wkOdX-D;%CER;E1`7`e}WCnq}QdqWaL-PwxUlG z^*%|r=g6X3KMKJ&jBnQX_B+c5QRdst@s2J0@}jrOC6zds6A?w7V3}I7&G!Lx8$r0F z5(jG%eLiCUa6+wu7T+n|`Vns_aKa^(Xe|t)`&I0NPOwZZzIl4H=DQP|a7iT&I?>lh z?B`CfOf9~vdb8#m9h`7UB@Q|PpKX2>Ih+$LQ|sH}*H1TVzGuP-msH}Q6FvGww&VoM z)Z+WF+kCtdZ@+NDC6#C+Ekbek&}&8^U-FowVyeh6D(7U?~#^YIpLB@$gi3wh7FKTuuLt!w_5AN371qt>!Yoxuz?Y9 zf@Ny)4ceQrYLjqDCA7|4WC#K?=>*Hv;+wfGUM1m@O0*U#!ihNJ1k2QtZN4eQT6M-H zm0(1j-;p_?R-xV;!+2AOjqVwjRHC&o2%Et@CvtR~mVANl7IDHQl{i?FFi+fbLS6zb z`83}~;)F{oaj+&~D{9XPc{{YUHu*LZCtOmAgEa|@40}#!)k15;nD;YYDVFTHq!MjD z;#a48go}*Ki4lF?e@U@2TZKp+gi9)+ezcwkf!)msMbYR-{360;jBXOz4KSjW(0sHR zY&~WU=Y)0x(AvAwOOkL&CFEDl6N7*)C$y`f-rR%b?Mb+#5?UWU1Be{XiQJuAy~-uH z&Yf^cCA7|KCNoXQMLK#YjHC6(AjM9usPvAySsjJs+T>di6Kc@X^w!X=ex{m^+Z2zZMVIl4_tzL4j^BwSL7 z%@K+2i7R-E6Y>&hX%*yoFl>Z>b#I5H5}P9ueGTFk=g{ktw?j*7GtYxqgF(2Y5}P9u zJu)DZ>F20vf<&tp6#1 z+SO2R?!of*BwSJnt&cWFLBPM9$lbZstL%g8+zFRdLhHQEb=Y7mLGHuz88eyvIMJ~t zJ3%Jll1l84Q)>3Z36`nF7B<^4R^AVnRHC(T$LO*y($wNe+lf9}HD-{KO6>2vTOz@F zsYQ>mn~AV7Jdu)0?C-o=BEfp8MbEbzmRuh$sl@)yyCv2|np#}*Z47rr21+W?Mq0#0 zticgWNU&aNF%qdCJ;DXyl1iu_J?=&YCH8mTE%A0hUV?hH3i7NL zHez?{-VRA6_Q&lUT1X49YT4FSDBFJ&Hcj4-hV?MC*qWh*uXqLt?pQdQD4o zp4DI@2$xhsIb0vBi0w|WOsyP+9r;yjZ)THDC>QN>9($D6#WJ-to6M=5a7iVUQ+MBu zz19hqsU@%E*}w^xR6=KizM>*$aDruOX?5*7vGmM>x4>}*Bw=SYtneHdcz%{mjXplkTmGn6GTf3B_~FR3$VY zZ3Yi9R?S=b*_m~brj~Y}JgX()l1j+0qV8q`wwz#@TDgnrG!ZsHxTF$VA8ic=fe~^m?kx;8fe$`qV`-c-bx=m7v)&3F5qB?)=S z$gga7j#fo%>?>#FSN--p{;s=MTT%V9JJuy{ANiGK8CtddMwpUH=nmN;!;H|X9r+bv z%=Y|>l1jAs5D~f0$gfC@=rhl1@@~oUtKN^u^jNPVDl@V+R$&ACq2ewiuBDidahpGX z<&sKhKH8k`wNPUDRiBT(8;tx)*^(35)xt9hA;0Q7r{!0yOS{_0ujtc!BPm)1Te&+o z53hvQ2gV2l#>|P_og1xOVpo2}Ra*(I^O|3gP+l_ftJV)ipJ)}M4{oCg^-F z(AwE$_c_NhR#tfMElBt`jU%tH-W*?mgpGWPL8FL>uYy9YrTtrdE%rq_08bSNZ%^#H)T{8LLb0jdFtPjuP5qy?y;}dHS`uUHppYH|0GUpe8DO31HT-C+a%^H(6`?I>$)=69;GYJ+e| zCG=h79vP6y96F&@i+V?lS-$_uC6#FNq4VIG)+$7wHUf%ps+U@dmHD0OBwRA$)%!C( zX3vAbSUI668vTekKTVtutX8xtM%N^j(0m|s2>eg>CR zqK&kOi?ZPa%hX~dQa^fxi&nX$66!~fyAc_jV7d1rBDm(m3C3DVDxvv+cc33*H|X;b z^-_yFgZ#<~m(ZRQ@~f!3*#PMT%hciyr}g24ODduD5z({Rzz8_OGPSr9grHc`&p0HsYRBDD8}%J0FG?!W z=0gNxBJ!)f5wCP-MJ>h3U3W{pACWmZp?<)hU<13G*QF>r?v^wkPH1Ntr(f2qIFG;Q zX&d=&KRdH7*V5j#>u!mDRSEf3)ZO|4-}Sn*tBt!Qu7Yi!4^mPItq+V5#tI{l89-YT zxjVPAa*15ENw}mEd~d`2O$bgX%Rs%%YFcX*eZofUpz%#TN-EL%;RNDUK7R#Cy(zLN z3L8PFUSxNbP!89}Dq_16EK@5-VMl(|+MC&=6Us&VoW~yJb+Jq>%_ehdCtOkq<<#&e z^t_Qhr{>;Anp*Noo(-IENhNeP=qt)j6WozWQ%mb{*NLTP7X3B~Eg@lNHLP>XuSmF- zXEobCyF>h#*Gqz@upkr@54|qeQnbsnS`sd)g!<9ODhTXuPOwZZMeRJRCE=1vXg=Bu zw)T5|)#oGfD{5)?$+KD#E}=aq0^;gU*dePE1W17qd{%hXaf zkY}|dTv7?GbIW9Ue#MwUnp&O*ZOgA1mnzX(sCX5vVuTwRQoSj%D4K-&!N>`k^~zpG zYW2M5SFFpmattF|veE7NRqIESRHE4n!sfi^S0r+Do0fcGSANC)t`fSlG~examL%jQ zBfnC%7-_U%gO?$y>{&#zdQynWfOH|gp}cwi?Kkw;5duOcclvL4$lzhYgkrCoyAk`peegyy5o z;2!!ByIbr4eLnhbfO@st?aHs{CE9TYA-{^cn+@3Vy0oi}{E9xkEx)3q5?UWUXR!Q= zMDEUQeJGd6RU19Wn7O19b{8H5X3`1eB_qFTwiSJnsP{>_Js+RSZOh>{>-&7!HEY^9 zh;q-I)|=x;uIGeHDseC;EQi~Kgfz8!pVmMBo1fopwBMtDG**^NDsj*W%t!mp;zwh> zJE2yg-agXJ_La>>C+-B{l1iY3AmCT+mz2*V3OT_twYtZwfAF^-IEZUNxTF#Xoq*5& z+9O_c4dSm8EK{p{{`w>D`3KDg2<)67TvCaHPV`l4Iou{Bq^Z?c@cP_)@7HWN;gU)m zbfQNe%i%U5Ax*6wyV~g9x7l#QC6&NPcOoJ+_jTO2!>{hUCQYp#QAewia7iW94|oSg z7dxmEEcbqJXBeZKMBimXQVGomyd!7O>LN|8zQYYKNx~(SkY9y&G$XL(1k2RwJN58( z{BC%7yGtse^?@;JYcN)n6D(7!XB=bIf{0b?l1gZuW3Ck$oM4$+J=bde=ddC=E*KA;P;U!p$E~x}s2*Tz( zpTB}+jP7-7`NC5leSIg|oFiWKjBK-pq!R5GHwgGsk5@B7UIHzxfuq#lBmAk& z$GGuA^tqw8g!PWN(up$-upEwrYbm<2A3Y`p;gU+IA3aiA4#%D=ibg+}YmL#3R$)KX z{(%v#gysX@fqpdqni1L!Kx^+xFG<2Bm5^UW-Lo8yo~T_7^^QHbd%Je$eEtgFUJ0!a z^ti{XeEtf=*qyKIc@Wnoa|ZMrqpU0gE430@=kSgeukM7mkeDXqBAq@$nORNSy%c>g zR+cSMQi;t`A@cbv#w%ueD9d)nE7|D%m?lViJ{R@M9*OXd)~eBS60XHjKx=!v3L79? zQVH}!Gl-tUznoy1TAa=H*>*&q?j=FEq!R63L-8tF1=0zYsYS1xCiw9zzv|vjNhLN% zB>Eae&M+hT>IyBcu4&>rcfuu=*c{CwLqs1ZSf&=E1m?q{kHsrWDuI#S9^pu^UTQHu zsvjN`T~Z14qxC#vyAv$;end{B`EY{qoRUgtKI)D`qVG#FAKZQ9S0LK1b{<~hl1j+0 znx?X)89|y_+(orMIuU!VODduD(fmo-QqKTb7inrS8{pcU=L{~X#O5d?!y(onb{;2K zrWUgr*xsHkQBn!C(1=xdOMm`~@rpNID9d)92a)wf6m?0@=b~QOBhkkya#1H-Ym9n7 z4{CJ#4J7(;WpBwQBJ~)zejdb}$LY@NaxHmJo(JV6hc2na=7@xO;*5}&KufD2&x4pj z?9PWSsl?`pL|;+J8D@mM9a>tOc^<^74ZgO;e6;*oe_JNhLHN*#FR~ zm_Z}78=zk8UFjvbH9)-Tw+7P`p218n=2`m{iKeM+X-2r#*n{o%BfQ-umB6_56@~mN zPIpd>-TBJQOLEmJBb#MQmEd~J+bGMHcs^q$vmYlqW*l~cjM0Thx}*~O82*M?mKnpdxAh6z@V3}GRX*KwpNI@z7t7RQBvL*Hv@*ADm zy-&YeLJyU_IDr;g?i2Zy*TpimWP4XerdxS_y6E=utQP%fW7Tsw66y!E#u)aqS`sd) z1X|e7YC$w_$>*;i8KbMaB|Fh4Auqw1tP<@LY@OADz+UBqyaZZW1$kCW!X=g1AGaSD zG3U)&`rQ(5IppoASF1VCYDu`H68k&vmUvsERU3CQakm8T*?#h(q!O49JKZ5$+8gnz z-FWqs5Uj6*j?PH6wYh*m=L0e^xG%()ZV z4M1z}N-s&mC6$n0McvH?Y&oG_4fT#a*ls3*a7iV!KEj`x4UB*jV|Uiwl5UEeP?mv} zT8aJmR4#KLoTK_J4(n2u0h(D2qtcvkNhKJGlCb=W64J=@bhl(t6gOV>*`4Cx@-|92 z9D1%iQ7u6}$TGFYC~VKK&?;qkGJWo^mC)Isuc*iwye^ihrPakVjuS4agw8ndC-h^SikOR#rq+lO+w&`o z?tS|@cLF25J-;Hsda0#omuIzzyJ(e5DxrR~o-0z%2-3Y(mIuu~H|Qr}&POFQAMg&% zxpn}|Ez8u>?vrP=BwSJn`Bn4XAYjW0mZ>#%(SDjp!X=f^`eM+MuPCVmTDU#GA~8l+`IYTzn)9A5QBn!rS(@+82zklKuWWY?8xc+W%E69Y3EjQg z8tnNM>yo#R{K~Qnt=c`U^T;g19_!V5%uGg+VMe&th*#V5D~zr_yYt&~%*Xcpio}RM z^E@b@XR!Q=J*v?^}bak7-7O#?UNhJ>EMC5Qz zuuLu4{+*V0(S~w3msH|lO#-8<9L@=~3R?Y_9$Tv(+H7;hbQZTKyM9 z*Do*6U%8|b2c7U7&Iy*O)qgv+jV_+?a>6B*z({vOare*(mZ{Z$19r43371qt{jmL` z|LXK6>LT6yarD|t?WTW>ZrEu4)qfG1l1gYkY#*Ev{Eb{{^UUDceaY-fQSDwQ; z!7{b_F9i>8&(DfnQVFdO^teCI(0@aE6LpcMR{zE0v1&oY4ZTY$p>>XINs++`mZ{Z$ zxw+Zy@hZlu`PW64R01tr5dAl#(T}Uwq^Tv_h?UF}d#m~{LT`HHd`9yvc zg!%4_aIOAZ&+7*~d-?p8ODb{D30s5xH>5Wqk+-8>t>)L4=dWB+iGwu>cn4M#b~h)q zYN0h^%o7-|l5j~SFw&hk(@aE0=ER6TPgpBfW~-8LNhQ<|&&Zrm6penw?>=)3^V!G%8Lwoc|FZQoK~jm$5ebYHS_1#_y40#M3TSPQSIWrx=u%P% zw9sZSo=D+{lIXJ;TAa;kqF=$E(5m4jlvHAKH1kB{SKY5jbRP>XdgU}_yb2p2TvCb6 z5sAJAkzdUS($wPWnkKGuCtOmA&Cx6}M7(l>Woj`>U<@t#1mTiOU_Q1-IMzj)T8wt; zM~$MCR6_k|J&!1gvGTfD?)`}TO7r0a<2faj(0uqF6B*kY6?LIFu(k z!7{bDi_)iacMflNNhP#C+88NY>KOp*>e)c74`u^g&GYB4Tv7?GbL3a(N1Mr>m#{9< z)M6e4+uO4xN-BYV7=cr2&&Wvh>@2j@TAuED))&uTxug=Ch^U!g#p%uowF>o)QSawL zjc(6g(W-~8D}jFW^C0r8cp}B?8l(Hro-IvNo(GkY9m-1}sl?`p1Uyks);J+AftGwa z&x4pj?9Tl(F-?$EVsk{IuP9^yGeX`DEv?Nw4`S5@;gU*hj!5*#fZV5_qoxTGty+{v zRI<}u5H6_%=41N_5;LfJsijz%twMfl0snGByBg{pd$8Spgtxn-5?UXK z={nsxF?Q#N_B@C=QRY|il!dYktkg!Ju*;I35>KwpNI@z z7t7RQBvLA;RItXC6&;8z&qeqV>jsY5%p4wJA?en z3762G6Y?w6E#Gy5WomJU)B142C6&)Z*KR6^?lp4F0YNhS9C9e{aazgyz%fV>3tY8B*JEo?OZ z>NiEav#7-W&buWN@^;j#)tqOwiY_-iTLEXcX#&m*{RuH$~0M5k-Sg+#M}(Lj7oKF9`J92}RMMBVW-?krUcK zFrt;ve88X3s+d8mOS=JR?On4IeGo3Gg!~G1!v<_Qp`j7;z9 zp2Jxbg^eIo@3`f1LOERTxn+HGL$gJlx zLaiG46>M+MuPCVmTDU#GA~8l+pTya&raAA~5+#+;ou&EijF6X%{K|Icuz}d9^?@C^ z61sb}H8>;W?IXXkEJLfd=T|-7=__gwxOmWBC>9 z(ry4+d)Kb~ihflI`BmRJEx#h6U2Wu7S|3h~-TAaWMT}2n#=g5fzhYgkrR;<29HZKt z#PTbiYbv324u1kM@+%U`OHi-pM0{>Zgi9)c`M3NkY<&IAZ)>Y-vwnE1m*s;ff9m+h zL#a{^5jL1+8zt?WW$3|`1>urP9IQ!T)&B9H-}g@JBTlePt@WMfTTI)mzbl`=TK(Biy%U5>Dsj*W z`0N*b(I316d#)2KQ|m9j^qo(HjZf-{_%qFS5k(JOQVERo@)>$3SfBi*2kP1;Qnj(0srA>6C6$n0p>7bcqDv})7A}Z0 zPOwZZ*+#5np4eM;#wC?tMCBb>AFCOmR-xW8hRbK@T~Z0OaQO_q6JvC*Tgw-|sogp7 zGvOYu_FPhlgEa|wM~_!CLS6zb`Sh`#z&`BpYR@H=I9QXw8tn0EM#$TtrM3Br^8A%c zDsiwT;W?ZWTD8y`F=qJ;y-O;A`B-LTPK@Yt!&vR_)t;_ zv`{mMv4Vd&!7{Ztn=MOFyn>fJ8iY$Ku{oM~BKF!DL7H0h%4y>IK;3V7-Y*5=l1glj z#)^8%|M!2z8gznXYH@W<6W2M$2t6OGmXbjOlKSMP*>xug zGfuEfEoKALl&dy+4#Fjs&^m837et%M89|y_%xch&?b#9~l|T!Pz?rjWWF&g76K$X)&x4tZx}*~5hrVSx&ydlNE0wo}mV6=4gBV@h zO!O>#njjhTaiub{qgkep`;r+UFM*bPI?sb)1B6Q|u{jzi7PJcf<%GN)T3XF{9>f|9 z!X=g19Ff3WgTPEWp;Zg55tZz87lcbHf%#Z|3)_hieeT=yt7*zsMchTJ6p=?uSg+zE z39O{n4@Bx2;aZCMIl4)>q!OABLlSRASTps@1KXv)?n& z6Sb?M-mwSk_M^wELzh%S>jN>p$E%A@jNSRlo(C}}%KXZ1aVV*T)_I$`7%TV}vlpJv zSl*8l9WxF)K_=mnO6>2vTVh?Lsl^t;c8?`t1JTDNl|TzMx|nlB1}9ji7Dw7n^kD;p zODeH%cT4gsCs?KyJ;rV(!p87KN-D8GZa)^@PJ;DPi=J;cEJ?Ve68mMk4hC9@ui9e>fr>C6!P=;2nSb=dX*KBCm^OYB8c} zK0u)7BT`dR3C#z*1H{-3NU&aNac7WUfoQShQ6OAW3HcQ?TNWNSMNY6xE$(nyA0W^w z*m6lFv_8;d5Eua`Sf&go$in=?Rj0U zrRX|4K?dQHN~j<3r#4i``ug1x`=Ka`dbNLylduSvR6_I7BElXB%%Bt64N$N4u5qFl z;gU+ouTVD#*m6R<8tNT;u-!}q;gU*dePE1W17qgI*qwE^q?;lql$VTK71pc#AtOWB zKxA;jwLB-v&(&~_>NiDcZYjPiqk6|JmlMk2&~xR9 zPOwa^F>c%QE3{YHq!Y?T`TMS}HGOS8$G+6k9bLOFH!-PmiLV3}I-N}dfsoO;WX zF`V!7wz-+_45Pb|zVDq&}}GwY+2rj~Y}JgY78D`rTQkY6=VT;x|ISTD84F4|8Mhb{V8enoGu zgw_YV0|ds*>tdN&$_98Rb0iu6sDIOZ^!66>KZN5-~_#Wh;&ZKOGbWWyK{I62zfhpH8)~5l_2bij`F#hn@yX-8_Ws>rPd4!P(T_oF+E{HT*z*TI z=hx1+eym{YZ;pSYwHf#AgFu;oXH6H*bplW)<~9Z`qG@8z@oyy?e|7xUUN7y*2L2xX z5HYz#bZyn|9RIQAYW& z|GkyfTKxUOxk_x-OM>)f4f?{lbD#agPv|z<`>$B+Isjv`(KtXAOG9dpD4H0@PTGSGiXFewh^E~gipmR_O%^1zkNTC za$mKvnu7oogiD<0`NJSq+X&Z^ZN{r+p#7r_mpCDNNvyUJuGOPmYZansnCLcK;zZ9M z29Y+LaIGHa`z?;!aETK=e;7pCaKg3v?$d8^+=fe>==sAS(uNbR)pyZ;i{mz2;zZ9M z29Y+LaIKyVw9!SD;Wjh}$hI~A<5Nq-D`fgkj1kR~aQN<+r;`ZR(zx-&;x=63gy!jF z!nHJRJbAedmpGw$I+<`SjWkb?Zo?%`Xr4|cTx-lA&b7_PN^7t`bsgX0@87hDa{umH zdww5JV0)`vGAHm|+sz=-h7UJxWozBOCoJJ;adI4^=1!G#JdfbIMKfg zGKjR{glqL@_WL(--G)n?=-&kyMA~q|wfZ*+`ZsdjhD&AyzY8*mwBbbmj!9_sZ$$KO z6A}jCneVa4n4+zkTL5 zT;hc0>14vSG;aJ>quX%FjEL{{Zu(mzb`hFQ`wm`z2ZR%vgYoVa)~k8q_Xl?ot~F*5 z-%)JDO0lHBK{tMpslPQl%Kdi;)_j|;+i=O8h+ml-MA~qozx_M3WSegVb{j5nLiUnK z8&0@Ze{XTKx6Dgi;zWP1_aM@S6Ry?YrrdvB#rxqBC;EH62az_MaIOAU=>F>}Zo?%r zg75VnMA~qozb`zr`uni^udBEXmpIYi1U`tg;e>1Tw{*ABUFId41N()F@We50%Phks znt#w^o=zfMOXJ3067Zh8#0kyQ$%JcZ-1rL>Zo?%rg6|IRzW}z2&}^b!jWmDR!3mc* zp?Nx)aIGAi7|Lc98Dcon~0(oS(pg0Uot)iy$r0a~*C z+#BDsu;CIX)WRgvh7+!(`9F2^?u8API3W*BB5gR~TAKftK6z=wB~HjglSms*xR&Ps z=%e>6`r(op(PK#xX~PNmF|_0{zwzd!4VO3}4^1L%IN@6I#8a!K4b1_(PqT?~j@wh- zx9GV`oXB}Pk#H@I+bthj+Hi>znx~Tq*V4E>_4NA}{cy>Q=&|HvLbC}ijr0vKUfOVp z6Pl-!3D+7k*lpyTD>uZfDa%Az=aP&JlOlsl<^<0;Nu&)YbYg*)Y-eOh8!mA|_L4{& zPPmrx(u@pg!zE5Ab50^{IN@5#OEWU04VO5f%sGj);e=}`lg-GGHe50z`WYvQwBdyE zYiKEx&B%~8T;hZ>=OogG6RxEUxyBOB0lZJMiE@rxi3~1rBIoHu!nHJRH8Qxw3C+{V zgllQsYGiQ9jOb^alL^fxv^3H+GPuME&C|(*YmFIP#H-cu@t4Of$L}xhruFyxPY?K- z`6<;Ux;Gwo*1D%|ZrJ`YlX0Tm2!}n~X3y`bjmTEPx@)PXQ|%Lu?X7~u3AIo++u5qL z0m8M04cwli6U%;p(B~>Bi#U0#oKU$E&w4B8;~`f)^^!i1xO{xarOSPuK7G7*Y2I^} zIH58>&G6CPMnFrp|KMZ)cy43m60i4rUT}TP=BJOJv>;sK#FJj}m>|}#`pP*mxx@+0 zP3?yhu66nNy0CG}+n+eMv2uwMS6=nSLEQbKCoBk;IPv#ia&P;bZL|L1TYhbEi{pfA zT|RzPAFCVYHri*8L*m50|HMy+jchQ$U z^OX~>^{6j@NBGr^cfDp|!zE5!KK_ERQRZXiglm1>Z{8j@?takHhD)5d^s1}EM)Aaz z6R!2XFS~Vz4VO4^>)RjRSMAdlJ$J&j?s?JY1%Z_|-#=V(`S@YI-n~m+(~MZT#EFmm z#*gfn50`8sZhGPWJC6)2Csc;kKmVhLo<)Q!#N-kue&n4G3Zh0ImpF0!`hOAqIGJ#* zcYOB!!$ysXE^*>zU-&&?<7C3M{>3-kFKpDpqwa>BKK_bpe2@4n+3-n6jc5+@YL3bAs+wUi;_NuGIL z;u0sc&sV}FPH2}Xt;%PLP?u|I?sgx(3-D#qD!1mj7cJGIN@4~T_t;+ zT;hacWfEz_3D;5#u35NCoKVb9B5gR~TG~s#vxn*Suyh7+zOpZ@4STAor};)MJ-iL~K_Yx%Ro^SJ90C$t{l@vU!L^xO&8Qe1h? zpL8NyB?;oymwfltv4<~X*Su9C5Y?Pext`TrqB3l}V5uSJ|=8ryi%)HF4;!Z^M?~EL(4Oq`Fyy< ziPv5D@@Q2(e>mYBJ_J9oA8c9%He_geG$5P^P33p;?fa89_y3EhNcY*(w= zO)78CF+Q%P+%6+^5-w5Bh*;}2?QWG5%4%!e^}1YZ{2kvIX-&#jxx@)&=O@{?H?wgqH7i(T|lPwY(ZFk+;uV#c$V)o{v`DJtMTzPHNTNxqm=Q zD>&yoTjdf(2KbWOp7o>Me&Aa|{N9ZdTIc$f(CCLtoKPIg+@~S^d7mB=QI~5eKGuxP zC5pR<25x)qS1xfvHI;SVS~tF<Rzj8fPF%71-p!Ds{L?@6N+8sZYleLx?D>&o!oOL)Q_^) zrVZ5PS{jAApZoe4<$G&nNN*nz?(R!!J3N1sk%fQhKm4J?Pu>6ZcmC;bf9iv@ez3+& zsU;|LHV@jjws6Y{0!Bc%q!RenmJw4UzS@cEB?oKvytnGnAk?a*C(0g)Cq4I{AKvjp z&%EY8-g4oL6RyRPK3H=;K-~JDUV9e^msDcYi3h#!*@svD(*J(fPk+w?_nhz<urPXbrYi8w6IZ6S~*H+U7lqVu=$jsl;YPpRj@GdE$(amq1HC&6^4H_CuFcVzVY;D{4l_+o7ek$r~0Y zTv7>r!fTP?&d*;AA8097CeeU+2J6rzm5`0r zDn#mQT1=b~ilV4jF`r`v0yaRnq!JpdHo8Hym^dS}8=zk8T{(kExTF%A^X4UoXchd* z3GHgASG#t4ViGQ?gnYModl2w;C$u}GUgZ*8gCJU#5$nSxmCzb&s}`BewJj!IbV6AM z>Qzp}SOTJDOXoqjq!NlHaFI4t5rJ;G{%!5P1X9z3_<5+@$|(p$ntu8*|ggllIEh!nHiZnGusqoOtscv{B;K$_dxHqjEKew>qgllPL>wSq!oRG)-A1}XmVZ#a6l84sM4P4@c zJpaKj{n>>LCtOP_t$fnZpD*Dl&IzsH7k>D{!iLx7T8c6ClLnVKp-A+GJC-(_a4ki? zYQrT?D5BPWIN@4~;B~BA;)HgFIv-BBmUf~#=Pq$VJ6!cECtOQAYV}>0IH8@ot`8?% zOPN7kgD!DG8An~`PPmpboEl49;)G{W^Y?h^n?dh9|K3Y1AFNTjzo*>}`n$qh zQi+51DVY)RW>qIxrj~4f>y1moC6zc>lj!d}i?=#Dp;kdl-%7fC`0myZCtOmA*1{nA z+uq_`lTNTqEqyEL`=1OOPPn8J2Wt}j9dz+#RVP@cmcEtr!H?e4Y&hYPN*t_7^mpmu zO@)U}uuLs|kLg$63>!|kq!I^f68)Wk@m6^!Sf-Y~A9eYau;GMDD$zz-1WtEh!wHtD zrEha(tCDa@CDf1B^B^!*PO#kj(Z4^Kqnm`juLemaG#_mSaUP60cYDzVbB}urX z67s9&i9x`Y6D(6p-x5r3Pr@aY(E7j_p&uACCs?MIzPp&KHVKzhLhIb$tm*{I)YA80 zGx~&$=3f_GQi;|=#VZkKoM4$+vW@sSdwXmDo$5`GocN}%6O5?&t34R28KG98-WLLzU6me%HDUkn>gxTF#XYZCAd_%3!gC$wszHDU~GIN_2?wE1{t zC(bkz@t#yCM)Z0ACB@2YRT3_#g!%!0f{o@a{gsXc+6^G7gyy5o z;2vyXcXL9!0ch=A=_N_Hq!RKg)D0W3<%D)M)SG*-ygdn*R6^?mV+0!*GbeI)ZuKgc z;5v80C6&-R@7Yr1J|w0Iv9HrdC^M_U+fbLek4q}CIVwbpS2wqa!@5|emTYIdLeJ5v zGcKvb=4jUQh*wUiRnX!nG}|#BeXN3TNhMkfeFl+V?K#0RwK$v8M8E1@5`;@Cu{oM~ zBKF$uSFDRPwdj@8#P!j=JqVXnVskWGQSl~dCs?KySJyOgo%dB6gi9*1IhsX=h*wUq zOf5!zR^Qi;vc?8JhcVMfT?$LVF7@;r#h5QNq_B$e14%}!p( zefl|yb!pWGJ>hvZ#H)TD3>zRu^wBwr^^Ul*{RGLnTuZSsTZP;Q5$@0>l~6yh_CR2) zoKO^venfsXO*y(rXg7eQ5}FUh5ZH(rw7Rq#fYxr8UXp}MDj~mWbq4|8bwaxu>die^ z-kyX@DxvjZ8Nfv+a(8a^Dwp6ocfuu=&^m837p-C}LGHuT7BiXsIMJ~tJ3%Jll1l9F zyjx;jq^ZRgHrp{)-Vc{lqP1|x=&~--)Z$3ni9YAUC6(CUdAG#6NK=a*V>c6FV|XGZ zmDt~Tw?u;VQj4B%H!Qh6TvCbsop(#Di!`;kg4-A>mgG8jNhR7yi@1n2IHC{hB26vE zF7?B5pB~}*?NCHDC)5w@G_ZkK;&rjy`w{ty=EDibT1qOR`M~;yjjV^%FPOwZZ?r>TkPPn8J^!(h=NMJA3WQ54p>>YA z27#G$f@Nwk<7l=$lL^8lm1r$o68&z8b&;l)Z0A``t?C(>Zsl>e^JKADoK%Ee<1tvJBMAtftvk^a&dvTvCbF4<~wrLw-dGX`bjr z=UELlf^bPCl*9G0ib(AQ%hbwI*pXkgR%JHngmO{%6Iz8m%Ijj8TAEGf)K0jh63VH& z@5Wy11k2QtSMqG&gi9)+vjO}G{b*y>KfB|OOqyC+T|DDB;gU+|j05k04eWBfn~`js3%k9Ni|VL~EgT9L-?QuUJ=(Zqt%4Xjco*h?cNk?N{lEd*}y9CtNG{V0n8IE~$jpM_W-rG;ito z71u}Z&aGbM61(y%uG&gyo!9(|gz}P+Up3o`KG7;hpOGz9f{_T%i|TvG(~95D#9jEk z{hRP8-)-ND=eNm|Xi|OieiwmndVlwC|KYn3+hL2}^hCXQyDfi_59RqcKr69nJ)9H% z7SVY>h7EnQl=g;={_BnytN7=VK`&eNbq{?|_G65d+wif1jY^;&bHZ)M^Sdj}NuRa2 z1?-VJ$~}|qbIu-cPFyl4uoJ;HKH+Ud+Hj)pIH4um^j){%5+`IYiL~K_Yjw}>dz9O7 zi4%P<8ARG}!nOJe?k9S;;SwkMUNVTZ;e>1T*ws(;Zo?%rf_upz(uNa#j|#0GQTvJB zZMejVzWWR!Z8+gteP`$=dbgoDK<1^{L^;PTvOXtV;zZ8ViG*uu+?c((4VO5fc{-VJ zEsYybMQ+0-GlIKMzjfY4Xf{!=Mw+JyCtTu$=ILa@wZ;tM^QgAW4{2wb^tN)m@m*!S zhn(fx*ZBK3f|6~7zr`F@5P|U4h}+j*FUooc#4ch}2)7sUs@IRWMH_hcytiF{cN^NL zYOBU5u(j;@lWzH6uSHK}-QV(#H_6K${=SX4eZ8CLZg-+kR=g8>YaQz4+vN_{eCJvJ zmgxk-C6(B8qJQ^w!utT6V3}HcAKk&4?{0I#C6(B8qJJYd-fQ55-gAd~`EH?uHQzz! zgi9*1=>(P%<{a_L3B9vuyz@>rs7-=zGoqvtve8&AAhN7ZN3v(45;h*7uyyo0Q;7d~=U{*9n(YLcZI)z3m%(+kzAR zMj*ahNNdmumsCP)u&vs#fpzYLzq5#MIZ`Zf!X=eZEU`Bse6uobMyBzIH6X7))?|_RyI}_T~dk7nuN{Zp%WTi zXvr7&wl^nSQi;u)gn8nj6Y>&h$*1|QFehA6iOrgXt*ApMV?fJF^C$u}GUgZ+GqM}uJqk~H-p*7eunHAo);DoXa)T^9`@1S$S zC6!Ptfq!71#sB~LKl=QZgC4B^rx*X&tlnS$75=@x&(bAs&$GdKzUzc*iO%=jt<)+> z&_i#bkI3AHOPsjvAK~rz2kZa*D?hflVR6E>d}il1T;jyxf1r(@_@Xx~Y&hXs?xAxV zE^*?!U-*dV$Im@~X~PNE@|8BX;Swi4{iR0Yxzzzx8V{ep7zwM z!$$g5+Hk_Pd`F$zaETKy{YBcy^^rE5a4pXa<~Cg7#5X?di=rQhF*BmSo$?^^57+Vx zXGTmeapEg(pp6o*R!+E!Ke{xRyLL-{qbCaETN0{HOivr41)sODm1% zT8yps50^Nh6@23lENwX9T8bDv*SZatIH5@NzrAp2!wJ_?|BfNb@nb+5PBEupmjd?yFRrF zJ*D$shzMZN2DNhNg8fV>_3z?&nTV3}HaSBKyAeInjY>5@w5z69rw zqf?jS4VX@_Of9{0q~7(pq!POK>F21p>vMu-YU$l6T<1=>q!PNn>gU0@BXfdfYUv#? zj8`C*?_!0d61s@6JRB=0Tv7>* zmE9WTyI4^dX=>@+LY#9aTv7?mx!r!`yI4^dX=>>mN%UPOTv7@7uHE9~yI4^dX=>?R zPh5jexTF$VgLWI0?_xz=q^YI%Uoj>+;gU)ymiS$t6D(6p@7~Io7^h&|^|_=H786C} zyI4^dX==$f&*#>v54xlhI-gt5^Ifc{ORYj#qt1H=DS!?mqr(5c@OVP zoN!4cbYEhgnD1gmUGfr?wF-Fe~{a?OWbvq#&tySe+tfO9P zDduymK){B-ixm>ZUC@g2B--fa&7IffTH3of=T5k!5}NboCD_kr?_xz=+SO3j9!%c_ z(RSx+a69OdO2~Jcx3{~#Ph8{gVntorol#aU!8Hg1tpeeaN@xwXRT~8E`kYXffqIn_ zF_t*tl1eC+v=*UJ5wrBRFPy`j)|Gv8gQRg$2G-a;Rd`Ptbe zPUwwkd6$tkoNz7og}DuvIH5Pc<(*90aKg3Rr{^|Y;)LE{SMU0qa4lbHa~m#kLT}>B zJF@JD6Rx!_`p~aj;)LEPSnv9ra4nCO^M1I*3B4IH`!RLD%6G9MM!A;9{J9O6IH5N@ z=6s|LCtS<-uDK1DIH5OHreCEECtS<-;JFQ#IH5Og=K4q*PPmrm5_20aaYAnnt#^G+ zxR&Qca~m#kLT^AV@hacNidf=Wp4-iBxWozB&UmG<$~UV*;)GgQ?*P0m*V2g8dj^*{ zp^>h48BVyCX13m!xWoy0OudtF!nNd~_1?!NPRR4?-I5corIl9iuUz7UR&c!|bHcS0 zWBkm?2z+7BmOOA)+|l}nt^&QRyW3D?q2ROj3!PH2a# ze&vK~X-BQT>k=olQ`hz3glj1?sB6$APAKE3>)Z*~QifAwiA$XDyo+~z`rRen4&u%A zEc31V`dpRor|$P~ao6XPO4x6VAQz3hJ||eFmTdE#var!w6~DXWl1k{eQjopscbA+{ zt5C1*OULgn-SI=e9>3J&l1k_|Uyy}A_=fn!kUb|@rk3t~>+dePq!Rk=ntuL>r}Ug) znOeHPuD`qFl1k_|c>1Ym_FNz8B26vb!`I(ka!DohTSEPG7k7P5uuLs|p1^lUJK>T_ z=r@tDZNjgRl{vvOwe-1&zn_|fODZ87tyO2BkKbK#f@Nyy^Bs#FD^0_|L zMVearoQiYqgi9)+Ik(%7e6A05k*1bDZ=>%z;gU+ockLEu&k2^PrOyqy2Ayz8CA0?Z zHY%U%LtUh)rO#3sOPp{?B@|2SRxO|FLtUh)rO$CQCdMh)pX-C95*8Ch^pxJ9 z`8#;qpX)=Uu7rLo#d>~GJqMvyp{!A_zq{m;N^I8oD>2az+)Oy3(S??Lfxlg2bDmG> zK~jm0{q7RhAZ}Q^E_n%PtpffAkNIvsr3XnR+Raq^`-OA1qGp7=9a>t=^>>$CQVIQ* zkVS@kt`Bu-)uOBz!{0=5!X=f^Zz8o}TJgVCKG%o36n#)utfY;m-T#f}`nD6Y(OQ)^ zcV3sGC}_oej+GNGsf5O=?@=p%t`Bu-H$YjtUCv z=I<`Kq!NlHbdmXUefUijr}Zf^W1>$?a4pYp<~Cg7gr24=@hYF|Lo9KvdDe&7Q1o$$6SAH0DhZc3p%&KPV{yW@G$Qpk zUtHpZM!Np4j1#V8zKVnKA9wFOG_Tp->W5&l1V@}vAyMn_jtWXg0{5e`ThN15-FJk zbQ7!*^I!#%pe-$(;QpR7iIhwNx{2+rL%h4~MG~~7rAXA@*CvsYNkE(6c2_o%pe-#$ zRFBF;N+zKZ9^S~kQfBb#mJL=nC6j>m4ssu?Jx_wRw3OlOB_>ib321v_5qL`y zw56p?ZErV`l1V`OL=}OzBtctRsyKXVO{8QJ(2fj6;4MkemX<0fM;{X@nFREKxUDu` zCP7zBDSddJUKR)#|on64^l8Z?piR8w zobU0f3Hp^*$4bp(i-|>~WD*+Tp}yMUZubQ(t&aKHk1e)WgiFaJpuL07%!7E91Z`<` z?vh_^IjV@1Oaj`TST-P&pe?P=!8#vXuC2G}reqS(K2c?Z6-a`%w7QniIp1oAdYf)a zCIRipP&U}fBxp;kYodr(CQ>p9XvZrNPf5_0mTX^DeH}$70ew|jHlb0Wr8T^&UY9$P zNnqouLT*B8snsaz`==Y+T(~nvl1nrPJ*DU`2-2 zzqVV^az`==Y+T*En$W35OY!RJcDLM-OadDwsAQ<&USwa2K4>ZKdQ>J-GKqa2TcoBI z-R`wL4@FV>RsQhmmJNuMOk&@UE#pvA9|&aw`c)pZm%L!+5Gk1iHkv>a0$WKatD&WQ zZf`e{l1X5r31*B9)+`BSXS7s(_|%$6$t1Ah$N)hlQ_q&DyofThlHv0+felF}vD?_@ z;b%)CRLRgUBjoeL%!^3LB=)u1_QTJX)K|`&mFDxq4i=G;NnqpPC1kbQbM=)wh{y1G z`|jq6MWkdB*f@AQ*|~gIeWfSj`F!4Ia63^&q+}AqrD^CtBH2FvKfEcK#6A!5IKInTC6N)1h>8ubu8EXPV&4zy5p1yMNo1rZ zGhoABVj?Azz=l1s2)reU%s6B?Y&e#fNXaCy;S*H^-jYOSPBJw%97{~3WD?kLWGI4I zl0;SjR232Yn)?t}GgNyMyV`20|j6`@ffnFKbPSpA845O=GFQ(qbtT3W+H zWm!Z@CV>s#)yf9`m4sFoE&0NsLMG!>h0LgsOadFetCfw_cMpWT1TFdWq0%Q0R;7;( zB$L2~?`oVV^7(;~x1*)A>ARYVluQB}zN;0%Jt_&ETC^0E4mU39 zVj?Azz(y0qLTuoPNhqtKrL1jlH<6M_V8bV>2+m*<%Fbx1`tYeWk&;PZqX}{o^B|Ta zp(+C{sv7pm(Z@teCV`DJffnyJ&Clk_2sOk*Tp^Z-4&I8=w3=h?GnM+9&FHdH%^; zcuNwrrA5Vo4WHT?6+}uV0o}yvPetG@Nzj%Sl@m4`eN3ce63_?2HJti_mX>VyUvg}t zat#N8WD?L#kTKUScMT^(qe4q-*ng3dL`o)sjV4xqDjVw#`ujm7T3y=mh5pN$BvLX7 zY&1dN%mXqBc?nwb>HZ6$BvLX7Y&5Z*DA#bT6%u(nZJp-+OQ$4KG6`%nu|{U8!WAKHqQ9+iodOk$r0Cy7{swrmVi9;t63S|5DQnx?Uu^N}IVF?8MiWHnEnfNiK_tq~ zv{g&^)Yho*uaryz8%=DL43S~0OO`v444Nv8c2`l$-O&ddMWkdB&T0@}n& z&NM9h4v6PwVe z(9#-4^}2cqXE7y{z{Xx7<5xt8B(%C{$rrAw@a2wV64nc{^G<&AtzsNXaCy;rpOs$##!g?nrcMX)DHD-R_nzkP@}RxM zL`o)sjV88S%hTHJIYaxEvKm^-!S;6QE8^Am^kcarnFKbPV8&a#^7n&Cl$~j-`tYf( zd9cbUnFKZ*86c=+{QV%YWL7d%WM={!l1yT^QS(@BXjCFp$2ywBivqR8iUq9mCFHV&tjD&s)piQ)v)(;+exk&;PZ!-V5i5*ZnYL>lem z?*|$0B=&i%GcOy=Jp0NBM?}SjSNG+*x^F?GWD@&+tULI;?%=!ZU=kUr$qd-AmppT# zAW||3Y}gZvz*~~Yj6;UQMxT$hZxbn*1U7u4iojcv$jnKm#)e~wiIhwN8;%S`5KEHC z3V@0O8;>g)NhX1f1HtXi-w!^jedy^>krkm)A$e5$G_iUI^SI$(NoZ7PX$_;Y+=!G+ zf_eC^RyOdjB(%C{$rlb4G8v~TWM+tD64>xvt!&^e*_XToE&23b>2L9>Dt&AqnFKa` zSK~wxuMUK~9W9+r-_zkP zvYox;1vAG>QZfl_G(lv8z!Q^DRzpiU*xqg;C6mC0PgD_{!6cNO(Ngu{Q)?n6lfXt3 zXXhgD;Us8FOK-{B zYdE|FA|;c6c9l_)fhr>j+S1b7{?0XAN+tn)uHllPEiJvZ&=r~D)r*u&0@}n&X3jZD zg0{5u_C=4%L`o*15gwjjy-0$#wDcB9uWs33byG44Xz$>&b}$Lr($d>7?Ik8sG6`sV zViEXm611hIw|d&!O{8QJ&^}Q`kVlfBEiJvB)Th=&N+tpA$WR0|ToSaUrMIj)UYSVA zB%lvORb)xfmX>TgQe&ftluQD;391VS@<$RH6n=+vU67~_h}L`o)s4HHl6sH%obLeU2;#Y&ILL`o*H&x5mv4g4z!MN#@y%=hY= zNXaDj{UC;5gB?sl*?@kPyX++-fki#lfZ^gR1tVf63WhK zsrvA#HIb4@V8f9Cg2=GdCH{F!N%?-Etv%L zl_xeqztU=-*7s3oZ*R#Yps!9;6Z9*sKAZYp?R;umG70Fb$j}7+N~>ecqwfb(G6`tM ztCy@UF)<0+(&|{LdEkK}QZfmR@K9fEaku+|mR84n?FasZ4I*4hCIQ|1fp1tQnMq*ds?y)SQQZ6rEuDg^+eClcC%+PbjjJ0=6Y_Snbeer1 z)EV4vMg1+=B(QOH^J+q;7A?h?tJ__FKR5|&n0Q(b)NQ{HHlgT)mg25QWg;b$*ypiD zYHHCJNhpfaukwdiw`@S9WD@&+tP$Y_^B}t=p=?0E%7gY26DgSlHk#NnCr@j)=M3#v z%4%pSpWEBZ21H6GfeoLiB3QE|l%3I1_2E-%A|;c+h9d(+#S*F)DlekUtYrB7OkhKj zN$fV*IczYGBxp;E5z^CP=0&7r68lyN+yAggO`v8YtPkJ z?jRn+=k2?jCl-;CNnqpP?PTZjUGIV>$y)7d7?PM*f>On zB2qF5Y?!DBr&yxCGBOZ}_IX6@Q!!DJN$m4jXI?f~tL!Ty91)eCyt*b*GKqaZ)*XDt zciHnKGE$QnuwgGTk&;PZ!=6|K-jYOS95Ng>97{~3WD?l$i7EnbNg^{RnHn38B_>ib z32Znr6hU2*L{xvt!!|QN5>KL`o)s4acj4jn!KHdQtZHjUqkq`S}-zDVYR5eIoq*AQFv`HZ(T; zOK*+J-}WJy1UCF@a;@%x(5TR2rLo~(teZ&5B(ULM#TS7OCqY|UcnmiD%X`$zW$EiFzkHqP&WNXaCi&+mXpg0{4XMA+~f z9TczpZ6A_JK%02U`QV&nU$mt~MBV2xYdA?Jp%EUQUu`$xUK7Q6W=m$EC$H{Hew9Mi zmy$_f!#h~N)ML++pe-#j95(DF&&(VmC6j=*Cl-P4CP7}>$>I+(0R8D;E=wl)!lYl-DRgon@TUr{ef9Z{lB2qF5 z=q6?j$9R!wRJ65*{>6IPAmgND64>ys;)@^;CZW|uOTOS=-kV6tB(ULM_ZP8xV%2cW z1BtwZwtTwZIlyT6ofkw(CV>sVr9da@K*-zC(mC&UC$L8B2dkWtNnpcoTPOnmNqTPxvl2l2G(POR>_UGLe!=?DOF4VM8?>`$1odqO_GIyt*b*GKqaZ zh#}Zu2a`}XpkL)Kdx?pZOadEC5ZSPSw7gCV>r~s3P!|B$S=eQeEOx zYa%6+z(y0~rga)bhOI8?_uN5Kg%Q=dii-F3nMlbbpdGJjRAjd#XiKX{tM?9Wqaun{ zWx0;9-aI-9=&PAGp;4jLYpC}plKLU=#E!t@Z`I2lDJCEtv%Ll_xeq zztU=-*842a-rkZ)Kwq7xCg@jMeVX-N&hx2l$t0k!B104OE3J+(kKQkul1V^2UcF=o z_juKPK})M+rRIS@iAc#LG{QrDwZ+};3tC#8CA1&-6TeC!!lh&q(7hj9#`)%+ak?*P zX?3=fUqLVrh?GnM+VQFg$Rub>t8=i<2Yq7$A|;c6cDyQr6-a`%w7UAxIcJTq0g;kP zKs#O)!A>SYTUuQcMZ7YRl1V^2UWxGcgGivICEHh3Uq{hNKwnjsO=whTX$`Nc*M3{* zB(QN+AvdAbMN7VLRfYH4LMMTZt4e=+BkAT>Xz3IjZWDO>cAMz8h03o)VB>IO;Y1w> zc{^G<&At!TIfqEeB(UN8pd!P8(5XdBQR(V-*Y6jd1U5`Otel|C6n0qV~q$emj zv4O25l-1BuKDW1UlHv0+ zfelF}vD;v;vB5l&pe-#%NKc2E7m<=l>}$2{2id^i57Jl8oR!ALVF!yy$t19G@RE9J zkVNhv9)pec-OUq=NXaCyaqxETALYC1D?Jg<=kvpfDk3G5z(y17HT%IiPa;ngXC51e z$WTN|CV>qTFJ&W%j3q>(eI8N!RD_dc68k*J%Ggj86_F8+h|1?)T@xvp#J(Tv4nAW; z*+6||q$V@)xxK_hN+y8~dtwoIOA?uJ$Z*)`^RbS`L`o)s4WFnYID<)K<|I>N!?DCf zN+y8~M}{KsuOzYppyI&B<4Q)7NnqnZ)RUs@YgRJ!bg0OR(5R410vk=N{=__P_*W7d z6X(9k14-@w}S2{r4aI*}uGc_0{{b{B-^1@EiZG_D8S& z?%r+wUi2I5|5LpY%TBc95dm%D_D8?;7vKA+Y%B|spSk_r_5a>!+XrIViJz|HJrWze zlHYx3<3N>1OxQ*esrB+F z+dN+U)3A|}B;NkyHbN1$kwj|!>8Jmy*6j;FoHkOD#20_~g(G1bNu<{DZ*AieY$J)(T9zh0`txZ+dw?fuH)(s_ zp8s*oJS9nZpI%F(me%c0K0R%uBnj=)>xtCTy8Y`N zb}inDz>4%=Q>`tHYDq~FyyF0(|C%a^lqA6$3n2P$qt@2?uU9uENl-JcN;`3TM5GpP zEP&|0bXr^MzqXN*B&dB?rJcAvB2tSt7C`i0I<2ksU)xAY64dak(oWnS5vj!+3n2P0 zoz~X+uWh6x3GO1R(oWnS5vj!+5+M37oz~X+uWh6x3GP&@(oWnq;+8~eX|(+prdW`T zlq4a0CT_BkL~3c(`!8k7#MlocNod_n$i|X=rItSL>Xk`o9w|veZ4*F5AKO5ZTAE*1 zuc(ViNfMfq381o(L~3cDRK4ytQj&!B#)NEm&yl2-Z1+=xNAp0EgzTBHjqEG6wCerz zBW(X03GGjn#9L6XGJUj6NT?RKs7Cy|mQxOqeL6G+A+ zZ%-n%xJR!_=XoreExAZze`EQ<+p_1ZW*aF<;$zE~Y97$XnJ1B28sRzDrX&f?!=t)s z<|#>n+dVTs=h~Dc@v-G=+dO9Nb0l`Hd9PjVZP6$D{naVnXT-!*=k@!l{u9m{a zK9Y|uyVh@f(Cu?YmXiN^hx_uf{=YTv{hXsp;&(r6n)>m$=UNl)uaEAvdIqqsl?WtB z@LYotI!AftNu(A}DIlCVP2^oa&q~@m&LbsB$i^vBuTLa;O_+IV@q~p@o$|->o7*b> z;+x;U|7hEfk6wLW&ox$}pG>Uu=2tn7BtE|F`6oVjZ$zIYQtM~0+AII#opbcrCBLxw z?r(kg{?9q8BQYY}P4iH#PQSWYFk8iyb4*N061*kv@#-d#TDYo`YML!|v_3!kRZ5c3x}7WJBvMPX z&!G1_&w6a(BcuD`lZEdapx&lbaBch)n z2eBlfHd@Ln{oB4EZYg<0^waYomL$|hOZl;XIT^$)C69>y79fZv3AOdz#Hv?sZ$9kc zP5C^3d7VUmH<31yP+Q+@VBp? z;_O#RsEw8?@{_mUQu2uKiMlybM+GS_q4Lh0c-ZqLB}vGSPj`a@ky<)kzOi^zDN!sT zo~P~OsH8<)QY0d(Wi4?eQj&yvIzO36BDFNy^YfCFXy!b*$)2u9m4sIMT<_-dE8Z{4 zDWZ;61b_Xrz9e`9D)iY#_LW+^mlfjtG%6*$Ar>vxCwn^1JS9me zUY`e(P}}EY9d18o$i7lbw$D!{QcG<{r4>1!^OQUyPO)T3LT$9PH|Kbjl1IcTCN4>+ zjg~y-9CuUlh&aXeB?-0Bl24!WM@k+M{pO>AI?HPS literal 0 HcmV?d00001 diff --git a/documentation/topplate.stl b/documentation/topplate.stl new file mode 100644 index 0000000000000000000000000000000000000000..38196bc5c399032a11919c7b6914b1973138083d GIT binary patch literal 37484 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

&%F7T!xBi<3WO2j?{8H=343YwYaT^X} zWzPif*zsPL&T<|nC?Vl!FwVWwN=Q)4Jw1L8(qmqDTMKW8VQr7Mg9PudIZjZEx9T)v z)QXb%exC>0_)ou<*6fP)or(K9(SOMdWo&sd-gRG1znrBqR!T_Nc4L3HYD&2gl#uYV zPwYCApoD~n7yQN|!BA>n80(T+h-Lc*SC^wl6JA>lh< z#;q#FzJvs|?BUV~7D`BXhb4BlYXPGSN=SHjC(Z$opoD~Tino0vC?PRw+upd7poD~b zB;JgYpoE0SDc;wTpoD~NA>JaBpoGL`Z}=6AK5O+GXZ2a8zMVcqjNc5a#l-r-yqw;C zKg?$bSu4*EzGWv7XPu7`rrSyBwu7)N2l@(zc2eV1Bp z&zB=hd(r*70!GerttheA&Tj!&D-vEA@}543{tLu$^Vg_heWGJd$7@BxEl*E(^)9ft z^fCY3=pSjh-}2KPB_0nw(J`mvwIbp4^qVi5gDdl*mjAxpbLTOqgoJAw-zcJYN6VEL zwcJSGQsS1k_~B@+2C+Nu!LsMx^=_16XYXaH z3FRsqVG)RsE>Jh_e)ydnaU9|CEjQ1v2U#z zBAL}5ZYrbSs~1GlO_G?hvota|h*e7n*-12p82zbJzer^9x)w@%G=SNE>9l$YPPXph8iAf{h3Ypa?G)c)M>KVXeqx}m$C+u5( zf1jQ8DFxrh*m}l(iAS*he`C;64a``@{0WKxZ~I3 zQUAY5NH~U%+eoTf{WrYm$ctL0$CI#$5$Q{^wd005gSWEhmQzB)eVF$ENKnhMZ`zqy zDRI23-4Et;yjCO}m*!m@=0z?4JwMSq-cesUTGAN&;J8HZvmIr``}45fgJa(2d0Pkj zchn+m`Ee^(8}e<;2SF{r-^oubl#uXDi~Gn}1_^3;*4|NXahb=163=tptHzvWf)Wz; zE8|VvYHKG!E&qMIeI0~7oStj!6P2&i>4{~m=aN{fy}Ro^IPRdUeKpFkmI!-lX*r#q zSXN4$&UetU3~MPbuc8_Qr^geEYqe71vSCo(#we|Z!_f>Jr)j!tKoFF~hE+r&f_MurD zaS7|5@6xMXTmN<6-q%#caGqTeYh8;kA+gP1{I+Zx!Rq^lFQJybg#6gP<=Z+znycMR MP(s49HvHB90djPDt^fc4 literal 0 HcmV?d00001 From 3db09f424ad62b86ce0a0106e99c09bc5e35189a Mon Sep 17 00:00:00 2001 From: langolierz Date: Mon, 7 May 2018 14:07:11 +1200 Subject: [PATCH 05/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c2ed3f..5ccb02f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![vectorfront][vectorfront] -__r_e_c_u_r__ is an embedded python application on _raspberry pi3_ that uses `input` from the _keypad_ to control omxplayer's `video out` while displaying a simple text user interface on the _rpi lcd screen_ +__r_e_c_u_r__ is an embedded python application on _raspberry pi3_ that uses `input` from a _keypad_ to control omxplayer's `video out` while displaying a simple text user interface on a _rpi lcd screen_ ## features From 9728722691221cf39188254b753ef8702fc2cd26 Mon Sep 17 00:00:00 2001 From: langolierz Date: Mon, 7 May 2018 14:14:16 +1200 Subject: [PATCH 06/12] Update build_docs.md --- documentation/build_docs.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/documentation/build_docs.md b/documentation/build_docs.md index 19abdf5..5b1cdbd 100644 --- a/documentation/build_docs.md +++ b/documentation/build_docs.md @@ -26,21 +26,21 @@ other bits and pieces: ## print some things -- i 3d printed my enclosure using these files for the top and bottom. if you dont have access to a printer you can upload these files to a popular printing service in you region (eg ...) +- i 3d printed my enclosure using these files for the [top] and [bottom]. if you dont have access to a printer you can upload these files to a popular printing service in you region (eg ...) - 2d print these [key stickers] if you want to use the default key mapping, or modify the svg file (in inkscape or something) to create your own. you could print them onto vinyl, label paper or just normal paper and attach with with double sided tape... ## put it together -- using [etcher] (or otherwise) flash the micro sd with my modified image of rasbian (or follow these [instructions to install] from scratch.) +- using [etcher] (or otherwise) flash the micro sd with my [modified image] of rasbian (or follow these [instructions to install] from scratch.) - insert sd card into pi -- attach the lcd screen via the pi header pins so it fits exactly ontop of the pi. (some little spacers could be used to support the top corners of the screen) - - use the 4 small screws to attach pi+screen to the bottom piece of enclosure -- fasten the keypad to the bottom; i used some double sided tap along raised strips +- attach the lcd screen via the pi header pins so it fits exactly ontop of the pi. (some little spacers could be used to support the top corners of the screen) + +- put a battery in the keypad , insert its usb dongle into the pi. fasten the keypad to the baseplate; i used some double sided tap along raised strips. - use the 6 large screws to hold the top panel to the bottom @@ -54,7 +54,10 @@ you are done ! wasnt that easy ? [main parts]: build_all.jpg [raspberry pi screen]:https://www.aliexpress.com/item/3-5-Inch-TFT-LCD-Moudle-For-Raspberry-Pi-2-Model-B-RPI-B-raspberry-pi/32707058182.html?spm=a2g0s.13010208.99999999.262.bV4EPV [usb keypad]:https://www.aliexpress.com/item/2-4G-Wireless-Keyboard-USB-Numeric-Keypad-19-Keys-Mini-Digital-Keyboard-Ultra-Slim-Number-Pad/32818206308.html?spm=a2g0s.9042311.0.0.FkRWty +[top]: ./topplate.stl +[bottom]: ./baseplate.stl [key stickers]: https://docs.google.com/document/d/1vhXv5QTfyUqsZuMdQu1lh2dMfEk5HMNVyp8uhrc-I2w/edit?usp=sharing [etcher]: https://etcher.io +[modified image]: https://drive.google.com/file/d/1nUR2u-75oxgvVScTUb_DrJdZZpJJqyKc/view?usp=sharing [operate docs]: ./operate_docs.md -[instructions to install]: ../dotfiles/README.md \ No newline at end of file +[instructions to install]: ../dotfiles/README.md From 9f027c6ff790571eded27aba2330966ddade8bdb Mon Sep 17 00:00:00 2001 From: langolierz Date: Mon, 7 May 2018 14:16:15 +1200 Subject: [PATCH 07/12] Update build_docs.md --- documentation/build_docs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/build_docs.md b/documentation/build_docs.md index 5b1cdbd..287ebb0 100644 --- a/documentation/build_docs.md +++ b/documentation/build_docs.md @@ -56,7 +56,7 @@ you are done ! wasnt that easy ? [usb keypad]:https://www.aliexpress.com/item/2-4G-Wireless-Keyboard-USB-Numeric-Keypad-19-Keys-Mini-Digital-Keyboard-Ultra-Slim-Number-Pad/32818206308.html?spm=a2g0s.9042311.0.0.FkRWty [top]: ./topplate.stl [bottom]: ./baseplate.stl -[key stickers]: https://docs.google.com/document/d/1vhXv5QTfyUqsZuMdQu1lh2dMfEk5HMNVyp8uhrc-I2w/edit?usp=sharing +[key stickers]: ./keystickers.svg [etcher]: https://etcher.io [modified image]: https://drive.google.com/file/d/1nUR2u-75oxgvVScTUb_DrJdZZpJJqyKc/view?usp=sharing [operate docs]: ./operate_docs.md From 16908baa128211c72e541e4d75c8d19646d0ebdd Mon Sep 17 00:00:00 2001 From: langolierz Date: Mon, 7 May 2018 14:18:34 +1200 Subject: [PATCH 08/12] Update README.md --- dotfiles/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotfiles/README.md b/dotfiles/README.md index 5781a48..f6cfd4e 100644 --- a/dotfiles/README.md +++ b/dotfiles/README.md @@ -54,7 +54,7 @@ these are suppose to stop screensaver / hide cursor / remove on screen power war - i then went into pi item -> Preferences and set a black background , small task bar , no screensaver and went into the file explorer -> Edit -> Preferences -> Volume Managment -> unchecked 'show available options for removable media ...' and made taskbar auto hide... -- created internal storage folder in ~/ +- created internal storage folder in ~/Videos - set a custom splash screen by replacing splash.png an image at `/usr/share/plymouth/themes/pix/splash.png`with my original. i made a copy of the original, and then copied my own from a flash stick... From 64c6020e24274d7b11b6e8cf88d8d5fe982301df Mon Sep 17 00:00:00 2001 From: langolierz Date: Mon, 7 May 2018 14:23:39 +1200 Subject: [PATCH 09/12] Update operate_docs.md --- documentation/operate_docs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/operate_docs.md b/documentation/operate_docs.md index 39fb9c8..3472a69 100644 --- a/documentation/operate_docs.md +++ b/documentation/operate_docs.md @@ -10,7 +10,7 @@ ## controls -(put picture with controls here...) +![keys][./vectorfront_keys.png] the controls on r_e_c_u_r work by mapping `keys` to `actions`. this map can be fully customised by editing the respective json file. From 159f0454299a888e577af0cc5d08b47289104e3d Mon Sep 17 00:00:00 2001 From: langolierz Date: Mon, 7 May 2018 14:24:33 +1200 Subject: [PATCH 10/12] Update operate_docs.md --- documentation/operate_docs.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/operate_docs.md b/documentation/operate_docs.md index 3472a69..f1293f8 100644 --- a/documentation/operate_docs.md +++ b/documentation/operate_docs.md @@ -10,7 +10,7 @@ ## controls -![keys][./vectorfront_keys.png] +![keys][keys] the controls on r_e_c_u_r work by mapping `keys` to `actions`. this map can be fully customised by editing the respective json file. @@ -86,3 +86,4 @@ the bottom line shows the `control_mode` by default, but is also for messages: [browser_example]: browser_example.jpg [sampler_example]: sampler_example.jpg [settings_example]: settings_example.jpg +[keys]: ./vectorfront_keys.png From cd6f33d3f3f340b1f8418b91407899b322ea65eb Mon Sep 17 00:00:00 2001 From: langolierz Date: Mon, 7 May 2018 14:27:18 +1200 Subject: [PATCH 11/12] Update operate_docs.md --- documentation/operate_docs.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/operate_docs.md b/documentation/operate_docs.md index f1293f8..a6b7469 100644 --- a/documentation/operate_docs.md +++ b/documentation/operate_docs.md @@ -78,7 +78,7 @@ the bottom line shows the `control_mode` by default, but is also for messages: - shows a blue bar for `INFO` messages - shows a red bar for `ERROR` messages - full message and trace for these can be found in the log files -(put image and info here) +![message_example][message_example] [3.5mm trrs]: https://www.adafruit.com/product/2881 [display_image]: display_parts.jpg @@ -87,3 +87,4 @@ the bottom line shows the `control_mode` by default, but is also for messages: [sampler_example]: sampler_example.jpg [settings_example]: settings_example.jpg [keys]: ./vectorfront_keys.png +[message_example]: ./message_example.jpg From d6aeb4c370836a88dc3b4e12c6718fefe02fb5e3 Mon Sep 17 00:00:00 2001 From: langolierz Date: Mon, 7 May 2018 21:22:54 +1200 Subject: [PATCH 12/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ccb02f..f31d75a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![vectorfront][vectorfront] -__r_e_c_u_r__ is an embedded python application on _raspberry pi3_ that uses `input` from a _keypad_ to control omxplayer's `video out` while displaying a simple text user interface on a _rpi lcd screen_ +__r_e_c_u_r__ is an embedded python application on _raspberry pi3_ that uses `input` from a _keypad_ to control omxplayer's `video out` while displaying a simple text ui on a _rpi lcd screen_ ## features