From 7536fb7eb62c19056f378a36049c78b2717be6c6 Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Tue, 23 Dec 2025 18:39:13 +0100 Subject: [PATCH] Berry animation update dec 23 (#24250) * Remove tab from json * Berry animation updates --- lib/libesp32/berry_animation/README.md | 4 +- .../emulator_screenshot.png | Bin 0 -> 205076 bytes .../src/animations/rich_palette_animation.be | 9 - .../src/core/animation_base.be | 2 +- .../providers/color_cycle_color_provider.be | 14 +- .../providers/rich_palette_color_provider.be | 30 +- .../src/solidify/solidified_animation.h | 10020 ++++++++-------- .../src/tests/color_cycle_bytes_test.be | 15 +- .../src/tests/rich_palette_animation_test.be | 25 - 9 files changed, 4988 insertions(+), 5131 deletions(-) create mode 100644 lib/libesp32/berry_animation/berry_animation_docs/emulator_screenshot.png diff --git a/lib/libesp32/berry_animation/README.md b/lib/libesp32/berry_animation/README.md index 6a44f344e..416cbf8e0 100644 --- a/lib/libesp32/berry_animation/README.md +++ b/lib/libesp32/berry_animation/README.md @@ -22,7 +22,9 @@ The DSL **transpiles to standard Berry code**, so you get the best of both world Test and create animations without a Tasmota device using the online emulator: -**[https://tasmota.github.io/docs/Tasmota-Berry-emulator/](https://tasmota.github.io/docs/Tasmota-Berry-emulator/index.html)** +[![Tasmota_Berry_LED_emulator](berry_animation_docs/emulator_screenshot.png){width=353}](https://tasmota.github.io/docs/Tasmota-Berry-emulator/index.html){target=_blank} + +**[https://tasmota.github.io/docs/Tasmota-Berry-emulator/](https://tasmota.github.io/docs/Tasmota-Berry-emulator/index.html){target=_blank}** The emulator runs **entirely in your browser** with no server required. It includes: diff --git a/lib/libesp32/berry_animation/berry_animation_docs/emulator_screenshot.png b/lib/libesp32/berry_animation/berry_animation_docs/emulator_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..226a935a5c070de234566d3c7569f06d4c3716f1 GIT binary patch literal 205076 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�O8ZvU?mueh_4uXmZ8C8a!XvZE5lG<&D=B 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≶AJCCAyuO%PRl=ZhHI^@DMEt2 z@lJwMb#{3lD$B0-{D!|}VoW7-nWC@W5}ruBiWUA8I9uQzpMdf89~$_G3J?!-6a!T^ z*^9XPO+3;tz+|jk{{GUt`j?@yoAt~ z`JoEz>=$bLy=C%H0dG3x$#3w_H2D4RKk?x0FTL|wP5bfc%3pZx&Ed8u<>u7aimiLbz*rXrhK(u9!K1* zyBXsZ$(2DDTeW*q0I`XjA zzi|8u`OIopxnUxS_1}`6mX=1ofRPbNe?MqDo9w+5Q0&{vFpbzeC`DLVgR-UxE!TH^ z`t*U2Bo{j#+Axut|9qB1@2A2CjHE@GoK3$c3J|K>`sc2{45q1^-na@Wb8FV;>?xd* zBf(cY+)J9?))6C6|Lry3#wC41V+Guc{;%92u>Bn>{|zFgHh61-PD}I6-Rf*d7WIht zwV!B+eoQFCA*hGYU8++?+5C79>kTW>NBoc2&;kPnbBJv`fvV5SPHot#vOJ|`@GU&T*(WfURN zxPL&HJOnSv$s5*}jeKhXoEox?%NE}V3>ypX4m?TzaRV<^3)u7#CIQa?mgIoJwoO4l z8I3b+Ju@Yhzx9&$(Dw(=roTwG<8Fm$jmv;E<&zs#G?ls+Vmj2y!^9%cCC z>O6VDSA0Q4X~Qz+U{_*!vfAdRDBt{K0(L$%!~0|Dw9|FCMiP+1SM~X9fOSZ~UW(0G zeAYTdQ;txMk4JS|`>Zu9n*bvcNCMrD2~3mBBd+y)4R^`Gz}n1e9h}0A*kT0YicO8o zxap5L>K5G0jY`a*78!Cjq95m~EHG5<;PK}IZ~y}`%34i91yahL8Ravo-olo%+35|v zmAz#}cc6nqN}s^s6jU!$z;o)e9ZRacv;DQ%SD!p4>oJ(p%LvY|47Qlq0caXt!3R%| z5BMmbfzh;r12)p6#WL+Fqp9klK@o}{w~wW+dI8Pb?SXiG@Y8GCO3=i+`b^kK1+wbi zQXqG{OXxG-KegAM=h|z}x4q3n_fu-yqq%p*oEOwcQY3nd?#Y6@n)rDlWoQ2>9lHJR z>CiPma0NQL*%>yxk;P&sK@pzXNC!?#$movFGn<7wldcNjn0;{Oe5H3{{|`#D&#s#4a7!uy3^M8*y`~?;M^Oe)`v^KUT2Hy zm~)PUo3_^6ho^kKtG)GMs1v)n2lq%p`nBfU!+178VN&6^dyq^u)iUVZHH@0wOJu=H6!kTy}J6>z` z5s^6Qdp(LGY|$Ri^?x>Y*gz1PAohg7x4UZ0@djYcpBEJ?-2k%%abz9~bt6h3DQL&B zY(!rf25@WS&BkZw{sqz@fb~WT;`^TQYVQ=TKz>!YfTQ86$BaX|P1vR5$o@_Pm*;B>Cmw{gA)ed6*lsTXYGNqv8&2x^Eyr3~1=LK!v0A>kf zTV4HXKKmN&y18r+RIT0)vM7dSJvWPEh}TMm@N`31mi-$E@4;#nM+-1jcq=7b9mSkl zSH%Pem)7W@zkXqZyX%AcspGN>0u(4YjD^%FbctLHg^kMR^s2OSHCP z=-w5Va^8`mq{w<&rx-S@r6ek39gY59st=HT_Ze=k5B9u_7czwXw3k!~hASkl`c-AV zYd|pli2sQelRg>tVCXJrtU~v%mS2>U*B{F-8nFBvPIHy?PW9SR=oag5S#+;5bJ&Q7 zu>-FOjl@_LVO|`n|48-J_WEs!E3L;gw!jZ1`5yedTpp`#YMmcW_Q;N5KaAs$yBP2& zV-t5PukE}2?(%&f>dcrPQvFHM2DPE<-TUc?`ojtN3|xxV!sIFtsOF6%GU0rWL+#Ee zGZgHBDrX%g;znFJ2X|+J9>zf0sYbvlAjHgsR3PnT?rDyPrg0~)jTVkoFfyy2eg-R~ zR%(&r7J69^sKu2qdqR%qG_<-b+Je?dx! zzz9Y_X<VpSHFI)c;89bQ#CArE_c3MsfW4n#0r zl~?c`NebPT*3AvD+Tt(Cf{$>|wL&O|`~NdqecfEuFQ!B&s4B~=yB-ygkHkP}HA#Z? z(aMOJrM7ZMbW2Pw+APM05nOE|coR(_tW>5XAFVXTrJyXJsS9Uczkv*Ap5NubfD{~f zT>GluYEirDvnAFg+&NnUilJiK%+kITuhWtoRyt{;n(M>5+oxRKl?%fITs(vS1(3}w!ygDf>PXnK9*1x?CJH%|eFEEh z19Vpd&)flWsF$LduAE@lv^yb|B_zr-?;d*yU5W%^IWwM{-Wdp5Whksm9S|G2NZJ@L zyr84HLVBwz-F6eY^3qSC{=`q!kdZ<&^0liTuyhqRp?tePiWG9y6g66aU?<{;#4V(` ztf(eVR6!lUYhKN0u4iEGGi6;sR-bkr|E!xR6O1h~)OCG8Zb#(*aQi-dr|!+2mj-8I z!1*D45iV^LAxq}ZO9U*X9`AnyU^uYnx`cx=oBfY+seo7K*x~BozYj!BpA9=FYL*}f zsFo-+d07yRH|h;<2vf4 z^kkr3^LqLcmD?BQU+ow?hM%}4tc-TY!V|ql48_?upvu$nisiWzDH9nK(;50K zw|$iG>>zj{vo^dXF^pC9`Jt6}PujY0(PXA#Bb<^jy z-n2tv7Ung4+kP#4dvC9{#j?U*T9a)xRpP=epoE)cYuTm9uT4k`77puYQ3-rWlh)B+ z8Wp*Pr(KbmK%nDZIs&JbSlSl8Q!xkJwvUcNO{&FS85{P8a~CyeP%xVYQyD9~JfbgR^ZlRRB{KfeAF%J(7JiZ4~;3*XHeJaHm_=TgPS44R53+~SYkpKU>c3L82@ z2sq}0)Z7o~MxCVMqcXg{d}GP)W-vOl1Ux(QG!3Ly_Y`uDZB~PSHpc9Q$vj}5i3!H1 zU>qnfytqDq8nzS#80Pv17w0e57mMJ}3040;{e4sLU9+W3*n4o-5_dzCz#uWql58D0 z+!?BxbOzWQP{6X}wVRkx_}8SWqU+_WvW(vM%gdjomOwGx)dFAU??}h*RJj(2JEp|p z%nifJzBLCtFrrH&%)!@rl-T2jF-gOY7oyx=wdn zaV$-xJcU#Ilv5MSG1c9OmzC+Q!Ty({&s!JaYxDDN)5ZBbf@W_ z-0ok=(CXEE!T9V-q2@MP@p|9RUrVxCBlXj+Ojvdt zQMYwL?&LMmN%_4`sbr8eCu@lgV+awr9>3%>eSDuj#KegBxLd>`KXoFcfxIGdltpN+ zB$Eg<+Z*(E{f@C}qNxgLkK;5(T03jEiw4(Lzh#)li^1 z+LpZTHYey8#%YZSM8KY!3E0?nN`$v}i}Q(vz4vX@-wZGGzde2hJ=C6kEZn1FJiJyEft+Uv4-&~t{GPTNIz|Hl1th@m8p z-1!cE$LCyAR3w!IgAYoE=Q}xqG=`l43c_Y)z*~agZ`#5}Z`j}n)=2%q#KPeSpdrBU zQz4L`zb`r;IbF?8*^HUj1h{_`nSA{2+{bmdf5v{*9$}Z4!%tE-o_S zHoH!*Kb(S!+N_<;xBOz*{aKYhC;3PP{Lfk+=#kHkJH~Nqkdr9g;&LJ{VHix1JC;Pc zZyLjQ>72Y?(}EJWK*Y9qiG1_1glUXo{gl;4Q^KIw*o63+PE`4936->mLLdryMnyGF zr>jG0)GQdX4oW4Dur6JRt+j6u#5v{zK65QLvSNKphZwq6GX@lv6u3^1CExleU{e|U zp3h~Lg-333r6>PlQ0!MYwmQzog5RM0#sE_Iw;!eu4M{}Ma5o`< z?-_~vU2ilA39+e!5#}T&Z~{lfR4F>Y16|O2t^)M3IXsO^YAXl6+81KqXZd60N4^$X zix024Ese#Qz$3cYq=L(jF>Ac$+3RGTGGCqKqfiIFDXUL$va1 z<;z8`8*d`-)st1b)5#kOJ8mwhx_poy7xue=3Pn?sKuYF2!ia$16_h(o{C=jd4j|7YduVBJ%UY)B)_4% zRzs~etY$33J9Av>SS}rpgqh<`xRN7n@BM3fGEcAO9)WYR3BKyyX>S(pO0XffE^q5!cwae z`4HPK?o5;4(YWL(7~`uyHR#TytbOnf8Q7zarWh>laIl#smr4Fvb~L>x_SM;;m=nej z4-4PBu~f;?Yfsod>hXdbN_-cr`*L!+ag&nVJ7r?LYhZ_PIQ&bd(A5riDU76>4Wtnr ztE|8Cg=JUnfzpJ`nlOn2a=4M+{t|{~sO!SW0iD#lQm)4(+DNpR_Uagzdp}2=qdM){ z;+-a!;D5#&&+qZ(bJK4qa`H)Y+38dE+I+6Gsb)27esu#VgN@LFj_2Rp; z-j5=OL=}1v5UN>G0bY5Owd?qJaZu!`@S`eKgKx)p76Iu;*#rudiq7UX>?5ny^C+d? zB|h7-oGS)a$jq}u`UTCE(>;Qt$Ij*u^adhimD0G$ot-&8n_u42nOV>)uEiu1C(v^8 z@$pEAa1Tsa0R&|Q9|O54a%Us`k5?Rw3F2%+Z!O2fwL5~7{88iZ%@YFJV{01`t;o@; zeKb;Y&8EjeFyb+K1nomK#@b@vUm_C>pCL0rAY)V8e4uw9` ztwp;f_)=5&w0wDdaFDkWyo;cM24p9(IExc781rM!5%CsL^01AMXPSUaZt!s@&61{% z-|+`Il=!Y}j`oFDPAPia4*1sm<1N>=RTua2l5m6NdU zLK!F%&JnHNqiYDMyr;^8@LN(4RKP=g)DhhN)y8~!ZjWgm+Crw7qTV`lvXMfGI3DV6 zBHLMMW_CgQ$dCS=Bo=L+3{eNI4QUMg#E+n~q9+6`uTx8^8=2^X|Hb%twFWS z+>hfD5r1`yCkD@Ae%nW@00~2zv-1knj5JRD3Y~Xo8!HiEw4H>lb6Wm0NqCoSJ zjG$PE@R&w%`{Mw1AdTaQDSHi6{CgKAxT3>;Nd52>NXtyfC|yvEvg75vGO>}gk9~yV zqrd~jD^et-J|~Ir0?m28jhi4a=&snx;lTs-`jp;k#}CZ*CJs6Z+jMQhw;rxw8p{*y zqPJF9drQ++#UO?|6j_~?O72Y*f^?a3K~0gA4BVts;S;>VQo_`}grB^By?Ux-CoS)Y zN{^q0-cdl1wZY&qLDAZ% zu7$8Q_DgLqTreDd^jS$vZeMB!x0+>Dgo@p0?Bb+}gUCg33jHK(gR7HS zrk?KP?OsUfFwD`GR;C^$!dGg-MH3pad<5LzJejT4%nj}NdpGDsSAHC;#%_IB$x&{B zijqN1`3O1HIOTyVVM^Wn1z)Kne8JO4DZX*f=%ISs62a!ziTX-qy3#~-hx~Iv`v|uz z*E5js=$J}rBOkT(Ignb12nI3lyif`5d;flE`sXiwZ$ArN`Kz{`##FF&V`Q0v-bd9Y zTR=Cuj7QpOW4z~=uL`91`!oW~tjRi&I>j`}pvn0=%O`FUP%#ssiJeo1pm9yD4N(pO z@`|K%w&mEK>+gvLw_75t!pWbpr(>M;2)@P?qn1IXtyij;>g9C5t?pxhq^BL?a zoJWmZ!^VO94P*aq5$tv-? zBL%V*qLFIy?1(a6821s)okGCr9IAelNKkKArCjN0Y;ECdUnzL`Fl1*cRQ$WN@w1y|O)_>W8F+?Q;hHdxFaj^LInEHY44`dt;w790t^e=;<4dv_yMEDPyi;YlajA z!t<@x8|9}RF?CZAI(w%At@in&Mt(8*8fwYCjnxTK<3@jfU=Wf+HIRowl&o+U!Da1} zL<;Hp=&oXyL~&vb^!hP+m+YMzFR;tw-kcadlpd|wl-Pa=@{n@qOuA?#wcx|mu9mdl zCiJ!$*g$y}7Nh-`X!cor`$7bl@w*SQuQ#d`yD*pvp@xn^OnZCUGId-hBq^SMjR0nPCRYJ6n8P zpAi=Wub=lEH&y@*^&OAjQTx{`dq-f&PqYhB+IX8e^Ut%&ePj4ZuR}`EDP>{H-|?uf zJ{wMWbW?$mUQi+{WHX3!UJ;rKy&{J-hUlCsveqC99igwc)&ClE_^h?-^;_2!#OKD! z(-U?Kx^j|L?{6V2g@M~lZc)49!{JTG#||A=cu7L~PN=5p19aEL3syTLRP%88WcmB3 z%fa7P7N@U9StC*M++L3`F(n(mCo6@J_5wMTzNTjlwwoLB(+w z*GH$z|0X<9I`j~k67f_4EiH5_T|)|)gRNgOiKaKdBea%W<~A6i&CHuZcX;)Kay^#z zF~y}nTXfj>;_?x*0-s4bW$2|RnsA2{295{pPG=)R!kRxhKqQ3~acQ8-E?tdU^ru%9 zdsxx}7H}F6O9Pp_{lV=QcH7-0IBs*6u+@9ni;V{odymTFH*({(_T@I!Ji{_Lmd1Ce zl@77{DB#3)QKM@E9UL62gCgT*-Xng)VbVZ(yK z*W;5tcpR4-O*QX+d@~`@8%eFEsN>l681bsMBxxYV6kiM08o>)-X287ms)xVubbvS9 zSG7}hv5-Id(RG3~k6S;L6m=Oa3CQ&eIw_q>5kcQrHRe(YFt@At^4YAOtv}2Ex7QV< z&%2qodvBi8@wq*^rvv^bb)xUkW0RvzD`o?&A^kjuI<0FP7;E`T5RUdzEA-5XzAOZk zdw9UMT%M141UC^3KWfwe5@(uj>vy;859qqrv&~ja zl7VKs<7=XL7499c*_WOKzYb5JpT7EMGzI@2P55Uq!{1k98d}bxCA(|oQl}ftv4HeB zxWQ(YBiWbKgm+Z5Fsggx$$huA#8RNhr19mOBr&I<5>&%Enc{qk9GGf+t`Hwt_0BAh7Y~mlH04OsLLI@3P2PlWXTkVQt367h? zLL?aDH`6NK%r_1te_S40((uZS3J-?<8H=^Dy(zt(fttt8vqdtW&!{_Yvd_kHS<{T>lW&Ez>KO6ON%CltPv)KG!0!tutsOriG z&c<=N|CU$MGTyLv@G+iZa^JD)$LDlam#>cQv6|Q-CQZ%ex6pgoz4M~lm!LB>hF9mXM0OBFd!5O+ z32%Q~(Uu-jzmomr!+!!cSEt%zYij5q2u&eKOibk_pJCU}%O~$kpKzZ6>F_$-E^K0_ zh5bdh;DY?#XNYW1uUaYk4g2aX932>_wQArDnW4g!t`+7(16!SgxTCkan%3UJkhlt9 z_Xx(wpos*Lx2`xS$V>=(yDKBsRU8*K)VxXb{YhvUh)SwtY45^H`U#?va5Y}u%1lj- zGx%vl5PC~@#FL#UsDqhdZ5+(`4dnQ@)eA!{t&r=yWCi_{H53P}Ao~qeyz=2Uc;Mq;Jp5qt_z6flKvD`KJ$H)%5 zN7VPN%_8i+QF>}`-I~~K1?m{fOyvCqt&p{xQ2;${wb7x08Til2%8mM4?AJ}Y)gomX z5GyxZBO|TJmRvWomQ+=??QSF!oEm=wd(!ohY#&Iy_C)o-Y@&cty4uK-O%C`MrrG`W zKZ2U=iw1vac)AGS{0jFtNE;H)w;J0ZI67MkY>h^GB?wK;S_D@^mjLfTtwUYDw)Ieg zCjsgczY2bmK5CaS0*%>XVWoaOeBrn;Udh#(GGUq5UKRn6b|@2>B1Hrh&S3}8SJam* zjcb_u3sf6vtVpeqt)BO-0A54+VcolmSijPCWOuHB>Onq3it`r|;oWqjvTMob;hV zB|^Gb9#n{Rhw@!AfK7$Ge_;$0pS)iofTOK`b4nv8vySkoP(phkfs4LR%x&4~><-`Y zD#Re000xC`w!A(9J9?2MK&kJI)x{Qu-6a&;jOIE1Xki7Gq3(pjR?hV+)T0zdS!rJz zUEI%6DZ!}g@L58gTsdJ)sY&zMk*2+)D!XT=@1JyDw8yvS$=^of+fb8Of7hlMsRjp& zR;w!brgD>sJcC!|eNKb5@n@s<0x-U1SwvVl6O9iV6ya!rw^u3TcIIKRB6!xbg};1V z<7tH+=$xL0rFfR4(Qk!rN&6bBaoW`>zf+)%u4l>D-<`>=ko+YdKObNb_S=v+wfQ#! z`4|MeY_PIA^fEvHASnzmO5yu|u5bPM>%TDa1r2z4u&p!kW#9Y#uYM~>ylCd$;TJLe zyCgG02~6~#K0)k%@aHeea8Lr+z)flKBl)GM`iG!YfR~wJ&>jAbgB+Cs26F>h%=lND zxuRAdnYNvq-EHk#0NF{y5E5<5DO4|3sb=_Ann^8d5ea1S>K0Xc`fTJQ3Arn=Spzm; zhsHq7^u9Fs!#^59D^LGy8xg<*s&j+!HmINM}%hp zY^~NN%lt+eas)ISuT0We-OI;ytbg7=66Y%iiHyi8|+-5AlqgyLPoOCC!i*f*h7ZDQFHiA zv_ZJPeZc1G>Rg+mp#+t1eOq?jEpibiH_`@5N`ZLvxMpK_Ydm*yumkp#s<~^vbtS}P zWWEbyY^Kasff|LF|2;-Vevj1RsW9iIcLs2`*G{gOIku;< z)d`s;3s=P--rd+88U*9R?1wvLqjW1}x2A`YedV+WsmMXXc4Mv-)pNXL?ELnws^-E5 z^q2Xh|7=@u3laAK0r7Zl8LYDqr3J179Nboc-MD%(km+ z0>+YIl?mwH2xw^kiG|iWI)gjaMo{`VC?Qd|$AGmU9joAh7en0t7&chyr3R1ea&e^` z%f7vmd!>QkPzp`LoY8+q7|q&N)rfzXK-Ll`5rE^+wg1cLu^@Mc<>n&Go28Ts?{Sn)>+0 zPh2YYj68)6XL_9@*A;ZT=OH-mYT5J1^Ar%*nRrHw(PNeOdbtcABS7U=I47B2!K?^r zo<6OV{6VBqp=?;neR05XBA^0a@1*KMLR_SZ8ISgLUNE>m$4!AgPO@t)!wO+ERfSjQ zv_cQxS{(&+DvP6PuMJA)!;bq3tS>_;EnnEmVu^(z*;YhULRfiy5wriT>^bX+!7IK? zK}L*rz|U|Cb8hRMdnIHB``wxy#?ZYcwC|K017k0Ub+>=(;@}`Kx#^9PaDC9J*w6C> zSo0pJmpaKu4`6{M=DFpp8&IJ~b@NCp-Mt7A@fU52e=6d6P6g)W>lo?#zC+d$tfu4Z zdG()7Bb7>w-gz0VX`FhR|IE9RNx>| zf5c=7Bd@1f4Iv|krl+8N$)pvavhb@(T0sFe%pA_zL%q72Lx21R5COYyO~}wjU|sQf z1Va0*&Rht-@FqH=JC8C$aa$DbeA1JxP>tZ8?wCjT2ygtMsZd~jir@c!gugli*7JUN zU1@SW^mS`;qU@UC)VN<5-QUIex)9heo)oR0y7!_B;-RE09Pk~{bq{|TZSNliF{2l> z!q^bE54J;&kx+hjz-XEVy~GLrj-y2^XnBkt=g*};_*MiY>}xw>bWt9p!_H_Xpd=7} z^0~t~b>af<(e-Vo@_DiW1>|1R6w>J35mU-r#LsfiC7e))8$WD_LMy@530-e!yrXM) z4a+@&CUtLzV!9qrfGuuChTM`o=CWZnbdcJFHto>+qXPHQmIih51zgShn)IA0-o}oj z0$k}+9u|Vow)ks^N6{~<3N)gwhjc&GK`KDXgjMqxp7}dMZdu<5%PoN_ySW>;`pphp z+R#)3e4tQR;+(LMN3T%oe9S%!ii%K0vJ|%ps@Q(@2F1{$u z>ySy+wroR*Z#p;a=1RWyW6?4&cYfl9*$DpPp)#VX6nBBYBSsfmocoiE=j2{<;U^3h zJUE#P84S3-UW$)xs)Ri>riU5uCgE-&-noro{>!fs zUG21rf}xj8f{V2Z0-*ieeui`$$NSR?CP&Gei3waEvonT^KMzPFVp?4xsgA$_1m>X* zoq_p9e-_lBIbD1en|LHMB05fWWr7}Lm-Vv|HvXFH*%U2lbnFG}z=V$z+|=V9E*-7{ zzJWnd=BtMr@giJ;QG;d@C+)ioyH=QIP;<3v%XFn9Vf1qA`Z--$opy?Cp9%!LjSw!O z@?~B~_TJ-p(0P=YEbacEscnHQkd61+-tJ;9Mf|hUbmeR0~K#j<1 zH{$J#`#$?niREPX=#|{c_zbj$PopO#G%5k=EF2;zaWUPECxux4Nul!lt9kS`Ldww5 zYq1Iy(QKhRgEq`mv$w#bKY})ln^%^a4!CPLdno3V?*MxicyKh6ecjNBaMH1-Lkdiq zH&H4-9y9h6y?B;f{z8CD+vo74BGM%1BoxBkjbmvfOlu_~d>Z{k z-Iad?uV{*ja-(1k>wvTFA^9-hsap$ON-G&Pv!eN^jda09Fiaa@bozmLlGOTOUB6Is zd`g*{Yv^U8bOV&U3%3!IO+lqrk#}y~>&fDI?~WQ2N;eC*0<*%BuQ%EL4VWP<&C01` zv^I7b_J1%`B>Ynq;Nq))*Yrr9%~1p={_QG)CR_7 zJUFHL`Nk@X>W3|A*+N((vZ)?P-nMC~76|YsoqSCm;jj#|w}38pIZ>^vcc>B$L*)7e zzfYJ}tI3&A;;tug%Rm(~#VSEiaaY_)ed&$_mUpXIPxiPxZIWxff*D{+1V#H=6RBx^ zuF(!(MkvJfYwa7WBwrh6f{Atj15a^dP$C04Iyy-y6sa~d40j&nh38ROg9zOMe40{m zdjff3n2c5uevvZMQz2xSVzAY*S)#dZ{#;E81W~#@A$chR-2o29@k7SUK-{o1K4FeC@gx-)D_pt-sP0?vlw4RHga0NCqeFfQl^OZT+Yl@u{MV?6bbA5c2P{ zR#=^~3#7NHXZE18xfP)Rzwt0aR69PzYGy5_R>A!mdiZTSC;&FEf0XhIBJPcIl>O!1 zo=C9ljA_rSlj(A|66=o<+4+J3S6wqK>gY-Ovx=(CDMNhov*h(GClmUgKdk3n;xfGDq85Jce!M>@$q;iPoKX%b?C9R4KEEk14W@qIu%<=n5S_eSzdClN8PBPetbsmItJLR!c*CPNISjV-3SElV3{sIiAr(k0m2v-g)ao z`>}wm^uB!(oTX&XvD^Ul8lB>r%lwtbLp*&yw|ivh^(R4V?6AeG?FS_jjM&LYl~68~ zZ_8A1rwv6pBFyWk&i@Z@Zyi+E(!2}f?BMRM!8N!AcL@a75G1&}JHbP+-~FIu+?p`xIPOMNCAssVC_R8HAb!aqm}_ zfs*0ICX&dJUp3&}?X0$b^RO(PtVK99F(~ZojsIOj#*BW4$c3uuY74mzV2&NWVYn7a zMrBI_6WOIVZE8!^9=eB5EhB$FVpbk7H#VKzC&1gP6&37#iO67dbe!M>Ql_BrqF2lA z)`CaNk(Lv~O;MF1*JN@)zHZ~fmt93&nNH$#={&fsQNA2%$b`!X;4+G581ySF%)8J4POIqF~{ zWs-zV@|R`5uE+YBe<|YPAQb(`jkFY66B=KSJbKvZpUncZIy?%ZdS&ljZfao!o-E9@DWJXS8 zzQa4Owt3w3MmD5rY+>J+~E0sPL82lJ1ul{jbZ^=uL&1Jnuiuxtsb7HtuN|p3qbPb0j|Dp z*|`&sqdta+`>iI`Q3&nEIGxW+`PrSqZzN+5v7mzpjDR`lx-y*pG5W4oMk%iu${=n- z;ln^R6J==)fkFL9Cb)3DcdYEwNsgD;*Y~@{cFws?ugld0rJyMVZv>C%zW;h*c@$o~ zf3ZA=(|Bm^e~cy5i%~-K&#eAP{{Y2rJiSjChZZ07=2_4G?@c2o29Y>u+7Nma|K|C| z7qYaPjrfMgU#K=|lD_{$I{w_ zk?`kL%Bg4vCl<8=zVTUsjp#2m~N9SJwa_$c15R>K9a)(Z=j^dqp3hPaJkOfdCvTLe8tLX&H2LdEzQQH*PL& zATJ73L;%nk!QTqS?9|=K@wLN*MVsZOp3Us^+YPnoSCtv*?;tQ8#gLvXUFT`fbOlPp zFXsN{YYCzoJ^xjy4pJbxdqN7KHOchlROemV>@LVLC9v9ZR zTcqKU2K`I6VCRXTLOhMjPv963@oLFE4zz^nd}PA(1?A9~df#;? zK6KXjMN>3t$=tHv$?LBJk?U!6uwcf8e`tmJ!QHA;I(Tny-w$UiDjlp5?S0#=cj-=D z-Ca=x`N2NpmCvFZNuI=(gW?A6Mc>HztA>Y3VrSp~ddw3kpiJ#S3iJ8W=l`4xJ1C;X z$$F{j!v|{m{;uQGlS4A+1cKEh%LM>{3PcS`z zrqXPn+ItgmLYK7pe*GTyn_w^C+3tN>^u+!s%)^`sdErkC)%;Tz4c9Zj=Ueln^L`(r zT87C?KDR&R#Uy6!sW+j9<}J zK`9bG-a@T&tnV=XkWG3UbIz_7x5;I_&@ng=3G5^v@K2cqlf=vViF*c@6tEde+y1@v z1dDLHyp3<2W5Qf{_W@nR*6?d>ITfA3VPzV2!2|7Bzt0#6s7Yt1K)f|9?6I-o!qO$= zE=Fv8;UI|pp@FmUiLQ~9bpQjXa9dqXrR#6d`%xKF$0pgnOZ7Nt&|b*?lo$$hp=J5O*H%T0(LF6uQe+QL>zZ{hv!xa+wXpLW`l5tvUar-cWqXOugQ+R<0s%yGL zUZX|hD)WX7-6FKSvWj-8VgZ+3K9j&*GR2vuP}xH)G^VAX+ZEf}3i8Uy%7_y9XFg~buq#D-XC$y{OOBReArzwtfj`kNUz?*`Skw47{ zST8Z2+&De~84Qsj7@i{{jb{i?q3`SE>N4V`?Vc05M_W9EaxYx6atf8EMUbr<4< zt5ap)#Pqq5p|Yx$&GV@7ToZLi-WD+*AuaGU?YEU8>^mYgk!0 z*p$?phtTF(8vY5}najK+f4{Ufa5E9@EiU2Km^Mi_s!&jL zP<+)XSNS+QGl^EjEhi2c)ugYuCoB4mz6*GDll)P=sP_P7p*KsnkLnv8fkFy1=Ns$u zDJNu7&x%*Sgg<@VNS-MFbjG5($2F)Qmy}I^|7a+TJQn>QwbXveZIx~*oICyx5;8>& zfIAeF<$rQ?{~;!5#>-Irpw3U7W%iM|0ji2`vRi0mpO(1;k^He zRep|$FtREc4Cxk4Zb$ncT&6TYL|;FndJ`ufbi_u!RW%h|HC1%$5kst&RB-H8hx;YiO3BMq!*Pqdto_-_)jC zx0$FhZ|0j@7x86o(@v}1u37D1uGt$iGk@3BF3+GT&*Dz{yOvw>N0;!#L4-JDx%#0p z*;IC6LPGzOe$y|>BrH1IN#=TU%_W53%bOuv`IedcZgaYR@E(iy_qn9B6f$sxYyXus zf6F#EIkjY0SJy{NpQ72v=_Nd{fOgIY%3M1!duP;A`-kM9*Pr6jsS3YKq{>qH9%eXL z&a=I*!~Qxme>u$)f9Yf>uGYY*6yaE)|E@uAP_{*QY$=Xl7k7&3Yb~-w>Sq%(UIY5t z(hWDI`rQf9v&0>_TNiIF?zmOD0CGR_AoSNk*T&=pCb@%;V~Z5yv<~hf+ZFWnEC<1q4f5~y;^j_Zh)hZJ2K@IcSCBx*mlERANjyC5Vr`wD0m4kf0%+mq3 zZR%Ec1r=bQ9C|32$0A=rT~qI7`NR>;{mYsHecuMG5->fc@V8^<_WCHa*#v%usNWZh z!kYmkP@QMfLz4oo)3?W_BVC&(98KS<+&uoPm>Jw{>Nh*0*kkP!fdAb_OEL z6K8I3<5r)TuSXxX<;INpo5~Nb?IQv_6dO?I`V1bX(?zuKofKUM_{gS-56{gCk|i@d z#fW{16omF!2_fSV)cOL8GSlxZi3t`|XuPXL9B^$B+(z%h(By@R9rb-F@OG6!8lk4d zeclh3p44>ID$8C^&?&-}l>#RROc=PNw9ij{9917=6qU{R_vg9pI#A9;w;1;S<~@P2k`G+j#Sxny6~>{yH(rXmVFtgCOPq+1IJvmq9;6Jst(|E`wPDeVv0{jz*(#K1OZix%1Z0oZk*36n zxMmzm!g+`s+7Lu)DUJ~#@fc@CqLK`Qs_Gr1TC8Iqco~#Te{{IOy*(}5pwSb{&* zTgiT=gO_oc#W|b2cZ5Yo0~v>{5jU4=SD@7kQ^~2bERyld?)Od9whs}{cxhhnU48o0 zE${vLXVYsX183Ug8kIJqJMPtCo9&d49b@m{h0W@=GhlBC5odwqJN!&6<7G^S?UHks z&)!u`$zE`&aUy?B7`$9{^oEJ6IrX)GeLQ1IyDmxdy+r(-aAvzgm9|MgX*JFO$Foz) z0dzW!C>}E$>9cjzY$5GZJoP7d@u9IX>#u3})Sf-OPj&JGYL z`X9oJ11KC03YU9jFXt!Y6&}L+?RYn~DXDGew=J|D1(eh=?SH388sF&6uG{(QJ7)FD zk!2q+9h)Z;UndEjf&0!)O0VAWh{>u45P61Qdyl#~p9-?`=_HSp5WWar=-?kdR7%S&`tjt5Urzei*y%siC39D zH71gz3H&7qL&<{GaenYMWfnL}HTP_d~zud?gurlwd&AQr7{RoEK#sVQ?YZU0iXg471#*r0Zy zfhp20r?xv!GP$9>wMk}uk}`KTWq|$i&`V3esJLbymo~86+UUxbWr1!*uu5O?eSLWC zxongKFEh2Sq`-XdA=K&9dtQfwk(7z`4s*(xxFmm#T)9xlQ<|vvsu5dBxYtV85gKI3 zA2LUuHM(>e&VX1V_Lz!E*iz?X-yF1yB`>?Cj35h@_lQnJM z>@Dnho#y<%j5E)FwQaj2QJOgNyg7m+j4gn^Hy7g1lYJ){P=tuR#lMw0Yntp4;IxV} znJtxHBf$Ee;ydMVW;G;M@lyh^YXN#DktJhcLPB$Z1LWJ=zHX^+d<(Y~TxZaOM)g~@ zxrM`<1w-ib4*jtxz4XhEg;x_zs^7?B&_+^;m?`}SyGb#Jh!R(AfD{dj1v2yd=N-L; zA(&_9pbeJ8?}O(>*$VknbLrM7rz80Db zO{f+uDa2ovTGl)tsx!v6$(0+Ao!_w#u6|$IpM%bm08<%{ND}MwQEDVAxHeW9da^is zcW^-726|3ilqY>V9^HHh7yIg-M7bcX`yo=hcgUoTizKa#y&+V&Jm0IXKMnB`YnDeV zlf2U<;l4O?4!7`#r@Uw7I_RsWF_E3nSlVglxt~7MrN=~M#Ax*4Rit>NodL*J9g7(8{6^FQ-&%3?QRmBs z^#&1>b(Tz?WdmZ=d>@)UPm`=G&IQ)%K4FuQoYs}0r?dHNvqUFe0UaL?+p;T3BEzHW zGh%Fyc9z(YMt{BTfC1Vw+=KJUOi=Xa@K_vpD(TE@y+}lzf(m~kMl(cT10Q|gzPyR= zw%qO)Ww;+l25ZkYb*_i%ay}GI(YiUvIyO3NmOAto-TfkrJE-f;I1`bR8HoO3?^=@3 zB`^yC0vS2I^>JUxu!&6HYKEb}Zfm8?w4rS4rt$J*@%o-_rC%x5yOK#8nwGz#I?jJx zE$aW?^@>&p2KoSn=&PYF!RL!Kvtnvop>DTv&atpqgDF(Eeq{XZWZq1hILxDWh&3qv zI=p$BD0s9LoiCsOrEBAI^6WH5^MRf_PDoJRH@6wjiQcc-bvsQvkmz_Tsh8hKWi!J%F zE`qoVn}s2a*U7qm7XEnHHgVuA#ZtkQwZstLI^JaWLYH!|sTdTP2cp2tE=J(6(z)#O zn9oHbpZHbFcQqhmDy;wO_ZKl^qm+D=T#DR%KdbQ1;YhMX+7UlwhBsDPGS&NY28yY* z2#G7ctOvJjUh87NKMmO6+O~?zTu$G&|9YK?=f!pL>`@#W&Ncg45+jI4d^?Fn{tbL~ z-<9{iRtEfCL&QF}h6w(CA=rcH z$koC%op|z%p4($!+eOs|Ttsdh%ap=3(c`g1dg)mv7FM4TG^fyvIT?5on|KqBbG22I z6wgc4QXRxvoB35GB9d&ODLfGD{^K1s?1Gy)!??Z5*`rSNV&L2H{h+%5KQm+kyM|sv zflx3Si=EsAfK!zi)_kFkG3*R|)Bz;94g38{=;;qgNcqS!Xj3cXCFZvpXV@6 z%C-BNev(Nr`$S+^Fg3RZQ?u&y%1vaS&d>yDJ%VX~`81`v!~s3;8GG#}2|7#WBc%ok zVS=e?ieDa{P*;U=s8k5P<>~SBQi%=fNba#aU9YUb%{Qm{?5DxZ#V?kl{%)j8722cT zY+%jezUA#ImxF{(w3S$Ak|!=e%?1>>=~65an=+kYz*@JhYV>o!N5Awo}m6TKdZ6N;3@4Ga;mTEEnDMGegsXsmd@k1k2(^*HD> zuccCi)6@aIn+EK$PmDv9Tm25+ZuHhZ*pr*_XWeOlWqJ{g+|4UWvP{bI1xCj# zeiZE#i{?mr=XR$?^@TT50lYETLwU@TvOMf_%@91#v{>t>KETKd9#-`8FglPQJB|cg{*P zGsi)vv5WF6xBW0AEn`h+0^`4wp*ugzd zrP_1{oVqg@AhxihrO9WZjxEy)7bRSxAYolhL-df$H$Fc_ErP?-O%ZU68e~O4EE!eW zr9R9m8hZBT{giXh&8bj+Br*hrAXePgVT8Gt~Izh+`3)|+#rUPn8&G9>kB(spu zzwE~pT~HAmx%8V3Z5DY5krlIvfV1jmMtU=SPpq)>dz*^vRzKT+9+maSCnQ4xG%~I)|q84)LVxbuL5W zg&`IfVfWSf@M?8QKv48>H61jzdM|7|PAd`Zlpndt&CYTeFq8e32^#3 z3{azCZ=++W+}5|Ai#YPbY&dp1jTZ4r;6f3WU@GFY1WynMGdq%N-&8;@GR z3hIW3f~t=$MiRmAore|fAeP(uy3qQiZgRN6GM(Ru&w7@Yd$xmZ3u7t>6l2?Jxxl+q zC(VrrYe#!IkggF3>57Mx#9!fkO+ddtSLvNSZtOe5fzlI1uS1I~NQ!6HOZOQfeL3KE zjnI}W`K$@Vxw^j1@6Fy0OP=3Yzm8I?XbZo+gKU!w7EUG(k*FkTh`A< z<0efCoKs@2BEA)$UCZ>2Wvy|QIc_x*CChog>yE1^;*9TA`vVA%eZh` zBcaaro+Qadg4J0~Fyw{M`~G4JIiYB9uu9k2hI=Spvz_BBk2WcH_ZLZHB4cBfW6$qQ zDv@>sI(cZt9X>>8Hs02y=8CyUX;pJc2@zbk4UEqJlvDxTGbG+Xhv2Od}uO}3>Lm`a6)c3RV{^QG>UgY9fD9qT^aeQz&|JDZT*AK)!VT%^RuN6a6Cz3k*xDvyo2BH_g%~jRo|8D8N!Y3QnW1R z5DZh$L=aY;MUsCTd?av_AlmX?iimHr(Qk+kk>S!gG!;@9!E_b)^ z3>-Aa^&DS#zQb9x0M_V5H~PG)DiFX`=aKvSurY2k7NP!85jEUo$|B{m?eYAC&%bT; zQ;#zE=M5U+WijtV^?VAce)~y`F@N$b847LG?cHA$BrK62w&8Li%Vze!`kN_q<0^6Fy{n+KZ0D{5_e380I~r#r=BfP1qRM0_8@@ z_2|WTalj5^?}vxG>>*#`d&_tw&D*#>wwNFL33Xa)L!Nt=p(z;*iyW^O&T#;U5U=Fx zOw%2F*ch3o>LEK|%avfr&YFimniG33u8B)EmyOBG1epq})I6Kb@XgS05K)V2EC}xK{TzuA?RD6-jllu1y4X@$@Yb?=4Ap$D-)+;PVe_Rg%KW<*B{D##{r2pHk z(ip4q6kg4r$NhlfFn#V*NprO6iCXos7&Uyri$na+2Cr3wr)}T%Q(n~6;c#> zX`$bY;c_Pgn-E8qA7TWhuq%rjNinbo6^B?Ck$~kyP(n~71`6)PA5t6wCcEGbqq0v4 zHgVf8w}JY1h;taN%qQ1ez7^G{0X5JGGFj)~$6jG=y|9vsdhlU^cjv~PGD<}o7`xv} z$k*YCf2(f+o*=tIGZ(+BS^SgK;N&&`Cs)zQQqtwu~+$!}nw)hb1TEQ5ba zyUq%_eNf(9FuC1M=F*!OLBh|dR+^&8w6lhG)y&(7&&dnDy2$P`4Y*_c&dr$2{)#K} zX^#gFPF2{tocv*gEo`Q&AMbVMD$(%cQ90wGknioq<%2Hkr{IUP0juhd?1_q3Se!EfTg^x9df%vRlj@(YLsFPv$3}6OCO^)ts+vsX%5V|-2ooM)43+BCCnn?78b;%9 zTtg8ojF!ycJ6vP>CKbL;0z;f#Z}qJV&0V*#<7jD`rk6qg&IqK&;b1j<&!y>BS*4qI zRn_IO&tN!?grxbCeUOVsBk?Cud-DD)oVq`?MFpGPBFqH zj{E4i_GMVBZ|5-UI0)42y2{4AF013|M#P;F^dw>Jfnd};CFeBc^)F|KI)cW!wqH}L_21rj zD%zV6mUBgsPCuH&&tSrUnQX7KTYf=Q`&`#CtZ01iAlW(Q002eb-4A{jU)D_X7HyI+ zVM+MR?CekpiPg5?w-&EiN_xZnzq%zVJp4x0D(B!fydqi*y>j>8fqc-kZ|4zHIR8Y5 z&BX-r(o8k;eKx};wevNBx~?-k-z|@(MD3hXx`3N=g?tD~Z$*7N!#{Ym(YgVEg_7^s z*q3$Sc-^Q3;}}8pw&$n&Rz($U?Y(7#v{*|Ic(hj(LX8dIt(K}392{Gf*!EL21F^gM z&6Ak*B7OVoSA4*Qj6WMbHDB&A?lvu+MGiQQU|D3W?(cDz{M;qZ84;=d^6<*0%-ciUy`-^^%-Wr?UF{-(_r^3+r0rD}-ChpKK7mrMS z80io-7=t1TJQH1FI$zU?=6N$vV6B!#4wT;YmIur#4cl60R`jO^(VO9< zfF_9lQ93~eN$X#sROa$@ahonWM@w+@-=YfOgLx#(>mWkoBDS$V$E&3gA=kAGlK-!` zUxr}=rokpMuU8=ckJ*{}1`%vmiq8JWBa!*{O8bd6uq6_l%m4cbRLYi6SY5S}{eRp! zFgKLI-1KT%40HTBH>IzXL9+zpm@oJD8RnZ5cf1Q7`nxvO&9MiE$Hi$ZmiSrmm!8QL z{6u+jBQkN7pr}@5RwIvIIY?f+g~wQ^o6Lq-^KS*q=xoL~^Z&52H5X=24IPRw`zU=H zt#{^2TEa1Zf6|qRQI_Pm+`Lavl0`brt)h5{!!kMhbwEsblbf?-7!^=GOllGGMRCN$ zBnc=gWp60pq}4JCo=$JWwJX_h1l0Jse%5Mat~DuN`q&~~@RB{jLQ=^#`dJq~Q*OzJ zq_pP@IZ#ZSbZ~_}l#j8e7*f)u(pSvp?jZqd^Tq4K?T}=N?QlS_uU-Tj5IiUc6ucA) z`Ns)jY_{l+jQATcGbWBZ)(zAVCv3a!=Ykq{=G0_jP?OS|b_1>n%S_(L!`ikV;L*L0 zIB9V1F(29?+zfxx?y5N3iC+ceWD-9#;;R-q^0E zeYfYF=yR+GvR(B}s`8PaXhMr_h83e@r-QNC#hS0r<)#|v(E0Ku2!_~o85S&B-V%R+ zJ;G@(WlZ?ukd#oT>XAz{&a945fBcm+DM>a?JJ-77)IM$`vf(fTo7!8uum4LF|K{~H z*d*y^KVeb6!NE$|C+5Xfhm8~JppBd^dA{_^mbNqNvExIIx&6A^(HXcN^h4vkcN_xN z&M77IuU%>PKcOGR63`7)j(oh$cc7yO|Ad6kdJ8qPnpE6^|FXif@&V z54Ce`!%T@H!#cBkzC6T{xy+2Bca5FU{PAq?(8luA;EsAwrimD89-oGhAr6-oyNTP| z?rkEcB@T_R4KprCpD@el_|BtR*WK+4dcO;Q@AlI9h^bbM&hYvT2)hx@$68H!0RsJD zVM_GY)INM3tHiQZzu;FXbd+RV0+G1cA2x`$Pq1> zx)9QXKS=llBbk#@vY~r^HP=@OMvn|c4NEXzYLk>WM$WY6?Bj{aZ1)M3*VLwv`r&-} zi)*}>!V7$(P^By3!YbO}x^LcSY5qe7H*uddF#!Q?9$Agyjl+36zQo!5!-wh>aQioX zZm%+OE2E{59^ADy+w-UduqudjmQJyZk75Anh+hN#7JwI5&!Z#k!YsFTtyY&6IAFI2 zD!@qi8v?2cFBWbOJnT14NK5aa>9b`Eq$!W%2S!TGcD;8LyN2(qAdAN72De!FehPxD@s?TV-2-lNL#`&S?D2g8sy)(z*~5sWnFgd4K*#D81i z#_U4$&^5!qUVw}ml?>ppeNcQcG1KILB_!64l!K!BMfK|8zT1hnP$Jh2LChByQSPXj zK4?wRZj|4%Sygilp&tHbZ((KZxvuBtnZkO*wuFO^tOEl%f>YE&x1oiL{bz%DTInas zxeeRL36tA5gqH@*U!~p8rkv>BXRabTqZzQ`tg$`s@a^z()DKQ5c;*KN_AF?BW+86X zujBFhdU$K$u@qB?*sWFz2lhMfU>B5GlFzuw6A=hzU0<@7|5542Kh*R22A39>ptwOH zCiBIjD`Nsy_f2-M@r%5%Aa4dU@*U@L_McejA-rKh8vLw>u_fk>$2U{->N-32GwYw0 zkV;}(PtO(J!-ad75Y&n=!_ce(i?~?8@@9{Q% z+;hn`F^B7FJyV3pY}ezatBsr<37Jg@JSIJnTeR8xmetHjxZpKrp(&`1u|(2ThbGR$`7W zh<4xk_ndI~+D4-ewb{@z2Rl(3{(IV4;z%^f-ZUcq;%T3(JBhJDrg(VT1HtOhSzsf8 z7gv5F<|jIbN^}HRWe_ryrZaMJc_;h6bt05%A^~r_mi?ZG%)u0_$Rz z@Ap+|6Ioz|+y;IhvOY*J}%0lZ6AW-+xiL+t; z02Dj&bB=5Fvf+)5em_{W4d$+!-fnuquVW{H8&RlElA;Y-r^lpxtae3;#l3%_f?B{W z>FNXsWB@i$2Cd`@o%C7j@t%tfnnAf`o_5I!0 zz}`Qjj9t=*GX{+L;|fbyWZeXIBF~R0!hj2u?qGmKFe=wSm?eD32G7LRC(o z`V%4kqy=!<$xs;Yi%Ie}Rn`2=&*s z7Yj@sao5Lpe|P&==TV_R;|3kW_SZiUdlt$IG$)s*0r2pDZUOlBmmA>IxihLhD88(< zf3E*OJM9p{?pkVcj)z6W;UwW3ru##b0KsH+*p%K~Y4`m#i#JoGTA=r~Z<+YCw0;=_ zWCZtzQUGK_8fH%q#GM;qqW|B=c=?b;17qNi)RERi0w8#_S&PD&2j*2m0I*vJ}1knE&N<@qTSTV7(f$rr0EEizi%$Wg; z`x@UOBkYf%vdDps3b_JkH)ZPmlL<<@&Ai zRUD?nXb)`v;|HWr0QooY*v)ge+bxiL_wGwjXegoR*49>))9yR>%V`ahg_=+Iq1wn} zcNddNa_v5k!{eB=ieJGt&7~o9r>uWI=mLg$tSAo+jpVZLv-d!M|B1UdA-4@D#k^S% zTtlE}10)VY^?w%zS``dIE?V1h+x=$4MzkaDV3}SsmDx1?E6W-As_JTLMn-wBS8JvO zX1+~IH~hX8qH_iWHm@K4l%X;M6tW_yAU}Vw!G0rht|tK-7k8*o<@?9Oh1zXV4i1j3 zBHGNa4L5G}5)BHeTxVmxPpW)Qzscg_;-J=AocGo71wCq7ZnslyM7S620(A_ZZ#H5k znw%|n=c^0ErKIFOeJW~sI2&R&9maF@3OfQU!uuxYebaSA_=m6LU71q?^67lj-N;uD zPeCUqYd^QDhL|0j{ngaeq=6SZ7Cnz!tK3dMxMtk^sUul7pebpP7?C=y*J%&#TPfka z!ta}1h%8QhzU$$%AIEbfj#jSZw6(thCvDG%t?(Z;{Ipr#cbu;>IqRp4Nj~&_zF&zd zTw?fQ{1X~gfUH=fJh8i5-2G-PG^)boz{U6Rb|-Ty-F3O>^cHxNgK|vxxkcu?UyH!2zn$RQd3hySu#iS-mC^jy}!L)@#Xdzek0h9-Blqi z2BJJzY@7_c0w!yKseX}yNvDnz95>cS;yLVvy1fF(A6uTY_s{zkGwck2?OhGmY6?KE z#ps$=S?n|g9U(3?yK;}SiFLo3)!jJ%6&40^-_1)}yeIWKd8?Jz)(x^t=pP(pUojg^ z`?Ss*T!Ebv=C`rx;LqxLW#zsWjJuf=!ThB&5I)uVrrsLNH83)gaC^Qp#J%EW{1Cgp z{xGZWS?VcUOU&<*?6~Sx;iltnpr%H}z2t<+#qsCrawGR6vB$F@tVQc}`b3-QRds(x z7DOJ_3VQ>?zeK^@{@~!sS&*e)Z5p-c`~3Kxu}hI0Nh1dEKPkqCS6{zkZ4mhTTV_B8 zTsH1xa6EO@3bw0OcxLoHEob`-%pTPdfUWBtvc126lr z_j}w8LP!Lh(#t;g*6vsHW=r=rZMUX$jEtP^an-lqOxlnlB3 zX~=`@necMqW+4d4_$nb_yU?YGj9`uunRFsa4-xrR8D-79MJfUSvDP`v>bW+WW!wOZ zE{Z>pWfo*BiU&qxJ%<@Z9b$#?0LmmrT=vV9!RM%iT*Jwy3ORSELWAv3cf}<-^`mL~ z7n7m;Gpz2vvqP=0{zoj*4b7Zg6z{3Y&ZMGvz+JcC_EYdlhd=bzdIZZAPLEY}0JiWC z%An)M9TE;Rw&Vp>@LoXi7-tO1abuC}OX zfUfiOdz&QKoh{MD53*dtu#tAdY<>OnW|?{tg&*#L*PVv3Ou}LS)aIg0RQGej(k!|H z%+jz5)v0Eq+42*gwHlhS4lsOWo{rXIG47FT0gyXKhNC+|Z0&yzhzF%03*sNDk%++Q z<%{THe0n%ns=f(!Y=4Z_qFBX6T8p?1L~pNy-09^sRZ&qfRY7HRfZVUBSH|55l>?PQ zLZ2DF>LrE#!@v0XLMf<&?%S=7sQ=L!z`uZ;0SB3_5AF6BzxxkhK+6Gqj#$mA`~1I7 z4{h(ItrhO%?q38!CJsQ2Q1j07sz2JMUfMj6S1HM zu}}NoyYWW@NE1;G?AXx1@mGIk07nw-z44m`B8dOs8FE=5swj?_k)-f%Tec$5Hf0G> zp82m%ihc$BbQq2R%O83wnhvxT&O+!5|0|oI*MRFsV{+5y`lF2xXj3kSZ1MTm%Yjq? zVUcT}v{?Po_J3c1oHpcX&R;gE^S@P3$xu5MaxZf^3_**WlLU5#3cb@BH}HvE6?-2YLY zOh7<4=lge)`>VruT3U^nj;fE7+!o|5cOBP(P3vO(T=8whKerNWhn7yOlhSvdj`oLQ z$;CeY{*`^S6eIl9fQ5t8LHuH(pfNXrnF^mvFhV^ZiX=$* zv>WqFa`JEHf=u5htz~zqC3*|A439lJ8EI)&DSe;YtvAxyYozN67ari5lk%W{D2ji+ z7(`B;_x;tocke!USjNZ4!zL~U1VE(-xL4haX1kLG@H_8O0RZCc@p@$_nwWp_zSa8_ ztIK+!hK<5wG>x~)=h4G9l(W!UK_6t`?v<-+?-k^)PfWh}<2^$okP<7#!lD0#%)Pj} zjDv$?s;x1ntgdcKkK6W>7=npe(>LPt=SYYrzzUhv89xIqFaQ1?nuqi*nBE zZNmnE-4e+E?DxylnqqAHIS~+DxQTiNWjsd>0D^klPPKh0Pop7yyt|CQxN!1sds`Te z)@%O@QIY%AJz-{rtnE_MbU_}zHWe4wO!p~G*T%+1l&Qb^X&vcKIj||E=v)#AE=vSw zjiJ2d-QCrprRLE>?T{WFiO-Euy_>j32jG#7*BLb{L<}z_+>RP|sAy<<)u3{XeN)q; zeK&fe;sL;-dv|@z@?A2D9ebiu$8;=%iKXo(XZ7I;%FB_gY#c!haSUJI`||yyp8scf zbkytvq{0WDtC~s0c=F~Y0z3U0IF0{A+02Cn~0c}67 zO~7S^*G7<;RFLVj;3eg+>wP)B-K+`{ettObwI?bi2d%-AxQQsUSyeD411n0?ZZQy5 z$lNvMGt{^R>|uHP6FmUyfWGYar@V;w^GkyQTkdDB?3Qsy@uftY8JNH}o3A!sNLg=2vqRx0~|_9Iz<>i$W;-W%vF{=`(PNqz-23&Rc$#?tuRb>{@r$e zQc4Fgmg>2*24qy=&+iP;Vb=o``2*K4CH}y%&mBLZ)3pS4n9R0+WLJKY0gIUDrQ^w) zwTW#+o1a9`b=XJ8+Um;u3t;_;eVVngK!}T_EbsWM>VuTU>L8` zY3SvmBwrAwqatOJQyAq34|TR)uiCsZrnB;vk3_pa0=&Ng&)Eeeh*i-2&KPFgNL@|Kge znTkBosHpl^q3B}q4L?@F7T4B%u75;PiIIoiVkeU!ozeC>wfvw4qDPVO%C$Y+*|^{W z+$q*sZ671V(1*0^(I`lAMS}+ZXHiv3`j>j~FGzN!+%XCa;FhdH6X}9)*vlMPq>&Kq zN-hA7Js=s2)Dw|cyd!Rh9p00u46ka}K?F3qPrhM=-|K*#7=({6-X%!AEJOQ+n-^tS z_-6-MuS6#!(pi)Hsr`AxPt{~-T|xE$#)gp;m=IcoP_;}aSp+4B)C|K(b~!z&8G9q~ z6S_Piux6WHk2n$W;ier#d+-99T!)>g+gyZ3Kqlf==6$=J{qA@JidkZYGg+e)H{6l;%E2xB_UWRqd?)fIPgU)v4RTifUZIfKgcUqU*Qd+h&?z(0&5zykw;4r$}Wf0AwonQ%1z$h-3|vH0J-BsmQn zdZU4uhY9`z$Kxa)|5DI?y`uk&X(W*u;G7u(RZy1pNH(EQbG!4&Z~+hMIuula*$~O_Tqc19IU2IJ`ss-h;*tS@XV7 zYA2caGcG7}a7TPTVK~?SC+EjW!^%g+1evk-PS16QtF3(UEbb@YB=7N`8)%MM zHH*r-CE74>b{3dkL^C@TZ#WM=vNJY$GzjI;ScH0CtqU(SnktjO@yqatjj&;Y7f@%< z5wRPOK!>?m`3&O?*K8++?{96xKU$i%ZLKBpik zr_Z?$O6Y#bH<-FXpB2hQee~&$FV8npYJ7nGM!V*IiO$&XuQ0XTew_5PetVGHZzwLg z+wm5*IAiWo6UHTUoo|Z~i|w*o4$tMCync9b`@2Bz^{SpRp1U7YeM|!3>FBpG(zz># zB@pe_=~#TV-S-p08|R6%W3v+rU9-`7D9h60qos#q6s4EKj)7|2pS?rPw3e-940bxj z^uY-I^QjsNMtA$-+m+`Wb)miF9Xg$D6|D#XjbvwXpGWclGqJ~S8T4SRhZ{K-RoWF##}dZX{=J!4%)^j;U;}muIJu06szgZ6S_J0 zVl~IPdbCz$)@(-k!gL;97~93PeMM-sB`!U$(WvkN({1pVJ63mI=@Q)NWPmIdPL6#3 z?W0gJ+gM*a%I-GP7`bX~5p(@;y}@5P;_7LC{fFXK@Sus<9&O9skTuw2o9Te2wJveR zq`UeH)oHAk-iL-La7lD=Ze6;{uCsYUf8KM$N#TXTKw_9BiM!r&i526C#rx}c!u)IP z*9GYvlpAC3d(M|iD=gl@E1Z7A6#i74QY3vJnDcBGK_0|AQ(fDQTA_2Pwa*d9YZX$9 zQ>K8G-E3xvUJyEs`IVOs9G-_S*(R`Lwq?+VL7F^!O)D%qWqnS{$9FS%zlca>cJ4N1 zbUtM`jhf#4`1|r4M0EV66=@kEi1y_XAsDzD>RMbjskjF4Oz*EdJ#D2Wi6vIwG-A3U zi*jtWzN1Ng2l)Cz_M3&cc_-P?(p62>jrs~h6^!j0)djn2d1ES1Q&{3++E*C8-#lw; zveHr}9S{VY+UwCX-g=P>wT>wTIc`g9C)OMISRoS#@2$yR=Ld@f5&sDo-CuS%-OX_& z`edMkhex+N@IUiF4hV?Dhk|eA1>CjuXfSWH*4p{G6r+{FXLQpAqBLk}#c+XJ(h(C- z<0SDAIZoyOuC|E2WAorw$7$%%(Ue-o(>qpep<3CT=|Hb69jXZ#u8nZ9**l-q6eee$ zLZCfeQuol`B`^R@hQ<1Vt_GiwD4<@iN9dhdI z`ozqPzrK6)%E#w6{i%2Jnu~Fa zDch(D!09CU-P);ChKMW63fJRB9Syo>6qLm@gEiBGY2#QRre_o9w$x4iJq4Cs^2~rJ z?xKdP9Yzfusb=woUN(D8BuCL%Y$|6_z{M#ND|HK(@=pscTfVlDW(xzct+~tk`(;lK zhi%oVFW1{n4QNB9OuNTrrAx-y_{}_eN|QzV+~rMu@0{Hd*ltRS3f`+93TBo)EXR)$ zW_^vBVSm2KQK{Si;O~XXxvyUQJb#*6=Q)#L3u-sTs(F|G!$k9ZaN@I?pRcj$ zcbTddo!@UiT2{fO+*E>SnsALlL;0w?mN>Ba@Y3LEAyC7#p0YBfL3eoIBY9pD`1$<@^E92LYlBO~zx9 zs~N~xAJyH%KeH7!U&2j_ww2}xYIhi#pQRu#|M(S;D(&3oI7FJIw&g7=oE`9gC(;^( z*D9wbwR5VrYDxRP`31K*s(Mk0Bf|H{U-RX){)mMShJ#l{)7`J32-6 zuC7xsV(Oe-;19Jqmwh9PWqMA9cw7BXFRz__(3>Bs^eg5)+HzfmPRlqZ&Yv`%E{u~@ zGhsKL+V`P0jg}U|uU6w3M>O(;lic8T5f6`=`m>^IY$?(3s=8&hQ~j@7%P(Nf+P?Rd zUYs)2u#Oe{2dBR3RhylJ!D_=6&WR`nN2T^>PQ%29b^T$_A^Ewjw9=a>fmWYeko0Qb zr{kyd9rl$}Ti&sA-uUff1VqywM!Ds4*G_`P=s%SSLRsz6K!=lRqI zHBE!(`2m0KSq1J*0uYqc1pH@M!hAj5Vu2s+Nb*f;^6|eYOn(dL0hq)?w;xMg@=Tgb ze$jNjzpnez=u`B$|20H;l7tz;CM$E8@l(!G=2Gd_!M7tp1ouN6Vp73C-m~rGOy{5( zjDLTJ+;(+RSe9(Vj!^jgoG;+&=8;vO^D(3F@Vu$;)lhem!28=jAINez=j|w1&5rDB zj%jx;68!2CKGbT?E<+(6+>^np~m`h*l46!K8C#tR9rhJijtx5wD4R*|WWPSspsJfe)%&Z%@#QXCla$_5%^p)(N z+sfMSa2uLZz(#;pz5;qJO`Df?jO_lW&e;-?$5wCcoAMzRBqyPVY|UOA1mf($h!Uj6 zp`Ro9v2LXtYKMDLcPp41{mJIeCqoO>d(GuM$1C1K-s-7e$iHO`k!dycl(e&;D>&;} zH)L)2`zKAG)mwPh&Kni~uF0^W$7+B5ZU3~n!teK#UDW5tnx#3+vdyX(T5o4Hdm@4G zyBAPXhmmrVfH!30en9+nevf*75C25Nz5tB#v$bFKlFb+RNKOJ@TOMkpNjZNjEh0$Y zW4y<+i|xN0bSpEY$GKCeBf^X z4T-io2Il8Dr3__TjV>R|*1zwcZ~GiBi^B%W>9@O^Yo=4%-#hOnrfxkx29XNG!C=b0 zb~fBJ$?O3404NiKLtBLc^pP)?W0>b!olkHI5TobvCEta$U4>z&el4#tGz$)$N%Y zlrGnOc-{Gu8Ok+|=Lg{U(wE-ciqADmHuVzom8k}Fgodg+&D3w78t|Iwr@{^aK2+I# zLmUE6w<{h6M^3n;$Q=lX(jMRcq%Vwbz`*n{RSRGTajSU--P+#=w0(kHNPp1=@0Zu{0#tPpu8O8+xkQQKF z&-A0&skC77W8Yfh>y*131OD210IpZm#Z(%w7mLHd5CNE0bs&9QP|W47W4BRnVfbn9 z;1?%B9u8|CS#0g6(qnVek&w4g%#9aUUm^Y7SXhbUgeSw_qFK_{`*y}s%`ZgZ&SnF9 zzY2Bd?m(OmIz1IKNA%(-iX^quLgmLK4}G5*(;np7(yweO=odRIp@bBQK^+-|;=zs^ zi{~sYG~P5H#e%sE66N*hqrTlNRTkSVl;DdTCpNx^kbvO~ck|u`6ui<3Dv<~1c+lhlj z4Lu8M&m;5mohHMsP*m5ntfHaT{0-giy~~uhG36=N$lDKpCqYvZVFNk-5x~{+IOCPq z#A=mcYx+9brppzKRV31&MFW`#Lg~C7HFS=;A0LjzR3y7&bzz05u1-zQAd0E2e0;~3 z1B^a|^J1*t6+XK@QN6IRS4+wFfNQ+uZ0@s>_Sxd?hT(NspO|V7lPnCw z{qy@(>iobELZk=(34p9WkuaUGV#q%4;1oZS^ouKuYXr|Bl~;7N9N?z38v^LlIhty$ zOIlVdwY+|sJ>)r=!bNEepFD3bU*;5_{PtKQ!F@7h(V~9)!^9n?(8H$slw+EZXJi&P zrW@b|6bkFeBPBSby!CNi2UxmQ-V}J1w%X~@c8Vp6}Dub3< zB$C?ztI@FZ9j<75SxxWmZ#BBH*;GZ;i#qNA5~hW~-u1X_0gKcV-xg7$+dxZyzisq` z8h|^hUneGdSjd&aU=%1Q_M!5N<~?;gw_~ zAUwD;W839*P7%Z7LbZPOQd9TxV~6wFZkd_T&2I*xmmFFzS&28SYn-%G^4z1|%$gT6 zR}XmH0d#2}_SqZd`rXLWjk>W<5c57CzG%orN8ALqzWlD^orpDw+shA4lh{)s;w#4u z|L)GA|GDXrHhH57!B~8Eik(Rrc-yI$)+%=&em|-+Mq6cU{CF~P<(&Q|u6+tk1WigcAfWHg)a!am?vTYlD3K2OHelLF7|4}(qm_X+4z`^QusI=!nwl^V28z{!BSO%UPH=j$986XJux@j9yiTkwd{YYHJ5H?ZhuM7H_5Go_&_uqv|LdlQ96m^ z$EVnq$sOn6M!{9JqC#66A`r(k1MBT89#VL}iD~L#xz$(PC#qn!+xY{1G!9*OH5_6^BLcFz86d8Ce>e@J{ zdL6dL*FL(gY&)wC=;FbhLuu%HQQ`$8pWVZ_xYVzV2G#}HOn|=N?#Qgj;l)^(5^}I5 zYi~j4mQqs0&3%qMss5+Lt(Oogg7d0UoY-(afDpZ$uaUD;lfJ4@8Q6ZDH^A z3N>-U$RV85)Og~q;Ov4u8YYW+x(8F*FB?g_-Wc;=jtgs_JR+z-mo!}BEt>3cF$gvo z20Ab@x%!-1h-XA~2o0n>c*Y9jqG!b^+@Rf)5c8tD=_h%r7z9aA`C>K_LT9gy4U5d*1BFzvDZytSEY zrs0Cf^VoxBm8U z=pe^hb2daKY@NaQjVwM>M6s&Z#`Tdd-!89t6ufh9`;z3R(=DzPJ)&`POtyb*s`PyP z3%_{DE+*i)G%0c`fvz0sS{HI{GqG<@m6^_Sz2v=W%ab>R8;tbi(6^Fmg=Ul`@)LaV z(bTo3My@RR6Wf$J0_Ed1_60#LFE7opk&njl(Ci&x3j~OqcKa#^kV!Bx3f=d0jau#v zyLKd6%6J+91|CmuBXhPhTxpAbD3k~co_Gx|r#@f)sk_|fC&-CZkQcNU6zuu9$y58W zp09#zkK8?E5nzlh{;(BU;?iT%?FH}8UL)5b(bUatBl}(|m`pU3q~eOG=a(8xB=|7w z<(J?G)S(p*_8a?Pt^(H}YU3TL3Ar0+ED^7H2aoR^efi9wI#at%3P~9UNyAUL_hdt1 zbP0U=6UBb_)ocXXwILlSm?RD@nr~4SN7o`xTabzO!eSx!{t`dKnjro*Z0Z5`^ycqX zRih6>Vqpfv8!OUaID^{jPL6zGURsOOHdrL%xa$NjfRPK8SRU*ScxGeUpLL)T&)ggE zXH}`wF_k~1+6#XqWsX41#d5`L4PLXIIW6whfJRKgFI0~cg+f+@T#a2=ZXk|=CyH9| zz$=TVUYayI5##RR{p9WhoORWYem7ESCz~UlYk`LB)of#msecX(FDgCL@mn{IzJF|% zf0Nv)n~|vadrG%MwBJ#p|Kz2Gcb!D5kk$uRHzMp+$PBeO^a)ZWaq`C-7!LEvfZd?+ zYVqhbMYShslJITf!`Psb8;m*?$<{#eZcA)q1Xexb@vYzxkpY9Guum+^)g3n7V3T!;0IkJ9uRo$trw_Q@ZK7&nl#9CfCIdcTi;9U z3w7nDreu&i<^k&%Zr>wC2TAs08H-qySU71*ky%Q_1aZ=^y~!}aye}K?cBjxRfz_(9 zYa`nHDK_eG6Z!UX=}3WKjhmcOzh^a2sc(nEiEDiOMJ=ve>AbxE=Tp{NF6|9}yTA0e zfM&&R^@Ecg^r`A<53dES6o3sIj9CN# zrYJ3BoZE%&!t;@$w$*L{aQd($|%ow6^TI85aIoa4Gf`gu68OY)V~=^5#u$2Fc+t-n*#_ zVQw!JJsBY03EHf{V>(H7G*-m!twg&^xs!(fXQHbav|$88Q3;paW| zL$5K8d@hhTU>=QlnE{*H7RYaOXn*9QgGyRLKtTiic5 z*b;4<#8%&_>IkvP?OwukX^7<-Qv4e6`(T*&gq1VeN@Te=VpgNUB6U8=LtX}DOzOtZ zVP?TVG;@L!9Bz>Z@0DS=^K}<4ZxspsWsCQ!BkWJC8)aUcXKP%1P$QAw+(xP=M1hAt zK-YYD3!&kDU=o2b+Pg)MuZJhtivL!yQgQ$Ou~K0_n2}*U4FOFS+58pF{?O zSL)6SQ2Zky7)~cb;hI^Rz~I`x!{r)6TF6w?>{me4dU8g zn%4Bg>oSd4|6+Tt&qQ5M^#0r4Qz8vJZ+oU~lSfOK5M2TmHKyONy_ZKB3%_LoMr?l5|2UM{_G0oU^95r8h@pp4X0w(vx=oW?_ zqre~{`&N$A6LupE2gTibPxJ8l71wH!6!O_xG8ZQMRHjMG)Tls>7m=iJN_gY>`#>TmjZ^!kNzUK z)z%_)36c3ytX_s0>aP*$>+7plYxsgYe1qqFf7U!)Yj@BYSoLacZW5rKhu3*KB6Ao- zAP(GpwU)^^V5g_~1#oF-uw29%+h|~-8AYpaQKc}uc@y-dmP3!4^yA$alaCaMNN(z9 zeJ9+OFE&kCXb`UM<=8RXFSV=SR7 zH|`~eMpCoVtMT2hO%Sfc$KF9JehiTK!}aq%PY;ze@R}wOl=;wWu0QJ)I+u4mxeQ`z z62{u2ggXFnd?I+wjvJNu*SNMZ)1y+MK?^J4wPtZ?rT;$igbd$FOs%UYrlH4m-&IRe zO)b7AUA$}K)gw{W!FsAte)Un3-90OotFJ-XZ}Q600+RvHf8Rba>T|G_iE-%W2+d@II%vM@QhYx?h1F~Wita-9g=(>ShtxR z;h%5GcMao#E*VG|gaE1C-mf9vNuPqv0&S=BKb!@2W6dvhH54eYEnRqeNs-YmORTaT zMl$N-eNs@@)t{Z`sI`e*q0R)E6Soqc>eUU}AyT=?7bF_~l8pN!CedSdxYgd+4M;qA zi#+0jaU^cRn3iu?O5bnvy60PsBTnkgAd}ke@nlm*bi!k20mmpt=?nYZD0{Nz8hw9LdqwKP|B9n!KeTk-0w`=UbvS6vY39o`-0!?@t6{oY^?2Reuuz?p zlgo*@$^{#35Qy;1*`UCLoEXFk`I&IkX#G|4dg7P+#WqaUYSQXmV8y29K5^+ul;(ht&6{jmr&$*}vkif_JdZweSElc$?L1eU2Jm?vHZU^Lh zEY#?zz?toDa5HsZ{~>Gfv+pBvmvHXtyR!YL24OpEZAG6z5>;3Hc6^#MYT{cy@N%Fm z1t&?{s^(uKHym7mF&if~D=xW;yg`ON+l|dL^LIl-XKlz=YbA(dgj-|oM!@GJ5}$VW zdOAF`EBv} zMlFW|E1L&!*fLp|gsM0kIC}Du6}eJTi}hLfdLDWD8JjbBKLueDV z&@C9$ zNiDj}b6qckA^L#RQo)%7Sc=%$3U3b#sVf z1;^0O125stbtqFn90{~;zB%(qAAnx-3~uG-ZSLKRESYb)IpQ8whL?VruoyU)iC!Ad z1TQM7P3-(y)WIT|^gNBAyhg@pH;xwE`l)%~R1IdXcWQg7AJFNM{;x zH8Sgy2sY$;_C|L6NbmHG%1ApSYX$uZquM3LZa55KnRSbw4Ndf3+9GciTD&RB{G9g_ zko$AuFpA-|jv=k?j6;jksi05)oB<%W40ayUub0h%Ts3a$pN(UA69ul0ZiBsfSApq- z(lYE)kks#>)3;6-^9cNU(ay$))Cd=P7aD#Ix9lMu<8}M=8|uD0r25IT5suTF^eY;3 zShV(Fht(9t@80-W?uUHtzj&`)L}ZhCo7?Zq_Z-$e$L>-k^G&fNXZ?jsq_jtu+U4QE z5EcJzyYJ4aMVwwJmmk(MJWdBG>$lgAU}tz7WU!?ZC(r6ev_c!mh?lBCqt&phn&EcT zNAB}KhL_^2EAu=#ul{ntJ|_#Hw_}7&-!=$%^?foY`UCtLUuI#tS+beCMt(K0U^;cB z&Lu(i?E~&LRKn6z?%dkgW)0XZ;4UMyn&VmWw|0|q(Qq2s6~hFBmW5-OkKnAOdSx}> z0Gr%i^=yMl!ZPmH92y?^w+y7Y6lL#FF8QsVDHx)$;N^~@lqte>OM46YW`q~I^b1Yr z1`C`9K7Hb%pGF~Fpv@G{T?fBqyB{!(%nfLeOP6#;;aJSG#i`)e4;}V z$0$hyktC);@gBQgP9HLJKK+pvjc_fLiMO04!aFAFl3`))yPLk|f(vKNSI~`0@I^M% zE^KufX_CBxt{4g1ILEwF)b_sf9E%=$pgAjRVC3&Cq?y>*tV^8IyIiGEB(bcEOGdrS zFeV*|dOarJ`_-lgIIo<}@1O`O9vdv$l~q9xZ$pM)ZTm!;?r#=MZ*sgAcCq-k6cWGs^P3>)*5i*OBbmIC!;+h(<{&3Fz z{D$G6azYqk8?NSo;}EHKK2|zSJre_JFa(89Gd^8;i~4j;nk%_70nzr(RM2dzC8JTl zfh`eo5KIu*Sg{w-?KzrsU~*B&c9NtpYpQ|up0ljo2K2Vq2D@@xCQI2iS%rY)4rjb|+)Cd%)5RVFz7di>3)^mB8oSH#ayY%-(Q=NCc7S(NqldO`YTb(yg zukt1x9?pjeY`UcVQppiI%m50CJdQgVXpD5@aexAl#oTo3jO^-z0o>F!~); zwWS~IzdrMxQ6zR$mGwsw0v?}q0eA{5)ERv=Q6DLCEAZBO#B^VR0gnbcIsWQsBc;U0 zK(XvwpUVeO>^L#)^L2*aOT2iO2bgMWPjg&mLi~cZq~N<~nq`kR6}6qQZ>SaosiKBO zfELTMDpb@ac!eSYfaH{wsx=a2j|u3{)mL-F#n#+E=mmwT&>}QJu!E@DUZQZl^i*v# zZ@d}gL~kZP)0`T$-_!^t@4SJToV<#x1IYp^>sv*kXKk1u3KmWv4ZJwt? zrx7N`nY9%4d{WRK$`0Fp!oeIR$q_5gAnbgM_rVh;m=EozG<}~C7-j~)-LrMiV!Zt8 z0ghV@^{4<-_T9uU@u5zwp0)%^`LdGW1b^C=caYu8_&7qm_hkz-p@di@_MAv6HJ6tD z>QFT%NOS!m!4_;|8^l7@=JHHu@b>E~2ube;C(-!E&2YXZ zlj=VpD`#ACJmAkI>aZh>hB1LajDge!y&#L|4Bu>||4oq>%~zrT?R-o)^?4T9SyDbz z1~(;6k^8!o+!9GJU*_lfR|O=(uF#Y-`{|=B@bEHKQL`MQh`MaEWj{h)s2z@;f0Gdv zd|VLv7BGNc4RcX$#6x%wX%6~kJ&G{ex2lnoZaHf~Bl`&kEkK4e_Gx!V8J~RxCp12Z zn?!9aFnl0MF!NE)*Aj(xmf^D_LRCGL-NmQSnMKBT0|N_5B^9PIx#_*nE0YFY&av_j zTJJ$qyP7aCC8I0@Vz##QKmdVp2!6(A(cwfXW-#SiZU$l97*(}Bx`$Mbl_AQcbBR1? z)&VxWnG%B>=1L+P05+H6Rh)6Rn||Kq2aZejA{&QY`Jh|u2Qss1+}N}*v;QWoeW_ot z3FxBVl9IA!YO!=Icy|aX46|zy-LM%YuyMPL#ax!e@X|3yTm0CAZ{8d(=FO(peJTn> z!#*yMOpc@9j}OFZn-3*H$BX4^C#&LCm!#BF6^#cUz`iV)(8u(ojcl@tzV4OUa!27x zmS|}XQ9tvQmO+rL>A-$W{bDu?pgL$_!`R=<=T~_f_R@i~(MW=@M83`u`z)c$t2WM7 z*Pm<7oKn=1@cFAEL#K_o$QJG%U6i;%%P3BD!;pd8&aJ6LUaLPB4H^vH0zWqzxQ$;; zgT}oT=Aw~QNuq2Uyrhc&{Dp%I1<#JPm4XCAexhnalrR)Fe+Ijg*NS~OWqV*4>W>&Z zTtP_D-P=<`+^CGm_LsG@$TX9jZ;^9cmLP75^~fMZl!?-m7wdEMhEN2IYm| zygr_twGFcXbJGm8g)i2=A@Io&=|JTxAVAzFq#!A-?teXb|H`F*a>GfYW=Z+uka{F_PcYX(7zit}H1odAeYN?C(w=qk6ywpapZ`*i>GNWlgq2rZ?7ivVseu z=u;bjDeA~!u3pH|7||n5tikJtb-7B5lD5Oqb3>liI#ht}+P8hNm0RzJG4%brudnOb z)Q}NbUN-Ftsj!XpkX>u+@sf#I3^fB~@Zqu_8r9A4_qPsn`!x|>D|>is5Yra`zsj9{%J8~@#m(Ws;?6-nwpBk>!t=ae{O zR{#tC+MiffZ=%nB1Om3o1>bj|;0Z#4_2YvrELp>DNA5^Ynmu(-*i^H6eIe-?jXy=( zSTff7RR@M7@W-b@H%BIqBh zxT+O;3H`FU0f(0Kjqc7ZB?eL3Bn-o;7Mcwo+vVXU>Q(zJ5@j(euWsK%W*ThHZ^M{x zsKK<=>U#QKnQ1$0*TbpSz(k>w8*N^>5AEY7bF z+LC5i?3oGykxM<&M?Z5(_EQoPx9EY#1q(+ax%dOyD5sO1=)j_LfXaCkJcI_EXY z7@@4xSO3#0U=KppH>nV(x52Wng-&aP_bN@w^u8R$^}~fFwp^e(Hibp z*u-Y7tbj@Z-P?*+A5Qm&Ep~7pw9|BBG4MRUt28zEZKP~jN|EB71oLD^(8#{h<_kma zfn1|gndQC#F+?5{YeR1((a4IdNL9?Ue#U<0+Vm>fMOo6Wk#ZtscvuZe6Lpkl4qn>V zGhZH@w8Q6+G#Xxmo=h4055&)uh#x7v_yIqK9@#9IA?C+it2Ak$3 z38I3H?pb(c@_snA`!PnUv8<*6t4@=^Z2eW=((unLn0>NrQYcyXEcuTM_y%1(R0 zp8ilzig_%V^w;H|s_tGd)xX3s!v^jcr>wl%aYB5d19Ds<8!SKk0O*qzky_-T676mV zILZL}m^_mYdq*y*=YGZJiFcL0^Hq?pIA(8o0Am>O)z$}0uKJ85{8>LdWte99^zkQG zZ7WWx;zVxy$4W%_2pB03h(d&>>Hd83PANuYre$012s&SE*DR_R;^qIUtu-R89>ukX za{LmppH1nm^okq?AM-76FbcjnSc0pB9sf0quqOP`p}PH&H}+th{~opmIAEFKT-ulNERc%|-nEG>RgcdOcvwby# zjjb*JO7ynC#V=mze^Z6&m_d_ds^ddAj^?P45Sr{=`P+@HV7Y&&>lWW2(v0O&YeyZ-rUO*a~1MW-8@md2s34Y>M8`lbhUc{Am zOS6dvW_uFOd}=ANe7+0~4wEDUEJ+nqG9&hce&4*lXceOf%JXocM7FEgMLL%NdIz2v z3{Q6musH@(>6hiz8IRtP(GpE2dRNtHkTEmA;JNHD_+)JVS>A1;{`g;)SEXc0v*pj_ zp+6vCLleA-be}$J$of{*DV!j_ld?;7Dc2k^m`E;WWCn7IWj^zMU*|O^IncUVjR==^ z;`vuI%dZzsMoImZzrTxJ{GrvsVFPL7A}F}hiQ^;e^0u=pC(ny|6Lj2$&k;2}^>A|v zOCIM-u)~Q_av*ZV##ULIXrEeL@}W#9?@761X6vUVGj|bmqut^|0gVp$mvmFVn9jO^ zPKzW8oS{)ajEL5684I1|z81OPsNr6}obkhT&HNZY*&0oh`9bdTi@bpj&1cuS5?{eE z(LVaI!I|nd_5Kf9MF?`QjZn5sYyFqCPKqrz&sMz@CF;kDd3KOe@p~WlDF$olrq;zg z1zBFH>dcgg_Wb$q?ANhr@QF$Yq`~%>E8?fjs_~GOK!&^Xe)YIPTqiiHA9s83RlW1* zuN}-{P@m7Td)x~^+}g9Hmd4uKZiz$qUS2>LSt z%=e%c-QStV3zel5&#kBx#&#Y0R_F}3q8p2y+>4+ zZ{PF9=lxLs#NR6_4g02A9b-`rTBH>o*cJbKBG03--l|0n zyB;0;q<5MZF0uR6w^CB{L+dy1ASg06}OChbgoWe3MDPLAMp8@NtWbJ zt-HPI0j-0{K!4mm1K}cTj<_u^AjpY?-4dFDqL}XH@)c~S zRV0uWSA=MMQwY|@7}`QbrA&37l}x>2pV*y9B54Tx(T)7D65O;PI7=evqbT;iTB0)A}uU}3p4T+qx7${h>0Ma$1xZ`V{Ku1|q zWiLEC(Rnh!M%h@1I%hFch2&=j4xDo2E(cfltlwi5($Lc-Bs;g#2(_A4f_ZhT)bQM& zgOTn~nU`vP#A{|-=_PRzXxw8z*AZ z@fnulKMm<iouyjE5b61z@}pMr*K-U5JrRyOZ<+EwK|ES zdZgX=T8WJ_JnmuOBWB6Fk#LQQ(gcb%Eld0`bZ7}0JV5x@3i<(#1eS|3;N&O*a+cG; zy$$54iYXgPh`6EV!15{f>^@$r`EhK-74Nx0u@#E7_W#&=%b>Oz?GHCWgG+HJP~4?0 zZUKrrv;~S=p}4dVJd|L?3Pp=s(W1pY6ev=lxVw9B=Z3!TIrseU+{p(%kV$4|va{EE ze$QIlkkN37B9Q`Fq*5}RRdwqM>c0reuQMhyAYuqUBSeGCd7n8enDGBnYjmp@yMT+I zo&iG_qwW;i_O9fe%-{pP(egWhxI`5}3@|$HMg54~>`CkQ$@fX+j027NFFUR@7KTzc zW+=fF1om^i80Qyb{Pc>}gV)6;T2Q*@L{L7IkVN$0`{wNa?}fJeX%4*fKE080*w{-M zj8NVP%r+_%3hO2=(W;l-5HGq~2vfRsQF#;k0-AJTL>&Eh0(e@_{z=X z`-hSHH%qvn9NDW>De)QKwZx!(N=gs1GJdInre-~$Kzcv@#X1Q#3|(02@cX4`biEV) zwQ-C0W(a(SU~^&JSOv;={IvyM{QY}G*|;B_ zUglm!MgB+2mD1@NmE3VTk#(e4%k$3LGkLo|LJt-GLqPMrM1G92tjD=Tb4E&c-LK}* ztZG}t)dh+vuDy*aEvVMi^tRL()fkns7)Su44r$>A3#Uze0f8RztmRF}k-c3S3lhRs zT(QDOe-ghdF52z8W#`%Ol*WlR%T`UoDPxu0tZfxf9(RUvqxr^#lA+9ta?2#vo_rkjn!Z5*s zj`BDWhugeilP3CVI}dNaqWEh__Y4jQ6(7r5%FAlR%~EL{)W%E;hAcn3uQ#s(ny~@7 zQgN}9xzt;&LO-r{ucj}~u#23S7 z#>##B0K&JD0B53O`jE?&??AZnGh&S`SKz92`(lc#T|cKCcv8Hu{dV{^9fWkp=y-_| z6D^;VaI?(a(<~AD*OyUHACFC{<>`{S<0oDVfxaf^V8D{4D0n#6$Aq?6!o_+@T-tqQ z=e#vaT-|6txeUbT^XLm9Q-f@t`;dRm6Pdr~NdodbsY|YBo-^#6^*W7X9)8b2FTTyN z1X59Et1B9ud%3?jmhK}P;}w6%^90IV*9>aaufYLx_~<;6$>uUf^=ZR2;%Mq~yVovC z$+%b}UV@E_iK{q2kKAvQC#$XiN0URcJMG6?JnuhdhB*8Mfel!RKbz8OT7BIy2qo_} z0!IzrabDwxGnZ>g?2g*k~h>TYDD@^R4a&a-3>#LN|wQHclm-_kIeY0Co zPtM7vWeF{*GW`#fl4api^1p7h>I`Z=&agFq<$p)(Y@qq>n6$;u@m(zoSY&dr0zPPR zr|+A(F>uoj#X94!YrWt9w@D~hdVm-Dn`0i%2}c|r;^GP-zFf`~4A@#TT2>rUd{BB$ zZ!wQu4a|2ow0GuvpYW(qtf=)F*Rk?l6Anof?hC-OnF+}OH99V^DMxc~n=t$a{{Yf9 z!lL8XKuRiU!oxS9^E8EGn(%KQ;SB9J zOLLEx7G=>7JLHVm(&fnBO`$NH9fXz;C19bL9xaWG?GyIc1k}#T3`*0h(mg-nO6JZ? zdZ`#p@TCT@WbJ5J6pUARnIubK!V|v2WJxgb)qfLp8;tm6{535wC=SAd2U_`%4-Umj zS92A~XMF3^#5^xU=Ima?v)U(@uBiIXK-$@c;X7pmWS|(!S)V2@GW|0QBZYbTx@jO4p z-^$M&C?=&+jdCvQ>1vm$npib9PnRax7NF;BsjHHJI=5y!;uqmGq_GmER#z@Y;2>;&nJxrHap*2fa8A=HyLEbQ$cOyq_laS(1 z1m(#maydF9tBS`sD1UM=;ajuZesm9guIj`CDgyA!L&?`w$#($8LFW%|f%azM$@oZWLF z(g*+}RQ#gG@-?^{1NOmUQR-suQESHJ4(%lOUHmRl=k?hzqT`x+)hXkHLWKbaugEG9 zOBw&X0`BwN(n@Jhcz7NlQk#*96U*$}lGZGeN^!LPi1AA`N}J7P3J~r&W33{OJry+S zoxM&O`}zRM>`#0wjpz^D^=tyUuvj2POJoG|vS;ycxt4(xXe3`9rxq%|9r`9|vSw=j z=wwtC+k|ovq;5Fyqbv|HeirZO2C>rR5C^<|dO4x;;g4CI@l=KYO76C-o+6f%fdo7f zMxJoWkeH%Lr^WqF>Fy(!ae>UXXvpHkm;+dlhm&_)iU(hw&62loQ!`5PJUI zMZiOO&;DCvlP2QZt9XI$^W(<(-8q;F9gA}$D;a0LEps8 zHgn!?NB>2jJi}5O8Y~k`!uxQU{^w!v5t%>F6U(0eYZ7 z|2zV?rBP`?PFOjM*Z-H#EDDrQA>*jSx4QLGS%0rg4^`YhkG6!&2Y{5z(mT__FIALF z!B8EWI4}Z`Lputwvcvq<`~M(D$ZaRRRPr7Vpme8mH5jozML zWY0wFGhQdIC=|)5H5SXL5D87OFB7=Vr+Z!#ejg_-;liZI(x%7&L64Ic67pYJ0-XJp zKLnNfyYz?S1AMkL`sRG?m|2 zw5Rj^vx`77&)C+wvXTi$5`V@Oerz@o@tWf6-M~-&3dW*C5|FKIGGL3_o#8UuxoTeH zxMERD?YHJ}8n?~bBf~I?me&o*f^4NS$!jb$xAsEVk1Vep3R`!?PEPJxVwV#{!3NT;$RDDR zfcC9g{6BDf$SFixy$+I9TsE^R5;>i28?gt(1pIzP)dm;&u-_@=hysV4vqfI@{Gd8V z#Myd`M&lR``Wek#9B_wv19YmLX4LE4og>bk0JuOfjXD+#OHY1+sr-DDf1!`^uH28a zi|2eIEA!a8cYj1ZE;=v0@WyMK%;qetT&W2}Pi8!~J!$XLg08|7ge9MMbKl#ib(s6V zQr^-Y7v_4bWljlIjOSL~-@jXH*(YT;P-8CbMMh#hLb&4`eiV-%@fb7F&PBdqp&GJT z%fJIYd;KOir($GmZHII>-Nm3{h`(mUrw(GT5Vd!Z;76|&Y>*&OFCGz;fMN!ines^7 z^!zs8(m$ryS|3$CMx8>T$e71<;n;nqgbn-C4jtZioMN?GkvI7=z=@=+SVcZG z-u5S%`Ve)3aNH1m+87Ot(DL8ZoYIdaYwu_5=wmS6c$cx*a^B3;pU2gCmW|gZ->arK zrf_7uNPF{$A2*}y+1(kq?%9tPhqPxa0nT^$Q>EtfqO}`XzH^~ft|`E!f<0ACam~Ez zbJvU}y+`LykHpgT#B-p#$9J!b(rf4mX;0^TgmzV$N&DZEYs7ngu#PT%PbX=h_6VD& z`=&-wd0bQoff;UC$Fx_v`~jWBm&25bpaf{9+@F4&NPPasZOn1Jm2*zoWYA6QaWdnp zSwT_MVy}-(_e)B_JD--IdP=J=(os2nrhTxkxIUyrR7OPy|V7(i0Q$7mycMr zUkwK6z|B^w_Pp>GdG$Apt-Nu4iYzU!ex!u_yhdzl^vyO*s|7!%c9$%Qp3xO&gUaEe zG%Xs65u?Fj_E}{m90nP$m5vHpP~!+%A(?>s+@f);)DAGF=)_$(nia!E?3r`#;KHI9Bp3t%k zawuDOw40nH7$#CAo^dTVVWwv6xKigRRLA2*d3RgZu3Xu~<$3re4Ai1m?F@eso;37R z*_60{q!93l;@Ud&c=>o@XO^1yPk^@k^N{P<%K5c>gZu#uju2ukk<)JsLZ@eIN7rv8 zZdMm?$wGcoDZIxtGvqs3@F`bj42-z7T{_jc@_c{VVTO4+zB4coCg+$m_~N9*UUbl* zg?x8b_Aw1bUfFCF!<}ly&PdcR|90=w@`JUVXXM?Wt5q+){e>8j%YmHY(Ilz$Pbhin z(psoLk5V(vZNCdDkSgGs?X&K?AT< znS}1s^db{KgSWQyD*@$r*XgV*81OB7DRuZ{;Hs7I{poZr!Nm(OMKm`r=KlgUKJ&J> zvvN4g1kbO6HgxrC(QE+%A3!T zmGgUrI|)Cfk8%9<)_dpmb7pV>!DX!i;0v2DY!d8AC3(-GN4@??8)ViYLTDPW8+`qv znZmfqG7*apx?Yi{DeNwsTZ=+HEl7|1OZ2Wt2EAQlq5OF%rkH>BU_pyr92iXHP!^jw z0^A_bbUK9{@Q&82`16whjR0EE<${CN;(6WvVqFVjR18$KmDm+>tOEW9q92%TD8Vo8 z@aIxA8B1D`Zw?I&#ib_*bo2&_4CS$4rM>;&i7Tu}y`(|rS1C*kXefqk;XzT=H}k1J z`E!jQ7>=C5t#fZD?yBLw;?^{sJ%>`Ff+leV|`3; z=5yKxy$ zBwE#j*5e$Z9Uv>er{}{lUrOmppl4ZhUAV4otoUd-rush}6NCu>y4Mj~2feWAj@z&& z{#|sR(9wFDIpnciONB83%Oljq)c9h0(_cioeARz`x(!Wl_Vf4BdR7`@0Vu&VN!n=W zF)X)c*+2az$(kJ=DZ z|2+6@VzVmD+xn1JVwO=iuCN01;gj3QK6;&t>Q8hsQ=8MojOX#pFcmnO zhtCV_EHZLG@-wc$XT9!wUfCwKA&l;NM4Ruk*LS2%s58AFZsze+K86p>Yb9UTF+nu1 zj;`gTT3nYIqo+#9L1gD+>~@#aCdprh;_f{KD@3A&!kS|S;Pd5X_{?WTBq4Lu<9cmu z2zgI?=aTFdMBc*Ad){bHf(?JmIDlLP^y6)G+52{M6TP+5W%eYln`vLG40^(@9rqK` zz}e@BIt29Yruq$XiMrWMG}M3%SopIk7kcE{)791&P5#@^^HBZXfWDuFp!#^9eT?rp zl%30fgV0a0Zh7OT@aJz*0&G(bBEsO2NIxR+qi6ROGR@nNC3!3p0^fRN6P>A5aJg+5xu76?O4TNQ3oYH>In>as- zeEN;wpv_(BigL_jI@tEw%1(KkI;rOVDAWWp0E|3;QKO- zr7n5`hb}IHY!Rwml^MIPFQZEPt(wtM;zL9_o^h%wEG4_F?{#8JhLM?3{CHtct8sU# zeM)9N>yc=^?2mq^KSL+MJAW#__*>W<4M=8y0t2qEGdn8XL;Nh>$Ho*OLB;m1?_$dF zsR*7P(^JI7SOx$39pGkq!JW3TYq7cagFT5eK4e7%o~>7)FFrz7r#bE9Cq?`R@8c5Kb&$lJ$*fsS5o-I4+YG1s3+= z0lXCxiZUE%!9ww3NK$E~r!6j;?hg9LkU4myg%fYeIAH1hHw^~*8`AoKirq#bnHR^CxQM(yW&O5J{E)NPnr+z}#t9Nv?lI(sFo5Xz z+{PjXe4^9z7}EQIN;O>$gZO=3Iw6GD#JrV4uAA~u%xFJRPbYtf#O>!xF;pFxg+s$U4q4Fv)MJd!MoV?@+`C3@S$9PTr}U$fW3O7miaB#f=NklNO4r+!X{e&ufB$qAw68xZ?-e( zYAcc^ zlf!duPkA7Wde%jXF4rQW_5x;y&egYqp?MLc`8t&4i1rC8Ovw)F9B1s(mFw*=9=*u= zl5V~4%fv7EHo97*;F*em3Av(R3eG-tQ4Id(yI(+Z+#y^MfZ4bXjb9H~ExJK{{1uv2 zLy3oU2(s^kKN!ARjAxba@Cdt>`?0PDsvb)$Hzg>is;ZOIkeB976a5yFQbbueQe`ix*Li_xI?WL_Z)^rm z+EAPG!q@syLlWuABGO&N#1s2$M>##_;zvb!A{lN{LjY?C< z78WpZSg&)72kxZc4{U2X8c+DxIe`XJVZwTcL+E!(#~;lX%y@j;cQmDtE_YwA*JWVO z*ce55jzvf|orvX|#7k@b{e>$xW?4lhvEJ0{!UiHuDGClzEe1BWsKrX1B6&cnyT)JMl7iK4+G)53O4vWi#oASzvnyuiMo9k zaCo>H#OB7zh7439&}l{2>1XAkjJzVBqR_~z+Jb^)+B#?nW~aa6ZPzp3^EdEP{!yt9 za>khWRRLk(&mIkDHhvaC3y;;5xBr`$M#DLOz-qVumV z`XFC+a)k+Fu|fI6V#f?)snBn3MHGIVmeL5jY~HTOP&wYLflN-cZM4DohIqWEiC1;J zx2?eaPO$`bHQY2X<;8CNo6|S&?oLJ2HvaArA_kJ7Bs~%`vwQTF8`z%20x6E&Af8EkQ!eBo>bZZhl)emJTkU-ic zKEkd^MwG+JSK&qkE|xS;!aFFw@DXA#5j!L^P&$NGvWQ5^?7j7z zR>|mNaYXoh>4;q552r5eSjWqZXL=7|O5_4%Iw}TRPK_JQIQMHFal^Kknz%L?{uWE1 z;!+~i@~aT>%!@R4RlPCqY3>RxzzS^QU3jg1qwgEBaVNhJMvvGMTnu~qCVCc}S^*Gl ziT_f|BNke3>)o}E3P6RmBbSqQOf*e=kFo6)3X-(%qW=h>n2fkxdoN9ADD3Srb+F|Z zs{qM!=H@q5{e;NdP`gNLZ8tFXV8}~nvb5^@vZQ! zrX94rhS%5|H~)nvZ12ql6BCF&`v9ZpgqeY!j|=*&i3t?0=1w)o+Jf_L?N?w#CJq~& zV6;+rZD4Nuij@hERxsOEM)rXrffp(T1C);eHgQCM%4e72pdR zJczMAov@+2aqUXAPV-cBKp5E}t?aK{% z3McOipJ-D27CLaViXONDd(JEGYcqHU5T_dV{gVyHPR+m+pEsp_4p=%PQR$XXk>(p7 zb_2i=FnZ+Oro}BIalGD4tJ|Gz1mIea414HPcj>GiyqI^L;oW{@0pnwy;*6lC`k>k{ zgOESv-7dZ9O5ib7-k>SG!cSuCkR@f`J5V3Xrm$X3 zcO1MXDkJ56ciNA2|ICP=9``({rGh0>AlxtegjRqR5>>7leRN_LNR!hTqM6HK^}!FK ziWrXZiadEMO_;KOTD7pXj5|pmJd&HitZvtJ{6&)aYoE9YP|k9A6S=Tgm)AkDui)Lm z@i8t#H>6?yG$CCo-q>LJb@nZ=IRY;x@i6t%*RmI#5FzG9cLx9F>3g9s-Ba7q-Q-UYsf%dnxf5udbq zv~4~8ri2PlctWqkBMyQ+Tl=~vikPhAs{? zdHfvgLI9uMTAkl(GOoE#UJ`;k{r)+$A0Tu8M3o?aj*PIjHP|=&A+<;@K?(-XJWp<` zz5kCoYFUoVG6ojg&lCR>)czAseC|OOOu}Cj7EBud8%O-rOE4Z14qRFv|E>STA^-eM zE_pceRhnE{ahYCHZGh*NIG&}F^e3M}g6Pj*zZaE!Sdo@g#}mUn$RylrDB*wdZSTJIB{jEW2>=vE&B3YSz%!ki-m z?{x_|X)WK5Hb7|bu}7@fXzV5?soENYMa-DL@O znMvzk*C=*Iu*a|c%2DfVFh!)236M-uT6`|@0m&H|Clc=^GrYXdxj>T<7`j&rd)3$% zw{t$Rg^a$3+#k-SZ(Qt`Z}IqIFZ?q`uI%#COg&X~93E`ODeH=tmsBEx6EQd5?Iof@ zd;4o@?s?f{ua*dlp8ikV5F4BE5I3ZglyFUqx8!eA^S)OW)cFlsLKnZhVn*bizI>&E z2FpOk3&p9tO6PKbDOO|M0@H8Y@oPo7m9t1ew7a>zkfSfM<@xKmEm`(Uaf4nX#t5QU z>Bg}YSrHYl5=J5e?&rPqimH?@jR4N&l{9O9h5ck@T&(mpDv5iu|6~ZSl*VfH zF(&-Pd}JSQBg6|_Frn?nv5w)$AU|94_u(%U%m&Onn5#Frmy)iDmy_Z>Q3!%kycXt$b-s>w%30%oTWroUKVVz#jzZgYgjnBVBs`LwZxd>3=Va) zb@~v1Y@l!?w$dFpokm$sn|sFsVM)WxEbOg3cY#jZ-F-1im!Fr8E)OGB&Kb3oGJTes0xnn{tu9?u_{W|HGaSZvn zr!_3B_ixKzo1B0l2Gsig62_>H%O2#vOEJsFPo6uo>8vLo7zcVCFkm?~&t8Q1aSq0u z+lXdng0R$4C`AG%b2J}g%I|R`Sx*SmU6R{i2ELr8AgV7?Q$q|WEeGMlitWK zzxSlyZ)gIu?%u~Ki*xpS2(|ANSiv&TAJ06KK78Id=T-d$K04-s(1di)%!79+lI)l# z*YrEYB=una0add@sMvwO#WS%d156$-vKSISbDzXG?8t;-I3EUi^3)17POJDiUHCZ1*1q00K?&}j}XlOdy46gpkNT~l%U17(>;W~W~KD&W5O!tB++fD~F zj99yMe{OP_GtnOX7FS?<% z)g3npX8l~wiS4Z#25j)sE$l2Tb}O#pRt9nsx8}RbYUOUzs}V8Xv8peZY$<#ZJ|BC@ zguyq+kj;w;A_Ym5Ch3+#rSUN)Wli8 zO~;>V451nwy!A`oj@lq}3mzVTUVaduW-5BU)GPJrH{}lGDSc|ufqMzE_Bf>aWshem zPFS;4`}CVxw6o|;bfY$W5=Cac)p*DF>Pr*kks<@V&&Q@4uMO*Wq2y&eHbNTEOIDrY zxqkmnh~K(gcF$i$HEgxhdHT29cJj}Z$V3hh>^rsA#M^6hshlhMN&lsk55%_L-&@~S zOuq7|QUAcVHg1J|5$J%(o;|H=!IGUqdT~H*qzSy@F4a=@QIHJ;`O!gZ2B77AXPM)i zlF{I(MDrX|!fyRBfdcg#99Z;a4?R$BZni^;$8F=bdbIg`l>>eLB+voYcJD2R`*WAU zP`{0J-h_<4Qqk$6fTp$>f{~R)4<%UPH;6M$pfI4Y{Y#F2f>*qTW6Utm-E&&LlzC-M z>ryUSWu)&Tebv)c%v8D^9EU%W7>~e7^)d@t!(gJXVma~w{Imz%Wl^Wcv#oKz1l|*I zD8&aly8aS6p2IX3Z~mib77!KaqFd)pP+K-c{PF5-z%r#j+xRu=%D0Rm-NoOMZXMcd zQDl2#It4&<(S4P9gW@jK^fhaL1D-Chj%K_f!GqL3g9xQLU;oL0?wv}Mxm!~ z3o0v~N3K78fWnz~`uuvE9*#;LTizbGX`Wr?bJdk5MphBe{ePZgHVhgUx(K+=Q3%cU zZITRdS|lr%jW1XtM~vqUPTW?l(0kvldjTu9xHLNfi+3#39l|Fum(>{*^T>q&Tatuc zL@1#lJST_Iy|ZQueY%0TpMPgtmQq{XR&5D*5o8Iiw=q8Tud1y50#b_^3VGe*JEn7P zRXT*>U;(1_AEOtDI5fA|rK68uZ+P38isC-!!-4|eI+2(R{_CcFPJSRmF0(mp=0$r= zb%#9Mp8kS zt5+Fwn@k4_7de^SZfN@QFIDU_w&4;Gnfi4#lOD;G&Ak^2Bj0TDRvz0q`vHwDe^2&5 zxO#AufwBsj5VZyW%d6qZiIjJHM;a4bHFN0BKz!Q!&SjRxYymLE5G;n@L;gFJ@Fu1P zo3R-aDdG6z)mF<<5bC$MqO`HP%@5` zv=`$(zGsLMbT(OX?6($5Xn(Ib(RUB^EBLJ~vTE&e(LjGcg5fB6pF03H|BH zJSnyxAgSs7p>1Aln!-kbN7$ zM|}^!>0Zk5YLsn>U)c3%tQkOo14wWqBs8}3m$m|7u7qbGOm?jC1!ABMWc(`xW>v8^ zZ*f(R8PxDGaWGc^JP9_g2ZY7PYL_ZDSwpUYk0F!DT7rK(>R!&wM~nV;7U{XhV@F>F zI1PAQ<0SDCmM17C=|TwcKpG8|{oi?Ja&|Fj* z4VFLOqAGj7tKp3Uqvbc+=N4Z&mC1oDe@!~4EMsa=#RPRswJf$|DF+1*2QDTvxuJt6 z3%DSj6Ig5XY$M2w$#GN%8Gc(WofriFY95s%PbrPRru6!Sg2>irbo0zdG0RiLTC=LR zv;<-ApoHEfB?V9n00M=sV0JiT)DcgB+<^t;gN>vzN~j=ITLjg?drLYY#5K+wyAWA@ zk=!YjQ3oS#^T!H#+@WU*p^8aN$TRW`xw9|hZ>v)H;6isxU~_$&jyh+p%}s&8wpWbd zhwqUGreMTGW46S#ED>=0E}gmQ17zfF*|9wr25e@MG^mS2JOHNr^qnN#SuYm*s z6(K4kKscbDUkLBd;jLJ7moVJfF}(AOwV7*U4U+AXsgmtY$%=2L9C56uRXw*qjKNe& z09-7Cnr0q%ejziYu!f!l;B#MwTfG5Oi_0|FZ%LaJu59ZlwJl>MwTZ)Xwo z0u02URwTIqI5MNuF+2>-Fp3+Bj$6sR(xSdvFBy#Vdcg-6uleIhvw?jvUEMo)tB#*Ni zU>i?nB1O$D%(`Fr!nL}+Y5UKJC4)Brvku}vAU=Wgr$0^b#zX)3TM|_srBN3OJllUn z&qaFz1M9W%)7aU(RgNT#KD>RJC^C=xM@hF86@gO4w`()!SF+PDAZt0q5?eARafz;<|o_{hr2OpM%5qU{1h zgti5Vo#h7_u6^`cn~D*|8ep0EMa8c%%=VjDa&eQ6v@W2dD#bEVv6E809#32Q4Bn6cp|vlbpF0{M%a8tgl?Q-o*`(o2 zgH;f^0H4R%Asxr{nQ> z6vj1kx5c`5PH!b^0AGUQxt4L1N8NMeTvQ==3gwUQ=a3D*Y2O%99bQ@tOEUW_ zD)sOO0X+zyjx>KJ`zGlg9iBj_ z4afVeiXlzke_$C6fR<}#l-D4tdPKYv2;Kii(9hI zs~{I6dgE8PPfnccAVDFtgnd*MyB0lEPo5KYaqptz)($QJ7$RN^UxS{<8>6)RzV1ym z-R0v^<>QO^)b6x-cTtR;V#)u?6?f~oGd&m9m;Lc3f7i8$!t6ydElICz z*`5CO*jl>mFG3V}p)|=5P|8G2l$4=1b`3`(&GV*;SFC#$bD&V2^q7nHIUe?niDU{!A@V z-yZWQh=D5XlSZznkg@JbdVe|N^pIF&XC-sg7 z-ZwYk`G(*ReFxmMR$$cO1Ox!)@$Tg1J4ARwE8~oj{$WESmIUe(G>0EBcc~bsaycq! z*?@V|{_+?zDOJ5qAWqAh(WC{>Dw{UwA=46?H{$Qy_$KIKqb}9H^`_|CnwGjow zq2QUM%Ryx)LZ_t;%sptqmtljN!_?Hdd_kZyz25m(@-&h+L zc{}r>tSXmY?ylUvnXFe@M=?`CX8#qE5B5nKv*sC!NjadsYPu3!zhs`%K@vi{(vkl& zZ$5PQU@;qVDBTsl5BfZMdzsQVW0LaSK4#Q$b;^+WQbdVjfg|RoU?#>%Qd7J3)gBE0 z(>65*2Kc$YKag2u}n(!)LOk6q^+ zyE}VJYnY??#)jF#RsFV*OZpB!eE7LQa=ytsb}5O|&3Pd0K@0TvFPAkMdP4$)L!%?n`CQ>o_h?l*&FU22>g1!+9xBK5yQa%xfK?52vv zST7r@__Y*gH8avewnAFS{fYc2KT+Ox9F2Fp+MnyzeTQ9&e9!4m7~JgCy!1~pOTu5a zi{8&`pAY166dqP{%)abx1x~)?v@}#>vwB=2Xx-{Dx{&9#@j-fK89T}y)1np@F zY^?7tGcIY+7{%pBD_#)N;@*YzfiaHLHd!vnNwWJV$2AYRB=nZ2P7Y3f0eQ zFgZsmG^~3(wQW;ehpM`}*KMp%J2L(mgf=xmjtKylFnNtee};efJ711Ut7g3aD3^v$ zj!-qbX2vf}lAYIQH4nAg_07Ks(Y30E*UY!K#_#F(E?@Dy>6neU;oOzh+DtjxwnwFp zX>xo)034L1niGj4r|VRX_skef z$LU}%x*1B`2gyQQX&J{87o1eQxsn%I{^CSY^6G|9l*O<~@!D~Pgr`FFohkS5pUJ81 zqf_h)_O+Sj3HPrvB++}nDsJbr5%UuMDmp{wWB#}f{Dc_x>AoIe>DJqOeKewLq6NKU z+NeG6XTNHc;>Z@c`uSFMu&3Ot731ijEZuc#*Q*!pC!39y#JJzJLl0MX5_>P+zGF8l z4R9S0FfY&(*+{-OT;fwKl&{;V@SQEzE+t2R>(VfP3T^ze6d@itrvLwM2}eAeuNuDf zuGcUw3G=4BOdAq>;D@y7od>1wP+$taLJN4;+D_cZ(?(79>tksWrNh1#_5x~k#`Q*X zNeg84yiBWNNKyD}Jb5RM;L)z(c_DPmXw{n#lt1Djq4e=S`^p{ZFl}q4oE&!!h!;IS zUg+yP@zQAUEB_c7wqR25o$jO>=$QYm z^z1+Q^fDiINm({=S2oOy3U}uor_H$isV6GeWicT8YQLG)Jl&X0D9`+4_CE5m-3S@Z zl~Yn^+_;7r)R&8Z(Antx5May?0rju`kK>Ed#>E~O9;c$$Y*UslgZ}0b=2rfk_=^Cu zyYhV=&c<+A-a#z2Uy%O(mB3b_94P=jlGrPKv0ILQ3BCX$`til;YH6PxjJ-L(LXAhP zAY;wJHEggvAMTdeRY(!Z_4h_XQFRVQstlQaI+g-f9kDur^IVZK7X6 zdx6n+x{MIrTW2^`UH%>1i<~%i-!HJMy8W1;<;%Dm9db0*s@w1|(aj-gkT05P$ql7* zju7(c@wPMi&ZSP{XXB)MRzrb;GW~HFIb_UtwAClzc)oI76hhVV)ECbihE;}&lwW0n ze775zU503Iv#62fC-oatSad=G_+frq7<;>?1@&8Sbg#<+j)zCQa|nU3KXllKCA2;3 zB^l5hQc3WL5vL7plIk?gXYcxx=c(;yGc>?5|B$dBazTSjZmAmx7RFH! z`1zk~Ij8S`7KF(b#kYE&);5UC%Po8TcL?f-A#zelXq)Sy{~k~&H_f*{ZQ>@;jCpW6 zjc*{Q0DY1ED){AN76*Jd5tlRt{`d&u3Dqxo!>AOIN^@WrB-8=^}R7k|t zuk>+gsG_L{_XxAHcRy%L2_&i4S11OM2V+?XsNsG_cN%3UEG?dWVFqjh{)pf#CTF^5 zUIxw7yaZ34Dg7kE0Fmz}e5cR2kH6Rjjzle0 z;;s}jyl#OjStrY^WjDjUsR@p{er|Km6$Hlh)3H$7hXyN%+GuAe-ceRi~r69GQJQ$Xzp| z$Z2SQIdOQ?NyD$N1(fHdL!FvXGV#~22%Rv`y0_sWSY^}r%P#0cq%JQN42Jmw=ad_pV>jD4m>|e_<97PRz1|e>wy&;P-z?WDs!3`{E;CTee zZt7lCYmp}T6%pyAELcPoLsQnFO{|~4>{k;&n4f?gOLvZeyoS#?d(*;b@0-gO8~vmHQX;>9nZF3kVg z1t1uO{Je+w7C*DTIjLU|sqcMte_l)Wvrui8ZVuMczC0Jm{0Nii%VN?oa>sQ42XI(h z4qcoTUD*dG$vP|=%-YL?|Ag3E?~rA!yo6jp=gS$KAhH;PVKw8$Qx{${z1uM8VL>>I zk!wjun`w!g!Jw_@=wm8#Q*U&7v4h1kqY2bZ*i7+J2XNJjmOh!n%cl6U|!`f9q8FJA)c|>-|Z{A-cO^QpVHHugTl?u zm#Q4jL0?=@MP;&8xlf1)5a|BoIp)C>q~=UNNI{R%0*Xk+88@(_h)5WigrhnXPRZ_^ zTeNfeOvB1kIo$f8hheQ$yRIsY0>IvB#YL%fY42a6n5*demXzwK$v=HVjn_lY6WluSFb~f2Fb^I;P1|Rc@zYpOYbF_3C=9nW`PCbhmsVt` zc`*Mu&ZwGG&}MS_>9hV6{hhaSCR_4$F;SqEs71zkG*YK(Z|nUD%Qy>nJROgjh&Hux&} zyHcJH)1=NJ`J*ve2JkcAYuxvPb!9SSBi|D{tx)6rK9W<=$Kez1bG${E5N=?roC9kyj-lr|rJ)D!zw$@+L!R7D z{=#|4;g9~Pd(@K+PFnIc8o^TH+8SJ&=>;D@p0-4}=b=EoTUq0w8+9=jE=ke7gsx6k zxYUnMgPJ+X?~nfOqTx8m-_-91n!?(Po7 z-Qk9Q=iGbF9s3860V84WWUu#q)|_)4aCbn~cn7*U?V71>kqWDCg?xYtl@4gjZ|vOv zH0Pg%dftJ}1#XF;A&kbgtNmrl;>LID1Vvf`u&(Ut9~JA-<${cY0R6aDut6e+hX7ss z-PIpBZzs6v>QBT{$tjW~DkUi1z5)@Q-9JF8)ceXJhAGJCfA!p%0X`@b64#z@FVOPmoNiv#UE4Q+zhE9 zDN)VE^L87&ABlRGd|(-HeUXPxtY{FnJr}k41yPl#5=~7k_zS>G`%NLEAbfGKBIIHo zjQGCn1sMw=KBk?P7>id$$sm#C`E0O#)1m2Z|#5`Q`9)`$Ztn7-@#vKErA_iD{P zApf2@ig*fgewkRt8F<*ihu-iYOI+i{s9O$)D0|k7NfB}-{$7#f>{plTn*#$N$_{W5 zGmrp%rlB(R3p)Fs?u0Rxd-Q4UPPAmW*fO2I#rWlx61PsjSq?M2BBq;*$Py+z0aXc4 zQ$?bpHKwbibcy$2E(kI8$_b(k{)_!O7_z()EegD2?l>ay;Xl5?%D;0h*%hdr*p^&m z78F{(s5KTYIThDkb^of8_I)COi#NgP;mu(|7&kvd2kY*h?v%DeOdJj6Tc+?|!QWd* zhE!}G(BJPfKW?vmms#wkvyN-G%>{U#8`zqUhU)1)Isc=3D*Fgc0PXLJXnYfsR3QmL zC@D;H3mR~int$k696!vyn!G`CAKxH~h3VD;u>ZU#IVEeg!Tmr1$N-gPLCYmO#X;I% z*|z52XA^4mPtAg)g$$JtA=A?E>-1#~N=~Bw?YFLnoHrnNvDfad1X6ob;nu!?@T2fP zN}$bGnn;Gt5)63uRfHzvO0%(*IjH%+Kbt9okdKDrvx~NyzbNLla{qIf<-gYN{EbKb ze;1m6f7NVwHIX;>joz&Mhw$muPM#J2+L4S8y$E`RH2-;6E&l~Jq{6H2{~y?V`5V8- z%Xd+KQf^VK*+ijpn;q|V5mcuLy@fYImQYrvU`3^VJoR%@0T{Ibjeyg|WwZDAXx>JR zXQfL|?5psRCCyZg`}XBOBLexfUr)Q#@V6c`xMFZ(YsZWr#4BFNxXLFIX&B00sO<9VbZlic!_;H@$a+!@dVA2x`FVc1qDxT?nR&oiZ(wz1{ZHij~I6LfCp|QKLYkS zcZ2*R=g+j6JRVWHAwQ9Z`rwM!V4|n|o@@9xZWY!%&=AGyP}q$v#1F0^$MYz^6JvkC&M2{S)@ayDC!Rz4XQUAi#-!_E{N?yso z{oy-rIXfk<%01-{PF@4I6m1gEYky>MhAh}T&^$1$G!zo?a;XA0zpFdiEG!SE9!k%v zN)u51_>}IX8lZV=q8;a%^PHu1oZNth0jPr{8>$`uZYQJ3w+lL4W?$hP01J7`G-2d@vdSxu;frYY2?Krwmd^DSN zT3+@WLKPV=AK&|3awUR^SH zoM$j+rv+dF9YLLFh>sc{p5!eDBrG&PG5l~lvh`b*o4|!XT&0~{y8BsFst;%-603r! zl*U##L+J<*CHUaz2!S&qA__>(dV6_vTKqiX59k0~7%<7avw$$Rpqfhk%65X2LoN#= z`pKSnkXOvlBPT?vcj>p!XH{YUSOa3^=%G zu=)cXl!HoQs(zLHWG{@wE8GHwY5e z66-Em()rYfbSyJHZQ+k{dxRBqolMm1TU&}T`;T7=pGlRJN z9RHjK`H~7H79=-JmZkgt`p>Frqr7ghB8$VF#PItDZ3jpWb_`;t}t^I$)S?{8a&YU4i5CAkdH#|qlX0#s=n74Sdc?jTB-A~tSd-l){ zZ?@`WYM0l%Aq~J7h;mV9BLyV1;%OD{e$tQM_WhqszO=uYd_=^7RxU$+yGUMrF1%}x zT20S$d;tpsaD9&-8f|*5At+D#?!};)=Z@R&mz~aL@CWjxs332a0wPM)gJSMRJR|P` zMJiZ+;}+2^-l;(@wxy)l8ug^^z*dM zjGQzc@txLWN1GjC)kcWh+6msv(I?eTYKT9Ilt3a}b`OhIQG|Q^Iu=848DiX(;V?1x z7!LYqsdN81fDy7};ye-lXB8j&*YRv_GKz%-z5cD9%z2xf+pK}q=J}v565fsyBD0Wh zEEv1OEvM5__M!X_t(J-f`;PfKng}fmAr_#|oExvm6w{V#eSsXk{wb$?_*&*V`RB>u zpbY#epmA;W0o?E50Hz%=nsQp$dqXY@vo@J%xpdrjGmXc=;wEsT9|Z!~cHbwpb0c-! z{xvzXlbX4YA5$6o-U!uoL{gD==L!0N0;le7;u+A>@1k%BIRW8N27q3OJ=4;FxDFNp zx;|JEpmyi6UY`_1^rw$6yPX`8|5&yL-DdY(-7woo@o@RAVpVtlYd~U{{`LGNVRjME zl?mEPZjif}h+rqSJiE8(UqRNWU*FSNiJ?zC>)JxWQnPHAbrm3;W<$GF3;p7d4GpM? zPmZ4mi5~1^#;i2^MrDR328E9-u>Ib`KLXOsA94-(&E#eo@o<_v4Y5GmK`hYP>N{T& zxf}i3X+@Nty&%TiYoNSf>^pQ)ch!)Risdz(gguyArsGug2oE(})r_+sgK6%2v5_a4 z5KU0a$R|9FH{!61z?c)^CTSqsE!dDvj*Ij=3i)E|OIJAm{qw}^`6a0avn9z4l0rqv(wY-acc^{y z%fZD}bCRLyicTqHumw;C=G&D|?+d2&?h4OM1}3-erPvfauWUH%j9>V}2-IvWCorP$ zjO=wGMDW@&B7*-b^*}`dL=DB>%%XbM<`<5g2#6*4VNJ^85f99dQyeS>$(>xtNoNb81+=UCG(y0F z4TQHb7LthY?RLeVA$))&5MJ@)aDshKTcRpL-5DWynL}7n*4g-Y_^vI)%M!b6S&>f2 z&Vw@u2zqus>Q6M7lPsvT61rStI1r`Xd(5RhyGuX!pK=04Q94a(^00gQkpVzk%E-zq zW&-rUcdQBm~VnoDy{+xTsOpvXAjBEIS9^j`KO^MDe=kyE$DH^j1zwzDGtcN_;*mU zd~T)JrvBFd{bv(9BsBGfcgpkegX7kR{8#A|eBeLQsoI9`-}k-C6e4xT*yk}k(R5g{ z7qGll_UN+G-$ERy6(*Oi?WPQRk6fBhclDqeluV-H!biZ0f=?nIILx zUj`a|SA?=8`-8l0w@0}73wnlp{QEGh|L|uE&vmTgPQ+QjZ2_K~Ky;urz{<~Lq9aDgrw_}vLXoU72p4g5CFfo5cE(#nb5hIuafpyQ5!1&k zOwb%&{rXIUTcWiTZ;4x3uvoz$8u}gnnp6C9A+momx648e4Po{auxWOBkI$ z)_J%LNJe49SN)5RuVQgpba7MDFjf3_3>1ssd_YOe(+=>Idz{u|4Xj@BHtM3M zc(dr->j~u_5c*w$2a-Z~0ou(*1z3C+r?{vzQTKC~6*&3b6^n`z>6w(6frNneHXgQk z7R_mNsZsetZjpDNKTL?Mv9gJxPY9C!HuEdwvu)J)$4I;r)2&7Zi05^C=tL6@3M zdTl0Lh_=Yj>9QyF@;U8`^+qBt5K%7Yj8(f@ATAFWawnb$>!ltA$5`+qM~+i~+hpPJ z{slVrU+W#nW4zt3h8WFCfW_q=f$ANWE%v{KOtHqseM;Qx!>*!APBA(Nk+~3`D0j`w zFlOX7M8;(1!j;5Hi6fEZkV>5+4iQf2G(rT;XQ`jBNYL4w-OAo6QM~!9Oh-9K&A9c$ zM+jZ8c{)ZQACke4ci;CCTrQ6t#q&|DX?-7oT`iu4r`c-w2oXi2qMHbVx0dtBe}6s) zA0?;Km^UH)804dgZurhvnN}>Ie#v9o6fnX)%kp%D0>|pkV|E}zV}0OaJtb_?dGEZXS%N@G*=gw+TNE| zTNdrKInnSEs(1af#H0IA`nSIZjn8J0`j1&fdeM9?ihR0MVI`>`YB|hyN^xN8b}kEx z0?5*>&mGkiC;f+{w7_sJMIWr|)ePz{)iuss&DPr;M_3op2XbMKODus!{NkX{acSIG zyc0Fr8yP(9sh|cb{52`9k&dI??~ zIbK%5n*nq8ekRU`xD+N|Ad;*ApI41|O!=vyIz%A!0zwa5^n|3-4%lbV!L34kw4c~^ z^A>E7rS~NowY@Gj{`N+rrT^v4{1VH|2ie=%yI7tsM2nDuaIm3Mx>kko)&_G3dH|)* z6gnIbMN>}07};Vr$=n9>vhZnUo#B(oXFkt{=epVxrYwpdR#0PZPrmVy;c${uPWyF48MjoIWxbwCk@iGoIE(r5XX0yhfHPza zPcId^k5qMqKh4l`@80ss;j{E-1YC!C-NxCLekke20t9ThH%PeDN~dsokukms>9Jaa zkarHQqd8Y(uTw}TOeW4!2~`05C*>g4fDc`QA;;+9NkeE&IcUidlTez!Ow>mZ?h@qO1ofyqv!LLt66wVzWJ?s=R4d79~QyKd0I* zr_hwe1AjKBf>4Fc`O^TMQ~bKcsr^u_w?+C=b;|;h#8@y?>s&d{a$nTn{b{_OL*?0M zj_9_qX2^>DB`F!kIH*oVFNCNM{r2o#V3%`fH`gNVWp%xqA#rQNR*#X_@0d;cSWK>a z0N6$4ACA`hgW+uE55q)48o7b4QbbqN%G)sXl3$&y46!7ErkLnffgw*BBXp#Xq`cbN zG*j6-4Pj6sN)IZ?PgKbO|9NSz$Xiivp&iuCSUA>jdI9ZlUVFA<6`{_=(_aj0@ z{$7S^-+DZL@#wD~NW_LMv)SkU30wVVZUp+&Ym%Z4DkMp9h4@2TnQIIz&TdD;Cujhw z4;w_OvnWTN}$3{mTw(Tvq`dr9He%Lj_#aU|Ij6WlFNd2Q; z=Yt|8mMs2SLy^6A<*O81+zg_IvJ($4=#Z@NwN`_E4G^4w70O6)QQYP7*ngggHS?); zc4_a=B$i!HGID;Y`Ag?S*k3E8EX_0g|3_c4V~{kEWYEAf;r~}8rMxzEOc>6D{}ZCU zesA=e;5g#1cs;xK_cQx{k&I)qf00*JT!W{x3Si&w3yZaeO>MHtBN|DuFB83Fj4+et z=zHEh2C1$YLW+)JmG~SmBGMu(P zo=;F#Ff_eal~F0p^DMNDZ8{D^Np)kFEFO=61?&e4fb&d|WlkU0t=BuSNafqYJ8u=# z{E&>45#J0v?@H;z6`2Lq@Jzx zPY7l#4Q#2{BowM02YJQjrhj0>UksTr`O0*owEcKJyeVhVfa7qWoxD|c@}}zRhP+Nq zkK*)H*y|g?;ME!Fm82C{!qo$$`f?#ucr_a;u1tWeIs}RYzA>=YE#6b>JJ8lE3av_}Nf z_^GL7=O1qT+#N=1NBJJoF3M~@-I=X<0GlTRRjy9DZSG~yOQrHU86e3?QXM=KKSPxS zB6raQW(JY|Sze{%lwQu9Z&lZ5=*US|4f2^R4cpF7@!M~2_&*LX2kC;(&yU{XfZutx zc6vM;G?hK>tg6;_j6R-dX=(**E59&2GAOIdb-iOb`s_VDi>or`=|aM9^~sT~Y^C6U zWA}ob{!C`NHtM;emN)f??I5yQTAC?rbFi&6f^CCtC6;+RfL~hbYGh}df5r;$!t6wo zJ~hqEnD>7Ci<98Xx`3#Zl?9tle!QRH#>Hs*r)xD_`Ng%T?UcL2s!tXQhx?56Nxi72GcHhJR zOVd;hWy1b6`(M#7O4pTsRKh{DoByO^hE=XkLH^cW!*nU#Q?we*b;aG+PV?Hc6N7#x zJF8gB?Y$}cbuW|V2+o5WkzB6=@C)dR26(Qem06mJ%FnmxSU9JJSA?PUQ)2bBG9sh) zjGo+!wJtJ;Js+(O5yShES*eFYktDXtdP#}TL5u-caEB0;afZJg|J->4z0$hXEo|G6 z2C&q2RrgSkb8-T6P&@C1M>g4=CRG&1igU)6E3UHSO~|HkcxOS!L!m*ZCrpM3<;!!_YXS|3_Kc1PD%th;&pSaD_12dO)J?KUKu8MYJ%d^oyD#@V^X@%p@%HTGc{9W=tcIb} zvs$2=Nl00QMRm>XiS0j2?aS-OvRga>+Q zb`A-^;A%m+?!!VE<~_Yds*2yBeb@9m3!sGYnYg7lzBOSC%5{2^b9I~0^V{zEn=5t| zaJwn$p}|8i(-w0KPZ1mhK>j{4p7X3)`N5BTfG zjqIRb)#@x_-EdPNlr{Dxc@6~tz_+hP9fA@w> zw6`!B&sNiL_XGI_fxVP%O;j4$5RVu@PvK~U3ouX}Ph?#Svm46wWP4x@#G*9D6N)vp zX5E`3y}mcdOtfLCjWl^awaGqPxHKd5P?BfA9MTDVfcGJ-pg3wg40*=nrN^UJ+{>7- zb_rDOzo>Dqpmsm`p-@s9X3mO4VMc2 zG(rg95!LmU*Je|@oDs#zv#WMeaEP(cay zm|CP-*V8)F8k63FAo>g|$jAePE@yNn)nJl(*rh#u9#zudioSpSUL+|I4ULtw2Ou?O z69{lH=9o+9M+E=~$tN|-@jC6VJ)07e{fB8i_F%zIRCg>ZP5W-+LVoun&8>L=G#}*W zv#f1jnaypd5op(QyNa3)2d@?+h`5vKE^C0;?rU+f%d+%fC3wm5I(gXdm~xNOYe~LO^Yykb+g0^-85pft{DO+Ujqf ztzVJQQ0Vyf=C(B!I@W47{)fJjfLSQeZoK&1$e{N)WWMdM`Vyfs$mjYe2wJ>At?37w zIaLRvh?2-4UEF{*84tGxr3g=kHbKF42dO;p{7UM@B zlI_4m*$OtYXF=>(;f)TrRL`gb^CR)AI{jUWY3Wcv7%`bdo@{NNZirRzPo!BmJ6Mm!RU%Eh$%!L-U!gw(OjKNFu8D_fY5EeHwRZ`KV$QeX#pl|Jr< zVI9DN!?}sgMLgrhJmi`L>4u1fUGL6Mv#;@XBSV@1PDYr&H}OaNR(}`+s(A$?vsXd#8WcR$~wlvuD&vvW!te`^UkQLZ3DTMK-fdde9hJ+Qd;GjD<~< z`RPzvIS2AMFF7yGhI?x;wXoy)2d`GEPwzO`&)FSQ2(`QLPQ>U5Yw;g{?qG^CF6Tw& zLB@yocSP@j4y#JQ^4jp#xHYz(f_Ftvf~f_314IXDr`cq@>|2yvY2Sqi)RH2y_O(U_ zBEF(j_G}KyDa6l9G8`FFq*f8YBJx)`DFsk8;cXP`ym$;Cx!tq0ce>_fo-S=+~nsZ zi0KJMl2$XDl_>c>4V9Cs0tqH4Yfqm8<;bqdXqAunkFpI8ly7HI?lt>!f2IQBey zxxCO~I%h3Ch>?Cb;sNLri#T4&wGg#cBfbo`?_oJ$Cq0H@HK`vX`|vR*Ebs5SqHU{7 z1O!J^Ly}8Yy#XdUjD)PG%ue2X$hGdsJmQV!2t82ErI@y^tufe;?o50leW|zvqV|Y~ zM_Z-Q^bY^ap>1-43s(F!$znJ0+438HOOhRv3PpNc>>-y@F%El248Fbky_OpfpwXsx zx}m7gsE2oe=g&+}@8B|@b*W*gYW;7J5d_mYFvPNauM?=5mmwzpJZsqg=)x-XF$%V0S$0r9@|K_CCVs8HG z+H~@kyi~U6IzT?D&E9!OjSGLQ@uSi_#=4%BH`N;&5fCRoJ=22%;O8O9V07}{7R`rW zm1+#0Yor=9eC{YO3=YCl<@szgm$@_|_zFPu%fb`}9c9yw%VM2lUSh^H zO=@zgE-e1Q7gS4wg*XuXJ-ZZU`R)`!o15eK+arQ&L7SU%h+ zB68R$;O=K;3Lu;lxnFFWxyXMZa+=to&ikHgSbco{hwUOq4r#UT86!HWfovHFZv%;i}#*46%s%3 zX?NmvaThpj=vFgGbOOA_g>}w-^ee9IA)ea%Z`qaLN*WMT2tdDcA^GMyY>YkDo>HFn z&+U6fOMt%dAb^uc`njMq$)wecnLPXgs`8Bc2u-9fGcdydK?$98uLK(H{Gc4PHgz6kBBP z)h)&fs4jwGf44n|ruZEiRLhEOYTTv5f-_1nbjW3={NED9Qo>efL1)B^jhmevmiKi7 zw|O((#ldA_1kEvKZW8o)va3>Cu6+C6T=wt{*ACZi0)d~Grp`7t{Zs4c9%;h2@iW4AqcmXeCWi>hJAfp;EUeTA~3ZYvT3h`EwCs#(h78Q8!cOz6k^eE9>_Y z!D9EQnw`+xlB>ieCqB`(rpk-xO!}uWi8oxSTiT#~2@3SQr;X2K_edOVg9}gyRAfHJ z3_P`|^SZQgosu~eJyH~w{%qh&(W^F(*=KqXqJh796v)-o6|sXsf5RrHPv9(psl+&) zVFK3Hk{-R_Wsekbm(m&dQ`p@wmjX!Bx!NZtkCb+hcgVXPtm z2Mqy>ke0vG4YBJc;Xpzhr(z}^j}Hs6FzmC>4yGP3Nu{Mb1G>0Us@*@;x&Vcjmj$$@ zHIKFk{7}ivBy=OR2vLfE-3k)-f~twg<&#eP!iJt@cr=xtn?3~(utG(TG*NBqBgo_t zkSuG=^rMZstHAMw_78yrdG%jco!AR9NlI7_z-TAQln?f8=;f};$?Y4dPqGwRRmxT^ z_c;Od>*0fAVu0`n62DKVtK>?ZdQZNVP1Jsm{OKkQD{3UWe-+ z?#Rm|{=RE+OoLqrgIy4$D!rF`ft{5yJxiz|S?5yI=dfrEZ~f$3aKlZ@<3TQq@(EZ9 z5qVNRj(F8(lZcv#h&pA(HGFIG`r}o*`j{cPTIW4{^Z*;RwWv@{N|tqX_Su*#*Y~*~ z6UjfmZff<;3YomrJf^j8oquT99*Wu(aeol?6viFSA@(hLU{esU0p%N%=!k^4#H5Bg zY=n#0+?YE32-ytaZ^p_>*}OcN$v~59_GI%4Dp%FZ12iVR zS_#*01s>?j*>9D+$i18A{CB+f1i_GUCV}10k9N*RnhZoJB&?8w2 z0xRcy4Yvo_FksBM*rQVAEAxDLFs)JT5DP}?&b*qWuH zzLB^-h@igyEX7yOJq!d_9a^NbB-3T}z0-NCm?MlGM1nrLZ*_sA4v&Fi9iGYp3$lQN zt7Z&;vM1xGpK2LFZYV{R`3ac(1=TZ-@{n2`>PGT3c&C~9nQ$3NgKox_LG$#$zv@BV z8$s};b@8Arl-(so3$L68rT&I<{Dhq=IyLJ-CDi~g?Ki)XNB81@V3`06IG0ID&m`JW)QDR2vpIPqg3G8~z7Y~nBpIrd zxh3)z&1;QsM=K7{3YPU0?jmXLjC6TtXWvXR57@5#<_3G+B4G>ow1 zY9v@sZJa{-!uHikdik)*8ipOsXuT*R;m;3!rR9?o^32kk>8GolxV}&V#1P(^&d^n z;iTBVZ5TvnbTsvSJ>W+^?8i0Z7D)>MJ-1MYo(_Z7dqH zHM3kZ;xQ{oH0OQJ(!CXXgKsj;X$piKzRUeks0b%=s)JY4>Ye{}WKA=z`Ph{tPaOUJ zug5#p^_;7HpusJZ(_cLuUu)5S9A=!zJmgCj1>g9;{>P)QzcH82G-l%ix)WxH`&Km@ zh)D9j=$lg^azo2ae6d0@blj17bp1~)rOLWI#Y;aZY>rTBtAwp{{+5_UjyigHmi-?Z z{3_EULc-1-e_#0D7cck=>ImZDAzoPig1P~Y+4EMF2FY1)o9NoAEw&Q>!0=OG3s%JG z&%EIcdvbkeCFpj)>_cML*V>nQz*`6{U!8>g0W2I-W?Gyb;Y`>*t;< zv5MRm8@1g_Hm^q_nchoT+|%sRU$#axN>d;B{rN6h`Wr`vxyG1*YK!XT)pACs&8e4{scnb$4sJ}#&{N!xJc zLB?pCR(ekfC$ir70{3Etil*M*to6w)@w53sYta2X-_^>%SL=CaCE6>Z1?D9b>FIV) z?-=zC4&`meR*`nII(BbkUSgj!=WVsl(?83WZK>3c>E8*lb(5}7n?XdxCDluFL?5Qp zaV59QUQu_!FF>ughQa)5$p3=wp9q|-8Y`gwE)mwM`S!gFk zR+I2cV$DfK;g^&OoszN4h2dR#C0=CHFbl&LncShHB%=GdKL#sMD7o#K`e9iLTWd9V z1IAiblD9v8IyomPr%xhzJfqZHf2to%Ql|eSvULCfinprs#xFKN4d)4Qf4j2&g74g@9^( z%W3x;oP&o({)a##GN{g0kw)eRp|xP_0|f<@cWqfU1n!0j%#5L)Z76hxKLup<SB6?T#!ADTPR9{U9$ZOHtKD}&uhw^m;dp!Ant?C9wPZhJCXaL^&=yhvQ? zYPhnyh^X(@%931`e*5M{i4uoPbkz5FKYgfUn`9zw?{oNZgUjmHAS&&$EksMO;H z%Z*USM+Qdrgl@G>geRtbax@FK;^f&HunEc^ebi$l`t{!|*{#7EvTAuC<0uFsaCHqd z#;)_HH`c16S4nKt0m+X0oO;`6v_%~Hel0cqeU)^h1)07i9X!o{E#WEa3-XosvTY(= z@Pg1}=(WsdN+XH#^&$v|&kRQC@Tdcm&*Q%`*HKoAd4SyVWkJMD##5#Q#SOZ+LrsR6ohY^a@`5FQVZVZyh{TM=D@vHke?mm1}VQC!i=Cq%tI~ zn`pjAHx45*&W~2UxI+kg6@$4$x0GgVr)4()_*|3ujuX-os4vMpYtgE)v2VLOB|GR& zh3>KUUx^b!B~CUF*GjR8b@#^?xtF^vurhuN1?Av*?fC>=lxsJ3)C;IJ6G^gs<8z!e z^`3#*hD%21XZ@3CXl}UO`lH6=O{Y!$|>T40qNEJwY#3xE)* zhHhQ9RRf$R{|j(uQM2jfE{6>Y71tZCgC)*~9_ewo4EpDcty;giXA@A3rZLzbw_%7= zVk~bzQ#HT7CmgPx)7cwKmV!JF&yHNInom?isKt&#f7l*I(KOSJib@OMF_$)+)Qd6H z_qIU9jir{P)&h8*+O{JvpEEoQ425ks7q-w2NWBtV5}RK8B%}xj==f|x_y}~>k9nFk zpXvn!61=rYIAQQ${9O^i)SWp{)bCpepgeHpOE_wtaVGB0PG|6#$R|tqx4K;Z#g}*1 zcVWRHm)f%-R|HeeGw^$qqJX5+6B)!+Z#GtHZV_Q;2w#SJ_vi2=ZM7WA-}OE7D_mYa5_~tH`!Bft49oKz((k< zuh3MoeM<(J$@A^g-IWG1Qq*n5N+6yvxyR9WKK4TaBW@`Z@HC^f?rl^e@N0544$2N= zj8CW1Iar644u(93*%WiXsAC8t&{7-U>a@Dz-LlcBpofo{E{tBrL!SV$WP4imdrI=U zf|vDW=1#3E^DsIq`k`&VH`jk7ZKL3t$ zq9#Nay1p0s@*=I<_`EbYr=KkrijAK%0LB)E!(}>bg{AT=5 zrhTtJDT~IcdZb_UkEO0O5BCwS2?VQ;*!eE{>G8~t=u#6p68TAJ)JS5V$%m5o@9=nW zVLF}{>((C@%CWbFOKReqXpleVlFlFudKTRX-oWKg#fatohEea`!5jy9-`+&C$NzST zaANsdvB9HruIAgu{l!zmFrih~`2KKlT3R&v90kJVWMg;nAQ>YC=`Xtij7{&|uqsXz z<>sG<#7t-(zE&KwV8G>k=17xBN6Q}Xo&T_~wnxk~a&AH4rp#r)9el3a>K-v{pnajX zN#Kr){Pu`WG znOn_SL6G#wclHr)e_4DYj)KBuYI3?yfQxcC|4gj1+mBH@skQ+aS~Nb)2nf0Rz3m+M zcj{nVhQV+f)Jkc75n6^WmxpcSMTnzpzsnATaBEKXcq<_67=H%VXYf#RhIj1;r1+L6 zwczZXKYUh2DjDiLg1MSc7qvc9vQZtQ5e}*70yB8nQ8>@$E$V$8 zM=<)};ju;fJ>m8`*U2?Nn^l+>M?)6;g?>O)fCb`u{A-(vTW;1-bUfL%`^3st+sJx~e`-V-Qi2RSxaUtQ!W2E&@WJEye z?+d$NNk$No#)$1%ufGlC#@U=UO5V1&f8(Dg#{+tAn9kZaC%K<)bTT{ZP3Jc2;|_LD z6YGFXo!J`{DzA!5=T)u7I1}iN;S=;dBRtTVItb4T<3(5zhuHvkY^B~+*nloFn7O+H z&IIhVQsRxN!2@nLI7cm*P+sORoj0vP=R>o$s)2NN=V|2kc`>DC4_h~4$DGSTdntW{ zqtKCiHYYM^Vk;FxWUi{mXD0&VtKzhan_9?q`48cLA*NN0pa@U1Yr{K4D6qe%eleeP zt>ez-!4Yy2QKtI2|DhqL&IHH+0N?pb2W$eAb+s=~*2T;Ai*&ZBitMh=YIkp-@Zfr$ z<#l2kV?Y0}5#V+G^fUx%sm!oSLbx>+CNIkz4yoLNQy>S_HO#5MAF$*@qvO^MTfM%& zUmgZ1-jLd(BFq1xlFuwT{rNCT%=?{eem!JpV+9A)q7FlK%63i3N2sb5t@|4&WM%!5 zwur>oKxo&d>PM91EvzX6X87B+CA(v)j>W}G4EQL-ypUQ?@taE7eQe-(K3M#L=vs|| zLWX0JgI2n0qDusttBR2vs!|3ziLD4n96vR@y*vt*@G3qg%ei+m2Z%>bQqmP2(Zb$W z-BmfHNj*$Dj(5z@hA}o0!y1MK*lSc1xzj+b+khFf(%2K+m3HF3Df(NeH#y5uT=Tf(Z<0lff>;Bgm)<7pXyo4IW27L$x7f9c^;(v? zEBaOr)BAtw<$EX;jo5sF4L98Q5}a2Ke6U$Mtkq39j3L0*ZT@?(4eE&zq0^B;BgI^ zgOa63PncLv13@x-+~3fX1T<{sd@*~edY%&eo#U@4KVfzTCQ!3TsYw!cnAamu(4fRe zw{me*_`{AzV{F{8xm4ZDHKr)AH1nzb&cdB?esKe-4S~G269c#+7W*4agH*G1FQf1< z^jzwFoUQq>5GD(e18`_JVVQz-2{B;&laoiGXXIQ`h$qZ);s>#4E0{UJb0LW|vm^%PU^vyNlN$P~b= zCF~S3Dxr%}DDV9rS@zH1xz%9Vz=9zm78j8rA~0!eYD(a;RLjp!hs(NT$_GhvF7&`* zjkh;d&hLCz`0sPXF&%sXt?}Sf2NWEHj=R;^wzUI3qK{BZ7Pwf8?;&Yo-yka-vY?P~ zf@KLy?_MG-w^lRH*=>*e_ZS@*INcOyBcIlstpQ?`+~~+4e}P<0M&$2g2+)nZD@qgq z+*ZYyF_#EO76$a|NJT*wA;;&=Sz8qiMCggKtWv=h>y!%;b(r(~!t&^!L47wpE0R<@ zVULJhDNf+gYMKvmY3Ni#_f^N736{vsJ5{|kI)0R{g&!!%3B>wVC3cv^h^X9{Zsxt1 zAyW`Qhk6#P)FnaR+d6Y;YyF)+g*Bu(8kqa*=OARJyU5fV_am5osaQ1<4P`P^0-%k| z=fD#`V4asu9V>UD&8jN>Fi#u1Pd9?)LB{9y3DNyDY&wR^ zC1*aMC-`V6Sxaf6vRWJW(f*b;X?%QnoAy5boGSG| zWc~%f&npEYlMh6(!1SSPz|6Zuc;pVt;M7%RlTK$Ncs|##jB`sh$P7nl29o(r%4-2|9k!8@L+7Bb&d%BPKJV}((KqB zbhW-AcJQC3Is}A4XjW2>bn5(koV|HNvAfL zXITqlLbE)@9#D2eqM5nsKlNTt!H1S=1+7*RjgUlKP=tlb2~}4^C8Lanp`%B>0iNDX z98r8?brOEwv3l63R}#L%n_u_pI%ZoRVvNw^ceEH^*{HSfdoQH4 z#qNWpahAh}?1qh?8O_4m{e*(PK78ES2KrMhTavo_Xg#7kPZQ2rp9{3G+ks4|Y@0yv zf^VH{9Yuc-o%E)9cVNx_29&{R5%W9g>^QfsqmK}4#Sr!?T}uCV!XrxImt<|?p!bIE zfvRT~7EKKVy7yYNne4x$erTiFPJL(DGYX+L-xPXO>W%n*`nUYVSW0q?2#a62coa_x znSM7r2net_D#(g+k9~`Yg<}3YMK0Q1@dSQLfagTa4%2%4xXxu(V8un~OAc>d+GB&P z5sgw};p)wR{D@Nj5biwaF#*u8mXDZL{yjp_4Mm~g?$b^%oCN4b$ zg?%Eem%1{}i!@fg_M>sr&Sif70T{}D#fQ`Oa~p97XG?XOvjl59RkA)NWishwUsRR) zhp^gCgs&u>b~1!ncqGi><*TmH0_e{yiN?<%GL^-ZepYy8TJ@1Fp>+|6HPddWS~Yy* z_;dqb51j518`m4h?+Xs$PM9=p;8tXz7A1OK=#R$F-L}F&{V68 z4PlNM8=uy~>N4xq>IFABb-aJ;KyBU)O~()fY*^1~3=%{wt@3y8@Vg5%B%myNIkm$s zprG%-rY^DftU*+Xkd#WhUEONIT=>>Tm-l1!yKaD=e4$kDsiqF$zc_WFK1acGn8%w{ zrVz?4buF7+uQ!syXQrDNe*iESgPI|go2l|Z-6vX@w>?HN2HCw?cFbWIf|0X~U#WPb z@s7PFFLEsza%Y0lGJ0>^|FHH}QE{|g*KXqw91`4J0|A1&y9RJl8i(NSZowUb zlZN07RQMMd<;0V80>?N$P zA|2SY;+XpL&H7=0Q8x|S*)jeP`hCW~&-8lfnO<+>jytdZFGdZV$N@NyixY4j?*BRt zw}GFyadm<#0hi)`AIx>atx%A683TCZ3B_tOP%79f4VmUpSf%D@@{Pn_;vq0+vJH|4 z^gOZy&9eC~G_4C8@^njo*i|>%HGGw=7yP>V+#UJ%a8Y`u@$!YG#xgT3ktVnHfSz|q z_l;`n8)ILXwKn%Xx2CKBFei9XaX@Ui1}+?aM7I|T>dWo9JT!+=ONH$@U{)Pq)^2Gd zhbCL>_+TDgaT8f|m5&E6v)L_yE*hSGDHOKqx#iq=c?5OGSF2M0!M8-3OX&r#+f>t= z#f(7<4$vc{Bv*B%VwsB}J9gD=i}r0r`+-Zl&~dSMp`-TL;i%a}y)0kj20pBLY}_Ho z=MFC>EqGn0f5<%|@c4r=a?Fpj*MLHwoW)VmSj_CVxWQXz zT&9crdgXn{zZ+VSndyEUIe>as6OH|}^9p&KbsqSyqaWmNN+TPYs*+KQU^&9J8&uMq zzonCpOFi6DpQxvzKh>0@$qSyHyFfS+&5^+hZTfkq`hYv zGC6+rp>2M1aZlYWIKg8@WkkcWH8ZCh4_mK%z zGpFxM1m|02uY$44_u%w~k%e?@?*Lp17a~)zb}N`m_w50T`ZUG+_f7loTD)31DiK{W zGWPvrK6N9TPIi0i+{RQg@id6PeJdjzcQzM-BP)XTBm zuB`Kruu3Myw$0Ke-{ZSR978761`M(T=i5d-_TS0txJBvTXgODFkXO?0{&t-V$Et-} z5g^qr)N%(SF&|6JQdq%0WJLBn-G)EZ@!^FVelIhy@2r}x$BNKvX#zo$Z#QPWR0yF0 zqaTfm@ZH2ed)GL}zOWqJ_n4O({E>BYr&}ihS|}i`sLj1Sh1x`ppl0F58+|Zjsam>? zlP@?~@pkX*JK#G|wY$3TbR1cdG2K?)3jkcV*UDKHE7w2AX7QNkhd7^_Eu919^O(V> z^r|`?O{`gf2nsHQgLMO!KhD0xr)+ZAr{xD7Mv)imtl@NVgV}=EB3m*u6l8zN>q@lw z=KeeC)$hlr7#bpKV|WA<7yGl;Nfx7Pi=Cy_F=a=>q)s=LOt^7reb97SAqV$^0&Yy$ zAq6$1Ov;r4mMPsE34;(>@@|4GZ-dTLa@y5e-fALy4qz%rRgVjFPFNHNART|^r<~m) z+`vNZq7_G!z8fU_TK~~B*O`@jcRl%%6DC@|rmy&CA{WZ448w8c|3<*(_}-j`8Oaqk ztXg+24QS+KKDVngQW3bV8+1?PP52)zTjppvaC2JfC!)ACNV(a*69Ht#?58v1(M$x= z;l*+GOwf=t`?i!pyycgL?>B0LzcWK-QseCRk2tjg;*OjTQm5x1^;GI7+J2RZS|e0$ z?H;fxWP6+FG(V5984Wmqct=ljx!_pyT=k@O`-poJe6K0+{vEAacbISG1XSem=&>3q zSm~U?S@e`FC$^8?3cI>T(Z8}`AXZ4%d%z+CEHl&3EVYb2I079W62>I7H)9ho@U=|q z@nZuVQ%mGEJ0fB<_IPYus!8{3bxY1N3eMo72=~o;Um@@m@C%`ev##v_^+l1!UZp1)~FKTrr;gJ`GcKdd&XC zl+q=sMoQO+=0{S-43ufylel<>wim^xWxRx?2#9KLfkw@8oX7dCz_(xEB+&YUcrx-@ z8U+Yx�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

NR=Bvi1nD&1RZuKNfG%0mAN%7TF?y(BFi9v0ZB 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 W#3|b~H0 = auto cycle time in ms "next": {"default": 0}, # Write `` to move to next colors "palette_size": {"type": "int", "default": 3} # Read-only: number of colors in palette @@ -37,9 +31,11 @@ class ColorCycleColorProvider : animation.color_provider # @param engine: AnimationEngine - Reference to the animation engine (required) def init(engine) super(self).init(engine) # Initialize parameter system + + # Set the default palette + self.palette = animation.PALETTE_RAINBOW # Initialize non-parameter instance variables - var palette_bytes = self.palette self.current_index = 0 # Start at first color # Initialize palette_size parameter @@ -64,7 +60,7 @@ class ColorCycleColorProvider : animation.color_provider # Get the number of colors in the palette def _get_palette_size() - return size( self.palette) / 4 # Each color is 4 bytes + return size(self.palette) / 4 # Each color is 4 bytes end # Virtual member access - implements the virtual "palette_size" attribute diff --git a/lib/libesp32/berry_animation/src/providers/rich_palette_color_provider.be b/lib/libesp32/berry_animation/src/providers/rich_palette_color_provider.be index 83e3b01a2..b3a39b9cd 100644 --- a/lib/libesp32/berry_animation/src/providers/rich_palette_color_provider.be +++ b/lib/libesp32/berry_animation/src/providers/rich_palette_color_provider.be @@ -62,6 +62,9 @@ class RichPaletteColorProvider : animation.color_provider import global self._light_state = global.light_state(global.light_state.RGB) + # Set default palette to animation.PALETTE_RAINBOW + self.palette = animation.PALETTE_RAINBOW + # We need to register this value provider to receive 'update()' engine.add(self) end @@ -524,29 +527,4 @@ class RichPaletteColorProvider : animation.color_provider end end -# Factory function for rainbow palette (reusing format from Animate_palette) -# -# @param engine: AnimationEngine - Animation engine reference -# @return RichPaletteColorProvider - A new rich palette color provider instance with rainbow palette -def rich_palette_rainbow(engine) - # Standard rainbow palette (exact format from Animate_palette examples) - var palette_bytes = bytes( - "00FF0000" # Red (value 0) - "24FFA500" # Orange (value 36) - "49FFFF00" # Yellow (value 73) - "6E00FF00" # Green (value 110) - "920000FF" # Blue (value 146) - "B74B0082" # Indigo (value 183) - "DBEE82EE" # Violet (value 219) - "FFFF0000" # Red (value 255) - ) - - # Create provider with rainbow palette and default parameters - var provider = animation.rich_palette(engine) - provider.palette = palette_bytes - - return provider -end - -return {'rich_palette': RichPaletteColorProvider, - 'rich_palette_rainbow': rich_palette_rainbow} \ No newline at end of file +return {'rich_palette': RichPaletteColorProvider} \ No newline at end of file diff --git a/lib/libesp32/berry_animation/src/solidify/solidified_animation.h b/lib/libesp32/berry_animation/src/solidify/solidified_animation.h index c7114f0b4..80a4c32aa 100644 --- a/lib/libesp32/berry_animation/src/solidify/solidified_animation.h +++ b/lib/libesp32/berry_animation/src/solidify/solidified_animation.h @@ -3,219 +3,110 @@ * Generated code, don't edit * \********************************************************************/ #include "be_constobj.h" -// compact class 'BreatheColorProvider' ktab size: 18, total: 29 (saved 88 bytes) -static const bvalue be_ktab_class_BreatheColorProvider[18] = { - /* K0 */ be_nested_str_weak(BreatheColorProvider_X28base_color_X3D0x_X2508x_X2C_X20min_brightness_X3D_X25s_X2C_X20max_brightness_X3D_X25s_X2C_X20duration_X3D_X25s_X2C_X20curve_factor_X3D_X25s_X29), - /* K1 */ be_nested_str_weak(base_color), - /* K2 */ be_nested_str_weak(min_brightness), - /* K3 */ be_nested_str_weak(max_brightness), - /* K4 */ be_nested_str_weak(duration), - /* K5 */ be_nested_str_weak(curve_factor), - /* K6 */ be_const_int(1), - /* K7 */ be_nested_str_weak(form), - /* K8 */ be_nested_str_weak(animation), - /* K9 */ be_nested_str_weak(COSINE), - /* K10 */ be_nested_str_weak(on_param_changed), - /* K11 */ be_nested_str_weak(produce_value), - /* K12 */ be_nested_str_weak(tasmota), - /* K13 */ be_nested_str_weak(scale_uint), - /* K14 */ be_const_int(0), - /* K15 */ be_nested_str_weak(init), - /* K16 */ be_nested_str_weak(min_value), - /* K17 */ be_nested_str_weak(max_value), +// compact class 'CometAnimation' ktab size: 24, total: 42 (saved 144 bytes) +static const bvalue be_ktab_class_CometAnimation[24] = { + /* K0 */ be_nested_str_weak(speed), + /* K1 */ be_nested_str_weak(direction), + /* K2 */ be_nested_str_weak(wrap_around), + /* K3 */ be_nested_str_weak(engine), + /* K4 */ be_nested_str_weak(strip_length), + /* K5 */ be_nested_str_weak(start_time), + /* K6 */ be_const_int(0), + /* K7 */ be_nested_str_weak(head_position), + /* K8 */ be_const_int(1), + /* K9 */ be_nested_str_weak(init), + /* K10 */ be_nested_str_weak(animation), + /* K11 */ be_nested_str_weak(is_value_provider), + /* K12 */ be_nested_str_weak(color), + /* K13 */ be_nested_str_weak(0x_X2508x), + /* K14 */ be_nested_str_weak(CometAnimation_X28color_X3D_X25s_X2C_X20head_pos_X3D_X25_X2E1f_X2C_X20tail_length_X3D_X25s_X2C_X20speed_X3D_X25s_X2C_X20direction_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29), + /* K15 */ be_nested_str_weak(tail_length), + /* K16 */ be_nested_str_weak(priority), + /* K17 */ be_nested_str_weak(is_running), + /* K18 */ be_nested_str_weak(fade_factor), + /* K19 */ be_nested_str_weak(tasmota), + /* K20 */ be_nested_str_weak(scale_uint), + /* K21 */ be_nested_str_weak(width), + /* K22 */ be_nested_str_weak(set_pixel_color), + /* K23 */ be_nested_str_weak(on_param_changed), }; -extern const bclass be_class_BreatheColorProvider; +extern const bclass be_class_CometAnimation; /******************************************************************** -** Solidified function: tostring +** Solidified function: update ********************************************************************/ -be_local_closure(class_BreatheColorProvider_tostring, /* name */ +be_local_closure(class_CometAnimation_update, /* name */ be_nested_proto( - 8, /* nstack */ - 1, /* argc */ + 11, /* nstack */ + 2, /* argc */ 10, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - &be_ktab_class_BreatheColorProvider, /* shared constants */ - be_str_weak(tostring), + &be_ktab_class_CometAnimation, /* shared constants */ + be_str_weak(update), &be_const_str_solidified, - ( &(const binstruction[ 9]) { /* code */ - 0x60040018, // 0000 GETGBL R1 G24 - 0x58080000, // 0001 LDCONST R2 K0 - 0x880C0101, // 0002 GETMBR R3 R0 K1 - 0x88100102, // 0003 GETMBR R4 R0 K2 - 0x88140103, // 0004 GETMBR R5 R0 K3 - 0x88180104, // 0005 GETMBR R6 R0 K4 - 0x881C0105, // 0006 GETMBR R7 R0 K5 - 0x7C040C00, // 0007 CALL R1 6 - 0x80040200, // 0008 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: on_param_changed -********************************************************************/ -be_local_closure(class_BreatheColorProvider_on_param_changed, /* name */ - be_nested_proto( - 7, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_BreatheColorProvider, /* shared constants */ - be_str_weak(on_param_changed), - &be_const_str_solidified, - ( &(const binstruction[19]) { /* code */ - 0x1C0C0305, // 0000 EQ R3 R1 K5 - 0x780E0008, // 0001 JMPF R3 #000B - 0x1C0C0506, // 0002 EQ R3 R2 K6 - 0x780E0003, // 0003 JMPF R3 #0008 - 0xB80E1000, // 0004 GETNGBL R3 K8 - 0x880C0709, // 0005 GETMBR R3 R3 K9 - 0x90020E03, // 0006 SETMBR R0 K7 R3 - 0x70020002, // 0007 JMP #000B - 0xB80E1000, // 0008 GETNGBL R3 K8 - 0x880C0709, // 0009 GETMBR R3 R3 K9 - 0x90020E03, // 000A SETMBR R0 K7 R3 - 0x600C0003, // 000B GETGBL R3 G3 - 0x5C100000, // 000C MOVE R4 R0 - 0x7C0C0200, // 000D CALL R3 1 - 0x8C0C070A, // 000E GETMET R3 R3 K10 - 0x5C140200, // 000F MOVE R5 R1 - 0x5C180400, // 0010 MOVE R6 R2 - 0x7C0C0600, // 0011 CALL R3 3 - 0x80000000, // 0012 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: produce_value -********************************************************************/ -be_local_closure(class_BreatheColorProvider_produce_value, /* name */ - be_nested_proto( - 19, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_BreatheColorProvider, /* shared constants */ - be_str_weak(produce_value), - &be_const_str_solidified, - ( &(const binstruction[97]) { /* code */ - 0x600C0003, // 0000 GETGBL R3 G3 - 0x5C100000, // 0001 MOVE R4 R0 - 0x7C0C0200, // 0002 CALL R3 1 - 0x8C0C070B, // 0003 GETMET R3 R3 K11 - 0x5C140200, // 0004 MOVE R5 R1 - 0x5C180400, // 0005 MOVE R6 R2 - 0x7C0C0600, // 0006 CALL R3 3 - 0x88100105, // 0007 GETMBR R4 R0 K5 - 0x5C140600, // 0008 MOVE R5 R3 - 0x24180906, // 0009 GT R6 R4 K6 - 0x781A0019, // 000A JMPF R6 #0025 - 0xB81A1800, // 000B GETNGBL R6 K12 - 0x8C180D0D, // 000C GETMET R6 R6 K13 - 0x5C200600, // 000D MOVE R8 R3 - 0x5824000E, // 000E LDCONST R9 K14 - 0x542A00FE, // 000F LDINT R10 255 - 0x582C000E, // 0010 LDCONST R11 K14 - 0x54321FFF, // 0011 LDINT R12 8192 - 0x7C180C00, // 0012 CALL R6 6 - 0x5C1C0800, // 0013 MOVE R7 R4 - 0x24200F06, // 0014 GT R8 R7 K6 - 0x78220005, // 0015 JMPF R8 #001C - 0x08200C06, // 0016 MUL R8 R6 R6 - 0x54261FFF, // 0017 LDINT R9 8192 - 0x0C201009, // 0018 DIV R8 R8 R9 - 0x5C181000, // 0019 MOVE R6 R8 - 0x041C0F06, // 001A SUB R7 R7 K6 - 0x7001FFF7, // 001B JMP #0014 - 0xB8221800, // 001C GETNGBL R8 K12 - 0x8C20110D, // 001D GETMET R8 R8 K13 - 0x5C280C00, // 001E MOVE R10 R6 - 0x582C000E, // 001F LDCONST R11 K14 - 0x54321FFF, // 0020 LDINT R12 8192 - 0x5834000E, // 0021 LDCONST R13 K14 - 0x543A00FE, // 0022 LDINT R14 255 - 0x7C200C00, // 0023 CALL R8 6 - 0x5C141000, // 0024 MOVE R5 R8 - 0xB81A1800, // 0025 GETNGBL R6 K12 - 0x8C180D0D, // 0026 GETMET R6 R6 K13 - 0x5C200A00, // 0027 MOVE R8 R5 - 0x5824000E, // 0028 LDCONST R9 K14 - 0x542A00FE, // 0029 LDINT R10 255 - 0x882C0102, // 002A GETMBR R11 R0 K2 - 0x88300103, // 002B GETMBR R12 R0 K3 - 0x7C180C00, // 002C CALL R6 6 - 0x881C0101, // 002D GETMBR R7 R0 K1 - 0x54220017, // 002E LDINT R8 24 - 0x3C200E08, // 002F SHR R8 R7 R8 - 0x542600FE, // 0030 LDINT R9 255 - 0x2C201009, // 0031 AND R8 R8 R9 - 0x5426000F, // 0032 LDINT R9 16 - 0x3C240E09, // 0033 SHR R9 R7 R9 - 0x542A00FE, // 0034 LDINT R10 255 - 0x2C24120A, // 0035 AND R9 R9 R10 - 0x542A0007, // 0036 LDINT R10 8 - 0x3C280E0A, // 0037 SHR R10 R7 R10 - 0x542E00FE, // 0038 LDINT R11 255 - 0x2C28140B, // 0039 AND R10 R10 R11 - 0x542E00FE, // 003A LDINT R11 255 - 0x2C2C0E0B, // 003B AND R11 R7 R11 - 0xB8321800, // 003C GETNGBL R12 K12 - 0x8C30190D, // 003D GETMET R12 R12 K13 - 0x5C381200, // 003E MOVE R14 R9 - 0x583C000E, // 003F LDCONST R15 K14 - 0x544200FE, // 0040 LDINT R16 255 - 0x5844000E, // 0041 LDCONST R17 K14 - 0x5C480C00, // 0042 MOVE R18 R6 - 0x7C300C00, // 0043 CALL R12 6 - 0x5C241800, // 0044 MOVE R9 R12 - 0xB8321800, // 0045 GETNGBL R12 K12 - 0x8C30190D, // 0046 GETMET R12 R12 K13 - 0x5C381400, // 0047 MOVE R14 R10 - 0x583C000E, // 0048 LDCONST R15 K14 - 0x544200FE, // 0049 LDINT R16 255 - 0x5844000E, // 004A LDCONST R17 K14 - 0x5C480C00, // 004B MOVE R18 R6 - 0x7C300C00, // 004C CALL R12 6 - 0x5C281800, // 004D MOVE R10 R12 - 0xB8321800, // 004E GETNGBL R12 K12 - 0x8C30190D, // 004F GETMET R12 R12 K13 - 0x5C381600, // 0050 MOVE R14 R11 - 0x583C000E, // 0051 LDCONST R15 K14 - 0x544200FE, // 0052 LDINT R16 255 - 0x5844000E, // 0053 LDCONST R17 K14 - 0x5C480C00, // 0054 MOVE R18 R6 - 0x7C300C00, // 0055 CALL R12 6 - 0x5C2C1800, // 0056 MOVE R11 R12 - 0x54320017, // 0057 LDINT R12 24 - 0x3830100C, // 0058 SHL R12 R8 R12 - 0x5436000F, // 0059 LDINT R13 16 - 0x3834120D, // 005A SHL R13 R9 R13 - 0x3030180D, // 005B OR R12 R12 R13 - 0x54360007, // 005C LDINT R13 8 - 0x3834140D, // 005D SHL R13 R10 R13 - 0x3030180D, // 005E OR R12 R12 R13 - 0x3030180B, // 005F OR R12 R12 R11 - 0x80041800, // 0060 RET 1 R12 + ( &(const binstruction[56]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x880C0101, // 0001 GETMBR R3 R0 K1 + 0x88100102, // 0002 GETMBR R4 R0 K2 + 0x88140103, // 0003 GETMBR R5 R0 K3 + 0x88140B04, // 0004 GETMBR R5 R5 K4 + 0x88180105, // 0005 GETMBR R6 R0 K5 + 0x04180206, // 0006 SUB R6 R1 R6 + 0x081C0406, // 0007 MUL R7 R2 R6 + 0x081C0E03, // 0008 MUL R7 R7 R3 + 0x542203E7, // 0009 LDINT R8 1000 + 0x0C1C0E08, // 000A DIV R7 R7 R8 + 0x24200706, // 000B GT R8 R3 K6 + 0x78220001, // 000C JMPF R8 #000F + 0x90020E07, // 000D SETMBR R0 K7 R7 + 0x70020004, // 000E JMP #0014 + 0x04200B08, // 000F SUB R8 R5 K8 + 0x542600FF, // 0010 LDINT R9 256 + 0x08201009, // 0011 MUL R8 R8 R9 + 0x00201007, // 0012 ADD R8 R8 R7 + 0x90020E08, // 0013 SETMBR R0 K7 R8 + 0x542200FF, // 0014 LDINT R8 256 + 0x08200A08, // 0015 MUL R8 R5 R8 + 0x20240906, // 0016 NE R9 R4 K6 + 0x7826000E, // 0017 JMPF R9 #0027 + 0x88240107, // 0018 GETMBR R9 R0 K7 + 0x28241208, // 0019 GE R9 R9 R8 + 0x78260003, // 001A JMPF R9 #001F + 0x88240107, // 001B GETMBR R9 R0 K7 + 0x04241208, // 001C SUB R9 R9 R8 + 0x90020E09, // 001D SETMBR R0 K7 R9 + 0x7001FFF8, // 001E JMP #0018 + 0x88240107, // 001F GETMBR R9 R0 K7 + 0x14241306, // 0020 LT R9 R9 K6 + 0x78260003, // 0021 JMPF R9 #0026 + 0x88240107, // 0022 GETMBR R9 R0 K7 + 0x00241208, // 0023 ADD R9 R9 R8 + 0x90020E09, // 0024 SETMBR R0 K7 R9 + 0x7001FFF8, // 0025 JMP #001F + 0x7002000F, // 0026 JMP #0037 + 0x88240107, // 0027 GETMBR R9 R0 K7 + 0x28241208, // 0028 GE R9 R9 R8 + 0x78260006, // 0029 JMPF R9 #0031 + 0x04240B08, // 002A SUB R9 R5 K8 + 0x542A00FF, // 002B LDINT R10 256 + 0x0824120A, // 002C MUL R9 R9 R10 + 0x90020E09, // 002D SETMBR R0 K7 R9 + 0x44240600, // 002E NEG R9 R3 + 0x90020209, // 002F SETMBR R0 K1 R9 + 0x70020005, // 0030 JMP #0037 + 0x88240107, // 0031 GETMBR R9 R0 K7 + 0x14241306, // 0032 LT R9 R9 K6 + 0x78260002, // 0033 JMPF R9 #0037 + 0x90020F06, // 0034 SETMBR R0 K7 K6 + 0x44240600, // 0035 NEG R9 R3 + 0x90020209, // 0036 SETMBR R0 K1 R9 + 0x80000000, // 0037 RET 0 }) ) ); @@ -225,7 +116,7 @@ be_local_closure(class_BreatheColorProvider_produce_value, /* name */ /******************************************************************** ** Solidified function: init ********************************************************************/ -be_local_closure(class_BreatheColorProvider_init, /* name */ +be_local_closure(class_CometAnimation_init, /* name */ be_nested_proto( 5, /* nstack */ 2, /* argc */ @@ -235,25 +126,18 @@ be_local_closure(class_BreatheColorProvider_init, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - &be_ktab_class_BreatheColorProvider, /* shared constants */ + &be_ktab_class_CometAnimation, /* shared constants */ be_str_weak(init), &be_const_str_solidified, - ( &(const binstruction[15]) { /* code */ + ( &(const binstruction[ 8]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 0x7C080200, // 0002 CALL R2 1 - 0x8C08050F, // 0003 GETMET R2 R2 K15 + 0x8C080509, // 0003 GETMET R2 R2 K9 0x5C100200, // 0004 MOVE R4 R1 0x7C080400, // 0005 CALL R2 2 - 0xB80A1000, // 0006 GETNGBL R2 K8 - 0x88080509, // 0007 GETMBR R2 R2 K9 - 0x90020E02, // 0008 SETMBR R0 K7 R2 - 0x9002210E, // 0009 SETMBR R0 K16 K14 - 0x540A00FE, // 000A LDINT R2 255 - 0x90022202, // 000B SETMBR R0 K17 R2 - 0x540A0BB7, // 000C LDINT R2 3000 - 0x90020802, // 000D SETMBR R0 K4 R2 - 0x80000000, // 000E RET 0 + 0x90020F06, // 0006 SETMBR R0 K7 K6 + 0x80000000, // 0007 RET 0 }) ) ); @@ -261,100 +145,233 @@ be_local_closure(class_BreatheColorProvider_init, /* name */ /******************************************************************** -** Solidified class: BreatheColorProvider +** Solidified function: tostring ********************************************************************/ -extern const bclass be_class_OscillatorValueProvider; -be_local_class(BreatheColorProvider, - 0, - &be_class_OscillatorValueProvider, - be_nested_map(5, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(tostring, 1), be_const_closure(class_BreatheColorProvider_tostring_closure) }, - { be_const_key_weak(init, -1), be_const_closure(class_BreatheColorProvider_init_closure) }, - { be_const_key_weak(on_param_changed, -1), be_const_closure(class_BreatheColorProvider_on_param_changed_closure) }, - { be_const_key_weak(PARAMS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { - be_const_map( * be_nested_map(4, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(base_color, -1), be_const_bytes_instance(0400FF) }, - { be_const_key_weak(max_brightness, -1), be_const_bytes_instance(07000001FF0001FF00) }, - { be_const_key_weak(curve_factor, -1), be_const_bytes_instance(07000100050002) }, - { be_const_key_weak(min_brightness, -1), be_const_bytes_instance(07000001FF000000) }, - })) ) } )) }, - { be_const_key_weak(produce_value, -1), be_const_closure(class_BreatheColorProvider_produce_value_closure) }, - })), - be_str_weak(BreatheColorProvider) -); - -/******************************************************************** -** Solidified function: animation_init_strip -********************************************************************/ -be_local_closure(animation_init_strip, /* name */ +be_local_closure(class_CometAnimation_tostring, /* name */ be_nested_proto( - 10, /* nstack */ + 11, /* nstack */ 1, /* argc */ - 1, /* varg */ + 10, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[10]) { /* constants */ - /* K0 */ be_nested_str_weak(global), - /* K1 */ be_nested_str_weak(animation), - /* K2 */ be_nested_str_weak(introspect), - /* K3 */ be_nested_str_weak(contains), - /* K4 */ be_nested_str_weak(_engines), - /* K5 */ be_nested_str_weak(find), - /* K6 */ be_nested_str_weak(stop), - /* K7 */ be_nested_str_weak(clear), - /* K8 */ be_nested_str_weak(Leds), - /* K9 */ be_nested_str_weak(create_engine), - }), - be_str_weak(animation_init_strip), + &be_ktab_class_CometAnimation, /* shared constants */ + be_str_weak(tostring), &be_const_str_solidified, - ( &(const binstruction[37]) { /* code */ - 0xA4060000, // 0000 IMPORT R1 K0 - 0xA40A0200, // 0001 IMPORT R2 K1 - 0xA40E0400, // 0002 IMPORT R3 K2 - 0x8C100703, // 0003 GETMET R4 R3 K3 - 0x5C180400, // 0004 MOVE R6 R2 - 0x581C0004, // 0005 LDCONST R7 K4 - 0x7C100600, // 0006 CALL R4 3 - 0x74120002, // 0007 JMPT R4 #000B - 0x60100013, // 0008 GETGBL R4 G19 - 0x7C100000, // 0009 CALL R4 0 - 0x900A0804, // 000A SETMBR R2 K4 R4 - 0x60100008, // 000B GETGBL R4 G8 - 0x5C140000, // 000C MOVE R5 R0 - 0x7C100200, // 000D CALL R4 1 - 0x88140504, // 000E GETMBR R5 R2 K4 - 0x8C140B05, // 000F GETMET R5 R5 K5 - 0x5C1C0800, // 0010 MOVE R7 R4 - 0x7C140400, // 0011 CALL R5 2 - 0x4C180000, // 0012 LDNIL R6 - 0x20180A06, // 0013 NE R6 R5 R6 - 0x781A0004, // 0014 JMPF R6 #001A - 0x8C180B06, // 0015 GETMET R6 R5 K6 - 0x7C180200, // 0016 CALL R6 1 - 0x8C180B07, // 0017 GETMET R6 R5 K7 - 0x7C180200, // 0018 CALL R6 1 - 0x70020009, // 0019 JMP #0024 - 0x60180016, // 001A GETGBL R6 G22 - 0x881C0308, // 001B GETMBR R7 R1 K8 - 0x5C200000, // 001C MOVE R8 R0 - 0x7C180400, // 001D CALL R6 2 - 0x8C1C0509, // 001E GETMET R7 R2 K9 - 0x5C240C00, // 001F MOVE R9 R6 - 0x7C1C0400, // 0020 CALL R7 2 - 0x5C140E00, // 0021 MOVE R5 R7 - 0x881C0504, // 0022 GETMBR R7 R2 K4 - 0x981C0805, // 0023 SETIDX R7 R4 R5 - 0x80040A00, // 0024 RET 1 R5 + ( &(const binstruction[29]) { /* code */ + 0x4C040000, // 0000 LDNIL R1 + 0xB80A1400, // 0001 GETNGBL R2 K10 + 0x8C08050B, // 0002 GETMET R2 R2 K11 + 0x8810010C, // 0003 GETMBR R4 R0 K12 + 0x7C080400, // 0004 CALL R2 2 + 0x780A0004, // 0005 JMPF R2 #000B + 0x60080008, // 0006 GETGBL R2 G8 + 0x880C010C, // 0007 GETMBR R3 R0 K12 + 0x7C080200, // 0008 CALL R2 1 + 0x5C040400, // 0009 MOVE R1 R2 + 0x70020004, // 000A JMP #0010 + 0x60080018, // 000B GETGBL R2 G24 + 0x580C000D, // 000C LDCONST R3 K13 + 0x8810010C, // 000D GETMBR R4 R0 K12 + 0x7C080400, // 000E CALL R2 2 + 0x5C040400, // 000F MOVE R1 R2 + 0x60080018, // 0010 GETGBL R2 G24 + 0x580C000E, // 0011 LDCONST R3 K14 + 0x5C100200, // 0012 MOVE R4 R1 + 0x88140107, // 0013 GETMBR R5 R0 K7 + 0x541A00FF, // 0014 LDINT R6 256 + 0x0C140A06, // 0015 DIV R5 R5 R6 + 0x8818010F, // 0016 GETMBR R6 R0 K15 + 0x881C0100, // 0017 GETMBR R7 R0 K0 + 0x88200101, // 0018 GETMBR R8 R0 K1 + 0x88240110, // 0019 GETMBR R9 R0 K16 + 0x88280111, // 001A GETMBR R10 R0 K17 + 0x7C081000, // 001B CALL R2 8 + 0x80040400, // 001C RET 1 R2 }) ) ); /*******************************************************************/ + +/******************************************************************** +** Solidified function: render +********************************************************************/ +be_local_closure(class_CometAnimation_render, /* name */ + be_nested_proto( + 25, /* nstack */ + 4, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CometAnimation, /* shared constants */ + be_str_weak(render), + &be_const_str_solidified, + ( &(const binstruction[83]) { /* code */ + 0x88100107, // 0000 GETMBR R4 R0 K7 + 0x541600FF, // 0001 LDINT R5 256 + 0x0C100805, // 0002 DIV R4 R4 R5 + 0x8814010C, // 0003 GETMBR R5 R0 K12 + 0x8818010F, // 0004 GETMBR R6 R0 K15 + 0x881C0101, // 0005 GETMBR R7 R0 K1 + 0x88200102, // 0006 GETMBR R8 R0 K2 + 0x88240112, // 0007 GETMBR R9 R0 K18 + 0x542A0017, // 0008 LDINT R10 24 + 0x3C280A0A, // 0009 SHR R10 R5 R10 + 0x542E00FE, // 000A LDINT R11 255 + 0x2C28140B, // 000B AND R10 R10 R11 + 0x542E000F, // 000C LDINT R11 16 + 0x3C2C0A0B, // 000D SHR R11 R5 R11 + 0x543200FE, // 000E LDINT R12 255 + 0x2C2C160C, // 000F AND R11 R11 R12 + 0x54320007, // 0010 LDINT R12 8 + 0x3C300A0C, // 0011 SHR R12 R5 R12 + 0x543600FE, // 0012 LDINT R13 255 + 0x2C30180D, // 0013 AND R12 R12 R13 + 0x543600FE, // 0014 LDINT R13 255 + 0x2C340A0D, // 0015 AND R13 R5 R13 + 0x58380006, // 0016 LDCONST R14 K6 + 0x143C1C06, // 0017 LT R15 R14 R6 + 0x783E0037, // 0018 JMPF R15 #0051 + 0x083C1C07, // 0019 MUL R15 R14 R7 + 0x043C080F, // 001A SUB R15 R4 R15 + 0x20401106, // 001B NE R16 R8 K6 + 0x78420008, // 001C JMPF R16 #0026 + 0x28401E03, // 001D GE R16 R15 R3 + 0x78420001, // 001E JMPF R16 #0021 + 0x043C1E03, // 001F SUB R15 R15 R3 + 0x7001FFFB, // 0020 JMP #001D + 0x14401F06, // 0021 LT R16 R15 K6 + 0x78420001, // 0022 JMPF R16 #0025 + 0x003C1E03, // 0023 ADD R15 R15 R3 + 0x7001FFFB, // 0024 JMP #0021 + 0x70020005, // 0025 JMP #002C + 0x14401F06, // 0026 LT R16 R15 K6 + 0x74420001, // 0027 JMPT R16 #002A + 0x28401E03, // 0028 GE R16 R15 R3 + 0x78420001, // 0029 JMPF R16 #002C + 0x00381D08, // 002A ADD R14 R14 K8 + 0x7001FFEA, // 002B JMP #0017 + 0x544200FE, // 002C LDINT R16 255 + 0x24441D06, // 002D GT R17 R14 K6 + 0x7846000D, // 002E JMPF R17 #003D + 0x58440006, // 002F LDCONST R17 K6 + 0x1448220E, // 0030 LT R18 R17 R14 + 0x784A000A, // 0031 JMPF R18 #003D + 0xB84A2600, // 0032 GETNGBL R18 K19 + 0x8C482514, // 0033 GETMET R18 R18 K20 + 0x5C502000, // 0034 MOVE R20 R16 + 0x58540006, // 0035 LDCONST R21 K6 + 0x545A00FE, // 0036 LDINT R22 255 + 0x585C0006, // 0037 LDCONST R23 K6 + 0x5C601200, // 0038 MOVE R24 R9 + 0x7C480C00, // 0039 CALL R18 6 + 0x5C402400, // 003A MOVE R16 R18 + 0x00442308, // 003B ADD R17 R17 K8 + 0x7001FFF2, // 003C JMP #0030 + 0x54460017, // 003D LDINT R17 24 + 0x38442011, // 003E SHL R17 R16 R17 + 0x544A000F, // 003F LDINT R18 16 + 0x38481612, // 0040 SHL R18 R11 R18 + 0x30442212, // 0041 OR R17 R17 R18 + 0x544A0007, // 0042 LDINT R18 8 + 0x38481812, // 0043 SHL R18 R12 R18 + 0x30442212, // 0044 OR R17 R17 R18 + 0x3044220D, // 0045 OR R17 R17 R13 + 0x28481F06, // 0046 GE R18 R15 K6 + 0x784A0006, // 0047 JMPF R18 #004F + 0x88480315, // 0048 GETMBR R18 R1 K21 + 0x14481E12, // 0049 LT R18 R15 R18 + 0x784A0003, // 004A JMPF R18 #004F + 0x8C480316, // 004B GETMET R18 R1 K22 + 0x5C501E00, // 004C MOVE R20 R15 + 0x5C542200, // 004D MOVE R21 R17 + 0x7C480600, // 004E CALL R18 3 + 0x00381D08, // 004F ADD R14 R14 K8 + 0x7001FFC5, // 0050 JMP #0017 + 0x503C0200, // 0051 LDBOOL R15 1 0 + 0x80041E00, // 0052 RET 1 R15 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: on_param_changed +********************************************************************/ +be_local_closure(class_CometAnimation_on_param_changed, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CometAnimation, /* shared constants */ + be_str_weak(on_param_changed), + &be_const_str_solidified, + ( &(const binstruction[20]) { /* code */ + 0x600C0003, // 0000 GETGBL R3 G3 + 0x5C100000, // 0001 MOVE R4 R0 + 0x7C0C0200, // 0002 CALL R3 1 + 0x8C0C0717, // 0003 GETMET R3 R3 K23 + 0x5C140200, // 0004 MOVE R5 R1 + 0x5C180400, // 0005 MOVE R6 R2 + 0x7C0C0600, // 0006 CALL R3 3 + 0x1C0C0301, // 0007 EQ R3 R1 K1 + 0x780E0009, // 0008 JMPF R3 #0013 + 0x880C0103, // 0009 GETMBR R3 R0 K3 + 0x880C0704, // 000A GETMBR R3 R3 K4 + 0x24100506, // 000B GT R4 R2 K6 + 0x78120001, // 000C JMPF R4 #000F + 0x90020F06, // 000D SETMBR R0 K7 K6 + 0x70020003, // 000E JMP #0013 + 0x04100708, // 000F SUB R4 R3 K8 + 0x541600FF, // 0010 LDINT R5 256 + 0x08100805, // 0011 MUL R4 R4 R5 + 0x90020E04, // 0012 SETMBR R0 K7 R4 + 0x80000000, // 0013 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: CometAnimation +********************************************************************/ +extern const bclass be_class_Animation; +be_local_class(CometAnimation, + 1, + &be_class_Animation, + be_nested_map(7, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(init, -1), be_const_closure(class_CometAnimation_init_closure) }, + { be_const_key_weak(update, -1), be_const_closure(class_CometAnimation_update_closure) }, + { be_const_key_weak(PARAMS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { + be_const_map( * be_nested_map(5, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(fade_factor, -1), be_const_bytes_instance(07000001FF0001B300) }, + { be_const_key_weak(wrap_around, -1), be_const_bytes_instance(07000000010001) }, + { be_const_key_weak(direction, -1), be_const_bytes_instance(1400010200FF0001) }, + { be_const_key_weak(speed, 0), be_const_bytes_instance(07000101006401000A) }, + { be_const_key_weak(tail_length, -1), be_const_bytes_instance(07000100320005) }, + })) ) } )) }, + { be_const_key_weak(tostring, -1), be_const_closure(class_CometAnimation_tostring_closure) }, + { be_const_key_weak(render, 0), be_const_closure(class_CometAnimation_render_closure) }, + { be_const_key_weak(head_position, 2), be_const_var(0) }, + { be_const_key_weak(on_param_changed, -1), be_const_closure(class_CometAnimation_on_param_changed_closure) }, + })), + be_str_weak(CometAnimation) +); // compact class 'BreatheAnimation' ktab size: 20, total: 30 (saved 80 bytes) static const bvalue be_ktab_class_BreatheAnimation[20] = { /* K0 */ be_nested_str_weak(on_param_changed), @@ -584,217 +601,78 @@ be_local_class(BreatheAnimation, })), be_str_weak(BreatheAnimation) ); -// compact class 'RichPaletteAnimation' ktab size: 15, total: 19 (saved 32 bytes) -static const bvalue be_ktab_class_RichPaletteAnimation[15] = { - /* K0 */ be_nested_str_weak(on_param_changed), - /* K1 */ be_nested_str_weak(palette), - /* K2 */ be_nested_str_weak(cycle_period), - /* K3 */ be_nested_str_weak(transition_type), - /* K4 */ be_nested_str_weak(brightness), - /* K5 */ be_nested_str_weak(color_provider), - /* K6 */ be_nested_str_weak(set_param), - /* K7 */ be_nested_str_weak(RichPaletteAnimation_X28cycle_period_X3D_X25s_X2C_X20brightness_X3D_X25s_X29), - /* K8 */ be_nested_str_weak(RichPaletteAnimation_X28uninitialized_X29), - /* K9 */ be_nested_str_weak(init), - /* K10 */ be_nested_str_weak(animation), - /* K11 */ be_nested_str_weak(rich_palette), - /* K12 */ be_nested_str_weak(values), - /* K13 */ be_nested_str_weak(color), - /* K14 */ be_nested_str_weak(start), -}; - - -extern const bclass be_class_RichPaletteAnimation; /******************************************************************** -** Solidified function: on_param_changed +** Solidified function: animation_init_strip ********************************************************************/ -be_local_closure(class_RichPaletteAnimation_on_param_changed, /* name */ +be_local_closure(animation_init_strip, /* name */ be_nested_proto( - 7, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_RichPaletteAnimation, /* shared constants */ - be_str_weak(on_param_changed), - &be_const_str_solidified, - ( &(const binstruction[29]) { /* code */ - 0x600C0003, // 0000 GETGBL R3 G3 - 0x5C100000, // 0001 MOVE R4 R0 - 0x7C0C0200, // 0002 CALL R3 1 - 0x8C0C0700, // 0003 GETMET R3 R3 K0 - 0x5C140200, // 0004 MOVE R5 R1 - 0x5C180400, // 0005 MOVE R6 R2 - 0x7C0C0600, // 0006 CALL R3 3 - 0x1C0C0301, // 0007 EQ R3 R1 K1 - 0x740E0005, // 0008 JMPT R3 #000F - 0x1C0C0302, // 0009 EQ R3 R1 K2 - 0x740E0003, // 000A JMPT R3 #000F - 0x1C0C0303, // 000B EQ R3 R1 K3 - 0x740E0001, // 000C JMPT R3 #000F - 0x1C0C0304, // 000D EQ R3 R1 K4 - 0x780E0005, // 000E JMPF R3 #0015 - 0x880C0105, // 000F GETMBR R3 R0 K5 - 0x8C0C0706, // 0010 GETMET R3 R3 K6 - 0x5C140200, // 0011 MOVE R5 R1 - 0x5C180400, // 0012 MOVE R6 R2 - 0x7C0C0600, // 0013 CALL R3 3 - 0x70020006, // 0014 JMP #001C - 0x600C0003, // 0015 GETGBL R3 G3 - 0x5C100000, // 0016 MOVE R4 R0 - 0x7C0C0200, // 0017 CALL R3 1 - 0x8C0C0700, // 0018 GETMET R3 R3 K0 - 0x5C140200, // 0019 MOVE R5 R1 - 0x5C180400, // 001A MOVE R6 R2 - 0x7C0C0600, // 001B CALL R3 3 - 0x80000000, // 001C RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: tostring -********************************************************************/ -be_local_closure(class_RichPaletteAnimation_tostring, /* name */ - be_nested_proto( - 5, /* nstack */ + 10, /* nstack */ 1, /* argc */ - 10, /* varg */ + 1, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - &be_ktab_class_RichPaletteAnimation, /* shared constants */ - be_str_weak(tostring), + ( &(const bvalue[10]) { /* constants */ + /* K0 */ be_nested_str_weak(global), + /* K1 */ be_nested_str_weak(animation), + /* K2 */ be_nested_str_weak(introspect), + /* K3 */ be_nested_str_weak(contains), + /* K4 */ be_nested_str_weak(_engines), + /* K5 */ be_nested_str_weak(find), + /* K6 */ be_nested_str_weak(stop), + /* K7 */ be_nested_str_weak(clear), + /* K8 */ be_nested_str_weak(Leds), + /* K9 */ be_nested_str_weak(create_engine), + }), + be_str_weak(animation_init_strip), &be_const_str_solidified, - ( &(const binstruction[16]) { /* code */ - 0xA8020008, // 0000 EXBLK 0 #000A - 0x60040018, // 0001 GETGBL R1 G24 - 0x58080007, // 0002 LDCONST R2 K7 - 0x880C0102, // 0003 GETMBR R3 R0 K2 - 0x88100104, // 0004 GETMBR R4 R0 K4 - 0x7C040600, // 0005 CALL R1 3 - 0xA8040001, // 0006 EXBLK 1 1 - 0x80040200, // 0007 RET 1 R1 - 0xA8040001, // 0008 EXBLK 1 1 - 0x70020004, // 0009 JMP #000F - 0xAC040000, // 000A CATCH R1 0 0 - 0x70020001, // 000B JMP #000E - 0x80061000, // 000C RET 1 K8 - 0x70020000, // 000D JMP #000F - 0xB0080000, // 000E RAISE 2 R0 R0 - 0x80000000, // 000F RET 0 + ( &(const binstruction[37]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0xA40E0400, // 0002 IMPORT R3 K2 + 0x8C100703, // 0003 GETMET R4 R3 K3 + 0x5C180400, // 0004 MOVE R6 R2 + 0x581C0004, // 0005 LDCONST R7 K4 + 0x7C100600, // 0006 CALL R4 3 + 0x74120002, // 0007 JMPT R4 #000B + 0x60100013, // 0008 GETGBL R4 G19 + 0x7C100000, // 0009 CALL R4 0 + 0x900A0804, // 000A SETMBR R2 K4 R4 + 0x60100008, // 000B GETGBL R4 G8 + 0x5C140000, // 000C MOVE R5 R0 + 0x7C100200, // 000D CALL R4 1 + 0x88140504, // 000E GETMBR R5 R2 K4 + 0x8C140B05, // 000F GETMET R5 R5 K5 + 0x5C1C0800, // 0010 MOVE R7 R4 + 0x7C140400, // 0011 CALL R5 2 + 0x4C180000, // 0012 LDNIL R6 + 0x20180A06, // 0013 NE R6 R5 R6 + 0x781A0004, // 0014 JMPF R6 #001A + 0x8C180B06, // 0015 GETMET R6 R5 K6 + 0x7C180200, // 0016 CALL R6 1 + 0x8C180B07, // 0017 GETMET R6 R5 K7 + 0x7C180200, // 0018 CALL R6 1 + 0x70020009, // 0019 JMP #0024 + 0x60180016, // 001A GETGBL R6 G22 + 0x881C0308, // 001B GETMBR R7 R1 K8 + 0x5C200000, // 001C MOVE R8 R0 + 0x7C180400, // 001D CALL R6 2 + 0x8C1C0509, // 001E GETMET R7 R2 K9 + 0x5C240C00, // 001F MOVE R9 R6 + 0x7C1C0400, // 0020 CALL R7 2 + 0x5C140E00, // 0021 MOVE R5 R7 + 0x881C0504, // 0022 GETMBR R7 R2 K4 + 0x981C0805, // 0023 SETIDX R7 R4 R5 + 0x80040A00, // 0024 RET 1 R5 }) ) ); /*******************************************************************/ -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(class_RichPaletteAnimation_init, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_RichPaletteAnimation, /* shared constants */ - be_str_weak(init), - &be_const_str_solidified, - ( &(const binstruction[15]) { /* code */ - 0x60080003, // 0000 GETGBL R2 G3 - 0x5C0C0000, // 0001 MOVE R3 R0 - 0x7C080200, // 0002 CALL R2 1 - 0x8C080509, // 0003 GETMET R2 R2 K9 - 0x5C100200, // 0004 MOVE R4 R1 - 0x7C080400, // 0005 CALL R2 2 - 0xB80A1400, // 0006 GETNGBL R2 K10 - 0x8C08050B, // 0007 GETMET R2 R2 K11 - 0x5C100200, // 0008 MOVE R4 R1 - 0x7C080400, // 0009 CALL R2 2 - 0x90020A02, // 000A SETMBR R0 K5 R2 - 0x8808010C, // 000B GETMBR R2 R0 K12 - 0x880C0105, // 000C GETMBR R3 R0 K5 - 0x980A1A03, // 000D SETIDX R2 K13 R3 - 0x80000000, // 000E RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: start -********************************************************************/ -be_local_closure(class_RichPaletteAnimation_start, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_RichPaletteAnimation, /* shared constants */ - be_str_weak(start), - &be_const_str_solidified, - ( &(const binstruction[11]) { /* code */ - 0x60080003, // 0000 GETGBL R2 G3 - 0x5C0C0000, // 0001 MOVE R3 R0 - 0x7C080200, // 0002 CALL R2 1 - 0x8C08050E, // 0003 GETMET R2 R2 K14 - 0x5C100200, // 0004 MOVE R4 R1 - 0x7C080400, // 0005 CALL R2 2 - 0x88080105, // 0006 GETMBR R2 R0 K5 - 0x8C08050E, // 0007 GETMET R2 R2 K14 - 0x5C100200, // 0008 MOVE R4 R1 - 0x7C080400, // 0009 CALL R2 2 - 0x80040000, // 000A RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: RichPaletteAnimation -********************************************************************/ -extern const bclass be_class_Animation; -be_local_class(RichPaletteAnimation, - 1, - &be_class_Animation, - be_nested_map(6, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(tostring, -1), be_const_closure(class_RichPaletteAnimation_tostring_closure) }, - { be_const_key_weak(on_param_changed, 0), be_const_closure(class_RichPaletteAnimation_on_param_changed_closure) }, - { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { - be_const_map( * be_nested_map(4, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(palette, -1), be_const_bytes_instance(0C0605) }, - { be_const_key_weak(transition_type, -1), be_const_bytes_instance(1400050200010005) }, - { be_const_key_weak(brightness, -1), be_const_bytes_instance(07000001FF0001FF00) }, - { be_const_key_weak(cycle_period, 1), be_const_bytes_instance(050000018813) }, - })) ) } )) }, - { be_const_key_weak(init, 2), be_const_closure(class_RichPaletteAnimation_init_closure) }, - { be_const_key_weak(color_provider, -1), be_const_var(0) }, - { be_const_key_weak(start, -1), be_const_closure(class_RichPaletteAnimation_start_closure) }, - })), - be_str_weak(RichPaletteAnimation) -); - /******************************************************************** ** Solidified function: square ********************************************************************/ @@ -1880,6 +1758,174 @@ be_local_class(NoiseAnimation, })), be_str_weak(NoiseAnimation) ); +// compact class 'RichPaletteAnimation' ktab size: 13, total: 15 (saved 16 bytes) +static const bvalue be_ktab_class_RichPaletteAnimation[13] = { + /* K0 */ be_nested_str_weak(init), + /* K1 */ be_nested_str_weak(color_provider), + /* K2 */ be_nested_str_weak(animation), + /* K3 */ be_nested_str_weak(rich_palette), + /* K4 */ be_nested_str_weak(values), + /* K5 */ be_nested_str_weak(color), + /* K6 */ be_nested_str_weak(start), + /* K7 */ be_nested_str_weak(on_param_changed), + /* K8 */ be_nested_str_weak(palette), + /* K9 */ be_nested_str_weak(cycle_period), + /* K10 */ be_nested_str_weak(transition_type), + /* K11 */ be_nested_str_weak(brightness), + /* K12 */ be_nested_str_weak(set_param), +}; + + +extern const bclass be_class_RichPaletteAnimation; + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(class_RichPaletteAnimation_init, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_RichPaletteAnimation, /* shared constants */ + be_str_weak(init), + &be_const_str_solidified, + ( &(const binstruction[15]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080500, // 0003 GETMET R2 R2 K0 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0xB80A0400, // 0006 GETNGBL R2 K2 + 0x8C080503, // 0007 GETMET R2 R2 K3 + 0x5C100200, // 0008 MOVE R4 R1 + 0x7C080400, // 0009 CALL R2 2 + 0x90020202, // 000A SETMBR R0 K1 R2 + 0x88080104, // 000B GETMBR R2 R0 K4 + 0x880C0101, // 000C GETMBR R3 R0 K1 + 0x980A0A03, // 000D SETIDX R2 K5 R3 + 0x80000000, // 000E RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: start +********************************************************************/ +be_local_closure(class_RichPaletteAnimation_start, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_RichPaletteAnimation, /* shared constants */ + be_str_weak(start), + &be_const_str_solidified, + ( &(const binstruction[11]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080506, // 0003 GETMET R2 R2 K6 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x88080101, // 0006 GETMBR R2 R0 K1 + 0x8C080506, // 0007 GETMET R2 R2 K6 + 0x5C100200, // 0008 MOVE R4 R1 + 0x7C080400, // 0009 CALL R2 2 + 0x80040000, // 000A RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: on_param_changed +********************************************************************/ +be_local_closure(class_RichPaletteAnimation_on_param_changed, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_RichPaletteAnimation, /* shared constants */ + be_str_weak(on_param_changed), + &be_const_str_solidified, + ( &(const binstruction[29]) { /* code */ + 0x600C0003, // 0000 GETGBL R3 G3 + 0x5C100000, // 0001 MOVE R4 R0 + 0x7C0C0200, // 0002 CALL R3 1 + 0x8C0C0707, // 0003 GETMET R3 R3 K7 + 0x5C140200, // 0004 MOVE R5 R1 + 0x5C180400, // 0005 MOVE R6 R2 + 0x7C0C0600, // 0006 CALL R3 3 + 0x1C0C0308, // 0007 EQ R3 R1 K8 + 0x740E0005, // 0008 JMPT R3 #000F + 0x1C0C0309, // 0009 EQ R3 R1 K9 + 0x740E0003, // 000A JMPT R3 #000F + 0x1C0C030A, // 000B EQ R3 R1 K10 + 0x740E0001, // 000C JMPT R3 #000F + 0x1C0C030B, // 000D EQ R3 R1 K11 + 0x780E0005, // 000E JMPF R3 #0015 + 0x880C0101, // 000F GETMBR R3 R0 K1 + 0x8C0C070C, // 0010 GETMET R3 R3 K12 + 0x5C140200, // 0011 MOVE R5 R1 + 0x5C180400, // 0012 MOVE R6 R2 + 0x7C0C0600, // 0013 CALL R3 3 + 0x70020006, // 0014 JMP #001C + 0x600C0003, // 0015 GETGBL R3 G3 + 0x5C100000, // 0016 MOVE R4 R0 + 0x7C0C0200, // 0017 CALL R3 1 + 0x8C0C0707, // 0018 GETMET R3 R3 K7 + 0x5C140200, // 0019 MOVE R5 R1 + 0x5C180400, // 001A MOVE R6 R2 + 0x7C0C0600, // 001B CALL R3 3 + 0x80000000, // 001C RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: RichPaletteAnimation +********************************************************************/ +extern const bclass be_class_Animation; +be_local_class(RichPaletteAnimation, + 1, + &be_class_Animation, + be_nested_map(5, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(init, -1), be_const_closure(class_RichPaletteAnimation_init_closure) }, + { be_const_key_weak(start, -1), be_const_closure(class_RichPaletteAnimation_start_closure) }, + { be_const_key_weak(on_param_changed, 4), be_const_closure(class_RichPaletteAnimation_on_param_changed_closure) }, + { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { + be_const_map( * be_nested_map(4, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(palette, -1), be_const_bytes_instance(0C0605) }, + { be_const_key_weak(transition_type, -1), be_const_bytes_instance(1400050200010005) }, + { be_const_key_weak(brightness, -1), be_const_bytes_instance(07000001FF0001FF00) }, + { be_const_key_weak(cycle_period, 1), be_const_bytes_instance(050000018813) }, + })) ) } )) }, + { be_const_key_weak(color_provider, -1), be_const_var(0) }, + })), + be_str_weak(RichPaletteAnimation) +); /******************************************************************** ** Solidified function: encode_constraints @@ -2351,42 +2397,6 @@ be_local_closure(trigger_event, /* name */ ); /*******************************************************************/ - -/******************************************************************** -** Solidified function: triangle -********************************************************************/ -be_local_closure(triangle, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 4]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(oscillator_value), - /* K2 */ be_nested_str_weak(form), - /* K3 */ be_nested_str_weak(TRIANGLE), - }), - be_str_weak(triangle), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0xB80A0000, // 0004 GETNGBL R2 K0 - 0x88080503, // 0005 GETMBR R2 R2 K3 - 0x90060402, // 0006 SETMBR R1 K2 R2 - 0x80040200, // 0007 RET 1 R1 - }) - ) -); -/*******************************************************************/ - // compact class 'StripLengthProvider' ktab size: 4, total: 6 (saved 16 bytes) static const bvalue be_ktab_class_StripLengthProvider[4] = { /* K0 */ be_nested_str_weak(engine), @@ -2507,8 +2517,40 @@ be_local_closure(unregister_event_handler, /* name */ ); /*******************************************************************/ -// compact class 'ColorCycleColorProvider' ktab size: 25, total: 52 (saved 216 bytes) -static const bvalue be_ktab_class_ColorCycleColorProvider[25] = { + +/******************************************************************** +** Solidified function: is_value_provider +********************************************************************/ +be_local_closure(is_value_provider, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(value_provider), + }), + be_str_weak(is_value_provider), + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x6004000F, // 0000 GETGBL R1 G15 + 0x5C080000, // 0001 MOVE R2 R0 + 0xB80E0000, // 0002 GETNGBL R3 K0 + 0x880C0701, // 0003 GETMBR R3 R3 K1 + 0x7C040400, // 0004 CALL R1 2 + 0x80040200, // 0005 RET 1 R1 + }) + ) +); +/*******************************************************************/ + +// compact class 'ColorCycleColorProvider' ktab size: 27, total: 54 (saved 216 bytes) +static const bvalue be_ktab_class_ColorCycleColorProvider[27] = { /* K0 */ be_nested_str_weak(cycle_period), /* K1 */ be_nested_str_weak(_get_palette_size), /* K2 */ be_const_int(1), @@ -2532,8 +2574,10 @@ static const bvalue be_ktab_class_ColorCycleColorProvider[25] = { /* K20 */ be_nested_str_weak(_adjust_index), /* K21 */ be_nested_str_weak(member), /* K22 */ be_nested_str_weak(init), - /* K23 */ be_nested_str_weak(get), - /* K24 */ be_const_int(-16777216), + /* K23 */ be_nested_str_weak(animation), + /* K24 */ be_nested_str_weak(PALETTE_RAINBOW), + /* K25 */ be_nested_str_weak(get), + /* K26 */ be_const_int(-16777216), }; @@ -2890,7 +2934,7 @@ be_local_closure(class_ColorCycleColorProvider_get_color_for_value, /* name */ ********************************************************************/ be_local_closure(class_ColorCycleColorProvider_init, /* name */ be_nested_proto( - 6, /* nstack */ + 5, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -2901,20 +2945,22 @@ be_local_closure(class_ColorCycleColorProvider_init, /* name */ &be_ktab_class_ColorCycleColorProvider, /* shared constants */ be_str_weak(init), &be_const_str_solidified, - ( &(const binstruction[13]) { /* code */ + ( &(const binstruction[15]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 0x7C080200, // 0002 CALL R2 1 0x8C080516, // 0003 GETMET R2 R2 K22 0x5C100200, // 0004 MOVE R4 R1 0x7C080400, // 0005 CALL R2 2 - 0x8808010D, // 0006 GETMBR R2 R0 K13 - 0x90020903, // 0007 SETMBR R0 K4 K3 - 0x880C0110, // 0008 GETMBR R3 R0 K16 - 0x8C100101, // 0009 GETMET R4 R0 K1 - 0x7C100200, // 000A CALL R4 1 - 0x980E1E04, // 000B SETIDX R3 K15 R4 - 0x80000000, // 000C RET 0 + 0xB80A2E00, // 0006 GETNGBL R2 K23 + 0x88080518, // 0007 GETMBR R2 R2 K24 + 0x90021A02, // 0008 SETMBR R0 K13 R2 + 0x90020903, // 0009 SETMBR R0 K4 K3 + 0x88080110, // 000A GETMBR R2 R0 K16 + 0x8C0C0101, // 000B GETMET R3 R0 K1 + 0x7C0C0200, // 000C CALL R3 1 + 0x980A1E03, // 000D SETIDX R2 K15 R3 + 0x80000000, // 000E RET 0 }) ) ); @@ -2951,12 +2997,12 @@ be_local_closure(class_ColorCycleColorProvider__get_color_at_index, /* name */ 0x14100303, // 000A LT R4 R1 K3 0x78120000, // 000B JMPF R4 #000D 0x80060600, // 000C RET 1 K3 - 0x8C100517, // 000D GETMET R4 R2 K23 + 0x8C100519, // 000D GETMET R4 R2 K25 0x541A0003, // 000E LDINT R6 4 0x08180206, // 000F MUL R6 R1 R6 0x541DFFFB, // 0010 LDINT R7 -4 0x7C100600, // 0011 CALL R4 3 - 0x30100918, // 0012 OR R4 R4 K24 + 0x3010091A, // 0012 OR R4 R4 K26 0x80040800, // 0013 RET 1 R4 }) ) @@ -2984,7 +3030,7 @@ be_local_class(ColorCycleColorProvider, { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { be_const_map( * be_nested_map(4, ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(palette, 2), be_const_bytes_instance(0C040C00FF0000FFFF00FF00FFFF000002) }, + { be_const_key_weak(palette, 2), be_const_bytes_instance(0C0602) }, { be_const_key_weak(palette_size, -1), be_const_bytes_instance(0C000300) }, { be_const_key_weak(next, 1), be_const_bytes_instance(040000) }, { be_const_key_weak(cycle_period, -1), be_const_bytes_instance(050000018813) }, @@ -2994,581 +3040,6 @@ be_local_class(ColorCycleColorProvider, })), be_str_weak(ColorCycleColorProvider) ); -// compact class 'EventManager' ktab size: 30, total: 61 (saved 248 bytes) -static const bvalue be_ktab_class_EventManager[30] = { - /* K0 */ be_nested_str_weak(event_name), - /* K1 */ be_nested_str_weak(_X2A), - /* K2 */ be_nested_str_weak(global_handlers), - /* K3 */ be_nested_str_weak(find), - /* K4 */ be_nested_str_weak(remove), - /* K5 */ be_nested_str_weak(handlers), - /* K6 */ be_nested_str_weak(set_active), - /* K7 */ be_nested_str_weak(stop_iteration), - /* K8 */ be_nested_str_weak(push), - /* K9 */ be_nested_str_weak(get_info), - /* K10 */ be_nested_str_weak(keys), - /* K11 */ be_nested_str_weak(event_queue), - /* K12 */ be_nested_str_weak(is_processing), - /* K13 */ be_nested_str_weak(clear), - /* K14 */ be_const_int(1), - /* K15 */ be_const_int(0), - /* K16 */ be_nested_str_weak(priority), - /* K17 */ be_nested_str_weak(animation), - /* K18 */ be_nested_str_weak(event_handler), - /* K19 */ be_nested_str_weak(_sort_handlers), - /* K20 */ be_nested_str_weak(contains), - /* K21 */ be_nested_str_weak(name), - /* K22 */ be_nested_str_weak(data), - /* K23 */ be_nested_str_weak(is_active), - /* K24 */ be_nested_str_weak(execute), - /* K25 */ be_nested_str_weak(Event_X20processing_X20error_X3A), - /* K26 */ be_nested_str_weak(_process_queued_events), - /* K27 */ be_nested_str_weak(size), - /* K28 */ be_nested_str_weak(pop), - /* K29 */ be_nested_str_weak(trigger_event), -}; - - -extern const bclass be_class_EventManager; - -/******************************************************************** -** Solidified function: unregister_handler -********************************************************************/ -be_local_closure(class_EventManager_unregister_handler, /* name */ - be_nested_proto( - 7, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(unregister_handler), - &be_const_str_solidified, - ( &(const binstruction[32]) { /* code */ - 0x88080300, // 0000 GETMBR R2 R1 K0 - 0x1C080501, // 0001 EQ R2 R2 K1 - 0x780A000B, // 0002 JMPF R2 #000F - 0x88080102, // 0003 GETMBR R2 R0 K2 - 0x8C080503, // 0004 GETMET R2 R2 K3 - 0x5C100200, // 0005 MOVE R4 R1 - 0x7C080400, // 0006 CALL R2 2 - 0x4C0C0000, // 0007 LDNIL R3 - 0x200C0403, // 0008 NE R3 R2 R3 - 0x780E0003, // 0009 JMPF R3 #000E - 0x880C0102, // 000A GETMBR R3 R0 K2 - 0x8C0C0704, // 000B GETMET R3 R3 K4 - 0x5C140400, // 000C MOVE R5 R2 - 0x7C0C0400, // 000D CALL R3 2 - 0x7002000F, // 000E JMP #001F - 0x88080105, // 000F GETMBR R2 R0 K5 - 0x8C080503, // 0010 GETMET R2 R2 K3 - 0x88100300, // 0011 GETMBR R4 R1 K0 - 0x7C080400, // 0012 CALL R2 2 - 0x4C0C0000, // 0013 LDNIL R3 - 0x200C0403, // 0014 NE R3 R2 R3 - 0x780E0008, // 0015 JMPF R3 #001F - 0x8C0C0503, // 0016 GETMET R3 R2 K3 - 0x5C140200, // 0017 MOVE R5 R1 - 0x7C0C0400, // 0018 CALL R3 2 - 0x4C100000, // 0019 LDNIL R4 - 0x20100604, // 001A NE R4 R3 R4 - 0x78120002, // 001B JMPF R4 #001F - 0x8C100504, // 001C GETMET R4 R2 K4 - 0x5C180600, // 001D MOVE R6 R3 - 0x7C100400, // 001E CALL R4 2 - 0x80000000, // 001F RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_event_active -********************************************************************/ -be_local_closure(class_EventManager_set_event_active, /* name */ - be_nested_proto( - 9, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(set_event_active), - &be_const_str_solidified, - ( &(const binstruction[21]) { /* code */ - 0x880C0105, // 0000 GETMBR R3 R0 K5 - 0x8C0C0703, // 0001 GETMET R3 R3 K3 - 0x5C140200, // 0002 MOVE R5 R1 - 0x7C0C0400, // 0003 CALL R3 2 - 0x4C100000, // 0004 LDNIL R4 - 0x20100604, // 0005 NE R4 R3 R4 - 0x7812000C, // 0006 JMPF R4 #0014 - 0x60100010, // 0007 GETGBL R4 G16 - 0x5C140600, // 0008 MOVE R5 R3 - 0x7C100200, // 0009 CALL R4 1 - 0xA8020005, // 000A EXBLK 0 #0011 - 0x5C140800, // 000B MOVE R5 R4 - 0x7C140000, // 000C CALL R5 0 - 0x8C180B06, // 000D GETMET R6 R5 K6 - 0x5C200400, // 000E MOVE R8 R2 - 0x7C180400, // 000F CALL R6 2 - 0x7001FFF9, // 0010 JMP #000B - 0x58100007, // 0011 LDCONST R4 K7 - 0xAC100200, // 0012 CATCH R4 1 0 - 0xB0080000, // 0013 RAISE 2 R0 R0 - 0x80000000, // 0014 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_handlers -********************************************************************/ -be_local_closure(class_EventManager_get_handlers, /* name */ - be_nested_proto( - 10, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(get_handlers), - &be_const_str_solidified, - ( &(const binstruction[38]) { /* code */ - 0x60080012, // 0000 GETGBL R2 G18 - 0x7C080000, // 0001 CALL R2 0 - 0x600C0010, // 0002 GETGBL R3 G16 - 0x88100102, // 0003 GETMBR R4 R0 K2 - 0x7C0C0200, // 0004 CALL R3 1 - 0xA8020006, // 0005 EXBLK 0 #000D - 0x5C100600, // 0006 MOVE R4 R3 - 0x7C100000, // 0007 CALL R4 0 - 0x8C140508, // 0008 GETMET R5 R2 K8 - 0x8C1C0909, // 0009 GETMET R7 R4 K9 - 0x7C1C0200, // 000A CALL R7 1 - 0x7C140400, // 000B CALL R5 2 - 0x7001FFF8, // 000C JMP #0006 - 0x580C0007, // 000D LDCONST R3 K7 - 0xAC0C0200, // 000E CATCH R3 1 0 - 0xB0080000, // 000F RAISE 2 R0 R0 - 0x880C0105, // 0010 GETMBR R3 R0 K5 - 0x8C0C0703, // 0011 GETMET R3 R3 K3 - 0x5C140200, // 0012 MOVE R5 R1 - 0x7C0C0400, // 0013 CALL R3 2 - 0x4C100000, // 0014 LDNIL R4 - 0x20100604, // 0015 NE R4 R3 R4 - 0x7812000D, // 0016 JMPF R4 #0025 - 0x60100010, // 0017 GETGBL R4 G16 - 0x5C140600, // 0018 MOVE R5 R3 - 0x7C100200, // 0019 CALL R4 1 - 0xA8020006, // 001A EXBLK 0 #0022 - 0x5C140800, // 001B MOVE R5 R4 - 0x7C140000, // 001C CALL R5 0 - 0x8C180508, // 001D GETMET R6 R2 K8 - 0x8C200B09, // 001E GETMET R8 R5 K9 - 0x7C200200, // 001F CALL R8 1 - 0x7C180400, // 0020 CALL R6 2 - 0x7001FFF8, // 0021 JMP #001B - 0x58100007, // 0022 LDCONST R4 K7 - 0xAC100200, // 0023 CATCH R4 1 0 - 0xB0080000, // 0024 RAISE 2 R0 R0 - 0x80040400, // 0025 RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_registered_events -********************************************************************/ -be_local_closure(class_EventManager_get_registered_events, /* name */ - be_nested_proto( - 7, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(get_registered_events), - &be_const_str_solidified, - ( &(const binstruction[18]) { /* code */ - 0x60040012, // 0000 GETGBL R1 G18 - 0x7C040000, // 0001 CALL R1 0 - 0x60080010, // 0002 GETGBL R2 G16 - 0x880C0105, // 0003 GETMBR R3 R0 K5 - 0x8C0C070A, // 0004 GETMET R3 R3 K10 - 0x7C0C0200, // 0005 CALL R3 1 - 0x7C080200, // 0006 CALL R2 1 - 0xA8020005, // 0007 EXBLK 0 #000E - 0x5C0C0400, // 0008 MOVE R3 R2 - 0x7C0C0000, // 0009 CALL R3 0 - 0x8C100308, // 000A GETMET R4 R1 K8 - 0x5C180600, // 000B MOVE R6 R3 - 0x7C100400, // 000C CALL R4 2 - 0x7001FFF9, // 000D JMP #0008 - 0x58080007, // 000E LDCONST R2 K7 - 0xAC080200, // 000F CATCH R2 1 0 - 0xB0080000, // 0010 RAISE 2 R0 R0 - 0x80040200, // 0011 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(class_EventManager_init, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(init), - &be_const_str_solidified, - ( &(const binstruction[12]) { /* code */ - 0x60040013, // 0000 GETGBL R1 G19 - 0x7C040000, // 0001 CALL R1 0 - 0x90020A01, // 0002 SETMBR R0 K5 R1 - 0x60040012, // 0003 GETGBL R1 G18 - 0x7C040000, // 0004 CALL R1 0 - 0x90020401, // 0005 SETMBR R0 K2 R1 - 0x60040012, // 0006 GETGBL R1 G18 - 0x7C040000, // 0007 CALL R1 0 - 0x90021601, // 0008 SETMBR R0 K11 R1 - 0x50040000, // 0009 LDBOOL R1 0 0 - 0x90021801, // 000A SETMBR R0 K12 R1 - 0x80000000, // 000B RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: clear_all_handlers -********************************************************************/ -be_local_closure(class_EventManager_clear_all_handlers, /* name */ - be_nested_proto( - 3, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(clear_all_handlers), - &be_const_str_solidified, - ( &(const binstruction[10]) { /* code */ - 0x88040105, // 0000 GETMBR R1 R0 K5 - 0x8C04030D, // 0001 GETMET R1 R1 K13 - 0x7C040200, // 0002 CALL R1 1 - 0x88040102, // 0003 GETMBR R1 R0 K2 - 0x8C04030D, // 0004 GETMET R1 R1 K13 - 0x7C040200, // 0005 CALL R1 1 - 0x8804010B, // 0006 GETMBR R1 R0 K11 - 0x8C04030D, // 0007 GETMET R1 R1 K13 - 0x7C040200, // 0008 CALL R1 1 - 0x80000000, // 0009 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: _sort_handlers -********************************************************************/ -be_local_closure(class_EventManager__sort_handlers, /* name */ - be_nested_proto( - 8, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(_sort_handlers), - &be_const_str_solidified, - ( &(const binstruction[31]) { /* code */ - 0x60080010, // 0000 GETGBL R2 G16 - 0x600C000C, // 0001 GETGBL R3 G12 - 0x5C100200, // 0002 MOVE R4 R1 - 0x7C0C0200, // 0003 CALL R3 1 - 0x040C070E, // 0004 SUB R3 R3 K14 - 0x400E1C03, // 0005 CONNECT R3 K14 R3 - 0x7C080200, // 0006 CALL R2 1 - 0xA8020012, // 0007 EXBLK 0 #001B - 0x5C0C0400, // 0008 MOVE R3 R2 - 0x7C0C0000, // 0009 CALL R3 0 - 0x94100203, // 000A GETIDX R4 R1 R3 - 0x5C140600, // 000B MOVE R5 R3 - 0x24180B0F, // 000C GT R6 R5 K15 - 0x781A000A, // 000D JMPF R6 #0019 - 0x04180B0E, // 000E SUB R6 R5 K14 - 0x94180206, // 000F GETIDX R6 R1 R6 - 0x88180D10, // 0010 GETMBR R6 R6 K16 - 0x881C0910, // 0011 GETMBR R7 R4 K16 - 0x14180C07, // 0012 LT R6 R6 R7 - 0x781A0004, // 0013 JMPF R6 #0019 - 0x04180B0E, // 0014 SUB R6 R5 K14 - 0x94180206, // 0015 GETIDX R6 R1 R6 - 0x98040A06, // 0016 SETIDX R1 R5 R6 - 0x04140B0E, // 0017 SUB R5 R5 K14 - 0x7001FFF2, // 0018 JMP #000C - 0x98040A04, // 0019 SETIDX R1 R5 R4 - 0x7001FFEC, // 001A JMP #0008 - 0x58080007, // 001B LDCONST R2 K7 - 0xAC080200, // 001C CATCH R2 1 0 - 0xB0080000, // 001D RAISE 2 R0 R0 - 0x80000000, // 001E RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: register_handler -********************************************************************/ -be_local_closure(class_EventManager_register_handler, /* name */ - be_nested_proto( - 13, /* nstack */ - 6, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(register_handler), - &be_const_str_solidified, - ( &(const binstruction[37]) { /* code */ - 0xB81A2200, // 0000 GETNGBL R6 K17 - 0x8C180D12, // 0001 GETMET R6 R6 K18 - 0x5C200200, // 0002 MOVE R8 R1 - 0x5C240400, // 0003 MOVE R9 R2 - 0x5C280600, // 0004 MOVE R10 R3 - 0x5C2C0800, // 0005 MOVE R11 R4 - 0x5C300A00, // 0006 MOVE R12 R5 - 0x7C180C00, // 0007 CALL R6 6 - 0x1C1C0301, // 0008 EQ R7 R1 K1 - 0x781E0007, // 0009 JMPF R7 #0012 - 0x881C0102, // 000A GETMBR R7 R0 K2 - 0x8C1C0F08, // 000B GETMET R7 R7 K8 - 0x5C240C00, // 000C MOVE R9 R6 - 0x7C1C0400, // 000D CALL R7 2 - 0x8C1C0113, // 000E GETMET R7 R0 K19 - 0x88240102, // 000F GETMBR R9 R0 K2 - 0x7C1C0400, // 0010 CALL R7 2 - 0x70020011, // 0011 JMP #0024 - 0x881C0105, // 0012 GETMBR R7 R0 K5 - 0x8C1C0F14, // 0013 GETMET R7 R7 K20 - 0x5C240200, // 0014 MOVE R9 R1 - 0x7C1C0400, // 0015 CALL R7 2 - 0x741E0003, // 0016 JMPT R7 #001B - 0x881C0105, // 0017 GETMBR R7 R0 K5 - 0x60200012, // 0018 GETGBL R8 G18 - 0x7C200000, // 0019 CALL R8 0 - 0x981C0208, // 001A SETIDX R7 R1 R8 - 0x881C0105, // 001B GETMBR R7 R0 K5 - 0x941C0E01, // 001C GETIDX R7 R7 R1 - 0x8C1C0F08, // 001D GETMET R7 R7 K8 - 0x5C240C00, // 001E MOVE R9 R6 - 0x7C1C0400, // 001F CALL R7 2 - 0x8C1C0113, // 0020 GETMET R7 R0 K19 - 0x88240105, // 0021 GETMBR R9 R0 K5 - 0x94241201, // 0022 GETIDX R9 R9 R1 - 0x7C1C0400, // 0023 CALL R7 2 - 0x80040C00, // 0024 RET 1 R6 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: trigger_event -********************************************************************/ -be_local_closure(class_EventManager_trigger_event, /* name */ - be_nested_proto( - 9, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(trigger_event), - &be_const_str_solidified, - ( &(const binstruction[69]) { /* code */ - 0x880C010C, // 0000 GETMBR R3 R0 K12 - 0x780E0007, // 0001 JMPF R3 #000A - 0x880C010B, // 0002 GETMBR R3 R0 K11 - 0x8C0C0708, // 0003 GETMET R3 R3 K8 - 0x60140013, // 0004 GETGBL R5 G19 - 0x7C140000, // 0005 CALL R5 0 - 0x98162A01, // 0006 SETIDX R5 K21 R1 - 0x98162C02, // 0007 SETIDX R5 K22 R2 - 0x7C0C0400, // 0008 CALL R3 2 - 0x80000600, // 0009 RET 0 - 0x500C0200, // 000A LDBOOL R3 1 0 - 0x90021803, // 000B SETMBR R0 K12 R3 - 0xA8020029, // 000C EXBLK 0 #0037 - 0x600C0010, // 000D GETGBL R3 G16 - 0x88100102, // 000E GETMBR R4 R0 K2 - 0x7C0C0200, // 000F CALL R3 1 - 0xA802000A, // 0010 EXBLK 0 #001C - 0x5C100600, // 0011 MOVE R4 R3 - 0x7C100000, // 0012 CALL R4 0 - 0x88140917, // 0013 GETMBR R5 R4 K23 - 0x78160005, // 0014 JMPF R5 #001B - 0x8C140918, // 0015 GETMET R5 R4 K24 - 0x601C0013, // 0016 GETGBL R7 G19 - 0x7C1C0000, // 0017 CALL R7 0 - 0x981E0001, // 0018 SETIDX R7 K0 R1 - 0x981E2C02, // 0019 SETIDX R7 K22 R2 - 0x7C140400, // 001A CALL R5 2 - 0x7001FFF4, // 001B JMP #0011 - 0x580C0007, // 001C LDCONST R3 K7 - 0xAC0C0200, // 001D CATCH R3 1 0 - 0xB0080000, // 001E RAISE 2 R0 R0 - 0x880C0105, // 001F GETMBR R3 R0 K5 - 0x8C0C0703, // 0020 GETMET R3 R3 K3 - 0x5C140200, // 0021 MOVE R5 R1 - 0x7C0C0400, // 0022 CALL R3 2 - 0x4C100000, // 0023 LDNIL R4 - 0x20100604, // 0024 NE R4 R3 R4 - 0x7812000E, // 0025 JMPF R4 #0035 - 0x60100010, // 0026 GETGBL R4 G16 - 0x5C140600, // 0027 MOVE R5 R3 - 0x7C100200, // 0028 CALL R4 1 - 0xA8020007, // 0029 EXBLK 0 #0032 - 0x5C140800, // 002A MOVE R5 R4 - 0x7C140000, // 002B CALL R5 0 - 0x88180B17, // 002C GETMBR R6 R5 K23 - 0x781A0002, // 002D JMPF R6 #0031 - 0x8C180B18, // 002E GETMET R6 R5 K24 - 0x5C200400, // 002F MOVE R8 R2 - 0x7C180400, // 0030 CALL R6 2 - 0x7001FFF7, // 0031 JMP #002A - 0x58100007, // 0032 LDCONST R4 K7 - 0xAC100200, // 0033 CATCH R4 1 0 - 0xB0080000, // 0034 RAISE 2 R0 R0 - 0xA8040001, // 0035 EXBLK 1 1 - 0x70020008, // 0036 JMP #0040 - 0xAC0C0002, // 0037 CATCH R3 0 2 - 0x70020005, // 0038 JMP #003F - 0x60140001, // 0039 GETGBL R5 G1 - 0x58180019, // 003A LDCONST R6 K25 - 0x5C1C0600, // 003B MOVE R7 R3 - 0x5C200800, // 003C MOVE R8 R4 - 0x7C140600, // 003D CALL R5 3 - 0x70020000, // 003E JMP #0040 - 0xB0080000, // 003F RAISE 2 R0 R0 - 0x500C0000, // 0040 LDBOOL R3 0 0 - 0x90021803, // 0041 SETMBR R0 K12 R3 - 0x8C0C011A, // 0042 GETMET R3 R0 K26 - 0x7C0C0200, // 0043 CALL R3 1 - 0x80000000, // 0044 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: _process_queued_events -********************************************************************/ -be_local_closure(class_EventManager__process_queued_events, /* name */ - be_nested_proto( - 6, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_EventManager, /* shared constants */ - be_str_weak(_process_queued_events), - &be_const_str_solidified, - ( &(const binstruction[15]) { /* code */ - 0x8804010B, // 0000 GETMBR R1 R0 K11 - 0x8C04031B, // 0001 GETMET R1 R1 K27 - 0x7C040200, // 0002 CALL R1 1 - 0x2404030F, // 0003 GT R1 R1 K15 - 0x78060008, // 0004 JMPF R1 #000E - 0x8804010B, // 0005 GETMBR R1 R0 K11 - 0x8C04031C, // 0006 GETMET R1 R1 K28 - 0x580C000F, // 0007 LDCONST R3 K15 - 0x7C040400, // 0008 CALL R1 2 - 0x8C08011D, // 0009 GETMET R2 R0 K29 - 0x94100315, // 000A GETIDX R4 R1 K21 - 0x94140316, // 000B GETIDX R5 R1 K22 - 0x7C080600, // 000C CALL R2 3 - 0x7001FFF1, // 000D JMP #0000 - 0x80000000, // 000E RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: EventManager -********************************************************************/ -be_local_class(EventManager, - 4, - NULL, - be_nested_map(14, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(unregister_handler, -1), be_const_closure(class_EventManager_unregister_handler_closure) }, - { be_const_key_weak(set_event_active, -1), be_const_closure(class_EventManager_set_event_active_closure) }, - { be_const_key_weak(handlers, -1), be_const_var(0) }, - { be_const_key_weak(init, -1), be_const_closure(class_EventManager_init_closure) }, - { be_const_key_weak(trigger_event, -1), be_const_closure(class_EventManager_trigger_event_closure) }, - { be_const_key_weak(get_handlers, 3), be_const_closure(class_EventManager_get_handlers_closure) }, - { be_const_key_weak(clear_all_handlers, -1), be_const_closure(class_EventManager_clear_all_handlers_closure) }, - { be_const_key_weak(event_queue, -1), be_const_var(2) }, - { be_const_key_weak(_sort_handlers, -1), be_const_closure(class_EventManager__sort_handlers_closure) }, - { be_const_key_weak(is_processing, 7), be_const_var(3) }, - { be_const_key_weak(global_handlers, -1), be_const_var(1) }, - { be_const_key_weak(register_handler, -1), be_const_closure(class_EventManager_register_handler_closure) }, - { be_const_key_weak(get_registered_events, 4), be_const_closure(class_EventManager_get_registered_events_closure) }, - { be_const_key_weak(_process_queued_events, -1), be_const_closure(class_EventManager__process_queued_events_closure) }, - })), - be_str_weak(EventManager) -); /******************************************************************** ** Solidified function: twinkle_solid @@ -5154,93 +4625,12 @@ be_local_class(ParameterizedObject, ); /******************************************************************** -** Solidified function: twinkle_gentle +** Solidified function: get_registered_events ********************************************************************/ -be_local_closure(twinkle_gentle, /* name */ +be_local_closure(get_registered_events, /* name */ be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 9]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(twinkle_animation), - /* K2 */ be_nested_str_weak(color), - /* K3 */ be_nested_str_weak(density), - /* K4 */ be_nested_str_weak(twinkle_speed), - /* K5 */ be_const_int(3), - /* K6 */ be_nested_str_weak(fade_speed), - /* K7 */ be_nested_str_weak(min_brightness), - /* K8 */ be_nested_str_weak(max_brightness), - }), - be_str_weak(twinkle_gentle), - &be_const_str_solidified, - ( &(const binstruction[16]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x5409D6FF, // 0004 LDINT R2 -10496 - 0x90060402, // 0005 SETMBR R1 K2 R2 - 0x540A003F, // 0006 LDINT R2 64 - 0x90060602, // 0007 SETMBR R1 K3 R2 - 0x90060905, // 0008 SETMBR R1 K4 K5 - 0x540A0077, // 0009 LDINT R2 120 - 0x90060C02, // 000A SETMBR R1 K6 R2 - 0x540A000F, // 000B LDINT R2 16 - 0x90060E02, // 000C SETMBR R1 K7 R2 - 0x540A00B3, // 000D LDINT R2 180 - 0x90061002, // 000E SETMBR R1 K8 R2 - 0x80040200, // 000F RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: is_color_provider -********************************************************************/ -be_local_closure(is_color_provider, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(color_provider), - }), - be_str_weak(is_color_provider), - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x6004000F, // 0000 GETGBL R1 G15 - 0x5C080000, // 0001 MOVE R2 R0 - 0xB80E0000, // 0002 GETNGBL R3 K0 - 0x880C0701, // 0003 GETMBR R3 R3 K1 - 0x7C040400, // 0004 CALL R1 2 - 0x80040200, // 0005 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_event_handlers -********************************************************************/ -be_local_closure(get_event_handlers, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ + 2, /* nstack */ + 0, /* argc */ 0, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ @@ -5250,1221 +4640,16 @@ be_local_closure(get_event_handlers, /* name */ ( &(const bvalue[ 3]) { /* constants */ /* K0 */ be_nested_str_weak(animation), /* K1 */ be_nested_str_weak(event_manager), - /* K2 */ be_nested_str_weak(get_handlers), + /* K2 */ be_nested_str_weak(get_registered_events), }), - be_str_weak(get_event_handlers), - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x88040301, // 0001 GETMBR R1 R1 K1 - 0x8C040302, // 0002 GETMET R1 R1 K2 - 0x5C0C0000, // 0003 MOVE R3 R0 - 0x7C040400, // 0004 CALL R1 2 - 0x80040200, // 0005 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: bounce -********************************************************************/ -be_local_closure(bounce, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 4]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(oscillator_value), - /* K2 */ be_nested_str_weak(form), - /* K3 */ be_nested_str_weak(BOUNCE), - }), - be_str_weak(bounce), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0xB80A0000, // 0004 GETNGBL R2 K0 - 0x88080503, // 0005 GETMBR R2 R2 K3 - 0x90060402, // 0006 SETMBR R1 K2 R2 - 0x80040200, // 0007 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: pulsating_color_provider -********************************************************************/ -be_local_closure(pulsating_color_provider, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 5]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(breathe_color), - /* K2 */ be_nested_str_weak(curve_factor), - /* K3 */ be_const_int(1), - /* K4 */ be_nested_str_weak(duration), - }), - be_str_weak(pulsating_color_provider), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x90060503, // 0004 SETMBR R1 K2 K3 - 0x540A03E7, // 0005 LDINT R2 1000 - 0x90060802, // 0006 SETMBR R1 K4 R2 - 0x80040200, // 0007 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: noise_fractal -********************************************************************/ -be_local_closure(noise_fractal, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[15]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(noise_animation), - /* K2 */ be_nested_str_weak(rich_palette), - /* K3 */ be_nested_str_weak(palette), - /* K4 */ be_nested_str_weak(PALETTE_RAINBOW), - /* K5 */ be_nested_str_weak(cycle_period), - /* K6 */ be_nested_str_weak(transition_type), - /* K7 */ be_const_int(1), - /* K8 */ be_nested_str_weak(brightness), - /* K9 */ be_nested_str_weak(color), - /* K10 */ be_nested_str_weak(scale), - /* K11 */ be_nested_str_weak(speed), - /* K12 */ be_nested_str_weak(octaves), - /* K13 */ be_const_int(3), - /* K14 */ be_nested_str_weak(persistence), - }), - be_str_weak(noise_fractal), - &be_const_str_solidified, - ( &(const binstruction[25]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0xB80A0000, // 0004 GETNGBL R2 K0 - 0x8C080502, // 0005 GETMET R2 R2 K2 - 0x5C100000, // 0006 MOVE R4 R0 - 0x7C080400, // 0007 CALL R2 2 - 0xB80E0000, // 0008 GETNGBL R3 K0 - 0x880C0704, // 0009 GETMBR R3 R3 K4 - 0x900A0603, // 000A SETMBR R2 K3 R3 - 0x540E1387, // 000B LDINT R3 5000 - 0x900A0A03, // 000C SETMBR R2 K5 R3 - 0x900A0D07, // 000D SETMBR R2 K6 K7 - 0x540E00FE, // 000E LDINT R3 255 - 0x900A1003, // 000F SETMBR R2 K8 R3 - 0x90061202, // 0010 SETMBR R1 K9 R2 - 0x540E001D, // 0011 LDINT R3 30 - 0x90061403, // 0012 SETMBR R1 K10 R3 - 0x540E0013, // 0013 LDINT R3 20 - 0x90061603, // 0014 SETMBR R1 K11 R3 - 0x9006190D, // 0015 SETMBR R1 K12 K13 - 0x540E007F, // 0016 LDINT R3 128 - 0x90061C03, // 0017 SETMBR R1 K14 R3 - 0x80040200, // 0018 RET 1 R1 - }) - ) -); -/*******************************************************************/ - -extern const bclass be_class_ColorProvider; -// compact class 'ColorProvider' ktab size: 10, total: 11 (saved 8 bytes) -static const bvalue be_ktab_class_ColorProvider[10] = { - /* K0 */ be_nested_str_weak(produce_value), - /* K1 */ be_nested_str_weak(color), - /* K2 */ be_nested_str_weak(_color_lut), - /* K3 */ be_const_class(be_class_ColorProvider), - /* K4 */ be_nested_str_weak(tasmota), - /* K5 */ be_nested_str_weak(scale_uint), - /* K6 */ be_const_int(0), - /* K7 */ be_const_int(-16777216), - /* K8 */ be_nested_str_weak(init), - /* K9 */ be_nested_str_weak(_lut_dirty), -}; - - -extern const bclass be_class_ColorProvider; - -/******************************************************************** -** Solidified function: get_color_for_value -********************************************************************/ -be_local_closure(class_ColorProvider_get_color_for_value, /* name */ - be_nested_proto( - 7, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_ColorProvider, /* shared constants */ - be_str_weak(get_color_for_value), + be_str_weak(get_registered_events), &be_const_str_solidified, ( &(const binstruction[ 5]) { /* code */ - 0x8C0C0100, // 0000 GETMET R3 R0 K0 - 0x58140001, // 0001 LDCONST R5 K1 - 0x5C180400, // 0002 MOVE R6 R2 - 0x7C0C0600, // 0003 CALL R3 3 - 0x80040600, // 0004 RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_lut -********************************************************************/ -be_local_closure(class_ColorProvider_get_lut, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_ColorProvider, /* shared constants */ - be_str_weak(get_lut), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040102, // 0000 GETMBR R1 R0 K2 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: apply_brightness -********************************************************************/ -be_local_closure(class_ColorProvider_apply_brightness, /* name */ - be_nested_proto( - 13, /* nstack */ - 2, /* argc */ - 12, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_ColorProvider, /* shared constants */ - be_str_weak(apply_brightness), - &be_const_str_solidified, - ( &(const binstruction[51]) { /* code */ - 0x58080003, // 0000 LDCONST R2 K3 - 0x540E00FE, // 0001 LDINT R3 255 - 0x1C0C0203, // 0002 EQ R3 R1 R3 - 0x780E0000, // 0003 JMPF R3 #0005 + 0xB8020000, // 0000 GETNGBL R0 K0 + 0x88000101, // 0001 GETMBR R0 R0 K1 + 0x8C000102, // 0002 GETMET R0 R0 K2 + 0x7C000200, // 0003 CALL R0 1 0x80040000, // 0004 RET 1 R0 - 0x540E000F, // 0005 LDINT R3 16 - 0x3C0C0003, // 0006 SHR R3 R0 R3 - 0x541200FE, // 0007 LDINT R4 255 - 0x2C0C0604, // 0008 AND R3 R3 R4 - 0x54120007, // 0009 LDINT R4 8 - 0x3C100004, // 000A SHR R4 R0 R4 - 0x541600FE, // 000B LDINT R5 255 - 0x2C100805, // 000C AND R4 R4 R5 - 0x541600FE, // 000D LDINT R5 255 - 0x2C140005, // 000E AND R5 R0 R5 - 0xB81A0800, // 000F GETNGBL R6 K4 - 0x8C180D05, // 0010 GETMET R6 R6 K5 - 0x5C200600, // 0011 MOVE R8 R3 - 0x58240006, // 0012 LDCONST R9 K6 - 0x542A00FE, // 0013 LDINT R10 255 - 0x582C0006, // 0014 LDCONST R11 K6 - 0x5C300200, // 0015 MOVE R12 R1 - 0x7C180C00, // 0016 CALL R6 6 - 0x5C0C0C00, // 0017 MOVE R3 R6 - 0xB81A0800, // 0018 GETNGBL R6 K4 - 0x8C180D05, // 0019 GETMET R6 R6 K5 - 0x5C200800, // 001A MOVE R8 R4 - 0x58240006, // 001B LDCONST R9 K6 - 0x542A00FE, // 001C LDINT R10 255 - 0x582C0006, // 001D LDCONST R11 K6 - 0x5C300200, // 001E MOVE R12 R1 - 0x7C180C00, // 001F CALL R6 6 - 0x5C100C00, // 0020 MOVE R4 R6 - 0xB81A0800, // 0021 GETNGBL R6 K4 - 0x8C180D05, // 0022 GETMET R6 R6 K5 - 0x5C200A00, // 0023 MOVE R8 R5 - 0x58240006, // 0024 LDCONST R9 K6 - 0x542A00FE, // 0025 LDINT R10 255 - 0x582C0006, // 0026 LDCONST R11 K6 - 0x5C300200, // 0027 MOVE R12 R1 - 0x7C180C00, // 0028 CALL R6 6 - 0x5C140C00, // 0029 MOVE R5 R6 - 0x2C180107, // 002A AND R6 R0 K7 - 0x541E000F, // 002B LDINT R7 16 - 0x381C0607, // 002C SHL R7 R3 R7 - 0x30180C07, // 002D OR R6 R6 R7 - 0x541E0007, // 002E LDINT R7 8 - 0x381C0807, // 002F SHL R7 R4 R7 - 0x30180C07, // 0030 OR R6 R6 R7 - 0x30180C05, // 0031 OR R6 R6 R5 - 0x80040C00, // 0032 RET 1 R6 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: produce_value -********************************************************************/ -be_local_closure(class_ColorProvider_produce_value, /* name */ - be_nested_proto( - 4, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_ColorProvider, /* shared constants */ - be_str_weak(produce_value), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x540DFFFE, // 0000 LDINT R3 -1 - 0x80040600, // 0001 RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(class_ColorProvider_init, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_ColorProvider, /* shared constants */ - be_str_weak(init), - &be_const_str_solidified, - ( &(const binstruction[11]) { /* code */ - 0x60080003, // 0000 GETGBL R2 G3 - 0x5C0C0000, // 0001 MOVE R3 R0 - 0x7C080200, // 0002 CALL R2 1 - 0x8C080508, // 0003 GETMET R2 R2 K8 - 0x5C100200, // 0004 MOVE R4 R1 - 0x7C080400, // 0005 CALL R2 2 - 0x4C080000, // 0006 LDNIL R2 - 0x90020402, // 0007 SETMBR R0 K2 R2 - 0x50080200, // 0008 LDBOOL R2 1 0 - 0x90021202, // 0009 SETMBR R0 K9 R2 - 0x80000000, // 000A RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: ColorProvider -********************************************************************/ -extern const bclass be_class_ValueProvider; -be_local_class(ColorProvider, - 2, - &be_class_ValueProvider, - be_nested_map(9, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(LUT_FACTOR, 8), be_const_int(1) }, - { be_const_key_weak(get_lut, 7), be_const_closure(class_ColorProvider_get_lut_closure) }, - { be_const_key_weak(get_color_for_value, 0), be_const_closure(class_ColorProvider_get_color_for_value_closure) }, - { be_const_key_weak(produce_value, -1), be_const_closure(class_ColorProvider_produce_value_closure) }, - { be_const_key_weak(_lut_dirty, -1), be_const_var(1) }, - { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { - be_const_map( * be_nested_map(1, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(brightness, -1), be_const_bytes_instance(07000001FF0001FF00) }, - })) ) } )) }, - { be_const_key_weak(init, 5), be_const_closure(class_ColorProvider_init_closure) }, - { be_const_key_weak(_color_lut, -1), be_const_var(0) }, - { be_const_key_weak(apply_brightness, -1), be_const_static_closure(class_ColorProvider_apply_brightness_closure) }, - })), - be_str_weak(ColorProvider) -); - -/******************************************************************** -** Solidified function: noise_single_color -********************************************************************/ -be_local_closure(noise_single_color, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 7]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(noise_animation), - /* K2 */ be_nested_str_weak(color), - /* K3 */ be_nested_str_weak(scale), - /* K4 */ be_nested_str_weak(speed), - /* K5 */ be_nested_str_weak(octaves), - /* K6 */ be_const_int(1), - }), - be_str_weak(noise_single_color), - &be_const_str_solidified, - ( &(const binstruction[12]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x5409FFFE, // 0004 LDINT R2 -1 - 0x90060402, // 0005 SETMBR R1 K2 R2 - 0x540A0031, // 0006 LDINT R2 50 - 0x90060602, // 0007 SETMBR R1 K3 R2 - 0x540A001D, // 0008 LDINT R2 30 - 0x90060802, // 0009 SETMBR R1 K4 R2 - 0x90060B06, // 000A SETMBR R1 K5 K6 - 0x80040200, // 000B RET 1 R1 - }) - ) -); -/*******************************************************************/ - -extern const bclass be_class_AnimationMath; -// compact class 'AnimationMath' ktab size: 13, total: 31 (saved 144 bytes) -static const bvalue be_ktab_class_AnimationMath[13] = { - /* K0 */ be_const_class(be_class_AnimationMath), - /* K1 */ be_nested_str_weak(math), - /* K2 */ be_nested_str_weak(int), - /* K3 */ be_const_int(0), - /* K4 */ be_const_real_hex(0x437F0000), - /* K5 */ be_nested_str_weak(sqrt), - /* K6 */ be_nested_str_weak(max), - /* K7 */ be_nested_str_weak(round), - /* K8 */ be_nested_str_weak(abs), - /* K9 */ be_nested_str_weak(tasmota), - /* K10 */ be_nested_str_weak(scale_int), - /* K11 */ be_nested_str_weak(sine_int), - /* K12 */ be_nested_str_weak(min), -}; - - -extern const bclass be_class_AnimationMath; - -/******************************************************************** -** Solidified function: sqrt -********************************************************************/ -be_local_closure(class_AnimationMath_sqrt, /* name */ - be_nested_proto( - 8, /* nstack */ - 1, /* argc */ - 12, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_AnimationMath, /* shared constants */ - be_str_weak(sqrt), - &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ - 0x58040000, // 0000 LDCONST R1 K0 - 0xA40A0200, // 0001 IMPORT R2 K1 - 0x600C0004, // 0002 GETGBL R3 G4 - 0x5C100000, // 0003 MOVE R4 R0 - 0x7C0C0200, // 0004 CALL R3 1 - 0x1C0C0702, // 0005 EQ R3 R3 K2 - 0x780E000E, // 0006 JMPF R3 #0016 - 0x280C0103, // 0007 GE R3 R0 K3 - 0x780E000C, // 0008 JMPF R3 #0016 - 0x540E00FE, // 0009 LDINT R3 255 - 0x180C0003, // 000A LE R3 R0 R3 - 0x780E0009, // 000B JMPF R3 #0016 - 0x0C0C0104, // 000C DIV R3 R0 K4 - 0x60100009, // 000D GETGBL R4 G9 - 0x8C140505, // 000E GETMET R5 R2 K5 - 0x5C1C0600, // 000F MOVE R7 R3 - 0x7C140400, // 0010 CALL R5 2 - 0x541A00FE, // 0011 LDINT R6 255 - 0x08140A06, // 0012 MUL R5 R5 R6 - 0x7C100200, // 0013 CALL R4 1 - 0x80040800, // 0014 RET 1 R4 - 0x70020003, // 0015 JMP #001A - 0x8C0C0505, // 0016 GETMET R3 R2 K5 - 0x5C140000, // 0017 MOVE R5 R0 - 0x7C0C0400, // 0018 CALL R3 2 - 0x80040600, // 0019 RET 1 R3 - 0x80000000, // 001A RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: max -********************************************************************/ -be_local_closure(class_AnimationMath_max, /* name */ - be_nested_proto( - 6, /* nstack */ - 1, /* argc */ - 13, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_AnimationMath, /* shared constants */ - be_str_weak(max), - &be_const_str_solidified, - ( &(const binstruction[ 7]) { /* code */ - 0x58040000, // 0000 LDCONST R1 K0 - 0xA40A0200, // 0001 IMPORT R2 K1 - 0x600C0016, // 0002 GETGBL R3 G22 - 0x88100506, // 0003 GETMBR R4 R2 K6 - 0x5C140000, // 0004 MOVE R5 R0 - 0x7C0C0400, // 0005 CALL R3 2 - 0x80040600, // 0006 RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: round -********************************************************************/ -be_local_closure(class_AnimationMath_round, /* name */ - be_nested_proto( - 7, /* nstack */ - 1, /* argc */ - 12, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_AnimationMath, /* shared constants */ - be_str_weak(round), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x58040000, // 0000 LDCONST R1 K0 - 0xA40A0200, // 0001 IMPORT R2 K1 - 0x600C0009, // 0002 GETGBL R3 G9 - 0x8C100507, // 0003 GETMET R4 R2 K7 - 0x5C180000, // 0004 MOVE R6 R0 - 0x7C100400, // 0005 CALL R4 2 - 0x7C0C0200, // 0006 CALL R3 1 - 0x80040600, // 0007 RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: abs -********************************************************************/ -be_local_closure(class_AnimationMath_abs, /* name */ - be_nested_proto( - 6, /* nstack */ - 1, /* argc */ - 12, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_AnimationMath, /* shared constants */ - be_str_weak(abs), - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x58040000, // 0000 LDCONST R1 K0 - 0xA40A0200, // 0001 IMPORT R2 K1 - 0x8C0C0508, // 0002 GETMET R3 R2 K8 - 0x5C140000, // 0003 MOVE R5 R0 - 0x7C0C0400, // 0004 CALL R3 2 - 0x80040600, // 0005 RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: cos -********************************************************************/ -be_local_closure(class_AnimationMath_cos, /* name */ - be_nested_proto( - 11, /* nstack */ - 1, /* argc */ - 12, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_AnimationMath, /* shared constants */ - be_str_weak(cos), - &be_const_str_solidified, - ( &(const binstruction[23]) { /* code */ - 0x58040000, // 0000 LDCONST R1 K0 - 0xB80A1200, // 0001 GETNGBL R2 K9 - 0x8C08050A, // 0002 GETMET R2 R2 K10 - 0x5C100000, // 0003 MOVE R4 R0 - 0x58140003, // 0004 LDCONST R5 K3 - 0x541A00FE, // 0005 LDINT R6 255 - 0x581C0003, // 0006 LDCONST R7 K3 - 0x54227FFE, // 0007 LDINT R8 32767 - 0x7C080C00, // 0008 CALL R2 6 - 0xB80E1200, // 0009 GETNGBL R3 K9 - 0x8C0C070B, // 000A GETMET R3 R3 K11 - 0x54161FFF, // 000B LDINT R5 8192 - 0x04140405, // 000C SUB R5 R2 R5 - 0x7C0C0400, // 000D CALL R3 2 - 0xB8121200, // 000E GETNGBL R4 K9 - 0x8C10090A, // 000F GETMET R4 R4 K10 - 0x5C180600, // 0010 MOVE R6 R3 - 0x541DEFFF, // 0011 LDINT R7 -4096 - 0x54220FFF, // 0012 LDINT R8 4096 - 0x5425FF00, // 0013 LDINT R9 -255 - 0x542A00FE, // 0014 LDINT R10 255 - 0x7C100C00, // 0015 CALL R4 6 - 0x80040800, // 0016 RET 1 R4 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: sin -********************************************************************/ -be_local_closure(class_AnimationMath_sin, /* name */ - be_nested_proto( - 11, /* nstack */ - 1, /* argc */ - 12, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_AnimationMath, /* shared constants */ - be_str_weak(sin), - &be_const_str_solidified, - ( &(const binstruction[22]) { /* code */ - 0x58040000, // 0000 LDCONST R1 K0 - 0xB80A1200, // 0001 GETNGBL R2 K9 - 0x8C08050A, // 0002 GETMET R2 R2 K10 - 0x5C100000, // 0003 MOVE R4 R0 - 0x58140003, // 0004 LDCONST R5 K3 - 0x541A00FE, // 0005 LDINT R6 255 - 0x581C0003, // 0006 LDCONST R7 K3 - 0x54227FFE, // 0007 LDINT R8 32767 - 0x7C080C00, // 0008 CALL R2 6 - 0xB80E1200, // 0009 GETNGBL R3 K9 - 0x8C0C070B, // 000A GETMET R3 R3 K11 - 0x5C140400, // 000B MOVE R5 R2 - 0x7C0C0400, // 000C CALL R3 2 - 0xB8121200, // 000D GETNGBL R4 K9 - 0x8C10090A, // 000E GETMET R4 R4 K10 - 0x5C180600, // 000F MOVE R6 R3 - 0x541DEFFF, // 0010 LDINT R7 -4096 - 0x54220FFF, // 0011 LDINT R8 4096 - 0x5425FF00, // 0012 LDINT R9 -255 - 0x542A00FE, // 0013 LDINT R10 255 - 0x7C100C00, // 0014 CALL R4 6 - 0x80040800, // 0015 RET 1 R4 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: scale -********************************************************************/ -be_local_closure(class_AnimationMath_scale, /* name */ - be_nested_proto( - 13, /* nstack */ - 5, /* argc */ - 12, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_AnimationMath, /* shared constants */ - be_str_weak(scale), - &be_const_str_solidified, - ( &(const binstruction[10]) { /* code */ - 0x58140000, // 0000 LDCONST R5 K0 - 0xB81A1200, // 0001 GETNGBL R6 K9 - 0x8C180D0A, // 0002 GETMET R6 R6 K10 - 0x5C200000, // 0003 MOVE R8 R0 - 0x5C240200, // 0004 MOVE R9 R1 - 0x5C280400, // 0005 MOVE R10 R2 - 0x5C2C0600, // 0006 MOVE R11 R3 - 0x5C300800, // 0007 MOVE R12 R4 - 0x7C180C00, // 0008 CALL R6 6 - 0x80040C00, // 0009 RET 1 R6 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: min -********************************************************************/ -be_local_closure(class_AnimationMath_min, /* name */ - be_nested_proto( - 6, /* nstack */ - 1, /* argc */ - 13, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_AnimationMath, /* shared constants */ - be_str_weak(min), - &be_const_str_solidified, - ( &(const binstruction[ 7]) { /* code */ - 0x58040000, // 0000 LDCONST R1 K0 - 0xA40A0200, // 0001 IMPORT R2 K1 - 0x600C0016, // 0002 GETGBL R3 G22 - 0x8810050C, // 0003 GETMBR R4 R2 K12 - 0x5C140000, // 0004 MOVE R5 R0 - 0x7C0C0400, // 0005 CALL R3 2 - 0x80040600, // 0006 RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: AnimationMath -********************************************************************/ -be_local_class(AnimationMath, - 0, - NULL, - be_nested_map(8, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(min, -1), be_const_static_closure(class_AnimationMath_min_closure) }, - { be_const_key_weak(max, 2), be_const_static_closure(class_AnimationMath_max_closure) }, - { be_const_key_weak(scale, -1), be_const_static_closure(class_AnimationMath_scale_closure) }, - { be_const_key_weak(round, 6), be_const_static_closure(class_AnimationMath_round_closure) }, - { be_const_key_weak(cos, -1), be_const_static_closure(class_AnimationMath_cos_closure) }, - { be_const_key_weak(sin, -1), be_const_static_closure(class_AnimationMath_sin_closure) }, - { be_const_key_weak(abs, -1), be_const_static_closure(class_AnimationMath_abs_closure) }, - { be_const_key_weak(sqrt, 0), be_const_static_closure(class_AnimationMath_sqrt_closure) }, - })), - be_str_weak(AnimationMath) -); - -/******************************************************************** -** Solidified function: sine_osc -********************************************************************/ -be_local_closure(sine_osc, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 4]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(oscillator_value), - /* K2 */ be_nested_str_weak(form), - /* K3 */ be_nested_str_weak(SINE), - }), - be_str_weak(sine_osc), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0xB80A0000, // 0004 GETNGBL R2 K0 - 0x88080503, // 0005 GETMBR R2 R2 K3 - 0x90060402, // 0006 SETMBR R1 K2 R2 - 0x80040200, // 0007 RET 1 R1 - }) - ) -); -/*******************************************************************/ - -// compact class 'BeaconAnimation' ktab size: 15, total: 19 (saved 32 bytes) -static const bvalue be_ktab_class_BeaconAnimation[15] = { - /* K0 */ be_nested_str_weak(back_color), - /* K1 */ be_nested_str_weak(pos), - /* K2 */ be_nested_str_weak(slew_size), - /* K3 */ be_nested_str_weak(beacon_size), - /* K4 */ be_nested_str_weak(color), - /* K5 */ be_const_int(-16777216), - /* K6 */ be_const_int(0), - /* K7 */ be_nested_str_weak(fill_pixels), - /* K8 */ be_nested_str_weak(pixels), - /* K9 */ be_nested_str_weak(tasmota), - /* K10 */ be_nested_str_weak(scale_int), - /* K11 */ be_const_int(1), - /* K12 */ be_nested_str_weak(blend_linear), - /* K13 */ be_nested_str_weak(set_pixel_color), - /* K14 */ be_nested_str_weak(BeaconAnimation_X28color_X3D0x_X2508x_X2C_X20pos_X3D_X25s_X2C_X20beacon_size_X3D_X25s_X2C_X20slew_size_X3D_X25s_X29), -}; - - -extern const bclass be_class_BeaconAnimation; - -/******************************************************************** -** Solidified function: render -********************************************************************/ -be_local_closure(class_BeaconAnimation_render, /* name */ - be_nested_proto( - 23, /* nstack */ - 4, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_BeaconAnimation, /* shared constants */ - be_str_weak(render), - &be_const_str_solidified, - ( &(const binstruction[97]) { /* code */ - 0x88100100, // 0000 GETMBR R4 R0 K0 - 0x88140101, // 0001 GETMBR R5 R0 K1 - 0x88180102, // 0002 GETMBR R6 R0 K2 - 0x881C0103, // 0003 GETMBR R7 R0 K3 - 0x88200104, // 0004 GETMBR R8 R0 K4 - 0x20240905, // 0005 NE R9 R4 K5 - 0x78260006, // 0006 JMPF R9 #000E - 0x2C240905, // 0007 AND R9 R4 K5 - 0x20241306, // 0008 NE R9 R9 K6 - 0x78260003, // 0009 JMPF R9 #000E - 0x8C240307, // 000A GETMET R9 R1 K7 - 0x882C0308, // 000B GETMBR R11 R1 K8 - 0x5C300800, // 000C MOVE R12 R4 - 0x7C240600, // 000D CALL R9 3 - 0x5C240A00, // 000E MOVE R9 R5 - 0x00280A07, // 000F ADD R10 R5 R7 - 0x142C1306, // 0010 LT R11 R9 K6 - 0x782E0000, // 0011 JMPF R11 #0013 - 0x58240006, // 0012 LDCONST R9 K6 - 0x282C1403, // 0013 GE R11 R10 R3 - 0x782E0000, // 0014 JMPF R11 #0016 - 0x5C280600, // 0015 MOVE R10 R3 - 0x8C2C0307, // 0016 GETMET R11 R1 K7 - 0x88340308, // 0017 GETMBR R13 R1 K8 - 0x5C381000, // 0018 MOVE R14 R8 - 0x5C3C1200, // 0019 MOVE R15 R9 - 0x5C401400, // 001A MOVE R16 R10 - 0x7C2C0A00, // 001B CALL R11 5 - 0x4C2C0000, // 001C LDNIL R11 - 0x24300D06, // 001D GT R12 R6 K6 - 0x7832003F, // 001E JMPF R12 #005F - 0x04300A06, // 001F SUB R12 R5 R6 - 0x5C340A00, // 0020 MOVE R13 R5 - 0x14381906, // 0021 LT R14 R12 K6 - 0x783A0000, // 0022 JMPF R14 #0024 - 0x58300006, // 0023 LDCONST R12 K6 - 0x28381A03, // 0024 GE R14 R13 R3 - 0x783A0000, // 0025 JMPF R14 #0027 - 0x5C340600, // 0026 MOVE R13 R3 - 0x5C2C1800, // 0027 MOVE R11 R12 - 0x1438160D, // 0028 LT R14 R11 R13 - 0x783A0013, // 0029 JMPF R14 #003E - 0xB83A1200, // 002A GETNGBL R14 K9 - 0x8C381D0A, // 002B GETMET R14 R14 K10 - 0x5C401600, // 002C MOVE R16 R11 - 0x04440A06, // 002D SUB R17 R5 R6 - 0x0444230B, // 002E SUB R17 R17 K11 - 0x5C480A00, // 002F MOVE R18 R5 - 0x544E00FE, // 0030 LDINT R19 255 - 0x58500006, // 0031 LDCONST R20 K6 - 0x7C380C00, // 0032 CALL R14 6 - 0x8C3C030C, // 0033 GETMET R15 R1 K12 - 0x5C440800, // 0034 MOVE R17 R4 - 0x5C481000, // 0035 MOVE R18 R8 - 0x5C4C1C00, // 0036 MOVE R19 R14 - 0x7C3C0800, // 0037 CALL R15 4 - 0x8C40030D, // 0038 GETMET R16 R1 K13 - 0x5C481600, // 0039 MOVE R18 R11 - 0x5C4C1E00, // 003A MOVE R19 R15 - 0x7C400600, // 003B CALL R16 3 - 0x002C170B, // 003C ADD R11 R11 K11 - 0x7001FFE9, // 003D JMP #0028 - 0x00380A07, // 003E ADD R14 R5 R7 - 0x003C0A07, // 003F ADD R15 R5 R7 - 0x003C1E06, // 0040 ADD R15 R15 R6 - 0x14401D06, // 0041 LT R16 R14 K6 - 0x78420000, // 0042 JMPF R16 #0044 - 0x58380006, // 0043 LDCONST R14 K6 - 0x28401E03, // 0044 GE R16 R15 R3 - 0x78420000, // 0045 JMPF R16 #0047 - 0x5C3C0600, // 0046 MOVE R15 R3 - 0x5C2C1C00, // 0047 MOVE R11 R14 - 0x1440160F, // 0048 LT R16 R11 R15 - 0x78420014, // 0049 JMPF R16 #005F - 0xB8421200, // 004A GETNGBL R16 K9 - 0x8C40210A, // 004B GETMET R16 R16 K10 - 0x5C481600, // 004C MOVE R18 R11 - 0x004C0A07, // 004D ADD R19 R5 R7 - 0x044C270B, // 004E SUB R19 R19 K11 - 0x00500A07, // 004F ADD R20 R5 R7 - 0x00502806, // 0050 ADD R20 R20 R6 - 0x58540006, // 0051 LDCONST R21 K6 - 0x545A00FE, // 0052 LDINT R22 255 - 0x7C400C00, // 0053 CALL R16 6 - 0x8C44030C, // 0054 GETMET R17 R1 K12 - 0x5C4C0800, // 0055 MOVE R19 R4 - 0x5C501000, // 0056 MOVE R20 R8 - 0x5C542000, // 0057 MOVE R21 R16 - 0x7C440800, // 0058 CALL R17 4 - 0x8C48030D, // 0059 GETMET R18 R1 K13 - 0x5C501600, // 005A MOVE R20 R11 - 0x5C542200, // 005B MOVE R21 R17 - 0x7C480600, // 005C CALL R18 3 - 0x002C170B, // 005D ADD R11 R11 K11 - 0x7001FFE8, // 005E JMP #0048 - 0x50300200, // 005F LDBOOL R12 1 0 - 0x80041800, // 0060 RET 1 R12 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: tostring -********************************************************************/ -be_local_closure(class_BeaconAnimation_tostring, /* name */ - be_nested_proto( - 7, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_BeaconAnimation, /* shared constants */ - be_str_weak(tostring), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x60040018, // 0000 GETGBL R1 G24 - 0x5808000E, // 0001 LDCONST R2 K14 - 0x880C0104, // 0002 GETMBR R3 R0 K4 - 0x88100101, // 0003 GETMBR R4 R0 K1 - 0x88140103, // 0004 GETMBR R5 R0 K3 - 0x88180102, // 0005 GETMBR R6 R0 K2 - 0x7C040A00, // 0006 CALL R1 5 - 0x80040200, // 0007 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: BeaconAnimation -********************************************************************/ -extern const bclass be_class_Animation; -be_local_class(BeaconAnimation, - 0, - &be_class_Animation, - be_nested_map(3, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { - be_const_map( * be_nested_map(4, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(slew_size, -1), be_const_bytes_instance(0500000000) }, - { be_const_key_weak(pos, -1), be_const_bytes_instance(040000) }, - { be_const_key_weak(back_color, 0), be_const_bytes_instance(0402000000FF) }, - { be_const_key_weak(beacon_size, -1), be_const_bytes_instance(0500000001) }, - })) ) } )) }, - { be_const_key_weak(render, 2), be_const_closure(class_BeaconAnimation_render_closure) }, - { be_const_key_weak(tostring, -1), be_const_closure(class_BeaconAnimation_tostring_closure) }, - })), - be_str_weak(BeaconAnimation) -); -// compact class 'CrenelPositionAnimation' ktab size: 19, total: 24 (saved 40 bytes) -static const bvalue be_ktab_class_CrenelPositionAnimation[19] = { - /* K0 */ be_nested_str_weak(back_color), - /* K1 */ be_nested_str_weak(pos), - /* K2 */ be_nested_str_weak(pulse_size), - /* K3 */ be_nested_str_weak(low_size), - /* K4 */ be_nested_str_weak(nb_pulse), - /* K5 */ be_nested_str_weak(color), - /* K6 */ be_const_int(-16777216), - /* K7 */ be_nested_str_weak(fill_pixels), - /* K8 */ be_nested_str_weak(pixels), - /* K9 */ be_const_int(0), - /* K10 */ be_const_int(1), - /* K11 */ be_nested_str_weak(set_pixel_color), - /* K12 */ be_nested_str_weak(get_param), - /* K13 */ be_nested_str_weak(animation), - /* K14 */ be_nested_str_weak(is_value_provider), - /* K15 */ be_nested_str_weak(0x_X2508x), - /* K16 */ be_nested_str_weak(CrenelPositionAnimation_X28color_X3D_X25s_X2C_X20pos_X3D_X25s_X2C_X20pulse_size_X3D_X25s_X2C_X20low_size_X3D_X25s_X2C_X20nb_pulse_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29), - /* K17 */ be_nested_str_weak(priority), - /* K18 */ be_nested_str_weak(is_running), -}; - - -extern const bclass be_class_CrenelPositionAnimation; - -/******************************************************************** -** Solidified function: render -********************************************************************/ -be_local_closure(class_CrenelPositionAnimation_render, /* name */ - be_nested_proto( - 16, /* nstack */ - 4, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CrenelPositionAnimation, /* shared constants */ - be_str_weak(render), - &be_const_str_solidified, - ( &(const binstruction[64]) { /* code */ - 0x88100100, // 0000 GETMBR R4 R0 K0 - 0x88140101, // 0001 GETMBR R5 R0 K1 - 0x88180102, // 0002 GETMBR R6 R0 K2 - 0x881C0103, // 0003 GETMBR R7 R0 K3 - 0x88200104, // 0004 GETMBR R8 R0 K4 - 0x88240105, // 0005 GETMBR R9 R0 K5 - 0x60280009, // 0006 GETGBL R10 G9 - 0x002C0C07, // 0007 ADD R11 R6 R7 - 0x7C280200, // 0008 CALL R10 1 - 0x202C0906, // 0009 NE R11 R4 K6 - 0x782E0003, // 000A JMPF R11 #000F - 0x8C2C0307, // 000B GETMET R11 R1 K7 - 0x88340308, // 000C GETMBR R13 R1 K8 - 0x5C380800, // 000D MOVE R14 R4 - 0x7C2C0600, // 000E CALL R11 3 - 0x182C1509, // 000F LE R11 R10 K9 - 0x782E0000, // 0010 JMPF R11 #0012 - 0x5828000A, // 0011 LDCONST R10 K10 - 0x1C2C1109, // 0012 EQ R11 R8 K9 - 0x782E0001, // 0013 JMPF R11 #0016 - 0x502C0200, // 0014 LDBOOL R11 1 0 - 0x80041600, // 0015 RET 1 R11 - 0x142C1109, // 0016 LT R11 R8 K9 - 0x782E0006, // 0017 JMPF R11 #001F - 0x002C0A06, // 0018 ADD R11 R5 R6 - 0x042C170A, // 0019 SUB R11 R11 K10 - 0x102C160A, // 001A MOD R11 R11 R10 - 0x042C1606, // 001B SUB R11 R11 R6 - 0x002C170A, // 001C ADD R11 R11 K10 - 0x5C141600, // 001D MOVE R5 R11 - 0x70020007, // 001E JMP #0027 - 0x442C1400, // 001F NEG R11 R10 - 0x142C0A0B, // 0020 LT R11 R5 R11 - 0x782E0004, // 0021 JMPF R11 #0027 - 0x202C1109, // 0022 NE R11 R8 K9 - 0x782E0002, // 0023 JMPF R11 #0027 - 0x00140A0A, // 0024 ADD R5 R5 R10 - 0x0420110A, // 0025 SUB R8 R8 K10 - 0x7001FFF7, // 0026 JMP #001F - 0x142C0A03, // 0027 LT R11 R5 R3 - 0x782E0014, // 0028 JMPF R11 #003E - 0x202C1109, // 0029 NE R11 R8 K9 - 0x782E0012, // 002A JMPF R11 #003E - 0x582C0009, // 002B LDCONST R11 K9 - 0x14300B09, // 002C LT R12 R5 K9 - 0x78320001, // 002D JMPF R12 #0030 - 0x44300A00, // 002E NEG R12 R5 - 0x5C2C1800, // 002F MOVE R11 R12 - 0x14301606, // 0030 LT R12 R11 R6 - 0x78320008, // 0031 JMPF R12 #003B - 0x00300A0B, // 0032 ADD R12 R5 R11 - 0x14301803, // 0033 LT R12 R12 R3 - 0x78320005, // 0034 JMPF R12 #003B - 0x8C30030B, // 0035 GETMET R12 R1 K11 - 0x00380A0B, // 0036 ADD R14 R5 R11 - 0x5C3C1200, // 0037 MOVE R15 R9 - 0x7C300600, // 0038 CALL R12 3 - 0x002C170A, // 0039 ADD R11 R11 K10 - 0x7001FFF4, // 003A JMP #0030 - 0x00140A0A, // 003B ADD R5 R5 R10 - 0x0420110A, // 003C SUB R8 R8 K10 - 0x7001FFE8, // 003D JMP #0027 - 0x502C0200, // 003E LDBOOL R11 1 0 - 0x80041600, // 003F RET 1 R11 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: tostring -********************************************************************/ -be_local_closure(class_CrenelPositionAnimation_tostring, /* name */ - be_nested_proto( - 12, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CrenelPositionAnimation, /* shared constants */ - be_str_weak(tostring), - &be_const_str_solidified, - ( &(const binstruction[30]) { /* code */ - 0x4C040000, // 0000 LDNIL R1 - 0x8C08010C, // 0001 GETMET R2 R0 K12 - 0x58100005, // 0002 LDCONST R4 K5 - 0x7C080400, // 0003 CALL R2 2 - 0xB80E1A00, // 0004 GETNGBL R3 K13 - 0x8C0C070E, // 0005 GETMET R3 R3 K14 - 0x5C140400, // 0006 MOVE R5 R2 - 0x7C0C0400, // 0007 CALL R3 2 - 0x780E0004, // 0008 JMPF R3 #000E - 0x600C0008, // 0009 GETGBL R3 G8 - 0x5C100400, // 000A MOVE R4 R2 - 0x7C0C0200, // 000B CALL R3 1 - 0x5C040600, // 000C MOVE R1 R3 - 0x70020004, // 000D JMP #0013 - 0x600C0018, // 000E GETGBL R3 G24 - 0x5810000F, // 000F LDCONST R4 K15 - 0x88140105, // 0010 GETMBR R5 R0 K5 - 0x7C0C0400, // 0011 CALL R3 2 - 0x5C040600, // 0012 MOVE R1 R3 - 0x600C0018, // 0013 GETGBL R3 G24 - 0x58100010, // 0014 LDCONST R4 K16 - 0x5C140200, // 0015 MOVE R5 R1 - 0x88180101, // 0016 GETMBR R6 R0 K1 - 0x881C0102, // 0017 GETMBR R7 R0 K2 - 0x88200103, // 0018 GETMBR R8 R0 K3 - 0x88240104, // 0019 GETMBR R9 R0 K4 - 0x88280111, // 001A GETMBR R10 R0 K17 - 0x882C0112, // 001B GETMBR R11 R0 K18 - 0x7C0C1000, // 001C CALL R3 8 - 0x80040600, // 001D RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: CrenelPositionAnimation -********************************************************************/ -extern const bclass be_class_Animation; -be_local_class(CrenelPositionAnimation, - 0, - &be_class_Animation, - be_nested_map(3, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { - be_const_map( * be_nested_map(5, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(nb_pulse, -1), be_const_bytes_instance(0400FF) }, - { be_const_key_weak(low_size, 4), be_const_bytes_instance(0500000003) }, - { be_const_key_weak(pos, 1), be_const_bytes_instance(040000) }, - { be_const_key_weak(pulse_size, -1), be_const_bytes_instance(0500000001) }, - { be_const_key_weak(back_color, -1), be_const_bytes_instance(0402000000FF) }, - })) ) } )) }, - { be_const_key_weak(render, 2), be_const_closure(class_CrenelPositionAnimation_render_closure) }, - { be_const_key_weak(tostring, -1), be_const_closure(class_CrenelPositionAnimation_tostring_closure) }, - })), - be_str_weak(CrenelPositionAnimation) -); - -/******************************************************************** -** Solidified function: gradient_two_color_linear -********************************************************************/ -be_local_closure(gradient_two_color_linear, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 7]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(gradient_animation), - /* K2 */ be_nested_str_weak(color), - /* K3 */ be_nested_str_weak(gradient_type), - /* K4 */ be_const_int(0), - /* K5 */ be_nested_str_weak(direction), - /* K6 */ be_nested_str_weak(movement_speed), - }), - be_str_weak(gradient_two_color_linear), - &be_const_str_solidified, - ( &(const binstruction[10]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x5408FFFF, // 0004 LDINT R2 -65536 - 0x90060402, // 0005 SETMBR R1 K2 R2 - 0x90060704, // 0006 SETMBR R1 K3 K4 - 0x90060B04, // 0007 SETMBR R1 K5 K4 - 0x90060D04, // 0008 SETMBR R1 K6 K4 - 0x80040200, // 0009 RET 1 R1 }) ) ); @@ -7125,6 +5310,1190 @@ be_local_class(GradientAnimation, be_str_weak(GradientAnimation) ); +/******************************************************************** +** Solidified function: is_color_provider +********************************************************************/ +be_local_closure(is_color_provider, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(color_provider), + }), + be_str_weak(is_color_provider), + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x6004000F, // 0000 GETGBL R1 G15 + 0x5C080000, // 0001 MOVE R2 R0 + 0xB80E0000, // 0002 GETNGBL R3 K0 + 0x880C0701, // 0003 GETMBR R3 R3 K1 + 0x7C040400, // 0004 CALL R1 2 + 0x80040200, // 0005 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_event_handlers +********************************************************************/ +be_local_closure(get_event_handlers, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(event_manager), + /* K2 */ be_nested_str_weak(get_handlers), + }), + be_str_weak(get_event_handlers), + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x88040301, // 0001 GETMBR R1 R1 K1 + 0x8C040302, // 0002 GETMET R1 R1 K2 + 0x5C0C0000, // 0003 MOVE R3 R0 + 0x7C040400, // 0004 CALL R1 2 + 0x80040200, // 0005 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: pulsating_color_provider +********************************************************************/ +be_local_closure(pulsating_color_provider, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(breathe_color), + /* K2 */ be_nested_str_weak(curve_factor), + /* K3 */ be_const_int(1), + /* K4 */ be_nested_str_weak(duration), + }), + be_str_weak(pulsating_color_provider), + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x90060503, // 0004 SETMBR R1 K2 K3 + 0x540A03E7, // 0005 LDINT R2 1000 + 0x90060802, // 0006 SETMBR R1 K4 R2 + 0x80040200, // 0007 RET 1 R1 + }) + ) +); +/*******************************************************************/ + +// compact class 'FrameBuffer' ktab size: 21, total: 43 (saved 176 bytes) +static const bvalue be_ktab_class_FrameBuffer[21] = { + /* K0 */ be_const_int(0), + /* K1 */ be_nested_str_weak(value_error), + /* K2 */ be_nested_str_weak(width_X20must_X20be_X20positive), + /* K3 */ be_nested_str_weak(width), + /* K4 */ be_nested_str_weak(pixels), + /* K5 */ be_nested_str_weak(resize), + /* K6 */ be_nested_str_weak(clear), + /* K7 */ be_nested_str_weak(int), + /* K8 */ be_nested_str_weak(instance), + /* K9 */ be_nested_str_weak(copy), + /* K10 */ be_nested_str_weak(argument_X20must_X20be_X20either_X20int_X20or_X20instance), + /* K11 */ be_nested_str_weak(index_error), + /* K12 */ be_nested_str_weak(pixel_X20index_X20out_X20of_X20range), + /* K13 */ be_nested_str_weak(set), + /* K14 */ be_nested_str_weak(tohex), + /* K15 */ be_nested_str_weak(FrameBuffer_X28width_X3D_X25s_X2C_X20pixels_X3D_X25s_X29), + /* K16 */ be_nested_str_weak(set_pixel_color), + /* K17 */ be_nested_str_weak(animation), + /* K18 */ be_nested_str_weak(frame_buffer), + /* K19 */ be_nested_str_weak(get), + /* K20 */ be_nested_str_weak(get_pixel_color), +}; + + +extern const bclass be_class_FrameBuffer; + +/******************************************************************** +** Solidified function: resize +********************************************************************/ +be_local_closure(class_FrameBuffer_resize, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(resize), + &be_const_str_solidified, + ( &(const binstruction[17]) { /* code */ + 0x18080300, // 0000 LE R2 R1 K0 + 0x780A0000, // 0001 JMPF R2 #0003 + 0xB0060302, // 0002 RAISE 1 K1 K2 + 0x88080103, // 0003 GETMBR R2 R0 K3 + 0x1C080202, // 0004 EQ R2 R1 R2 + 0x780A0000, // 0005 JMPF R2 #0007 + 0x80000400, // 0006 RET 0 + 0x90020601, // 0007 SETMBR R0 K3 R1 + 0x88080104, // 0008 GETMBR R2 R0 K4 + 0x8C080505, // 0009 GETMET R2 R2 K5 + 0x88100103, // 000A GETMBR R4 R0 K3 + 0x54160003, // 000B LDINT R5 4 + 0x08100805, // 000C MUL R4 R4 R5 + 0x7C080400, // 000D CALL R2 2 + 0x8C080106, // 000E GETMET R2 R0 K6 + 0x7C080200, // 000F CALL R2 1 + 0x80000000, // 0010 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: clear +********************************************************************/ +be_local_closure(class_FrameBuffer_clear, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(clear), + &be_const_str_solidified, + ( &(const binstruction[18]) { /* code */ + 0x88040104, // 0000 GETMBR R1 R0 K4 + 0x8C040306, // 0001 GETMET R1 R1 K6 + 0x7C040200, // 0002 CALL R1 1 + 0x6004000C, // 0003 GETGBL R1 G12 + 0x88080104, // 0004 GETMBR R2 R0 K4 + 0x7C040200, // 0005 CALL R1 1 + 0x88080103, // 0006 GETMBR R2 R0 K3 + 0x540E0003, // 0007 LDINT R3 4 + 0x08080403, // 0008 MUL R2 R2 R3 + 0x20040202, // 0009 NE R1 R1 R2 + 0x78060005, // 000A JMPF R1 #0011 + 0x88040104, // 000B GETMBR R1 R0 K4 + 0x8C040305, // 000C GETMET R1 R1 K5 + 0x880C0103, // 000D GETMBR R3 R0 K3 + 0x54120003, // 000E LDINT R4 4 + 0x080C0604, // 000F MUL R3 R3 R4 + 0x7C040400, // 0010 CALL R1 2 + 0x80000000, // 0011 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(class_FrameBuffer_init, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(init), + &be_const_str_solidified, + ( &(const binstruction[36]) { /* code */ + 0x60080004, // 0000 GETGBL R2 G4 + 0x5C0C0200, // 0001 MOVE R3 R1 + 0x7C080200, // 0002 CALL R2 1 + 0x1C080507, // 0003 EQ R2 R2 K7 + 0x780A0010, // 0004 JMPF R2 #0016 + 0x5C080200, // 0005 MOVE R2 R1 + 0x180C0500, // 0006 LE R3 R2 K0 + 0x780E0000, // 0007 JMPF R3 #0009 + 0xB0060302, // 0008 RAISE 1 K1 K2 + 0x90020602, // 0009 SETMBR R0 K3 R2 + 0x600C0015, // 000A GETGBL R3 G21 + 0x54120003, // 000B LDINT R4 4 + 0x08100404, // 000C MUL R4 R2 R4 + 0x7C0C0200, // 000D CALL R3 1 + 0x8C100705, // 000E GETMET R4 R3 K5 + 0x541A0003, // 000F LDINT R6 4 + 0x08180406, // 0010 MUL R6 R2 R6 + 0x7C100400, // 0011 CALL R4 2 + 0x90020803, // 0012 SETMBR R0 K4 R3 + 0x8C100106, // 0013 GETMET R4 R0 K6 + 0x7C100200, // 0014 CALL R4 1 + 0x7002000C, // 0015 JMP #0023 + 0x60080004, // 0016 GETGBL R2 G4 + 0x5C0C0200, // 0017 MOVE R3 R1 + 0x7C080200, // 0018 CALL R2 1 + 0x1C080508, // 0019 EQ R2 R2 K8 + 0x780A0006, // 001A JMPF R2 #0022 + 0x88080303, // 001B GETMBR R2 R1 K3 + 0x90020602, // 001C SETMBR R0 K3 R2 + 0x88080304, // 001D GETMBR R2 R1 K4 + 0x8C080509, // 001E GETMET R2 R2 K9 + 0x7C080200, // 001F CALL R2 1 + 0x90020802, // 0020 SETMBR R0 K4 R2 + 0x70020000, // 0021 JMP #0023 + 0xB006030A, // 0022 RAISE 1 K1 K10 + 0x80000000, // 0023 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_pixel_color +********************************************************************/ +be_local_closure(class_FrameBuffer_set_pixel_color, /* name */ + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(set_pixel_color), + &be_const_str_solidified, + ( &(const binstruction[14]) { /* code */ + 0x140C0300, // 0000 LT R3 R1 K0 + 0x740E0002, // 0001 JMPT R3 #0005 + 0x880C0103, // 0002 GETMBR R3 R0 K3 + 0x280C0203, // 0003 GE R3 R1 R3 + 0x780E0000, // 0004 JMPF R3 #0006 + 0xB006170C, // 0005 RAISE 1 K11 K12 + 0x880C0104, // 0006 GETMBR R3 R0 K4 + 0x8C0C070D, // 0007 GETMET R3 R3 K13 + 0x54160003, // 0008 LDINT R5 4 + 0x08140205, // 0009 MUL R5 R1 R5 + 0x5C180400, // 000A MOVE R6 R2 + 0x541E0003, // 000B LDINT R7 4 + 0x7C0C0800, // 000C CALL R3 4 + 0x80000000, // 000D RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: tohex +********************************************************************/ +be_local_closure(class_FrameBuffer_tohex, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(tohex), + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x88040104, // 0000 GETMBR R1 R0 K4 + 0x8C04030E, // 0001 GETMET R1 R1 K14 + 0x7C040200, // 0002 CALL R1 1 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: tostring +********************************************************************/ +be_local_closure(class_FrameBuffer_tostring, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(tostring), + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x60040018, // 0000 GETGBL R1 G24 + 0x5808000F, // 0001 LDCONST R2 K15 + 0x880C0103, // 0002 GETMBR R3 R0 K3 + 0x88100104, // 0003 GETMBR R4 R0 K4 + 0x7C040600, // 0004 CALL R1 3 + 0x80040200, // 0005 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: setitem +********************************************************************/ +be_local_closure(class_FrameBuffer_setitem, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(setitem), + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0x8C0C0110, // 0000 GETMET R3 R0 K16 + 0x5C140200, // 0001 MOVE R5 R1 + 0x5C180400, // 0002 MOVE R6 R2 + 0x7C0C0600, // 0003 CALL R3 3 + 0x80000000, // 0004 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: copy +********************************************************************/ +be_local_closure(class_FrameBuffer_copy, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(copy), + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0xB8062200, // 0000 GETNGBL R1 K17 + 0x8C040312, // 0001 GETMET R1 R1 K18 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x80040200, // 0004 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_pixel_color +********************************************************************/ +be_local_closure(class_FrameBuffer_get_pixel_color, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(get_pixel_color), + &be_const_str_solidified, + ( &(const binstruction[13]) { /* code */ + 0x14080300, // 0000 LT R2 R1 K0 + 0x740A0002, // 0001 JMPT R2 #0005 + 0x88080103, // 0002 GETMBR R2 R0 K3 + 0x28080202, // 0003 GE R2 R1 R2 + 0x780A0000, // 0004 JMPF R2 #0006 + 0xB006170C, // 0005 RAISE 1 K11 K12 + 0x88080104, // 0006 GETMBR R2 R0 K4 + 0x8C080513, // 0007 GETMET R2 R2 K19 + 0x54120003, // 0008 LDINT R4 4 + 0x08100204, // 0009 MUL R4 R1 R4 + 0x54160003, // 000A LDINT R5 4 + 0x7C080600, // 000B CALL R2 3 + 0x80040400, // 000C RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: item +********************************************************************/ +be_local_closure(class_FrameBuffer_item, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_FrameBuffer, /* shared constants */ + be_str_weak(item), + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x8C080114, // 0000 GETMET R2 R0 K20 + 0x5C100200, // 0001 MOVE R4 R1 + 0x7C080400, // 0002 CALL R2 2 + 0x80040400, // 0003 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: FrameBuffer +********************************************************************/ +extern const bclass be_class_FrameBufferNtv; +be_local_class(FrameBuffer, + 2, + &be_class_FrameBufferNtv, + be_nested_map(12, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(pixels, -1), be_const_var(0) }, + { be_const_key_weak(resize, 6), be_const_closure(class_FrameBuffer_resize_closure) }, + { be_const_key_weak(clear, -1), be_const_closure(class_FrameBuffer_clear_closure) }, + { be_const_key_weak(init, -1), be_const_closure(class_FrameBuffer_init_closure) }, + { be_const_key_weak(set_pixel_color, -1), be_const_closure(class_FrameBuffer_set_pixel_color_closure) }, + { be_const_key_weak(tohex, -1), be_const_closure(class_FrameBuffer_tohex_closure) }, + { be_const_key_weak(tostring, -1), be_const_closure(class_FrameBuffer_tostring_closure) }, + { be_const_key_weak(copy, -1), be_const_closure(class_FrameBuffer_copy_closure) }, + { be_const_key_weak(setitem, 9), be_const_closure(class_FrameBuffer_setitem_closure) }, + { be_const_key_weak(get_pixel_color, 7), be_const_closure(class_FrameBuffer_get_pixel_color_closure) }, + { be_const_key_weak(item, -1), be_const_closure(class_FrameBuffer_item_closure) }, + { be_const_key_weak(width, -1), be_const_var(1) }, + })), + be_str_weak(FrameBuffer) +); +extern const bclass be_class_ColorProvider; +// compact class 'ColorProvider' ktab size: 10, total: 11 (saved 8 bytes) +static const bvalue be_ktab_class_ColorProvider[10] = { + /* K0 */ be_nested_str_weak(produce_value), + /* K1 */ be_nested_str_weak(color), + /* K2 */ be_nested_str_weak(_color_lut), + /* K3 */ be_const_class(be_class_ColorProvider), + /* K4 */ be_nested_str_weak(tasmota), + /* K5 */ be_nested_str_weak(scale_uint), + /* K6 */ be_const_int(0), + /* K7 */ be_const_int(-16777216), + /* K8 */ be_nested_str_weak(init), + /* K9 */ be_nested_str_weak(_lut_dirty), +}; + + +extern const bclass be_class_ColorProvider; + +/******************************************************************** +** Solidified function: get_color_for_value +********************************************************************/ +be_local_closure(class_ColorProvider_get_color_for_value, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_ColorProvider, /* shared constants */ + be_str_weak(get_color_for_value), + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0x8C0C0100, // 0000 GETMET R3 R0 K0 + 0x58140001, // 0001 LDCONST R5 K1 + 0x5C180400, // 0002 MOVE R6 R2 + 0x7C0C0600, // 0003 CALL R3 3 + 0x80040600, // 0004 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_lut +********************************************************************/ +be_local_closure(class_ColorProvider_get_lut, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_ColorProvider, /* shared constants */ + be_str_weak(get_lut), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040102, // 0000 GETMBR R1 R0 K2 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: apply_brightness +********************************************************************/ +be_local_closure(class_ColorProvider_apply_brightness, /* name */ + be_nested_proto( + 13, /* nstack */ + 2, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_ColorProvider, /* shared constants */ + be_str_weak(apply_brightness), + &be_const_str_solidified, + ( &(const binstruction[51]) { /* code */ + 0x58080003, // 0000 LDCONST R2 K3 + 0x540E00FE, // 0001 LDINT R3 255 + 0x1C0C0203, // 0002 EQ R3 R1 R3 + 0x780E0000, // 0003 JMPF R3 #0005 + 0x80040000, // 0004 RET 1 R0 + 0x540E000F, // 0005 LDINT R3 16 + 0x3C0C0003, // 0006 SHR R3 R0 R3 + 0x541200FE, // 0007 LDINT R4 255 + 0x2C0C0604, // 0008 AND R3 R3 R4 + 0x54120007, // 0009 LDINT R4 8 + 0x3C100004, // 000A SHR R4 R0 R4 + 0x541600FE, // 000B LDINT R5 255 + 0x2C100805, // 000C AND R4 R4 R5 + 0x541600FE, // 000D LDINT R5 255 + 0x2C140005, // 000E AND R5 R0 R5 + 0xB81A0800, // 000F GETNGBL R6 K4 + 0x8C180D05, // 0010 GETMET R6 R6 K5 + 0x5C200600, // 0011 MOVE R8 R3 + 0x58240006, // 0012 LDCONST R9 K6 + 0x542A00FE, // 0013 LDINT R10 255 + 0x582C0006, // 0014 LDCONST R11 K6 + 0x5C300200, // 0015 MOVE R12 R1 + 0x7C180C00, // 0016 CALL R6 6 + 0x5C0C0C00, // 0017 MOVE R3 R6 + 0xB81A0800, // 0018 GETNGBL R6 K4 + 0x8C180D05, // 0019 GETMET R6 R6 K5 + 0x5C200800, // 001A MOVE R8 R4 + 0x58240006, // 001B LDCONST R9 K6 + 0x542A00FE, // 001C LDINT R10 255 + 0x582C0006, // 001D LDCONST R11 K6 + 0x5C300200, // 001E MOVE R12 R1 + 0x7C180C00, // 001F CALL R6 6 + 0x5C100C00, // 0020 MOVE R4 R6 + 0xB81A0800, // 0021 GETNGBL R6 K4 + 0x8C180D05, // 0022 GETMET R6 R6 K5 + 0x5C200A00, // 0023 MOVE R8 R5 + 0x58240006, // 0024 LDCONST R9 K6 + 0x542A00FE, // 0025 LDINT R10 255 + 0x582C0006, // 0026 LDCONST R11 K6 + 0x5C300200, // 0027 MOVE R12 R1 + 0x7C180C00, // 0028 CALL R6 6 + 0x5C140C00, // 0029 MOVE R5 R6 + 0x2C180107, // 002A AND R6 R0 K7 + 0x541E000F, // 002B LDINT R7 16 + 0x381C0607, // 002C SHL R7 R3 R7 + 0x30180C07, // 002D OR R6 R6 R7 + 0x541E0007, // 002E LDINT R7 8 + 0x381C0807, // 002F SHL R7 R4 R7 + 0x30180C07, // 0030 OR R6 R6 R7 + 0x30180C05, // 0031 OR R6 R6 R5 + 0x80040C00, // 0032 RET 1 R6 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: produce_value +********************************************************************/ +be_local_closure(class_ColorProvider_produce_value, /* name */ + be_nested_proto( + 4, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_ColorProvider, /* shared constants */ + be_str_weak(produce_value), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x540DFFFE, // 0000 LDINT R3 -1 + 0x80040600, // 0001 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(class_ColorProvider_init, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_ColorProvider, /* shared constants */ + be_str_weak(init), + &be_const_str_solidified, + ( &(const binstruction[11]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080508, // 0003 GETMET R2 R2 K8 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x4C080000, // 0006 LDNIL R2 + 0x90020402, // 0007 SETMBR R0 K2 R2 + 0x50080200, // 0008 LDBOOL R2 1 0 + 0x90021202, // 0009 SETMBR R0 K9 R2 + 0x80000000, // 000A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: ColorProvider +********************************************************************/ +extern const bclass be_class_ValueProvider; +be_local_class(ColorProvider, + 2, + &be_class_ValueProvider, + be_nested_map(9, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(LUT_FACTOR, 8), be_const_int(1) }, + { be_const_key_weak(get_lut, 7), be_const_closure(class_ColorProvider_get_lut_closure) }, + { be_const_key_weak(get_color_for_value, 0), be_const_closure(class_ColorProvider_get_color_for_value_closure) }, + { be_const_key_weak(produce_value, -1), be_const_closure(class_ColorProvider_produce_value_closure) }, + { be_const_key_weak(_lut_dirty, -1), be_const_var(1) }, + { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { + be_const_map( * be_nested_map(1, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(brightness, -1), be_const_bytes_instance(07000001FF0001FF00) }, + })) ) } )) }, + { be_const_key_weak(init, 5), be_const_closure(class_ColorProvider_init_closure) }, + { be_const_key_weak(_color_lut, -1), be_const_var(0) }, + { be_const_key_weak(apply_brightness, -1), be_const_static_closure(class_ColorProvider_apply_brightness_closure) }, + })), + be_str_weak(ColorProvider) +); + +/******************************************************************** +** Solidified function: noise_fractal +********************************************************************/ +be_local_closure(noise_fractal, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[15]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(noise_animation), + /* K2 */ be_nested_str_weak(rich_palette), + /* K3 */ be_nested_str_weak(palette), + /* K4 */ be_nested_str_weak(PALETTE_RAINBOW), + /* K5 */ be_nested_str_weak(cycle_period), + /* K6 */ be_nested_str_weak(transition_type), + /* K7 */ be_const_int(1), + /* K8 */ be_nested_str_weak(brightness), + /* K9 */ be_nested_str_weak(color), + /* K10 */ be_nested_str_weak(scale), + /* K11 */ be_nested_str_weak(speed), + /* K12 */ be_nested_str_weak(octaves), + /* K13 */ be_const_int(3), + /* K14 */ be_nested_str_weak(persistence), + }), + be_str_weak(noise_fractal), + &be_const_str_solidified, + ( &(const binstruction[25]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0xB80A0000, // 0004 GETNGBL R2 K0 + 0x8C080502, // 0005 GETMET R2 R2 K2 + 0x5C100000, // 0006 MOVE R4 R0 + 0x7C080400, // 0007 CALL R2 2 + 0xB80E0000, // 0008 GETNGBL R3 K0 + 0x880C0704, // 0009 GETMBR R3 R3 K4 + 0x900A0603, // 000A SETMBR R2 K3 R3 + 0x540E1387, // 000B LDINT R3 5000 + 0x900A0A03, // 000C SETMBR R2 K5 R3 + 0x900A0D07, // 000D SETMBR R2 K6 K7 + 0x540E00FE, // 000E LDINT R3 255 + 0x900A1003, // 000F SETMBR R2 K8 R3 + 0x90061202, // 0010 SETMBR R1 K9 R2 + 0x540E001D, // 0011 LDINT R3 30 + 0x90061403, // 0012 SETMBR R1 K10 R3 + 0x540E0013, // 0013 LDINT R3 20 + 0x90061603, // 0014 SETMBR R1 K11 R3 + 0x9006190D, // 0015 SETMBR R1 K12 K13 + 0x540E007F, // 0016 LDINT R3 128 + 0x90061C03, // 0017 SETMBR R1 K14 R3 + 0x80040200, // 0018 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: noise_single_color +********************************************************************/ +be_local_closure(noise_single_color, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(noise_animation), + /* K2 */ be_nested_str_weak(color), + /* K3 */ be_nested_str_weak(scale), + /* K4 */ be_nested_str_weak(speed), + /* K5 */ be_nested_str_weak(octaves), + /* K6 */ be_const_int(1), + }), + be_str_weak(noise_single_color), + &be_const_str_solidified, + ( &(const binstruction[12]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x5409FFFE, // 0004 LDINT R2 -1 + 0x90060402, // 0005 SETMBR R1 K2 R2 + 0x540A0031, // 0006 LDINT R2 50 + 0x90060602, // 0007 SETMBR R1 K3 R2 + 0x540A001D, // 0008 LDINT R2 30 + 0x90060802, // 0009 SETMBR R1 K4 R2 + 0x90060B06, // 000A SETMBR R1 K5 K6 + 0x80040200, // 000B RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_user_function +********************************************************************/ +be_local_closure(get_user_function, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(_user_functions), + /* K2 */ be_nested_str_weak(find), + }), + be_str_weak(get_user_function), + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x88040301, // 0001 GETMBR R1 R1 K1 + 0x8C040302, // 0002 GETMET R1 R1 K2 + 0x5C0C0000, // 0003 MOVE R3 R0 + 0x7C040400, // 0004 CALL R1 2 + 0x80040200, // 0005 RET 1 R1 + }) + ) +); +/*******************************************************************/ + +// compact class 'BeaconAnimation' ktab size: 15, total: 19 (saved 32 bytes) +static const bvalue be_ktab_class_BeaconAnimation[15] = { + /* K0 */ be_nested_str_weak(back_color), + /* K1 */ be_nested_str_weak(pos), + /* K2 */ be_nested_str_weak(slew_size), + /* K3 */ be_nested_str_weak(beacon_size), + /* K4 */ be_nested_str_weak(color), + /* K5 */ be_const_int(-16777216), + /* K6 */ be_const_int(0), + /* K7 */ be_nested_str_weak(fill_pixels), + /* K8 */ be_nested_str_weak(pixels), + /* K9 */ be_nested_str_weak(tasmota), + /* K10 */ be_nested_str_weak(scale_int), + /* K11 */ be_const_int(1), + /* K12 */ be_nested_str_weak(blend_linear), + /* K13 */ be_nested_str_weak(set_pixel_color), + /* K14 */ be_nested_str_weak(BeaconAnimation_X28color_X3D0x_X2508x_X2C_X20pos_X3D_X25s_X2C_X20beacon_size_X3D_X25s_X2C_X20slew_size_X3D_X25s_X29), +}; + + +extern const bclass be_class_BeaconAnimation; + +/******************************************************************** +** Solidified function: render +********************************************************************/ +be_local_closure(class_BeaconAnimation_render, /* name */ + be_nested_proto( + 23, /* nstack */ + 4, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_BeaconAnimation, /* shared constants */ + be_str_weak(render), + &be_const_str_solidified, + ( &(const binstruction[97]) { /* code */ + 0x88100100, // 0000 GETMBR R4 R0 K0 + 0x88140101, // 0001 GETMBR R5 R0 K1 + 0x88180102, // 0002 GETMBR R6 R0 K2 + 0x881C0103, // 0003 GETMBR R7 R0 K3 + 0x88200104, // 0004 GETMBR R8 R0 K4 + 0x20240905, // 0005 NE R9 R4 K5 + 0x78260006, // 0006 JMPF R9 #000E + 0x2C240905, // 0007 AND R9 R4 K5 + 0x20241306, // 0008 NE R9 R9 K6 + 0x78260003, // 0009 JMPF R9 #000E + 0x8C240307, // 000A GETMET R9 R1 K7 + 0x882C0308, // 000B GETMBR R11 R1 K8 + 0x5C300800, // 000C MOVE R12 R4 + 0x7C240600, // 000D CALL R9 3 + 0x5C240A00, // 000E MOVE R9 R5 + 0x00280A07, // 000F ADD R10 R5 R7 + 0x142C1306, // 0010 LT R11 R9 K6 + 0x782E0000, // 0011 JMPF R11 #0013 + 0x58240006, // 0012 LDCONST R9 K6 + 0x282C1403, // 0013 GE R11 R10 R3 + 0x782E0000, // 0014 JMPF R11 #0016 + 0x5C280600, // 0015 MOVE R10 R3 + 0x8C2C0307, // 0016 GETMET R11 R1 K7 + 0x88340308, // 0017 GETMBR R13 R1 K8 + 0x5C381000, // 0018 MOVE R14 R8 + 0x5C3C1200, // 0019 MOVE R15 R9 + 0x5C401400, // 001A MOVE R16 R10 + 0x7C2C0A00, // 001B CALL R11 5 + 0x4C2C0000, // 001C LDNIL R11 + 0x24300D06, // 001D GT R12 R6 K6 + 0x7832003F, // 001E JMPF R12 #005F + 0x04300A06, // 001F SUB R12 R5 R6 + 0x5C340A00, // 0020 MOVE R13 R5 + 0x14381906, // 0021 LT R14 R12 K6 + 0x783A0000, // 0022 JMPF R14 #0024 + 0x58300006, // 0023 LDCONST R12 K6 + 0x28381A03, // 0024 GE R14 R13 R3 + 0x783A0000, // 0025 JMPF R14 #0027 + 0x5C340600, // 0026 MOVE R13 R3 + 0x5C2C1800, // 0027 MOVE R11 R12 + 0x1438160D, // 0028 LT R14 R11 R13 + 0x783A0013, // 0029 JMPF R14 #003E + 0xB83A1200, // 002A GETNGBL R14 K9 + 0x8C381D0A, // 002B GETMET R14 R14 K10 + 0x5C401600, // 002C MOVE R16 R11 + 0x04440A06, // 002D SUB R17 R5 R6 + 0x0444230B, // 002E SUB R17 R17 K11 + 0x5C480A00, // 002F MOVE R18 R5 + 0x544E00FE, // 0030 LDINT R19 255 + 0x58500006, // 0031 LDCONST R20 K6 + 0x7C380C00, // 0032 CALL R14 6 + 0x8C3C030C, // 0033 GETMET R15 R1 K12 + 0x5C440800, // 0034 MOVE R17 R4 + 0x5C481000, // 0035 MOVE R18 R8 + 0x5C4C1C00, // 0036 MOVE R19 R14 + 0x7C3C0800, // 0037 CALL R15 4 + 0x8C40030D, // 0038 GETMET R16 R1 K13 + 0x5C481600, // 0039 MOVE R18 R11 + 0x5C4C1E00, // 003A MOVE R19 R15 + 0x7C400600, // 003B CALL R16 3 + 0x002C170B, // 003C ADD R11 R11 K11 + 0x7001FFE9, // 003D JMP #0028 + 0x00380A07, // 003E ADD R14 R5 R7 + 0x003C0A07, // 003F ADD R15 R5 R7 + 0x003C1E06, // 0040 ADD R15 R15 R6 + 0x14401D06, // 0041 LT R16 R14 K6 + 0x78420000, // 0042 JMPF R16 #0044 + 0x58380006, // 0043 LDCONST R14 K6 + 0x28401E03, // 0044 GE R16 R15 R3 + 0x78420000, // 0045 JMPF R16 #0047 + 0x5C3C0600, // 0046 MOVE R15 R3 + 0x5C2C1C00, // 0047 MOVE R11 R14 + 0x1440160F, // 0048 LT R16 R11 R15 + 0x78420014, // 0049 JMPF R16 #005F + 0xB8421200, // 004A GETNGBL R16 K9 + 0x8C40210A, // 004B GETMET R16 R16 K10 + 0x5C481600, // 004C MOVE R18 R11 + 0x004C0A07, // 004D ADD R19 R5 R7 + 0x044C270B, // 004E SUB R19 R19 K11 + 0x00500A07, // 004F ADD R20 R5 R7 + 0x00502806, // 0050 ADD R20 R20 R6 + 0x58540006, // 0051 LDCONST R21 K6 + 0x545A00FE, // 0052 LDINT R22 255 + 0x7C400C00, // 0053 CALL R16 6 + 0x8C44030C, // 0054 GETMET R17 R1 K12 + 0x5C4C0800, // 0055 MOVE R19 R4 + 0x5C501000, // 0056 MOVE R20 R8 + 0x5C542000, // 0057 MOVE R21 R16 + 0x7C440800, // 0058 CALL R17 4 + 0x8C48030D, // 0059 GETMET R18 R1 K13 + 0x5C501600, // 005A MOVE R20 R11 + 0x5C542200, // 005B MOVE R21 R17 + 0x7C480600, // 005C CALL R18 3 + 0x002C170B, // 005D ADD R11 R11 K11 + 0x7001FFE8, // 005E JMP #0048 + 0x50300200, // 005F LDBOOL R12 1 0 + 0x80041800, // 0060 RET 1 R12 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: tostring +********************************************************************/ +be_local_closure(class_BeaconAnimation_tostring, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_BeaconAnimation, /* shared constants */ + be_str_weak(tostring), + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0x60040018, // 0000 GETGBL R1 G24 + 0x5808000E, // 0001 LDCONST R2 K14 + 0x880C0104, // 0002 GETMBR R3 R0 K4 + 0x88100101, // 0003 GETMBR R4 R0 K1 + 0x88140103, // 0004 GETMBR R5 R0 K3 + 0x88180102, // 0005 GETMBR R6 R0 K2 + 0x7C040A00, // 0006 CALL R1 5 + 0x80040200, // 0007 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: BeaconAnimation +********************************************************************/ +extern const bclass be_class_Animation; +be_local_class(BeaconAnimation, + 0, + &be_class_Animation, + be_nested_map(3, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { + be_const_map( * be_nested_map(4, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(slew_size, -1), be_const_bytes_instance(0500000000) }, + { be_const_key_weak(pos, -1), be_const_bytes_instance(040000) }, + { be_const_key_weak(back_color, 0), be_const_bytes_instance(0402000000FF) }, + { be_const_key_weak(beacon_size, -1), be_const_bytes_instance(0500000001) }, + })) ) } )) }, + { be_const_key_weak(render, 2), be_const_closure(class_BeaconAnimation_render_closure) }, + { be_const_key_weak(tostring, -1), be_const_closure(class_BeaconAnimation_tostring_closure) }, + })), + be_str_weak(BeaconAnimation) +); + +/******************************************************************** +** Solidified function: sine_osc +********************************************************************/ +be_local_closure(sine_osc, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(oscillator_value), + /* K2 */ be_nested_str_weak(form), + /* K3 */ be_nested_str_weak(SINE), + }), + be_str_weak(sine_osc), + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0xB80A0000, // 0004 GETNGBL R2 K0 + 0x88080503, // 0005 GETMBR R2 R2 K3 + 0x90060402, // 0006 SETMBR R1 K2 R2 + 0x80040200, // 0007 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: pulsating_animation +********************************************************************/ +be_local_closure(pulsating_animation, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(breathe_animation), + /* K2 */ be_nested_str_weak(curve_factor), + /* K3 */ be_const_int(1), + /* K4 */ be_nested_str_weak(period), + }), + be_str_weak(pulsating_animation), + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x90060503, // 0004 SETMBR R1 K2 K3 + 0x540A03E7, // 0005 LDINT R2 1000 + 0x90060802, // 0006 SETMBR R1 K4 R2 + 0x80040200, // 0007 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: gradient_two_color_linear +********************************************************************/ +be_local_closure(gradient_two_color_linear, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(gradient_animation), + /* K2 */ be_nested_str_weak(color), + /* K3 */ be_nested_str_weak(gradient_type), + /* K4 */ be_const_int(0), + /* K5 */ be_nested_str_weak(direction), + /* K6 */ be_nested_str_weak(movement_speed), + }), + be_str_weak(gradient_two_color_linear), + &be_const_str_solidified, + ( &(const binstruction[10]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x5408FFFF, // 0004 LDINT R2 -65536 + 0x90060402, // 0005 SETMBR R1 K2 R2 + 0x90060704, // 0006 SETMBR R1 K3 K4 + 0x90060B04, // 0007 SETMBR R1 K5 K4 + 0x90060D04, // 0008 SETMBR R1 K6 K4 + 0x80040200, // 0009 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: register_event_handler ********************************************************************/ @@ -7457,8 +6826,8 @@ be_local_class(StaticValueProvider, })), be_str_weak(StaticValueProvider) ); -// compact class 'RichPaletteColorProvider' ktab size: 57, total: 126 (saved 552 bytes) -static const bvalue be_ktab_class_RichPaletteColorProvider[57] = { +// compact class 'RichPaletteColorProvider' ktab size: 58, total: 129 (saved 568 bytes) +static const bvalue be_ktab_class_RichPaletteColorProvider[58] = { /* K0 */ be_nested_str_weak(_value_arr), /* K1 */ be_nested_str_weak(_recompute_palette), /* K2 */ be_nested_str_weak(_color_lut), @@ -7498,24 +6867,25 @@ static const bvalue be_ktab_class_RichPaletteColorProvider[57] = { /* K36 */ be_nested_str_weak(_light_state), /* K37 */ be_nested_str_weak(light_state), /* K38 */ be_nested_str_weak(RGB), - /* K39 */ be_nested_str_weak(add), - /* K40 */ be_nested_str_weak(tasmota), - /* K41 */ be_nested_str_weak(scale_int), - /* K42 */ be_nested_str_weak(on_param_changed), - /* K43 */ be_nested_str_weak(transition_type), - /* K44 */ be_nested_str_weak(animation), - /* K45 */ be_nested_str_weak(SINE), - /* K46 */ be_nested_str_weak(scale_uint), - /* K47 */ be_nested_str_weak(sine_int), - /* K48 */ be_nested_str_weak(start), - /* K49 */ be_nested_str_weak(_fix_time_ms), - /* K50 */ be_nested_str_weak(start_time), - /* K51 */ be_nested_str_weak(set_rgb), - /* K52 */ be_nested_str_weak(bri), - /* K53 */ be_nested_str_weak(set_bri), - /* K54 */ be_nested_str_weak(r), - /* K55 */ be_nested_str_weak(g), - /* K56 */ be_nested_str_weak(b), + /* K39 */ be_nested_str_weak(animation), + /* K40 */ be_nested_str_weak(PALETTE_RAINBOW), + /* K41 */ be_nested_str_weak(add), + /* K42 */ be_nested_str_weak(tasmota), + /* K43 */ be_nested_str_weak(scale_int), + /* K44 */ be_nested_str_weak(on_param_changed), + /* K45 */ be_nested_str_weak(transition_type), + /* K46 */ be_nested_str_weak(SINE), + /* K47 */ be_nested_str_weak(scale_uint), + /* K48 */ be_nested_str_weak(sine_int), + /* K49 */ be_nested_str_weak(start), + /* K50 */ be_nested_str_weak(_fix_time_ms), + /* K51 */ be_nested_str_weak(start_time), + /* K52 */ be_nested_str_weak(set_rgb), + /* K53 */ be_nested_str_weak(bri), + /* K54 */ be_nested_str_weak(set_bri), + /* K55 */ be_nested_str_weak(r), + /* K56 */ be_nested_str_weak(g), + /* K57 */ be_nested_str_weak(b), }; @@ -8004,7 +7374,7 @@ be_local_closure(class_RichPaletteColorProvider_init, /* name */ &be_ktab_class_RichPaletteColorProvider, /* shared constants */ be_str_weak(init), &be_const_str_solidified, - ( &(const binstruction[19]) { /* code */ + ( &(const binstruction[22]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 0x7C080200, // 0002 CALL R2 1 @@ -8020,10 +7390,13 @@ be_local_closure(class_RichPaletteColorProvider_init, /* name */ 0x88140B26, // 000C GETMBR R5 R5 K38 0x7C0C0400, // 000D CALL R3 2 0x90024803, // 000E SETMBR R0 K36 R3 - 0x8C0C0327, // 000F GETMET R3 R1 K39 - 0x5C140000, // 0010 MOVE R5 R0 - 0x7C0C0400, // 0011 CALL R3 2 - 0x80000000, // 0012 RET 0 + 0xB80E4E00, // 000F GETNGBL R3 K39 + 0x880C0728, // 0010 GETMBR R3 R3 K40 + 0x90022A03, // 0011 SETMBR R0 K21 R3 + 0x8C0C0329, // 0012 GETMET R3 R1 K41 + 0x5C140000, // 0013 MOVE R5 R0 + 0x7C0C0400, // 0014 CALL R3 2 + 0x80000000, // 0015 RET 0 }) ) ); @@ -8078,8 +7451,8 @@ be_local_closure(class_RichPaletteColorProvider__parse_palette, /* name */ 0x581C0005, // 001C LDCONST R7 K5 0x14240E05, // 001D LT R9 R7 R5 0x78260010, // 001E JMPF R9 #0030 - 0xB8265000, // 001F GETNGBL R9 K40 - 0x8C241329, // 0020 GETMET R9 R9 K41 + 0xB8265400, // 001F GETNGBL R9 K42 + 0x8C24132B, // 0020 GETMET R9 R9 K43 0x5C2C1000, // 0021 MOVE R11 R8 0x58300005, // 0022 LDCONST R12 K5 0x5C340C00, // 0023 MOVE R13 R6 @@ -8104,8 +7477,8 @@ be_local_closure(class_RichPaletteColorProvider__parse_palette, /* name */ 0x08240C09, // 0036 MUL R9 R6 R9 0x58280009, // 0037 LDCONST R10 K9 0x7C1C0600, // 0038 CALL R7 3 - 0xB8225000, // 0039 GETNGBL R8 K40 - 0x8C201129, // 003A GETMET R8 R8 K41 + 0xB8225400, // 0039 GETNGBL R8 K42 + 0x8C20112B, // 003A GETMET R8 R8 K43 0x5C280E00, // 003B MOVE R10 R7 0x582C0005, // 003C LDCONST R11 K5 0x543200FE, // 003D LDINT R12 255 @@ -8142,7 +7515,7 @@ be_local_closure(class_RichPaletteColorProvider_on_param_changed, /* name */ 0x600C0003, // 0000 GETGBL R3 G3 0x5C100000, // 0001 MOVE R4 R0 0x7C0C0200, // 0002 CALL R3 1 - 0x8C0C072A, // 0003 GETMET R3 R3 K42 + 0x8C0C072C, // 0003 GETMET R3 R3 K44 0x5C140200, // 0004 MOVE R5 R1 0x5C180400, // 0005 MOVE R6 R2 0x7C0C0600, // 0006 CALL R3 3 @@ -8162,7 +7535,7 @@ be_local_closure(class_RichPaletteColorProvider_on_param_changed, /* name */ 0x7C0C0200, // 0014 CALL R3 1 0x1C0C0315, // 0015 EQ R3 R1 K21 0x740E0001, // 0016 JMPT R3 #0019 - 0x1C0C032B, // 0017 EQ R3 R1 K43 + 0x1C0C032D, // 0017 EQ R3 R1 K45 0x780E0001, // 0018 JMPF R3 #001B 0x500C0200, // 0019 LDBOOL R3 1 0 0x90021403, // 001A SETMBR R0 K10 R3 @@ -8190,42 +7563,42 @@ be_local_closure(class_RichPaletteColorProvider__interpolate, /* name */ be_str_weak(_interpolate), &be_const_str_solidified, ( &(const binstruction[54]) { /* code */ - 0x8818012B, // 0000 GETMBR R6 R0 K43 - 0xB81E5800, // 0001 GETNGBL R7 K44 - 0x881C0F2D, // 0002 GETMBR R7 R7 K45 + 0x8818012D, // 0000 GETMBR R6 R0 K45 + 0xB81E4E00, // 0001 GETNGBL R7 K39 + 0x881C0F2E, // 0002 GETMBR R7 R7 K46 0x1C1C0C07, // 0003 EQ R7 R6 R7 0x781E0026, // 0004 JMPF R7 #002C - 0xB81E5000, // 0005 GETNGBL R7 K40 - 0x8C1C0F2E, // 0006 GETMET R7 R7 K46 + 0xB81E5400, // 0005 GETNGBL R7 K42 + 0x8C1C0F2F, // 0006 GETMET R7 R7 K47 0x5C240200, // 0007 MOVE R9 R1 0x5C280400, // 0008 MOVE R10 R2 0x5C2C0600, // 0009 MOVE R11 R3 0x58300005, // 000A LDCONST R12 K5 0x543600FE, // 000B LDINT R13 255 0x7C1C0C00, // 000C CALL R7 6 - 0xB8225000, // 000D GETNGBL R8 K40 - 0x8C20112E, // 000E GETMET R8 R8 K46 + 0xB8225400, // 000D GETNGBL R8 K42 + 0x8C20112F, // 000E GETMET R8 R8 K47 0x5C280E00, // 000F MOVE R10 R7 0x582C0005, // 0010 LDCONST R11 K5 0x543200FE, // 0011 LDINT R12 255 0x54363FFF, // 0012 LDINT R13 16384 0x58380005, // 0013 LDCONST R14 K5 0x7C200C00, // 0014 CALL R8 6 - 0xB8265000, // 0015 GETNGBL R9 K40 - 0x8C24132F, // 0016 GETMET R9 R9 K47 + 0xB8265400, // 0015 GETNGBL R9 K42 + 0x8C241330, // 0016 GETMET R9 R9 K48 0x542E1FFF, // 0017 LDINT R11 8192 0x002C100B, // 0018 ADD R11 R8 R11 0x7C240400, // 0019 CALL R9 2 - 0xB82A5000, // 001A GETNGBL R10 K40 - 0x8C281529, // 001B GETMET R10 R10 K41 + 0xB82A5400, // 001A GETNGBL R10 K42 + 0x8C28152B, // 001B GETMET R10 R10 K43 0x5C301200, // 001C MOVE R12 R9 0x5435EFFF, // 001D LDINT R13 -4096 0x543A0FFF, // 001E LDINT R14 4096 0x583C0005, // 001F LDCONST R15 K5 0x544200FE, // 0020 LDINT R16 255 0x7C280C00, // 0021 CALL R10 6 - 0xB82E5000, // 0022 GETNGBL R11 K40 - 0x8C2C1729, // 0023 GETMET R11 R11 K41 + 0xB82E5400, // 0022 GETNGBL R11 K42 + 0x8C2C172B, // 0023 GETMET R11 R11 K43 0x5C341400, // 0024 MOVE R13 R10 0x58380005, // 0025 LDCONST R14 K5 0x543E00FE, // 0026 LDINT R15 255 @@ -8234,8 +7607,8 @@ be_local_closure(class_RichPaletteColorProvider__interpolate, /* name */ 0x7C2C0C00, // 0029 CALL R11 6 0x80041600, // 002A RET 1 R11 0x70020008, // 002B JMP #0035 - 0xB81E5000, // 002C GETNGBL R7 K40 - 0x8C1C0F2E, // 002D GETMET R7 R7 K46 + 0xB81E5400, // 002C GETNGBL R7 K42 + 0x8C1C0F2F, // 002D GETMET R7 R7 K47 0x5C240200, // 002E MOVE R9 R1 0x5C280400, // 002F MOVE R10 R2 0x5C2C0600, // 0030 MOVE R11 R3 @@ -8280,7 +7653,7 @@ be_local_closure(class_RichPaletteColorProvider_start, /* name */ 0x60080003, // 000A GETGBL R2 G3 0x5C0C0000, // 000B MOVE R3 R0 0x7C080200, // 000C CALL R2 1 - 0x8C080530, // 000D GETMET R2 R2 K48 + 0x8C080531, // 000D GETMET R2 R2 K49 0x5C100200, // 000E MOVE R4 R1 0x7C080400, // 000F CALL R2 2 0x80040000, // 0010 RET 1 R0 @@ -8307,7 +7680,7 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ be_str_weak(produce_value), &be_const_str_solidified, ( &(const binstruction[246]) { /* code */ - 0x8C0C0131, // 0000 GETMET R3 R0 K49 + 0x8C0C0132, // 0000 GETMET R3 R0 K50 0x5C140400, // 0001 MOVE R5 R2 0x7C0C0400, // 0002 CALL R3 2 0x5C080600, // 0003 MOVE R2 R3 @@ -8354,8 +7727,8 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x542A00FE, // 002C LDINT R10 255 0x20280A0A, // 002D NE R10 R5 R10 0x782A001A, // 002E JMPF R10 #004A - 0xB82A5000, // 002F GETNGBL R10 K40 - 0x8C28152E, // 0030 GETMET R10 R10 K46 + 0xB82A5400, // 002F GETNGBL R10 K42 + 0x8C28152F, // 0030 GETMET R10 R10 K47 0x5C300E00, // 0031 MOVE R12 R7 0x58340005, // 0032 LDCONST R13 K5 0x543A00FE, // 0033 LDINT R14 255 @@ -8363,8 +7736,8 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x5C400A00, // 0035 MOVE R16 R5 0x7C280C00, // 0036 CALL R10 6 0x5C1C1400, // 0037 MOVE R7 R10 - 0xB82A5000, // 0038 GETNGBL R10 K40 - 0x8C28152E, // 0039 GETMET R10 R10 K46 + 0xB82A5400, // 0038 GETNGBL R10 K42 + 0x8C28152F, // 0039 GETMET R10 R10 K47 0x5C301000, // 003A MOVE R12 R8 0x58340005, // 003B LDCONST R13 K5 0x543A00FE, // 003C LDINT R14 255 @@ -8372,8 +7745,8 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x5C400A00, // 003E MOVE R16 R5 0x7C280C00, // 003F CALL R10 6 0x5C201400, // 0040 MOVE R8 R10 - 0xB82A5000, // 0041 GETNGBL R10 K40 - 0x8C28152E, // 0042 GETMET R10 R10 K46 + 0xB82A5400, // 0041 GETNGBL R10 K42 + 0x8C28152F, // 0042 GETMET R10 R10 K47 0x5C301200, // 0043 MOVE R12 R9 0x58340005, // 0044 LDCONST R13 K5 0x543A00FE, // 0045 LDINT R14 255 @@ -8393,7 +7766,7 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x30281409, // 0053 OR R10 R10 R9 0x9002400A, // 0054 SETMBR R0 K32 R10 0x80041400, // 0055 RET 1 R10 - 0x88180132, // 0056 GETMBR R6 R0 K50 + 0x88180133, // 0056 GETMBR R6 R0 K51 0x04180406, // 0057 SUB R6 R2 R6 0x101C0C04, // 0058 MOD R7 R6 R4 0x8820010B, // 0059 GETMBR R8 R0 K11 @@ -8463,7 +7836,7 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x2C582C17, // 0099 AND R22 R22 R23 0x7C400C00, // 009A CALL R16 6 0x88440124, // 009B GETMBR R17 R0 K36 - 0x8C482333, // 009C GETMET R18 R17 K51 + 0x8C482334, // 009C GETMET R18 R17 K52 0x54520007, // 009D LDINT R20 8 0x3C501414, // 009E SHR R20 R10 R20 0x545600FE, // 009F LDINT R21 255 @@ -8477,8 +7850,8 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x545E00FE, // 00A7 LDINT R23 255 0x2C582C17, // 00A8 AND R22 R22 R23 0x7C480800, // 00A9 CALL R18 4 - 0x88482334, // 00AA GETMBR R18 R17 K52 - 0x8C4C2333, // 00AB GETMET R19 R17 K51 + 0x88482335, // 00AA GETMBR R18 R17 K53 + 0x8C4C2334, // 00AB GETMET R19 R17 K52 0x54560007, // 00AC LDINT R21 8 0x3C541615, // 00AD SHR R21 R11 R21 0x545A00FE, // 00AE LDINT R22 255 @@ -8492,7 +7865,7 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x546200FE, // 00B6 LDINT R24 255 0x2C5C2E18, // 00B7 AND R23 R23 R24 0x7C4C0800, // 00B8 CALL R19 4 - 0x884C2334, // 00B9 GETMBR R19 R17 K52 + 0x884C2335, // 00B9 GETMBR R19 R17 K53 0x8C500110, // 00BA GETMET R20 R0 K16 0x5C580E00, // 00BB MOVE R22 R7 0x5C5C1800, // 00BC MOVE R23 R12 @@ -8500,22 +7873,22 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x5C642400, // 00BE MOVE R25 R18 0x5C682600, // 00BF MOVE R26 R19 0x7C500C00, // 00C0 CALL R20 6 - 0x8C542333, // 00C1 GETMET R21 R17 K51 + 0x8C542334, // 00C1 GETMET R21 R17 K52 0x5C5C1C00, // 00C2 MOVE R23 R14 0x5C601E00, // 00C3 MOVE R24 R15 0x5C642000, // 00C4 MOVE R25 R16 0x7C540800, // 00C5 CALL R21 4 - 0x8C542335, // 00C6 GETMET R21 R17 K53 + 0x8C542336, // 00C6 GETMET R21 R17 K54 0x5C5C2800, // 00C7 MOVE R23 R20 0x7C540400, // 00C8 CALL R21 2 - 0x88382336, // 00C9 GETMBR R14 R17 K54 - 0x883C2337, // 00CA GETMBR R15 R17 K55 - 0x88402338, // 00CB GETMBR R16 R17 K56 + 0x88382337, // 00C9 GETMBR R14 R17 K55 + 0x883C2338, // 00CA GETMBR R15 R17 K56 + 0x88402339, // 00CB GETMBR R16 R17 K57 0x545600FE, // 00CC LDINT R21 255 0x20540A15, // 00CD NE R21 R5 R21 0x7856001A, // 00CE JMPF R21 #00EA - 0xB8565000, // 00CF GETNGBL R21 K40 - 0x8C542B2E, // 00D0 GETMET R21 R21 K46 + 0xB8565400, // 00CF GETNGBL R21 K42 + 0x8C542B2F, // 00D0 GETMET R21 R21 K47 0x5C5C1C00, // 00D1 MOVE R23 R14 0x58600005, // 00D2 LDCONST R24 K5 0x546600FE, // 00D3 LDINT R25 255 @@ -8523,8 +7896,8 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x5C6C0A00, // 00D5 MOVE R27 R5 0x7C540C00, // 00D6 CALL R21 6 0x5C382A00, // 00D7 MOVE R14 R21 - 0xB8565000, // 00D8 GETNGBL R21 K40 - 0x8C542B2E, // 00D9 GETMET R21 R21 K46 + 0xB8565400, // 00D8 GETNGBL R21 K42 + 0x8C542B2F, // 00D9 GETMET R21 R21 K47 0x5C5C1E00, // 00DA MOVE R23 R15 0x58600005, // 00DB LDCONST R24 K5 0x546600FE, // 00DC LDINT R25 255 @@ -8532,8 +7905,8 @@ be_local_closure(class_RichPaletteColorProvider_produce_value, /* name */ 0x5C6C0A00, // 00DE MOVE R27 R5 0x7C540C00, // 00DF CALL R21 6 0x5C3C2A00, // 00E0 MOVE R15 R21 - 0xB8565000, // 00E1 GETNGBL R21 K40 - 0x8C542B2E, // 00E2 GETMET R21 R21 K46 + 0xB8565400, // 00E1 GETNGBL R21 K42 + 0x8C542B2F, // 00E2 GETMET R21 R21 K47 0x5C5C2000, // 00E3 MOVE R23 R16 0x58600005, // 00E4 LDCONST R24 K5 0x546600FE, // 00E5 LDINT R25 255 @@ -8602,8 +7975,8 @@ be_local_closure(class_RichPaletteColorProvider_get_color_for_value, /* name * 0x2C1C0E08, // 0017 AND R7 R7 R8 0x542200FE, // 0018 LDINT R8 255 0x2C200808, // 0019 AND R8 R4 R8 - 0xB8265000, // 001A GETNGBL R9 K40 - 0x8C24132E, // 001B GETMET R9 R9 K46 + 0xB8265400, // 001A GETNGBL R9 K42 + 0x8C24132F, // 001B GETMET R9 R9 K47 0x5C2C0C00, // 001C MOVE R11 R6 0x58300005, // 001D LDCONST R12 K5 0x543600FE, // 001E LDINT R13 255 @@ -8611,8 +7984,8 @@ be_local_closure(class_RichPaletteColorProvider_get_color_for_value, /* name * 0x5C3C0A00, // 0020 MOVE R15 R5 0x7C240C00, // 0021 CALL R9 6 0x5C181200, // 0022 MOVE R6 R9 - 0xB8265000, // 0023 GETNGBL R9 K40 - 0x8C24132E, // 0024 GETMET R9 R9 K46 + 0xB8265400, // 0023 GETNGBL R9 K42 + 0x8C24132F, // 0024 GETMET R9 R9 K47 0x5C2C0E00, // 0025 MOVE R11 R7 0x58300005, // 0026 LDCONST R12 K5 0x543600FE, // 0027 LDINT R13 255 @@ -8620,8 +7993,8 @@ be_local_closure(class_RichPaletteColorProvider_get_color_for_value, /* name * 0x5C3C0A00, // 0029 MOVE R15 R5 0x7C240C00, // 002A CALL R9 6 0x5C1C1200, // 002B MOVE R7 R9 - 0xB8265000, // 002C GETNGBL R9 K40 - 0x8C24132E, // 002D GETMET R9 R9 K46 + 0xB8265400, // 002C GETNGBL R9 K42 + 0x8C24132F, // 002D GETMET R9 R9 K47 0x5C2C1000, // 002E MOVE R11 R8 0x58300005, // 002F LDCONST R12 K5 0x543600FE, // 0030 LDINT R13 255 @@ -8816,6 +8189,55 @@ be_local_closure(list_user_functions, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: twinkle_gentle +********************************************************************/ +be_local_closure(twinkle_gentle, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 9]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(twinkle_animation), + /* K2 */ be_nested_str_weak(color), + /* K3 */ be_nested_str_weak(density), + /* K4 */ be_nested_str_weak(twinkle_speed), + /* K5 */ be_const_int(3), + /* K6 */ be_nested_str_weak(fade_speed), + /* K7 */ be_nested_str_weak(min_brightness), + /* K8 */ be_nested_str_weak(max_brightness), + }), + be_str_weak(twinkle_gentle), + &be_const_str_solidified, + ( &(const binstruction[16]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x5409D6FF, // 0004 LDINT R2 -10496 + 0x90060402, // 0005 SETMBR R1 K2 R2 + 0x540A003F, // 0006 LDINT R2 64 + 0x90060602, // 0007 SETMBR R1 K3 R2 + 0x90060905, // 0008 SETMBR R1 K4 K5 + 0x540A0077, // 0009 LDINT R2 120 + 0x90060C02, // 000A SETMBR R1 K6 R2 + 0x540A000F, // 000B LDINT R2 16 + 0x90060E02, // 000C SETMBR R1 K7 R2 + 0x540A00B3, // 000D LDINT R2 180 + 0x90061002, // 000E SETMBR R1 K8 R2 + 0x80040200, // 000F RET 1 R1 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: twinkle_classic ********************************************************************/ @@ -9516,37 +8938,1154 @@ be_local_class(TwinkleAnimation, })), be_str_weak(TwinkleAnimation) ); +// compact class 'SequenceManager' ktab size: 46, total: 165 (saved 952 bytes) +static const bvalue be_ktab_class_SequenceManager[46] = { + /* K0 */ be_nested_str_weak(repeat_count), + /* K1 */ be_nested_str_weak(function), + /* K2 */ be_nested_str_weak(engine), + /* K3 */ be_nested_str_weak(steps), + /* K4 */ be_nested_str_weak(push), + /* K5 */ be_nested_str_weak(type), + /* K6 */ be_nested_str_weak(wait), + /* K7 */ be_nested_str_weak(duration), + /* K8 */ be_nested_str_weak(step_index), + /* K9 */ be_nested_str_weak(closure), + /* K10 */ be_const_int(1), + /* K11 */ be_nested_str_weak(execute_current_step), + /* K12 */ be_nested_str_weak(complete_iteration), + /* K13 */ be_nested_str_weak(play), + /* K14 */ be_nested_str_weak(animation), + /* K15 */ be_nested_str_weak(step_start_time), + /* K16 */ be_nested_str_weak(start), + /* K17 */ be_nested_str_weak(remove), + /* K18 */ be_nested_str_weak(subsequence), + /* K19 */ be_nested_str_weak(sequence_manager), + /* K20 */ be_nested_str_weak(stop), + /* K21 */ be_nested_str_weak(stop_iteration), + /* K22 */ be_const_int(0), + /* K23 */ be_nested_str_weak(init), + /* K24 */ be_nested_str_weak(active_sequence), + /* K25 */ be_nested_str_weak(sequence_state), + /* K26 */ be_nested_str_weak(current_iteration), + /* K27 */ be_nested_str_weak(is_repeat_sequence), + /* K28 */ be_nested_str_weak(is_running), + /* K29 */ be_nested_str_weak(update), + /* K30 */ be_nested_str_weak(advance_to_next_step), + /* K31 */ be_nested_str_weak(execute_closure_steps_batch), + /* K32 */ be_nested_str_weak(contains), + /* K33 */ be_nested_str_weak(update_current_iteration), + /* K34 */ be_nested_str_weak(get_resolved_repeat_count), + /* K35 */ be_nested_str_weak(pop_iteration_context), + /* K36 */ be_nested_str_weak(stop_all_subsequences), + /* K37 */ be_nested_str_weak(execute_closure_steps_batch_atomic), + /* K38 */ be_nested_str_weak(start_time), + /* K39 */ be_nested_str_weak(push_iteration_context), + /* K40 */ be_nested_str_weak(), + /* K41 */ be_nested_str_weak(_X2C_X20repeat_X3Dforever_X2C_X20iter_X3D_X25s), + /* K42 */ be_nested_str_weak(_X2C_X20repeat_X3D_X25s_X2C_X20iter_X3D_X25s), + /* K43 */ be_nested_str_weak(SequenceManager_X28steps_X3D_X25s_X2C_X20current_X3D_X25s_X2C_X20running_X3D_X25s_X25s_X29), + /* K44 */ be_nested_str_weak(get_animations), + /* K45 */ be_nested_str_weak(add), +}; + + +extern const bclass be_class_SequenceManager; /******************************************************************** -** Solidified function: ease_out +** Solidified function: get_resolved_repeat_count ********************************************************************/ -be_local_closure(ease_out, /* name */ +be_local_closure(class_SequenceManager_get_resolved_repeat_count, /* name */ be_nested_proto( - 4, /* nstack */ + 5, /* nstack */ 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(get_resolved_repeat_count), + &be_const_str_solidified, + ( &(const binstruction[16]) { /* code */ + 0x4C040000, // 0000 LDNIL R1 + 0x60080004, // 0001 GETGBL R2 G4 + 0x880C0100, // 0002 GETMBR R3 R0 K0 + 0x7C080200, // 0003 CALL R2 1 + 0x1C080501, // 0004 EQ R2 R2 K1 + 0x780A0004, // 0005 JMPF R2 #000B + 0x8C080100, // 0006 GETMET R2 R0 K0 + 0x88100102, // 0007 GETMBR R4 R0 K2 + 0x7C080400, // 0008 CALL R2 2 + 0x5C040400, // 0009 MOVE R1 R2 + 0x70020000, // 000A JMP #000C + 0x88040100, // 000B GETMBR R1 R0 K0 + 0x60080009, // 000C GETGBL R2 G9 + 0x5C0C0200, // 000D MOVE R3 R1 + 0x7C080200, // 000E CALL R2 1 + 0x80040400, // 000F RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: push_wait_step +********************************************************************/ +be_local_closure(class_SequenceManager_push_wait_step, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(push_wait_step), + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0x88080103, // 0000 GETMBR R2 R0 K3 + 0x8C080504, // 0001 GETMET R2 R2 K4 + 0x60100013, // 0002 GETGBL R4 G19 + 0x7C100000, // 0003 CALL R4 0 + 0x98120B06, // 0004 SETIDX R4 K5 K6 + 0x98120E01, // 0005 SETIDX R4 K7 R1 + 0x7C080400, // 0006 CALL R2 2 + 0x80040000, // 0007 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: execute_closure_steps_batch +********************************************************************/ +be_local_closure(class_SequenceManager_execute_closure_steps_batch, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(execute_closure_steps_batch), + &be_const_str_solidified, + ( &(const binstruction[39]) { /* code */ + 0x88080108, // 0000 GETMBR R2 R0 K8 + 0x600C000C, // 0001 GETGBL R3 G12 + 0x88100103, // 0002 GETMBR R4 R0 K3 + 0x7C0C0200, // 0003 CALL R3 1 + 0x14080403, // 0004 LT R2 R2 R3 + 0x780A0012, // 0005 JMPF R2 #0019 + 0x88080103, // 0006 GETMBR R2 R0 K3 + 0x880C0108, // 0007 GETMBR R3 R0 K8 + 0x94080403, // 0008 GETIDX R2 R2 R3 + 0x940C0505, // 0009 GETIDX R3 R2 K5 + 0x1C0C0709, // 000A EQ R3 R3 K9 + 0x780E000A, // 000B JMPF R3 #0017 + 0x940C0509, // 000C GETIDX R3 R2 K9 + 0x4C100000, // 000D LDNIL R4 + 0x20100604, // 000E NE R4 R3 R4 + 0x78120002, // 000F JMPF R4 #0013 + 0x5C100600, // 0010 MOVE R4 R3 + 0x88140102, // 0011 GETMBR R5 R0 K2 + 0x7C100200, // 0012 CALL R4 1 + 0x88100108, // 0013 GETMBR R4 R0 K8 + 0x0010090A, // 0014 ADD R4 R4 K10 + 0x90021004, // 0015 SETMBR R0 K8 R4 + 0x70020000, // 0016 JMP #0018 + 0x70020000, // 0017 JMP #0019 + 0x7001FFE6, // 0018 JMP #0000 + 0x88080108, // 0019 GETMBR R2 R0 K8 + 0x600C000C, // 001A GETGBL R3 G12 + 0x88100103, // 001B GETMBR R4 R0 K3 + 0x7C0C0200, // 001C CALL R3 1 + 0x14080403, // 001D LT R2 R2 R3 + 0x780A0003, // 001E JMPF R2 #0023 + 0x8C08010B, // 001F GETMET R2 R0 K11 + 0x5C100200, // 0020 MOVE R4 R1 + 0x7C080400, // 0021 CALL R2 2 + 0x70020002, // 0022 JMP #0026 + 0x8C08010C, // 0023 GETMET R2 R0 K12 + 0x5C100200, // 0024 MOVE R4 R1 + 0x7C080400, // 0025 CALL R2 2 + 0x80000000, // 0026 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: execute_closure_steps_batch_atomic +********************************************************************/ +be_local_closure(class_SequenceManager_execute_closure_steps_batch_atomic, /* name */ + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(execute_closure_steps_batch_atomic), + &be_const_str_solidified, + ( &(const binstruction[77]) { /* code */ + 0x880C0108, // 0000 GETMBR R3 R0 K8 + 0x6010000C, // 0001 GETGBL R4 G12 + 0x88140103, // 0002 GETMBR R5 R0 K3 + 0x7C100200, // 0003 CALL R4 1 + 0x140C0604, // 0004 LT R3 R3 R4 + 0x780E0012, // 0005 JMPF R3 #0019 + 0x880C0103, // 0006 GETMBR R3 R0 K3 + 0x88100108, // 0007 GETMBR R4 R0 K8 + 0x940C0604, // 0008 GETIDX R3 R3 R4 + 0x94100705, // 0009 GETIDX R4 R3 K5 + 0x1C100909, // 000A EQ R4 R4 K9 + 0x7812000A, // 000B JMPF R4 #0017 + 0x94100709, // 000C GETIDX R4 R3 K9 + 0x4C140000, // 000D LDNIL R5 + 0x20140805, // 000E NE R5 R4 R5 + 0x78160002, // 000F JMPF R5 #0013 + 0x5C140800, // 0010 MOVE R5 R4 + 0x88180102, // 0011 GETMBR R6 R0 K2 + 0x7C140200, // 0012 CALL R5 1 + 0x88140108, // 0013 GETMBR R5 R0 K8 + 0x00140B0A, // 0014 ADD R5 R5 K10 + 0x90021005, // 0015 SETMBR R0 K8 R5 + 0x70020000, // 0016 JMP #0018 + 0x70020000, // 0017 JMP #0019 + 0x7001FFE6, // 0018 JMP #0000 + 0x4C0C0000, // 0019 LDNIL R3 + 0x50100000, // 001A LDBOOL R4 0 0 + 0x88140108, // 001B GETMBR R5 R0 K8 + 0x6018000C, // 001C GETGBL R6 G12 + 0x881C0103, // 001D GETMBR R7 R0 K3 + 0x7C180200, // 001E CALL R6 1 + 0x14140A06, // 001F LT R5 R5 R6 + 0x7816000B, // 0020 JMPF R5 #002D + 0x88140103, // 0021 GETMBR R5 R0 K3 + 0x88180108, // 0022 GETMBR R6 R0 K8 + 0x940C0A06, // 0023 GETIDX R3 R5 R6 + 0x94180705, // 0024 GETIDX R6 R3 K5 + 0x1C180D0D, // 0025 EQ R6 R6 K13 + 0x781A0005, // 0026 JMPF R6 #002D + 0x4C180000, // 0027 LDNIL R6 + 0x20180406, // 0028 NE R6 R2 R6 + 0x781A0002, // 0029 JMPF R6 #002D + 0x9418070E, // 002A GETIDX R6 R3 K14 + 0x1C180C02, // 002B EQ R6 R6 R2 + 0x5C100C00, // 002C MOVE R4 R6 + 0x78120004, // 002D JMPF R4 #0033 + 0x90021E01, // 002E SETMBR R0 K15 R1 + 0x8C140510, // 002F GETMET R5 R2 K16 + 0x5C1C0200, // 0030 MOVE R7 R1 + 0x7C140400, // 0031 CALL R5 2 + 0x7002000F, // 0032 JMP #0043 + 0x88140108, // 0033 GETMBR R5 R0 K8 + 0x6018000C, // 0034 GETGBL R6 G12 + 0x881C0103, // 0035 GETMBR R7 R0 K3 + 0x7C180200, // 0036 CALL R6 1 + 0x14140A06, // 0037 LT R5 R5 R6 + 0x78160002, // 0038 JMPF R5 #003C + 0x8C14010B, // 0039 GETMET R5 R0 K11 + 0x5C1C0200, // 003A MOVE R7 R1 + 0x7C140400, // 003B CALL R5 2 + 0x4C140000, // 003C LDNIL R5 + 0x20140405, // 003D NE R5 R2 R5 + 0x78160003, // 003E JMPF R5 #0043 + 0x88140102, // 003F GETMBR R5 R0 K2 + 0x8C140B11, // 0040 GETMET R5 R5 K17 + 0x5C1C0400, // 0041 MOVE R7 R2 + 0x7C140400, // 0042 CALL R5 2 + 0x88140108, // 0043 GETMBR R5 R0 K8 + 0x6018000C, // 0044 GETGBL R6 G12 + 0x881C0103, // 0045 GETMBR R7 R0 K3 + 0x7C180200, // 0046 CALL R6 1 + 0x28140A06, // 0047 GE R5 R5 R6 + 0x78160002, // 0048 JMPF R5 #004C + 0x8C14010C, // 0049 GETMET R5 R0 K12 + 0x5C1C0200, // 004A MOVE R7 R1 + 0x7C140400, // 004B CALL R5 2 + 0x80000000, // 004C RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: stop_all_subsequences +********************************************************************/ +be_local_closure(class_SequenceManager_stop_all_subsequences, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(stop_all_subsequences), + &be_const_str_solidified, + ( &(const binstruction[17]) { /* code */ + 0x60040010, // 0000 GETGBL R1 G16 + 0x88080103, // 0001 GETMBR R2 R0 K3 + 0x7C040200, // 0002 CALL R1 1 + 0xA8020008, // 0003 EXBLK 0 #000D + 0x5C080200, // 0004 MOVE R2 R1 + 0x7C080000, // 0005 CALL R2 0 + 0x940C0505, // 0006 GETIDX R3 R2 K5 + 0x1C0C0712, // 0007 EQ R3 R3 K18 + 0x780E0002, // 0008 JMPF R3 #000C + 0x940C0513, // 0009 GETIDX R3 R2 K19 + 0x8C100714, // 000A GETMET R4 R3 K20 + 0x7C100200, // 000B CALL R4 1 + 0x7001FFF6, // 000C JMP #0004 + 0x58040015, // 000D LDCONST R1 K21 + 0xAC040200, // 000E CATCH R1 1 0 + 0xB0080000, // 000F RAISE 2 R0 R0 + 0x80040000, // 0010 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: push_play_step +********************************************************************/ +be_local_closure(class_SequenceManager_push_play_step, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(push_play_step), + &be_const_str_solidified, + ( &(const binstruction[15]) { /* code */ + 0x880C0103, // 0000 GETMBR R3 R0 K3 + 0x8C0C0704, // 0001 GETMET R3 R3 K4 + 0x60140013, // 0002 GETGBL R5 G19 + 0x7C140000, // 0003 CALL R5 0 + 0x98160B0D, // 0004 SETIDX R5 K5 K13 + 0x98161C01, // 0005 SETIDX R5 K14 R1 + 0x4C180000, // 0006 LDNIL R6 + 0x20180406, // 0007 NE R6 R2 R6 + 0x781A0001, // 0008 JMPF R6 #000B + 0x5C180400, // 0009 MOVE R6 R2 + 0x70020000, // 000A JMP #000C + 0x58180016, // 000B LDCONST R6 K22 + 0x98160E06, // 000C SETIDX R5 K7 R6 + 0x7C0C0400, // 000D CALL R3 2 + 0x80040000, // 000E RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(class_SequenceManager_init, /* name */ + be_nested_proto( + 6, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(init), + &be_const_str_solidified, + ( &(const binstruction[33]) { /* code */ + 0x600C0003, // 0000 GETGBL R3 G3 + 0x5C100000, // 0001 MOVE R4 R0 + 0x7C0C0200, // 0002 CALL R3 1 + 0x8C0C0717, // 0003 GETMET R3 R3 K23 + 0x5C140200, // 0004 MOVE R5 R1 + 0x7C0C0400, // 0005 CALL R3 2 + 0x4C0C0000, // 0006 LDNIL R3 + 0x90023003, // 0007 SETMBR R0 K24 R3 + 0x600C0013, // 0008 GETGBL R3 G19 + 0x7C0C0000, // 0009 CALL R3 0 + 0x90023203, // 000A SETMBR R0 K25 R3 + 0x90021116, // 000B SETMBR R0 K8 K22 + 0x90021F16, // 000C SETMBR R0 K15 K22 + 0x600C0012, // 000D GETGBL R3 G18 + 0x7C0C0000, // 000E CALL R3 0 + 0x90020603, // 000F SETMBR R0 K3 R3 + 0x4C0C0000, // 0010 LDNIL R3 + 0x200C0403, // 0011 NE R3 R2 R3 + 0x780E0001, // 0012 JMPF R3 #0015 + 0x5C0C0400, // 0013 MOVE R3 R2 + 0x70020000, // 0014 JMP #0016 + 0x580C000A, // 0015 LDCONST R3 K10 + 0x90020003, // 0016 SETMBR R0 K0 R3 + 0x90023516, // 0017 SETMBR R0 K26 K22 + 0x4C0C0000, // 0018 LDNIL R3 + 0x200C0403, // 0019 NE R3 R2 R3 + 0x780E0001, // 001A JMPF R3 #001D + 0x200C050A, // 001B NE R3 R2 K10 + 0x740E0000, // 001C JMPT R3 #001E + 0x500C0001, // 001D LDBOOL R3 0 1 + 0x500C0200, // 001E LDBOOL R3 1 0 + 0x90023603, // 001F SETMBR R0 K27 R3 + 0x80000000, // 0020 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: update +********************************************************************/ +be_local_closure(class_SequenceManager_update, /* name */ + be_nested_proto( + 8, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(update), + &be_const_str_solidified, + ( &(const binstruction[74]) { /* code */ + 0x8808011C, // 0000 GETMBR R2 R0 K28 + 0x780A0004, // 0001 JMPF R2 #0007 + 0x6008000C, // 0002 GETGBL R2 G12 + 0x880C0103, // 0003 GETMBR R3 R0 K3 + 0x7C080200, // 0004 CALL R2 1 + 0x1C080516, // 0005 EQ R2 R2 K22 + 0x780A0000, // 0006 JMPF R2 #0008 + 0x80000400, // 0007 RET 0 + 0x88080108, // 0008 GETMBR R2 R0 K8 + 0x600C000C, // 0009 GETGBL R3 G12 + 0x88100103, // 000A GETMBR R4 R0 K3 + 0x7C0C0200, // 000B CALL R3 1 + 0x28080403, // 000C GE R2 R2 R3 + 0x780A0000, // 000D JMPF R2 #000F + 0x80000400, // 000E RET 0 + 0x88080103, // 000F GETMBR R2 R0 K3 + 0x880C0108, // 0010 GETMBR R3 R0 K8 + 0x94080403, // 0011 GETIDX R2 R2 R3 + 0x940C0505, // 0012 GETIDX R3 R2 K5 + 0x1C0C0712, // 0013 EQ R3 R3 K18 + 0x780E0009, // 0014 JMPF R3 #001F + 0x940C0513, // 0015 GETIDX R3 R2 K19 + 0x8C10071D, // 0016 GETMET R4 R3 K29 + 0x5C180200, // 0017 MOVE R6 R1 + 0x7C100400, // 0018 CALL R4 2 + 0x8810071C, // 0019 GETMBR R4 R3 K28 + 0x74120002, // 001A JMPT R4 #001E + 0x8C10011E, // 001B GETMET R4 R0 K30 + 0x5C180200, // 001C MOVE R6 R1 + 0x7C100400, // 001D CALL R4 2 + 0x70020029, // 001E JMP #0049 + 0x940C0505, // 001F GETIDX R3 R2 K5 + 0x1C0C0709, // 0020 EQ R3 R3 K9 + 0x780E0003, // 0021 JMPF R3 #0026 + 0x8C0C011F, // 0022 GETMET R3 R0 K31 + 0x5C140200, // 0023 MOVE R5 R1 + 0x7C0C0400, // 0024 CALL R3 2 + 0x70020022, // 0025 JMP #0049 + 0x8C0C0520, // 0026 GETMET R3 R2 K32 + 0x58140007, // 0027 LDCONST R5 K7 + 0x7C0C0400, // 0028 CALL R3 2 + 0x780E001B, // 0029 JMPF R3 #0046 + 0x940C0507, // 002A GETIDX R3 R2 K7 + 0x4C100000, // 002B LDNIL R4 + 0x200C0604, // 002C NE R3 R3 R4 + 0x780E0017, // 002D JMPF R3 #0046 + 0x940C0507, // 002E GETIDX R3 R2 K7 + 0x60100004, // 002F GETGBL R4 G4 + 0x5C140600, // 0030 MOVE R5 R3 + 0x7C100200, // 0031 CALL R4 1 + 0x1C100901, // 0032 EQ R4 R4 K1 + 0x78120003, // 0033 JMPF R4 #0038 + 0x5C100600, // 0034 MOVE R4 R3 + 0x88140102, // 0035 GETMBR R5 R0 K2 + 0x7C100200, // 0036 CALL R4 1 + 0x5C0C0800, // 0037 MOVE R3 R4 + 0x24100716, // 0038 GT R4 R3 K22 + 0x78120007, // 0039 JMPF R4 #0042 + 0x8810010F, // 003A GETMBR R4 R0 K15 + 0x04100204, // 003B SUB R4 R1 R4 + 0x28140803, // 003C GE R5 R4 R3 + 0x78160002, // 003D JMPF R5 #0041 + 0x8C14011E, // 003E GETMET R5 R0 K30 + 0x5C1C0200, // 003F MOVE R7 R1 + 0x7C140400, // 0040 CALL R5 2 + 0x70020002, // 0041 JMP #0045 + 0x8C10011E, // 0042 GETMET R4 R0 K30 + 0x5C180200, // 0043 MOVE R6 R1 + 0x7C100400, // 0044 CALL R4 2 + 0x70020002, // 0045 JMP #0049 + 0x8C0C011E, // 0046 GETMET R3 R0 K30 + 0x5C140200, // 0047 MOVE R5 R1 + 0x7C0C0400, // 0048 CALL R3 2 + 0x80000000, // 0049 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: push_repeat_subsequence +********************************************************************/ +be_local_closure(class_SequenceManager_push_repeat_subsequence, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(push_repeat_subsequence), + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0x88080103, // 0000 GETMBR R2 R0 K3 + 0x8C080504, // 0001 GETMET R2 R2 K4 + 0x60100013, // 0002 GETGBL R4 G19 + 0x7C100000, // 0003 CALL R4 0 + 0x98120B12, // 0004 SETIDX R4 K5 K18 + 0x98122601, // 0005 SETIDX R4 K19 R1 + 0x7C080400, // 0006 CALL R2 2 + 0x80040000, // 0007 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: complete_iteration +********************************************************************/ +be_local_closure(class_SequenceManager_complete_iteration, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(complete_iteration), + &be_const_str_solidified, + ( &(const binstruction[61]) { /* code */ + 0x8808011A, // 0000 GETMBR R2 R0 K26 + 0x0008050A, // 0001 ADD R2 R2 K10 + 0x90023402, // 0002 SETMBR R0 K26 R2 + 0x8808011B, // 0003 GETMBR R2 R0 K27 + 0x780A0003, // 0004 JMPF R2 #0009 + 0x88080102, // 0005 GETMBR R2 R0 K2 + 0x8C080521, // 0006 GETMET R2 R2 K33 + 0x8810011A, // 0007 GETMBR R4 R0 K26 + 0x7C080400, // 0008 CALL R2 2 + 0x8C080122, // 0009 GETMET R2 R0 K34 + 0x7C080200, // 000A CALL R2 1 + 0x540DFFFE, // 000B LDINT R3 -1 + 0x1C0C0403, // 000C EQ R3 R2 R3 + 0x740E0002, // 000D JMPT R3 #0011 + 0x880C011A, // 000E GETMBR R3 R0 K26 + 0x140C0602, // 000F LT R3 R3 R2 + 0x780E0023, // 0010 JMPF R3 #0035 + 0x90021116, // 0011 SETMBR R0 K8 K22 + 0x880C0108, // 0012 GETMBR R3 R0 K8 + 0x6010000C, // 0013 GETGBL R4 G12 + 0x88140103, // 0014 GETMBR R5 R0 K3 + 0x7C100200, // 0015 CALL R4 1 + 0x140C0604, // 0016 LT R3 R3 R4 + 0x780E0012, // 0017 JMPF R3 #002B + 0x880C0103, // 0018 GETMBR R3 R0 K3 + 0x88100108, // 0019 GETMBR R4 R0 K8 + 0x940C0604, // 001A GETIDX R3 R3 R4 + 0x94100705, // 001B GETIDX R4 R3 K5 + 0x1C100909, // 001C EQ R4 R4 K9 + 0x7812000A, // 001D JMPF R4 #0029 + 0x94100709, // 001E GETIDX R4 R3 K9 + 0x4C140000, // 001F LDNIL R5 + 0x20140805, // 0020 NE R5 R4 R5 + 0x78160002, // 0021 JMPF R5 #0025 + 0x5C140800, // 0022 MOVE R5 R4 + 0x88180102, // 0023 GETMBR R6 R0 K2 + 0x7C140200, // 0024 CALL R5 1 + 0x88140108, // 0025 GETMBR R5 R0 K8 + 0x00140B0A, // 0026 ADD R5 R5 K10 + 0x90021005, // 0027 SETMBR R0 K8 R5 + 0x70020000, // 0028 JMP #002A + 0x70020000, // 0029 JMP #002B + 0x7001FFE6, // 002A JMP #0012 + 0x880C0108, // 002B GETMBR R3 R0 K8 + 0x6010000C, // 002C GETGBL R4 G12 + 0x88140103, // 002D GETMBR R5 R0 K3 + 0x7C100200, // 002E CALL R4 1 + 0x140C0604, // 002F LT R3 R3 R4 + 0x780E0002, // 0030 JMPF R3 #0034 + 0x8C0C010B, // 0031 GETMET R3 R0 K11 + 0x5C140200, // 0032 MOVE R5 R1 + 0x7C0C0400, // 0033 CALL R3 2 + 0x70020006, // 0034 JMP #003C + 0x500C0000, // 0035 LDBOOL R3 0 0 + 0x90023803, // 0036 SETMBR R0 K28 R3 + 0x880C011B, // 0037 GETMBR R3 R0 K27 + 0x780E0002, // 0038 JMPF R3 #003C + 0x880C0102, // 0039 GETMBR R3 R0 K2 + 0x8C0C0723, // 003A GETMET R3 R3 K35 + 0x7C0C0200, // 003B CALL R3 1 + 0x80000000, // 003C RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: is_sequence_running +********************************************************************/ +be_local_closure(class_SequenceManager_is_sequence_running, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(is_sequence_running), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x8804011C, // 0000 GETMBR R1 R0 K28 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: push_step +********************************************************************/ +be_local_closure(class_SequenceManager_push_step, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(push_step), + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0x88080103, // 0000 GETMBR R2 R0 K3 + 0x8C080504, // 0001 GETMET R2 R2 K4 + 0x5C100200, // 0002 MOVE R4 R1 + 0x7C080400, // 0003 CALL R2 2 + 0x80040000, // 0004 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: push_closure_step +********************************************************************/ +be_local_closure(class_SequenceManager_push_closure_step, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(push_closure_step), + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0x88080103, // 0000 GETMBR R2 R0 K3 + 0x8C080504, // 0001 GETMET R2 R2 K4 + 0x60100013, // 0002 GETGBL R4 G19 + 0x7C100000, // 0003 CALL R4 0 + 0x98120B09, // 0004 SETIDX R4 K5 K9 + 0x98121201, // 0005 SETIDX R4 K9 R1 + 0x7C080400, // 0006 CALL R2 2 + 0x80040000, // 0007 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: stop +********************************************************************/ +be_local_closure(class_SequenceManager_stop, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(stop), + &be_const_str_solidified, + ( &(const binstruction[36]) { /* code */ + 0x8804011C, // 0000 GETMBR R1 R0 K28 + 0x78060020, // 0001 JMPF R1 #0023 + 0x50040000, // 0002 LDBOOL R1 0 0 + 0x90023801, // 0003 SETMBR R0 K28 R1 + 0x8804011B, // 0004 GETMBR R1 R0 K27 + 0x78060002, // 0005 JMPF R1 #0009 + 0x88040102, // 0006 GETMBR R1 R0 K2 + 0x8C040323, // 0007 GETMET R1 R1 K35 + 0x7C040200, // 0008 CALL R1 1 + 0x88040108, // 0009 GETMBR R1 R0 K8 + 0x6008000C, // 000A GETGBL R2 G12 + 0x880C0103, // 000B GETMBR R3 R0 K3 + 0x7C080200, // 000C CALL R2 1 + 0x14040202, // 000D LT R1 R1 R2 + 0x78060011, // 000E JMPF R1 #0021 + 0x88040103, // 000F GETMBR R1 R0 K3 + 0x88080108, // 0010 GETMBR R2 R0 K8 + 0x94040202, // 0011 GETIDX R1 R1 R2 + 0x94080305, // 0012 GETIDX R2 R1 K5 + 0x1C08050D, // 0013 EQ R2 R2 K13 + 0x780A0005, // 0014 JMPF R2 #001B + 0x9408030E, // 0015 GETIDX R2 R1 K14 + 0x880C0102, // 0016 GETMBR R3 R0 K2 + 0x8C0C0711, // 0017 GETMET R3 R3 K17 + 0x5C140400, // 0018 MOVE R5 R2 + 0x7C0C0400, // 0019 CALL R3 2 + 0x70020005, // 001A JMP #0021 + 0x94080305, // 001B GETIDX R2 R1 K5 + 0x1C080512, // 001C EQ R2 R2 K18 + 0x780A0002, // 001D JMPF R2 #0021 + 0x94080313, // 001E GETIDX R2 R1 K19 + 0x8C0C0514, // 001F GETMET R3 R2 K20 + 0x7C0C0200, // 0020 CALL R3 1 + 0x8C040124, // 0021 GETMET R1 R0 K36 + 0x7C040200, // 0022 CALL R1 1 + 0x80040000, // 0023 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: advance_to_next_step +********************************************************************/ +be_local_closure(class_SequenceManager_advance_to_next_step, /* name */ + be_nested_proto( + 8, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(advance_to_next_step), + &be_const_str_solidified, + ( &(const binstruction[37]) { /* code */ + 0x88080103, // 0000 GETMBR R2 R0 K3 + 0x880C0108, // 0001 GETMBR R3 R0 K8 + 0x94080403, // 0002 GETIDX R2 R2 R3 + 0x4C0C0000, // 0003 LDNIL R3 + 0x94100505, // 0004 GETIDX R4 R2 K5 + 0x1C10090D, // 0005 EQ R4 R4 K13 + 0x78120004, // 0006 JMPF R4 #000C + 0x8C100520, // 0007 GETMET R4 R2 K32 + 0x58180007, // 0008 LDCONST R6 K7 + 0x7C100400, // 0009 CALL R4 2 + 0x78120000, // 000A JMPF R4 #000C + 0x940C050E, // 000B GETIDX R3 R2 K14 + 0x88100108, // 000C GETMBR R4 R0 K8 + 0x0010090A, // 000D ADD R4 R4 K10 + 0x90021004, // 000E SETMBR R0 K8 R4 + 0x88100108, // 000F GETMBR R4 R0 K8 + 0x6014000C, // 0010 GETGBL R5 G12 + 0x88180103, // 0011 GETMBR R6 R0 K3 + 0x7C140200, // 0012 CALL R5 1 + 0x28100805, // 0013 GE R4 R4 R5 + 0x7812000A, // 0014 JMPF R4 #0020 + 0x4C100000, // 0015 LDNIL R4 + 0x20100604, // 0016 NE R4 R3 R4 + 0x78120003, // 0017 JMPF R4 #001C + 0x88100102, // 0018 GETMBR R4 R0 K2 + 0x8C100911, // 0019 GETMET R4 R4 K17 + 0x5C180600, // 001A MOVE R6 R3 + 0x7C100400, // 001B CALL R4 2 + 0x8C10010C, // 001C GETMET R4 R0 K12 + 0x5C180200, // 001D MOVE R6 R1 + 0x7C100400, // 001E CALL R4 2 + 0x70020003, // 001F JMP #0024 + 0x8C100125, // 0020 GETMET R4 R0 K37 + 0x5C180200, // 0021 MOVE R6 R1 + 0x5C1C0600, // 0022 MOVE R7 R3 + 0x7C100600, // 0023 CALL R4 3 + 0x80000000, // 0024 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: start +********************************************************************/ +be_local_closure(class_SequenceManager_start, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(start), + &be_const_str_solidified, + ( &(const binstruction[65]) { /* code */ + 0x8808011C, // 0000 GETMBR R2 R0 K28 + 0x780A0003, // 0001 JMPF R2 #0006 + 0x50080000, // 0002 LDBOOL R2 0 0 + 0x90023802, // 0003 SETMBR R0 K28 R2 + 0x8C080124, // 0004 GETMET R2 R0 K36 + 0x7C080200, // 0005 CALL R2 1 + 0x90021116, // 0006 SETMBR R0 K8 K22 + 0x90021E01, // 0007 SETMBR R0 K15 R1 + 0x90023516, // 0008 SETMBR R0 K26 K22 + 0x50080200, // 0009 LDBOOL R2 1 0 + 0x90023802, // 000A SETMBR R0 K28 R2 + 0x90024C01, // 000B SETMBR R0 K38 R1 + 0x8C080122, // 000C GETMET R2 R0 K34 + 0x7C080200, // 000D CALL R2 1 + 0x1C0C0516, // 000E EQ R3 R2 K22 + 0x780E0002, // 000F JMPF R3 #0013 + 0x500C0000, // 0010 LDBOOL R3 0 0 + 0x90023803, // 0011 SETMBR R0 K28 R3 + 0x80040000, // 0012 RET 1 R0 + 0x880C011B, // 0013 GETMBR R3 R0 K27 + 0x780E0003, // 0014 JMPF R3 #0019 + 0x880C0102, // 0015 GETMBR R3 R0 K2 + 0x8C0C0727, // 0016 GETMET R3 R3 K39 + 0x8814011A, // 0017 GETMBR R5 R0 K26 + 0x7C0C0400, // 0018 CALL R3 2 + 0x600C000C, // 0019 GETGBL R3 G12 + 0x88100103, // 001A GETMBR R4 R0 K3 + 0x7C0C0200, // 001B CALL R3 1 + 0x240C0716, // 001C GT R3 R3 K22 + 0x780E0021, // 001D JMPF R3 #0040 + 0x880C0108, // 001E GETMBR R3 R0 K8 + 0x6010000C, // 001F GETGBL R4 G12 + 0x88140103, // 0020 GETMBR R5 R0 K3 + 0x7C100200, // 0021 CALL R4 1 + 0x140C0604, // 0022 LT R3 R3 R4 + 0x780E0012, // 0023 JMPF R3 #0037 + 0x880C0103, // 0024 GETMBR R3 R0 K3 + 0x88100108, // 0025 GETMBR R4 R0 K8 + 0x940C0604, // 0026 GETIDX R3 R3 R4 + 0x94100705, // 0027 GETIDX R4 R3 K5 + 0x1C100909, // 0028 EQ R4 R4 K9 + 0x7812000A, // 0029 JMPF R4 #0035 + 0x94100709, // 002A GETIDX R4 R3 K9 + 0x4C140000, // 002B LDNIL R5 + 0x20140805, // 002C NE R5 R4 R5 + 0x78160002, // 002D JMPF R5 #0031 + 0x5C140800, // 002E MOVE R5 R4 + 0x88180102, // 002F GETMBR R6 R0 K2 + 0x7C140200, // 0030 CALL R5 1 + 0x88140108, // 0031 GETMBR R5 R0 K8 + 0x00140B0A, // 0032 ADD R5 R5 K10 + 0x90021005, // 0033 SETMBR R0 K8 R5 + 0x70020000, // 0034 JMP #0036 + 0x70020000, // 0035 JMP #0037 + 0x7001FFE6, // 0036 JMP #001E + 0x880C0108, // 0037 GETMBR R3 R0 K8 + 0x6010000C, // 0038 GETGBL R4 G12 + 0x88140103, // 0039 GETMBR R5 R0 K3 + 0x7C100200, // 003A CALL R4 1 + 0x140C0604, // 003B LT R3 R3 R4 + 0x780E0002, // 003C JMPF R3 #0040 + 0x8C0C010B, // 003D GETMET R3 R0 K11 + 0x5C140200, // 003E MOVE R5 R1 + 0x7C0C0400, // 003F CALL R3 2 + 0x80040000, // 0040 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: tostring +********************************************************************/ +be_local_closure(class_SequenceManager_tostring, /* name */ + be_nested_proto( + 8, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(tostring), + &be_const_str_solidified, + ( &(const binstruction[30]) { /* code */ + 0x58040028, // 0000 LDCONST R1 K40 + 0x8808011B, // 0001 GETMBR R2 R0 K27 + 0x780A0010, // 0002 JMPF R2 #0014 + 0x8C080122, // 0003 GETMET R2 R0 K34 + 0x7C080200, // 0004 CALL R2 1 + 0x540DFFFE, // 0005 LDINT R3 -1 + 0x1C0C0403, // 0006 EQ R3 R2 R3 + 0x780E0005, // 0007 JMPF R3 #000E + 0x600C0018, // 0008 GETGBL R3 G24 + 0x58100029, // 0009 LDCONST R4 K41 + 0x8814011A, // 000A GETMBR R5 R0 K26 + 0x7C0C0400, // 000B CALL R3 2 + 0x5C040600, // 000C MOVE R1 R3 + 0x70020005, // 000D JMP #0014 + 0x600C0018, // 000E GETGBL R3 G24 + 0x5810002A, // 000F LDCONST R4 K42 + 0x5C140400, // 0010 MOVE R5 R2 + 0x8818011A, // 0011 GETMBR R6 R0 K26 + 0x7C0C0600, // 0012 CALL R3 3 + 0x5C040600, // 0013 MOVE R1 R3 + 0x60080018, // 0014 GETGBL R2 G24 + 0x580C002B, // 0015 LDCONST R3 K43 + 0x6010000C, // 0016 GETGBL R4 G12 + 0x88140103, // 0017 GETMBR R5 R0 K3 + 0x7C100200, // 0018 CALL R4 1 + 0x88140108, // 0019 GETMBR R5 R0 K8 + 0x8818011C, // 001A GETMBR R6 R0 K28 + 0x5C1C0200, // 001B MOVE R7 R1 + 0x7C080A00, // 001C CALL R2 5 + 0x80040400, // 001D RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: execute_current_step +********************************************************************/ +be_local_closure(class_SequenceManager_execute_current_step, /* name */ + be_nested_proto( + 9, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_SequenceManager, /* shared constants */ + be_str_weak(execute_current_step), + &be_const_str_solidified, + ( &(const binstruction[84]) { /* code */ + 0x88080108, // 0000 GETMBR R2 R0 K8 + 0x600C000C, // 0001 GETGBL R3 G12 + 0x88100103, // 0002 GETMBR R4 R0 K3 + 0x7C0C0200, // 0003 CALL R3 1 + 0x28080403, // 0004 GE R2 R2 R3 + 0x780A0003, // 0005 JMPF R2 #000A + 0x8C08010C, // 0006 GETMET R2 R0 K12 + 0x5C100200, // 0007 MOVE R4 R1 + 0x7C080400, // 0008 CALL R2 2 + 0x80000400, // 0009 RET 0 + 0x88080103, // 000A GETMBR R2 R0 K3 + 0x880C0108, // 000B GETMBR R3 R0 K8 + 0x94080403, // 000C GETIDX R2 R2 R3 + 0x940C0505, // 000D GETIDX R3 R2 K5 + 0x1C0C070D, // 000E EQ R3 R3 K13 + 0x780E0022, // 000F JMPF R3 #0033 + 0x940C050E, // 0010 GETIDX R3 R2 K14 + 0x4C100000, // 0011 LDNIL R4 + 0x1C100604, // 0012 EQ R4 R3 R4 + 0x78120000, // 0013 JMPF R4 #0015 + 0x80000800, // 0014 RET 0 + 0x88100102, // 0015 GETMBR R4 R0 K2 + 0x8C10092C, // 0016 GETMET R4 R4 K44 + 0x7C100200, // 0017 CALL R4 1 + 0x50140000, // 0018 LDBOOL R5 0 0 + 0x60180010, // 0019 GETGBL R6 G16 + 0x5C1C0800, // 001A MOVE R7 R4 + 0x7C180200, // 001B CALL R6 1 + 0xA8020008, // 001C EXBLK 0 #0026 + 0x5C1C0C00, // 001D MOVE R7 R6 + 0x7C1C0000, // 001E CALL R7 0 + 0x1C200E03, // 001F EQ R8 R7 R3 + 0x78220001, // 0020 JMPF R8 #0023 + 0x50140200, // 0021 LDBOOL R5 1 0 + 0x70020000, // 0022 JMP #0024 + 0x7001FFF8, // 0023 JMP #001D + 0xA8040001, // 0024 EXBLK 1 1 + 0x70020002, // 0025 JMP #0029 + 0x58180015, // 0026 LDCONST R6 K21 + 0xAC180200, // 0027 CATCH R6 1 0 + 0xB0080000, // 0028 RAISE 2 R0 R0 + 0x5C180A00, // 0029 MOVE R6 R5 + 0x741A0003, // 002A JMPT R6 #002F + 0x88180102, // 002B GETMBR R6 R0 K2 + 0x8C180D2D, // 002C GETMET R6 R6 K45 + 0x5C200600, // 002D MOVE R8 R3 + 0x7C180400, // 002E CALL R6 2 + 0x8C180710, // 002F GETMET R6 R3 K16 + 0x5C200200, // 0030 MOVE R8 R1 + 0x7C180400, // 0031 CALL R6 2 + 0x7002001E, // 0032 JMP #0052 + 0x940C0505, // 0033 GETIDX R3 R2 K5 + 0x1C0C0706, // 0034 EQ R3 R3 K6 + 0x780E0000, // 0035 JMPF R3 #0037 + 0x7002001A, // 0036 JMP #0052 + 0x940C0505, // 0037 GETIDX R3 R2 K5 + 0x1C0C0714, // 0038 EQ R3 R3 K20 + 0x780E0005, // 0039 JMPF R3 #0040 + 0x940C050E, // 003A GETIDX R3 R2 K14 + 0x88100102, // 003B GETMBR R4 R0 K2 + 0x8C100911, // 003C GETMET R4 R4 K17 + 0x5C180600, // 003D MOVE R6 R3 + 0x7C100400, // 003E CALL R4 2 + 0x70020011, // 003F JMP #0052 + 0x940C0505, // 0040 GETIDX R3 R2 K5 + 0x1C0C0709, // 0041 EQ R3 R3 K9 + 0x780E0007, // 0042 JMPF R3 #004B + 0x940C0509, // 0043 GETIDX R3 R2 K9 + 0x4C100000, // 0044 LDNIL R4 + 0x20100604, // 0045 NE R4 R3 R4 + 0x78120002, // 0046 JMPF R4 #004A + 0x5C100600, // 0047 MOVE R4 R3 + 0x88140102, // 0048 GETMBR R5 R0 K2 + 0x7C100200, // 0049 CALL R4 1 + 0x70020006, // 004A JMP #0052 + 0x940C0505, // 004B GETIDX R3 R2 K5 + 0x1C0C0712, // 004C EQ R3 R3 K18 + 0x780E0003, // 004D JMPF R3 #0052 + 0x940C0513, // 004E GETIDX R3 R2 K19 + 0x8C100710, // 004F GETMET R4 R3 K16 + 0x5C180200, // 0050 MOVE R6 R1 + 0x7C100400, // 0051 CALL R4 2 + 0x90021E01, // 0052 SETMBR R0 K15 R1 + 0x80000000, // 0053 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: SequenceManager +********************************************************************/ +extern const bclass be_class_ParameterizedObject; +be_local_class(SequenceManager, + 8, + &be_class_ParameterizedObject, + be_nested_map(26, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(execute_current_step, -1), be_const_closure(class_SequenceManager_execute_current_step_closure) }, + { be_const_key_weak(current_iteration, -1), be_const_var(6) }, + { be_const_key_weak(steps, -1), be_const_var(4) }, + { be_const_key_weak(tostring, -1), be_const_closure(class_SequenceManager_tostring_closure) }, + { be_const_key_weak(step_index, -1), be_const_var(2) }, + { be_const_key_weak(start, -1), be_const_closure(class_SequenceManager_start_closure) }, + { be_const_key_weak(stop_all_subsequences, 1), be_const_closure(class_SequenceManager_stop_all_subsequences_closure) }, + { be_const_key_weak(push_play_step, -1), be_const_closure(class_SequenceManager_push_play_step_closure) }, + { be_const_key_weak(complete_iteration, -1), be_const_closure(class_SequenceManager_complete_iteration_closure) }, + { be_const_key_weak(is_repeat_sequence, -1), be_const_var(7) }, + { be_const_key_weak(stop, -1), be_const_closure(class_SequenceManager_stop_closure) }, + { be_const_key_weak(push_closure_step, -1), be_const_closure(class_SequenceManager_push_closure_step_closure) }, + { be_const_key_weak(push_wait_step, 23), be_const_closure(class_SequenceManager_push_wait_step_closure) }, + { be_const_key_weak(push_repeat_subsequence, 3), be_const_closure(class_SequenceManager_push_repeat_subsequence_closure) }, + { be_const_key_weak(sequence_state, 8), be_const_var(1) }, + { be_const_key_weak(is_sequence_running, -1), be_const_closure(class_SequenceManager_is_sequence_running_closure) }, + { be_const_key_weak(push_step, -1), be_const_closure(class_SequenceManager_push_step_closure) }, + { be_const_key_weak(active_sequence, -1), be_const_var(0) }, + { be_const_key_weak(step_start_time, 11), be_const_var(3) }, + { be_const_key_weak(init, 10), be_const_closure(class_SequenceManager_init_closure) }, + { be_const_key_weak(advance_to_next_step, -1), be_const_closure(class_SequenceManager_advance_to_next_step_closure) }, + { be_const_key_weak(execute_closure_steps_batch, 5), be_const_closure(class_SequenceManager_execute_closure_steps_batch_closure) }, + { be_const_key_weak(get_resolved_repeat_count, 4), be_const_closure(class_SequenceManager_get_resolved_repeat_count_closure) }, + { be_const_key_weak(update, -1), be_const_closure(class_SequenceManager_update_closure) }, + { be_const_key_weak(repeat_count, -1), be_const_var(5) }, + { be_const_key_weak(execute_closure_steps_batch_atomic, 0), be_const_closure(class_SequenceManager_execute_closure_steps_batch_atomic_closure) }, + })), + be_str_weak(SequenceManager) +); + +/******************************************************************** +** Solidified function: create_closure_value +********************************************************************/ +be_local_closure(create_closure_value, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ 0, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 4]) { /* constants */ + ( &(const bvalue[ 3]) { /* constants */ /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(oscillator_value), - /* K2 */ be_nested_str_weak(form), - /* K3 */ be_nested_str_weak(EASE_OUT), + /* K1 */ be_nested_str_weak(closure_value), + /* K2 */ be_nested_str_weak(closure), }), - be_str_weak(ease_out), + be_str_weak(create_closure_value), &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0xB80A0000, // 0004 GETNGBL R2 K0 - 0x88080503, // 0005 GETMBR R2 R2 K3 - 0x90060402, // 0006 SETMBR R1 K2 R2 - 0x80040200, // 0007 RET 1 R1 + ( &(const binstruction[ 6]) { /* code */ + 0xB80A0000, // 0000 GETNGBL R2 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x5C100000, // 0002 MOVE R4 R0 + 0x7C080400, // 0003 CALL R2 2 + 0x900A0401, // 0004 SETMBR R2 K2 R1 + 0x80040400, // 0005 RET 1 R2 }) ) ); @@ -10198,408 +10737,6 @@ be_local_class(FireAnimation, be_str_weak(FireAnimation) ); -/******************************************************************** -** Solidified function: create_closure_value -********************************************************************/ -be_local_closure(create_closure_value, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(closure_value), - /* K2 */ be_nested_str_weak(closure), - }), - be_str_weak(create_closure_value), - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0xB80A0000, // 0000 GETNGBL R2 K0 - 0x8C080501, // 0001 GETMET R2 R2 K1 - 0x5C100000, // 0002 MOVE R4 R0 - 0x7C080400, // 0003 CALL R2 2 - 0x900A0401, // 0004 SETMBR R2 K2 R1 - 0x80040400, // 0005 RET 1 R2 - }) - ) -); -/*******************************************************************/ - -// compact class 'CometAnimation' ktab size: 24, total: 42 (saved 144 bytes) -static const bvalue be_ktab_class_CometAnimation[24] = { - /* K0 */ be_nested_str_weak(speed), - /* K1 */ be_nested_str_weak(direction), - /* K2 */ be_nested_str_weak(wrap_around), - /* K3 */ be_nested_str_weak(engine), - /* K4 */ be_nested_str_weak(strip_length), - /* K5 */ be_nested_str_weak(start_time), - /* K6 */ be_const_int(0), - /* K7 */ be_nested_str_weak(head_position), - /* K8 */ be_const_int(1), - /* K9 */ be_nested_str_weak(init), - /* K10 */ be_nested_str_weak(animation), - /* K11 */ be_nested_str_weak(is_value_provider), - /* K12 */ be_nested_str_weak(color), - /* K13 */ be_nested_str_weak(0x_X2508x), - /* K14 */ be_nested_str_weak(CometAnimation_X28color_X3D_X25s_X2C_X20head_pos_X3D_X25_X2E1f_X2C_X20tail_length_X3D_X25s_X2C_X20speed_X3D_X25s_X2C_X20direction_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29), - /* K15 */ be_nested_str_weak(tail_length), - /* K16 */ be_nested_str_weak(priority), - /* K17 */ be_nested_str_weak(is_running), - /* K18 */ be_nested_str_weak(fade_factor), - /* K19 */ be_nested_str_weak(tasmota), - /* K20 */ be_nested_str_weak(scale_uint), - /* K21 */ be_nested_str_weak(width), - /* K22 */ be_nested_str_weak(set_pixel_color), - /* K23 */ be_nested_str_weak(on_param_changed), -}; - - -extern const bclass be_class_CometAnimation; - -/******************************************************************** -** Solidified function: update -********************************************************************/ -be_local_closure(class_CometAnimation_update, /* name */ - be_nested_proto( - 11, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CometAnimation, /* shared constants */ - be_str_weak(update), - &be_const_str_solidified, - ( &(const binstruction[56]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x880C0101, // 0001 GETMBR R3 R0 K1 - 0x88100102, // 0002 GETMBR R4 R0 K2 - 0x88140103, // 0003 GETMBR R5 R0 K3 - 0x88140B04, // 0004 GETMBR R5 R5 K4 - 0x88180105, // 0005 GETMBR R6 R0 K5 - 0x04180206, // 0006 SUB R6 R1 R6 - 0x081C0406, // 0007 MUL R7 R2 R6 - 0x081C0E03, // 0008 MUL R7 R7 R3 - 0x542203E7, // 0009 LDINT R8 1000 - 0x0C1C0E08, // 000A DIV R7 R7 R8 - 0x24200706, // 000B GT R8 R3 K6 - 0x78220001, // 000C JMPF R8 #000F - 0x90020E07, // 000D SETMBR R0 K7 R7 - 0x70020004, // 000E JMP #0014 - 0x04200B08, // 000F SUB R8 R5 K8 - 0x542600FF, // 0010 LDINT R9 256 - 0x08201009, // 0011 MUL R8 R8 R9 - 0x00201007, // 0012 ADD R8 R8 R7 - 0x90020E08, // 0013 SETMBR R0 K7 R8 - 0x542200FF, // 0014 LDINT R8 256 - 0x08200A08, // 0015 MUL R8 R5 R8 - 0x20240906, // 0016 NE R9 R4 K6 - 0x7826000E, // 0017 JMPF R9 #0027 - 0x88240107, // 0018 GETMBR R9 R0 K7 - 0x28241208, // 0019 GE R9 R9 R8 - 0x78260003, // 001A JMPF R9 #001F - 0x88240107, // 001B GETMBR R9 R0 K7 - 0x04241208, // 001C SUB R9 R9 R8 - 0x90020E09, // 001D SETMBR R0 K7 R9 - 0x7001FFF8, // 001E JMP #0018 - 0x88240107, // 001F GETMBR R9 R0 K7 - 0x14241306, // 0020 LT R9 R9 K6 - 0x78260003, // 0021 JMPF R9 #0026 - 0x88240107, // 0022 GETMBR R9 R0 K7 - 0x00241208, // 0023 ADD R9 R9 R8 - 0x90020E09, // 0024 SETMBR R0 K7 R9 - 0x7001FFF8, // 0025 JMP #001F - 0x7002000F, // 0026 JMP #0037 - 0x88240107, // 0027 GETMBR R9 R0 K7 - 0x28241208, // 0028 GE R9 R9 R8 - 0x78260006, // 0029 JMPF R9 #0031 - 0x04240B08, // 002A SUB R9 R5 K8 - 0x542A00FF, // 002B LDINT R10 256 - 0x0824120A, // 002C MUL R9 R9 R10 - 0x90020E09, // 002D SETMBR R0 K7 R9 - 0x44240600, // 002E NEG R9 R3 - 0x90020209, // 002F SETMBR R0 K1 R9 - 0x70020005, // 0030 JMP #0037 - 0x88240107, // 0031 GETMBR R9 R0 K7 - 0x14241306, // 0032 LT R9 R9 K6 - 0x78260002, // 0033 JMPF R9 #0037 - 0x90020F06, // 0034 SETMBR R0 K7 K6 - 0x44240600, // 0035 NEG R9 R3 - 0x90020209, // 0036 SETMBR R0 K1 R9 - 0x80000000, // 0037 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(class_CometAnimation_init, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CometAnimation, /* shared constants */ - be_str_weak(init), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x60080003, // 0000 GETGBL R2 G3 - 0x5C0C0000, // 0001 MOVE R3 R0 - 0x7C080200, // 0002 CALL R2 1 - 0x8C080509, // 0003 GETMET R2 R2 K9 - 0x5C100200, // 0004 MOVE R4 R1 - 0x7C080400, // 0005 CALL R2 2 - 0x90020F06, // 0006 SETMBR R0 K7 K6 - 0x80000000, // 0007 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: tostring -********************************************************************/ -be_local_closure(class_CometAnimation_tostring, /* name */ - be_nested_proto( - 11, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CometAnimation, /* shared constants */ - be_str_weak(tostring), - &be_const_str_solidified, - ( &(const binstruction[29]) { /* code */ - 0x4C040000, // 0000 LDNIL R1 - 0xB80A1400, // 0001 GETNGBL R2 K10 - 0x8C08050B, // 0002 GETMET R2 R2 K11 - 0x8810010C, // 0003 GETMBR R4 R0 K12 - 0x7C080400, // 0004 CALL R2 2 - 0x780A0004, // 0005 JMPF R2 #000B - 0x60080008, // 0006 GETGBL R2 G8 - 0x880C010C, // 0007 GETMBR R3 R0 K12 - 0x7C080200, // 0008 CALL R2 1 - 0x5C040400, // 0009 MOVE R1 R2 - 0x70020004, // 000A JMP #0010 - 0x60080018, // 000B GETGBL R2 G24 - 0x580C000D, // 000C LDCONST R3 K13 - 0x8810010C, // 000D GETMBR R4 R0 K12 - 0x7C080400, // 000E CALL R2 2 - 0x5C040400, // 000F MOVE R1 R2 - 0x60080018, // 0010 GETGBL R2 G24 - 0x580C000E, // 0011 LDCONST R3 K14 - 0x5C100200, // 0012 MOVE R4 R1 - 0x88140107, // 0013 GETMBR R5 R0 K7 - 0x541A00FF, // 0014 LDINT R6 256 - 0x0C140A06, // 0015 DIV R5 R5 R6 - 0x8818010F, // 0016 GETMBR R6 R0 K15 - 0x881C0100, // 0017 GETMBR R7 R0 K0 - 0x88200101, // 0018 GETMBR R8 R0 K1 - 0x88240110, // 0019 GETMBR R9 R0 K16 - 0x88280111, // 001A GETMBR R10 R0 K17 - 0x7C081000, // 001B CALL R2 8 - 0x80040400, // 001C RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: render -********************************************************************/ -be_local_closure(class_CometAnimation_render, /* name */ - be_nested_proto( - 25, /* nstack */ - 4, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CometAnimation, /* shared constants */ - be_str_weak(render), - &be_const_str_solidified, - ( &(const binstruction[83]) { /* code */ - 0x88100107, // 0000 GETMBR R4 R0 K7 - 0x541600FF, // 0001 LDINT R5 256 - 0x0C100805, // 0002 DIV R4 R4 R5 - 0x8814010C, // 0003 GETMBR R5 R0 K12 - 0x8818010F, // 0004 GETMBR R6 R0 K15 - 0x881C0101, // 0005 GETMBR R7 R0 K1 - 0x88200102, // 0006 GETMBR R8 R0 K2 - 0x88240112, // 0007 GETMBR R9 R0 K18 - 0x542A0017, // 0008 LDINT R10 24 - 0x3C280A0A, // 0009 SHR R10 R5 R10 - 0x542E00FE, // 000A LDINT R11 255 - 0x2C28140B, // 000B AND R10 R10 R11 - 0x542E000F, // 000C LDINT R11 16 - 0x3C2C0A0B, // 000D SHR R11 R5 R11 - 0x543200FE, // 000E LDINT R12 255 - 0x2C2C160C, // 000F AND R11 R11 R12 - 0x54320007, // 0010 LDINT R12 8 - 0x3C300A0C, // 0011 SHR R12 R5 R12 - 0x543600FE, // 0012 LDINT R13 255 - 0x2C30180D, // 0013 AND R12 R12 R13 - 0x543600FE, // 0014 LDINT R13 255 - 0x2C340A0D, // 0015 AND R13 R5 R13 - 0x58380006, // 0016 LDCONST R14 K6 - 0x143C1C06, // 0017 LT R15 R14 R6 - 0x783E0037, // 0018 JMPF R15 #0051 - 0x083C1C07, // 0019 MUL R15 R14 R7 - 0x043C080F, // 001A SUB R15 R4 R15 - 0x20401106, // 001B NE R16 R8 K6 - 0x78420008, // 001C JMPF R16 #0026 - 0x28401E03, // 001D GE R16 R15 R3 - 0x78420001, // 001E JMPF R16 #0021 - 0x043C1E03, // 001F SUB R15 R15 R3 - 0x7001FFFB, // 0020 JMP #001D - 0x14401F06, // 0021 LT R16 R15 K6 - 0x78420001, // 0022 JMPF R16 #0025 - 0x003C1E03, // 0023 ADD R15 R15 R3 - 0x7001FFFB, // 0024 JMP #0021 - 0x70020005, // 0025 JMP #002C - 0x14401F06, // 0026 LT R16 R15 K6 - 0x74420001, // 0027 JMPT R16 #002A - 0x28401E03, // 0028 GE R16 R15 R3 - 0x78420001, // 0029 JMPF R16 #002C - 0x00381D08, // 002A ADD R14 R14 K8 - 0x7001FFEA, // 002B JMP #0017 - 0x544200FE, // 002C LDINT R16 255 - 0x24441D06, // 002D GT R17 R14 K6 - 0x7846000D, // 002E JMPF R17 #003D - 0x58440006, // 002F LDCONST R17 K6 - 0x1448220E, // 0030 LT R18 R17 R14 - 0x784A000A, // 0031 JMPF R18 #003D - 0xB84A2600, // 0032 GETNGBL R18 K19 - 0x8C482514, // 0033 GETMET R18 R18 K20 - 0x5C502000, // 0034 MOVE R20 R16 - 0x58540006, // 0035 LDCONST R21 K6 - 0x545A00FE, // 0036 LDINT R22 255 - 0x585C0006, // 0037 LDCONST R23 K6 - 0x5C601200, // 0038 MOVE R24 R9 - 0x7C480C00, // 0039 CALL R18 6 - 0x5C402400, // 003A MOVE R16 R18 - 0x00442308, // 003B ADD R17 R17 K8 - 0x7001FFF2, // 003C JMP #0030 - 0x54460017, // 003D LDINT R17 24 - 0x38442011, // 003E SHL R17 R16 R17 - 0x544A000F, // 003F LDINT R18 16 - 0x38481612, // 0040 SHL R18 R11 R18 - 0x30442212, // 0041 OR R17 R17 R18 - 0x544A0007, // 0042 LDINT R18 8 - 0x38481812, // 0043 SHL R18 R12 R18 - 0x30442212, // 0044 OR R17 R17 R18 - 0x3044220D, // 0045 OR R17 R17 R13 - 0x28481F06, // 0046 GE R18 R15 K6 - 0x784A0006, // 0047 JMPF R18 #004F - 0x88480315, // 0048 GETMBR R18 R1 K21 - 0x14481E12, // 0049 LT R18 R15 R18 - 0x784A0003, // 004A JMPF R18 #004F - 0x8C480316, // 004B GETMET R18 R1 K22 - 0x5C501E00, // 004C MOVE R20 R15 - 0x5C542200, // 004D MOVE R21 R17 - 0x7C480600, // 004E CALL R18 3 - 0x00381D08, // 004F ADD R14 R14 K8 - 0x7001FFC5, // 0050 JMP #0017 - 0x503C0200, // 0051 LDBOOL R15 1 0 - 0x80041E00, // 0052 RET 1 R15 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: on_param_changed -********************************************************************/ -be_local_closure(class_CometAnimation_on_param_changed, /* name */ - be_nested_proto( - 7, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CometAnimation, /* shared constants */ - be_str_weak(on_param_changed), - &be_const_str_solidified, - ( &(const binstruction[20]) { /* code */ - 0x600C0003, // 0000 GETGBL R3 G3 - 0x5C100000, // 0001 MOVE R4 R0 - 0x7C0C0200, // 0002 CALL R3 1 - 0x8C0C0717, // 0003 GETMET R3 R3 K23 - 0x5C140200, // 0004 MOVE R5 R1 - 0x5C180400, // 0005 MOVE R6 R2 - 0x7C0C0600, // 0006 CALL R3 3 - 0x1C0C0301, // 0007 EQ R3 R1 K1 - 0x780E0009, // 0008 JMPF R3 #0013 - 0x880C0103, // 0009 GETMBR R3 R0 K3 - 0x880C0704, // 000A GETMBR R3 R3 K4 - 0x24100506, // 000B GT R4 R2 K6 - 0x78120001, // 000C JMPF R4 #000F - 0x90020F06, // 000D SETMBR R0 K7 K6 - 0x70020003, // 000E JMP #0013 - 0x04100708, // 000F SUB R4 R3 K8 - 0x541600FF, // 0010 LDINT R5 256 - 0x08100805, // 0011 MUL R4 R4 R5 - 0x90020E04, // 0012 SETMBR R0 K7 R4 - 0x80000000, // 0013 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: CometAnimation -********************************************************************/ -extern const bclass be_class_Animation; -be_local_class(CometAnimation, - 1, - &be_class_Animation, - be_nested_map(7, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(init, -1), be_const_closure(class_CometAnimation_init_closure) }, - { be_const_key_weak(update, -1), be_const_closure(class_CometAnimation_update_closure) }, - { be_const_key_weak(PARAMS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { - be_const_map( * be_nested_map(5, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(fade_factor, -1), be_const_bytes_instance(07000001FF0001B300) }, - { be_const_key_weak(wrap_around, -1), be_const_bytes_instance(07000000010001) }, - { be_const_key_weak(direction, -1), be_const_bytes_instance(1400010200FF0001) }, - { be_const_key_weak(speed, 0), be_const_bytes_instance(07000101006401000A) }, - { be_const_key_weak(tail_length, -1), be_const_bytes_instance(07000100320005) }, - })) ) } )) }, - { be_const_key_weak(tostring, -1), be_const_closure(class_CometAnimation_tostring_closure) }, - { be_const_key_weak(render, 0), be_const_closure(class_CometAnimation_render_closure) }, - { be_const_key_weak(head_position, 2), be_const_var(0) }, - { be_const_key_weak(on_param_changed, -1), be_const_closure(class_CometAnimation_on_param_changed_closure) }, - })), - be_str_weak(CometAnimation) -); - /******************************************************************** ** Solidified function: animation_init ********************************************************************/ @@ -10710,37 +10847,253 @@ be_local_closure(solid, /* name */ ); /*******************************************************************/ +// compact class 'CompositeColorProvider' ktab size: 16, total: 28 (saved 96 bytes) +static const bvalue be_ktab_class_CompositeColorProvider[16] = { + /* K0 */ be_nested_str_weak(providers), + /* K1 */ be_nested_str_weak(push), + /* K2 */ be_const_int(0), + /* K3 */ be_const_int(1), + /* K4 */ be_nested_str_weak(get_color_for_value), + /* K5 */ be_nested_str_weak(brightness), + /* K6 */ be_nested_str_weak(apply_brightness), + /* K7 */ be_nested_str_weak(_blend_colors), + /* K8 */ be_nested_str_weak(produce_value), + /* K9 */ be_nested_str_weak(CompositeColorProvider_X28providers_X3D_X25s_X2C_X20blend_mode_X3D_X25s_X29), + /* K10 */ be_nested_str_weak(blend_mode), + /* K11 */ be_const_real_hex(0x437F0000), + /* K12 */ be_const_int(2), + /* K13 */ be_nested_str_weak(tasmota), + /* K14 */ be_nested_str_weak(scale_uint), + /* K15 */ be_nested_str_weak(init), +}; + + +extern const bclass be_class_CompositeColorProvider; /******************************************************************** -** Solidified function: pulsating_animation +** Solidified function: add_provider ********************************************************************/ -be_local_closure(pulsating_animation, /* name */ +be_local_closure(class_CompositeColorProvider_add_provider, /* name */ be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 5]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(breathe_animation), - /* K2 */ be_nested_str_weak(curve_factor), - /* K3 */ be_const_int(1), - /* K4 */ be_nested_str_weak(period), - }), - be_str_weak(pulsating_animation), + &be_ktab_class_CompositeColorProvider, /* shared constants */ + be_str_weak(add_provider), + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x5C100200, // 0002 MOVE R4 R1 + 0x7C080400, // 0003 CALL R2 2 + 0x80040000, // 0004 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_color_for_value +********************************************************************/ +be_local_closure(class_CompositeColorProvider_get_color_for_value, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CompositeColorProvider, /* shared constants */ + be_str_weak(get_color_for_value), + &be_const_str_solidified, + ( &(const binstruction[63]) { /* code */ + 0x600C000C, // 0000 GETGBL R3 G12 + 0x88100100, // 0001 GETMBR R4 R0 K0 + 0x7C0C0200, // 0002 CALL R3 1 + 0x1C0C0702, // 0003 EQ R3 R3 K2 + 0x780E0001, // 0004 JMPF R3 #0007 + 0x540DFFFE, // 0005 LDINT R3 -1 + 0x80040600, // 0006 RET 1 R3 + 0x600C000C, // 0007 GETGBL R3 G12 + 0x88100100, // 0008 GETMBR R4 R0 K0 + 0x7C0C0200, // 0009 CALL R3 1 + 0x1C0C0703, // 000A EQ R3 R3 K3 + 0x780E000F, // 000B JMPF R3 #001C + 0x880C0100, // 000C GETMBR R3 R0 K0 + 0x940C0702, // 000D GETIDX R3 R3 K2 + 0x8C0C0704, // 000E GETMET R3 R3 K4 + 0x5C140200, // 000F MOVE R5 R1 + 0x5C180400, // 0010 MOVE R6 R2 + 0x7C0C0600, // 0011 CALL R3 3 + 0x88100105, // 0012 GETMBR R4 R0 K5 + 0x541600FE, // 0013 LDINT R5 255 + 0x20140805, // 0014 NE R5 R4 R5 + 0x78160004, // 0015 JMPF R5 #001B + 0x8C140106, // 0016 GETMET R5 R0 K6 + 0x5C1C0600, // 0017 MOVE R7 R3 + 0x5C200800, // 0018 MOVE R8 R4 + 0x7C140600, // 0019 CALL R5 3 + 0x80040A00, // 001A RET 1 R5 + 0x80040600, // 001B RET 1 R3 + 0x880C0100, // 001C GETMBR R3 R0 K0 + 0x940C0702, // 001D GETIDX R3 R3 K2 + 0x8C0C0704, // 001E GETMET R3 R3 K4 + 0x5C140200, // 001F MOVE R5 R1 + 0x5C180400, // 0020 MOVE R6 R2 + 0x7C0C0600, // 0021 CALL R3 3 + 0x58100003, // 0022 LDCONST R4 K3 + 0x6014000C, // 0023 GETGBL R5 G12 + 0x88180100, // 0024 GETMBR R6 R0 K0 + 0x7C140200, // 0025 CALL R5 1 + 0x14140805, // 0026 LT R5 R4 R5 + 0x7816000C, // 0027 JMPF R5 #0035 + 0x88140100, // 0028 GETMBR R5 R0 K0 + 0x94140A04, // 0029 GETIDX R5 R5 R4 + 0x8C140B04, // 002A GETMET R5 R5 K4 + 0x5C1C0200, // 002B MOVE R7 R1 + 0x5C200400, // 002C MOVE R8 R2 + 0x7C140600, // 002D CALL R5 3 + 0x8C180107, // 002E GETMET R6 R0 K7 + 0x5C200600, // 002F MOVE R8 R3 + 0x5C240A00, // 0030 MOVE R9 R5 + 0x7C180600, // 0031 CALL R6 3 + 0x5C0C0C00, // 0032 MOVE R3 R6 + 0x00100903, // 0033 ADD R4 R4 K3 + 0x7001FFED, // 0034 JMP #0023 + 0x88140105, // 0035 GETMBR R5 R0 K5 + 0x541A00FE, // 0036 LDINT R6 255 + 0x20180A06, // 0037 NE R6 R5 R6 + 0x781A0004, // 0038 JMPF R6 #003E + 0x8C180106, // 0039 GETMET R6 R0 K6 + 0x5C200600, // 003A MOVE R8 R3 + 0x5C240A00, // 003B MOVE R9 R5 + 0x7C180600, // 003C CALL R6 3 + 0x80040C00, // 003D RET 1 R6 + 0x80040600, // 003E RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: produce_value +********************************************************************/ +be_local_closure(class_CompositeColorProvider_produce_value, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CompositeColorProvider, /* shared constants */ + be_str_weak(produce_value), + &be_const_str_solidified, + ( &(const binstruction[63]) { /* code */ + 0x600C000C, // 0000 GETGBL R3 G12 + 0x88100100, // 0001 GETMBR R4 R0 K0 + 0x7C0C0200, // 0002 CALL R3 1 + 0x1C0C0702, // 0003 EQ R3 R3 K2 + 0x780E0001, // 0004 JMPF R3 #0007 + 0x540DFFFE, // 0005 LDINT R3 -1 + 0x80040600, // 0006 RET 1 R3 + 0x600C000C, // 0007 GETGBL R3 G12 + 0x88100100, // 0008 GETMBR R4 R0 K0 + 0x7C0C0200, // 0009 CALL R3 1 + 0x1C0C0703, // 000A EQ R3 R3 K3 + 0x780E000F, // 000B JMPF R3 #001C + 0x880C0100, // 000C GETMBR R3 R0 K0 + 0x940C0702, // 000D GETIDX R3 R3 K2 + 0x8C0C0708, // 000E GETMET R3 R3 K8 + 0x5C140200, // 000F MOVE R5 R1 + 0x5C180400, // 0010 MOVE R6 R2 + 0x7C0C0600, // 0011 CALL R3 3 + 0x88100105, // 0012 GETMBR R4 R0 K5 + 0x541600FE, // 0013 LDINT R5 255 + 0x20140805, // 0014 NE R5 R4 R5 + 0x78160004, // 0015 JMPF R5 #001B + 0x8C140106, // 0016 GETMET R5 R0 K6 + 0x5C1C0600, // 0017 MOVE R7 R3 + 0x5C200800, // 0018 MOVE R8 R4 + 0x7C140600, // 0019 CALL R5 3 + 0x80040A00, // 001A RET 1 R5 + 0x80040600, // 001B RET 1 R3 + 0x880C0100, // 001C GETMBR R3 R0 K0 + 0x940C0702, // 001D GETIDX R3 R3 K2 + 0x8C0C0708, // 001E GETMET R3 R3 K8 + 0x5C140200, // 001F MOVE R5 R1 + 0x5C180400, // 0020 MOVE R6 R2 + 0x7C0C0600, // 0021 CALL R3 3 + 0x58100003, // 0022 LDCONST R4 K3 + 0x6014000C, // 0023 GETGBL R5 G12 + 0x88180100, // 0024 GETMBR R6 R0 K0 + 0x7C140200, // 0025 CALL R5 1 + 0x14140805, // 0026 LT R5 R4 R5 + 0x7816000C, // 0027 JMPF R5 #0035 + 0x88140100, // 0028 GETMBR R5 R0 K0 + 0x94140A04, // 0029 GETIDX R5 R5 R4 + 0x8C140B08, // 002A GETMET R5 R5 K8 + 0x5C1C0200, // 002B MOVE R7 R1 + 0x5C200400, // 002C MOVE R8 R2 + 0x7C140600, // 002D CALL R5 3 + 0x8C180107, // 002E GETMET R6 R0 K7 + 0x5C200600, // 002F MOVE R8 R3 + 0x5C240A00, // 0030 MOVE R9 R5 + 0x7C180600, // 0031 CALL R6 3 + 0x5C0C0C00, // 0032 MOVE R3 R6 + 0x00100903, // 0033 ADD R4 R4 K3 + 0x7001FFED, // 0034 JMP #0023 + 0x88140105, // 0035 GETMBR R5 R0 K5 + 0x541A00FE, // 0036 LDINT R6 255 + 0x20180A06, // 0037 NE R6 R5 R6 + 0x781A0004, // 0038 JMPF R6 #003E + 0x8C180106, // 0039 GETMET R6 R0 K6 + 0x5C200600, // 003A MOVE R8 R3 + 0x5C240A00, // 003B MOVE R9 R5 + 0x7C180600, // 003C CALL R6 3 + 0x80040C00, // 003D RET 1 R6 + 0x80040600, // 003E RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: tostring +********************************************************************/ +be_local_closure(class_CompositeColorProvider_tostring, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CompositeColorProvider, /* shared constants */ + be_str_weak(tostring), &be_const_str_solidified, ( &(const binstruction[ 8]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x90060503, // 0004 SETMBR R1 K2 K3 - 0x540A03E7, // 0005 LDINT R2 1000 - 0x90060802, // 0006 SETMBR R1 K4 R2 + 0x60040018, // 0000 GETGBL R1 G24 + 0x58080009, // 0001 LDCONST R2 K9 + 0x600C000C, // 0002 GETGBL R3 G12 + 0x88100100, // 0003 GETMBR R4 R0 K0 + 0x7C0C0200, // 0004 CALL R3 1 + 0x8810010A, // 0005 GETMBR R4 R0 K10 + 0x7C040600, // 0006 CALL R1 3 0x80040200, // 0007 RET 1 R1 }) ) @@ -10748,6 +11101,238 @@ be_local_closure(pulsating_animation, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: _blend_colors +********************************************************************/ +be_local_closure(class_CompositeColorProvider__blend_colors, /* name */ + be_nested_proto( + 23, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CompositeColorProvider, /* shared constants */ + be_str_weak(_blend_colors), + &be_const_str_solidified, + ( &(const binstruction[151]) { /* code */ + 0x880C010A, // 0000 GETMBR R3 R0 K10 + 0x54120017, // 0001 LDINT R4 24 + 0x3C100204, // 0002 SHR R4 R1 R4 + 0x541600FE, // 0003 LDINT R5 255 + 0x2C100805, // 0004 AND R4 R4 R5 + 0x5416000F, // 0005 LDINT R5 16 + 0x3C140205, // 0006 SHR R5 R1 R5 + 0x541A00FE, // 0007 LDINT R6 255 + 0x2C140A06, // 0008 AND R5 R5 R6 + 0x541A0007, // 0009 LDINT R6 8 + 0x3C180206, // 000A SHR R6 R1 R6 + 0x541E00FE, // 000B LDINT R7 255 + 0x2C180C07, // 000C AND R6 R6 R7 + 0x541E00FE, // 000D LDINT R7 255 + 0x2C1C0207, // 000E AND R7 R1 R7 + 0x54220017, // 000F LDINT R8 24 + 0x3C200408, // 0010 SHR R8 R2 R8 + 0x542600FE, // 0011 LDINT R9 255 + 0x2C201009, // 0012 AND R8 R8 R9 + 0x5426000F, // 0013 LDINT R9 16 + 0x3C240409, // 0014 SHR R9 R2 R9 + 0x542A00FE, // 0015 LDINT R10 255 + 0x2C24120A, // 0016 AND R9 R9 R10 + 0x542A0007, // 0017 LDINT R10 8 + 0x3C28040A, // 0018 SHR R10 R2 R10 + 0x542E00FE, // 0019 LDINT R11 255 + 0x2C28140B, // 001A AND R10 R10 R11 + 0x542E00FE, // 001B LDINT R11 255 + 0x2C2C040B, // 001C AND R11 R2 R11 + 0x4C300000, // 001D LDNIL R12 + 0x4C340000, // 001E LDNIL R13 + 0x4C380000, // 001F LDNIL R14 + 0x4C3C0000, // 0020 LDNIL R15 + 0x1C400702, // 0021 EQ R16 R3 K2 + 0x7842001C, // 0022 JMPF R16 #0040 + 0x0C40110B, // 0023 DIV R16 R8 K11 + 0x60440009, // 0024 GETGBL R17 G9 + 0x044A0610, // 0025 SUB R18 K3 R16 + 0x08480E12, // 0026 MUL R18 R7 R18 + 0x084C1610, // 0027 MUL R19 R11 R16 + 0x00482413, // 0028 ADD R18 R18 R19 + 0x7C440200, // 0029 CALL R17 1 + 0x5C342200, // 002A MOVE R13 R17 + 0x60440009, // 002B GETGBL R17 G9 + 0x044A0610, // 002C SUB R18 K3 R16 + 0x08480C12, // 002D MUL R18 R6 R18 + 0x084C1410, // 002E MUL R19 R10 R16 + 0x00482413, // 002F ADD R18 R18 R19 + 0x7C440200, // 0030 CALL R17 1 + 0x5C382200, // 0031 MOVE R14 R17 + 0x60440009, // 0032 GETGBL R17 G9 + 0x044A0610, // 0033 SUB R18 K3 R16 + 0x08480A12, // 0034 MUL R18 R5 R18 + 0x084C1210, // 0035 MUL R19 R9 R16 + 0x00482413, // 0036 ADD R18 R18 R19 + 0x7C440200, // 0037 CALL R17 1 + 0x5C3C2200, // 0038 MOVE R15 R17 + 0x24440808, // 0039 GT R17 R4 R8 + 0x78460001, // 003A JMPF R17 #003D + 0x5C440800, // 003B MOVE R17 R4 + 0x70020000, // 003C JMP #003E + 0x5C441000, // 003D MOVE R17 R8 + 0x5C302200, // 003E MOVE R12 R17 + 0x7002004C, // 003F JMP #008D + 0x1C400703, // 0040 EQ R16 R3 K3 + 0x78420021, // 0041 JMPF R16 #0064 + 0x00400E0B, // 0042 ADD R16 R7 R11 + 0x5C342000, // 0043 MOVE R13 R16 + 0x00400C0A, // 0044 ADD R16 R6 R10 + 0x5C382000, // 0045 MOVE R14 R16 + 0x00400A09, // 0046 ADD R16 R5 R9 + 0x5C3C2000, // 0047 MOVE R15 R16 + 0x24400808, // 0048 GT R16 R4 R8 + 0x78420001, // 0049 JMPF R16 #004C + 0x5C400800, // 004A MOVE R16 R4 + 0x70020000, // 004B JMP #004D + 0x5C401000, // 004C MOVE R16 R8 + 0x5C302000, // 004D MOVE R12 R16 + 0x544200FE, // 004E LDINT R16 255 + 0x24401A10, // 004F GT R16 R13 R16 + 0x78420001, // 0050 JMPF R16 #0053 + 0x544200FE, // 0051 LDINT R16 255 + 0x70020000, // 0052 JMP #0054 + 0x5C401A00, // 0053 MOVE R16 R13 + 0x5C342000, // 0054 MOVE R13 R16 + 0x544200FE, // 0055 LDINT R16 255 + 0x24401C10, // 0056 GT R16 R14 R16 + 0x78420001, // 0057 JMPF R16 #005A + 0x544200FE, // 0058 LDINT R16 255 + 0x70020000, // 0059 JMP #005B + 0x5C401C00, // 005A MOVE R16 R14 + 0x5C382000, // 005B MOVE R14 R16 + 0x544200FE, // 005C LDINT R16 255 + 0x24401E10, // 005D GT R16 R15 R16 + 0x78420001, // 005E JMPF R16 #0061 + 0x544200FE, // 005F LDINT R16 255 + 0x70020000, // 0060 JMP #0062 + 0x5C401E00, // 0061 MOVE R16 R15 + 0x5C3C2000, // 0062 MOVE R15 R16 + 0x70020028, // 0063 JMP #008D + 0x1C40070C, // 0064 EQ R16 R3 K12 + 0x78420026, // 0065 JMPF R16 #008D + 0xB8421A00, // 0066 GETNGBL R16 K13 + 0x8C40210E, // 0067 GETMET R16 R16 K14 + 0x08480E0B, // 0068 MUL R18 R7 R11 + 0x584C0002, // 0069 LDCONST R19 K2 + 0x545200FE, // 006A LDINT R20 255 + 0x545600FE, // 006B LDINT R21 255 + 0x08502815, // 006C MUL R20 R20 R21 + 0x58540002, // 006D LDCONST R21 K2 + 0x545A00FE, // 006E LDINT R22 255 + 0x7C400C00, // 006F CALL R16 6 + 0x5C342000, // 0070 MOVE R13 R16 + 0xB8421A00, // 0071 GETNGBL R16 K13 + 0x8C40210E, // 0072 GETMET R16 R16 K14 + 0x08480C0A, // 0073 MUL R18 R6 R10 + 0x584C0002, // 0074 LDCONST R19 K2 + 0x545200FE, // 0075 LDINT R20 255 + 0x545600FE, // 0076 LDINT R21 255 + 0x08502815, // 0077 MUL R20 R20 R21 + 0x58540002, // 0078 LDCONST R21 K2 + 0x545A00FE, // 0079 LDINT R22 255 + 0x7C400C00, // 007A CALL R16 6 + 0x5C382000, // 007B MOVE R14 R16 + 0xB8421A00, // 007C GETNGBL R16 K13 + 0x8C40210E, // 007D GETMET R16 R16 K14 + 0x08480A09, // 007E MUL R18 R5 R9 + 0x584C0002, // 007F LDCONST R19 K2 + 0x545200FE, // 0080 LDINT R20 255 + 0x545600FE, // 0081 LDINT R21 255 + 0x08502815, // 0082 MUL R20 R20 R21 + 0x58540002, // 0083 LDCONST R21 K2 + 0x545A00FE, // 0084 LDINT R22 255 + 0x7C400C00, // 0085 CALL R16 6 + 0x5C3C2000, // 0086 MOVE R15 R16 + 0x24400808, // 0087 GT R16 R4 R8 + 0x78420001, // 0088 JMPF R16 #008B + 0x5C400800, // 0089 MOVE R16 R4 + 0x70020000, // 008A JMP #008C + 0x5C401000, // 008B MOVE R16 R8 + 0x5C302000, // 008C MOVE R12 R16 + 0x54420017, // 008D LDINT R16 24 + 0x38401810, // 008E SHL R16 R12 R16 + 0x5446000F, // 008F LDINT R17 16 + 0x38441E11, // 0090 SHL R17 R15 R17 + 0x30402011, // 0091 OR R16 R16 R17 + 0x54460007, // 0092 LDINT R17 8 + 0x38441C11, // 0093 SHL R17 R14 R17 + 0x30402011, // 0094 OR R16 R16 R17 + 0x3040200D, // 0095 OR R16 R16 R13 + 0x80042000, // 0096 RET 1 R16 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(class_CompositeColorProvider_init, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CompositeColorProvider, /* shared constants */ + be_str_weak(init), + &be_const_str_solidified, + ( &(const binstruction[10]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C08050F, // 0003 GETMET R2 R2 K15 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x60080012, // 0006 GETGBL R2 G18 + 0x7C080000, // 0007 CALL R2 0 + 0x90020002, // 0008 SETMBR R0 K0 R2 + 0x80000000, // 0009 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: CompositeColorProvider +********************************************************************/ +extern const bclass be_class_ColorProvider; +be_local_class(CompositeColorProvider, + 1, + &be_class_ColorProvider, + be_nested_map(8, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(add_provider, -1), be_const_closure(class_CompositeColorProvider_add_provider_closure) }, + { be_const_key_weak(get_color_for_value, 7), be_const_closure(class_CompositeColorProvider_get_color_for_value_closure) }, + { be_const_key_weak(init, -1), be_const_closure(class_CompositeColorProvider_init_closure) }, + { be_const_key_weak(PARAMS, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { + be_const_map( * be_nested_map(1, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(blend_mode, -1), be_const_bytes_instance(14000003000000010002) }, + })) ) } )) }, + { be_const_key_weak(tostring, -1), be_const_closure(class_CompositeColorProvider_tostring_closure) }, + { be_const_key_weak(providers, 4), be_const_var(0) }, + { be_const_key_weak(_blend_colors, -1), be_const_closure(class_CompositeColorProvider__blend_colors_closure) }, + { be_const_key_weak(produce_value, -1), be_const_closure(class_CompositeColorProvider_produce_value_closure) }, + })), + be_str_weak(CompositeColorProvider) +); + /******************************************************************** ** Solidified function: gradient_rainbow_radial ********************************************************************/ @@ -10790,6 +11375,195 @@ be_local_closure(gradient_rainbow_radial, /* name */ ); /*******************************************************************/ +// compact class 'CrenelPositionAnimation' ktab size: 19, total: 24 (saved 40 bytes) +static const bvalue be_ktab_class_CrenelPositionAnimation[19] = { + /* K0 */ be_nested_str_weak(back_color), + /* K1 */ be_nested_str_weak(pos), + /* K2 */ be_nested_str_weak(pulse_size), + /* K3 */ be_nested_str_weak(low_size), + /* K4 */ be_nested_str_weak(nb_pulse), + /* K5 */ be_nested_str_weak(color), + /* K6 */ be_const_int(-16777216), + /* K7 */ be_nested_str_weak(fill_pixels), + /* K8 */ be_nested_str_weak(pixels), + /* K9 */ be_const_int(0), + /* K10 */ be_const_int(1), + /* K11 */ be_nested_str_weak(set_pixel_color), + /* K12 */ be_nested_str_weak(get_param), + /* K13 */ be_nested_str_weak(animation), + /* K14 */ be_nested_str_weak(is_value_provider), + /* K15 */ be_nested_str_weak(0x_X2508x), + /* K16 */ be_nested_str_weak(CrenelPositionAnimation_X28color_X3D_X25s_X2C_X20pos_X3D_X25s_X2C_X20pulse_size_X3D_X25s_X2C_X20low_size_X3D_X25s_X2C_X20nb_pulse_X3D_X25s_X2C_X20priority_X3D_X25s_X2C_X20running_X3D_X25s_X29), + /* K17 */ be_nested_str_weak(priority), + /* K18 */ be_nested_str_weak(is_running), +}; + + +extern const bclass be_class_CrenelPositionAnimation; + +/******************************************************************** +** Solidified function: render +********************************************************************/ +be_local_closure(class_CrenelPositionAnimation_render, /* name */ + be_nested_proto( + 16, /* nstack */ + 4, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CrenelPositionAnimation, /* shared constants */ + be_str_weak(render), + &be_const_str_solidified, + ( &(const binstruction[64]) { /* code */ + 0x88100100, // 0000 GETMBR R4 R0 K0 + 0x88140101, // 0001 GETMBR R5 R0 K1 + 0x88180102, // 0002 GETMBR R6 R0 K2 + 0x881C0103, // 0003 GETMBR R7 R0 K3 + 0x88200104, // 0004 GETMBR R8 R0 K4 + 0x88240105, // 0005 GETMBR R9 R0 K5 + 0x60280009, // 0006 GETGBL R10 G9 + 0x002C0C07, // 0007 ADD R11 R6 R7 + 0x7C280200, // 0008 CALL R10 1 + 0x202C0906, // 0009 NE R11 R4 K6 + 0x782E0003, // 000A JMPF R11 #000F + 0x8C2C0307, // 000B GETMET R11 R1 K7 + 0x88340308, // 000C GETMBR R13 R1 K8 + 0x5C380800, // 000D MOVE R14 R4 + 0x7C2C0600, // 000E CALL R11 3 + 0x182C1509, // 000F LE R11 R10 K9 + 0x782E0000, // 0010 JMPF R11 #0012 + 0x5828000A, // 0011 LDCONST R10 K10 + 0x1C2C1109, // 0012 EQ R11 R8 K9 + 0x782E0001, // 0013 JMPF R11 #0016 + 0x502C0200, // 0014 LDBOOL R11 1 0 + 0x80041600, // 0015 RET 1 R11 + 0x142C1109, // 0016 LT R11 R8 K9 + 0x782E0006, // 0017 JMPF R11 #001F + 0x002C0A06, // 0018 ADD R11 R5 R6 + 0x042C170A, // 0019 SUB R11 R11 K10 + 0x102C160A, // 001A MOD R11 R11 R10 + 0x042C1606, // 001B SUB R11 R11 R6 + 0x002C170A, // 001C ADD R11 R11 K10 + 0x5C141600, // 001D MOVE R5 R11 + 0x70020007, // 001E JMP #0027 + 0x442C1400, // 001F NEG R11 R10 + 0x142C0A0B, // 0020 LT R11 R5 R11 + 0x782E0004, // 0021 JMPF R11 #0027 + 0x202C1109, // 0022 NE R11 R8 K9 + 0x782E0002, // 0023 JMPF R11 #0027 + 0x00140A0A, // 0024 ADD R5 R5 R10 + 0x0420110A, // 0025 SUB R8 R8 K10 + 0x7001FFF7, // 0026 JMP #001F + 0x142C0A03, // 0027 LT R11 R5 R3 + 0x782E0014, // 0028 JMPF R11 #003E + 0x202C1109, // 0029 NE R11 R8 K9 + 0x782E0012, // 002A JMPF R11 #003E + 0x582C0009, // 002B LDCONST R11 K9 + 0x14300B09, // 002C LT R12 R5 K9 + 0x78320001, // 002D JMPF R12 #0030 + 0x44300A00, // 002E NEG R12 R5 + 0x5C2C1800, // 002F MOVE R11 R12 + 0x14301606, // 0030 LT R12 R11 R6 + 0x78320008, // 0031 JMPF R12 #003B + 0x00300A0B, // 0032 ADD R12 R5 R11 + 0x14301803, // 0033 LT R12 R12 R3 + 0x78320005, // 0034 JMPF R12 #003B + 0x8C30030B, // 0035 GETMET R12 R1 K11 + 0x00380A0B, // 0036 ADD R14 R5 R11 + 0x5C3C1200, // 0037 MOVE R15 R9 + 0x7C300600, // 0038 CALL R12 3 + 0x002C170A, // 0039 ADD R11 R11 K10 + 0x7001FFF4, // 003A JMP #0030 + 0x00140A0A, // 003B ADD R5 R5 R10 + 0x0420110A, // 003C SUB R8 R8 K10 + 0x7001FFE8, // 003D JMP #0027 + 0x502C0200, // 003E LDBOOL R11 1 0 + 0x80041600, // 003F RET 1 R11 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: tostring +********************************************************************/ +be_local_closure(class_CrenelPositionAnimation_tostring, /* name */ + be_nested_proto( + 12, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_CrenelPositionAnimation, /* shared constants */ + be_str_weak(tostring), + &be_const_str_solidified, + ( &(const binstruction[30]) { /* code */ + 0x4C040000, // 0000 LDNIL R1 + 0x8C08010C, // 0001 GETMET R2 R0 K12 + 0x58100005, // 0002 LDCONST R4 K5 + 0x7C080400, // 0003 CALL R2 2 + 0xB80E1A00, // 0004 GETNGBL R3 K13 + 0x8C0C070E, // 0005 GETMET R3 R3 K14 + 0x5C140400, // 0006 MOVE R5 R2 + 0x7C0C0400, // 0007 CALL R3 2 + 0x780E0004, // 0008 JMPF R3 #000E + 0x600C0008, // 0009 GETGBL R3 G8 + 0x5C100400, // 000A MOVE R4 R2 + 0x7C0C0200, // 000B CALL R3 1 + 0x5C040600, // 000C MOVE R1 R3 + 0x70020004, // 000D JMP #0013 + 0x600C0018, // 000E GETGBL R3 G24 + 0x5810000F, // 000F LDCONST R4 K15 + 0x88140105, // 0010 GETMBR R5 R0 K5 + 0x7C0C0400, // 0011 CALL R3 2 + 0x5C040600, // 0012 MOVE R1 R3 + 0x600C0018, // 0013 GETGBL R3 G24 + 0x58100010, // 0014 LDCONST R4 K16 + 0x5C140200, // 0015 MOVE R5 R1 + 0x88180101, // 0016 GETMBR R6 R0 K1 + 0x881C0102, // 0017 GETMBR R7 R0 K2 + 0x88200103, // 0018 GETMBR R8 R0 K3 + 0x88240104, // 0019 GETMBR R9 R0 K4 + 0x88280111, // 001A GETMBR R10 R0 K17 + 0x882C0112, // 001B GETMBR R11 R0 K18 + 0x7C0C1000, // 001C CALL R3 8 + 0x80040600, // 001D RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: CrenelPositionAnimation +********************************************************************/ +extern const bclass be_class_Animation; +be_local_class(CrenelPositionAnimation, + 0, + &be_class_Animation, + be_nested_map(3, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(PARAMS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { + be_const_map( * be_nested_map(5, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(nb_pulse, -1), be_const_bytes_instance(0400FF) }, + { be_const_key_weak(low_size, 4), be_const_bytes_instance(0500000003) }, + { be_const_key_weak(pos, 1), be_const_bytes_instance(040000) }, + { be_const_key_weak(pulse_size, -1), be_const_bytes_instance(0500000001) }, + { be_const_key_weak(back_color, -1), be_const_bytes_instance(0402000000FF) }, + })) ) } )) }, + { be_const_key_weak(render, 2), be_const_closure(class_CrenelPositionAnimation_render_closure) }, + { be_const_key_weak(tostring, -1), be_const_closure(class_CrenelPositionAnimation_tostring_closure) }, + })), + be_str_weak(CrenelPositionAnimation) +); // compact class 'OscillatorValueProvider' ktab size: 30, total: 37 (saved 56 bytes) static const bvalue be_ktab_class_OscillatorValueProvider[30] = { /* K0 */ be_nested_str_weak(duration), @@ -11430,491 +12204,6 @@ be_local_class(OscillatorValueProvider, })), be_str_weak(OscillatorValueProvider) ); -// compact class 'CompositeColorProvider' ktab size: 16, total: 28 (saved 96 bytes) -static const bvalue be_ktab_class_CompositeColorProvider[16] = { - /* K0 */ be_nested_str_weak(providers), - /* K1 */ be_nested_str_weak(push), - /* K2 */ be_const_int(0), - /* K3 */ be_const_int(1), - /* K4 */ be_nested_str_weak(get_color_for_value), - /* K5 */ be_nested_str_weak(brightness), - /* K6 */ be_nested_str_weak(apply_brightness), - /* K7 */ be_nested_str_weak(_blend_colors), - /* K8 */ be_nested_str_weak(produce_value), - /* K9 */ be_nested_str_weak(CompositeColorProvider_X28providers_X3D_X25s_X2C_X20blend_mode_X3D_X25s_X29), - /* K10 */ be_nested_str_weak(blend_mode), - /* K11 */ be_const_real_hex(0x437F0000), - /* K12 */ be_const_int(2), - /* K13 */ be_nested_str_weak(tasmota), - /* K14 */ be_nested_str_weak(scale_uint), - /* K15 */ be_nested_str_weak(init), -}; - - -extern const bclass be_class_CompositeColorProvider; - -/******************************************************************** -** Solidified function: add_provider -********************************************************************/ -be_local_closure(class_CompositeColorProvider_add_provider, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CompositeColorProvider, /* shared constants */ - be_str_weak(add_provider), - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x8C080501, // 0001 GETMET R2 R2 K1 - 0x5C100200, // 0002 MOVE R4 R1 - 0x7C080400, // 0003 CALL R2 2 - 0x80040000, // 0004 RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_color_for_value -********************************************************************/ -be_local_closure(class_CompositeColorProvider_get_color_for_value, /* name */ - be_nested_proto( - 10, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CompositeColorProvider, /* shared constants */ - be_str_weak(get_color_for_value), - &be_const_str_solidified, - ( &(const binstruction[63]) { /* code */ - 0x600C000C, // 0000 GETGBL R3 G12 - 0x88100100, // 0001 GETMBR R4 R0 K0 - 0x7C0C0200, // 0002 CALL R3 1 - 0x1C0C0702, // 0003 EQ R3 R3 K2 - 0x780E0001, // 0004 JMPF R3 #0007 - 0x540DFFFE, // 0005 LDINT R3 -1 - 0x80040600, // 0006 RET 1 R3 - 0x600C000C, // 0007 GETGBL R3 G12 - 0x88100100, // 0008 GETMBR R4 R0 K0 - 0x7C0C0200, // 0009 CALL R3 1 - 0x1C0C0703, // 000A EQ R3 R3 K3 - 0x780E000F, // 000B JMPF R3 #001C - 0x880C0100, // 000C GETMBR R3 R0 K0 - 0x940C0702, // 000D GETIDX R3 R3 K2 - 0x8C0C0704, // 000E GETMET R3 R3 K4 - 0x5C140200, // 000F MOVE R5 R1 - 0x5C180400, // 0010 MOVE R6 R2 - 0x7C0C0600, // 0011 CALL R3 3 - 0x88100105, // 0012 GETMBR R4 R0 K5 - 0x541600FE, // 0013 LDINT R5 255 - 0x20140805, // 0014 NE R5 R4 R5 - 0x78160004, // 0015 JMPF R5 #001B - 0x8C140106, // 0016 GETMET R5 R0 K6 - 0x5C1C0600, // 0017 MOVE R7 R3 - 0x5C200800, // 0018 MOVE R8 R4 - 0x7C140600, // 0019 CALL R5 3 - 0x80040A00, // 001A RET 1 R5 - 0x80040600, // 001B RET 1 R3 - 0x880C0100, // 001C GETMBR R3 R0 K0 - 0x940C0702, // 001D GETIDX R3 R3 K2 - 0x8C0C0704, // 001E GETMET R3 R3 K4 - 0x5C140200, // 001F MOVE R5 R1 - 0x5C180400, // 0020 MOVE R6 R2 - 0x7C0C0600, // 0021 CALL R3 3 - 0x58100003, // 0022 LDCONST R4 K3 - 0x6014000C, // 0023 GETGBL R5 G12 - 0x88180100, // 0024 GETMBR R6 R0 K0 - 0x7C140200, // 0025 CALL R5 1 - 0x14140805, // 0026 LT R5 R4 R5 - 0x7816000C, // 0027 JMPF R5 #0035 - 0x88140100, // 0028 GETMBR R5 R0 K0 - 0x94140A04, // 0029 GETIDX R5 R5 R4 - 0x8C140B04, // 002A GETMET R5 R5 K4 - 0x5C1C0200, // 002B MOVE R7 R1 - 0x5C200400, // 002C MOVE R8 R2 - 0x7C140600, // 002D CALL R5 3 - 0x8C180107, // 002E GETMET R6 R0 K7 - 0x5C200600, // 002F MOVE R8 R3 - 0x5C240A00, // 0030 MOVE R9 R5 - 0x7C180600, // 0031 CALL R6 3 - 0x5C0C0C00, // 0032 MOVE R3 R6 - 0x00100903, // 0033 ADD R4 R4 K3 - 0x7001FFED, // 0034 JMP #0023 - 0x88140105, // 0035 GETMBR R5 R0 K5 - 0x541A00FE, // 0036 LDINT R6 255 - 0x20180A06, // 0037 NE R6 R5 R6 - 0x781A0004, // 0038 JMPF R6 #003E - 0x8C180106, // 0039 GETMET R6 R0 K6 - 0x5C200600, // 003A MOVE R8 R3 - 0x5C240A00, // 003B MOVE R9 R5 - 0x7C180600, // 003C CALL R6 3 - 0x80040C00, // 003D RET 1 R6 - 0x80040600, // 003E RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: produce_value -********************************************************************/ -be_local_closure(class_CompositeColorProvider_produce_value, /* name */ - be_nested_proto( - 10, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CompositeColorProvider, /* shared constants */ - be_str_weak(produce_value), - &be_const_str_solidified, - ( &(const binstruction[63]) { /* code */ - 0x600C000C, // 0000 GETGBL R3 G12 - 0x88100100, // 0001 GETMBR R4 R0 K0 - 0x7C0C0200, // 0002 CALL R3 1 - 0x1C0C0702, // 0003 EQ R3 R3 K2 - 0x780E0001, // 0004 JMPF R3 #0007 - 0x540DFFFE, // 0005 LDINT R3 -1 - 0x80040600, // 0006 RET 1 R3 - 0x600C000C, // 0007 GETGBL R3 G12 - 0x88100100, // 0008 GETMBR R4 R0 K0 - 0x7C0C0200, // 0009 CALL R3 1 - 0x1C0C0703, // 000A EQ R3 R3 K3 - 0x780E000F, // 000B JMPF R3 #001C - 0x880C0100, // 000C GETMBR R3 R0 K0 - 0x940C0702, // 000D GETIDX R3 R3 K2 - 0x8C0C0708, // 000E GETMET R3 R3 K8 - 0x5C140200, // 000F MOVE R5 R1 - 0x5C180400, // 0010 MOVE R6 R2 - 0x7C0C0600, // 0011 CALL R3 3 - 0x88100105, // 0012 GETMBR R4 R0 K5 - 0x541600FE, // 0013 LDINT R5 255 - 0x20140805, // 0014 NE R5 R4 R5 - 0x78160004, // 0015 JMPF R5 #001B - 0x8C140106, // 0016 GETMET R5 R0 K6 - 0x5C1C0600, // 0017 MOVE R7 R3 - 0x5C200800, // 0018 MOVE R8 R4 - 0x7C140600, // 0019 CALL R5 3 - 0x80040A00, // 001A RET 1 R5 - 0x80040600, // 001B RET 1 R3 - 0x880C0100, // 001C GETMBR R3 R0 K0 - 0x940C0702, // 001D GETIDX R3 R3 K2 - 0x8C0C0708, // 001E GETMET R3 R3 K8 - 0x5C140200, // 001F MOVE R5 R1 - 0x5C180400, // 0020 MOVE R6 R2 - 0x7C0C0600, // 0021 CALL R3 3 - 0x58100003, // 0022 LDCONST R4 K3 - 0x6014000C, // 0023 GETGBL R5 G12 - 0x88180100, // 0024 GETMBR R6 R0 K0 - 0x7C140200, // 0025 CALL R5 1 - 0x14140805, // 0026 LT R5 R4 R5 - 0x7816000C, // 0027 JMPF R5 #0035 - 0x88140100, // 0028 GETMBR R5 R0 K0 - 0x94140A04, // 0029 GETIDX R5 R5 R4 - 0x8C140B08, // 002A GETMET R5 R5 K8 - 0x5C1C0200, // 002B MOVE R7 R1 - 0x5C200400, // 002C MOVE R8 R2 - 0x7C140600, // 002D CALL R5 3 - 0x8C180107, // 002E GETMET R6 R0 K7 - 0x5C200600, // 002F MOVE R8 R3 - 0x5C240A00, // 0030 MOVE R9 R5 - 0x7C180600, // 0031 CALL R6 3 - 0x5C0C0C00, // 0032 MOVE R3 R6 - 0x00100903, // 0033 ADD R4 R4 K3 - 0x7001FFED, // 0034 JMP #0023 - 0x88140105, // 0035 GETMBR R5 R0 K5 - 0x541A00FE, // 0036 LDINT R6 255 - 0x20180A06, // 0037 NE R6 R5 R6 - 0x781A0004, // 0038 JMPF R6 #003E - 0x8C180106, // 0039 GETMET R6 R0 K6 - 0x5C200600, // 003A MOVE R8 R3 - 0x5C240A00, // 003B MOVE R9 R5 - 0x7C180600, // 003C CALL R6 3 - 0x80040C00, // 003D RET 1 R6 - 0x80040600, // 003E RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: tostring -********************************************************************/ -be_local_closure(class_CompositeColorProvider_tostring, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CompositeColorProvider, /* shared constants */ - be_str_weak(tostring), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x60040018, // 0000 GETGBL R1 G24 - 0x58080009, // 0001 LDCONST R2 K9 - 0x600C000C, // 0002 GETGBL R3 G12 - 0x88100100, // 0003 GETMBR R4 R0 K0 - 0x7C0C0200, // 0004 CALL R3 1 - 0x8810010A, // 0005 GETMBR R4 R0 K10 - 0x7C040600, // 0006 CALL R1 3 - 0x80040200, // 0007 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: _blend_colors -********************************************************************/ -be_local_closure(class_CompositeColorProvider__blend_colors, /* name */ - be_nested_proto( - 23, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CompositeColorProvider, /* shared constants */ - be_str_weak(_blend_colors), - &be_const_str_solidified, - ( &(const binstruction[151]) { /* code */ - 0x880C010A, // 0000 GETMBR R3 R0 K10 - 0x54120017, // 0001 LDINT R4 24 - 0x3C100204, // 0002 SHR R4 R1 R4 - 0x541600FE, // 0003 LDINT R5 255 - 0x2C100805, // 0004 AND R4 R4 R5 - 0x5416000F, // 0005 LDINT R5 16 - 0x3C140205, // 0006 SHR R5 R1 R5 - 0x541A00FE, // 0007 LDINT R6 255 - 0x2C140A06, // 0008 AND R5 R5 R6 - 0x541A0007, // 0009 LDINT R6 8 - 0x3C180206, // 000A SHR R6 R1 R6 - 0x541E00FE, // 000B LDINT R7 255 - 0x2C180C07, // 000C AND R6 R6 R7 - 0x541E00FE, // 000D LDINT R7 255 - 0x2C1C0207, // 000E AND R7 R1 R7 - 0x54220017, // 000F LDINT R8 24 - 0x3C200408, // 0010 SHR R8 R2 R8 - 0x542600FE, // 0011 LDINT R9 255 - 0x2C201009, // 0012 AND R8 R8 R9 - 0x5426000F, // 0013 LDINT R9 16 - 0x3C240409, // 0014 SHR R9 R2 R9 - 0x542A00FE, // 0015 LDINT R10 255 - 0x2C24120A, // 0016 AND R9 R9 R10 - 0x542A0007, // 0017 LDINT R10 8 - 0x3C28040A, // 0018 SHR R10 R2 R10 - 0x542E00FE, // 0019 LDINT R11 255 - 0x2C28140B, // 001A AND R10 R10 R11 - 0x542E00FE, // 001B LDINT R11 255 - 0x2C2C040B, // 001C AND R11 R2 R11 - 0x4C300000, // 001D LDNIL R12 - 0x4C340000, // 001E LDNIL R13 - 0x4C380000, // 001F LDNIL R14 - 0x4C3C0000, // 0020 LDNIL R15 - 0x1C400702, // 0021 EQ R16 R3 K2 - 0x7842001C, // 0022 JMPF R16 #0040 - 0x0C40110B, // 0023 DIV R16 R8 K11 - 0x60440009, // 0024 GETGBL R17 G9 - 0x044A0610, // 0025 SUB R18 K3 R16 - 0x08480E12, // 0026 MUL R18 R7 R18 - 0x084C1610, // 0027 MUL R19 R11 R16 - 0x00482413, // 0028 ADD R18 R18 R19 - 0x7C440200, // 0029 CALL R17 1 - 0x5C342200, // 002A MOVE R13 R17 - 0x60440009, // 002B GETGBL R17 G9 - 0x044A0610, // 002C SUB R18 K3 R16 - 0x08480C12, // 002D MUL R18 R6 R18 - 0x084C1410, // 002E MUL R19 R10 R16 - 0x00482413, // 002F ADD R18 R18 R19 - 0x7C440200, // 0030 CALL R17 1 - 0x5C382200, // 0031 MOVE R14 R17 - 0x60440009, // 0032 GETGBL R17 G9 - 0x044A0610, // 0033 SUB R18 K3 R16 - 0x08480A12, // 0034 MUL R18 R5 R18 - 0x084C1210, // 0035 MUL R19 R9 R16 - 0x00482413, // 0036 ADD R18 R18 R19 - 0x7C440200, // 0037 CALL R17 1 - 0x5C3C2200, // 0038 MOVE R15 R17 - 0x24440808, // 0039 GT R17 R4 R8 - 0x78460001, // 003A JMPF R17 #003D - 0x5C440800, // 003B MOVE R17 R4 - 0x70020000, // 003C JMP #003E - 0x5C441000, // 003D MOVE R17 R8 - 0x5C302200, // 003E MOVE R12 R17 - 0x7002004C, // 003F JMP #008D - 0x1C400703, // 0040 EQ R16 R3 K3 - 0x78420021, // 0041 JMPF R16 #0064 - 0x00400E0B, // 0042 ADD R16 R7 R11 - 0x5C342000, // 0043 MOVE R13 R16 - 0x00400C0A, // 0044 ADD R16 R6 R10 - 0x5C382000, // 0045 MOVE R14 R16 - 0x00400A09, // 0046 ADD R16 R5 R9 - 0x5C3C2000, // 0047 MOVE R15 R16 - 0x24400808, // 0048 GT R16 R4 R8 - 0x78420001, // 0049 JMPF R16 #004C - 0x5C400800, // 004A MOVE R16 R4 - 0x70020000, // 004B JMP #004D - 0x5C401000, // 004C MOVE R16 R8 - 0x5C302000, // 004D MOVE R12 R16 - 0x544200FE, // 004E LDINT R16 255 - 0x24401A10, // 004F GT R16 R13 R16 - 0x78420001, // 0050 JMPF R16 #0053 - 0x544200FE, // 0051 LDINT R16 255 - 0x70020000, // 0052 JMP #0054 - 0x5C401A00, // 0053 MOVE R16 R13 - 0x5C342000, // 0054 MOVE R13 R16 - 0x544200FE, // 0055 LDINT R16 255 - 0x24401C10, // 0056 GT R16 R14 R16 - 0x78420001, // 0057 JMPF R16 #005A - 0x544200FE, // 0058 LDINT R16 255 - 0x70020000, // 0059 JMP #005B - 0x5C401C00, // 005A MOVE R16 R14 - 0x5C382000, // 005B MOVE R14 R16 - 0x544200FE, // 005C LDINT R16 255 - 0x24401E10, // 005D GT R16 R15 R16 - 0x78420001, // 005E JMPF R16 #0061 - 0x544200FE, // 005F LDINT R16 255 - 0x70020000, // 0060 JMP #0062 - 0x5C401E00, // 0061 MOVE R16 R15 - 0x5C3C2000, // 0062 MOVE R15 R16 - 0x70020028, // 0063 JMP #008D - 0x1C40070C, // 0064 EQ R16 R3 K12 - 0x78420026, // 0065 JMPF R16 #008D - 0xB8421A00, // 0066 GETNGBL R16 K13 - 0x8C40210E, // 0067 GETMET R16 R16 K14 - 0x08480E0B, // 0068 MUL R18 R7 R11 - 0x584C0002, // 0069 LDCONST R19 K2 - 0x545200FE, // 006A LDINT R20 255 - 0x545600FE, // 006B LDINT R21 255 - 0x08502815, // 006C MUL R20 R20 R21 - 0x58540002, // 006D LDCONST R21 K2 - 0x545A00FE, // 006E LDINT R22 255 - 0x7C400C00, // 006F CALL R16 6 - 0x5C342000, // 0070 MOVE R13 R16 - 0xB8421A00, // 0071 GETNGBL R16 K13 - 0x8C40210E, // 0072 GETMET R16 R16 K14 - 0x08480C0A, // 0073 MUL R18 R6 R10 - 0x584C0002, // 0074 LDCONST R19 K2 - 0x545200FE, // 0075 LDINT R20 255 - 0x545600FE, // 0076 LDINT R21 255 - 0x08502815, // 0077 MUL R20 R20 R21 - 0x58540002, // 0078 LDCONST R21 K2 - 0x545A00FE, // 0079 LDINT R22 255 - 0x7C400C00, // 007A CALL R16 6 - 0x5C382000, // 007B MOVE R14 R16 - 0xB8421A00, // 007C GETNGBL R16 K13 - 0x8C40210E, // 007D GETMET R16 R16 K14 - 0x08480A09, // 007E MUL R18 R5 R9 - 0x584C0002, // 007F LDCONST R19 K2 - 0x545200FE, // 0080 LDINT R20 255 - 0x545600FE, // 0081 LDINT R21 255 - 0x08502815, // 0082 MUL R20 R20 R21 - 0x58540002, // 0083 LDCONST R21 K2 - 0x545A00FE, // 0084 LDINT R22 255 - 0x7C400C00, // 0085 CALL R16 6 - 0x5C3C2000, // 0086 MOVE R15 R16 - 0x24400808, // 0087 GT R16 R4 R8 - 0x78420001, // 0088 JMPF R16 #008B - 0x5C400800, // 0089 MOVE R16 R4 - 0x70020000, // 008A JMP #008C - 0x5C401000, // 008B MOVE R16 R8 - 0x5C302000, // 008C MOVE R12 R16 - 0x54420017, // 008D LDINT R16 24 - 0x38401810, // 008E SHL R16 R12 R16 - 0x5446000F, // 008F LDINT R17 16 - 0x38441E11, // 0090 SHL R17 R15 R17 - 0x30402011, // 0091 OR R16 R16 R17 - 0x54460007, // 0092 LDINT R17 8 - 0x38441C11, // 0093 SHL R17 R14 R17 - 0x30402011, // 0094 OR R16 R16 R17 - 0x3040200D, // 0095 OR R16 R16 R13 - 0x80042000, // 0096 RET 1 R16 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(class_CompositeColorProvider_init, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_CompositeColorProvider, /* shared constants */ - be_str_weak(init), - &be_const_str_solidified, - ( &(const binstruction[10]) { /* code */ - 0x60080003, // 0000 GETGBL R2 G3 - 0x5C0C0000, // 0001 MOVE R3 R0 - 0x7C080200, // 0002 CALL R2 1 - 0x8C08050F, // 0003 GETMET R2 R2 K15 - 0x5C100200, // 0004 MOVE R4 R1 - 0x7C080400, // 0005 CALL R2 2 - 0x60080012, // 0006 GETGBL R2 G18 - 0x7C080000, // 0007 CALL R2 0 - 0x90020002, // 0008 SETMBR R0 K0 R2 - 0x80000000, // 0009 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: CompositeColorProvider -********************************************************************/ -extern const bclass be_class_ColorProvider; -be_local_class(CompositeColorProvider, - 1, - &be_class_ColorProvider, - be_nested_map(8, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(add_provider, -1), be_const_closure(class_CompositeColorProvider_add_provider_closure) }, - { be_const_key_weak(get_color_for_value, 7), be_const_closure(class_CompositeColorProvider_get_color_for_value_closure) }, - { be_const_key_weak(init, -1), be_const_closure(class_CompositeColorProvider_init_closure) }, - { be_const_key_weak(PARAMS, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { - be_const_map( * be_nested_map(1, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(blend_mode, -1), be_const_bytes_instance(14000003000000010002) }, - })) ) } )) }, - { be_const_key_weak(tostring, -1), be_const_closure(class_CompositeColorProvider_tostring_closure) }, - { be_const_key_weak(providers, 4), be_const_var(0) }, - { be_const_key_weak(_blend_colors, -1), be_const_closure(class_CompositeColorProvider__blend_colors_closure) }, - { be_const_key_weak(produce_value, -1), be_const_closure(class_CompositeColorProvider_produce_value_closure) }, - })), - be_str_weak(CompositeColorProvider) -); /******************************************************************** ** Solidified function: wave_single_sine @@ -12094,7 +12383,7 @@ be_local_class(ClosureValueProvider, })), be_str_weak(ClosureValueProvider) ); -// compact class 'Animation' ktab size: 26, total: 37 (saved 88 bytes) +// compact class 'Animation' ktab size: 26, total: 34 (saved 64 bytes) static const bvalue be_ktab_class_Animation[26] = { /* K0 */ be_nested_str_weak(get_param_value), /* K1 */ be_nested_str_weak(color), @@ -12120,7 +12409,7 @@ static const bvalue be_ktab_class_Animation[26] = { /* K21 */ be_nested_str_weak(opacity), /* K22 */ be_nested_str_weak(int), /* K23 */ be_nested_str_weak(_apply_opacity), - /* K24 */ be_nested_str_weak(Animation_X28priority_X3D_X25s_X2C_X20duration_X3D_X25s_X2C_X20loop_X3D_X25s_X2C_X20running_X3D_X25s_X29), + /* K24 */ be_nested_str_weak(_X25s_X28priority_X3D_X25s_X29), /* K25 */ be_nested_str_weak(priority), }; @@ -12405,7 +12694,7 @@ be_local_closure(class_Animation_post_render, /* name */ ********************************************************************/ be_local_closure(class_Animation_tostring, /* name */ be_nested_proto( - 7, /* nstack */ + 5, /* nstack */ 1, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -12419,11 +12708,11 @@ be_local_closure(class_Animation_tostring, /* name */ ( &(const binstruction[ 8]) { /* code */ 0x60040018, // 0000 GETGBL R1 G24 0x58080018, // 0001 LDCONST R2 K24 - 0x880C0119, // 0002 GETMBR R3 R0 K25 - 0x8810010E, // 0003 GETMBR R4 R0 K14 - 0x88140110, // 0004 GETMBR R5 R0 K16 - 0x88180107, // 0005 GETMBR R6 R0 K7 - 0x7C040A00, // 0006 CALL R1 5 + 0x600C0005, // 0002 GETGBL R3 G5 + 0x5C100000, // 0003 MOVE R4 R0 + 0x7C0C0200, // 0004 CALL R3 1 + 0x88100119, // 0005 GETMBR R4 R0 K25 + 0x7C040600, // 0006 CALL R1 3 0x80040200, // 0007 RET 1 R1 }) ) @@ -12681,6 +12970,42 @@ be_local_closure(animation_resolve, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: bounce +********************************************************************/ +be_local_closure(bounce, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(oscillator_value), + /* K2 */ be_nested_str_weak(form), + /* K3 */ be_nested_str_weak(BOUNCE), + }), + be_str_weak(bounce), + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0xB80A0000, // 0004 GETNGBL R2 K0 + 0x88080503, // 0005 GETMBR R2 R2 K3 + 0x90060402, // 0006 SETMBR R1 K2 R2 + 0x80040200, // 0007 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: sawtooth ********************************************************************/ @@ -12716,44 +13041,288 @@ be_local_closure(sawtooth, /* name */ ); /*******************************************************************/ +// compact class 'BreatheColorProvider' ktab size: 18, total: 29 (saved 88 bytes) +static const bvalue be_ktab_class_BreatheColorProvider[18] = { + /* K0 */ be_nested_str_weak(BreatheColorProvider_X28base_color_X3D0x_X2508x_X2C_X20min_brightness_X3D_X25s_X2C_X20max_brightness_X3D_X25s_X2C_X20duration_X3D_X25s_X2C_X20curve_factor_X3D_X25s_X29), + /* K1 */ be_nested_str_weak(base_color), + /* K2 */ be_nested_str_weak(min_brightness), + /* K3 */ be_nested_str_weak(max_brightness), + /* K4 */ be_nested_str_weak(duration), + /* K5 */ be_nested_str_weak(curve_factor), + /* K6 */ be_const_int(1), + /* K7 */ be_nested_str_weak(form), + /* K8 */ be_nested_str_weak(animation), + /* K9 */ be_nested_str_weak(COSINE), + /* K10 */ be_nested_str_weak(on_param_changed), + /* K11 */ be_nested_str_weak(produce_value), + /* K12 */ be_nested_str_weak(tasmota), + /* K13 */ be_nested_str_weak(scale_uint), + /* K14 */ be_const_int(0), + /* K15 */ be_nested_str_weak(init), + /* K16 */ be_nested_str_weak(min_value), + /* K17 */ be_nested_str_weak(max_value), +}; + + +extern const bclass be_class_BreatheColorProvider; /******************************************************************** -** Solidified function: rich_palette_rainbow +** Solidified function: tostring ********************************************************************/ -be_local_closure(rich_palette_rainbow, /* name */ +be_local_closure(class_BreatheColorProvider_tostring, /* name */ be_nested_proto( - 5, /* nstack */ + 8, /* nstack */ 1, /* argc */ - 0, /* varg */ + 10, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 4]) { /* constants */ - /* K0 */ be_nested_str_weak(00FF000024FFA50049FFFF006E00FF00920000FFB74B0082DBEE82EEFFFF0000), - /* K1 */ be_nested_str_weak(animation), - /* K2 */ be_nested_str_weak(rich_palette), - /* K3 */ be_nested_str_weak(palette), - }), - be_str_weak(rich_palette_rainbow), + &be_ktab_class_BreatheColorProvider, /* shared constants */ + be_str_weak(tostring), &be_const_str_solidified, ( &(const binstruction[ 9]) { /* code */ - 0x60040015, // 0000 GETGBL R1 G21 + 0x60040018, // 0000 GETGBL R1 G24 0x58080000, // 0001 LDCONST R2 K0 - 0x7C040200, // 0002 CALL R1 1 - 0xB80A0200, // 0003 GETNGBL R2 K1 - 0x8C080502, // 0004 GETMET R2 R2 K2 - 0x5C100000, // 0005 MOVE R4 R0 - 0x7C080400, // 0006 CALL R2 2 - 0x900A0601, // 0007 SETMBR R2 K3 R1 - 0x80040400, // 0008 RET 1 R2 + 0x880C0101, // 0002 GETMBR R3 R0 K1 + 0x88100102, // 0003 GETMBR R4 R0 K2 + 0x88140103, // 0004 GETMBR R5 R0 K3 + 0x88180104, // 0005 GETMBR R6 R0 K4 + 0x881C0105, // 0006 GETMBR R7 R0 K5 + 0x7C040C00, // 0007 CALL R1 6 + 0x80040200, // 0008 RET 1 R1 }) ) ); /*******************************************************************/ +/******************************************************************** +** Solidified function: on_param_changed +********************************************************************/ +be_local_closure(class_BreatheColorProvider_on_param_changed, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_BreatheColorProvider, /* shared constants */ + be_str_weak(on_param_changed), + &be_const_str_solidified, + ( &(const binstruction[19]) { /* code */ + 0x1C0C0305, // 0000 EQ R3 R1 K5 + 0x780E0008, // 0001 JMPF R3 #000B + 0x1C0C0506, // 0002 EQ R3 R2 K6 + 0x780E0003, // 0003 JMPF R3 #0008 + 0xB80E1000, // 0004 GETNGBL R3 K8 + 0x880C0709, // 0005 GETMBR R3 R3 K9 + 0x90020E03, // 0006 SETMBR R0 K7 R3 + 0x70020002, // 0007 JMP #000B + 0xB80E1000, // 0008 GETNGBL R3 K8 + 0x880C0709, // 0009 GETMBR R3 R3 K9 + 0x90020E03, // 000A SETMBR R0 K7 R3 + 0x600C0003, // 000B GETGBL R3 G3 + 0x5C100000, // 000C MOVE R4 R0 + 0x7C0C0200, // 000D CALL R3 1 + 0x8C0C070A, // 000E GETMET R3 R3 K10 + 0x5C140200, // 000F MOVE R5 R1 + 0x5C180400, // 0010 MOVE R6 R2 + 0x7C0C0600, // 0011 CALL R3 3 + 0x80000000, // 0012 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: produce_value +********************************************************************/ +be_local_closure(class_BreatheColorProvider_produce_value, /* name */ + be_nested_proto( + 19, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_BreatheColorProvider, /* shared constants */ + be_str_weak(produce_value), + &be_const_str_solidified, + ( &(const binstruction[97]) { /* code */ + 0x600C0003, // 0000 GETGBL R3 G3 + 0x5C100000, // 0001 MOVE R4 R0 + 0x7C0C0200, // 0002 CALL R3 1 + 0x8C0C070B, // 0003 GETMET R3 R3 K11 + 0x5C140200, // 0004 MOVE R5 R1 + 0x5C180400, // 0005 MOVE R6 R2 + 0x7C0C0600, // 0006 CALL R3 3 + 0x88100105, // 0007 GETMBR R4 R0 K5 + 0x5C140600, // 0008 MOVE R5 R3 + 0x24180906, // 0009 GT R6 R4 K6 + 0x781A0019, // 000A JMPF R6 #0025 + 0xB81A1800, // 000B GETNGBL R6 K12 + 0x8C180D0D, // 000C GETMET R6 R6 K13 + 0x5C200600, // 000D MOVE R8 R3 + 0x5824000E, // 000E LDCONST R9 K14 + 0x542A00FE, // 000F LDINT R10 255 + 0x582C000E, // 0010 LDCONST R11 K14 + 0x54321FFF, // 0011 LDINT R12 8192 + 0x7C180C00, // 0012 CALL R6 6 + 0x5C1C0800, // 0013 MOVE R7 R4 + 0x24200F06, // 0014 GT R8 R7 K6 + 0x78220005, // 0015 JMPF R8 #001C + 0x08200C06, // 0016 MUL R8 R6 R6 + 0x54261FFF, // 0017 LDINT R9 8192 + 0x0C201009, // 0018 DIV R8 R8 R9 + 0x5C181000, // 0019 MOVE R6 R8 + 0x041C0F06, // 001A SUB R7 R7 K6 + 0x7001FFF7, // 001B JMP #0014 + 0xB8221800, // 001C GETNGBL R8 K12 + 0x8C20110D, // 001D GETMET R8 R8 K13 + 0x5C280C00, // 001E MOVE R10 R6 + 0x582C000E, // 001F LDCONST R11 K14 + 0x54321FFF, // 0020 LDINT R12 8192 + 0x5834000E, // 0021 LDCONST R13 K14 + 0x543A00FE, // 0022 LDINT R14 255 + 0x7C200C00, // 0023 CALL R8 6 + 0x5C141000, // 0024 MOVE R5 R8 + 0xB81A1800, // 0025 GETNGBL R6 K12 + 0x8C180D0D, // 0026 GETMET R6 R6 K13 + 0x5C200A00, // 0027 MOVE R8 R5 + 0x5824000E, // 0028 LDCONST R9 K14 + 0x542A00FE, // 0029 LDINT R10 255 + 0x882C0102, // 002A GETMBR R11 R0 K2 + 0x88300103, // 002B GETMBR R12 R0 K3 + 0x7C180C00, // 002C CALL R6 6 + 0x881C0101, // 002D GETMBR R7 R0 K1 + 0x54220017, // 002E LDINT R8 24 + 0x3C200E08, // 002F SHR R8 R7 R8 + 0x542600FE, // 0030 LDINT R9 255 + 0x2C201009, // 0031 AND R8 R8 R9 + 0x5426000F, // 0032 LDINT R9 16 + 0x3C240E09, // 0033 SHR R9 R7 R9 + 0x542A00FE, // 0034 LDINT R10 255 + 0x2C24120A, // 0035 AND R9 R9 R10 + 0x542A0007, // 0036 LDINT R10 8 + 0x3C280E0A, // 0037 SHR R10 R7 R10 + 0x542E00FE, // 0038 LDINT R11 255 + 0x2C28140B, // 0039 AND R10 R10 R11 + 0x542E00FE, // 003A LDINT R11 255 + 0x2C2C0E0B, // 003B AND R11 R7 R11 + 0xB8321800, // 003C GETNGBL R12 K12 + 0x8C30190D, // 003D GETMET R12 R12 K13 + 0x5C381200, // 003E MOVE R14 R9 + 0x583C000E, // 003F LDCONST R15 K14 + 0x544200FE, // 0040 LDINT R16 255 + 0x5844000E, // 0041 LDCONST R17 K14 + 0x5C480C00, // 0042 MOVE R18 R6 + 0x7C300C00, // 0043 CALL R12 6 + 0x5C241800, // 0044 MOVE R9 R12 + 0xB8321800, // 0045 GETNGBL R12 K12 + 0x8C30190D, // 0046 GETMET R12 R12 K13 + 0x5C381400, // 0047 MOVE R14 R10 + 0x583C000E, // 0048 LDCONST R15 K14 + 0x544200FE, // 0049 LDINT R16 255 + 0x5844000E, // 004A LDCONST R17 K14 + 0x5C480C00, // 004B MOVE R18 R6 + 0x7C300C00, // 004C CALL R12 6 + 0x5C281800, // 004D MOVE R10 R12 + 0xB8321800, // 004E GETNGBL R12 K12 + 0x8C30190D, // 004F GETMET R12 R12 K13 + 0x5C381600, // 0050 MOVE R14 R11 + 0x583C000E, // 0051 LDCONST R15 K14 + 0x544200FE, // 0052 LDINT R16 255 + 0x5844000E, // 0053 LDCONST R17 K14 + 0x5C480C00, // 0054 MOVE R18 R6 + 0x7C300C00, // 0055 CALL R12 6 + 0x5C2C1800, // 0056 MOVE R11 R12 + 0x54320017, // 0057 LDINT R12 24 + 0x3830100C, // 0058 SHL R12 R8 R12 + 0x5436000F, // 0059 LDINT R13 16 + 0x3834120D, // 005A SHL R13 R9 R13 + 0x3030180D, // 005B OR R12 R12 R13 + 0x54360007, // 005C LDINT R13 8 + 0x3834140D, // 005D SHL R13 R10 R13 + 0x3030180D, // 005E OR R12 R12 R13 + 0x3030180B, // 005F OR R12 R12 R11 + 0x80041800, // 0060 RET 1 R12 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(class_BreatheColorProvider_init, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_BreatheColorProvider, /* shared constants */ + be_str_weak(init), + &be_const_str_solidified, + ( &(const binstruction[15]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C08050F, // 0003 GETMET R2 R2 K15 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0xB80A1000, // 0006 GETNGBL R2 K8 + 0x88080509, // 0007 GETMBR R2 R2 K9 + 0x90020E02, // 0008 SETMBR R0 K7 R2 + 0x9002210E, // 0009 SETMBR R0 K16 K14 + 0x540A00FE, // 000A LDINT R2 255 + 0x90022202, // 000B SETMBR R0 K17 R2 + 0x540A0BB7, // 000C LDINT R2 3000 + 0x90020802, // 000D SETMBR R0 K4 R2 + 0x80000000, // 000E RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: BreatheColorProvider +********************************************************************/ +extern const bclass be_class_OscillatorValueProvider; +be_local_class(BreatheColorProvider, + 0, + &be_class_OscillatorValueProvider, + be_nested_map(5, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(tostring, 1), be_const_closure(class_BreatheColorProvider_tostring_closure) }, + { be_const_key_weak(init, -1), be_const_closure(class_BreatheColorProvider_init_closure) }, + { be_const_key_weak(on_param_changed, -1), be_const_closure(class_BreatheColorProvider_on_param_changed_closure) }, + { be_const_key_weak(PARAMS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_map, { + be_const_map( * be_nested_map(4, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(base_color, -1), be_const_bytes_instance(0400FF) }, + { be_const_key_weak(max_brightness, -1), be_const_bytes_instance(07000001FF0001FF00) }, + { be_const_key_weak(curve_factor, -1), be_const_bytes_instance(07000100050002) }, + { be_const_key_weak(min_brightness, -1), be_const_bytes_instance(07000001FF000000) }, + })) ) } )) }, + { be_const_key_weak(produce_value, -1), be_const_closure(class_BreatheColorProvider_produce_value_closure) }, + })), + be_str_weak(BreatheColorProvider) +); + /******************************************************************** ** Solidified function: elastic ********************************************************************/ @@ -14380,38 +14949,6 @@ be_local_class(AnimationEngine, be_str_weak(AnimationEngine) ); -/******************************************************************** -** Solidified function: get_registered_events -********************************************************************/ -be_local_closure(get_registered_events, /* name */ - be_nested_proto( - 2, /* nstack */ - 0, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(event_manager), - /* K2 */ be_nested_str_weak(get_registered_events), - }), - be_str_weak(get_registered_events), - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0xB8020000, // 0000 GETNGBL R0 K0 - 0x88000101, // 0001 GETMBR R0 R0 K1 - 0x8C000102, // 0002 GETMET R0 R0 K2 - 0x7C000200, // 0003 CALL R0 1 - 0x80040000, // 0004 RET 1 R0 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified function: wave_rainbow_sine ********************************************************************/ @@ -14532,922 +15069,71 @@ be_local_closure(noise_rainbow, /* name */ ); /*******************************************************************/ -// compact class 'SequenceManager' ktab size: 46, total: 165 (saved 952 bytes) -static const bvalue be_ktab_class_SequenceManager[46] = { - /* K0 */ be_nested_str_weak(repeat_count), - /* K1 */ be_nested_str_weak(function), - /* K2 */ be_nested_str_weak(engine), - /* K3 */ be_nested_str_weak(steps), - /* K4 */ be_nested_str_weak(push), - /* K5 */ be_nested_str_weak(type), - /* K6 */ be_nested_str_weak(wait), - /* K7 */ be_nested_str_weak(duration), - /* K8 */ be_nested_str_weak(step_index), - /* K9 */ be_nested_str_weak(closure), - /* K10 */ be_const_int(1), - /* K11 */ be_nested_str_weak(execute_current_step), - /* K12 */ be_nested_str_weak(complete_iteration), - /* K13 */ be_nested_str_weak(play), - /* K14 */ be_nested_str_weak(animation), - /* K15 */ be_nested_str_weak(step_start_time), - /* K16 */ be_nested_str_weak(start), - /* K17 */ be_nested_str_weak(remove), - /* K18 */ be_nested_str_weak(subsequence), - /* K19 */ be_nested_str_weak(sequence_manager), - /* K20 */ be_nested_str_weak(stop), - /* K21 */ be_nested_str_weak(stop_iteration), - /* K22 */ be_const_int(0), - /* K23 */ be_nested_str_weak(init), - /* K24 */ be_nested_str_weak(active_sequence), - /* K25 */ be_nested_str_weak(sequence_state), - /* K26 */ be_nested_str_weak(current_iteration), - /* K27 */ be_nested_str_weak(is_repeat_sequence), - /* K28 */ be_nested_str_weak(is_running), - /* K29 */ be_nested_str_weak(update), - /* K30 */ be_nested_str_weak(advance_to_next_step), - /* K31 */ be_nested_str_weak(execute_closure_steps_batch), - /* K32 */ be_nested_str_weak(contains), - /* K33 */ be_nested_str_weak(update_current_iteration), - /* K34 */ be_nested_str_weak(get_resolved_repeat_count), - /* K35 */ be_nested_str_weak(pop_iteration_context), - /* K36 */ be_nested_str_weak(stop_all_subsequences), - /* K37 */ be_nested_str_weak(execute_closure_steps_batch_atomic), - /* K38 */ be_nested_str_weak(start_time), - /* K39 */ be_nested_str_weak(push_iteration_context), - /* K40 */ be_nested_str_weak(), - /* K41 */ be_nested_str_weak(_X2C_X20repeat_X3Dforever_X2C_X20iter_X3D_X25s), - /* K42 */ be_nested_str_weak(_X2C_X20repeat_X3D_X25s_X2C_X20iter_X3D_X25s), - /* K43 */ be_nested_str_weak(SequenceManager_X28steps_X3D_X25s_X2C_X20current_X3D_X25s_X2C_X20running_X3D_X25s_X25s_X29), - /* K44 */ be_nested_str_weak(get_animations), - /* K45 */ be_nested_str_weak(add), +extern const bclass be_class_AnimationMath; +// compact class 'AnimationMath' ktab size: 13, total: 31 (saved 144 bytes) +static const bvalue be_ktab_class_AnimationMath[13] = { + /* K0 */ be_const_class(be_class_AnimationMath), + /* K1 */ be_nested_str_weak(math), + /* K2 */ be_nested_str_weak(int), + /* K3 */ be_const_int(0), + /* K4 */ be_const_real_hex(0x437F0000), + /* K5 */ be_nested_str_weak(sqrt), + /* K6 */ be_nested_str_weak(max), + /* K7 */ be_nested_str_weak(round), + /* K8 */ be_nested_str_weak(abs), + /* K9 */ be_nested_str_weak(tasmota), + /* K10 */ be_nested_str_weak(scale_int), + /* K11 */ be_nested_str_weak(sine_int), + /* K12 */ be_nested_str_weak(min), }; -extern const bclass be_class_SequenceManager; +extern const bclass be_class_AnimationMath; /******************************************************************** -** Solidified function: get_resolved_repeat_count +** Solidified function: sqrt ********************************************************************/ -be_local_closure(class_SequenceManager_get_resolved_repeat_count, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(get_resolved_repeat_count), - &be_const_str_solidified, - ( &(const binstruction[16]) { /* code */ - 0x4C040000, // 0000 LDNIL R1 - 0x60080004, // 0001 GETGBL R2 G4 - 0x880C0100, // 0002 GETMBR R3 R0 K0 - 0x7C080200, // 0003 CALL R2 1 - 0x1C080501, // 0004 EQ R2 R2 K1 - 0x780A0004, // 0005 JMPF R2 #000B - 0x8C080100, // 0006 GETMET R2 R0 K0 - 0x88100102, // 0007 GETMBR R4 R0 K2 - 0x7C080400, // 0008 CALL R2 2 - 0x5C040400, // 0009 MOVE R1 R2 - 0x70020000, // 000A JMP #000C - 0x88040100, // 000B GETMBR R1 R0 K0 - 0x60080009, // 000C GETGBL R2 G9 - 0x5C0C0200, // 000D MOVE R3 R1 - 0x7C080200, // 000E CALL R2 1 - 0x80040400, // 000F RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: push_wait_step -********************************************************************/ -be_local_closure(class_SequenceManager_push_wait_step, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(push_wait_step), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x88080103, // 0000 GETMBR R2 R0 K3 - 0x8C080504, // 0001 GETMET R2 R2 K4 - 0x60100013, // 0002 GETGBL R4 G19 - 0x7C100000, // 0003 CALL R4 0 - 0x98120B06, // 0004 SETIDX R4 K5 K6 - 0x98120E01, // 0005 SETIDX R4 K7 R1 - 0x7C080400, // 0006 CALL R2 2 - 0x80040000, // 0007 RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: execute_closure_steps_batch -********************************************************************/ -be_local_closure(class_SequenceManager_execute_closure_steps_batch, /* name */ - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(execute_closure_steps_batch), - &be_const_str_solidified, - ( &(const binstruction[39]) { /* code */ - 0x88080108, // 0000 GETMBR R2 R0 K8 - 0x600C000C, // 0001 GETGBL R3 G12 - 0x88100103, // 0002 GETMBR R4 R0 K3 - 0x7C0C0200, // 0003 CALL R3 1 - 0x14080403, // 0004 LT R2 R2 R3 - 0x780A0012, // 0005 JMPF R2 #0019 - 0x88080103, // 0006 GETMBR R2 R0 K3 - 0x880C0108, // 0007 GETMBR R3 R0 K8 - 0x94080403, // 0008 GETIDX R2 R2 R3 - 0x940C0505, // 0009 GETIDX R3 R2 K5 - 0x1C0C0709, // 000A EQ R3 R3 K9 - 0x780E000A, // 000B JMPF R3 #0017 - 0x940C0509, // 000C GETIDX R3 R2 K9 - 0x4C100000, // 000D LDNIL R4 - 0x20100604, // 000E NE R4 R3 R4 - 0x78120002, // 000F JMPF R4 #0013 - 0x5C100600, // 0010 MOVE R4 R3 - 0x88140102, // 0011 GETMBR R5 R0 K2 - 0x7C100200, // 0012 CALL R4 1 - 0x88100108, // 0013 GETMBR R4 R0 K8 - 0x0010090A, // 0014 ADD R4 R4 K10 - 0x90021004, // 0015 SETMBR R0 K8 R4 - 0x70020000, // 0016 JMP #0018 - 0x70020000, // 0017 JMP #0019 - 0x7001FFE6, // 0018 JMP #0000 - 0x88080108, // 0019 GETMBR R2 R0 K8 - 0x600C000C, // 001A GETGBL R3 G12 - 0x88100103, // 001B GETMBR R4 R0 K3 - 0x7C0C0200, // 001C CALL R3 1 - 0x14080403, // 001D LT R2 R2 R3 - 0x780A0003, // 001E JMPF R2 #0023 - 0x8C08010B, // 001F GETMET R2 R0 K11 - 0x5C100200, // 0020 MOVE R4 R1 - 0x7C080400, // 0021 CALL R2 2 - 0x70020002, // 0022 JMP #0026 - 0x8C08010C, // 0023 GETMET R2 R0 K12 - 0x5C100200, // 0024 MOVE R4 R1 - 0x7C080400, // 0025 CALL R2 2 - 0x80000000, // 0026 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: execute_closure_steps_batch_atomic -********************************************************************/ -be_local_closure(class_SequenceManager_execute_closure_steps_batch_atomic, /* name */ +be_local_closure(class_AnimationMath_sqrt, /* name */ be_nested_proto( 8, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(execute_closure_steps_batch_atomic), - &be_const_str_solidified, - ( &(const binstruction[77]) { /* code */ - 0x880C0108, // 0000 GETMBR R3 R0 K8 - 0x6010000C, // 0001 GETGBL R4 G12 - 0x88140103, // 0002 GETMBR R5 R0 K3 - 0x7C100200, // 0003 CALL R4 1 - 0x140C0604, // 0004 LT R3 R3 R4 - 0x780E0012, // 0005 JMPF R3 #0019 - 0x880C0103, // 0006 GETMBR R3 R0 K3 - 0x88100108, // 0007 GETMBR R4 R0 K8 - 0x940C0604, // 0008 GETIDX R3 R3 R4 - 0x94100705, // 0009 GETIDX R4 R3 K5 - 0x1C100909, // 000A EQ R4 R4 K9 - 0x7812000A, // 000B JMPF R4 #0017 - 0x94100709, // 000C GETIDX R4 R3 K9 - 0x4C140000, // 000D LDNIL R5 - 0x20140805, // 000E NE R5 R4 R5 - 0x78160002, // 000F JMPF R5 #0013 - 0x5C140800, // 0010 MOVE R5 R4 - 0x88180102, // 0011 GETMBR R6 R0 K2 - 0x7C140200, // 0012 CALL R5 1 - 0x88140108, // 0013 GETMBR R5 R0 K8 - 0x00140B0A, // 0014 ADD R5 R5 K10 - 0x90021005, // 0015 SETMBR R0 K8 R5 - 0x70020000, // 0016 JMP #0018 - 0x70020000, // 0017 JMP #0019 - 0x7001FFE6, // 0018 JMP #0000 - 0x4C0C0000, // 0019 LDNIL R3 - 0x50100000, // 001A LDBOOL R4 0 0 - 0x88140108, // 001B GETMBR R5 R0 K8 - 0x6018000C, // 001C GETGBL R6 G12 - 0x881C0103, // 001D GETMBR R7 R0 K3 - 0x7C180200, // 001E CALL R6 1 - 0x14140A06, // 001F LT R5 R5 R6 - 0x7816000B, // 0020 JMPF R5 #002D - 0x88140103, // 0021 GETMBR R5 R0 K3 - 0x88180108, // 0022 GETMBR R6 R0 K8 - 0x940C0A06, // 0023 GETIDX R3 R5 R6 - 0x94180705, // 0024 GETIDX R6 R3 K5 - 0x1C180D0D, // 0025 EQ R6 R6 K13 - 0x781A0005, // 0026 JMPF R6 #002D - 0x4C180000, // 0027 LDNIL R6 - 0x20180406, // 0028 NE R6 R2 R6 - 0x781A0002, // 0029 JMPF R6 #002D - 0x9418070E, // 002A GETIDX R6 R3 K14 - 0x1C180C02, // 002B EQ R6 R6 R2 - 0x5C100C00, // 002C MOVE R4 R6 - 0x78120004, // 002D JMPF R4 #0033 - 0x90021E01, // 002E SETMBR R0 K15 R1 - 0x8C140510, // 002F GETMET R5 R2 K16 - 0x5C1C0200, // 0030 MOVE R7 R1 - 0x7C140400, // 0031 CALL R5 2 - 0x7002000F, // 0032 JMP #0043 - 0x88140108, // 0033 GETMBR R5 R0 K8 - 0x6018000C, // 0034 GETGBL R6 G12 - 0x881C0103, // 0035 GETMBR R7 R0 K3 - 0x7C180200, // 0036 CALL R6 1 - 0x14140A06, // 0037 LT R5 R5 R6 - 0x78160002, // 0038 JMPF R5 #003C - 0x8C14010B, // 0039 GETMET R5 R0 K11 - 0x5C1C0200, // 003A MOVE R7 R1 - 0x7C140400, // 003B CALL R5 2 - 0x4C140000, // 003C LDNIL R5 - 0x20140405, // 003D NE R5 R2 R5 - 0x78160003, // 003E JMPF R5 #0043 - 0x88140102, // 003F GETMBR R5 R0 K2 - 0x8C140B11, // 0040 GETMET R5 R5 K17 - 0x5C1C0400, // 0041 MOVE R7 R2 - 0x7C140400, // 0042 CALL R5 2 - 0x88140108, // 0043 GETMBR R5 R0 K8 - 0x6018000C, // 0044 GETGBL R6 G12 - 0x881C0103, // 0045 GETMBR R7 R0 K3 - 0x7C180200, // 0046 CALL R6 1 - 0x28140A06, // 0047 GE R5 R5 R6 - 0x78160002, // 0048 JMPF R5 #004C - 0x8C14010C, // 0049 GETMET R5 R0 K12 - 0x5C1C0200, // 004A MOVE R7 R1 - 0x7C140400, // 004B CALL R5 2 - 0x80000000, // 004C RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: stop_all_subsequences -********************************************************************/ -be_local_closure(class_SequenceManager_stop_all_subsequences, /* name */ - be_nested_proto( - 6, /* nstack */ 1, /* argc */ - 10, /* varg */ + 12, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(stop_all_subsequences), + &be_ktab_class_AnimationMath, /* shared constants */ + be_str_weak(sqrt), &be_const_str_solidified, - ( &(const binstruction[17]) { /* code */ - 0x60040010, // 0000 GETGBL R1 G16 - 0x88080103, // 0001 GETMBR R2 R0 K3 - 0x7C040200, // 0002 CALL R1 1 - 0xA8020008, // 0003 EXBLK 0 #000D - 0x5C080200, // 0004 MOVE R2 R1 - 0x7C080000, // 0005 CALL R2 0 - 0x940C0505, // 0006 GETIDX R3 R2 K5 - 0x1C0C0712, // 0007 EQ R3 R3 K18 - 0x780E0002, // 0008 JMPF R3 #000C - 0x940C0513, // 0009 GETIDX R3 R2 K19 - 0x8C100714, // 000A GETMET R4 R3 K20 - 0x7C100200, // 000B CALL R4 1 - 0x7001FFF6, // 000C JMP #0004 - 0x58040015, // 000D LDCONST R1 K21 - 0xAC040200, // 000E CATCH R1 1 0 - 0xB0080000, // 000F RAISE 2 R0 R0 - 0x80040000, // 0010 RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: push_play_step -********************************************************************/ -be_local_closure(class_SequenceManager_push_play_step, /* name */ - be_nested_proto( - 7, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(push_play_step), - &be_const_str_solidified, - ( &(const binstruction[15]) { /* code */ - 0x880C0103, // 0000 GETMBR R3 R0 K3 - 0x8C0C0704, // 0001 GETMET R3 R3 K4 - 0x60140013, // 0002 GETGBL R5 G19 - 0x7C140000, // 0003 CALL R5 0 - 0x98160B0D, // 0004 SETIDX R5 K5 K13 - 0x98161C01, // 0005 SETIDX R5 K14 R1 - 0x4C180000, // 0006 LDNIL R6 - 0x20180406, // 0007 NE R6 R2 R6 - 0x781A0001, // 0008 JMPF R6 #000B - 0x5C180400, // 0009 MOVE R6 R2 - 0x70020000, // 000A JMP #000C - 0x58180016, // 000B LDCONST R6 K22 - 0x98160E06, // 000C SETIDX R5 K7 R6 - 0x7C0C0400, // 000D CALL R3 2 - 0x80040000, // 000E RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(class_SequenceManager_init, /* name */ - be_nested_proto( - 6, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(init), - &be_const_str_solidified, - ( &(const binstruction[33]) { /* code */ - 0x600C0003, // 0000 GETGBL R3 G3 - 0x5C100000, // 0001 MOVE R4 R0 - 0x7C0C0200, // 0002 CALL R3 1 - 0x8C0C0717, // 0003 GETMET R3 R3 K23 - 0x5C140200, // 0004 MOVE R5 R1 - 0x7C0C0400, // 0005 CALL R3 2 - 0x4C0C0000, // 0006 LDNIL R3 - 0x90023003, // 0007 SETMBR R0 K24 R3 - 0x600C0013, // 0008 GETGBL R3 G19 - 0x7C0C0000, // 0009 CALL R3 0 - 0x90023203, // 000A SETMBR R0 K25 R3 - 0x90021116, // 000B SETMBR R0 K8 K22 - 0x90021F16, // 000C SETMBR R0 K15 K22 - 0x600C0012, // 000D GETGBL R3 G18 - 0x7C0C0000, // 000E CALL R3 0 - 0x90020603, // 000F SETMBR R0 K3 R3 - 0x4C0C0000, // 0010 LDNIL R3 - 0x200C0403, // 0011 NE R3 R2 R3 - 0x780E0001, // 0012 JMPF R3 #0015 - 0x5C0C0400, // 0013 MOVE R3 R2 - 0x70020000, // 0014 JMP #0016 - 0x580C000A, // 0015 LDCONST R3 K10 - 0x90020003, // 0016 SETMBR R0 K0 R3 - 0x90023516, // 0017 SETMBR R0 K26 K22 - 0x4C0C0000, // 0018 LDNIL R3 - 0x200C0403, // 0019 NE R3 R2 R3 - 0x780E0001, // 001A JMPF R3 #001D - 0x200C050A, // 001B NE R3 R2 K10 - 0x740E0000, // 001C JMPT R3 #001E - 0x500C0001, // 001D LDBOOL R3 0 1 - 0x500C0200, // 001E LDBOOL R3 1 0 - 0x90023603, // 001F SETMBR R0 K27 R3 - 0x80000000, // 0020 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: update -********************************************************************/ -be_local_closure(class_SequenceManager_update, /* name */ - be_nested_proto( - 8, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(update), - &be_const_str_solidified, - ( &(const binstruction[74]) { /* code */ - 0x8808011C, // 0000 GETMBR R2 R0 K28 - 0x780A0004, // 0001 JMPF R2 #0007 - 0x6008000C, // 0002 GETGBL R2 G12 - 0x880C0103, // 0003 GETMBR R3 R0 K3 - 0x7C080200, // 0004 CALL R2 1 - 0x1C080516, // 0005 EQ R2 R2 K22 - 0x780A0000, // 0006 JMPF R2 #0008 - 0x80000400, // 0007 RET 0 - 0x88080108, // 0008 GETMBR R2 R0 K8 - 0x600C000C, // 0009 GETGBL R3 G12 - 0x88100103, // 000A GETMBR R4 R0 K3 - 0x7C0C0200, // 000B CALL R3 1 - 0x28080403, // 000C GE R2 R2 R3 - 0x780A0000, // 000D JMPF R2 #000F - 0x80000400, // 000E RET 0 - 0x88080103, // 000F GETMBR R2 R0 K3 - 0x880C0108, // 0010 GETMBR R3 R0 K8 - 0x94080403, // 0011 GETIDX R2 R2 R3 - 0x940C0505, // 0012 GETIDX R3 R2 K5 - 0x1C0C0712, // 0013 EQ R3 R3 K18 - 0x780E0009, // 0014 JMPF R3 #001F - 0x940C0513, // 0015 GETIDX R3 R2 K19 - 0x8C10071D, // 0016 GETMET R4 R3 K29 - 0x5C180200, // 0017 MOVE R6 R1 - 0x7C100400, // 0018 CALL R4 2 - 0x8810071C, // 0019 GETMBR R4 R3 K28 - 0x74120002, // 001A JMPT R4 #001E - 0x8C10011E, // 001B GETMET R4 R0 K30 - 0x5C180200, // 001C MOVE R6 R1 - 0x7C100400, // 001D CALL R4 2 - 0x70020029, // 001E JMP #0049 - 0x940C0505, // 001F GETIDX R3 R2 K5 - 0x1C0C0709, // 0020 EQ R3 R3 K9 - 0x780E0003, // 0021 JMPF R3 #0026 - 0x8C0C011F, // 0022 GETMET R3 R0 K31 - 0x5C140200, // 0023 MOVE R5 R1 - 0x7C0C0400, // 0024 CALL R3 2 - 0x70020022, // 0025 JMP #0049 - 0x8C0C0520, // 0026 GETMET R3 R2 K32 - 0x58140007, // 0027 LDCONST R5 K7 - 0x7C0C0400, // 0028 CALL R3 2 - 0x780E001B, // 0029 JMPF R3 #0046 - 0x940C0507, // 002A GETIDX R3 R2 K7 - 0x4C100000, // 002B LDNIL R4 - 0x200C0604, // 002C NE R3 R3 R4 - 0x780E0017, // 002D JMPF R3 #0046 - 0x940C0507, // 002E GETIDX R3 R2 K7 - 0x60100004, // 002F GETGBL R4 G4 - 0x5C140600, // 0030 MOVE R5 R3 - 0x7C100200, // 0031 CALL R4 1 - 0x1C100901, // 0032 EQ R4 R4 K1 - 0x78120003, // 0033 JMPF R4 #0038 - 0x5C100600, // 0034 MOVE R4 R3 - 0x88140102, // 0035 GETMBR R5 R0 K2 - 0x7C100200, // 0036 CALL R4 1 - 0x5C0C0800, // 0037 MOVE R3 R4 - 0x24100716, // 0038 GT R4 R3 K22 - 0x78120007, // 0039 JMPF R4 #0042 - 0x8810010F, // 003A GETMBR R4 R0 K15 - 0x04100204, // 003B SUB R4 R1 R4 - 0x28140803, // 003C GE R5 R4 R3 - 0x78160002, // 003D JMPF R5 #0041 - 0x8C14011E, // 003E GETMET R5 R0 K30 - 0x5C1C0200, // 003F MOVE R7 R1 - 0x7C140400, // 0040 CALL R5 2 - 0x70020002, // 0041 JMP #0045 - 0x8C10011E, // 0042 GETMET R4 R0 K30 - 0x5C180200, // 0043 MOVE R6 R1 - 0x7C100400, // 0044 CALL R4 2 - 0x70020002, // 0045 JMP #0049 - 0x8C0C011E, // 0046 GETMET R3 R0 K30 - 0x5C140200, // 0047 MOVE R5 R1 - 0x7C0C0400, // 0048 CALL R3 2 - 0x80000000, // 0049 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: push_repeat_subsequence -********************************************************************/ -be_local_closure(class_SequenceManager_push_repeat_subsequence, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(push_repeat_subsequence), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x88080103, // 0000 GETMBR R2 R0 K3 - 0x8C080504, // 0001 GETMET R2 R2 K4 - 0x60100013, // 0002 GETGBL R4 G19 - 0x7C100000, // 0003 CALL R4 0 - 0x98120B12, // 0004 SETIDX R4 K5 K18 - 0x98122601, // 0005 SETIDX R4 K19 R1 - 0x7C080400, // 0006 CALL R2 2 - 0x80040000, // 0007 RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: complete_iteration -********************************************************************/ -be_local_closure(class_SequenceManager_complete_iteration, /* name */ - be_nested_proto( - 7, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(complete_iteration), - &be_const_str_solidified, - ( &(const binstruction[61]) { /* code */ - 0x8808011A, // 0000 GETMBR R2 R0 K26 - 0x0008050A, // 0001 ADD R2 R2 K10 - 0x90023402, // 0002 SETMBR R0 K26 R2 - 0x8808011B, // 0003 GETMBR R2 R0 K27 - 0x780A0003, // 0004 JMPF R2 #0009 - 0x88080102, // 0005 GETMBR R2 R0 K2 - 0x8C080521, // 0006 GETMET R2 R2 K33 - 0x8810011A, // 0007 GETMBR R4 R0 K26 - 0x7C080400, // 0008 CALL R2 2 - 0x8C080122, // 0009 GETMET R2 R0 K34 - 0x7C080200, // 000A CALL R2 1 - 0x540DFFFE, // 000B LDINT R3 -1 - 0x1C0C0403, // 000C EQ R3 R2 R3 - 0x740E0002, // 000D JMPT R3 #0011 - 0x880C011A, // 000E GETMBR R3 R0 K26 - 0x140C0602, // 000F LT R3 R3 R2 - 0x780E0023, // 0010 JMPF R3 #0035 - 0x90021116, // 0011 SETMBR R0 K8 K22 - 0x880C0108, // 0012 GETMBR R3 R0 K8 - 0x6010000C, // 0013 GETGBL R4 G12 - 0x88140103, // 0014 GETMBR R5 R0 K3 - 0x7C100200, // 0015 CALL R4 1 - 0x140C0604, // 0016 LT R3 R3 R4 - 0x780E0012, // 0017 JMPF R3 #002B - 0x880C0103, // 0018 GETMBR R3 R0 K3 - 0x88100108, // 0019 GETMBR R4 R0 K8 - 0x940C0604, // 001A GETIDX R3 R3 R4 - 0x94100705, // 001B GETIDX R4 R3 K5 - 0x1C100909, // 001C EQ R4 R4 K9 - 0x7812000A, // 001D JMPF R4 #0029 - 0x94100709, // 001E GETIDX R4 R3 K9 - 0x4C140000, // 001F LDNIL R5 - 0x20140805, // 0020 NE R5 R4 R5 - 0x78160002, // 0021 JMPF R5 #0025 - 0x5C140800, // 0022 MOVE R5 R4 - 0x88180102, // 0023 GETMBR R6 R0 K2 - 0x7C140200, // 0024 CALL R5 1 - 0x88140108, // 0025 GETMBR R5 R0 K8 - 0x00140B0A, // 0026 ADD R5 R5 K10 - 0x90021005, // 0027 SETMBR R0 K8 R5 - 0x70020000, // 0028 JMP #002A - 0x70020000, // 0029 JMP #002B - 0x7001FFE6, // 002A JMP #0012 - 0x880C0108, // 002B GETMBR R3 R0 K8 - 0x6010000C, // 002C GETGBL R4 G12 - 0x88140103, // 002D GETMBR R5 R0 K3 - 0x7C100200, // 002E CALL R4 1 - 0x140C0604, // 002F LT R3 R3 R4 - 0x780E0002, // 0030 JMPF R3 #0034 - 0x8C0C010B, // 0031 GETMET R3 R0 K11 - 0x5C140200, // 0032 MOVE R5 R1 - 0x7C0C0400, // 0033 CALL R3 2 - 0x70020006, // 0034 JMP #003C - 0x500C0000, // 0035 LDBOOL R3 0 0 - 0x90023803, // 0036 SETMBR R0 K28 R3 - 0x880C011B, // 0037 GETMBR R3 R0 K27 - 0x780E0002, // 0038 JMPF R3 #003C - 0x880C0102, // 0039 GETMBR R3 R0 K2 - 0x8C0C0723, // 003A GETMET R3 R3 K35 - 0x7C0C0200, // 003B CALL R3 1 - 0x80000000, // 003C RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: is_sequence_running -********************************************************************/ -be_local_closure(class_SequenceManager_is_sequence_running, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(is_sequence_running), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x8804011C, // 0000 GETMBR R1 R0 K28 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: push_step -********************************************************************/ -be_local_closure(class_SequenceManager_push_step, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(push_step), - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0x88080103, // 0000 GETMBR R2 R0 K3 - 0x8C080504, // 0001 GETMET R2 R2 K4 - 0x5C100200, // 0002 MOVE R4 R1 - 0x7C080400, // 0003 CALL R2 2 - 0x80040000, // 0004 RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: push_closure_step -********************************************************************/ -be_local_closure(class_SequenceManager_push_closure_step, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(push_closure_step), - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x88080103, // 0000 GETMBR R2 R0 K3 - 0x8C080504, // 0001 GETMET R2 R2 K4 - 0x60100013, // 0002 GETGBL R4 G19 - 0x7C100000, // 0003 CALL R4 0 - 0x98120B09, // 0004 SETIDX R4 K5 K9 - 0x98121201, // 0005 SETIDX R4 K9 R1 - 0x7C080400, // 0006 CALL R2 2 - 0x80040000, // 0007 RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: stop -********************************************************************/ -be_local_closure(class_SequenceManager_stop, /* name */ - be_nested_proto( - 6, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(stop), - &be_const_str_solidified, - ( &(const binstruction[36]) { /* code */ - 0x8804011C, // 0000 GETMBR R1 R0 K28 - 0x78060020, // 0001 JMPF R1 #0023 - 0x50040000, // 0002 LDBOOL R1 0 0 - 0x90023801, // 0003 SETMBR R0 K28 R1 - 0x8804011B, // 0004 GETMBR R1 R0 K27 - 0x78060002, // 0005 JMPF R1 #0009 - 0x88040102, // 0006 GETMBR R1 R0 K2 - 0x8C040323, // 0007 GETMET R1 R1 K35 - 0x7C040200, // 0008 CALL R1 1 - 0x88040108, // 0009 GETMBR R1 R0 K8 - 0x6008000C, // 000A GETGBL R2 G12 - 0x880C0103, // 000B GETMBR R3 R0 K3 - 0x7C080200, // 000C CALL R2 1 - 0x14040202, // 000D LT R1 R1 R2 - 0x78060011, // 000E JMPF R1 #0021 - 0x88040103, // 000F GETMBR R1 R0 K3 - 0x88080108, // 0010 GETMBR R2 R0 K8 - 0x94040202, // 0011 GETIDX R1 R1 R2 - 0x94080305, // 0012 GETIDX R2 R1 K5 - 0x1C08050D, // 0013 EQ R2 R2 K13 - 0x780A0005, // 0014 JMPF R2 #001B - 0x9408030E, // 0015 GETIDX R2 R1 K14 - 0x880C0102, // 0016 GETMBR R3 R0 K2 - 0x8C0C0711, // 0017 GETMET R3 R3 K17 - 0x5C140400, // 0018 MOVE R5 R2 - 0x7C0C0400, // 0019 CALL R3 2 - 0x70020005, // 001A JMP #0021 - 0x94080305, // 001B GETIDX R2 R1 K5 - 0x1C080512, // 001C EQ R2 R2 K18 - 0x780A0002, // 001D JMPF R2 #0021 - 0x94080313, // 001E GETIDX R2 R1 K19 - 0x8C0C0514, // 001F GETMET R3 R2 K20 - 0x7C0C0200, // 0020 CALL R3 1 - 0x8C040124, // 0021 GETMET R1 R0 K36 - 0x7C040200, // 0022 CALL R1 1 - 0x80040000, // 0023 RET 1 R0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: advance_to_next_step -********************************************************************/ -be_local_closure(class_SequenceManager_advance_to_next_step, /* name */ - be_nested_proto( - 8, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(advance_to_next_step), - &be_const_str_solidified, - ( &(const binstruction[37]) { /* code */ - 0x88080103, // 0000 GETMBR R2 R0 K3 - 0x880C0108, // 0001 GETMBR R3 R0 K8 - 0x94080403, // 0002 GETIDX R2 R2 R3 - 0x4C0C0000, // 0003 LDNIL R3 - 0x94100505, // 0004 GETIDX R4 R2 K5 - 0x1C10090D, // 0005 EQ R4 R4 K13 - 0x78120004, // 0006 JMPF R4 #000C - 0x8C100520, // 0007 GETMET R4 R2 K32 - 0x58180007, // 0008 LDCONST R6 K7 - 0x7C100400, // 0009 CALL R4 2 - 0x78120000, // 000A JMPF R4 #000C - 0x940C050E, // 000B GETIDX R3 R2 K14 - 0x88100108, // 000C GETMBR R4 R0 K8 - 0x0010090A, // 000D ADD R4 R4 K10 - 0x90021004, // 000E SETMBR R0 K8 R4 - 0x88100108, // 000F GETMBR R4 R0 K8 - 0x6014000C, // 0010 GETGBL R5 G12 - 0x88180103, // 0011 GETMBR R6 R0 K3 - 0x7C140200, // 0012 CALL R5 1 - 0x28100805, // 0013 GE R4 R4 R5 - 0x7812000A, // 0014 JMPF R4 #0020 - 0x4C100000, // 0015 LDNIL R4 - 0x20100604, // 0016 NE R4 R3 R4 - 0x78120003, // 0017 JMPF R4 #001C - 0x88100102, // 0018 GETMBR R4 R0 K2 - 0x8C100911, // 0019 GETMET R4 R4 K17 - 0x5C180600, // 001A MOVE R6 R3 - 0x7C100400, // 001B CALL R4 2 - 0x8C10010C, // 001C GETMET R4 R0 K12 - 0x5C180200, // 001D MOVE R6 R1 - 0x7C100400, // 001E CALL R4 2 - 0x70020003, // 001F JMP #0024 - 0x8C100125, // 0020 GETMET R4 R0 K37 - 0x5C180200, // 0021 MOVE R6 R1 - 0x5C1C0600, // 0022 MOVE R7 R3 - 0x7C100600, // 0023 CALL R4 3 - 0x80000000, // 0024 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: start -********************************************************************/ -be_local_closure(class_SequenceManager_start, /* name */ - be_nested_proto( - 7, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(start), - &be_const_str_solidified, - ( &(const binstruction[65]) { /* code */ - 0x8808011C, // 0000 GETMBR R2 R0 K28 - 0x780A0003, // 0001 JMPF R2 #0006 - 0x50080000, // 0002 LDBOOL R2 0 0 - 0x90023802, // 0003 SETMBR R0 K28 R2 - 0x8C080124, // 0004 GETMET R2 R0 K36 - 0x7C080200, // 0005 CALL R2 1 - 0x90021116, // 0006 SETMBR R0 K8 K22 - 0x90021E01, // 0007 SETMBR R0 K15 R1 - 0x90023516, // 0008 SETMBR R0 K26 K22 - 0x50080200, // 0009 LDBOOL R2 1 0 - 0x90023802, // 000A SETMBR R0 K28 R2 - 0x90024C01, // 000B SETMBR R0 K38 R1 - 0x8C080122, // 000C GETMET R2 R0 K34 - 0x7C080200, // 000D CALL R2 1 - 0x1C0C0516, // 000E EQ R3 R2 K22 - 0x780E0002, // 000F JMPF R3 #0013 - 0x500C0000, // 0010 LDBOOL R3 0 0 - 0x90023803, // 0011 SETMBR R0 K28 R3 - 0x80040000, // 0012 RET 1 R0 - 0x880C011B, // 0013 GETMBR R3 R0 K27 - 0x780E0003, // 0014 JMPF R3 #0019 - 0x880C0102, // 0015 GETMBR R3 R0 K2 - 0x8C0C0727, // 0016 GETMET R3 R3 K39 - 0x8814011A, // 0017 GETMBR R5 R0 K26 + ( &(const binstruction[27]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0x600C0004, // 0002 GETGBL R3 G4 + 0x5C100000, // 0003 MOVE R4 R0 + 0x7C0C0200, // 0004 CALL R3 1 + 0x1C0C0702, // 0005 EQ R3 R3 K2 + 0x780E000E, // 0006 JMPF R3 #0016 + 0x280C0103, // 0007 GE R3 R0 K3 + 0x780E000C, // 0008 JMPF R3 #0016 + 0x540E00FE, // 0009 LDINT R3 255 + 0x180C0003, // 000A LE R3 R0 R3 + 0x780E0009, // 000B JMPF R3 #0016 + 0x0C0C0104, // 000C DIV R3 R0 K4 + 0x60100009, // 000D GETGBL R4 G9 + 0x8C140505, // 000E GETMET R5 R2 K5 + 0x5C1C0600, // 000F MOVE R7 R3 + 0x7C140400, // 0010 CALL R5 2 + 0x541A00FE, // 0011 LDINT R6 255 + 0x08140A06, // 0012 MUL R5 R5 R6 + 0x7C100200, // 0013 CALL R4 1 + 0x80040800, // 0014 RET 1 R4 + 0x70020003, // 0015 JMP #001A + 0x8C0C0505, // 0016 GETMET R3 R2 K5 + 0x5C140000, // 0017 MOVE R5 R0 0x7C0C0400, // 0018 CALL R3 2 - 0x600C000C, // 0019 GETGBL R3 G12 - 0x88100103, // 001A GETMBR R4 R0 K3 - 0x7C0C0200, // 001B CALL R3 1 - 0x240C0716, // 001C GT R3 R3 K22 - 0x780E0021, // 001D JMPF R3 #0040 - 0x880C0108, // 001E GETMBR R3 R0 K8 - 0x6010000C, // 001F GETGBL R4 G12 - 0x88140103, // 0020 GETMBR R5 R0 K3 - 0x7C100200, // 0021 CALL R4 1 - 0x140C0604, // 0022 LT R3 R3 R4 - 0x780E0012, // 0023 JMPF R3 #0037 - 0x880C0103, // 0024 GETMBR R3 R0 K3 - 0x88100108, // 0025 GETMBR R4 R0 K8 - 0x940C0604, // 0026 GETIDX R3 R3 R4 - 0x94100705, // 0027 GETIDX R4 R3 K5 - 0x1C100909, // 0028 EQ R4 R4 K9 - 0x7812000A, // 0029 JMPF R4 #0035 - 0x94100709, // 002A GETIDX R4 R3 K9 - 0x4C140000, // 002B LDNIL R5 - 0x20140805, // 002C NE R5 R4 R5 - 0x78160002, // 002D JMPF R5 #0031 - 0x5C140800, // 002E MOVE R5 R4 - 0x88180102, // 002F GETMBR R6 R0 K2 - 0x7C140200, // 0030 CALL R5 1 - 0x88140108, // 0031 GETMBR R5 R0 K8 - 0x00140B0A, // 0032 ADD R5 R5 K10 - 0x90021005, // 0033 SETMBR R0 K8 R5 - 0x70020000, // 0034 JMP #0036 - 0x70020000, // 0035 JMP #0037 - 0x7001FFE6, // 0036 JMP #001E - 0x880C0108, // 0037 GETMBR R3 R0 K8 - 0x6010000C, // 0038 GETGBL R4 G12 - 0x88140103, // 0039 GETMBR R5 R0 K3 - 0x7C100200, // 003A CALL R4 1 - 0x140C0604, // 003B LT R3 R3 R4 - 0x780E0002, // 003C JMPF R3 #0040 - 0x8C0C010B, // 003D GETMET R3 R0 K11 - 0x5C140200, // 003E MOVE R5 R1 - 0x7C0C0400, // 003F CALL R3 2 - 0x80040000, // 0040 RET 1 R0 + 0x80040600, // 0019 RET 1 R3 + 0x80000000, // 001A RET 0 }) ) ); @@ -15455,52 +15141,29 @@ be_local_closure(class_SequenceManager_start, /* name */ /******************************************************************** -** Solidified function: tostring +** Solidified function: max ********************************************************************/ -be_local_closure(class_SequenceManager_tostring, /* name */ +be_local_closure(class_AnimationMath_max, /* name */ be_nested_proto( - 8, /* nstack */ + 6, /* nstack */ 1, /* argc */ - 10, /* varg */ + 13, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(tostring), + &be_ktab_class_AnimationMath, /* shared constants */ + be_str_weak(max), &be_const_str_solidified, - ( &(const binstruction[30]) { /* code */ - 0x58040028, // 0000 LDCONST R1 K40 - 0x8808011B, // 0001 GETMBR R2 R0 K27 - 0x780A0010, // 0002 JMPF R2 #0014 - 0x8C080122, // 0003 GETMET R2 R0 K34 - 0x7C080200, // 0004 CALL R2 1 - 0x540DFFFE, // 0005 LDINT R3 -1 - 0x1C0C0403, // 0006 EQ R3 R2 R3 - 0x780E0005, // 0007 JMPF R3 #000E - 0x600C0018, // 0008 GETGBL R3 G24 - 0x58100029, // 0009 LDCONST R4 K41 - 0x8814011A, // 000A GETMBR R5 R0 K26 - 0x7C0C0400, // 000B CALL R3 2 - 0x5C040600, // 000C MOVE R1 R3 - 0x70020005, // 000D JMP #0014 - 0x600C0018, // 000E GETGBL R3 G24 - 0x5810002A, // 000F LDCONST R4 K42 - 0x5C140400, // 0010 MOVE R5 R2 - 0x8818011A, // 0011 GETMBR R6 R0 K26 - 0x7C0C0600, // 0012 CALL R3 3 - 0x5C040600, // 0013 MOVE R1 R3 - 0x60080018, // 0014 GETGBL R2 G24 - 0x580C002B, // 0015 LDCONST R3 K43 - 0x6010000C, // 0016 GETGBL R4 G12 - 0x88140103, // 0017 GETMBR R5 R0 K3 - 0x7C100200, // 0018 CALL R4 1 - 0x88140108, // 0019 GETMBR R5 R0 K8 - 0x8818011C, // 001A GETMBR R6 R0 K28 - 0x5C1C0200, // 001B MOVE R7 R1 - 0x7C080A00, // 001C CALL R2 5 - 0x80040400, // 001D RET 1 R2 + ( &(const binstruction[ 7]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0x600C0016, // 0002 GETGBL R3 G22 + 0x88100506, // 0003 GETMBR R4 R2 K6 + 0x5C140000, // 0004 MOVE R5 R0 + 0x7C0C0400, // 0005 CALL R3 2 + 0x80040600, // 0006 RET 1 R3 }) ) ); @@ -15508,106 +15171,30 @@ be_local_closure(class_SequenceManager_tostring, /* name */ /******************************************************************** -** Solidified function: execute_current_step +** Solidified function: round ********************************************************************/ -be_local_closure(class_SequenceManager_execute_current_step, /* name */ +be_local_closure(class_AnimationMath_round, /* name */ be_nested_proto( - 9, /* nstack */ - 2, /* argc */ - 10, /* varg */ + 7, /* nstack */ + 1, /* argc */ + 12, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - &be_ktab_class_SequenceManager, /* shared constants */ - be_str_weak(execute_current_step), + &be_ktab_class_AnimationMath, /* shared constants */ + be_str_weak(round), &be_const_str_solidified, - ( &(const binstruction[84]) { /* code */ - 0x88080108, // 0000 GETMBR R2 R0 K8 - 0x600C000C, // 0001 GETGBL R3 G12 - 0x88100103, // 0002 GETMBR R4 R0 K3 - 0x7C0C0200, // 0003 CALL R3 1 - 0x28080403, // 0004 GE R2 R2 R3 - 0x780A0003, // 0005 JMPF R2 #000A - 0x8C08010C, // 0006 GETMET R2 R0 K12 - 0x5C100200, // 0007 MOVE R4 R1 - 0x7C080400, // 0008 CALL R2 2 - 0x80000400, // 0009 RET 0 - 0x88080103, // 000A GETMBR R2 R0 K3 - 0x880C0108, // 000B GETMBR R3 R0 K8 - 0x94080403, // 000C GETIDX R2 R2 R3 - 0x940C0505, // 000D GETIDX R3 R2 K5 - 0x1C0C070D, // 000E EQ R3 R3 K13 - 0x780E0022, // 000F JMPF R3 #0033 - 0x940C050E, // 0010 GETIDX R3 R2 K14 - 0x4C100000, // 0011 LDNIL R4 - 0x1C100604, // 0012 EQ R4 R3 R4 - 0x78120000, // 0013 JMPF R4 #0015 - 0x80000800, // 0014 RET 0 - 0x88100102, // 0015 GETMBR R4 R0 K2 - 0x8C10092C, // 0016 GETMET R4 R4 K44 - 0x7C100200, // 0017 CALL R4 1 - 0x50140000, // 0018 LDBOOL R5 0 0 - 0x60180010, // 0019 GETGBL R6 G16 - 0x5C1C0800, // 001A MOVE R7 R4 - 0x7C180200, // 001B CALL R6 1 - 0xA8020008, // 001C EXBLK 0 #0026 - 0x5C1C0C00, // 001D MOVE R7 R6 - 0x7C1C0000, // 001E CALL R7 0 - 0x1C200E03, // 001F EQ R8 R7 R3 - 0x78220001, // 0020 JMPF R8 #0023 - 0x50140200, // 0021 LDBOOL R5 1 0 - 0x70020000, // 0022 JMP #0024 - 0x7001FFF8, // 0023 JMP #001D - 0xA8040001, // 0024 EXBLK 1 1 - 0x70020002, // 0025 JMP #0029 - 0x58180015, // 0026 LDCONST R6 K21 - 0xAC180200, // 0027 CATCH R6 1 0 - 0xB0080000, // 0028 RAISE 2 R0 R0 - 0x5C180A00, // 0029 MOVE R6 R5 - 0x741A0003, // 002A JMPT R6 #002F - 0x88180102, // 002B GETMBR R6 R0 K2 - 0x8C180D2D, // 002C GETMET R6 R6 K45 - 0x5C200600, // 002D MOVE R8 R3 - 0x7C180400, // 002E CALL R6 2 - 0x8C180710, // 002F GETMET R6 R3 K16 - 0x5C200200, // 0030 MOVE R8 R1 - 0x7C180400, // 0031 CALL R6 2 - 0x7002001E, // 0032 JMP #0052 - 0x940C0505, // 0033 GETIDX R3 R2 K5 - 0x1C0C0706, // 0034 EQ R3 R3 K6 - 0x780E0000, // 0035 JMPF R3 #0037 - 0x7002001A, // 0036 JMP #0052 - 0x940C0505, // 0037 GETIDX R3 R2 K5 - 0x1C0C0714, // 0038 EQ R3 R3 K20 - 0x780E0005, // 0039 JMPF R3 #0040 - 0x940C050E, // 003A GETIDX R3 R2 K14 - 0x88100102, // 003B GETMBR R4 R0 K2 - 0x8C100911, // 003C GETMET R4 R4 K17 - 0x5C180600, // 003D MOVE R6 R3 - 0x7C100400, // 003E CALL R4 2 - 0x70020011, // 003F JMP #0052 - 0x940C0505, // 0040 GETIDX R3 R2 K5 - 0x1C0C0709, // 0041 EQ R3 R3 K9 - 0x780E0007, // 0042 JMPF R3 #004B - 0x940C0509, // 0043 GETIDX R3 R2 K9 - 0x4C100000, // 0044 LDNIL R4 - 0x20100604, // 0045 NE R4 R3 R4 - 0x78120002, // 0046 JMPF R4 #004A - 0x5C100600, // 0047 MOVE R4 R3 - 0x88140102, // 0048 GETMBR R5 R0 K2 - 0x7C100200, // 0049 CALL R4 1 - 0x70020006, // 004A JMP #0052 - 0x940C0505, // 004B GETIDX R3 R2 K5 - 0x1C0C0712, // 004C EQ R3 R3 K18 - 0x780E0003, // 004D JMPF R3 #0052 - 0x940C0513, // 004E GETIDX R3 R2 K19 - 0x8C100710, // 004F GETMET R4 R3 K16 - 0x5C180200, // 0050 MOVE R6 R1 - 0x7C100400, // 0051 CALL R4 2 - 0x90021E01, // 0052 SETMBR R0 K15 R1 - 0x80000000, // 0053 RET 0 + ( &(const binstruction[ 8]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0x600C0009, // 0002 GETGBL R3 G9 + 0x8C100507, // 0003 GETMET R4 R2 K7 + 0x5C180000, // 0004 MOVE R6 R0 + 0x7C100400, // 0005 CALL R4 2 + 0x7C0C0200, // 0006 CALL R3 1 + 0x80040600, // 0007 RET 1 R3 }) ) ); @@ -15615,42 +15202,206 @@ be_local_closure(class_SequenceManager_execute_current_step, /* name */ /******************************************************************** -** Solidified class: SequenceManager +** Solidified function: abs ********************************************************************/ -extern const bclass be_class_ParameterizedObject; -be_local_class(SequenceManager, - 8, - &be_class_ParameterizedObject, - be_nested_map(26, +be_local_closure(class_AnimationMath_abs, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_AnimationMath, /* shared constants */ + be_str_weak(abs), + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0x8C0C0508, // 0002 GETMET R3 R2 K8 + 0x5C140000, // 0003 MOVE R5 R0 + 0x7C0C0400, // 0004 CALL R3 2 + 0x80040600, // 0005 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: cos +********************************************************************/ +be_local_closure(class_AnimationMath_cos, /* name */ + be_nested_proto( + 11, /* nstack */ + 1, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_AnimationMath, /* shared constants */ + be_str_weak(cos), + &be_const_str_solidified, + ( &(const binstruction[23]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xB80A1200, // 0001 GETNGBL R2 K9 + 0x8C08050A, // 0002 GETMET R2 R2 K10 + 0x5C100000, // 0003 MOVE R4 R0 + 0x58140003, // 0004 LDCONST R5 K3 + 0x541A00FE, // 0005 LDINT R6 255 + 0x581C0003, // 0006 LDCONST R7 K3 + 0x54227FFE, // 0007 LDINT R8 32767 + 0x7C080C00, // 0008 CALL R2 6 + 0xB80E1200, // 0009 GETNGBL R3 K9 + 0x8C0C070B, // 000A GETMET R3 R3 K11 + 0x54161FFF, // 000B LDINT R5 8192 + 0x04140405, // 000C SUB R5 R2 R5 + 0x7C0C0400, // 000D CALL R3 2 + 0xB8121200, // 000E GETNGBL R4 K9 + 0x8C10090A, // 000F GETMET R4 R4 K10 + 0x5C180600, // 0010 MOVE R6 R3 + 0x541DEFFF, // 0011 LDINT R7 -4096 + 0x54220FFF, // 0012 LDINT R8 4096 + 0x5425FF00, // 0013 LDINT R9 -255 + 0x542A00FE, // 0014 LDINT R10 255 + 0x7C100C00, // 0015 CALL R4 6 + 0x80040800, // 0016 RET 1 R4 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: sin +********************************************************************/ +be_local_closure(class_AnimationMath_sin, /* name */ + be_nested_proto( + 11, /* nstack */ + 1, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_AnimationMath, /* shared constants */ + be_str_weak(sin), + &be_const_str_solidified, + ( &(const binstruction[22]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xB80A1200, // 0001 GETNGBL R2 K9 + 0x8C08050A, // 0002 GETMET R2 R2 K10 + 0x5C100000, // 0003 MOVE R4 R0 + 0x58140003, // 0004 LDCONST R5 K3 + 0x541A00FE, // 0005 LDINT R6 255 + 0x581C0003, // 0006 LDCONST R7 K3 + 0x54227FFE, // 0007 LDINT R8 32767 + 0x7C080C00, // 0008 CALL R2 6 + 0xB80E1200, // 0009 GETNGBL R3 K9 + 0x8C0C070B, // 000A GETMET R3 R3 K11 + 0x5C140400, // 000B MOVE R5 R2 + 0x7C0C0400, // 000C CALL R3 2 + 0xB8121200, // 000D GETNGBL R4 K9 + 0x8C10090A, // 000E GETMET R4 R4 K10 + 0x5C180600, // 000F MOVE R6 R3 + 0x541DEFFF, // 0010 LDINT R7 -4096 + 0x54220FFF, // 0011 LDINT R8 4096 + 0x5425FF00, // 0012 LDINT R9 -255 + 0x542A00FE, // 0013 LDINT R10 255 + 0x7C100C00, // 0014 CALL R4 6 + 0x80040800, // 0015 RET 1 R4 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: scale +********************************************************************/ +be_local_closure(class_AnimationMath_scale, /* name */ + be_nested_proto( + 13, /* nstack */ + 5, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_AnimationMath, /* shared constants */ + be_str_weak(scale), + &be_const_str_solidified, + ( &(const binstruction[10]) { /* code */ + 0x58140000, // 0000 LDCONST R5 K0 + 0xB81A1200, // 0001 GETNGBL R6 K9 + 0x8C180D0A, // 0002 GETMET R6 R6 K10 + 0x5C200000, // 0003 MOVE R8 R0 + 0x5C240200, // 0004 MOVE R9 R1 + 0x5C280400, // 0005 MOVE R10 R2 + 0x5C2C0600, // 0006 MOVE R11 R3 + 0x5C300800, // 0007 MOVE R12 R4 + 0x7C180C00, // 0008 CALL R6 6 + 0x80040C00, // 0009 RET 1 R6 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: min +********************************************************************/ +be_local_closure(class_AnimationMath_min, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 13, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_AnimationMath, /* shared constants */ + be_str_weak(min), + &be_const_str_solidified, + ( &(const binstruction[ 7]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0x600C0016, // 0002 GETGBL R3 G22 + 0x8810050C, // 0003 GETMBR R4 R2 K12 + 0x5C140000, // 0004 MOVE R5 R0 + 0x7C0C0400, // 0005 CALL R3 2 + 0x80040600, // 0006 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: AnimationMath +********************************************************************/ +be_local_class(AnimationMath, + 0, + NULL, + be_nested_map(8, ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(execute_current_step, -1), be_const_closure(class_SequenceManager_execute_current_step_closure) }, - { be_const_key_weak(current_iteration, -1), be_const_var(6) }, - { be_const_key_weak(steps, -1), be_const_var(4) }, - { be_const_key_weak(tostring, -1), be_const_closure(class_SequenceManager_tostring_closure) }, - { be_const_key_weak(step_index, -1), be_const_var(2) }, - { be_const_key_weak(start, -1), be_const_closure(class_SequenceManager_start_closure) }, - { be_const_key_weak(stop_all_subsequences, 1), be_const_closure(class_SequenceManager_stop_all_subsequences_closure) }, - { be_const_key_weak(push_play_step, -1), be_const_closure(class_SequenceManager_push_play_step_closure) }, - { be_const_key_weak(complete_iteration, -1), be_const_closure(class_SequenceManager_complete_iteration_closure) }, - { be_const_key_weak(is_repeat_sequence, -1), be_const_var(7) }, - { be_const_key_weak(stop, -1), be_const_closure(class_SequenceManager_stop_closure) }, - { be_const_key_weak(push_closure_step, -1), be_const_closure(class_SequenceManager_push_closure_step_closure) }, - { be_const_key_weak(push_wait_step, 23), be_const_closure(class_SequenceManager_push_wait_step_closure) }, - { be_const_key_weak(push_repeat_subsequence, 3), be_const_closure(class_SequenceManager_push_repeat_subsequence_closure) }, - { be_const_key_weak(sequence_state, 8), be_const_var(1) }, - { be_const_key_weak(is_sequence_running, -1), be_const_closure(class_SequenceManager_is_sequence_running_closure) }, - { be_const_key_weak(push_step, -1), be_const_closure(class_SequenceManager_push_step_closure) }, - { be_const_key_weak(active_sequence, -1), be_const_var(0) }, - { be_const_key_weak(step_start_time, 11), be_const_var(3) }, - { be_const_key_weak(init, 10), be_const_closure(class_SequenceManager_init_closure) }, - { be_const_key_weak(advance_to_next_step, -1), be_const_closure(class_SequenceManager_advance_to_next_step_closure) }, - { be_const_key_weak(execute_closure_steps_batch, 5), be_const_closure(class_SequenceManager_execute_closure_steps_batch_closure) }, - { be_const_key_weak(get_resolved_repeat_count, 4), be_const_closure(class_SequenceManager_get_resolved_repeat_count_closure) }, - { be_const_key_weak(update, -1), be_const_closure(class_SequenceManager_update_closure) }, - { be_const_key_weak(repeat_count, -1), be_const_var(5) }, - { be_const_key_weak(execute_closure_steps_batch_atomic, 0), be_const_closure(class_SequenceManager_execute_closure_steps_batch_atomic_closure) }, + { be_const_key_weak(min, -1), be_const_static_closure(class_AnimationMath_min_closure) }, + { be_const_key_weak(max, 2), be_const_static_closure(class_AnimationMath_max_closure) }, + { be_const_key_weak(scale, -1), be_const_static_closure(class_AnimationMath_scale_closure) }, + { be_const_key_weak(round, 6), be_const_static_closure(class_AnimationMath_round_closure) }, + { be_const_key_weak(cos, -1), be_const_static_closure(class_AnimationMath_cos_closure) }, + { be_const_key_weak(sin, -1), be_const_static_closure(class_AnimationMath_sin_closure) }, + { be_const_key_weak(abs, -1), be_const_static_closure(class_AnimationMath_abs_closure) }, + { be_const_key_weak(sqrt, 0), be_const_static_closure(class_AnimationMath_sqrt_closure) }, })), - be_str_weak(SequenceManager) + be_str_weak(AnimationMath) ); /******************************************************************** @@ -15739,9 +15490,9 @@ be_local_closure(smooth, /* name */ /******************************************************************** -** Solidified function: is_value_provider +** Solidified function: ease_out ********************************************************************/ -be_local_closure(is_value_provider, /* name */ +be_local_closure(ease_out, /* name */ be_nested_proto( 4, /* nstack */ 1, /* argc */ @@ -15751,86 +15502,23 @@ be_local_closure(is_value_provider, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ + ( &(const bvalue[ 4]) { /* constants */ /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(value_provider), + /* K1 */ be_nested_str_weak(oscillator_value), + /* K2 */ be_nested_str_weak(form), + /* K3 */ be_nested_str_weak(EASE_OUT), }), - be_str_weak(is_value_provider), + be_str_weak(ease_out), &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x6004000F, // 0000 GETGBL R1 G15 - 0x5C080000, // 0001 MOVE R2 R0 - 0xB80E0000, // 0002 GETNGBL R3 K0 - 0x880C0701, // 0003 GETMBR R3 R3 K1 - 0x7C040400, // 0004 CALL R1 2 - 0x80040200, // 0005 RET 1 R1 - }) - ) -); -/*******************************************************************/ - -// compact class 'FrameBuffer' ktab size: 21, total: 43 (saved 176 bytes) -static const bvalue be_ktab_class_FrameBuffer[21] = { - /* K0 */ be_const_int(0), - /* K1 */ be_nested_str_weak(value_error), - /* K2 */ be_nested_str_weak(width_X20must_X20be_X20positive), - /* K3 */ be_nested_str_weak(width), - /* K4 */ be_nested_str_weak(pixels), - /* K5 */ be_nested_str_weak(resize), - /* K6 */ be_nested_str_weak(clear), - /* K7 */ be_nested_str_weak(int), - /* K8 */ be_nested_str_weak(instance), - /* K9 */ be_nested_str_weak(copy), - /* K10 */ be_nested_str_weak(argument_X20must_X20be_X20either_X20int_X20or_X20instance), - /* K11 */ be_nested_str_weak(index_error), - /* K12 */ be_nested_str_weak(pixel_X20index_X20out_X20of_X20range), - /* K13 */ be_nested_str_weak(set), - /* K14 */ be_nested_str_weak(tohex), - /* K15 */ be_nested_str_weak(FrameBuffer_X28width_X3D_X25s_X2C_X20pixels_X3D_X25s_X29), - /* K16 */ be_nested_str_weak(set_pixel_color), - /* K17 */ be_nested_str_weak(animation), - /* K18 */ be_nested_str_weak(frame_buffer), - /* K19 */ be_nested_str_weak(get), - /* K20 */ be_nested_str_weak(get_pixel_color), -}; - - -extern const bclass be_class_FrameBuffer; - -/******************************************************************** -** Solidified function: resize -********************************************************************/ -be_local_closure(class_FrameBuffer_resize, /* name */ - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(resize), - &be_const_str_solidified, - ( &(const binstruction[17]) { /* code */ - 0x18080300, // 0000 LE R2 R1 K0 - 0x780A0000, // 0001 JMPF R2 #0003 - 0xB0060302, // 0002 RAISE 1 K1 K2 - 0x88080103, // 0003 GETMBR R2 R0 K3 - 0x1C080202, // 0004 EQ R2 R1 R2 - 0x780A0000, // 0005 JMPF R2 #0007 - 0x80000400, // 0006 RET 0 - 0x90020601, // 0007 SETMBR R0 K3 R1 - 0x88080104, // 0008 GETMBR R2 R0 K4 - 0x8C080505, // 0009 GETMET R2 R2 K5 - 0x88100103, // 000A GETMBR R4 R0 K3 - 0x54160003, // 000B LDINT R5 4 - 0x08100805, // 000C MUL R4 R4 R5 - 0x7C080400, // 000D CALL R2 2 - 0x8C080106, // 000E GETMET R2 R0 K6 - 0x7C080200, // 000F CALL R2 1 - 0x80000000, // 0010 RET 0 + ( &(const binstruction[ 8]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0xB80A0000, // 0004 GETNGBL R2 K0 + 0x88080503, // 0005 GETMBR R2 R2 K3 + 0x90060402, // 0006 SETMBR R1 K2 R2 + 0x80040200, // 0007 RET 1 R1 }) ) ); @@ -15838,341 +15526,40 @@ be_local_closure(class_FrameBuffer_resize, /* name */ /******************************************************************** -** Solidified function: clear +** Solidified function: triangle ********************************************************************/ -be_local_closure(class_FrameBuffer_clear, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(clear), - &be_const_str_solidified, - ( &(const binstruction[18]) { /* code */ - 0x88040104, // 0000 GETMBR R1 R0 K4 - 0x8C040306, // 0001 GETMET R1 R1 K6 - 0x7C040200, // 0002 CALL R1 1 - 0x6004000C, // 0003 GETGBL R1 G12 - 0x88080104, // 0004 GETMBR R2 R0 K4 - 0x7C040200, // 0005 CALL R1 1 - 0x88080103, // 0006 GETMBR R2 R0 K3 - 0x540E0003, // 0007 LDINT R3 4 - 0x08080403, // 0008 MUL R2 R2 R3 - 0x20040202, // 0009 NE R1 R1 R2 - 0x78060005, // 000A JMPF R1 #0011 - 0x88040104, // 000B GETMBR R1 R0 K4 - 0x8C040305, // 000C GETMET R1 R1 K5 - 0x880C0103, // 000D GETMBR R3 R0 K3 - 0x54120003, // 000E LDINT R4 4 - 0x080C0604, // 000F MUL R3 R3 R4 - 0x7C040400, // 0010 CALL R1 2 - 0x80000000, // 0011 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(class_FrameBuffer_init, /* name */ - be_nested_proto( - 7, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(init), - &be_const_str_solidified, - ( &(const binstruction[36]) { /* code */ - 0x60080004, // 0000 GETGBL R2 G4 - 0x5C0C0200, // 0001 MOVE R3 R1 - 0x7C080200, // 0002 CALL R2 1 - 0x1C080507, // 0003 EQ R2 R2 K7 - 0x780A0010, // 0004 JMPF R2 #0016 - 0x5C080200, // 0005 MOVE R2 R1 - 0x180C0500, // 0006 LE R3 R2 K0 - 0x780E0000, // 0007 JMPF R3 #0009 - 0xB0060302, // 0008 RAISE 1 K1 K2 - 0x90020602, // 0009 SETMBR R0 K3 R2 - 0x600C0015, // 000A GETGBL R3 G21 - 0x54120003, // 000B LDINT R4 4 - 0x08100404, // 000C MUL R4 R2 R4 - 0x7C0C0200, // 000D CALL R3 1 - 0x8C100705, // 000E GETMET R4 R3 K5 - 0x541A0003, // 000F LDINT R6 4 - 0x08180406, // 0010 MUL R6 R2 R6 - 0x7C100400, // 0011 CALL R4 2 - 0x90020803, // 0012 SETMBR R0 K4 R3 - 0x8C100106, // 0013 GETMET R4 R0 K6 - 0x7C100200, // 0014 CALL R4 1 - 0x7002000C, // 0015 JMP #0023 - 0x60080004, // 0016 GETGBL R2 G4 - 0x5C0C0200, // 0017 MOVE R3 R1 - 0x7C080200, // 0018 CALL R2 1 - 0x1C080508, // 0019 EQ R2 R2 K8 - 0x780A0006, // 001A JMPF R2 #0022 - 0x88080303, // 001B GETMBR R2 R1 K3 - 0x90020602, // 001C SETMBR R0 K3 R2 - 0x88080304, // 001D GETMBR R2 R1 K4 - 0x8C080509, // 001E GETMET R2 R2 K9 - 0x7C080200, // 001F CALL R2 1 - 0x90020802, // 0020 SETMBR R0 K4 R2 - 0x70020000, // 0021 JMP #0023 - 0xB006030A, // 0022 RAISE 1 K1 K10 - 0x80000000, // 0023 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_pixel_color -********************************************************************/ -be_local_closure(class_FrameBuffer_set_pixel_color, /* name */ - be_nested_proto( - 8, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(set_pixel_color), - &be_const_str_solidified, - ( &(const binstruction[14]) { /* code */ - 0x140C0300, // 0000 LT R3 R1 K0 - 0x740E0002, // 0001 JMPT R3 #0005 - 0x880C0103, // 0002 GETMBR R3 R0 K3 - 0x280C0203, // 0003 GE R3 R1 R3 - 0x780E0000, // 0004 JMPF R3 #0006 - 0xB006170C, // 0005 RAISE 1 K11 K12 - 0x880C0104, // 0006 GETMBR R3 R0 K4 - 0x8C0C070D, // 0007 GETMET R3 R3 K13 - 0x54160003, // 0008 LDINT R5 4 - 0x08140205, // 0009 MUL R5 R1 R5 - 0x5C180400, // 000A MOVE R6 R2 - 0x541E0003, // 000B LDINT R7 4 - 0x7C0C0800, // 000C CALL R3 4 - 0x80000000, // 000D RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: tohex -********************************************************************/ -be_local_closure(class_FrameBuffer_tohex, /* name */ - be_nested_proto( - 3, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(tohex), - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x88040104, // 0000 GETMBR R1 R0 K4 - 0x8C04030E, // 0001 GETMET R1 R1 K14 - 0x7C040200, // 0002 CALL R1 1 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: tostring -********************************************************************/ -be_local_closure(class_FrameBuffer_tostring, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(tostring), - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x60040018, // 0000 GETGBL R1 G24 - 0x5808000F, // 0001 LDCONST R2 K15 - 0x880C0103, // 0002 GETMBR R3 R0 K3 - 0x88100104, // 0003 GETMBR R4 R0 K4 - 0x7C040600, // 0004 CALL R1 3 - 0x80040200, // 0005 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: setitem -********************************************************************/ -be_local_closure(class_FrameBuffer_setitem, /* name */ - be_nested_proto( - 7, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(setitem), - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0x8C0C0110, // 0000 GETMET R3 R0 K16 - 0x5C140200, // 0001 MOVE R5 R1 - 0x5C180400, // 0002 MOVE R6 R2 - 0x7C0C0600, // 0003 CALL R3 3 - 0x80000000, // 0004 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: copy -********************************************************************/ -be_local_closure(class_FrameBuffer_copy, /* name */ +be_local_closure(triangle, /* name */ be_nested_proto( 4, /* nstack */ 1, /* argc */ - 10, /* varg */ + 0, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(copy), + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_str_weak(animation), + /* K1 */ be_nested_str_weak(oscillator_value), + /* K2 */ be_nested_str_weak(form), + /* K3 */ be_nested_str_weak(TRIANGLE), + }), + be_str_weak(triangle), &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0xB8062200, // 0000 GETNGBL R1 K17 - 0x8C040312, // 0001 GETMET R1 R1 K18 + ( &(const binstruction[ 8]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 0x5C0C0000, // 0002 MOVE R3 R0 0x7C040400, // 0003 CALL R1 2 - 0x80040200, // 0004 RET 1 R1 + 0xB80A0000, // 0004 GETNGBL R2 K0 + 0x88080503, // 0005 GETMBR R2 R2 K3 + 0x90060402, // 0006 SETMBR R1 K2 R2 + 0x80040200, // 0007 RET 1 R1 }) ) ); /*******************************************************************/ - -/******************************************************************** -** Solidified function: get_pixel_color -********************************************************************/ -be_local_closure(class_FrameBuffer_get_pixel_color, /* name */ - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(get_pixel_color), - &be_const_str_solidified, - ( &(const binstruction[13]) { /* code */ - 0x14080300, // 0000 LT R2 R1 K0 - 0x740A0002, // 0001 JMPT R2 #0005 - 0x88080103, // 0002 GETMBR R2 R0 K3 - 0x28080202, // 0003 GE R2 R1 R2 - 0x780A0000, // 0004 JMPF R2 #0006 - 0xB006170C, // 0005 RAISE 1 K11 K12 - 0x88080104, // 0006 GETMBR R2 R0 K4 - 0x8C080513, // 0007 GETMET R2 R2 K19 - 0x54120003, // 0008 LDINT R4 4 - 0x08100204, // 0009 MUL R4 R1 R4 - 0x54160003, // 000A LDINT R5 4 - 0x7C080600, // 000B CALL R2 3 - 0x80040400, // 000C RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: item -********************************************************************/ -be_local_closure(class_FrameBuffer_item, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_FrameBuffer, /* shared constants */ - be_str_weak(item), - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C080114, // 0000 GETMET R2 R0 K20 - 0x5C100200, // 0001 MOVE R4 R1 - 0x7C080400, // 0002 CALL R2 2 - 0x80040400, // 0003 RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: FrameBuffer -********************************************************************/ -extern const bclass be_class_FrameBufferNtv; -be_local_class(FrameBuffer, - 2, - &be_class_FrameBufferNtv, - be_nested_map(12, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(pixels, -1), be_const_var(0) }, - { be_const_key_weak(resize, 6), be_const_closure(class_FrameBuffer_resize_closure) }, - { be_const_key_weak(clear, -1), be_const_closure(class_FrameBuffer_clear_closure) }, - { be_const_key_weak(init, -1), be_const_closure(class_FrameBuffer_init_closure) }, - { be_const_key_weak(set_pixel_color, -1), be_const_closure(class_FrameBuffer_set_pixel_color_closure) }, - { be_const_key_weak(tohex, -1), be_const_closure(class_FrameBuffer_tohex_closure) }, - { be_const_key_weak(tostring, -1), be_const_closure(class_FrameBuffer_tostring_closure) }, - { be_const_key_weak(copy, -1), be_const_closure(class_FrameBuffer_copy_closure) }, - { be_const_key_weak(setitem, 9), be_const_closure(class_FrameBuffer_setitem_closure) }, - { be_const_key_weak(get_pixel_color, 7), be_const_closure(class_FrameBuffer_get_pixel_color_closure) }, - { be_const_key_weak(item, -1), be_const_closure(class_FrameBuffer_item_closure) }, - { be_const_key_weak(width, -1), be_const_var(1) }, - })), - be_str_weak(FrameBuffer) -); // compact class 'StaticColorProvider' ktab size: 4, total: 8 (saved 32 bytes) static const bvalue be_ktab_class_StaticColorProvider[4] = { /* K0 */ be_nested_str_weak(color), @@ -16899,43 +16286,582 @@ be_local_class(EventHandler, })), be_str_weak(EventHandler) ); +// compact class 'EventManager' ktab size: 30, total: 61 (saved 248 bytes) +static const bvalue be_ktab_class_EventManager[30] = { + /* K0 */ be_nested_str_weak(event_name), + /* K1 */ be_nested_str_weak(_X2A), + /* K2 */ be_nested_str_weak(global_handlers), + /* K3 */ be_nested_str_weak(find), + /* K4 */ be_nested_str_weak(remove), + /* K5 */ be_nested_str_weak(handlers), + /* K6 */ be_nested_str_weak(set_active), + /* K7 */ be_nested_str_weak(stop_iteration), + /* K8 */ be_nested_str_weak(push), + /* K9 */ be_nested_str_weak(get_info), + /* K10 */ be_nested_str_weak(keys), + /* K11 */ be_nested_str_weak(event_queue), + /* K12 */ be_nested_str_weak(is_processing), + /* K13 */ be_nested_str_weak(clear), + /* K14 */ be_const_int(1), + /* K15 */ be_const_int(0), + /* K16 */ be_nested_str_weak(priority), + /* K17 */ be_nested_str_weak(animation), + /* K18 */ be_nested_str_weak(event_handler), + /* K19 */ be_nested_str_weak(_sort_handlers), + /* K20 */ be_nested_str_weak(contains), + /* K21 */ be_nested_str_weak(name), + /* K22 */ be_nested_str_weak(data), + /* K23 */ be_nested_str_weak(is_active), + /* K24 */ be_nested_str_weak(execute), + /* K25 */ be_nested_str_weak(Event_X20processing_X20error_X3A), + /* K26 */ be_nested_str_weak(_process_queued_events), + /* K27 */ be_nested_str_weak(size), + /* K28 */ be_nested_str_weak(pop), + /* K29 */ be_nested_str_weak(trigger_event), +}; + + +extern const bclass be_class_EventManager; /******************************************************************** -** Solidified function: cosine_osc +** Solidified function: unregister_handler ********************************************************************/ -be_local_closure(cosine_osc, /* name */ +be_local_closure(class_EventManager_unregister_handler, /* name */ be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ + 7, /* nstack */ + 2, /* argc */ + 10, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 4]) { /* constants */ - /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(oscillator_value), - /* K2 */ be_nested_str_weak(form), - /* K3 */ be_nested_str_weak(COSINE), - }), - be_str_weak(cosine_osc), + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(unregister_handler), &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0xB80A0000, // 0004 GETNGBL R2 K0 - 0x88080503, // 0005 GETMBR R2 R2 K3 - 0x90060402, // 0006 SETMBR R1 K2 R2 - 0x80040200, // 0007 RET 1 R1 + ( &(const binstruction[32]) { /* code */ + 0x88080300, // 0000 GETMBR R2 R1 K0 + 0x1C080501, // 0001 EQ R2 R2 K1 + 0x780A000B, // 0002 JMPF R2 #000F + 0x88080102, // 0003 GETMBR R2 R0 K2 + 0x8C080503, // 0004 GETMET R2 R2 K3 + 0x5C100200, // 0005 MOVE R4 R1 + 0x7C080400, // 0006 CALL R2 2 + 0x4C0C0000, // 0007 LDNIL R3 + 0x200C0403, // 0008 NE R3 R2 R3 + 0x780E0003, // 0009 JMPF R3 #000E + 0x880C0102, // 000A GETMBR R3 R0 K2 + 0x8C0C0704, // 000B GETMET R3 R3 K4 + 0x5C140400, // 000C MOVE R5 R2 + 0x7C0C0400, // 000D CALL R3 2 + 0x7002000F, // 000E JMP #001F + 0x88080105, // 000F GETMBR R2 R0 K5 + 0x8C080503, // 0010 GETMET R2 R2 K3 + 0x88100300, // 0011 GETMBR R4 R1 K0 + 0x7C080400, // 0012 CALL R2 2 + 0x4C0C0000, // 0013 LDNIL R3 + 0x200C0403, // 0014 NE R3 R2 R3 + 0x780E0008, // 0015 JMPF R3 #001F + 0x8C0C0503, // 0016 GETMET R3 R2 K3 + 0x5C140200, // 0017 MOVE R5 R1 + 0x7C0C0400, // 0018 CALL R3 2 + 0x4C100000, // 0019 LDNIL R4 + 0x20100604, // 001A NE R4 R3 R4 + 0x78120002, // 001B JMPF R4 #001F + 0x8C100504, // 001C GETMET R4 R2 K4 + 0x5C180600, // 001D MOVE R6 R3 + 0x7C100400, // 001E CALL R4 2 + 0x80000000, // 001F RET 0 }) ) ); /*******************************************************************/ +/******************************************************************** +** Solidified function: set_event_active +********************************************************************/ +be_local_closure(class_EventManager_set_event_active, /* name */ + be_nested_proto( + 9, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(set_event_active), + &be_const_str_solidified, + ( &(const binstruction[21]) { /* code */ + 0x880C0105, // 0000 GETMBR R3 R0 K5 + 0x8C0C0703, // 0001 GETMET R3 R3 K3 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C0C0400, // 0003 CALL R3 2 + 0x4C100000, // 0004 LDNIL R4 + 0x20100604, // 0005 NE R4 R3 R4 + 0x7812000C, // 0006 JMPF R4 #0014 + 0x60100010, // 0007 GETGBL R4 G16 + 0x5C140600, // 0008 MOVE R5 R3 + 0x7C100200, // 0009 CALL R4 1 + 0xA8020005, // 000A EXBLK 0 #0011 + 0x5C140800, // 000B MOVE R5 R4 + 0x7C140000, // 000C CALL R5 0 + 0x8C180B06, // 000D GETMET R6 R5 K6 + 0x5C200400, // 000E MOVE R8 R2 + 0x7C180400, // 000F CALL R6 2 + 0x7001FFF9, // 0010 JMP #000B + 0x58100007, // 0011 LDCONST R4 K7 + 0xAC100200, // 0012 CATCH R4 1 0 + 0xB0080000, // 0013 RAISE 2 R0 R0 + 0x80000000, // 0014 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_handlers +********************************************************************/ +be_local_closure(class_EventManager_get_handlers, /* name */ + be_nested_proto( + 10, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(get_handlers), + &be_const_str_solidified, + ( &(const binstruction[38]) { /* code */ + 0x60080012, // 0000 GETGBL R2 G18 + 0x7C080000, // 0001 CALL R2 0 + 0x600C0010, // 0002 GETGBL R3 G16 + 0x88100102, // 0003 GETMBR R4 R0 K2 + 0x7C0C0200, // 0004 CALL R3 1 + 0xA8020006, // 0005 EXBLK 0 #000D + 0x5C100600, // 0006 MOVE R4 R3 + 0x7C100000, // 0007 CALL R4 0 + 0x8C140508, // 0008 GETMET R5 R2 K8 + 0x8C1C0909, // 0009 GETMET R7 R4 K9 + 0x7C1C0200, // 000A CALL R7 1 + 0x7C140400, // 000B CALL R5 2 + 0x7001FFF8, // 000C JMP #0006 + 0x580C0007, // 000D LDCONST R3 K7 + 0xAC0C0200, // 000E CATCH R3 1 0 + 0xB0080000, // 000F RAISE 2 R0 R0 + 0x880C0105, // 0010 GETMBR R3 R0 K5 + 0x8C0C0703, // 0011 GETMET R3 R3 K3 + 0x5C140200, // 0012 MOVE R5 R1 + 0x7C0C0400, // 0013 CALL R3 2 + 0x4C100000, // 0014 LDNIL R4 + 0x20100604, // 0015 NE R4 R3 R4 + 0x7812000D, // 0016 JMPF R4 #0025 + 0x60100010, // 0017 GETGBL R4 G16 + 0x5C140600, // 0018 MOVE R5 R3 + 0x7C100200, // 0019 CALL R4 1 + 0xA8020006, // 001A EXBLK 0 #0022 + 0x5C140800, // 001B MOVE R5 R4 + 0x7C140000, // 001C CALL R5 0 + 0x8C180508, // 001D GETMET R6 R2 K8 + 0x8C200B09, // 001E GETMET R8 R5 K9 + 0x7C200200, // 001F CALL R8 1 + 0x7C180400, // 0020 CALL R6 2 + 0x7001FFF8, // 0021 JMP #001B + 0x58100007, // 0022 LDCONST R4 K7 + 0xAC100200, // 0023 CATCH R4 1 0 + 0xB0080000, // 0024 RAISE 2 R0 R0 + 0x80040400, // 0025 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_registered_events +********************************************************************/ +be_local_closure(class_EventManager_get_registered_events, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(get_registered_events), + &be_const_str_solidified, + ( &(const binstruction[18]) { /* code */ + 0x60040012, // 0000 GETGBL R1 G18 + 0x7C040000, // 0001 CALL R1 0 + 0x60080010, // 0002 GETGBL R2 G16 + 0x880C0105, // 0003 GETMBR R3 R0 K5 + 0x8C0C070A, // 0004 GETMET R3 R3 K10 + 0x7C0C0200, // 0005 CALL R3 1 + 0x7C080200, // 0006 CALL R2 1 + 0xA8020005, // 0007 EXBLK 0 #000E + 0x5C0C0400, // 0008 MOVE R3 R2 + 0x7C0C0000, // 0009 CALL R3 0 + 0x8C100308, // 000A GETMET R4 R1 K8 + 0x5C180600, // 000B MOVE R6 R3 + 0x7C100400, // 000C CALL R4 2 + 0x7001FFF9, // 000D JMP #0008 + 0x58080007, // 000E LDCONST R2 K7 + 0xAC080200, // 000F CATCH R2 1 0 + 0xB0080000, // 0010 RAISE 2 R0 R0 + 0x80040200, // 0011 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(class_EventManager_init, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(init), + &be_const_str_solidified, + ( &(const binstruction[12]) { /* code */ + 0x60040013, // 0000 GETGBL R1 G19 + 0x7C040000, // 0001 CALL R1 0 + 0x90020A01, // 0002 SETMBR R0 K5 R1 + 0x60040012, // 0003 GETGBL R1 G18 + 0x7C040000, // 0004 CALL R1 0 + 0x90020401, // 0005 SETMBR R0 K2 R1 + 0x60040012, // 0006 GETGBL R1 G18 + 0x7C040000, // 0007 CALL R1 0 + 0x90021601, // 0008 SETMBR R0 K11 R1 + 0x50040000, // 0009 LDBOOL R1 0 0 + 0x90021801, // 000A SETMBR R0 K12 R1 + 0x80000000, // 000B RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: clear_all_handlers +********************************************************************/ +be_local_closure(class_EventManager_clear_all_handlers, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(clear_all_handlers), + &be_const_str_solidified, + ( &(const binstruction[10]) { /* code */ + 0x88040105, // 0000 GETMBR R1 R0 K5 + 0x8C04030D, // 0001 GETMET R1 R1 K13 + 0x7C040200, // 0002 CALL R1 1 + 0x88040102, // 0003 GETMBR R1 R0 K2 + 0x8C04030D, // 0004 GETMET R1 R1 K13 + 0x7C040200, // 0005 CALL R1 1 + 0x8804010B, // 0006 GETMBR R1 R0 K11 + 0x8C04030D, // 0007 GETMET R1 R1 K13 + 0x7C040200, // 0008 CALL R1 1 + 0x80000000, // 0009 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: _sort_handlers +********************************************************************/ +be_local_closure(class_EventManager__sort_handlers, /* name */ + be_nested_proto( + 8, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(_sort_handlers), + &be_const_str_solidified, + ( &(const binstruction[31]) { /* code */ + 0x60080010, // 0000 GETGBL R2 G16 + 0x600C000C, // 0001 GETGBL R3 G12 + 0x5C100200, // 0002 MOVE R4 R1 + 0x7C0C0200, // 0003 CALL R3 1 + 0x040C070E, // 0004 SUB R3 R3 K14 + 0x400E1C03, // 0005 CONNECT R3 K14 R3 + 0x7C080200, // 0006 CALL R2 1 + 0xA8020012, // 0007 EXBLK 0 #001B + 0x5C0C0400, // 0008 MOVE R3 R2 + 0x7C0C0000, // 0009 CALL R3 0 + 0x94100203, // 000A GETIDX R4 R1 R3 + 0x5C140600, // 000B MOVE R5 R3 + 0x24180B0F, // 000C GT R6 R5 K15 + 0x781A000A, // 000D JMPF R6 #0019 + 0x04180B0E, // 000E SUB R6 R5 K14 + 0x94180206, // 000F GETIDX R6 R1 R6 + 0x88180D10, // 0010 GETMBR R6 R6 K16 + 0x881C0910, // 0011 GETMBR R7 R4 K16 + 0x14180C07, // 0012 LT R6 R6 R7 + 0x781A0004, // 0013 JMPF R6 #0019 + 0x04180B0E, // 0014 SUB R6 R5 K14 + 0x94180206, // 0015 GETIDX R6 R1 R6 + 0x98040A06, // 0016 SETIDX R1 R5 R6 + 0x04140B0E, // 0017 SUB R5 R5 K14 + 0x7001FFF2, // 0018 JMP #000C + 0x98040A04, // 0019 SETIDX R1 R5 R4 + 0x7001FFEC, // 001A JMP #0008 + 0x58080007, // 001B LDCONST R2 K7 + 0xAC080200, // 001C CATCH R2 1 0 + 0xB0080000, // 001D RAISE 2 R0 R0 + 0x80000000, // 001E RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: register_handler +********************************************************************/ +be_local_closure(class_EventManager_register_handler, /* name */ + be_nested_proto( + 13, /* nstack */ + 6, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(register_handler), + &be_const_str_solidified, + ( &(const binstruction[37]) { /* code */ + 0xB81A2200, // 0000 GETNGBL R6 K17 + 0x8C180D12, // 0001 GETMET R6 R6 K18 + 0x5C200200, // 0002 MOVE R8 R1 + 0x5C240400, // 0003 MOVE R9 R2 + 0x5C280600, // 0004 MOVE R10 R3 + 0x5C2C0800, // 0005 MOVE R11 R4 + 0x5C300A00, // 0006 MOVE R12 R5 + 0x7C180C00, // 0007 CALL R6 6 + 0x1C1C0301, // 0008 EQ R7 R1 K1 + 0x781E0007, // 0009 JMPF R7 #0012 + 0x881C0102, // 000A GETMBR R7 R0 K2 + 0x8C1C0F08, // 000B GETMET R7 R7 K8 + 0x5C240C00, // 000C MOVE R9 R6 + 0x7C1C0400, // 000D CALL R7 2 + 0x8C1C0113, // 000E GETMET R7 R0 K19 + 0x88240102, // 000F GETMBR R9 R0 K2 + 0x7C1C0400, // 0010 CALL R7 2 + 0x70020011, // 0011 JMP #0024 + 0x881C0105, // 0012 GETMBR R7 R0 K5 + 0x8C1C0F14, // 0013 GETMET R7 R7 K20 + 0x5C240200, // 0014 MOVE R9 R1 + 0x7C1C0400, // 0015 CALL R7 2 + 0x741E0003, // 0016 JMPT R7 #001B + 0x881C0105, // 0017 GETMBR R7 R0 K5 + 0x60200012, // 0018 GETGBL R8 G18 + 0x7C200000, // 0019 CALL R8 0 + 0x981C0208, // 001A SETIDX R7 R1 R8 + 0x881C0105, // 001B GETMBR R7 R0 K5 + 0x941C0E01, // 001C GETIDX R7 R7 R1 + 0x8C1C0F08, // 001D GETMET R7 R7 K8 + 0x5C240C00, // 001E MOVE R9 R6 + 0x7C1C0400, // 001F CALL R7 2 + 0x8C1C0113, // 0020 GETMET R7 R0 K19 + 0x88240105, // 0021 GETMBR R9 R0 K5 + 0x94241201, // 0022 GETIDX R9 R9 R1 + 0x7C1C0400, // 0023 CALL R7 2 + 0x80040C00, // 0024 RET 1 R6 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: trigger_event +********************************************************************/ +be_local_closure(class_EventManager_trigger_event, /* name */ + be_nested_proto( + 9, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(trigger_event), + &be_const_str_solidified, + ( &(const binstruction[69]) { /* code */ + 0x880C010C, // 0000 GETMBR R3 R0 K12 + 0x780E0007, // 0001 JMPF R3 #000A + 0x880C010B, // 0002 GETMBR R3 R0 K11 + 0x8C0C0708, // 0003 GETMET R3 R3 K8 + 0x60140013, // 0004 GETGBL R5 G19 + 0x7C140000, // 0005 CALL R5 0 + 0x98162A01, // 0006 SETIDX R5 K21 R1 + 0x98162C02, // 0007 SETIDX R5 K22 R2 + 0x7C0C0400, // 0008 CALL R3 2 + 0x80000600, // 0009 RET 0 + 0x500C0200, // 000A LDBOOL R3 1 0 + 0x90021803, // 000B SETMBR R0 K12 R3 + 0xA8020029, // 000C EXBLK 0 #0037 + 0x600C0010, // 000D GETGBL R3 G16 + 0x88100102, // 000E GETMBR R4 R0 K2 + 0x7C0C0200, // 000F CALL R3 1 + 0xA802000A, // 0010 EXBLK 0 #001C + 0x5C100600, // 0011 MOVE R4 R3 + 0x7C100000, // 0012 CALL R4 0 + 0x88140917, // 0013 GETMBR R5 R4 K23 + 0x78160005, // 0014 JMPF R5 #001B + 0x8C140918, // 0015 GETMET R5 R4 K24 + 0x601C0013, // 0016 GETGBL R7 G19 + 0x7C1C0000, // 0017 CALL R7 0 + 0x981E0001, // 0018 SETIDX R7 K0 R1 + 0x981E2C02, // 0019 SETIDX R7 K22 R2 + 0x7C140400, // 001A CALL R5 2 + 0x7001FFF4, // 001B JMP #0011 + 0x580C0007, // 001C LDCONST R3 K7 + 0xAC0C0200, // 001D CATCH R3 1 0 + 0xB0080000, // 001E RAISE 2 R0 R0 + 0x880C0105, // 001F GETMBR R3 R0 K5 + 0x8C0C0703, // 0020 GETMET R3 R3 K3 + 0x5C140200, // 0021 MOVE R5 R1 + 0x7C0C0400, // 0022 CALL R3 2 + 0x4C100000, // 0023 LDNIL R4 + 0x20100604, // 0024 NE R4 R3 R4 + 0x7812000E, // 0025 JMPF R4 #0035 + 0x60100010, // 0026 GETGBL R4 G16 + 0x5C140600, // 0027 MOVE R5 R3 + 0x7C100200, // 0028 CALL R4 1 + 0xA8020007, // 0029 EXBLK 0 #0032 + 0x5C140800, // 002A MOVE R5 R4 + 0x7C140000, // 002B CALL R5 0 + 0x88180B17, // 002C GETMBR R6 R5 K23 + 0x781A0002, // 002D JMPF R6 #0031 + 0x8C180B18, // 002E GETMET R6 R5 K24 + 0x5C200400, // 002F MOVE R8 R2 + 0x7C180400, // 0030 CALL R6 2 + 0x7001FFF7, // 0031 JMP #002A + 0x58100007, // 0032 LDCONST R4 K7 + 0xAC100200, // 0033 CATCH R4 1 0 + 0xB0080000, // 0034 RAISE 2 R0 R0 + 0xA8040001, // 0035 EXBLK 1 1 + 0x70020008, // 0036 JMP #0040 + 0xAC0C0002, // 0037 CATCH R3 0 2 + 0x70020005, // 0038 JMP #003F + 0x60140001, // 0039 GETGBL R5 G1 + 0x58180019, // 003A LDCONST R6 K25 + 0x5C1C0600, // 003B MOVE R7 R3 + 0x5C200800, // 003C MOVE R8 R4 + 0x7C140600, // 003D CALL R5 3 + 0x70020000, // 003E JMP #0040 + 0xB0080000, // 003F RAISE 2 R0 R0 + 0x500C0000, // 0040 LDBOOL R3 0 0 + 0x90021803, // 0041 SETMBR R0 K12 R3 + 0x8C0C011A, // 0042 GETMET R3 R0 K26 + 0x7C0C0200, // 0043 CALL R3 1 + 0x80000000, // 0044 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: _process_queued_events +********************************************************************/ +be_local_closure(class_EventManager__process_queued_events, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_EventManager, /* shared constants */ + be_str_weak(_process_queued_events), + &be_const_str_solidified, + ( &(const binstruction[15]) { /* code */ + 0x8804010B, // 0000 GETMBR R1 R0 K11 + 0x8C04031B, // 0001 GETMET R1 R1 K27 + 0x7C040200, // 0002 CALL R1 1 + 0x2404030F, // 0003 GT R1 R1 K15 + 0x78060008, // 0004 JMPF R1 #000E + 0x8804010B, // 0005 GETMBR R1 R0 K11 + 0x8C04031C, // 0006 GETMET R1 R1 K28 + 0x580C000F, // 0007 LDCONST R3 K15 + 0x7C040400, // 0008 CALL R1 2 + 0x8C08011D, // 0009 GETMET R2 R0 K29 + 0x94100315, // 000A GETIDX R4 R1 K21 + 0x94140316, // 000B GETIDX R5 R1 K22 + 0x7C080600, // 000C CALL R2 3 + 0x7001FFF1, // 000D JMP #0000 + 0x80000000, // 000E RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: EventManager +********************************************************************/ +be_local_class(EventManager, + 4, + NULL, + be_nested_map(14, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key_weak(unregister_handler, -1), be_const_closure(class_EventManager_unregister_handler_closure) }, + { be_const_key_weak(set_event_active, -1), be_const_closure(class_EventManager_set_event_active_closure) }, + { be_const_key_weak(handlers, -1), be_const_var(0) }, + { be_const_key_weak(init, -1), be_const_closure(class_EventManager_init_closure) }, + { be_const_key_weak(trigger_event, -1), be_const_closure(class_EventManager_trigger_event_closure) }, + { be_const_key_weak(get_handlers, 3), be_const_closure(class_EventManager_get_handlers_closure) }, + { be_const_key_weak(clear_all_handlers, -1), be_const_closure(class_EventManager_clear_all_handlers_closure) }, + { be_const_key_weak(event_queue, -1), be_const_var(2) }, + { be_const_key_weak(_sort_handlers, -1), be_const_closure(class_EventManager__sort_handlers_closure) }, + { be_const_key_weak(is_processing, 7), be_const_var(3) }, + { be_const_key_weak(global_handlers, -1), be_const_var(1) }, + { be_const_key_weak(register_handler, -1), be_const_closure(class_EventManager_register_handler_closure) }, + { be_const_key_weak(get_registered_events, 4), be_const_closure(class_EventManager_get_registered_events_closure) }, + { be_const_key_weak(_process_queued_events, -1), be_const_closure(class_EventManager__process_queued_events_closure) }, + })), + be_str_weak(EventManager) +); + /******************************************************************** ** Solidified function: clear_all_event_handlers ********************************************************************/ @@ -17700,9 +17626,9 @@ be_local_closure(twinkle_intense, /* name */ /******************************************************************** -** Solidified function: get_user_function +** Solidified function: cosine_osc ********************************************************************/ -be_local_closure(get_user_function, /* name */ +be_local_closure(cosine_osc, /* name */ be_nested_proto( 4, /* nstack */ 1, /* argc */ @@ -17712,20 +17638,23 @@ be_local_closure(get_user_function, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ + ( &(const bvalue[ 4]) { /* constants */ /* K0 */ be_nested_str_weak(animation), - /* K1 */ be_nested_str_weak(_user_functions), - /* K2 */ be_nested_str_weak(find), + /* K1 */ be_nested_str_weak(oscillator_value), + /* K2 */ be_nested_str_weak(form), + /* K3 */ be_nested_str_weak(COSINE), }), - be_str_weak(get_user_function), + be_str_weak(cosine_osc), &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ + ( &(const binstruction[ 8]) { /* code */ 0xB8060000, // 0000 GETNGBL R1 K0 - 0x88040301, // 0001 GETMBR R1 R1 K1 - 0x8C040302, // 0002 GETMET R1 R1 K2 - 0x5C0C0000, // 0003 MOVE R3 R0 - 0x7C040400, // 0004 CALL R1 2 - 0x80040200, // 0005 RET 1 R1 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0xB80A0000, // 0004 GETNGBL R2 K0 + 0x88080503, // 0005 GETMBR R2 R2 K3 + 0x90060402, // 0006 SETMBR R1 K2 R2 + 0x80040200, // 0007 RET 1 R1 }) ) ); @@ -19038,104 +18967,103 @@ be_local_closure(register_user_function, /* name */ ********************************************************************/ be_local_module(animation, "animation", - be_nested_map(96, + be_nested_map(95, ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(LINEAR, -1), be_const_int(1) }, - { be_const_key_weak(square, -1), be_const_closure(square_closure) }, + { be_const_key_weak(register_user_function, -1), be_const_closure(register_user_function_closure) }, + { be_const_key_weak(event_handler, -1), be_const_class(be_class_EventHandler) }, + { be_const_key_weak(unregister_event_handler, 35), be_const_closure(unregister_event_handler_closure) }, + { be_const_key_weak(linear, -1), be_const_closure(linear_closure) }, + { be_const_key_weak(parameterized_object, -1), be_const_class(be_class_ParameterizedObject) }, + { be_const_key_weak(triangle, -1), be_const_closure(triangle_closure) }, { be_const_key_weak(value_provider, -1), be_const_class(be_class_ValueProvider) }, - { be_const_key_weak(breathe_animation, -1), be_const_class(be_class_BreatheAnimation) }, - { be_const_key_weak(EASE_OUT, -1), be_const_int(7) }, + { be_const_key_weak(twinkle_classic, 20), be_const_closure(twinkle_classic_closure) }, + { be_const_key_weak(beacon_animation, 11), be_const_class(be_class_BeaconAnimation) }, + { be_const_key_weak(gradient_animation, -1), be_const_class(be_class_GradientAnimation) }, + { be_const_key_weak(gradient_two_color_linear, -1), be_const_closure(gradient_two_color_linear_closure) }, + { be_const_key_weak(wave_animation, 26), be_const_class(be_class_WaveAnimation) }, + { be_const_key_weak(color_cycle, 54), be_const_class(be_class_ColorCycleColorProvider) }, + { be_const_key_weak(create_closure_value, 78), be_const_closure(create_closure_value_closure) }, + { be_const_key_weak(gradient_rainbow_linear, 6), be_const_closure(gradient_rainbow_linear_closure) }, + { be_const_key_weak(engine_proxy, -1), be_const_class(be_class_EngineProxy) }, { be_const_key_weak(pulsating_color, -1), be_const_closure(pulsating_color_provider_closure) }, - { be_const_key_weak(rich_palette_animation, 1), be_const_class(be_class_RichPaletteAnimation) }, - { be_const_key_weak(palette_meter_animation, -1), be_const_class(be_class_GradientMeterAnimation) }, - { be_const_key_weak(noise_animation, -1), be_const_class(be_class_NoiseAnimation) }, - { be_const_key_weak(engine_proxy, 68), be_const_class(be_class_EngineProxy) }, - { be_const_key_weak(enc_params, -1), be_const_closure(encode_constraints_closure) }, - { be_const_key_weak(set_event_active, -1), be_const_closure(set_event_active_closure) }, - { be_const_key_weak(trigger_event, -1), be_const_closure(trigger_event_closure) }, - { be_const_key_weak(get_user_function, 22), be_const_closure(get_user_function_closure) }, - { be_const_key_weak(strip_length, -1), be_const_class(be_class_StripLengthProvider) }, - { be_const_key_weak(unregister_event_handler, -1), be_const_closure(unregister_event_handler_closure) }, - { be_const_key_weak(twinkle_intense, -1), be_const_closure(twinkle_intense_closure) }, - { be_const_key_weak(color_cycle, 31), be_const_class(be_class_ColorCycleColorProvider) }, - { be_const_key_weak(crenel_position_animation, 44), be_const_class(be_class_CrenelPositionAnimation) }, - { be_const_key_weak(twinkle_solid, -1), be_const_closure(twinkle_solid_closure) }, - { be_const_key_weak(parameterized_object, 13), be_const_class(be_class_ParameterizedObject) }, - { be_const_key_weak(gradient_two_color_linear, 91), be_const_closure(gradient_two_color_linear_closure) }, - { be_const_key_weak(_math, -1), be_const_class(be_class_AnimationMath) }, - { be_const_key_weak(is_color_provider, -1), be_const_closure(is_color_provider_closure) }, - { be_const_key_weak(get_event_handlers, 56), be_const_closure(get_event_handlers_closure) }, + { be_const_key_weak(LINEAR, -1), be_const_int(1) }, + { be_const_key_weak(PALETTE_FIRE, 94), be_const_bytes_instance(000000004080000080FF0000C0FF8000FFFFFF00) }, { be_const_key_weak(cosine_osc, -1), be_const_closure(cosine_osc_closure) }, - { be_const_key_weak(breathe_color, 58), be_const_class(be_class_BreatheColorProvider) }, - { be_const_key_weak(event_handler, 45), be_const_class(be_class_EventHandler) }, - { be_const_key_weak(color_provider, 30), be_const_class(be_class_ColorProvider) }, - { be_const_key_weak(SQUARE, -1), be_const_int(3) }, - { be_const_key_weak(twinkle_classic, -1), be_const_closure(twinkle_classic_closure) }, - { be_const_key_weak(frame_buffer, 18), be_const_class(be_class_FrameBuffer) }, - { be_const_key_weak(beacon_animation, -1), be_const_class(be_class_BeaconAnimation) }, - { be_const_key_weak(twinkle_animation, 5), be_const_class(be_class_TwinkleAnimation) }, - { be_const_key_weak(is_value_provider, 73), be_const_closure(is_value_provider_closure) }, - { be_const_key_weak(create_closure_value, -1), be_const_closure(create_closure_value_closure) }, - { be_const_key_weak(register_event_handler, 80), be_const_closure(register_event_handler_closure) }, - { be_const_key_weak(triangle, 85), be_const_closure(triangle_closure) }, - { be_const_key_weak(noise_single_color, 29), be_const_closure(noise_single_color_closure) }, - { be_const_key_weak(rich_palette, -1), be_const_class(be_class_RichPaletteColorProvider) }, - { be_const_key_weak(ELASTIC, -1), be_const_int(8) }, + { be_const_key_weak(twinkle_intense, -1), be_const_closure(twinkle_intense_closure) }, + { be_const_key_weak(BOUNCE, -1), be_const_int(9) }, + { be_const_key_weak(trigger_event, 68), be_const_closure(trigger_event_closure) }, + { be_const_key_weak(twinkle_rainbow, -1), be_const_closure(twinkle_rainbow_closure) }, + { be_const_key_weak(_math, -1), be_const_class(be_class_AnimationMath) }, + { be_const_key_weak(breathe_animation, 19), be_const_class(be_class_BreatheAnimation) }, { be_const_key_weak(ramp, -1), be_const_closure(ramp_closure) }, + { be_const_key_weak(color_provider, -1), be_const_class(be_class_ColorProvider) }, { be_const_key_weak(wave_custom, -1), be_const_closure(wave_custom_closure) }, - { be_const_key_weak(list_user_functions, -1), be_const_closure(list_user_functions_closure) }, - { be_const_key_weak(twinkle_gentle, -1), be_const_closure(twinkle_gentle_closure) }, - { be_const_key_weak(sequence_manager, 74), be_const_class(be_class_SequenceManager) }, - { be_const_key_weak(pulsating_animation, -1), be_const_closure(pulsating_animation_closure) }, - { be_const_key_weak(composite_color, 77), be_const_class(be_class_CompositeColorProvider) }, - { be_const_key_weak(get_registered_events, 50), be_const_closure(get_registered_events_closure) }, - { be_const_key_weak(PALETTE_FIRE, 35), be_const_bytes_instance(000000004080000080FF0000C0FF8000FFFFFF00) }, - { be_const_key_weak(create_engine, 47), be_const_class(be_class_AnimationEngine) }, - { be_const_key_weak(init, -1), be_const_closure(animation_init_closure) }, - { be_const_key_weak(PALETTE_RGB, 48), be_const_bytes_instance(00FF00008000FF00FF0000FF) }, - { be_const_key_weak(ease_in, -1), be_const_closure(ease_in_closure) }, + { be_const_key_weak(resolve, -1), be_const_closure(animation_resolve_closure) }, + { be_const_key_weak(twinkle_solid, -1), be_const_closure(twinkle_solid_closure) }, + { be_const_key_weak(strip_length, -1), be_const_class(be_class_StripLengthProvider) }, + { be_const_key_weak(solid, -1), be_const_closure(solid_closure) }, + { be_const_key_weak(composite_color, 37), be_const_class(be_class_CompositeColorProvider) }, + { be_const_key_weak(twinkle_gentle, 39), be_const_closure(twinkle_gentle_closure) }, + { be_const_key_weak(static_color, -1), be_const_class(be_class_StaticColorProvider) }, + { be_const_key_weak(SQUARE, -1), be_const_int(3) }, + { be_const_key_weak(PALETTE_RAINBOW, -1), be_const_bytes_instance(FFFC0000FFFF8000FFFFFF00FF00FF00FF00FFFFFF0080FFFF8000FFFFFC0000) }, + { be_const_key_weak(ease_out, -1), be_const_closure(ease_out_closure) }, + { be_const_key_weak(ELASTIC, -1), be_const_int(8) }, + { be_const_key_weak(frame_buffer, 44), be_const_class(be_class_FrameBuffer) }, + { be_const_key_weak(closure_value, -1), be_const_class(be_class_ClosureValueProvider) }, + { be_const_key_weak(create_engine, 0), be_const_class(be_class_AnimationEngine) }, + { be_const_key_weak(enc_params, -1), be_const_closure(encode_constraints_closure) }, + { be_const_key_weak(version_string, -1), be_const_closure(animation_version_string_closure) }, + { be_const_key_weak(TRIANGLE, -1), be_const_int(2) }, + { be_const_key_weak(is_color_provider, -1), be_const_closure(is_color_provider_closure) }, + { be_const_key_weak(sequence_manager, -1), be_const_class(be_class_SequenceManager) }, + { be_const_key_weak(oscillator_value, -1), be_const_class(be_class_OscillatorValueProvider) }, + { be_const_key_weak(elastic, 71), be_const_closure(elastic_closure) }, + { be_const_key_weak(set_event_active, -1), be_const_closure(set_event_active_closure) }, + { be_const_key_weak(noise_rainbow, -1), be_const_closure(noise_rainbow_closure) }, + { be_const_key_weak(crenel_position_animation, -1), be_const_class(be_class_CrenelPositionAnimation) }, + { be_const_key_weak(is_value_provider, 45), be_const_closure(is_value_provider_closure) }, + { be_const_key_weak(rich_palette, -1), be_const_class(be_class_RichPaletteColorProvider) }, + { be_const_key_weak(SINE, -1), be_const_int(5) }, + { be_const_key_weak(fire_animation, -1), be_const_class(be_class_FireAnimation) }, + { be_const_key_weak(get_event_handlers, 41), be_const_closure(get_event_handlers_closure) }, + { be_const_key_weak(palette_gradient_animation, -1), be_const_class(be_class_PaletteGradientAnimation) }, + { be_const_key_weak(rich_palette_animation, 91), be_const_class(be_class_RichPaletteAnimation) }, { be_const_key_weak(gradient_rainbow_radial, -1), be_const_closure(gradient_rainbow_radial_closure) }, { be_const_key_weak(VERSION, -1), be_const_int(65536) }, - { be_const_key_weak(SINE, -1), be_const_int(5) }, - { be_const_key_weak(oscillator_value, -1), be_const_class(be_class_OscillatorValueProvider) }, - { be_const_key_weak(rich_palette_rainbow, 33), be_const_closure(rich_palette_rainbow_closure) }, - { be_const_key_weak(wave_single_sine, -1), be_const_closure(wave_single_sine_closure) }, - { be_const_key_weak(SAWTOOTH, 27), be_const_int(1) }, - { be_const_key_weak(bounce, 34), be_const_closure(bounce_closure) }, - { be_const_key_weak(is_user_function, -1), be_const_closure(is_user_function_closure) }, - { be_const_key_weak(EASE_IN, 53), be_const_int(6) }, - { be_const_key_weak(fire_animation, 71), be_const_class(be_class_FireAnimation) }, - { be_const_key_weak(version_string, -1), be_const_closure(animation_version_string_closure) }, - { be_const_key_weak(COSINE, -1), be_const_int(4) }, - { be_const_key_weak(noise_fractal, 70), be_const_closure(noise_fractal_closure) }, - { be_const_key_weak(sawtooth, -1), be_const_closure(sawtooth_closure) }, - { be_const_key_weak(TRIANGLE, -1), be_const_int(2) }, - { be_const_key_weak(resolve, 46), be_const_closure(animation_resolve_closure) }, - { be_const_key_weak(linear, -1), be_const_closure(linear_closure) }, - { be_const_key_weak(elastic, -1), be_const_closure(elastic_closure) }, - { be_const_key_weak(animation, -1), be_const_class(be_class_Animation) }, - { be_const_key_weak(closure_value, 21), be_const_class(be_class_ClosureValueProvider) }, + { be_const_key_weak(noise_fractal, -1), be_const_closure(noise_fractal_closure) }, + { be_const_key_weak(EventManager, -1), be_const_class(be_class_EventManager) }, { be_const_key_weak(wave_rainbow_sine, -1), be_const_closure(wave_rainbow_sine_closure) }, - { be_const_key_weak(noise_rainbow, -1), be_const_closure(noise_rainbow_closure) }, - { be_const_key_weak(solid, 82), be_const_closure(solid_closure) }, - { be_const_key_weak(twinkle_rainbow, -1), be_const_closure(twinkle_rainbow_closure) }, - { be_const_key_weak(smooth, -1), be_const_closure(smooth_closure) }, - { be_const_key_weak(ease_out, -1), be_const_closure(ease_out_closure) }, - { be_const_key_weak(PALETTE_RAINBOW, -1), be_const_bytes_instance(FFFC0000FFFF8000FFFFFF00FF00FF00FF00FFFFFF0080FFFF8000FFFFFC0000) }, + { be_const_key_weak(square, -1), be_const_closure(square_closure) }, + { be_const_key_weak(PALETTE_RGB, -1), be_const_bytes_instance(00FF00008000FF00FF0000FF) }, + { be_const_key_weak(is_user_function, -1), be_const_closure(is_user_function_closure) }, + { be_const_key_weak(twinkle_animation, -1), be_const_class(be_class_TwinkleAnimation) }, + { be_const_key_weak(pulsating_animation, -1), be_const_closure(pulsating_animation_closure) }, + { be_const_key_weak(init, 49), be_const_closure(animation_init_closure) }, + { be_const_key_weak(animation, 74), be_const_class(be_class_Animation) }, + { be_const_key_weak(init_strip, 34), be_const_closure(animation_init_strip_closure) }, + { be_const_key_weak(breathe_color, -1), be_const_class(be_class_BreatheColorProvider) }, + { be_const_key_weak(wave_single_sine, -1), be_const_closure(wave_single_sine_closure) }, + { be_const_key_weak(EASE_OUT, -1), be_const_int(7) }, + { be_const_key_weak(SAWTOOTH, -1), be_const_int(1) }, + { be_const_key_weak(get_user_function, 15), be_const_closure(get_user_function_closure) }, + { be_const_key_weak(EASE_IN, -1), be_const_int(6) }, + { be_const_key_weak(get_registered_events, -1), be_const_closure(get_registered_events_closure) }, + { be_const_key_weak(ease_in, -1), be_const_closure(ease_in_closure) }, + { be_const_key_weak(comet_animation, 90), be_const_class(be_class_CometAnimation) }, { be_const_key_weak(iteration_number, -1), be_const_class(be_class_IterationNumberProvider) }, - { be_const_key_weak(static_color, -1), be_const_class(be_class_StaticColorProvider) }, - { be_const_key_weak(palette_gradient_animation, -1), be_const_class(be_class_PaletteGradientAnimation) }, - { be_const_key_weak(static_value, -1), be_const_class(be_class_StaticValueProvider) }, - { be_const_key_weak(EventManager, 25), be_const_class(be_class_EventManager) }, + { be_const_key_weak(bounce, -1), be_const_closure(bounce_closure) }, + { be_const_key_weak(COSINE, -1), be_const_int(4) }, + { be_const_key_weak(palette_meter_animation, 38), be_const_class(be_class_GradientMeterAnimation) }, + { be_const_key_weak(list_user_functions, 82), be_const_closure(list_user_functions_closure) }, { be_const_key_weak(clear_all_event_handlers, -1), be_const_closure(clear_all_event_handlers_closure) }, - { be_const_key_weak(gradient_rainbow_linear, -1), be_const_closure(gradient_rainbow_linear_closure) }, - { be_const_key_weak(wave_animation, -1), be_const_class(be_class_WaveAnimation) }, - { be_const_key_weak(init_strip, 16), be_const_closure(animation_init_strip_closure) }, + { be_const_key_weak(smooth, -1), be_const_closure(smooth_closure) }, + { be_const_key_weak(sawtooth, -1), be_const_closure(sawtooth_closure) }, + { be_const_key_weak(static_value, -1), be_const_class(be_class_StaticValueProvider) }, + { be_const_key_weak(register_event_handler, -1), be_const_closure(register_event_handler_closure) }, + { be_const_key_weak(noise_single_color, 28), be_const_closure(noise_single_color_closure) }, + { be_const_key_weak(noise_animation, -1), be_const_class(be_class_NoiseAnimation) }, { be_const_key_weak(sine_osc, -1), be_const_closure(sine_osc_closure) }, - { be_const_key_weak(gradient_animation, 9), be_const_class(be_class_GradientAnimation) }, - { be_const_key_weak(BOUNCE, -1), be_const_int(9) }, - { be_const_key_weak(comet_animation, 2), be_const_class(be_class_CometAnimation) }, - { be_const_key_weak(register_user_function, -1), be_const_closure(register_user_function_closure) }, })) ); BE_EXPORT_VARIABLE be_define_const_native_module(animation); diff --git a/lib/libesp32/berry_animation/src/tests/color_cycle_bytes_test.be b/lib/libesp32/berry_animation/src/tests/color_cycle_bytes_test.be index 9c5fc3b50..c63716d02 100644 --- a/lib/libesp32/berry_animation/src/tests/color_cycle_bytes_test.be +++ b/lib/libesp32/berry_animation/src/tests/color_cycle_bytes_test.be @@ -28,16 +28,7 @@ def test_color_cycle_bytes_format() # Test 2: Check default palette var default_size = provider._get_palette_size() - assert(default_size == 3, f"Default palette should have 3 colors, got {default_size}") - - # Test 3: Test colors from default palette (AARRGGBB format) - var color0 = provider._get_color_at_index(0) # Should be FF0000FF (blue) - var color1 = provider._get_color_at_index(1) # Should be FF00FF00 (green) - var color2 = provider._get_color_at_index(2) # Should be FFFF0000 (red) - - assert(color0 == 0xFF0000FF, f"First color should be blue (0xFF0000FF), got 0x{color0:08X}") - assert(color1 == 0xFF00FF00, f"Second color should be green (0xFF00FF00), got 0x{color1:08X}") - assert(color2 == 0xFFFF0000, f"Third color should be red (0xFFFF0000), got 0x{color2:08X}") + assert(default_size == 7, f"Default palette should have 7 colors, got {default_size}") # Test 4: Set custom bytes palette var custom_palette = bytes( @@ -146,10 +137,6 @@ def test_bytes_parameter_validation() assert(caught_error, f"Should reject {type(invalid_val)}: {invalid_val}") end - # Test 3: Nil should be accepted (uses default) - provider.palette = nil - assert(provider.palette_size == 3, "Nil should use default palette") - print("✓ All bytes parameter validation tests passed!") end diff --git a/lib/libesp32/berry_animation/src/tests/rich_palette_animation_test.be b/lib/libesp32/berry_animation/src/tests/rich_palette_animation_test.be index 0d2234b3f..cfadde67c 100644 --- a/lib/libesp32/berry_animation/src/tests/rich_palette_animation_test.be +++ b/lib/libesp32/berry_animation/src/tests/rich_palette_animation_test.be @@ -47,7 +47,6 @@ class RichPaletteAnimationTest self.test_initialization() self.test_update_and_render() - self.test_factory_method() self.test_palette_properties() self.test_css_gradient() self.test_cycle_period_zero() @@ -165,30 +164,6 @@ class RichPaletteAnimationTest self.assert_equal(middle_color != 0, true, "Middle color is valid") end - def test_factory_method() - # Test the rainbow factory method - var provider = animation.rich_palette_rainbow(mock_engine) - provider.cycle_period = 5000 - provider.brightness = 255 - - var anim = animation.solid(mock_engine) - anim.color = provider - anim.priority = 10 # Priority 10 - - # Check that the animation was created correctly - self.assert_equal(anim != nil, true, "Animation was created") - self.assert_equal(anim.render != nil, true, "Animation has render method") - self.assert_equal(type(anim.color) == 'int', true, "Color is resolved to integer") - - # Check provider properties directly on the provider object - self.assert_equal(provider.cycle_period, 5000, "Cycle period is 5000ms") - self.assert_equal(provider.transition_type, animation.LINEAR, "Default transition type is linear") - self.assert_equal(provider.brightness, 255, "Brightness is 255") - - # Check animation properties - self.assert_equal(anim.priority, 10, "Priority is 10") - end - def test_palette_properties() # Test palette properties and value-based color generation var palette = bytes("00FF0000" "80FFFF00" "FF0000FF") # Red to Yellow to Blue