From af9d511ed313e6a03ae1d8ee5a1083e2445c0705 Mon Sep 17 00:00:00 2001 From: Guillermo Ruffino Date: Sat, 25 Jul 2020 13:02:21 -0300 Subject: [PATCH] add buzzer rtttl docs (#700) * add buzzer rtttl docs * Update components/rtttl.rst * removed references to not supported PWM output --- components/images/buzzer.jpg | Bin 0 -> 37685 bytes components/rtttl.rst | 162 +++++++++++++++++++++++++++++++++++ images/buzzer.jpg | Bin 0 -> 9283 bytes index.rst | 1 + 4 files changed, 163 insertions(+) create mode 100644 components/images/buzzer.jpg create mode 100644 components/rtttl.rst create mode 100644 images/buzzer.jpg diff --git a/components/images/buzzer.jpg b/components/images/buzzer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25fb00b1c7eb9ac910e533a1e64db3a1e7a5771e GIT binary patch literal 37685 zcmeFYby!?YmoM5#Xk3D%fusM8Kuf5i)KhuAf0K|&23bFt+G&F$G z!w2wZnK(wq%f=D_P*DM}0ssJP04AC!0R4f(eK=7JvjJc}@MsUbR(i%?-vBZIfY@yZ z3;;e{!+$uJcpw0H=iz|;7x#Dh8-c$O_#1)05%?Q{zY+L95dk@O8+&^TI%SmyyW!vM z1ndVJ<8M3R|HS$5x6Xef@HYZ~Bk(r@eIxY3zfSlKv=GaWSiV4|}z z7iZEHP~lc_eraKCBM*16(1fdMnZfPMgw2^GB?xfEyhOYloE>XW2yu|7M zrFM}A{;$hi^b%q&=9VHFuVnur@o*+i|Bt?SdU|qt@^L!3SaIay&?I zxOzLfnRszHxLjOVSe@H)!-UIhh~3JN-QIw&I(3o8pHEeAITGxsxQ7UsVyK?4GTxY)R)xVWUu zR1{Rq|8)7&0wBRg+eTN!K%)nslb~Ucp#A9p&^~z19zDe9{tDCmqoAQLx&X7#VL+>}PD~i;7lqjgdnJ zK2w)q99)VgAWEudj7-cdto#Dc1%-q~UcQo%m6KOc)YQ_}(S4(*Z)R>`X=QC=>+0t2 z;pycK4|)F~H0)z|L|lAAV$!GNl+^5;+`RmP!lL4D-z%%CYijH2+uA!iySjUN`$osc zCnl$+XJ(gIR@c@yHn+BSj*d@G&(1F{ude^n3k`truWJ39X8#YpNFMY;$Hc_I1pcKL z8oK8LVUS=xddh?KSXv!u0wbm84Z~{0QbO^#2;_d8h~nqbLVD8Hmdw$W?f|#SYY9 zMzb#bd4v(dYIV2#Vu%#XUa0mR7Z4Yrj8s=j1u*A8g$|_X;?O9`0P3=Gr4L7$|8Am$ zWC!9t^gI7M=VU)V+K|AeKmTRX@*e<^Q;mZEFE|=RrEYbrD^MI18_{}16j7;y&g|#OTW2CFhx>BgyxjG_%a- zj%AuC`|Jl|mZQ#mES^ug|+dly6Mg>^yo0nFm@68fUKmm%!rPCS!j0hyt z6n#eEZh15GvidMn^j*X2c~h|5HEw6^5!QE6QpVE4$MASjS3N)B*#K6&bl7AdN7deZ z=B^XxP}z3!=5aRLZmxaa#B5Lx8z0eNk$KIcJ*{o5cJSJ17J-+T!k0PlobB~{bJy7C zJg21%wBgM>UtdF~EECn#DrLX@0f?;fGK&Mn;Xdld;vou`%VjO<0@O-uzcjMC0-kny zplC0bvwr>6nVfRek}^)ieIcvvUp`E#E8q zR74`wcPC?q1r&lJstyyY<|kd*lcpZOq!Y$R$gOt5ojyqL+SLmqIJ6jxthup{DYPL2 zV<)-5aeiIur6Jla33eHZCrUI^I@O=TfOAuaW&Kd0o&f-vdhD*u!|}g^q@lpkK;js_ z_&I@~l_9cif2y(6U9CD2bi$r?f_*>0*%z+x0AhPF8dKBR?>ibS+;f}InY1~9w)a-AW{81ToSv5pGf^W% zH=Tt!QtfJL$Rauj;gAVkw9YOOP3esYUY>Nb#f%o1*}SGaQ$Zg~0aJ_%Fz?Yf?6cg3 zme+66oy_(Sm6e_NPhdiON{xd3F+`Z=ZU_ z>DBpQNj81AyrLezp}Nj#^M{Vzs^@hU+QhSUx0o|+gg2DnN;&;E+(O1m$snPDBp+LQ zSIOINm5&-B#3SwK$RbtTRuXYlk=QNKDTNgR%dwXuW$vOEc=#lrgv1}F1XI>oIZ{lo zeDN|~zi!-VZX+h~O^x}hz}w;PA1Vx|H` zDMG&Vo6&%luuZLn7AI9T=;$Zs`)x8mxcYi*uNajSqtr&Q$0jDRtkgx`thfvouM1$4 zh8e9`l(w8~FUwWsm9JI0X8js2K&>1)8oz#;^MijS%MU(`AxN0AcB3AW*~kns8v|Am z{3fDN0f@o_U3hK9uU0Y=#mq|Sl!qvB8daryG)68o1q%NNYlCnmblzizqE06Pk?A3T_ z)-i%(E;)0d40SgP%uTm!u84RQ$KYnH9%v!_+xAVbbv~kUN9zBx^$!WVehsJkTxv^V z16NsCZ$|@@@Kp?DF$RheoxeX4oIMkA!xL6)xA)ymhfpHX{6pv)E#}fMB$_8&b$?`P zjh8#^zo{A+AK=@};z&nkQQol$e80t{Eq(KtoGIAvGJlW8`Xy5pG)|4~o-9zT#f#OM zc>(b-(s3~e0)VKqBcRJ?EQIDm&{f#3I3j<(Hwj6v8Y#&Yaf}AoLV+;@HRmY*-7K?X`wOW9NutN6%)Ejf-?)*!&#s&p> z{E1M2@%3n-1&!B5E=JH*nkU<|Ms)Je5JW3{jF}&Bc=_7{b=T=9a|rFiE5Ed1cgz$# z4}dy~eLEL8o}4_B{NVnMP)v>~%vX*4I1cKI^ZFzanC`O@X{cMhITKPUQn>9oyz~6| z#q*!#_=OBQnlZL#@=We-50e4|m-*ot|6fffYDkfgH@D(-2thoKeg&(DU_^sLi7_A} zKNY8^w}9-L@$fHJ25Bkw6?*J`l1=y*gQ zkUrG|?SoV+|KnU@tyI_8Zc5s|RO}&jt&Eo5NdXgUv08-r{ek;MnURf=w^Bm|Q#wjo zK%$5xO+6(d9nt7k9EK2e&yT?inMFE=O~xn^awne&=h~o&vrOZZ?mvsJ$@#!G1}yb} z%WREvP`q$n^4$r@a4rdMPsg7;cyBoa?`0Z{3US#SJ}t5)%!{aPLl)(uur^k!B&@>c zTsqggXSCMFy@iC<)yi#?zM!v}+Bt=+Mx5vmpsc!6WBn8Fj!9UNd*8qgb9S9-Om+k_ z;J=1&y7d9f1DHoDV(wW$%Xnv+PW~7y1yEUl!4V=Pr=$Dzgaf_BE+|pyUT=UuZTb^K zjR<`U{+e#c{n%2Z13~Z2w;qWU{o$!*VVmbSt0QhVk==XH`#rTYfprOqqm8^(Hu;qw zp^MZ$-b(Dwr?;+ye!Fi*QYSlnyo`F&)qSJ5fK!w4kd%dA;>;QV;e)Z+cmh=2d12E? zHd#4Y`-PvVWk%!X)B{(M9x^l<)AIRZjnfG)O&USKh@7(_H(Rv9Khu9zP%d(Q%yLiU@88>-4Ts zG{XxSHhQ*Ka&(i=F2b~@o4z!-_9|=Ef{Rc2(NKwBuW6R(0H{ti0e%Tcouhdi55ilR ze;*551J>GFR??n?wSa$uZ&gsL|81nSR9=Wr2>PgACzW#;M3hp?wk?mr3dem8`CJPg zeVn^==vOEVHaCseMN=z)8|wi1F;G6I1>;r5;D$h9G06DX@JO&QQ-qN$0Uc%!WgdX` zlbE|u*2$FQ2WGk`?(TeM09%*P+zxz`3qk|p7D>R32&9psdBC=E9EQqJP5kYh>n0z12F!XHu z10a=N3BWUWTXKKTO`oW+#(hTf{VhUz%dRuQ`)$gu%n92EGIfpD|LgBijB;WT0DYFA zP}JHN3e|HFM2-VB^WZ>h8q&nbVTBeUVvoC>J+0!+Bz24)ezsX< zgR6<^8PqnTnb~_52#oF27#Cm@rS?oZ-@)@5f2^;79&|a?pSs!UL~e_Cv6vSn9yjfJ zHANcW11prbXs%6N(G`tUT|W%SbAO2;cx3I`|Af5abg}8kr|sHuJ$S=lI}FVsUic3n zNRYh6E)#sl63K|nZ?#QcQJ8b}SL*coCB=<>0me|V9B}IfVjmO@h-sm^mC7#XI`qfl z{YnN$GOw&~j;D^!%G`5B!>u^G?Gp$eelM2e=ypw+)y$B=(9>o&gvZ1i>2RqotJ5iG5qQ^*K2Fv9M zGG+QF&~&)x|7P`;IHMDnrcn`vj%x}+?g&J!D6;@RD8)R=#+E5kr;Ioa@&T>3@6mlo z4VCMjYRl>&$l#fZ=W3z)b~g303@xeJ98d_)wic=|<+rzES!l+Dc78!$T6@^;hkn}*ixzJd-NX=ENY+vw^-KA$I4*oZ^f<=i*4QKLt zbi1ADHC=6su2D45MfnE`DG<4+{Fa>Ub^KC!ME6HuL9!=AX*XgrjB1PB0e!VR3C**j zU#tB4#W^F;Xg+2)p42jDM*#lQGywdZZ*C^M67PX_l>;5u^7(|hX6*i@)T)EZD4tRT z@!7$tTh5tieKMo`YnuE_&l#CHd@9w@S7(&5&OqhyY=CR^AvB*iGH;R7% zF=g*MG`utzk8hQV`uzmmd zY|OmbjaA_o|FQH)kP_0}#0R8gDgc%3a(-NG*y+X^;1H1SR<+?>3{4w<`4P%cEtkiS zVxISjFqRY)Ln;Ddj&sQRV4JZmh4YAx*BHgrF}`I@ClRp*P|98Pp8*~QV-YF#BkBvJ z2F!62X|&v~$b6A;FLr5sp54iuh~571M0jkc90rdL!`)aHThAxgnUF1gllAJJHT;~L z=2H!}5-u?JosHmQ0?Ps5CW7TNLe^S&j{#TY*j5VG#nK=vv=J=y`N5hU`-=O8XEge1 zm46a+1-D9diP3eGaMGu)#X+72bvKE9ZE4BhTP;v+K1~+)fh0VGyt5&QwSO-NqwQv zwR)wg*dm+**c?rdlB*S<)almO#w4s1aAxfC%ICJ^OJW@B z$l1*uac5?|`4z>EU?w=n3Vi!^)P?07pHWy?!eqQl6ZJ=GGk*Y`me=h!M6VO7CW?{I z!f%c?p*wzlC9^d|>PF=9E($rb@2^&2*4YukZT~qRr8qMh=+LgWndSE7xEO~YdESQv zLIxzgH?Q|C+e99)-*Fyd*X1u@{Rdz-Y~-cYIO)(B!|QP-P)#EQwBW(Zr2} zbp>sW9d8kngrP+k#uWMXRFsX(aZYf;riT9a0$BDf?{E%Dht;?xnl>So9_SnrnYzlw zwu2$uZA_-Q9z!?3_UKH2tcK-lj4bxj^9w+blM*fIf0>qcf3D-0Rnt8N1MK|&o39P>mu2|03&S7A}GJXw0MpvO(3X|oe%;GkgAr&`;LJgf^M?Lh+|H$q zgetH}O}}Ssn!JrrPE-GU=y)`Sh7gtIK=XaF;OOnvJ8Xq0tc*m7#1>dashHb(HfQGbpoxy(-}(4e1YpONVkfWVPvxXh)iATKSO9+ zb_qu`?_I=3dicoOVrI7AYPvxMQc5~FIl2Ig1)qfmaAxLHawiMAji6&|qXPZ?!Y&XT z14lXabhIm~3$>Z+6~V)W^>3>`5vHALpUJy#9Y#7F?272)vb;4oxnZ{)XG7bD2W>+X zNL;(!XJZxLQat(*u*{W*TSpOmJl+6h_~cvhLB*KCY;S?>>_Ebdp2pcaXep*WnC+$9 zXjxS_4SOOct}DYA3F%8ne#1ME7o3YkhOq8)U#VNgVWBK1@fqgzd2y;lfpzt+1@Vp8 z$PvTi=+cI9_*9zEi74uW@LN2qr90L~SXXNe{AVNhnGR-7NORQs)_;^BJu5k(2C?qx#F2VM371UAi8aTN7vhoY@$!oB3q zk-nGy+$(~VvJ5n}{bGXdE8U^at`*n_ay?@DNcSU`uhJKlfI{$N#cpC@k^+lck#z^aPW8?R)bM|+tG*8oA}O8Fo4T-mzIS6syS?30ZSS9B+5a%rZ3eP4zMWOIrr`a_7x8nw8&JZ_ zHEn)%MCEUizG~_U{&cOxWVQk~zfXrZ9Wh>M?H-?oCElSuGg|J}-{BRvTSo?=IPTky zMBW%yDB+z8F&vf;Ta7U`=ODD*@pHjb;reOszrasfT|43;_+-o-|EHee*Yf$ne3OBX z6$cuOTSI+Z^)=j>s!Vq@y7-#L&GHEtTT9ZBk(HH`ZjosUpY;La&*OPmu@kDZ@^{%S6}V~RGQ%Y1P!=5S+{Fy{EK&ZGzp?$+fO19Q9>Dd zy=Q{q`~tKJ`OT;P>$0Go%Dk_}Q$wi>woZCmg1)zR!53Mp#Dx)c|EA2vZaA)IrOR7t zsh1LS_2EWHj_2s+LoxUV(2Gc zS|-KC`Kjn@cy!%swqFvIcE`I^_D64dZe$wYJH(irpAUGrY+CAKo)0M=Kg%3%*Mh05 z9WZ)ni&IOmCgGUHuEq%}kj3=%NdxD#=%0%r>=ymSyiCgZx6Vpl5j@MnW1bZR-8>J- z^wkXsZ6i#3V@^6eHMxE{y~^U6(^D=znh_csBg36=lS5s9XQ!(=BEX@B-Zr?gtS0=5 z^+$%$c;nL*0@jX2qiM;RPr({ebJAy>o-8?>a^suiwWm4vn35vi*jW46CN23HwM(uq z$-l@h*x10`$wuYW$3}x9GZoDo%>s$|jcXS2&9m*j;7Mw(bc}%g_>VBb9Z*)_mz%UM2@T+9WHQ40!0sfo+B>>T^w1UpRLT6MKZ!08YCnG(}S$@{L zBwNZ^YUwC7oB&%B!FM(GDPQ#Bq5vifEGz;gLlTy-d^9W*{&Gjgkf5>?61NdHb(qF1 zz{x-e_HP!o$ym4s&l*+k`{~{c5GF@eSixEG&$W}9*wzcOZ}t4?#w3e~9E5Eg@z#vT z*Q;=oD9D77bWNT-A4+7LH;SU4pk%SgT1l6fG@WP3{k-J-B-i;j-ia{XW?|=RIX#{y zxaLbqs}YljWvJO-AAeU~4&sl3t$G-XWMvx;6vR~pWV=S>VW2JVN-zC=y) zPi(2#o@SqlU2({ntH*A?__mtIysH&8y;fkECXMM%h8;_jW4zT#srr&IXR*2LQh4RV z5mP8V>DT+=%8n;^Cv6`j=MMQ~W6 zba$z1-o7Im``hjsa>ez}QI2&@p`*@!&PzAA{dFCkqlb z0ELpXlmej_!)W!``&N!=DY(d=Cs$g$zYM=VrK_s`1F#89L~g1N&L}>g9~X38h{LGN z`8;h~HQMb!X}6o~5D)f_GyVgJwutw0L8)c9GBfSBgmU{KL`G$neXi!bt9ULJ*x~|M z9e=~=8m8Pnu0FCtZGS36KqS#8J``S7#M5`Hy@|g${=syQE>v1{OT+1DIRD`fz!|H1 z#kS~h?>(%}y8owSG(zE)rPxvV6MvN@P1%p4cdxoO4tgVn<{)M*w`?x`?I%B#sw#h~ z=_c?00Ss3dv8~jWx&0tDd^JQD`STa;K%m@Nd4ZeVkE$&y_ntq1r0Q*`PaJPRqPN}v zZnCXyHk|5pasI6QI;R+$%TY`;F6{PI`F+Tn^U00Dt+{zRm-)CH=hfW-&kF}An}g6w zoytqKRE5Ya(eb6nLc-X@NTuCee_Doa2k)W*epAPA z@Ykf%$EX0bcNVS#)k$J)QeXB*g4Hu3;=8cC$mWrX(?@*UnzqN)VUCAyqKdy~bXLq; zO-+7t1r2FT54aV*1@(!Cg53uA%di461lDN61SkyGNLyF8rCc7zDPf zM?dJl$i%dqlEsmmjA8m$e*OeL^eYOB@8$`Kcq3)Zu!zaRU>_)$eSJiz#oFUmcb*AQ&7P=H}iA%wHuOI>UEi_`uNAo$#$&`WJ-Yyzk7i$&**=&^njng3`m#b zwN&T%R^R+y_+XRzxy0|Y@d^8sTQRKiv>UEW=zok?kdWTbxW6Ox2Y_3`C+FDnNl?9{ zqN`=b3r@JB zg#JdVBd5g1oR7}#aY1U!4e4SHN2OHqFSet*#YfgMW=<5(yYia!Q$t8UnIYoX(ki~* zWv?L*d;{-Z9NPM*pl@xO^BC-%4H7MhOqmyc^nZ=z_edf&%*8up@a1w9RFJR1syM5q zYkNfkJRph>fNpo}&pjChjRrxJel5~u%sVtEI-Z7zYfiZ6t$fZ%2&lleU zfu#l_pIX598Z0u!SD5{!B^?Zov9{L{3tKt=l*Um1LBgx2->jls^U}eEON<~lJu26L z=oWMJO2@Gwzq`1VfrIkcB8si>%D;BN#>;<}fTE3BiCM7|wCX)1FoaMdk((h`6pO1D zc~XOw%t0I@U##&?bw_G0q?_Exsfu3?{RQ^vO0y|SNxg4x%fsiT3-gHdTn(bOXhN3H z=w0cXd48uFH(*UL=J!-e4_0$HVx2`loPvR(%v+Pciny6?+4Er*=P8QDmP ziJ!I3swq$X{6)%tXC&@kUha_hwolSOaM{_2oCp>#Gd|JB1n9e7f02Xh?h z3znMcvB1hfLwHe5+4b~QJ=1w^)dz23n3aiNxfkw{(z6X27dXQs$&8;E{q>SX~nam3jcXXIJOj&slQ9l>%c7y0BJJiDs*qFvjl%3kGpqoE+_juNGbsV)?NZ zlUBc1&;#?}K4CD1k10fxt!^-lW?QFu{+t;S+Ede7C9g~B@b~{!&+AuYYDtHeDi(0IJ1fET2T*X! zKT@8foLmjfl)@tL3gJOWHEG>WlmE=|n*W9R2@7EP$`?N#@Ig3tJ_Y(HZ1r+ndC~L} zt27wbw)d-RZ<$A#JCi$X=_@!L7Y8IP07~FlqUo;4Tg2(&+tV}+OG1}O*I)s-<>5E@ z`4xrK?MNna)7D;7#Tw8>k!bfHdgr~E-c1EmHbxOPSDp&pvSRqe9cx*7w zfb3>EAqcMJ?_@IWo|8b$PFfQuM6NzJ-~w3vT9}uZQPF_W#0E1Z*=jVE633`n7j!Q&G#ozis`;MhukLY@Z z#o(yATb4MIkRYv?GA=?Qkie*yIA(owx@cN#W=q6|)>p%&DcE7?(B3`I_i*7izkb@E zcDg;=Uq~N==OWryHR+CC5trdajG$pu^sdyRAwMC`#(k9$gkf`E09T*z;>WH8lE zekmD3zrG>Pc+?ni8Wf(_b5_c3+`$eT9{tQ10WT+4nU^B}KACyCs|?tTSAB>|1;)N1 z2__W1nX0-ULUCE|GaTNXrnS?Y|Ll(a<>2M*f+c5Lm%lh*QY7u|@DyQZgU80@>&(Vl zS+{JaF93e#y02|KT`h zpmB?{Sc?Dlwk1g5;UQ$T~FhQ$z`8 zkvn}RhYrtJY{MTwsZz4db2rSO@s-bU8`!N}{B}qk@_`h`f*zX`WLDpONCd(F2KL$4 z7wZ0k43gs>r>uJZ-5vw`LKqTUI8^lT4!g6W4JjWm=gcvs?w3Wahut2AIn#z`Evow4 z8PG*6C?8a2wrJJy9D8yqc=BgqJcZU50B*E+4HPm?o)f!?0^SpDEcKEP2KK* zv;ImEoY`4?J-4tZOJ$JO`v)+?WK4T8gjHr;?U6LaUHqa}9OL$vp{|ni3jlOBY>fOw zXkP0o-O*hdI#h*+S9O)NXi1|WEY$hxT08Ho_{(tD9>VA3;H~A?!6TYFOhTC9IJ*3r zo0OOEP$^8dGPT~a`fYRon%Jzpiw#0)u4n{j&c1oE37 z5f@b*`-qoU_L!Q!HE>VWF2<~ z0rtA{bW*6Xmag5Zs7AsL<-5en}Tlh!wTv^41|e<2S$kkPsi(B zeQ@FMd;T-W=gsn`+sLkm953a~Jg!pL@A+%(k6@I5n~VG+2|a3g;nUsMCkLw0bNSLV zCo(~JwdlOLTE!T_B%ywMQmoPdx80g3%|!K3QowLmEK|}8{E*DNS0t?r8;OnUqJoOe z$wK#T!{6Ob1pQ>ywl(?~bVLDh|77IenHq zL^{b{u%ZZ)n z#m{Ki)|CS=KBX@){EbP>?Poji&HJN*Nzj3|BY**^nA>Y^a-!G`xE@oN2BTPMe(t!) zk{v}%rh7+iGQ^w_)lx7~{^pA~FQ2(lc|%xG{+1bmO+O8~fX1ND?y70gZM zqU+*YM%QkjvX+iy1&Pc$MR^Elq>8kIPxWm%WgoJXyv@N@nTmE&;xCu1BIaIBb;Y}K z+B;?Ve(Od9r=z`7g@$y=+ATZre710N`1W+ZK&X}cOtS4AsNkcoup=iZvgc#4jQGd1 zi*mLnvWwT^>;ewLdRvv6XqZtXYGtIA|1t5w{9wHmx|C6@3e+@ggg57SI&9vh{jNx2 zZ9u#YD`P8)XMEnphu|}O&&4fhQ}H<#R4izSNC6xTkM|Vj3gwMo+TfR;0aNX$t-mqW z2B9B?&@tWG@)Rhz1^7H0->kKqC8~ZBqRVmWO}ZXDDr6?^O?R*T$Y_pSW#N0^j7yFao2%Cki!w2u}sFwU_)%Y7XsLltyCJn)j=tLIAUAV@bYPd8T0+1X}VPOy0H zSf1wl8_s+8#u$YO7qs7U@STGx>Xf?QPnujVSic%Rm+K$KhmY(4Me4Uks|*Yb3N5Cm z(D`G%)N7ZlPRdmhu(XXukJTL6em2UPoR>yvhjV^uerHNVSuS1K6#2V{VcrXn>CD#p z^Dsiak)l9`WezrKP=c~Xs)non=2};HcAftU79TW3!zQt7h$3hIh>qB3w6;hN=ZId{ zranK+HqMUn(T;QGwd)gmxw`jGsZNb?a&ZMZQ#({`r_}m`l)dU^t)eM#=A9%iTA$!o ziAtURT@553H1+rHS$}@jx5QQ1xK}{ia>izbBXq-P{bL737QtQ~c1z7r$}IxFk0T{9 zb1ve$=|=${`2PTit;c5O=ek^QSa^YL}+Za8NZ{Z z{rgy2Au$iony!qi#WD?{8taBZw9fJKr=O!7q+mS*eiN(_FpYh0N0BYl%aAS+#E%@g z{2kaVPpCsLGsqnhh~U{XoNaRfE;6CmMjkp#wf(~(bfi(#l7IW7tcHZMh_jy^#tKCo zKZn1PlJtEveRz)g1m7T=m*QYYABU~$XKi69=q$gnSh|%m-{E00Lb_tw4M<$Rl(N$D zn6I4-Nk^PB-wz!@TR3dEyUMLvyFnJTY(61I;=Uf37(zp@`E(mu$`>x3Iw&sAkI7}} zRO@=&hYCh3O4RnA7AJWK`zdzWv4xkGjl_8w=CFW-A=!oB%!EPo&4HJR%c5Ll)*){X zFLmRMg^iR7*EVT8_a+;umKpF{Ln##qMWZy3jgbw?LBe3oj||56wEB*d!mLE#*a)X& z*B<)19Zj1Ip46{-1~k^nv{0`A&SGa?sbW9u zA+j@vT#|8DO;{-bfmXY0i)g&ncPg+Z#q_M4K+diQrtHgt9N5>KGQ`;u)*6foDQb?hPWVoYB`N&TdSKY&pz zxHgX~>1@eW^q`9ux!8GGSd{C~>TA8;^@R$vW%TNm%)!jB|7GD>E3NLCZXN&KFA zhpZZXUd&@`4WS(sKGw(vG}xfpOBK7XX&fcVIbfO$g*|Ofka;bG)mhDfLdNFXSQ9tB{FycCCht;dVBfj!djdod6Dj-Xvu=(}L53 zH}D^=en!*$^(sFFKk~Kv?;)#2{M`dN89W}IOlQk~p)> z4S?BAcV=I~uIpPxFAKAQGe6qbBl*@<)Os9wg8<*aU&_vQKFj3~$wZ5c2Z0mVM9aaCQ6R3Ex0)aJ-u^bDU3RBCiBug1PCf`pdp#@u2Z8QAKJ+EBd@*-J|Aa?LoJ zDh(EDEf>iJGp-CNravScovO=7o5+y8MtdLtT+0$P$Iw-Gt(Bnh75^1ZTXxW%T2{Ko z!zKzm8OmHsTpR`>SA_;ZrM7NU5MRCF>P_Q>p8KoKzL!sFKd=QA%Ae&w25eN&YGxdh zzd%Y4=-ODt(|w{l3YrXiIz1D&4?3xvXbLLU*m34OVCI8deYpr^rnh|cnlH(oL}6nl zYubv>hry3%Do-hm>f#X-&QKe8bq;sRTPm{)3 z>y0P_E*6X`Bo$@Zr`R#F{gaG@nmu3<1K{u0>&Soe%&FRzVz^8s1%vd;t;|j%X@A!< zg*`4#1d_RIcsCWc&xIDnOXm!)pzZrSV|xxP3zI9pJZL``qBn@#6wfhA-pARf*gUEq zoEbZ9i$!@3dio~~791L%~z*MM*HL)`F$hMi{J$id`w8)ZadOxdL7bVLoasOlrvW=bo<-C*MM zDdj%^*YZ^({4}Rzhc|~@;SV7lC)#PdYBLH?qMMbHt9yY@K1+C9H2Xn(t}d3Ow8k$7qk~NK^FMV@)8-l2jBD`0`R$s z=VD)U>-fg@_>mZ1Iu@Dg6SV5hk^7xQFMb_@5mhahCAx22-_?(!bL;rNDxZ)7>zLj~ zOh476#K$qbJ}uGFcUU;NdQS1(P*Af%;m$|50hCuFRKP@^bmn>-QtP*4lrx)OTb;US z73#IXfGn2OzO}_buB>kBFHp{Z_J>iZVS=@ly}!o6SIPZP9?L3#7#{QOh-hP9LB(ht z6BUyCbzQ$*daio=@)d%dQu0RE0v0(1z5SPT)sLRERHNuBAasY#UF;1R#K>eb6cB!F zlRf)#zujZ*Eil;EDqvY@nL+hLkB^9#T-?u@NcL2m4QI^eZk_xkA##l)Ljt14NG-qs$IDRPJGLF}`Z>#=9iQcEUC@VMfmt^!yQYflg5mMY)mNNb|Nx=VB(cB8W<(DYe2Fg$sZOHB9jtoRRrA6Yl3mgB01lbH|GWY9B2$SH0|v)Q`#6;6LP z3pg+UrU$;?P_i(@x3!-pm;6*bLhe>$~^V#7x0!lMD4xpqF^eX-J7n{4|AYy zv7o7KeF-hoIV*v~x#jhtkNb}%vrBDqiZJ`S52n;s4`>W#-p~?x=}8PYfQ}22I0elv zfrSSRhs6@&myxg{_Ilk=-QW7Mzt|n9jiiT>7Lpm>jdX#1ogabuu%Xq-bh>r6ep4&{ z#L2Z||KBO(Gp)k*nM3iDrPHyYz9GLwwdAwq`+`o;7L(d!5l)=W#k5V1zbkn!W3z>p z?re6)c1LU6)UbE22Wi#D@~r1B*Ch1st7yZ01&X{Zk462A7EBiTs5hO><}pSKGQ@G# zEV*}sCew41TCbYqO4-Vlo&9VgFYd&5M#sZxhT1ruxjRwoQ_7{#lu)L?h7r1%rEsDy z4)-#Fen}$zIMW(+jzRB*EkaRUfg3U9$d$RmIm)I3q{;Ta8TQbpa{+IZ3J>*6-`AI4w2hz+yaf@yz_PKhW^_hdLN zW8qL;JLQKiZDQQA{+>nCydzpHOF?!MoGFNSPSE3~|e ziX&Zz+I6dRRZ#mPV?|jZ2%Cv@)Yt!OzsPI&!~SU*7_T&BbIZ1LVoWM48=t#}VRYyF zU7A{)MR-0-61GUX2YI|x@qk1II8Lw8rAK~-&+k_ms|76Esxf0|v3oQ-PBiIix@Y%F zQ*e<7WW7vtTeWaqMQhGyHDJTU6ve%I%c@jC>7zw(9@(RXXuaURt;>Dlk<0aoY>eWb zqn0*JyU;E4UE)*u@w3*s%tCTU8ixPT-dRPp`G0F352X}Ji+h3M?ry~?P~0h6thfh? zyE_!O6b%p{Sb^d}iUoIfDZ#D$Cg;qYHFI%h=D*g=#azrqR@}$%m>2TEVfYtb$t3RfKr6k%0?s8}itSJS`Am$%6gZWT~ z^X6ir-Id7!x=iMmoPLz^GW_g|W^N`@QN^lUZ+V1Yv77#t2T}sYWnk*ii?$yWi>uuy zAnmp&577Nc_bm}sL2ycoHcaI(loP03&lm4uM(LndO|DXI*_mG@ovj%vHruVht@NP7 zJ4*S1x4r0AxaQ{=aOt(HDgp9>?fNTmB5xfp}BhmO9S8AjyECKcmX5 z&ih9WES#i;Ypj)Z=JTFhZ+t^n4$l=q2J+O{4KW!u+bu-9S?!*4wsyUpCQH7)M>D7LnL3^W+lo$uEWS>uV|87IYD=d}o z5Dyv|Cavzt^R80Q+wiJZ zznn!@ConMyA=szaNFEf|bg&@2G|d{B5cR0yH|EELap8AU?)0EDlA1c%I_oC!S?BIE z=$P3>{9V;RQ+%|lvu45i8jX6!z9hqWAf#w$YJE{D`5%-C-}DSAZQZNK<1s;t_YpHU z<9P1ilZKbj zHspN*Tr{-RF52C~R_1;e(9F^b=YH(ak~)kFictKU<)3tiXoq!hB<*TsGPDhiUPMqU zpUAt&Y@QnF{wB9MPP(!98pJv?{RG%j9gzA0XVQ@{`cNOVJtI8eg~`H~$dh;4qetbT zRpNGa{Ku@cG=L6)F-Dn_yJXniPmK4p@l6=a67X_kjQ60nZc8vFijg^+dE$q?9dVj? z!?apkN50bu_Mm7)ROl5cMN%!k_8$|x;%di0rY;UIfw7&5i8N9sn&9ora(fB0Xp<392@TbD zM0un*6@|gwhmWBbyZSCmG50cmhVOrIvW-2-Z*l1N>;JN!a|X4F^s)#qNMH%mwR7P; zu_7dEwFM!D{VQj!BM=&yxyAtdO}1ay4pR#&6GTH^;|C8o6$&IPF(OSKLm3LL3613m!XbXC0YdMseggKp(41XC0QoHP!8J2&R~}~`-$vu_tKf0y6mhU_`7Dg z=hIs{U1Vr5-BrQwGr~KtJD?tEj#k>9LK92`;Hn~I z3(PsPGCV9oLEG3z)&bR+b(y>}lv{O1;##8Np{Eq}saQ1d=C4q{0E#-HPM(s-+PGm%FEBnq;=w_pC zs+k%e`qj0v#I@V5ZbJm_I^;K(jSq${v0uoQF$D`q^bwW)YuE@>3}4?8{?yCb^|rHzKB?sFf&Q^X4j(GAsUFQ!oZG^BLgi1Hh=-P$P$`ar6O z*ihd`HB~Nrd#z%$LawSOuaX|Xbg$>NSB}f_xJaM)Zv4iat%0AjNv_SfSmG*GIh`qr zlqSJX5MsxFsMcUQp_io#*`IyQ zcqn55wELlshrGJ1?u~ki8HpytWHfjdkeMe7dzT8jxG(Iw)?~N~8`LYa6BNGXpPjV+ zsFKjDH^=J9M`B#WnE1eqc21mkr|YziWo1>ey<+6`RW$U>mEYL1#L5(GSXp4e{4i<8_~hGWmgM+lJfAOE`M`|wb`1L1aw@@ z7+y8GC=QGmDy03(qiLc@%BXa)c(N^A2~}l^9>yL0z9~lL7H>W)rmU<*llPo4`SZJA zj$@_DwKO_<`6~a`npb-Zf~BYOY+DQx7BZa(HJS}~Z*s@aR4==!=IgwAyL-Zno)Zw$ zVA_>8t*AX_IOm4FljnMs(2cbPRhWtB0vGh`X&}$TPo^^pBN;cE-KtoPqCS|C|UCs-dSIYP0^3 zGwBky#uy;O4RMQ4wxXQlXpRlj2)(cnKj?<&iV;Z*?>u}dhSoRyq+^n@xkQnvxAC!! zKiikQhKZ)vS(WfqdV33gCcUoq9T~Q_;2snVUrZVSxx@o2wXibGd3h-SN$|EH3}5xn z1b5N)_)^KS%3M>?R0BRVZzYNC14+*3Z!#ig_O=9Z)?CD%Gu%9H_O-o?z{ z@+{Cj%Hm({HJ)|7zpL7NOK~KrLLG{U6ier8CA`C0NYCsay)P5<<`wIW7xukAyRY6r zsvP29U0;t4;!`A^Jp0y`_WgtM@=2q*YLqItG35S|@trC@$lcpL+nFwv`-L7}hqX23 z{EV%3Cj!5ByW)WFo@8)ViCJW5BP1~rQgzQ^ZLhJeZ~FrD^ltJhy5k=dLPwn6*)Htd z@-&4;Z5{|fuOwlxk*|-s>UWYP-uDaP4?7nct#w2NH;+19Xcv3_aWULc{(mseV1b23 znGYk|>RgnWM?WO1R)N+@BlVR`B!49Ea@;hmeMEl^bOwD&m$$ZrB#cisAAAUO8viyx z&2gTWB}qm87urAHi225ZzkKYSf8i%K^xhk~KRPX!H5UWtIxH(i2&6^-Gb-ECkv!=ob5YIqK4V%9CX-C>Vw`3;w~gOxHm^-q-eV4UI#5?Zoa+2)ab9AI zco!UyOSC9HtjU+eE^>l8?tfM3(FJl}wjAnmVl%EsU?oMXZf(d#;WX^;e|R1jvO2FT z;+nXbO9A=TPT;2X6YIj{4)DGqXZ*U{AX6^3OXQ3Om-*vL7&IzpP5HKllK~=v-<^D^ z;R@^|&evLj7omQG5@K^sYzG1*GdD^ca|S7y#I%V9I2V87L~Yz>I@`P|h0ygf_=Gv43efOSt2Z!pa!N_i^33r|Qn>K+e0& zwfD+_W1dyOktn8%I;oa${@7S@Wqj$py_T=y0u}4+;bFrlp&zS!si6~^TEL+>&hihF z=6ACJDQ8&{8b9Fi#5lzIueMic3V21@)_EPxZ-+?w)jjII18tq|E zj9$En)IR4J2{dYOMdj7c?gC~n1-y7|*5e~xUm6qfwHe@>~l zmV3U%Nd2YQhoSs2C7~7B=DMbk5R|zr!|e|850*GuI;_CvE9Ay+t(?BB0mbL)MMguz z6E9}-zGQ5UsuC{RVAwC_CHxNRZI3gSB|?2!5L{pVb_G;j- z^ZDS|1fB<~{xXsycQf>kRfUF6n3T$~vf+J^X?Lg?d8ri|CT=$+@S3QS6vbL6mq8L~ z(k=QQ#(w^tm{K$e)Rsqi_v5OZhm3G=2mTd{?@OsOln0$~tR$g3pU@-@%FcqHc2eEGTA~|ngR6JF1Q4gC z(s(n5O5SFrAHK~0jiPwW#we*dE_&-^Xum`DG;Der>?af}$#B>_tx8p*?89tHiV8uc zZrjN@+JYd666-vdzP?^RoPM?ZKAkIlZM&9jf=isJWXWv8YfH_6IY;?ruCW4ux|BX= zvv1d=v125Yadg#Ir0VWbvz6Uq*}3f7TA7~HkEAX9Hy_7{I>&lj#MZ?We+kSf*ZNv1 ziSbk6nkWfho<(k6-?!EL)fjv@eZVk|K7A+dr#E%7)!A;K1lv?(K;XBvmHA>DNJsSp zcZl_JZ%OF_HE4=!3;U@V&#&u3k;Y5x%#+uA^qiXNz^9e{6@4T#h#_LnCuKPw&g1N; zFqV`q=3P64oM*G;KNevlPHUk|?7BV-!X7bOIBu66sb5`{#dSaHnJB8`c^AyY@QAMU zfxch)4YxTrHp6TD)??GRac+ z#opeLZhxAHJHVkg_f{JXFr=>Ll#&t#Z{XZCH+I_=*Nc<4V&Vesv`BX-vlaj_fO<~9 ztzY|iRX6jJ#FRLL=a-6FWl4XCQ2k|Xq0G;*iZ(2j#lFPevCWB=zqAU(Z_)gOqH2>k zM`^7a_vzyb^H+D7Ggj++D^C*^k72P?8I0O}%lz)saUqD52BJEq*i@CXm%uR6`{$|E z9nP)kTj}%DKjFo5O?OXm7I>r4DZxBebxcK6KGdCTBVMbYH6pj23kvOGNSm!OP!u&P zZx79^5$?`IS5}d+isVCw{K@LsDe5={f^er%mNRvYu@=(X)9Y$|t-sAzqwl&ihL<`p zw{pqpCK}YGPuH3+bKw01FKBnGY@5r6IM3Wa5N;k`DuyvNnx54;sa~%)< zG4%dnqy&oW5wRiN+eH<-_H;IQVHP5K)ET(XmK*We%gJi4Mi2QhBw#O!QPrWd)3bf! z*7`T{=46VH14XF8oVaSu@l+WQ{B+BVkFzR#Jz%AveDLByOWit*qWfYQ9GhiGsoRRARd!>Z`e zz>FFC8RzLk+w(}inV4f3yG!0>p1IYrp-x=oS)I1Qd(2`GBB=M`&T25p?`w&eYNhyH zy|5vGy>ywV6A)I0kZ*LfXW$}yG#Q4 zCxG9j$3sum16?$CXP15OTm}Qo(l&+55Gyi3&Q6XO{a#|We`Djq%{oqi&?^jgvppV0 zNdsfckeMC4^4P(ECDeQgXKpzY2H|gDU0el8b$|X$wEj({onP z-D3XJnQXlRVx2O~r-_N>O zLRy5)%lDGemnD$Zp0*WbCR~x9-nybECF)aOvLkplK!59%3MzGR<;Y~%t@3g=bxAu@ zlv~TY(0&hRpm-qZIUtG%E)9Z}6|V6@!du)>YADp&vwM`))CC6Z(Bd7hFpTN-RfV#?DTrMQ+N#MAzm z66)dV@fHc07rO$sm9bhtaw;{Sc@dqFTM~EG1V{c04Z{hm3~rgQW?>qYo^dT;qZc+f z#o7SWUfKHnQ{g5$(|PsWA6r7((YQBOQ671PhlZN%jl}HA&j^u;JDo_)rU;_whT)A!Lk&xaSxT|fi|oJV45T5cYB-77~0F6^+r7u55pV1 zVkKJhTX40V@1ZoDYw@gm%uy~-Q-|a2ZZ!f06P@P2wYdMS&He8$nL{LfcSSSSix4G3 zfhAX7NrP}n5A~-!g}i8X-yY#tbW=r;Lbv%CLdI`#<7}yDdWP6 zkzy5q=CR^k$DaQ(({fJTU38Mi7Zw&HI$qO5>+m7 zJk!@YE@^iOc~NN(`4ke2zbhLdCDa9g8hDx&X^TVhiyr5VM2zcK^9PKemg;MLISF)3 zl-Gy);0-MCkZxh7b$CIE^L9I&2&PA5LAQEQ$F7KiTR76h(IHiBGDy9y_A^sTCnoq= z#{&ci6iXSB?$;y}uK<(qF!o4H+HX?0CLPU|2`B_m^@7DrSg zlCx`Cl*&DN+h;zz6``=@d#pK9nt^gPrY)yz(x1fr(HMa7pmS?y!ccun>F%%Xg~8K` z@;H4W739Q#+qb*pF;~g<>TwDpE4Q&9vX;4~`8IPK!%5_-ygil7-~yk1nh3X8HdLPC zV6>DmW#-_SEvK({X*`9@#yETMcR>Mkg7{5;Vi_ea!I1+t6|oI3en!{lA^|pjz4=CY zk>BrPOuM!^fLHfSfl<{8&MJNAXwo*_*K}Z|gWXxe0#TSQ!_QDUS%u&DUx;3ssnIS` zem$w+NkY_qNq`EFD;QvB_Yw(HJfDy0_?1L&qGsb^on>@xa-rR&4fG4fSi*Z@jwVV2 zR@!HdOanlo{V0K-U_LFitmJ%{3tOn@ZX2vq*z_mn$d^6CpxN4~1twr3fBKMS9A*54 zsDEsjhXQvwCXmMH+Wv{kG3dOCDoDY7e#+bg-`tNT!*e<;JS}Cy$SoDpYwt~GDvRy> z#n|9WIv^uS+IRSh=tLCOe<#j9w?v$PSy1`IxI2#1RX65{58fd{u;P-&j*sFsvANdi z-vh)Cz~hLD&+9{LG$gouZ!-P=kc$nmenmKcgteQKJHfSSUN79`IKa>;xH z(*VK|irqaGcd=U!^V-I$FLM24UV8(&UL2ZHl{%0Boy#%L3hCwDUY;px-uvrogYQQB zANp~;Ouxv5;}IB-GCkjKm3T6O#z@Q)?4Y)7hu)I-cU~Jc%2jJU-+ZHlGg{LAK|wLY zpPYSVyZy3MqCAp+!Rd4xQ_E0#nC7GkaYueJswTPjcf@eXWStt6&7E}QG1smp*0a>lgi9<7KLDS3*zApG$JC`wabFZUF7i<*+E& z`XaJcrk*yk1uQbETz`U`&Yc#fH0XQp}qjsOO%{K7W zdaxb1j3bg-H9ZT$N7Ux3oCoGd_*vz+fRCM*Uy$@-i36PR0hcJ=ihlAId@O}O^2rhv z=Z4`Q6!Dp*Uol9j2XBD2te!nqn!t_zS-1b_*XugYGAy_VC3>EU>#xu{nnI%SeHIDB zU#!OToz3t~>40I3^5^gI+lK}Zg>hG>?~uGjyETKmmETmqSU1kZWopfAsBe_E0MVOb z04a5-I)|uoUQ=)*&# z{4li7!@3d%=Q?q3*pe3E=<(F|reulF?WPWunG1T1D-ub7W9uOa?ht|kbI}F z*_2+@2x&rd-E6R)l&ly|zLkk*kriz`=3cpOcdLzP9S)A5?N z;lUJ2{nqZxWlJmuSe_+b4M;r$SOLEwyYl*phW2*qaN^`ORw zwFW4uq)CV=ZVKk`&LdFI6po^<0f3@-@I~0g60M+~9yoRf(%Z#>jt5Hj#L`#X7WP5k z0PbBnA&Ro4mt(F$giYR^aJksvVbnFj_*8(vbYvm>>B?SzUyhJC-;l-S+l%R^dg-Nd z$<||i_g_BtZ1d$t?u_cPdDOGVP^TO5mLK7-jUzVe`$`Z6&?7U;{vFiGirZSz z*^_%qFKy6lK8hsZT%6@Cv|*+EBXg$qop%+Bzgvtr-Sh4zLOzP5AI}*`)wi%UufH6tlT{;}?be zPW#drJ^r;1LAXnI?70HO^J|PmH+_!706$j;AB%P$*JpTYnug3HGZbwhW%gZdHmYsOZlqcai!|o#jYS=mj)BK~yvtZZPKX zVJ(x2yv}>?j5oVN{A?;5dDd1;{VYet9MIN%gO! zwRNT}+3ScUx5Jr2cty`Ghe%P7X5+n(_Nh&!3{*Mz)OD=iCW!B8qYuNEz|nR zi{^(efqkkLVVj*E-n!m{qs&CToz&aX^cQFA&mOcPJ!E!wg!u^oI5hPt55MUTYWl(+ zlDM!LT_HlnXFSqDSL2}&zH{aWHfPFT5^O<;-;8Dc~`!MGeGYs$0u77{oI%4=R zoQT?eGv?Xu64G=`mTIlZ4$B)7?<@RzC9o#`+Q?EYO35S;jV2E=0-sv>&0XWC0cIGsa3G+TKGYI4OyONec zIY5k-)IZ1d#9+j)fh6))%a#7sA%LZw-nz3*)cz6RklQ;t%-1-_PsZ=|deC;d>fPBF z{|Cjp44AJ6MxdT;64+;^VzJbZxh`7r9ZplvjzVuLT~8TW^sy_uPz+Gnpu#~+^WlwnZM<|Tb96tKS<2RD{v*A?oR@nMfENa8^+zcvSWiUHLBK%5sI zwtJbUdv_YpCFpilge&GGpzuN#9}YEd_|#EBR7!{{!+?}>tfN0+3WKMSJvoAIlxme& zfQo5JFs(tos7_U$hek>8TRYJI3ZN;$Ty#~0m57WEIik}QsI8zS7P}&>t=uM^C=mBm z5r)mZnk-NUWK7s6O;mQ^D7uSo%NoQw>qQOK^W1p&1mLKY=2fZzD~|kZ;%T?ucC_{) znp*GYRp({Hx2*Y1Nd+E20>9Ku4eqD=fgbk2)m;c~u`w$E9dN9(5wqhZC&l*~Fo(31 zpQWM=RQ88k?WCvNlV7e1gqn7bb>o#idz~o+!ZYUfQ<&Xnd?XV(?4GF3EADA)N@h^> zAAd_dT<>HycbOHwHpfjYF=SxM9ImsxivcVLk`KMM=IGFJn?TQ-PrX0<+1$N~X-2%<@XI&5{xyuTp(*UbD~OYESn}6nUMmBpm7|^JPdk;{U#qkxWE{wY-bcVnGxADQnpl zy0?;%`XVf}^LRzvf{+~6mmAeewrc;2sS$Oq%XiA=`xjOJ2&Wp^NI-$(>XU~Db=rBm z1&dhDqNb47C@u~>wPQ9OLW3@8)lGmJ(n95*M;@x9teYuwK@gjwb3!IT@&G@Ps9sHk z#n1hqUz%`aJRsST!1JqqQOP-(RbR944@&Sew1SpC*0EBXmm>az7KL))vwCA(K@GH%z$d!u}1Xbqhntq>iSBXX?Gfr5|`!hccF-779dz zUP&YbvO9V|NI(llRSoGs6$FIsci&Lz=N~`QWf`>dI_UE`yeSqQUJ5&}x>+Ncs|(I> zdT%hir)*3!-k#64**8q;|5#JdqxkY!U}TnDeP33Wsf05?@~+Wq6C{{woEyg-Hq!DT zpi8I3&=BhAw!P2X1|#v&)>4+ zA+3DOx3oQvm3gso?BwaCSH&267eiZt7R(zx6~6`QMQlb{KRt^X5zee#tvpI#no%1k z(Hp}MBQ1{3GbnM`UeoTK@+Rx2wxFvbs{Z;~i9rn1O2fM4i&sHDLysP9EJYrjUK9DN z-ocA;IVIFDT#0L|)rGBy>&$|Lzj<&qUPQ)6u6>hC$o4B+Bdad$H&Qk`Nh6S-{3@_Y z+Gu0Ho|2bS1qw^0)Ylnjk)uYqutJ?o4;c@O7tW$Id zPGm;MT2|FeWK&;P`_vITtLjOGsh)y&g(~}!xrb608lqoRtrB;rz9{{=%-m|14ur#} zKEOF8jjdyuflO8ZMV7AwauEPI@<95pD*@2qxnb%h!DLOh{1FPGv8g#a=98E{8qTaQ z-qs?wt+>vpe=ovyYz@Jcs4nP=vkpTCdChb03&edxS)HZ}7D*yGd|Bc9ZNp||S`K@= z`1G^*#LHz9ara8agps`XZ)}GLd4z(0(inRh<2Uv?K5PXhF9o)95d^eyqT()$8+GEo zl7ABM5_a>v(o$>);G5&k|C?xfl_Ha$pH7&Q+rz_zt=q5abbP@J(tNj>R6dvjEbv#g=co;+2X$uqDt{h_L z)#hKHwoScfU$u_abq)GcwVw|B;dyy0(hN@z7G7C{8ac7bT$1(-F~oZztNrGv%GP_Z z+{^Xf$#_zDY&r)(?_39GXiTYfQsEj^72vvZ7oh3vHxVXIb@SK8xwcQy%C2XWpij^p z(ssUeQp%>l2j*SXmcQKYVPyFz8+>J;tT|pt-ChfkdW5xz0 zst%pF%U<;7{OOzA3Ahkp)7!tb)Y4hu?fA>86EU)H533ahALHY%uX4XY8=x_TSB`lS zci}}ylQa%9eS^44Mz&POmQ&&RZtl}Z7<*X~LOlL1jH`XM&%rAVqIr0qO>pCvn{$;Q zBon#DzPvbyy}d`q*t9jh&>EMuq%b2t_{x2Pys$U1)%+B}H-7p={Mq41ACx9yw@Ipb zT^px1b#;vOxnb!7fZtNLZ~F1(lk73&p5{A>P=z)tEu-PmWx>BH=-Ba3ptAd<4N-me z>Tv}`Uymo>o7uBzF@rkol%3ZBz^39|?0T47=t2avIrKecK=rs3`N;<4o$5zRrTP4U z2wMlCn@`OHz7v%gYFdvzUBZKB0a;MLH7_-n910B zv^b<;eq2OkNKBC$8diBM3cg)SmDlWEz9hJxQ)@KS@%AxF%(o@r9ZKe-eEV+vXmB== zu1piVY1D3TJ12^u2bdJFjphL<#r_72=QMUW@qxp83Da;s00p{r}`QmYUAP z8R~RY0svOE5-*<2fXRR&-MJk)&OOQAy}zDFazBhdY?`iJH9KUuhV7vH>kT35sBcyu z(7TSG&y4L0&)^#B!>ps)n~@$KTjwg0V7K`FX@Ny$O0DizR;AONVvezJiV!_NKsl}U ze&#&=;@~YL1MfTi{ujy5KU4Db5}H%J_x!_?C{rC8kFq#ryDL&2ZYztI-@RgMY&$+w zxn&*5Tj*AS?VGe7SyAe|8TAnisL;ZGeB;COB&Iu?wzE_$eT|;>(WTvvEK8u6{*B6s z((rvf8~O8?x~$bo&Vh}>1Z5I1e(8k>|3Zzst(tI|DNhU~%}D$8^q{B?!oV#Qz#r-E zb{Jq~&vdBI(KHKFIVzsk@j^meTU>t7zW;TFgpP}V;YSi5B=yt)$27LK} z6jjIees-vc^gfG5#f~81RcO*CkvrR`(zAHIlHTk?4b=dT8E-lmeR zkwd)GK?3bG`)(O+RUWomRZPR3&mq{I?4#y&-pixhqehh@>3lA|H8rd zpYFnuU}+r_4TA@>j=dI0@^`ur!fG)=I)Bx$Hk3t*@Fe$G-iqOeXGZwU5S` z2)Y%@=rS}nSaseBOazdoZ zWG96ja>S?=0T*CTDCrg`aUqmXnyk_qps7bZzxp549rE~cqW6TT>IUw< z739kj3HDBePK2o093lq}x-FVd0{(WTc11XrL=&q5tb?tCtlvr!N`mQ?f-C=xqf>;j r#KMD2S^s+u`yaEk|LQxEih#_2k?T7DukHT)|JV9|;927Tv-n>Ct5_Nj literal 0 HcmV?d00001 diff --git a/components/rtttl.rst b/components/rtttl.rst new file mode 100644 index 000000000..19825aedc --- /dev/null +++ b/components/rtttl.rst @@ -0,0 +1,162 @@ +Rtttl Buzzer +============ + +.. seo:: + :description: Instructions for setting up a buzzer to play tones and rtttl songs with ESPHome. + :image: crosshair-gps.png + +The ``rtttl``, component allows you to easily connect a passive piezo buzzer to your microcontroller +and play monophonic songs. It accepts the Ring Tone Text Transfer Language, rtttl format (`Wikipedia +`__) which allows to store simple melodies. + +.. figure:: images/buzzer.jpg + :align: center + :width: 50.0% + + Buzzer Module + +Overview +-------- + +It's important that your buzzer is a **passive** one, if it beeps when you feed it with 3.3V then it is not +a passive one and this library will not work properly. + +The tone generator needs a PWM capable output to work with, currently only the +:doc:`ESP8266 Software PWM Output` and +:doc:`ESP32 LEDC Output ` are supported. + +.. code-block:: yaml + + # Example configuration entry + output: + - platform: ledc + pin: GPIO22 + id: rtttl_out + + rtttl: + output: rtttl_out + +Configuration variables: +------------------------ + +- **output** (**Required**, :ref:`config-id`): The id of the :ref:`float output ` to use for + this buzzer. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **on_finished_playback** (*Optional*, :ref:`Automation `): An action to be + performed when playback is finished. + + +``rtttl.play`` Action +--------------------- + +Plays an rtttl tone. + +.. code-block:: yaml + + on_...: + then: + - rtttl.play: 'MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d' + +Configuration options: + +- **play** (**Required**, string, :ref:`templatable `): The rtttl string. + +You can find many rtttl strings online on the web, they must start with a name, then a colon: ``:`` symbol +and more codes of the song itself. TipÑ you can try playing with the values of d=16,o=6,b=95 and make the +song play at a different pace or pitch, e.g. setting o=7 instead will cause the song to play on a higher pitch. + + +``rtttl.stop`` Action +--------------------- + +Stops playback. + +.. code-block:: yaml + + on_...: + then: + - rtttl.stop + +All actions +----------- + +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID of the rtttl if you have multiple components. + +``rtttl.is_playing`` Condition +------------------------------ + +This Condition returns true while playback is active. + +.. code-block:: yaml + + # In some trigger: + on_...: + if: + condition: + rtttl.is_playing + then: + logger.log: 'Playback is active!' + + +Common beeps +------------ + +You can do your own beep patterns too! Here are a few I made so you can just use right away or tweak them to your +like: + +.. code-block:: yaml + + two short:d=4,o=5,b=100:16e6,16e6 + long:d=1,o=5,b=100:e6 + siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e + scale_up:d=32,o=5,b=100:c,c#,d#,e,f#,g#,a#,b + + +Test setup +---------- + +With the following code you can quickly setup a node and use Home Assistant's service in the developer tools. +E.g. for calling ``rtttl.play`` select the service ``esphome.test_esp8266_rtttl_play`` and in service data enter + +.. code-block:: yaml + + song_str: "mario:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6" + +Sample code +*********** + +.. code-block:: yaml + + esphome: + name: test_esp8266 + platform: ESP8266 + board: nodemcuv2 + + wifi: + ssid: !secret wifi_ssid + password: !secret wifi_pass + + output: + - platform: esp8266_pwm + pin: D1 + id: rtttl_out + + rtttl: + output: rtttl_out + on_finished_playback: + - logger.log: 'Song ended!' + + api: + services: + - service: play_rtttl + variables: + song_str: string + then: + - rtttl.play: + rtttl: !lambda 'return song_str;' + +See Also +-------- + +- :apiref:`rtttl/rtttl.h` +- :ghedit:`Edit` diff --git a/images/buzzer.jpg b/images/buzzer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8601a280cc9f0a1fd248df04802f657f6d014bb3 GIT binary patch literal 9283 zcmeI1dsNcd7RS#|z-MYE)@YfeywG>_f00 zy=}Xy2WSAsUsX&2TJYF7_}UvbFhv2sX{$VSQxi}VP!muSP!muS_&X8^%;ct|a4;dE z0HD?*MrsLF%^+Wo9P^KE+%V!JNF)F@Zv5nbsw=b$RP5As#osZ5)SA@<)CAN7)CAN7 zJ`r%nJLAcCH!^{QA&|%}u4JMc_@glZ0zoF=f)x100T>Vh;7SDkr$cW_l1P+J#^LxG zPE2-MJjaQZmWq=w({ThRJPvqLBkx`5^~c; z+%!H$wIDM-EmP!WnVHFDlM|Q;uJLTPD>j}g@VI!}Y1s5r(U~DsG z>LiSl9RcrThjk>9Y2L({0d9_1YK%`nNLXZ4q_cM%Gj7hew1~)X)gq9Afq}7+v9*bb zb+{|mHT2Ajba1Y`*`j39&&G<+Udz|SC2s;8Ea>Jj8fgESCGl%|$895g)P z$atUuArKl!1PXWb645VyZ4k=96WUR$kD1}$4{I+cmBe~OLg^^8*euK z*4%RIcI$(Oj~=%_>3G_y=y~~64eQh3#fsORf@N^tU49XGHEoELs zxv%alGFJ4TkMG(Q(du)e>ba+I*UFlsmj(qEPm>UbtB{!R%RkDGD40oU2IYat=fCP%k)_n zRd06DelekHwIuTVwq*{K!2qFj|4lUX&!B6#EW%vJ%A)%-AD>}7+VP9;ZYf~&=F2zA zW>g(3Xq{W2W9G(K8Ky5THtV6DcHk|YoA`A9uasfHsD5+G+b%@tupbqcglM(h+h+K$ zpN6bWx3w#uSqS2yL4-eAWl-S!aALs8@YrihjNc!0u0opi4J}go#8A4;UZu|RYMjV0 zlVMEDE|Ds(cuc!vONraQFqRYK0$y|kN-4T?Y$5HsGp3sIK}XYu{H+7gw;ryb>I2(a zV3;g^6ey(uaf{1#N$KFtSQ)94s>}8FeNyfomV80ZUq7*YT+ZRGxyz7&`$wo|ai?!{DmwieBZ*mI_{?nSaCJ=JuHCx+IMiubWE=GGR`6e|hUp z7m)iJ*P}VmBULD4!}b+qaY~9pW`r`wRoj{Jc_SeD%>6FN%PCDA_8qCT`8I!0v33 zT@z?|vu7P`$etL)D%c*%$bS&xLxYoSdfai|o0XB_$*K-WV{-D|)53>DlsbAlQ$p>a zr42mIUcavu*vfN9>{^dO_5nVgSljT#;Y#J{cl((It_9XV`j1TP6=$aAM)Yw%s1~^+%wL8+_Gf~ z=~!5Hn|#qdE>V^z@Mq|znkD`~KyFx0pVinY%&{r44=Y(-=`p7f*V}PN%$uIIZtaS< zEr*)3DtE}KR8m9SWW>b-vl$1Ar#7Zxt+>zQ9b*b24l6eYJgO}UDNz(Zw0d5f*DUj_ zABdJ%pE3wvy?)c+DgWAGkc`jX=a*$ZwRKC!Bsk?|?ikYU+!s*~?k<_!H}TTpMMKi# zS~5}HFlcTN*gTvxFh}dBK9l(C7Zv>x=4I8JDDp}Hqs(yS;rX%kv!^dc?9HiqUEW(* zU~RvrVrDM_y}%$U=%r)#73*@_AF@006CJa5A6eW_r#DZ0s259jzr<{N_Ka>@s*(GJ zl`E`lOQPOav`05-G8et6DYHfvEb8gBXxv@VuQiiflHEbKD;@cPgwKDn&A`!txgJJ? zH7SpayK^g&&h`tf$umO7OY!mS0EBlgk`#Y0dXHD2q+R3?*Mc o&w>0$O~ZYLws}xRbHTMqS390qePeF_+sM8C@t*&)Jv4m#cZ2}AN&o-= literal 0 HcmV?d00001 diff --git a/index.rst b/index.rst index ac32a1127..e64ed00ed 100644 --- a/index.rst +++ b/index.rst @@ -355,6 +355,7 @@ Misc Components RF Bridge, components/rf_bridge, rf_bridge.jpg Tuya MCU, components/tuya, tuya.png Exposure Notifications, components/exposure_notifications, exposure_notifications.png + RTTTL Buzzer, components/rtttl, buzzer.jpg Additional Custom Components ----------------------------