From bb1edd6fc35833581349f83546a06f237f7b4a97 Mon Sep 17 00:00:00 2001 From: "marvel.yu" Date: Thu, 7 Aug 2025 03:42:02 +0800 Subject: [PATCH 1/6] add morph pay and morph rails --- assets/docs/about/roadmap/roadmap1.jpg | Bin 0 -> 106870 bytes assets/docs/about/userpage1.jpeg | Bin 0 -> 87204 bytes docs/about-morph/0-user-navigation-page.md | 50 ++++-- docs/about-morph/1-overview-of-morph.md | 29 ++-- .../2-the-technology-behind-morph.md | 30 ++-- docs/about-morph/4-morphs-architecture.md | 51 +++--- .../5-morphs-vision-and-mission.md | 24 +-- docs/about-morph/6-roadmap.md | 54 +++++-- docs/about-morph/7-faqs.md | 73 ++++++--- docs/about-morph/8-key-concepts.md | 22 +-- docs/about-morph/morph-pay.md | 70 ++++++++ docs/about-morph/morph-rails.md | 99 ++++++++++++ .../0-developer-navigation-page.md | 30 ++-- docs/quick-start/2-wallet-setup.md | 31 ++-- docs/quick-start/3-faucet.md | 35 ++-- docs/quick-start/4-bridge.md | 152 +++++------------- sidebars.js | 21 ++- 17 files changed, 485 insertions(+), 286 deletions(-) create mode 100644 assets/docs/about/roadmap/roadmap1.jpg create mode 100644 assets/docs/about/userpage1.jpeg create mode 100644 docs/about-morph/morph-pay.md create mode 100644 docs/about-morph/morph-rails.md diff --git a/assets/docs/about/roadmap/roadmap1.jpg b/assets/docs/about/roadmap/roadmap1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2de04ce194eddd95a7b226548ad8f2760609fbc GIT binary patch literal 106870 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 anp}L5;482BUkKI4l2?G1e7AuM0$zzPDHwt z(0dD^*Mt&6NjNvYWxwy)d!K9X@B02b%aviAnR_zpH*40+z1G0#*y$YTimIZDB8ZHP z45SSF1D&F8F)Dc4Sb;zq8X#T}2y_8-p6n**Jdh&;KB{Ca|I9xny9=WDQ%(*7ku&@~ z53~xg0iFAMdn4dyIq(5`{`36beo}n|fvA9zbN59=gk#A5mM0^p0Hyz#B!WmusC;fSv zoctWX7b(wE{0N|F&P&)9+fmP zKJCYHikdmUyLjn36Z4ImT--c&@9~O>OGrvd%RK%|K~YIrMO8;v@0q@Vp^>?TrIqzd z8(SAwH+K(DFYmzjLBS!RVd1fHpFYPYBqn|Nmiav^J0~|UzqG8pqOz*GruJ8JOKV$u zN9XT>!J*-i(XsIf^gL!^acOyFbq%+(ySI-&ARHb6TJSe7fLl4M9e(oH_IjS>x z$jCi_4+Z_X^S6a5uRheKdf~)yN965=YmZ_wN}4Wmh(5(KnmPAhy3Q$v=E9wc^hcuq znLzLUk0ko1K>w8IbOLmlf()223VIL}L|VIB_}2GZ&8A&@BRzJy<$CI!p^Xi$n)z$h zU!=aMKlgpxF+D^pUl9E5iSeMjQo_^1=QY_IQS;%Q$KF2L_&t1)e1w>IZedzgP6gOe z%T_*u!swrMnPWfx-&Lp|)spOv-x{fiJ2Wq!X}}&_x{K%>N6vji-e?pgL~94)xe3ry z(8YtG@~-tre$O&v-1&syz2xIAX@8UpdpwWImSbkH<5cka9WChi)O<9co#vxX# zsZkJHT(CrKqNYg*JoiKP(b7F8==hrgj=X2jKzYo!bV-7zpm!fggK)AgS{# zl*X{;X5{SqdRX@Q!H9OcIcHH;;-+AZ!DqJbFw1xaU90gRDf#3L_BN#rM#e5rj<&{Y zgt)nBzImp%Li597CJqBE>(m{zD>+pu=VFvYjtjrjn`k_YIqf5bBj>VbD?(bM$E|-t zZjO=|I_=on3j74hPeHaJy)0J+njO2VrMKazijWYbEh;>Xt#B`Zu_~ewxXni5W+XSb;Qy4lvekhtJ2cXkKj=3#btE z=|1MW-om$$QxM0Yb<_!SHz7hQo`dnj>t;bsW$u}-nFH7GgHLdH%orj1G2tGr3jdxk zFk1;hawmJCFLFdQ$M4#T7!(DkEr@0faS}3ub<1K*?ldvCB1a@1d{Fg@L9(chj7Ps4`>Noj zwtk6y*SB9o6W*Z5kfv#CI?33FmQ8IUclh3rh-(`QdUgDR40z-Gx zYtDNmqrnE9`|T>&QxNIW3oO%o`=-G0Q(s|X&dGW7N&s35X6qp_`c6p1&s-h5ITfSA z)}B%=mOnq%64ACSWqRIM!vj!}Djc|NI|xeS&q0U-CapQtR|i95*TT+Rliad1^)P#N z!mXkqxj@ae^@G!tU$*W?R>W_q8^s&&z{5<$=8H%Th2e_9I=!!-4vQ@P^;wK0>b=_-fE!K8sy?h)Td?tRM)K`{!ME~VymqXZ{4{3%*cthKwDa%JE9D^Y@Jk2z` zo0t>Q)a!m!z4LhZl_@BRdzoUP^A-iX7>QMzJX|IQ`BDpXmDQLi@waoHf?9sB*C3jp z(O|6JDd+~N*OZmuAr$P(g>`AUIorY}`D{>VYfnQ_t%zNoPkAS!qWt)&z3dH-*2U_v z8{{8APP?B1u-edx$M^=qMLRSy_((jh8GQcdpkWGAb4X|SYRmhc#orR0oDLfs<{!?l zfxTD?#^>m$aW@2C;)Zd&Pn>dV+y-<$OS<`g{h?BPR5ZTvT0gk@YlN^@FwfN#$s5I{ z;W}U0hEG9t=e}$eS6T0+;o?Ztk5578)`&?EZgAl2wR&&lr0Hu|Mvl=GyxICA)zM!g z{k8YbIfomLfGG_etzskk)Ty_ZFjoMTS^X=DX>1B%JU zjc%alrT3&9vS!_~Dp&WqD!@(hg;}4mkS8aqnOn7~cKb>unwi>0{$QcC>FCKHo?{~< zR+9vnAygAFGS!d_9l~JP7Dtk?A+1J15s6Dx{oCIo6W$fZZ|O#7FyaDEu0mCC6aK%D zAlI%)YL$>CCtpGA;*@^SgvKL`UPDPmO;QU?u6llIpsd7f`}R{xQFt7<40Xb)a4bt2 zM3S9o14@l){o)HDycG=0RkCNPgT&++6XPGmOio=fqKc_D$YEaK?c!k7|CM?Rm(Y5l zk%ok71Y_HB=EY0O34C*g5LBkdeS`WQ3C1b&$K{k()TtsZbgCzS>dZ(-(^>X+b5TM4 z`Qiomrsem%Z3cHB9Ifm!#?tXh!k<`)gkpnoMCPngb_$f^I2MNp^yR^Un`*0?QS3HY z+X?nMYe-72!Bo1ZpuK~+u*T(3Pm5Ry-sWm4L|fY_DDX9~C581m&ytBDPUwb_hZ4wS zSTy^IX{0)C9U?{Fv{-&z%tQ7BJ-LJe*L6NslwmcijyMH{LCf7!9FBsP8s=d>y3VN< zRrX)v}3MG&zk%tV}OS9@mS7rtO{Ey-|5-Yi}JBJ#Z z#GBL-gpa8Svg&>4zD>c!zH;N*iHe1+EaG0Q%93>Kvo6u!7gtP_?r4Sh-z2op(*-rs zoPvTvzODGPSm~PO~yvT3X-AW4)rtmvHyU0PQrM zb<>Vo9Q6{G;#_Pav8qzLtA$$L66V9HJlIiN}#)%^p_8%U4Ot_+!r=v7%*Rn?3b{^ zgNgG)0u^2QmTLuqdA{$XU(+!j4r8=v2|0KloINUtblcPaXloZfSUyXqMs0|4%1RPT zRvg?EzxHyo_$f@O>W&hLRn03TY>V~qm6`L~;LYZBC_%`h8O-LZNl?S` zHJyTJPddc;5Fa3HkwVW}Y=y@TKbp2x=@|XkSq#5!X{{p6LRJw<*=SEV1sw~VcoMjd z)k&SHY=oqF1Ah*<5=Mw&R-?cMakj`XWC?gbKg)Q>5N z9oY9ZkrwvjCbP}Vj06-m6K_Gx^{4ay9RR9-m|^3cb?}zN>$$5nm0DT2zA&oUk0^k3`lLGCKmrt-pBU%J_QK}>H zII|R28fy16FB`}2_n9QGtfkqiq`J;S6Un0QBV@i*=8nefL6!o>2AfFth-Ho>Azv6V z-S=McDza=ltUXdZDM7KS5@-4Sif}458|>-(jM!cwzRRsJ=fIufMe2oAX<{si?&Kl? zHW%;~ejPY(LoeHa%QP$InSI^R)4V>6CeEZb75~Z0^iyH9_9`F2<%fRCvPu^q4~cms z3R2&fkXG;{6~2R*vMJ8eG5G|-HdH=nFZns2VBT`%)5_H%97M+%??LS-HTe@%_WC_I z{}g1sK1)Rc%o))?U=}cj(W-AGMBudWZ?GfLJS|Z6wORVTS%ER7d;;8PN24vV zwDq>i``C%cmBxv0sTL42SojG;s$=*msBAf;@vbi?ZZt$(s+^9=&i{5r>b8Q~F>Gvq zU-{{s=)1d5rzRu??-xGQ{;~{#5MH0i5NeKPJiD4wuZ}{kke74bRpi|+O@5TzzH7th zl{>A%s$&SxL~k7&*0EYmsq|fWK#GOX5s>KAh~wLyO!Ma|O9fR_ZR|QLqv;4yNNVoTjkhOYy{1kczy$WIX z6{{p@7us?>i)u<`G5q$Sox^ZznpMZ*>!I=654TLGRftA7x~B4mVL@@fOA~zbvgK)( zA0%UIq$iRiu24N!$=!ofSAJ@1e_C-bwK>|DJxJ^10@${<@}^8L?{@l{BzISgna_ITYu978=^GO2w4+dN3M$a1y2~HlfAcmCR~j+fyGl|Ij>-wa%+)i*Zgo}{zZRH6Y-!B`ykLxEnAH^#%ecx%S z%dEf0mQ`a|WaxU<28-lelMlXl2k-~X9SZ5pVaHxszUuD{X!yz=wyMbjgD+K-hgZQW zBTVVBvaKGL1)lM)gZ2v+vFDtUat_~^#9Y4e9Z*|)lN!G2$O>YPFB>rkX}2AbRz|mR z3c{t~-ABYsWKd5Cl5;5#$I9NT_9GK+^@$TBJ8vYD zQYp&cYsFQ}-Au7-{h5k24mE=8_rco`YUTn0)39o3<324AX~H|X^XF!1PXw;LvX5VN z7_+$^y;$xKs~o28G^v*m5#dYtP;E|;v^bFUbz~vudX^g(EzHChE*lWvKIoKl5iQDJ zGKjL3)yKNfw%2zdDE-?-J^b~a4KCZ=-Ir7Q2NrG^O{)CSA=d$x~ zo5`Bj?zn*;CkntBGvmw~KtL$eV7D3&o>q2z<3TMr>WYV)=?k*g%Adk2UHZuS$l$r` ztU$wH(r+1f82A~Eu5Hp!v!x(^EJaY6US$VgxmPu#y6KQZ74Yz_X~HRpPKNj%xsovs zY?kuNryyoTa}F9FG8oNYrUBjH=0S_g-NoXy7vpVmi0@lYxK2SKY^3qAQ&2SOGVn;7 z7D);59clq4a7u1!VIA>bu<%x`8#A5($3hQ=%jy`F-})>!rgdQ6zRO^&9iB%!r@!UJKuA?4Jop zD-Kjfz!mxk%cKjFUiMzVlM4hty!-Sbq=d!i{_wU4-`)=L?%A;}J(|D+ezzk`N-hpq zo!LU_^Btw64Y@(M15O7>9VGb^oe}@bh6IOou{nf}aRJ6|YW#N8{9*z$B-UxK=N68#k+MGvh9NaZ15;DvU&Rm| z&$IkFZS#1}L|+xBQIQZ_0h9On)yOndujXP6IE^YOG-zrm>w?wZP<&=i;_w{Sg4XL? zS+WLHB9Z`BVe)pbN>>vRe6x4PPT2--Oe#|`!GABWzwY2uH`PozP)1@H+IihFI5xEoB9SBEa0Y)jyH&c_bm zYf_XpMkf}Ms}TGqjqXsfZaIanop4RBNc{~=W&-DQooT;~??!+$9BULE$SzPxMDBm? zb7L;rq)pCt4A<-8Ig%kxQKX%?H(tU;9$0FOo0!!9FV z);_)YBvUF}ka?L^)ZW-x(iJg|AlzeWNxO0)1uPhS08l7GEZ~OZo1!Ib<%dzDUlT>E zZ(m>+GxM%5fQ8F;zTtMSc(y4my$a&V2%97b#vGMdQcC+tbmpF8g}wY=4g6f=IrDj52suPjpIy;%%DlyQWODOo2Eg-0W zmn*b3?GyTkvAtQt1q>F^u{{oM;+xkB^1pz!erNGMxd_5=Bi;c0LF2BdreuvCRgX1B zn&*vZtN-MQZFrXv796=3scGoOCi~0CJ}b6WyzHT?P^Rpix?|Xn-FeO$OU~ue<#>`t zyJuvJSGFiyXp=tv+K(;m_g-d0U$1>XOddrC=ii%He|)q}g+|a?CaN=Db^uT66@SV; z{Qgz20~%;(@sF-_;5hu0{80%+2(PSz(3E_hvHR6SWHX>hg-5>C1@bfQxb$)`Q=%8)Xu zlb6ZnMY#pk+8;DY(S9AenCgXCruZ3;KLUsB+ru>@pJFrzi?$hYyRuz@!A`s9b>5LP z_THZiVI(F3%VjKW$I}1&DX64ah0565WR4=)`S^JLx7Ua(WLJ3Q`( z$6!rw>qPvzTk-uX!>;K7{piBP4rCmQXx9q8$-3j|ppx0BY!>=`l&@C1@tRBgqc?L^ zH`w@=0dvmIHMGBd#m)#B20K=9Ro;Z4>}8?jRhr?86Ji$U@}#tXVcyX=8lHkWhFwlU z#sa6Hy)V3T5YYexF8a9Ekrbv%GQ+M1IZr{a%=7kTFjsWh@fmGNR@u#FoJ6B%Y3E)# zaim;Q6^du!^VRvDQdBYYWneP(EudK&1S&KXc+*M;941~ktDPfx2qtBa50AhY7z7>qb6ki-V#zDSo6r8Aov)R)XD}v1!*7OBq)(Cga9gD;c*HwgNFs| z1+8yw69k1$GW79u0CGye1~cT}hAh4RL;G2HDHMs_%e;{L&`>axq!356M#DzBpDkVX zn1ZS{Y3-*4IXnccr38S=PI2Zpp21lPUwx*a6Em9LnCx|7<4F-_x4UwLp|Cr*`z+mm ztbX0&qz{CTflpYn=H*475bJ!k(^q9EKWB192O{Vf2Gd`fE<~znJ|Co6q!!$vY<)mU zDTTnuqERQ2mB{^0}F%{qob3iWMHU(^CiR$htNb{zN@4`y^v8D)Vdq2Cqte2FH zS@MfG=3kNUzex=9r}x}dv<}g3)Ohjzwdbr|p$Wgb)LhWdyIt2|54?Bz=A}|#; zXwMv$kYX3H#`iu(8lPM3|~hxQ#^dfQ}8qh-RU@REnpJ# z7z9MR&lm`|0@2pop!iOb30-|n;E=YM;W^`+|n;rE{noB}bq=8oR``yeR4 zSg*^ZX&beV)>IklN0@)gB^8xC?J4E8EY(o2RL(P-WV|!Uoe6ud>tY`sZy#%GS*oB} zc` z$Q^byNtZ+X)a>lUlRdT#E<>xqR1cI@F%s%c0ci`&*)W1a(^9H)sp+iEel=N(Z_V14 zF8*>pq~i(bmai)Nbn(F_TK45L9DzlDM$gM?S>-TxPyNd(s+G%9@ zo9hJxJpg*8C=_~fKau_BHVXSH%XV;h2`wg#2C>Y9HEcT=GG8XXSZSb4*x#-2(h{!T zypK0U7HCh6(P*eT+7A2IwDB0@yhad~-M3;^ag2>F>Wu_-e2MdJFe@_oZPWR0g zx)v{Mg|&80dG{`_$o4RK6Q-wuUB$!RD^1ek=_sS@(CUlA-zbMg7lCK#z}zsTZ+w|e z+Jz}pJ%#!8PEvg>a(5Rqci2gVYfn}P8p4a&9ql&u*WBlGd`G`7AXlgXXQx?t|3M@; zx!2`&`QEm#X=asonzp7h&iT+$IN*-oY!wJ3RhJ^TX}$8-8$euUAC~Q~1(pPJX zy7%Ge(0%muP*HybQ{Uv|pL!r+(=1{_EzU>>$ZS`O7h*7o>7y3swQ9V- zefQM3D~}FEs`U8W-Rsx`qD+Nkm$!_!O3IG4%vf%8b5OEQ3pfwT&A79o4oS3R4V9JU zisp2AdF3!Yfr?c>R&Dnz`JCL^JRdqr8f&uDpDU|Ib@poZ-i}HLolzS3&cz-05Dl@U z#AxNXF{WqP8drC{DNWqcY6NUlJ1bWY#Gww>cxHTFgD4{E2EJ%{nV8+NZwsnpojb$o zyrIo-3FOrQT}VT-SKl6s^>X0Pf(9~NSKmr79(&dTAhOKi(M92(yMnY0F$Gx-IOmh2 zXv_T9o8T*p8z+9#GUmGu70F*@@%FMp-fc z_LVxky;H=9o4BF6Nl9i-`B3Gs%H)QfEIzOi=f$#l+sB5jxWQHqnf!bDQ_A?NJPi~9 zt6<_wsxTt?kKro?HrSI3HtpRYBuNPPdPj~!IIM1>dHi!qLeKJ6^YBsl_M=%>q1%fR z5ms3h$0pu`>Kps@2j`}Dd{`LsfA^J`t<4OHr!~~Y<`iG@=ZGbyBc@ZrN0q1dqO4^d z%55igYR0pKC5F|SG18tjuKPkQTJ`w33p^3e3L^8rxjKzq?M8p!V~oW3HLxe!`WW5< z(A2B^Y{IaFeC-)9C7HVR7w4n@#7d~K`Grq^af$96U5Qylpili@ zveH%oPrp21`}Ryjx?C9290wV$reDJUDypgw>l*o3d$4Z<$r+`BCk5z#Wyzr~fnx;o zQFf*stdJjUrrCPY?Dv}W^jvojk!y$YtU2~RvSyDjTj@sC8SVx4vOIJtso{Ijf4dG}s(e^```7I6bMW8#uM%g{AnWJKXSLS?@k@miVqrUR0icH%<09 zqDsvB*ksLW_(4{-Z%Y{^%8BDoN<}_#iJ5+E8}jJOGPy%)*FJ>kDo50^v?g1mcMc{ zet6NlS2BNk)&BMxq#?6A8B9rwFvaJym~**BOL_blDtSI-9Y2%)Ju+Y*)nFX;L|0-{ z!F!;YZ3`CBVVd9Io%(Da{`uB^dkpcloxj5myXrXqS`?q3f!>KcxYldEuZC|y5Mfsk zMT(g&PnqPpw%D$DZD#ws17UNOj@uj6nef5*SNy(}Lu$3NcE)z94_{N%an*O<=~b4| zF7KuG;-_l*0SRAbKHaq1jcYS)wB%t!TbNmi%@&Vp^0;i<$?C0R7q*2l#xZs$kmLRA z7+jT`^hx!~+)#%7B*PTQz-0I5B9*sp` z1h?AN{^g~b`+T!JGov5JWC*ThI`1DQ|KihhxcV7%@y!{&AjvMr;ajYIKy|b+0=|k|%sLS@PVU5<}$8aH%*Q#&F_q!BDx#hfYKkNvI)dtDBfd(6MVYL^VY*g&gx`$f*jm{BRkt^6og$^)i>_c|Z65jE!=A^jQzb``*ERdVp2xl2 zQTb4G#8ji+tk)YRv=+^J1mE*<;oM{U}>Gl0^SE7n4| zHE2=1EaYb1Ht!8@@TvZ5zy*ecK{bS;MxbmO4i3ez8s7#%yle*J$d4OeB{V}n|0I(e zGUJHKXoBKLu-7PO8qlE?N<2uaRizQ8q z)xTsqjo4^rx((4@KYZ7KrP($O{T1o=`V43a-^zTL-Ov$2ASy&{Q1ogpNQP~%_3<0z zefcO$`N0xggMfe}vTP~OzLINMw&b=k5V9C*G-`j9Q+VREdKmeQ%QG}*H6K-CE3Y^y zH(0r5Twe7f(YMX$k(&$3K!{uu=?g0!Kb=n7wh zO|zNavKl8}o0Z6uo09dj2)n2p$P?L_qxR?U;GUra6PNtFQ)73ves*VJw9GTQU^b(( z3l)8x<7K<+(zv{=-9qT$QmZ))0{(mcveoKnd&?`CWgkX6JC3-{vkCamst%M3EiWZsKK4<-H9BQHHk7uS#@c8?A=?ESGsiAFezhNQoBR%*$+b6v zy&gQc?7r6+(x|9PSgf(B-a4}tPPPMjIR(Bw3{w@kF=nG$xnC0s*I~T->2{8WUd24Y z6PZtH?`@r9Dh^wTP!fuhw_fNpBMK~~skW@_Gv(ITok!@y;|B-$)I`c6HWNnEw(88j zyY)mHw1Z}|Aki)|AWPyM9qO5ujX^HqNed9sV##$F_@N@8#_|8^in@KD8`OUQoVB`>NPSCyv=4d1r#D+E;#yZL1imcBEsv;C#1r zsBd|oAouD2f(tfA`FjOT4+6SeE>E&2C4PPY;6srsGDLf`wsS|o3a986)ZTwLtxy`Edow~6T#PtKHIzFeqP zI1AM;csgklY9amdv%rQ|@rK$coADOJB&^g}fA~11W*Ezo4$&DTc<=kDR&C`8sKOex#Fzu=+u6X z)!~unRA6L>)Kp3$LhJU#I(mq(?zd~Se+p7^?-#2%GFxfxlUZ{y7{D^l{MX`&YJH&XB&UVwi3#CQzo-~Eov}d zRx|g1lC7Lyl&k97#_&OsJIzY}C>@nHf5rQ#=oopA1y#dWx}@CTs7n1J4J!|&gbKe* z{dPN)UtiTm%mO+JrF7VAp13cR=qI}*tC;7l?U7|Qq{d~3kl#L{l)dpmPAjX5m;JEQ zAlt$Fd5)s26;TIM*VbR-c12@SkEUeD%yUf|w`R+n$yRP!j-g=491_x&CQ zt7jfX)@AG0?Rm^${Gapcu7{ZjVP3CJs=;2d=C3!%uP>(N5GKWQC(sKF9fU=QabRTU zUX-AJJG-2GS`@O!srvvjpW+xrSGQD*J9gkvO6wUMsUA7TNXqPdh_s0w_mT25eda?Q zx}|X>%fzE{qsK9msRyhr%XY23^I*1VaWL->s&yr;T`kPLtKDr2Z$L6rA$I}2`$Ke% z?eHI7j!d6gNBl%Tw=8~pdkZL+>9h=0Uh$$EZG7~-RBE+wiTQ2mQFO;lZM~O^{)D)< zkjBBI*;1uAMOjN6d%~`9>#jaJSY+?p_S4~2j{?3{y505)OvUOFo#~-%|Hyt-R0FHy zr-puYqkG*^vVQIM9A#ERFZV{1-0iKj%n0ja1G|(ZrFL$n5lENqqgKmcHo8>m68gYsm+Uj@B$LBUlj8B&WzB#@WLZ& zfv~PWShBg6ws5-o2Ci@48ZiB~vt6J*_}O!QA!e}$2E5s7tRh!r@ya{T+Z|zpl0qY@ zhiv2P=B4}J5H=C|J*n?@6w)YLRYqZwCd@2%sy2DX#2T8k7K)@BU;0e*^!aP;?<>8` zY~{yGM)^g*+@1DXnU#LjvImWHya>}S7#)d(u@!pUgTxjfWJG@dMiolRG~Dk?h}_Sx zpsBd$i#{S;aCSSSV)^J)Lj|UKWp2*((~T#FXSO8`?zB&TuzLZ)5^ryd)Sa#9G4bzJ zqYfHcS`_x0irm5Mu*rK@AG5tond#72+#Qx>bNm$6$$V1fvPRoZC8rT^_OcVgafTZi zZvRYi{z1nZZpT#dI74GS>p?@~XL=9LD$qBc(?)-kk5GPQo2IXOz%TL$OBKIwS4S7+ za!g{fEcYU_XHC~X-5dR}D$}FwV~4+2)Xy|iZUZSQ=JyH#-$C65d?@CuTQW;c zQ{`Sr@7`B>$@(Elv2sa4d&O^~Y||{XtFqE`1@MWuxc+@2_YVWZM}>RbO=Sjvwr^TEeKHR709!{{e{^pK)r?(#c5M zC@YaBvbd#EqB^*3l=8pi_WdH?UK8M&?!ul=MCNQ?e{`WKRFZpkd^I_F$b)pu=HLD} zbFu!JKAYiQr9Sv0;4T8ZQL&v@VlMuVc{dP6LsR!$C&HKbae>vrKngJ7zk#Hn`C}ma zrjuIqmV#lny^*{0($Ra)Lr9~P6bkv#?_lT2>Om|S=NoB=^c`35+38lAElSYz4x(Su zHoE&Ta@4cWdGh#xktq&g<<4EWu;U(IDDiLnBXoS?=NXsCYo?+aep^%&6N$rtsRbgb z0TD=BHuj+Uwpmy0gOI#AB3_0VRR!w`fWpPS9nAF3#H4#)3b-boU;P&c1veR|R3qwp zs1kkm-vA&i{LOR!kCZ;T$j5Vrd1Pd6)$&SefeYPIYBYb*HaLgTgHHzy6$i;-}A~4$iS(3%=zZ zH|+RDfhW}B&Dj7!wA-VoA*~@`J;9+*kB$zHB?GwhTS8>Co$~seY&qN%C=eAnysJAo|I*mIy zE_;&#TKy!2qCZWh$JBK9!Hkki7b)YL<}wXhk44|Rax8-KZq_?iMJmXEr!7sB1oL9pb z$ju9IMs>23E+I|rSW6r$@lx8EJ*6wb|Iw3ox%O-COA1-3Mmg*(cBeyNn`ZMY)o(y# z9Zoe?tb$%LTiq#!o9d0(+&pV$S_nj1o}ZsDk;O4fZgll8KR_P>&$NNj+xdARrk0r& zu7m7b_r>`bBf$&iipU)VI=5H90S`*6O=CmA*ExDI}9pT%Kz+MjB%Mw!g~9 z`6_2t@y@zPuwD;1XUn#URFvL0s$7>9Q`lWB8`68m7rJ3CX=)CQDkNzHR*Y;hv+#Z& z)2xiEUA;fObt!5l;aOpg&DG5|U4o1A#>u>9aZ<&a0?x=mW<$jHOQos_i$v}C3p1{} z%I{+?GM~6Nk7fzOU2q|EgX?P*e@@vL!m=88H+H@&xd5tO<8K_BDtQazd?`SA#`TqB zI-qP9&%HA?5v>^RvX^Vrq_Q~nLW*<1^g_E|)Uxqr{z0=GpK_*uf6zqD*XApm0*VI? z04q(k{IcRq3R5Tg5>>6Z!8%vZ;8R;)UtXE?1A@z{9NQ(M8|*N`F`;1a%Ylo|!am0v zw8x`L5zlo@eEaP5;6RcljYjdu)-SzkQ=Zjl@iC0^1?BhAVMmXye)4suh1LKjhQ5D0 zL(5#?FrM$_CkR}{?Qj8Dj;~#m-$xCVuNiYvv=f!!g;ce{Vqc8oEJ+xtoG50yIMwN`O_M-A~-b@^yf=unYvw6~b z7_KD71a&``k(X)y13($x@1Fpu`z7nQ2dryJNH&ZmzO0vT%wD1w;nqsadvpc`x0wpC z29uJ)LjGk*O3bQyAqGPKwlR_X%b1{e^P5EuX`>L@L*534FoquCTY$&bdtBYX$?Ig>8s#;cRu&pt*o*6#reCuz}uzLXm@hj49~ibpb_wECr(nD2p;yCYb|lY zA~6>eWB(^gF)cPJl+?cv*mHCX)V=M=dXT#-6)DMw*pZp6^e!%|^_{lXEnU}iC*elA zPmY9SLo5ecL@-ynGD0oeZYMAYoA5st6uw;jr|iRH!QitpW3wAh|5E+$WorNaEKqrk zHe+U(A?5i_dHdwp{#QXZ`E@G9(vnYo1JRteI3NO!!XRAu@^HK5RT9)ZnK=_~pAeQK zz-{~kte80C7QMS4!0RyF(g>X-28TE3+9+e zYBw2QcbBQ7a!jC%wBHh)8^(^;KGT2LAQ;;**!BmOa_wsSb$fHDDP4OvcCV?mK<4EaE znMrHzoP-7E9aLJ8z0C!`2MH)e`{{NJ)>n{hz>VzzSrtl@ z^1jH&CUeQehczQ$2B@#ylcFl22cu7RqtDzIEGYAcgwXVS7ViuY8N(HI^*Dx$iAm}$ z&7o?k{{9)FSG9nXOuW5Td{gXi0>Vdz1;!rmY-J{XtIi0&Gb*|Y=kw0-f&Fbq!7LC8 z24ob1B9`{Va)g*t_8wl{a2tFQ0ipsfp-5f!?nkfFfg36pfZHo%=gCh&hvY-H;x{7|GqrR7FK6KU z!NC^4xqOkh-$jMNGyTWU2*#ypDOsWnQf zr2V?od^@WFCW6)J@!zU5|K94-?gRZLh8Rj`-H#!ks&AXN#|LcKo^r=wt9ST7KgC7Mj(}J8{w(A}N$Y$U#h*}lR+}cPRC@Ix&auI!;^o6y%&&>kUSZF=X#31+e z{$I8-zuo6=LD}-|mKVz$1YJf6@xu?;K4$T<#!so`cFNEjPEjiGwS2twSa+5Fn>mhyQ?SsA*-&i{_#igHxJ9OO9p2B%Yt^)Bi); zJAlXaeSf2AgT`rW+l`$xw(Z8Y8aMXDwr#tOjfve%Y&2HywBPUV#dGg{@Bcpcz4Hvt zo^xiOS$kox&&FCbwSuR^*?<-aKFelq#2XaBP*edk8qV!8RoKh)hi`_@RsNSxXjS+C z3f+#nc5{}O1E2kd6eJvtTWoZn z8{(B@)WfwJyni?|BqV+bBxAYy&^43$;@63VwthjxqqzSEPQ?Yp5Tm$HE-1)yg|3JC;oS27ALg8ed!-p~X#O`jstY%ML8}l*ceU zOS>Pt%q2?m9M+$RU$>Gb)TAcz8hoy2qEePdRPFP3eSQ8=hEmj7U5DtHnZGay2TWDCcAu0Q?QHoK8$H%U z{nJLh0sy!BVg>c#j>WbP>$lYdEt%0(X=>@QaxS(A(i~IjX7zi4tjfN6f5-!G{kjtJ zIESNEoOuY^v=qpdtwEQch_i3khf_7wS*?u`9CX&O=E#Op^VALHr=9HVJOWeE_8Y>! z%cid$(~5H0(_Ave)YDu9Pt==0L|^PdCh#GO=Rsy)`n~vR>0Cof?`Q+_bNG-yX`ILv z-ir28R2q@9;7F^AanZFjo>anVD>M|O+qTWR1jn51XfKQKx>|vVDZexEM;aM9KOIx& zIkG=O$Ff31q1&^H`bQFRE)1BqJ-&W4}e znpF;JQ?@>q<;2i0FyXuCWU9T8ug)W=>@jKt}{y9(E2JBl;=Lz;Yiy7Mfb_#fsxGm(1o z2=}_oa?XZR3SK>Cnm_k6l>yzfU9QCNY3`6-8U9fzozbT5#JbhTYRHTkp8wk08o^?~ zq~-tOZF#>5+2*r^%50Vuf@grA?N^nPLrTJG*W& zw32aWm2O&fzqc~L5SD0~er(I{F*WW*!dI=ph#-PFBbv?tS` zb0zCM>$5ZJ4Qs8Zz8X^^rJFq1@O_Blt;P5cUB_hL(ZtEOF9P?%hi-Q@;#3znN_NY? z(7pB20A57V^8x+F$oL-}mjgrXWY8Ga2!QP1SaZOK~J!F5b^>OvP^6vF% zRY;C5Ct(<$7P5OC!Pys{zqc5wrO+cB7+hNX)%@+i=H1jHWOixz<9M*o64GLcRxkUj z%j=AoIe({3TZn-;UDFA3!Afc=bzB%_Wknd!On@e;&AuIziB`!&`T4$r?y@VL6Z9n6pK0Y;k0o71vPY`=)kTC z>`OQIu}I}zHujR`f{)p>Dtb3t`eZrm5y<1-vx<(lVrkc?v;p3(kzavkd@L7YxED)8 z%GL`_%GuAlpE?zP>bqyhb?_%_g^1|PgIbCuLQLFWG(INIBP!P0PQCS`Uj$CKzZXC* zvB<4iNtwKE)@2cVV(y$Sg?eeQA3P#w&(iF2e{~nU(XybyaQ%U{sJwIoERw0<`JwT+Eod(naMjet7SB`3iwTaH(`a4UEXUfIrAlN>-;jE!5&_p*r=E2cyK~&C ztA<%krop94+o>~5R~${|S&rP6qT5ubpEVo1V_}J(Uv0%~vQS&_6ySOekIzV0p_K&E$B4Q_jvbD@&Olu@`mcPi8MmEobd@=9|55Ldv<$OvGYvkdUPwSA{BCtT?m^Krq)-xy|y^ zXu-LqO!loYWFDV~ji1sh!4)%i*Af*E=Ez&q8rpm8@VQuB3tjz+#>A&FqEBQxTd=OK z)2&KHWdRL}HADU~6B^Q>sKg>T*vR*csMv!bxYLm05Z8!SM8#l{t$JZQjJ>^9p%SeN zcAGF-V_{efmT;XqwuerF(C`vA6_Xl;A<`%MR&FNyEr^P}1d;vkVIxi=yn2y|8C$LPKvLchsB?Hwg-C$1UWSxjs{e8_!9Wofr|_9dgPisUAMPYieqtc}^*quD#j0i|H%w z$hjF=gEu)MPkRbS#REXQ%<9ro6!X!80X99mh``1!>l_eC2Fvd^M0HCFsEFMu=gH6r zcdxD3P3cLlwD@BIoo%qDuow>}y}5H`WxCsHDt$LbUfyU;ja(943qcCWB758P z!mvAoo&Yqe8xO-l#eX&wQ1z)O@{1yB@;ipxIQ?5WKrxHxhv0mz~=|kiHCcF~1NtNH>E5Bj2 zuxuAHJ3X#dn>x)RE-LdkliJlznDKUjkSb7DRzYVv8J8;iE9 zqr7IcjdCi!Z@<^+OGM=>qVB(j^vRP_d2tzjjq5nqh9}xGIg4w%=Q$wlDf2%#8o0$IYrwhl)mCrm_bS(? zF?9imQm~HkL)Y8wCIBrOD`fnVD_$~6gjpvePs*~QhMHhh<)xo_O!0&lw?o_>b!!6l zXY=p;6^7a~xfh#&*7`Rl%N?5ra1g{zOV`=(26d z?5ZZ06|%4QZS9$iy!GHAayMBYq=vE`9fi8UVZpF|qf--Q5rW_@i~X=K!n8U}CReto z*tj;A0u4JTrW~sC?e?fpy6jY%fFFCkSxH2f#RhSE{Nt{t#rPw$`mhpCV3@ALE?X`o ztKOTOL||!BtLb+y!*Ay1)-a4(i&+z5n7=XXb>7a=D>gZr;eG4D3RqiLU_@acqq*u;;x_fvEL2j z43d6#67ltRhjqXUBvH~3jZ+3?lo)^9AJf3r`&Ok;PC8-U7RD$J9WBnH4=>=IxMr`y zO;3t*jYvuJCEGPgrGQN5D>-=}D~`o?hXo7V;UX?nmNk15Cg_e*D4qQ*%LSqywb2P0 zCXxNrByH?#L+O_LEPDz&{EaK@g}x(JoUwR>7a|r+(?872yYrt#Y^GN2sIK-79Nt{D zXp8L`URH^00s;0r+sj2~AigMu^E6YRU^hTZ8I6pBl+-?*-sF<}Pox z-sBv8booRD{(-z>REqnGnbS!LxS*QIVn=VcaN=4zt=zBOrQUwOBB=d20$eHoFr2{d zX`J0hx#O9I9JS69Ns;2Sa)5xtc%0i zktL4B=U(XV_Vn)iY-3K5H<>Dnp;D(^QfFu$qiI)^9nYxgekQS{Gm-b}Ha5);tazbw zOwuXId{oAJanYCyqDMmgU{{}GxY!kP5&LlBNI-3)lI+3+=J2djW5Rq6tYst5%Rf38 zW4qE$M|@RG;a4nRywqeACVpM7MCd#&laroy;@=HPCuW(^N;KP<-IMbGwlEvXxz2O4 zygQ)$)jjV9N~I5A0uCaQE^u?_tb!b8f}28mUsXc*OS;JTu$57Vt1ygYII_G3+oY{| z;bj(AUDxh8S9NP70z=hK6HJ9DRUmDv_t+={Y0*&$TMbpm)-ZlUG<1~tlEo@sMhN77 z^qwGE(_Q-wAz>liP>U=#q8IsnSK|X&9hoFee1qWKCwstJv)y1dcg)vOzCX02M{hA} zw_;}=&~aMiri^7mYbe?cbZv^RxO1KDYWOg!UsgBZoBomd4h%=&3|A)P(X^Tw-q=E=jx9mf4kT^*}HaWVc`tW^Kp!A1jqAMrmqs z%&S~@xmIz zLPkUMM1zKdLIWxh8lh0BizFaXCC*q1evh3I)44hC2o#wIB}v;Z+BJ4yHHauavUA$- zv44ti-nzEbjnrb}@Ipn}Sh8NGNRAr7FmJ}-ifIF8h$?6?jLLB2=F3ooa9d;U6(lc+ z9AP(@-jPrbDuy6?qt71s-bh$ACzibizy5KTKC~=?H&D-}18vQH%0@uHhOu)+FD2gqE>ef}+aUEs%2xvxbT znXD^$GpJ8U5|&gGz);xmNyd3$KCJFE809FoiLIsz(VTMb z&<|eFlEYyZW7F<|{yGF4UH2RTEg+GN7_<3oNKFfohTV4oE1iDeogFS@;@@3Eo$DiF zdiC8}5YCXoI~j;5U89A?C4CAdv;a02L%jm>C9DNPS8&+VZRd=L=F^K_OrU~3$rpn+ zu7fCf$`QjVm*>rRQE^)$6k9P_Z3z>Q*#^=WhIJ?ugrS$)P6QKOeeYVvvJj~q7r+(- zyP@yhq#=|fww%NXnaQUv*hTf>PndFHKs6OLWqN*y3LXnAJ_AVNy4*IfO*L{~o!WY0 z#*M(y;QXWoTs$LZOzeBfO1aO2V5A9Cs~?X(J1unhWxs1- zpRr_LmTXleqgE4^RcYDPH$Mu$)Q}(XNmwuMVMR;kE&~UsWYT7xn=0w_Z)6 zHD5PY81SeAECZTF>^H!vxz< zGZb=J%;a4tm3qgOp2--@CgQPpjfbZA@`kE)%Co09OtP$pxfjBDC=lTIsHFrh3e3tl zhk}GlHUyv&Sv+xy_$R}z=&aSS8l9B3nGGM()iU+3Rbng-InYE>tXIX$>}klz7{gx{ z{;1y@s*n?Sn7Z$*IlK49+|`@rS+bDgA_xjBYZ_xc%WOK;ZPcP!@|PfZDL=0{W1s?= zk7@|JQKQeKf%hY#Xiu1q?3vC|MT7g$Ykk6wOyog6tZLK{%Q;R!mWQGOiQV5tNaJSrPl>9G#Nk3W$kRx#ZvXl6MAdP$XyJjQo zado5<)PD@j9oWG5_F@9Wl6cURYNH*uy%?R~&`-gIVXLeXW1A0D#AGrA5j3J-cEr$3 z3UogN$}GiGBD$xKS>CrzRC>Nd(3mU(k15W&2lbk=M-oDX0AnS|@iU#SJ`pr3#<*d|zBWsX2^>>inCY)zOh;zF9hmxi$*#0$JSDPN60MWu z34^=hm;3PtVt?>@H6&gnn4B0G*~RbIZ{!K6gr$2-(q8gE?pN37969@RZ<}i)!T4LM zJDoRnXf6M(yebY^ICun6luNZANEBYuqLPzB`j^v76ie^n(?NtEWdv>j>3oIoo)OO9KsL$I>VUuzwz6+ujf3FBCdg6rA8M|g28Xc;^ql^0 zK7OoN8`yg0O{NAXw9Pz5yWsfk468$qdVT-fPi7F?yt3G%z2D@3CP~6rDP72$TeOv6PjiD9jxZ@tm z^REZ{Lh4BUhLD^7+&a89Qxg6oZ|)Cyc(!xqneuqi-c zlKx@Ky>4A0Z-E1z&WaNeer|J&N8De-XX#rj(E&XsB2tROQ$b|+rG$aXDOgSh+>hVR z0i8~SQYYc@C}x|?#b8J7aN|*Fl0-s})tejHK0ny zdd~YIhu+d^N#->%)jiWGY|84wH9k76lI6#!x-l6jAc_Uq$daybs|YK78T_JJ#{J<@>E6T1w%90*OIUrH4&p}!_fFSf+d}V z!O~Gy3~pLB)NMWz$F;Krs7iFRp;(nTh`Hf0$v@knrs^QHu-a z0lazw|9cj!4-hxKwi3H3Lepk)zR&E`oc5&tkw?^>{rUl2_7-R8;6sQrS`(AJ)!$)aF{p(#}KgazeRXiY7xPj-%*}d!yDV??I~K zsHH($Ibh@T$RoowRW*#08Bc(VapQQ|YOCv(dO7YNzR@96|K)Ko z;PQ?IO1(a?BfZTM9oNc$>)DY1(?l!7o+`K>N#3U zgc8xPKrfO)Hh35RsOHS`=V@UogM52yjwig}T15>;O*G(IQhBHyY8&^S;04^s{Z|Ym zKZ9-m+sU-t*Fp~P$dz&K?fQM4X~(sxRJze%x_q*hWI^zmn^Yg)@^mp}hRyN;Hgx+^ z++nLiD%}QySJ+$BB{=*ISa$9+*Fq0}vQg8wI#2|ep#Fvk@BY&QKgPfyhbf9o*j45-h@{C-vuEH8r-jS6P&#o<-NVNqTt50cvR41cl!s`sVA+}Mz zgYp-fkwAjcb;U!10h|1Z%G#$2*KmIib)qUtiomr$a)JVOhn}lZYbXY+#X?3sj#3YI z{+pCo$|jbn+}?s66dCEfHvn=XeSnKrrq}UAs08aq@_bcO4GC4}$9@Dk593{-2vbj} z-PP^1e5+WC;%a#7u`TrKQB#wc@i7bi8eRg?_XVeAc8Y?k1s#!n*Ztg#PODG5+8{?; zCKk1I*~SriOQFN%ceu(EZZC#3T`~<_&RE{K;VX#kEe(ET6jL2Sbxc+kYTAV$a-*=@7Q7_pCZ)<{HBBt2#O}`tnoDiNr`{?j@~< z)d@(J5~Q;;Vq4mu0Xsh~B;z(F6fCq&5$z>8=|izpeCM|qYt zw~ynuV`&qO5%C#RbU2!oqgo<`&euveg%B;Uu1*`L+exs`QzntT6Sg zS`ERz3cKBmCF}Y2$ul%Rp4spMST|lVY2s7}uL%ERLY8w!;RS#~2VWiNr48;+{v#b( z(!`fEukt57h7NUaD5fLG3B5BI4N|J1)fv933VCxS>+NFh2F1K$LX8!%T4)KvzR;s& z$UJ$XyT2-q^IfA>a@{)7AF1^b&P|@-1TX%3y}r5cOBZyOB1p74w}-7|tHM(#?#5}% z^2|WLA$acKUCe{PDs2z>q=WP>PiuL&(pWz+(X4o&a>j-tgkhe1sd{D{sm@T?q4=GB zxzS2dTyuGU$T|JL+I~ttGs}TTFf`%W@?%;8z&v31&yCrBL+qck^5ghbw6x-2)m-qS zmNN=Py?uA8mH<##UoLD{_G^aLA{pRyaeV#%w-~QKW!(?Z2Jo13@5QN4R={bb(3+kz z7&mmDFdp7%T#I_B?noti@HAsC1O|CDj!-Qck4GpF$T)&j!_cz0lePy+ktw;kB}t?z z;AJwExeJJRhaS^nQHKY<%Gcj$fOHXj6+VEsHJqGy+n{EB`3nyk1yB6_{~ErW`$4QD zFQr&iO9c>Qea2U&eA37P_Ixv%xaAr9m>+FiFhAGvgB(FADCK>B#a}7 zg_o-&Al}Dd0-!M@fH(I9vY%3Z`c6&_k?#u@?1 z7oAm_NjlAGw}~*Nm9uVEu!W2c$BiQOuQv^*%CFt`t%qY%#BWF7B6IEV<}0$jdSlOJ zqtBXECUqw2J{L)FO3IEsT0-xyc0c}h>$k~rCTlz=dB(xaD0B2!&NG}u6M+<;7z3@^_$S`&i@?LEeLgqV! zD@wV-Tcxx*L114>umuRR|I}g{(G0Z7lFfLpOf*2MK>M*ZXht4p$J)v-wk|rk3yDs+ znE{B_RMiuik_6pV9A=simL?BdjWxH2v1@03APB#K;A>0&zrG|`wuFTY|I@ARFn^V& z>E>XxZ?=9c(kLHnI4xOLF|;!o5Qa;kl>txx9I9-y@N`C#4)w=y_W^&3Oi~S;{XDJ4 zQ2bjzQ^tQtzQh9;v1=SEos_g3~7IcVZ*0QON>`ciC#B zbMH(_@L(zQtg4pR8@}$2UhkIcPLY}(lFy(=;l-lbFe7|tW}S;>Tq;VWrGT**+VV3$ zbUUCR&YKte7}8S_&9W3M#qzT?<$3I1Gu~TZQ24y0)vogzQ<$PK+UBlie(j+v$s*0; zVqXlF=;ygSQ1|7(j;Ez;)DGH=l~5^o5wH*{#5-`-IB3`puu0%w?7{^`zT?`CPhbHt6ya06Jc1!G~+15euaGaBWkrd~w!)t+^!hH;6b}_>e z7?)_DLT*=g=2!R$pI1)$K;%(=9kB&PneZ0>!dp>eS;AQczo%*70rJ^ zXPL={AcK+2$c3aMyTCQ=T;OezhRvk;p{rtZY2tvxa!dJ_y0dLQr8s`EJ64(LiWK1w zgA-}5?MoeImj#O^9!T4nOa~eLpP_H-)(Ms%Y$vr_#DL8byl(GXV%;y%gt zAku5wf&fLL8Xu*s>}bHWzfI9k$257H5JmI~3oFZw-n#N!6g8Ui4KD2!Xg<7Q?Z_M| zX~!Kqx6PR|b%t&RdpUb9m>L_8uDrZYBg7H%M60X=q6Hq|%11ckUXPgSdKC7s3luP( z{8$OMLLA~}Na~k%Q&NZ2{=>QI5zLn+?|GK=92~3!tcXg<=g$ke zXUIBy^FH&}cBV}7`PqFxX|0OC>2F)Ed>YXnv|`p1L=ZoBuDT0jBs|8{!-un52Q$JK zB>BaP4$E$LQf=BLpfd>-w&NO;UrTVdvw6u|v{@YAti(qD2WKcuX248Yk(q>r7cZv) z2%X)ec8QKA9l^0#UBn_5R_%s4RO#AHNTRK6n}<%uL$xWeI3ke?A@RoKVxG2xRkbSw znvHf?UH$uU=r>Fb^q;A?ycINt?8QIJj&cck0FO!RCKu@o%E+6ngG8|@Twxy&llAeB ziNi4^<&M4AFH~m)wPk;7mK%MN46dl~QyTZkFQfqRIaRbYNErr1WzlihIF^Ch`wAlu z-~sgiZ;KUHEmt3I=(<%3M{8(u8U``WaAJ~X+T%A$cC=%{Sg}TP4uxAbW*S;LUF~XC z&nm#rv9Z;v>bV4sVO#y9{fY)zmf~+t<3hJTR8_An`&rPhj$(8qSK(1p5keZgR(QWx zCq6J{K2S-Ru7@*n3giIpoMzJ7c1V?b5iWCX*}b_|z5wzN!3z*FF?2t9aUB|J%`1r` z$IbIntAnkNZjp@udHIE{@wuudcc&TbG^xK(@7OUO_7=fZ`^8Vm=jnR9rr0J70^N4I zoZwpfU2{*Yj@53CbMw94#@Wp&UJg{8>~MP#De$bU*vXvq0v)Gw7&iY2>>c4#AMe== zUT8sRMQKXUXim6>#^E?y@6mpyj2XoE>u(6DsUbIGY~2sw@J|N^N7wR}mUV|F_Wan> zMI2VdmUMU)6HFgV;x-?(;jNIK<0AGR_?D;=?i52#Nt{$f9&!WL=8lTKbolb^U<&}i zM9-3-8W$B_7`ySWqg#~-toHF%125(|2sP*3VuT45xOLqW90=!UaP_@Qq7Z0zeLO=5 zWwUJEc5v#-wM?;K#;#N{+0C<|60$VqVyf18@f+1SFp;^*tsu_H`F=w{{*s%$YDzyA zGMwM@Ujnt;WW8qdF@4D8=O%S#J4E`!kU{|wCcbMLoWTK8g6AcrF@q(@T>s+?ofW<3 z-ILX$N!yTWCW!kLa6r|@?c~PRyCPR_jgh&I@p2+E{Ud+6{7DA)3j~iBZ$iS;o#s}l z{22kr85**{3b#x%`Q!Nu7Xt=2Ud~>iUJlE8)VFyuQ}8a~lDKWhU_|7>+49;}6=K=# zgZnF3RYjG>4vV$$*4$d)7*_*&T`9>LpW!v}Dj?CuqI&@F!9V<`+Etn-`< zopT}bs#UBOCs#X)g3j|-AG#-(@tZaBgD>q9(BRY&RxMok3sck zGj+7!$ZKA)5k*GkI@@iD(joAlwCcTR zM1Moj!ZQ;E3xBEW9LuQDFN;LIeHDq7yuF%m`s(@X2Lz0;poHWR#?hn;qhe=o+k?M< zff>Qak4N&;vAKfq+I0KeWH>%P{Fl9vrTKslc3hpYn;*7Y>W-^3v$H}tKW|pPU*UP| z%3F;2!87@#Gw~)M4y$kd<*{cE6YKMQZt`yk|D6LjO4TbI+Lg3lo%cLn%SgO0#>7W9 z4w&aoW{KU1!yL5mkj~0~wHcbPt@#t5u_oxG!cmV;d!TS3B#SHFDIvV2UbXlq*QCpH zC=aWqhULC>sp{Y`@QR)nUcG;ZMf+f6m9j+QGmFVlx&dB6=ns)!9ErHfwzG`nwxALr zi)Z_O58ZpvIiefXF1C54SK#oqMwzQilO}VMK1u!pbByXf@_)QQnYSh%#2rCV>JPBm z9|mkOXqVj>q{O#15~G_5F% zZ@t2`j8IFkBH%oszQ(itkn=k&tdMhQ;b7(*nT<%@ybgRydICysO2LAicbq>FuvA(c zS^fl5K&~0)g15<{nJeGro{rZ?--Cp)yw;`_;hmj!EcCCJ4_=HKhlp`*&+w6L z<=y1D(5i-v61ric5|CpVUfd#md|%UJw##FXu$I(6P&qQv(MCJlAzR0vx$a#E1!U6G zyS{6Hd4)3rV1Yav%7C%{8Vq6kttSxKWAK_|w$KZV=wG-2Zvc{dD5J6zpSEMIa&vhM*+KV+pG#%wJ(9;Lz@m_)oPN+PTufoEV)2w;bQHez zNZZuvDtcTLf8B{b`GgoU&8hapyE1yCFQxq*YU~HYcKrFy@aV(qlH>*NZW2q#I)*K4 zFAB!Kx=J)adfIjBBv}!`$Smw9)CUAinj}d}kGC;Aq86Zu%fa+DrfP)_B#Hgo8*xKv zem!$8+rjir*37nXNkMO3Q3)e>J0?A;Ylt*GSt9yuMG#66;3fGJ8CK8(p>TG= z6VIq3KzU{Z@}W$(fjeuUC&WM?2A=7XMyiB+*tI7OFnIcc5r@Y)Y(; zYbPdkd>_HPC}y@RYPd#;u;@Zztyag)(+m64kbWs2-m!1|$@V9AJ?_XujBrldG}w<( zGPU985i2Bi49;OhXXN6LdaZ^5Oi5I7-tK+%>8Y^j(<2LL74+kJxc4Y8CxD@bvU*Xq zIuEaV=6~_7?c18{!f;G8X7ujKym&NtfmIz<7g}K{?(w-_ccc>_O!KK}f8)M-*qb5j zvhO=dZn2y0r;JH++&r4L>Js}dM^U6PCB*UuWq{rHQx-v5iZnv?&>M_og!-vLbYpzD)^ zikT@ZAHCuM=QCTLJ~&-N*mF5|jyu-g7CdpeJ*L|(LA*ark7Txt>GgmgS~=a|=lTsN zY^;8#{Y?I9u8D#;x$l>4!LeZIHR?FbGuv@6sJ;;CWYpnvJ?2MEN)gSADXwSA-_E5c zJ!NY=Jg6jfuLhxj*&xu23{gV>I<)t>EGzTgqaega${ySUa63_VH$)Lb_Y)j^(5o0F zq9b^xCs-7=>$#y=#Ps?xMfQ#S4zi1hx=mm~-xM5xXs+M{K9*hnD*q|8V$@S90Ymwh zDdI2Xq2 z-=KiE$1jniS5aW^{fi0vItvh)6@=g~$202{cHLGw=5SmX1MH;N6fVCht)K0rZ`EVl z^*f1_y@FjrNubfwCsoHqtYKJD8lCv&%|!bv?66H^TD@0kch!lK$f-?f${5)p0M=ne zVE3j$p07!*X#8BhgwaECF7r!A^G+sqhk)Hh5D@J(G zmTi@`8vI^%(0O8!R7YpGXH`^}E!>X_OgMJJ>8u*TnL2lr|MCDsJ|nr>Bf$YBpya1J z9nDVJ{CO-w=Jya{c;7cJntW5nu|dsuWwA7B>w;2dDAaJ=x={etg2ECvHYq2SzR}F& zV+D-o7i9Tu=j;)+n~73l_^MJjSx6mqM#!J3JltxRk5oxrn3xRls%f?5q9M}0dYH*_ z{0~tWKAe`D1O)8rNs48D=E>qR$2R+X6#zmCU}{iD(YLwbxQY(@gz>NWeZ|Dbgo&FP zi-Od<#$ci6Si~f79yGPUpOt#EJ$+Wl>fM`dAtwx zp${Ag{#u6#Q$W;^GHZ=M&eo|NAr-sGA6Cn5xub`x?_t9bVaJC#=CY%s2U}C~H0c25 zJj*P76@jL3k8|n#YwSD*ITJQQ((R~QO}pZ?Uh5;3gkb|YZL3FrPZl_Q&9w}Cjgbo* z3N%!K);X$AQ_(&)JWPjGdy$s00@gsXnJGLs)b6}`9S)R|!gum-ePiSO2wzYg?H{mV zj@25oR-~F=<)SRP3BU#~tyOLYW1^iV z@c>4Ht43&@v8rRkvbzrpZCPa{2vwL50)W(a!g|^FfSr4jkLtgpy}E(ZZtq^B0ck%t zc((3DTm}YUa(@8W)(AQK7=L9ao#)DvL(d&;;k2KB^_UCx zhDgZ_!TtyY2CudWNZ%&y45Ni&>jI_&VSg?Zv_L{c!i^Y#^Mba)R8{svcE@9Dn(C4b zb8oZ~9LJAN1hW2xrX>gpswY{pVhb80`4vHnBvnZkYwpTpYl?LU93Fyx9(uDs$!k>7(8?STLf{Sc0X}Lxqm0ihFV@@IDSr8e|JTVl#Q4qky zXv_AZ)rkdkxJlUIpp#z3mC86Id`ia^;xZV0R^8x19uE6LzDz?Nr2M(^r@OGeVdvN< z@2Ph2(_rSfegFICSA>j_HyEm+M+GbY-mSfN4xIwCqWH|vwy?q&pBgTQMvTl%-_wn4 zoFCm;44Qf-5|gB(lh1pA5eD2JgmHxK75QI%9Zb19X;*YhJ}Q8at?E7HE0g=S_mn1% z3OZZAzZrY4MtYi;`F+mYKDF$MY)J=l6tFZLViG0K&D%<*H( zR0@y4&KB>k*ZyglK<}>A)f$9QGL)%`-lg#y!teF@y$ILmttRh4QSq@d&^Mn?zai)% z&J(J5_7Cc*z$>FE74g%(UjzCI>bNAR#||)^Yl6a+)p^vUpVr%PGzdf#xJ4dFI^ohKyXc|rTYo(tftd;LS&2@r;w(Eeju;5^4}1s zOQUL_5A@y5O;Ebj(wrt^p_TFT0-#B9U*BeWPI8@wBhj;4VKAoEJ4?-Rn^Nd zW3LgErsQms$&%>aH&McGhbQ4sr}@RMVZv^T63c$%y%s4aHM*To_d1{WFqE&iiH;kL zEglrcLi6X?!@e?+qHB|o4_|-a|D;!#AS*4p*7ZSW#M2R}oGh@RKBs^TQ-&-NJ%C!$T`}%#>((JGK_V z_n`i++xmq)SyAkf10GLnd&xPM+ytA3$Zri}d3D3bZ%CTQyL6!$;Mg+SjGLXD4=0+N zii<}C1Qr{`3=q&#n5yi1m3rnBPk#`5BikSOj7Q5IwaGB+Fq#9JC+n%%z|GhSC3PcE zB!B7MdQu5rcb4E#RY9!`WZyhW8eF65!*A)`I=_=QGGS1>EOKq|A<=z)y_YXpVgvMA z@FB*>VT&iy3;$}@Yxhk5-ufFt&9OTeJwiQceKx(bfbkn;2VfZNz{`IGPn^7ighqge zf&xcS0cZO8GjW0n1$N-cScH|)Nx)MkPR=gz2|u98KZ&Rq1q9~TV|+H=rci2_6;=I` z2!mVw zr-LzQZMm)Gj)}25D(asC;;9~tI};=y_Pgw;Z&QQcEsTG%)tkj+|L6Swbn!ohNN{Bi z#^WFLXifH=F_IgR0KzrDRBVM#x~CW(r>eu-FE%LF>b<6@m4qjQAQh{wyIw0;X0;dl zm)mtau^If0_hL`=>R+Q$gzBA#@0hgS2FHn)+fAPTKb&$n)n>FmHLzY5Bt^$M5E83m z8+r&|{g%m1)c`yLqUW!!24z^IJVk9kTDLOPjC{|{jyT`uF$z}^(mqhZ&yx4)*z~31 z)4e{n1Zt)=n7Oz7M>KG4qE`#b<7_WZMr~A4 zt?aoO`(wF#_i{c4Ic?9kf4X=ZPXvcOIQ?@pCXv?4PuAf-{QWw_8T&p40u~-dlyx+yzV>esI)4+ON?2|1~ zWFaYBiEV>~BYKbh2?U7QFf?LD{Zo>2Dp(W zQQ_j#W-yV=gDaU*lsup3HQ?ur0g{e4e7V0=%~tL=b$H3YYMZ{-^wvpnJtx}V)w9js z%LJz?q(P8E=Q^(cetd?{>_V1)Y6tUKlQyyW(<-HF{GlUVA>)KA3QMPJu_TLLiNXS; zA>X*{b>tSnL-osQc;h<+zlz!%(O;NDygLeP+U2s#Yg{iJVTv?mknIEMn3J!# zoBPs5_E_CZz?PpXyH$)Nc{XtU?~j*wExI6+i;m>uL#rLjIy47B!|-MVCrP8L8A9Mo zd&0IKwKv(f^RzgjIofv&u(qNn?wWR8+zUosKzZ-NJ{L6ElV!H$%Y|fN!8@#PfONN(?P9kzq!q_R>DdFLDGRz@VN`sF8Q=Z z%1(pvFc~CYBzA~XQiQCEyx^Y5ewjCB{fIxXd&JqfRC6rulTtA3u&qAc4RDJP*s?@vf>BDo<6sd|sdO7rlI`lDpf?sw&hCB|mD_n%c1< zYFUsNptx_Uk-yc;JZ|S&aCWHJ-BKUzsZ8|Mqu)^E|CV+sPo&C^h0cq4uSK_L; z{yDVHro9{8#}V?!6qnp1eIhx}|H0c^$HlcYYojC~kl+M&cMCee-~= zK?Zl1;1XbP0t9y%+}+)RhkYm6`+d(j_k8Ex?~m`^`OR9hY*tHEbyYpxT@6EiuMnH2 zYl~wzf`Lb%_)l3pPth}Xc^}E$M7vJdtweKg{j@LwlZSKmUha|-XA)Wp+P&n9Yvddw zVkx^+PS_{LXL=3J%zb{E_sDb7Ev&m5^+APx2+4gr_IR#=KcBxO$g+@o-T`Y5u?xQB zVVg)u1_O!PWL;IV41-HJHwd4+4pC0HRM8$!5?6t31v_1z5 zMB{=LQOv8)(rj}R(@4*+0Xp|4z_eR|hU=)LU#&RK43ug^$3Qw5w*j+8Iz&$PFNC?;|;YaHkTh(}kfMu7X|w7OJcOl&cdtY-2Rp`H?h?ola#Tl3 zdc$!(O%h68vK4+hDkF2MOO<`6Gcb^$t0PzZcE94h%l&Aoou)XbyqtY3aV^~3 zB8BjJHS_<}s@!Q>#&#=8ZDWGI6%4c0l;19_-?6R`b)2&?-|$y%NEzAK{8ll6|;3@x0yT?GI}t!ME$Cm z33lJCH{vbu>lwJ;ns{c{gm77jNLv0~@Cnc(rF;Ur)|QcLc86}UxHPgYjrLR$WOoYJ9_%e2z z{9%5qoh^EFpo)3$Xj$y|<@ZuqJIN8#G+^n08N}EYF(8NQy3)p}Q<9Orz%?(kkg6a*HAncU`eG4+(5gf7kbj6pys8af zOgl+bE3v6nTk()&v&~T)kSRajmO*c?a}4$?g}|BL1vBE)FFioM2c$+Fo=SAJi{}FY z{Kq6L7cwV0E;YvULYK7$4Rjse!yOTI*GjgjBXO|*3?!cCUbWrTWs4X}x|BlJ)?*o$ zE}a+1rU4xqiz!dP{fJ@26_|tT%dr*b%KndZqAH(|D#cv1#O zrGAzk(^G=SMJtuV$qfur#b+cTac^hR2g~#m5YK|EC|4OflxGR9CG>a#q{+;@qGsvI zATz4?BtY%u8Vi$~ThX|@KK%K%ap z{8_eV3TZT2LK+6vS%L(;o$H!C^AAN2m46<1cVh#71~B%>%6_ar*flh%7F)5c6!Lg} z*~t_t{pGC}e0l95_cpr~7+KcmZYSj%eS_>~|K{*XerxZrN^Phqkp1p^U0w! z3-;>eQ31>7|MdKA8O{5JK2|LsrT95_IS#?2bmSaI=>r~(!ZAEqlgknD&EYjzo#;y< z_0AXk(GnyPuAy@-&jH5CbHE+xt`D4{Z+@%){C#~Gi!(AY14sjsI|q(Rm^FL0J!hR^ zC>cUr8|7-$)GTAx6)RBPh``HV94u*&8D3MM$Vb8P9Hp%a;^d@{(X0TBa^paN2Wz*C9M2g=X%jfQ1zB) z|Ft*$A%W})L30PwFICToidOk=(4P(u9K3^cBUUXd5n1vXE^!{8YGGaChHyGy0oGv2(&>QA9RA0E#XW81rkHB39JmZvJ&$aMTE; ze~aY>xUT5vw>n|G|G>M5uDYzF8cmoh)|5y!jrz(4_BFvYwvq;)HRQ_<8Fc~>U&~up zc&98-p+Y!fv`_bqUZP6v26|T!-IO=+WrHod*U+7fAOYZS%j2i@uzL`yl8Ppof^H|* zJa=eK@w!9?`I4sg!rO4>cN53^U-O?Dhc+|#|C6Fde{0y$=kCv^Is;rS- z^+v)a?KFpq1{`N?f@v9sTlmCJntLWZg3m`@=g-;VYJF+sAm(GSQae2QrRUc#bI?Ob z4tVdN1CwA0wJlo9IbqzYuKi;1(;csakt-CfoK4iba6i5L@#HDrH+1)`8NXy-i&7kCz|l|3Vn9RQwAeRX-gbMKSx9 z|3=8QCsFq<^e1W;>zP&{%hIM=BhPKQpmf=n1@;^~rjwztw$efLwcee~eA8|wmOz(d z+hsk<%v-2Ac`1^WX;IM|v5P)*Yng5Apa&D=&a>-G)BR@Tf9Pj4K)biJQvSyvN?D08 z6bOG=7(~e?AgX4T2PVBgXw>8u$mg+MS$MxLWK2O4sF#otP68B`-o8m+bBhz6uwJcC zEsOJif~YDAXCrD*?UJaPDY>4aoi`H_70QGZN@3*_GQPaj*&4szy1~^wmzb1vgU`za zBfU7&Vvqk0h^m(JS(?{5ajAD>ZyTF#II2E~d+Wo#Tzc8Kw!Tt@KrySEdnYR`f8AWuUyUss3cHz#O19S5`ll&QHkh}e{AM=T zeBh0cUrpQ?dlDH?0@EZv%@!rg-^dwk$S0UQe_#JA#`Ssq7nfRZNmHuMARCe&07)Lh zu8WG9QEM6WP#AqaZeau2zt$nM+|$h>ZzofSO=TeyO-`C*lXlCGHa-;95p23VvP z33^!UMWoZDto2#D@hlVc9lPZhwL!i!aRRC1UEM()zKFpp{h%Bo758V+L8{BdG#;&5 zV<}9D-bzvvQ|c-cX`CwFiZU+4Hn<`W>98wwJMmE-WHndEiDkc-&@@;`#2@FQ0BmB} zYHRJ`sE-UZQGoJn^mQ=mY-c{y;KMN_aidV*+=u$`hsiwW3Lf0MV~(YxqY3rpt-CO9 z;SYAw)1a6>JZs_onP>(%L!wR_#c-;G!XccYQD*u+!m`X5D)hqf<3$5rdWofV283h9 zkV)W;Sz%fd%7)G0t!iGVS!wuG@Ty;E?k+oI+C%xfRDsiDFH%6Q&9L^VFI>(LCV z9;j++f0%bm$V5!Kh8$N)?{PIJ%UvE0{Ys4ZdWu^97Xn}&)m(B^vh${XKQ};PZU@)% zH?JN$doMOAKA8!r@|g}vdYvUcDrRZ_+HT?qp1ySCrx^b4^q7a!!_^q2?X9_EM_=cD zd5s_>!PLP$m>yY+A4;4ya~3659@8L+E|M%Y>^G|`=t0p1#Uhs5=<{J`^yvH=`}vY` z9?4B3eP_7$wfRu0jPUxW?ho zgx)Gl;6T!`u+Q>id9ObLu|~}na|xOQ%E-4KNu2H(TruZ;1~ERVURBzcg9L3*Oec&n zJo`>uK5;&jO!Rrj@P)#aOgRR+D)?%W8>xF%cgtggC1+2GFWh1c#yb;P9jfuULXI^y zU1%6@vVd>6bC<7)IQyBCTcHDu=`wZLg{~!enOzVgNz?cKSH*=IgGc>E?2`~L)}Fot z1-_dJ*dfxMBG)8*eDiz%Y<((_Cqs;ZTn*)buLNbghV4;OyE%3bE)k~QNPJ&)h0K^nwF z1qYyZrQI96tPU2h)#krK2Y01yRGN5}bLC9T@|Q+lxlJsrMN0B`DN*Pi1PLUTavuz? z|7;qc6(q>W+VsKV*$zwe=v_NC1&~x^f}d`5#OF>Am|;kTEr7JM&5j5G$;swX4E?C5 zxJD{HnmrhYNmH45Vk=Z&o)YwwZPuuH5l{ztFQ#HCIaq)d6F|DI@FxRevm5N$aWq znLv(eT|7ni{axt@+vo1V6|xT-w282m84Fyl?p0n)M2>Ee@x6h;9hmeSa$2McS$k}J zKKNr*`V64&BI<`wcM-1t!tu=DM@2ytlDagl_N(zcRxJ;+Mf$IIMb19aytGRWZ^GrR z2Zcu(*D1ONGKtPw$TD`aa44szjzp*h)1aW4|$~R)Jxsa6&rQw98*5cemyKV zVDL1sy!}T~rPiR42SI|9RGNrI7srik?d2bA zKNEG&v92-PeAM;NUVbGuCywDTu@>xCJz*!Qa&VdrQUSAAWKk)OrlPRso7qed^V|y_ zoBVNR3|NM2oig=iK}ua;RGwUvf=3QI9ko{}1_e>Y28ti(Ofu`Dr(>*vGYdXnhdI$I zBJY=Ono-5dlme^rn;UR>N8tCycVFP8>xUX~nd7^!K>{iNm_sv0(F>QKyuzUKzy6q{ z3?1x>4(^?ie1#^0QALg~v|l@qKY!FL_s2SyZkQtw8M7v;9CybH7++e|+>~snNODg( z`m`-F%VkGHs0$P0`@1$rE`0}UW#qo2IqVW}@i}E!JUgLr%B zYP^^WbptWY2F38W;Q~sUkzMIz;JfF z=X3ZY(&qKogJyZXX2;H`_$)`bGnSRb>Q*(`@?@QbY{Z(h6$Kz-J_4bFC_(z z%3SN4x8^^vbAiSSma^_!=v_F^>U_nXrQ~R{FJ-tZ-Ef@e2>#a_!SK^g`Zwof`t_Ue!KSGh;KcOo}hCKm^}Y<hTaRsOJwoxt}%n}bH0-hCo_zhocS+EX0 z#$Gn6*5>?!9Xth7VSjfNxlKQSHIw;mEqQGoh4mOoDTo(WuU8`LqUAUhY7aUV&um$v zqAB*A8oI?QH`%aGthgNvR76M63CsvE8M%P77q7G$Py*4H`3>&ZI*|MkaU zu>DP-_S?_@YIPmGNb%#EXj|9*S6g0Y{;SyBDYf}ktJocGxq#o#e2rsVCPy|IEKKdp zqbHb5b&-V!X@_s1@qh(lfg;U|`E0A$(a4FMN?8t1Cfaa-%;!09Lo}4oh{`f<;`bXG zklyWOhGKQQo>DEFx~5mygldXD=*JnJDcT)fyv30?*wbv*lU&fJ!OQu5_4g)r+h&>E|AA#=2Rn)B{B{T^S@HKrtqGcR6&yTle%nA-{?RvrDWQDVxq{isF_Zd9rDZL=a;}V=B(hI4b z#v#$!eBkeGl|zGWKV9o;yFe%aYKstua7<87YArs_IBc)ZT!`T28g&s4pRr4ijN zPNe#*A?rYGo^M@?N5>{aoT?yBoG%t8HpNnXe9a+{^*y{xM!^?%z>ihg6Sh#-zpJ8+ z<=u7i+kQ@@x@H2F_~s`4%;~|clj0m?EJ$vh)@bHTWkZKv`|;{8;Ew^!>_Fa?^WtUu zeNO|MLm!SMU2u_`2uXjb?d|u)_M5Z^gX0|~Z_F$| zbL;rRosn(iW_%!v_R5=eES`WGD^FIAV@=P?kAoP{Ca;~@ z68haO&WWgNd=7|r{!0bAnO&&=1U(p;=6*{f zS+r96H#22!f&D|k<`f0UJX2&Zb?*)TFx0SvKnxlMnFrU>jz7kY3DUm(r~s5NKf}oQ z?hz1GH3-fhjn1oR)oJ}c5c7c#-&gU+APcU*$<5LCx{V6zAeMKmknM6WbbdE>reD(t zF<3jAO&Y>t59x(=5Y*g((?LMfhz>fzYl}gsL>G;?)Qr!1wQ6V9C)4rzh7%};WCE3X zu4Rw{9QKjJsc4R+VQ5mJ>|0+xvrI*@HIvlU_f+_aQt;lwmPG%v)f=xHh)+H^D9v;Z zN-AF9ywM-*Bs{YAy@63`ba2C^+|!yD-GZ=*Cx50(H;0-ebv9I7(~BLbbi=M*?HwPz zCu#v_wCC5&Q;*MjKZ6p73z>^V1|J=eLVflv`L&nnc#j5WQKCoSom#)>%K%!UbfQ|P zb+`7{VP>G-wumIINs^8~J<+Oe zfxBl-RXS4UK=u5@M#C-%IEv({ns!IYIB@T|MEeQcF zi99bY4;Jt0f0~GXowhva`_nG2SnJ}YGu&1@z(su7_Rt5fmot!?$doet0+^fqnHt{ z{O_B}oyR_{2`yAsfkiv_?lBY_y19+gIYbsK@KKO^*aLj^=7%ftp9(;=Q0=64_e+hpKW)4Ae7_@%D3mbhdE zdZ?~IT^_#-zXnM9;Uv239FRuLZ*4R4C3q^OfmLZHFv3GXbYQAPA8oFzDTAj%)rnfC z?-tZw*13pHN^ZVaK$zxAytiuUUf!_P&zA!``Yr9xA2>0(8V8~?{ebwO42seOtw~#7 zv()bEqTz#?50gy+(&y*#+w zAoW$OE5(JHq;8c+pZ`;}SCHwo&Cb8&%*Qq9qmOH(sdkbvU5gs3Xa!anI0iKMFSg%1 z*0?D?P}zU+YHIY`b!0Pe44yy$Q<9{d-=9We2-Js6?ht5;_@n0U3CLTeSiWa0fDUtS z@~i+-L1~4?9>Kjt=tS0pehwd|mF#DVYDldRNC?tZosqvD~)=!B~5Q(wU2@>r{1L+UtLfN&);8R-%67y?B42XnhWe};qdF7}|QXuh# z1pnr~-2oenrIle`;$#fv>)C&{N&9Onq5fk$i-&XNcRPK$4tR8g#iA8ev1)f@pzcxspENK4ZngZXbWEUj+)w_o3KvgYKCO&>gRrH}LmrVz z!Il)mo$s1oRZ7-8ZXKzQd-_C14}5r8;5yk=n83Hv$0bt1Ge00{^cTWTW(C}A5t%i% zWDyv=##Fyv3F)2K#SufQyN%F(V%n6cVvi`M0JlNGqW6lYj};nR68>G^riz5ZO$Re} zRNmTvV+i$HfchB(U^w(okyD!i8;;oKbza%-hq^d2AB{s_0@|s5`)?e*M@1@{c7f7^ z?A&{eV|kk*5s~-*XAaG(@xPnI_n7P zv*_z(G+t;9n%tMMsE-8Lx@PDXCY^uYbZhlXXXV!zlQzxk$ zzWw%>25f}JoWqZG%F6znGeuH+Qa=LzteUcQY#cun)#+fxkA95RdBYk5W1&ewRO609 z$mQL&37ahx#8o3agy-zN|0|g(^dP@>NJ!aE92c*R;oVLjx3HDnzcTs4_464OhE(+C;L)%@*E^hQZOS2J^FFihYCE;;$Uyx*RcgF+yBM=R4wkEux0 zwa2Sje|&3>;O44R9={LF{rD<@VLAHLWnT>l+C5jw8F=%)HkBf*OAvDT=hc+<%oVRI zE5`d0Xl{5s$PM`tGnYPY?kWGRnYzZ$TX0ncju&u@Sfe1j@=k@&7Y0E#R0>E6mv{Cu zYK8e;FC;><;cxxjl>v`s4BIHJ-X_nczaTH`u1H@FxJQFW-ei8J{O;q+-&kiGgV4CK zPI>84J8JYQ#G)D=VXBGZ$>wya_1V|(fUaM)HBeqYIQ(D~p@R=f+WO2nxsl7Z`2FuLWq8!_1&p4g{d%~GfV<0Nx-Dvh)-@!hiqFg5 zQ=c;FIB?j6psW%4tJUK_MIWMc>ia6=rP;ZwOU1K2sYb~w#C*w80vYLO4Q{YsK9oB)_OND6ZP_q8BH~g z90#MerMEvis=oHyryL>BD5ZgU=ljbQ6!uSzcMSdPKS<(q#EV2bv|ymbiA-8vnHB|y zEJd%Prz2+B95?MtlC<@jTrZ*Q3ki76En1kK-#-_|&D-`v6HGCbX{w0P&A1)Lh4IKVmfohFM z&9qs1cU1nIg%6KiLs})06g|}~Lby9!);`xni|`0}zvK?pDek#FOYA56uX$$zGnNGy zD^`?zChGZ#H^}*=gD`RJSEMWQ+%W;o*cE;>L)RrY9`~Q;b<0i1tbJxk#BK^Yd2D$8y28N%Suk=&ju(Yc=I9 z5_@4=W2z_a!EhN22U|j`tR`m$G|VqFOUD=Wxaup3H2g2!P3q7>+3ZfQ7{<4CglP>v zgkAj<#J95jYTEWw$7k~!+4J8$+eVfLk02|7hcXSY5P(feeQwVASzKd$W?o@?Iuv|L zG95Hp-3HJo<(AphOXGjAycR3k+nMt9U4cbeC!R zYXS!c;J9)7kk83eox`1IISaC6cRn10qfTSO^A5+cY|se;ru=x@Amb)7W?!#k9=4zt zyX>&d*fx6{TD)PqqzRv7Va&hssHPW@Yb?{E7;EAoMs>x*2sNSaeD>w z*952o!aWR6s|>aGMDNoeg<6}uoxR75ik6SU;RI*4ygs(&m=~=L=Z@Z&Vn1D3C=Ax} z_FmcsH(P`aQ(#r_smHx9=uz^2s^p6>yWtO!D`9|UsJ_?MwYg7>ntt0&f+}V`qmtG= z$La(O(C3MUXl5C)>IHvoy0Sz1lx~?-G4isKydrkG}-F?rbXzrF~3qEOQ9D1^9xEFJWA=cnfvhA zGL)p_)YsG6f_32^TRy>sOaY{s&Ktl`CFR*2EKmGpH04;o;DGNjWLc*b<@kMC*)}-J zIv&YpLTF73<$;`W@^Pn(Eq1=rEsblk3I-T>GN_T?so|17I#;NH14T}XBxRXQD0~YP z&4a|8Z3!hUgKDx?aV9MNBm1m;qIAP|yc&gGGEY<_8TM9j_+B6JVxz6al7m#TSJ;BvV zM+Ef_px$s7(MgzV9r7Gy@vT$kSZI;xUwepKf=gatq?r$vyW;(6H=9N9AEs`jK zeke&1h!x4&7^)}Lf_+;v#BlkW_!@!)i(Fb5=hI*z<#X22Au%MWlQO@6Bzf+94iK8z z&kLA31eRY@KEAD6FgR5i*s>v=?S1A=%+;v+3{*2ZB(~0*Pp9rvO^Y;Q5gllxN9}qY zOIJ4Fxb}%(wAn{Qv1W|*qTv+=DCo2YjcfSPqHQd1&X>L?d0Y}sVAEW*6wPd19t5q4K>v znoC>D63oS1tV)oAMVq#=lnM7qudwsFJ{yARVH@E4wsJGQVPSU1uLJF&rRO3M0_Oer z*7?49HE2o;z6gKtt>+Jb51XDS-@LkOn`~Ul%z34XKJ2hAJ@o!G;mY0t^x(7-)>6`V zbXe8m1*c)2dtM0Po z-a(nW7~vTR0rW9*)3H0A;i5M}Ge2hdSlp#M1viJ)3>Fhr^Gs%MsFI=vF$4lf&( zdJm17{*YGWD)$@t^i3~2Z!2S$D%z|4g`Z%Me~Aw_Hw2$aQq=qa+(sqq6O}Ze3EGBo z#kCEz^PcDf*h!MnheEcyT-KYMmKs6-{eoFC`f}O-(*ys!;$-@Ne#iehm4P!!>o~q% zWW;^_dcXT^=*=u!c3YZ(T`j^f(Sio3Mwu=LJHvTf(JgP9ibKGxCxNDEu?TI7lL5px z5Jjd9v#6gHQH&O=U%KI3c-t;9;E>)1J?6?z)vRyw9!iv7(JwW;*jBqqW={Uzq|v%P zSa8a&$>BxOjYH>K5I*duR(z)Gdnh+ilbFW1T%eVbU3*UopS3ZL$FDR8jZ#dW(N9Tv zj|v|?@$wqYH)VW)#moH=U@qY3G9$~6YY$+*Z zoBS-(suuVnH3>jwxSb}i)+GG__+HdyJhSLHH#IJI$yz%+(fZJ2ZlT;hKHVE0yLD6AI{|iT?Wi za)YF(^cZ=g)iMK_=V0fL^96PD6YYode*ZlcZ5Lxr`(T-6od>D8xD`W8e5? zH7Jjw=LZU-VoF#_yX@q;UmAdk%TiA% zRho0Yx%gB&gXG{eQOK`g(p^Tao|5F{cm1<68|j$Ie3|WA>@4UoQW5cLnp=; zmxu5G=sHGtsCfId8?np%McH3CXD@(iJ+z1NrfFOabqDb&H2aC%tV!50EtvUoh&zqS zfii+Vj#R_$`DNb8j5_$^HKZ-VfLcv`Ydq>vpr)ano3%}y1{&IRb}T7-_j;+gQup2l zN9?X-=0Uky3r>A$yv9k`f2l-x17duQal<==nx5>?9XZR|Ng8q}HZAU47y?(KV));Y zUlbR~Z(TMH6k+5=usOpgy6U*B!sjUfjWv8m!i`Msa8;|wrWfowZgKT!oEjZ7^;6sr zb;NB@;w(rsb?x?`(H-hyhLiQIo8mRsHCDzpGhd;4$mxD|?agj!wz^cWkQ0nI_D#ze9{F(6U=xsA+92uE+V{pyNL-4b*UmZM!nR z&{-yV(h*R#ui$L7Wf3riOaUd9j&o#*2EtP%+_C^frj=&PU#TKDathYV2{YVS)r?8N zy;8Vqeso#w`?t(JnUrgm6JG>nG=g^5he64jnjztF<~QZ39@EZw`9Mu`X2^)cm6?2I z70vBIUzLL@Xac?8)_PR2n_qy_4!BgZ{N`VFoIj^Nn}5^5WDlxY49b?;n6-m84~xQB zq%q>Ua^2{X>DQ1VzE=PNHyYuJPaA8~*f>trojELjv=DqO@MBwt1Sk;+d1$;ij=u9ES)AMYuV;U5-Tg@`HBRx z9KNc*(l#cHp65;aGDKIvx!tAtNf!6mFUdwMX6AEAX)VnfR7ol`O-mB)Po*ZWRKMRs zbOC{8BiVZ5t++MvLhA(Lt7g@E%Yr5ZYM?LWd2{I!>iPRe-^`SZKwE-b>VDFKnH%HB zT1Ui_te0uREl<|WV?!yY{#^mwHc&DX5bHWW45vJ3?rZQ^*vj^cb|go%a3FGqvOx_MO^F&C`?izJrV4lcXz97agSL zMs=H;#+6jNjVh@_()dQIXd_Yw(Mq`$VZ3UAnc~3CE(Xuu5hRJuJWIVc%qCJgJXnL* z$-;mAZGDr=`zQTa=()L5AM{MEe*j=~4;lzYA5VRYo`w|%!^wUttZT@x8uv23dr<{Lg=spvL4=lQPA$sxq z;lDo&PokV~m#c2P#OU^pHcpn|i3{Vi|M}B6^g>VW3fM;Fex04%cD37j0$#dlJ@sCJ z@4#bbh47*9WSu?fqW7NA^EGF#pnA3Do$C@l3RC#Bb((`hS!qJJO9o6EA2l8R;~A zt8i%_IjQ=}oE$wCJ3Z;SI)!YqnG8tk4&4)pR`z9+HQQx4R$BE5TOe4Z+#0Le@^u(1 zj@J+&2a9&PGhL2YSexX7apJ27d>&Gt@{#Hs*~p4Bxo6Fhtf~a8Rsk-^jaWf2W3^Y( zTElNT1m1mx@eKMZnclGfDtH}~?tF!+SFb!9?hX}lqPr`%@8r}7OCl@DgI@UdRQ>RpiO@ih|@-vBcd_c(s%lM?V@Nfb2XXjhE zy8!adSE}O52VVq8vAi0Zw$;F5#%^x74GT0g#K!W)y=S^ot6D-EiypNLq{N7A!>Lt? z8Av;(gX;iC+XiYmqo<-k>~nerp_7y;a#!y!pK>^DI^T`ugsMj{O10XdTnb@RXE3I% zGnWc%rvzyzPYO^rNxeF3r$Eg6@(WL&|LE3(BMZTVgaw`4`qF)U-j_ruLKLUa2U+#C zqT?v(Bn{u2t-(SzydKzG@D9%nzcJm3Dx>(&-FWXd7z%?4;py>u$~6i zij_AaKI3v_JEBn4s02~W%RnXrT?;39J3kM5=@^{JyE(wjRC?+~R(undT4hl<`DqYo z??tcRUvm-s>4u-3KsFA|b+X;G8+4TrNyZ=TVkH;9l+fILfXUBOrni$HdQJu{_O$W+ z=t6_=u7aXPg2>z_fP!CI6g8ok%-4_UGPoe6Aqi`?PgC7>SphF1HS6j-sb+?lC&o2p zs&WSSXyr5m=iI3Cd&GvullPFhcnEFS4HUan1g>}YK6OI{zRuhA?eccSoh7zD-Qrn` z1`^1RdoI8AW)ji?h<3Vle~x)ad1AYoPaw8k?BU5AShjm6Wb^eUtC_+{WK}|fsNsR? z0dNLS&39h2BWf)4V@C!fV+FxcBQJ73{rlJJyqi{(cHd6_-4KbHq-ttq1x{hhAuaW3Q@Cx`r4RRAW;5<_!@N z7|XK)NncCYeB4@F;^+|@(d`3Q7*mRwtJ(*01@GLLk-hO?jrURD$IzZl-j05?(R_HU z7KoO06z91akLL@6x8@oTVq2ceoOyYjaP!R0kbpBNzugEG9_aPuS#H;G@SXrdrGQb;KGdU^6u}y#lc^3Mi4h{(dB>_ z+aYh-l29az|J)EFjfiS8m&43=eGURrQWYUCr+7A_AujPveO8Bwm0TjySvI^c>`TrE6LI+Q6?#(G^i)i74&mm z)0=q5LnGC`BI2PS1iDpA=ebwljb?^=zA)^E?051HuMpTvQs?0$ zdFmm5Q~S(pDv24R)rkdLu80Kskqzx)VwZNMniv2zLmjx*ENWqig0Xg&qz$??!Z=Dc zM1^3>adyl76AtAO>)-Mhz)r;m%_c@-7ual1Y21x^@?(kO-~976`?H5%a&FuV;oq>G zl{2bDB1KLgx9A*s9{VcU-XcrmnsD$qQHw=yKXkZA!$Qv^fm%Z4Q9{&v8dFHUKmI{l zUBoM$SG$p-RzoDl{9dCCAYOu5NY-wFvP2>y5CT5!Uuy34u2lQA`T}vOTK`^r`=f66 zz_JCaFI6Js(=D0gK3XiFUO>U1@$kKPW2Xky>u)LdCY(%|Nv|-gpIwE#U*qbDy*3s} z5qrm5&q{K3+MiuGp_IG4V>yqAAf`03@+7l4uca62_~n`oT8Bf8ocvCokKa`qxhmtgER7Ky(<&LFj;HX%6dwv{ z*@gq{?esZh^|hwP>H5%T6?$A z`tj%CAn97flB2jfTcU*~0s7%=HZ5CWHdK&VHVn0pAW{^I z7L_=y8+D#;wFaKyYK|9vTHucUWMw;wJeJ~IQl{-sO{Au zYacOglflYqJ>Y6R3u68YfmDb+r2x9q5Yp%g;YV|DP+r(00Kh50<2kvxjoGOm;(<>|Z(UX*CXR?Dj)*I}A*1$zU2Q3*gcwO! zc8VH%I%X+aNsPo&3R^|SiusZqk-9PI4iiwwk$xVYIQUY&Q*as4N=Fmezh+yXhNxdK z{=P(&T2a5aJV9p!i!<9lBtIzNIjaksEp9|LM=YiEpK@=*%Y8{!QH?v$KX{3WOK%VQ z;t*s$zV^BRf<7*3-j-I-g%C>LMO|jh7RZLne)Ou7b?c$}^T4~n=0TQkL4iQK*Y<{~ z%u&SA7qI5n%NVpbQfaNehtek3PQP;qS_`qjV!HNYe) zdKM`KnSCzvxy*ak>^325-8S-G{F_2?ZT==E&bK_Znp-x{Asc_R53(l!ok zYS~25cIj@3iLR^FUP7n8rjU^R0+~VkrINmO*6hT%GnmE8e9rX4yu!q_LlQ|c$(~HO zlk!><$nGEvK{R-KE_hGJ!Vxta8IKH2<<`^~M5%FQP#IpHC76Kt#BEdSmN^DF_hgvI z@*T$9@Bi$0-6uumBorq8f+eZ#h%7cyMSsJzuhch0uJYwua=A#~T=c0~y<{HrFbalc zM$akwu(GDXrN0nRERxp9Uf|6z5|48_#+-k2qUd|VjA*00SU_uBF0xLR6tgj+ZYE7+ z_I$<3-P!HliBd*D$i;Pr(k>I6EXID&$eGyYCRCY1=7LI3C987(-X&!K1#2LeE11k& z^T+o4uBB('V(>NXS6Cit2j*FupoWF4VlvoLEiANTKM)C%7R&(2Q7D1ub%wlGsV zJ&}2_CQ$^81ZY~E`Px?!KzVFNcwgvBMOC;{s+r1jJPFT2dUtvObAi`5U>f#=0hEl$ zFGvm4Mm)S<5lW%K!xuMKSX+h6CuY)_FJGr?ew3FYJSx-O`qMgO(s1ud;?SMp&J{Ni z@%B!~Gh?uBgF!#4Al$_=EuhHqmN`~&)6I`NaZZ>6+Q!7u>_Od#&xz7wh)BEHV_aS` zi^e=s5cr7i))IY0e?uHfQx?OaGV{fpVce&oe_cd2iXiWPKcKiiO1*>0Fo?%HW?CeF z!TqM+lZoV{hn+awwY#$;bv-H!6SWW%)k~wUFPW9`nOXC?a|A~5|3%(ght;vP`+^H! z_`)T)1^3|Y?(QxL?i$?PHMlzj5AGTk!66Cmgy0fn&m!61Is4B2?m08hod2e~p04WZ zdb_IL(qGA2_Z+-{)8TZ~go(KmPcFS-89ORo3L5J! z(#6yV9iC#=z5M`-wHIBxJf2u0P4&r{0YfuU9t)S`3)K(FqA6G{Guq%{t97bWlr>3V z8mpaeQf_S8%GsgJGV|Q@jMqOB`p-RwNM4C%Yzpbzo1;mJf|ogt;~a!lFmJI5ABa$k z#CQA}0$qEhs#x6W$7|Gh8ZWxhEPrUR;q8v+;VF=yT@WZX)J5kU!Q2m6qyo$$WCtRK z6Z@?{z$c4WeGR1Q3r)%Hk1POxA;xznJA=jW1CMye+6mX8Xj%)Cb_w8iVW`l+WL5-J zYsSK-D(6Xuv;wu@{dr1gbx?4Vsj3o}ZOja^$ASdIF2iIgn4lAqCVx@chPlFtdp|h$IU}hw&V!q(3VixW&kdUpiP=$M^p`;Tpq7PtujhMbr0&oO)4}+LhsvfItp8 z?EU+4NLf8wMd?M2LH?}!ZZ_G)>E(%;QI7y%;;b(eav4 z&IR`u%V8#qFa4X~1f1{aG+Fg5X3{$zsQqB>- z=@+34C((=#KkAgfZgCmVm1c)Y>(A-2R(O_nhE z3Kj(p83!%sk5X)$e`SDA@;c)pk6$q4cM*f4%d79Wjk$wJLoIBQhSFenDRjkVLt{@@ z8eOg5yy@-BT~9B8^ngGN^3g%e*Ys#OkfY=EO{T6QOS&pWp-S)FVza>pMI6~xkp~5P z7U=b=)C(6ogqG$OJ_1!2_@#6+#Yx^a-yagEB}}R9UbqJiZ=z-L3D}(4+G9fq1zSSo z-*Q<+4H}`%gvm|@p`IjO@+G=dmf^px^ca7Tu|hTbohO5VM6YBxnDnucc$M|bB47%W z+zcktIL1POQ6+_I9Q3x??QT>>bjmHz@-n?+4x$GMnabp%C|{F(Q}j8>QRxm`41re1 z7()I1nyLHPctNz}`qgOqmOYrGkh+#o7OlcI_q*lm_>=d0US&QapV+fz3B@k@ee)1l1Z*S z49y_1G@>;Hs8VfSZwJu{ov?TnPGROV#k+VF-BI8=_k{!9n^S+WCTD+*p{62^ zA%Hc};RMmOFVXz&>w-jIOOzLkmmwyX;A$E}>t3N&#kex^dYZv5UFZT)3;buUR*5T? z>_o*5#2iR@NKuM41Col3BzbsK@$MQl2ecX}%0C5mt-PJNrcnhwAzJ`kS;895ZeD=3 zf+c2@M3E|OsvPxyVQ>ltxQzLYN1c-HG;VVW)Mk2YZn&E(>TqY7U9_66HMSq@LRadL z6z~otM=3WwpokIWI3sv9EX;ao?)MOUD2EIwAOyt*y9~AU9bGdGk`3KpN&lS1c0X1CB0iyv*-RFnE)j`x>l z>SMWLExiP4(}^3rhz)S0Lje4agJ|F4nP0aa-3fZZjqkLhQm`canSlO$N3$o|Ax?B8+j&A)3l%5ia;CPE1=Xi<&I_x$j zXE8^ojrW&Ze37`pXxk#$PUE2z4I6u+h5+mXi@yM){kxn2vG9braXfx6vGyi5Ktb^1 zJ`iHaW1AQ+Db<&york&sRttaQ zxxB--PZ2&avU%U94u^s(dNLyBT`Y%QZ+em)$!=x zbT{{Ug?PJ;jJ4ziKFfAGS$2R@3Y|>))EU)LthSJHknpuf$<2E7%vH>a(qjf~4i!$* zp+ci#aN20RFiZL-rjmTLH=W=^iTT@6dnu%6LhN5;ZkRr0{wEJBw~hO3b0f(bvn~<4 zn%vk@l(<_FWIPTSwNZpr%r{#ROE|dPCBrDfY6&G&{_WC?kA=zSeJX6s7{Em1|#Fa(};*DwSRD5~fwK8IVNLrIG>14HD}4`HqL za%)XdLX=gy-37GrGeah9o}5Hsof@)Ml&KsAJO_qJafI*VswfjFmW!>LX26 zrZ_ZNW$A8e(-7yN!t{vrho=?WsA%*@kBivimEjQGe+(i`0qKPHOaR4zM%^lVUBe;%{fevn~9dYjcXuOpF%n)W;-{b3F# z(V_w0YD%1YA+ai6tNLN{+boinJ9+DuxtUiSZZyque*q|7umHPBOGS2=lDau7g+5x! znAY^P&Ri2bmugD0uyd4Mzb0>dFyZD$v1o8$bn4rbV%+%HtevEtUN(f(**qBK;V%w~ zW*np6XO+-7EF)}4w6$Tc>dQB0LRw90T|SUrZI$duw>O-yt__c6gfO)}0SnmIel8Jx zUVIZ>T%Tr)Z`H>YtB~|DG=^e_Quda1ADmlg9xsM^UM@e2CGeA?feKPv;24$slDbvh z(ikwm7Nq)5~2P8WY)x^??$pKn&O?(^49#TkcX&awL%6C_6RMC*2pZm_r zK}0lYtwvkxlhJJqccR~`>h<|evhXMollSb)h)Q8fhzT}0G!(L$G&E$y<}Uy~ruQ_D z-*h^0p!Wv@oY|_WU7^s10Kdi`@ZV{M_a{{3=Ik`%bdpmA7NPe8=vvtDujXiaYpG8-6)A1r~K!bN;!Uvt|hc# z((#2>loOQq|J?_{@|R|k`4(BKqXfx!n4p5O2*r)G@8PL#BsXQ-m0Ty}xkE?fYL5v! zvTqSvSh<;~deEd=d{9%wh7(X)Ilc$O4%*rOjuu{F3S@%$@AOF-wH@3%X*hwIIvVLh z*Ox2ZEE5czUF*}|$P-b_eE2=tF&?(xyl7q)6W(VB|KBJpkX`uLiwZ7w zkRhk=c1rY8B;6d31uwRBh8)i<<=`nH5V6XujH~>*h-a5dkeO23C%4!T>U#24p=z{7 zVoeUI*#Q*%x`ag}6r^Osl7pA&T@mVKdY#*>lJ|&^C47L9b`- zLu9XtwVK{SvH}0PyxQ}qK?de5U>Z9mI9 z;-WcdWLhE~STA`Qr9#Pc4gA^Hl(TlOAu|ii>Q{)PTlS0AM?Ir0$!|kK0$_Kt0}|~s z9@Q{0Rq2$S^`I(@hJH7xupmvJ4LTnIiDs<%6C%kIJ*Z*zIE#oo5tp_??GVVc45X|( zncLj~GjJGB^^Z*E#Vqh?h>2HOIpIjZzuOeu`lAbLLZqTwP(d{+>gmwQV^qRGiIMEY>rbMDMz7W;-wD(Yhcg=qHdcx zEsk<9HIIM`t^R)E!Bx8>b%DG{dJq$|9&9tB4JP>SS0Y=gWJB7|`=Oi46rB+}7{V-@ zOhUZ4l?QKN)yt94Q41i)1H?*Jo26GUr~2fWo2m`CK!WkotAchQ_=I3P(8SIyWt-U! z_#&bIEBV>{?;4*3t^E8F7a5xzMN&6^^zZ+SX(fW(U2Y`X2TAH6MCGW0D>o$;vBbf5IMT*y5y( zWQY?;x529v6!$e^>q<@Nx+=4sC6fyG56{cK@2bB!3!N|^g3(9F* zq=`tIEtRNQ`gq9-ZZq4}icbYX;tB-2ZAsZp;tZ`ac`b~GoSnX@U>Q6!*U+w6s_Lvr zSsT~>8rRVn-Pbc;T-hTbi5^_4SNtgMQ44#`3&~>`kX!(rNG-PMr6{?wPI)j5{k8gi zV@A2l;4ILTR75qX;*1aX9vxEuprd=>3@3c0_N&hNp1@mQ4oNXs5Y>(jqe`eJdOS7> zmPl{csvr;;i?nBV+j`pFrqs`M-H zb;p~DhI>zju-kWD1#osy+WWr2%x0%_2_sy}ExW6w%jxuQ!!}u!1qvFj3-4NOk9W5F3@roAzt3v(| zN96%Yzynsf9p)^bl1rXmSL_;brZW)cX&*_5)rx=JzKD}m)JKbmgXnRK=k_$(nXR#eM{~`Xsus+mV&v2cJAg;y3W=fQ?zpkXE^MMMN7XA$yJZ$5+JE zu5!38HIt&q#!#nXt+Q1;c!LrD3v%_}-$+RiLGh2nDqbU$_KQZt?TWBCjM48?|}L1k=od zWqDSIYIhhE>)r+_t~6BAieHFLRpzMJge!kmo>J>9JR>yOneKqQvKj)e(nKArkEwo; zbAm$}E1c(2ng-V5OGbW-B)ZCotF$6HP@nBUJ_IMUgL_=xQBt*aONM(%BzIM&ILFB( zVV0(jWxJh^gHo=l4_FSYuoQl`&t#HmC|3ZFe5D=3d&IcHD>3A{s-`4V*R6|ANGXMM ze$df9>%IpMn}t%g`#BYy5u%zKqz!Uiasi@<>`9bF)D&n5OP+@?TGFV>sXZpxJ3mlKAxBY;7b3#)zFHP* z8}7AdJhQ)+w@^zTG=0{m6fJ@b?dH7FtXD1WR*BHV|5AnDf(L;}kSapcrv?tMa7rc^ z$ZyLcbr%+7Feg| zPu&8v%=iVPW8gNL-oNWL!G_@HxC$P`b&q^P6DzdKg>kS&H~-cuKEB4cFp+O}Rf&dug@)pD4J2nif?% zX(+XU%0FR?3*k0bv0g_LhMXBj5`;NqS$V-y)Rj?aN&hA}b5bQsVsAoQ!{gr!#ml!bP`+5VP0b*`ApSE=k#dp@*?)usI#HCieaq!ikTu*8 z>9Rj_hb$-WjI!Vf-V2!ukK-hvM`-!M{6|9TAMNkAPNA^}${(z+*GTRBlWs;|w8op! z^*`DQsfB;i?K0MX5dBU2TRZ*zr|qA=HOk*kCQk>|Qcfbiq4xm8lYbo0514#5Bycl} zHX0t0OQ9F+IT#S6R7ro_0?7x(GS16mIBx>QK*<{>Qx5iwpB6}A#k)Ze=|XoTIf8LT z;a8d!ddzCM&1yu&uk^s6Rc&&YdZZypV*DvyBwoyKMjCYrfv2QI^jlcWuQeRVJ?N!y zSB|FaA2$^J$MsBk-hE?eF!;W8d=|OwAM0^Z-8vS2SfoyF52JE|@xc$Z0W~y@5oAFV zRj*;DxC~Lc#@og(+!EMo=1`5=cvD9e5vq8%ow;^1sQE_k&EzC+q!rVm5bxN0KJ5)j zZI{=Y>U#^S;cdJk+F>hA{|Wq3Z(#wGX`ULEeRHc$6WL#8S&=EucB1op_(MSOtM^7X z+|b{gM}?u6v#yDUt)xe7bgHP34Byd_%7LOG6FNyjdIyn(@vzihJxx`t!1?+ScOnPo ztBG=Hk;0^k{POEIOHvp@^|vdV&5SNDV-X}Irvhh2jsI$>G_C{K z?7Y#dTZ#!Oiqg~jOWL$lhOCJ(yj+;LaFNS6b^iiD`4Us8YS0{0X*&E+Pl|;r-H0m? z1*bKnlbxk z$W~O?RZ24d+Z?s8O@~u?!Lq~lyOz;@iY3B!tWl|)b zceo!STtE1naa9#4Xd++#qcE|EJyYp;ikQ!xG>gs*h1V`*Q>hFxP*bW;y3m|#sS&M4 z{AtNn;Z+UThBc^)1~ad8@q=`sgq36z&EtzZT_8e82Kj8}fC~G|ks9%}`0-Fs6pVFS zc-v{_QUxZvY_to-*k8Z9S7f0)Kr2NZxMJa&(qlNQz=SDwR`b$24^rj7 zKvpl`_RD@BE~moG)>kxO302x(!0$Z_(Dy-c>>D>K6{tA2%8}5S3bb(0 zl5g>o(B~m*>ro)bXF&sAj==@}YhC^SU-asqJrDm-ciZuh*Y@o^$P;3w4g9b8!1~+S zKgs`TzT5a0Eey(kuoVRTx8*-w{u{H&-_GDdWy6TrLQzb`K>(r|FxhYGQ6lG2%g>x=000?zXYLt(IR|9~HVq^ng7r`WY4L(4zrecZ+Z5+h*A;z)} zV*K#|lMMeqXxXt{pt%A87RaQ7&?0Uiyv#0tAJt))kVY_~NFU8RAWx(itQ>@Pkrfmw z0`U;D0P^_z0->M)vIB8we>ef@MTW_O5wY~cR7H|mmGxjnf!Sa<=UqT_5)DO1Fe@xH zvIqbGUrgj{OyoM^2Vtr2C{d+eAYKVcHvrHV%L)rDg2oRN2W*JYLItCc!P2q@1JA;7 za(mcWO%KSZQUfuI3crY$#iAev0sy!G0JKsd*3Gva08B6&?>TTc4WPGFK{XEDBCY}y z1(1#KfS@TU6sc`ZAR&cuhApaaw$<2-1)xEAMFxO=4g{6cj)?#%`>AnZkboFYSo9=) z&~LO=Wcp!c8qqX(1*!ZsAel)F6F^o`@H!&(ZVI#kE&u=u0MMTU0rE}`Vo3EO;vg7t z6f`hG8+eyIbpdR$80U!l23eQ(|;5(rRv@fQ*t002%t z@>j4l2uIN*qXQ$F40}`sDJ*O?Q5hDF4ioT2b5FS>5C|VrRMH0sq=z_%f(D2LzWDq5 zVh;s?U_k&0;2bnj9}K>TEN6@RqfnPwRwM%o&v6bL2p)>Ow-6FZ0LF`Z6o_F$=r<(* z8X73a55$gu+5l*h1=;YiXM&Q`RKsFWL;%V}dzq+q7A9nm+J)jMtb_kjqd>Xew1Y_D zaC~4WL$Lu6ejpIg(cnbL*$+3LWe7 zJT!@#tTe7A#dt-d0^2p3pBPFp3ZO5KwVUmV3_h3uAHOJ+(KaOTH^Iw;@V9XgI&l!N z3loTy2>s<+qwgrcaU{%X4KeRwKf6TzaVh@lge^S~NxbN{;}^2um(1@c>mV8{AFzPY0EIxPqTq{d#-_;^#k-a)0t|ei9u#07 zWrXm-Wd@~T5XEVdh{Ey z^qUqR0OR>21A5`X|E6Z?5Y9yeF8>1XJHf({i2ycAivqESCaRzU{`Q!W3{VLjQ44@Z zB!h$p8VC#q0w8!k@I|pa%O!b57z;?4NYVp>84$}~(wK~1l>7KkphE#r(fH;NvVU_y zGsJao#nDG%!-`=e=fetL{GkQ#{2ge6!dd5w%6~)nVnybc0}p%hny0|TYdL}hpa&iJ z;xCA^N-x16u@e9f#;eJOSpEA8hP0nn2t?Jd+o0(ZJEs4K7QhK(lx0C822k7zR004X zoAMYiAUy$S04yBbzc%GT0sh{U=bTj7I7`MF)PHuqDWVeidrKZ<>z*(Ol8%CMY4jSE zYNfw5QR`b^BXBncl~b|*7%j*+czNh9@+ZY(D=m<>8! z?Ea1RG>GslI`g9i)M|Wp7Zo$hy>vdf)H4HXU;8NJS6YZSoB=B=T(*~#Z?u2%Bvvhz z{jLUDi@%q{kfoR7oT!FDl2>qxl6P;N`66^}cJ34N*mHoSyjVgEQkkC5jqlYl#`4L# z44cp|AF3xuL!41;eTcU;tL^v85sdV)%TU}OM*%CAZM8q!p!Se#l^nf&KDX8zH9m%2 z`w;Ig(xiVA&g(g6AX-~h_f42tXCFN^`+4H>et0r19%;wzLwypC+~xMsx)sgWjYr5i zG11&_L|{apGG*Cx?p$(%^KZXE<<6~an%&KfK0i$7kv2ca&!+5c_w^sbLC&P+MK~pW zk1k!qKFRTM?~O&-=DVWY=hxQzkjX+ebKOTQ>zHdg|8@ZbzyAI7Ckpr5a$)&ETxFSC z>*l8!{a+Mhb`jGxLT?_vF0e5hw7>gdKad*v3eh3JUH)|j*-xMjpW=JR@CU=A)qel4 zlB(3pjyMsHx1mD0a%=R?NM3ns%NtB4`JWxHN9TK{B+AJj!pwU=4vGUF1TYlyOQ;zg zNy7zNb4b4CpE?It7F_HLY9CS1_Sw$<7<>xZBNx9{Ia{4M&1VCvDSl^}Z#HOpc0Z)k zSa|h#e2xWIHuL$tCHZ&sZKISgf-5Hhu8Yr6BA3D`Bx{$cRs;EY3JX`+X*V7l6DkVK z^`tkTroq!yII<#-(`p{Y^8k4Ub1II>$~brB+1liC=zZ zE2>L*F)FilJ&UfSQ(lQ+K6{KX#?$-{=Q}dYhRMyj%S+BXVb^tE4$$*le){8GfV9oD z!Qkb`v#FE=g(aI7vqpE#@2)miybXaa0qS6(uYzrj_|!*F5=W;3oIWBJ<^1H)A#q<@ zI0cpO1u4Jfjou169%Q|DJYt7o%qLBVsy?WA7w7LAunAZKJD=42sBPqhRs(foT-Xa4 z__sCo1vG;6866#23Ydtcf7b9PzE_@q5A>M)MNMA3K0@MT=XxJPjg~P>fvDia#`7t5 zdClvr&Lwf>$0lO%hqLFgaJKvR)Y{amKkoRY8R@$2#9>6-{q9f_ebz<78dG>{miD#j zE9-m%;V?^V-M8dvK$n3MP`d4OuThN|!b$`T5d(%>M!j%W2}lEYu>F6QEX^4!eMQ+G zt~J_s+)-K|`_P-jA3)*pEb-$pYV97Y?c(+SYJKvzHJM+Jgawk}UEq6*#jMfhIl>)!By<=CR$OU2LHY(V29F+vQyUCBm{~urNTa#Axn{n(x#X9k(jLRb zH)DA@JlxP)C|HB(mChsAvN4I-qn=J)$2wnsoKXjo#G4GP^QTL`&@RZq5$7N;>MNcH z>ni`vk%sjl*x67|ykyRd0F#i24d36KNzbUPYZ5tBIEI)basanvB{*(zpo ziX)Pf(?l1ZbdGerpnQk@!SSPl3KgE#H)=R{Bnw+;hb^K{fS8Zanl>=Ub+68@BAQ1< zD2z4%MUn*Rx2twdRCgKC)#2gqP~4oS;HA8_{%@v01{*gT(;BoLD=1o zs>&pM&bT!BB@wF5>Wrd2uV2{HZg-D?=#Sm(f0^|ow+cl(y$ptFJg02ee4tI1Cw z1YXTn{V8Z`xQrx#iH_(z?y?COZZ^osR5i0N+B?I2_5SYZmD3eMbJLi8Ncw2;XVge0 z0Tluk@1|eyWNz3b4ES&FlgkK^t6%-_>QJQm2BjT>-@E5#S32tK+v`eA-o5b5SI!Q{ z6mFv^l^T~XRk5){72t#|Gm<6+b}Nj{Lo2T+Qr%ZHvv$!JK zZdQ~6N!{h@7Tgg1#|{kk9KC232eCY@>Tg_J+q6z?WUFp;fn*wGvt91j#uHDJ5ha2J zW$hKv8xP+bZzI+^9E(;QUwP>>-{~`Xtubx7tT->i!qd5wT2f|J6~QCmaMs^mAFTbn2ZS_4QI1t7Gr|YuBkqrTwhC4>KI+|IKIQ%RONb ztV8$aP2hx_2nd6N4zr*=&oHVYN}q%!;{r9xqgl5NnQSyEH%UfO|{ z4es(5$CP7M6~7LS+Zhr4p~=LVus_oj8Mo6RO1at{3mg{;2S0l$@rc0%2ZGB&m}-@N zTfFv^uEHc5>lm+4{Xl{PXNveP)bx*p6oRz9j^dwP0sd$w~+K?Ml1G)=d%{ zuCda60FqEx(bh73)2R7;KzD(@@8#2>;j3Wc2&<2shg%!oB0D(cvRgS9b+d1F57;%A zFKYBHPq=Z0a+-Pds_i>#Z9Hm3MF0mH0GV!gL$JMb(F#PE=p$uS%|X-?6TTU@3^DeJjmfx7e9!fyt5*3G1j5A%VNM4FQE=0g>Gk=@s+yL^vQm_2yTZa+bKex4 z*S!kZUFCnE@=97qb#h0;>-%cjA1bR>*nXr@->6pf3RHs}4c8Q83GT$z2`Sz(e3M+f zyC4!(v(pZ*Cn5PM%d6Vqr)BhFPr9jvklTQx=9$ku^7kntemB(j(^odJ-kd&OllKs z$r$+Mb8Yy+jMw zmm7EXKXa$J`zy(ENxbp*vL}9u-Zs{Bs;_EaS}N9# z`IH=Bk-zf#M)tR%UQIqMN?4;P%tTxqYl&@31kLH^?`%pdC<(QXuJuxXv=jhgKp z59y;B2kQu8@CxVJ1ANZ{pW1P61jv@oYW|@Qhxd%9P+M^f1I@bTbL&}Tl~)RTsnb5a zHnibc9S*%qXvc&`rLn3*Q>mOuV=DYiMaFfx32Ggp1Mc;^GuOv^$%BlH{$GH+ru3f9 zG=^g`1_`};WA;=Koy0O0kI*RZ%uyZH?oE}(C#oV-dJQIBUWiQO8zWrdxY@1enDZ<` zUP5%3+l+|Ln_t*;?~8w=;CBg`An`DV&Z{;SJwSwL@D=6uo*6%5b8T>_l}a4LAds5a ze?#fLyxe8{xhCweF5ZR^TwyM>E~`}POL_Y#2{j(kQbc_EF1bs;*ISah^W1CxUl`zT zDDY2BvwiIiAp{^$A%IKSes0)jn1A29yNxc@H=+k;$@!45+=gP_t`+Ye0zb?YJa|qf zp*Rn{iI}Nj)@}6{q~Vb_FLBSC_mcm2Sm6(V*w-{MN?+)P$(eLkcc^iiW5B74XQV0e zSX=B|l)^t*%XN{DPrF1{S(MC5`1naXyRUWOs`L~ZMu*S7tkZgxMRxD;^ZxYxhnbv9 zZU*A@Od0p%`jGn>ZyVLs^$LyM>nHSdGO?ed3=(XTMp7Fgh_esx1$N2N#+DL$&Xw>S zJ|i$`+HFpZ23S12U%wsdN%#R1SLvb*ugt9CyVfS13V-Wu)cY{P%Ruy6HIxp{vDkFt zfc|_DU;jgOgVuyoORLD z)Mq1AD$cwF*p+~~59Qk#`x7Sez1){io6HMhb8Q+QFM6&!#xMr?t6FT<`H*)^%?xp` z-_~}mJ%4|my}A5s-3DF2IT!gPU!h z#wYqhF!jr%)Lc*!Zp`F{QU+icvuWH#p}3rAlEAUw>0A4ogwi@RSvv+6 z%3QsEpFmO}W`4wqh+zMid|>R@>eX>R1xsS=fLFYp@SP_@*dvFIqX_nf=Nwucj7fB< zk%19peWg`nKh5os=0nX5Wfb$O0KXCIu3(J3iX^7=tfRz8!r~jm`fGn>5 zFACqk{#WrVqAUCRQc_D!&Ml>;rskESel0Oxzb9RUJJax<{N3>^WF_V^Yug3w5Uh^{hK?#dwH>XpUJH}CT|W!>!r#EVU^BeMZ$f!wD|g| z_43)TXXbChY}Bo5G^{HPI|p=)BADxs^fAsylhlTazxO@$@6R4j@Hc`NXM;-ls@nn( zg7Ig)iOn>%R@)|n>zSg};dzG)AOO6qCl@Z4t|+G~%ja`;^-QiIxi1T4jo#3#{r+fv z*ITI^U+Dzr`;*S+*D|z^fiP`mpI!-LJj2PEbKAyToe?R4qB}t6_-Xpc}5Wemyor^ZfQF%#N zq#jVIWR`oUd=iiZXso%zQt$qi)>A3%n~*7OER=Nr@NnoPLKAzX?BT2Y^%^p>LjhkR zxEImW>oYAhS-<7B8ARuSxNvX4%o;XV>g3#LYd=k#3pq1AgMf_WoL=LGWEAEd{N0Y% zucej9(B=1=x<}rzl_h;bGw=+R(3m6V8$&m=#S1lrESAJ*rQq&RZ(zLa0) zv&E2VLZj9k`^{tq(%QfAU9WU%o!l-jDH9hlJ)aw(ic!qt5LiMORF*x+JGsg4fXrM; z)OzP*k*wZN+`kp@u*!vG8b#x%x!|l|Q@5^whT(M5)E`=5i{q~rfOX-NeM7U$eMENe zw{fn#Js-v0^B2LZT#x<{jRO(OB-Z0ZQZ*#@N+IL-aSa#hEv}HwBVGGcGX# zln;js&hetK49=&!+n1aV`5mYJS>f-AA6qUrulXe9z6x81u*+rByeoIJoPZ$jMF-OZ zhd!vbLqYD35sf#LWnJr)3+2RXK4O;Te2Mm=BW=vuF!O%_UYGfPJn@_{{zcyV(bj(o zJptjG^MS7ytNa;+%1_91ofPr8UFa&JvSxC}cCswdEqL80jougCJV@D0kjz8pd)=2( zxg6Q4_xFRm(ow%62hg$tB;c`qy3Za$%=7VCz`K6QWU0f&SV8TQuN?6v+F~bW)H`9I z_%^Sam}0$pi_|X+wY4|G0cDrpR2smj3da6F|!`X97)hP=58k50hwVEL}t2z&%K@FzGfDy@R2#`kc>6Fh0i6T6#w*VeA8G z5}z=I+k1(F$EewRtm2E;i!YD=_1muj=)((&0=47sibNtS<5|oZ=fFzj=+|=*OL408 zDtA$S=#jx;An72I3xosYx+d2!pW=&6l;BU;0jI)FGcX$5cKRKNdt~xJ= zIO_AJgV&NmX@S6D%&C= z^{yt55w)bnVlHxPWV5acNxj_d40)*hap=6_JAvF4Lzq@4FCUmy995Bw8X&eq?4qNt zxleR;0BME)Ui|QW z^9V)=2txh9WQE&(3+{X@sU};-PuvIf)M1qZm`Khu3jJh*nYGVE-rr zMiud0hB*BpW}YCH!a|>YhywctqqGj9U5#^J2#xtXVYJP@-_uRqVH)e@X!+WCwt9FS z5?s?glvCEnLD4;nNQTQUcW3YE%{BH-3+`zz$M2mk={0FA;f*iJ<({|@VlSP+L+PaF zRmE=9(R8o%S`vJ&GhTY?EthS>Z1?WVIYUhj5XXxx#;;>K3A&CiW+4k5^|YI}?2MsA zQr+ItpY}Q zbXLVHxC*OP`4EHjg%Z6LM&r5b-`PxgZnxTsm6k zVp=EBMSujc39zgL@Wt)5oLf=MsNOG6zdO0Z9}l+ob&ZqZ@K%;3?1F)M=e0m@_+pq)FxzpjskxSiHMAI znR^^qqX)BziVefHzghIV7Zqbhh=u5owN8QLS?!RFc^ut|V1Wa31kv;1Pg>jA*2;&7 zFqpc`S`Ocfo^72@t*oBTZMW|^XCWSb?zPl3HYfpUsiDuCN@5X=Y>B6B38H6rBk36QE0N4_n_El!n^dNml`pmKV zE~mIvH=R5yOQh9}3?4EP&(hQxT~CR+wBGw;2rj@!0oli~H;YJ`g~RaVrVX#gsJ-!O z-9g_z5)MwRR{LAWXtmUBMCtq6LjuBY_18C@7_DpzyU#zg7fWX{svYBuh1$^2^6%XS z&ucf`BLEex8cVp5a-(g)NeoqkZ^Tydd|ny^k8dP&T5f-S(Sz^W%k72FDu92HUdnHg%tF&EjFQ;tk zN3z#czmolBg-Y_(lq-d-=kqy^l(TFzzDwLYs-gb$7P36%ue^k>QU-4pKeG{Jy2AFq zReW{EcNPFMpmwGy9#>N9iwSa-RKgxw=s-%qHRMROwtsK(Ez zShDZ-{p8h#OWSE^Co@RUkvH4Sezy3rG_k)-?u=tYU>|Oc<#G@)KU(*ve01>70Lj~_ zpjU(l5kFZFj(t6_VOXAtF`K#}lIXv60kD~2G#2XePei!wA*-JYj{CeV<|v^S})lYZor zdI6n`Q1M-FD|~MWoBBG}dIYyLYwK}rQ$4*+=_?-IhbK}-+cDFyg%NQ;3 zD=euu)=kFE+J7EUs?59h&-r1DoWX327d5aux#{N-_G76Nez_~F#Lcc;somiw*e7GM z?{l_st^)8q;=GICh!sy*+_C@Ldo32eP+60nTA`jZ$KZEtU0jMk?`VhDQ)YWQ23zV^=SB>40-g{ z#AtY)vpR>R)eXmbfSNWkdDzs>bLK$mg&8M9!})xJ9QukdiI6&^j`Ur5OUMPm`fjNi zxT6tFpMNP9^jUl68_lf*UDh*nXGhL+ zD-ba9g`Z}%Qt^iHVV_eao(@D91X9U(6-q6@nQp9d_H#TXh5mTK39G`o9$ zszSYT_N*oEX_Wu^lcTuBG26w8x*#Dv{pfak1b^#rH2|$b-!rk0$zeUik1%cT@Ju4n zy_eYc?jZ9Ox=vLdn!d8qCcJ0nYK7CZaJ2|$uw!+B4y59&-KLH3JA)w z?Ng#0THZV^i>4dtt>5V7J@L$XPyQ(A4q3ghpzT?&Kzh}9*~5K^e7hl-u8)=P)xO3e zYJtHN@X~1iPw;If>Swr2aATv?ee+mSHZB$Pl)2l_iTkT(*W1`;@k znrmR}e!yRqeTE#LEy+hWE2qgM+IRP1IZFe2AxmS)$gM)9`Y*s%C5~~>F*K3r=V%~h zM+#DiBD;S$HDiYccD{Ln$c~JzPbA?8g-txR{|BV(^5rcd4;v!g2xZm>#7QK4*H1~9 zQh`i&qq!>FokjJlZ-q{44D^s#H6DnFSzDpoBN>Y&tWTWPhwame&>uO6yFwp`dXHX1 zwJ7x>Ve4#{&f_ztoHz}SQ{VP!VW{am5OKrVc?Xle)|Q4}ByiIGc;YNNE3NZUdh>_y z7Sj#&8WZfV|EsdE0FGl>vK=uqvt(K15i>JcWU*v1Gc#F?7F*2B%*@QplEuu-x_^A{ zd$DhSY{dWD8PPpF-PKijGOIFA3Y}DBCI7&%-tVNAY&dSgV{rfL{zDCMUbcag*%_x9bjJ-+-h@nK$w{-ak<4WNTqr=eWrRpcXdx-m;S5)g%J{-S zfk*-O&&afnCjC%zMlMG#6ldV>5SnsUh+*(i#^^`26zR^>mc=qh?XZ6gDgAI+jM7zxJjc! z&zV)1%^==nZKMA11dZr+G$?MO*DK>hjfEU#QO>u@V~4rS5A&sIy}eL=ixx15>d5Wu zDVQVVCdGL@oZsH{mWzxtU+ZE{lX?dH;9bYFp<9k(jmn~xTM}46Rrj{^qFf_2s#CKq z3A~L)0_mBlIJCz}Jkhw0iSxD0LoZnNeZ)zKUZj(FRiAiWX7{H~zhlV_G_y1sqVG=$ z6rn)0cfy#*l*~tGin**%nV6n${kcwxzjcqBPS!Q?M+;@NFh)JBhY#1t6c?uOG%eVd zAtEuwP06=;%AE2pg1Xj=$Jt(SKCCnH@A-WFe1)PKur90k+*bGe6zqtxFjO&*7nqh{9z7Ul@UU zq?ILTGFqJEe9Q1SG0nUt%cssmb9@oh)pXQYZQ^IyyuUb!D-!xW=A5wgcmLd~9Y@x~ zT7heRXoR6lB$6Oj5Y6PJ`K!FD?JF7L^t-yNrbe?QVR?WNfhM#692%X1&q&^$_^sgk zpjt21_#XObWg$#jxm?{8zG=YMMQ*lk-Z2o@)2%tVD$0qtFIMW!EYMQ>Qt+eT8~)J@ z5=j7uCF_xEaE3tceNh_n4%`w_@%;!W>?sq+1}b|~x(sOlv~hDV0M8N`Ez+H zO-S5td;!F=HLO&5%zR=~_#j8z)Ips~&8Al|ei1aHf zEF^BF<jSGGB!2s4o#F^E2f7Oki$>1n5uN`_Zl0(Q<=hjx?GU!ET zT3|d$9)T`&P73p`BM~By=1)hEumN*5cQI-80k?PCxY^Iq9oXAW{L&?vF>GraIh49W zG3FbP_{HgNyQuWogfTlOoLIuG>n7U!$1vN0?FmFnH$sYx#* z2O~;sQ#ii9bW2v|+ZfR*PcsGq1`OiSPN(mnhKNPG^ zB<8$SZ4xzDHdOtIPiM-kQ805QM(p5B!~59F?l~c(%lNnu9#=Ty9})ZncSB>BAw$*- zCx&{O{Pdjk5;^|l6CCs^S^^gOJwbZZWZpT!%|aJGjswSi`C&prvb zG{<=O9gIf7Xmi$WwLhpvBjH=i5#?wLOCa-2kKD|earVzf)=#C@W}_U!rk&*OQ}E> zA5@?H1qeZ*YG<`mk+a($dv{S&c9uETgL3g{x+0&b%@y027HF+R9)*ysyUrwWy49RQ zY2=48>lR1C+~;9-v+E;-dDD;j$F_v~3joU)@K2aGA!9Eh<3W+CKt5Q0XI@>;By zjY@bC8uQ8*JhS9}lN6zoK+1{9?@V62f?`6L3wpIwX;^#OSIExKNHuXso9DO`Hjr|FMvxa z3OY8gEljI>1qcslEZgqvnn@z7cHKT4@3wYDB;X5gk~Ycfo&_Z{70?0~3lc^83OoH7 zl?(Hc7nOd+H-3tDh8u)E_>Q(;cVR0EsXrSScIS|#4@rK~&(jUB({hv=wcAbYG1aML zcWDRCehe4o^mFUETiJ+2PEKv5PQ8tUs`$G)G`UFbgQNej#pmasEyNH77X-+GaP;Mv zStM2D`LiG&co!tH5af-g%q5uUVPf?bn?T{-ez(@@h3RzdidA5NIs(qsz`K1}kNWop z+6{dJ+lQ{&GF`yz94(Lun1EnsrQ4Uc776UBtt<#Wa!al;7zlIjn|w)vI<+=#s+N7i ztuc_}oek4v0za3ytPnR+=ia?CoN(D}M5wP_7%$kZD{w?BH!2E``(zQFVz5Rhz1Waa zL3{41!=zoJGeQSTWcNy~ZQ1Q+S)7posu<4OxgxE-nFlX=nc2V~4pA1}rk~F?!%O2n zwqc`9jmcTqXfAuy?QH;>ygxA_JuN5+M1V2$rz7em&Xq$yXBul>w0VhNlJA{`!1{%! zUyPkT=yY}Z)MEd3c>D)&a4#f zcNq1{FgUqrAJ~y45Xi4|cC6ePo2(;zzWVv$p|f}ZpR)G|qi|j&IMNS;)$YYK-;uw; z%4$^V8uk@Uocqso%wUjFt%b9x`9kmH0dc)hyTeDd~+5MXHYeKAN5D~@C6 zIsOaaZI~4B)_1)(6}uU&u*yDRfVWusa(Vhhs#G9guE6-c;HMkq@M(UyQvCQu2GdFC@*JT>dznpx&4Cckk1WOC|TPQN*#lZm6kMi)B@YG+%GeZ5=Eb zUxsz`kSkZV(vOifi&VhpU@@reXERcmEdVBHwq@P4m|B6!cNEI(M*m7D%@f-!$NE`A zI0pk-e5rKY3hFbwP50q?v9l-33xX_m89!V(kN}9B{VJL32z^kU_C!DCPaVN<`yB~N zf~bM*tS>>ngcCL90??_SFz}@3g}8@(bYs}0yeYCd00mV>p#0qIyWP`&{;^JV?_A<( zI6Ez1I)(;vqHL>>{V;SP$m!!x0at`~IU&yQ(<+dD(ZQBq`~rqj@kQFDZqSd>t~p zgU1I=nIu*Pm6tR9yCqM9c~3eFaqpa*s5AXCXD^p>jw~^smi59=Y=TQpB$yKD)NA9> z+y@?f!)qG>?Kb+vAo&XU9U$`JQo5}=~IA!kRDs#gnJAs1?W*w{npT+K$U|o zTU_^-j!}K><5LMlkB^nUl3Tgu^dSDV@>br$xHBgVrVE*hcZ+az+SeWwoPag@)aP1R zH-r2_$*3sG#NY@T42A)#=YeL%MO`ZUz3rW*tMq3#Zw6P0o3or%av>Q$&6K&O7V|iN z{v^nkWp?%)vqj{$1U0-g7{AfKs#+58$DUgRD2B0e8z(?>Yw8iTcW&! z7yO=(`W+W%QXo!d?RYd^9qmyg05)*rQv`#KF93m7m}j7o!;Zc?YA(JNgrFaW+RJ?#1sxoqzh>y&*| z6M$2H)07~AX;k)j+arNvxM7#EF7e8nDHx!<0V-BpPN86R5hR2R_g#4w7UN;~Yejb0xb$U;7+f8wzRsz)ji!z$j?eWo$yv=I)^I zw$b@iEnlky7}lfDp0=pe5v~};MjaME=;*~1KG7)r`m1fItdvNoR`k|p3D-jaW9dol z9883H@}!aBwXS>0B=*+;E%GXMZ;jPx)U?Bsy1eY&EUdLRPW&H}W9&TjqiQDDgT|_q zCbZ|&-M=n;KBBt>$Z9ekmj*?}Cbd^vsp)pB(V~&_{g<;MmJ+q5SD7$IQPrxe|FzCX z2jn>Rp&}a-gP{wa4`w}AEHgr!3p#&P;r6|;_7dw-Us{V?>b@4TWk`T-_tjh0aZh(} z^tP^}ersU20+DF`q?OQ8o+?dcc`LNG88wMog4hFTyL+{BlJg65$0BiFRaoeOOx`Yh zMK>)}BxJ=c@`P^g6{J?GZXlE7sDj0z;X5%3M~91kNqf+&ju*6gE)dXYIinVkpg|sO<0ec zozP(hKg7{VXZ83n9q;4fd4o`ptJSvlyP*ywjZvA!oaLW7+-EFpoP*Y>kwp^wYQ?pQ z3yb)YKE%CxT;~6ATGKp7(u%V>|kk~%l?v}|b*tl6!h!4&zsH#PkRMpj7DaH=4j~>=N zPM>m+0Hhf4A6+NI@2vQ2ZV5G-uRfFL=ql-krp*2pLQnFK8h`tYyT%Ikz4N8JSb^od zC4#Wx?q?odmNuuSvo!sNczd|ELF8_z( z-bHXhfQKz%khb(k*y8_Rqjjn;RekA!okvsXX zZ}e*y6o*D-RLDJO?}cf4C^fK1`taSzLgD0njglO*`Wv@9a%WQ__^-?PX0zz&o{!=w z8)m{+j^Vr$j~bQv9nS?KSEh4&w|h1N)@rhU0p{$8c5+^8aYAn1>uBGdM*5nx-V0;p zD<1-($$jO)!X_Tdl@R(if#@SHJUMKshDB=h70`OBk5ct`S>Yw6P>OYVbW5r@7g9|W zi{sa-6mY*?Lkj}LT$-rcXri~byW|aQUY2(qwpz2P8~c$MBDO@W)I9V+b)loy;aF^T z!pjk>JS9BX)VNMQEz%&gr|a@IwZWoV$Jlr4baRMj#xE5yDemf4^K(~7m|TTyE< zO51|P+1s;QxG}$(9kHGIO=KdtZ$Aut9s97y_8-FQD|wbo=WWK5T)N_91Vwqmdbmfs z?XrS`OGCyF{qDXi7U&oLOrHxHVggmepbdfFcQ31y{yBYz-@X1O_|SQIFzTXG%vYC~ z9wW@*V7pE}K2Be2?YmjNN>Bzx#|9WtEEQDMt~ltejU4XBH%alR#~wW)*E+LO#gsOj zqHe1Lg?Ob2J-B1~X#mn;0AG+Z5E4nG#u!*e%Zq!AM)EZ7_auTfT<~Z-V&6H`(#*G- zGIg!&KE+3{w>E$HftdXyV?T+8foOC7$Ah|bY(IunQ8v>yMz2)4K;UyGa`F7G3TV^h z(a$F+RBnvkLxzt`BriNbOKidtslHS%Ekz3yU0Xb0GoNz_@Xv!PF45}qwMb3_bgMq4 zAy(IDVftCNAcL3f&Gj~z&4UVKM`3Q5`c~)It0*7|>Fn>Y$bWwsjJ;&=eUHF%TmknI zE#q1>j6v&0#gcio`%>D(TxefsUt6Kq4U;ehVOobiXiOz@?OM^X{3g$o_j@22j@B_F zArJi2Gs|FFJ4u<{Ir!QTY=)P?kBDAb``|G6KmjK+X2@e8Ge``Tq$s4^QIHR5+&%X0 zX85vqCk{&Ix$!p?`1a$c5So!wB3oV-@J5S`PfBHB^raSk>8O@2ip0~2@-r4QXcVI8 z^fZ2DeW`zYQb8eH^HlN~!p?C2`vXN4ZCUHEhqq#nb?mHvvH;zUeOvKT* z?H>`Ky0h9kh`I4cqca+KR-n;(Wq#duWgfgV>$InFPJ4xIXb^BdkgsG3eA+_dU}^e= z6k)Tc+XXw^drFjINmo2@M~}F4pRASxI|U_;;k68{&zl|LdxN7ImW8(}34iJh%-*AF zZ+3(R?CIJkig8=2sjlLqh33|~;#3Q{S9#1Y*h+pbwjr@g<+seRUJa?A{|i7C?yQW~ z@ukb%n9D8fxYd+K@bY;rc=EcXxZw9}6oer;@gFBh*J{Q&HIMH9xwX%yBwy!CjGRB0 zDwilt+4l1SP_^mY$b#{0?e|g}y#z?+*MG5f7%8)bd}tb#$d?s9c#-h*J$fINDD_-M zZBwIsr6a|qF8{jC0ctstdd2+*;?8)lOWU8VWqy@{`rOnqq%3LXm=_?k@Mn9Q(fi0k z#RKb*)Db2EAo%1;1d+AImXd5wQbR|B83j@~vYuhVQ43IvL&MOIp*h`Hfu!7OtW|c! z4soSV{A(`F^$Q{9N-Xj^o8R5uX%5d2aJ-(`Q)^Tj%&~4+;isyLb&9W~HS{W6ilZo* z=mw;!ccTkK@0ZeeYb!PX)1=YIuSuMvL9$S#mcNipnP2BVSBW;kS$gv280mc%KdK2) zXrCrLD_Mz1K@I>Q5rTECsvXr?|LqxVzG;dCq_TH{tqlvaP({Or|L?2m*u4p!U zo{*Xi3>)+t;|lCF8YbqX0eK)48~6>zTv3sUnMoeq+KJx?%Tin89%^cG-G1cVOfWtP z>ux~h_b+ciGD-HX9YI)5t-4j+;{mfvCuw1J>%;;@LgwK_g4GoK%j?S6#I?fPhfMgR zoR7%&kPC35kaM@(hnIC#M9-?$)eVyCxE1*D%#ix*k6R8gG05y zYcD860MYET*%c>r3cwSZBpPlZrr1=dRg?iJ6y|qCq z!plrLj{c#TO=e%J^UB#l48|h~Y{jws2>D{SId`j0#7SX3U+8LzgIJ?Hpd`<-3kf`U z_!Q3(xxM`>XXJr5t*+01gb={Sz=g*P}7W^fptHBI`t;kxSf#UX9%x4$7L5pG0da6y@@f$)0EaJ z1LjJ~^;ZG_`iG7B@AO>iIMcr`q-w5x*69~)@g2zJTf43OpCL=OU5BC?m&F4DfAoN= z3`_Xsx_133AXzr6pNX#&iS zOSww~k0Y%`qIH&2M!W^B&iL+8>9WZ6%!V7P##W4R?CIV(bp=fVLCGmaDVvd#*^7M^ zrn85$Td>7Wqgez4OHDmzDYJwX5N~#FbiazaoOs99IqS4Y6f(Y{bmHfEbaWI6Ettr~ zn;T6#;U%Y%-9AfslippiW%(YV?-U48vZ)D@2a+d2sN)I{HWXj~LOGST3<3oMf;jUn zkP;g+m0co>$ZH1f;4wqeW}_7P!D6@!35Pfm@eyPvzkNSCF#KIJAs%=PnK`0L!R4G> zAfAQd01HJd8k-ZN2)R1{7|caES$mFpm>H#*pOpo@{spNaJ;~+E0!`@^1Z~~R(Z<~n zIq?gOV1kp^*I`DXKX_q_l)j5U5)a8ljf8S|Y-bl8u=b>bsEX5%on4B$pUNg zW2VpgF5zr|Fzv{%$@9$vE&G);wxE7lb0s*?G1XQws`$jdE*rC< z7WY*fWvK#-ey!G~X+jkM&J@J*SjtXpH=lCy5Yn7a-i+hag?}#`7-#cox*alC$>aU3HnR(T_<1m|CPG9bH~7O{XIWFt~y+ zvCkB-lLZqedM>`6E$%-+YdXuAvJApC43BMgy?-uL2%Q+H>7SZ273dz{fCTu&$9WoF z<$B#Pt>@^Y24aGK0k)d9a=d{R;D0r9#Y-Qb(u`NRD6ejlj$PH#uEldiP-RN}V!5h8 zTzlrMo16W1SPNFu`xl^dkVH*4%^y_N(N&B0H@16fQ50xis(DiQ?Gf0GpmcouzmRL) znW=(*%cPR1OdSt~;Ci2Q0EonHGZi$%QM|MC^_rXa5AnjGzB_RKk_3^<;x?6$QX&Y_<-mA^Z&kG>Aw^vjPpG4|iZ} zAq-wJq?ynPQcN0h8raxQ{K0dHe7cr=ky_XgkxHy5)|bzuwM4Qs(zY;dn%hU)iQbm{ zdUzH;Rroha6TVP#N|owx{;4O5vT4hu@`VUN@>sZ9=tJZ$z~T3r7tX+TK|3VD5UC+c z7zzVapa2!4FPAmTr2Wa6U?u#BBzO53j9)AR(0)L3lT2{yYwyDC*NaRZkPotJ%95tj z$cd?Y{ng^(Q+hLv#dFLpcAqMjqg%jwS4xTBYt72m>`=6?-z|uQW03J};lKD~{;0zL zuV=;OCyLDTC^~BSHhrPSq~1Iqf;o~l-pj3VsESB_>PBGQh_#oe=*P2!5jKX7vB2ro zy#zsTfZK%95NK6q-8S{Tnm2dREKvrRecMmon2k-(5f|E*Vf*Jzc&MorijCwc7P6RL zgqfl+)%)8uLG|p`;ROHY^-rcf-pM&o0_|4=GdZ=rGYIPOLtvn_h>++MfF2@I8<&x| zVVc}1Gx`D-ZNHl{6T|CzZHl1@e<}KPXvaZAZ%$|hOvAELRmkRc!`i#T(_1mVfJO?m zJO5_kskE9opX4O#HOHRtaebk>l&CsspXm=NcoQPQ&dHVNnDXZ=WI<<<60m|}IZK&! zbYQEk-X47;NE|igKD!KMXwVa+Q*5aH9tR|M2afx@%f ze8rbA(JUJ3v#AUehf%-Xel%~gL^(uAP~ajYt9s%n)L}**S8d}{#?>>TZV{t+<7*Kf z7p?h*4{Kzkef>Dm(@!`kMp5~dZ0i=^GKj!`T39XksRT+vS*}ed7XjmFSqywzzQi(H zSk?pAGgd?y<>i-5Wax|fOoGmjlm?}XuOT{@3J@ty(u6qA4HWpVhWAWDa2`Qg1JA0} zp^vrTD*G{NmZNkDgyB&gZ~j>5i4>tbWsxhBL`YR%sMUM;S}~l?{m|!`9~Dq%Otx|3 zeJo6G9Q5Lut?P~MQY^6#rI&A%Wyb?U_@K5EbYNQ%&Au68EnNux`A1v=k0abVEv(2B zsBZ&JmV4VTy*~qCbX`=X@?s#KHo-(RLo0tojA>Nd_70mjtlx~X9^c4`#6BSkcEo)T zd%3cBj7rO+IBu_6*XaCp8S*FQB4jP{mebvcqMTV&b%3zH;xKvDZDTWP_U~;?g0S!x zF0362OcxS8ve(>s<1o=}w|4yq||Dq&;^tDL4vl zcOE_u@(Y>@n{pKyw%(ZUd7;iZ$4C}jHZn$i@BQ17tfmf-dH;ImG z@uUZ1Ec4vLHR92SOsGC4re=N$qwKSOVt3+Ji}r_FAK-cOTO$dE1j+ZW^KOxoiu$x{ z$yiG^?7`)~wQ59rPGxR6gXh1h5Dc<%i$FrwW+$4T@55SCRGH5^h5lG5hZwGvV<_~E z=K_2q?{w>k+k?bpglQh9UPqhGvb7E^j&Fo!=4$X|R+(&44=kjNoIi@9)HpforrE4c z-$RkWJEdtH%n?rDl4WZj@sKk@2-*mZmzy?=)-DI!K(TAbXxUxrfzq8u*b1-CLSjST>nn&v|iA=nSTr)>ttB> zF4NG9_}k}aVKBsI5M9@v1$5Erni&8{!i{_xB~y@!IAUNYHR6K#t)BI@g5D*T-Tvpa ziI{7-OG-u!_tvmXTT3pnL0T4l5%VY2X(Y{x-|)#UJ>W^>|I*Aqi)woDkWIHi&bzkc zq(xefEQM}2Kw19HH}{6k9sP}j2w=gjV-jurK2kJf-|Nmd_m9d=>GQeEK25XpnCn#f z)b&M=iOe?`oDibt5`>YFkO;M!Y8=0ru-uewW^aak-%8yqKrolrQpH;eJ(5N1@F`y;oms4ZG7g$VeldIrk>8WTV()XyqHzBinf&coiw*Slc5 zEmzlBvqTNklEYBzN$F7X_xK!Q_BihJ5JuH<6V&5X~O|x%76$JLC1yFBkSfReq(Lsx~XvZ z@!5IX!T-aymK|na2`F*KHRh)HwLlhq{~TL2O!3P8Um4|xXD87nP@krEmqGtu+@q`6 z|A|~46Hc)}E^{>6#A#8>6a8Q-9-m z%8&t@;C)ETcDyb#Pi&*+Q^e#r$-Kj`JFGCfYxW_*t~vu9O(0nqBILi&M*UiM9Gh_5 z<;s!Lk$&c?8-eVY&me#^aF~ z5dM9u{zucrx1YJjK~QGb1LuvTKaXVvS_GABF4F4Y%><&QDu3N_m8Xu{P?jkh03rB> z33l5N%9kXelsGZUprhhDEFxpXoH)+>zK9}NC4g-`2dqlD|agAxoirqMj}Cq0J4L3H7zpdQ zD9n-zy=&c@1Y3F|Uz~XUKP|og*8ZH@6d-2G(6%kGR?;u)Fpu4}do*tXDG^u=gJll8 z5H&*iTm;pD304NsmLrpqCb4`LK39W^Q%ojZ0Q$g=Dzo8>vDj!jI5nOLG{g5A-pu2} ze+JBMW3|L8;l^QjT7ejeLtn-ZEu;c`#OO3R@j-~d|JH4sgFOshxdsDEF+EQz{~f{ zmA1UJvW$*OIYwVEKJtc+6W*gL*%^F3BBCS_S7b*CueF0zoUaTZ12(e5> zWqSO>4aDSlNvnVO9UdK<9}hM)^eB#UD)HvAQqc3Of~7Tj0eXSZaD7l;5@+f%{5ivO z(8Hxr@e?V-1MH;Q+>{`-XYWyHT1)h4>~IJSI^%49I%B0= zNw`R`Z3#`8o`3u`uc@8B@JxvR!i#Dbm$1y8JH&Me2ET5!eMI~O1V?K##>r_Re_k|< zd`jx!Q@>`wS&aGQAz52hRRvhg8W(w0>#6Nv<{ zb_!(H>i))Ef@QL21rL_g*~iotp2w)LUe+&Fl<=AEnbvGlgC|lR+$U0G$82Pz*W#a< zUkHb}&Q?3rEp%QlCiwAUP_gkQYcAjf16T(;b zfBX(Q6E42tVh{Pw{p-mZH}S&{740a1PmuCd>e8T}a?>w9=sW_MVurH}+>*b_B0a<= z+CbO)Xkdv>n|awBvC-yWN;-*>yr_2HoW-d{J9sUnHKEPackGl|Q@|VKp(KGk6oGI= zIVeQ~5%5DQ%{;UbtNk^72eYP>a=siQ$jN&fWlS@Xnc;LneIB!7@Dr2_<{*Sjkl&|% z6)_|Jl&c12Q2YsFvEBwyX z1Q1a4fSZBFuvB(A1g`Z5pR5;J$o~D=?Ct-{KK=Iu)-NHF;p}nXrHG%%yC9-X6jGQz~35T@R$>lQJuSo zohZtvtDJ{jYQt;Q^f;1Ols;z)qUn=4RxJbNvDOIAX9VwxzEFYJE09M&-U#PO>vfvH zqxd3cxDr)n-1PBzo-|7K6(gxmfL$2BtZ@8*eI=AatmA${qGOaoqD$eE9ph?Q4(pDz zsLA|>3&?Ztb+X`jkS;CUBKVydyBy&JHO3KdfF5^*GfUEAVzB^Dd`844TljXelHp=C z8@U>8x%p4A=_&lyBpCTYyXdt@TTq! zV~UQ8S?3&qN@pBW&qGKU&gpI?_v~>Ik)5kz#$rEPULw{4#q)*3Q7mMVrPmhZ2V}6m QO61__nj8qk{k8Ic0A{PoWB>pF literal 0 HcmV?d00001 diff --git a/docs/about-morph/0-user-navigation-page.md b/docs/about-morph/0-user-navigation-page.md index 3322477d9..b9028f178 100644 --- a/docs/about-morph/0-user-navigation-page.md +++ b/docs/about-morph/0-user-navigation-page.md @@ -7,20 +7,25 @@ description: Upgrade your blockchain experience with Morph - the secure decentra import { CardGroup, Card } from '@site/src/components/Card' -We’re thrilled to have you here, exploring the world of Morph. If you’re a developer looking for technical documentation, head over to our [For Developers section](../build-on-morph/0-developer-navigation-page.md). But if you’re here to understand what Morph is all about, you’re in the right place! +![userpage](../../assets/docs/about/userpage1.jpeg) -![userpage](../../assets/docs/about/userpage.png) +We’re glad you’re here. +If you’re a developer looking for technical documentation, head to the [For Developers section](../build-on-morph/0-developer-navigation-page.md). +If you’re here to understand what Morph is and how to get started, you’re in the right place. ### What is Morph? -Morph is a cutting-edge Layer 2 solution built on Ethereum, combining the best of optimistic rollups and zk technology. This makes us scalable, secure, and perfect for everyday applications. Our mission is to build the first blockchain for consumers, where user-friendly applications integrate seamlessly into everyday life, becoming indispensable utilities. We prioritize enabling blockchain applications that enhance daily experiences over chasing trivial technical milestones. Our focus is on creating meaningful, practical solutions that transform blockchain technology into core aspects of daily life +Morph is a high-performance blockchain built on Ethereum, designed to power the next generation of onchain consumer finance. +It is the consumer finance layer for the digital economy, enabling fast, low-cost, and secure transactions for people who live, earn, and transact online. +Our focus is simple: build products that serve real people and make blockchain useful in everyday life. + ### Getting Started To help you navigate through our resources, here’s a quick guide: -**Introductory Concepts**: Get a general understanding of Morph, including what makes it unique, our vision and mission, key concepts, and a look at our roadmap. This section will help you grasp the basics and understand the foundation of Morph. +**Introductory Concepts**: -**Step-by-Step Guides**: Follow these practical tutorials for setting up your wallet, using the faucet, bridging assets, and exploring the Morph ecosystem. These guides are perfect for hands-on learning and getting started with Morph. +**Step-by-Step Guides**: -**Links and Tools**: Access useful tools such as the Morph Holesky Explorer and the official bridge. This section provides all the necessary links and resources to interact with and explore the Morph network effectively. +**Links and Tools**: -### Engage in Our Ecosystem +### Core Products -Want to skip most of the reading and get started with exploring more right away? These are the guides that will get you right into the action: +#### Morph Pay -- **Wallet Setup**: Learn how to set up your wallet to interact with Morph. -- **Using the Faucet**: Get test tokens to start experimenting on our testnet. -- **Bridging Assets**: Understand how to bridge assets between Morph and Ethereum. -- **Exploring Morph Zoo**: Dive into the diverse range of dApps and projects in the Morph ecosystem. -- **Morph Holesky Explorer**: Use our explorer to track transactions and explore the blockchain. +The wallet experience for everyday use. Users can verify identity, hold multi-currency balances, activate a digital card, earn rewards, and access real-time FX. Everything you need to spend, save, and earn in one place. -### Explore and Connect +#### Morph Rails + +The programmable infrastructure for developers and merchants. Includes modules for payments, FX, payroll, compliance, and rewards. Permissionless, self-custodial, and scalable. Think of it as a decentralized Stripe. -We believe in building a vibrant community around Morph. Join us on [Discord](https://discord.com/invite/L2Morph) to engage with other users and follow us on [Twitter](https://twitter.com/Morphl2) to stay updated with our latest news and developments. +#### Morph Black +An NFT that unlocks access to exclusive campaigns, real-world perks like lounge access, and deeper rewards across the Morph ecosystem. +##### Morph Platinum +A non-transferable Soulbound Token (SBT) tied to your wallet. Enables verified identity, compliance-based features, and future governance rights. + + +### Explore and Connect +To get started: +- **Set up your wallet** +- **Use the faucet** +- **Bridge assets** +- **Explore Morph Zoo** +- **Try Morph Pay** + +Join the community and stay up to date: +𝕏: [x.com/MorphLayer](x.com/MorphLayer) +Discord: [discord.gg/MorphLayer](discord.gg/MorphLayer) +Telegram: [t.me/MorphL2official](t.me/MorphL2official) diff --git a/docs/about-morph/1-overview-of-morph.md b/docs/about-morph/1-overview-of-morph.md index e4fa44957..d83501e1a 100644 --- a/docs/about-morph/1-overview-of-morph.md +++ b/docs/about-morph/1-overview-of-morph.md @@ -1,35 +1,40 @@ --- -title: Overview +title: Introductory Concepts - Overview lang: en-US keywords: [morph,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimistic zk-rollup solution. Try it now! --- -Welcome to Morph, a blockchain for consumers. At the core of Morph is a revolutionary approach to Ethereum Layer 2 scalability, harnessing the power of rollup technology. +Morph is a blockchain designed for onchain consumer finance. It powers payments, savings, identity, and rewards through a fast, secure, and scalable infrastructure. +Morph supports how people live and transact online. The platform makes it easy for users to manage money, earn rewards, and spend globally. For developers, Morph provides the tools to build programmable financial applications without complexity or custodial risk. -Our platform is uniquely designed to enhance the blockchain experience, making it more accessible, efficient, and user-friendly for both developers and consumers. We achieve these innovations through a unique combination of cutting-edge technologies. +### Onchain Consumer Finance +Morph is built for practical use. Every component of the system is designed to support real-world financial activity. Whether you're sending money, earning income, or building apps, Morph offers the performance and flexibility needed for daily use. -## What Makes Morph Special +### Core Infrastructure -Given that our platform is built on the philosophy of consumer-centric innovation, we believe blockchain technology has the transformative power to enhance users’ daily lives. To accomplish this vision, our infrastructure has three core technological components that function as the foundation of a consumer blockchain. +#### Decentralized Sequencer Network +A distributed sequencer model improves fairness, removes single points of failure, and protects against transaction censorship and MEV extraction. -### Decentralized Sequencer Network -Morph’s distribution of the sequencing role eliminates single points of failure, reduces transaction censorship, and prevents monopolies over Miner Extractable Value (MEV). Building on Morph means guaranteed high availability, resilience, and fairness in transaction processing. +#### Optimistic zkEVM with RVP +Morph uses an Optimistic rollup integrated with zero-knowledge proofs through Responsive Validity Proof. This reduces withdrawal delays, lowers costs, and improves security. -### Optimistic zkEVM Integration -Morph’s Optimistic zkEVM Integration combines the efficiency of optimistic rollups with the security of zero-knowledge proofs, using a novel method called Responsive Validity Proof (RVP). RVP reduces costs and shortens withdrawal periods while maintaining high security, enabling robust applications that don’t compromise on performance or security. +### Modular Rollup Design +Consensus, execution, and data availability are separated. This allows developers to build and scale without disrupting the network. -### Modular Design -Morph's architecture is divided into three modules: Sequencer Network for consensus and execution, Optimistic zkEVM for state verification, and Rollup for data availability. Developers can build and maintain applications more efficiently, ensuring each component can be upgraded independently without disrupting the entire system. +## Built for Users and Builders +**Morph Pay** gives users a unified experience. It supports identity verification, multi-currency balances, digital cards, real-time FX, and reward earning. +**Morph Rails** provides developers with a permissionless infrastructure stack. It includes smart modules for payments, payroll, foreign exchange, compliance, and wallet integrations. Builders can compose financial logic into any application without licenses or custodians. + +Morph connects consumers and developers through a single, efficient platform. It is built to support the next generation of digital finance. -Before you dive into a deeper exploration of our technology, understanding our [Vision and Mission](./5-morphs-vision-and-mission.md) will offer a better idea of why Morph stands out in the industry. diff --git a/docs/about-morph/2-the-technology-behind-morph.md b/docs/about-morph/2-the-technology-behind-morph.md index c94cf70d0..5095b3447 100644 --- a/docs/about-morph/2-the-technology-behind-morph.md +++ b/docs/about-morph/2-the-technology-behind-morph.md @@ -7,41 +7,45 @@ description: Upgrade your blockchain experience with Morph - the secure decentra ## Decentralized Sequencer Network -Morph's Decentralized Sequencer Network is designed to enhance the security and reliability of the blockchain. Unlike traditional Layer 2 solutions that rely on a centralized sequencer, Morph employs a network of decentralized sequencers. This setup ensures that no single entity has control over the transaction sequencing process, thereby eliminating the risk of a single point of failure. If one sequencer fails or acts maliciously, the others can continue processing transactions, maintaining the system's integrity and uptime. This decentralization also prevents transaction censorship and ensures that no single entity can monopolize Miner Extractable Value (MEV), creating a fairer environment for all users. -This collaborative approach not only increases security but also improves the overall efficiency and reliability of the transaction processing system, making Morph a robust and resilient Layer 2 solution. +Morph's Decentralized Sequencer Network is designed to enhance the security and reliability of the blockchain. Unlike traditional blockchain solutions that rely on a single, centralized sequencer, Morph employs a network of decentralized sequencers. This ensures that no single entity controls the transaction sequencing process, removing the risk of a single point of failure. +If one sequencer fails or acts maliciously, others continue processing transactions, preserving system integrity and uptime. This decentralization also prevents transaction censorship and stops any one party from monopolizing Miner Extractable Value (MEV), creating a fairer environment for all users. -![Sequqencer Network](../../assets/docs/about/overview/seq1.png) +This collaborative structure increases security, improves efficiency, and ensures reliable transaction processing, making Morph a robust and resilient blockchain network. -Visit Morph’s [Decentralized Sequencer Network](../how-morph-works/decentralized-sequencers/1-morph-decentralized-sequencer-network.md) for a more comprehensive article. +Visit Morph’s [Decentralized Sequencer Network](../how-morph-works/decentralized-sequencers/1-morph-decentralized-sequencer-network.md) for a more comprehensive article. ## Optimistic zkEVM Integration -Optimistic and Zero-Knowledge (ZK) rollups are two distinct approaches to scaling blockchain transactions on layer 2. Optimistic rollups simply assume all transactions are valid when submitting a batch for settlement on Ethereum. However, the validity of any transaction can be contested by entities known as challengers, by submitting proof of fraudulent activity. If the fraud-proof is successful, the incorrect transaction is rejected, ensuring security but at the cost of some potential delays and high gas fees associated with the challenge process. +Optimistic and Zero-Knowledge (ZK) rollups are two different approaches to scaling blockchain transactions on Morph. +Optimistic rollups assume all transactions are valid when submitted for settlement on Ethereum. Any transaction can be challenged by a participant (known as a challenger) who submits proof of fraud. If the fraud proof succeeds, the invalid transaction is rejected. This process ensures security but can introduce delays and higher gas fees due to the challenge process. -ZK rollups, on the other hand, use cryptographic proofs to verify the validity of transactions before these are submitted for settlement. All batches have their own ZK proof, allowing quick verification on the main chain without needing to review all the data associated with each transaction (hence “zero-knowledge”). This offers immediate finality with higher security, but generating these proofs is computationally intensive and costly. +ZK rollups use cryptographic proofs to verify transaction validity before submission. Each batch includes its own ZK proof, allowing fast verification on Ethereum without reviewing all transaction data. This offers immediate finality and stronger security, but generating ZK proofs is computationally expensive. +Morph combines these models through **Responsive Validity Proof (RVP)**. Transactions are processed optimistically for speed and cost efficiency. If a transaction is challenged during the challenge window, the sequencer must generate and submit a ZK proof to confirm its validity. -Morph’s hybrid rollup combines the best of these two approaches. Initially, the system operates optimistically, assuming transactions are valid to allow for quick processing and low costs. When a transaction is contested within Morph’s challenge window, it’s the sequencer that is required to produce a ZK proof to validate the transaction. We call this approach Responsive Validity Proof (RVP). It comes with the following improvements: +This approach offers two major improvements: +- **Efficiency and speed**: The typical 7-day challenge period can be shortened to 1–3 days because challengers no longer need additional time to identify malicious transactions, generate proofs, and engage in lengthy dispute processes. -- Efficiency and Speed: A typical 7-day challenge window can be shortened to 1-3 days (a challenger no longer needs the extra time to identify malicious submissions, create a proof, and engage in multiple rounds of challenge procedures). -- Reduced Costs: Employing ZK-proofs means that only minimal transaction information is retained, thereby significantly reducing the cost of L2 submissions. When no challenges arise, the cost of ZK-proof submission and verification can be ignored. RVP is therefore more cost-effective than both optimistic and ZK rollups. +- **Reduced costs**: ZK proofs are only generated when needed. When there are no challenges, the cost of ZK proof submission and verification is avoided, making RVP more cost-effective than both pure optimistic and pure ZK rollups. ![Sequqencer Network](../../assets/docs/about/overview/opzk.png) -Visit [Responsive Validity Proof](../how-morph-works/optimistic-zkevm) for a more comprehensive article. +Visit [Morph’s Modular Design](../how-morph-works/2-morph-modular-design.md) for a more comprehensive article. + ## Modular Design -At its core, Morph is constructed using a sophisticated modular design architecture. The platform is organized into three functional modules (Sequencer Network, Rollup, Optimistic zk-EVM), each defined by distinct roles that collaborate in various configurations to meet diverse requirements. Each role within these modules operates its specific components, maintaining functional independence. This modular structure not only fosters flexibility and adaptability but also bolsters the composability of the system. It enables an efficient and interactive ecosystem, supporting the varied operational needs of our platform. +Morph is built using a modular architecture that organizes the platform into three core components: Sequencer Network, Rollup, and Optimistic zkEVM. Each module has a distinct role and can operate independently while working together to meet a wide range of operational requirements. +This modular structure increases flexibility and adaptability, making it easier to upgrade individual components without disrupting the entire network. It also improves composability, allowing applications and services on Morph to interact seamlessly and efficiently. -![Sequqencer Network](../../assets/docs/about/overview/modu.png) +![Sequqencer Network](../../assets/docs/about/overview/modu.png) -Visit [Morph’s Modular Design](../how-morph-works/2-morph-modular-design.md) for a more comprehensive article. \ No newline at end of file +Visit [Morph’s Modular Design](../how-morph-works/2-morph-modular-design.md) for a more comprehensive article. diff --git a/docs/about-morph/4-morphs-architecture.md b/docs/about-morph/4-morphs-architecture.md index fdafc20e6..f65ec2826 100644 --- a/docs/about-morph/4-morphs-architecture.md +++ b/docs/about-morph/4-morphs-architecture.md @@ -5,47 +5,49 @@ keywords: [morph,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimistic zk-rollup solution. Try it now! --- -:::tip - - This overview offers a concise introduction to Morph’s rollup technology stack. For an in-depth understanding, please refer to the "How Morph Works" section of our documentation. - -::: ![Archi](../../assets/docs/about/architecture/archi.png) -## The Modular Approach in Layer 2 +## The Modular Approach -Traditionally, the concept of modularity has been applied to Layer 1 blockchains, segmenting them into distinct layers. At Morph, we've extended this modular philosophy to Layer 2, building our platform around this principle. +Layer 1 blockchains have traditionally embraced modularity by separating execution, consensus, and data availability. Morph extends this approach across the entire stack, building our platform on the same principle. -In a typical Layer 1 blockchain, the architecture consists of four major layers: -- Consensus: The mechanism through which network agreement is achieved. +In a typical Layer 1 blockchain, the architecture consists of four major layers: +- Consensus: The mechanism through which the network reaches agreement. - Execution: Where transaction processing and smart contract operations occur. - Settlement: The process of finalizing transactions. - Data Availability: Ensuring that necessary information is accessible for validation. -In the context of Layer 2, Morph reinterprets these layers with unique functionalities: -- **Consensus and Execution via Decentralized Sequencer Network**: At Morph, these functions are integrated and handled by our decentralized sequencer network. Sequencers orchestrate, process, and achieve consensus on Layer 2 transactions, forming the primary interface for user interactions. +## Morph’s Interpretation +Morph Layer reinterprets these layers with unique functionalities: + +- **Consensus and Execution via Decentralized Sequencer Network** + At Morph, both functions are unified within a decentralized sequencer network. Sequencers coordinate, process, and finalize Morph Layer transactions. They also act as the main entry point for user interactions. ![Archi](../../assets/docs/about/overview/seq1.png) -- **Settlement with Optimistic zkEVM**: Settlement in Morph refers to the finalization of Layer 2 transactions at the Ethereum level. It involves the crucial step of validating Layer 2 states. Morph employs the optimistic zkEVM for this purpose, a hybrid approach blending the best of optimistic rollups and zk-rollups. Layer 2 states will be eventually finalized by a significantly shorter challenge period or if gets challenged, a corresponding zk-proof. +- **Settlement with Optimistic zkEVM** +Settlement in Morph refers to the finalization of Layer 2 transactions at the Ethereum level. It involves validating Layer 2 states. Morph employs the Optimistic zkEVM for this purpose, a hybrid approach blending optimistic rollups and zk-rollups. Layer 2 states are finalized either after a shortened challenge period or, if challenged, through the submission of a corresponding zk-proof. + ![Archi](../../assets/docs/about/overview/opzk.png) -- **Data Availability through 'Rollup' Process**: This entails transferring essential Layer 2 data to Ethereum. In Morph, this is achieved through the 'Rollup' process, where a batch submitter compiles blocks into batches and submits them as Layer 1 transactions on Ethereum. +- **Data Availability through 'Rollup' Process**: +This involves transferring essential data to Ethereum. In Morph, this is done through the Rollup process, where a batch submitter compiles blocks into batches and submits them as Layer 1 transactions on Ethereum. ![Archi](../../assets/docs/about/architecture/rollup.png) + ## Independent yet Collaborative Functions Each of these major functions operates independently, facilitating asynchronous tasks and switchable implementations: -1. Sequencer Network: Executes Layer 2 transactions and updates local state. -2. Rollup Module: Transforms Layer 2 blocks into batches for submission to Layer 1. -3. State Verification: Utilizes Layer 1 security to verify Layer 2 states under the optimistic zkEVM rules. +- Sequencer Network: Executes Layer 2 transactions and updates local state. +- Rollup Module: Transforms Layer 2 blocks into batches for submission to Layer 1. +- State Verification: Utilizes Layer 1 security to verify Layer 2 states under the optimistic zkEVM rules. This modular architecture enhances flexibility, adaptability, and composability within the Morph ecosystem. @@ -53,33 +55,32 @@ This modular architecture enhances flexibility, adaptability, and composability ## Diverse Roles -Morph’s architecture is further defined by five pivotal roles: Sequencers, Validators, Nodes, Provers, and Layer 1 (Ethereum). Each role carries specific responsibilities and utilizes distinct components to fulfill its function, contributing to the seamless operation of the network. +Morph’s architecture is further defined by five pivotal roles: Sequencers, Validators, Nodes, Provers, and Layer 1 (Ethereum). Each role carries specific responsibilities and uses distinct components to fulfill its function, contributing to the seamless operation of the network. For a deeper understanding of Morph’s architecture, please visit our comprehensive [Developer Docs](../build-on-morph/0-developer-navigation-page.md). ## Safety and Security -We place the highest priority on security and are committed to providing users with a safe and trustworthy environment. To achieve this, we’ve implemented multiple measures, including making our codebase open-source, engaging leading third-party firms for audits, and continuously improving our systems to uphold the highest standards of transparency and security. Below are some specific efforts we’ve undertaken: +Security is a top priority at Morph. We are committed to providing users with a safe and trustworthy environment. To achieve this, we have implemented multiple measures, including making our codebase open-source, commissioning third-party audits, and continuously improving our systems to uphold the highest standards of transparency and protection. -### Open-Source Codebase: -We’re proud to make our codebase publicly available, inviting scrutiny and contributions from the community. You can review it at the following links: +### Open-Source Codebase: +Our codebase is publicly available, allowing review and contributions from the community. You can explore it here: [Morph Contracts](https://github.com/morph-l2/morph/tree/main/contracts) ### Sherlock Open-Source Audit Report: -We commissioned a comprehensive security audit from Sherlock, and the results are publicly available. You can view the detailed report here: - +We commissioned a full security audit from Sherlock, and the results are publicly available: [Sherlock Open-Source Audit Report](https://audits.sherlock.xyz/dashboard/9b78b63a3eb0597e7ba60eec251b6888/confirm_issues) ### Trail of Bits Audit Report: -Additionally, we enlisted the renowned Trail of Bits team to conduct an in-depth audit of our codebase, including a review of implemented fixes. The [full report](https://github.com/morph-l2/audits/blob/main/tob/Morph%20-%20Comprehensive%20Report%20with%20Fix%20Review.pdf) is accessible. +The Trail of Bits team conducted an in-depth audit of our codebase, including verification of implemented fixes. The complete report is available here [Trail of Bits Audit Report](https://github.com/morph-l2/audits/blob/main/tob/Morph%20-%20Comprehensive%20Report%20with%20Fix%20Review.pdf). ### Audit Scope: -The above audit reports cover the entirety of our codebase, including the bridge contract, ensuring that all critical components have undergone rigorous security assessments. +These audits cover the full codebase, including the bridge contract, ensuring that all critical components have undergone rigorous security assessments. +We believe transparency and security are the foundation of trust. Morph will continue to work with the community and leading security firms to raise standards and provide users with confidence in the platform. For any questions or suggestions, you are welcome to contact us at any time. -We firmly believe that transparency and security are the cornerstones of trust. We will continue to collaborate with the community and professional organizations to elevate our security standards and provide users with peace of mind. If you have any questions or suggestions, feel free to reach out to us at any time! diff --git a/docs/about-morph/5-morphs-vision-and-mission.md b/docs/about-morph/5-morphs-vision-and-mission.md index 386d19506..5b848ceec 100644 --- a/docs/about-morph/5-morphs-vision-and-mission.md +++ b/docs/about-morph/5-morphs-vision-and-mission.md @@ -5,29 +5,33 @@ keywords: [morph,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimistic zk-rollup solution. Try it now! --- -Morph is redefining the blockchain landscape with a clear focus on the consumer. Our vision is rooted in the belief that blockchain technology should be an accessible, practical tool for daily life, rather than a complex concept reserved for experts. We aim to transform how individuals interact with blockchain technology, making it as integral and user-friendly as any essential service in the digital age. +Morph’s vision is to power the future of onchain consumer finance. We believe blockchain should be a practical, accessible tool that supports everyday life, not a technology reserved for specialists. Our goal is to make financial tools as seamless and essential as any other core service in the digital economy. -## We Seek to Bridge the Gap​ +## Bridging the Gap -Our mission is to build an ecosystem of on-chain consumer applications on a completely decentralized infrastructure. Morph was created as a more approachable and practical blockchain solution in response to the gap in existing Layer 2 offerings – a lack of focus on the end-user experience and practicality. +Our mission is to build a global ecosystem of onchain consumer applications on fully decentralized infrastructure. Morph was created to address the gap in blockchain solutions, where technical focus often outweighs user experience. We prioritize usability, speed, and reliability so both consumers and developers can benefit from blockchain without friction. +Morph enables this through two core products: +- **Morph Pay** – A smart wallet that unifies identity, multi-currency balances, digital cards, real-time FX, and rewards into a single onchain experience. -## Why Morph?​ -The inspiration behind Morph is a fusion of dreams and precision. Our platform is named after Morpheus, the Greek god of dreams, symbolizing our ability to influence both the commonplace and the extraordinary. Morph also draws on the mathematical principle of morphology, representing transformations that maintain structure and integrity. The combination of these concepts represents our ability to bring revolutionary blockchain applications that focus on improving everyday life with precision and reliability. +- **Morph Rails** – A permissionless, self-custodial infrastructure layer for developers and merchants. It offers programmable modules for payments, FX, payroll, compliance, and rewards, functioning like a decentralized Stripe. + +Together, these products create a complete financial layer for consumers, businesses, and builders. -## Commitment to Our Community​ +## Why Morph?​ + +The name Morph reflects both vision and precision. Inspired by Morpheus, the Greek god of dreams, it represents the power to shape both the everyday and the extraordinary. Morphology, the mathematical study of transformation, symbolizes our commitment to innovation while maintaining structure and reliability. This fusion reflects our goal: delivering transformative blockchain applications that improve daily life with accuracy and trust. -At Morph, our commitment extends beyond technology. We prioritize: -- Consumer-Centric Innovation: Focusing on the needs and experiences of users, ensuring that our platform is intuitive, efficient, and beneficial for everyday use. -- Transparency and Trust: Building a community grounded in openness and mutual trust, where every step we take is communicated clearly and honestly. -- Collaborative Ecosystem: Encouraging active participation and feedback from our community, ensuring that Morph evolves in alignment with the needs and demands of its users. +## Our Commitments +- **Consumer-Centric Innovation** – Designing tools that put user needs first, ensuring the experience is intuitive, efficient, and useful. +- **Transparency and Trust** – Operating with openness, sharing progress clearly, and building lasting confidence in our platform. diff --git a/docs/about-morph/6-roadmap.md b/docs/about-morph/6-roadmap.md index 911adacfc..09793fa03 100644 --- a/docs/about-morph/6-roadmap.md +++ b/docs/about-morph/6-roadmap.md @@ -5,28 +5,50 @@ keywords: [morph,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimistic zk-rollup solution. Try it now! --- -:::tip - The roadmap is subject to changes based on technological developments, community feedback, and external factors. -::: +![1](../../assets/docs/about/roadmap/roadmap1.jpg) -![1](../../assets/docs/about/roadmap/roadmap.png) -## 2024 Q1 -- Optimistic zkEVM -- Decentralized Sequencers +## 2025 Q3 -## 2024 Q2 +- Launch Morph Payment Card (Phase 1) +- Launch Morph Pay V1 (Super-App) +- Launch first-party crypto yield products (stable return, active management) +- KOL and campaign activations in Korea, SEA, and China -- EIP-4844 Integration -- zkEVM Upgrade +## 2025 Q4 -## 2024 Q4 +- Enable gasless transactions +- Launch Onchain FX Module with real-time stablecoin swaps +- Expand card issuance support to additional countries and regions +- Launch cross-chain yield products +- Add support for EIP-2537 for batch BLS signature verification +- SDK upgrade with recurring billing and compliance integrations +- Roll out liquidity mining programs across DEX and CEX -- 1st Rollup with SP1 zkVM -- 1st Rollup with Decentralized Sequencers +## 2026 Q1 -## 2025 Q1 -- Morph Pay -- Gasless Transaction \ No newline at end of file +- Launch Morph Rails (permissionless, composable payment rail) +- Launch Decentralized Payment Card +- Launch Onchain Merchant Acquiring Network +- Integrate EIP-7702 for sponsored transaction flows +- Roll out Ecosystem Developer Incentive Plan Phase 1 + +## 2026 Q2 + +- Launch Morph Token Staking Mechanism +- Launch cross-border invoice and enterprise billing product +- Introduce token-gated ecosystem utilities (compliance API access, priority flow) + +## 2026 Q3 + +- Release DID and Attestation Service +- Enable custom gas token model for ecosystem dApps +- Launch regulated DeFi-aligned custody and asset bridge (internal DeFi-lite infrastructure) + +## 2026 Q4 + +- Upgrade to full zk-Rollup architecture for enhanced scalability and privacy +- Finalize DAO-based governance launch +- Fully integrate first-party service token loop: issuance → consumption → rewards diff --git a/docs/about-morph/7-faqs.md b/docs/about-morph/7-faqs.md index a63a01479..861e51a86 100644 --- a/docs/about-morph/7-faqs.md +++ b/docs/about-morph/7-faqs.md @@ -7,51 +7,76 @@ description: Upgrade your blockchain experience with Morph - the secure decentra ## What Kind of Rollup is Morph? -Morph uses a hybrid rollup model called "Optimistic zkEVM & RVP". This combines the strengths of both zkRollups and Optimistic Rollups, optimizing for efficiency, cost, and speed. This unique approach places Morph at the cutting edge of rollup technology. +Morph uses a hybrid rollup architecture called Optimistic zkEVM with **Responsive Validity Proof (RVP)**. This combines the scalability of optimistic rollups with the security and fast finality of zero-knowledge proofs. Transactions are processed optimistically for speed and cost efficiency, and when challenged, the sequencer produces a zk proof to validate the transaction. This approach shortens withdrawal times and reduces costs while maintaining strong security. -## What Sets Morph Apart from Other Rollups? +## What Sets Morph Apart from Others? -Morph stands out with its innovative features: +Morph is purpose-built for **onchain consumer finance** and offers both a user-facing experience and a developer infrastructure layer: +- **Morph Pay** – A super-app wallet that supports identity verification, multi-currency balances, digital cards, real-time FX, yield products, and built-in rewards -**State Verification**: The Optimistic zkEVM & RVP method enhances efficiency by combining zkRollups and Optimistic Rollups. -**Efficiency and Cost Reduction**: Morph ensures fast transaction execution and cost-effectiveness while maintaining decentralization. +- **Morph Rails** – A permissionless, composable infrastructure layer for developers and merchants to build payments, FX, payroll, compliance, and rewards directly into their applications -**Decentralized Sequencer Network**: This pioneering network setup addresses security concerns and ensures robustness at a Layer 1 level. -**Modular Architecture**: Morph’s adaptable and composable architecture fosters a flexible and interactive ecosystem. +- **Decentralized Sequencer Network** – Improves fairness, uptime, and security by removing single points of failure and preventing MEV monopolization -## As a Solidity Developer, Will I Notice Differences Deploying on Morph Compared to Ethereum? -Deploying on Morph is very similar to deploying on Ethereum, thanks to its EVM compatibility. Ethereum applications can be migrated to Morph with minimal adjustments. For more detailed guidance, check out the [Development Guides](../build-on-morph/build-on-morph/2-development-setup.md) section. +- **Hybrid zkEVM with RVP** – Reduces withdrawal delays to as little as 1–3 days and lowers operational costs without sacrificing trustlessness -## The L2 gas price is too high to execute transactions or deploy contracts, what should i do? -The L2 Gas Price you obtained from external resources (eg. RPC) is typically derived from the average or median of confirmed transactions over a certain period. This figure reflects the recommended settings to ensure your transaction gets confirmed, rather than representing the most cost-effective value. +- **Modular Architecture** – Separates execution, consensus, and data availability for greater flexibility, scalability, and composability -In some cases, certain users may intentionally raise the priority fee (hence the total gas fee) to earn more campaign points, resulting in abnormally high Gas Prices. We recommend that you can reduce your transaction costs by manually setting the L2 Gas Price. -Currently, Morph's L2 Base Fee is **0.001 gwei**, and as long as the number of transactions per block does not reach the limit, you only need to pay the Base Fee to ensure your transaction confirmation, without needing to pay an excess Priority Fee. +## I’m a Solidity developer. Will I notice differences deploying on Morph compared to Ethereum? -Here is a transaction example that only pays the L2 Base Fee and got confirmed: +Morph is fully EVM-compatible, so deploying is almost identical to deploying on Ethereum. Most applications can be migrated with minimal changes. Developers also have access to Morph’s SDK for advanced features like gasless transactions, recurring billing, and compliance integrations. +See the [Development Guides](../build-on-morph/build-on-morph/2-development-setup.md) for more details. -https://explorer.morphl2.io/tx/0x5968aa54ca3072f56ee3d26602f4e8104d1239a7b1cef6847e0306f81881bf50 +## How does Morph handle gas fees? -## How long should I wait for my funds to withdraw from Morph? +Morph’s L2 Base Fee is currently 0.001 gwei. You only need to pay the base fee to have your transaction confirmed, as long as block capacity is not full. Priority fees are optional unless you need faster confirmation during high activity periods. Some users may raise the priority fee for campaign participation or competitive bidding, which can cause temporary spikes in the reported “average” gas price. In these cases, manually setting the gas price close to the base fee can help reduce costs. -Currently, the Morph mainnet has a 48-hour (2 days) challenge window. This means that if you are using our canonical bridge, you need to wait 48 hours (2 days) to receive your funds. There are several third-party bridges that offer a faster withdrawal experience by using a liquidity pool mechanism. +[View an example transaction paying only the L2 Base Fee](https://explorer.morphl2.io/tx/0x5968aa54ca3072f56ee3d26602f4e8104d1239a7b1cef6847e0306f81881bf50) -## How do i speed the transaction on Morph? +## How can I speed up a transaction on Morph? -Same like Ethereum mainnet and any other EIP 1559 chains. If your transaction is pending and not confirmed, you can replace it with a new one that has a higher gas price. This involves sending the same transaction again but with an incrementally higher gas price, using the same nonce as the original. +Morph follows the same rules as Ethereum mainnet and other EIP-1559 networks. If your transaction is pending, you can resend it with the same nonce and a higher gas price to replace the original. Many wallets have built-in “Speed Up” or “Accelerate” features to make this easy. -A lot of the wallet have built in features to help you do this. -## My Transaction is Pending, What Should I Do? +## My transaction is still pending. What should I do? -For the testnet, if the priority fee you paid is too low, less than 0.01 gwei, your transaction will not be processed. This is to prevent spam transactions from impacting the whole network. If you encounter this situation, please accelerate your transaction by providing a higher priority fee that meets the requirements. +On testnet, transactions with a priority fee below 0.01 gwei will not be processed to prevent spam. Resubmit with a higher priority fee. + On mainnet, pending transactions are usually due to full blocks. Increase your priority fee to improve confirmation chances. Also ensure that any earlier transaction with the same account is confirmed, as new transactions will queue behind it. -For the mainnet, this is usually because each block is currently full, so you need to provide a more competitive priority fee to ensure your transaction is confirmed. +## How long does it take to withdraw funds from Morph? -Additionally, if your previous transaction has not yet been confirmed, your newly submitted transaction will wait for the previous transaction to be fully confirmed. \ No newline at end of file +Morph’s canonical bridge currently has a 48-hour challenge window on mainnet. This is part of the security model for optimistic rollups. For faster withdrawals, you can use supported third-party bridges that use liquidity pools to provide near-instant exits. + + +## Does Morph support gasless transactions? + +Yes. Morph supports sponsored transactions through Morph Pay and developer-integrated flows. This allows dApps to cover user gas costs for smoother onboarding. Sponsored transactions will expand further with Morph Rails integrations. + +## What is Morph Pay? + +Morph Pay is the primary wallet interface for the Morph ecosystem. It allows users to: +- Complete identity verification +- Hold and manage multi-currency balances +- Activate a digital payment card +- Swap between currencies with the Onchain FX Module +- Earn rewards and yield on idle balances +- Access ecosystem campaigns and token-gated features + +## What is Morph Rails? + +Morph Rails is the programmable infrastructure layer that powers the next generation of onchain financial applications. Developers and merchants can use it to: +- Process payments and payouts +- Handle onchain FX and payroll +- Integrate compliance and identity verification +- Enable token-gated services and rewards +- Build composable financial products without custodial risk + +## Is Morph audited? + +Yes. Morph’s codebase is open source and has undergone audits from multiple top-tier firms including **Sherlock** and **Trail of Bits**. Audit reports are public, and all identified issues have been addressed. Additional audits are conducted for major product updates. diff --git a/docs/about-morph/8-key-concepts.md b/docs/about-morph/8-key-concepts.md index b62c21f9c..8aa2e18b5 100644 --- a/docs/about-morph/8-key-concepts.md +++ b/docs/about-morph/8-key-concepts.md @@ -8,42 +8,46 @@ description: Upgrade your blockchain experience with Morph - the secure decentra ## Optimistic Rollups -Optimistic rollups are a Layer 2 scaling solution for blockchains that enhance transaction throughput and reduce costs by assuming transactions are valid and only verifying them if a challenge is raised. This method relies on a challenge period during which validators can dispute transactions they believe to be incorrect. If no disputes are raised, the transactions are considered final. Optimistic rollups significantly improve scalability while maintaining security, making them an efficient solution for handling a higher volume of transactions on blockchain networks. +A Layer 2 scaling solution that improves transaction throughput and reduces costs by assuming transactions are valid unless challenged. During a set challenge period, validators can dispute transactions they believe are incorrect. If no disputes are raised, transactions become final. Optimistic rollups enhance scalability while maintaining security, making them effective for handling higher transaction volumes. + [Learn more about Optimistic Rollups](https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/) ## ZK Rollups -ZK rollups, or zero-knowledge rollups, are a Layer 2 scaling solution that uses cryptographic proofs to verify the validity of transactions off-chain before bundling them and submitting a proof to the main blockchain. Each batch of transactions is accompanied by a zero-knowledge proof, which ensures that all transactions within the batch are valid without revealing the underlying data. This method provides immediate finality and high security, as the main chain only needs to verify the proof rather than each individual transaction, significantly reducing the computational load and enhancing scalability. +Also known as zero-knowledge rollups, this Layer 2 scaling method uses cryptographic proofs to verify transactions off-chain before submitting them to the main blockchain. Each batch is accompanied by a zero-knowledge proof, ensuring all transactions are valid without revealing sensitive data. ZK rollups provide immediate finality, strong security, and reduced computational load on the main chain. [Learn more about ZK Rollups](https://ethereum.org/en/developers/docs/scaling/zk-rollups/) ## Sequencers -Sequencers are specialized nodes responsible for ordering and bundling transactions in Layer 2 scaling solutions like rollups. They play a crucial role in determining the sequence of transactions, creating blocks, and periodically committing these blocks to the main blockchain. In decentralized systems, multiple sequencers work together to enhance security and prevent single points of failure. By ensuring transactions are processed efficiently and securely, sequencers help maintain the integrity and performance of Layer 2 networks. +Specialized nodes that order and bundle transactions in Layer 2 systems such as rollups. Sequencers determine transaction order, create blocks, and periodically commit them to the main blockchain. In decentralized setups, multiple sequencers improve security and remove single points of failure. They are essential for ensuring efficiency, fairness, and performance. + ## Fraud Proof -Fraud proof is a mechanism used in blockchain scaling solutions like optimistic rollups to ensure transaction validity. When a sequencer submits a batch of transactions, they are assumed to be valid unless contested. During a designated challenge period, any validator or network participant can submit a fraud proof if they detect an incorrect transaction. This proof involves verifying the transaction data and demonstrating the error to the main blockchain. If the fraud proof is validated, the incorrect transaction is rejected, ensuring the integrity and security of the network while minimizing computational costs. +A mechanism used in optimistic rollups to validate transactions. When a sequencer submits a batch, it is assumed valid unless contested during the challenge period. If a participant detects an error, they can submit a fraud proof to the main chain. If verified, the incorrect transaction is rejected, protecting the network’s integrity while minimizing computation. + ## Validity Proof -Validity proof is a cryptographic method used to ensure that transactions within a rollup are correct before they are finalized on the main blockchain. In systems like ZK rollups, each batch of transactions is accompanied by a validity proof that verifies the correctness of all transactions within the batch. This approach enhances security and efficiency by eliminating the need for individual transaction verification on the main chain, providing immediate finality and reducing computational overhead. +A cryptographic proof that confirms all transactions in a batch are correct before finalization on the main chain. In ZK rollups, each batch includes a validity proof, ensuring immediate finality and eliminating the need for individual transaction verification. This improves security and reduces computational overhead. + ## zkEVM -zkEVM, or Zero-Knowledge Ethereum Virtual Machine, is an advanced implementation of the Ethereum Virtual Machine that integrates zero-knowledge proofs to enhance scalability and security. By using zk proofs, zkEVM allows for the validation of transactions off-chain, ensuring that only valid state transitions are submitted to the main chain. This method provides high throughput and lower transaction costs while maintaining the security and trustlessness of Ethereum. +A Zero-Knowledge Ethereum Virtual Machine that integrates zk proofs into Ethereum’s execution environment. It validates transactions off-chain and only submits valid state transitions to the main chain. zkEVM improves throughput and lowers costs while maintaining Ethereum’s security and trustless nature. ## BLS Signatures -BLS (Boneh-Lynn-Shacham) signatures are a cryptographic technique used to aggregate multiple signatures into a single compact signature. This is particularly useful in blockchain networks for reducing the data size and improving the efficiency of transaction verification. BLS signatures enable multiple validators to sign a message collectively, resulting in a single signature that can be verified quickly and cost-effectively, enhancing the overall scalability of the network. +A cryptographic technique (Boneh–Lynn–Shacham) that aggregates multiple signatures into one compact signature. This reduces data size and speeds up verification. In blockchain networks, BLS signatures allow multiple validators to collectively sign a message, improving efficiency and scalability. ## Data availability -Data availability refers to the assurance that all necessary data for verifying blockchain transactions is accessible and retrievable. In the context of rollups, ensuring data availability is crucial for maintaining the integrity and security of off-chain transactions. It guarantees that anyone can download and verify the data used in rollup proofs, preventing scenarios where transactions are finalized without the possibility of verification. +The guarantee that all data needed to verify transactions is accessible and retrievable. In rollups, this ensures that anyone can download and check the data used in proofs, preventing finalized transactions from becoming unverifiable. ## EIP - 4844 -EIP-4844, also known as Proto-Danksharding, is an Ethereum Improvement Proposal aimed at introducing a new type of transaction that reduces data costs and improves scalability. It involves adding a new transaction format that can efficiently handle large amounts of data, laying the groundwork for future sharding implementations. This proposal enhances the network's ability to manage data more effectively, contributing to overall improvements in throughput and cost-efficiency. +An Ethereum Improvement Proposal introducing a new transaction type that reduces data costs and improves scalability. It allows large amounts of data to be processed more efficiently, laying the groundwork for full sharding in the future. EIP-4844 increases throughput and cost efficiency for rollups like Morph. [Discover how EIP-4844 impacts Morph and other rollups.](https://www.eip4844.com/) diff --git a/docs/about-morph/morph-pay.md b/docs/about-morph/morph-pay.md new file mode 100644 index 000000000..0ecb0040c --- /dev/null +++ b/docs/about-morph/morph-pay.md @@ -0,0 +1,70 @@ +--- +title: Morph Pay +lang: en-US +keywords: [morph,layer2,payfi] +description: Morph Pay. Try it now! +--- + + +## Your Web3 Super-App for Everyday Finance + +**Morph Pay** is the consumer-facing entry point to the Morph ecosystem. It is a Web3 version of Alipay built on Morph’s blockchain. The app combines the accessibility of modern fintech products with the performance and transparency of blockchain, creating a simple and powerful way for anyone to use onchain consumer finance. + +Together with [Morph Rails](./morph-rails.md), the decentralized version of Stripe, Morph Pay forms a complete payments ecosystem that serves both consumers and builders. + +## Overview + +Morph Pay is a centralized, compliance-ready mobile and web application optimized for consumer use. It offers: + +- A familiar, user-friendly interface for managing crypto and fiat balances in one place +- KYC onboarding with instant access to a Morph crypto payment card +- Support for stablecoins and multiple currencies +- Integrated onchain yield strategies that let users earn while they spend +- Near-instant payments with ultra-low fees through Morph’s infrastructure + + +## Key Features + +### 1. Card Issuance + +- Complete KYC in minutes directly in the app +- Receive a crypto payment card for online and in-store spending +- Connect stablecoins like USDC and local currencies into a single balance + +### 2. Earn While You Spend + +- Deposit funds and earn up to 30% APY through safe, integrated onchain yield strategies +- Continue spending normally while your balance grows automatically + +### 3. Borderless Multi-Currency Wallet + +- Swap between stablecoins such as USDC, xSGD, and xEUR +- Near-zero slippage and minimal FX fees (under 0.05%) +- Manage all currencies in one app without juggling multiple wallets + +### 4. Designed for Everyday Use + +- UX inspired by popular fintech apps like Revolut and Venmo +- Loyalty points, automatic cashback, and 24/7 support +- Connect a Morph Black Card for premium perks such as zero FX fees and VIP benefits + +### 5. Security and Compliance + +- Built-in KYC/AML via Sumsub and Chainalysis +- User balances held with licensed custodial partners +- Transparent onchain settlement for all transactions + + +## Highlights + +### User-Friendly Accessibility – Crypto as simple as your favorite payment app + +- **High-Yield Opportunities** – Earn significantly higher returns compared to banks +- **Cost Efficiency and Speed** – Reduce FX fees from 3–5% to under 0.3% +- **Security and Compliance** – Regulatory readiness with user-first privacy +- **Ecosystem Synergy** – Works seamlessly with Morph Rails, the decentralized Stripe-like infrastructure for open payments + + +*Your everyday crypto hub that combines banking ease with blockchain power.* + + diff --git a/docs/about-morph/morph-rails.md b/docs/about-morph/morph-rails.md new file mode 100644 index 000000000..62e61b278 --- /dev/null +++ b/docs/about-morph/morph-rails.md @@ -0,0 +1,99 @@ +--- +title: Morph Rails +lang: en-US +keywords: [morph,layer2,payfi] +description: Morph Rails. Try it now! +--- + +## The Open Infrastructure for Onchain Payments + +**Morph Rails** is the infrastructure layer for permissionless, programmable payments on the Morph blockchain. It is designed for developers, merchants, and service providers to build custom payment flows, foreign exchange, payroll, invoicing, rewards, and compliance services without needing licenses or platform approval. + + +It works hand-in-hand with [Morph Pay](./morph-pay.md), which serves as the consumer-facing super-app in the Morph ecosystem. While Morph Pay onboards users and drives payment adoption, Morph Rails provides the open infrastructure that powers those transactions and enables any wallet, app, or merchant to integrate similar capabilities. + + +Morph Rails functions like an open, blockchain-based Stripe. It delivers the same flexibility and modularity Stripe offers to Web2 businesses, but in a fully self-custodial, onchain environment where developers can compose secure, compliant payment experiences without relying on centralized processors. + +## Overview + +Morph Rails shifts the focus from a closed, consumer-facing app to an open, modular protocol. It is optimized for both 2C (consumer) and 2B (business) use, enabling: + +- Permissionless integration for wallets, apps, and merchants +- Self-custodial payment flows where users and businesses control their own assets +- Modular building blocks for FX, payouts, compliance, and rewards +- Instant settlement and global reach through Morph’s infrastructure + + +## Key Features + +### 1. Permissionless by Design + +No licenses, approvals, or gatekeepers. Open infrastructure that anyone can integrate into their products or services. + +### 2. Composable and Modular + +Build with onchain modules for checkout, FX, recurring billing, payroll, and identity verification. Combine modules to create custom payment experiences in minutes. + +### 3. Self-Custodial and Compliance-Ready + +Users and merchants hold their own funds at all times. Integrated tools like Sumsub (ID verification) and Chainalysis (transaction monitoring) provide compliance without custody risk. + +### 4. Advanced Payment Primitives + +Support for group approvals, batch payments, and cross-chain yield routing. Fully transparent, programmable, and executed onchain. + +### 5. Multi-Role Support + +Works for wallet providers, fintech issuers, DeFi protocols, and merchants. Supports both direct consumer-facing use and behind-the-scenes infrastructure integration. + + +## Highlights + +- Decentralized innovation that allows builders to deploy without platform control or restrictions + +- Composability that lets developers mix and match payment, compliance, and rewards modules like Lego bricks + +- Reduced risk for builders by avoiding custody and related legal liabilities + +- Scalable and cost-efficient on Morph Layer with low gas fees and minimal swap costs + +- Expands the Morph ecosystem by attracting more apps, services, and integrations + +*An open, self-custodial foundation for blockchain payments that gives developers the same power Stripe gives Web2 businesses.* + + +## How Morph Rails Fits Into the Ecosystem + +Morph Rails is the core infrastructure layer in Morph’s onchain consumer finance stack. + +- Provides the rails that Morph Pay and other apps run on + +- Enables any wallet, merchant, or developer to plug into the Morph payment network + +- Creates a marketplace of modular payment services for builders and enterprises + + +### Use Cases + +- Merchants can accept stablecoin payments that settle instantly to a self-custodial wallet + +- Wallets and fintechs can integrate ready-made modules for payments, FX, and compliance +DeFi protocols can add native payments, invoicing, and reward distribution without building from scratch + +- Cross-border businesses can use programmable FX and invoicing tools to simplify international transactions + + +## Architecture + +**Account Model**: Smart contract wallet (AA-compatible) + +**Custody**: 100% self-custodial for all users and businesses + +**Compliance**: Modular compliance-as-a-service tools like Sumsub and Chainalysis + +**SDK/API**: Full developer SDK for payments, FX, invoicing, and rewards + +**Settlement**: All payment activity processed on Morph for instant, low-cost settlement + + diff --git a/docs/build-on-morph/0-developer-navigation-page.md b/docs/build-on-morph/0-developer-navigation-page.md index c33cf5132..ef5a3728c 100644 --- a/docs/build-on-morph/0-developer-navigation-page.md +++ b/docs/build-on-morph/0-developer-navigation-page.md @@ -6,18 +6,17 @@ description: Upgrade your blockchain experience with Morph - the secure decentra --- import { CardGroup, Card } from '@site/src/components/Card' -If you’re ready to build applications on Morph, you're in the right place. +If you’re ready to build applications on Morph, you’re in the right place. -For those who are regular users or visiting for the first time, we recommend starting with our [For Users section](../about-morph/0-user-navigation-page.md) to explore introductory content such as definitions, our vision, key concepts, and more. - +For regular users or first-time visitors, we recommend starting with our [For Users section](../about-morph/0-user-navigation-page.md) section to explore introductory content such as definitions, our vision, key concepts, and more. ### What is Morph? -Morph is the first optimistic zkEVM Ethereum Layer 2 solution that is 100% EVM compatible. Building on Morph is just like building on Ethereum. If you’re experienced in Ethereum development, you'll find your existing code, tooling, and dependencies are fully compatible with Morph. +Morph is the first Optimistic zkEVM Ethereum Layer 2 solution that is fully EVM-compatible. Building on Morph is just like building on Ethereum. If you have Ethereum development experience, your existing code, tooling, and dependencies will work seamlessly on Morph. -We provide a one-page for Morph integration resources if you want to get started quickly. +We provide a one-page integration guide to help you get started quickly. -**Developer Guides**: Access comprehensive guides on verifying smart contracts, running a Morph node, deploying contracts, and more. +**Developer Guides**: +Access step-by-step guides for verifying smart contracts, running a Morph node, deploying contracts, and more. -**Developer Resources**: Find detailed API methods, contract addresses and other useful developer resources. +**Developer Resources**: + +Find detailed API methods, contract addresses, and other useful resources. + + L2), once your transaction is confirmed as Safe on **Holesky** (8 to 14 minutes), you will see a **Success** status. Your funds will then be relayed to L2. -::: +To check progress: +1. Click your wallet address in the top-right corner of the Bridge app. +2. Select **Transactions**. A panel will show your recent transactions. -![image8](../../assets/docs/quick-start/bridge/08.png) +**Note:** -3. Click on the most recent **Holesky** transaction hash. +For deposits (L1 → L2), once your transaction is confirmed as Safe on Holesky (8–14 minutes), you will see a **Success** status. Funds are then relayed to L2. -![image9](../../assets/docs/quick-start/bridge/09.png) +3. Click the most recent Holesky transaction hash. -4. You will be taken to a Transaction Details page in the Explorer. Verify your transaction status (this transaction is confirmed on **Holesky**). +4. You will be taken to the Transaction Details page in the Explorer. Confirm your transaction status on Holesky. -![image10](../../assets/docs/quick-start/bridge/10.png) +5. Once the status shows **Success** on L2, return to the Bridge app to view the L2 transaction hash and confirm your funds are in your Morph wallet. -5. Once your transaction status shows *success* on L2, return to the Bridge app to see a transaction hash and funds in your Morph L2 wallet. - -![image11](../../assets/docs/quick-start/bridge/11.png) - -![image12](../../assets/docs/quick-start/bridge/12.png) # Withdraw from Morph Testnet to Holesky -To withdraw funds from Morph Testnet, follow these steps: -1. Initiate the withdrawal on Morph Testnet. -2. Wait for the withdrawal root to be published on L1 (**Holesky**). This usually takes a few minutes, but it may take longer during outages. -3. Prove withdrawal. -4. Wait for the verification challenge period, which lasts seven days from the time the withdrawal is proven on L1 (**Holesky**). -5. Claim your withdrawal. - -## Initiate withdrawal - -1. Click Connect Wallet and select MetaMask. If prompted, approve the connection in your wallet. - -2. Select Withdraw. Choose the asset and amount you wish to withdraw. - -![image13](../../assets/docs/quick-start/bridge/13.png) - -3. Click Send ETH to **Holesky**. - -![image14](../../assets/docs/quick-start/bridge/14.png) - -4. Click Initiate withdrawal, wait for a few minutes to confirm. After it is finished, you need to switch the network in your wallet and then prove the withdrawal on **Holesky**. - -![image15](../../assets/docs/quick-start/bridge/15.png) - -![image16](../../assets/docs/quick-start/bridge/16.png) - -5. Waiting for the batch submission to be completed. - -![image17](../../assets/docs/quick-start/bridge/17.png) - -![image18](../../assets/docs/quick-start/bridge/18.png) - -## Waiting for the verification challenge period - -1. Click your address in the top right corner. - -2. Click Transactions and then Withdrawals. This will display a list of your recent withdrawals and their status. Or you can find a notice in the top area, by clicking the button View Account (see the pic below). - -![image19](../../assets/docs/quick-start/bridge/19.png) - -![image20](../../assets/docs/quick-start/bridge/20.png) - -![image21](../../assets/docs/quick-start/bridge/21.png) - - - -3. You can search for the transaction hash on Morph Explorer. - -![image22](../../assets/docs/quick-start/bridge/22.png) - -![image23](../../assets/docs/quick-start/bridge/23.png) - -4. Click the L1 State Root Submission Tx to see when the transaction was written to L1 (**Holesky**). - -![image24](../../assets/docs/quick-start/bridge/24.png) - -![image25](../../assets/docs/quick-start/bridge/25.png) +## Steps: +1. Connect your wallet to the Bridge app and select MetaMask. Approve the connection if prompted. +2. Select **Withdraw**, choose the asset and amount, then click Send ETH to Holesky. +3. Click **Initiate Withdrawal** and wait a few minutes for confirmation. +4. Switch your wallet network to Holesky and prove the withdrawal. +## Batch Submission: Wait for the batch submission to complete. +## Verification Challenge Period: -## Claim the Withdrawal +- The challenge period lasts **7 days** from when the withdrawal is proven on Holesky. +- To check the status, click your address in the top-right corner, then select **Transactions → Withdrawals**. +- You can also click **View Account** from the notice banner. -1. Once the challenge period is over, the status will change to Claim. +## Explorer Check: -2. Click Claim withdrawal. +- Search the transaction hash in Morph Explorer. +- Click **L1 State Root Submission Tx** to see when it was written to Holesky. -![image26](../../assets/docs/quick-start/bridge/26.png) +## Claim the Withdrawal: -3. Confirm the withdrawal in the wallet. +1. After the challenge period ends, the status will change to Claim. +2. Click **Claim Withdrawal**. +3. Confirm the transaction in your wallet. +4. Wait for the withdrawal to complete. -![image27](../../assets/docs/quick-start/bridge/27.png) -4. Wait until the withdrawal is completed. -![image28](../../assets/docs/quick-start/bridge/28.png) diff --git a/sidebars.js b/sidebars.js index 1e1b36e57..88193b41b 100644 --- a/sidebars.js +++ b/sidebars.js @@ -45,10 +45,10 @@ const userSidebar = type:'doc', id:'about-morph/user-navigation-page' }, - { - type:'category', - label:'Introductory Concepts', - items:[ + // { + // type:'category', + // label:'Introductory Concepts', + // items:[ { type: 'doc', id:'about-morph/overview-of-morph' @@ -65,6 +65,14 @@ const userSidebar = type: 'doc', id:'about-morph/morphs-vision-and-mission' }, + { + type: 'doc', + id:'about-morph/morph-pay' + }, + { + type: 'doc', + id:'about-morph/morph-rails' + }, { type: 'doc', id:'about-morph/key-concepts' @@ -77,8 +85,9 @@ const userSidebar = type: 'doc', id:'about-morph/faqs' }, - ] - }, + + // ] + // }, { type:'category', label:'Step-by-Step Guides', From 25a8dfb677794dba819294760803ae06531264df Mon Sep 17 00:00:00 2001 From: "marvel.yu" Date: Thu, 7 Aug 2025 16:08:42 +0800 Subject: [PATCH 2/6] update link --- docs/about-morph/0-user-navigation-page.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/about-morph/0-user-navigation-page.md b/docs/about-morph/0-user-navigation-page.md index b9028f178..2876e17d3 100644 --- a/docs/about-morph/0-user-navigation-page.md +++ b/docs/about-morph/0-user-navigation-page.md @@ -106,6 +106,6 @@ To get started: - **Try Morph Pay** Join the community and stay up to date: -𝕏: [x.com/MorphLayer](x.com/MorphLayer) -Discord: [discord.gg/MorphLayer](discord.gg/MorphLayer) -Telegram: [t.me/MorphL2official](t.me/MorphL2official) +𝕏: [x.com/MorphLayer](https://x.com/MorphLayer) +Discord: [discord.gg/MorphLayer](https://discord.gg/MorphLayer) +Telegram: [t.me/MorphL2official](https://t.me/MorphL2official) From e29f380020418d5fe9d3b75e2cca93c89659e4e8 Mon Sep 17 00:00:00 2001 From: "marvel.yu" Date: Thu, 7 Aug 2025 16:23:43 +0800 Subject: [PATCH 3/6] use short word in sidebar --- docs/about-morph/1-overview-of-morph.md | 2 +- docs/about-morph/2-the-technology-behind-morph.md | 2 +- docs/about-morph/4-morphs-architecture.md | 2 +- docs/about-morph/5-morphs-vision-and-mission.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/about-morph/1-overview-of-morph.md b/docs/about-morph/1-overview-of-morph.md index d83501e1a..a08a3c54b 100644 --- a/docs/about-morph/1-overview-of-morph.md +++ b/docs/about-morph/1-overview-of-morph.md @@ -1,5 +1,5 @@ --- -title: Introductory Concepts - Overview +title: Overview lang: en-US keywords: [morph,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimistic zk-rollup solution. Try it now! diff --git a/docs/about-morph/2-the-technology-behind-morph.md b/docs/about-morph/2-the-technology-behind-morph.md index 5095b3447..6217c2d8c 100644 --- a/docs/about-morph/2-the-technology-behind-morph.md +++ b/docs/about-morph/2-the-technology-behind-morph.md @@ -1,5 +1,5 @@ --- -title: The Technology Behind Morph +title: The Technology lang: en-US keywords: [morph,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimistic zk-rollup solution. Try it now! diff --git a/docs/about-morph/4-morphs-architecture.md b/docs/about-morph/4-morphs-architecture.md index f65ec2826..a4a967297 100644 --- a/docs/about-morph/4-morphs-architecture.md +++ b/docs/about-morph/4-morphs-architecture.md @@ -1,5 +1,5 @@ --- -title: Morph's Architecture +title: Architecture lang: en-US keywords: [morph,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimistic zk-rollup solution. Try it now! diff --git a/docs/about-morph/5-morphs-vision-and-mission.md b/docs/about-morph/5-morphs-vision-and-mission.md index 5b848ceec..8b7b80d94 100644 --- a/docs/about-morph/5-morphs-vision-and-mission.md +++ b/docs/about-morph/5-morphs-vision-and-mission.md @@ -1,5 +1,5 @@ --- -title: Morph's Vision and Mission +title: Vision & Mission lang: en-US keywords: [morph,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimistic zk-rollup solution. Try it now! From ae195bcffecb181d485cd903c55e867f31f45de9 Mon Sep 17 00:00:00 2001 From: "marvel.yu" Date: Thu, 7 Aug 2025 22:54:37 +0800 Subject: [PATCH 4/6] add links --- docs/about-morph/0-user-navigation-page.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/about-morph/0-user-navigation-page.md b/docs/about-morph/0-user-navigation-page.md index 2876e17d3..d1492458d 100644 --- a/docs/about-morph/0-user-navigation-page.md +++ b/docs/about-morph/0-user-navigation-page.md @@ -99,11 +99,11 @@ A non-transferable Soulbound Token (SBT) tied to your wallet. Enables verified i ### Explore and Connect To get started: -- **Set up your wallet** -- **Use the faucet** -- **Bridge assets** -- **Explore Morph Zoo** -- **Try Morph Pay** +- [**Set up your wallet**](../quick-start/2-wallet-setup.md) +- [**Use the faucet**](../quick-start/3-faucet.md) +- [**Bridge assets**](../quick-start/4-bridge.md) +- [**Explore Morph Zoo**](https://www.morphl2.io/points/) +- [**Try Morph Pay**](https://pay.morphl2.io) Join the community and stay up to date: 𝕏: [x.com/MorphLayer](https://x.com/MorphLayer) From 7d0df04a3df999b5c63ec27d0a2a3d9d66df0bd8 Mon Sep 17 00:00:00 2001 From: DannyFi Date: Fri, 8 Aug 2025 16:24:38 +0800 Subject: [PATCH 5/6] Feature/rails (#66) * fix: deploy shell * fix: appId * fix: appId * fix: appId * fix: add nginx * fix: nginx * fix: nginx * fix: deploy * fix: deploy * fix: doc * fix: doc * fix: cookbook ai * fix: doc * fix: doc * fix: doc * deploy * deploy * fix: doc * fix: doc * fix: git * deploy: build * deploy: build * merge: doc * fix: social link * fix: style * fix: style --------- Co-authored-by: Danny Fu --- MakefileEks.mk | 21 +- README.md | 4 +- build/404.html | 12 +- build/assets/css/styles.5e55a320.css | 1 + build/assets/css/styles.81ba172c.css | 1 - ...archi-722265224ea729def09d6641d267c941.png | Bin 0 -> 271850 bytes ...rzero-729926ffd8eadd4c2ed9ce27f314d627.png | Bin 0 -> 404320 bytes .../opzk-f22d92ddda6b9d38f0f917f2025c7b28.png | Bin 0 -> 82760 bytes ...admap-303601f698e896e5eea19ffb5b055bb0.png | Bin 202840 -> 0 bytes ...admap-85df143f684e2e7f404102eb39eb2adf.png | Bin 0 -> 240451 bytes ...lscan-05653c195d1623c32f28c7ab2d944adc.png | Bin 604419 -> 0 bytes ...lscan-64f9f8181cf2e033709c7dda3a153e1f.png | Bin 0 -> 379583 bytes ...aceid-29fd0d4f081ffeee5410ca83a259a04e.png | Bin 0 -> 272686 bytes ...derly-37aa9e647d64e8a05c58b91fa7c7786a.png | Bin 0 -> 348068 bytes ...d32dc.1b698f04.js => 028d32dc.b0c0048b.js} | 2 +- ...35c22.028a360c.js => 02a35c22.cf697fb9.js} | 2 +- ...c1628.0ff362a7.js => 066c1628.ef013ffd.js} | 2 +- ...13b4f.e70c1b97.js => 08313b4f.d3eefb9b.js} | 2 +- ...9f613.068f6187.js => 08b9f613.2292ec97.js} | 2 +- ...3841d.49c855e2.js => 1483841d.c7695c94.js} | 2 +- build/assets/js/17896441.26f2d090.js | 1 + build/assets/js/17896441.59246166.js | 1 - build/assets/js/1965.a43f3b33.js | 1 - build/assets/js/1a1587e1.a03807dd.js | 1 - build/assets/js/1a1587e1.d312ff53.js | 1 + build/assets/js/1a4e3797.20b16744.js | 2 - .../js/1a4e3797.20b16744.js.LICENSE.txt | 1 - build/assets/js/1a4e3797.dc00afb6.js | 2 + .../js/1a4e3797.dc00afb6.js.LICENSE.txt | 1 + build/assets/js/1f2dc99a.676c8cca.js | 1 + ...82985.7edbc764.js => 22a82985.bcaadd20.js} | 2 +- ...34b3e.3ad301c1.js => 24734b3e.528e753c.js} | 2 +- build/assets/js/25bec567.812fc80e.js | 1 - build/assets/js/25bec567.8e13158b.js | 1 + ...1694d.1579b616.js => 2a31694d.6b99dbda.js} | 2 +- ...bd9da.7dcb8475.js => 2b4bd9da.fed01c3d.js} | 2 +- build/assets/js/2ef0e7db.f26526ea.js | 1 - build/assets/js/2f19d5d4.440e58b9.js | 1 - build/assets/js/2f19d5d4.fa2f851a.js | 1 + build/assets/js/31699625.8d77373b.js | 1 - build/assets/js/3250a443.4576d738.js | 1 + build/assets/js/3250a443.c7e60e11.js | 1 - ...638e1.8beee3a7.js => 325638e1.54567db5.js} | 2 +- ...57971.6f4b72c2.js => 33e57971.f01254b2.js} | 2 +- ...bca7c.f81f8d3b.js => 38a5c357.da46ef32.js} | 2 +- build/assets/js/38e6cd8b.a8cc1a56.js | 1 - build/assets/js/38e6cd8b.aaca03cd.js | 1 + build/assets/js/39f485e7.b6b5a1c7.js | 1 - build/assets/js/39f485e7.e4d15ea7.js | 1 + build/assets/js/3d947c8b.f16157a9.js | 1 - ...197d4.238ab34e.js => 3f6197d4.3649865e.js} | 2 +- build/assets/js/405a8a84.afa08ab0.js | 1 + build/assets/js/405a8a84.e1de3e69.js | 1 - ...4f046.c692e7f7.js => 40b4f046.d2ffc80e.js} | 2 +- ...bd017.0b5ff9e6.js => 44bbd017.f25bc314.js} | 2 +- ...c0bc5.6bfdb2fc.js => 465c0bc5.e3b956eb.js} | 2 +- build/assets/js/46618904.0e02e9d8.js | 1 + build/assets/js/46618904.aa956f14.js | 1 - ...4893f.379a37aa.js => 4784893f.0785ce05.js} | 2 +- ...0ae38.1df24a9e.js => 4a10ae38.accc9646.js} | 2 +- ...69d4a.cb3dd122.js => 4a269d4a.a94aba76.js} | 2 +- build/assets/js/4cbe5783.3425072e.js | 1 + build/assets/js/4cbe5783.9ebc7cfc.js | 1 - build/assets/js/4f7a49ab.68e103c7.js | 1 + build/assets/js/5081.08af33ec.js | 1 + ...71187.db8af086.js => 52171187.077ab897.js} | 2 +- build/assets/js/578ca001.4379dd90.js | 1 - build/assets/js/578ca001.54e90cd3.js | 1 + ...15217.a3848b2e.js => 57c15217.beeb4523.js} | 2 +- ...b22f4.da3f45e1.js => 59db22f4.9c92db8f.js} | 2 +- ...4fb6c.43a18475.js => 59f4fb6c.b63e39f4.js} | 2 +- ...1095f.da8a5e5b.js => 5a91095f.bc5d777d.js} | 2 +- ...3c257.a2b68266.js => 5aa3c257.869d8531.js} | 2 +- ...b1cf6.380e90a3.js => 5acb1cf6.9f129d6c.js} | 2 +- ...5b9ce.db1d3170.js => 5bc5b9ce.f3bc9251.js} | 2 +- build/assets/js/5c242b2e.9bf0dbba.js | 1 - build/assets/js/5c242b2e.a21dcfac.js | 1 + build/assets/js/5d313dc3.562fab67.js | 1 + build/assets/js/5e95c892.9856b0c7.js | 1 + build/assets/js/5e95c892.f83fa08e.js | 1 - build/assets/js/60479fa4.69d66973.js | 1 + build/assets/js/60479fa4.b4988a59.js | 1 - ...914bf.8575a75c.js => 618914bf.ad5ace09.js} | 2 +- ...1ff91.a74aaf75.js => 61b1ff91.01109030.js} | 2 +- ...a9d96.e6a02dbe.js => 68efb262.36868b50.js} | 2 +- ...01e8b.f649c8f2.js => 69301e8b.f3c5089c.js} | 2 +- build/assets/js/6a8ddb26.a8d54b20.js | 1 + build/assets/js/6a8ddb26.bb20b217.js | 1 - ...36391.47baf76a.js => 6ba36391.bdee8d58.js} | 2 +- ...37fd7.de0d89b6.js => 6f037fd7.be4f334b.js} | 2 +- build/assets/js/6f5ac92b.3d93dd47.js | 1 + build/assets/js/6f5ac92b.7c64324c.js | 1 - ...8639a.f501f0e6.js => 70e8639a.a7b63da5.js} | 2 +- build/assets/js/71cc7c85.13becfa5.js | 1 - ...f9cb5.3ce027f4.js => 720f9cb5.1be73404.js} | 2 +- ...71cd8.54c5ee4c.js => 72171cd8.74acb7db.js} | 2 +- build/assets/js/7242.6da46571.js | 1 + build/assets/js/73af12fb.015067f7.js | 1 + .../js/{1022.47537bec.js => 7426.0fe1a9ef.js} | 2 +- build/assets/js/74fdc727.cc9416e7.js | 1 - ...b7a6d.0afe694c.js => 76db7a6d.2bcc76ed.js} | 2 +- ...4cff9.3096b8d9.js => 7824cff9.dde82ce4.js} | 2 +- ...c0904.36cbb9fb.js => 79dc0904.3b3a5e18.js} | 2 +- ...975a7.4c71ff63.js => 7a5975a7.6a0313ab.js} | 2 +- ...e7b23.aea15d1f.js => 7c1e7b23.0cceff70.js} | 2 +- build/assets/js/7c45cc48.04c9c3e7.js | 1 - build/assets/js/7c45cc48.7deaf08e.js | 1 + ...29526.947baab7.js => 81f29526.ef9fe313.js} | 2 +- build/assets/js/82419dfd.11312935.js | 1 + build/assets/js/82419dfd.f69d5af3.js | 1 - ...b4b9b.52726404.js => 829b4b9b.d5f25fd7.js} | 2 +- build/assets/js/829cd294.d14b23ab.js | 1 + build/assets/js/829cd294.ef34853e.js | 1 - build/assets/js/833a0690.57155aee.js | 1 + build/assets/js/833a0690.c32e479c.js | 1 - build/assets/js/8347fa88.ca8e39f6.js | 1 + build/assets/js/8347fa88.e4b09989.js | 1 - build/assets/js/8589.ab857865.js | 1 - ...3d4b8.57109ea3.js => 8613d4b8.a112ff98.js} | 2 +- build/assets/js/868b6fb8.ccb36e11.js | 1 + ...091b0.07d8a007.js => 8b6091b0.2cc43598.js} | 2 +- build/assets/js/8d0b932e.0bc61134.js | 1 - build/assets/js/8d0b932e.3e2c9c72.js | 1 + ...5c071.e334b5d6.js => 9235c071.f936f4f6.js} | 2 +- build/assets/js/935f2afb.0bdf028c.js | 1 + build/assets/js/935f2afb.315226ae.js | 1 - .../js/{8852.4ffac5c4.js => 9505.7523b444.js} | 2 +- build/assets/js/95a7ae32.3ed4f3ad.js | 1 + build/assets/js/95a7ae32.b384d86d.js | 1 - build/assets/js/979f48c0.2b0cba0c.js | 1 + build/assets/js/979f48c0.6c7e8b57.js | 1 - ...1a41e.fdb37ceb.js => 98d1a41e.a0a45743.js} | 2 +- build/assets/js/99b8a708.398eb8a9.js | 1 + build/assets/js/99b8a708.3f8bf2d3.js | 1 - ...366b1.870698a9.js => 9a9366b1.ab1a0d5d.js} | 2 +- ...6db99.3262745a.js => 9b96db99.65caf0fb.js} | 2 +- build/assets/js/9d4e1be7.181c7972.js | 1 - build/assets/js/9d4e1be7.a9ee7661.js | 1 + ...db927.f6457615.js => 9e1db927.a0cdd623.js} | 2 +- ...8961b.62dbfa4b.js => 9e78961b.e32bc84b.js} | 2 +- ...9b620.63fe2917.js => 9fc9b620.4be64ddf.js} | 2 +- ...57eaa.8741717e.js => 9ff57eaa.986eb965.js} | 2 +- ...dd934.37307af4.js => a00dd934.091ad5c4.js} | 2 +- build/assets/js/a04af9a2.a4172b2f.js | 1 + ...49790.93ae43f6.js => a0d49790.f6da78e9.js} | 2 +- build/assets/js/a0d75a43.1b07a391.js | 1 + build/assets/js/a0d75a43.dc859722.js | 1 - build/assets/js/a1f831b5.99aa2e6e.js | 1 + build/assets/js/a1f831b5.ffb4bd23.js | 1 - build/assets/js/a2db6fd6.323f6535.js | 1 + build/assets/js/a2db6fd6.ceb19896.js | 1 - ...9e926.479fbb82.js => a399e926.6c89943b.js} | 2 +- ...a47e1.9e7d5274.js => a4da47e1.11689d10.js} | 2 +- ...26d61.4bf1ba1b.js => a5f26d61.614e3be4.js} | 2 +- build/assets/js/a7bd4aaa.cf41b24b.js | 1 + build/assets/js/a7bd4aaa.f5612402.js | 1 - build/assets/js/a94703ab.03e3ac63.js | 1 + build/assets/js/a94703ab.bc697f24.js | 1 - build/assets/js/ad8d1448.de8beca8.js | 1 - build/assets/js/ad8d1448.e3e0b916.js | 1 + ...1f293.2d77427b.js => af91f293.42de5a7a.js} | 2 +- ...24208.f2adae3f.js => b0d24208.88806065.js} | 2 +- build/assets/js/b137769e.2be8350d.js | 1 + build/assets/js/b202810b.3d55662b.js | 1 + ...00acc.381aa0af.js => b4c00acc.70d9fd4d.js} | 2 +- ...3eedd.a39946bf.js => bce3eedd.ef73d91e.js} | 2 +- ...6ddce.e4ab7eec.js => beb6ddce.9994c5f0.js} | 2 +- ...bab43.a9e78c88.js => c30bab43.3af275f1.js} | 2 +- build/assets/js/c33d6554.08872042.js | 1 + build/assets/js/c33d6554.f1b6c17f.js | 1 - build/assets/js/c4f5d8e4.466ad3d3.js | 1 + build/assets/js/c4f5d8e4.74e60bf5.js | 1 - ...7ff1a.d115e6eb.js => c5f7ff1a.1a3bb12f.js} | 2 +- ...cd35b.c53dbbdf.js => c7ccd35b.88ca3abd.js} | 2 +- ...c51aa.4afb0a16.js => ca4c51aa.fd464d9a.js} | 2 +- build/assets/js/cfe67a99.1a4c4cf9.js | 1 + build/assets/js/d26d133a.254b86a7.js | 1 - build/assets/js/d26d133a.fac89a01.js | 1 + build/assets/js/d475c619.8cd567b5.js | 1 - build/assets/js/d475c619.99c439c5.js | 1 + ...81eda.3e83ba38.js => d4781eda.7819b49e.js} | 2 +- ...73606.a2846103.js => d8273606.8055d03c.js} | 2 +- build/assets/js/dcf2e50b.f1ec2836.js | 1 + build/assets/js/dcf2e50b.ffa083f1.js | 1 - ...8dfaf.e8e601fd.js => dfd8dfaf.60141c7c.js} | 2 +- build/assets/js/e3875bab.3a4abd9c.js | 1 - build/assets/js/e3875bab.72a3ed86.js | 1 + ...da051.39c2cc0c.js => e3bda051.aa9f2698.js} | 2 +- build/assets/js/e6305dab.3df2285d.js | 1 + build/assets/js/e6f27cd2.8445c63f.js | 1 - build/assets/js/e6f27cd2.ede20334.js | 1 + build/assets/js/e7a84acc.3ffc6b6e.js | 1 - build/assets/js/e7a84acc.42a29373.js | 1 + ...02677.3a3ab274.js => e7f02677.feb86e37.js} | 2 +- ...42455.c205f87f.js => e8c42455.5bdb4e2d.js} | 2 +- build/assets/js/e8fcecf9.4652c672.js | 1 + build/assets/js/e8fcecf9.ca3788e5.js | 1 - ...2b961.ecb1b798.js => e912b961.d4c84c07.js} | 2 +- ...819ad.8f20034b.js => eac819ad.f5609d88.js} | 2 +- build/assets/js/ec29823a.0534a53a.js | 1 - build/assets/js/ed22c7e9.05a060d1.js | 1 - build/assets/js/f3316ef7.030164ad.js | 1 + ...5c040.9a696798.js => f435c040.edf90f1e.js} | 2 +- build/assets/js/f619ad04.5984a3c3.js | 1 - ...23e93.cc72725d.js => f6623e93.fbb75f09.js} | 2 +- ...d7a3b.84f16635.js => f93d7a3b.8270a95b.js} | 2 +- build/assets/js/fac53bf8.323a0f38.js | 1 - build/assets/js/fac53bf8.c12dd61e.js | 1 + ...4aa13.9f926910.js => fb24aa13.b798cdeb.js} | 2 +- build/assets/js/fb26d209.c8fccdcf.js | 1 - build/assets/js/fb26d209.f7a1412e.js | 1 + ...70fd8.0787519d.js => fda70fd8.0b05c46c.js} | 2 +- build/assets/js/fdc91eb1.05fb4897.js | 1 - build/assets/js/fdc91eb1.d0f3ea4e.js | 1 + ...c53f2.6e252e5d.js => fe9c53f2.35732f59.js} | 2 +- build/assets/js/ff3f68fa.5479690d.js | 1 + ...83f18.96f67b10.js => ff883f18.ab8b891b.js} | 2 +- build/assets/js/main.100dd08b.js | 2 - build/assets/js/main.16291c43.js | 2 + ...CENSE.txt => main.16291c43.js.LICENSE.txt} | 2 - build/assets/js/runtime~main.467872be.js | 1 + build/assets/js/runtime~main.98dd0d42.js | 1 - build/docs/about-morph/faqs/index.html | 33 +- .../docs/about-morph/key-concepts/index.html | 30 +- .../key-concepts/optimistic-rollup/index.html | 12 +- .../morphs-architecture/index.html | 41 +- .../morphs-vision-and-mission/index.html | 20 +- .../about-morph/overview-of-morph/index.html | 22 +- build/docs/about-morph/roadmap/index.html | 35 +- .../the-technology-behind-morph/index.html | 24 +- .../user-navigation-page/index.html | 27 +- .../where-should-i-start/index.html | 18 +- .../index.html | 48 +- .../development-setup/index.html | 58 +- .../index.html | 56 - .../index.html | 6 +- .../index.html | 6 +- .../integration-one-page-cn/index.html | 47 + .../integration-one-page.htm/index.html | 11 + .../integration-one-page.html/index.html | 11 + .../integration-one-page/index.html | 47 + .../index.html | 58 +- .../verify-your-smart-contracts/index.html | 76 +- .../index.html | 52 +- .../deploy-contract-on-morph/index.html | 76 +- .../developer-navigation-page/index.html | 28 +- .../developer-resources/contracts/index.html | 93 +- .../dapp-examples-on-morph/index.html | 28 +- .../how-to-run-a-morph-node/index.html | 56 +- .../morph-json-rpc-api-methods/index.html | 86 +- .../run-in-docker.htm}/index.html | 6 +- .../run-in-docker.html}/index.html | 6 +- .../full-node/run-in-docker/index.html | 79 ++ .../run-on-host.htm}/index.html | 6 +- .../run-on-host.html}/index.html | 6 +- .../full-node/run-on-host/index.html | 79 ++ .../how-to-run-a-morph-node-docker/index.html | 50 - .../how-to-run-a-morph-node/index.html | 71 - .../how-to-run-a-validator-node/index.html | 53 - .../node-operation/prune-state/index.html | 16 +- .../upgrade-node-docker/index.html | 50 +- .../upgrade-node/upgrade-node-host/index.html | 30 +- .../run-in-docker.htm/index.html | 11 + .../run-in-docker.html/index.html | 11 + .../validator-node/run-in-docker/index.html | 62 + .../validator-node/run-on-host.htm/index.html | 11 + .../run-on-host.html/index.html | 11 + .../validator-node/run-on-host/index.html | 65 + .../account-abstraction/index.html | 19 +- .../artificial-intelligence.htm/index.html | 11 + .../artificial-intelligence.html/index.html | 11 + .../artificial-intelligence/index.html | 21 + .../block-explorer/index.html | 18 +- .../blockchain-indexing-services/index.html | 20 +- .../blockchain-oracles/index.html | 20 +- .../index.html | 11 + .../index.html | 11 + .../cross-chain-interoperability/index.html | 21 + .../index.html | 11 + .../index.html | 11 + .../decentralized-naming-services/index.html | 42 + .../rpc-services/index.html | 18 +- .../safe-multi-signature-wallet/index.html | 16 +- .../user-onboarding.htm}/index.html | 6 +- .../user-onboarding.html}/index.html | 6 +- .../user-onboarding/index.html | 32 + build/docs/build-on-morph/intro/index.html | 22 +- .../classes/CrossChainMessenger/index.html | 400 +++--- .../sdk/classes/ETHBridgeAdapter/index.html | 170 +-- .../classes/StandardBridgeAdapter/index.html | 170 +-- .../sdk/enumerations/L1ChainID/index.html | 36 +- .../sdk/enumerations/L1RpcUrls/index.html | 28 +- .../sdk/enumerations/L2ChainID/index.html | 36 +- .../sdk/enumerations/L2RpcUrls/index.html | 28 +- .../enumerations/MessageDirection/index.html | 24 +- .../MessageReceiptStatus/index.html | 24 +- .../sdk/enumerations/MessageStatus/index.html | 48 +- .../sdk/functions/asL2Provider/index.html | 22 +- .../sdk/functions/estimateL1Gas/index.html | 20 +- .../functions/estimateL1GasCost/index.html | 20 +- .../functions/estimateL2GasCost/index.html | 20 +- .../functions/estimateTotalGasCost/index.html | 20 +- .../functions/getAllOEContracts/index.html | 20 +- .../functions/getBridgeAdapters/index.html | 20 +- .../sdk/functions/getL1GasPrice/index.html | 20 +- .../sdk/functions/getOEContract/index.html | 20 +- .../hashLowLevelMessageV2/index.html | 20 +- .../sdk/functions/hashMessageHash/index.html | 20 +- .../sdk/functions/isL2Provider/index.html | 26 +- .../migratedWithdrawalGasLimit/index.html | 20 +- .../sdk/functions/omit/index.html | 22 +- .../sdk/functions/toAddress/index.html | 20 +- .../sdk/functions/toBigNumber/index.html | 20 +- .../sdk/functions/toNumber/index.html | 20 +- .../sdk/functions/toProvider/index.html | 20 +- .../functions/toSignerOrProvider/index.html | 20 +- .../functions/toTransactionHash/index.html | 20 +- .../build-on-morph/sdk/globals/index.html | 42 +- .../interfaces/BridgeAdapterData/index.html | 16 +- .../sdk/interfaces/BridgeAdapters/index.html | 16 +- .../CoreCrossChainMessage/index.html | 42 +- .../interfaces/CrossChainMessage/index.html | 70 +- .../CrossChainMessageRequest/index.html | 28 +- .../sdk/interfaces/IActionOptions/index.html | 50 +- .../sdk/interfaces/IBridgeAdapter/index.html | 130 +- .../sdk/interfaces/L2Block/index.html | 100 +- .../L2BlockWithTransactions/index.html | 100 +- .../sdk/interfaces/L2Transaction/index.html | 170 +-- .../sdk/interfaces/MessageReceipt/index.html | 24 +- .../sdk/interfaces/OEContracts/index.html | 24 +- .../sdk/interfaces/OEContractsLike/index.html | 24 +- .../sdk/interfaces/OEL1Contracts/index.html | 68 +- .../sdk/interfaces/OEL2Contracts/index.html | 84 +- .../interfaces/ProvenWithdrawal/index.html | 28 +- .../sdk/interfaces/StateRoot/index.html | 28 +- .../sdk/interfaces/StateRootBatch/index.html | 28 +- .../StateRootBatchHeader/index.html | 36 +- .../interfaces/TokenBridgeMessage/index.html | 56 +- .../WithdrawMessageProof/index.html | 32 +- .../sdk/interfaces/WithdrawalEntry/index.html | 20 +- .../docs/build-on-morph/sdk/intro/index.html | 26 +- .../sdk/type-aliases/AddressLike/index.html | 16 +- .../sdk/type-aliases/DeepPartial/index.html | 18 +- .../sdk/type-aliases/L1Provider/index.html | 28 +- .../sdk/type-aliases/L2Provider/index.html | 50 +- .../type-aliases/LowLevelMessage/index.html | 26 +- .../sdk/type-aliases/MessageLike/index.html | 16 +- .../MessageRequestLike/index.html | 16 +- .../sdk/type-aliases/NumberLike/index.html | 16 +- .../type-aliases/OEL1ContractsLike/index.html | 16 +- .../type-aliases/OEL2ContractsLike/index.html | 16 +- .../sdk/type-aliases/ProviderLike/index.html | 16 +- .../sdk/type-aliases/SignerLike/index.html | 16 +- .../SignerOrProviderLike/index.html | 16 +- .../type-aliases/TransactionLike/index.html | 16 +- .../variables/BRIDGE_ADAPTER_DATA/index.html | 16 +- .../variables/CHAIN_BLOCK_TIMES/index.html | 16 +- .../variables/CONTRACT_ADDRESSES/index.html | 16 +- .../DEFAULT_L1_CONTRACT_ADDRESSES/index.html | 16 +- .../DEFAULT_L2_CONTRACT_ADDRESSES/index.html | 16 +- .../DEPOSIT_CONFIRMATION_BLOCKS/index.html | 16 +- .../sdk/variables/l1BridgeName/index.html | 16 +- .../l1CrossDomainMessengerName/index.html | 16 +- .../sdk/variables/l2BridgeName/index.html | 16 +- .../l2CrossDomainMessengerName/index.html | 16 +- .../index.html | 56 +- .../index.html | 50 +- .../index.html | 62 +- .../general-protocol-design/rollup/index.html | 50 +- .../transactions-life-cycle/index.html | 24 +- build/docs/how-morph-works/intro/index.html | 14 +- .../morph-modular-design/index.html | 62 +- .../optimistic-zkevm/index.html | 107 +- build/docs/quick-start/bridge/index.html | 86 +- build/docs/quick-start/faucet/index.html | 38 +- .../morph-zoo/morph-points.htm/index.html | 11 - .../morph-zoo/morph-points.html/index.html | 11 - .../morph-zoo/morph-points/index.html | 32 - .../morph-zoo/voting-rules.htm/index.html | 11 - .../morph-zoo/voting-rules.html/index.html | 11 - .../morph-zoo/voting-rules/index.html | 44 - .../docs/quick-start/wallet-setup/index.html | 28 +- .../quick-start/welcome-to-morph/index.html | 18 +- build/img/cards/bridge.svg | 3 + build/img/cards/contract.svg | 3 + build/img/cards/dev.svg | 3 + build/img/cards/faucet.svg | 5 + build/img/cards/guide.svg | 3 + build/img/cards/logo-dark.svg | 3 + build/img/cards/logo.svg | 3 + build/img/cards/node.svg | 3 + build/img/cards/research.svg | 3 + build/img/cards/tools.svg | 3 + build/img/cards/users.svg | 3 + build/img/cards/wallet.svg | 4 + build/index.html | 12 +- build/js/cookbookdev.index.cjs.js | 1210 +++++++++++++++++ build/katex/katex.min.css | 1 + build/search/index.html | 12 +- build/share/logo.png | Bin 0 -> 1798 bytes build/sitemap.xml | 2 +- .../0-developer-navigation-page.md | 4 +- docs/build-on-morph/1-intro.md | 2 +- .../1-deploy-contract-on-morph.md | 2 +- docs/quick-start/1-welcome-to-morph.md | 2 +- docs/quick-start/3-faucet.md | 2 +- docusaurus.config.js | 6 +- nginx_sub_mainnet.conf | 48 + nginx_sub_qanet.conf | 48 + package.json | 7 +- src/components/AskCookbook.js | 36 + src/components/config.js | 6 +- src/css/custom.scss | 70 +- src/theme/SearchBar/index.js | 2 +- static/js/cookbookdev.index.cjs.js | 1210 +++++++++++++++++ 415 files changed, 6213 insertions(+), 2673 deletions(-) create mode 100644 build/assets/css/styles.5e55a320.css delete mode 100644 build/assets/css/styles.81ba172c.css create mode 100644 build/assets/images/archi-722265224ea729def09d6641d267c941.png create mode 100644 build/assets/images/layerzero-729926ffd8eadd4c2ed9ce27f314d627.png create mode 100644 build/assets/images/opzk-f22d92ddda6b9d38f0f917f2025c7b28.png delete mode 100644 build/assets/images/roadmap-303601f698e896e5eea19ffb5b055bb0.png create mode 100644 build/assets/images/roadmap-85df143f684e2e7f404102eb39eb2adf.png delete mode 100644 build/assets/images/socialscan-05653c195d1623c32f28c7ab2d944adc.png create mode 100644 build/assets/images/socialscan-64f9f8181cf2e033709c7dda3a153e1f.png create mode 100644 build/assets/images/spaceid-29fd0d4f081ffeee5410ca83a259a04e.png create mode 100644 build/assets/images/tenderly-37aa9e647d64e8a05c58b91fa7c7786a.png rename build/assets/js/{028d32dc.1b698f04.js => 028d32dc.b0c0048b.js} (82%) rename build/assets/js/{02a35c22.028a360c.js => 02a35c22.cf697fb9.js} (79%) rename build/assets/js/{066c1628.0ff362a7.js => 066c1628.ef013ffd.js} (76%) rename build/assets/js/{08313b4f.e70c1b97.js => 08313b4f.d3eefb9b.js} (78%) rename build/assets/js/{08b9f613.068f6187.js => 08b9f613.2292ec97.js} (89%) rename build/assets/js/{1483841d.49c855e2.js => 1483841d.c7695c94.js} (84%) create mode 100644 build/assets/js/17896441.26f2d090.js delete mode 100644 build/assets/js/17896441.59246166.js delete mode 100644 build/assets/js/1965.a43f3b33.js delete mode 100644 build/assets/js/1a1587e1.a03807dd.js create mode 100644 build/assets/js/1a1587e1.d312ff53.js delete mode 100644 build/assets/js/1a4e3797.20b16744.js delete mode 100644 build/assets/js/1a4e3797.20b16744.js.LICENSE.txt create mode 100644 build/assets/js/1a4e3797.dc00afb6.js create mode 100644 build/assets/js/1a4e3797.dc00afb6.js.LICENSE.txt create mode 100644 build/assets/js/1f2dc99a.676c8cca.js rename build/assets/js/{22a82985.7edbc764.js => 22a82985.bcaadd20.js} (98%) rename build/assets/js/{24734b3e.3ad301c1.js => 24734b3e.528e753c.js} (83%) delete mode 100644 build/assets/js/25bec567.812fc80e.js create mode 100644 build/assets/js/25bec567.8e13158b.js rename build/assets/js/{2a31694d.1579b616.js => 2a31694d.6b99dbda.js} (78%) rename build/assets/js/{2b4bd9da.7dcb8475.js => 2b4bd9da.fed01c3d.js} (97%) delete mode 100644 build/assets/js/2ef0e7db.f26526ea.js delete mode 100644 build/assets/js/2f19d5d4.440e58b9.js create mode 100644 build/assets/js/2f19d5d4.fa2f851a.js delete mode 100644 build/assets/js/31699625.8d77373b.js create mode 100644 build/assets/js/3250a443.4576d738.js delete mode 100644 build/assets/js/3250a443.c7e60e11.js rename build/assets/js/{325638e1.8beee3a7.js => 325638e1.54567db5.js} (69%) rename build/assets/js/{33e57971.6f4b72c2.js => 33e57971.f01254b2.js} (87%) rename build/assets/js/{c07bca7c.f81f8d3b.js => 38a5c357.da46ef32.js} (64%) delete mode 100644 build/assets/js/38e6cd8b.a8cc1a56.js create mode 100644 build/assets/js/38e6cd8b.aaca03cd.js delete mode 100644 build/assets/js/39f485e7.b6b5a1c7.js create mode 100644 build/assets/js/39f485e7.e4d15ea7.js delete mode 100644 build/assets/js/3d947c8b.f16157a9.js rename build/assets/js/{3f6197d4.238ab34e.js => 3f6197d4.3649865e.js} (54%) create mode 100644 build/assets/js/405a8a84.afa08ab0.js delete mode 100644 build/assets/js/405a8a84.e1de3e69.js rename build/assets/js/{40b4f046.c692e7f7.js => 40b4f046.d2ffc80e.js} (79%) rename build/assets/js/{44bbd017.0b5ff9e6.js => 44bbd017.f25bc314.js} (76%) rename build/assets/js/{465c0bc5.6bfdb2fc.js => 465c0bc5.e3b956eb.js} (78%) create mode 100644 build/assets/js/46618904.0e02e9d8.js delete mode 100644 build/assets/js/46618904.aa956f14.js rename build/assets/js/{4784893f.379a37aa.js => 4784893f.0785ce05.js} (81%) rename build/assets/js/{4a10ae38.1df24a9e.js => 4a10ae38.accc9646.js} (77%) rename build/assets/js/{4a269d4a.cb3dd122.js => 4a269d4a.a94aba76.js} (83%) create mode 100644 build/assets/js/4cbe5783.3425072e.js delete mode 100644 build/assets/js/4cbe5783.9ebc7cfc.js create mode 100644 build/assets/js/4f7a49ab.68e103c7.js create mode 100644 build/assets/js/5081.08af33ec.js rename build/assets/js/{52171187.db8af086.js => 52171187.077ab897.js} (88%) delete mode 100644 build/assets/js/578ca001.4379dd90.js create mode 100644 build/assets/js/578ca001.54e90cd3.js rename build/assets/js/{57c15217.a3848b2e.js => 57c15217.beeb4523.js} (94%) rename build/assets/js/{59db22f4.da3f45e1.js => 59db22f4.9c92db8f.js} (98%) rename build/assets/js/{59f4fb6c.43a18475.js => 59f4fb6c.b63e39f4.js} (91%) rename build/assets/js/{5a91095f.da8a5e5b.js => 5a91095f.bc5d777d.js} (78%) rename build/assets/js/{5aa3c257.a2b68266.js => 5aa3c257.869d8531.js} (96%) rename build/assets/js/{5acb1cf6.380e90a3.js => 5acb1cf6.9f129d6c.js} (75%) rename build/assets/js/{5bc5b9ce.db1d3170.js => 5bc5b9ce.f3bc9251.js} (75%) delete mode 100644 build/assets/js/5c242b2e.9bf0dbba.js create mode 100644 build/assets/js/5c242b2e.a21dcfac.js create mode 100644 build/assets/js/5d313dc3.562fab67.js create mode 100644 build/assets/js/5e95c892.9856b0c7.js delete mode 100644 build/assets/js/5e95c892.f83fa08e.js create mode 100644 build/assets/js/60479fa4.69d66973.js delete mode 100644 build/assets/js/60479fa4.b4988a59.js rename build/assets/js/{618914bf.8575a75c.js => 618914bf.ad5ace09.js} (78%) rename build/assets/js/{61b1ff91.a74aaf75.js => 61b1ff91.01109030.js} (95%) rename build/assets/js/{acba9d96.e6a02dbe.js => 68efb262.36868b50.js} (64%) rename build/assets/js/{69301e8b.f649c8f2.js => 69301e8b.f3c5089c.js} (84%) create mode 100644 build/assets/js/6a8ddb26.a8d54b20.js delete mode 100644 build/assets/js/6a8ddb26.bb20b217.js rename build/assets/js/{6ba36391.47baf76a.js => 6ba36391.bdee8d58.js} (82%) rename build/assets/js/{6f037fd7.de0d89b6.js => 6f037fd7.be4f334b.js} (95%) create mode 100644 build/assets/js/6f5ac92b.3d93dd47.js delete mode 100644 build/assets/js/6f5ac92b.7c64324c.js rename build/assets/js/{70e8639a.f501f0e6.js => 70e8639a.a7b63da5.js} (82%) delete mode 100644 build/assets/js/71cc7c85.13becfa5.js rename build/assets/js/{720f9cb5.3ce027f4.js => 720f9cb5.1be73404.js} (81%) rename build/assets/js/{72171cd8.54c5ee4c.js => 72171cd8.74acb7db.js} (85%) create mode 100644 build/assets/js/7242.6da46571.js create mode 100644 build/assets/js/73af12fb.015067f7.js rename build/assets/js/{1022.47537bec.js => 7426.0fe1a9ef.js} (56%) delete mode 100644 build/assets/js/74fdc727.cc9416e7.js rename build/assets/js/{76db7a6d.0afe694c.js => 76db7a6d.2bcc76ed.js} (80%) rename build/assets/js/{7824cff9.3096b8d9.js => 7824cff9.dde82ce4.js} (86%) rename build/assets/js/{79dc0904.36cbb9fb.js => 79dc0904.3b3a5e18.js} (75%) rename build/assets/js/{7a5975a7.4c71ff63.js => 7a5975a7.6a0313ab.js} (80%) rename build/assets/js/{7c1e7b23.aea15d1f.js => 7c1e7b23.0cceff70.js} (85%) delete mode 100644 build/assets/js/7c45cc48.04c9c3e7.js create mode 100644 build/assets/js/7c45cc48.7deaf08e.js rename build/assets/js/{81f29526.947baab7.js => 81f29526.ef9fe313.js} (77%) create mode 100644 build/assets/js/82419dfd.11312935.js delete mode 100644 build/assets/js/82419dfd.f69d5af3.js rename build/assets/js/{829b4b9b.52726404.js => 829b4b9b.d5f25fd7.js} (79%) create mode 100644 build/assets/js/829cd294.d14b23ab.js delete mode 100644 build/assets/js/829cd294.ef34853e.js create mode 100644 build/assets/js/833a0690.57155aee.js delete mode 100644 build/assets/js/833a0690.c32e479c.js create mode 100644 build/assets/js/8347fa88.ca8e39f6.js delete mode 100644 build/assets/js/8347fa88.e4b09989.js delete mode 100644 build/assets/js/8589.ab857865.js rename build/assets/js/{8613d4b8.57109ea3.js => 8613d4b8.a112ff98.js} (85%) create mode 100644 build/assets/js/868b6fb8.ccb36e11.js rename build/assets/js/{8b6091b0.07d8a007.js => 8b6091b0.2cc43598.js} (78%) delete mode 100644 build/assets/js/8d0b932e.0bc61134.js create mode 100644 build/assets/js/8d0b932e.3e2c9c72.js rename build/assets/js/{9235c071.e334b5d6.js => 9235c071.f936f4f6.js} (82%) create mode 100644 build/assets/js/935f2afb.0bdf028c.js delete mode 100644 build/assets/js/935f2afb.315226ae.js rename build/assets/js/{8852.4ffac5c4.js => 9505.7523b444.js} (56%) create mode 100644 build/assets/js/95a7ae32.3ed4f3ad.js delete mode 100644 build/assets/js/95a7ae32.b384d86d.js create mode 100644 build/assets/js/979f48c0.2b0cba0c.js delete mode 100644 build/assets/js/979f48c0.6c7e8b57.js rename build/assets/js/{98d1a41e.fdb37ceb.js => 98d1a41e.a0a45743.js} (92%) create mode 100644 build/assets/js/99b8a708.398eb8a9.js delete mode 100644 build/assets/js/99b8a708.3f8bf2d3.js rename build/assets/js/{9a9366b1.870698a9.js => 9a9366b1.ab1a0d5d.js} (95%) rename build/assets/js/{9b96db99.3262745a.js => 9b96db99.65caf0fb.js} (87%) delete mode 100644 build/assets/js/9d4e1be7.181c7972.js create mode 100644 build/assets/js/9d4e1be7.a9ee7661.js rename build/assets/js/{9e1db927.f6457615.js => 9e1db927.a0cdd623.js} (98%) rename build/assets/js/{9e78961b.62dbfa4b.js => 9e78961b.e32bc84b.js} (93%) rename build/assets/js/{9fc9b620.63fe2917.js => 9fc9b620.4be64ddf.js} (93%) rename build/assets/js/{9ff57eaa.8741717e.js => 9ff57eaa.986eb965.js} (78%) rename build/assets/js/{a00dd934.37307af4.js => a00dd934.091ad5c4.js} (75%) create mode 100644 build/assets/js/a04af9a2.a4172b2f.js rename build/assets/js/{a0d49790.93ae43f6.js => a0d49790.f6da78e9.js} (75%) create mode 100644 build/assets/js/a0d75a43.1b07a391.js delete mode 100644 build/assets/js/a0d75a43.dc859722.js create mode 100644 build/assets/js/a1f831b5.99aa2e6e.js delete mode 100644 build/assets/js/a1f831b5.ffb4bd23.js create mode 100644 build/assets/js/a2db6fd6.323f6535.js delete mode 100644 build/assets/js/a2db6fd6.ceb19896.js rename build/assets/js/{a399e926.479fbb82.js => a399e926.6c89943b.js} (81%) rename build/assets/js/{a4da47e1.9e7d5274.js => a4da47e1.11689d10.js} (92%) rename build/assets/js/{a5f26d61.4bf1ba1b.js => a5f26d61.614e3be4.js} (77%) create mode 100644 build/assets/js/a7bd4aaa.cf41b24b.js delete mode 100644 build/assets/js/a7bd4aaa.f5612402.js create mode 100644 build/assets/js/a94703ab.03e3ac63.js delete mode 100644 build/assets/js/a94703ab.bc697f24.js delete mode 100644 build/assets/js/ad8d1448.de8beca8.js create mode 100644 build/assets/js/ad8d1448.e3e0b916.js rename build/assets/js/{af91f293.2d77427b.js => af91f293.42de5a7a.js} (77%) rename build/assets/js/{b0d24208.f2adae3f.js => b0d24208.88806065.js} (75%) create mode 100644 build/assets/js/b137769e.2be8350d.js create mode 100644 build/assets/js/b202810b.3d55662b.js rename build/assets/js/{b4c00acc.381aa0af.js => b4c00acc.70d9fd4d.js} (88%) rename build/assets/js/{bce3eedd.a39946bf.js => bce3eedd.ef73d91e.js} (77%) rename build/assets/js/{beb6ddce.e4ab7eec.js => beb6ddce.9994c5f0.js} (81%) rename build/assets/js/{c30bab43.a9e78c88.js => c30bab43.3af275f1.js} (83%) create mode 100644 build/assets/js/c33d6554.08872042.js delete mode 100644 build/assets/js/c33d6554.f1b6c17f.js create mode 100644 build/assets/js/c4f5d8e4.466ad3d3.js delete mode 100644 build/assets/js/c4f5d8e4.74e60bf5.js rename build/assets/js/{c5f7ff1a.d115e6eb.js => c5f7ff1a.1a3bb12f.js} (78%) rename build/assets/js/{c7ccd35b.c53dbbdf.js => c7ccd35b.88ca3abd.js} (61%) rename build/assets/js/{ca4c51aa.4afb0a16.js => ca4c51aa.fd464d9a.js} (77%) create mode 100644 build/assets/js/cfe67a99.1a4c4cf9.js delete mode 100644 build/assets/js/d26d133a.254b86a7.js create mode 100644 build/assets/js/d26d133a.fac89a01.js delete mode 100644 build/assets/js/d475c619.8cd567b5.js create mode 100644 build/assets/js/d475c619.99c439c5.js rename build/assets/js/{d4781eda.3e83ba38.js => d4781eda.7819b49e.js} (87%) rename build/assets/js/{d8273606.a2846103.js => d8273606.8055d03c.js} (87%) create mode 100644 build/assets/js/dcf2e50b.f1ec2836.js delete mode 100644 build/assets/js/dcf2e50b.ffa083f1.js rename build/assets/js/{dfd8dfaf.e8e601fd.js => dfd8dfaf.60141c7c.js} (57%) delete mode 100644 build/assets/js/e3875bab.3a4abd9c.js create mode 100644 build/assets/js/e3875bab.72a3ed86.js rename build/assets/js/{e3bda051.39c2cc0c.js => e3bda051.aa9f2698.js} (91%) create mode 100644 build/assets/js/e6305dab.3df2285d.js delete mode 100644 build/assets/js/e6f27cd2.8445c63f.js create mode 100644 build/assets/js/e6f27cd2.ede20334.js delete mode 100644 build/assets/js/e7a84acc.3ffc6b6e.js create mode 100644 build/assets/js/e7a84acc.42a29373.js rename build/assets/js/{e7f02677.3a3ab274.js => e7f02677.feb86e37.js} (99%) rename build/assets/js/{e8c42455.c205f87f.js => e8c42455.5bdb4e2d.js} (84%) create mode 100644 build/assets/js/e8fcecf9.4652c672.js delete mode 100644 build/assets/js/e8fcecf9.ca3788e5.js rename build/assets/js/{e912b961.ecb1b798.js => e912b961.d4c84c07.js} (90%) rename build/assets/js/{eac819ad.8f20034b.js => eac819ad.f5609d88.js} (86%) delete mode 100644 build/assets/js/ec29823a.0534a53a.js delete mode 100644 build/assets/js/ed22c7e9.05a060d1.js create mode 100644 build/assets/js/f3316ef7.030164ad.js rename build/assets/js/{f435c040.9a696798.js => f435c040.edf90f1e.js} (83%) delete mode 100644 build/assets/js/f619ad04.5984a3c3.js rename build/assets/js/{f6623e93.cc72725d.js => f6623e93.fbb75f09.js} (51%) rename build/assets/js/{f93d7a3b.84f16635.js => f93d7a3b.8270a95b.js} (85%) delete mode 100644 build/assets/js/fac53bf8.323a0f38.js create mode 100644 build/assets/js/fac53bf8.c12dd61e.js rename build/assets/js/{fb24aa13.9f926910.js => fb24aa13.b798cdeb.js} (98%) delete mode 100644 build/assets/js/fb26d209.c8fccdcf.js create mode 100644 build/assets/js/fb26d209.f7a1412e.js rename build/assets/js/{fda70fd8.0787519d.js => fda70fd8.0b05c46c.js} (94%) delete mode 100644 build/assets/js/fdc91eb1.05fb4897.js create mode 100644 build/assets/js/fdc91eb1.d0f3ea4e.js rename build/assets/js/{fe9c53f2.6e252e5d.js => fe9c53f2.35732f59.js} (82%) create mode 100644 build/assets/js/ff3f68fa.5479690d.js rename build/assets/js/{ff883f18.96f67b10.js => ff883f18.ab8b891b.js} (88%) delete mode 100644 build/assets/js/main.100dd08b.js create mode 100644 build/assets/js/main.16291c43.js rename build/assets/js/{main.100dd08b.js.LICENSE.txt => main.16291c43.js.LICENSE.txt} (91%) create mode 100644 build/assets/js/runtime~main.467872be.js delete mode 100644 build/assets/js/runtime~main.98dd0d42.js delete mode 100644 build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum/index.html rename build/docs/build-on-morph/build-on-morph/{difference-between-morph-and-ethereum.htm => integration-one-page-cn.htm}/index.html (60%) rename build/docs/build-on-morph/build-on-morph/{difference-between-morph-and-ethereum.html => integration-one-page-cn.html}/index.html (60%) create mode 100644 build/docs/build-on-morph/build-on-morph/integration-one-page-cn/index.html create mode 100644 build/docs/build-on-morph/build-on-morph/integration-one-page.htm/index.html create mode 100644 build/docs/build-on-morph/build-on-morph/integration-one-page.html/index.html create mode 100644 build/docs/build-on-morph/build-on-morph/integration-one-page/index.html rename build/docs/build-on-morph/developer-resources/node-operation/{how-to-run-a-morph-node.htm => full-node/run-in-docker.htm}/index.html (64%) rename build/docs/build-on-morph/developer-resources/node-operation/{how-to-run-a-morph-node.html => full-node/run-in-docker.html}/index.html (64%) create mode 100644 build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker/index.html rename build/docs/build-on-morph/developer-resources/node-operation/{how-to-run-a-validator-node.htm => full-node/run-on-host.htm}/index.html (56%) rename build/docs/build-on-morph/developer-resources/node-operation/{how-to-run-a-validator-node.html => full-node/run-on-host.html}/index.html (56%) create mode 100644 build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host/index.html delete mode 100644 build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker/index.html delete mode 100644 build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node/index.html delete mode 100644 build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node/index.html create mode 100644 build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker.htm/index.html create mode 100644 build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker.html/index.html create mode 100644 build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker/index.html create mode 100644 build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host.htm/index.html create mode 100644 build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host.html/index.html create mode 100644 build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence.htm/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence.html/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability.htm/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability.html/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services.htm/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services.html/index.html create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services/index.html rename build/docs/build-on-morph/developer-resources/{node-operation/how-to-run-a-morph-node-docker.html => use-ecosystem-developer-tools/user-onboarding.htm}/index.html (62%) rename build/docs/build-on-morph/developer-resources/{node-operation/how-to-run-a-morph-node-docker.htm => use-ecosystem-developer-tools/user-onboarding.html}/index.html (62%) create mode 100644 build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding/index.html delete mode 100644 build/docs/quick-start/morph-zoo/morph-points.htm/index.html delete mode 100644 build/docs/quick-start/morph-zoo/morph-points.html/index.html delete mode 100644 build/docs/quick-start/morph-zoo/morph-points/index.html delete mode 100644 build/docs/quick-start/morph-zoo/voting-rules.htm/index.html delete mode 100644 build/docs/quick-start/morph-zoo/voting-rules.html/index.html delete mode 100644 build/docs/quick-start/morph-zoo/voting-rules/index.html create mode 100644 build/img/cards/bridge.svg create mode 100644 build/img/cards/contract.svg create mode 100644 build/img/cards/dev.svg create mode 100644 build/img/cards/faucet.svg create mode 100644 build/img/cards/guide.svg create mode 100644 build/img/cards/logo-dark.svg create mode 100644 build/img/cards/logo.svg create mode 100644 build/img/cards/node.svg create mode 100644 build/img/cards/research.svg create mode 100644 build/img/cards/tools.svg create mode 100644 build/img/cards/users.svg create mode 100644 build/img/cards/wallet.svg create mode 100644 build/js/cookbookdev.index.cjs.js create mode 100644 build/katex/katex.min.css create mode 100644 build/share/logo.png create mode 100644 nginx_sub_mainnet.conf create mode 100644 nginx_sub_qanet.conf create mode 100644 src/components/AskCookbook.js create mode 100644 static/js/cookbookdev.index.cjs.js diff --git a/MakefileEks.mk b/MakefileEks.mk index b70b6dc78..66cb42a31 100644 --- a/MakefileEks.mk +++ b/MakefileEks.mk @@ -5,12 +5,29 @@ LDFLAGSSTRING +=-X main.GitCommit=$(GITCOMMIT) LDFLAGSSTRING +=-X main.GitDate=$(GITDATE) LDFLAGS := -ldflags "$(LDFLAGSSTRING)" +build-bk-test-morph-test-qanet-to-morph-doc-qanet: + source ./makefile-function.sh && MFPnpmInstall && pnpm run build:qanet + cp -rf nginx_sub_qanet.conf nginx_sub.conf + +start-bk-test-morph-test-qanet-to-morph-doc-qanet: + # mkdir -p logs/morph-doc && pnpm run deploy:qanet + @echo "starting ngnix..." + nginx -g 'daemon off;' + + + +healthcheck-bk-test-morph-test-qanet-to-morph-doc-qanet: + curl http://127.0.0.1:8080 + build-bk-prod-morph-prod-mainnet-to-morph-doc: - source ./makefile-function.sh && MFPnpmInstall && pnpm run build + source ./makefile-function.sh && MFPnpmInstall && pnpm run build:mainnet + cp -rf nginx_sub_mainnet.conf nginx_sub.conf start-bk-prod-morph-prod-mainnet-to-morph-doc: - mkdir -p logs/morph-doc && pnpm run serve + # mkdir -p logs/morph-doc && pnpm run deploy:mainnet + @echo "starting ngnix..." + nginx -g 'daemon off;' healthcheck-bk-prod-morph-prod-mainnet-to-morph-doc: curl http://127.0.0.1:8080 diff --git a/README.md b/README.md index 5b46f6e58..cec3f21d3 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,10 @@ Our decentralized sequencer design and innovative Layer 2 approach address block Website: https://www.morphl2.io/ -Twitter: https://twitter.com/Morphl2 +Twitter: https://x.com/MorphLayer Medium: [Morph – Medium](https://medium.com/@morphlayer2) -Telegram: https://t.me/morphoffical +Telegram: https://t.me/MorphL2official Gmail: official@morphl2.io \ No newline at end of file diff --git a/build/404.html b/build/404.html index 3dba16710..8d6516462 100644 --- a/build/404.html +++ b/build/404.html @@ -3,11 +3,15 @@ -Page Not Found | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Page Not Found | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/build/assets/css/styles.5e55a320.css b/build/assets/css/styles.5e55a320.css new file mode 100644 index 000000000..d4f985a55 --- /dev/null +++ b/build/assets/css/styles.5e55a320.css @@ -0,0 +1 @@ +.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.avatar__photo,.card,.text--truncate{overflow:hidden}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.button,.dropdown__link,.sr-only,.text--truncate,.truncate{white-space:nowrap}.ring-background,.ring-danger,.ring-default,.ring-primary,.ring-secondary,.ring-success,.ring-warning{--tw-ring-opacity:1}*,.DocSearch-Container,.DocSearch-Container *,.box-border{box-sizing:border-box}.text--truncate,.text-ellipsis,.truncate{text-overflow:ellipsis}.tap-highlight-transparent,.toggleButton_C4u_,html{-webkit-tap-highlight-color:transparent}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:#656c85cc;--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px #1e235a66;--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 #1e235a66;--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 #45629b1f;--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width);padding:0 var(--ifm-spacing-horizontal);width:100%}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.mx-0,.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.px-0,.row--no-gutters>.col{padding-left:0;padding-right:0}.data-\[has-helper\=true\]\:items-start[data-has-helper=true],.group[data-has-label=true] .group-data-\[has-label\=true\]\:items-start,.items-start,.row--align-top{align-items:flex-start}.group[data-has-label=true] .group-data-\[has-label\=true\]\:items-end,.items-end,.row--align-bottom{align-items:flex-end}.items-center,.menuExternalLink_T45N,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width);padding:0 var(--ifm-spacing-horizontal);width:100%}.\!pb-0,.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.\!px-1,.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.\!px-1,.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}.max-w-full,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_Eugp .wordWrapButtonIcon_KMHO{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_WmUu,.alert__heading,.text--uppercase,.uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);width:var(--ifm-avatar-photo-size)}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after,.inline-block{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child),.last-of-type\:rounded-l-none:last-of-type{border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child),.first-of-type\:rounded-r-none:first-of-type{border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button,.data-\[justify\=end\]\:flex-grow[data-justify=end],.data-\[justify\=start\]\:flex-grow[data-justify=start],.flex-grow{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column}.card--full-height,.h-full,body,html{height:100%}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child,.pt-0{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child),.pb-0{padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.aria-expanded\:opacity-70[aria-expanded=true],.close:hover,.data-\[pressed\=true\]\:opacity-70[data-pressed=true],.group[data-pressed=true] .group-data-\[pressed\=true\]\:opacity-70,.opacity-70,.peer[data-filled=true]~.peer-data-\[filled\=true\]\:opacity-70{opacity:.7}.close:focus,.hover\:opacity-80:hover,.theme-code-block-highlighted-line .codeLineNumber_dbgI:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]),.pointer-events-none{pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_AUwr article>:first-child,.docItemContainer_AUwr header+*,.footer__item,.mt-0{margin-top:0}.admonitionContent_Lm9s>:last-child,.collapsibleContent_MmFW p:last-child,.details_NQJP>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone__C0n,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child),.mt-1{margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_NQJP[data-collapsed=false].isBrowser_nVDU>summary:before,.details_NQJP[open]:not(.isBrowser_nVDU)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{opacity:0;top:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;visibility:hidden;bottom:0;left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:13px}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.data-\[open\=true\]\:flex[data-open=true],.flex,.footer__links,.group[data-has-helper=true] .group-data-\[has-helper\=true\]\:flex,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_jjlM,.flex-auto,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.m-0,.navbar__items--center .navbar__brand{margin:0}.footer__col:nth-child(3),.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}[data-theme=dark],[data-theme=light]{--ifm-color-primary:#14a800;--ifm-color-primary-dark:#3fff90;--ifm-color-primary-darker:#2dff85;--ifm-color-primary-darkest:#00f768;--ifm-color-primary-light:#85ffb8;--ifm-color-primary-lighter:#97ffc3;--ifm-color-primary-lightest:#ccffe1;--ifm-menu-color-background-active:#14a800;--ifm-menu-color-background-hover:#14a800;--ifm-navbar-link-color:#fff;--ifm-footer-color:#999}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.\[\&\>tr\]\:first\:shadow-small:first-child>tr,.shadow,.shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\],.shadow-large,.shadow-lg,.shadow-md,.shadow-medium,.shadow-none,.shadow-sm,.shadow-small{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.inline-flex,.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_j67I>li)>.containsTaskList_j67I{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:#090a11cc;--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 #0304094d;--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.302);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 #494c6a80,0 -4px 8px 0 #0003;--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}@font-face{font-display:swap;font-family:Inter Variable;font-style:normal;font-weight:100 900;src:url(/assets/fonts/InterVariable-a0e477f2f1f9d2376fde931ee7c6241a.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter Variable;font-style:italic;font-weight:100 900;src:url(/assets/fonts/InterVariable-Italic-e295f70fe3e2df296c7bd1082d39afda.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:100;src:url(/assets/fonts/InterDisplay-Thin-8869ea180347c0b3e105f1f25d8159c1.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:100;src:url(/assets/fonts/InterDisplay-ThinItalic-84afcd2c98f66e503a057888753b75a0.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:200;src:url(/assets/fonts/InterDisplay-ExtraLight-8aac419550652c70acce102a1405b9e6.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:200;src:url(/assets/fonts/InterDisplay-ExtraLightItalic-3d35f6363cf46c94cb5d50618f66586b.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:300;src:url(/assets/fonts/InterDisplay-Light-878eccfa0e5c8240899d9a9588d25926.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:300;src:url(/assets/fonts/InterDisplay-LightItalic-af1c0bdb835afad15237ca3659b2c345.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:400;src:url(/assets/fonts/InterDisplay-Regular-a4074fefb60f137f7974a3f2cadf655c.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:400;src:url(/assets/fonts/InterDisplay-Italic-c0dffe244faaf5bb8fbef1517f2c89a3.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:500;src:url(/assets/fonts/InterDisplay-Medium-6e976150c457a5edc1f31e3c6affe0c5.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:500;src:url(/assets/fonts/InterDisplay-MediumItalic-361044e3f1781339740b739848dd02f0.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:600;src:url(/assets/fonts/InterDisplay-SemiBold-54b6be6a7edc5b3cbdd615e2c9a54b8b.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:600;src:url(/assets/fonts/InterDisplay-SemiBoldItalic-4f03584a088f6fd339102161c36bd5b8.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:700;src:url(/assets/fonts/InterDisplay-Bold-f5ec5e21f616f430d4ba27e814d9eeb6.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:700;src:url(/assets/fonts/InterDisplay-BoldItalic-439cef167a628cb218568c7bd4d6f0ac.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:800;src:url(/assets/fonts/InterDisplay-ExtraBold-89518fa4ab7bacdb30e6bb414678e283.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:800;src:url(/assets/fonts/InterDisplay-ExtraBoldItalic-4dcb197ef83d3558dbdcc3e8e25b568f.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:900;src:url(/assets/fonts/InterDisplay-Black-fb55d5da48c7bee4d80af9ec6cd28e3f.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:900;src:url(/assets/fonts/InterDisplay-BlackItalic-bd4243b6c8594236ba8562208aa8e267.woff2) format("woff2")}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }:root,[data-theme]{background-color:hsl(var(--morui-background));color:hsl(var(--morui-foreground))}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.\[\&\>\*\]\:relative>*,.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.bottom-0{bottom:0}.bottom-8{bottom:2rem}.bottom-\[10\%\]{bottom:10%}.bottom-\[5\%\]{bottom:5%}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:left-0,.group[data-filled=true] .group-data-\[filled\=true\]\:left-0,.left-0{left:0}.left-1\.5{left:.375rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[10\%\]{left:10%}.left-\[5\%\]{left:5%}.right-1{right:.25rem}.right-1\.5{right:.375rem}.right-3{right:.75rem}.right-\[10\%\]{right:10%}.right-\[30\%\]{right:30%}.right-\[5\%\]{right:5%}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-\[10\%\]{top:10%}.top-\[5\%\]{top:5%}.top-\[6px\]{top:6px}.top-\[var\(--navbar-height\)\]{top:var(--navbar-height)}.-z-0,.z-0{z-index:0}.-z-30{z-index:-30}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-1{order:1}.order-2{order:2}.order-3{order:3}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.mx-1,.mx-\[calc\(\(theme\(spacing\.7\)-theme\(spacing\.5\)\)\/2\)\]{margin-left:.25rem;margin-right:.25rem}.mx-\[calc\(\(theme\(spacing\.5\)-theme\(spacing\.1\)\)\/2\)\]{margin-left:.5rem;margin-right:.5rem}.mx-\[calc\(\(theme\(spacing\.6\)-theme\(spacing\.3\)\)\/2\)\]{margin-left:.375rem;margin-right:.375rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-bottom:0;margin-top:0}.my-1,.my-\[calc\(\(theme\(spacing\.7\)-theme\(spacing\.5\)\)\/2\)\]{margin-bottom:.25rem;margin-top:.25rem}.my-16{margin-bottom:4rem;margin-top:4rem}.my-\[calc\(\(theme\(spacing\.5\)-theme\(spacing\.1\)\)\/2\)\]{margin-bottom:.5rem;margin-top:.5rem}.my-\[calc\(\(theme\(spacing\.6\)-theme\(spacing\.3\)\)\/2\)\]{margin-bottom:.375rem;margin-top:.375rem}.-mr-2{margin-right:-.5rem}.-ms-2{margin-inline-start:-.5rem}.-mt-1{margin-top:-.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-5{margin-bottom:1.25rem}.mb-8{margin-bottom:2rem}.mb-px{margin-bottom:1px}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.group[data-selected][data-pressed] .group-data-\[selected\]\:group-data-\[pressed\]\:ml-3,.ml-3{margin-left:.75rem}.mr-2{margin-right:.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-\[133px\]{margin-top:133px}.mt-\[9px\]{margin-top:9px}.line-clamp-1{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;overflow:hidden}.block{display:block}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.\!h-auto{height:auto!important}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[100dvh\]{height:100dvh}.h-\[25px\]{height:25px}.h-\[2px\]{height:2px}.h-\[320px\]{height:320px}.h-\[90\%\]{height:90%}.h-\[95\%\]{height:95%}.h-\[97px\]{height:97px}.h-\[calc\(100dvh_-_var\(--navbar-height\)_-_1px\)\]{height:calc(100dvh - var(--navbar-height) - 1px)}.h-\[var\(--navbar-height\)\]{height:var(--navbar-height)}.h-auto,.img_ce0i{height:auto}.h-divider{height:var(--morui-divider-weight)}.h-fit{height:fit-content}.h-px{height:1px}.h-screen{height:100vh}.h-unit-10{height:var(--morui-spacing-unit-10)}.h-unit-12{height:var(--morui-spacing-unit-12)}.h-unit-4{height:var(--morui-spacing-unit-4)}.h-unit-8{height:var(--morui-spacing-unit-8)}.h-unit-9{height:var(--morui-spacing-unit-9)}.max-h-64{max-height:16rem}.max-h-\[calc\(100\%_-_7\.5rem\)\]{max-height:calc(100% - 7.5rem)}.min-h-3{min-height:.75rem}.min-h-3\.5{min-height:.875rem}.min-h-4{min-height:1rem}.min-h-5{min-height:1.25rem}.min-h-6{min-height:1.5rem}.min-h-7{min-height:1.75rem}.min-h-screen{min-height:100vh}.min-h-unit-10{min-height:var(--morui-spacing-unit-10)}.min-h-unit-12{min-height:var(--morui-spacing-unit-12)}.min-h-unit-14{min-height:var(--morui-spacing-unit-14)}.min-h-unit-16{min-height:var(--morui-spacing-unit-16)}.min-h-unit-4{min-height:var(--morui-spacing-unit-4)}.min-h-unit-8{min-height:var(--morui-spacing-unit-8)}#__docusaurus,.container,.main-wrapper{min-height:100%}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.group[data-pressed=true] .group-data-\[pressed\=true\]\:w-5,.w-5{width:1.25rem}.group[data-pressed=true] .group-data-\[pressed\=true\]\:w-6,.w-6{width:1.5rem}.group[data-pressed=true] .group-data-\[pressed\=true\]\:w-7,.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[100px\]{width:100px}.w-\[128px\]{width:128px}.w-\[160px\]{width:160px}.w-\[284px\]{width:284px}.w-\[80\%\]{width:80%}.w-\[97px\]{width:97px}.w-\[calc\(100\%_-_theme\(spacing\.unit-6\)\)\]{width:calc(100% - var(--morui-spacing-unit-6))}.w-auto{width:auto}.w-divider{width:var(--morui-divider-weight)}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.w-unit-10{width:var(--morui-spacing-unit-10)}.w-unit-12{width:var(--morui-spacing-unit-12)}.w-unit-4{width:var(--morui-spacing-unit-4)}.w-unit-8{width:var(--morui-spacing-unit-8)}.features,.hero-banner{width:100%;display:flex}.min-w-10{min-width:2.5rem}.min-w-3{min-width:.75rem}.min-w-3\.5{min-width:.875rem}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-6{min-width:1.5rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[200px\]{min-width:200px}.min-w-full{min-width:100%}.min-w-max{min-width:max-content}.min-w-unit-10{min-width:var(--morui-spacing-unit-10)}.min-w-unit-12{min-width:var(--morui-spacing-unit-12)}.min-w-unit-5{min-width:var(--morui-spacing-unit-5)}.min-w-unit-6{min-width:var(--morui-spacing-unit-6)}.min-w-unit-7{min-width:var(--morui-spacing-unit-7)}.min-w-unit-8{min-width:var(--morui-spacing-unit-8)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\[1200px\]{max-width:1200px}.max-w-\[1280px\]{max-width:1280px}.max-w-\[1536px\]{max-width:1536px}.max-w-\[640px\]{max-width:640px}.max-w-\[768px\]{max-width:768px}.max-w-fit{max-width:fit-content}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.basis-0,.data-\[justify\=end\]\:basis-0[data-justify=end],.data-\[justify\=start\]\:basis-0[data-justify=start]{flex-basis:0px}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.origin-center{transform-origin:center}.origin-left{transform-origin:left}.origin-right{transform-origin:right}.origin-top-left{transform-origin:top left}.-translate-x-1\/2,.after\:-translate-x-1\/2:after,.data-\[placement\=bottom\]\:before\:-translate-x-1\/2[data-placement=bottom]:before,.data-\[placement\=top\]\:before\:-translate-x-1\/2[data-placement=top]:before{--tw-translate-x:-50%}.-rotate-90,.-translate-x-1\/2,.-translate-y-1\/2,.data-\[before\=true\]\:rotate-180[data-before=true],.data-\[direction\=ascending\]\:rotate-180[data-direction=ascending],.data-\[focus-visible\=true\]\:-translate-x-3[data-focus-visible=true],.data-\[hover\=true\]\:-translate-x-3[data-hover=true],.data-\[hover\=true\]\:translate-x-0[data-hover=true],.data-\[invisible\=true\]\:scale-0[data-invisible=true],.data-\[open\=true\]\:-rotate-90[data-open=true],.data-\[open\=true\]\:rotate-180[data-open=true],.group[data-copied=true] .group-data-\[copied\=true\]\:scale-100,.group[data-pressed=true] .group-data-\[pressed\=true\]\:scale-95,.group[data-selected=true] .group-data-\[selected\=true\]\:scale-100,.group[data-selected=true] .group-data-\[selected\=true\]\:translate-x-3,.rotate-0,.rotate-180,.scale-0,.scale-100,.scale-105,.scale-50,.transform,.translate-x-1,.translate-x-1\/2,.translate-y-1,.translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2,.data-\[placement\=left\]\:before\:-translate-y-1\/2[data-placement=left]:before,.data-\[placement\=right\]\:before\:-translate-y-1\/2[data-placement=right]:before{--tw-translate-y:-50%}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1\/2{--tw-translate-x:50%}.after\:translate-y-1:after,.translate-y-1{--tw-translate-y:0.25rem}.translate-y-1\/2{--tw-translate-y:50%}.-rotate-90,.data-\[open\=true\]\:-rotate-90[data-open=true]{--tw-rotate:-90deg}.after\:rotate-0:after,.before\:rotate-0:before,.rotate-0{--tw-rotate:0deg}.data-\[before\=true\]\:rotate-180[data-before=true],.data-\[direction\=ascending\]\:rotate-180[data-direction=ascending],.data-\[open\=true\]\:rotate-180[data-open=true],.rotate-180{--tw-rotate:180deg}.data-\[invisible\=true\]\:scale-0[data-invisible=true],.scale-0{--tw-scale-x:0;--tw-scale-y:0}.data-\[dragging\=true\]\:after\:scale-100[data-dragging=true]:after,.group[data-copied=true] .group-data-\[copied\=true\]\:scale-100,.group[data-selected=true] .group-data-\[selected\=true\]\:scale-100,.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.after\:scale-50:after,.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}@keyframes a{0%{opacity:.2;transform:scale(0)}to{opacity:0;transform:scale(2)}}.animate-drip-expand{animation:.42s linear a}@keyframes b{0%{transform:translateX(-50%) scaleX(.2)}to{transform:translateX(100%) scaleX(1)}}.animate-indeterminate-bar{animation:1.5s cubic-bezier(.65,.815,.735,.395) infinite b}.animate-none{animation:none}.animate-spinner-ease-spin{animation:.8s infinite c}@keyframes c{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.animate-spinner-linear-spin{animation:.8s linear infinite c}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed,.data-\[disabled\=true\]\:cursor-not-allowed[data-disabled=true],.toggleButtonDisabled_K1qw{cursor:not-allowed}.cursor-pointer,.data-\[sortable\=true\]\:cursor-pointer[data-sortable=true],.data-\[visible\=true\]\:cursor-pointer[data-visible=true],.dropdownNavbarItemMobile_I3x3{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;user-select:none}.resize-none{resize:none}.scroll-py-6{scroll-padding-bottom:1.5rem;scroll-padding-top:1.5rem}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.data-\[orientation\=horizontal\]\:flex-row[data-orientation=horizontal],.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.place-content-center{place-content:center}.data-\[justify\=start\]\:justify-start[data-justify=start],.justify-start{justify-content:flex-start}.data-\[justify\=end\]\:justify-end[data-justify=end],.justify-end{justify-content:flex-end}.data-\[justify\=center\]\:justify-center[data-justify=center],.justify-center{justify-content:center}.justify-between{justify-content:space-between}.\!gap-0{gap:0!important}.\!gap-unit-0{gap:var(--morui-spacing-unit-0)!important}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-unit-2{gap:var(--morui-spacing-unit-2)}.gap-unit-3{gap:var(--morui-spacing-unit-3)}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.125rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.125rem*var(--tw-space-x-reverse))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overflow-x-scroll{overflow-x:scroll}.truncate{overflow:hidden}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(theme\(borderRadius\.large\)\/1\.5\)\]{border-radius:calc(var(--morui-radius-large)/1.5)}.rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.5\)\]{border-radius:calc(var(--morui-radius-medium)*.5)}.rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.6\)\]{border-radius:calc(var(--morui-radius-medium)*.6)}.rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.7\)\]{border-radius:calc(var(--morui-radius-medium)*.7)}.rounded-\[calc\(theme\(borderRadius\.medium\)\/2\)\]{border-radius:calc(var(--morui-radius-medium)/2)}.rounded-\[calc\(theme\(borderRadius\.small\)\/2\)\]{border-radius:calc(var(--morui-radius-small)/2)}.rounded-full{border-radius:9999px}.data-\[has-multiple-rows\=true\]\:rounded-large[data-has-multiple-rows=true],.rounded-large{border-radius:var(--morui-radius-large)}.rounded-md{border-radius:.375rem}.group.is-splitted .group-\[\.is-splitted\]\:rounded-medium,.rounded-medium{border-radius:var(--morui-radius-medium)}.\[\&\:not\(\:first-child\)\:not\(\:last-child\)\]\:rounded-none:not(:first-child):not(:last-child),.\[\&\:not\(\:first-of-type\)\:not\(\:last-of-type\)\]\:rounded-none:not(:first-of-type):not(:last-of-type),.rounded-none{border-radius:0}.rounded-small{border-radius:var(--morui-radius-small)}.dark,.light,:root,[data-theme=dark],[data-theme=light]{--morui-assist-3:213 10% 57%;--morui-brand-high:113 100% 33%;--morui-brand:113 100% 33%;--morui-border:0 0% 60%;--morui-link:214 100% 57%;--morui-warning-foreground:0 0% 0%;--morui-warning:37 91% 55%;--morui-fixed-green:158 58% 50%;--morui-fixed-red:338 98% 54%;--morui-fixed-white:0 0% 100%;--morui-fixed-black:0 0% 0%;--morui-box-shadow:213 20% 9%;--morui-focus:216 100% 50%;--morui-overlay:0 0% 0%;--morui-default:0 0% 20%;--morui-primary:113 100% 33%;--morui-secondary-foreground:0 0% 100%;--morui-success-foreground:0 0% 0%;--morui-success:158 58% 50%;--morui-danger-foreground:0 0% 100%;--morui-danger:338 98% 54%;--morui-green:113 100% 33%;--morui-yellow:36 93% 54%;--morui-purple:249 100% 71%;--morui-card-border-opacity:0.10;--morui-desc-1:0 0% 60%;--morui-spacing-unit:4px;--morui-spacing-unit-0:0px;--morui-spacing-unit-1:0.25rem;--morui-spacing-unit-2:0.5rem;--morui-spacing-unit-3:0.75rem;--morui-spacing-unit-4:1rem;--morui-spacing-unit-5:1.25rem;--morui-spacing-unit-6:1.5rem;--morui-spacing-unit-7:1.75rem;--morui-spacing-unit-8:2rem;--morui-spacing-unit-9:2.25rem;--morui-spacing-unit-10:2.5rem;--morui-spacing-unit-11:2.75rem;--morui-spacing-unit-12:3rem;--morui-spacing-unit-13:3.25rem;--morui-spacing-unit-14:3.5rem;--morui-spacing-unit-15:3.75rem;--morui-spacing-unit-16:4rem;--morui-spacing-unit-17:4.25rem;--morui-spacing-unit-18:4.5rem;--morui-spacing-unit-20:5rem;--morui-spacing-unit-24:6rem;--morui-spacing-unit-28:7rem;--morui-spacing-unit-32:8rem;--morui-spacing-unit-36:9rem;--morui-spacing-unit-40:10rem;--morui-spacing-unit-44:11rem;--morui-spacing-unit-48:12rem;--morui-spacing-unit-52:13rem;--morui-spacing-unit-56:14rem;--morui-spacing-unit-60:15rem;--morui-spacing-unit-64:16rem;--morui-spacing-unit-72:18rem;--morui-spacing-unit-80:20rem;--morui-spacing-unit-96:24rem;--morui-spacing-unit-xs:0.5rem;--morui-spacing-unit-sm:0.75rem;--morui-spacing-unit-md:1rem;--morui-spacing-unit-lg:1.375rem;--morui-spacing-unit-xl:2.25rem;--morui-spacing-unit-2xl:3rem;--morui-spacing-unit-3xl:5rem;--morui-spacing-unit-4xl:7.5rem;--morui-spacing-unit-5xl:14rem;--morui-spacing-unit-6xl:18rem;--morui-spacing-unit-7xl:24rem;--morui-spacing-unit-8xl:32rem;--morui-spacing-unit-9xl:40rem;--morui-spacing-unit-3_5:0.875rem;--morui-disabled-opacity:.5;--morui-divider-weight:1px;--morui-font-size-tiny:1rem;--morui-font-size-small:1.25rem;--morui-font-size-medium:1.5rem;--morui-font-size-large:40px;--morui-font-size-huge:56px;--morui-line-height-tiny:1rem;--morui-line-height-small:1.75rem;--morui-line-height-medium:2rem;--morui-line-height-large:65px;--morui-line-height-huge:72px;--morui-radius-small:8px;--morui-radius-medium:12px;--morui-radius-large:24px;--morui-radius-tiny:4px;--morui-border-width-small:1px;--morui-border-width-medium:2px;--morui-border-width-large:3px;--morui-border-width-tiny:1px;--morui-font-weight-hairline:100;--morui-font-weight-light:300;--morui-font-weight-normal:400;--morui-font-weight-medium:500;--morui-font-weight-semibold:600;--morui-font-weight-bold:700;--morui-font-weight-extrabold:800;--morui-font-weight-black:900;--morui-font-weight-tiny:400;--morui-font-weight-small:500;--morui-border-color-default:#999}.\!rounded-l-none{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.\!rounded-r-none{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-b-large{border-bottom-left-radius:var(--morui-radius-large);border-bottom-right-radius:var(--morui-radius-large)}.rounded-b-medium{border-bottom-left-radius:var(--morui-radius-medium);border-bottom-right-radius:var(--morui-radius-medium)}.rounded-b-small{border-bottom-left-radius:var(--morui-radius-small);border-bottom-right-radius:var(--morui-radius-small)}.rounded-t-large{border-top-left-radius:var(--morui-radius-large);border-top-right-radius:var(--morui-radius-large)}.rounded-t-medium{border-top-left-radius:var(--morui-radius-medium);border-top-right-radius:var(--morui-radius-medium)}.rounded-t-small{border-top-left-radius:var(--morui-radius-small);border-top-right-radius:var(--morui-radius-small)}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-3{border-width:3px}.border-medium{border-width:var(--morui-border-width-medium)}.border-small{border-width:var(--morui-border-width-small)}.border-tiny{border-width:var(--morui-border-width-tiny)}.border-b{border-bottom-width:1px}.border-b-medium{border-bottom-width:var(--morui-border-width-medium)}.border-solid{border-style:solid}.border-dotted{border-style:dotted}.border-none,.data-\[menu-open\=true\]\:border-none[data-menu-open=true]{border-style:none}.\!border-danger{--tw-border-opacity:1!important;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))!important}.border-b-white{border-color:hsl(var(--morui-b-white)/var(--morui-b-white-opacity,var(--tw-border-opacity)))}.border-background{--tw-border-opacity:1;border-color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-border-opacity)))}.border-card-border{--tw-border-opacity:1;border-color:hsl(var(--morui-card-border)/var(--morui-card-border-opacity,var(--tw-border-opacity)))}.border-danger{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.border-default,.data-\[hover\=true\]\:border-default[data-hover=true],.hover\:border-default:hover{--tw-border-opacity:1;border-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-border-opacity)))}.border-default-200{--tw-border-opacity:1;border-color:hsl(var(--morui-default-200)/var(--morui-default-200-opacity,var(--tw-border-opacity)))}.border-default-300,.hover\:border-default-300:hover{--tw-border-opacity:1;border-color:hsl(var(--morui-default-300)/var(--morui-default-300-opacity,var(--tw-border-opacity)))}.border-default-600{--tw-border-opacity:1;border-color:hsl(var(--morui-default-600)/var(--morui-default-600-opacity,var(--tw-border-opacity)))}.border-divider{--tw-border-opacity:1;border-color:hsl(var(--morui-divider)/var(--morui-divider-opacity,var(--tw-border-opacity)))}.border-foreground{--tw-border-opacity:1;border-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-border-opacity)))}.border-primary{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.border-secondary{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.border-success{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.border-transparent{border-color:#0000}.border-warning{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.border-l-transparent,.border-x-transparent{border-left-color:#0000}.border-r-transparent,.border-x-transparent{border-right-color:#0000}.border-y-transparent{border-bottom-color:#0000;border-top-color:#0000}.border-b-current{border-bottom-color:initial}.border-b-danger{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.border-b-default{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-border-opacity)))}.border-b-foreground{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-border-opacity)))}.border-b-primary{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.border-b-secondary{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.border-b-success{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.border-b-warning{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.border-b-white{--tw-border-opacity:1;border-bottom-color:rgb(255 255 255/var(--tw-border-opacity))}.border-s-danger{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.border-s-foreground{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-border-opacity)))}.border-s-primary{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.border-s-secondary{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.border-s-success{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.border-s-warning{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.border-t-transparent{border-top-color:#0000}.\!bg-\[\#21231C\]{--tw-bg-opacity:1!important;background-color:rgb(33 35 28/var(--tw-bg-opacity))!important}.bg-\[\#7D68FF\]{--tw-bg-opacity:1;background-color:rgb(125 104 255/var(--tw-bg-opacity))}.bg-\[\#ffffff1a\]{background-color:#ffffff1a}.bg-background{--tw-bg-opacity:1;background-color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-bg-opacity)))}.bg-background\/10{background-color:hsl(var(--morui-background)/.1)}.bg-background\/70{background-color:hsl(var(--morui-background)/.7)}.bg-background\/80{background-color:hsl(var(--morui-background)/.8)}.bg-card-background{--tw-bg-opacity:1;background-color:hsl(var(--morui-card-background)/var(--morui-card-background-opacity,var(--tw-bg-opacity)))}.bg-content1,.group.is-splitted .group-\[\.is-splitted\]\:bg-content1{--tw-bg-opacity:1;background-color:hsl(var(--morui-content1)/var(--morui-content1-opacity,var(--tw-bg-opacity)))}.bg-content3{--tw-bg-opacity:1;background-color:hsl(var(--morui-content3)/var(--morui-content3-opacity,var(--tw-bg-opacity)))}.bg-current{background-color:currentColor}.bg-danger,.data-\[active\=true\]\:bg-danger[data-active=true],.data-\[hover\=true\]\:bg-danger[data-hover=true],.data-\[in-range\=true\]\:bg-danger[data-in-range=true],.data-\[selected\=true\]\:bg-danger[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)))}.bg-danger-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-danger-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger-50)/var(--morui-danger-50-opacity,var(--tw-bg-opacity)))}.bg-danger\/20,.data-\[hover\=true\]\:bg-danger\/20[data-hover=true]{background-color:hsl(var(--morui-danger)/.2)}.bg-default,.data-\[hover\=true\]\:bg-default[data-hover=true],.data-\[selected\=true\]\:bg-default[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)))}.bg-default-100,.data-\[hover\=true\]\:bg-default-100[data-hover=true],.hover\:bg-default-100:hover{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-100)/var(--morui-default-100-opacity,var(--tw-bg-opacity)))}.\[\&\[data-hover\=true\]\:not\(\[data-active\=true\]\)\]\:bg-default-200[data-hover=true]:not([data-active=true]),.active\:bg-default-200:active,.bg-default-200,.data-\[hover\=true\]\:bg-default-200[data-hover=true],.data-\[in-range\=false\]\:bg-default-200[data-in-range=false]{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-200)/var(--morui-default-200-opacity,var(--tw-bg-opacity)))}.bg-default-300\/50{background-color:hsl(var(--morui-default-300)/.5)}.bg-default-400,.data-\[active\=true\]\:bg-default-400[data-active=true],.group[data-selected=true] .group-data-\[selected\=true\]\:bg-default-400{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-400)/var(--morui-default-400-opacity,var(--tw-bg-opacity)))}.bg-default-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-50)/var(--morui-default-50-opacity,var(--tw-bg-opacity)))}.bg-default-500{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-500)/var(--morui-default-500-opacity,var(--tw-bg-opacity)))}.bg-default\/40,.data-\[hover\=true\]\:bg-default\/40[data-hover=true]{background-color:hsl(var(--morui-default)/.4)}.bg-divider{--tw-bg-opacity:1;background-color:hsl(var(--morui-divider)/var(--morui-divider-opacity,var(--tw-bg-opacity)))}.bg-foreground,.data-\[in-range\=true\]\:bg-foreground[data-in-range=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-bg-opacity)))}.bg-foreground\/10{background-color:hsl(var(--morui-foreground)/.1)}.bg-overlay\/30{background-color:hsl(var(--morui-overlay)/.3)}.bg-overlay\/50{background-color:hsl(var(--morui-overlay)/.5)}.bg-primary,.data-\[active\=true\]\:bg-primary[data-active=true],.data-\[hover\=true\]\:bg-primary[data-hover=true],.data-\[in-range\=true\]\:bg-primary[data-in-range=true],.data-\[selected\=true\]\:bg-primary[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)))}.bg-primary-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-primary-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary-50)/var(--morui-primary-50-opacity,var(--tw-bg-opacity)))}.bg-primary\/20,.data-\[hover\=true\]\:bg-primary\/20[data-hover=true]{background-color:hsl(var(--morui-primary)/.2)}.bg-secondary,.data-\[active\=true\]\:bg-secondary[data-active=true],.data-\[hover\=true\]\:bg-secondary[data-hover=true],.data-\[in-range\=true\]\:bg-secondary[data-in-range=true],.data-\[selected\=true\]\:bg-secondary[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)))}.bg-secondary-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-secondary-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary-50)/var(--morui-secondary-50-opacity,var(--tw-bg-opacity)))}.bg-secondary\/20,.data-\[hover\=true\]\:bg-secondary\/20[data-hover=true]{background-color:hsl(var(--morui-secondary)/.2)}.bg-success,.data-\[active\=true\]\:bg-success[data-active=true],.data-\[hover\=true\]\:bg-success[data-hover=true],.data-\[in-range\=true\]\:bg-success[data-in-range=true],.data-\[selected\=true\]\:bg-success[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)))}.bg-success-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-success-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-success-50)/var(--morui-success-50-opacity,var(--tw-bg-opacity)))}.bg-success\/20,.data-\[hover\=true\]\:bg-success\/20[data-hover=true]{background-color:hsl(var(--morui-success)/.2)}.bg-transparent,.data-\[hover\=true\]\:bg-transparent[data-hover=true]{background-color:initial}.bg-warning,.data-\[active\=true\]\:bg-warning[data-active=true],.data-\[hover\=true\]\:bg-warning[data-hover=true],.data-\[in-range\=true\]\:bg-warning[data-in-range=true],.data-\[selected\=true\]\:bg-warning[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)))}.bg-warning-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-warning-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning-50)/var(--morui-warning-50-opacity,var(--tw-bg-opacity)))}.bg-warning\/20,.data-\[hover\=true\]\:bg-warning\/20[data-hover=true]{background-color:hsl(var(--morui-warning)/.2)}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-blue-gradient{background-image:linear-gradient(90deg,#4f60ff -7.22%,#8762f3 131.45%)}.bg-btn-bg{background-image:linear-gradient(269deg,#bffd3e -10.85%,#40f0c1 98.88%)}.bg-card-bg{background-image:linear-gradient(103deg,#47f1bb 6.5%,#81f77f 95.85%)}.bg-circle-bg{background-image:linear-gradient(270deg,#73f58f,#40f0c1)}.bg-gray-gradient{background-image:linear-gradient(139deg,#1f2822 .81%,#0e1411 97.62%)}.bg-green-gradient{background-image:linear-gradient(84deg,#40f0c1 10.08%,#bffd3e 161.38%)}.bg-green2-gradient{background-image:linear-gradient(85deg,#40f0c1 22.5%,#bffd3e 236.7%)}.bg-stripe-gradient{background-image:linear-gradient(45deg,#0000001a 25%,#0000 0,#0000 50%,#0000001a 0,#0000001a 75%,#0000 0,#0000)}.bg-\[length\:1\.25rem_1\.25rem\]{background-size:1.25rem 1.25rem}.stroke-current{stroke:currentColor}.stroke-default-300\/50{stroke:hsl(var(--morui-default-300)/.5)}.object-cover{object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.group.is-splitted .group-\[\.is-splitted\]\:px-4,.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-unit-0{padding-left:var(--morui-spacing-unit-0);padding-right:var(--morui-spacing-unit-0)}.px-unit-3{padding-left:var(--morui-spacing-unit-3);padding-right:var(--morui-spacing-unit-3)}.px-unit-4{padding-left:var(--morui-spacing-unit-4);padding-right:var(--morui-spacing-unit-4)}.px-unit-6{padding-left:var(--morui-spacing-unit-6);padding-right:var(--morui-spacing-unit-6)}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.data-\[has-title\=true\]\:pt-1[data-has-title=true],.py-1{padding-top:.25rem}.py-1{padding-bottom:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-8{padding-bottom:2rem}.pe-2{padding-inline-end:.5rem}.pl-0\.5{padding-left:.125rem}.pl-1{padding-left:.25rem}.pr-0\.5{padding-right:.125rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-6{padding-right:1.5rem}.group[data-has-helper=true] .group-data-\[has-helper\=true\]\:pt-2,.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-denim{font-family:Denim INK,ui-sans-serif}.text-\[0\.55rem\]{font-size:.55rem}.text-\[0\.5rem\]{font-size:.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-\[14px\]{font-size:14px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[48px\]{font-size:48px}.text-\[59px\]{font-size:59px}.text-large{font-size:var(--morui-font-size-large);line-height:var(--morui-line-height-large)}.text-medium{font-size:var(--morui-font-size-medium);line-height:var(--morui-line-height-medium)}.text-small{font-size:var(--morui-font-size-small);line-height:var(--morui-line-height-small)}.text-tiny{font-size:var(--morui-font-size-tiny);line-height:var(--morui-line-height-tiny)}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:var(--morui-font-weight-medium)}.font-normal{font-weight:400}.data-\[active\=true\]\:font-semibold[data-active=true],.font-semibold{font-weight:600}.leading-\[20px\]{line-height:20px}.leading-\[59px\]{line-height:59px}.leading-\[70px\]{line-height:70px}.\!text-danger{--tw-text-opacity:1!important;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))!important}.text-\[\#AEDFE0\]{--tw-text-opacity:1;color:rgb(174 223 224/var(--tw-text-opacity))}.text-\[\#FFFFFF0a\]{color:#ffffff0a}.text-\[\#FFFFFF66\]{color:#fff6}.text-\[\#FFF\],.text-\[\#fff\],.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-b-white{--tw-text-opacity:1;color:hsl(var(--morui-b-white)/var(--morui-b-white-opacity,var(--tw-text-opacity)))}.text-background{--tw-text-opacity:1;color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-text-opacity)))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.hover\:text-brand:hover,.text-brand{--tw-text-opacity:1;color:hsl(var(--morui-brand)/var(--morui-brand-opacity,var(--tw-text-opacity)))}.text-card-text{--tw-text-opacity:1;color:hsl(var(--morui-card-text)/var(--morui-card-text-opacity,var(--tw-text-opacity)))}.group:hover .group-hover\:text-current,.text-current{color:currentColor}.text-danger{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.text-danger-300{--tw-text-opacity:1;color:hsl(var(--morui-danger-300)/var(--morui-danger-300-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-danger-foreground[data-active=true],.data-\[hover\=true\]\:text-danger-foreground[data-hover=true],.data-\[selected\=true\]\:text-danger-foreground[data-selected=true],.text-danger-foreground{--tw-text-opacity:1;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)))}.text-danger\/80{color:hsl(var(--morui-danger)/.8)}.text-default-400{--tw-text-opacity:1;color:hsl(var(--morui-default-400)/var(--morui-default-400-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-default-500[data-hover=true],.text-default-500{--tw-text-opacity:1;color:hsl(var(--morui-default-500)/var(--morui-default-500-opacity,var(--tw-text-opacity)))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:text-default-600,.group[data-filled=true] .group-data-\[filled\=true\]\:text-default-600,.text-default-600{--tw-text-opacity:1;color:hsl(var(--morui-default-600)/var(--morui-default-600-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-default-foreground[data-active=true],.data-\[hover\=true\]\:text-default-foreground[data-hover=true],.data-\[selected\=true\]\:text-default-foreground[data-selected=true],.text-default-foreground{--tw-text-opacity:1;color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-text-opacity)))}.text-desc-1{--tw-text-opacity:1;color:hsl(var(--morui-desc-1)/var(--morui-desc-1-opacity,var(--tw-text-opacity)))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:text-foreground,.group[data-filled=true] .group-data-\[filled\=true\]\:text-foreground,.group[data-has-value=true] .group-data-\[has-value\=true\]\:text-foreground,.group[data-selected=true] .group-data-\[selected\=true\]\:text-foreground,.text-foreground{--tw-text-opacity:1;color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-foreground-400[data-hover=true],.text-foreground-400{--tw-text-opacity:1;color:hsl(var(--morui-foreground-400)/var(--morui-foreground-400-opacity,var(--tw-text-opacity)))}.text-foreground-500{--tw-text-opacity:1;color:hsl(var(--morui-foreground-500)/var(--morui-foreground-500-opacity,var(--tw-text-opacity)))}.text-foreground-600{--tw-text-opacity:1;color:hsl(var(--morui-foreground-600)/var(--morui-foreground-600-opacity,var(--tw-text-opacity)))}.text-foreground\/50{color:hsl(var(--morui-foreground)/.5)}.text-inherit{color:inherit}.text-primary{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-primary-foreground[data-active=true],.data-\[hover\=true\]\:text-primary-foreground[data-hover=true],.data-\[selected\=true\]\:text-primary-foreground[data-selected=true],.text-primary-foreground{--tw-text-opacity:1;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)))}.text-primary\/80{color:hsl(var(--morui-primary)/.8)}.text-secondary{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-secondary-foreground[data-active=true],.data-\[hover\=true\]\:text-secondary-foreground[data-hover=true],.data-\[selected\=true\]\:text-secondary-foreground[data-selected=true],.hover\:text-secondary-foreground:hover,.text-secondary-foreground{--tw-text-opacity:1;color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,var(--tw-text-opacity)))}.text-secondary\/80{color:hsl(var(--morui-secondary)/.8)}.data-\[hover\=true\]\:text-success[data-hover=true],.text-success{--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.text-success-600{--tw-text-opacity:1;color:hsl(var(--morui-success-600)/var(--morui-success-600-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-success-foreground[data-active=true],.data-\[hover\=true\]\:text-success-foreground[data-hover=true],.data-\[selected\=true\]\:text-success-foreground[data-selected=true],.text-success-foreground{--tw-text-opacity:1;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)))}.text-success\/80{color:hsl(var(--morui-success)/.8)}.data-\[hover\=true\]\:text-warning[data-hover=true],.text-warning{--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.text-warning-600{--tw-text-opacity:1;color:hsl(var(--morui-warning-600)/var(--morui-warning-600-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-warning-foreground[data-active=true],.data-\[hover\=true\]\:text-warning-foreground[data-hover=true],.data-\[selected\=true\]\:text-warning-foreground[data-selected=true],.text-warning-foreground{--tw-text-opacity:1;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)))}.text-warning\/80{color:hsl(var(--morui-warning)/.8)}.active\:underline:active,.focus\:underline:focus,.hover\:underline:hover,.underline{text-decoration-line:underline}.hover\:no-underline:hover,.no-underline{text-decoration-line:none}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.data-\[invisible\=true\]\:opacity-0[data-invisible=true],.group[data-copied=true] .group-data-\[copied\=true\]\:opacity-0,.group[data-selected=true] .group-data-\[selected\=true\]\:opacity-0,.opacity-0{opacity:0}.data-\[in-range\=true\]\:opacity-100[data-in-range=true],.data-\[loaded\=true\]\:opacity-100[data-loaded=true],.data-\[moving\]\:opacity-100[data-moving],.data-\[visible\=true\]\:opacity-100[data-visible=true],.footerLogoLink_DDai:hover,.group[data-copied=true] .group-data-\[copied\=true\]\:opacity-100,.group[data-hover=true] .group-data-\[hover\=true\]\:opacity-100,.group[data-loaded=true] .group-data-\[loaded\=true\]\:opacity-100,.group[data-selected=true] .group-data-\[selected\=true\]\:opacity-100,.hash-link:focus,.hover\:opacity-100:hover,.opacity-100,:hover>.hash-link{opacity:1}.data-\[disabled\=true\]\:opacity-30[data-disabled=true],.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-\[value\]{opacity:value}.active\:opacity-disabled:active,.data-\[hover-unselected\=true\]\:opacity-disabled[data-hover-unselected=true],.opacity-disabled{opacity:var(--morui-disabled-opacity)}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.after\:shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\]:after,.shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\]{--tw-shadow:0 1px 0px 0 #0000000d;--tw-shadow-colored:0 1px 0px 0 var(--tw-shadow-color)}.shadow-large{--tw-shadow:var(--morui-box-shadow-large);--tw-shadow-colored:var(--morui-box-shadow-large)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.group.is-splitted .group-\[\.is-splitted\]\:shadow-medium,.shadow-medium{--tw-shadow:var(--morui-box-shadow-medium);--tw-shadow-colored:var(--morui-box-shadow-medium)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.\[\&\>tr\]\:first\:shadow-small:first-child>tr,.shadow-small{--tw-shadow:var(--morui-box-shadow-small);--tw-shadow-colored:var(--morui-box-shadow-small)}.shadow-black\/5{--tw-shadow-color:#0000000d;--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-danger\/40[data-active=true],.shadow-danger\/40{--tw-shadow-color:hsl(var(--morui-danger)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-default\/50[data-active=true],.data-\[hover\=true\]\:shadow-default\/50[data-hover=true],.shadow-default\/50{--tw-shadow-color:hsl(var(--morui-default)/0.5);--tw-shadow:var(--tw-shadow-colored)}.shadow-foreground\/40{--tw-shadow-color:hsl(var(--morui-foreground)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-primary\/40[data-active=true],.shadow-primary\/40{--tw-shadow-color:hsl(var(--morui-primary)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-secondary\/40[data-active=true],.shadow-secondary\/40{--tw-shadow-color:hsl(var(--morui-secondary)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-success\/40[data-active=true],.shadow-success\/40{--tw-shadow-color:hsl(var(--morui-success)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-warning\/40[data-active=true],.shadow-warning\/40{--tw-shadow-color:hsl(var(--morui-warning)/0.4);--tw-shadow:var(--tw-shadow-colored)}.after\:shadow-small:after,.before\:shadow-small:before{--tw-shadow:var(--morui-box-shadow-small);--tw-shadow-colored:var(--morui-box-shadow-small)}.\!outline-none{outline:#0000 solid 2px!important;outline-offset:2px!important}.outline-none{outline:#0000 solid 2px;outline-offset:2px}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-2,.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-background{--tw-ring-color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-ring-opacity)))}.ring-danger{--tw-ring-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-ring-opacity)))}.ring-default{--tw-ring-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-ring-opacity)))}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-focus,.ring-focus{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--morui-focus)/var(--morui-focus-opacity,var(--tw-ring-opacity)))}.ring-primary{--tw-ring-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-ring-opacity)))}.ring-secondary{--tw-ring-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-ring-opacity)))}.ring-success{--tw-ring-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-ring-opacity)))}.ring-transparent{--tw-ring-color:#0000}.ring-warning{--tw-ring-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-ring-opacity)))}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-offset-2,.ring-offset-2{--tw-ring-offset-width:2px}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-offset-background,.ring-offset-background{--tw-ring-offset-color:hsl(var(--morui-background)/var(--morui-background-opacity,1))}.blur{--tw-blur:blur(8px)}.blur,.blur-lg,.filter,.saturate-150{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-lg{--tw-blur:blur(16px)}.saturate-150{--tw-saturate:saturate(1.5)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-lg,.backdrop-blur-md,.backdrop-blur-sm,.backdrop-blur-xl,.backdrop-filter,.backdrop-opacity-disabled,.backdrop-saturate-150{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-lg{--tw-backdrop-blur:blur(16px)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.backdrop-opacity-disabled{--tw-backdrop-opacity:opacity(var(--morui-disabled-opacity))}.backdrop-saturate-150{--tw-backdrop-saturate:saturate(1.5)}.\!transition-none{transition-property:none!important}.transition-\[transform\2c color\2c left\2c opacity\]{transition-property:transform,color,left,opacity}.transition-\[transform\2c color\2c left\2c opacity\],.transition-all,.transition-colors{transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-none{transition-property:none}.\!duration-100{transition-duration:.1s!important}.\!duration-150{transition-duration:.15s!important}.\!duration-200{transition-duration:.2s!important}.\!duration-300{transition-duration:.3s!important}.\!duration-500{transition-duration:.5s!important}.duration-150{transition-duration:.15s}.\!ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.\!ease-soft-spring{transition-timing-function:cubic-bezier(.155,1.105,.295,1.12)!important}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.data-\[moving\=true\]\:transition-transform[data-moving=true],.transition,.transition-all,.transition-background,.transition-colors-opacity,.transition-height,.transition-left,.transition-opacity,.transition-shadow,.transition-size,.transition-transform,.transition-transform-background,.transition-transform-colors,.transition-transform-colors-opacity,.transition-transform-opacity,.transition-width{transition-duration:.25s;transition-timing-function:ease}.will-change-auto{will-change:auto}.will-change-transform{will-change:transform}.light,:root,[data-theme=light]{--morui-title-1:72 3% 39%;--morui-title-2:0 0% 35%;--morui-reminder-4:218 11% 81%;--morui-bg:0 0% 100%;--morui-bg-assist:216 22% 95%;--morui-divider:220 13% 95%;--morui-tag:166 65% 91%;--morui-tag-bg:220 23% 97%;--morui-tag-hover:220 17% 14%;--morui-frontend:0 0% 100%;--morui-card:0 0% 96%;--morui-b-black:0 0% 100%;--morui-b-white:0 0% 0%;--morui-line:0 0% 92%;--morui-warning-light:25 89% 50%;--morui-warning-50:55 92% 95%;--morui-warning-100:37 91% 91%;--morui-warning-200:37 91% 82%;--morui-warning-300:37 91% 73%;--morui-warning-400:37 91% 64%;--morui-warning-500:37 91% 55%;--morui-warning-600:37 74% 44%;--morui-warning-700:37 74% 33%;--morui-warning-800:37 75% 22%;--morui-warning-900:37 75% 11%;--morui-btn-bg-disable:222 13% 84%;--morui-btn-text-disable:200 43% 99%;--morui-icon-fill:212 11% 47%;--morui-icon-bg:210 16% 13%;--morui-background:0 0% 100%;--morui-foreground-50:0 0% 98%;--morui-foreground-100:240 5% 96%;--morui-foreground-200:240 6% 90%;--morui-foreground-300:216 22% 95%;--morui-foreground-400:240 5% 65%;--morui-foreground-500:240 4% 46%;--morui-foreground-600:0 0% 40%;--morui-foreground-700:217 20% 17%;--morui-foreground-800:240 4% 16%;--morui-foreground-900:240 6% 10%;--morui-foreground:202 24% 9%;--morui-content1:0 0% 100%;--morui-content1-foreground:202 24% 9%;--morui-content2:240 5% 96%;--morui-content2-foreground:240 4% 16%;--morui-content3:240 6% 90%;--morui-content3-foreground:217 20% 17%;--morui-content4:216 22% 95%;--morui-content4-foreground:0 0% 40%;--morui-default-50:0 0% 98%;--morui-default-100:240 5% 96%;--morui-default-200:240 6% 90%;--morui-default-300:216 22% 95%;--morui-default-400:240 5% 65%;--morui-default-500:0 0% 10%;--morui-default-600:0 0% 60%;--morui-default-700:217 20% 17%;--morui-default-800:240 4% 16%;--morui-default-900:240 6% 10%;--morui-default-foreground:0 0% 0%;--morui-primary-50:213 92% 95%;--morui-primary-100:212 92% 90%;--morui-primary-200:212 92% 79%;--morui-primary-300:212 92% 69%;--morui-primary-400:212 92% 58%;--morui-primary-500:216 100% 50%;--morui-primary-600:223 99% 47%;--morui-primary-700:212 100% 29%;--morui-primary-800:212 100% 19%;--morui-primary-900:212 100% 10%;--morui-primary-foreground:0 0% 100%;--morui-secondary-50:270 62% 95%;--morui-secondary-100:270 59% 89%;--morui-secondary-200:270 59% 79%;--morui-secondary-300:270 59% 68%;--morui-secondary-400:270 59% 58%;--morui-secondary-500:270 67% 47%;--morui-secondary-600:270 67% 38%;--morui-secondary-700:270 67% 28%;--morui-secondary-800:270 67% 19%;--morui-secondary-900:270 67% 9%;--morui-secondary:270 67% 47%;--morui-success-50:147 64% 95%;--morui-success-100:146 61% 89%;--morui-success-200:146 62% 77%;--morui-success-300:146 63% 66%;--morui-success-400:146 62% 55%;--morui-success-500:158 58% 50%;--morui-success-600:146 80% 35%;--morui-success-700:146 79% 26%;--morui-success-800:146 80% 17%;--morui-success-900:146 78% 9%;--morui-danger-50:339 92% 95%;--morui-danger-100:340 92% 90%;--morui-danger-200:339 90% 80%;--morui-danger-300:339 91% 71%;--morui-danger-400:339 90% 61%;--morui-danger-500:338 98% 54%;--morui-danger-600:339 87% 41%;--morui-danger-700:339 86% 31%;--morui-danger-800:339 87% 20%;--morui-danger-900:340 85% 10%;--morui-title:0 0% 100%;--morui-red:349 90% 60%;--morui-card-background:108 24% 96%;--morui-card-text:77 11% 12%;--morui-card-border:113 100% 26%;--morui-red-aid:350 90% 92%;--morui-green-aid:166 65% 91%;--morui-yellow-aid:36 91% 91%;--morui-purple-aid:248 100% 94%;--morui-title-3:0 0% 10%;--morui-desc-2:0 0% 85%;--morui-border-card:0 0% 100%;--morui-border-0:0 0% 60%;--morui-border-1:0 0% 75%;--morui-border-2:0 0% 92%;--morui-border-3:0 0% 35%;--morui-bg-img:0 0% 75%;--morui-box-shadow-small:0px 3px 6px 0px #0003;--morui-box-shadow-medium:0px 0px 15px 0px #00000008,0px 2px 30px 0px #00000014,0px 0px 1px 0px #0000004d;--morui-box-shadow-large:0px 0px 30px 0px #0000000a,0px 30px 60px 0px #0000001f,0px 0px 1px 0px #0000004d;--morui-hover-opacity:.8;color-scheme:light}.dark,[data-theme=dark]{--morui-title-1:90 1% 74%;--morui-title-2:0 0% 80%;--morui-reminder-4:216 15% 36%;--morui-bg:0 0% 0%;--morui-bg-assist:0 0% 20%;--morui-divider:0 0% 40%;--morui-tag:145 42% 10%;--morui-tag-bg:219 20% 19%;--morui-tag-hover:220 23% 97%;--morui-frontend:220 18% 10%;--morui-card:0 0% 10%;--morui-b-black:0 0% 0%;--morui-b-white:0 0% 100%;--morui-line:0 0% 20%;--morui-warning-light:25 89% 62%;--morui-warning-50:37 75% 11%;--morui-warning-100:37 75% 22%;--morui-warning-200:37 74% 33%;--morui-warning-300:37 74% 44%;--morui-warning-400:37 91% 55%;--morui-warning-500:37 91% 64%;--morui-warning-600:37 91% 73%;--morui-warning-700:37 91% 82%;--morui-warning-800:37 91% 91%;--morui-warning-900:55 92% 95%;--morui-btn-bg-disable:215 34% 23%;--morui-btn-text-disable:212 9% 62%;--morui-icon-fill:220 10% 69%;--morui-icon-bg:200 43% 99%;--morui-background:0 0% 0%;--morui-foreground-50:240 6% 10%;--morui-foreground-100:240 4% 16%;--morui-foreground-200:217 20% 17%;--morui-foreground-300:0 0% 40%;--morui-foreground-400:240 4% 46%;--morui-foreground-500:240 5% 65%;--morui-foreground-600:216 22% 95%;--morui-foreground-700:240 6% 90%;--morui-foreground-800:240 5% 96%;--morui-foreground-900:0 0% 98%;--morui-foreground:210 6% 93%;--morui-content1:240 6% 10%;--morui-content1-foreground:0 0% 98%;--morui-content2:240 4% 16%;--morui-content2-foreground:240 5% 96%;--morui-content3:217 20% 17%;--morui-content3-foreground:240 6% 90%;--morui-content4:0 0% 40%;--morui-content4-foreground:216 22% 95%;--morui-default-50:240 6% 10%;--morui-default-100:240 4% 16%;--morui-default-200:217 20% 17%;--morui-default-300:0 0% 40%;--morui-default-400:240 4% 46%;--morui-default-500:0 0% 80%;--morui-default-600:0 0% 80%;--morui-default-700:240 6% 90%;--morui-default-800:240 5% 96%;--morui-default-900:0 0% 98%;--morui-default-foreground:0 0% 100%;--morui-primary-50:212 100% 10%;--morui-primary-100:212 100% 19%;--morui-primary-200:212 100% 29%;--morui-primary-300:223 99% 47%;--morui-primary-400:216 100% 50%;--morui-primary-500:212 92% 58%;--morui-primary-600:212 92% 69%;--morui-primary-700:212 92% 79%;--morui-primary-800:212 92% 90%;--morui-primary-900:213 92% 95%;--morui-primary-foreground:0 0% 0%;--morui-secondary-50:270 67% 9%;--morui-secondary-100:270 67% 19%;--morui-secondary-200:270 67% 28%;--morui-secondary-300:270 67% 38%;--morui-secondary-400:270 67% 47%;--morui-secondary-500:270 59% 58%;--morui-secondary-600:270 59% 68%;--morui-secondary-700:270 59% 79%;--morui-secondary-800:270 59% 89%;--morui-secondary-900:270 62% 95%;--morui-secondary:270 59% 58%;--morui-success-50:146 78% 9%;--morui-success-100:146 80% 17%;--morui-success-200:146 79% 26%;--morui-success-300:146 80% 35%;--morui-success-400:158 58% 50%;--morui-success-500:146 62% 55%;--morui-success-600:146 63% 66%;--morui-success-700:146 62% 77%;--morui-success-800:146 61% 89%;--morui-success-900:147 64% 95%;--morui-danger-50:340 85% 10%;--morui-danger-100:339 87% 20%;--morui-danger-200:339 86% 31%;--morui-danger-300:339 87% 41%;--morui-danger-400:338 98% 54%;--morui-danger-500:339 90% 61%;--morui-danger-600:339 91% 71%;--morui-danger-700:339 90% 80%;--morui-danger-800:340 92% 90%;--morui-danger-900:339 92% 95%;--morui-title:0 0% 0%;--morui-red:349 90% 56%;--morui-card-background:77 11% 12%;--morui-card-text:0 0% 100%;--morui-card-border:0 0% 100%;--morui-red-aid:349 59% 15%;--morui-green-aid:141 67% 14%;--morui-yellow-aid:36 79% 13%;--morui-purple-aid:247 42% 16%;--morui-title-3:0 0% 80%;--morui-desc-2:0 0% 30%;--morui-border-card:0 0% 60%;--morui-border-0:0 0% 20%;--morui-border-1:0 0% 40%;--morui-border-2:0 0% 20%;--morui-border-3:0 0% 80%;--morui-bg-img:0 0% 20%;--morui-nav:0 0% 82%;--morui-nav-hover:0 0% 100%;--morui-sub-nav:160 23% 97%;--morui-sub-nav-hover:0 0% 0%;--morui-sub-nav-bg:167 18% 10%;--morui-sub-nav-item-bg:164 85% 60%;--morui-desc-4:0 0% 60%;--morui-desc-3:0 0% 80%;--morui-content:0 0% 82%;--morui-icon-bg-for-green:0 0% 21%;--morui-text-color-for-green:0 0% 0%;--morui-base-color:163 100% 62%;--morui-box-shadow-small:0px 0px 5px 0px #0000000d,0px 2px 10px 0px #0003,inset 0px 0px 1px 0px #ffffff26;--morui-box-shadow-medium:0px 0px 15px 0px #0000000f,0px 2px 30px 0px #00000038,inset 0px 0px 1px 0px #ffffff26;--morui-box-shadow-large:0px 0px 30px 0px #00000012,0px 30px 60px 0px #00000042,inset 0px 0px 1px 0px #ffffff26;--morui-hover-opacity:.9;color-scheme:dark}.leading-inherit{line-height:inherit}.bg-img-inherit{background-image:inherit}.bg-clip-inherit{background-clip:inherit}.text-fill-inherit{-webkit-text-fill-color:inherit}.transition-all{transition-property:all}.transition-background{transition-property:background}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter}.data-\[hover\=true\]\:transition-colors[data-hover=true],.data-\[sortable\=true\]\:transition-colors[data-sortable=true],.transition-colors{transition-duration:.25s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:ease}.transition-opacity{transition-property:opacity}.transition-colors-opacity{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity}.transition-width{transition-property:width}.transition-height{transition-property:height}.transition-size{transition-property:width,height}.transition-left{transition-property:left}.transition-shadow{transition-property:box-shadow}.data-\[moving\=true\]\:transition-transform[data-moving=true],.transition-transform{transition-property:transform}.transition-transform-opacity{transition-property:transform,opacity}.transition-transform-background{transition-property:transform,background}.transition-transform-colors{transition-property:transform,color,background,background-color,border-color,text-decoration-color,fill,stroke}.transition-transform-colors-opacity{transition-property:transform,color,background,background-color,border-color,text-decoration-color,fill,stroke,opacity}.data-\[hide-scroll\=true\]\:scrollbar-hide[data-hide-scroll=true],.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-default{-ms-overflow-style:auto;scrollbar-width:auto}.scrollbar-default::-webkit-scrollbar{display:block}.\[--scale-enter\:100\%\]{--scale-enter:100%}.\[--scale-exit\:100\%\]{--scale-exit:100%}.\[--slide-enter\:0px\]{--slide-enter:0px}.\[--slide-exit\:80px\]{--slide-exit:80px}html body{font-family:InterDisplay\,Inter Variable}[data-theme=light]{--ifm-heading-color:#21231c;--ifm-color-gray-700:#21231c;--ifm-color-emphasis-600:#fff;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--ifm-footer-background-color:#fff;--ifm-color-emphasis-200:"#000000",--ifm-menu-color:"#21231C",--ifm-container-width-xl:1200px;--ifm-bg-color:#fff;--ifm-feature-h3-color:#1a1a1a;--ifm-feature-p-color:#595959;--border-hover-shadow:#0016091a}[data-theme=light] .navbar-sidebar__brand{background-color:#fff}[data-theme=dark]{--ifm-heading-color:#fff;--ifm-color-gray-300:#fff;--ifm-color-emphasis-600:#000;--docusaurus-highlighted-code-line-bg:#0000004d;--ifm-footer-background-color:#0a080f;--ifm-color-emphasis-200:"#fff",--ifm-menu-color:"#FFF",--ifm-container-width-xl:1200px;--ifm-bg-color:#000;--ifm-feature-h3-color:#f7f7f7;--ifm-feature-p-color:#ccc;--border-hover-shadow:#9bffc54d}.menu__link--active:not(.menu__link--sublist),.menu__link:hover,[data-theme=dark] .menu__list-item--collapsed .menu__link:hover,[data-theme=light] .menu__list-item--collapsed .menu__link:hover{color:#fff}.navbar.navbar--fixed-top{border-bottom:1px solid #dededd}[data-theme=dark] .navbar.navbar--fixed-top{border-bottom:1px solid #21231c}.menu__link.menu__link--sublist.menu__link--sublist-caret{font-size:16px;font-weight:600;margin-bottom:4px;margin-top:4px;padding-bottom:6px;padding-top:6px}.theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link,.theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link,.theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link{display:block;font-size:16px;font-weight:600;margin-bottom:4px;margin-top:4px;padding-bottom:6px;padding-top:6px}.theme-doc-sidebar-item-link-level-1.menu__list-item .menu__link{display:block;font-size:20px;font-weight:600;margin-bottom:4px;margin-top:4px;padding-bottom:6px;padding-top:6px}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.75}.footer__link-item,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link.menu__link--active,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link:hover,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible .menu__link:hover,[data-theme=dark] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link.menu__link--active,[data-theme=dark] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link:hover,[data-theme=dark] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link.menu__link--active,[data-theme=dark] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link:hover,[data-theme=dark] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link.menu__link--active,[data-theme=dark] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link.menu__link--active,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link.menu__link--active,[data-theme=light] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link.menu__link--active,[data-theme=light] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link.menu__link--active,[data-theme=light] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link:hover{color:#fff}[data-theme=dark] .menu__link.menu__link--sublist.menu__link--sublist-caret,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible,[data-theme=dark] .theme-doc-sidebar-item-link-level-2.menu__list-item,[data-theme=dark] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link,[data-theme=dark] .theme-doc-sidebar-item-link-level-3.menu__list-item,[data-theme=dark] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link,[data-theme=dark] .theme-doc-sidebar-item-link-level-4.menu__list-item,[data-theme=dark] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link{color:#bcbdbb}[data-theme=light] .menu__link.menu__link--sublist.menu__link--sublist-caret,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible,[data-theme=light] .theme-doc-sidebar-item-link-level-2.menu__list-item,[data-theme=light] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link,[data-theme=light] .theme-doc-sidebar-item-link-level-3.menu__list-item,[data-theme=light] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link,[data-theme=light] .theme-doc-sidebar-item-link-level-4.menu__list-item,[data-theme=light] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link{color:#646560}.footer__col:first-child,.footer__col:nth-child(2){flex:3}.footer__bottom{margin-top:48px}[data-theme=light] #__docusaurus{background-color:var(--ifm-bg-color)}[data-theme=light] .navbar{background:#fff;box-shadow:none}[data-theme=light] .footer{background-color:#fff!important;box-shadow:0 -10px 10px 0 #00000005!important}[data-theme=light] .theme-doc-sidebar-container{flex-shrink:0;gap:10px}[data-theme=light] .docSidebarContainer_node_modules-\@docusaurus-theme-classic-lib-theme-DocPage-Layout-Sidebar-styles-module,[data-theme=light] .theme-doc-sidebar-container{background-color:#fff!important;border-right:none!important}[data-theme=dark] .darkToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module,[data-theme=light] .lightToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module{cursor:pointer!important;display:none!important}[data-theme=dark] .lightToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module,[data-theme=light] .darkToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module{cursor:pointer!important;display:block!important}[data-theme=light] .clean-btn.navbar-sidebar__close svg,[data-theme=light] .darkToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module svg{color:#000!important}[data-theme=dark] #__docusaurus{background-color:#000}[data-theme=dark] .navbar{background-color:#0a080fe6!important;box-shadow:none}.hero-banner,[data-theme=dark] .footer{background-color:#0a080f}[data-theme=dark] .theme-doc-sidebar-container{background-color:#0a080f;border-right:none!important}.menu__link .menu__link--sublist.menu__link--sublist-caret,.theme-doc-sidebar-item-link-level-2{font-size:16px;font-weight:600}.menu__caret:before,.menu__link--sublist-caret:after{height:13px;width:13px}[data-theme=dark] button.clean-btn svg:first-child,[data-theme=light] button.clean-btn[aria-live=polite] svg:nth-child(2){display:block!important}[data-theme=dark] button.clean-btn svg:nth-child(2),[data-theme=light] button.clean-btn[aria-live=polite] svg:first-child{display:none!important}.navbar__logo img{height:32px}[data-theme=dark] .morph-logo,[data-theme=light] .morph-logo{background-image:url(/assets/images/LogoMorphWhite-summary-dc9797d7eb85ed22d18a1cbda84342e5.svg);background-size:160px 25px;margin-left:-24px}.hero-banner{align-items:center;justify-content:center;margin:0;overflow:hidden;padding:0;position:relative;text-align:center}.header-bg{background-image:url(/assets/images/bg-5badadc4ca0a26b003becdf097ddbf12.svg);background-position:50%;background-repeat:no-repeat;background-size:auto 100%;height:110px;margin-top:-10px;padding-top:0}.features{padding-bottom:50px}.feature-a{border:1px solid rgba(33,35,30,.102);border-radius:0;color:var(--ifm-heading-color)!important;display:flex;text-decoration:none!important}.feature-a:hover{background:var(--ifm-footer-background-color);border:1px solid var(--ifm-color-primary);border-radius:0;box-shadow:0 0 40px 0 var(--border-hover-shadow)}.after\:shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\]:after,.after\:shadow-small:after,.before\:shadow-small:before,.data-\[active\=true\]\:shadow-md[data-active=true],.data-\[hover\=true\]\:shadow-lg[data-hover=true],.group.is-splitted .group-\[\.is-splitted\]\:shadow-medium{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-theme=dark] .feature-a{border:1px solid #373933}.feature-h3{color:var(--ifm-feature-h3-color);font-size:32px;font-style:normal;font-weight:800;line-height:120%}.feature-p{color:var(--ifm-feature-p-color);font-size:20px;font-style:normal;font-weight:400;line-height:24px;margin-bottom:0;max-width:342px}.homepage-resource{color:--ifm-heading-color;text-align:center}.green-bg{background:linear-gradient(180deg,#a3fe76 -24.11%,#f2f7f2)}.yellow-bg{background:linear-gradient(180deg,#ffeb69 -24.11%,#f2f7f2)}.pink-bg{background:linear-gradient(180deg,#ffd6ef -24.11%,#f2f7f2)}.purple-bg{background:linear-gradient(180deg,#cdc5ff -24.11%,#f3f7f2)}.footer-bg{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTM2MCIgaGVpZ2h0PSI3MjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggb3BhY2l0eT0iLjEiIGQ9Ik0uNSA3MTkuNWgyODIuNTU2di03NS40ODNjMC0xLjExNSAxLjU5MS0xLjMxMiAxLjg2My0uMjMybDE1Ljk3MSA2My4zMjFoNjkwLjAyNXYtODAuNzY1YS45NDYuOTQ2IDAgMCAxIDEuMTIyLS45M2wzNjcuNDYzIDY5LjU1M1YuNUg5OTEuMjczdjgzLjAwNmEuOTQ3Ljk0NyAwIDAgMS0uODU4Ljk0Mkw0OTIuODkgMTMxLjI4Nmw0LjkzNSAxMDcuNTU1YS45NDUuOTQ1IDAgMCAxLS41MjYuODkxTC41IDQ4NS4zMDNWNzE5LjVaIiBzdHJva2U9IiNBRURGRTAiLz48L3N2Zz4=);background-position:5%;background-repeat:no-repeat;background-size:90% 90%}.placeholder\:text-danger::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.placeholder\:text-foreground-500::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-foreground-500)/var(--morui-foreground-500-opacity,var(--tw-text-opacity)))}.placeholder\:text-primary::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.placeholder\:text-secondary::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.placeholder\:text-success-600::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-success-600)/var(--morui-success-600-opacity,var(--tw-text-opacity)))}.placeholder\:text-warning-600::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-warning-600)/var(--morui-warning-600-opacity,var(--tw-text-opacity)))}.after\:absolute:after,.before\:absolute:before{content:var(--tw-content);position:absolute}.after\:inset-0:after,.before\:inset-0:before{content:var(--tw-content);inset:0}.before\:z-0:before{content:var(--tw-content);z-index:0}.before\:z-\[-1\]:before{content:var(--tw-content);z-index:-1}.before\:box-border:before{box-sizing:border-box;content:var(--tw-content)}.after\:block:after,.before\:block:before,.data-\[arrow\=true\]\:before\:block[data-arrow=true]:before{content:var(--tw-content);display:block}.before\:hidden:before{content:var(--tw-content);display:none}.before\:h-0\.5:before{content:var(--tw-content);height:.125rem}.before\:h-11:before{content:var(--tw-content);height:2.75rem}.before\:h-2\.5:before{content:var(--tw-content);height:.625rem}.after\:h-px:after,.before\:h-px:before{content:var(--tw-content);height:1px}.after\:w-0:after,.before\:w-0:before{content:var(--tw-content);width:0}.before\:w-11:before{content:var(--tw-content);width:2.75rem}.before\:w-2\.5:before{content:var(--tw-content);width:.625rem}.after\:w-6:after,.before\:w-6:before{content:var(--tw-content);width:1.5rem}.before\:-translate-x-full:before{--tw-translate-x:-100%}.after\:-translate-x-1\/2:after,.after\:rotate-0:after,.after\:scale-50:after,.after\:translate-y-1:after,.before\:-translate-x-full:before,.before\:-translate-y-1:before,.before\:rotate-0:before,.before\:rotate-45:before,.data-\[dragging\=true\]\:after\:scale-100[data-dragging=true]:after,.data-\[dragging\=true\]\:after\:scale-80[data-dragging=true]:after,.data-\[placement\=bottom\]\:before\:-translate-x-1\/2[data-placement=bottom]:before,.data-\[placement\=left\]\:before\:-translate-y-1\/2[data-placement=left]:before,.data-\[placement\=right\]\:before\:-translate-y-1\/2[data-placement=right]:before,.data-\[placement\=top\]\:before\:-translate-x-1\/2[data-placement=top]:before,.group[data-open=true] .group-data-\[open\=true\]\:after\:-rotate-45:after,.group[data-open=true] .group-data-\[open\=true\]\:after\:translate-y-0:after,.group[data-open=true] .group-data-\[open\=true\]\:before\:rotate-45:before,.group[data-open=true] .group-data-\[open\=true\]\:before\:translate-y-px:before{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:-translate-y-1:before{--tw-translate-y:-0.25rem}.before\:rotate-45:before,.group[data-open=true] .group-data-\[open\=true\]\:before\:rotate-45:before{--tw-rotate:45deg}@keyframes d{to{content:var(--tw-content);transform:translateX(100%)}}.before\:animate-\[shimmer_2s_infinite\]:before{animation:2s infinite d;content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.5\)\]:after,.before\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.5\)\]:before{border-radius:calc(var(--morui-radius-medium)*.5);content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.6\)\]:after,.before\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.6\)\]:before{border-radius:calc(var(--morui-radius-medium)*.6);content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.7\)\]:after,.before\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.7\)\]:before{border-radius:calc(var(--morui-radius-medium)*.7);content:var(--tw-content)}.after\:rounded-full:after,.before\:rounded-full:before{border-radius:9999px;content:var(--tw-content)}.after\:rounded-none:after,.before\:rounded-none:before,.group[data-middle=true] .group-data-\[middle\=true\]\:before\:rounded-none:before{border-radius:0;content:var(--tw-content)}.before\:rounded-sm:before{border-radius:.125rem;content:var(--tw-content)}.before\:border-2:before{border-width:2px;content:var(--tw-content)}.before\:border-t:before{border-top-width:1px;content:var(--tw-content)}.before\:border-solid:before{border-style:solid;content:var(--tw-content)}.before\:border-content4\/30:before{border-color:hsl(var(--morui-content4)/.3);content:var(--tw-content)}.before\:border-danger:before{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)));content:var(--tw-content)}.before\:border-default:before{--tw-border-opacity:1;border-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-border-opacity)));content:var(--tw-content)}.before\:bg-content1:before{--tw-bg-opacity:1;background-color:hsl(var(--morui-content1)/var(--morui-content1-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-current:after,.before\:bg-current:before{background-color:currentColor;content:var(--tw-content)}.after\:bg-danger:after,.before\:bg-danger:before,.data-\[selected\=true\]\:after\:bg-danger[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-danger\/20:before,.hover\:after\:bg-danger\/20:hover:after{background-color:hsl(var(--morui-danger)/.2);content:var(--tw-content)}.before\:bg-default\/40:before{background-color:hsl(var(--morui-default)/.4);content:var(--tw-content)}.before\:bg-foreground:before,.data-\[selected\=true\]\:after\:bg-foreground[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-primary:after,.before\:bg-primary:before,.data-\[selected\=true\]\:after\:bg-primary[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-primary\/20:before,.hover\:after\:bg-primary\/20:hover:after{background-color:hsl(var(--morui-primary)/.2);content:var(--tw-content)}.after\:bg-secondary:after,.before\:bg-secondary:before,.data-\[selected\=true\]\:after\:bg-secondary[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-secondary\/20:before,.hover\:after\:bg-secondary\/20:hover:after{background-color:hsl(var(--morui-secondary)/.2);content:var(--tw-content)}.after\:bg-success:after,.before\:bg-success:before,.data-\[selected\=true\]\:after\:bg-success[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-success\/20:before,.hover\:after\:bg-success\/20:hover:after{background-color:hsl(var(--morui-success)/.2);content:var(--tw-content)}.after\:bg-warning:after,.before\:bg-warning:before,.data-\[selected\=true\]\:after\:bg-warning[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-warning\/20:before,.hover\:after\:bg-warning\/20:hover:after{background-color:hsl(var(--morui-warning)/.2);content:var(--tw-content)}.before\:bg-gradient-to-r:before{background-image:linear-gradient(to right,var(--tw-gradient-stops));content:var(--tw-content)}.before\:from-transparent:before{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);content:var(--tw-content)}.before\:via-content4:before{--tw-gradient-to:hsl(var(--morui-content4)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsl(var(--morui-content4)/var(--morui-content4-opacity,1)) var(--tw-gradient-via-position),var(--tw-gradient-to);content:var(--tw-content)}.before\:to-transparent:before{--tw-gradient-to:#0000 var(--tw-gradient-to-position);content:var(--tw-content)}.after\:opacity-0:after,.before\:opacity-0:before,.data-\[loaded\=true\]\:after\:opacity-0[data-loaded=true]:after,.data-\[loaded\=true\]\:before\:opacity-0[data-loaded=true]:before{content:var(--tw-content);opacity:0}.after\:opacity-100:after,.before\:opacity-100:before,.data-\[selected\=true\]\:after\:opacity-100[data-selected=true]:after,.data-\[selected\=true\]\:before\:opacity-100[data-selected=true]:before,.group[data-odd=true] .group-data-\[odd\=true\]\:before\:opacity-100:before,.group[data-selected=true] .group-data-\[selected\=true\]\:after\:opacity-100:after,.hover\:after\:opacity-100:hover:after{content:var(--tw-content);opacity:1}.before\:shadow-small:before{content:var(--tw-content)}.after\:transition-none:after,.before\:transition-none:before{content:var(--tw-content);transition-property:none}.before\:\!duration-300:before{content:var(--tw-content);transition-duration:.3s!important}.after\:duration-150:after,.before\:duration-150:before{content:var(--tw-content);transition-duration:.15s}.after\:transition-transform:after,.after\:transition-width:after,.before\:transition-colors:before,.before\:transition-opacity:before,.before\:transition-transform:before,.before\:transition-width:before{transition-duration:.25s;transition-timing-function:ease;content:var(--tw-content)}.after\:content-\[\'\'\]:after,.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.before\:transition-colors:before{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke}.before\:transition-opacity:before{transition-property:opacity}.after\:transition-width:after,.before\:transition-width:before{transition-property:width}.after\:transition-transform:after,.before\:transition-transform:before{transition-property:transform}.after\:-bottom-1:after{bottom:-.25rem;content:var(--tw-content)}.after\:-bottom-\[2px\]:after{bottom:-2px;content:var(--tw-content)}.after\:bottom-0:after{bottom:0;content:var(--tw-content)}.after\:left-0:after{content:var(--tw-content);left:0}.after\:left-1\/2:after,.data-\[placement\=bottom\]\:before\:left-1\/2[data-placement=bottom]:before,.data-\[placement\=top\]\:before\:left-1\/2[data-placement=top]:before{content:var(--tw-content);left:50%}.after\:right-0:after{content:var(--tw-content);right:0}.after\:-z-10:after{content:var(--tw-content);z-index:-10}.after\:ml-0\.5:after{content:var(--tw-content);margin-left:.125rem}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:h-\[2px\]:after{content:var(--tw-content);height:2px}.after\:h-divider:after{content:var(--tw-content);height:var(--morui-divider-weight)}.after\:h-full:after{content:var(--tw-content);height:100%}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:w-\[80\%\]:after{content:var(--tw-content);width:80%}.after\:w-full:after,.data-\[focus\=true\]\:after\:w-full[data-focus=true]:after,.data-\[open\=true\]\:after\:w-full[data-open=true]:after,.group[data-focus=true] .group-data-\[focus\=true\]\:after\:w-full:after,.group[data-selected=true] .group-data-\[selected\=true\]\:before\:w-full:before{content:var(--tw-content);width:100%}.after\:origin-center:after{content:var(--tw-content);transform-origin:center}.after\:rounded-\[calc\(theme\(borderRadius\.large\)\/2\)\]:after{border-radius:calc(var(--morui-radius-large)/2);content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.medium\)\/3\)\]:after{border-radius:calc(var(--morui-radius-medium)/3);content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.small\)\/3\)\]:after{border-radius:calc(var(--morui-radius-small)/3);content:var(--tw-content)}.after\:rounded-xl:after{border-radius:.75rem;content:var(--tw-content)}.first\:before\:rounded-l-lg:first-child:before,.first\:rounded-l-lg:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.after\:bg-background:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-content3:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-content3)/var(--morui-content3-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-default:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-default-foreground:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-divider:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-divider)/var(--morui-divider-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:text-danger:after{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-danger-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-default-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-primary-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-secondary-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-success-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-warning-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\]:after,.after\:shadow-small:after{content:var(--tw-content)}.after\:\!duration-200:after{content:var(--tw-content);transition-duration:.2s!important}.after\:\!ease-linear:after{content:var(--tw-content);transition-timing-function:linear!important}.after\:transition-all:after,.after\:transition-background:after,.after\:transition-transform-opacity:after{transition-duration:.25s;transition-timing-function:ease;content:var(--tw-content)}.after\:content-\[\'\*\'\]:after{--tw-content:"*";content:var(--tw-content)}.after\:transition-all:after{transition-property:all}.after\:transition-background:after{transition-property:background}.after\:transition-transform-opacity:after{transition-property:transform,opacity}.first\:rounded-s-full:first-child{border-end-start-radius:9999px;border-start-start-radius:9999px}.first\:rounded-s-large:first-child{border-end-start-radius:var(--morui-radius-large);border-start-start-radius:var(--morui-radius-large)}.first\:rounded-s-medium:first-child{border-end-start-radius:var(--morui-radius-medium);border-start-start-radius:var(--morui-radius-medium)}.first\:rounded-s-none:first-child{border-end-start-radius:0;border-start-start-radius:0}.first\:rounded-s-small:first-child{border-end-start-radius:var(--morui-radius-small);border-start-start-radius:var(--morui-radius-small)}.first\:before\:rounded-l-lg:first-child:before{content:var(--tw-content)}.last\:rounded-e-full:last-child{border-end-end-radius:9999px;border-start-end-radius:9999px}.last\:rounded-e-large:last-child{border-end-end-radius:var(--morui-radius-large);border-start-end-radius:var(--morui-radius-large)}.last\:rounded-e-medium:last-child{border-end-end-radius:var(--morui-radius-medium);border-start-end-radius:var(--morui-radius-medium)}.last\:rounded-e-none:last-child{border-end-end-radius:0;border-start-end-radius:0}.last\:rounded-e-small:last-child{border-end-end-radius:var(--morui-radius-small);border-start-end-radius:var(--morui-radius-small)}.last\:before\:rounded-r-lg:last-child:before,.last\:rounded-r-lg:last-child{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.last\:before\:rounded-r-lg:last-child:before{content:var(--tw-content)}.focus-within\:border-danger:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.focus-within\:border-primary:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.focus-within\:border-secondary:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.focus-within\:border-success:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.focus-within\:border-warning:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-\[\#14A800\]:hover{--tw-border-opacity:1;border-color:rgb(20 168 0/var(--tw-border-opacity))}.hover\:\!bg-danger:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-default:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-foreground:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-primary:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-secondary:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-success:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-warning:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)))!important}.hover\:\!text-danger-foreground:hover{--tw-text-opacity:1!important;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)))!important}.hover\:\!text-primary-foreground:hover{--tw-text-opacity:1!important;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)))!important}.hover\:\!text-success-foreground:hover{--tw-text-opacity:1!important;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)))!important}.hover\:\!text-warning-foreground:hover{--tw-text-opacity:1!important;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)))!important}.hover\:\!opacity-100:hover{opacity:1!important}.hover\:after\:bg-foreground\/10:hover:after{background-color:hsl(var(--morui-foreground)/.1);content:var(--tw-content)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:outline-none:focus-visible{outline:#0000 solid 2px;outline-offset:2px}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-focus:focus-visible{outline-color:hsl(var(--morui-focus)/var(--morui-focus-opacity,1))}.active\:bg-default-300:active{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-300)/var(--morui-default-300-opacity,var(--tw-bg-opacity)))}.active\:\!opacity-70:active{opacity:.7!important}.data-\[open\=true\]\:block[data-open=true],.group:hover .group-hover\:block,.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:block,.peer[data-filled=true]~.peer-data-\[filled\=true\]\:block,.tocCollapsibleContent_ZtRw a{display:block}.group:hover .group-hover\:hidden,.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:hidden{display:none}.group:hover .group-hover\:border-current{border-color:currentColor}.aria-expanded\:scale-\[0\.97\][aria-expanded=true],.data-\[pressed\=true\]\:scale-\[0\.97\][data-pressed=true]{--tw-scale-x:0.97;--tw-scale-y:0.97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[focus-visible\=true\]\:z-10[data-focus-visible=true],.data-\[focused\=true\]\:z-10[data-focused=true],.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:z-10{z-index:10}.data-\[has-label\=true\]\:mt-\[calc\(theme\(fontSize\.small\)_\+_10px\)\][data-has-label=true]{margin-top:calc(var(--morui-font-size-small) + 10px)}.data-\[has-label\=true\]\:mt-\[calc\(theme\(fontSize\.small\)_\+_12px\)\][data-has-label=true]{margin-top:calc(var(--morui-font-size-small) + 12px)}.data-\[has-label\=true\]\:mt-\[calc\(theme\(fontSize\.small\)_\+_8px\)\][data-has-label=true]{margin-top:calc(var(--morui-font-size-small) + 8px)}.data-\[focus-visible\=true\]\:-translate-x-3[data-focus-visible=true],.data-\[hover\=true\]\:-translate-x-3[data-hover=true]{--tw-translate-x:-0.75rem}.data-\[hover\=true\]\:translate-x-0[data-hover=true]{--tw-translate-x:0px}.data-\[dragging\=true\]\:cursor-grabbing[data-dragging=true]{cursor:grabbing}.data-\[thumb-hidden\=false\]\:border-x-\[calc\(theme\(spacing\.5\)\/2\)\][data-thumb-hidden=false]{border-left-width:.625rem;border-right-width:.625rem}.data-\[thumb-hidden\=false\]\:border-x-\[calc\(theme\(spacing\.6\)\/2\)\][data-thumb-hidden=false]{border-left-width:.75rem;border-right-width:.75rem}.data-\[thumb-hidden\=false\]\:border-x-\[calc\(theme\(spacing\.7\)\/2\)\][data-thumb-hidden=false]{border-left-width:.875rem;border-right-width:.875rem}.data-\[thumb-hidden\=false\]\:border-y-\[calc\(theme\(spacing\.5\)\/2\)\][data-thumb-hidden=false]{border-bottom-width:.625rem;border-top-width:.625rem}.data-\[thumb-hidden\=false\]\:border-y-\[calc\(theme\(spacing\.6\)\/2\)\][data-thumb-hidden=false]{border-bottom-width:.75rem;border-top-width:.75rem}.data-\[thumb-hidden\=false\]\:border-y-\[calc\(theme\(spacing\.7\)\/2\)\][data-thumb-hidden=false]{border-bottom-width:.875rem;border-top-width:.875rem}.data-\[active\=true\]\:border-danger[data-active=true],.data-\[focus\=true\]\:border-danger[data-focus=true],.data-\[hover\=true\]\:border-danger[data-hover=true],.data-\[open\=true\]\:border-danger[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-default-400[data-active=true],.data-\[hover\=true\]\:border-default-400[data-hover=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-default-400)/var(--morui-default-400-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-primary[data-active=true],.data-\[focus\=true\]\:border-primary[data-focus=true],.data-\[hover\=true\]\:border-primary[data-hover=true],.data-\[open\=true\]\:border-primary[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-secondary[data-active=true],.data-\[focus\=true\]\:border-secondary[data-focus=true],.data-\[hover\=true\]\:border-secondary[data-hover=true],.data-\[open\=true\]\:border-secondary[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-success[data-active=true],.data-\[focus\=true\]\:border-success[data-focus=true],.data-\[hover\=true\]\:border-success[data-hover=true],.data-\[open\=true\]\:border-success[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-warning[data-active=true],.data-\[focus\=true\]\:border-warning[data-focus=true],.data-\[hover\=true\]\:border-warning[data-hover=true],.data-\[open\=true\]\:border-warning[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.data-\[focus\=true\]\:border-default-foreground[data-focus=true],.data-\[open\=true\]\:border-default-foreground[data-open=true],.group[data-focus=true] .group-data-\[focus\=true\]\:border-default-foreground{--tw-border-opacity:1;border-color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-border-opacity)))}.data-\[hover\=true\]\:bg-blue-600[data-hover=true]{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.data-\[hover\=true\]\:bg-content2[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-content2)/var(--morui-content2-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-danger-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger-100)/var(--morui-danger-100-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-default\/80[data-hover=true]{background-color:hsl(var(--morui-default)/.8)}.data-\[hover\=true\]\:bg-primary-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary-100)/var(--morui-primary-100-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-secondary-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary-100)/var(--morui-secondary-100-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-success-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-success-100)/var(--morui-success-100-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-warning-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning-100)/var(--morui-warning-100-opacity,var(--tw-bg-opacity)))}.data-\[in-range\=true\]\:bg-background\/50[data-in-range=true]{background-color:hsl(var(--morui-background)/.5)}.data-\[loaded\=true\]\:\!bg-transparent[data-loaded=true]{background-color:initial!important}.data-\[has-end-content\=true\]\:pe-1\.5[data-has-end-content=true]{padding-inline-end:.375rem}.data-\[has-start-content\=true\]\:ps-1\.5[data-has-start-content=true]{padding-inline-start:.375rem}.data-\[disabled\=true\]\:text-default-300[data-disabled=true]{--tw-text-opacity:1;color:hsl(var(--morui-default-300)/var(--morui-default-300-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-danger[data-hover=true],.data-\[selected\=true\]\:text-danger[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-primary[data-hover=true],.data-\[selected\=true\]\:text-primary[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-secondary[data-hover=true],.data-\[selected\=true\]\:text-secondary[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.data-\[selected\=true\]\:text-success-600[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-success-600)/var(--morui-success-600-opacity,var(--tw-text-opacity)))}.data-\[selected\=true\]\:text-warning-600[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-warning-600)/var(--morui-warning-600-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:opacity-hover[data-hover=true]{opacity:var(--morui-hover-opacity)}.data-\[active\=true\]\:shadow-md[data-active=true]{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.data-\[hover\=true\]\:shadow-lg[data-hover=true]{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.data-\[hover\=true\]\:shadow-danger\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-danger)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[hover\=true\]\:shadow-primary\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-primary)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[hover\=true\]\:shadow-secondary\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-secondary)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[hover\=true\]\:shadow-success\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-success)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[hover\=true\]\:shadow-warning\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-warning)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[focus-visible\=true\]\:outline-2[data-focus-visible=true]{outline-width:2px}.data-\[focus-visible\=true\]\:outline-offset-2[data-focus-visible=true]{outline-offset:2px}.data-\[focus-visible\=true\]\:outline-focus[data-focus-visible=true]{outline-color:hsl(var(--morui-focus)/var(--morui-focus-opacity,1))}.data-\[focus-visible\]\:outline-danger-foreground[data-focus-visible]{outline-color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,1))}.data-\[focus-visible\]\:outline-default-foreground[data-focus-visible]{outline-color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,1))}.data-\[focus-visible\]\:outline-primary-foreground[data-focus-visible]{outline-color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,1))}.data-\[focus-visible\]\:outline-secondary-foreground[data-focus-visible]{outline-color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,1))}.data-\[focus-visible\]\:outline-success-foreground[data-focus-visible]{outline-color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,1))}.data-\[focus-visible\]\:outline-warning-foreground[data-focus-visible]{outline-color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,1))}.data-\[menu-open\=true\]\:backdrop-blur-xl[data-menu-open=true]{--tw-backdrop-blur:blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.data-\[hide-scroll\=true\]\:scrollbar-hide[data-hide-scroll=true]::-webkit-scrollbar{display:none}.data-\[top-bottom-scroll\=true\]\:\[mask-image\:linear-gradient\(\#000\2c \#000\2c transparent_0\2c \#000_var\(--scroll-shadow-size\)\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-top-bottom-scroll=true]{-webkit-mask-image:linear-gradient(#000,#000,#0000 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(#000,#000,#0000 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[top-scroll\=true\]\:\[mask-image\:linear-gradient\(0deg\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-top-scroll=true]{-webkit-mask-image:linear-gradient(0deg,#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(0deg,#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[bottom-scroll\=true\]\:\[mask-image\:linear-gradient\(180deg\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-bottom-scroll=true]{-webkit-mask-image:linear-gradient(180deg,#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(180deg,#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[left-scroll\=true\]\:\[mask-image\:linear-gradient\(270deg\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-left-scroll=true]{-webkit-mask-image:linear-gradient(270deg,#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(270deg,#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[right-scroll\=true\]\:\[mask-image\:linear-gradient\(90deg\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-right-scroll=true]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[left-right-scroll\=true\]\:\[mask-image\:linear-gradient\(to_right\2c \#000\2c \#000\2c transparent_0\2c \#000_var\(--scroll-shadow-size\)\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-left-right-scroll=true]{-webkit-mask-image:linear-gradient(to right,#000,#000,#0000 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(to right,#000,#000,#0000 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[placement\=bottom-end\]\:before\:-top-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=bottom-end]:before,.data-\[placement\=bottom-start\]\:before\:-top-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=bottom-start]:before,.data-\[placement\=bottom\]\:before\:-top-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=bottom]:before{content:var(--tw-content);top:calc(-.3125rem - -1.5px)}.data-\[placement\=bottom-end\]\:before\:right-3[data-placement=bottom-end]:before,.data-\[placement\=top-end\]\:before\:right-3[data-placement=top-end]:before{content:var(--tw-content);right:.75rem}.data-\[placement\=bottom-start\]\:before\:left-3[data-placement=bottom-start]:before,.data-\[placement\=top-start\]\:before\:left-3[data-placement=top-start]:before{content:var(--tw-content);left:.75rem}.data-\[placement\=left-end\]\:before\:-right-\[calc\(theme\(spacing\.5\)\/4_-_3px\)\][data-placement=left-end]:before,.data-\[placement\=left-start\]\:before\:-right-\[calc\(theme\(spacing\.5\)\/4_-_3px\)\][data-placement=left-start]:before{content:var(--tw-content);right:calc(-.3125rem - -3px)}.data-\[placement\=left-end\]\:before\:bottom-1\/4[data-placement=left-end]:before,.data-\[placement\=right-end\]\:before\:bottom-1\/4[data-placement=right-end]:before{bottom:25%;content:var(--tw-content)}.data-\[placement\=left-start\]\:before\:top-1\/4[data-placement=left-start]:before,.data-\[placement\=right-start\]\:before\:top-1\/4[data-placement=right-start]:before{content:var(--tw-content);top:25%}.data-\[placement\=left\]\:before\:-right-\[calc\(theme\(spacing\.5\)\/4_-_2px\)\][data-placement=left]:before{content:var(--tw-content);right:calc(-.3125rem - -2px)}.data-\[placement\=left\]\:before\:top-1\/2[data-placement=left]:before,.data-\[placement\=right\]\:before\:top-1\/2[data-placement=right]:before{content:var(--tw-content);top:50%}.data-\[placement\=right-end\]\:before\:-left-\[calc\(theme\(spacing\.5\)\/4_-_3px\)\][data-placement=right-end]:before,.data-\[placement\=right-start\]\:before\:-left-\[calc\(theme\(spacing\.5\)\/4_-_3px\)\][data-placement=right-start]:before{content:var(--tw-content);left:calc(-.3125rem - -3px)}.data-\[placement\=right\]\:before\:-left-\[calc\(theme\(spacing\.5\)\/4_-_2px\)\][data-placement=right]:before{content:var(--tw-content);left:calc(-.3125rem - -2px)}.data-\[placement\=top-end\]\:before\:-bottom-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=top-end]:before,.data-\[placement\=top-start\]\:before\:-bottom-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=top-start]:before,.data-\[placement\=top\]\:before\:-bottom-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=top]:before{bottom:calc(-.3125rem - -1.5px);content:var(--tw-content)}.data-\[loaded\=true\]\:before\:animate-none[data-loaded=true]:before{animation:none;content:var(--tw-content)}.data-\[dragging\=true\]\:after\:scale-80[data-dragging=true]:after{--tw-scale-x:0.8;--tw-scale-y:0.8}.data-\[selectable\=true\]\:focus\:border-danger:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-default:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-primary:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-secondary:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-success:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-warning:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:bg-danger:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-danger\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-danger)/.2)}.data-\[selectable\=true\]\:focus\:bg-default:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-default-100:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-100)/var(--morui-default-100-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-default\/40:focus[data-selectable=true]{background-color:hsl(var(--morui-default)/.4)}.data-\[selectable\=true\]\:focus\:bg-primary:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-primary\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-primary)/.2)}.data-\[selectable\=true\]\:focus\:bg-secondary:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-secondary\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-secondary)/.2)}.data-\[selectable\=true\]\:focus\:bg-success:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-success\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-success)/.2)}.data-\[selectable\=true\]\:focus\:bg-warning:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-warning\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-warning)/.2)}.data-\[selectable\=true\]\:focus\:text-danger:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-danger-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-default-500:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-default-500)/var(--morui-default-500-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-default-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-primary:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-primary-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-secondary:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-secondary-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-success:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-success-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-warning:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-warning-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:shadow-danger\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-danger)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-default\/50:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-default)/0.5);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-primary\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-primary)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-secondary\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-secondary)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-success\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-success)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-warning\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-warning)/0.3);--tw-shadow:var(--tw-shadow-colored)}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:pointer-events-auto,.group[data-filled=true] .group-data-\[filled\=true\]\:pointer-events-auto{pointer-events:auto}.group[data-selected=true] .group-data-\[selected\=true\]\:ml-4,.group[data-selected][data-pressed] .group-data-\[selected\]\:group-data-\[pressed\]\:ml-4{margin-left:1rem}.group[data-selected=true] .group-data-\[selected\=true\]\:ml-5,.group[data-selected][data-pressed] .group-data-\[selected\]\:group-data-\[pressed\]\:ml-5{margin-left:1.25rem}.group[data-selected=true] .group-data-\[selected\=true\]\:ml-6{margin-left:1.5rem}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.small\)\/2_\+_20px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.small\)\/2_\+_20px\)\]{--tw-translate-y:calc(-100% + var(--morui-font-size-small)/2*-1 + -20px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.small\)\/2_\+_24px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.small\)\/2_\+_24px\)\]{--tw-translate-y:calc(-100% + var(--morui-font-size-small)/2*-1 + -24px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.tiny\)\/2_\+_16px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.tiny\)\/2_\+_16px\)\]{--tw-translate-y:calc(-100% + var(--morui-font-size-tiny)/2*-1 + -16px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_3\.5px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_3\.5px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -3.5px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_4px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_4px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -4px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_6px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_6px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -6px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_6px_-_theme\(borderWidth\.medium\)\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_6px_-_theme\(borderWidth\.medium\)\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -6px - var(--morui-border-width-medium)*-1);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_8px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_8px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -8px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_8px_-_theme\(borderWidth\.medium\)\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_8px_-_theme\(borderWidth\.medium\)\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -8px - var(--morui-border-width-medium)*-1);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_5px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_5px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-tiny)/2*-1 - -5px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_8px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_8px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-tiny)/2*-1 - -8px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_8px_-_theme\(borderWidth\.medium\)\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_8px_-_theme\(borderWidth\.medium\)\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-tiny)/2*-1 - -8px - var(--morui-border-width-medium)*-1);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-selected=true] .group-data-\[selected\=true\]\:translate-x-3{--tw-translate-x:0.75rem}.group[data-copied=true] .group-data-\[copied\=true\]\:scale-50{--tw-scale-x:.5;--tw-scale-y:.5;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:scale-85,.group[data-filled=true] .group-data-\[filled\=true\]\:scale-85{--tw-scale-x:0.85;--tw-scale-y:0.85;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-pressed=true] .group-data-\[pressed\=true\]\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.group[data-focus=true] .group-data-\[focus\=true\]\:border-danger,.group[data-selected=true] .group-data-\[selected\=true\]\:border-danger{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.group[data-focus=true] .group-data-\[focus\=true\]\:border-primary,.group[data-selected=true] .group-data-\[selected\=true\]\:border-primary{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.group[data-focus=true] .group-data-\[focus\=true\]\:border-secondary,.group[data-selected=true] .group-data-\[selected\=true\]\:border-secondary{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.group[data-focus=true] .group-data-\[focus\=true\]\:border-success,.group[data-selected=true] .group-data-\[selected\=true\]\:border-success{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.group[data-focus=true] .group-data-\[focus\=true\]\:border-warning,.group[data-selected=true] .group-data-\[selected\=true\]\:border-warning{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:border-default-500{--tw-border-opacity:1;border-color:hsl(var(--morui-default-500)/var(--morui-default-500-opacity,var(--tw-border-opacity)))}.\[\&\[data-hover\=true\]\:not\(\[data-active\=true\]\)\]\:bg-default-100[data-hover=true]:not([data-active=true]),.group[data-focus=true] .group-data-\[focus\=true\]\:bg-default-100,.group[data-hover-unselected=true] .group-data-\[hover-unselected\=true\]\:bg-default-100{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-100)/var(--morui-default-100-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-danger{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-primary{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-secondary{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-success{--tw-bg-opacity:1;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-warning{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)))}.group[data-has-helper=true] .group-data-\[has-helper\=true\]\:pt-3{padding-top:.75rem}.group[data-has-helper=true] .group-data-\[has-helper\=true\]\:pt-4,.group[data-has-label=true] .group-data-\[has-label\=true\]\:pt-4{padding-top:1rem}.group[data-has-label=true] .group-data-\[has-label\=true\]\:pt-5{padding-top:1.25rem}.group[data-disabled=true] .group-data-\[disabled\=true\]\:text-foreground-300{--tw-text-opacity:1;color:hsl(var(--morui-foreground-300)/var(--morui-foreground-300-opacity,var(--tw-text-opacity)))}.group[data-has-value=true] .group-data-\[has-value\=true\]\:text-default-foreground,.group[data-selected=true] .group-data-\[selected\=true\]\:text-default-foreground{--tw-text-opacity:1;color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-text-opacity)))}.group[data-invalid=true] .group-data-\[invalid\=true\]\:text-danger,.group[data-selected=true] .group-data-\[selected\=true\]\:text-danger{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-danger-foreground{--tw-text-opacity:1;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-primary{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-primary-foreground{--tw-text-opacity:1;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-secondary{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-secondary-foreground{--tw-text-opacity:1;color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-success{--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-success-foreground{--tw-text-opacity:1;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-warning{--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-warning-foreground{--tw-text-opacity:1;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:opacity-60{opacity:.6}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group[data-open=true] .group-data-\[open\=true\]\:before\:translate-y-px:before{--tw-translate-y:1px}.group[aria-selected=false][data-hover=true] .group-aria-\[selected\=false\]\:group-data-\[hover\=true\]\:before\:bg-default-100:before,.group[data-hover=true] .group-data-\[hover\=true\]\:before\:bg-default-100:before,.group[data-odd=true] .group-data-\[odd\=true\]\:before\:bg-default-100:before{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-100)/var(--morui-default-100-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.group[data-open=true] .group-data-\[open\=true\]\:after\:translate-y-0:after{--tw-translate-y:0px}.group[data-open=true] .group-data-\[open\=true\]\:after\:-rotate-45:after{--tw-rotate:-45deg}.group[data-selected=true] .group-data-\[selected\=true\]\:after\:scale-100:after{--tw-scale-x:1;--tw-scale-y:1;content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-first=true] .group-data-\[first\=true\]\:first\:before\:rounded-tl-lg:first-child:before{border-top-left-radius:.5rem;content:var(--tw-content)}.group[data-last=true] .group-data-\[last\=true\]\:first\:before\:rounded-bl-lg:first-child:before{border-bottom-left-radius:.5rem;content:var(--tw-content)}.group[data-first=true] .group-data-\[first\=true\]\:last\:before\:rounded-tr-lg:last-child:before{border-top-right-radius:.5rem;content:var(--tw-content)}.group[data-last=true] .group-data-\[last\=true\]\:last\:before\:rounded-br-lg:last-child:before{border-bottom-right-radius:.5rem;content:var(--tw-content)}.group[aria-selected=false][data-hover=true] .group-aria-\[selected\=false\]\:group-data-\[hover\=true\]\:before\:opacity-70:before{content:var(--tw-content);opacity:.7}.dark\:bg-background\/20:is([data-theme=dark] *){background-color:hsl(var(--morui-background)/.2)}.dark\:bg-content2:is([data-theme=dark] *){--tw-bg-opacity:1;background-color:hsl(var(--morui-content2)/var(--morui-content2-opacity,var(--tw-bg-opacity)))}.dark\:bg-default:is([data-theme=dark] *){--tw-bg-opacity:1;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)))}.dark\:bg-transparent:is([data-theme=dark] *){background-color:initial}.dark\:text-danger-500:is([data-theme=dark] *){--tw-text-opacity:1;color:hsl(var(--morui-danger-500)/var(--morui-danger-500-opacity,var(--tw-text-opacity)))}.dark\:text-success:is([data-theme=dark] *){--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.dark\:text-warning:is([data-theme=dark] *){--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.dark\:placeholder\:text-danger-500:is([data-theme=dark] *)::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-danger-500)/var(--morui-danger-500-opacity,var(--tw-text-opacity)))}.dark\:placeholder\:text-success:is([data-theme=dark] *)::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.dark\:placeholder\:text-warning:is([data-theme=dark] *)::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.dark\:before\:via-default-700\/10:is([data-theme=dark] *):before{--tw-gradient-to:hsl(var(--morui-default-700)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsl(var(--morui-default-700)/0.1) var(--tw-gradient-via-position),var(--tw-gradient-to);content:var(--tw-content)}.dark\:after\:bg-content2:is([data-theme=dark] *):after{content:var(--tw-content)}.dark\:after\:bg-content2:is([data-theme=dark] *):after,.dark\:data-\[hover\=true\]\:bg-content2[data-hover=true]:is([data-theme=dark] *){--tw-bg-opacity:1;background-color:hsl(var(--morui-content2)/var(--morui-content2-opacity,var(--tw-bg-opacity)))}.dark\:data-\[selected\=true\]\:text-danger-500[data-selected=true]:is([data-theme=dark] *){--tw-text-opacity:1;color:hsl(var(--morui-danger-500)/var(--morui-danger-500-opacity,var(--tw-text-opacity)))}.dark\:data-\[selected\=true\]\:text-success[data-selected=true]:is([data-theme=dark] *){--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.dark\:data-\[selected\=true\]\:text-warning[data-selected=true]:is([data-theme=dark] *){--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.rtl\:-rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:-180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:data-\[open\=true\]\:-rotate-90[data-open=true]:where([dir=rtl],[dir=rtl] *){--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\+\.border-medium\.border-danger\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-danger,.\[\&\+\.border-medium\.border-default\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-default,.\[\&\+\.border-medium\.border-primary\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-primary,.\[\&\+\.border-medium\.border-secondary\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-secondary,.\[\&\+\.border-medium\.border-success\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-success,.\[\&\+\.border-medium\.border-warning\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-warning{margin-inline-start:calc(var(--morui-border-width-medium)*-1)}.\[\&\:not\(\:first-of-type\)\]\:ml-\[calc\(theme\(borderWidth\.2\)\*-1\)\]:not(:first-of-type){margin-left:-2px}.\[\&\>svg\]\:max-w-\[theme\(spacing\.unit-8\)\]>svg{max-width:var(--morui-spacing-unit-8)}.\[\&\>tr\]\:first\:rounded-lg:first-child>tr{border-radius:.5rem}.iconEdit_hqvt{margin-right:.3em;vertical-align:sub}.tag_G9wi{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_G9wi:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_ZX_1{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_xGB6{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_xGB6:after,.tagWithCount_xGB6:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_xGB6:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_xGB6:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_xGB6 span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_NPqp{display:inline}.tag_WyCo{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_rVBC{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_fvqu{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.tocCollapsibleButton_fvqu:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_gSY7:after,.tocCollapsibleExpanded_Kmy0{transform:none}.tocCollapsible_HBdG{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_ZtRw>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_ZtRw ul li{margin:.4rem .8rem}.tableOfContents_Kj3J{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.backToTopButton_N9Ya{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_N9Ya:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_Rn7A{opacity:1;transform:scale(1);visibility:visible}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Hit[aria-selected=true] mark,.content_ILws a{text-decoration:underline}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:#0000;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards e;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:#0000}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_xQ5m,.sidebarLogo_yFma,.themedComponent_WQJe,[data-theme=dark] .lightToggleIcon_YVKM,[data-theme=light] .darkToggleIcon_a49f,html[data-announcement-bar-initially-dismissed=true] .announcementBar_yOjN,svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@keyframes e{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container,.skipToContent_E3EM{z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_E3EM{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem}.skipToContent_E3EM:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_SYkQ{line-height:0;padding:0}.content_ILws{font-size:85%;padding:5px 0;text-align:center}.content_ILws a{color:inherit}.announcementBar_yOjN{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_ZPOO{flex:0 0 10px}.announcementBarClose_laiP{align-self:stretch;flex:0 0 30px}.toggle_Lphv{height:2rem;width:2rem}.toggleButton_C4u_{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_C4u_:hover{background:var(--ifm-color-emphasis-200)}.darkNavbarColorModeToggle_pSsd:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_tNlc,[data-theme=light] .themedComponent--light_vC8m,html:not([data-theme]) .themedComponent--light_vC8m{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_ZpCQ{display:none;margin:0}.iconExternalLink_uMR8{margin-left:.3rem}.docMainContainer_qBbz,.docRoot_kbrQ{display:flex;width:100%}.docsWrapper_o7i8{display:flex;flex:1 0 auto}.iconLanguage_ZSsF{margin-right:5px;vertical-align:text-bottom}@supports selector(:has(*)){.navbarSearchContainer_Aukl:not(:has(>*)){display:none}}.navbarHideable_gQho{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_zxOU{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_QHYE{color:red;white-space:pre-wrap}.errorBoundaryFallback_uBmD{color:red;padding:.55rem}.buttonGroup_QYpy button,.codeBlockContainer_jasU{background:var(--prism-background-color);color:var(--prism-color)}.footerLogoLink_DDai{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_AZ4C{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_FXx6{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_avmg{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column}.codeBlockContainer_jasU{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_TEEh{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_e8pP{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_Bkgn{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_e8pP+.codeBlockContent_TEEh .codeBlock_Bkgn{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_lDP1{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_y7ta{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup_QYpy{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup_QYpy button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup_QYpy button:focus-visible,.buttonGroup_QYpy button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup_QYpy button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_qib8{counter-increment:a;display:table-row}.codeLineNumber_dbgI{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_dbgI:before{content:counter(a);opacity:.4}.codeLineContent_h2yX{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_yinF{opacity:1!important}.copyButtonIcons_SHCV{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_rwkz,.copyButtonSuccessIcon_B2xf{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_B2xf{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_yinF .copyButtonIcon_rwkz{opacity:0;transform:scale(.33)}.copyButtonCopied_yinF .copyButtonSuccessIcon_B2xf{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_KMHO{height:1.2rem;width:1.2rem}.details_NQJP{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_NQJP>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_NQJP>summary::-webkit-details-marker{display:none}.details_NQJP>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_MmFW{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_v4Yj{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.containsTaskList_j67I{list-style:none}.admonition_qJAF{margin-bottom:1em}.admonitionHeading_WmUu{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_WmUu:not(:last-child){margin-bottom:.3rem}.admonitionHeading_WmUu code{text-transform:none}.admonitionIcon_FLlS{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_FLlS svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_eIF0{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_y6NL{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.searchQueryInput_lgCf,.searchVersionInput_hZMv{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_lgCf:focus,.searchVersionInput_hZMv:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_lgCf::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_usTD{font-size:.9rem;font-weight:700}.algoliaLogo_nSr9{max-width:150px}.algoliaLogoPathFill_bweY{fill:var(--ifm-font-color-base)}.searchResultItem_kiiJ{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_P9ix{font-weight:400;margin-bottom:0}.searchResultItemPath_QjmW{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_rb6a{font-style:italic;margin:.5rem 0 0}.loadingSpinner_I7f_{animation:1s linear infinite f;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes f{to{transform:rotate(1turn)}}.loader_lcxn{margin-top:2rem}.search-result-match{background:#ffd78e40;color:var(--docsearch-hit-color);padding:.09em 0}@media (min-width:375px){.header-bg{height:115px}}@media (min-width:425px){.header-bg{height:130px}}@media (min-width:640px){.sm\:mx-0{margin-left:0;margin-right:0}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:my-0{margin-bottom:0;margin-top:0}.sm\:my-16{margin-bottom:4rem;margin-top:4rem}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:\[--scale-enter\:100\%\]{--scale-enter:100%}.sm\:\[--scale-exit\:103\%\]{--scale-exit:103%}.sm\:\[--slide-enter\:0px\]{--slide-enter:0px}.sm\:\[--slide-exit\:0px\]{--slide-exit:0px}.sm\:data-\[visible\=true\]\:opacity-0[data-visible=true]{opacity:0}.group[data-hover=true] .sm\:group-data-\[hover\=true\]\:data-\[visible\=true\]\:opacity-100[data-visible=true]{opacity:1}}@media (min-width:768px){.header-bg{height:235px}.md\:order-1{order:1}.md\:h-\[780px\]{height:780px}.md\:w-\[128px\]{width:128px}.md\:w-\[284px\]{width:284px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:px-0{padding-left:0;padding-right:0}.md\:py-10{padding-bottom:2.5rem;padding-top:2.5rem}.md\:pt-\[100px\]{padding-top:100px}.md\:text-\[84px\]{font-size:84px}.md\:text-\[85px\]{font-size:85px}.md\:text-tiny{font-size:var(--morui-font-size-tiny);line-height:var(--morui-line-height-tiny)}.md\:\!font-semibold{font-weight:600!important}.md\:leading-\[84px\]{line-height:84px}.md\:leading-\[85px\]{line-height:85px}}@media (min-width:997px){.collapseSidebarButton_ZpCQ,.expandButton_E2R3{background-color:var(--docusaurus-collapse-button-bg)}.lastUpdated_rVBC{text-align:right}.tocMobile_z_cF{display:none}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_laiP,.announcementBarPlaceholder_ZPOO{flex-basis:50px}.collapseSidebarButton_ZpCQ{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_RA6k{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_XpyI,[dir=rtl] .collapseSidebarButtonIcon_RA6k{transform:rotate(0)}.collapseSidebarButton_ZpCQ:focus,.collapseSidebarButton_ZpCQ:hover,.expandButton_E2R3:focus,.expandButton_E2R3:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_SHKz{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_bObF{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_bObF{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_LUaF{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_qjHj{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_v_84{padding-top:0}.sidebarHidden_fzvn{opacity:0;visibility:hidden}.sidebarLogo_yFma{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_yFma img{height:2rem;margin-right:.5rem}.expandButton_E2R3{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_XpyI{transform:rotate(180deg)}.docSidebarContainer_xQ5m{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_YfRI{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_mqWZ{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_qBbz{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_M1IX{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_HmM2{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Aukl{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.docItemCol_dvZ9{max-width:75%!important}}@media (min-width:1080px){.header-bg{height:330px}}@media (min-width:1280px){.xl\:absolute{position:absolute}.xl\:bottom-14{bottom:3.5rem}.xl\:bottom-8{bottom:2rem}.xl\:mt-0{margin-top:0}.xl\:flex{display:flex}.xl\:w-\[280px\]{width:280px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:flex-row{flex-direction:row}.xl\:pb-0{padding-bottom:0}.xl\:text-\[140px\]{font-size:140px}.xl\:leading-\[100px\]{line-height:100px}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}.header-bg{height:440px}}@media (min-width:1920px){.header-bg{height:440px}}@media (min-width:2560px){.header-bg{height:440px}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_rXT6,.footer__link-separator,.navbar__item,.tableOfContents_Kj3J{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.features_src-components-HomepageFeatures-styles-module .col{--ifm-col-width:50%!important}.docItemContainer_rccO{padding:0 .3rem}.navbarSearchContainer_Aukl{position:absolute;right:var(--ifm-navbar-padding-horizontal)}}@media only screen and (max-width:996px){.searchQueryColumn_yPeD,.searchResultsColumn_usTD{max-width:60%!important}.searchLogoColumn_w6QH,.searchVersionColumn_nHlp{max-width:40%!important}.searchLogoColumn_w6QH{padding-left:0!important}}@media screen and (max-width:996px){.navbar__logo{align-items:center;display:flex}.navbar__logo img{width:70%}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media screen and (max-width:576px){.searchQueryColumn_yPeD{max-width:100%!important}.searchVersionColumn_nHlp{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (max-width:426px){.col{--ifm-col-width:100%!important}}@media (hover:hover){.backToTopButton_N9Ya:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}.motion-reduce\:transition-none{transition-property:none}.motion-reduce\:after\:transition-none:after{content:var(--tw-content);transition-property:none}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}@media print{.announcementBar_yOjN,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_z_cF{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_lDP1{white-space:pre-wrap}} \ No newline at end of file diff --git a/build/assets/css/styles.81ba172c.css b/build/assets/css/styles.81ba172c.css deleted file mode 100644 index ee6f43f36..000000000 --- a/build/assets/css/styles.81ba172c.css +++ /dev/null @@ -1 +0,0 @@ -.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.avatar__photo,.card,.text--truncate{overflow:hidden}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.button,.dropdown__link,.sr-only,.text--truncate,.truncate{white-space:nowrap}.ring-background,.ring-danger,.ring-default,.ring-primary,.ring-secondary,.ring-success,.ring-warning{--tw-ring-opacity:1}*,.DocSearch-Container,.DocSearch-Container *,.box-border{box-sizing:border-box}.text--truncate,.text-ellipsis,.truncate{text-overflow:ellipsis}.tap-highlight-transparent,.toggleButton_NdO2,html{-webkit-tap-highlight-color:transparent}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:#656c85cc;--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px #1e235a66;--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 #45629b1f;--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width);padding:0 var(--ifm-spacing-horizontal);width:100%}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.mx-0,.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.px-0,.row--no-gutters>.col{padding-left:0;padding-right:0}.data-\[has-helper\=true\]\:items-start[data-has-helper=true],.group[data-has-label=true] .group-data-\[has-label\=true\]\:items-start,.items-start,.row--align-top{align-items:flex-start}.group[data-has-label=true] .group-data-\[has-label\=true\]\:items-end,.items-end,.row--align-bottom{align-items:flex-end}.items-center,.menuExternalLink_JiRe,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width);padding:0 var(--ifm-spacing-horizontal);width:100%}.\!pb-0,.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.\!px-1,.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.\!px-1,.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}.max-w-full,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_WfUF .wordWrapButtonIcon_lc89{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_hlA6,.alert__heading,.text--uppercase,.uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);width:var(--ifm-avatar-photo-size)}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after,.inline-block{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child),.last-of-type\:rounded-l-none:last-of-type{border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child),.first-of-type\:rounded-r-none:first-of-type{border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button,.data-\[justify\=end\]\:flex-grow[data-justify=end],.data-\[justify\=start\]\:flex-grow[data-justify=start],.flex-grow{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column}.card--full-height,.h-full,body,html{height:100%}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child,.pt-0{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child),.pb-0{padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.aria-expanded\:opacity-70[aria-expanded=true],.close:hover,.data-\[pressed\=true\]\:opacity-70[data-pressed=true],.group[data-pressed=true] .group-data-\[pressed\=true\]\:opacity-70,.opacity-70,.peer[data-filled=true]~.peer-data-\[filled\=true\]\:opacity-70{opacity:.7}.close:focus,.hover\:opacity-80:hover,.theme-code-block-highlighted-line .codeLineNumber_CBFI:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]),.pointer-events-none{pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_r_Gx article>:first-child,.docItemContainer_r_Gx header+*,.footer__item,.mt-0{margin-top:0}.admonitionContent_IvJ0>:last-child,.collapsibleContent_tCQ3 p:last-child,.details_b_me>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_xjYg,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child),.mt-1{margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_b_me[data-collapsed=false].isBrowser_FX0N>summary:before,.details_b_me[open]:not(.isBrowser_FX0N)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{opacity:0;top:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;visibility:hidden;bottom:0;left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:13px}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.data-\[open\=true\]\:flex[data-open=true],.flex,.footer__links,.group[data-has-helper=true] .group-data-\[has-helper\=true\]\:flex,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_WoJ0,.flex-auto,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.m-0,.navbar__items--center .navbar__brand{margin:0}.footer__col:nth-child(3),.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child,.pr-0{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}[data-theme=dark],[data-theme=light]{--ifm-color-primary:#14a800;--ifm-color-primary-dark:#3fff90;--ifm-color-primary-darker:#2dff85;--ifm-color-primary-darkest:#00f768;--ifm-color-primary-light:#85ffb8;--ifm-color-primary-lighter:#97ffc3;--ifm-color-primary-lightest:#ccffe1;--ifm-menu-color-background-active:#14a800;--ifm-menu-color-background-hover:#14a800;--ifm-navbar-link-color:#fff;--ifm-footer-color:#999}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.\[\&\>tr\]\:first\:shadow-small:first-child>tr,.shadow,.shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\],.shadow-large,.shadow-lg,.shadow-md,.shadow-medium,.shadow-none,.shadow-sm,.shadow-small{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.inline-flex,.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:#090a11cc;--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 #494c6a80,0 -4px 8px 0 #0003;--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}@font-face{font-display:swap;font-family:Inter Variable;font-style:normal;font-weight:100 900;src:url(/assets/fonts/InterVariable-a0e477f2f1f9d2376fde931ee7c6241a.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter Variable;font-style:italic;font-weight:100 900;src:url(/assets/fonts/InterVariable-Italic-e295f70fe3e2df296c7bd1082d39afda.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:100;src:url(/assets/fonts/InterDisplay-Thin-8869ea180347c0b3e105f1f25d8159c1.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:100;src:url(/assets/fonts/InterDisplay-ThinItalic-84afcd2c98f66e503a057888753b75a0.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:200;src:url(/assets/fonts/InterDisplay-ExtraLight-8aac419550652c70acce102a1405b9e6.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:200;src:url(/assets/fonts/InterDisplay-ExtraLightItalic-3d35f6363cf46c94cb5d50618f66586b.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:300;src:url(/assets/fonts/InterDisplay-Light-878eccfa0e5c8240899d9a9588d25926.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:300;src:url(/assets/fonts/InterDisplay-LightItalic-af1c0bdb835afad15237ca3659b2c345.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:400;src:url(/assets/fonts/InterDisplay-Regular-a4074fefb60f137f7974a3f2cadf655c.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:400;src:url(/assets/fonts/InterDisplay-Italic-c0dffe244faaf5bb8fbef1517f2c89a3.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:500;src:url(/assets/fonts/InterDisplay-Medium-6e976150c457a5edc1f31e3c6affe0c5.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:500;src:url(/assets/fonts/InterDisplay-MediumItalic-361044e3f1781339740b739848dd02f0.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:600;src:url(/assets/fonts/InterDisplay-SemiBold-54b6be6a7edc5b3cbdd615e2c9a54b8b.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:600;src:url(/assets/fonts/InterDisplay-SemiBoldItalic-4f03584a088f6fd339102161c36bd5b8.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:700;src:url(/assets/fonts/InterDisplay-Bold-f5ec5e21f616f430d4ba27e814d9eeb6.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:700;src:url(/assets/fonts/InterDisplay-BoldItalic-439cef167a628cb218568c7bd4d6f0ac.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:800;src:url(/assets/fonts/InterDisplay-ExtraBold-89518fa4ab7bacdb30e6bb414678e283.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:800;src:url(/assets/fonts/InterDisplay-ExtraBoldItalic-4dcb197ef83d3558dbdcc3e8e25b568f.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:normal;font-weight:900;src:url(/assets/fonts/InterDisplay-Black-fb55d5da48c7bee4d80af9ec6cd28e3f.woff2) format("woff2")}@font-face{font-display:swap;font-family:InterDisplay;font-style:italic;font-weight:900;src:url(/assets/fonts/InterDisplay-BlackItalic-bd4243b6c8594236ba8562208aa8e267.woff2) format("woff2")}:root,[data-theme]{background-color:hsl(var(--morui-background));color:hsl(var(--morui-foreground))}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.\[\&\>\*\]\:relative>*,.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.bottom-0{bottom:0}.bottom-8{bottom:2rem}.bottom-\[10\%\]{bottom:10%}.bottom-\[5\%\]{bottom:5%}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:left-0,.group[data-filled=true] .group-data-\[filled\=true\]\:left-0,.left-0{left:0}.left-1{left:.25rem}.left-1\.5{left:.375rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[10\%\]{left:10%}.left-\[5\%\]{left:5%}.right-1{right:.25rem}.right-1\.5{right:.375rem}.right-3{right:.75rem}.right-\[10\%\]{right:10%}.right-\[30\%\]{right:30%}.right-\[5\%\]{right:5%}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-\[10\%\]{top:10%}.top-\[5\%\]{top:5%}.top-\[6px\]{top:6px}.top-\[var\(--navbar-height\)\]{top:var(--navbar-height)}.-z-0,.z-0{z-index:0}.-z-30{z-index:-30}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-1{order:1}.order-2{order:2}.order-3{order:3}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.mx-1,.mx-\[calc\(\(theme\(spacing\.7\)-theme\(spacing\.5\)\)\/2\)\]{margin-left:.25rem;margin-right:.25rem}.mx-\[calc\(\(theme\(spacing\.5\)-theme\(spacing\.1\)\)\/2\)\]{margin-left:.5rem;margin-right:.5rem}.mx-\[calc\(\(theme\(spacing\.6\)-theme\(spacing\.3\)\)\/2\)\]{margin-left:.375rem;margin-right:.375rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-bottom:0;margin-top:0}.my-1,.my-\[calc\(\(theme\(spacing\.7\)-theme\(spacing\.5\)\)\/2\)\]{margin-bottom:.25rem;margin-top:.25rem}.my-16{margin-bottom:4rem;margin-top:4rem}.my-\[calc\(\(theme\(spacing\.5\)-theme\(spacing\.1\)\)\/2\)\]{margin-bottom:.5rem;margin-top:.5rem}.my-\[calc\(\(theme\(spacing\.6\)-theme\(spacing\.3\)\)\/2\)\]{margin-bottom:.375rem;margin-top:.375rem}.-mr-2{margin-right:-.5rem}.-ms-2{margin-inline-start:-.5rem}.-mt-1{margin-top:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-5{margin-bottom:1.25rem}.mb-px{margin-bottom:1px}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.group[data-selected][data-pressed] .group-data-\[selected\]\:group-data-\[pressed\]\:ml-3,.ml-3{margin-left:.75rem}.mr-2{margin-right:.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-\[133px\]{margin-top:133px}.mt-\[9px\]{margin-top:9px}.line-clamp-1{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;overflow:hidden}.block{display:block}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.\!h-auto{height:auto!important}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[100dvh\]{height:100dvh}.h-\[25px\]{height:25px}.h-\[2px\]{height:2px}.h-\[320px\]{height:320px}.h-\[90\%\]{height:90%}.h-\[95\%\]{height:95%}.h-\[97px\]{height:97px}.h-\[calc\(100dvh_-_var\(--navbar-height\)_-_1px\)\]{height:calc(100dvh - var(--navbar-height) - 1px)}.h-\[var\(--navbar-height\)\]{height:var(--navbar-height)}.h-auto,.img__qBJ{height:auto}.h-divider{height:var(--morui-divider-weight)}.h-fit{height:-moz-fit-content;height:fit-content}.h-px{height:1px}.h-screen{height:100vh}.h-unit-10{height:var(--morui-spacing-unit-10)}.h-unit-12{height:var(--morui-spacing-unit-12)}.h-unit-4{height:var(--morui-spacing-unit-4)}.h-unit-8{height:var(--morui-spacing-unit-8)}.h-unit-9{height:var(--morui-spacing-unit-9)}.max-h-64{max-height:16rem}.max-h-\[calc\(100\%_-_7\.5rem\)\]{max-height:calc(100% - 7.5rem)}.min-h-3{min-height:.75rem}.min-h-3\.5{min-height:.875rem}.min-h-4{min-height:1rem}.min-h-5{min-height:1.25rem}.min-h-6{min-height:1.5rem}.min-h-7{min-height:1.75rem}.min-h-screen{min-height:100vh}.min-h-unit-10{min-height:var(--morui-spacing-unit-10)}.min-h-unit-12{min-height:var(--morui-spacing-unit-12)}.min-h-unit-14{min-height:var(--morui-spacing-unit-14)}.min-h-unit-16{min-height:var(--morui-spacing-unit-16)}.min-h-unit-4{min-height:var(--morui-spacing-unit-4)}.min-h-unit-8{min-height:var(--morui-spacing-unit-8)}#__docusaurus,.container,.main-wrapper{min-height:100%}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.group[data-pressed=true] .group-data-\[pressed\=true\]\:w-5,.w-5{width:1.25rem}.group[data-pressed=true] .group-data-\[pressed\=true\]\:w-6,.w-6{width:1.5rem}.group[data-pressed=true] .group-data-\[pressed\=true\]\:w-7,.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[100px\]{width:100px}.w-\[128px\]{width:128px}.w-\[160px\]{width:160px}.w-\[284px\]{width:284px}.w-\[80\%\]{width:80%}.w-\[97px\]{width:97px}.w-\[calc\(100\%_-_theme\(spacing\.unit-6\)\)\]{width:calc(100% - var(--morui-spacing-unit-6))}.w-auto{width:auto}.w-divider{width:var(--morui-divider-weight)}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.w-unit-10{width:var(--morui-spacing-unit-10)}.w-unit-12{width:var(--morui-spacing-unit-12)}.w-unit-4{width:var(--morui-spacing-unit-4)}.w-unit-8{width:var(--morui-spacing-unit-8)}.features,.hero-banner{width:100%;display:flex}.min-w-10{min-width:2.5rem}.min-w-3{min-width:.75rem}.min-w-3\.5{min-width:.875rem}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-6{min-width:1.5rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[200px\]{min-width:200px}.min-w-full{min-width:100%}.min-w-max{min-width:max-content}.min-w-unit-10{min-width:var(--morui-spacing-unit-10)}.min-w-unit-12{min-width:var(--morui-spacing-unit-12)}.min-w-unit-5{min-width:var(--morui-spacing-unit-5)}.min-w-unit-6{min-width:var(--morui-spacing-unit-6)}.min-w-unit-7{min-width:var(--morui-spacing-unit-7)}.min-w-unit-8{min-width:var(--morui-spacing-unit-8)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\[1200px\]{max-width:1200px}.max-w-\[1280px\]{max-width:1280px}.max-w-\[1536px\]{max-width:1536px}.max-w-\[640px\]{max-width:640px}.max-w-\[768px\]{max-width:768px}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.basis-0,.data-\[justify\=end\]\:basis-0[data-justify=end],.data-\[justify\=start\]\:basis-0[data-justify=start]{flex-basis:0px}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.origin-center{transform-origin:center}.origin-left{transform-origin:left}.origin-right{transform-origin:right}.origin-top-left{transform-origin:top left}.-translate-x-1\/2,.after\:-translate-x-1\/2:after,.data-\[placement\=bottom\]\:before\:-translate-x-1\/2[data-placement=bottom]:before,.data-\[placement\=top\]\:before\:-translate-x-1\/2[data-placement=top]:before{--tw-translate-x:-50%}.-rotate-90,.-translate-x-1\/2,.-translate-y-1\/2,.data-\[before\=true\]\:rotate-180[data-before=true],.data-\[direction\=ascending\]\:rotate-180[data-direction=ascending],.data-\[focus-visible\=true\]\:-translate-x-3[data-focus-visible=true],.data-\[hover\=true\]\:-translate-x-3[data-hover=true],.data-\[hover\=true\]\:translate-x-0[data-hover=true],.data-\[invisible\=true\]\:scale-0[data-invisible=true],.data-\[open\=true\]\:-rotate-90[data-open=true],.data-\[open\=true\]\:rotate-180[data-open=true],.group[data-copied=true] .group-data-\[copied\=true\]\:scale-100,.group[data-pressed=true] .group-data-\[pressed\=true\]\:scale-95,.group[data-selected=true] .group-data-\[selected\=true\]\:scale-100,.group[data-selected=true] .group-data-\[selected\=true\]\:translate-x-3,.rotate-0,.rotate-180,.scale-0,.scale-100,.scale-105,.scale-50,.transform,.translate-x-1,.translate-x-1\/2,.translate-y-1,.translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2,.data-\[placement\=left\]\:before\:-translate-y-1\/2[data-placement=left]:before,.data-\[placement\=right\]\:before\:-translate-y-1\/2[data-placement=right]:before{--tw-translate-y:-50%}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1\/2{--tw-translate-x:50%}.after\:translate-y-1:after,.translate-y-1{--tw-translate-y:0.25rem}.translate-y-1\/2{--tw-translate-y:50%}.-rotate-90,.data-\[open\=true\]\:-rotate-90[data-open=true]{--tw-rotate:-90deg}.after\:rotate-0:after,.before\:rotate-0:before,.rotate-0{--tw-rotate:0deg}.data-\[before\=true\]\:rotate-180[data-before=true],.data-\[direction\=ascending\]\:rotate-180[data-direction=ascending],.data-\[open\=true\]\:rotate-180[data-open=true],.rotate-180{--tw-rotate:180deg}.data-\[invisible\=true\]\:scale-0[data-invisible=true],.scale-0{--tw-scale-x:0;--tw-scale-y:0}.data-\[dragging\=true\]\:after\:scale-100[data-dragging=true]:after,.group[data-copied=true] .group-data-\[copied\=true\]\:scale-100,.group[data-selected=true] .group-data-\[selected\=true\]\:scale-100,.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.after\:scale-50:after,.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}@keyframes a{0%{opacity:.2;transform:scale(0)}to{opacity:0;transform:scale(2)}}.animate-drip-expand{animation:.42s linear a}@keyframes b{0%{transform:translateX(-50%) scaleX(.2)}to{transform:translateX(100%) scaleX(1)}}.animate-indeterminate-bar{animation:1.5s cubic-bezier(.65,.815,.735,.395) infinite b}.animate-none{animation:none}.animate-spinner-ease-spin{animation:.8s infinite c}@keyframes c{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.animate-spinner-linear-spin{animation:.8s linear infinite c}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed,.data-\[disabled\=true\]\:cursor-not-allowed[data-disabled=true],.toggleButtonDisabled_TU4i{cursor:not-allowed}.cursor-pointer,.data-\[sortable\=true\]\:cursor-pointer[data-sortable=true],.data-\[visible\=true\]\:cursor-pointer[data-visible=true],.dropdownNavbarItemMobile_tJ5K{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;user-select:none}.resize-none{resize:none}.scroll-py-6{scroll-padding-bottom:1.5rem;scroll-padding-top:1.5rem}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.data-\[orientation\=horizontal\]\:flex-row[data-orientation=horizontal],.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.place-content-center{place-content:center}.data-\[justify\=start\]\:justify-start[data-justify=start],.justify-start{justify-content:flex-start}.data-\[justify\=end\]\:justify-end[data-justify=end],.justify-end{justify-content:flex-end}.data-\[justify\=center\]\:justify-center[data-justify=center],.justify-center{justify-content:center}.justify-between{justify-content:space-between}.\!gap-0{gap:0!important}.\!gap-unit-0{gap:var(--morui-spacing-unit-0)!important}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-unit-2{gap:var(--morui-spacing-unit-2)}.gap-unit-3{gap:var(--morui-spacing-unit-3)}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(0px*(1 - var(--tw-space-x-reverse)));margin-right:calc(0px*var(--tw-space-x-reverse))}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.125rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.125rem*var(--tw-space-x-reverse))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overflow-x-scroll{overflow-x:scroll}.truncate{overflow:hidden}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[calc\(theme\(borderRadius\.large\)\/1\.5\)\]{border-radius:calc(var(--morui-radius-large)/1.5)}.rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.5\)\]{border-radius:calc(var(--morui-radius-medium)*.5)}.rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.6\)\]{border-radius:calc(var(--morui-radius-medium)*.6)}.rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.7\)\]{border-radius:calc(var(--morui-radius-medium)*.7)}.rounded-\[calc\(theme\(borderRadius\.medium\)\/2\)\]{border-radius:calc(var(--morui-radius-medium)/2)}.rounded-\[calc\(theme\(borderRadius\.small\)\/2\)\]{border-radius:calc(var(--morui-radius-small)/2)}.rounded-full{border-radius:9999px}.data-\[has-multiple-rows\=true\]\:rounded-large[data-has-multiple-rows=true],.rounded-large{border-radius:var(--morui-radius-large)}.rounded-md{border-radius:.375rem}.group.is-splitted .group-\[\.is-splitted\]\:rounded-medium,.rounded-medium{border-radius:var(--morui-radius-medium)}.\[\&\:not\(\:first-child\)\:not\(\:last-child\)\]\:rounded-none:not(:first-child):not(:last-child),.\[\&\:not\(\:first-of-type\)\:not\(\:last-of-type\)\]\:rounded-none:not(:first-of-type):not(:last-of-type),.rounded-none{border-radius:0}.rounded-small{border-radius:var(--morui-radius-small)}.dark,.light,:root,[data-theme=dark],[data-theme=light]{--morui-assist-3:213 10% 57%;--morui-brand-high:113 100% 33%;--morui-brand:113 100% 33%;--morui-border:0 0% 60%;--morui-link:214 100% 57%;--morui-warning-foreground:0 0% 0%;--morui-warning:37 91% 55%;--morui-fixed-green:158 58% 50%;--morui-fixed-red:338 98% 54%;--morui-fixed-white:0 0% 100%;--morui-fixed-black:0 0% 0%;--morui-box-shadow:213 20% 9%;--morui-focus:216 100% 50%;--morui-overlay:0 0% 0%;--morui-default:0 0% 20%;--morui-primary:113 100% 33%;--morui-secondary-foreground:0 0% 100%;--morui-success-foreground:0 0% 0%;--morui-success:158 58% 50%;--morui-danger-foreground:0 0% 100%;--morui-danger:338 98% 54%;--morui-green:113 100% 33%;--morui-yellow:36 93% 54%;--morui-purple:249 100% 71%;--morui-desc-1:0 0% 60%;--morui-spacing-unit:4px;--morui-spacing-unit-0:0px;--morui-spacing-unit-1:0.25rem;--morui-spacing-unit-2:0.5rem;--morui-spacing-unit-3:0.75rem;--morui-spacing-unit-4:1rem;--morui-spacing-unit-5:1.25rem;--morui-spacing-unit-6:1.5rem;--morui-spacing-unit-7:1.75rem;--morui-spacing-unit-8:2rem;--morui-spacing-unit-9:2.25rem;--morui-spacing-unit-10:2.5rem;--morui-spacing-unit-11:2.75rem;--morui-spacing-unit-12:3rem;--morui-spacing-unit-13:3.25rem;--morui-spacing-unit-14:3.5rem;--morui-spacing-unit-15:3.75rem;--morui-spacing-unit-16:4rem;--morui-spacing-unit-17:4.25rem;--morui-spacing-unit-18:4.5rem;--morui-spacing-unit-20:5rem;--morui-spacing-unit-24:6rem;--morui-spacing-unit-28:7rem;--morui-spacing-unit-32:8rem;--morui-spacing-unit-36:9rem;--morui-spacing-unit-40:10rem;--morui-spacing-unit-44:11rem;--morui-spacing-unit-48:12rem;--morui-spacing-unit-52:13rem;--morui-spacing-unit-56:14rem;--morui-spacing-unit-60:15rem;--morui-spacing-unit-64:16rem;--morui-spacing-unit-72:18rem;--morui-spacing-unit-80:20rem;--morui-spacing-unit-96:24rem;--morui-spacing-unit-xs:0.5rem;--morui-spacing-unit-sm:0.75rem;--morui-spacing-unit-md:1rem;--morui-spacing-unit-lg:1.375rem;--morui-spacing-unit-xl:2.25rem;--morui-spacing-unit-2xl:3rem;--morui-spacing-unit-3xl:5rem;--morui-spacing-unit-4xl:7.5rem;--morui-spacing-unit-5xl:14rem;--morui-spacing-unit-6xl:18rem;--morui-spacing-unit-7xl:24rem;--morui-spacing-unit-8xl:32rem;--morui-spacing-unit-9xl:40rem;--morui-spacing-unit-3_5:0.875rem;--morui-disabled-opacity:.5;--morui-divider-weight:1px;--morui-font-size-tiny:1rem;--morui-font-size-small:1.25rem;--morui-font-size-medium:1.5rem;--morui-font-size-large:40px;--morui-font-size-huge:56px;--morui-line-height-tiny:1rem;--morui-line-height-small:1.75rem;--morui-line-height-medium:2rem;--morui-line-height-large:65px;--morui-line-height-huge:72px;--morui-radius-small:8px;--morui-radius-medium:12px;--morui-radius-large:24px;--morui-radius-tiny:4px;--morui-border-width-small:1px;--morui-border-width-medium:2px;--morui-border-width-large:3px;--morui-border-width-tiny:1px;--morui-font-weight-hairline:100;--morui-font-weight-light:300;--morui-font-weight-normal:400;--morui-font-weight-medium:500;--morui-font-weight-semibold:600;--morui-font-weight-bold:700;--morui-font-weight-extrabold:800;--morui-font-weight-black:900;--morui-font-weight-tiny:400;--morui-font-weight-small:500;--morui-border-color-default:#999}.\!rounded-l-none{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.\!rounded-r-none{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-b-large{border-bottom-left-radius:var(--morui-radius-large);border-bottom-right-radius:var(--morui-radius-large)}.rounded-b-medium{border-bottom-left-radius:var(--morui-radius-medium);border-bottom-right-radius:var(--morui-radius-medium)}.rounded-b-small{border-bottom-left-radius:var(--morui-radius-small);border-bottom-right-radius:var(--morui-radius-small)}.rounded-t-large{border-top-left-radius:var(--morui-radius-large);border-top-right-radius:var(--morui-radius-large)}.rounded-t-medium{border-top-left-radius:var(--morui-radius-medium);border-top-right-radius:var(--morui-radius-medium)}.rounded-t-small{border-top-left-radius:var(--morui-radius-small);border-top-right-radius:var(--morui-radius-small)}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-3{border-width:3px}.border-medium{border-width:var(--morui-border-width-medium)}.border-small{border-width:var(--morui-border-width-small)}.border-tiny{border-width:var(--morui-border-width-tiny)}.border-b{border-bottom-width:1px}.border-b-medium{border-bottom-width:var(--morui-border-width-medium)}.border-solid{border-style:solid}.border-dotted{border-style:dotted}.border-none,.data-\[menu-open\=true\]\:border-none[data-menu-open=true]{border-style:none}.\!border-danger{--tw-border-opacity:1!important;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))!important}.border-b-white{border-color:hsl(var(--morui-b-white)/var(--morui-b-white-opacity,var(--tw-border-opacity)))}.border-background{--tw-border-opacity:1;border-color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-border-opacity)))}.border-danger{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.border-default,.data-\[hover\=true\]\:border-default[data-hover=true],.hover\:border-default:hover{--tw-border-opacity:1;border-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-border-opacity)))}.border-default-200{--tw-border-opacity:1;border-color:hsl(var(--morui-default-200)/var(--morui-default-200-opacity,var(--tw-border-opacity)))}.border-default-300,.hover\:border-default-300:hover{--tw-border-opacity:1;border-color:hsl(var(--morui-default-300)/var(--morui-default-300-opacity,var(--tw-border-opacity)))}.border-default-600{--tw-border-opacity:1;border-color:hsl(var(--morui-default-600)/var(--morui-default-600-opacity,var(--tw-border-opacity)))}.border-divider{--tw-border-opacity:1;border-color:hsl(var(--morui-divider)/var(--morui-divider-opacity,var(--tw-border-opacity)))}.border-foreground{--tw-border-opacity:1;border-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-border-opacity)))}.border-primary{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.border-secondary{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.border-success{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.border-transparent{border-color:#0000}.border-warning{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.border-l-transparent,.border-x-transparent{border-left-color:#0000}.border-r-transparent,.border-x-transparent{border-right-color:#0000}.border-y-transparent{border-bottom-color:#0000;border-top-color:#0000}.border-b-current{border-bottom-color:initial}.border-b-danger{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.border-b-default{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-border-opacity)))}.border-b-foreground{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-border-opacity)))}.border-b-primary{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.border-b-secondary{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.border-b-success{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.border-b-warning{--tw-border-opacity:1;border-bottom-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.border-b-white{--tw-border-opacity:1;border-bottom-color:rgb(255 255 255/var(--tw-border-opacity))}.border-s-danger{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.border-s-foreground{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-border-opacity)))}.border-s-primary{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.border-s-secondary{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.border-s-success{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.border-s-warning{--tw-border-opacity:1;border-inline-start-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.border-t-transparent{border-top-color:#0000}.\!bg-\[\#21231C\]{--tw-bg-opacity:1!important;background-color:rgb(33 35 28/var(--tw-bg-opacity))!important}.bg-\[\#7D68FF\]{--tw-bg-opacity:1;background-color:rgb(125 104 255/var(--tw-bg-opacity))}.bg-\[\#ffffff1a\]{background-color:#ffffff1a}.bg-background{--tw-bg-opacity:1;background-color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-bg-opacity)))}.bg-background\/10{background-color:hsl(var(--morui-background)/.1)}.bg-background\/70{background-color:hsl(var(--morui-background)/.7)}.bg-background\/80{background-color:hsl(var(--morui-background)/.8)}.bg-content1,.group.is-splitted .group-\[\.is-splitted\]\:bg-content1{--tw-bg-opacity:1;background-color:hsl(var(--morui-content1)/var(--morui-content1-opacity,var(--tw-bg-opacity)))}.bg-content3{--tw-bg-opacity:1;background-color:hsl(var(--morui-content3)/var(--morui-content3-opacity,var(--tw-bg-opacity)))}.bg-current{background-color:currentColor}.bg-danger,.data-\[active\=true\]\:bg-danger[data-active=true],.data-\[hover\=true\]\:bg-danger[data-hover=true],.data-\[in-range\=true\]\:bg-danger[data-in-range=true],.data-\[selected\=true\]\:bg-danger[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)))}.bg-danger-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-danger-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger-50)/var(--morui-danger-50-opacity,var(--tw-bg-opacity)))}.bg-danger\/20,.data-\[hover\=true\]\:bg-danger\/20[data-hover=true]{background-color:hsl(var(--morui-danger)/.2)}.bg-default,.data-\[hover\=true\]\:bg-default[data-hover=true],.data-\[selected\=true\]\:bg-default[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)))}.bg-default-100,.data-\[hover\=true\]\:bg-default-100[data-hover=true],.hover\:bg-default-100:hover{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-100)/var(--morui-default-100-opacity,var(--tw-bg-opacity)))}.\[\&\[data-hover\=true\]\:not\(\[data-active\=true\]\)\]\:bg-default-200[data-hover=true]:not([data-active=true]),.active\:bg-default-200:active,.bg-default-200,.data-\[hover\=true\]\:bg-default-200[data-hover=true],.data-\[in-range\=false\]\:bg-default-200[data-in-range=false]{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-200)/var(--morui-default-200-opacity,var(--tw-bg-opacity)))}.bg-default-300\/50{background-color:hsl(var(--morui-default-300)/.5)}.bg-default-400,.data-\[active\=true\]\:bg-default-400[data-active=true],.group[data-selected=true] .group-data-\[selected\=true\]\:bg-default-400{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-400)/var(--morui-default-400-opacity,var(--tw-bg-opacity)))}.bg-default-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-50)/var(--morui-default-50-opacity,var(--tw-bg-opacity)))}.bg-default-500{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-500)/var(--morui-default-500-opacity,var(--tw-bg-opacity)))}.bg-default\/40,.data-\[hover\=true\]\:bg-default\/40[data-hover=true]{background-color:hsl(var(--morui-default)/.4)}.bg-divider{--tw-bg-opacity:1;background-color:hsl(var(--morui-divider)/var(--morui-divider-opacity,var(--tw-bg-opacity)))}.bg-foreground,.data-\[in-range\=true\]\:bg-foreground[data-in-range=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-bg-opacity)))}.bg-foreground\/10{background-color:hsl(var(--morui-foreground)/.1)}.bg-overlay\/30{background-color:hsl(var(--morui-overlay)/.3)}.bg-overlay\/50{background-color:hsl(var(--morui-overlay)/.5)}.bg-primary,.data-\[active\=true\]\:bg-primary[data-active=true],.data-\[hover\=true\]\:bg-primary[data-hover=true],.data-\[in-range\=true\]\:bg-primary[data-in-range=true],.data-\[selected\=true\]\:bg-primary[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)))}.bg-primary-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-primary-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary-50)/var(--morui-primary-50-opacity,var(--tw-bg-opacity)))}.bg-primary\/20,.data-\[hover\=true\]\:bg-primary\/20[data-hover=true]{background-color:hsl(var(--morui-primary)/.2)}.bg-secondary,.data-\[active\=true\]\:bg-secondary[data-active=true],.data-\[hover\=true\]\:bg-secondary[data-hover=true],.data-\[in-range\=true\]\:bg-secondary[data-in-range=true],.data-\[selected\=true\]\:bg-secondary[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)))}.bg-secondary-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-secondary-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary-50)/var(--morui-secondary-50-opacity,var(--tw-bg-opacity)))}.bg-secondary\/20,.data-\[hover\=true\]\:bg-secondary\/20[data-hover=true]{background-color:hsl(var(--morui-secondary)/.2)}.bg-success,.data-\[active\=true\]\:bg-success[data-active=true],.data-\[hover\=true\]\:bg-success[data-hover=true],.data-\[in-range\=true\]\:bg-success[data-in-range=true],.data-\[selected\=true\]\:bg-success[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)))}.bg-success-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-success-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-success-50)/var(--morui-success-50-opacity,var(--tw-bg-opacity)))}.bg-success\/20,.data-\[hover\=true\]\:bg-success\/20[data-hover=true]{background-color:hsl(var(--morui-success)/.2)}.bg-transparent,.data-\[hover\=true\]\:bg-transparent[data-hover=true]{background-color:initial}.bg-warning,.data-\[active\=true\]\:bg-warning[data-active=true],.data-\[hover\=true\]\:bg-warning[data-hover=true],.data-\[in-range\=true\]\:bg-warning[data-in-range=true],.data-\[selected\=true\]\:bg-warning[data-selected=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)))}.bg-warning-50,.group[data-focus=true] .group-data-\[focus\=true\]\:bg-warning-50{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning-50)/var(--morui-warning-50-opacity,var(--tw-bg-opacity)))}.bg-warning\/20,.data-\[hover\=true\]\:bg-warning\/20[data-hover=true]{background-color:hsl(var(--morui-warning)/.2)}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-blue-gradient{background-image:linear-gradient(90deg,#4f60ff -7.22%,#8762f3 131.45%)}.bg-btn-bg{background-image:linear-gradient(269deg,#bffd3e -10.85%,#40f0c1 98.88%)}.bg-card-bg{background-image:linear-gradient(103deg,#47f1bb 6.5%,#81f77f 95.85%)}.bg-circle-bg{background-image:linear-gradient(270deg,#73f58f,#40f0c1)}.bg-gray-gradient{background-image:linear-gradient(139deg,#1f2822 .81%,#0e1411 97.62%)}.bg-green-gradient{background-image:linear-gradient(84deg,#40f0c1 10.08%,#bffd3e 161.38%)}.bg-green2-gradient{background-image:linear-gradient(85deg,#40f0c1 22.5%,#bffd3e 236.7%)}.bg-stripe-gradient{background-image:linear-gradient(45deg,#0000001a 25%,#0000 0,#0000 50%,#0000001a 0,#0000001a 75%,#0000 0,#0000)}.bg-\[length\:1\.25rem_1\.25rem\]{background-size:1.25rem 1.25rem}.stroke-current{stroke:currentColor}.stroke-default-300\/50{stroke:hsl(var(--morui-default-300)/.5)}.object-cover{object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.group.is-splitted .group-\[\.is-splitted\]\:px-4,.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-unit-0{padding-left:var(--morui-spacing-unit-0);padding-right:var(--morui-spacing-unit-0)}.px-unit-3{padding-left:var(--morui-spacing-unit-3);padding-right:var(--morui-spacing-unit-3)}.px-unit-4{padding-left:var(--morui-spacing-unit-4);padding-right:var(--morui-spacing-unit-4)}.px-unit-6{padding-left:var(--morui-spacing-unit-6);padding-right:var(--morui-spacing-unit-6)}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.data-\[has-title\=true\]\:pt-1[data-has-title=true],.py-1{padding-top:.25rem}.py-1{padding-bottom:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-8{padding-bottom:2rem}.pe-2{padding-inline-end:.5rem}.pl-0,:not(.containsTaskList_uDxK>li)>.containsTaskList_uDxK{padding-left:0}.pl-0\.5{padding-left:.125rem}.pl-1{padding-left:.25rem}.pr-0\.5{padding-right:.125rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-6{padding-right:1.5rem}.group[data-has-helper=true] .group-data-\[has-helper\=true\]\:pt-2,.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-denim{font-family:Denim INK,ui-sans-serif}.text-\[0\.55rem\]{font-size:.55rem}.text-\[0\.5rem\]{font-size:.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-\[14px\]{font-size:14px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[48px\]{font-size:48px}.text-\[59px\]{font-size:59px}.text-large{font-size:var(--morui-font-size-large);line-height:var(--morui-line-height-large)}.text-medium{font-size:var(--morui-font-size-medium);line-height:var(--morui-line-height-medium)}.text-small{font-size:var(--morui-font-size-small);line-height:var(--morui-line-height-small)}.text-tiny{font-size:var(--morui-font-size-tiny);line-height:var(--morui-line-height-tiny)}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:var(--morui-font-weight-medium)}.font-normal{font-weight:400}.data-\[active\=true\]\:font-semibold[data-active=true],.font-semibold{font-weight:600}.leading-\[59px\]{line-height:59px}.leading-\[70px\]{line-height:70px}.\!text-danger{--tw-text-opacity:1!important;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))!important}.text-\[\#AEDFE0\]{--tw-text-opacity:1;color:rgb(174 223 224/var(--tw-text-opacity))}.text-\[\#FFFFFF0a\]{color:#ffffff0a}.text-\[\#FFFFFF66\]{color:#fff6}.text-\[\#FFF\],.text-\[\#fff\],.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-b-white{--tw-text-opacity:1;color:hsl(var(--morui-b-white)/var(--morui-b-white-opacity,var(--tw-text-opacity)))}.text-background{--tw-text-opacity:1;color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-text-opacity)))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.group:hover .group-hover\:text-current,.text-current{color:currentColor}.text-danger{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.text-danger-300{--tw-text-opacity:1;color:hsl(var(--morui-danger-300)/var(--morui-danger-300-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-danger-foreground[data-active=true],.data-\[hover\=true\]\:text-danger-foreground[data-hover=true],.data-\[selected\=true\]\:text-danger-foreground[data-selected=true],.text-danger-foreground{--tw-text-opacity:1;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)))}.text-danger\/80{color:hsl(var(--morui-danger)/.8)}.text-default-400{--tw-text-opacity:1;color:hsl(var(--morui-default-400)/var(--morui-default-400-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-default-500[data-hover=true],.text-default-500{--tw-text-opacity:1;color:hsl(var(--morui-default-500)/var(--morui-default-500-opacity,var(--tw-text-opacity)))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:text-default-600,.group[data-filled=true] .group-data-\[filled\=true\]\:text-default-600,.text-default-600{--tw-text-opacity:1;color:hsl(var(--morui-default-600)/var(--morui-default-600-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-default-foreground[data-active=true],.data-\[hover\=true\]\:text-default-foreground[data-hover=true],.data-\[selected\=true\]\:text-default-foreground[data-selected=true],.text-default-foreground{--tw-text-opacity:1;color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-text-opacity)))}.text-desc-1{--tw-text-opacity:1;color:hsl(var(--morui-desc-1)/var(--morui-desc-1-opacity,var(--tw-text-opacity)))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:text-foreground,.group[data-filled=true] .group-data-\[filled\=true\]\:text-foreground,.group[data-has-value=true] .group-data-\[has-value\=true\]\:text-foreground,.group[data-selected=true] .group-data-\[selected\=true\]\:text-foreground,.text-foreground{--tw-text-opacity:1;color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-foreground-400[data-hover=true],.text-foreground-400{--tw-text-opacity:1;color:hsl(var(--morui-foreground-400)/var(--morui-foreground-400-opacity,var(--tw-text-opacity)))}.text-foreground-500{--tw-text-opacity:1;color:hsl(var(--morui-foreground-500)/var(--morui-foreground-500-opacity,var(--tw-text-opacity)))}.text-foreground-600{--tw-text-opacity:1;color:hsl(var(--morui-foreground-600)/var(--morui-foreground-600-opacity,var(--tw-text-opacity)))}.text-foreground\/50{color:hsl(var(--morui-foreground)/.5)}.text-inherit{color:inherit}.text-primary{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-primary-foreground[data-active=true],.data-\[hover\=true\]\:text-primary-foreground[data-hover=true],.data-\[selected\=true\]\:text-primary-foreground[data-selected=true],.text-primary-foreground{--tw-text-opacity:1;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)))}.text-primary\/80{color:hsl(var(--morui-primary)/.8)}.text-secondary{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-secondary-foreground[data-active=true],.data-\[hover\=true\]\:text-secondary-foreground[data-hover=true],.data-\[selected\=true\]\:text-secondary-foreground[data-selected=true],.hover\:text-secondary-foreground:hover,.text-secondary-foreground{--tw-text-opacity:1;color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,var(--tw-text-opacity)))}.text-secondary\/80{color:hsl(var(--morui-secondary)/.8)}.data-\[hover\=true\]\:text-success[data-hover=true],.text-success{--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.text-success-600{--tw-text-opacity:1;color:hsl(var(--morui-success-600)/var(--morui-success-600-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-success-foreground[data-active=true],.data-\[hover\=true\]\:text-success-foreground[data-hover=true],.data-\[selected\=true\]\:text-success-foreground[data-selected=true],.text-success-foreground{--tw-text-opacity:1;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)))}.text-success\/80{color:hsl(var(--morui-success)/.8)}.data-\[hover\=true\]\:text-warning[data-hover=true],.text-warning{--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.text-warning-600{--tw-text-opacity:1;color:hsl(var(--morui-warning-600)/var(--morui-warning-600-opacity,var(--tw-text-opacity)))}.data-\[active\=true\]\:text-warning-foreground[data-active=true],.data-\[hover\=true\]\:text-warning-foreground[data-hover=true],.data-\[selected\=true\]\:text-warning-foreground[data-selected=true],.text-warning-foreground{--tw-text-opacity:1;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)))}.text-warning\/80{color:hsl(var(--morui-warning)/.8)}.active\:underline:active,.focus\:underline:focus,.hover\:underline:hover,.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.data-\[invisible\=true\]\:opacity-0[data-invisible=true],.group[data-copied=true] .group-data-\[copied\=true\]\:opacity-0,.group[data-selected=true] .group-data-\[selected\=true\]\:opacity-0,.opacity-0{opacity:0}.data-\[in-range\=true\]\:opacity-100[data-in-range=true],.data-\[loaded\=true\]\:opacity-100[data-loaded=true],.data-\[moving\]\:opacity-100[data-moving],.data-\[visible\=true\]\:opacity-100[data-visible=true],.footerLogoLink_DDai:hover,.group[data-copied=true] .group-data-\[copied\=true\]\:opacity-100,.group[data-hover=true] .group-data-\[hover\=true\]\:opacity-100,.group[data-loaded=true] .group-data-\[loaded\=true\]\:opacity-100,.group[data-selected=true] .group-data-\[selected\=true\]\:opacity-100,.hash-link:focus,.hover\:opacity-100:hover,.opacity-100,:hover>.hash-link{opacity:1}.data-\[disabled\=true\]\:opacity-30[data-disabled=true],.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-\[value\]{opacity:value}.active\:opacity-disabled:active,.data-\[hover-unselected\=true\]\:opacity-disabled[data-hover-unselected=true],.opacity-disabled{opacity:var(--morui-disabled-opacity)}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.after\:shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\]:after,.shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\]{--tw-shadow:0 1px 0px 0 #0000000d;--tw-shadow-colored:0 1px 0px 0 var(--tw-shadow-color)}.shadow-large{--tw-shadow:var(--morui-box-shadow-large);--tw-shadow-colored:var(--morui-box-shadow-large)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.group.is-splitted .group-\[\.is-splitted\]\:shadow-medium,.shadow-medium{--tw-shadow:var(--morui-box-shadow-medium);--tw-shadow-colored:var(--morui-box-shadow-medium)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.\[\&\>tr\]\:first\:shadow-small:first-child>tr,.shadow-small{--tw-shadow:var(--morui-box-shadow-small);--tw-shadow-colored:var(--morui-box-shadow-small)}.shadow-black\/5{--tw-shadow-color:#0000000d;--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-danger\/40[data-active=true],.shadow-danger\/40{--tw-shadow-color:hsl(var(--morui-danger)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-default\/50[data-active=true],.data-\[hover\=true\]\:shadow-default\/50[data-hover=true],.shadow-default\/50{--tw-shadow-color:hsl(var(--morui-default)/0.5);--tw-shadow:var(--tw-shadow-colored)}.shadow-foreground\/40{--tw-shadow-color:hsl(var(--morui-foreground)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-primary\/40[data-active=true],.shadow-primary\/40{--tw-shadow-color:hsl(var(--morui-primary)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-secondary\/40[data-active=true],.shadow-secondary\/40{--tw-shadow-color:hsl(var(--morui-secondary)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-success\/40[data-active=true],.shadow-success\/40{--tw-shadow-color:hsl(var(--morui-success)/0.4);--tw-shadow:var(--tw-shadow-colored)}.data-\[active\=true\]\:shadow-warning\/40[data-active=true],.shadow-warning\/40{--tw-shadow-color:hsl(var(--morui-warning)/0.4);--tw-shadow:var(--tw-shadow-colored)}.after\:shadow-small:after,.before\:shadow-small:before{--tw-shadow:var(--morui-box-shadow-small);--tw-shadow-colored:var(--morui-box-shadow-small)}.\!outline-none{outline:#0000 solid 2px!important;outline-offset:2px!important}.outline-none{outline:#0000 solid 2px;outline-offset:2px}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-2,.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-background{--tw-ring-color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-ring-opacity)))}.ring-danger{--tw-ring-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-ring-opacity)))}.ring-default{--tw-ring-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-ring-opacity)))}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-focus,.ring-focus{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--morui-focus)/var(--morui-focus-opacity,var(--tw-ring-opacity)))}.ring-primary{--tw-ring-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-ring-opacity)))}.ring-secondary{--tw-ring-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-ring-opacity)))}.ring-success{--tw-ring-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-ring-opacity)))}.ring-transparent{--tw-ring-color:#0000}.ring-warning{--tw-ring-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-ring-opacity)))}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-offset-2,.ring-offset-2{--tw-ring-offset-width:2px}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-offset-background,.ring-offset-background{--tw-ring-offset-color:hsl(var(--morui-background)/var(--morui-background-opacity,1))}.blur{--tw-blur:blur(8px)}.blur,.blur-lg,.filter,.saturate-150{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-lg{--tw-blur:blur(16px)}.saturate-150{--tw-saturate:saturate(1.5)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-lg,.backdrop-blur-md,.backdrop-blur-sm,.backdrop-blur-xl,.backdrop-filter,.backdrop-opacity-disabled,.backdrop-saturate-150{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-lg{--tw-backdrop-blur:blur(16px)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.backdrop-opacity-disabled{--tw-backdrop-opacity:opacity(var(--morui-disabled-opacity))}.backdrop-saturate-150{--tw-backdrop-saturate:saturate(1.5)}.\!transition-none{transition-property:none!important}.transition-\[transform\2c color\2c left\2c opacity\]{transition-property:transform,color,left,opacity}.transition-\[transform\2c color\2c left\2c opacity\],.transition-all,.transition-colors{transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-none{transition-property:none}.\!duration-100{transition-duration:.1s!important}.\!duration-150{transition-duration:.15s!important}.\!duration-200{transition-duration:.2s!important}.\!duration-300{transition-duration:.3s!important}.\!duration-500{transition-duration:.5s!important}.duration-150{transition-duration:.15s}.\!ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.\!ease-soft-spring{transition-timing-function:cubic-bezier(.155,1.105,.295,1.12)!important}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.data-\[moving\=true\]\:transition-transform[data-moving=true],.transition,.transition-all,.transition-background,.transition-colors-opacity,.transition-height,.transition-left,.transition-opacity,.transition-shadow,.transition-size,.transition-transform,.transition-transform-background,.transition-transform-colors,.transition-transform-colors-opacity,.transition-transform-opacity,.transition-width{transition-duration:.25s;transition-timing-function:ease}.will-change-auto{will-change:auto}.will-change-transform{will-change:transform}.light,:root,[data-theme=light]{--morui-title-1:72 3% 39%;--morui-title-2:0 0% 35%;--morui-reminder-4:218 11% 81%;--morui-bg:0 0% 100%;--morui-bg-assist:216 22% 95%;--morui-divider:220 13% 95%;--morui-tag:166 65% 91%;--morui-tag-bg:220 23% 97%;--morui-tag-hover:220 17% 14%;--morui-frontend:0 0% 100%;--morui-card:0 0% 96%;--morui-b-black:0 0% 100%;--morui-b-white:0 0% 0%;--morui-line:0 0% 92%;--morui-warning-light:25 89% 50%;--morui-warning-50:55 92% 95%;--morui-warning-100:37 91% 91%;--morui-warning-200:37 91% 82%;--morui-warning-300:37 91% 73%;--morui-warning-400:37 91% 64%;--morui-warning-500:37 91% 55%;--morui-warning-600:37 74% 44%;--morui-warning-700:37 74% 33%;--morui-warning-800:37 75% 22%;--morui-warning-900:37 75% 11%;--morui-btn-bg-disable:222 13% 84%;--morui-btn-text-disable:200 43% 99%;--morui-icon-fill:212 11% 47%;--morui-icon-bg:210 16% 13%;--morui-background:0 0% 100%;--morui-foreground-50:0 0% 98%;--morui-foreground-100:240 5% 96%;--morui-foreground-200:240 6% 90%;--morui-foreground-300:216 22% 95%;--morui-foreground-400:240 5% 65%;--morui-foreground-500:240 4% 46%;--morui-foreground-600:0 0% 40%;--morui-foreground-700:217 20% 17%;--morui-foreground-800:240 4% 16%;--morui-foreground-900:240 6% 10%;--morui-foreground:202 24% 9%;--morui-content1:0 0% 100%;--morui-content1-foreground:202 24% 9%;--morui-content2:240 5% 96%;--morui-content2-foreground:240 4% 16%;--morui-content3:240 6% 90%;--morui-content3-foreground:217 20% 17%;--morui-content4:216 22% 95%;--morui-content4-foreground:0 0% 40%;--morui-default-50:0 0% 98%;--morui-default-100:240 5% 96%;--morui-default-200:240 6% 90%;--morui-default-300:216 22% 95%;--morui-default-400:240 5% 65%;--morui-default-500:0 0% 10%;--morui-default-600:0 0% 60%;--morui-default-700:217 20% 17%;--morui-default-800:240 4% 16%;--morui-default-900:240 6% 10%;--morui-default-foreground:0 0% 0%;--morui-primary-50:213 92% 95%;--morui-primary-100:212 92% 90%;--morui-primary-200:212 92% 79%;--morui-primary-300:212 92% 69%;--morui-primary-400:212 92% 58%;--morui-primary-500:216 100% 50%;--morui-primary-600:223 99% 47%;--morui-primary-700:212 100% 29%;--morui-primary-800:212 100% 19%;--morui-primary-900:212 100% 10%;--morui-primary-foreground:0 0% 100%;--morui-secondary-50:270 62% 95%;--morui-secondary-100:270 59% 89%;--morui-secondary-200:270 59% 79%;--morui-secondary-300:270 59% 68%;--morui-secondary-400:270 59% 58%;--morui-secondary-500:270 67% 47%;--morui-secondary-600:270 67% 38%;--morui-secondary-700:270 67% 28%;--morui-secondary-800:270 67% 19%;--morui-secondary-900:270 67% 9%;--morui-secondary:270 67% 47%;--morui-success-50:147 64% 95%;--morui-success-100:146 61% 89%;--morui-success-200:146 62% 77%;--morui-success-300:146 63% 66%;--morui-success-400:146 62% 55%;--morui-success-500:158 58% 50%;--morui-success-600:146 80% 35%;--morui-success-700:146 79% 26%;--morui-success-800:146 80% 17%;--morui-success-900:146 78% 9%;--morui-danger-50:339 92% 95%;--morui-danger-100:340 92% 90%;--morui-danger-200:339 90% 80%;--morui-danger-300:339 91% 71%;--morui-danger-400:339 90% 61%;--morui-danger-500:338 98% 54%;--morui-danger-600:339 87% 41%;--morui-danger-700:339 86% 31%;--morui-danger-800:339 87% 20%;--morui-danger-900:340 85% 10%;--morui-title:0 0% 100%;--morui-red:349 90% 60%;--morui-red-aid:350 90% 92%;--morui-green-aid:166 65% 91%;--morui-yellow-aid:36 91% 91%;--morui-purple-aid:248 100% 94%;--morui-title-3:0 0% 10%;--morui-desc-2:0 0% 85%;--morui-border-card:0 0% 100%;--morui-border-0:0 0% 60%;--morui-border-1:0 0% 75%;--morui-border-2:0 0% 92%;--morui-border-3:0 0% 35%;--morui-bg-img:0 0% 75%;--morui-box-shadow-small:0px 3px 6px 0px #0003;--morui-box-shadow-medium:0px 0px 15px 0px #00000008,0px 2px 30px 0px #00000014,0px 0px 1px 0px #0000004d;--morui-box-shadow-large:0px 0px 30px 0px #0000000a,0px 30px 60px 0px #0000001f,0px 0px 1px 0px #0000004d;--morui-hover-opacity:.8;color-scheme:light}.dark,[data-theme=dark]{--morui-title-1:90 1% 74%;--morui-title-2:0 0% 80%;--morui-reminder-4:216 15% 36%;--morui-bg:0 0% 0%;--morui-bg-assist:0 0% 20%;--morui-divider:0 0% 40%;--morui-tag:145 42% 10%;--morui-tag-bg:219 20% 19%;--morui-tag-hover:220 23% 97%;--morui-frontend:220 18% 10%;--morui-card:0 0% 10%;--morui-b-black:0 0% 0%;--morui-b-white:0 0% 100%;--morui-line:0 0% 20%;--morui-warning-light:25 89% 62%;--morui-warning-50:37 75% 11%;--morui-warning-100:37 75% 22%;--morui-warning-200:37 74% 33%;--morui-warning-300:37 74% 44%;--morui-warning-400:37 91% 55%;--morui-warning-500:37 91% 64%;--morui-warning-600:37 91% 73%;--morui-warning-700:37 91% 82%;--morui-warning-800:37 91% 91%;--morui-warning-900:55 92% 95%;--morui-btn-bg-disable:215 34% 23%;--morui-btn-text-disable:212 9% 62%;--morui-icon-fill:220 10% 69%;--morui-icon-bg:200 43% 99%;--morui-background:0 0% 0%;--morui-foreground-50:240 6% 10%;--morui-foreground-100:240 4% 16%;--morui-foreground-200:217 20% 17%;--morui-foreground-300:0 0% 40%;--morui-foreground-400:240 4% 46%;--morui-foreground-500:240 5% 65%;--morui-foreground-600:216 22% 95%;--morui-foreground-700:240 6% 90%;--morui-foreground-800:240 5% 96%;--morui-foreground-900:0 0% 98%;--morui-foreground:210 6% 93%;--morui-content1:240 6% 10%;--morui-content1-foreground:0 0% 98%;--morui-content2:240 4% 16%;--morui-content2-foreground:240 5% 96%;--morui-content3:217 20% 17%;--morui-content3-foreground:240 6% 90%;--morui-content4:0 0% 40%;--morui-content4-foreground:216 22% 95%;--morui-default-50:240 6% 10%;--morui-default-100:240 4% 16%;--morui-default-200:217 20% 17%;--morui-default-300:0 0% 40%;--morui-default-400:240 4% 46%;--morui-default-500:0 0% 80%;--morui-default-600:0 0% 80%;--morui-default-700:240 6% 90%;--morui-default-800:240 5% 96%;--morui-default-900:0 0% 98%;--morui-default-foreground:0 0% 100%;--morui-primary-50:212 100% 10%;--morui-primary-100:212 100% 19%;--morui-primary-200:212 100% 29%;--morui-primary-300:223 99% 47%;--morui-primary-400:216 100% 50%;--morui-primary-500:212 92% 58%;--morui-primary-600:212 92% 69%;--morui-primary-700:212 92% 79%;--morui-primary-800:212 92% 90%;--morui-primary-900:213 92% 95%;--morui-primary-foreground:0 0% 0%;--morui-secondary-50:270 67% 9%;--morui-secondary-100:270 67% 19%;--morui-secondary-200:270 67% 28%;--morui-secondary-300:270 67% 38%;--morui-secondary-400:270 67% 47%;--morui-secondary-500:270 59% 58%;--morui-secondary-600:270 59% 68%;--morui-secondary-700:270 59% 79%;--morui-secondary-800:270 59% 89%;--morui-secondary-900:270 62% 95%;--morui-secondary:270 59% 58%;--morui-success-50:146 78% 9%;--morui-success-100:146 80% 17%;--morui-success-200:146 79% 26%;--morui-success-300:146 80% 35%;--morui-success-400:158 58% 50%;--morui-success-500:146 62% 55%;--morui-success-600:146 63% 66%;--morui-success-700:146 62% 77%;--morui-success-800:146 61% 89%;--morui-success-900:147 64% 95%;--morui-danger-50:340 85% 10%;--morui-danger-100:339 87% 20%;--morui-danger-200:339 86% 31%;--morui-danger-300:339 87% 41%;--morui-danger-400:338 98% 54%;--morui-danger-500:339 90% 61%;--morui-danger-600:339 91% 71%;--morui-danger-700:339 90% 80%;--morui-danger-800:340 92% 90%;--morui-danger-900:339 92% 95%;--morui-title:0 0% 0%;--morui-red:349 90% 56%;--morui-red-aid:349 59% 15%;--morui-green-aid:141 67% 14%;--morui-yellow-aid:36 79% 13%;--morui-purple-aid:247 42% 16%;--morui-title-3:0 0% 80%;--morui-desc-2:0 0% 30%;--morui-border-card:0 0% 60%;--morui-border-0:0 0% 20%;--morui-border-1:0 0% 40%;--morui-border-2:0 0% 20%;--morui-border-3:0 0% 80%;--morui-bg-img:0 0% 20%;--morui-nav:0 0% 82%;--morui-nav-hover:0 0% 100%;--morui-sub-nav:160 23% 97%;--morui-sub-nav-hover:0 0% 0%;--morui-sub-nav-bg:167 18% 10%;--morui-sub-nav-item-bg:164 85% 60%;--morui-desc-4:0 0% 60%;--morui-desc-3:0 0% 80%;--morui-content:0 0% 82%;--morui-icon-bg-for-green:0 0% 21%;--morui-text-color-for-green:0 0% 0%;--morui-base-color:163 100% 62%;--morui-box-shadow-small:0px 0px 5px 0px #0000000d,0px 2px 10px 0px #0003,inset 0px 0px 1px 0px #ffffff26;--morui-box-shadow-medium:0px 0px 15px 0px #0000000f,0px 2px 30px 0px #00000038,inset 0px 0px 1px 0px #ffffff26;--morui-box-shadow-large:0px 0px 30px 0px #00000012,0px 30px 60px 0px #00000042,inset 0px 0px 1px 0px #ffffff26;--morui-hover-opacity:.9;color-scheme:dark}.leading-inherit{line-height:inherit}.bg-img-inherit{background-image:inherit}.bg-clip-inherit{background-clip:inherit}.text-fill-inherit{-webkit-text-fill-color:inherit}.transition-all{transition-property:all}.transition-background{transition-property:background}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter}.data-\[hover\=true\]\:transition-colors[data-hover=true],.data-\[sortable\=true\]\:transition-colors[data-sortable=true],.transition-colors{transition-duration:.25s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:ease}.transition-opacity{transition-property:opacity}.transition-colors-opacity{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity}.transition-width{transition-property:width}.transition-height{transition-property:height}.transition-size{transition-property:width,height}.transition-left{transition-property:left}.transition-shadow{transition-property:box-shadow}.data-\[moving\=true\]\:transition-transform[data-moving=true],.transition-transform{transition-property:transform}.transition-transform-opacity{transition-property:transform,opacity}.transition-transform-background{transition-property:transform,background}.transition-transform-colors{transition-property:transform,color,background,background-color,border-color,text-decoration-color,fill,stroke}.transition-transform-colors-opacity{transition-property:transform,color,background,background-color,border-color,text-decoration-color,fill,stroke,opacity}.data-\[hide-scroll\=true\]\:scrollbar-hide[data-hide-scroll=true],.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-default{-ms-overflow-style:auto;scrollbar-width:auto}.scrollbar-default::-webkit-scrollbar{display:block}.\[--scale-enter\:100\%\]{--scale-enter:100%}.\[--scale-exit\:100\%\]{--scale-exit:100%}.\[--slide-enter\:0px\]{--slide-enter:0px}.\[--slide-exit\:80px\]{--slide-exit:80px}html body{font-family:InterDisplay\,Inter Variable}[data-theme=light]{--ifm-heading-color:#21231c;--ifm-color-gray-700:#21231c;--ifm-color-emphasis-600:#fff;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--ifm-footer-background-color:#fff;--ifm-color-emphasis-200:"#000000",--ifm-menu-color:"#21231C",--ifm-container-width-xl:1200px;--ifm-bg-color:#fff;--ifm-feature-h3-color:#1a1a1a;--ifm-feature-p-color:#595959;--border-hover-shadow:#0016091a}[data-theme=light] .navbar-sidebar__brand{background-color:#fff}[data-theme=dark]{--ifm-heading-color:#fff;--ifm-color-gray-300:#fff;--ifm-color-emphasis-600:#000;--docusaurus-highlighted-code-line-bg:#0000004d;--ifm-footer-background-color:#0a080f;--ifm-color-emphasis-200:"#fff",--ifm-menu-color:"#FFF",--ifm-container-width-xl:1200px;--ifm-bg-color:#000;--ifm-feature-h3-color:#f7f7f7;--ifm-feature-p-color:#ccc;--border-hover-shadow:#9bffc54d}.menu__link--active:not(.menu__link--sublist),.menu__link:hover,[data-theme=dark] .menu__list-item--collapsed .menu__link:hover,[data-theme=light] .menu__list-item--collapsed .menu__link:hover{color:#fff}.navbar.navbar--fixed-top{border-bottom:1px solid #dededd}[data-theme=dark] .navbar.navbar--fixed-top{border-bottom:1px solid #21231c}.menu__link.menu__link--sublist.menu__link--sublist-caret{font-size:16px;font-weight:600;margin-bottom:4px;margin-top:4px;padding-bottom:6px;padding-top:6px}.theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link,.theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link,.theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link{display:block;font-size:16px;font-weight:600;margin-bottom:4px;margin-top:4px;padding-bottom:6px;padding-top:6px}.theme-doc-sidebar-item-link-level-1.menu__list-item .menu__link{display:block;font-size:20px;font-weight:600;margin-bottom:4px;margin-top:4px;padding-bottom:6px;padding-top:6px}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.75}.footer__link-item,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link.menu__link--active,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link:hover,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible .menu__link:hover,[data-theme=dark] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link.menu__link--active,[data-theme=dark] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link:hover,[data-theme=dark] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link.menu__link--active,[data-theme=dark] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link:hover,[data-theme=dark] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link.menu__link--active,[data-theme=dark] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link.menu__link--active,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link.menu__link--active,[data-theme=light] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link.menu__link--active,[data-theme=light] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link:hover,[data-theme=light] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link.menu__link--active,[data-theme=light] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link:hover{color:#fff}[data-theme=dark] .menu__link.menu__link--sublist.menu__link--sublist-caret,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link,[data-theme=dark] .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible,[data-theme=dark] .theme-doc-sidebar-item-link-level-2.menu__list-item,[data-theme=dark] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link,[data-theme=dark] .theme-doc-sidebar-item-link-level-3.menu__list-item,[data-theme=dark] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link,[data-theme=dark] .theme-doc-sidebar-item-link-level-4.menu__list-item,[data-theme=dark] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link{color:#bcbdbb}[data-theme=light] .menu__link.menu__link--sublist.menu__link--sublist-caret,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item--collapsed .menu__link,[data-theme=light] .theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible,[data-theme=light] .theme-doc-sidebar-item-link-level-2.menu__list-item,[data-theme=light] .theme-doc-sidebar-item-link-level-2.menu__list-item .menu__link,[data-theme=light] .theme-doc-sidebar-item-link-level-3.menu__list-item,[data-theme=light] .theme-doc-sidebar-item-link-level-3.menu__list-item .menu__link,[data-theme=light] .theme-doc-sidebar-item-link-level-4.menu__list-item,[data-theme=light] .theme-doc-sidebar-item-link-level-4.menu__list-item .menu__link{color:#646560}.footer__col:first-child,.footer__col:nth-child(2){flex:3}.footer__bottom{margin-top:48px}[data-theme=light] #__docusaurus{background-color:var(--ifm-bg-color)}[data-theme=light] .navbar{background:#fff;box-shadow:none}[data-theme=light] .footer{background-color:#fff!important;box-shadow:0 -10px 10px 0 #00000005!important}[data-theme=light] .theme-doc-sidebar-container{flex-shrink:0;gap:10px}[data-theme=light] .docSidebarContainer_node_modules-\@docusaurus-theme-classic-lib-theme-DocPage-Layout-Sidebar-styles-module,[data-theme=light] .theme-doc-sidebar-container{background-color:#fff!important;border-right:none!important}[data-theme=dark] .darkToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module,[data-theme=light] .lightToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module{cursor:pointer!important;display:none!important}[data-theme=dark] .lightToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module,[data-theme=light] .darkToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module{cursor:pointer!important;display:block!important}[data-theme=light] .clean-btn.navbar-sidebar__close svg,[data-theme=light] .darkToggleIcon_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module svg{color:#000!important}[data-theme=dark] #__docusaurus{background-color:#000}[data-theme=dark] .navbar{background-color:#0a080fe6!important;box-shadow:none}.hero-banner,[data-theme=dark] .footer{background-color:#0a080f}[data-theme=dark] .theme-doc-sidebar-container{background-color:#0a080f;border-right:none!important}.menu__link .menu__link--sublist.menu__link--sublist-caret,.theme-doc-sidebar-item-link-level-2{font-size:16px;font-weight:600}.menu__caret:before,.menu__link--sublist-caret:after{height:13px;width:13px}[data-theme=dark] button.clean-btn svg:first-child,[data-theme=light] button.clean-btn[aria-live=polite] svg:nth-child(2){display:block!important}[data-theme=dark] button.clean-btn svg:nth-child(2),[data-theme=light] button.clean-btn[aria-live=polite] svg:first-child{display:none!important}.navbar__logo img{height:32px}[data-theme=dark] .morph-logo,[data-theme=light] .morph-logo{background-image:url(/assets/images/LogoMorphWhite-summary-dc9797d7eb85ed22d18a1cbda84342e5.svg);background-size:160px 25px;margin-left:-24px}.hero-banner{align-items:center;justify-content:center;margin:0;overflow:hidden;padding:0;position:relative;text-align:center}.header-bg{background-image:url(/assets/images/bg-5badadc4ca0a26b003becdf097ddbf12.svg);background-position:50%;background-repeat:no-repeat;background-size:auto 100%;height:110px;margin-top:-10px;padding-top:0}.features{padding-bottom:50px}.feature-a{border:1px solid rgba(33,35,30,.102);border-radius:0;color:var(--ifm-heading-color)!important;display:flex;text-decoration:none!important}.feature-a:hover{background:var(--ifm-footer-background-color);border:1px solid var(--ifm-color-primary);border-radius:0;box-shadow:0 0 40px 0 var(--border-hover-shadow)}.after\:shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\]:after,.after\:shadow-small:after,.before\:shadow-small:before,.data-\[active\=true\]\:shadow-md[data-active=true],.data-\[hover\=true\]\:shadow-lg[data-hover=true],.group.is-splitted .group-\[\.is-splitted\]\:shadow-medium{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[data-theme=dark] .feature-a{border:1px solid #373933}.feature-h3{color:var(--ifm-feature-h3-color);font-size:32px;font-style:normal;font-weight:800;line-height:120%}.feature-p{color:var(--ifm-feature-p-color);font-size:20px;font-style:normal;font-weight:400;line-height:24px;margin-bottom:0;max-width:342px}.homepage-resource{color:--ifm-heading-color;text-align:center}.green-bg{background:linear-gradient(180deg,#a3fe76 -24.11%,#f2f7f2)}.yellow-bg{background:linear-gradient(180deg,#ffeb69 -24.11%,#f2f7f2)}.pink-bg{background:linear-gradient(180deg,#ffd6ef -24.11%,#f2f7f2)}.purple-bg{background:linear-gradient(180deg,#cdc5ff -24.11%,#f3f7f2)}.footer-bg{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTM2MCIgaGVpZ2h0PSI3MjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggb3BhY2l0eT0iLjEiIGQ9Ik0uNSA3MTkuNWgyODIuNTU2di03NS40ODNjMC0xLjExNSAxLjU5MS0xLjMxMiAxLjg2My0uMjMybDE1Ljk3MSA2My4zMjFoNjkwLjAyNXYtODAuNzY1YS45NDYuOTQ2IDAgMCAxIDEuMTIyLS45M2wzNjcuNDYzIDY5LjU1M1YuNUg5OTEuMjczdjgzLjAwNmEuOTQ3Ljk0NyAwIDAgMS0uODU4Ljk0Mkw0OTIuODkgMTMxLjI4Nmw0LjkzNSAxMDcuNTU1YS45NDUuOTQ1IDAgMCAxLS41MjYuODkxTC41IDQ4NS4zMDNWNzE5LjVaIiBzdHJva2U9IiNBRURGRTAiLz48L3N2Zz4=);background-position:5%;background-repeat:no-repeat;background-size:90% 90%}.placeholder\:text-danger::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.placeholder\:text-foreground-500::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-foreground-500)/var(--morui-foreground-500-opacity,var(--tw-text-opacity)))}.placeholder\:text-primary::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.placeholder\:text-secondary::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.placeholder\:text-success-600::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-success-600)/var(--morui-success-600-opacity,var(--tw-text-opacity)))}.placeholder\:text-warning-600::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-warning-600)/var(--morui-warning-600-opacity,var(--tw-text-opacity)))}.after\:absolute:after,.before\:absolute:before{content:var(--tw-content);position:absolute}.after\:inset-0:after,.before\:inset-0:before{content:var(--tw-content);inset:0}.before\:z-0:before{content:var(--tw-content);z-index:0}.before\:z-\[-1\]:before{content:var(--tw-content);z-index:-1}.before\:box-border:before{box-sizing:border-box;content:var(--tw-content)}.after\:block:after,.before\:block:before,.data-\[arrow\=true\]\:before\:block[data-arrow=true]:before{content:var(--tw-content);display:block}.before\:hidden:before{content:var(--tw-content);display:none}.before\:h-0:before{content:var(--tw-content);height:0}.before\:h-0\.5:before{content:var(--tw-content);height:.125rem}.before\:h-11:before{content:var(--tw-content);height:2.75rem}.before\:h-2:before{content:var(--tw-content);height:.5rem}.before\:h-2\.5:before{content:var(--tw-content);height:.625rem}.after\:h-px:after,.before\:h-px:before{content:var(--tw-content);height:1px}.after\:w-0:after,.before\:w-0:before{content:var(--tw-content);width:0}.before\:w-11:before{content:var(--tw-content);width:2.75rem}.before\:w-2:before{content:var(--tw-content);width:.5rem}.before\:w-2\.5:before{content:var(--tw-content);width:.625rem}.after\:w-6:after,.before\:w-6:before{content:var(--tw-content);width:1.5rem}.before\:-translate-x-full:before{--tw-translate-x:-100%}.after\:-translate-x-1\/2:after,.after\:rotate-0:after,.after\:scale-50:after,.after\:translate-y-1:after,.before\:-translate-x-full:before,.before\:-translate-y-1:before,.before\:rotate-0:before,.before\:rotate-45:before,.data-\[dragging\=true\]\:after\:scale-100[data-dragging=true]:after,.data-\[dragging\=true\]\:after\:scale-80[data-dragging=true]:after,.data-\[placement\=bottom\]\:before\:-translate-x-1\/2[data-placement=bottom]:before,.data-\[placement\=left\]\:before\:-translate-y-1\/2[data-placement=left]:before,.data-\[placement\=right\]\:before\:-translate-y-1\/2[data-placement=right]:before,.data-\[placement\=top\]\:before\:-translate-x-1\/2[data-placement=top]:before,.group[data-open=true] .group-data-\[open\=true\]\:after\:-rotate-45:after,.group[data-open=true] .group-data-\[open\=true\]\:after\:translate-y-0:after,.group[data-open=true] .group-data-\[open\=true\]\:before\:rotate-45:before,.group[data-open=true] .group-data-\[open\=true\]\:before\:translate-y-px:before{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:-translate-y-1:before{--tw-translate-y:-0.25rem}.before\:rotate-45:before,.group[data-open=true] .group-data-\[open\=true\]\:before\:rotate-45:before{--tw-rotate:45deg}@keyframes d{to{content:var(--tw-content);transform:translateX(100%)}}.before\:animate-\[shimmer_2s_infinite\]:before{animation:2s infinite d;content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.5\)\]:after,.before\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.5\)\]:before{border-radius:calc(var(--morui-radius-medium)*.5);content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.6\)\]:after,.before\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.6\)\]:before{border-radius:calc(var(--morui-radius-medium)*.6);content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.7\)\]:after,.before\:rounded-\[calc\(theme\(borderRadius\.medium\)\*0\.7\)\]:before{border-radius:calc(var(--morui-radius-medium)*.7);content:var(--tw-content)}.after\:rounded-full:after,.before\:rounded-full:before{border-radius:9999px;content:var(--tw-content)}.after\:rounded-none:after,.before\:rounded-none:before,.group[data-middle=true] .group-data-\[middle\=true\]\:before\:rounded-none:before{border-radius:0;content:var(--tw-content)}.before\:rounded-sm:before{border-radius:.125rem;content:var(--tw-content)}.before\:border-2:before{border-width:2px;content:var(--tw-content)}.before\:border-t:before{border-top-width:1px;content:var(--tw-content)}.before\:border-solid:before{border-style:solid;content:var(--tw-content)}.before\:border-content4\/30:before{border-color:hsl(var(--morui-content4)/.3);content:var(--tw-content)}.before\:border-danger:before{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)));content:var(--tw-content)}.before\:border-default:before{--tw-border-opacity:1;border-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-border-opacity)));content:var(--tw-content)}.before\:bg-content1:before{--tw-bg-opacity:1;background-color:hsl(var(--morui-content1)/var(--morui-content1-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-current:after,.before\:bg-current:before{background-color:currentColor;content:var(--tw-content)}.after\:bg-danger:after,.before\:bg-danger:before,.data-\[selected\=true\]\:after\:bg-danger[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-danger\/20:before,.hover\:after\:bg-danger\/20:hover:after{background-color:hsl(var(--morui-danger)/.2);content:var(--tw-content)}.before\:bg-default\/40:before{background-color:hsl(var(--morui-default)/.4);content:var(--tw-content)}.before\:bg-foreground:before,.data-\[selected\=true\]\:after\:bg-foreground[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-primary:after,.before\:bg-primary:before,.data-\[selected\=true\]\:after\:bg-primary[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-primary\/20:before,.hover\:after\:bg-primary\/20:hover:after{background-color:hsl(var(--morui-primary)/.2);content:var(--tw-content)}.after\:bg-secondary:after,.before\:bg-secondary:before,.data-\[selected\=true\]\:after\:bg-secondary[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-secondary\/20:before,.hover\:after\:bg-secondary\/20:hover:after{background-color:hsl(var(--morui-secondary)/.2);content:var(--tw-content)}.after\:bg-success:after,.before\:bg-success:before,.data-\[selected\=true\]\:after\:bg-success[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-success\/20:before,.hover\:after\:bg-success\/20:hover:after{background-color:hsl(var(--morui-success)/.2);content:var(--tw-content)}.after\:bg-warning:after,.before\:bg-warning:before,.data-\[selected\=true\]\:after\:bg-warning[data-selected=true]:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.before\:bg-warning\/20:before,.hover\:after\:bg-warning\/20:hover:after{background-color:hsl(var(--morui-warning)/.2);content:var(--tw-content)}.before\:bg-gradient-to-r:before{background-image:linear-gradient(to right,var(--tw-gradient-stops));content:var(--tw-content)}.before\:from-transparent:before{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);content:var(--tw-content)}.before\:via-content4:before{--tw-gradient-to:hsl(var(--morui-content4)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsl(var(--morui-content4)/var(--morui-content4-opacity,1)) var(--tw-gradient-via-position),var(--tw-gradient-to);content:var(--tw-content)}.before\:to-transparent:before{--tw-gradient-to:#0000 var(--tw-gradient-to-position);content:var(--tw-content)}.after\:opacity-0:after,.before\:opacity-0:before,.data-\[loaded\=true\]\:after\:opacity-0[data-loaded=true]:after,.data-\[loaded\=true\]\:before\:opacity-0[data-loaded=true]:before{content:var(--tw-content);opacity:0}.after\:opacity-100:after,.before\:opacity-100:before,.data-\[selected\=true\]\:after\:opacity-100[data-selected=true]:after,.data-\[selected\=true\]\:before\:opacity-100[data-selected=true]:before,.group[data-odd=true] .group-data-\[odd\=true\]\:before\:opacity-100:before,.group[data-selected=true] .group-data-\[selected\=true\]\:after\:opacity-100:after,.hover\:after\:opacity-100:hover:after{content:var(--tw-content);opacity:1}.before\:shadow-small:before{content:var(--tw-content)}.after\:transition-none:after,.before\:transition-none:before{content:var(--tw-content);transition-property:none}.before\:\!duration-300:before{content:var(--tw-content);transition-duration:.3s!important}.after\:duration-150:after,.before\:duration-150:before{content:var(--tw-content);transition-duration:.15s}.after\:transition-transform:after,.after\:transition-width:after,.before\:transition-colors:before,.before\:transition-opacity:before,.before\:transition-transform:before,.before\:transition-width:before{transition-duration:.25s;transition-timing-function:ease;content:var(--tw-content)}.after\:content-\[\'\'\]:after,.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.before\:transition-colors:before{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke}.before\:transition-opacity:before{transition-property:opacity}.after\:transition-width:after,.before\:transition-width:before{transition-property:width}.after\:transition-transform:after,.before\:transition-transform:before{transition-property:transform}.after\:-bottom-1:after{bottom:-.25rem;content:var(--tw-content)}.after\:-bottom-\[2px\]:after{bottom:-2px;content:var(--tw-content)}.after\:bottom-0:after{bottom:0;content:var(--tw-content)}.after\:left-0:after{content:var(--tw-content);left:0}.after\:left-1\/2:after,.data-\[placement\=bottom\]\:before\:left-1\/2[data-placement=bottom]:before,.data-\[placement\=top\]\:before\:left-1\/2[data-placement=top]:before{content:var(--tw-content);left:50%}.after\:right-0:after{content:var(--tw-content);right:0}.after\:-z-10:after{content:var(--tw-content);z-index:-10}.after\:ml-0:after{content:var(--tw-content);margin-left:0}.after\:ml-0\.5:after{content:var(--tw-content);margin-left:.125rem}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:h-\[2px\]:after{content:var(--tw-content);height:2px}.after\:h-divider:after{content:var(--tw-content);height:var(--morui-divider-weight)}.after\:h-full:after{content:var(--tw-content);height:100%}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:w-\[80\%\]:after{content:var(--tw-content);width:80%}.after\:w-full:after,.data-\[focus\=true\]\:after\:w-full[data-focus=true]:after,.data-\[open\=true\]\:after\:w-full[data-open=true]:after,.group[data-focus=true] .group-data-\[focus\=true\]\:after\:w-full:after,.group[data-selected=true] .group-data-\[selected\=true\]\:before\:w-full:before{content:var(--tw-content);width:100%}.after\:origin-center:after{content:var(--tw-content);transform-origin:center}.after\:rounded-\[calc\(theme\(borderRadius\.large\)\/2\)\]:after{border-radius:calc(var(--morui-radius-large)/2);content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.medium\)\/3\)\]:after{border-radius:calc(var(--morui-radius-medium)/3);content:var(--tw-content)}.after\:rounded-\[calc\(theme\(borderRadius\.small\)\/3\)\]:after{border-radius:calc(var(--morui-radius-small)/3);content:var(--tw-content)}.after\:rounded-xl:after{border-radius:.75rem;content:var(--tw-content)}.first\:before\:rounded-l-lg:first-child:before,.first\:rounded-l-lg:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.after\:bg-background:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-background)/var(--morui-background-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-content3:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-content3)/var(--morui-content3-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-default:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-default-foreground:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:bg-divider:after{--tw-bg-opacity:1;background-color:hsl(var(--morui-divider)/var(--morui-divider-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.after\:text-danger:after{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-danger-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-default-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-primary-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-secondary-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-success-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:text-warning-foreground:after{--tw-text-opacity:1;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)));content:var(--tw-content)}.after\:shadow-\[0_1px_0px_0_rgba\(0\2c 0\2c 0\2c 0\.05\)\]:after,.after\:shadow-small:after{content:var(--tw-content)}.after\:\!duration-200:after{content:var(--tw-content);transition-duration:.2s!important}.after\:\!ease-linear:after{content:var(--tw-content);transition-timing-function:linear!important}.after\:transition-all:after,.after\:transition-background:after,.after\:transition-transform-opacity:after{transition-duration:.25s;transition-timing-function:ease;content:var(--tw-content)}.after\:content-\[\'\*\'\]:after{--tw-content:"*";content:var(--tw-content)}.after\:transition-all:after{transition-property:all}.after\:transition-background:after{transition-property:background}.after\:transition-transform-opacity:after{transition-property:transform,opacity}.first\:rounded-s-full:first-child{border-end-start-radius:9999px;border-start-start-radius:9999px}.first\:rounded-s-large:first-child{border-end-start-radius:var(--morui-radius-large);border-start-start-radius:var(--morui-radius-large)}.first\:rounded-s-medium:first-child{border-end-start-radius:var(--morui-radius-medium);border-start-start-radius:var(--morui-radius-medium)}.first\:rounded-s-none:first-child{border-end-start-radius:0;border-start-start-radius:0}.first\:rounded-s-small:first-child{border-end-start-radius:var(--morui-radius-small);border-start-start-radius:var(--morui-radius-small)}.first\:before\:rounded-l-lg:first-child:before{content:var(--tw-content)}.last\:rounded-e-full:last-child{border-end-end-radius:9999px;border-start-end-radius:9999px}.last\:rounded-e-large:last-child{border-end-end-radius:var(--morui-radius-large);border-start-end-radius:var(--morui-radius-large)}.last\:rounded-e-medium:last-child{border-end-end-radius:var(--morui-radius-medium);border-start-end-radius:var(--morui-radius-medium)}.last\:rounded-e-none:last-child{border-end-end-radius:0;border-start-end-radius:0}.last\:rounded-e-small:last-child{border-end-end-radius:var(--morui-radius-small);border-start-end-radius:var(--morui-radius-small)}.last\:before\:rounded-r-lg:last-child:before,.last\:rounded-r-lg:last-child{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.last\:before\:rounded-r-lg:last-child:before{content:var(--tw-content)}.focus-within\:border-danger:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.focus-within\:border-primary:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.focus-within\:border-secondary:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.focus-within\:border-success:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.focus-within\:border-warning:focus-within{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:\!bg-danger:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-default:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-foreground:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-foreground)/var(--morui-foreground-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-primary:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-secondary:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-success:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)))!important}.hover\:\!bg-warning:hover{--tw-bg-opacity:1!important;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)))!important}.hover\:\!text-danger-foreground:hover{--tw-text-opacity:1!important;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)))!important}.hover\:\!text-primary-foreground:hover{--tw-text-opacity:1!important;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)))!important}.hover\:\!text-success-foreground:hover{--tw-text-opacity:1!important;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)))!important}.hover\:\!text-warning-foreground:hover{--tw-text-opacity:1!important;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)))!important}.hover\:\!opacity-100:hover{opacity:1!important}.hover\:after\:bg-foreground\/10:hover:after{background-color:hsl(var(--morui-foreground)/.1);content:var(--tw-content)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:outline-none:focus-visible{outline:#0000 solid 2px;outline-offset:2px}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-focus:focus-visible{outline-color:hsl(var(--morui-focus)/var(--morui-focus-opacity,1))}.active\:bg-default-300:active{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-300)/var(--morui-default-300-opacity,var(--tw-bg-opacity)))}.active\:\!opacity-70:active{opacity:.7!important}.data-\[open\=true\]\:block[data-open=true],.group:hover .group-hover\:block,.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:block,.peer[data-filled=true]~.peer-data-\[filled\=true\]\:block,.tocCollapsibleContent_ZaYr a{display:block}.group:hover .group-hover\:hidden,.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:hidden{display:none}.group:hover .group-hover\:border-current{border-color:currentColor}.aria-expanded\:scale-\[0\.97\][aria-expanded=true],.data-\[pressed\=true\]\:scale-\[0\.97\][data-pressed=true]{--tw-scale-x:0.97;--tw-scale-y:0.97;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[focus-visible\=true\]\:z-10[data-focus-visible=true],.data-\[focused\=true\]\:z-10[data-focused=true],.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:z-10{z-index:10}.data-\[has-label\=true\]\:mt-\[calc\(theme\(fontSize\.small\)_\+_10px\)\][data-has-label=true]{margin-top:calc(var(--morui-font-size-small) + 10px)}.data-\[has-label\=true\]\:mt-\[calc\(theme\(fontSize\.small\)_\+_12px\)\][data-has-label=true]{margin-top:calc(var(--morui-font-size-small) + 12px)}.data-\[has-label\=true\]\:mt-\[calc\(theme\(fontSize\.small\)_\+_8px\)\][data-has-label=true]{margin-top:calc(var(--morui-font-size-small) + 8px)}.data-\[focus-visible\=true\]\:-translate-x-3[data-focus-visible=true],.data-\[hover\=true\]\:-translate-x-3[data-hover=true]{--tw-translate-x:-0.75rem}.data-\[hover\=true\]\:translate-x-0[data-hover=true]{--tw-translate-x:0px}.data-\[dragging\=true\]\:cursor-grabbing[data-dragging=true]{cursor:grabbing}.data-\[thumb-hidden\=false\]\:border-x-\[calc\(theme\(spacing\.5\)\/2\)\][data-thumb-hidden=false]{border-left-width:.625rem;border-right-width:.625rem}.data-\[thumb-hidden\=false\]\:border-x-\[calc\(theme\(spacing\.6\)\/2\)\][data-thumb-hidden=false]{border-left-width:.75rem;border-right-width:.75rem}.data-\[thumb-hidden\=false\]\:border-x-\[calc\(theme\(spacing\.7\)\/2\)\][data-thumb-hidden=false]{border-left-width:.875rem;border-right-width:.875rem}.data-\[thumb-hidden\=false\]\:border-y-\[calc\(theme\(spacing\.5\)\/2\)\][data-thumb-hidden=false]{border-bottom-width:.625rem;border-top-width:.625rem}.data-\[thumb-hidden\=false\]\:border-y-\[calc\(theme\(spacing\.6\)\/2\)\][data-thumb-hidden=false]{border-bottom-width:.75rem;border-top-width:.75rem}.data-\[thumb-hidden\=false\]\:border-y-\[calc\(theme\(spacing\.7\)\/2\)\][data-thumb-hidden=false]{border-bottom-width:.875rem;border-top-width:.875rem}.data-\[active\=true\]\:border-danger[data-active=true],.data-\[focus\=true\]\:border-danger[data-focus=true],.data-\[hover\=true\]\:border-danger[data-hover=true],.data-\[open\=true\]\:border-danger[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-default-400[data-active=true],.data-\[hover\=true\]\:border-default-400[data-hover=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-default-400)/var(--morui-default-400-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-primary[data-active=true],.data-\[focus\=true\]\:border-primary[data-focus=true],.data-\[hover\=true\]\:border-primary[data-hover=true],.data-\[open\=true\]\:border-primary[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-secondary[data-active=true],.data-\[focus\=true\]\:border-secondary[data-focus=true],.data-\[hover\=true\]\:border-secondary[data-hover=true],.data-\[open\=true\]\:border-secondary[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-success[data-active=true],.data-\[focus\=true\]\:border-success[data-focus=true],.data-\[hover\=true\]\:border-success[data-hover=true],.data-\[open\=true\]\:border-success[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.data-\[active\=true\]\:border-warning[data-active=true],.data-\[focus\=true\]\:border-warning[data-focus=true],.data-\[hover\=true\]\:border-warning[data-hover=true],.data-\[open\=true\]\:border-warning[data-open=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.data-\[focus\=true\]\:border-default-foreground[data-focus=true],.data-\[open\=true\]\:border-default-foreground[data-open=true],.group[data-focus=true] .group-data-\[focus\=true\]\:border-default-foreground{--tw-border-opacity:1;border-color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-border-opacity)))}.data-\[hover\=true\]\:bg-blue-600[data-hover=true]{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.data-\[hover\=true\]\:bg-content2[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-content2)/var(--morui-content2-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-danger-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger-100)/var(--morui-danger-100-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-default\/80[data-hover=true]{background-color:hsl(var(--morui-default)/.8)}.data-\[hover\=true\]\:bg-primary-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary-100)/var(--morui-primary-100-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-secondary-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary-100)/var(--morui-secondary-100-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-success-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-success-100)/var(--morui-success-100-opacity,var(--tw-bg-opacity)))}.data-\[hover\=true\]\:bg-warning-100[data-hover=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning-100)/var(--morui-warning-100-opacity,var(--tw-bg-opacity)))}.data-\[in-range\=true\]\:bg-background\/50[data-in-range=true]{background-color:hsl(var(--morui-background)/.5)}.data-\[loaded\=true\]\:\!bg-transparent[data-loaded=true]{background-color:initial!important}.data-\[has-end-content\=true\]\:pe-1\.5[data-has-end-content=true]{padding-inline-end:.375rem}.data-\[has-start-content\=true\]\:ps-1\.5[data-has-start-content=true]{padding-inline-start:.375rem}.data-\[disabled\=true\]\:text-default-300[data-disabled=true]{--tw-text-opacity:1;color:hsl(var(--morui-default-300)/var(--morui-default-300-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-danger[data-hover=true],.data-\[selected\=true\]\:text-danger[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-primary[data-hover=true],.data-\[selected\=true\]\:text-primary[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:text-secondary[data-hover=true],.data-\[selected\=true\]\:text-secondary[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.data-\[selected\=true\]\:text-success-600[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-success-600)/var(--morui-success-600-opacity,var(--tw-text-opacity)))}.data-\[selected\=true\]\:text-warning-600[data-selected=true]{--tw-text-opacity:1;color:hsl(var(--morui-warning-600)/var(--morui-warning-600-opacity,var(--tw-text-opacity)))}.data-\[hover\=true\]\:opacity-hover[data-hover=true]{opacity:var(--morui-hover-opacity)}.data-\[active\=true\]\:shadow-md[data-active=true]{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.data-\[hover\=true\]\:shadow-lg[data-hover=true]{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.data-\[hover\=true\]\:shadow-danger\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-danger)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[hover\=true\]\:shadow-primary\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-primary)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[hover\=true\]\:shadow-secondary\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-secondary)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[hover\=true\]\:shadow-success\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-success)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[hover\=true\]\:shadow-warning\/30[data-hover=true]{--tw-shadow-color:hsl(var(--morui-warning)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[focus-visible\=true\]\:outline-2[data-focus-visible=true]{outline-width:2px}.data-\[focus-visible\=true\]\:outline-offset-2[data-focus-visible=true]{outline-offset:2px}.data-\[focus-visible\=true\]\:outline-focus[data-focus-visible=true]{outline-color:hsl(var(--morui-focus)/var(--morui-focus-opacity,1))}.data-\[focus-visible\]\:outline-danger-foreground[data-focus-visible]{outline-color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,1))}.data-\[focus-visible\]\:outline-default-foreground[data-focus-visible]{outline-color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,1))}.data-\[focus-visible\]\:outline-primary-foreground[data-focus-visible]{outline-color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,1))}.data-\[focus-visible\]\:outline-secondary-foreground[data-focus-visible]{outline-color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,1))}.data-\[focus-visible\]\:outline-success-foreground[data-focus-visible]{outline-color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,1))}.data-\[focus-visible\]\:outline-warning-foreground[data-focus-visible]{outline-color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,1))}.data-\[menu-open\=true\]\:backdrop-blur-xl[data-menu-open=true]{--tw-backdrop-blur:blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.data-\[hide-scroll\=true\]\:scrollbar-hide[data-hide-scroll=true]::-webkit-scrollbar{display:none}.data-\[bottom-scroll\=true\]\:\[mask-image\:linear-gradient\(180deg\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-bottom-scroll=true]{-webkit-mask-image:linear-gradient(180deg,#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(180deg,#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[left-right-scroll\=true\]\:\[mask-image\:linear-gradient\(to_right\2c \#000\2c \#000\2c transparent_0\2c \#000_var\(--scroll-shadow-size\)\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-left-right-scroll=true]{-webkit-mask-image:linear-gradient(to right,#000,#000,#0000 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(to right,#000,#000,#0000 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[left-scroll\=true\]\:\[mask-image\:linear-gradient\(270deg\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-left-scroll=true]{-webkit-mask-image:linear-gradient(270deg,#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(270deg,#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[right-scroll\=true\]\:\[mask-image\:linear-gradient\(90deg\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-right-scroll=true]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[top-bottom-scroll\=true\]\:\[mask-image\:linear-gradient\(\#000\2c \#000\2c transparent_0\2c \#000_var\(--scroll-shadow-size\)\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-top-bottom-scroll=true]{-webkit-mask-image:linear-gradient(#000,#000,#0000 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(#000,#000,#0000 0,#000 var(--scroll-shadow-size),#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[top-scroll\=true\]\:\[mask-image\:linear-gradient\(0deg\2c \#000_calc\(100\%_-_var\(--scroll-shadow-size\)\)\2c transparent\)\][data-top-scroll=true]{-webkit-mask-image:linear-gradient(0deg,#000 calc(100% - var(--scroll-shadow-size)),#0000);mask-image:linear-gradient(0deg,#000 calc(100% - var(--scroll-shadow-size)),#0000)}.data-\[placement\=bottom-end\]\:before\:-top-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=bottom-end]:before,.data-\[placement\=bottom-start\]\:before\:-top-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=bottom-start]:before,.data-\[placement\=bottom\]\:before\:-top-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=bottom]:before{content:var(--tw-content);top:calc(-.3125rem - -1.5px)}.data-\[placement\=bottom-end\]\:before\:right-3[data-placement=bottom-end]:before,.data-\[placement\=top-end\]\:before\:right-3[data-placement=top-end]:before{content:var(--tw-content);right:.75rem}.data-\[placement\=bottom-start\]\:before\:left-3[data-placement=bottom-start]:before,.data-\[placement\=top-start\]\:before\:left-3[data-placement=top-start]:before{content:var(--tw-content);left:.75rem}.data-\[placement\=left-end\]\:before\:-right-\[calc\(theme\(spacing\.5\)\/4_-_3px\)\][data-placement=left-end]:before,.data-\[placement\=left-start\]\:before\:-right-\[calc\(theme\(spacing\.5\)\/4_-_3px\)\][data-placement=left-start]:before{content:var(--tw-content);right:calc(-.3125rem - -3px)}.data-\[placement\=left-end\]\:before\:bottom-1\/4[data-placement=left-end]:before,.data-\[placement\=right-end\]\:before\:bottom-1\/4[data-placement=right-end]:before{bottom:25%;content:var(--tw-content)}.data-\[placement\=left-start\]\:before\:top-1\/4[data-placement=left-start]:before,.data-\[placement\=right-start\]\:before\:top-1\/4[data-placement=right-start]:before{content:var(--tw-content);top:25%}.data-\[placement\=left\]\:before\:-right-\[calc\(theme\(spacing\.5\)\/4_-_2px\)\][data-placement=left]:before{content:var(--tw-content);right:calc(-.3125rem - -2px)}.data-\[placement\=left\]\:before\:top-1\/2[data-placement=left]:before,.data-\[placement\=right\]\:before\:top-1\/2[data-placement=right]:before{content:var(--tw-content);top:50%}.data-\[placement\=right-end\]\:before\:-left-\[calc\(theme\(spacing\.5\)\/4_-_3px\)\][data-placement=right-end]:before,.data-\[placement\=right-start\]\:before\:-left-\[calc\(theme\(spacing\.5\)\/4_-_3px\)\][data-placement=right-start]:before{content:var(--tw-content);left:calc(-.3125rem - -3px)}.data-\[placement\=right\]\:before\:-left-\[calc\(theme\(spacing\.5\)\/4_-_2px\)\][data-placement=right]:before{content:var(--tw-content);left:calc(-.3125rem - -2px)}.data-\[placement\=top-end\]\:before\:-bottom-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=top-end]:before,.data-\[placement\=top-start\]\:before\:-bottom-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=top-start]:before,.data-\[placement\=top\]\:before\:-bottom-\[calc\(theme\(spacing\.5\)\/4_-_1\.5px\)\][data-placement=top]:before{bottom:calc(-.3125rem - -1.5px);content:var(--tw-content)}.data-\[loaded\=true\]\:before\:animate-none[data-loaded=true]:before{animation:none;content:var(--tw-content)}.data-\[dragging\=true\]\:after\:scale-80[data-dragging=true]:after{--tw-scale-x:0.8;--tw-scale-y:0.8}.data-\[selectable\=true\]\:focus\:border-danger:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-default:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-primary:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-secondary:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-success:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:border-warning:focus[data-selectable=true]{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.data-\[selectable\=true\]\:focus\:bg-danger:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-danger\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-danger)/.2)}.data-\[selectable\=true\]\:focus\:bg-default:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-default-100:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-100)/var(--morui-default-100-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-default\/40:focus[data-selectable=true]{background-color:hsl(var(--morui-default)/.4)}.data-\[selectable\=true\]\:focus\:bg-primary:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-primary\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-primary)/.2)}.data-\[selectable\=true\]\:focus\:bg-secondary:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-secondary\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-secondary)/.2)}.data-\[selectable\=true\]\:focus\:bg-success:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-success\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-success)/.2)}.data-\[selectable\=true\]\:focus\:bg-warning:focus[data-selectable=true]{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)))}.data-\[selectable\=true\]\:focus\:bg-warning\/20:focus[data-selectable=true]{background-color:hsl(var(--morui-warning)/.2)}.data-\[selectable\=true\]\:focus\:text-danger:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-danger-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-default-500:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-default-500)/var(--morui-default-500-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-default-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-primary:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-primary-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-secondary:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-secondary-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-success:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-success-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-warning:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:text-warning-foreground:focus[data-selectable=true]{--tw-text-opacity:1;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)))}.data-\[selectable\=true\]\:focus\:shadow-danger\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-danger)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-default\/50:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-default)/0.5);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-primary\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-primary)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-secondary\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-secondary)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-success\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-success)/0.3);--tw-shadow:var(--tw-shadow-colored)}.data-\[selectable\=true\]\:focus\:shadow-warning\/30:focus[data-selectable=true]{--tw-shadow-color:hsl(var(--morui-warning)/0.3);--tw-shadow:var(--tw-shadow-colored)}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:pointer-events-auto,.group[data-filled=true] .group-data-\[filled\=true\]\:pointer-events-auto{pointer-events:auto}.group[data-selected=true] .group-data-\[selected\=true\]\:ml-4,.group[data-selected][data-pressed] .group-data-\[selected\]\:group-data-\[pressed\]\:ml-4{margin-left:1rem}.group[data-selected=true] .group-data-\[selected\=true\]\:ml-5,.group[data-selected][data-pressed] .group-data-\[selected\]\:group-data-\[pressed\]\:ml-5{margin-left:1.25rem}.group[data-selected=true] .group-data-\[selected\=true\]\:ml-6{margin-left:1.5rem}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.small\)\/2_\+_20px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.small\)\/2_\+_20px\)\]{--tw-translate-y:calc(-100% + var(--morui-font-size-small)/2*-1 + -20px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.small\)\/2_\+_24px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.small\)\/2_\+_24px\)\]{--tw-translate-y:calc(-100% + var(--morui-font-size-small)/2*-1 + -24px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.tiny\)\/2_\+_16px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(100\%_\+_theme\(fontSize\.tiny\)\/2_\+_16px\)\]{--tw-translate-y:calc(-100% + var(--morui-font-size-tiny)/2*-1 + -16px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_3\.5px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_3\.5px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -3.5px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_4px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_4px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -4px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_6px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_6px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -6px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_6px_-_theme\(borderWidth\.medium\)\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_6px_-_theme\(borderWidth\.medium\)\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -6px - var(--morui-border-width-medium)*-1);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_8px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_8px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -8px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_8px_-_theme\(borderWidth\.medium\)\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.small\)\/2_-_8px_-_theme\(borderWidth\.medium\)\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-small)/2*-1 - -8px - var(--morui-border-width-medium)*-1);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_5px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_5px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-tiny)/2*-1 - -5px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_8px\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_8px\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-tiny)/2*-1 - -8px);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_8px_-_theme\(borderWidth\.medium\)\)\],.group[data-filled=true] .group-data-\[filled\=true\]\:-translate-y-\[calc\(50\%_\+_theme\(fontSize\.tiny\)\/2_-_8px_-_theme\(borderWidth\.medium\)\)\]{--tw-translate-y:calc(-50% + var(--morui-font-size-tiny)/2*-1 - -8px - var(--morui-border-width-medium)*-1);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-selected=true] .group-data-\[selected\=true\]\:translate-x-3{--tw-translate-x:0.75rem}.group[data-copied=true] .group-data-\[copied\=true\]\:scale-50{--tw-scale-x:.5;--tw-scale-y:.5;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-filled-within=true] .group-data-\[filled-within\=true\]\:scale-85,.group[data-filled=true] .group-data-\[filled\=true\]\:scale-85{--tw-scale-x:0.85;--tw-scale-y:0.85;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-pressed=true] .group-data-\[pressed\=true\]\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.group[data-focus=true] .group-data-\[focus\=true\]\:border-danger,.group[data-selected=true] .group-data-\[selected\=true\]\:border-danger{--tw-border-opacity:1;border-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-border-opacity)))}.group[data-focus=true] .group-data-\[focus\=true\]\:border-primary,.group[data-selected=true] .group-data-\[selected\=true\]\:border-primary{--tw-border-opacity:1;border-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-border-opacity)))}.group[data-focus=true] .group-data-\[focus\=true\]\:border-secondary,.group[data-selected=true] .group-data-\[selected\=true\]\:border-secondary{--tw-border-opacity:1;border-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-border-opacity)))}.group[data-focus=true] .group-data-\[focus\=true\]\:border-success,.group[data-selected=true] .group-data-\[selected\=true\]\:border-success{--tw-border-opacity:1;border-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-border-opacity)))}.group[data-focus=true] .group-data-\[focus\=true\]\:border-warning,.group[data-selected=true] .group-data-\[selected\=true\]\:border-warning{--tw-border-opacity:1;border-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-border-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:border-default-500{--tw-border-opacity:1;border-color:hsl(var(--morui-default-500)/var(--morui-default-500-opacity,var(--tw-border-opacity)))}.\[\&\[data-hover\=true\]\:not\(\[data-active\=true\]\)\]\:bg-default-100[data-hover=true]:not([data-active=true]),.group[data-focus=true] .group-data-\[focus\=true\]\:bg-default-100,.group[data-hover-unselected=true] .group-data-\[hover-unselected\=true\]\:bg-default-100{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-100)/var(--morui-default-100-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-danger{--tw-bg-opacity:1;background-color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-primary{--tw-bg-opacity:1;background-color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-secondary{--tw-bg-opacity:1;background-color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-success{--tw-bg-opacity:1;background-color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-bg-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:bg-warning{--tw-bg-opacity:1;background-color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-bg-opacity)))}.group[data-has-helper=true] .group-data-\[has-helper\=true\]\:pt-3{padding-top:.75rem}.group[data-has-helper=true] .group-data-\[has-helper\=true\]\:pt-4,.group[data-has-label=true] .group-data-\[has-label\=true\]\:pt-4{padding-top:1rem}.group[data-has-label=true] .group-data-\[has-label\=true\]\:pt-5{padding-top:1.25rem}.group[data-disabled=true] .group-data-\[disabled\=true\]\:text-foreground-300{--tw-text-opacity:1;color:hsl(var(--morui-foreground-300)/var(--morui-foreground-300-opacity,var(--tw-text-opacity)))}.group[data-has-value=true] .group-data-\[has-value\=true\]\:text-default-foreground,.group[data-selected=true] .group-data-\[selected\=true\]\:text-default-foreground{--tw-text-opacity:1;color:hsl(var(--morui-default-foreground)/var(--morui-default-foreground-opacity,var(--tw-text-opacity)))}.group[data-invalid=true] .group-data-\[invalid\=true\]\:text-danger,.group[data-selected=true] .group-data-\[selected\=true\]\:text-danger{--tw-text-opacity:1;color:hsl(var(--morui-danger)/var(--morui-danger-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-danger-foreground{--tw-text-opacity:1;color:hsl(var(--morui-danger-foreground)/var(--morui-danger-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-primary{--tw-text-opacity:1;color:hsl(var(--morui-primary)/var(--morui-primary-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-primary-foreground{--tw-text-opacity:1;color:hsl(var(--morui-primary-foreground)/var(--morui-primary-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-secondary{--tw-text-opacity:1;color:hsl(var(--morui-secondary)/var(--morui-secondary-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-secondary-foreground{--tw-text-opacity:1;color:hsl(var(--morui-secondary-foreground)/var(--morui-secondary-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-success{--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-success-foreground{--tw-text-opacity:1;color:hsl(var(--morui-success-foreground)/var(--morui-success-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-warning{--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:text-warning-foreground{--tw-text-opacity:1;color:hsl(var(--morui-warning-foreground)/var(--morui-warning-foreground-opacity,var(--tw-text-opacity)))}.group[data-selected=true] .group-data-\[selected\=true\]\:opacity-60{opacity:.6}.group[data-focus-visible=true] .group-data-\[focus-visible\=true\]\:ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group[data-open=true] .group-data-\[open\=true\]\:before\:translate-y-px:before{--tw-translate-y:1px}.group[aria-selected=false][data-hover=true] .group-aria-\[selected\=false\]\:group-data-\[hover\=true\]\:before\:bg-default-100:before,.group[data-hover=true] .group-data-\[hover\=true\]\:before\:bg-default-100:before,.group[data-odd=true] .group-data-\[odd\=true\]\:before\:bg-default-100:before{--tw-bg-opacity:1;background-color:hsl(var(--morui-default-100)/var(--morui-default-100-opacity,var(--tw-bg-opacity)));content:var(--tw-content)}.group[data-open=true] .group-data-\[open\=true\]\:after\:translate-y-0:after{--tw-translate-y:0px}.group[data-open=true] .group-data-\[open\=true\]\:after\:-rotate-45:after{--tw-rotate:-45deg}.group[data-selected=true] .group-data-\[selected\=true\]\:after\:scale-100:after{--tw-scale-x:1;--tw-scale-y:1;content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-first=true] .group-data-\[first\=true\]\:first\:before\:rounded-tl-lg:first-child:before{border-top-left-radius:.5rem;content:var(--tw-content)}.group[data-last=true] .group-data-\[last\=true\]\:first\:before\:rounded-bl-lg:first-child:before{border-bottom-left-radius:.5rem;content:var(--tw-content)}.group[data-first=true] .group-data-\[first\=true\]\:last\:before\:rounded-tr-lg:last-child:before{border-top-right-radius:.5rem;content:var(--tw-content)}.group[data-last=true] .group-data-\[last\=true\]\:last\:before\:rounded-br-lg:last-child:before{border-bottom-right-radius:.5rem;content:var(--tw-content)}.group[aria-selected=false][data-hover=true] .group-aria-\[selected\=false\]\:group-data-\[hover\=true\]\:before\:opacity-70:before{content:var(--tw-content);opacity:.7}:is([data-theme=dark] .dark\:bg-background\/20){background-color:hsl(var(--morui-background)/.2)}:is([data-theme=dark] .dark\:bg-content2){--tw-bg-opacity:1;background-color:hsl(var(--morui-content2)/var(--morui-content2-opacity,var(--tw-bg-opacity)))}:is([data-theme=dark] .dark\:bg-default){--tw-bg-opacity:1;background-color:hsl(var(--morui-default)/var(--morui-default-opacity,var(--tw-bg-opacity)))}:is([data-theme=dark] .dark\:bg-transparent){background-color:initial}:is([data-theme=dark] .dark\:text-danger-500){--tw-text-opacity:1;color:hsl(var(--morui-danger-500)/var(--morui-danger-500-opacity,var(--tw-text-opacity)))}:is([data-theme=dark] .dark\:text-success){--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}:is([data-theme=dark] .dark\:text-warning){--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}:is([data-theme=dark] .dark\:placeholder\:text-danger-500)::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-danger-500)/var(--morui-danger-500-opacity,var(--tw-text-opacity)))}:is([data-theme=dark] .dark\:placeholder\:text-success)::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}:is([data-theme=dark] .dark\:placeholder\:text-warning)::placeholder{--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}:is([data-theme=dark] .dark\:before\:via-default-700\/10):before{--tw-gradient-to:hsl(var(--morui-default-700)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsl(var(--morui-default-700)/0.1) var(--tw-gradient-via-position),var(--tw-gradient-to);content:var(--tw-content)}:is([data-theme=dark] .dark\:after\:bg-content2):after{content:var(--tw-content)}:is([data-theme=dark] .dark\:after\:bg-content2):after,:is([data-theme=dark] .dark\:data-\[hover\=true\]\:bg-content2[data-hover=true]){--tw-bg-opacity:1;background-color:hsl(var(--morui-content2)/var(--morui-content2-opacity,var(--tw-bg-opacity)))}:is([data-theme=dark] .dark\:data-\[selected\=true\]\:text-danger-500[data-selected=true]){--tw-text-opacity:1;color:hsl(var(--morui-danger-500)/var(--morui-danger-500-opacity,var(--tw-text-opacity)))}:is([data-theme=dark] .dark\:data-\[selected\=true\]\:text-success[data-selected=true]){--tw-text-opacity:1;color:hsl(var(--morui-success)/var(--morui-success-opacity,var(--tw-text-opacity)))}:is([data-theme=dark] .dark\:data-\[selected\=true\]\:text-warning[data-selected=true]){--tw-text-opacity:1;color:hsl(var(--morui-warning)/var(--morui-warning-opacity,var(--tw-text-opacity)))}.rtl\:-rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:-180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:data-\[open\=true\]\:-rotate-90[data-open=true]:where([dir=rtl],[dir=rtl] *){--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\+\.border-medium\.border-danger\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-danger,.\[\&\+\.border-medium\.border-default\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-default,.\[\&\+\.border-medium\.border-primary\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-primary,.\[\&\+\.border-medium\.border-secondary\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-secondary,.\[\&\+\.border-medium\.border-success\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-success,.\[\&\+\.border-medium\.border-warning\]\:ms-\[calc\(theme\(borderWidth\.medium\)\*-1\)\]+.border-medium.border-warning{margin-inline-start:calc(var(--morui-border-width-medium)*-1)}.\[\&\:not\(\:first-of-type\)\]\:ml-\[calc\(theme\(borderWidth\.2\)\*-1\)\]:not(:first-of-type){margin-left:-2px}.\[\&\>svg\]\:max-w-\[theme\(spacing\.unit-8\)\]>svg{max-width:var(--morui-spacing-unit-8)}.\[\&\>tr\]\:first\:rounded-lg:first-child>tr{border-radius:.5rem}.iconEdit_hXYy{margin-right:.3em;vertical-align:sub}.tag_v7WR{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_v7WR:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_Je6X{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_joth{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_joth:after,.tagWithCount_joth:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_joth:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_joth:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_joth span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_h90I{display:inline}.tag_sssu{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_QCdV{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_WOPX{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.tocCollapsibleButton_WOPX:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_rwL1:after,.tocCollapsibleExpanded_PvQh{transform:none}.tocCollapsible_DiAg{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_ZaYr>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_ZaYr ul li{margin:.4rem .8rem}.tableOfContents_BZNS{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.backToTopButton_Q4cv{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_Q4cv:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_k11J{opacity:1;transform:scale(1);visibility:visible}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Input,.DocSearch-Link{-webkit-appearance:none;font:inherit}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Hit[aria-selected=true] mark,.content_SSOG a{text-decoration:underline}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:#0000;border:0;color:var(--docsearch-text-color);flex:1;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Hit-action-button,.DocSearch-Reset{-webkit-appearance:none;border:0;cursor:pointer}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards e;appearance:none;background:none;border-radius:50%;color:var(--docsearch-icon-color);padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:#0000}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border-radius:50%;color:inherit;padding:2px}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_yZX9,.sidebarLogo__8Im,.themedComponent_RIc6,[data-theme=dark] .lightToggleIcon_IrFl,[data-theme=light] .darkToggleIcon_Jumi,html[data-announcement-bar-initially-dismissed=true] .announcementBar_YClq,svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}@keyframes e{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container,.skipToContent__k5K{z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent__k5K{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem}.skipToContent__k5K:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_QXR6{line-height:0;padding:0}.content_SSOG{font-size:85%;padding:5px 0;text-align:center}.content_SSOG a{color:inherit}.announcementBar_YClq{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_Qmwd{flex:0 0 10px}.announcementBarClose_w_TL{align-self:stretch;flex:0 0 30px}.toggle_KhJ_{height:2rem;width:2rem}.toggleButton_NdO2{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_NdO2:hover{background:var(--ifm-color-emphasis-200)}.darkNavbarColorModeToggle_uYg4:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_XAeT,[data-theme=light] .themedComponent--light_aQWN,html:not([data-theme]) .themedComponent--light_aQWN{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_sDws{display:none;margin:0}.iconExternalLink_wCmh{margin-left:.3rem}.docMainContainer_tpdO,.docRoot_hd24{display:flex;width:100%}.docsWrapper_sXuj{display:flex;flex:1 0 auto}.iconLanguage_Ihod{margin-right:5px;vertical-align:text-bottom}@supports selector(:has(*)){.navbarSearchContainer_pjLh:not(:has(>*)){display:none}}.navbarHideable_6CjN{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_Qzz3{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_dRln{color:red;white-space:pre-wrap}.errorBoundaryFallback_IrKq{color:red;padding:.55rem}.buttonGroup_h4Ab button,.codeBlockContainer_TrXU{background:var(--prism-background-color);color:var(--prism-color)}.footerLogoLink_DDai{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_an0H{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_W1Gw{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_qbsJ{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column}.codeBlockContainer_TrXU{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_oDlV{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_KMGw{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_vqyv{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_KMGw+.codeBlockContent_oDlV .codeBlock_vqyv{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_w6yq{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_xm_F{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup_h4Ab{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup_h4Ab button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup_h4Ab button:focus-visible,.buttonGroup_h4Ab button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup_h4Ab button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_shsP{counter-increment:a;display:table-row}.codeLineNumber_CBFI{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_CBFI:before{content:counter(a);opacity:.4}.codeLineContent_BLTN{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_MqjE{opacity:1!important}.copyButtonIcons_DAVD{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_WHRT,.copyButtonSuccessIcon_N87f{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_N87f{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_MqjE .copyButtonIcon_WHRT{opacity:0;transform:scale(.33)}.copyButtonCopied_MqjE .copyButtonSuccessIcon_N87f{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_lc89{height:1.2rem;width:1.2rem}.details_b_me{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_b_me>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_b_me>summary::-webkit-details-marker{display:none}.details_b_me>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_tCQ3{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_Y1an{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.containsTaskList_uDxK{list-style:none}.admonition__zDI{margin-bottom:1em}.admonitionHeading_hlA6{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_hlA6:not(:last-child){margin-bottom:.3rem}.admonitionHeading_hlA6 code{text-transform:none}.admonitionIcon_hl6_{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_hl6_ svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_cCRz{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_azfw{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.searchQueryInput_t4SI,.searchVersionInput_VRdv{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_t4SI:focus,.searchVersionInput_VRdv:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_t4SI::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_QzhY{font-size:.9rem;font-weight:700}.algoliaLogo_pMFB{max-width:150px}.algoliaLogoPathFill_N2Hb{fill:var(--ifm-font-color-base)}.searchResultItem_UjTk{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_lptN{font-weight:400;margin-bottom:0}.searchResultItemPath_zNJY{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_NMRP{font-style:italic;margin:.5rem 0 0}.loadingSpinner_SiMU{animation:1s linear infinite f;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes f{to{transform:rotate(1turn)}}.loader_sHs5{margin-top:2rem}.search-result-match{background:#ffd78e40;color:var(--docsearch-hit-color);padding:.09em 0}@media (min-width:375px){.header-bg{height:115px}}@media (min-width:425px){.header-bg{height:130px}}@media (min-width:640px){.sm\:mx-0{margin-left:0;margin-right:0}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:my-0{margin-bottom:0;margin-top:0}.sm\:my-16{margin-bottom:4rem;margin-top:4rem}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:\[--scale-enter\:100\%\]{--scale-enter:100%}.sm\:\[--scale-exit\:103\%\]{--scale-exit:103%}.sm\:\[--slide-enter\:0px\]{--slide-enter:0px}.sm\:\[--slide-exit\:0px\]{--slide-exit:0px}.sm\:data-\[visible\=true\]\:opacity-0[data-visible=true]{opacity:0}.group[data-hover=true] .sm\:group-data-\[hover\=true\]\:data-\[visible\=true\]\:opacity-100[data-visible=true]{opacity:1}}@media (min-width:768px){.header-bg{height:235px}.md\:order-1{order:1}.md\:h-\[780px\]{height:780px}.md\:w-\[128px\]{width:128px}.md\:w-\[284px\]{width:284px}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:px-0{padding-left:0;padding-right:0}.md\:py-10{padding-bottom:2.5rem;padding-top:2.5rem}.md\:pt-\[100px\]{padding-top:100px}.md\:text-\[84px\]{font-size:84px}.md\:text-\[85px\]{font-size:85px}.md\:text-tiny{font-size:var(--morui-font-size-tiny);line-height:var(--morui-line-height-tiny)}.md\:\!font-semibold{font-weight:600!important}.md\:leading-\[84px\]{line-height:84px}.md\:leading-\[85px\]{line-height:85px}}@media (min-width:997px){.collapseSidebarButton_sDws,.expandButton_wG66{background-color:var(--docusaurus-collapse-button-bg)}.lastUpdated_QCdV{text-align:right}.tocMobile_Xpp9{display:none}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_w_TL,.announcementBarPlaceholder_Qmwd{flex-basis:50px}.collapseSidebarButton_sDws{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_rxJT{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon__WPc,[dir=rtl] .collapseSidebarButtonIcon_rxJT{transform:rotate(0)}.collapseSidebarButton_sDws:focus,.collapseSidebarButton_sDws:hover,.expandButton_wG66:focus,.expandButton_wG66:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_XrYY{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_Mh0c{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_Mh0c{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_Amec{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_NCyT{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_Do0s{padding-top:0}.sidebarHidden_o49B{opacity:0;visibility:hidden}.sidebarLogo__8Im{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo__8Im img{height:2rem;margin-right:.5rem}.expandButton_wG66{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon__WPc{transform:rotate(180deg)}.docSidebarContainer_yZX9{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_D9jl{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_sl_0{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_tpdO{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_u9if{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_RMEV{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_pjLh{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.docItemCol_qFW7{max-width:75%!important}}@media (min-width:1080px){.header-bg{height:330px}}@media (min-width:1280px){.xl\:absolute{position:absolute}.xl\:bottom-14{bottom:3.5rem}.xl\:bottom-8{bottom:2rem}.xl\:mt-0{margin-top:0}.xl\:flex{display:flex}.xl\:w-\[280px\]{width:280px}.xl\:flex-row{flex-direction:row}.xl\:pb-0{padding-bottom:0}.xl\:text-\[140px\]{font-size:140px}.xl\:leading-\[100px\]{line-height:100px}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}.header-bg{height:440px}}@media (min-width:1920px){.header-bg{height:440px}}@media (min-width:2560px){.header-bg{height:440px}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_SYc1,.footer__link-separator,.navbar__item,.tableOfContents_BZNS{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.features_src-components-HomepageFeatures-styles-module .col{--ifm-col-width:50%!important}.docItemContainer_MIA2{padding:0 .3rem}.navbarSearchContainer_pjLh{position:absolute;right:var(--ifm-navbar-padding-horizontal)}}@media only screen and (max-width:996px){.searchQueryColumn_YQZz,.searchResultsColumn_QzhY{max-width:60%!important}.searchLogoColumn_yymS,.searchVersionColumn_JJm2{max-width:40%!important}.searchLogoColumn_yymS{padding-left:0!important}}@media screen and (max-width:996px){.navbar__logo{align-items:center;display:flex}.navbar__logo img{width:70%}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{-webkit-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media screen and (max-width:576px){.searchQueryColumn_YQZz{max-width:100%!important}.searchVersionColumn_JJm2{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (max-width:426px){.col{--ifm-col-width:100%!important}}@media (hover:hover){.backToTopButton_Q4cv:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}.motion-reduce\:transition-none{transition-property:none}.motion-reduce\:after\:transition-none:after{content:var(--tw-content);transition-property:none}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}@media print{.announcementBar_YClq,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_Xpp9{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_w6yq{white-space:pre-wrap}} \ No newline at end of file diff --git a/build/assets/images/archi-722265224ea729def09d6641d267c941.png b/build/assets/images/archi-722265224ea729def09d6641d267c941.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c207edf8b522de4885b87c78a63bcafbbbdff5 GIT binary patch literal 271850 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 \ No newline at end of file diff --git a/build/docs/about-morph/overview-of-morph/index.html b/build/docs/about-morph/overview-of-morph/index.html index 4f6c2d6f4..be4b4d432 100644 --- a/build/docs/about-morph/overview-of-morph/index.html +++ b/build/docs/about-morph/overview-of-morph/index.html @@ -3,21 +3,25 @@ -Overview | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Overview | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

Overview

Welcome to Morph, a blockchain for consumers. At the core of Morph is a revolutionary approach to Ethereum Layer 2 scalability, harnessing the power of rollup technology.

+

Overview

Welcome to Morph, a blockchain for consumers. At the core of Morph is a revolutionary approach to Ethereum Layer 2 scalability, harnessing the power of rollup technology.

Our platform is uniquely designed to enhance the blockchain experience, making it more accessible, efficient, and user-friendly for both developers and consumers. We achieve these innovations through a unique combination of cutting-edge technologies.

-

What Makes Morph Special

+

What Makes Morph Special

Given that our platform is built on the philosophy of consumer-centric innovation, we believe blockchain technology has the transformative power to enhance users’ daily lives. To accomplish this vision, our infrastructure has three core technological components that function as the foundation of a consumer blockchain.

-

Decentralized Sequencer Network

+

Decentralized Sequencer Network

Morph’s distribution of the sequencing role eliminates single points of failure, reduces transaction censorship, and prevents monopolies over Miner Extractable Value (MEV). Building on Morph means guaranteed high availability, resilience, and fairness in transaction processing.

-

Optimistic zkEVM Integration

+

Optimistic zkEVM Integration

Morph’s Optimistic zkEVM Integration combines the efficiency of optimistic rollups with the security of zero-knowledge proofs, using a novel method called Responsive Validity Proof (RVP). RVP reduces costs and shortens withdrawal periods while maintaining high security, enabling robust applications that don’t compromise on performance or security.

-

Modular Design

+

Modular Design

Morph's architecture is divided into three modules: Sequencer Network for consensus and execution, Optimistic zkEVM for state verification, and Rollup for data availability. Developers can build and maintain applications more efficiently, ensuring each component can be upgraded independently without disrupting the entire system.

-

Before you dive into a deeper exploration of our technology, understanding our Vision and Mission will offer a better idea of why Morph stands out in the industry.

+

Before you dive into a deeper exploration of our technology, understanding our Vision and Mission will offer a better idea of why Morph stands out in the industry.

\ No newline at end of file diff --git a/build/docs/about-morph/roadmap/index.html b/build/docs/about-morph/roadmap/index.html index 19d12b3cf..e4c0ca5fb 100644 --- a/build/docs/about-morph/roadmap/index.html +++ b/build/docs/about-morph/roadmap/index.html @@ -3,35 +3,36 @@ -Roadmap | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Roadmap | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

Roadmap

tip

The roadmap is subject to changes based on technological developments, community feedback, and external factors.

-

1

-

Phase 1: Testnet (2024 H1)

-

Testnet Sepolia (2024 Q1)

+

Roadmap

tip

The roadmap is subject to changes based on technological developments, community feedback, and external factors.

+

1

+

2024 Q1

  • Optimistic zkEVM
  • Decentralized Sequencers
-

Testnet Holesky (2024 Q2)

+

2024 Q2

  • EIP-4844 Integration
  • zkEVM Upgrade
-

Testnet Holesky

-

Phase 2: Mainnet Launch (2024 H2)

-

Mainnet Beta 2024 Q3

+

2024 Q4

    -
  • Morph Staking
  • -
  • Morph Zoo Season 1
  • +
  • 1st Rollup with SP1 zkVM
  • +
  • 1st Rollup with Decentralized Sequencers
-

Mainnet Update Q4

+

2025 Q1

    -
  • Consumer Layer Launch
  • -
  • zkVM Upgrade
  • -
+
  • Morph Pay
  • +
  • Gasless Transaction
  • +
    \ No newline at end of file diff --git a/build/docs/about-morph/the-technology-behind-morph/index.html b/build/docs/about-morph/the-technology-behind-morph/index.html index 63f17dd32..25a763755 100644 --- a/build/docs/about-morph/the-technology-behind-morph/index.html +++ b/build/docs/about-morph/the-technology-behind-morph/index.html @@ -3,17 +3,21 @@ -The Technology Behind Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +The Technology Behind Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    The Technology Behind Morph

    Decentralized Sequencer Network

    +

    The Technology Behind Morph

    Decentralized Sequencer Network

    Morph's Decentralized Sequencer Network is designed to enhance the security and reliability of the blockchain. Unlike traditional Layer 2 solutions that rely on a centralized sequencer, Morph employs a network of decentralized sequencers. This setup ensures that no single entity has control over the transaction sequencing process, thereby eliminating the risk of a single point of failure. If one sequencer fails or acts maliciously, the others can continue processing transactions, maintaining the system's integrity and uptime. This decentralization also prevents transaction censorship and ensures that no single entity can monopolize Miner Extractable Value (MEV), creating a fairer environment for all users.

    This collaborative approach not only increases security but also improves the overall efficiency and reliability of the transaction processing system, making Morph a robust and resilient Layer 2 solution.

    -

    Sequqencer Network

    +

    Sequqencer Network

    Visit Morph’s Decentralized Sequencer Network for a more comprehensive article.

    -

    Optimistic zkEVM Integration

    +

    Optimistic zkEVM Integration

    Optimistic and Zero-Knowledge (ZK) rollups are two distinct approaches to scaling blockchain transactions on layer 2. Optimistic rollups simply assume all transactions are valid when submitting a batch for settlement on Ethereum. However, the validity of any transaction can be contested by entities known as challengers, by submitting proof of fraudulent activity. If the fraud-proof is successful, the incorrect transaction is rejected, ensuring security but at the cost of some potential delays and high gas fees associated with the challenge process.

    ZK rollups, on the other hand, use cryptographic proofs to verify the validity of transactions before these are submitted for settlement. All batches have their own ZK proof, allowing quick verification on the main chain without needing to review all the data associated with each transaction (hence “zero-knowledge”). This offers immediate finality with higher security, but generating these proofs is computationally intensive and costly.

    Morph’s hybrid rollup combines the best of these two approaches. Initially, the system operates optimistically, assuming transactions are valid to allow for quick processing and low costs. When a transaction is contested within Morph’s challenge window, it’s the sequencer that is required to produce a ZK proof to validate the transaction. We call this approach Responsive Validity Proof (RVP). It comes with the following improvements:

    @@ -21,11 +25,11 @@

    Efficiency and Speed: A typical 7-day challenge window can be shortened to 1-3 days (a challenger no longer needs the extra time to identify malicious submissions, create a proof, and engage in multiple rounds of challenge procedures).
  • Reduced Costs: Employing ZK-proofs means that only minimal transaction information is retained, thereby significantly reducing the cost of L2 submissions. When no challenges arise, the cost of ZK-proof submission and verification can be ignored. RVP is therefore more cost-effective than both optimistic and ZK rollups.
  • -

    Sequqencer Network

    +

    Sequqencer Network

    Visit Responsive Validity Proof for a more comprehensive article.

    -

    Modular Design

    +

    Modular Design

    At its core, Morph is constructed using a sophisticated modular design architecture. The platform is organized into three functional modules (Sequencer Network, Rollup, Optimistic zk-EVM), each defined by distinct roles that collaborate in various configurations to meet diverse requirements. Each role within these modules operates its specific components, maintaining functional independence. This modular structure not only fosters flexibility and adaptability but also bolsters the composability of the system. It enables an efficient and interactive ecosystem, supporting the varied operational needs of our platform.

    -

    Sequqencer Network

    -

    Visit Morph’s Modular Design for a more comprehensive article.

    +

    Sequqencer Network

    +

    Visit Morph’s Modular Design for a more comprehensive article.

    \ No newline at end of file diff --git a/build/docs/about-morph/user-navigation-page/index.html b/build/docs/about-morph/user-navigation-page/index.html index d6a284d05..3f18f861c 100644 --- a/build/docs/about-morph/user-navigation-page/index.html +++ b/build/docs/about-morph/user-navigation-page/index.html @@ -3,21 +3,28 @@ -Welcome to Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Welcome to Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Welcome to Morph

    We’re thrilled to have you here, exploring the world of Morph. If you’re a developer looking for technical documentation, head over to our For Developers section. But if you’re here to understand what Morph is all about, you’re in the right place!

    -

    userpage

    -

    What is Morph?

    +

    Welcome to Morph

    We’re thrilled to have you here, exploring the world of Morph. If you’re a developer looking for technical documentation, head over to our For Developers section. But if you’re here to understand what Morph is all about, you’re in the right place!

    +

    userpage

    +

    What is Morph?

    Morph is a cutting-edge Layer 2 solution built on Ethereum, combining the best of optimistic rollups and zk technology. This makes us scalable, secure, and perfect for everyday applications. Our mission is to build the first blockchain for consumers, where user-friendly applications integrate seamlessly into everyday life, becoming indispensable utilities. We prioritize enabling blockchain applications that enhance daily experiences over chasing trivial technical milestones. Our focus is on creating meaningful, practical solutions that transform blockchain technology into core aspects of daily life

    -

    Getting Started

    +

    Getting Started

    To help you navigate through our resources, here’s a quick guide:

    Introductory Concepts: Get a general understanding of Morph, including what makes it unique, our vision and mission, key concepts, and a look at our roadmap. This section will help you grasp the basics and understand the foundation of Morph.

    +

    Step-by-Step Guides: Follow these practical tutorials for setting up your wallet, using the faucet, bridging assets, and exploring the Morph ecosystem. These guides are perfect for hands-on learning and getting started with Morph.

    +

    Links and Tools: Access useful tools such as the Morph Holesky Explorer and the official bridge. This section provides all the necessary links and resources to interact with and explore the Morph network effectively.

    -

    Engage in Our Ecosystem

    + +

    Engage in Our Ecosystem

    Want to skip most of the reading and get started with exploring more right away? These are the guides that will get you right into the action:

    • Wallet Setup: Learn how to set up your wallet to interact with Morph.
    • @@ -26,7 +33,7 @@

      Enga
    • Exploring Morph Zoo: Dive into the diverse range of dApps and projects in the Morph ecosystem.
    • Morph Holesky Explorer: Use our explorer to track transactions and explore the blockchain.
    -

    Explore and Connect

    -

    We believe in building a vibrant community around Morph. Join us on Discord to engage with other users and follow us on Twitter to stay updated with our latest news and developments.

    +

    Explore and Connect

    +

    We believe in building a vibrant community around Morph. Join us on Discord to engage with other users and follow us on Twitter to stay updated with our latest news and developments.

    \ No newline at end of file diff --git a/build/docs/about-morph/where-should-i-start/index.html b/build/docs/about-morph/where-should-i-start/index.html index aa722c456..7306f28da 100644 --- a/build/docs/about-morph/where-should-i-start/index.html +++ b/build/docs/about-morph/where-should-i-start/index.html @@ -3,17 +3,21 @@ -Where Should I Start? | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Where Should I Start? | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Where Should I Start?

    For Developers: Dive Into Building On Morph

    +

    Where Should I Start?

    For Developers: Dive Into Building On Morph

    As a developer keen on harnessing the innovative capabilities of the Morph network, your journey begins in the "Build on Morph" section of our documentation. Here, you'll find all the resources you need – from comprehensive guides and tutorials to practical examples. These materials are designed to elucidate the core concepts and features of Morph, enabling you to integrate with our APIs, deploy sophisticated smart contracts, and utilize an array of tools and libraries. The "Build on Morph" guide is your gateway to crafting powerful, decentralized applications that leverage the full potential of our network.

    -

    For Users: Embark On Your Morph Journey

    +

    For Users: Embark On Your Morph Journey

    If you're eager to explore the possibilities within the Morph network, the "Quick Start" section in our documentation is your ideal starting point. Tailored for ease of understanding, this guide walks you through the essentials – from setting up your wallet to engaging in transactions on the network. It's designed to introduce you to the world of asset transfers, decentralized finance, and the diverse range of dApps available on Morph. Follow the "Quick Start" guide for a smooth, user-friendly introduction to leveraging Morph's functionalities in your everyday activities.

    -

    For Researchers: Unraveling The Technical Depth Of Morph

    +

    For Researchers: Unraveling The Technical Depth Of Morph

    For those intrigued by the technical intricacies of the Morph network, the "How Morph Works" section offers an in-depth exploration of its underlying architecture and mechanisms. This comprehensive resource is rich in technical details, providing an extensive understanding of Morph's innovative features and foundational principles. Whether you're delving into research or seeking a thorough grasp of blockchain technology, this section unveils the nuances and sophisticated engineering that define the Morph network.

    -

    No matter your background – developer, user, or researcher – our documentation is structured to offer you a customized pathway into the Morph ecosystem. Each guide is designed to help you leverage and understand our state-of-the-art technology and features, ensuring a rewarding experience on the Morph network.

    +

    No matter your background – developer, user, or researcher – our documentation is structured to offer you a customized pathway into the Morph ecosystem. Each guide is designed to help you leverage and understand our state-of-the-art technology and features, ensuring a rewarding experience on the Morph network.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/bridge-between-morph-and-ethereum/index.html b/build/docs/build-on-morph/build-on-morph/bridge-between-morph-and-ethereum/index.html index dd400ca6f..06c059e0e 100644 --- a/build/docs/build-on-morph/build-on-morph/bridge-between-morph-and-ethereum/index.html +++ b/build/docs/build-on-morph/build-on-morph/bridge-between-morph-and-ethereum/index.html @@ -3,15 +3,19 @@ -Bridge between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Bridge between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Bridge between Morph and Ethereum

    Please first review our documentation on Communication Between Morph and Ethereum for some required fundamental knowledge.

    -

    Deposit ETH and ERC20 Tokens from L1​

    +

    Bridge between Morph and Ethereum

    Please first review our documentation on Communication Between Morph and Ethereum for some required fundamental knowledge.

    +

    Deposit ETH and ERC20 Tokens from L1​

    The Gateway Router allows ETH and ERC20 token bridging from L1 to L2 using the depositETH and depositERC20 functions respectively. It is a permissionless bridge deployed on L1. Notice that ERC20 tokens will have a different address on L2, you can use the getL2ERC20Address function to query the new address.

    -
    tip

    depositETH and depositERC20 are payable functions, the amount of ETH sent to these functions will be used +

    tip

    depositETH and depositERC20 are payable functions, the amount of ETH sent to these functions will be used to pay for L2 fees. If the amount is not enough, the transaction will not be sent. All excess ETH will be sent back to the sender. 0.00001 ETH should be more than enough to process a token deposit.

    When bridging ERC20 tokens, you don’t have to worry about selecting the right Gateway. This is because the L1GatewayRouter will choose the correct underlying entry point to send the message:

    @@ -21,11 +25,11 @@

    Withdraw ETH and ERC20 tokens from L2

    +

    Withdraw ETH and ERC20 tokens from L2

    The L2 Gateway is very similar to the L1 Gateway. We can withdraw ETH and ERC20 tokens back to L1 using the withdrawETH and withdrawERC20 functions. The contract address is deployed on L2. We use the getL1ERC20Address to retrieve the token address on L1.

    -
    tip

    withdrawETH and withdrawERC20 are payable functions, and the amount of ETH sent to these functions will be used to pay for L1 fees. If the amount is not enough, the transaction will not be sent. All excess ETH will be sent back to the sender. Fees will depend on L1 activity but 0.005 ETH should be enough to process a token withdrawal.

    -
    tip

    Ensure transactions won’t revert on L1 while sending from L2 There is no way to recover bridged ETH, tokens, or NFTs if your transaction reverts on L1. All assets are burned on Morph when the transaction is sent, and it's impossible to mint them again.

    -

    Finalize your Withdrawal

    +
    tip

    withdrawETH and withdrawERC20 are payable functions, and the amount of ETH sent to these functions will be used to pay for L1 fees. If the amount is not enough, the transaction will not be sent. All excess ETH will be sent back to the sender. Fees will depend on L1 activity but 0.005 ETH should be enough to process a token withdrawal.

    +
    tip

    Ensure transactions won’t revert on L1 while sending from L2 There is no way to recover bridged ETH, tokens, or NFTs if your transaction reverts on L1. All assets are burned on Morph when the transaction is sent, and it's impossible to mint them again.

    +

    Finalize your Withdrawal

    Besides starting a withdrawal request on Morph, there is one additional step to do. You need to finalize your withdrawal on Ethereum.

    This is because of Morph's optimistic zkEVM design, you can read the details here:

    To do this, first you need to make sure:

    @@ -44,31 +48,31 @@

    Fin

    you need to use the proveAndRelayMessage function of the L1CrossDomainMessenger contract.

    After obtaining the above information, the finalization of the withdraw operation can be carried out by calling L1CrossDomainMessenger.proveAndRelayMessage().

    The required parameters are

    -
      address _from, 
    address _to,
    uint256 _value,
    uint256 _nonce,
    bytes memory _message,
    bytes32[32] calldata _withdrawalProof,
    bytes32 _withdrawalRoot
    +
      address _from, 
    address _to,
    uint256 _value,
    uint256 _nonce,
    bytes memory _message,
    bytes32[32] calldata _withdrawalProof,
    bytes32 _withdrawalRoot

    _from, _to, _value, _nonce, and _message are the original content of the withdraw transaction, which can be obtained from the Event SentMessage included in the transaction initiated by the L2 layer withdraw.

    _withdrawalProof and _withdrawalRoot can be obtained from the aforementioned backend API interface.

    -
    Use the SDK

    You can also try our SDK to interact with the bridge system by referring to our SDK Doc.

    -

    Add your Token to the Official Bridge

    -

    Currently, our official bridge only supports certain pre-defined tokens to be bridged. If you want to bridge your own tokens, you need to manually add the token, and here is how to do it.

    -

    Add Tokens to the gateway through Morph Bridge Frontend

    -

    The easiest way to support your token is to manually add it on our official bridge frontend, you can simply do it with the following steps:

    +
    Use the SDK

    You can also try our SDK to interact with the bridge system by referring to our SDK Doc.

    +

    Add your Token to the Official Bridge

    +

    Currently, our canonical bridge only supports certain pre-defined tokens to be bridged. If you want to bridge your own tokens, you need to manually add the token, and here is how to do it.

    +

    Add Tokens to the gateway through Morph Bridge Frontend

    +

    The easiest way to support your token is to manually add it on our canonical bridge frontend, you can simply do it with the following steps:

    1. Click the token selection button on Morph Holesky Bridge
    -

    tokenlist1

    +

    tokenlist1

    1. Input & Confirm your desire Ethereum token contract address under the custom token section
    -

    tokenlist2

    +

    tokenlist2

    1. Get the Layer 2 token contract address and confirm it.
    -

    tokenlist3

    +

    tokenlist3

    1. Now it is supported and you and other users can start to bridge it!
    -

    tokenlist4

    -

    Add token support to the bridge frontend

    +

    tokenlist4

    +

    Add token support to the bridge frontend

    By adding your token to the gateway, you and other users can bridge the token by inputting the token address.You need to raise a PR to our bridge repo if you want your token shown on the bridge frontend token list.

    You can find how to do it in the morph list repo.

    Keep in mind that:

    @@ -76,6 +80,6 @@

    example PR commit for your reference.

    +

    Here is an example PR commit for your reference.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/development-setup/index.html b/build/docs/build-on-morph/build-on-morph/development-setup/index.html index 9673d46c9..73278d8c7 100644 --- a/build/docs/build-on-morph/build-on-morph/development-setup/index.html +++ b/build/docs/build-on-morph/build-on-morph/development-setup/index.html @@ -3,12 +3,16 @@ -Development Setup | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Development Setup | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Start Developing on Morph

    +

    Start Developing on Morph

    Developing on Morph is as straightforward as developing on Ethereum.

    To deploy contracts onto a MorphL2 chain, simply set the RPC endpoint of your target MorphL2 chain and deploy using your preferred Ethereum development framework:

      @@ -20,42 +24,36 @@

    ...it all just works!

    Mainnet:

    -

    Step 1: Network Configuration

    +

    Step 1: Network Configuration

    Before you start, ensure you are connected to the following networks:

    Network NameMorph MainnetEthereum Mainnet
    RPC URLhttps://rpc-quicknode.morphl2.iohttps://ethereum-rpc.publicnode.com/
    Chain ID28181
    Currency SymbolETHETH
    Block Explorer URLhttps://explorer.morphl2.io/https://etherscan.io/
    -
    Websocket Connection

    wss://rpc-quicknode.morphl2.io

    -

    Tendermint Consensus Information

    -

    Tendermint RPC: https://rpc-consensus.morphl2.io

    -

    Tendermint RPC Documentation: https://docs.tendermint.com/v0.34/rpc/#/

    -

    Step 2: Set up your developing framework

    -

    Hardhat

    +
    Websocket Connection

    wss://rpc-quicknode.morphl2.io

    +

    Step 2: Set up your developing framework

    +

    Hardhat

    Modify your Hardhat config file hardhat.config.ts to point at the Morph public RPC.

    -
    const config: HardhatUserConfig = {
    ...
    networks: {
    morphl2: {
    url: 'https://rpc-quicknode.morphl2.io',
    accounts:
    process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
    gasprice = 1000000000
    },
    },
    };

    -

    Foundry

    +
    const config: HardhatUserConfig = {
    ...
    networks: {
    morphl2: {
    url: 'https://rpc-quicknode.morphl2.io',
    accounts:
    process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
    gasprice = 1000000000
    },
    },
    };

    +

    Foundry

    To deploy using Morph Public RPC, run:

    -
    forge create ... --rpc-url= --legacy
    -

    ethers.js

    +
    forge create ... --rpc-url= --legacy
    +

    ethers.js

    Setting up a Morph provider in an ethers script:

    -
    import { ethers } from 'ethers';

    const provider = new ethers.providers.JsonRpcProvider(
    'https://rpc-quicknode.morphl2.io'
    );
    +
    import { ethers } from 'ethers';

    const provider = new ethers.providers.JsonRpcProvider(
    'https://rpc-quicknode.morphl2.io'
    );

    Holesky Testnet:

    -

    Step 1: Network Configuration

    +

    Step 1: Network Configuration

    Before you start, ensure you are connected to the following networks:

    Network NameMorph Holesky TestnetHolesky Testnet
    RPC URLhttps://rpc-quicknode-holesky.morphl2.iohttps://ethereum-holesky-rpc.publicnode.com/
    Chain ID281017000
    Currency SymbolETHETH
    Block Explorer URLhttps://explorer-holesky.morphl2.io/https://holesky.etherscan.io/
    -
    Websocket Connection

    wss://rpc-quicknode-holesky.morphl2.io

    -

    Tendermint Consensus Information

    -

    Tendermint RPC: https://rpc-consensus-holesky.morphl2.io

    -

    Tendermint RPC Documentation: https://docs.tendermint.com/v0.34/rpc/#/

    -

    Step 2: Set up your developing framework

    -

    Hardhat

    +
    Websocket Connection

    wss://rpc-quicknode-holesky.morphl2.io

    +

    Step 2: Set up your developing framework

    +

    Hardhat

    Modify your Hardhat config file hardhat.config.ts to point at the Morph public RPC.

    -
    const config: HardhatUserConfig = {
    ...
    networks: {
    morphl2: {
    url: 'https://rpc-quicknode-holesky.morphl2.io',
    accounts:
    process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
    gasprice = 2000000000
    },
    },
    };

    -

    Foundry

    +
    const config: HardhatUserConfig = {
    ...
    networks: {
    morphl2: {
    url: 'https://rpc-quicknode-holesky.morphl2.io',
    accounts:
    process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
    gasprice = 2000000000
    },
    },
    };

    +

    Foundry

    To deploy using Morph Public RPC, run:

    -
    forge create ... --rpc-url= --legacy
    -

    ethers.js

    +
    forge create ... --rpc-url= --legacy
    +

    ethers.js

    Setting up a Morph provider in an ethers script:

    -
    import { ethers } from 'ethers';

    const provider = new ethers.providers.JsonRpcProvider(
    'https://rpc-quicknode-holesky.morphl2.io'
    );
    -

    Step 3: Acquire Ether

    +
    import { ethers } from 'ethers';

    const provider = new ethers.providers.JsonRpcProvider(
    'https://rpc-quicknode-holesky.morphl2.io'
    );
    +

    Step 3: Acquire Ether

    To start building on Morph, you may need some testnet ETH. Use a faucet to acquire holesky Ether, then bridge the test Ethereum Ether to the Morph testnet.

    Each faucet has its own rules and requirements, so you may need to try a few before finding one that works for you.

    Holesky ETH faucet websites:

    @@ -65,6 +63,6 @@

    Step 3:

    https://cloud.google.com/application/web3/faucet/ethereum (needs a Google account)

    We have our own website faucet that can claim ETH & USDT for you initial usage.

    Morph also offers a Discord faucet to obtain Morph Holesky USDT & Morph Holesky ETH.

    -

    Once you receive ETH on Holesky, you should see it in your wallet on the Holesky Network. It may take a few seconds for them to appear, but you can check the status by looking for a transaction to your address on a Holesky Block Explorer.

    +

    Once you receive ETH on Holesky, you should see it in your wallet on the Holesky Network. It may take a few seconds for them to appear, but you can check the status by looking for a transaction to your address on a Holesky Block Explorer.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum/index.html b/build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum/index.html deleted file mode 100644 index bf8539b8c..000000000 --- a/build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - -Difference between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs - - - - -

    Difference between Morph and Ethereum

    There are several technical differences between Ethereum’s EVM and Morph's optimistic zkEVM.

    -

    We’ve compiled a list to help you understand these distinctions better.

    -
    tip

    For most Solidity developers, these technical details won't significantly impact your development experience.

    -

    EVM Opcodes

    -
    OpcodeSolidity equivalentMorph Behavior
    BLOCKHASHblock.blockhashReturns keccak(chain_id || block_number) for the last 256 blocks.
    COINBASEblock.coinbaseReturns the pre-deployed fee vault contract address. See Contracts
    DIFFICULTY / PREVRANDAOblock.difficultyReturns 0.
    SELFDESTRUCTselfdestructDisabled. If the opcode is encountered, the transaction will be reverted.
    BLOBHASHtx.blob_versioned_hashes[index]Not supported
    BLOBBASEFEEblob_base_fee = BLOBBASEFEE()Not supported
    -

    EVM Precompiles

    -

    The RIPEMD-160 (address 0x3) blake2f (address 0x9), and point evaluation (address 0x0a) precompiles are currently not supported. Calls to unsupported precompiled contracts will revert. We plan to enable these precompiles in future hard forks.

    -

    The modexp precompile is supported but only supports inputs of size less than or equal to 32 bytes (i.e. u256).

    -

    The ecPairing precompile is supported, but the number of points(sets, pairs) is limited to 4, instead of 6.

    -

    The other EVM precompiles are all supported: ecRecover, identity, ecAdd, ecMul.

    -

    Precompile Limits

    -

    Because of a bounded size of the zkEVM circuits, there is an upper limit on the number of calls that can be made for some precompiles. These transactions will not revert, but simply be skipped by the sequencer if they cannot fit into the space of the circuit.

    -
    Precompile / OpcodeLimit
    keccak2563157
    ecRecover119
    modexp23
    ecAdd50
    ecMul50
    ecPairing2
    -
    Several opcode not available

    BLOBHASH and BLOBBASEFEE are not supported on Morph yet. Additionally, EIP-4788 for accessing the Beacon Chain block root is not supported.

    -

    State Account

    -

    Additional Fields

    -

    We added two fields in the current StateAccount object: PoseidonCodehash and CodeSize.

    -
    type StateAccount struct {
    Nonce uint64
    Balance *big.Int
    Root common.Hash // merkle root of the storage trie
    KeccakCodeHash []byte // still the Keccak codehash
    // added fields
    PoseidonCodeHash []byte // the Poseidon codehash
    CodeSize uint64
    }
    -

    CodeHash

    -

    Related to this, we maintain two types of codehash for each contract bytecode: Keccak hash and Poseidon hash.

    -

    KeccakCodeHash is kept to maintain compatibility for EXTCODEHASH. PoseidonCodeHash is used for verifying the correctness of bytecodes loaded in the zkEVM, where Poseidon hashing is far more efficient.

    -

    CodeSize

    -

    When verifying EXTCODESIZE, it is expensive to load the whole contract data into the zkEVM. Instead, we store the contract size in storage during contract creation. This way, we do not need to load the code — a storage proof is sufficient to verify this opcode.

    -

    Block Time

    -
    Block Time Subject to Change

    Blocks are produced every second, with an empty block generated if there are no transactions for 5 seconds. However, this frequency may change in the future.

    -

    To compare, Ethereum has a block time of ~12 seconds.

    -

    Reasons for Faster Block Time in Morph -User Experience:

    -
      -
    • -

      A faster, consistent block time provides quicker feedback, enhancing the user experience.

      -
    • -
    • -

      Optimization: As we refine the zkEVM circuits in our testnets, we can achieve higher throughput than Ethereum, even with a smaller gas limit per block or batch.

      -
    • -
    -

    Notice:

    -
      -
    • TIMESTAMP will return the timestamp of the block. It will update every second.
    • -
    • BLOCKNUMBER will return an actual block number. It will update every second. The one-to-one mapping between blocks and transactions will no longer apply.
    • -
    -

    Future EIPs

    -

    Morph closely monitors emerging Ethereum Improvement Proposals (EIPs) and adopts them when suitable. For more specifics, join our community forum or Discord for discussions.

    -

    Transaction Fees

    - - \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum.htm/index.html b/build/docs/build-on-morph/build-on-morph/integration-one-page-cn.htm/index.html similarity index 60% rename from build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum.htm/index.html rename to build/docs/build-on-morph/build-on-morph/integration-one-page-cn.htm/index.html index ccf1d7529..6e6dd0601 100644 --- a/build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum.htm/index.html +++ b/build/docs/build-on-morph/build-on-morph/integration-one-page-cn.htm/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum.html/index.html b/build/docs/build-on-morph/build-on-morph/integration-one-page-cn.html/index.html similarity index 60% rename from build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum.html/index.html rename to build/docs/build-on-morph/build-on-morph/integration-one-page-cn.html/index.html index ccf1d7529..6e6dd0601 100644 --- a/build/docs/build-on-morph/build-on-morph/difference-between-morph-and-ethereum.html/index.html +++ b/build/docs/build-on-morph/build-on-morph/integration-one-page-cn.html/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/integration-one-page-cn/index.html b/build/docs/build-on-morph/build-on-morph/integration-one-page-cn/index.html new file mode 100644 index 000000000..ade1d51e8 --- /dev/null +++ b/build/docs/build-on-morph/build-on-morph/integration-one-page-cn/index.html @@ -0,0 +1,47 @@ + + + + + +中文开发者集成文档 | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + +

    中文开发者集成文档

    网络参数

    +
    网络链 IDRPC URL区块浏览器
    Morph 主网2818https://rpc-quicknode.morphl2.iohttps://explorer.morphl2.io/
    Ethereum 主网1https://ethereum-rpc.publicnode.com/https://etherscan.io/
    Morph Holesky 测试网2810https://rpc-quicknode-holesky.morphl2.iohttps://explorer-holesky.morphl2.io/
    Holesky 测试网17000https://ethereum-holesky-rpc.publicnode.com/https://holesky.etherscan.io/
    +

    请注意,我们已为公共 RPC 访问设置了速率限制,目前为每个 IP 每分钟 600 次请求。

    +

    如果您需要更高的额度,请联系Morph团队为您开放更高限额。您还可以使用我们的合作伙伴产品 quicknodetenderly 创建自己的私人 RPC。

    +
    Websocket 连接

    wss://rpc-quicknode.morphl2.io

    +

    浏览器信息

    +

    官方主网浏览器

    +

    官方测试网浏览器

    +

    浏览器 API 文档

    +

    浏览器 API: https://explorer-api.morphl2.io/api

    +

    测试网浏览器 API: https://explorer-holesky-api.morphl2.io/api

    +

    有关如何在 Morph 浏览器上验证您的合约的详细指南,点击这里

    +

    桥信息

    +

    官方桥

    +

    官方测试网桥

    +
    提现和存款时间

    由于 Morph opzkEVM 设计,每个提现请求需要经过 48 小时的提现期(挑战窗口)才能完成。

    存款需要等待 2 个以太坊Epoch(大约 13~20 分钟)。

    +

    新桥接资产支持:

    +

    将您的代币添加到官方桥

    +

    您还可以使用 LayerZero 来包装您的代币:

    +

    LayerZero 在 Morph 上

    +

    交易费用与区块

    +

    对于以太坊 Layer2,费用分为两部分:L1 费用和 L2 费用。

    +

    对于 L2 费用,Morph 目前使用与以太坊主网相同的 EIP-1559 机制来计算交易费用。每笔交易将有一个基础费用和一个优先费用。基础费用设定为 0.001 Gwei。如果区块交易限制(每个区块 100 笔)未达到,用户只需要仅支付基础费即可。

    +
    tip

    请注意,我们在测试网上设置了最低的 L2 优先费(0.01 gwei),这是为了防止垃圾交易影响其他正常交易。对于主网,我们可以在不收取优先级费用的情况下处理交易。

    +

    Morph 目前每秒生成 1 个非空区块,如果没有新交易,我们将每 5 秒生成 1 个空区块。

    +

    每个区块最多可以容纳 100 笔交易,我们将继续提高限制来达成更高的TPS。

    +

    重要合约

    +

    我们已记录所有重要的 Morph 合约,您可以在 这里 找到它们。

    +

    节点部署

    +

    目前我们支持您在 Docker 中运行 Morph 节点(全节点和验证节点)或在Host上运行。

    +

    您可以查看 节点部署指南 以获取更多详细信息。

    + + \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/integration-one-page.htm/index.html b/build/docs/build-on-morph/build-on-morph/integration-one-page.htm/index.html new file mode 100644 index 000000000..02ff257b6 --- /dev/null +++ b/build/docs/build-on-morph/build-on-morph/integration-one-page.htm/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/integration-one-page.html/index.html b/build/docs/build-on-morph/build-on-morph/integration-one-page.html/index.html new file mode 100644 index 000000000..02ff257b6 --- /dev/null +++ b/build/docs/build-on-morph/build-on-morph/integration-one-page.html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/integration-one-page/index.html b/build/docs/build-on-morph/build-on-morph/integration-one-page/index.html new file mode 100644 index 000000000..efa2ad59b --- /dev/null +++ b/build/docs/build-on-morph/build-on-morph/integration-one-page/index.html @@ -0,0 +1,47 @@ + + + + + +Morph Integration One Page | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + +

    Morph Integration One Page

    Network Parameters

    +
    NetworkChain IDRPC URLBlock Explorer URL
    Morph Mainnet2818https://rpc-quicknode.morphl2.iohttps://explorer.morphl2.io/
    Ethereum Mainnet1https://ethereum-rpc.publicnode.com/https://etherscan.io/
    Morph Holesky Testnet2810https://rpc-quicknode-holesky.morphl2.iohttps://explorer-holesky.morphl2.io/
    Holesky Testnet17000https://ethereum-holesky-rpc.publicnode.com/https://holesky.etherscan.io/
    +

    To notice, we have set a rate limit for the public RPC access, currently 600 requests per minute per IP.

    +

    If you need higher tps, please contact our team for private RPC access. You can also use our partner quicknode or tenderly to create your own private RPC.

    +
    Websocket Connection

    wss://rpc-quicknode.morphl2.io

    +

    Explorer Information

    +

    Official Mainnet Explorer

    +

    Official Testnet Explorer

    +

    Explorer API Documentation

    +

    Explorer API: https://explorer-api.morphl2.io/api

    +

    Testnet Explorer API: https://explorer-holesky-api.morphl2.io/api

    +

    For detail guide on how to verify your contract on Morph explorer, click here

    +

    Bridge Information

    +

    Official Bridge

    +

    Official Testnet Bridge

    +
    Withdrawal and Deposit Time

    Due to Morph opzkEVM design, each withdrawal request will need to go through a 48 hours withdrawal period (challenge window) to be finalized.

    Deposit needs to wait for 2 Ethereum epoch (about 13~20 min).

    +

    New Bridge Asset Support:

    +

    Add your Token to the Official Bridge

    +

    You can also use LayerZero to wrap your token:

    +

    LayerZero on Morph

    +

    Transaction Fees & Blocks

    +

    For Ethereum Layer2, there are 2 part of fees: L1 fee and L2 fee.

    +

    For L2 fee, Morph currently using the EIP-1559 mechanism for transaction fees same as Ethereum mainnet. Each transaction will have a base fee and a priority fee. The base fee is set to 0.001 Gwei. If the block transaction limit (100 per block) is not reached, only pay base fee is enough.

    +
    tip

    Please note we have a lowest L2 priority fee setting (0.01 gwei) for testnet, this is in order to prevent spams. For mainnet, we are able process transaction without priority fee.

    +

    Morph currently produce 1 block per second for non-empty block, if there is no new transaction, we will produce 1 empty block every 5 seconds.

    +

    Each block can have 100 transactions maximum and we will keep raising the limit.

    +

    Important Contracts

    +

    We have documented all the important contracts on Morph, you can find them here

    +

    Node Deployment

    +

    Right now we support you to run the Morph node (full node and validator node) in docker and run on host.

    +

    You can check the node deployment guide for more details.

    + + \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/understand-transaction-cost-on-morph/index.html b/build/docs/build-on-morph/build-on-morph/understand-transaction-cost-on-morph/index.html index 9d02f5c12..3fc74a5ec 100644 --- a/build/docs/build-on-morph/build-on-morph/understand-transaction-cost-on-morph/index.html +++ b/build/docs/build-on-morph/build-on-morph/understand-transaction-cost-on-morph/index.html @@ -3,27 +3,31 @@ -Understand Transaction Cost on Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Understand Transaction Cost on Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Understand Transaction Cost on Morph

    Transaction fees on Morph work similarly to fees on Ethereum. However, Layer 2 introduces some unique aspects. Morph's optimistic zkEVM makes these differences easy to understand and even easier to handle.

    +

    Understand Transaction Cost on Morph

    Transaction fees on Morph work similarly to fees on Ethereum. However, Layer 2 introduces some unique aspects. Morph's optimistic zkEVM makes these differences easy to understand and even easier to handle.

    This page includes the formula for calculating the gas cost of transactions on Morph. There are two kinds of costs for transactions on Morph: the L2 execution fee and the L1 data/security fee.

    -

    The L2 execution fee

    +

    The L2 execution fee

    Like Ethereum, transactions on Morph incur gas costs for computation and storage usage.

    Every L2 transaction will pay some execution fee, equal to the amount of gas used multiplied by the gas price of the transaction.

    Morph supports EIP-1559 transaction type. The EIP-1559 pricing model, which comprises a base fee and a priority fee, contributes to a more predictable and stable transaction fee.

    The formula is straightforward:

    -
    l2_execution_fee = l2_gas_price * l2_gas_used
    l2_gas_price = l2_base_fee + l2_priority_fee
    +
    l2_execution_fee = l2_gas_price * l2_gas_used
    l2_gas_price = l2_base_fee + l2_priority_fee

    The amount of L2 gas used depends on the specific transaction. Due to EVM compatibility, gas usage on Morph is typically similar to Ethereum.

    -

    The L1 data fee

    +

    The L1 data fee

    Morph transactions are also published to Ethereum, crucial to Morph’s security as it ensures all data needed to verify Morph's state is always publicly available on Ethereum.

    Users must pay for the cost of submitting their transactions to Ethereum, known as the L1 data fee. This fee typically represents most of the total cost of a transaction on Morph.

    Formula:

    -
    l1DataFee = (l1BaseFee * commitScalar + l1BlobBaseFee * len(tx_data) * blobScalar) / rcfg.Precision
    -
    len(tx_data) = count_zero_bytes(tx_data) * 4 + count_non_zero_bytes(tx_data) * 16
    +
    l1DataFee = (l1BaseFee * commitScalar + l1BlobBaseFee * len(tx_data) * blobScalar) / rcfg.Precision
    +
    len(tx_data) = count_zero_bytes(tx_data) * 4 + count_non_zero_bytes(tx_data) * 16

    And other parameters:

    1. l1BaseFee:Layer1 base fee
    2. @@ -31,54 +35,54 @@

      The L1 data
    3. l1BlobBaseFee: the blobBaseFee on L1
    4. blobScalar: a factor used to measure the gas cost for one transaction to be stored in EIP-4844 blob
    -
    tip

    You can read the parameter values from the GasPrice oracle contract. Morph has pre-deployed GasPriceOracle, accessible on Morph mainnet at GasPriceOracle.

    -

    Transaction fees' effect on software development

    -

    Sending transactions

    +
    tip

    You can read the parameter values from the GasPrice oracle contract. Morph has pre-deployed GasPriceOracle, accessible on Morph mainnet at GasPriceOracle.

    +

    Transaction fees' effect on software development

    +

    Sending transactions

    The process of sending a transaction on Morph is identical to sending a transaction on Ethereum.

    When sending a transaction, you should provide a gas price that is greater than or equal to the current L2 gas price.

    Like on Ethereum, you can query this gas price with the eth_gasPrice RPC method.

    Similarly, you should set your transaction gas limit in the same way that you would set it on Ethereum (e.g. via eth_estimateGas).

    -

    Displaying fees to users

    +

    Displaying fees to users

    Many Ethereum applications display estimated fees to users by multiplying the gas price by the gas limit.

    However, as discussed earlier, users on Morph are charged both an L2 execution fee and an L1 data fee.

    As a result, you should display the sum of both of these fees to give users the most accurate estimate of the total cost of a transaction.

    -

    Estimating the L2 execution fee

    +

    Estimating the L2 execution fee

    You can estimate the L2 execution fee by multiplying the gas price by the gas used, just like on Ethereum.

    The formula is straightforward:

    -
    l2_execution_fee = l2_gas_price * l2_gas_used
    l2_gas_price = l2_base_fee + l2_priority_fee
    +
    l2_execution_fee = l2_gas_price * l2_gas_used
    l2_gas_price = l2_base_fee + l2_priority_fee

    The amount of L2 gas used depends on the specific transaction. Due to EVM compatibility, gas usage on Morph is typically similar to Ethereum.

    -

    Estimating the L1 data fee

    -

    You can utilize the pre-deployed L1GasPriceOracle at 0x530000000000000000000000000000000000000F. It offers a getL1Fee method to estimate the L1 data fee for the raw data of a given transaction.

    -
    function getL1Fee(bytes memory _data) external view override returns (uint256);
    -
    tip

    Once the sequencer has processed a transaction, a user's L1 fee is secured, and any fluctuations will not impact what a user pays.

    Due to Morph's ~1s block time, any changes in L1 gas between a transaction's submission and its inclusion in a block should be minimal. The sequencer will account for any variations in L1 gas costs between a transaction's inclusion in a block and when the sequencer commits the data to L1.

    -

    Estimating the total fee

    +

    Estimating the L1 data fee

    +

    You can utilize the pre-deployed L1GasPriceOracle at 0x530000000000000000000000000000000000000f. It offers a getL1Fee method to estimate the L1 data fee for the raw data of a given transaction.

    +
    function getL1Fee(bytes memory _data) external view override returns (uint256);
    +
    tip

    Once the sequencer has processed a transaction, a user's L1 fee is secured, and any fluctuations will not impact what a user pays.

    Due to Morph's ~1s block time, any changes in L1 gas between a transaction's submission and its inclusion in a block should be minimal. The sequencer will account for any variations in L1 gas costs between a transaction's inclusion in a block and when the sequencer commits the data to L1.

    +

    Estimating the total fee

    You can estimate the total fee by combining your estimates for the L2 execution fee and L1 data fee.

    -

    Sending max ETH

    +

    Sending max ETH

    Sending the maximum amount of ETH that a user has in their wallet is a relatively common use case.

    When doing this, you will need to subtract the estimated L2 execution fee and the estimated L1 data fee from the amount of ETH you want the user to send.

    Use the logic described above for estimating the total fee.

    -

    Common RPC Errors

    -

    Insufficient funds

    +

    Common RPC Errors

    +

    Insufficient funds

    • Error code: -32000
    • Error message: invalid transaction: insufficient funds for l1Fee + l2Fee + value

    You'll get this error when attempting to send a transaction and you don't have enough ETH to pay for the value of the transaction, the L2 execution fee, and the L1 data fee. You might get this error when attempting to send max ETH if you aren't properly accounting for both the L2 execution fee and the L1 data fee.

    -

    Gas price too low

    +

    Gas price too low

    • Error code: -32000
    • Error message: gas price too low: X wei, use at least tx.gasPrice = Y wei

    This is a custom RPC error that Morph returns when a transaction is rejected because the gas price is too low. See the section on Responding to gas price updates for more information.

    -

    Gas price too high

    +

    Gas price too high

    • Error code: -32000
    • Error message: gas price too high: X wei, use at most tx.gasPrice = Y wei

    This is a custom RPC error that Morph returns when a transaction is rejected because the gas price is too high. -We include this as a safety measure to prevent users from accidentally sending a transaction with an extremely high L2 gas price. -See the section on Responding to gas price updates for more information.

    +We include this as a safety measure to prevent users from accidentally sending a transaction with an extremely high L2 gas price.

    +

    See the section on Responding to gas price updates for more information.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/build-on-morph/verify-your-smart-contracts/index.html b/build/docs/build-on-morph/build-on-morph/verify-your-smart-contracts/index.html index 7059c1c6c..684585b4f 100644 --- a/build/docs/build-on-morph/build-on-morph/verify-your-smart-contracts/index.html +++ b/build/docs/build-on-morph/build-on-morph/verify-your-smart-contracts/index.html @@ -3,21 +3,25 @@ -Verify Your Smart Contracts | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Verify Your Smart Contracts | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Verify Your Smart Contracts

    After deploying your smart contracts, it's crucial to verify your code on our block explorer. This can be automated using your development framework, such as Hardhat.

    -

    Verify with development framework

    +

    Verify Your Smart Contracts

    After deploying your smart contracts, it's crucial to verify your code on our block explorer. This can be automated using your development framework, such as Hardhat.

    +

    Verify with development framework

    Most smart contract tools have plugins for verifying contracts on Etherscan. Blockscout supports Etherscan's contract verification APIs, making it straightforward to use these tools with the Morph Mainnet & Testnet.

    -

    Verify with Hardhat

    +

    Verify with Hardhat

    To verify your contract through hardhat, you need to add the following Etherscan and Sourcify configs to your hardhat.config.js file:

    -
    module.exports = {
    networks: {
    morph: { ... }
    },
    etherscan: {
    apiKey: {
    morph: 'anything',
    },
    customChains: [
    {
    network: 'morph',
    chainId: 2818,
    urls: {
    apiURL: 'https://explorer-api.morphl2.io/api? ',
    browserURL: 'https://explorer.morphl2.io/',
    },
    },
    ],
    },
    };
    -

    Verify with Foundry

    +
    module.exports = {
    networks: {
    morph: { ... }
    },
    etherscan: {
    apiKey: {
    morph: 'anything',
    },
    customChains: [
    {
    network: 'morph',
    chainId: 2818,
    urls: {
    apiURL: 'https://explorer-api.morphl2.io/api? ',
    browserURL: 'https://explorer.morphl2.io/',
    },
    },
    ],
    },
    };
    +

    Verify with Foundry

    Verification with foundry requires some flags passed to the normal verification script. You can verify using the command below:

    -
     forge verify-contract YourContractAddress Counter\
    --chain 2818 \
    --verifier-url https://explorer-api.morphl2.io/api? \
    --verifier blockscout --watch
    -

    Verify with Morph explorer frontend

    +
     forge verify-contract YourContractAddress Counter\
    --chain 2818 \
    --verifier-url https://explorer-api.morphl2.io/api? \
    --verifier blockscout --watch
    +

    Verify with Morph explorer frontend

    @@ -27,42 +31,42 @@

    Method: Solidity (Flattened Sources Code)

    -

    Frontend:

    -

    fscs

    -

    Flatten

    +

    Method: Solidity (Flattened Sources Code)

    +

    Frontend:

    +

    fscs

    +

    Flatten

    Flatten through forge command, for example:

    -
    forge flatten --output FlattenedL2StandardBridge.sol ./contracts/L2/L2StandardBridge.sol
    -

    Method: Solidity (Standard JSON Input)

    -

    sjis1

    -

    Obtain JSON File

    +
    forge flatten --output FlattenedL2StandardBridge.sol ./contracts/L2/L2StandardBridge.sol
    +

    Method: Solidity (Standard JSON Input)

    +

    sjis1

    +

    Obtain JSON File

    • Can be obtained through solc
    • Can be obatined through remix compiler
    -

    sjis2

    -

    sjis3

    -

    Method: Solidity (Multi-part files)

    -

    Frontend:

    +

    sjis2

    +

    sjis3

    +

    Method: Solidity (Multi-part files)

    +

    Frontend:

    • You can submit multiple contract file by your own needs -mpfs1
    • +mpfs1
    -

    SOL File Process

    +

    SOL File Process

    • If there is any imported file, it needs to be modified to be referenced by the same level path, and these files must be submitted together. -mpfs2
    • +mpfs2
    -

    Method: Vyper (Contracts)

    -

    Frontend:

    -

    cv

    -

    Method: Vyper (Standard Json Input)

    -

    Frontend:

    -

    sjiv

    -

    Method: Vyper (Multi-part files)

    -

    Frontend:

    -

    mpfv

    -

    After Verification

    -

    avp

    +

    Method: Vyper (Contracts)

    +

    Frontend:

    +

    cv

    +

    Method: Vyper (Standard Json Input)

    +

    Frontend:

    +

    sjiv

    +

    Method: Vyper (Multi-part files)

    +

    Frontend:

    +

    mpfv

    +

    After Verification

    +

    avp

    \ No newline at end of file diff --git a/build/docs/build-on-morph/code-examples/bridge-between-morph-and-ethereum/index.html b/build/docs/build-on-morph/code-examples/bridge-between-morph-and-ethereum/index.html index 4836eb576..6cf521c32 100644 --- a/build/docs/build-on-morph/code-examples/bridge-between-morph-and-ethereum/index.html +++ b/build/docs/build-on-morph/code-examples/bridge-between-morph-and-ethereum/index.html @@ -3,16 +3,20 @@ -Bridge between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Bridge between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Bridge between Morph and Ethereum

    Bridge an ERC20 through custom gateway

    -

    Step 1: Launch a token on Holesky

    +

    Bridge between Morph and Ethereum

    Bridge an ERC20 through custom gateway

    +

    Step 1: Launch a token on Holesky

    First, we need a token to bridge. There is no need for a particular ERC20 implementation in order for a token to be compatible with L2. If you already have a token, feel free to skip this step. If you want to deploy a new token, use the following contract of a simple ERC20 token that mints 1 million tokens to the deployer when launched.

    -
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.16;

    import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

    contract L1Token is ERC20 {
    constructor() ERC20("My Token L1", "MTL1") {
    _mint(msg.sender, 1_000_000 ether);
    }
    }
    -

    Step 2: Launch the counterpart token on Morph Holesky testnet

    +
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.16;

    import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

    contract L1Token is ERC20 {
    constructor() ERC20("My Token L1", "MTL1") {
    _mint(msg.sender, 1_000_000 ether);
    }
    }
    +

    Step 2: Launch the counterpart token on Morph Holesky testnet

    Next, you'll launch a counterpart to this token on Morph, which will represent the original token on Holesky. This token can implement custom logic to match that of the L1 token or even add additional features beyond those of the L1 token.

    For this to work:

      @@ -20,25 +24,25 @@

      // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.16;

      import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
      import "@Morph-tech/contracts@0.1.0/libraries/token/IMorphERC20Extension.sol";

      contract L2Token is ERC20, IMorphERC20Extension {
      // We store the gateway and the L1 token address to provide the gateway() and counterpart() functions which are needed from the Morph Standard ERC20 interface
      address _gateway;
      address _counterpart;

      // In the constructor we pass as parameter the Custom L2 Gateway and the L1 token address as parameters
      constructor(address gateway_, address counterpart_) ERC20("My Token L2", "MTL2") {
      _gateway = gateway_;
      _counterpart = counterpart_;
      }

      function gateway() public view returns (address) {
      return _gateway;
      }

      function counterpart() external view returns (address) {
      return _counterpart;
      }

      // We allow minting only to the Gateway so it can mint new tokens when bridged from L1
      function transferAndCall(address receiver, uint256 amount, bytes calldata data) external returns (bool success) {
      transfer(receiver, amount);
      data;
      return true;
      }

      // We allow minting only to the Gateway so it can mint new tokens when bridged from L1
      function mint(address _to, uint256 _amount) external onlyGateway {
      _mint(_to, _amount);
      }

      // Similarly to minting, the Gateway is able to burn tokens when bridged from L2 to L1
      function burn(address _from, uint256 _amount) external onlyGateway {
      _burn(_from, _amount);
      }

      modifier onlyGateway() {
      require(gateway() == _msgSender(), "Ownable: caller is not the gateway");
      _;
      }
      }

    -

    Step 3: Add the token to the Morph Bridge

    -

    You need to contact the Morph team to add the token to L2CustomERC20Gateway contract in Morph and L1CustomERC20Gateway contract in L1. In addition, follow the instructions on the token lists repository to add your token to the Morph official bridge frontend.

    -

    Step 4: Deposit tokens

    +
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.16;

    import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    import "@Morph-tech/contracts@0.1.0/libraries/token/IMorphERC20Extension.sol";

    contract L2Token is ERC20, IMorphERC20Extension {
    // We store the gateway and the L1 token address to provide the gateway() and counterpart() functions which are needed from the Morph Standard ERC20 interface
    address _gateway;
    address _counterpart;

    // In the constructor we pass as parameter the Custom L2 Gateway and the L1 token address as parameters
    constructor(address gateway_, address counterpart_) ERC20("My Token L2", "MTL2") {
    _gateway = gateway_;
    _counterpart = counterpart_;
    }

    function gateway() public view returns (address) {
    return _gateway;
    }

    function counterpart() external view returns (address) {
    return _counterpart;
    }

    // We allow minting only to the Gateway so it can mint new tokens when bridged from L1
    function transferAndCall(address receiver, uint256 amount, bytes calldata data) external returns (bool success) {
    transfer(receiver, amount);
    data;
    return true;
    }

    // We allow minting only to the Gateway so it can mint new tokens when bridged from L1
    function mint(address _to, uint256 _amount) external onlyGateway {
    _mint(_to, _amount);
    }

    // Similarly to minting, the Gateway is able to burn tokens when bridged from L2 to L1
    function burn(address _from, uint256 _amount) external onlyGateway {
    _burn(_from, _amount);
    }

    modifier onlyGateway() {
    require(gateway() == _msgSender(), "Ownable: caller is not the gateway");
    _;
    }
    }
    +

    Step 3: Add the token to the Morph Bridge

    +

    You need to contact the Morph team to add the token to L2CustomERC20Gateway contract in Morph and L1CustomERC20Gateway contract in L1. In addition, follow the instructions on the token lists repository to add your token to the Morph canonical bridge frontend.

    +

    Step 4: Deposit tokens

    Once your token has been approved by the Morph team, you should be able to deposit tokens from L1. To do so, you must first approve the L1CustomGateway contract address on Holesky (0x31C994F2017E71b82fd4D8118F140c81215bbb37). Then, deposit tokens by calling the depositERC20 function from the L1CustomGateway contract. This can be done using our bridge UI, Etherscan Holesky, or a smart contract.

    -

    Step 5: Withdraw tokens

    +

    Step 5: Withdraw tokens

    You will follow similar steps to send tokens back from L2 to L1. First, approve the L2CustomGateway address (0x058dec71E53079F9ED053F3a0bBca877F6f3eAcf) and then withdraw the tokens calling the withdrawERC20 from the L2CustomGateway contract.

    -

    Send messages between Morph and Ethereum

    -

    Deploying the Contracts

    -

    Target Smart Contract

    +

    Send messages between Morph and Ethereum

    +

    Deploying the Contracts

    +

    Target Smart Contract

    Let’s start by deploying the target smart contract. We will use the Greeter contract for this example, but you can use any other contract. Deploy it to either Holesky or Morph. On Morph, L1 and L2 use the same API, so it’s up to you.

    -
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.16;

    // This Greeter contract will be interacted with through the MorphMessenger across the bridge
    contract Greeter {
    string public greeting = "Hello World!";

    // This function will be called by executeFunctionCrosschain on the Operator Smart Contract
    function setGreeting(string memory greeting_) public {
    greeting = greeting_;
    }
    }
    +
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.16;

    // This Greeter contract will be interacted with through the MorphMessenger across the bridge
    contract Greeter {
    string public greeting = "Hello World!";

    // This function will be called by executeFunctionCrosschain on the Operator Smart Contract
    function setGreeting(string memory greeting_) public {
    greeting = greeting_;
    }
    }

    We will now execute setGreeting in a cross-chain way.

    -

    Operator Smart Contract

    +

    Operator Smart Contract

    Switch to the other chain and deploy the GreeterOperator. So, if you deployed the Greeter contract on L1, deploy the GreeterOperator on L2 or vice versa.

    -
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.16;

    // The Morph Messenger interface is the same on both L1 and L2, it allows sending cross-chain transactions
    // Let's import it directly from the Morph Contracts library
    import "@Morph-tech/contracts@0.1.0/libraries/IMorphMessenger.sol";

    // The GreeterOperator is capable of executing the Greeter function through the bridge
    contract GreeterOperator {
    // This function will execute setGreeting on the Greeter contract
    function executeFunctionCrosschain(
    address MorphMessengerAddress,
    address targetAddress,
    uint256 value,
    string memory greeting,
    uint32 gasLimit
    ) public payable {
    IMorphMessenger MorphMessenger = IMorphMessenger(MorphMessengerAddress);
    // sendMessage is able to execute any function by encoding the abi using the encodeWithSignature function
    MorphMessenger.sendMessage{ value: msg.value }(
    targetAddress,
    value,
    abi.encodeWithSignature("setGreeting(string)", greeting),
    gasLimit,
    msg.sender
    );
    }
    }
    -

    Calling a Cross-chain Function

    +
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.16;

    // The Morph Messenger interface is the same on both L1 and L2, it allows sending cross-chain transactions
    // Let's import it directly from the Morph Contracts library
    import "@Morph-tech/contracts@0.1.0/libraries/IMorphMessenger.sol";

    // The GreeterOperator is capable of executing the Greeter function through the bridge
    contract GreeterOperator {
    // This function will execute setGreeting on the Greeter contract
    function executeFunctionCrosschain(
    address MorphMessengerAddress,
    address targetAddress,
    uint256 value,
    string memory greeting,
    uint32 gasLimit
    ) public payable {
    IMorphMessenger MorphMessenger = IMorphMessenger(MorphMessengerAddress);
    // sendMessage is able to execute any function by encoding the abi using the encodeWithSignature function
    MorphMessenger.sendMessage{ value: msg.value }(
    targetAddress,
    value,
    abi.encodeWithSignature("setGreeting(string)", greeting),
    gasLimit,
    msg.sender
    );
    }
    }
    +

    Calling a Cross-chain Function

    We pass the message by executing executeFunctionCrosschain and passing the following parameters:

    • MorphMessengerAddress: This will depend on where you deployed the GreeterOperator contract. @@ -56,20 +60,20 @@

      Relay the Message when sending from L2 to L1

      +

      Relay the Message when sending from L2 to L1

      When a transaction is passed from L2 to L1, an additional "execute withdrawal transaction" must be sent on L1. To do this, you must call relayMessageWithProof on the L1 Morph Messenger contract from an EOA wallet.

      You can do this directly on Etherscan Holesky. To do so, you will need to pass a Merkle inclusion proof for the bridged transaction and other parameters. You'll query these using the Morph Bridge API.

      We're finalizing the API specifics, but for now, fetch or curl the following endpoint:

      -
      curl "https://Holesky-api-bridge.Morph.io/api/claimable?page_size=10&page=1&address=GREETER_OPERATOR_ADDRESS_ON_L2"
      -
      tip

      This API was made for our Bridge UI. It is not yet finalized and may change in the future. We will update this guide +

      curl "https://Holesky-api-bridge.Morph.io/api/claimable?page_size=10&page=1&address=GREETER_OPERATOR_ADDRESS_ON_L2"
      +
      tip

      This API was made for our Bridge UI. It is not yet finalized and may change in the future. We will update this guide when the API is finalized.

      -
      Anyone can execute your message

      relayMessageWithProof is fully permissionless, so anyone can call it on your behalf if they're willing to pay the L1 +

      Anyone can execute your message

      relayMessageWithProof is fully permissionless, so anyone can call it on your behalf if they're willing to pay the L1 gas fees. This feature allows for additional support infrastructure, including tooling to automate this process for applications and users.

      After executing and confirming the transaction on both L1 and L2, the new state of greeting on the Greeter contract should be “This message was cross-chain!”. Sending a message from one chain to the other should take around 20 minutes after the transactions are confirmed on the origin chain.

      -

      Congratulations, you now executed a transaction from one chain to the other using our native bridge!

    +

    Congratulations, you now executed a transaction from one chain to the other using our native bridge!

    \ No newline at end of file diff --git a/build/docs/build-on-morph/code-examples/deploy-contract-on-morph/index.html b/build/docs/build-on-morph/code-examples/deploy-contract-on-morph/index.html index 8c14241cc..f9058e8aa 100644 --- a/build/docs/build-on-morph/code-examples/deploy-contract-on-morph/index.html +++ b/build/docs/build-on-morph/code-examples/deploy-contract-on-morph/index.html @@ -3,64 +3,68 @@ -Deploy Contracts on Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Deploy Contracts on Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Deploy Contracts on Morph

    The Morph Holesky Testnet allows anyone to deploy a smart contract on Morph. This tutorial will guide you through deploying a contract on Morph Holesky using common Ethereum development tools.

    +

    Deploy Contracts on Morph

    The Morph Holesky Testnet allows anyone to deploy a smart contract on Morph. This tutorial will guide you through deploying a contract on Morph Holesky using common Ethereum development tools.

    This demo repo illustrates contract deployment with Hardhat and Foundry.

    -
    tip

    Before you start deploying the contract, you need to request test tokens from a Holesky faucet and use the +

    tip

    Before you start deploying the contract, you need to request test tokens from a Holesky faucet and use the bridge to transfer some test ETH from Holesky to Morph Holesky.

    See our Faucet for details.

    -

    Deploy with Hardhat

    -

    Clone the repo

    -
    git clone https://github.com/morph-l2/morph-examples.git
    -

    Install Dependencies

    +

    Deploy with Hardhat

    +

    Clone the repo

    +
    git clone https://github.com/morph-l2/morph-examples.git
    +

    Install Dependencies

    If you haven't already, install nodejs and yarn.

    -
    cd contract-deployment-demos/hardhat-demo
    yarn install
    +
    cd contract-deployment-demos/hardhat-demo
    yarn install

    This will install everything you need include hardhat for you.

    -

    Compile

    +

    Compile

    Compile your contract

    -
    yarn compile
    -

    Test

    +
    yarn compile
    +

    Test

    This will run the test script in test/Lock.ts

    -
    yarn test
    -

    Deploy

    +
    yarn test
    +

    Deploy

    Create a .env file following the example .env.example in the root directory. Change PRIVATE_KEY to your own account private key in the .env.

    And Change the network settings in the hardhat.config.ts file with the following information:

    -
     morphTestnet: {
    url: process.env.MORPH_TESTNET_URL || "",
    accounts:
    process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
    }
    +
     morphTestnet: {
    url: process.env.MORPH_TESTNET_URL || "",
    accounts:
    process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
    }

    Then run the following command to deploy the contract on the Morph Holesky Testnet. This will run the deployment script that set the initialing parameters, you can edit the script in scripts/deploy.ts

    -
    yarn deploy:morphTestnet
    -

    Verify your contracts on Morph Explorer

    +
    yarn deploy:morphTestnet
    +

    Verify your contracts on Morph Explorer

    To verify your contract through hardhat, you need to add the following Etherscan and Sourcify configs to your hardhat.config.js file:

    -
    module.exports = {
    networks: {
    morphTestnet: { ... }
    },
    etherscan: {
    apiKey: {
    morphTestnet: 'anything',
    },
    customChains: [
    {
    network: 'morphTestnet',
    chainId: 2810,
    urls: {
    apiURL: 'https://explorer-api-holesky.morphl2.io/api? ',
    browserURL: 'https://explorer-holesky.morphl2.io/',
    },
    },
    ],
    },
    };
    +
    module.exports = {
    networks: {
    morphTestnet: { ... }
    },
    etherscan: {
    apiKey: {
    morphTestnet: 'anything',
    },
    customChains: [
    {
    network: 'morphTestnet',
    chainId: 2810,
    urls: {
    apiURL: 'https://explorer-api-holesky.morphl2.io/api? ',
    browserURL: 'https://explorer-holesky.morphl2.io/',
    },
    },
    ],
    },
    };

    Then run the hardhat verify command to finish the verification

    -
    npx hardhat verify --network morphTestnet DEPLOYED_CONTRACT_ADDRESS <ConstructorParameter>
    +
    npx hardhat verify --network morphTestnet DEPLOYED_CONTRACT_ADDRESS <ConstructorParameter>

    For example

    -
    npx hardhat verify --network morphTestnet 0x8025985e35f1bAFfd661717f66fC5a434417448E '0.00001'
    +
    npx hardhat verify --network morphTestnet 0x8025985e35f1bAFfd661717f66fC5a434417448E '0.00001'

    Once succeed, you can check your contract and the deployment transaction on Morph Holesky Explorer

    -

    Deploy contracts with Foundry

    -

    Clone the repo

    -
    git clone https://github.com/morph-l2/morph-examples.git
    -

    Install Foundry

    -
    curl -L https://foundry.paradigm.xyz | bash
    foundryup
    +

    Deploy contracts with Foundry

    +

    Clone the repo

    +
    git clone https://github.com/morph-l2/morph-examples.git
    +

    Install Foundry

    +
    curl -L https://foundry.paradigm.xyz | bash
    foundryup

    Then go the right folder of our example:

    -
    cd contract-deployment-demos/foundry-demo
    -

    Compile

    -
    forge build
    -

    Deploy

    +
    cd contract-deployment-demos/foundry-demo
    +

    Compile

    +
    forge build
    +

    Deploy

    A Deployment script and use of environment variables has already been set up for you. You can view the script at script/Counter.s.sol

    Rename your .env.example file to .env and fill in your private key. The RPC URL has already been filled in along with the verifier URL.

    To use the variables in your .env file run the following command:

    -
    source .env
    +
    source .env

    You can now deploy to Morph with the following command:

    -
    forge script script/Counter.s.sol --rpc-url $RPC_URL --broadcast --private-key $DEPLOYER_PRIVATE_KEY --legacy
    +
    forge script script/Counter.s.sol --rpc-url $RPC_URL --broadcast --private-key $DEPLOYER_PRIVATE_KEY --legacy

    Adjust as needed for your own script names.

    -

    Verify

    +

    Verify

    Verification requires some flags passed to the normal verification script. You can verify using the command below:

    -
     forge verify-contract YourContractAddress Counter\
    --chain 2810 \
    --verifier-url $VERIFIER_URL \
    --verifier blockscout --watch
    +
     forge verify-contract YourContractAddress Counter\
    --chain 2810 \
    --verifier-url $VERIFIER_URL \
    --verifier blockscout --watch

    Once succeeded, you can check your contract and the deployment transaction on Morph Holesky Explorer.

    -

    Questions and Feedback

    -

    Thank you for participating in and developing on the Morph Holesky Testnet! If you encounter any issues, join our Discord and find us at #dev-support channel.

    +

    Questions and Feedback

    +

    Thank you for participating in and developing on the Morph Holesky Testnet! If you encounter any issues, join our Discord and find us at #dev-support channel.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-navigation-page/index.html b/build/docs/build-on-morph/developer-navigation-page/index.html index 7493de187..5815f9f63 100644 --- a/build/docs/build-on-morph/developer-navigation-page/index.html +++ b/build/docs/build-on-morph/developer-navigation-page/index.html @@ -3,23 +3,31 @@ -Developer Docs | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Build on Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Developer Docs

    If you’re ready to build applications on Morph, you're in the right place.

    +

    Build on Morph

    If you’re ready to build applications on Morph, you're in the right place.

    For those who are regular users or visiting for the first time, we recommend starting with our For Users section to explore introductory content such as definitions, our vision, key concepts, and more.

    -

    devintro

    -

    What is Morph?

    +

    What is Morph?

    Morph is the first optimistic zkEVM Ethereum Layer 2 solution that is 100% EVM compatible. Building on Morph is just like building on Ethereum. If you’re experienced in Ethereum development, you'll find your existing code, tooling, and dependencies are fully compatible with Morph.

    -

    Getting Started

    +

    We provide a one-page for Morph integration resources if you want to get started quickly.

    + +

    Getting Started

    To help you get started, here’s a recommended navigation through our documentation:

    Fundamental Concepts: Start here to learn the core components of Morph, including Morph’s Modular Design, the Decentralized Sequencer Network, and the Responsive Validity Proof system.

    -

    Advanced Concepts: Dive deeper into topics such as understanding transaction costs on Morph and differences between Morph and Ethereum.

    +

    Developer Guides: Access comprehensive guides on verifying smart contracts, running a Morph node, deploying contracts, and more.

    +

    Developer Resources: Find detailed API methods, contract addresses and other useful developer resources.

    -

    Engage in Our Developer Community​

    -

    We're actively enhancing our network with more integrations and support infrastructure, progressing towards our Mainnet release. Join our growing developer community. You can find us on Discord or follow our progress on Twitter.

    + +

    Engage in Our Developer Community​

    +

    We're actively enhancing our network with more integrations and support infrastructure, progressing towards our Mainnet release. Join our growing developer community. You can find us on Discord or follow our progress on Twitter.

    +

    devintro

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/contracts/index.html b/build/docs/build-on-morph/developer-resources/contracts/index.html index 5a699fa6e..c7bef10b6 100644 --- a/build/docs/build-on-morph/developer-resources/contracts/index.html +++ b/build/docs/build-on-morph/developer-resources/contracts/index.html @@ -3,30 +3,34 @@ -Contract Addresses | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Contract Addresses | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Contract Addresses

    Morph Network Info

    -

    Morph Mainnet

    +

    Contract Addresses

    Morph Network Info

    +

    Morph Mainnet

    Network NameMorph MainnetEthereum Mainnet
    RPC URLhttps://rpc-quicknode.morphl2.iohttps://ethereum-rpc.publicnode.com/
    Chain ID28181
    Currency SymbolETHETH
    Block Explorer URLhttps://explorer.morphl2.io/https://etherscan.io/
    -

    Morph Holesky Testnet

    +

    Morph Holesky Testnet

    Network NameMorph Holesky TestnetEthereum Holesky Testnet
    RPC URLhttps://rpc-quicknode-holesky.morphl2.iohttps://ethereum-holesky-rpc.publicnode.com/
    Chain ID281017000
    Currency SymbolETHETH
    Block Explorer URLhttps://explorer-holesky.morphl2.io/https://holesky.etherscan.io/
    -

    Morph Mainnet Contracts

    -

    Main Contract

    -

    L1 Contract

    +

    Morph Mainnet Contracts

    +

    Main Contract

    +

    L1 Contract

    Staking: 0x0dc417f8af88388737c5053ff73f345f080543f7

    Rollup: 0x759894ced0e6af42c26668076ffa84d02e3cef60

    L1MessageQueueWithGasPriceOracle: 0x3931ade842f5bb8763164bdd81e5361dce6cc1ef

    L1CrossDomainMessenger: 0xdc71366effa760804dcfc3edf87fa2a6f1623304

    -

    L2 Contract

    +

    L2 Contract

    L2ToL1MessagePasser: 0x5300000000000000000000000000000000000001

    Sequencer: 0x5300000000000000000000000000000000000017

    Gov: 0x5300000000000000000000000000000000000004

    L2CrossDomainMessenger: 0x5300000000000000000000000000000000000007

    -

    Gateway

    -

    L1 Gateway

    +

    Gateway

    +

    L1 Gateway

    L1GatewayRouter: 0x7497756ada7e656ae9f00781af49fc0fd08f8a8a

    L1ETHGateway: 0x1c1ffb5828c3a48b54e8910f1c75256a498ade68

    L1WETHGateway: 0x788890ba6f105cca373c4ff01055cd34de01877f

    @@ -34,70 +38,77 @@

    L1 GatewayL1CustomERC20Gateway: 0xa534badd09b4c62b7b1c32c41df310aa17b52ef1

    L1ERC721Gateway: 0x5ae782c23a303c0d70ae697a0aee9eae9a5d77c4

    L1ERC1155Gateway: 0x7c9a3d9531692d057d496d04938bdb7d367e9765

    -

    L1USDCGateway: 0xc9045350712a1dcc3a74eca18bc985424bbe7535

    +

    L1USDCGateway: 0x2C8314f5AADa5D7a9D32eeFebFc43aCCAbe1b289

    EnforcedTxGateway: 0xc5fa3b8968c7fabeea2b530a20b88d0c2ed8abb7

    -

    L2 Gateway

    +

    L2 Gateway

    L2GatewayRouter: 0x5300000000000000000000000000000000000002

    L2StandardERC20Gateway: 0x5300000000000000000000000000000000000008

    L2ERC721Gateway: 0x5300000000000000000000000000000000000009

    -

    L2ERC1155Gateway: 0x530000000000000000000000000000000000000C

    +

    L2ERC1155Gateway: 0x530000000000000000000000000000000000000c

    +

    L2USDCGateway:0xc5e44E2fFe9523809146eD17D62bb382ECCf426B

    L2WETHGateway: 0x5300000000000000000000000000000000000010

    L2ETHGateway: 0x5300000000000000000000000000000000000006

    -

    Other Layer 2 Predeploys

    +

    Other Layer 2 Predeploys

    L2Staking: 0x5300000000000000000000000000000000000015

    -

    L2TxFeeVault: 0x530000000000000000000000000000000000000A

    +

    L2TxFeeVault: 0x530000000000000000000000000000000000000a

    L2CustomERC20Gateway: 0x5300000000000000000000000000000000000016

    -

    ProxyAdmin: 0x530000000000000000000000000000000000000B

    -

    MorphStandardERC20: 0x530000000000000000000000000000000000000D

    -

    MorphStandardERC20Factory: 0x530000000000000000000000000000000000000E

    -

    GasPriceOracle: 0x530000000000000000000000000000000000000F

    +

    ProxyAdmin: 0x530000000000000000000000000000000000000b

    +

    MorphStandardERC20: 0x530000000000000000000000000000000000000d

    +

    MorphStandardERC20Factory: 0x530000000000000000000000000000000000000e

    +

    GasPriceOracle: 0x530000000000000000000000000000000000000f

    L2WETH: 0x5300000000000000000000000000000000000011

    -

    Tokens

    -

    L1 Tokens

    +

    Tokens

    +

    L1 Tokens

    WETH: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

    USDT: 0xdAC17F958D2ee523a2206206994597C13D831ec7

    USDC: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

    DAI: 0x6B175474E89094C44Da98b954EedeAC495271d0F

    WBTC: 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599

    -

    L2 Tokens

    +

    L2 Tokens

    WETH: 0x5300000000000000000000000000000000000011

    USDT: 0xc7D67A9cBB121b3b0b9c053DD9f469523243379A

    WBTC: 0x803DcE4D3f4Ae2e17AF6C51343040dEe320C149D

    -

    UDSC: 0x1199E23C0baE9710cCd9F645FA57794e5D469D06

    +

    USDC: 0xe34c91815d7fc18A9e2148bcD4241d0a5848b693

    DAI: 0xef8A24599229D002B28bA2F5C0eBdD3c0EFFbed4

    -

    Morph Holesky Contracts

    -
    tip

    Please not the following is the contract address of the Morph Holesky Testnet.

    -

    Main Contract

    -

    L1 Contract

    +

    weETH: 0x7DCC39B4d1C53CB31e1aBc0e358b43987FEF80f7

    +

    BGB: 0x55d1f1879969bdbB9960d269974564C58DBc3238

    +

    Morph Holesky Contracts

    +
    tip

    Please not the following is the contract address of the Morph Holesky Testnet.

    +

    Main Contract

    +

    L1 Contract

    Staking: 0x868dd5d1c268277e331b726bb438edde8221d389

    Rollup: 0xd8c5c541d56f59d65cf775de928ccf4a47d4985c

    L1MessageQueueWithGasPriceOracle: 0x778d1d9a4d8b6b9ade36d967a9ac19455ec3fd0b

    L1CrossDomainMessenger: 0xecc966ab425f3f5bd58085ce4ebdbf81d829126f

    -

    L2 Contract

    +

    L2 Contract

    L2ToL1MessagePasser: 0x5300000000000000000000000000000000000001

    L2Sequencer: 0x5300000000000000000000000000000000000003

    L2Gov: 0x5300000000000000000000000000000000000004

    L2Submitter: 0x5300000000000000000000000000000000000005

    L2CrossDomainMessenger: 0x5300000000000000000000000000000000000007

    -

    Gateway

    -

    L1 Gateway

    +

    L2 Tokens

    +

    L2USDT:0x9E12AD42c4E4d2acFBADE01a96446e48e6764B98

    +

    L2USDC:0xeA2610c28B4c5857689EAFa8b2116a617206d283

    +

    L2DAI:0xAa19d46626947C6E1E5F281aE835971579827DDC

    +

    Gateway

    +

    L1 Gateway

    L1GatewayRouter: 0xea593b730d745fb5fe01b6d20e6603915252c6bf

    L1ETHGateway: 0xcc3d455481967dc97346ef1771a112d7a14c8f12

    L1WETHGateway: 0xbbdb317b50313d96823eba0fc2c1d9e469dc1906

    L1StandardERC20Gateway: 0xb26dafdb434ae93e3b8efde4f0193934955d86cd

    -

    L2 Gateway

    +

    L2 Gateway

    L2GatewayRouter: 0x5300000000000000000000000000000000000002

    L2StandardERC20Gateway: 0x5300000000000000000000000000000000000008

    L2ERC721Gateway: 0x5300000000000000000000000000000000000009

    -

    L2ERC1155Gateway: 0x530000000000000000000000000000000000000C

    +

    L2ERC1155Gateway: 0x530000000000000000000000000000000000000c

    L2WETHGateway: 0x5300000000000000000000000000000000000010

    L2ETHGateway: 0x5300000000000000000000000000000000000006

    -

    Other Layer 2 Predeploys

    -

    L2TxFeeVault: 0x530000000000000000000000000000000000000A

    -

    ProxyAdmin: 0x530000000000000000000000000000000000000B

    -

    MorphStandardERC20: 0x530000000000000000000000000000000000000D

    -

    MorphStandardERC20Factory: 0x530000000000000000000000000000000000000E

    -

    GasPriceOracle: 0x530000000000000000000000000000000000000F

    -

    L2WETH: 0x5300000000000000000000000000000000000011

    +

    Other Layer 2 Predeploys

    +

    L2TxFeeVault: 0x530000000000000000000000000000000000000a

    +

    ProxyAdmin: 0x530000000000000000000000000000000000000b

    +

    MorphStandardERC20: 0x530000000000000000000000000000000000000d

    +

    MorphStandardERC20Factory: 0x530000000000000000000000000000000000000e

    +

    GasPriceOracle: 0x530000000000000000000000000000000000000f

    +

    L2WETH: 0x5300000000000000000000000000000000000011

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/dapp-examples-on-morph/index.html b/build/docs/build-on-morph/developer-resources/dapp-examples-on-morph/index.html index 87ec15ee9..a06ae8cc8 100644 --- a/build/docs/build-on-morph/developer-resources/dapp-examples-on-morph/index.html +++ b/build/docs/build-on-morph/developer-resources/dapp-examples-on-morph/index.html @@ -3,29 +3,33 @@ -Dapp Examples on Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Dapp Examples on Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Dapp Examples on Morph

    We provide multiple example Dapps for developers, built on our Morph starter template, deployed on the Morph Testnet, and accompanied by corresponding frontends.

    +

    Dapp Examples on Morph

    We provide multiple example Dapps for developers, built on our Morph starter template, deployed on the Morph Testnet, and accompanied by corresponding frontends.

    These examples are very helpful for developers to go through the entire development process on Morph. Below is a brief introduction of the example Dapps and tutorial links.

    -
    Morph Starter Template

    The Morph starter kit helps developers quickly and efficiently, build dApps on the Morph blockchain. It is a comprehensive template for building fullstack dApps.

    -

    Example Dapp: Building a Decentralized Hotel Booking System on Morph

    -

    Okido Finance

    +
    Morph Starter Template

    The Morph starter kit helps developers quickly and efficiently, build dApps on the Morph blockchain. It is a comprehensive template for building fullstack dApps.

    +

    Example Dapp: Building a Decentralized Hotel Booking System on Morph

    +

    Okido Finance

    Check the tutorial

    This guide walks you through the process of building a decentralized hotel booking system on the MorphL2 blockchain using Solidity smart contracts and a React & Wagmi front-end. This system allows hotel owners to add rooms, manage room availability, accept bookings, and receive reviews from guests.

    -

    Example Dapp: Building a fractionalized real-estate dApp

    -

    Okido Finance

    +

    Example Dapp: Building a fractionalized real-estate dApp

    +

    Okido Finance

    Check the tutorial

    Imagine being able to invest in a high-value real estate property without needing to shell out a huge amount of money upfront. Sounds pretty appealing, right? This is the magic of fractionalization. By dividing a property into smaller, more affordable shares, fractionalization makes it possible for just about anyone to get in on the real estate action. It’s like turning a luxury mansion into a bunch of reasonably priced slices that you can buy and sell easily, just like stocks.

    Our project today, Okido Finance, takes this idea and builds a decentralized application (DApp) around it. With Okido Finance, property owners can create shares of their real estate assets and investors can buy these shares using a custom ERC20 token. This not only democratizes real estate investment but also adds a layer of liquidity, making it easier to trade shares and get in or out of investments.

    In this tutorial, I’ll walk you through building the Okido Finance DApp step by step. We’ll start with setting up the development environment, move on to deploying smart contracts, and finish with designing a user-friendly UI.

    By the end, you’ll have a solid grasp of how to build a decentralized real estate fractionalization platform. Whether you’re looking to create something similar or just want to learn more about these technologies, you’ll be well-equipped to dive deeper into fractionalization. Let’s get started!

    -

    Query and Index Smart Contracts on Morph using Goldsky

    -

    Okido Finance

    +

    Query and Index Smart Contracts on Morph using Goldsky

    +

    Okido Finance

    Check the tutorial

    Picture this: you're a developer with a brand-new smart contract deployed on the Morph. Your next challenge is to efficiently query and retrieve on-chain data for your decentralized application (dApp). That's where subgraphs come in. Subgraphs offer a powerful and flexible way to index and query blockchain data, making it easy to build responsive and data-rich dApps.

    -

    In this tutorial, we'll walk through deploying a smart contract on the Morph chain and setting up a subgraph to query this contract. We’ll also introduce Goldsky, a tool that makes creating and managing subgraphs a breeze. Let’s get started and see what we can build together!

    +

    In this tutorial, we'll walk through deploying a smart contract on the Morph chain and setting up a subgraph to query this contract. We’ll also introduce Goldsky, a tool that makes creating and managing subgraphs a breeze. Let’s get started and see what we can build together!

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/how-to-run-a-morph-node/index.html b/build/docs/build-on-morph/developer-resources/how-to-run-a-morph-node/index.html index 395224888..09bdbb281 100644 --- a/build/docs/build-on-morph/developer-resources/how-to-run-a-morph-node/index.html +++ b/build/docs/build-on-morph/developer-resources/how-to-run-a-morph-node/index.html @@ -3,14 +3,18 @@ -How to Run a Morph Node | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +How to Run a Morph Node | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    How to Run a Morph Node

    Run a Morph Full Node

    +

    How to Run a Morph Node

    Run a Morph Full Node

    This guide outlines the steps to start a Morph node. The example assumes the home directory is ~/.morph

    -

    Hardware requirements

    +

    Hardware requirements

    Running the morph node requires 2 processes:geth and node.

    -
    tip

    Due to limitations in the current geth implementation, only archive mode is supported, meaning the storage size will continually increase with produced blocks.

    -

    Build executable binary

    -

    Clone morph

    -
    mkdir -p ~/.morph 
    cd ~/.morph
    git clone https://github.com/morph-l2/morph.git
    +
    tip

    Due to limitations in the current geth implementation, only archive mode is supported, meaning the storage size will continually increase with produced blocks.

    +

    Build executable binary

    +

    Clone morph

    +
    mkdir -p ~/.morph 
    cd ~/.morph
    git clone https://github.com/morph-l2/morph.git

    Currently, we use tag v0.2.0-beta as our beta version.

    -
    cd morph
    git checkout v0.2.0-beta
    -

    Build Geth

    +
    cd morph
    git checkout v0.2.0-beta
    +

    Build Geth

    Notice: You need C compiler to build geth

    -
    make nccc_geth
    -

    Build Node

    -
    cd ~/.morph/morph/node 
    make build
    -

    Sync from genesis block

    -

    Config Preparation

    +
    make nccc_geth
    +

    Build Node

    +
    cd ~/.morph/morph/node 
    make build
    +

    Sync from genesis block

    +

    Config Preparation

    Download the config files and make data dir

    -
    cd ~/.morph
    wget https://raw.githubusercontent.com/morph-l2/config-template/main/holesky/data.zip
    unzip data.zip
    +
    cd ~/.morph
    wget https://raw.githubusercontent.com/morph-l2/run-morph-node/main/holesky/data.zip
    unzip data.zip

    Create a shared secret with node

    -
    cd ~/.morph
    openssl rand -hex 32 > jwt-secret.txt
    -

    Script to start the process

    +
    cd ~/.morph
    openssl rand -hex 32 > jwt-secret.txt
    +

    Script to start the process

    Geth

    -
    ./morph/go-ethereum/build/bin/geth --morph-holesky \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --miner.gasprice="100000000" \
    --log.filename=./geth.log
    +
    ./morph/go-ethereum/build/bin/geth --morph-holesky \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --miner.gasprice="100000000" \
    --log.filename=./geth.log

    tail -f geth.log to check if the Geth is running properly, or you can also exeucte the below curl command to check if you are connected to the peer.

    -
    curl -X POST -H 'Content-Type: application/json' --data 
    '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
    localhost:8545

    {"jsonrpc":"2.0","id":74,"result":"0x3"}
    +
    curl -X POST -H 'Content-Type: application/json' --data 
    '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
    localhost:8545

    {"jsonrpc":"2.0","id":74,"result":"0x3"}

    Node

    -
    ./morph/node/build/bin/morphnode --home ./node-data \
    --l2.jwt-secret ./jwt-secret.txt \
    --l2.eth http://localhost:8545 \
    --l2.engine http://localhost:8551 \
    --log.filename ./node.log
    +
    ./morph/node/build/bin/morphnode --home ./node-data \
    --l2.jwt-secret ./jwt-secret.txt \
    --l2.eth http://localhost:8545 \
    --l2.engine http://localhost:8551 \
    --log.filename ./node.log

    tail -f node.log to check if the node is running properly, and you can also execute the command curl to check your node connection status.

    -
    curl http://localhost:26657/net_info

    {
    "jsonrpc": "2.0",
    "id": -1,
    "result": {
    "listening": true,
    "listeners": [
    "Listener(@)"
    ],
    "n_peers": "3",
    "peers": [
    {
    "node_info": {
    "protocol_version": {
    "p2p": "8",
    "block": "11",
    "app": "0"
    },
    "id": "0fb5ce425197a462a66de015ee5fbbf103835b8a",
    "listen_addr": "tcp://0.0.0.0:26656",
    "network": "chain-morph-holesky",
    "version": "0.37.0-alpha.1",
    "channels": "4020212223386061",
    "moniker": "morph-dataseed-node-1",
    "other": {
    "tx_index": "on",
    "rpc_address": "tcp://0.0.0.0:26657"
    }
    },
    "is_outbound": true,
    -

    Check sync status

    +
    curl http://localhost:26657/net_info

    {
    "jsonrpc": "2.0",
    "id": -1,
    "result": {
    "listening": true,
    "listeners": [
    "Listener(@)"
    ],
    "n_peers": "3",
    "peers": [
    {
    "node_info": {
    "protocol_version": {
    "p2p": "8",
    "block": "11",
    "app": "0"
    },
    "id": "0fb5ce425197a462a66de015ee5fbbf103835b8a",
    "listen_addr": "tcp://0.0.0.0:26656",
    "network": "chain-morph-holesky",
    "version": "0.37.0-alpha.1",
    "channels": "4020212223386061",
    "moniker": "morph-dataseed-node-1",
    "other": {
    "tx_index": "on",
    "rpc_address": "tcp://0.0.0.0:26657"
    }
    },
    "is_outbound": true,
    +

    Check sync status

    curl http://localhost:26657/status to check the sync status of the node

    -
    {
    "jsonrpc": "2.0",
    "id": -1,
    "result": {
    "node_info": {
    "protocol_version": {
    "p2p": "8",
    "block": "11",
    "app": "0"
    },
    "id": "b3f34dc2ce9c4fee5449426992941aee1e09670f",
    "listen_addr": "tcp://0.0.0.0:26656",
    "network": "chain-morph-holesky",
    "version": "0.37.0-alpha.1",
    "channels": "4020212223386061",
    "moniker": "my-morph-node",
    "other": {
    "tx_index": "on",
    "rpc_address": "tcp://0.0.0.0:26657"
    }
    },
    "sync_info": {
    "latest_block_hash": "71024385DDBEB7B554DB11FD2AE097ECBD99B2AF826C11B2A74F7172F2DEE5D2",
    "latest_app_hash": "",
    "latest_block_height": "2992",
    "latest_block_time": "2024-04-25T13:48:27.647889852Z",
    "earliest_block_hash": "C7A73D3907C6CA34B9DFA043FC6D4529A8EAEC8F059E100055653E46E63F6F8E",
    "earliest_app_hash": "",
    "earliest_block_height": "1",
    "earliest_block_time": "2024-04-25T09:06:30Z",
    "catching_up": false
    },
    "validator_info": {
    "address": "5FB3D3734640792F14B70E7A53FBBD39DB9787A8",
    "pub_key": {
    "type": "tendermint/PubKeyEd25519",
    "value": "rzN67ZJWsaLSGGpNj7HOWs8nrL5kr1n+w0OckWUCetw="
    },
    "voting_power": "0"
    }
    }
    }
    -

    The returned "catching_up" indicates whether the node is in sync or not. True means it is in sync. Meanwhile, the returned latest_block_height indicates the latest block height this node synced.

    +
    {
    "jsonrpc": "2.0",
    "id": -1,
    "result": {
    "node_info": {
    "protocol_version": {
    "p2p": "8",
    "block": "11",
    "app": "0"
    },
    "id": "b3f34dc2ce9c4fee5449426992941aee1e09670f",
    "listen_addr": "tcp://0.0.0.0:26656",
    "network": "chain-morph-holesky",
    "version": "0.37.0-alpha.1",
    "channels": "4020212223386061",
    "moniker": "my-morph-node",
    "other": {
    "tx_index": "on",
    "rpc_address": "tcp://0.0.0.0:26657"
    }
    },
    "sync_info": {
    "latest_block_hash": "71024385DDBEB7B554DB11FD2AE097ECBD99B2AF826C11B2A74F7172F2DEE5D2",
    "latest_app_hash": "",
    "latest_block_height": "2992",
    "latest_block_time": "2024-04-25T13:48:27.647889852Z",
    "earliest_block_hash": "C7A73D3907C6CA34B9DFA043FC6D4529A8EAEC8F059E100055653E46E63F6F8E",
    "earliest_app_hash": "",
    "earliest_block_height": "1",
    "earliest_block_time": "2024-04-25T09:06:30Z",
    "catching_up": false
    },
    "validator_info": {
    "address": "5FB3D3734640792F14B70E7A53FBBD39DB9787A8",
    "pub_key": {
    "type": "tendermint/PubKeyEd25519",
    "value": "rzN67ZJWsaLSGGpNj7HOWs8nrL5kr1n+w0OckWUCetw="
    },
    "voting_power": "0"
    }
    }
    }
    +

    The returned "catching_up" indicates whether the node is in sync or not. True means it is in sync. Meanwhile, the returned latest_block_height indicates the latest block height this node synced.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/morph-json-rpc-api-methods/index.html b/build/docs/build-on-morph/developer-resources/morph-json-rpc-api-methods/index.html index dc76fdf01..e2c3ca9b5 100644 --- a/build/docs/build-on-morph/developer-resources/morph-json-rpc-api-methods/index.html +++ b/build/docs/build-on-morph/developer-resources/morph-json-rpc-api-methods/index.html @@ -3,21 +3,25 @@ -Morph JSON-RPC API Methods | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Morph JSON-RPC API Methods | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Morph JSON-RPC API Methods

    Most methods are similar to Ethereum's. For those methods, we recommend you visit Ethereum JSON-RPC API.

    +

    Morph JSON-RPC API Methods

    Most methods are similar to Ethereum's. For those methods, we recommend you visit Ethereum JSON-RPC API.

    This page lists some unique methods exclusive to Morph.

    -

    morph_getBlockByNumber

    +

    morph_getBlockByNumber

    Returns information about a block by block number. In addition, it returns more fields than the standard eth_getBlockByNumber, such as withdrawTrieRoot, batchHash, nextL1MsgIndex and rowConsumption.

    -

    Parameters

    +

    Parameters

    1. QUANTITY|TAG - integer of a block number, or the string "earliest", "latest", "pending", "safe" or "finalized", as in the default block parameter.
    2. Boolean - If true it returns the full transaction objects, if false only the hashes of the transactions.
    -

    Returns

    +

    Returns

    See JSON-RPC API | ethereum.org, and more fields showing as the blew

    • withdrawTrieRoot: DATA, 32 Bytes - the root of the withdraw trie, used to prove the users’ withdrawals.
    • @@ -25,20 +29,20 @@

      ReturnsExample

      -
      // request
      curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getBlockByNumber","params":["0x1b4", true],"id":1}'

      // Result
      {
      "jsonrpc": "2.0",
      "id": 1,
      "result": {
      "batchHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "difficulty": "0x0",
      "extraData": "0x",
      "gasLimit": "0x989680",
      "gasUsed": "0x0",
      "hash": "0xbc979055d001fe70ed637edd20e918bc583c84c35372f4cdf04253ec34b99178",
      "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "miner": "0x0000000000000000000000000000000000000000",
      "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "nextL1MsgIndex": "0x0",
      "nonce": "0x0000000000000000",
      "number": "0x1b4",
      "parentHash": "0xff26c60bca2d08d9b0d17431a4c9d80d007dace61fb551bdf7c376d16bc77441",
      "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
      "rowConsumption": [
      {
      "name": "evm",
      "row_number": 2
      },
      {
      "name": "state",
      "row_number": 4
      },
      {
      "name": "bytecode",
      "row_number": 0
      },
      {
      "name": "copy",
      "row_number": 4
      },
      {
      "name": "keccak",
      "row_number": 1591
      },
      {
      "name": "tx",
      "row_number": 0
      },
      {
      "name": "rlp",
      "row_number": 0
      },
      {
      "name": "exp",
      "row_number": 150
      },
      {
      "name": "mod_exp",
      "row_number": 0
      },
      {
      "name": "pi",
      "row_number": 0
      },
      {
      "name": "poseidon",
      "row_number": 1222
      },
      {
      "name": "sig",
      "row_number": 0
      },
      {
      "name": "ecc",
      "row_number": 0
      },
      {
      "name": "mpt",
      "row_number": 101
      }
      ],
      "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
      "size": "0x1fe",
      "stateRoot": "0x1492cc1cebd586279388370e1184960e289d180eb867aa076fbad54aeb0a855b",
      "timestamp": "0x6619043f",
      "totalDifficulty": "0x0",
      "transactions": [],
      "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
      "uncles": [],
      "withdrawTrieRoot": "0x27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757"
      }
      }
      -

      morph_getBlockByHash

      +

      Example

      +
      // request
      curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getBlockByNumber","params":["0x1b4", true],"id":1}'

      // Result
      {
      "jsonrpc": "2.0",
      "id": 1,
      "result": {
      "batchHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "difficulty": "0x0",
      "extraData": "0x",
      "gasLimit": "0x989680",
      "gasUsed": "0x0",
      "hash": "0xbc979055d001fe70ed637edd20e918bc583c84c35372f4cdf04253ec34b99178",
      "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "miner": "0x0000000000000000000000000000000000000000",
      "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "nextL1MsgIndex": "0x0",
      "nonce": "0x0000000000000000",
      "number": "0x1b4",
      "parentHash": "0xff26c60bca2d08d9b0d17431a4c9d80d007dace61fb551bdf7c376d16bc77441",
      "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
      "rowConsumption": [
      {
      "name": "evm",
      "row_number": 2
      },
      {
      "name": "state",
      "row_number": 4
      },
      {
      "name": "bytecode",
      "row_number": 0
      },
      {
      "name": "copy",
      "row_number": 4
      },
      {
      "name": "keccak",
      "row_number": 1591
      },
      {
      "name": "tx",
      "row_number": 0
      },
      {
      "name": "rlp",
      "row_number": 0
      },
      {
      "name": "exp",
      "row_number": 150
      },
      {
      "name": "mod_exp",
      "row_number": 0
      },
      {
      "name": "pi",
      "row_number": 0
      },
      {
      "name": "poseidon",
      "row_number": 1222
      },
      {
      "name": "sig",
      "row_number": 0
      },
      {
      "name": "ecc",
      "row_number": 0
      },
      {
      "name": "mpt",
      "row_number": 101
      }
      ],
      "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
      "size": "0x1fe",
      "stateRoot": "0x1492cc1cebd586279388370e1184960e289d180eb867aa076fbad54aeb0a855b",
      "timestamp": "0x6619043f",
      "totalDifficulty": "0x0",
      "transactions": [],
      "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
      "uncles": [],
      "withdrawTrieRoot": "0x27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757"
      }
      }
      +

      morph_getBlockByHash

      Returns information about a block by hash.

      -

      Parameters

      +

      Parameters

      • DATA, 32 Bytes - Hash of a block.
      • Boolean - If true it returns the full transaction objects, if false only the hashes of the transactions.
      -

      Returns

      +

      Returns

      See morph_getBlockByNumber returns

      -

      morph_estimateL1DataFee

      +

      morph_estimateL1DataFee

      Generates and returns an estimate of how much L1DataFee the transaction will cost.

      -

      Parameters

      +

      Parameters

      1. Object - TransactionArgs
      -

      Returns

      +

      Returns

      QUANTITY - integer of the current l1 data fee in wei.

      -

      Example

      -
      // Request
      curl -X POST --data '{"jsonrpc":"2.0","method":"morph_estimateL1DataFee","params":[{see above}],"id":1}'

      // Result
      {
      "id":1,
      "jsonrpc": "2.0",
      "result": "0x3f4e2160f00"
      }
      -

      morph_getNumSkippedTransactions

      +

      Example

      +
      // Request
      curl -X POST --data '{"jsonrpc":"2.0","method":"morph_estimateL1DataFee","params":[{see above}],"id":1}'

      // Result
      {
      "id":1,
      "jsonrpc": "2.0",
      "result": "0x3f4e2160f00"
      }
      +

      morph_getNumSkippedTransactions

      Get the number of the skipped transactions

      -

      Parameters

      +

      Parameters

      None

      -

      Returns

      +

      Returns

      Quantity - integer of the number of the skipped transactions

      -

      Example

      -
      // Request
      curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getNumSkippedTransactions","params":[],"id":1}'

      // Result
      {
      "id":1,
      "jsonrpc": "2.0",
      "result": "0"
      }
      -

      morph_getSkippedTransactionHashes

      +

      Example

      +
      // Request
      curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getNumSkippedTransactions","params":[],"id":1}'

      // Result
      {
      "id":1,
      "jsonrpc": "2.0",
      "result": "0"
      }
      +

      morph_getSkippedTransactionHashes

      Get a list of skipped transaction hashes between the two indices provided (inclusive)

      -

      Parameters

      +

      Parameters

      1. from index
      2. to index
      -

      Returns

      +

      Returns

      Arrays of transaction hashes

      -

      Example

      -
      // Request
      curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getSkippedTransactionHashes","params":[0, 1],"id":1}'

      // Result
      {
      "id":1,
      "jsonrpc": "2.0",
      "result": [“0x….,”0x….]
      }

      -

      morph_getSkippedTransaction

      +

      Example

      +
      // Request
      curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getSkippedTransactionHashes","params":[0, 1],"id":1}'

      // Result
      {
      "id":1,
      "jsonrpc": "2.0",
      "result": [“0x….,”0x….]
      }

      +

      morph_getSkippedTransaction

      Get a skipped transaction by its hash.

      -

      Parameters

      +

      Parameters

      DATA, 32 Bytes - Hash of a transaction.

      -

      Returns

      +

      Returns

      Object - a transaction object(see JSON-RPC API | ethereum.org), an some extended fields:

      • sender: DATA, 20 Bytes - address of the sender.
      • @@ -92,13 +96,13 @@

        ReturnsExample

        -
        // Request
        curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getSkippedTransaction","params":[“0x…”],"id":1}'

        // Result
        {
        "id":1,
        "jsonrpc": "2.0",
        "result": {
        "from": "0x59b79a4fc3e0e1646b254fb6804d8f5fa8fae7e0",
        "gas": "0x33450",
        "gasPrice": "0x0",
        "hash": "0x74e13cc35fbeffc9747dd3a5a191b2d62939ee1d1c24651adb89b470f9cf0a36",
        "input": "0x8ef1332e00000000000000000000000082c74cd310438d4938799af4c2a29587284a2ca700000000000000000000000053000000000000000000000000000000000000060000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000f1d598fd5f8367be41b0761696e643ac092b313e000000000000000000000000f1d598fd5f8367be41b0761696e643ac092b313e0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "nonce": "0x0",
        "to": "0x5300000000000000000000000000000000000007",
        "transactionIndex": "0x0",
        "value": "0x0",
        "type": "0x7e",
        "v": "0x0",
        "r": "0x0",
        "s": "0x0",
        "sender": "0x59b79a4fc3e0e1646b254fb6804d8f5fa8fae7e0",
        "queueIndex": "0x0",
        “skipReason”: “row consumption overflow”, "skippedBlockHash":"0x61411498b0c241895d44c1bf9a9448ae8584bf434246d680980e8a5edf9ce27c",
        "skippedBlockNumber": "0x382e",
        “”
        }
        }
        -

        morph_getSkippedTransactionHashes

        +

        Example

        +
        // Request
        curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getSkippedTransaction","params":[“0x…”],"id":1}'

        // Result
        {
        "id":1,
        "jsonrpc": "2.0",
        "result": {
        "from": "0x59b79a4fc3e0e1646b254fb6804d8f5fa8fae7e0",
        "gas": "0x33450",
        "gasPrice": "0x0",
        "hash": "0x74e13cc35fbeffc9747dd3a5a191b2d62939ee1d1c24651adb89b470f9cf0a36",
        "input": "0x8ef1332e00000000000000000000000082c74cd310438d4938799af4c2a29587284a2ca700000000000000000000000053000000000000000000000000000000000000060000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000f1d598fd5f8367be41b0761696e643ac092b313e000000000000000000000000f1d598fd5f8367be41b0761696e643ac092b313e0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "nonce": "0x0",
        "to": "0x5300000000000000000000000000000000000007",
        "transactionIndex": "0x0",
        "value": "0x0",
        "type": "0x7e",
        "v": "0x0",
        "r": "0x0",
        "s": "0x0",
        "sender": "0x59b79a4fc3e0e1646b254fb6804d8f5fa8fae7e0",
        "queueIndex": "0x0",
        “skipReason”: “row consumption overflow”, "skippedBlockHash":"0x61411498b0c241895d44c1bf9a9448ae8584bf434246d680980e8a5edf9ce27c",
        "skippedBlockNumber": "0x382e",
        “”
        }
        }
        +

        morph_getSkippedTransactionHashes

        Get the batches by index

        -

        Parameters

        +

        Parameters

        Quantity - integer of the index of batch

        -

        Returns

        +

        Returns

        Object - RollupBatch

        1. version: quantity - the version of the batch
        2. @@ -118,16 +122,16 @@

          ReturnsExample

          -
          // Request
          curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getRollupBatchByIndex","params":[1],"id":1}'

          //Result
          {
          "jsonrpc": "2.0",
          "id": 1,
          "result": {
          "version": 0,
          "hash": "0x559c75fb09451ef19968b6c17c2ed3b3f431ab496d29d0a611970bf3e377ed4f",
          "parentBatchHeader": "0x000000000000000000000000000000000000000000000000008b1cfd86e7ac16004ef7aae3e693402764e10471efc9a67c3051a44b2d5a5ad2010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440140000000000000000000000000000000000000000000000000000000000000000",
          "chunks": [
          "0x010000000000000001000000006623829f0000000000000000000000000000000000000000000000000000000000000000000000000098968000000000"
          ],
          "skippedL1MessageBitmap": "0x",
          "prevStateRoot": "0x232ce5fc696e7033ec630174d4c78aa157cc13ffba01aba5154bb900ae2b61b3",
          "postStateRoot": "0x232ce5fc696e7033ec630174d4c78aa157cc13ffba01aba5154bb900ae2b61b3",
          "withdrawRoot": "0x27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757",
          "sidecar": {
          "Blobs": [
          [...]
          ],
          "Commitments": [
          [...]
          ],
          "Proofs": [
          [...]
          ]
          },
          "signatures": [
          {
          "version": 0,
          "signer": 0,
          "signerPubKey": "0x00000000000000000000000000000000095ad465c2895ee825c7d4f1b60a18734db57d4108369e47c6e3a94ee15846f825c06dad5d98f503bd31ece1d9f94b11000000000000000000000000000000000c5d6ba04bc9b9674dd2acbfc5caed3976c1b8be2ec90a03d78dffe924648b4fba82225aff43c744310c6a60185b75ac000000000000000000000000000000000fce6be001c871a11b9db1c6c15f0a6999de5646941a74486206dc784f0b3ffe11799212f3f44ef754b4a0f1ecf85639000000000000000000000000000000000b2f06634e5ea719682c30911c94dfb560f0b7656b5c34a871ea035e3fe7b041885420f8fe1e251f1cce5cdb7514869e",
          "signature": "0x079ff817623be61e3dc48ad755020d3eb37e47697e97394df3707248e5e923d8cb92cc2c788e2e19eb21d878224e3e2a023170f091b979dbdc5ac47e95a1e3e6edf5a91279b3c89e871927370abeefd43430b561b640d91f0f474db8e871f05f"
          },
          {
          "version": 0,
          "signer": 1,
          "signerPubKey": "0x0000000000000000000000000000000010173aeac4ff317e8e60493f962b91dbd27614e1f6594e17d18a02968bd1fd698b6703092ab8622cd22d6948d9421156000000000000000000000000000000000801aea15697ab4d7a808be45377e4f0d2f54857fdc04031e476402ff16c66a6cbcc5f09a84bf85400c8afbabed006600000000000000000000000000000000015fc71b2c4e81148274e6169c9c9aace8c34fa6030547650242b6c32527dd23a996416e32640bce4f495a0afabc7dbb900000000000000000000000000000000088c4a0dffccc96bce47aef0e176b129457a5f3ae1651b132ddb418e9f7b5850a38c6fec1be6d169eb88dc1619648bf4",
          "signature": "0x05784fcf2c9b50b2503282a464106ce6bad4d29798869d2d24dae047eba48662ef66b54f193a4a0aad511cee57b8fc960b44e478cfc0c021a92dba44495ffa9237f4cf4f9865bb8fb95cee9bb32f2b283940bce6d8f4fdfe89bec0c186ecc429"
          },
          {
          "version": 0,
          "signer": 2,
          "signerPubKey": "0x0000000000000000000000000000000003fd9468a8ceffc1b696874517777ef8bfdc9a1bade95c480ee2624903e648c1caf01c65de5b4fda8876a3a0e8d9f0890000000000000000000000000000000004c02f3609a0f61d12fe737dcbb047d5253bd3ff905b55c0e0f932b476fd77d172a58b72ef0f506407870988dd6038220000000000000000000000000000000017fa5765899f60f7a58f8ccdaaa295cde55992231710672692ba6a71a4faa9572f728f438ded65576a570d57e19fd304000000000000000000000000000000001226138813bde98af3464ed03649d8c731bc4e5cb3d26b53bf7483f4105d18bbb3f19e23905119e156e7d003d2fd125c",
          "signature": "0x17d127f711bbfd578f3a9d6c897f6eb4c109f2b12ec16c7976c2146325b718ac06713ecfd168b1abd60d5c4d84b8c75105019a522a96f9d28974dafab640e146abc29322e5550bdb606bcf768c1d7de468fa42e09f2c806bfbedcffd6cfa652c"
          },
          {
          "version": 0,
          "signer": 3,
          "signerPubKey": "0x00000000000000000000000000000000109bf02a2636c0dc1968b0a50db77251eb090c3e9f51e2a2bc60c4ac72213f41f01f0a34e92c2e0625bd62e28e27edb500000000000000000000000000000000139969bd92522113c0615659874d1fae311ad8152d0584c7b57ffc14927067486dcf86413c5684fccc1163ee2d45c1c1000000000000000000000000000000000f172603f70a0730d100ad6d28bde477195987062e8ade83b82d093935d956ff20ca768c26263577b094f1cb756adc400000000000000000000000000000000010dde3acca00b4ff1b4976500a8f97e92246f43f78cadc95c4993dfc4f4c501c33d42a4bf52587f4931287b59623149c",
          "signature": "0x053a7119c0fa920e94c8a1f32441537509f654a673af02179a01ff2c7ac6dee24b22c2f93da4b4a37bb08e2115ef097e00038d0cabdeec2ae1838aa30cb62bff8e528ac200eff0d69fbe8848646972dbb09f4cf3a06c62be0c5e314f25bdbd68"
          }
          ]
          }
          }

          -

          morph_GetBlockTraceByNumberOrHash

          +

          Example

          +
          // Request
          curl -X POST --data '{"jsonrpc":"2.0","method":"morph_getRollupBatchByIndex","params":[1],"id":1}'

          //Result
          {
          "jsonrpc": "2.0",
          "id": 1,
          "result": {
          "version": 0,
          "hash": "0x559c75fb09451ef19968b6c17c2ed3b3f431ab496d29d0a611970bf3e377ed4f",
          "parentBatchHeader": "0x000000000000000000000000000000000000000000000000008b1cfd86e7ac16004ef7aae3e693402764e10471efc9a67c3051a44b2d5a5ad2010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440140000000000000000000000000000000000000000000000000000000000000000",
          "chunks": [
          "0x010000000000000001000000006623829f0000000000000000000000000000000000000000000000000000000000000000000000000098968000000000"
          ],
          "skippedL1MessageBitmap": "0x",
          "prevStateRoot": "0x232ce5fc696e7033ec630174d4c78aa157cc13ffba01aba5154bb900ae2b61b3",
          "postStateRoot": "0x232ce5fc696e7033ec630174d4c78aa157cc13ffba01aba5154bb900ae2b61b3",
          "withdrawRoot": "0x27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757",
          "sidecar": {
          "Blobs": [
          [...]
          ],
          "Commitments": [
          [...]
          ],
          "Proofs": [
          [...]
          ]
          },
          "signatures": [
          {
          "version": 0,
          "signer": 0,
          "signerPubKey": "0x00000000000000000000000000000000095ad465c2895ee825c7d4f1b60a18734db57d4108369e47c6e3a94ee15846f825c06dad5d98f503bd31ece1d9f94b11000000000000000000000000000000000c5d6ba04bc9b9674dd2acbfc5caed3976c1b8be2ec90a03d78dffe924648b4fba82225aff43c744310c6a60185b75ac000000000000000000000000000000000fce6be001c871a11b9db1c6c15f0a6999de5646941a74486206dc784f0b3ffe11799212f3f44ef754b4a0f1ecf85639000000000000000000000000000000000b2f06634e5ea719682c30911c94dfb560f0b7656b5c34a871ea035e3fe7b041885420f8fe1e251f1cce5cdb7514869e",
          "signature": "0x079ff817623be61e3dc48ad755020d3eb37e47697e97394df3707248e5e923d8cb92cc2c788e2e19eb21d878224e3e2a023170f091b979dbdc5ac47e95a1e3e6edf5a91279b3c89e871927370abeefd43430b561b640d91f0f474db8e871f05f"
          },
          {
          "version": 0,
          "signer": 1,
          "signerPubKey": "0x0000000000000000000000000000000010173aeac4ff317e8e60493f962b91dbd27614e1f6594e17d18a02968bd1fd698b6703092ab8622cd22d6948d9421156000000000000000000000000000000000801aea15697ab4d7a808be45377e4f0d2f54857fdc04031e476402ff16c66a6cbcc5f09a84bf85400c8afbabed006600000000000000000000000000000000015fc71b2c4e81148274e6169c9c9aace8c34fa6030547650242b6c32527dd23a996416e32640bce4f495a0afabc7dbb900000000000000000000000000000000088c4a0dffccc96bce47aef0e176b129457a5f3ae1651b132ddb418e9f7b5850a38c6fec1be6d169eb88dc1619648bf4",
          "signature": "0x05784fcf2c9b50b2503282a464106ce6bad4d29798869d2d24dae047eba48662ef66b54f193a4a0aad511cee57b8fc960b44e478cfc0c021a92dba44495ffa9237f4cf4f9865bb8fb95cee9bb32f2b283940bce6d8f4fdfe89bec0c186ecc429"
          },
          {
          "version": 0,
          "signer": 2,
          "signerPubKey": "0x0000000000000000000000000000000003fd9468a8ceffc1b696874517777ef8bfdc9a1bade95c480ee2624903e648c1caf01c65de5b4fda8876a3a0e8d9f0890000000000000000000000000000000004c02f3609a0f61d12fe737dcbb047d5253bd3ff905b55c0e0f932b476fd77d172a58b72ef0f506407870988dd6038220000000000000000000000000000000017fa5765899f60f7a58f8ccdaaa295cde55992231710672692ba6a71a4faa9572f728f438ded65576a570d57e19fd304000000000000000000000000000000001226138813bde98af3464ed03649d8c731bc4e5cb3d26b53bf7483f4105d18bbb3f19e23905119e156e7d003d2fd125c",
          "signature": "0x17d127f711bbfd578f3a9d6c897f6eb4c109f2b12ec16c7976c2146325b718ac06713ecfd168b1abd60d5c4d84b8c75105019a522a96f9d28974dafab640e146abc29322e5550bdb606bcf768c1d7de468fa42e09f2c806bfbedcffd6cfa652c"
          },
          {
          "version": 0,
          "signer": 3,
          "signerPubKey": "0x00000000000000000000000000000000109bf02a2636c0dc1968b0a50db77251eb090c3e9f51e2a2bc60c4ac72213f41f01f0a34e92c2e0625bd62e28e27edb500000000000000000000000000000000139969bd92522113c0615659874d1fae311ad8152d0584c7b57ffc14927067486dcf86413c5684fccc1163ee2d45c1c1000000000000000000000000000000000f172603f70a0730d100ad6d28bde477195987062e8ade83b82d093935d956ff20ca768c26263577b094f1cb756adc400000000000000000000000000000000010dde3acca00b4ff1b4976500a8f97e92246f43f78cadc95c4993dfc4f4c501c33d42a4bf52587f4931287b59623149c",
          "signature": "0x053a7119c0fa920e94c8a1f32441537509f654a673af02179a01ff2c7ac6dee24b22c2f93da4b4a37bb08e2115ef097e00038d0cabdeec2ae1838aa30cb62bff8e528ac200eff0d69fbe8848646972dbb09f4cf3a06c62be0c5e314f25bdbd68"
          }
          ]
          }
          }

          +

          morph_GetBlockTraceByNumberOrHash

          It replays the block and returns the structured blockTrace for rollers.

          -

          Parameters

          +

          Parameters

          1. QUANTITY|TAG - integer of a block number, or the string "earliest", "latest", "pending", "safe" or "finalized", as in the default block parameter. Or DATA, 32 Bytes - Hash of a block.
          2. tracerConfig(optional), see debug Namespace | go-ethereum
          -

          Example

          -
          // Request
          {"jsonrpc":"2.0","method":"morph_getBlockTraceByNumberOrHash","params":["latest"],"id":67}

          // Result
          {
          "jsonrpc": "2.0",
          "id": 67,
          "result": {
          "chainID": 53077,
          "version": "5.2.0-mainnet",
          "coinbase": {
          "address": "0xfabb0ac9d68b0b445fb7357272ff202c5651694a",
          "nonce": 0,
          "balance": "0x2000000000000000000000000000000000000000000000000006b49161ba10",
          "keccakCodeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "poseidonCodeHash": "0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864",
          "codeSize": 0
          },
          "header": {
          "parentHash": "0xa2b3ee7a3718baeb1b460bc9a479838532c184129d0238b342e1bc9430e15961",
          "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
          "miner": "0x0000000000000000000000000000000000000000",
          "stateRoot": "0x1492cc1cebd586279388370e1184960e289d180eb867aa076fbad54aeb0a855b",
          "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
          "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
          "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
          "difficulty": "0x0",
          "number": "0x31",
          "gasLimit": "0x989680",
          "gasUsed": "0x0",
          "timestamp": "0x6618fa6a",
          "extraData": "0x",
          "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "nonce": "0x0000000000000000",
          "nextL1MsgIndex": "0x0",
          "batchHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "baseFeePerGas": null,
          "withdrawalsRoot": null,
          "blobGasUsed": null,
          "excessBlobGas": null,
          "parentBeaconBlockRoot": null,
          "hash": "0x65645773fa2056771753878cdf5a1280dff36756096e8f9c1cf51fe66690a448"
          },
          "transactions": [],
          "storageTrace": {
          "rootBefore": "0x1492cc1cebd586279388370e1184960e289d180eb867aa076fbad54aeb0a855b",
          "rootAfter": "0x1492cc1cebd586279388370e1184960e289d180eb867aa076fbad54aeb0a855b",
          "proofs": {
          "0x5300000000000000000000000000000000000001": [
          "0x09261068d5568cdf6020d6b6703b831fbc4c5928019dcc23606eceaa4cb4befd3a22bd9a05e5f4619cebb743688e2bb2510352fa7b64cee7d6c947e1c8655b3e88",
          "0x0912cea39ac19eee30407d6760f267dcaa3456c6ab30a2d7285e1ae726debdc3a228bc075d0a3a84f79e301293ac8c4188d5e58e3a30a49ca058d77784ec477d6c",
          "0x092a1073697a898cbfc740c3c327cc3bcc1517b23dd5a44ea7f7e5975a55a615790e69dfcd0c8346b28ff2dffa8db5d0c5b7ed8291eab83be0292051c2dd9a55bc",
          "0x0927f8c131313ff2ce0d551273c407fd6e94e5d9f644eab09c4c20b13e00fb5a4b1e00b9701c7f2ac25be7e3fe8ad00ce18f642d07188ff1aacc6d7a1fc44987b5",
          "0x090296736b61c7a9c43b7260c2f652d1bc941b882c0a1e71a9b8d86657cc0b9d8e1b6b72e48fe7cfc89ae526ae345245d7f6871db82148a8a0c1c9cf992e177ba2",
          "0x090a6feef711af23824583c2bcd54147c2991287ca1fbad2cbb0e9ac2f42dc0c2d1b510d4e26002d7f33e82092a7c28f26ac6cf3f2349eb23e4374ad31f3e289d0",
          "0x091a8fc20731feea420de908b0d66e7c53398f53ce5d76054cf3d0e4747ba1896222d288ea2a9d771a19771658abf5a64fd503f4ed277aa8d6f779137a88ea1c8d",
          "0x091628b91a861616a64807781ae6aaa549dae9555ef1454a85df052398404f44690f386bb59d106d7a27ff2df1de738c3fae5cf8307f84e07ac6957e3c42fa3f5e",
          "0x09220b163279be211a426832f5ff47e0ecadb5bd5eaaf0d62189998fde4e14e62913696e7ffd560b4bf7df760cbfdc330a8c5e7cf15b4e2f60fb9146fd28fe2db7",
          "0x08150feb81fe1639286c75adb93e5467d36ad52d9ff00e0c706bc5345f6dcd49500000000000000000000000000000000000000000000000000000000000000000",
          "0x081cb430cbc5dd11f62a713fb3656184085386104dc53fc135fb3c56dba49670500000000000000000000000000000000000000000000000000000000000000000",
          "0x060c320ff8f6c3907ae6df62a7fe70e2be093390bd246197d5f56b6bce56f513f812fac8f51e3812914c097147217411381b9b2dad76963ef63c261885d3a49223",
          "0x0427cfcbd2fe87474008e199ef5bff09273803bbf38032c75a36a7726b3c88f8a205080000000000000000000000000000000000000000000000000aec000000000000000000000000000000000000000000000000000000000000000000000000000000002198e2c16011cd18ef5be82557ea4552a16cc88ed8026d68fc38a18776550fa944107d7c70e67e04d35d77455d5755c94d4897196e4ea9a341c1a6d864a6d4d518d32c9790b7656cb1991e831f76e6d65151cbd1c05aef8cfa7d369ad2076f8400",
          "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
          ],
          "0x530000000000000000000000000000000000000f": [
          "0x09261068d5568cdf6020d6b6703b831fbc4c5928019dcc23606eceaa4cb4befd3a22bd9a05e5f4619cebb743688e2bb2510352fa7b64cee7d6c947e1c8655b3e88",
          "0x0912cea39ac19eee30407d6760f267dcaa3456c6ab30a2d7285e1ae726debdc3a228bc075d0a3a84f79e301293ac8c4188d5e58e3a30a49ca058d77784ec477d6c",
          "0x0910b680ab891bca41519a50437acf0fd6001d3843132362201baeecfefe64861d004b217e8efd3e9ff7f15214f53868836cd5341e524a6862cf599a2c91e066e4",
          "0x092bc917a3803350b7b4b99e33f5612886fe67ae2346b7b8a80c4f33ea2b2143c5157889ebd8bd189e158f8e315bf0e81eeaade2de06d9514962a676c2b5c43fe6",
          "0x0923373510953f88897d7fcfd22182f41afbc558d2f862f437a31d1919ce2e34c925c888335ad923fc91289b73b7cb65de69d93146389a6af856490d8578203517",
          "0x092ea32b06c112526e73d5c4828866500f096d35e79c13d7c1f7aa42afce901bd618bb82398f0bc28770139185439bf42dea1f543e8a0a266399ba43a3dd60f463",
          "0x09199e7116f18fc4121b627c11b0ca83bbb70b204098c01db84cd2c27ec3416bd4002ea098b20a57201744454a787c20550c1ffa4145ab218c28906ba3df5ea6cb",
          "0x0923bfab6f7b9cc20bae8ca8989ad45df9625cf0c14ee54257ffd31b2593b8385f0861f83d52b30f3b4ea0dbf9aa1b95e8864f2b2032249d6fa43ba22be66e5e82",
          "0x0609fd578e322ce608e81c29d820eca5e2d610bf211aa40fbfdfc7bd1327c9c6432a868ae99ff40d43cff3f28ff0655bf467eaa89e3d3a1493203e4abb26099b3b",
          "0x0418a86f98026d1a55f6fee616f04d51be16c033651ffaafb0514287ec067d04e805080000000000000000000000000000000000000000000000000aec00000000000000000000000000000000000000000000000000000000000000000000000000000000025f5484cf6758b2d9e10b66230e7ed93fd790931c579d1583b40a25c29b3cc944107d7c70e67e04d35d77455d5755c94d4897196e4ea9a341c1a6d864a6d4d518d32c9790b7656cb1991e831f76e6d65151cbd1c05aef8cfa7d369ad2076f8420530000000000000000000000000000000000000f000000000000000000000000",
          "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
          ],
          "0xFABB0ac9d68B0B445fB7357272Ff202C5651694a": [
          "0x09261068d5568cdf6020d6b6703b831fbc4c5928019dcc23606eceaa4cb4befd3a22bd9a05e5f4619cebb743688e2bb2510352fa7b64cee7d6c947e1c8655b3e88",
          "0x09132e097dde889d85b8b3309a827f0496c58979f869fe9827851d59f3af8d3bad1db74244979778c4e7c6b56496b5a3f1ee84cd42acacbc6ae3842deb5332b101",
          "0x0919474ec6b34f96f735c336cc161ed84fdd3a683fa201b518af5c2c1626f02f4612a08d77db2b9b67c38d89ed19f9ca59dadbd1699d27829f985020f6f3432959",
          "0x090dc9f8dd06d98c5a78af9836fc75823e4e2b0c95085c36dc33b8c35f5fc224d319e43044e7ac03d516f20d38f68682109407871d5f07f080c59857789fad1e46",
          "0x0907bc083c80445c99e7239f960beabcf360f7a6999ade44323b8401e0ec6842b80c789c2f71e21b35f96a71c66a774edac37ba18b809b8122d9000fbf0f8ac74b",
          "0x091e9ddabce6463c4843a7f43ce562b40bd7cc778a539486f6739bf7daf6f14bdf2da1168d26e898c81e03ba275f3474d4172c1f936d272114b87a486ae25a0c7e",
          "0x092ebed3e1476b235ef7ee7d5c160d7738aee3a9ecf02754975430203dbe05b7ce1f81e74d1f8a355b7dda2b293a8833c0926df34b6ab6516de484a7c682123e3b",
          "0x0700000000000000000000000000000000000000000000000000000000000000000bca6f26c452ec72dc90f8ac79855df88d3b88ce77a5c4ac472eea9ef7b619ae",
          "0x0824eb7acc6f05bd88d0aecfb7e170edc0f99384a54657916103d91fad99bf01030000000000000000000000000000000000000000000000000000000000000000",
          "0x072449731363c43de43d2516f39791c43a3be1e83edc3432352d81d2d1384a946e159ad10b4c89ff16157cc364c81f6039eeea9a8eb87e4b4700249219e71cc3ef",
          "0x0403d2c88868dc8b5f7994604147a8246c48cc905235de980c42c3e78f351f00c5050800000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000006b49161ba100000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4702098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b6486420fabb0ac9d68b0b445fb7357272ff202c5651694a000000000000000000000000",
          "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
          ]
          },
          "storageProofs": {
          "0x5300000000000000000000000000000000000001": {
          "0x0000000000000000000000000000000000000000000000000000000000000021": [
          "0x0825bcd8ed4a7e39c0f0e835761cda36131dd34f16de95765d2216d997923a52f60e38bf5d7d592ab89df92d87f260b8529d9c466b936b42ad8fbfe576bf97b200",
          "0x06216372aa3165a29ee67494a5a9680358be92c254cc5724949e4d52742ba8d57f02a40b5614637fca2783d673559f035f5f5a0588ee27d164bb5375568493200a",
          "0x042f683d080c393f5fb2ade2190fd56e8a5e8fa26533acdea8cce25caa236027cc0101000027ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d75700",
          "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
          ]
          },
          "0x530000000000000000000000000000000000000f": {
          "0x0000000000000000000000000000000000000000000000000000000000000001": [
          "0x09224baa919e1495600105d8a4446f80cabd9a915d7556e0b5d2956a3ad01e96862b531affe57e7f49ddcfef93ff839a215de0865c985188f99c61838f366e2bbe",
          "0x091eb325ae1568060f3957cc990d35e5ef48b7b2bc7979151083abe2d68aabc812162b4d479ff13f2af3f0cfaadc6bccc8622dd980f83c7014e947f50577eedaba",
          "0x08015c4fc60a3c6160762783cfc0da7e9d0518e56f0f4f236b7666e1afde43c8f60e867960e703abfccf265c16aceb5c2a092c39248e00fa04f717cf3ca38dfe9e",
          "0x080782addd8b48a93860ab4cb45e80c6cc869c1288f09d52cb7dec1f6aab62deb70000000000000000000000000000000000000000000000000000000000000000",
          "0x0700000000000000000000000000000000000000000000000000000000000000000f35c10e1893b6065c8ce8ba23fcd841bb168eb35643ca124118a4e44668fab2",
          "0x080487bd50c628c019d7858418000d1393427df64c9c103a4229f7b6cb3cdf5ae60000000000000000000000000000000000000000000000000000000000000000",
          "0x0700000000000000000000000000000000000000000000000000000000000000001046b31bcd31548fa80d0a9fb9fae45e61112d689f6b9c82958033c0787f1f94",
          "0x0805b5be5c8d36bd01ef9c3d10f3d994da611bc1484e9e48f69d2224efeb811b320000000000000000000000000000000000000000000000000000000000000000",
          "0x081ebc02f6986209f10fc7d04ba0c4ef196d75ad0a22e786fc7cf789f591e9b26f0000000000000000000000000000000000000000000000000000000000000000",
          "0x0700000000000000000000000000000000000000000000000000000000000000002680dd0a6ed49fc1faf7d4ef23a8328de46b8a4c1d86e6553f4940e394673978",
          "0x0628658ea3cbfa933d0e4041f9000bcc3393a3536913008ef6e1837ba7053bdec1156a0960a84fa4287f66d18b9c39ab9d403fa6b6dddd126f47758aadcb82e122",
          "0x0426049ba6de63003492eb078a01a8aa4f4a0e67f28f0955c2eba9101d5d2eea5001010000000000000000000000000000000000000000000000000000000000000000000700",
          "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
          ],
          "0x0000000000000000000000000000000000000000000000000000000000000002": [
          "0x09224baa919e1495600105d8a4446f80cabd9a915d7556e0b5d2956a3ad01e96862b531affe57e7f49ddcfef93ff839a215de0865c985188f99c61838f366e2bbe",
          "0x091eb325ae1568060f3957cc990d35e5ef48b7b2bc7979151083abe2d68aabc812162b4d479ff13f2af3f0cfaadc6bccc8622dd980f83c7014e947f50577eedaba",
          "0x08015c4fc60a3c6160762783cfc0da7e9d0518e56f0f4f236b7666e1afde43c8f60e867960e703abfccf265c16aceb5c2a092c39248e00fa04f717cf3ca38dfe9e",
          "0x04020953ad52de135367a1ba2629636216ed5174cce5629d11b5d97fe733f07dcc0101000000000000000000000000000000000000000000000000000000000000000029d7200000000000000000000000000000000000000000000000000000000000000002",
          "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
          ],
          "0x0000000000000000000000000000000000000000000000000000000000000003": [
          "0x09224baa919e1495600105d8a4446f80cabd9a915d7556e0b5d2956a3ad01e96862b531affe57e7f49ddcfef93ff839a215de0865c985188f99c61838f366e2bbe",
          "0x07000000000000000000000000000000000000000000000000000000000000000014a36870c64d2edad5a210b41e5bdfd73e7f4201161a755c434a621ffe103cc8",
          "0x061c3181dc54d9c120fdc034e9c12d47d19f07bdeb049e492e0e7c5c9d7fe19a4d0e38bf5d7d592ab89df92d87f260b8529d9c466b936b42ad8fbfe576bf97b200",
          "0x0406c50541f08911ad149aa545dd3d606f86ee63c751a795c7d57f0d3f85e6bdeb01010000000000000000000000000000000000000000000000000000000000174876e800200000000000000000000000000000000000000000000000000000000000000003",
          "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
          ]
          }
          }
          },
          "executionResults": [],
          "withdraw_trie_root": "0x27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757",
          "startL1QueueIndex": 0
          }
          }
    +

    Example

    +
    // Request
    {"jsonrpc":"2.0","method":"morph_getBlockTraceByNumberOrHash","params":["latest"],"id":67}

    // Result
    {
    "jsonrpc": "2.0",
    "id": 67,
    "result": {
    "chainID": 53077,
    "version": "5.2.0-mainnet",
    "coinbase": {
    "address": "0xfabb0ac9d68b0b445fb7357272ff202c5651694a",
    "nonce": 0,
    "balance": "0x2000000000000000000000000000000000000000000000000006b49161ba10",
    "keccakCodeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
    "poseidonCodeHash": "0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864",
    "codeSize": 0
    },
    "header": {
    "parentHash": "0xa2b3ee7a3718baeb1b460bc9a479838532c184129d0238b342e1bc9430e15961",
    "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
    "miner": "0x0000000000000000000000000000000000000000",
    "stateRoot": "0x1492cc1cebd586279388370e1184960e289d180eb867aa076fbad54aeb0a855b",
    "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
    "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "difficulty": "0x0",
    "number": "0x31",
    "gasLimit": "0x989680",
    "gasUsed": "0x0",
    "timestamp": "0x6618fa6a",
    "extraData": "0x",
    "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "nonce": "0x0000000000000000",
    "nextL1MsgIndex": "0x0",
    "batchHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "baseFeePerGas": null,
    "withdrawalsRoot": null,
    "blobGasUsed": null,
    "excessBlobGas": null,
    "parentBeaconBlockRoot": null,
    "hash": "0x65645773fa2056771753878cdf5a1280dff36756096e8f9c1cf51fe66690a448"
    },
    "transactions": [],
    "storageTrace": {
    "rootBefore": "0x1492cc1cebd586279388370e1184960e289d180eb867aa076fbad54aeb0a855b",
    "rootAfter": "0x1492cc1cebd586279388370e1184960e289d180eb867aa076fbad54aeb0a855b",
    "proofs": {
    "0x5300000000000000000000000000000000000001": [
    "0x09261068d5568cdf6020d6b6703b831fbc4c5928019dcc23606eceaa4cb4befd3a22bd9a05e5f4619cebb743688e2bb2510352fa7b64cee7d6c947e1c8655b3e88",
    "0x0912cea39ac19eee30407d6760f267dcaa3456c6ab30a2d7285e1ae726debdc3a228bc075d0a3a84f79e301293ac8c4188d5e58e3a30a49ca058d77784ec477d6c",
    "0x092a1073697a898cbfc740c3c327cc3bcc1517b23dd5a44ea7f7e5975a55a615790e69dfcd0c8346b28ff2dffa8db5d0c5b7ed8291eab83be0292051c2dd9a55bc",
    "0x0927f8c131313ff2ce0d551273c407fd6e94e5d9f644eab09c4c20b13e00fb5a4b1e00b9701c7f2ac25be7e3fe8ad00ce18f642d07188ff1aacc6d7a1fc44987b5",
    "0x090296736b61c7a9c43b7260c2f652d1bc941b882c0a1e71a9b8d86657cc0b9d8e1b6b72e48fe7cfc89ae526ae345245d7f6871db82148a8a0c1c9cf992e177ba2",
    "0x090a6feef711af23824583c2bcd54147c2991287ca1fbad2cbb0e9ac2f42dc0c2d1b510d4e26002d7f33e82092a7c28f26ac6cf3f2349eb23e4374ad31f3e289d0",
    "0x091a8fc20731feea420de908b0d66e7c53398f53ce5d76054cf3d0e4747ba1896222d288ea2a9d771a19771658abf5a64fd503f4ed277aa8d6f779137a88ea1c8d",
    "0x091628b91a861616a64807781ae6aaa549dae9555ef1454a85df052398404f44690f386bb59d106d7a27ff2df1de738c3fae5cf8307f84e07ac6957e3c42fa3f5e",
    "0x09220b163279be211a426832f5ff47e0ecadb5bd5eaaf0d62189998fde4e14e62913696e7ffd560b4bf7df760cbfdc330a8c5e7cf15b4e2f60fb9146fd28fe2db7",
    "0x08150feb81fe1639286c75adb93e5467d36ad52d9ff00e0c706bc5345f6dcd49500000000000000000000000000000000000000000000000000000000000000000",
    "0x081cb430cbc5dd11f62a713fb3656184085386104dc53fc135fb3c56dba49670500000000000000000000000000000000000000000000000000000000000000000",
    "0x060c320ff8f6c3907ae6df62a7fe70e2be093390bd246197d5f56b6bce56f513f812fac8f51e3812914c097147217411381b9b2dad76963ef63c261885d3a49223",
    "0x0427cfcbd2fe87474008e199ef5bff09273803bbf38032c75a36a7726b3c88f8a205080000000000000000000000000000000000000000000000000aec000000000000000000000000000000000000000000000000000000000000000000000000000000002198e2c16011cd18ef5be82557ea4552a16cc88ed8026d68fc38a18776550fa944107d7c70e67e04d35d77455d5755c94d4897196e4ea9a341c1a6d864a6d4d518d32c9790b7656cb1991e831f76e6d65151cbd1c05aef8cfa7d369ad2076f8400",
    "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
    ],
    "0x530000000000000000000000000000000000000f": [
    "0x09261068d5568cdf6020d6b6703b831fbc4c5928019dcc23606eceaa4cb4befd3a22bd9a05e5f4619cebb743688e2bb2510352fa7b64cee7d6c947e1c8655b3e88",
    "0x0912cea39ac19eee30407d6760f267dcaa3456c6ab30a2d7285e1ae726debdc3a228bc075d0a3a84f79e301293ac8c4188d5e58e3a30a49ca058d77784ec477d6c",
    "0x0910b680ab891bca41519a50437acf0fd6001d3843132362201baeecfefe64861d004b217e8efd3e9ff7f15214f53868836cd5341e524a6862cf599a2c91e066e4",
    "0x092bc917a3803350b7b4b99e33f5612886fe67ae2346b7b8a80c4f33ea2b2143c5157889ebd8bd189e158f8e315bf0e81eeaade2de06d9514962a676c2b5c43fe6",
    "0x0923373510953f88897d7fcfd22182f41afbc558d2f862f437a31d1919ce2e34c925c888335ad923fc91289b73b7cb65de69d93146389a6af856490d8578203517",
    "0x092ea32b06c112526e73d5c4828866500f096d35e79c13d7c1f7aa42afce901bd618bb82398f0bc28770139185439bf42dea1f543e8a0a266399ba43a3dd60f463",
    "0x09199e7116f18fc4121b627c11b0ca83bbb70b204098c01db84cd2c27ec3416bd4002ea098b20a57201744454a787c20550c1ffa4145ab218c28906ba3df5ea6cb",
    "0x0923bfab6f7b9cc20bae8ca8989ad45df9625cf0c14ee54257ffd31b2593b8385f0861f83d52b30f3b4ea0dbf9aa1b95e8864f2b2032249d6fa43ba22be66e5e82",
    "0x0609fd578e322ce608e81c29d820eca5e2d610bf211aa40fbfdfc7bd1327c9c6432a868ae99ff40d43cff3f28ff0655bf467eaa89e3d3a1493203e4abb26099b3b",
    "0x0418a86f98026d1a55f6fee616f04d51be16c033651ffaafb0514287ec067d04e805080000000000000000000000000000000000000000000000000aec00000000000000000000000000000000000000000000000000000000000000000000000000000000025f5484cf6758b2d9e10b66230e7ed93fd790931c579d1583b40a25c29b3cc944107d7c70e67e04d35d77455d5755c94d4897196e4ea9a341c1a6d864a6d4d518d32c9790b7656cb1991e831f76e6d65151cbd1c05aef8cfa7d369ad2076f8420530000000000000000000000000000000000000f000000000000000000000000",
    "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
    ],
    "0xFABB0ac9d68B0B445fB7357272Ff202C5651694a": [
    "0x09261068d5568cdf6020d6b6703b831fbc4c5928019dcc23606eceaa4cb4befd3a22bd9a05e5f4619cebb743688e2bb2510352fa7b64cee7d6c947e1c8655b3e88",
    "0x09132e097dde889d85b8b3309a827f0496c58979f869fe9827851d59f3af8d3bad1db74244979778c4e7c6b56496b5a3f1ee84cd42acacbc6ae3842deb5332b101",
    "0x0919474ec6b34f96f735c336cc161ed84fdd3a683fa201b518af5c2c1626f02f4612a08d77db2b9b67c38d89ed19f9ca59dadbd1699d27829f985020f6f3432959",
    "0x090dc9f8dd06d98c5a78af9836fc75823e4e2b0c95085c36dc33b8c35f5fc224d319e43044e7ac03d516f20d38f68682109407871d5f07f080c59857789fad1e46",
    "0x0907bc083c80445c99e7239f960beabcf360f7a6999ade44323b8401e0ec6842b80c789c2f71e21b35f96a71c66a774edac37ba18b809b8122d9000fbf0f8ac74b",
    "0x091e9ddabce6463c4843a7f43ce562b40bd7cc778a539486f6739bf7daf6f14bdf2da1168d26e898c81e03ba275f3474d4172c1f936d272114b87a486ae25a0c7e",
    "0x092ebed3e1476b235ef7ee7d5c160d7738aee3a9ecf02754975430203dbe05b7ce1f81e74d1f8a355b7dda2b293a8833c0926df34b6ab6516de484a7c682123e3b",
    "0x0700000000000000000000000000000000000000000000000000000000000000000bca6f26c452ec72dc90f8ac79855df88d3b88ce77a5c4ac472eea9ef7b619ae",
    "0x0824eb7acc6f05bd88d0aecfb7e170edc0f99384a54657916103d91fad99bf01030000000000000000000000000000000000000000000000000000000000000000",
    "0x072449731363c43de43d2516f39791c43a3be1e83edc3432352d81d2d1384a946e159ad10b4c89ff16157cc364c81f6039eeea9a8eb87e4b4700249219e71cc3ef",
    "0x0403d2c88868dc8b5f7994604147a8246c48cc905235de980c42c3e78f351f00c5050800000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000006b49161ba100000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4702098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b6486420fabb0ac9d68b0b445fb7357272ff202c5651694a000000000000000000000000",
    "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
    ]
    },
    "storageProofs": {
    "0x5300000000000000000000000000000000000001": {
    "0x0000000000000000000000000000000000000000000000000000000000000021": [
    "0x0825bcd8ed4a7e39c0f0e835761cda36131dd34f16de95765d2216d997923a52f60e38bf5d7d592ab89df92d87f260b8529d9c466b936b42ad8fbfe576bf97b200",
    "0x06216372aa3165a29ee67494a5a9680358be92c254cc5724949e4d52742ba8d57f02a40b5614637fca2783d673559f035f5f5a0588ee27d164bb5375568493200a",
    "0x042f683d080c393f5fb2ade2190fd56e8a5e8fa26533acdea8cce25caa236027cc0101000027ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d75700",
    "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
    ]
    },
    "0x530000000000000000000000000000000000000f": {
    "0x0000000000000000000000000000000000000000000000000000000000000001": [
    "0x09224baa919e1495600105d8a4446f80cabd9a915d7556e0b5d2956a3ad01e96862b531affe57e7f49ddcfef93ff839a215de0865c985188f99c61838f366e2bbe",
    "0x091eb325ae1568060f3957cc990d35e5ef48b7b2bc7979151083abe2d68aabc812162b4d479ff13f2af3f0cfaadc6bccc8622dd980f83c7014e947f50577eedaba",
    "0x08015c4fc60a3c6160762783cfc0da7e9d0518e56f0f4f236b7666e1afde43c8f60e867960e703abfccf265c16aceb5c2a092c39248e00fa04f717cf3ca38dfe9e",
    "0x080782addd8b48a93860ab4cb45e80c6cc869c1288f09d52cb7dec1f6aab62deb70000000000000000000000000000000000000000000000000000000000000000",
    "0x0700000000000000000000000000000000000000000000000000000000000000000f35c10e1893b6065c8ce8ba23fcd841bb168eb35643ca124118a4e44668fab2",
    "0x080487bd50c628c019d7858418000d1393427df64c9c103a4229f7b6cb3cdf5ae60000000000000000000000000000000000000000000000000000000000000000",
    "0x0700000000000000000000000000000000000000000000000000000000000000001046b31bcd31548fa80d0a9fb9fae45e61112d689f6b9c82958033c0787f1f94",
    "0x0805b5be5c8d36bd01ef9c3d10f3d994da611bc1484e9e48f69d2224efeb811b320000000000000000000000000000000000000000000000000000000000000000",
    "0x081ebc02f6986209f10fc7d04ba0c4ef196d75ad0a22e786fc7cf789f591e9b26f0000000000000000000000000000000000000000000000000000000000000000",
    "0x0700000000000000000000000000000000000000000000000000000000000000002680dd0a6ed49fc1faf7d4ef23a8328de46b8a4c1d86e6553f4940e394673978",
    "0x0628658ea3cbfa933d0e4041f9000bcc3393a3536913008ef6e1837ba7053bdec1156a0960a84fa4287f66d18b9c39ab9d403fa6b6dddd126f47758aadcb82e122",
    "0x0426049ba6de63003492eb078a01a8aa4f4a0e67f28f0955c2eba9101d5d2eea5001010000000000000000000000000000000000000000000000000000000000000000000700",
    "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
    ],
    "0x0000000000000000000000000000000000000000000000000000000000000002": [
    "0x09224baa919e1495600105d8a4446f80cabd9a915d7556e0b5d2956a3ad01e96862b531affe57e7f49ddcfef93ff839a215de0865c985188f99c61838f366e2bbe",
    "0x091eb325ae1568060f3957cc990d35e5ef48b7b2bc7979151083abe2d68aabc812162b4d479ff13f2af3f0cfaadc6bccc8622dd980f83c7014e947f50577eedaba",
    "0x08015c4fc60a3c6160762783cfc0da7e9d0518e56f0f4f236b7666e1afde43c8f60e867960e703abfccf265c16aceb5c2a092c39248e00fa04f717cf3ca38dfe9e",
    "0x04020953ad52de135367a1ba2629636216ed5174cce5629d11b5d97fe733f07dcc0101000000000000000000000000000000000000000000000000000000000000000029d7200000000000000000000000000000000000000000000000000000000000000002",
    "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
    ],
    "0x0000000000000000000000000000000000000000000000000000000000000003": [
    "0x09224baa919e1495600105d8a4446f80cabd9a915d7556e0b5d2956a3ad01e96862b531affe57e7f49ddcfef93ff839a215de0865c985188f99c61838f366e2bbe",
    "0x07000000000000000000000000000000000000000000000000000000000000000014a36870c64d2edad5a210b41e5bdfd73e7f4201161a755c434a621ffe103cc8",
    "0x061c3181dc54d9c120fdc034e9c12d47d19f07bdeb049e492e0e7c5c9d7fe19a4d0e38bf5d7d592ab89df92d87f260b8529d9c466b936b42ad8fbfe576bf97b200",
    "0x0406c50541f08911ad149aa545dd3d606f86ee63c751a795c7d57f0d3f85e6bdeb01010000000000000000000000000000000000000000000000000000000000174876e800200000000000000000000000000000000000000000000000000000000000000003",
    "0x5448495320495320534f4d45204d4147494320425954455320464f5220534d54206d3172525867503278704449"
    ]
    }
    }
    },
    "executionResults": [],
    "withdraw_trie_root": "0x27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757",
    "startL1QueueIndex": 0
    }
    }
    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node.htm/index.html b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker.htm/index.html similarity index 64% rename from build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node.htm/index.html rename to build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker.htm/index.html index ed97c8fed..b91d31b13 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node.htm/index.html +++ b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker.htm/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node.html/index.html b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker.html/index.html similarity index 64% rename from build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node.html/index.html rename to build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker.html/index.html index ed97c8fed..b91d31b13 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node.html/index.html +++ b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker.html/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker/index.html b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker/index.html new file mode 100644 index 000000000..689848b4e --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-in-docker/index.html @@ -0,0 +1,79 @@ + + + + + +Run a full node with docker | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + +

    Run a full node with docker

    This guide will help you start a full node running in the docker container using run-morph-node

    +

    Quick Start

    +
    note

    The instructions outlined below detail the procedure for running a full node on the mainnet. To set up and operate a Holesky node, you need to follow the tutorial on sync node from snapshot.

    +
      +
    1. Clone the dockerfile repository
    2. +
    +
    git clone https://github.com/morph-l2/run-morph-node.git
    +
      +
    1. Run the following command
    2. +
    +
    cd morph-node
    make run-node
    +

    The command make run-node takes the ../mainnet as your node's Home directory by default. There will be two folders in the Home directory named geth-data and node-data, serving as data directories for the execution client and consensus client of the morph ndoe, respectively.

    +

    This command will also generate the secret-jwt.txt file under Home directory for the authentication during RPC calls between the execution client and consensus client.

    +

    Advanced Usage

    +

    With the Quick Start guide above, you can quickly start a node using the default configuration files. However, we also support customizing the node's data directory and parameter settings.

    +

    Customizing Data Directory

    +

    The host directory paths that are mounted by the Docker container are specified in the morph-node/.env file.

    +
    morph-node/.env
    // HOME folder for morph node
    MORPH_HOME=../mainnet
    // Flag indicates the network for execution client.
    MORPH_FLAG=morph
    // Location of the jwt file for the authentication between clients
    JWT_SECRET_FILE=${MORPH_HOME}/jwt-secret.txt
    // The entrypoint shell script for start execution client
    GETH_ENTRYPOINT_FILE=./entrypoint-geth.sh
    // The snapshot name for Morph node
    MAINNET_SNAPSHOT_NAME=snapshot-20241218-1

    ......
    +

    You have the flexibility to customize the directory paths as per your requirements.

    +

    Please note that if you have customized the HOME directory of your node, you need to copy the necessary configuration files to this directory. Specifically, you should copy the node-data and geth-data from ./mainnet to your HOME directory.

    +
    note

    For running a testnet node, the morph-node/.env_holesky file should be used instead of the morph-node/.env file.

    +

    Customizing parameters

    +

    The default configuration required for mainnet node startup is located in the ./mainnet directory, while the files under ./holesky directory is used for testnet node startup.

    +
    └── mainnet
    ├── geth-data
    │   └── static-nodes.json
    └── node-data
    ├── config
    │   ├── config.toml
    │   └── genesis.json
    └── data

    // for testnet nodes
    └── holesky
    ├── geth-data
    │   └── static-nodes.json
    └── node-data
    ├── config
    │   ├── config.toml
    │   └── genesis.json
    └── data
    +

    If you wish to modify the Geth startup command, you can do so by editing the ./morph-node/entrypoint-geth.sh file. For adjustments to the Tendermint-related configuration parameters, you should modify the node-data/config/config.toml file.

    +

    Sync node from snapshot

    +

    We suggest starting your node sync from a snapshot to speed up the process of syncing your node to the latest state.

    +

    Clone the dockerfile repository

    +
    git clone https://github.com/morph-l2/run-morph-node.git
    +

    Acquire the snapshot you need

    +

    The morph-node/.env configuration file in the repository you just cloned is designed for setting up the Morph node on the mainnet. By default, it is pre-configured to use the latest snapshot.

    +

    If you need a historical snapshot, you must manually update the SNAPSHOT_NAME in the morph-node/.env file. (Note: For the testnet, the corresponding file is morph-node/.env_holesky.)

    +
      +
    • +

      Fetch historical snapshot(Optional):

      +

      The historical snapshots are recorded in snapshot-information

      +
      // ...

      MAINNET_SNAPSHOT_NAME={your expected snapshot name}

      // ...
      +
    • +
    • +

      Execute download and decompress the snapshot for your network:

      +

      Run the following command to download and decompress the snapshot for your network:

      +

      For mainnet:

      +
      cd ./morph-node
      make download-and-decompress-mainnet-snapshot
      +

      For testnet:

      +
      cd ./morph-node
      make download-and-decompress-holesky-snapshot
      +

      The command will assist you in downloading and decompressing the snapshot archive.

      +
    • +
    +

    Set up the snapshot data

    +

    After downloading, locate the snapshot by placing the decompressed data files in the correct directory specified by the MORPH_HOME path in your .env file. Ensure the data files align with the node's expected structure to allow seamless synchronization.

    +

    For example, if the snapshot folder is named snapshot-20241218-1,

    +
      +
    • move the directory snapshot-20241218-1/geth to the ${MORPH_HOME}/geth-data directory
    • +
    • move the contents from snapshot-20241218-1/data to the ${NODE_DATA_DIR}/data directory.
    • +
    +
    mv ./morph-node/snapshot-20241218-1/geth ${MORPH_HOME}/geth-data
    mv ./morph-node/snapshot-20241218-1/data/* ${MORPH_HOME}/node-data/data
    +

    The folder structure will be like

    +
    └── ${MORPH_HOME}
    ├── geth-data // data directory for geth
    │   └── static-nodes.json
    │   └── geth // directory from snapshot/geth
    └── node-data // data directory for node
    ├── config
    │   ├── config.toml
    │   └── genesis.json
    └── data // data directory from snapshot/node
    +

    4. Run the Node

    +

    With the snapshot and configuration files ready, navigate to the morph-node folder under your cloned repository, and start the node using the provided command

    +
    make run-node
    +

    For testnet, run

    +
    make run-holesky-node
    + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node.htm/index.html b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host.htm/index.html similarity index 56% rename from build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node.htm/index.html rename to build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host.htm/index.html index 4bb8bcf2a..de725a984 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node.htm/index.html +++ b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host.htm/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node.html/index.html b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host.html/index.html similarity index 56% rename from build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node.html/index.html rename to build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host.html/index.html index 4bb8bcf2a..de725a984 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node.html/index.html +++ b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host.html/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host/index.html b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host/index.html new file mode 100644 index 000000000..425dcaf39 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/node-operation/full-node/run-on-host/index.html @@ -0,0 +1,79 @@ + + + + + +Run a full node from source | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + +

    Run a full node from source

    This guide outlines the steps to start a Morph node. The example assumes the home directory is ~/.morph

    +

    Hardware requirements

    +

    Running the morph node requires 2 processes: geth and node.

    +
      +
    • +

      Geth:the Morph execution layer which needs to meet the requirements as below

      +
        +
      • Fast CPU with 4+ cores
      • +
      • 32GB+ RAM
      • +
      • High-performance SSD with at least 1TB of free space
      • +
      • 25+ MBit/sec download Internet service
      • +
      +
    • +
    • +

      Node:the Morph consensus layer embedded tendermint which needs to meet the tendermint hardware requirements.

      +
    • +
    +
    tip

    According to limitations of the current geth implementation, we only support archive mode for launching a Geth. So the storage size of Geth will constantly increase along with blocks produced.

    +

    Build executable binary

    +

    Clone morph

    +
    mkdir -p ~/.morph 
    cd ~/.morph
    git clone https://github.com/morph-l2/morph.git
    +

    Next, you need to check out a release version. You can find the available release versions on the Morph Releases page. It is recommended to use the latest release version.

    +
    cd morph
    git checkout ${RELEASE_VERSION}
    +

    Build Geth

    +

    Notice: You need C compiler to build geth

    +
    make geth
    +

    Build Node

    +
    cd ~/.morph/morph/node 
    make build
    +

    Config Preparation

    +
      +
    1. Download the config files and make data dir
    2. +
    +
    cd ~/.morph

    ## mainnet
    wget https://raw.githubusercontent.com/morph-l2/run-morph-node/main/mainnet/data.zip

    ## testnet
    wget https://raw.githubusercontent.com/morph-l2/run-morph-node/main/holesky/data.zip

    unzip data.zip
    +
      +
    1. Create a shared secret with node
    2. +
    +
    cd ~/.morph
    openssl rand -hex 32 > jwt-secret.txt
    +

    Start Node

    +

    Mainnet nodes support synchronization from either the genesis block or a snapshot block, while testnet nodes only support synchronization from snapshots.

    +

    Sync from snapshot(Recommended)

    +

    You should build the binary and prepare the config files in the above steps first, then download the snapshot.

    +

    Download snapshot

    +

    Download the latest snapshot corresponding to either the mainnet or testnet network.

    +

    A complete record of historical snapshots is available here. Below is an example of how to download a snapshot

    +
    ## mainnet
    wget -q --show-progress https://snapshot.morphl2.io/mainnet/${SNAPSHOT_NAME}.tar.gz
    tar -xzvf ${SNAPSHOT_NAME}.tar.gz

    ## holesky
    wget -q --show-progress https://snapshot.morphl2.io/holesky/${SNAPSHOT_NAME}.tar.gz
    tar -xzvf ${SNAPSHOT_NAME}.tar.gz
    +

    Extracting snapshot data to the data directory your node points to

    +
    mv ${SNAPSHOT_NAME}/geth geth-data
    mv ${SNAPSHOT_NAME}/data node-data
    +

    Start execution client

    +
    Script for starting mainnet geth
    ./morph/go-ethereum/build/bin/geth --morph \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --log.filename=./geth.log

    +
    note

    For testnet, using --morph-holesky instead

    +

    tail -f geth.log to check if the Geth is running properly, or you can also execute the curl command below to check if you are connected to the peer.

    +
    curl -X POST -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' localhost:8545

    {"jsonrpc":"2.0","id":74,"result":"0x6"}
    +

    Start consensus client

    +
     ./morph/node/build/bin/morphnode --home ./node-data \
    --l2.jwt-secret ./jwt-secret.txt \
    --l2.eth http://localhost:8545 \
    --l2.engine http://localhost:8551 \
    --log.filename ./node.log
    +

    tail -f node.log to check if the node is running properly, and you can also execute the command curl to check your node connection status.

    +
    curl http://localhost:26657/net_info

    {
    "jsonrpc": "2.0",
    "id": -1,
    "result": {
    "listening": true,
    "listeners": [
    "Listener(@)"
    ],
    "n_peers": "7",
    "peers": [
    {
    "node_info": {
    "protocol_version": {
    "p2p": "8",
    "block": "11",
    "app": "0"
    },
    "id": "b4ac59de479b0251d441ca0385429bc21713a208",
    "listen_addr": "tcp://0.0.0.0:26610",
    "network": "chain-morph-mainnet",
    "version": "0.37.0-alpha.1",
    "channels": "402021222338606100",
    "moniker": "morph-dataseed-node-0",
    "other": {
    "tx_index": "on",
    "rpc_address": "tcp://0.0.0.0:26657"
    }
    },
    "is_outbound": true,
    .......
    +

    Check sync status

    +

    curl http://localhost:26657/status to check the sync status of the node

    +
    {
    "jsonrpc": "2.0",
    "id": -1,
    "result": {
    "node_info": {
    "protocol_version": {
    "p2p": "8",
    "block": "11",
    "app": "0"
    },
    "id": "cde0d7cecfe9c82244c1dfa72c951759d02f1024",
    "listen_addr": "tcp://0.0.0.0:26656",
    "network": "chain-morph-mainnet",
    "version": "0.37.0-alpha.1",
    "channels": "402021222338606100",
    "moniker": "my-morph-node",
    "other": {
    "tx_index": "on",
    "rpc_address": "tcp://0.0.0.0:26657"
    }
    },
    "sync_info": {
    "latest_block_hash": "B4C0E514CD984B101FA89D7DB48C1FE18384F64C25E5565F618A5FE2851C42A9",
    "latest_app_hash": "",
    "latest_block_height": "2410",
    "latest_block_time": "2024-10-21T08:49:09.952573291Z",
    "earliest_block_hash": "0D66D908033DA7A3F5A95179B8D64261EDD887B944E59502A1C9EFBC1C9C4EF5",
    "earliest_app_hash": "",
    "earliest_block_height": "1",
    "earliest_block_time": "2024-10-21T06:00:00Z",
    "catching_up": false
    },
    "validator_info": {
    "address": "B7395023EFF719D0EE15AD96FFC7F69B6B9E52EF",
    "pub_key": {
    "type": "tendermint/PubKeyEd25519",
    "value": "tZI+wTExwoKeyUFgdSSYmf4sAYp4BhJu13UgPy1wDOc="
    },
    "voting_power": "0"
    }
    }
    }
    +

    The returned "catching_up" indicates whether the node is in sync or not. True means it is in sync.

    +

    The returned "latest_block_height" indicates the latest block height this node synced.

    +

    Sync from genesis block

    +

    Start the execution client and consensus client directly without downloading snapshot.

    + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker/index.html b/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker/index.html deleted file mode 100644 index 9421ed390..000000000 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - -Run a Morph Full Node with Docker | Morph docs – The Optimistic zkEVM Scaling Solution docs - - - - -

    Run a Morph Full Node with Docker

    This guide will help you start a full node running in the docker container.

    -
    note

    We currently only support running a node with docker on testnet

    -

    Quick Start

    -

    Currently, users need to build the Docker image themselves using the Docker file and Docker Compose file we provide. However, there's no need to worry, as you only need one command to quickly start a full node. This command will handle everything for you, including downloading snapshots, structure data and config files, building the image, and starting the container.

    -
      -
    1. Clone the dockerfile repository
    2. -
    -
    ## testnet
    git clone --branch release/0.4.x https://github.com/morph-l2/morph.git
    -
      -
    1. Run the following command
    2. -
    -
    cd ops/publicnode

    ## testnet
    make run-holesky-node
    -

    Running this command will create a .morph-holesky directory in your user directory by default, serving as the node's home directory. Before starting the node, this command will perform several preparations:

    -
      -
    • Create the node's home directory and copy the default configuration files into it.
    • -
    • Prepare the secret-jwt.txt file for for authentication during RPC calls between geth and the node.
    • -
    • Download the latest snapshot data to speed up node synchronization.
    • -
    • Place the extracted snapshot data into the corresponding folder within the home directory.
    • -
    -

    After completing these preparations, the command will automatically build the image and start the container, with Docker volumes mounted to the created node home directory.

    -
    info

    If this is your first run, these processes may take some time. Note that if you are starting the node for the first time but already have a .morph-holesky directory, you must delete that directory before running the command. Otherwise, the preparation phase will be skipped, which may prevent the node from running properly.

    If the command fails during execution, you will also need to delete the previously created .morph-holesky directory before restarting.

    -

    Advanced Usage

    -

    With the Quick Start guide above, you can quickly start a node using the default configuration files. However, we also support customizing the node's home directory and parameter settings.

    -

    Customizing Data Directory

    -

    The host directory paths that are mounted by the Docker container are specified in the ops/publicnode/.env file.

    -
    ops/publicnode/.env
    // the home folder of your Morph node
    NODE_HOME=${HOME}/.morph-holesky
    // the data directory for your execution client: geth
    GETH_DATA_DIR=${NODE_HOME}/geth-data
    // the data directory for you consensus client: tendermint
    NODE_DATA_DIR=${NODE_HOME}/node-data
    // the entrypoint shell script for start execution client
    GETH_ENTRYPOINT_FILE=${NODE_HOME}/entrypoint-geth.sh
    // the jwt secret file for communicating between execution client and consensus client via engine API
    JWT_SECRET_FILE=${NODE_HOME}/jwt-secret.txt
    // the snapshot name for holesky Morph node
    SNAPSHOT_NAME=snapshot-20240805-1
    -

    You have the flexibility to customize the directory paths as per your requirements. -Please note that if you want to execute make run-holesky-node to generate the necessary configuration files and snapshots for running the node, you need to ensure that the specified node home directory is new (not previously created) and do NOT alter the paths for GETH_DATA_DIR and NODE_DATA_DIR.

    -

    Customizing parameters

    -

    The default configuration required for node startup is located in the ops/publicnode/holesky directory. If your node home directory is empty, the run command will automatically copy these configuration files to the directory mounted in the node's docker container.

    -
    └── holesky
    ├── entrypoint-geth.sh
    ├── geth-data
    │   └── static-nodes.json
    └── node-data
    ├── config
    │   ├── config.toml
    │   └── genesis.json
    └── data
    -

    If you wish to modify the Geth startup command, you can do so by editing the entrypoint-geth.sh file. For adjustments to the Tendermint-related configuration parameters, you should modify the node-data/config/config.toml file. -Note that if you have customized your GETH_DATA_DIR and NODE_DATA_DIR, you will need to manually place the modified configuration files in the appropriate locations.

    -

    Managing Snapshots Yourself

    -

    You may also manually manage snapshot, particularly if you are using custom paths for the node directories. -The make download-and-decompress-snapshot command in the ops/publicnode directory will assist you in downloading and decompressing the snapshot archive.

    -

    Then, you need to manually place the decompressed data files in the appropriate node data directories. -For example, if the snapshot folder is named snapshot-20240805-1, move the contents from snapshot-20240805-1/geth to the ${GETH_DATA_DIR}/geth directory and the contents from snapshot-20240805-1/data to the ${NODE_DATA_DIR}/data directory.

    - - \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node/index.html b/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node/index.html deleted file mode 100644 index 12e0a6cf4..000000000 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - -Run a Morph Full Node from Source | Morph docs – The Optimistic zkEVM Scaling Solution docs - - - - -

    Run a Morph Full Node from Source

    This guide outlines the steps to start a Morph node. The example assumes the home directory is ~/.morph

    -

    Hardware requirements

    -

    Running the morph node requires 2 processes: geth and node.

    -
      -
    • -

      Geth:the Morph execution layer which needs to meet the requirements as below

      -
        -
      • Fast CPU with 4+ cores
      • -
      • 32GB+ RAM
      • -
      • High-performance SSD with at least 1TB of free space
      • -
      • 25+ MBit/sec download Internet service
      • -
      -
    • -
    • -

      Node:the Morph consensus layer embedded tendermint which needs to meet the tendermint hardware requirements.

      -
    • -
    -
    tip

    According to limitations of the current geth implementation, we only support archive mode for launching a Geth. So the storage size of Geth will constantly increase along with blocks produced.

    -

    Build executable binary

    -

    Clone morph

    -
    mkdir -p ~/.morph 
    cd ~/.morph
    git clone https://github.com/morph-l2/morph.git
    -

    Currently, we use tag v0.4.0 as our version.

    -
    cd morph
    git checkout v0.4.0
    -

    Build Geth

    -

    Notice: You need C compiler to build geth

    -
    make geth
    -

    Build Node

    -
    cd ~/.morph/morph/node 
    make build
    -

    Config Preparation

    -
      -
    1. Download the config files and make data dir
    2. -
    -
    cd ~/.morph

    ## mainnet
    wget https://raw.githubusercontent.com/morph-l2/config-template/main/mainnet/data.zip

    ## testnet
    wget https://raw.githubusercontent.com/morph-l2/config-template/main/holesky/data.zip

    unzip data.zip
    -
      -
    1. Create a shared secret with node
    2. -
    -
    cd ~/.morph
    openssl rand -hex 32 > jwt-secret.txt
    -

    Sync from genesis block(For mainnet)

    -

    Start the execution client and consensus client directly without downloading snapshot.

    -

    Start execution client

    -
    Script for starting mainnet geth
    ./morph/go-ethereum/build/bin/geth --morph \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --log.filename=./geth.log

    -
    note

    For testnet, using --morph-holesky instead

    -

    tail -f geth.log to check if the Geth is running properly, or you can also execute the curl command below to check if you are connected to the peer.

    -
    curl -X POST -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' localhost:8545

    {"jsonrpc":"2.0","id":74,"result":"0x6"}
    -

    Start consensus client

    -
     ./morph/node/build/bin/morphnode --home ./node-data \
    --l2.jwt-secret ./jwt-secret.txt \
    --l2.eth http://localhost:8545 \
    --l2.engine http://localhost:8551 \
    --log.filename ./node.log
    -

    tail -f node.log to check if the node is running properly, and you can also execute the command curl to check your node connection status.

    -
    curl http://localhost:26657/net_info

    {
    "jsonrpc": "2.0",
    "id": -1,
    "result": {
    "listening": true,
    "listeners": [
    "Listener(@)"
    ],
    "n_peers": "7",
    "peers": [
    {
    "node_info": {
    "protocol_version": {
    "p2p": "8",
    "block": "11",
    "app": "0"
    },
    "id": "b4ac59de479b0251d441ca0385429bc21713a208",
    "listen_addr": "tcp://0.0.0.0:26610",
    "network": "chain-morph-mainnet",
    "version": "0.37.0-alpha.1",
    "channels": "402021222338606100",
    "moniker": "morph-dataseed-node-0",
    "other": {
    "tx_index": "on",
    "rpc_address": "tcp://0.0.0.0:26657"
    }
    },
    "is_outbound": true,
    .......
    -

    Check sync status

    -

    curl http://localhost:26657/status to check the sync status of the node

    -
    {
    "jsonrpc": "2.0",
    "id": -1,
    "result": {
    "node_info": {
    "protocol_version": {
    "p2p": "8",
    "block": "11",
    "app": "0"
    },
    "id": "cde0d7cecfe9c82244c1dfa72c951759d02f1024",
    "listen_addr": "tcp://0.0.0.0:26656",
    "network": "chain-morph-mainnet",
    "version": "0.37.0-alpha.1",
    "channels": "402021222338606100",
    "moniker": "my-morph-node",
    "other": {
    "tx_index": "on",
    "rpc_address": "tcp://0.0.0.0:26657"
    }
    },
    "sync_info": {
    "latest_block_hash": "B4C0E514CD984B101FA89D7DB48C1FE18384F64C25E5565F618A5FE2851C42A9",
    "latest_app_hash": "",
    "latest_block_height": "2410",
    "latest_block_time": "2024-10-21T08:49:09.952573291Z",
    "earliest_block_hash": "0D66D908033DA7A3F5A95179B8D64261EDD887B944E59502A1C9EFBC1C9C4EF5",
    "earliest_app_hash": "",
    "earliest_block_height": "1",
    "earliest_block_time": "2024-10-21T06:00:00Z",
    "catching_up": false
    },
    "validator_info": {
    "address": "B7395023EFF719D0EE15AD96FFC7F69B6B9E52EF",
    "pub_key": {
    "type": "tendermint/PubKeyEd25519",
    "value": "tZI+wTExwoKeyUFgdSSYmf4sAYp4BhJu13UgPy1wDOc="
    },
    "voting_power": "0"
    }
    }
    }
    -

    The returned "catching_up" indicates whether the node is in sync or not. True means it is in sync. Meanwhile, the returned latest_block_height indicates the latest block height this node synced.

    -

    Sync from snapshot(Recommended for testnet)

    -

    You should build the binary and prepare the config files in the above steps first, then download the snapshot.

    -

    Download snapshot

    -

    ## testnet
    wget -q --show-progress https://snapshot.morphl2.io/holesky/snapshot-20240805-1.tar.gz
    tar -xzvf snapshot-20240805-1.tar.gz
    -

    Extracting snapshot data to the data directory your node points to

    -
    mv snapshot-20240805-1/geth geth-data
    mv snapshot-20240805-1/data node-data
    -

    Start the execution client and consensus client.

    - - \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node/index.html b/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node/index.html deleted file mode 100644 index 80f009950..000000000 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-validator-node/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - -How to Run a Morph Validator Node | Morph docs – The Optimistic zkEVM Scaling Solution docs - - - - -

    How to Run a Morph Validator Node

    Run a Morph Node

    -

    This guide describes the approach to running a Morph validator node. If you are unfamiliar with the validator duties, please refer to our optimistic zkEVM design.

    -

    Create the folder ~/.morph as our home directory for this example.

    -

    Build executable binary

    -

    Clone Morph

    -
    mkdir -p ~/.morph 
    cd ~/.morph
    git clone https://github.com/morph-l2/morph.git
    -

    Currently, we use tag v0.4.0 as our beta version geth.

    -
    cd morph
    git checkout v0.4.0
    -

    Build Geth

    -

    Notice: You need C compiler to build geth

    -
    make geth
    -

    Build Node

    -
    cd ~/.morph/morph/node 
    make build
    -

    Sync from the genesis block

    -

    Config Preparation

    -
      -
    1. Download the config files and make data dir
    2. -
    -
    cd ~/.morph

    ## mainnet
    wget https://raw.githubusercontent.com/morph-l2/config-template/main/mainnet/data.zip

    ## testnet
    wget https://raw.githubusercontent.com/morph-l2/config-template/main/holesky/data.zip

    unzip data.zip
    -
      -
    1. Create a shared secret with node
    2. -
    -
    cd ~/.morph
    openssl rand -hex 32 > jwt-secret.txt
    -

    Script to start the process

    -

    Geth

    -
    Script for starting mainnet geth
    ./morph/go-ethereum/build/bin/geth --morph \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --log.filename=./geth.log

    -

    tail -f geth.log to check if the Geth is running properly, or you can also execute the below curl command to check if you are connected to the peer.

    -
    curl --location --request POST 'localhost:8545/' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "jsonrpc":"2.0",
    "method":"eth_blockNumber",
    "id":1
    }'

    {"jsonrpc":"2.0","id":1,"result":"0x148e39"}
    -

    Node

    -
    cd ~/.morph

    ## mainnet
    export CHAIN_ID=1
    export L1MESSAGEQUEUE_CONTRACT=0x3931ade842f5bb8763164bdd81e5361dce6cc1ef
    export START_HEIGHT=20996776
    export ROLLUP=0x759894ced0e6af42c26668076ffa84d02e3cef60

    ## start node
    ./morph/node/build/bin/morphnode --validator --home ./node-data \
    --l2.jwt-secret ./jwt-secret.txt \
    --l2.eth http://localhost:8545 \
    --l2.engine http://localhost:8551 \
    --l1.rpc $(Ethereum RPC) \
    --l1.beaconrpc $(Ethereum beacon chain RPC) \
    --l1.chain-id ${CHAIN_ID} \
    --validator.privateKey 0x0000000000000000000000000000000000000000000000000000000000000001 \
    --sync.depositContractAddr ${L1MESSAGEQUEUE_CONTRACT} \
    --sync.startHeight ${START_HEIGHT} \
    --derivation.rollupAddress ${ROLLUP} \
    --derivation.startHeight ${START_HEIGHT} \
    --derivation.fetchBlockRange 200 \
    --log.filename ./node.log
    -

    For holesky network, using

    -
    export CHAIN_ID=17000 
    export L1MESSAGEQUEUECONTRACT=0x778d1d9a4d8b6b9ade36d967a9ac19455ec3fd0b
    export START_HEIGHT=1434640
    export ROLLUP=0xd8c5c541d56f59d65cf775de928ccf4a47d4985c
    -
    note

    Note the validator.privateKey is of no use to you. It is used to send challenges when the state root is found to be incorrect. However, we do not currently accept challenges from third party addresses. But it is also a required parameter for the morphnode command, so we give a 0x00... 1.

    -

    Check Status

    -

    If your node is successfully started, you will see the following response:

    -
    I[2024-06-06|15:57:35.216] metrics server enabled                       module=derivation host=0.0.0.0 port=26660
    derivation node starting
    ID> 24-06-06|15:57:35.216] initial sync start module=syncer msg="Running initial sync of L1 messages before starting sequencer, this might take a while..."
    I[2024-06-06|15:57:35.242] initial sync completed module=syncer latestSyncedBlock=1681622
    I[2024-06-06|15:57:35.242] derivation start pull rollupData form l1 module=derivation startBlock=1681599 end=1681622
    I[2024-06-06|15:57:35.244] fetched rollup tx module=derivation txNum=8 latestBatchIndex=59201
    I[2024-06-06|15:57:35.315] fetch rollup transaction success module=derivation txNonce=8764 txHash=0x5fb8a98472d1be73be2bc6be0807b9e0c68b7ba14a648c8a17bdaff7b26eb923 l1BlockNumber=1681599 firstL2BlockNumber=1347115 lastL2BlockNumber=1347129
    I[2024-06-06|15:57:35.669] new l2 block success module=derivation blockNumber=1347115
    -

    You can use the following command to check the newest block height to make sure you are aligned.

    -
    curl --location --request POST 'localhost:8545/' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "jsonrpc":"2.0",
    "method":"eth_blockNumber",
    "id":1
    }'
    {"jsonrpc":"2.0","id":1,"result":"0x148e39"}
    -

    Make sure you check the validator status constantly, if you find response

    -
    [2024-06-14|16:43:50.904] root hash or withdrawal hash is not equal    originStateRootHash=0x13f91d1c272e48e2d864ce7bfb421506d5b2a04def64d45c75391cdcdd69cd78 deriveStateRootHash=0x27e10420c0e34676a7d75c4189d7ccd1c3407cc8fd0b3eafb01c15e250a1215f batchWithdrawalRoot=0xa3e4a7cf45c7591a6bd9868f1fa7485ae345f10067acaade5f5b07d418b2e172 deriveWithdrawalRoot=0xa3e4a7cf45c7591a6bd9868f1fa7485ae345f10067acaade5f5b07d418b2e172
    -

    This means your validators find inconsistent between sequencer submission and your own observation.

    - - \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/prune-state/index.html b/build/docs/build-on-morph/developer-resources/node-operation/prune-state/index.html index 4411f8c52..7f4b92e28 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/prune-state/index.html +++ b/build/docs/build-on-morph/developer-resources/node-operation/prune-state/index.html @@ -3,19 +3,23 @@ -Prune State | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Prune State | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Prune State

    The performance of a full node will degrade when the storage size reaches a high volume. We suggest that the fullnode always keep light storage by pruning the storage.

    -

    How to Prune

    +

    Prune State

    The performance of a full node will degrade when the storage size reaches a high volume. We suggest that the fullnode always keep light storage by pruning the storage.

    +

    How to Prune

    1. Stop the node, including the consensus client(morphnode) and the execution client(geth)
    2. Run nohup geth snapshot prune-zk-state --datadir "$GETH_DB_DIR" > prune.log &. It will take 5~7 hours to finish.
    3. Start the node once it is done.

    The hardware is important, make sure the SSD meets: solid-state drive(SSD), 8k IOPS, 500 MB/S throughput, read latency < 1ms.

    -
    note

    To prune a Geth node at least 200 GB of free disk space is recommended. This means pruning cannot be used to save a hard drive that has been completely filled. A good rule of thumb is to prune before the node fills ~80% of the available disk space.

    +
    note

    To prune a Geth node at least 200 GB of free disk space is recommended. This means pruning cannot be used to save a hard drive that has been completely filled. A good rule of thumb is to prune before the node fills ~80% of the available disk space.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/upgrade-node/upgrade-node-docker/index.html b/build/docs/build-on-morph/developer-resources/node-operation/upgrade-node/upgrade-node-docker/index.html index a45c52a43..63bdbfbb7 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/upgrade-node/upgrade-node-docker/index.html +++ b/build/docs/build-on-morph/developer-resources/node-operation/upgrade-node/upgrade-node-docker/index.html @@ -3,20 +3,44 @@ -Upgrade node running from docker | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Upgrade node running from docker | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Upgrade node running from docker

    If you are running the Docker container for the node using a custom setup, you will need to update the docker image yourself and then restart the container.

    -

    The source code is available at https://github.com/morph-l2/morph.git. You need to switch to the latest version of the code and then update your docker image.

    -

    If you are using Run a Morph node with docker to start the docker container, you can follow the subsequent steps to upgrade the node.

    -

    Step1: Fetch latest code version

    -
    git clone https://github.com/morph-l2/morph.git
    ## checkout the latest version of the source code you need
    git checkout ${latestVersion}
    -

    Step2: Stop the nodes and delete previous images

    -
    ## stop docker container
    cd ops/publicnode
    make stop-holesky-node
    make rm-holesky-node
    ## delete the pervious docker image for node
    docker rmi morph/node:latest
    ## delete the pervious docker image for geth
    docker rmi morph/geth-nccc:latest
    -

    Step3: Build the latest image and restart the container

    -
    note

    Please note that we need to ensure that the Docker container startup parameters are consistent with those used previously. If you used a custom configuration before, make sure that the configuration and directory paths used in this run are the same as before. For details, please refer to Advanced Usage

    -
    ## start the docker container, it will automatically build the new docker images
    make run-holesky-node
    +

    Upgrade node running from docker

    Docker Images

    + +

    If You Are Using a Custom Setup

    +

    If you are running the Docker container for the node using a custom setup, you will need to manually update the Docker image version and restart the container.

    + +

    For those using the Run a full node with docker to start the container, follow these steps to upgrade your node.

    +

    Step1: Update docker images version

    +
      +
    • +

      Check the latest docker image version from Docker Images

      +
    • +
    • +

      Update the docker image version on morph-node/docker-compose.yml

      +
      morph-node/docker-compose.yml
      services:  
      geth:
      container_name: morph-geth
      image: ghcr.io/morph-l2/go-ethereum:{update_version} ## Specify the Geth image version
      restart: unless-stopped

      # ...

      node:
      container_name: morph-node
      depends_on:
      geth:
      condition: service_started
      image: ghcr.io/morph-l2/node:{update_version} ## Specify the Node image version

      # ...

      +
      tip

      Optionally update the image version for go-ethereum, node, or both, depending on your requirements.

      +
    • +
    +

    Step2: Restart the container

    +

    Use the following commands to stop and restart the container. The updated Docker images will be pulled automatically.

    +
    // stop the docker containers
    make stop-node

    // start the docker container, it will automatically pull the updated docker images
    make run-node
    +

    If you are running a validator, use these commands instead:

    +
    make stop-validator
    make run-validator
    +
    note

    Ensure that the startup parameters for the Docker container remain consistent with your previous configuration. If you previously used a custom setup, verify that the configuration and directory paths match your earlier setup. For details, please refer to Advanced Usage

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/upgrade-node/upgrade-node-host/index.html b/build/docs/build-on-morph/developer-resources/node-operation/upgrade-node/upgrade-node-host/index.html index a9719a7cc..6d1369b5b 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/upgrade-node/upgrade-node-host/index.html +++ b/build/docs/build-on-morph/developer-resources/node-operation/upgrade-node/upgrade-node-host/index.html @@ -3,20 +3,28 @@ -Upgrade node running on the host | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Upgrade node running on the host | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Upgrade node running on the host

    Upgrading the node is straightforward. Simply install the new version of the node executable file and replace the previous version. Then, stop the currently running node and restart it with the updated version. Node will automatically use the data of your old node and sync the latest blocks that were mined since you shut down the old software.

    +

    Upgrade node running on the host

    Upgrading the node is straightforward. Simply install the new version of the node executable file and replace the previous version. Then, stop the currently running node and restart it with the updated version. Node will automatically use the data of your old node and sync the latest blocks that were mined since you shut down the old software.

    Running the node requires two binary files: morphnode and geth. Choose to upgrade the binary files according to your specific needs.

    -

    Step1: Compile the new version of the code

    -
    git clone https://github.com/morph-l2/morph.git
    ## checkout the latest version of the source code you need
    git checkout ${latestVersion}
    ## install geth
    make geth
    ## install morphnode
    cd ./morph/node && make build
    -

    Step2: Stop nodes

    -
    ## stop morphnode process
    pid=`ps -ef | grep morphnode | grep -v grep | awk '{print $2}'`
    kill $pid

    ## stop geth process
    pid=`ps -ef | grep geth | grep -v grep | awk '{print $2}'`
    kill $pid
    -

    Step3: Restart

    +

    Step1: Compile the new version of the code

    +

    You can have the released code version from Morph release page.

    +
    git clone https://github.com/morph-l2/morph.git

    // checkout the latest version of the source code you need
    git checkout ${latestVersion}

    // install geth
    make geth

    // install morphnode
    cd ./morph/node && make build
    +

    If you only update the Geth version

    +

    Check the Geth version from go-ethereum

    +
    git clone https://github.com/morph-l2/go-ethereum.git

    git checkout ${latestVersion}

    // install geth
    make geth
    +

    Step2: Stop nodes

    +
    # stop morphnode process
    pid=`ps -ef | grep morphnode | grep -v grep | awk '{print $2}'`
    kill $pid

    # stop geth process
    pid=`ps -ef | grep geth | grep -v grep | awk '{print $2}'`
    kill $pid
    +

    Step3: Restart

    Make sure to use the same start-up command you used before the upgrade

    -
    ## start geth
    ./morph/go-ethereum/build/bin/geth --morph \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --log.filename=./geth.log

    ## start geth
    ./morph/node/build/bin/morphnode --home ./node-data \
    --l2.jwt-secret ./jwt-secret.txt \
    --l2.eth http://localhost:8545 \
    --l2.engine http://localhost:8551 \
    --log.filename ./node.log
    -
    note

    For testnet, use --morph-holesky instead

    +
    ## start geth
    ./morph/go-ethereum/build/bin/geth --morph \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --log.filename=./geth.log

    ## start node
    ./morph/node/build/bin/morphnode --home ./node-data \
    --l2.jwt-secret ./jwt-secret.txt \
    --l2.eth http://localhost:8545 \
    --l2.engine http://localhost:8551 \
    --log.filename ./node.log
    +
    note

    For holesky network, use --morph-holesky instead

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker.htm/index.html b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker.htm/index.html new file mode 100644 index 000000000..bdc24f740 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker.htm/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker.html/index.html b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker.html/index.html new file mode 100644 index 000000000..bdc24f740 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker.html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker/index.html b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker/index.html new file mode 100644 index 000000000..a1c3106e2 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-in-docker/index.html @@ -0,0 +1,62 @@ + + + + + +Run a validator with docker | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + +

    Run a validator with docker

    This guide will help you start a validator node running in the docker container using run-morph-node

    +

    Quick Start

    +
    info

    The following quick start steps are only applicable for running a validator node on the mainnet. To set up and operate a Holesky validator node, please refer to Sync from Snapshot.

    +
    note

    Starting with the Quick Start initiates synchronization from height 0, which can be extremely time-consuming to reach the latest state. We highly recommend using the Sync from Snapshot approach outlined below for a faster and more efficient startup.

    +

    1. Clone the dockerfile repository

    +
    git clone https://github.com/morph-l2/run-morph-node.git
    +

    2. Configure morph-node/.env

    +

    The morph-node/.env file defines the environment variables required for deploying a validator node. Below is an example configuration:

    +
    morph-node/.env
    // General settings
    MORPH_HOME=../mainnet
    MORPH_FLAG=morph
    JWT_SECRET_FILE=${MORPH_HOME}/jwt-secret.txt
    GETH_ENTRYPOINT_FILE=./entrypoint-geth.sh

    // Environment variables for validator node
    L1_CHAIN_ID=1
    L1_ETH_RPC=${your_layer1_execution_client_rpc_url}
    L1_BEACON_CHAIN_RPC=${your_layer1_beacon_client_rpc_url}
    L1MESSAGEQUEUE_CONTRACT=0x3931ade842f5bb8763164bdd81e5361dce6cc1ef
    ROLLUP_CONTRACY=0x759894ced0e6af42c26668076ffa84d02e3cef60
    DERIVATION_START_HEIGHT=20996776
    L1_MSG_START_HEIGHT=20996776
    +

    Default Directory: +For running a validator on the mainnet, the MORPH_HOME directory defaults to ../mainnet. You can customize this path to suit your setup.

    +

    Layer1 RPC URLs: +Ensure you provide the correct RPC URLs for the Layer 1 execution client (L1_ETH_RPC) and the beacon chain client (L1_BEACON_CHAIN_RPC). These URLs are essential for the validator to fetch rollup batches and maintain synchronization.

    +

    3. Run the following command

    +
    cd morph-node
    make run-validator
    +

    Sync from snapshot

    +

    We recommend synchronizing blocks using snapshot data to reduce the time required for block synchronization. This approach allows you to start the node from a specific block height, significantly reducing the time needed to reach the latest state.

    +

    1. Clone the dockerfile repository

    +
    git clone https://github.com/morph-l2/run-morph-node.git
    +

    2. Download the Snapshot

    +

    The morph-node/.env configuration file in the repository you just cloned is designed for setting up the Morph node on the mainnet. By default, it is pre-configured to use the latest snapshot.

    +

    If you need a historical snapshot, you must manually update the SNAPSHOT_NAME in the morph-node/.env file. (Note: For the testnet, the corresponding file is morph-node/.env_holesky.)

    +

    You can find the historical snapshot names from Snapshot Information.

    +
    // ...

    MAINNET_SNAPSHOT_NAME={your expected snapshot name}

    // ...
    +

    Run the following command to download and decompress the snapshot for your network:

    +

    For the mainnet:

    +
    make download-and-decompress-mainnet-snapshot
    +

    For the testnet:

    +
    make download-and-decompress-holesky-snapshot
    +

    3. Set up the snapshot

    +

    After downloading, locate the snapshot by placing the extracted data files in the correct directory specified by the MORPH_HOME path in your morph-node/.env file. Ensure the data files align with the node's expected structure to allow seamless synchronization.

    +

    For example, if the snapshot folder is named snapshot-20241218-1,

    +
      +
    • move the directory snapshot-20241218-1/geth to the ${MORPH_HOME}/geth-data directory.
    • +
    • move the contents from snapshot-20241218-1/data to the ${NODE_DATA_DIR}/data directory.
    • +
    +
    mv ./morph-node/snapshot-20241218-1/geth ${MORPH_HOME}/geth-data
    mv ./morph-node/snapshot-20241218-1/data/* ${MORPH_HOME}/node-data/data
    +

    The folder structure will be like

    +
    └── ${MORPH_HOME}
    ├── geth-data // data directory for geth
    │   └── static-nodes.json
    │   └── geth // directory from snapshot/geth
    └── node-data // data directory for node
    ├── config
    │   ├── config.toml
    │   └── genesis.json
    └── data // data directory from snapshot/node
    +

    4. Update the Environment Variables

    +

    Before running the node, update the DERIVATION_START_HEIGHT and L1_MSG_START_HEIGHT variables in the morph-node/.env file (or .env_holesky for the testnet).

    +

    Refer to snapshot-information for the specific values of the configuration heights. Ensure that the corresponding height values match the snapshot version you are configuring.

    +
    // ...
    MAINNET_SNAPSHOT_NAME={your expected snapshot name}

    // ...
    DERIVATION_START_HEIGHT={the expected start height match the snapshot}
    L1_MSG_START_HEIGHT={the expected start height match the snapshot}

    +

    5. Run the Validator

    +

    With the snapshot and configuration files ready, navigate to the morph-node folder under your cloned repository, and start the node using the provided command

    +
    cd morph-node
    make run-validator

    // or for testnet
    cd morph-node
    make run-holesky-validator
    + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host.htm/index.html b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host.htm/index.html new file mode 100644 index 000000000..27ce5fa98 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host.htm/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host.html/index.html b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host.html/index.html new file mode 100644 index 000000000..27ce5fa98 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host.html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host/index.html b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host/index.html new file mode 100644 index 000000000..3b7775e20 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/node-operation/validator-node/run-on-host/index.html @@ -0,0 +1,65 @@ + + + + + +Run a validator from source | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + +

    Run a validator from source

    Run a Morph Validator

    +

    This guide describes the approach to running a Morph validator node. If you are unfamiliar with the validator duties, please refer to our optimistic zkEVM design.

    +

    Create the folder ~/.morph as our home directory for this example.

    +

    Build executable binary

    +

    Clone Morph

    +
    mkdir -p ~/.morph 
    cd ~/.morph
    git clone https://github.com/morph-l2/morph.git
    +

    Next, you need to check out a release version. You can find the available release versions on the Morph Releases page. It is recommended to use the latest release version.

    +
    cd morph
    git checkout ${RELEASE_VERSION}
    +

    Build Geth

    +

    Notice: You need C compiler to build geth

    +
    make geth
    +

    Build Node

    +
    cd ~/.morph/morph/node 
    make build
    +

    Sync from the snapshot

    +

    Config Preparation

    +
      +
    1. Download the config files and make data dir
    2. +
    +
    cd ~/.morph

    ## mainnet
    wget https://raw.githubusercontent.com/morph-l2/run-morph-node/main/mainnet/data.zip

    ## testnet
    wget https://raw.githubusercontent.com/morph-l2/run-morph-node/main/holesky/data.zip

    unzip data.zip
    +
      +
    1. Create a shared secret with node
    2. +
    +
    cd ~/.morph
    openssl rand -hex 32 > jwt-secret.txt
    +

    Download snapshot

    +

    Download the latest snapshot corresponding to either the mainnet or testnet network.

    +

    A complete record of historical snapshots is available here. Below is an example of how to download a snapshot

    +
    ## mainnet
    wget -q --show-progress https://snapshot.morphl2.io/mainnet/${SNAPSHOT_NAME}.tar.gz
    tar -xzvf ${SNAPSHOT_NAME}.tar.gz

    ## holesky
    wget -q --show-progress https://snapshot.morphl2.io/holesky/${SNAPSHOT_NAME}.tar.gz
    tar -xzvf ${SNAPSHOT_NAME}.tar.gz
    +

    Extracting snapshot data to the data directory your node points to

    +
    mv ${SNAPSHOT_NAME}/geth geth-data
    mv ${SNAPSHOT_NAME}/data node-data
    +

    Script to start the process

    +

    Geth

    +
    Script for starting mainnet geth
    ./morph/go-ethereum/build/bin/geth --morph \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --log.filename=./geth.log

    +
    note

    For testnet, using --morph-holesky instead

    +

    tail -f geth.log to check if the Geth is running properly, or you can also execute the below curl command to check if you are connected to the peer.

    +
    curl --location --request POST 'localhost:8545/' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "jsonrpc":"2.0",
    "method":"eth_blockNumber",
    "id":1
    }'

    {"jsonrpc":"2.0","id":1,"result":"0x148e39"}
    +

    Node

    +

    You need to set the DERIVATION_START_HEIGHT and L1_MSG_START_HEIGHT variables correctly to match the snapshot version you downloaded. From the snapshot information, you can find the corresponding height values.

    +
    cd ~/.morph

    ## mainnet
    export CHAIN_ID=1
    export L1MESSAGEQUEUE_CONTRACT=0x3931ade842f5bb8763164bdd81e5361dce6cc1ef
    export ROLLUP=0x759894ced0e6af42c26668076ffa84d02e3cef60
    export DERIVATION_START_HEIGHT=${The height matches your snapshot}
    export L1_MSG_START_HEIGHT=${The height matches your snapshot}

    ## start node
    ./morph/node/build/bin/morphnode --validator --home ./node-data \
    --l2.jwt-secret ./jwt-secret.txt \
    --l2.eth http://localhost:8545 \
    --l2.engine http://localhost:8551 \
    --l1.rpc $(Ethereum RPC) \
    --l1.beaconrpc $(Ethereum beacon chain RPC) \
    --l1.chain-id ${CHAIN_ID} \
    --validator.privateKey 0x0000000000000000000000000000000000000000000000000000000000000001 \
    --sync.depositContractAddr ${L1MESSAGEQUEUE_CONTRACT} \
    --sync.startHeight ${L1_MSG_START_HEIGHT} \
    --derivation.rollupAddress ${ROLLUP} \
    --derivation.startHeight ${DERIVATION_START_HEIGHT} \
    --derivation.fetchBlockRange 200 \
    --log.filename ./node.log
    +

    For holesky network, using

    +
    export CHAIN_ID=17000 
    export L1MESSAGEQUEUECONTRACT=0x778d1d9a4d8b6b9ade36d967a9ac19455ec3fd0b
    export ROLLUP=0xd8c5c541d56f59d65cf775de928ccf4a47d4985c
    export DERIVATION_START_HEIGHT=${The height matches your snapshot}
    export L1_MSG_START_HEIGHT=${The height matches your snapshot}
    +
    note

    Note the validator.privateKey is of no use to you. It is used to send challenges when the state root is found to be incorrect. However, we do not currently accept challenges from third party addresses. But it is also a required parameter for the morphnode command, so we give a 0x00... 1.

    +

    Check Status

    +

    If your node is successfully started, you will see the following response:

    +
    I[2024-06-06|15:57:35.216] metrics server enabled                       module=derivation host=0.0.0.0 port=26660
    derivation node starting
    ID> 24-06-06|15:57:35.216] initial sync start module=syncer msg="Running initial sync of L1 messages before starting sequencer, this might take a while..."
    I[2024-06-06|15:57:35.242] initial sync completed module=syncer latestSyncedBlock=1681622
    I[2024-06-06|15:57:35.242] derivation start pull rollupData form l1 module=derivation startBlock=1681599 end=1681622
    I[2024-06-06|15:57:35.244] fetched rollup tx module=derivation txNum=8 latestBatchIndex=59201
    I[2024-06-06|15:57:35.315] fetch rollup transaction success module=derivation txNonce=8764 txHash=0x5fb8a98472d1be73be2bc6be0807b9e0c68b7ba14a648c8a17bdaff7b26eb923 l1BlockNumber=1681599 firstL2BlockNumber=1347115 lastL2BlockNumber=1347129
    I[2024-06-06|15:57:35.669] new l2 block success module=derivation blockNumber=1347115
    +

    You can use the following command to check the newest block height to make sure you are aligned.

    +
    curl --location --request POST 'localhost:8545/' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "jsonrpc":"2.0",
    "method":"eth_blockNumber",
    "id":1
    }'
    {"jsonrpc":"2.0","id":1,"result":"0x148e39"}
    +

    Make sure you check the validator status constantly, if you find response

    +
    [2024-06-14|16:43:50.904] root hash or withdrawal hash is not equal    originStateRootHash=0x13f91d1c272e48e2d864ce7bfb421506d5b2a04def64d45c75391cdcdd69cd78 deriveStateRootHash=0x27e10420c0e34676a7d75c4189d7ccd1c3407cc8fd0b3eafb01c15e250a1215f batchWithdrawalRoot=0xa3e4a7cf45c7591a6bd9868f1fa7485ae345f10067acaade5f5b07d418b2e172 deriveWithdrawalRoot=0xa3e4a7cf45c7591a6bd9868f1fa7485ae345f10067acaade5f5b07d418b2e172
    +

    This means your validators find inconsistent between sequencer submission and your own observation.

    + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/account-abstraction/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/account-abstraction/index.html index c9ca1766f..a5a5979e0 100644 --- a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/account-abstraction/index.html +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/account-abstraction/index.html @@ -3,14 +3,19 @@ -Account Abstraction | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Account Abstraction | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + - + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence.htm/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence.htm/index.html new file mode 100644 index 000000000..c09b02aac --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence.htm/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence.html/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence.html/index.html new file mode 100644 index 000000000..c09b02aac --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence.html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence/index.html new file mode 100644 index 000000000..f222e8f74 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/artificial-intelligence/index.html @@ -0,0 +1,21 @@ + + + + + +Artificial Intelligence | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/block-explorer/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/block-explorer/index.html index 557155a9e..4bee41997 100644 --- a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/block-explorer/index.html +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/block-explorer/index.html @@ -3,14 +3,18 @@ -Block Explorer | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Block Explorer | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + - + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/blockchain-indexing-services/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/blockchain-indexing-services/index.html index acce9b2af..b76f22e65 100644 --- a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/blockchain-indexing-services/index.html +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/blockchain-indexing-services/index.html @@ -3,22 +3,26 @@ -Blockchain Indexing Services | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Blockchain Indexing Services | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Blockchain Indexing Services

    Goldsky

    -

    goldsky

    +

    Blockchain Indexing Services

    Goldsky

    +

    goldsky

    We have partnered with Goldsky to provide indexing and subgraph services for Morph Holesky and Morph Mainnet.

    Goldsky also allow us to grant selected developers with free subgraph services now. If you want to deploy a subgraph with Goldsky, please raise a ticket in our Discord to let us know how we can help.

    For more information, please refer to their documentation.

    -

    Envio

    -

    envio

    +

    Envio

    +

    envio

    Envio is a modern, multi-chain EVM blockchain indexing framework speed-optimized for querying real-time and historical data on Morph Holesky and Morph Mainnet.

    Designed with a core focus on delivering superior performance and seamless developer experience, Envio empowers the next generation of consumer apps.

    The Quickstart allows you to instantly autogenerate a basic indexer and query your smart contract data on Morph. This is the quickest way to get going and likely the starting point for most developers.

    For more information, please refer to their documentation.

    -

    Click here for live indexer examples to be inspired.

    +

    Click here for live indexer examples to be inspired.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/blockchain-oracles/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/blockchain-oracles/index.html index f7243a95b..933aab954 100644 --- a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/blockchain-oracles/index.html +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/blockchain-oracles/index.html @@ -3,19 +3,23 @@ -Blockchain Oracles | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Blockchain Oracles | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Blockchain Oracles

    Pyth Network

    -

    pyth

    + +

    Full price feeds and docs can be found here : https://eoracle.gitbook.io/eoracle/price-feeds/feed-addresses.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability.htm/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability.htm/index.html new file mode 100644 index 000000000..ced85577b --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability.htm/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability.html/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability.html/index.html new file mode 100644 index 000000000..ced85577b --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability.html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability/index.html new file mode 100644 index 000000000..a0fbea3fd --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/cross-chain-interoperability/index.html @@ -0,0 +1,21 @@ + + + + + +Cross Chain Interoperability | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services.htm/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services.htm/index.html new file mode 100644 index 000000000..f32710516 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services.htm/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services.html/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services.html/index.html new file mode 100644 index 000000000..f32710516 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services.html/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services/index.html new file mode 100644 index 000000000..36d322e4a --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/decentralized-naming-services/index.html @@ -0,0 +1,42 @@ + + + + + +Decentralized Naming Services | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + +

    Decentralized Naming Services

    SpaceID

    +

    Space ID

    +

    Space ID offers a universal namespace for blockchain, enabling users to register and manage domain names across different blockchains. It enhances cross-chain interoperability and simplifies user identification across the Web3 ecosystem. This project supports a broad range of applications, from crypto trading to token lending and NFT minting, showcasing a versatile approach to decentralized digital identities.

    +

    Space ID has launched the .mph domain specific for Morph. If you are looking for integration, please refer to this doc

    +

    The Space ID .mph domain integration

    +

    How SpaceID works

    +

    SPACE ID aims to create a universal name service network that connects decentralized identities with the physical and digital worlds. It is progressing toward becoming a comprehensive digital identity solution for Web3. Read the details here

    +

    Key features of SpaceID

    +

    Multi-Chain Name Service

    +

    Among the top priorities of SPACE ID is supporting more blockchains and top-level domains (TLDs). Unlike SPACE ID 1.0, whose main emphasis was on .bnb Name Service, SPACE ID 2.0 instead focuses on multi-chain name service. SPACE ID has reached out to various blockchains for partnership discussions, and expects its ecosystem to flourish with time.

    +

    Web3 Name SDK & API

    +

    SPACE ID aims to streamline web3 services through the use of a single SDK to assist in the building of DApps. This saves developers time, since they don’t have to work with multiple protocols and be encumbered with issues of blockchain incompatibility. This vision is being realized by adding an all-in-one API over the SDK, allowing current and future partners to seamlessly integrate their web3 services with their unified Web3 Name SDK.

    +

    Benefits of DNS

    +
      +
    • Simplified Address Management: Users can use easy-to-remember names instead of long hexadecimal addresses, reducing the risk of errors in transactions.
    • +
    • Interoperability: SpaceID names can point to various types of addresses and resources, supporting multiple blockchain networks and off-chain data.
    • +
    • Decentralization: SpaceID is built on blockchain, ensuring that no single entity controls the naming system, which enhances security and censorship resistance.
    • +
    • Flexibility: Domain owners have full control over their domains, including the ability to create subdomains, update addresses, and manage metadata.
    • +
    +

    Use Case of SpaceID

    +
      +
    • Cryptocurrency Wallets: Users can receive payments using simple names instead of complex addresses.
    • +
    • Decentralized Websites: SpaceID names can point to Greenfield content, enabling decentralized websites.
    • +
    • Identity Management: SpaceID can be used as part of a decentralized identity system, linking a user’s SpaceID to their decentralized identifiers and attestations.
    • +
    • DApps and Smart Contracts: Developers can use SpaceID to provide human-readable names for their smart contracts and decentralized applications, improving user experience.
    • +
    + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/rpc-services/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/rpc-services/index.html index b3a61da0a..0dbf1d979 100644 --- a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/rpc-services/index.html +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/rpc-services/index.html @@ -3,16 +3,24 @@ -RPC Services | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +RPC Services | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    RPC Services

    Quicknode

    + +

    QuickNode

    +

    Tenderly

    +

    Tenderly is a full-stack Web3 infrastructure – node RPC, dev environments & exploration tools.

    +

    Build & scale with ease. Get started here

    +

    tenderly

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/safe-multi-signature-wallet/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/safe-multi-signature-wallet/index.html index d1f5c7515..b6fcc59e7 100644 --- a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/safe-multi-signature-wallet/index.html +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/safe-multi-signature-wallet/index.html @@ -3,16 +3,20 @@ -Safe Multi-Signature Wallet | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Safe Multi-Signature Wallet | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Safe Multi-Signature Wallet

    What is Morph Safe?

    -

    safemultisig

    +

    Safe Multi-Signature Wallet

    What is Morph Safe?

    +

    safemultisig

    Morph Safe is a fork managed by the Morph team in collaboration with Protofire, an official partner of the Safe team. It is a multi-signature smart contract wallet, which means it requires a minimum number of signatures to approve a transaction before it can occur.

    For example, if your business has three main stakeholders, you can configure the wallet to require approval from either two out of three or all three individuals before a transaction can proceed. This security measure ensures that no single person can compromise the funds.

    In addition to robust security, Morph Safe offers complete self-custody over funds. The smart contract deployed for the wallet has full control over the wallet's contents and does not rely on any trusted external party for execution.

    -

    To create your Morph Mainnet Safe wallet click here.

    +

    To create your Morph Mainnet Safe wallet click here.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker.html/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding.htm/index.html similarity index 62% rename from build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker.html/index.html rename to build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding.htm/index.html index 1cabced23..6a82f049a 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker.html/index.html +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding.htm/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker.htm/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding.html/index.html similarity index 62% rename from build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker.htm/index.html rename to build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding.html/index.html index 1cabced23..6a82f049a 100644 --- a/build/docs/build-on-morph/developer-resources/node-operation/how-to-run-a-morph-node-docker.htm/index.html +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding.html/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding/index.html b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding/index.html new file mode 100644 index 000000000..d0b229199 --- /dev/null +++ b/build/docs/build-on-morph/developer-resources/use-ecosystem-developer-tools/user-onboarding/index.html @@ -0,0 +1,32 @@ + + + + + +User Onboarding | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + + + +

    User Onboarding

    +

    Reown (prev. known as WalletConnect)

    +

    Reown gives developers the tools to build user experiences that make digital ownership effortless, intuitive, and secure.

    +

    Reown has two major product offerings, they are, AppKit and WalletKit.

    +

    AppKit

    +

    AppKit is a powerful, free, and fully open-source SDK for developers looking to integrate wallet connections and other Web3 functionalities into their apps on any EVM and non-EVM chain. In just a few simple steps, you can provide your users with seamless wallet access, one-click authentication, social logins, and notifications—streamlining their experience while enabling advanced features like on-ramp functionality, in-app token swaps and smart accounts.

    +

    WalletKit

    +

    WalletKit is a robust, open-source SDK designed to empower seamless wallet connections and interactions across any blockchain. With WalletKit, you can offer your users a simple and secure way to connect with thousands of apps, enabling features like one-click authentication, secure transaction signing, and streamlined wallet address verification. Its chain-agnostic design ensures effortless multi-chain support, eliminating the need for complex integrations while delivering unmatched connectivity and security.

    +

    To summarize, AppKit is for Web3 applications and WalletKit is for Web3 wallets.

    +

    You will be able to use Reown AppKit to power end-to-end wallet interactions on your Web3 app deployed on Morph.

    +

    Some links to learn more about Reown:

    +
    + + \ No newline at end of file diff --git a/build/docs/build-on-morph/intro/index.html b/build/docs/build-on-morph/intro/index.html index aa3a8f254..4e21dd555 100644 --- a/build/docs/build-on-morph/intro/index.html +++ b/build/docs/build-on-morph/intro/index.html @@ -3,22 +3,26 @@ -Developer Docs | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Developer Docs | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Developer Docs

    Welcome to Morph’s Developer Docs!

    +

    Developer Docs

    Welcome to Morph’s Developer Docs!

    Are you eager to build applications on Morph but unsure where to start?

    You're in the right place – we've got you covered!

    -

    devintro

    +

    devintro

    As the first optimistic zkEVM Ethereum Layer 2 solution, Morph is 100% EVM compatible.

    Building on morph is just like building on Ethereum. If you’re experienced in Ethereum development, you'll find your existing code, tooling, and dependencies are fully compatible with Morph.

    -

    What's next

    +

    What's next

    Depending on what do you need

    -

    Engage in Our Developer Community

    +

    Engage in Our Developer Community

    We're actively enhancing our network with more integrations and support infrastructure, progressing towards our Mainnet release.

    -

    Join our growing developer community. You can find us on Discord, join our discussion forum, or follow our progress on Twitter.

    +

    Join our growing developer community. You can find us on Discord, join our discussion forum, or follow our progress on Twitter.

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/classes/CrossChainMessenger/index.html b/build/docs/build-on-morph/sdk/classes/CrossChainMessenger/index.html index a03fc0108..6a24b3f08 100644 --- a/build/docs/build-on-morph/sdk/classes/CrossChainMessenger/index.html +++ b/build/docs/build-on-morph/sdk/classes/CrossChainMessenger/index.html @@ -3,22 +3,26 @@ -CrossChainMessenger | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +CrossChainMessenger | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / CrossChainMessenger

    Class: CrossChainMessenger

    -

    Constructors

    -

    new CrossChainMessenger()

    +

    Constructors

    +

    new CrossChainMessenger()

    new CrossChainMessenger(opts): CrossChainMessenger

    Creates a new CrossChainProvider instance.

    -

    Parameters

    +

    Parameters

    opts

    Options for the provider.

    opts.backendURL?: string

    @@ -35,47 +39,47 @@

    ParametersChain ID for the L2 chain.

    opts.l2SignerOrProvider: SignerOrProviderLike

    Signer or Provider for the L2 chain, or a JSON-RPC url.

    -

    Returns

    +

    Returns

    CrossChainMessenger

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:130

    -

    Properties

    -

    backendURL

    +

    Properties

    +

    backendURL

    backendURL: string

    Backend url for withdrawal prove server

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:76


    -

    bridges

    +

    bridges

    bridges: BridgeAdapters

    List of custom bridges for the given network.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:116


    -

    contracts

    +

    contracts

    contracts: OEContracts

    Contract objects attached to their respective providers and addresses.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:111


    -

    estimateGas

    +

    estimateGas

    estimateGas: object

    Object that holds the functions that estimates the gas required for a given transaction. Follows the pattern used by ethers.js.

    -

    approveERC20()

    +

    approveERC20()

    approveERC20: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    Estimates gas required to approve some tokens to deposit into the L2 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -84,14 +88,14 @@
    ParametersAmount of the token to approve.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    depositERC20()

    +

    depositERC20()

    depositERC20: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    Estimates gas required to deposit some ERC20 tokens into the L2 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    Address of the L1 token.

    l2Token: AddressLike

    @@ -100,50 +104,50 @@
    ParametersAmount to deposit.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    depositETH()

    +

    depositETH()

    depositETH: (amount, opts?) => Promise<BigNumber>

    Estimates gas required to deposit some ETH into the L2 chain.

    -
    Parameters
    +
    Parameters

    amount: NumberLike

    Amount of ETH to deposit.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    proveAndRelayMessage()

    +

    proveAndRelayMessage()

    proveAndRelayMessage: (message, opts?) => Promise<BigNumber>

    Estimates gas required to proveAndRelay a cross chain message. Only applies to L2 to L1 messages.

    -
    Parameters
    +
    Parameters

    message: MessageLike

    Message to generate the proving transaction for.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    sendMessage()

    +

    sendMessage()

    sendMessage: (message, opts?) => Promise<BigNumber>

    Estimates gas required to send a cross chain message.

    -
    Parameters
    +
    Parameters

    message: CrossChainMessageRequest

    Cross chain message to send.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    withdrawERC20()

    +

    withdrawERC20()

    withdrawERC20: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    Estimates gas required to withdraw some ERC20 tokens back to the L1 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    Address of the L1 token.

    l2Token: AddressLike

    @@ -152,83 +156,83 @@
    ParametersAmount to withdraw.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    withdrawETH()

    +

    withdrawETH()

    withdrawETH: (amount, opts?) => Promise<BigNumber>

    Estimates gas required to withdraw some ETH back to the L1 chain.

    -
    Parameters
    +
    Parameters

    amount: NumberLike

    Amount of ETH to withdraw.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1600


    -

    l1ChainId

    +

    l1ChainId

    l1ChainId: number

    Chain ID for the L1 network.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:101


    -

    l1CrossDomainMessenger

    +

    l1CrossDomainMessenger

    l1CrossDomainMessenger: Contract

    CrossDomainMessenger connected to the L1 chain.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:91


    -

    l1SignerOrProvider

    +

    l1SignerOrProvider

    l1SignerOrProvider: Provider | Signer

    Provider connected to the L1 chain.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:81


    -

    l2ChainId

    +

    l2ChainId

    l2ChainId: number

    Chain ID for the L2 network.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:106


    -

    l2CrossDomainMessenger

    +

    l2CrossDomainMessenger

    l2CrossDomainMessenger: Contract

    CrossDomainMessenger connected to the L2 chain.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:96


    -

    l2SignerOrProvider

    +

    l2SignerOrProvider

    l2SignerOrProvider: Provider | Signer

    Provider connected to the L2 chain.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:86


    -

    populateTransaction

    +

    populateTransaction

    populateTransaction: object

    Object that holds the functions that generate transactions to be signed by the user. Follows the pattern used by ethers.js.

    -

    approveERC20()

    +

    approveERC20()

    approveERC20: (l1Token, l2Token, amount, opts?) => Promise<TransactionRequest>

    Generates a transaction for approving some tokens to deposit into the L2 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -237,14 +241,14 @@
    ParametersAmount of the token to approve.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    depositERC20()

    +

    depositERC20()

    depositERC20: (l1Token, l2Token, amount, opts?, isEstimatingGas) => Promise<TransactionRequest>

    Generates a transaction for depositing some ERC20 tokens into the L2 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    Address of the L1 token.

    l2Token: AddressLike

    @@ -254,53 +258,53 @@
    Parametersopts?: IActionOptions

    Additional options.

    isEstimatingGas?: boolean= false

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    depositETH()

    +

    depositETH()

    depositETH: (amount, opts?, isEstimatingGas) => Promise<TransactionRequest>

    Generates a transaction for depositing some ETH into the L2 chain.

    -
    Parameters
    +
    Parameters

    amount: NumberLike

    Amount of ETH to deposit.

    opts?: IActionOptions

    Additional options.

    isEstimatingGas?: boolean= false

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    proveAndRelayMessage()

    +

    proveAndRelayMessage()

    proveAndRelayMessage: (message, opts?) => Promise<TransactionRequest>

    Generates a message proving and relaying transaction that can be signed and executed. Only applicable for L2 to L1 messages.

    -
    Parameters
    +
    Parameters

    message: MessageLike

    Message to generate the proving transaction for.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    sendMessage()

    +

    sendMessage()

    sendMessage: (message, opts?) => Promise<TransactionRequest>

    Generates a transaction that sends a given cross chain message. This transaction can be signed and executed by a signer.

    -
    Parameters
    +
    Parameters

    message: CrossChainMessageRequest

    Cross chain message to send.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    withdrawERC20()

    +

    withdrawERC20()

    withdrawERC20: (l1Token, l2Token, amount, opts?, isEstimatingGas?) => Promise<TransactionRequest>

    Generates a transaction for withdrawing some ERC20 tokens back to the L1 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    Address of the L1 token.

    l2Token: AddressLike

    @@ -310,88 +314,88 @@
    Parametersopts?: IActionOptions

    Additional options.

    isEstimatingGas?: boolean

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    withdrawETH()

    +

    withdrawETH()

    withdrawETH: (amount, opts?, isEstimatingGas?) => Promise<TransactionRequest>

    Generates a transaction for withdrawing some ETH back to the L1 chain.

    -
    Parameters
    +
    Parameters

    amount: NumberLike

    Amount of ETH to withdraw.

    opts?: IActionOptions

    Additional options.

    isEstimatingGas?: boolean

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1304

    -

    Accessors

    -

    l1Provider

    +

    Accessors

    +

    l1Provider

    get l1Provider(): Provider

    Provider connected to the L1 chain.

    -

    Returns

    +

    Returns

    Provider

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:193


    -

    l1Signer

    +

    l1Signer

    get l1Signer(): Signer

    Signer connected to the L1 chain.

    -

    Returns

    +

    Returns

    Signer

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:215


    -

    l2Provider

    +

    l2Provider

    get l2Provider(): Provider

    Provider connected to the L2 chain.

    -

    Returns

    +

    Returns

    Provider

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:204


    -

    l2Signer

    +

    l2Signer

    get l2Signer(): Signer

    Signer connected to the L2 chain.

    -

    Returns

    +

    Returns

    Signer

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:226

    -

    Methods

    -

    approval()

    +

    Methods

    +

    approval()

    approval(l1Token, l2Token, opts?): Promise<BigNumber>

    Queries the account's approval amount for a given L1 token.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    The L2 token address.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Amount of tokens approved for deposits from the account.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1214


    -

    approveERC20()

    +

    approveERC20()

    approveERC20(l1Token, l2Token, amount, opts?): Promise<TransactionResponse>

    Approves a deposit into the L2 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -400,18 +404,18 @@

    ParametersAmount of the token to approve.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the approval transaction.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1233


    -

    depositERC20()

    +

    depositERC20()

    depositERC20(l1Token, l2Token, amount, opts?): Promise<TransactionResponse>

    Deposits some ERC20 tokens into the L2 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    Address of the L1 token.

    l2Token: AddressLike

    @@ -420,34 +424,34 @@

    ParametersAmount to deposit.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the deposit transaction.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1256


    -

    depositETH()

    +

    depositETH()

    depositETH(amount, opts?): Promise<TransactionResponse>

    Deposits some ETH into the L2 chain.

    -

    Parameters

    +

    Parameters

    amount: NumberLike

    Amount of ETH to deposit (in wei).

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the deposit transaction.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1183


    -

    encodeFunctionMessage()

    +

    encodeFunctionMessage()

    encodeFunctionMessage(options): string

    L2CrossDomainMessenger contract encode message, such as hashCrossDomainMessagev1

    -

    Parameters

    +

    Parameters

    options

    options.message: string

    The message passed along with the cross domain message

    @@ -459,18 +463,18 @@

    ParametersThe target of the cross domain message

    options.value: BigNumber

    The value being sent with the cross domain message

    -

    Returns

    +

    Returns

    string

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:972


    -

    estimateL2MessageGasLimit()

    +

    estimateL2MessageGasLimit()

    estimateL2MessageGasLimit(message, opts?): Promise<BigNumber>

    Estimates the amount of gas required to fully execute a given message on L2. Only applies to L1 => L2 messages. You would supply this gas limit when sending the message to L2.

    -

    Parameters

    +

    Parameters

    message: MessageRequestLike

    Message get a gas estimate for.

    opts?

    @@ -479,53 +483,53 @@

    ParametersPercentage of gas to add to the estimate. Defaults to 20.

    opts.from?: string

    Address to use as the sender.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimates L2 gas limit.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:918


    -

    getBackendTreeSyncIndex()

    +

    getBackendTreeSyncIndex()

    getBackendTreeSyncIndex(): Promise<number>

    -

    Returns

    +

    Returns

    Promise<number>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1122


    -

    getBridgeForTokenPair()

    +

    getBridgeForTokenPair()

    getBridgeForTokenPair(l1Token, l2Token): Promise<IBridgeAdapter>

    Finds the appropriate bridge adapter for a given L1 - L2 token pair. Will throw if no bridges support the token pair or if more than one bridge supports the token pair.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    L1 token address.

    l2Token: AddressLike

    L2 token address.

    -

    Returns

    +

    Returns

    Promise<IBridgeAdapter>

    The appropriate bridge adapter for the given token pair.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:378


    -

    getCommittedL2BlockNumber()

    +

    getCommittedL2BlockNumber()

    getCommittedL2BlockNumber(): Promise<any>

    -

    Returns

    +

    Returns

    Promise<any>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:995


    -

    getDepositsByAddress()

    +

    getDepositsByAddress()

    getDepositsByAddress(address, opts): Promise<TokenBridgeMessage[]>

    Gets all deposits for a given address.

    -

    Parameters

    +

    Parameters

    address: AddressLike

    Address to search for messages from.

    opts= {}

    @@ -536,60 +540,60 @@

    Parametersopts.toBlock?: BlockTag

    Block to stop searching for messages at. If not provided, will stop at the latest known block ("latest").

    -

    Returns

    +

    Returns

    Promise<TokenBridgeMessage[]>

    All deposit token bridge messages sent by the given address.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:424


    -

    getFinalizedL2BlockNumber()

    +

    getFinalizedL2BlockNumber()

    getFinalizedL2BlockNumber(): Promise<any>

    -

    Returns

    +

    Returns

    Promise<any>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1017


    -

    getMessageReceipt()

    +

    getMessageReceipt()

    getMessageReceipt(message, opts): Promise<MessageReceipt>

    Finds the receipt of the transaction that executed a particular cross chain message.

    -

    Parameters

    +

    Parameters

    message: MessageLike

    Message to find the receipt of.

    opts= {}

    opts.direction?: MessageDirection

    -

    Returns

    +

    Returns

    Promise<MessageReceipt>

    CrossChainMessage receipt including receipt of the transaction that relayed the given message.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:757


    -

    getMessageStatus()

    +

    getMessageStatus()

    getMessageStatus(message, opts): Promise<MessageStatus>

    Retrieves the status of a particular message as an enum.

    -

    Parameters

    +

    Parameters

    message: MessageLike

    Cross chain message to check the status of.

    opts= {}

    opts.direction?: MessageDirection

    -

    Returns

    +

    Returns

    Promise<MessageStatus>

    Status of the message.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:634


    -

    getMessagesByTransaction()

    +

    getMessagesByTransaction()

    getMessagesByTransaction(transaction, opts): Promise<CrossChainMessage[]>

    Retrieves all cross chain messages sent within a given transaction.

    -

    Parameters

    +

    Parameters

    transaction: TransactionLike

    Transaction hash or receipt to find messages from.

    opts= {}

    @@ -598,46 +602,46 @@

    ParametersDirection to search for messages in. If not provided, will attempt to automatically search both directions under the assumption that a transaction hash will only exist on one chain. If the hash exists on both chains, will throw an error.

    -

    Returns

    +

    Returns

    Promise<CrossChainMessage[]>

    All cross chain messages sent within the transaction.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:244


    -

    getProvenWithdrawal()

    +

    getProvenWithdrawal()

    getProvenWithdrawal(withdrawalHash): Promise<ProvenWithdrawal>

    Queries the L1CrossDomainMessenger contract's provenWithdrawals mapping for a ProvenWithdrawal that matches the passed withdrawalHash

    -

    Parameters

    +

    Parameters

    withdrawalHash: string

    -

    Returns

    +

    Returns

    Promise<ProvenWithdrawal>

    A ProvenWithdrawal object

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:957


    -

    getWithdrawMessageProof()

    +

    getWithdrawMessageProof()

    getWithdrawMessageProof(message): Promise<WithdrawMessageProof>

    Generates the proof required to finalize an L2 to L1 message.

    -

    Parameters

    +

    Parameters

    message: MessageLike

    Message to generate a proof for.

    -

    Returns

    +

    Returns

    Promise<WithdrawMessageProof>

    Proof that can be used to finalize the message.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1042


    -

    getWithdrawalsByAddress()

    +

    getWithdrawalsByAddress()

    getWithdrawalsByAddress(address, opts): Promise<TokenBridgeMessage[]>

    Gets all withdrawals for a given address.

    -

    Parameters

    +

    Parameters

    address: AddressLike

    Address to search for messages from.

    opts= {}

    @@ -648,47 +652,47 @@

    Parametersopts.toBlock?: BlockTag

    Block to stop searching for messages at. If not provided, will stop at the latest known block ("latest").

    -

    Returns

    +

    Returns

    Promise<TokenBridgeMessage[]>

    All withdrawal token bridge messages sent by the given address.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:458


    -

    proveAndRelayMessage()

    +

    proveAndRelayMessage()

    proveAndRelayMessage(message, opts?): Promise<TransactionResponse>

    Prove and relay a cross chain message that was sent from L2 to L1. Only applicable for L2 to L1 messages.

    -

    Parameters

    +

    Parameters

    message: MessageLike

    Message to finalize.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the finalization transaction.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1163


    -

    sendMessage()

    +

    sendMessage()

    sendMessage(message, opts?): Promise<TransactionResponse>

    Sends a given cross chain message. Where the message is sent depends on the direction attached to the message itself.

    -

    Parameters

    +

    Parameters

    message: CrossChainMessageRequest

    Cross chain message to send.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the message sending transaction.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1143


    -

    toCrossChainMessage()

    +

    toCrossChainMessage()

    toCrossChainMessage(message, opts?): Promise<CrossChainMessage>

    @@ -697,52 +701,52 @@

    toCrossC requests. For now I'm going to keep this function here, but we could consider putting a similar function inside of utils/coercion.ts if people want to use this without having to create an entire CrossChainProvider object.

    -

    Parameters

    +

    Parameters

    message: MessageLike

    MessageLike to resolve into a CrossChainMessage.

    opts?

    opts.direction?: MessageDirection

    -

    Returns

    +

    Returns

    Promise<CrossChainMessage>

    Message coerced into a CrossChainMessage.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:491


    -

    toLowLevelMessage()

    +

    toLowLevelMessage()

    toLowLevelMessage(message, opts?): Promise<LowLevelMessage>

    Transforms a CrossChainMessenger message into its low-level representation inside the L2ToL1MessagePasser contract on L2.

    -

    Parameters

    +

    Parameters

    message: MessageLike

    Message to transform.

    opts?

    opts.direction?: MessageDirection

    -

    Returns

    +

    Returns

    Promise<LowLevelMessage>

    Transformed message.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:326


    -

    waitBatchFinalize()

    +

    waitBatchFinalize()

    waitBatchFinalize(transactionHash): Promise<void>

    -

    Parameters

    +

    Parameters

    transactionHash: string

    -

    Returns

    +

    Returns

    Promise<void>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:600


    -

    waitForMessageReceipt()

    +

    waitForMessageReceipt()

    waitForMessageReceipt(message, opts): Promise<MessageReceipt>

    Waits for a message to be executed and returns the receipt of the transaction that executed the given message.

    -

    Parameters

    +

    Parameters

    message: MessageLike

    Message to wait for.

    opts= {}

    @@ -753,14 +757,14 @@

    ParametersNumber of milliseconds to wait between polling for the receipt.

    opts.timeoutMs?: number

    Milliseconds to wait before timing out.

    -

    Returns

    +

    Returns

    Promise<MessageReceipt>

    CrossChainMessage receipt including receipt of the transaction that relayed the given message.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:802


    -

    waitForMessageStatus()

    +

    waitForMessageStatus()

    waitForMessageStatus(message, status, opts): Promise<void>

    @@ -768,7 +772,7 @@

    waitFor status of the given message changes to a status that implies the expected status, this will still return. If the status of the message changes to a status that exclues the expected status, this will throw an error.

    -

    Parameters

    +

    Parameters

    message: MessageLike

    Message to wait for.

    status: MessageStatus

    @@ -780,39 +784,39 @@

    ParametersNumber of milliseconds to wait when polling.

    opts.timeoutMs?: number

    Milliseconds to wait before timing out.

    -

    Returns

    +

    Returns

    Promise<void>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:840


    -

    waitRollupSuccess()

    +

    waitRollupSuccess()

    waitRollupSuccess(transactionHash): Promise<void>

    -

    Parameters

    +

    Parameters

    transactionHash: string

    -

    Returns

    +

    Returns

    Promise<void>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:552


    -

    waitSyncSuccess()

    +

    waitSyncSuccess()

    waitSyncSuccess(transactionHash): Promise<void>

    -

    Parameters

    +

    Parameters

    transactionHash: string

    -

    Returns

    +

    Returns

    Promise<void>

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:576


    -

    withdrawERC20()

    +

    withdrawERC20()

    withdrawERC20(l1Token, l2Token, amount, opts?): Promise<TransactionResponse>

    Withdraws some ERC20 tokens back to the L1 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    Address of the L1 token.

    l2Token: AddressLike

    @@ -821,26 +825,26 @@

    ParametersAmount to withdraw.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the withdraw transaction.

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:1282


    -

    withdrawETH()

    +

    withdrawETH()

    withdrawETH(amount, opts?): Promise<TransactionResponse>

    Withdraws some ETH back to the L1 chain.

    -

    Parameters

    +

    Parameters

    amount: NumberLike

    Amount of ETH to withdraw.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the withdraw transaction.

    -

    Source

    -

    src/cross-chain-messenger.ts:1198

    +

    Source

    +

    src/cross-chain-messenger.ts:1198

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/classes/ETHBridgeAdapter/index.html b/build/docs/build-on-morph/sdk/classes/ETHBridgeAdapter/index.html index 85722b74c..b969994fa 100644 --- a/build/docs/build-on-morph/sdk/classes/ETHBridgeAdapter/index.html +++ b/build/docs/build-on-morph/sdk/classes/ETHBridgeAdapter/index.html @@ -3,27 +3,31 @@ -ETHBridgeAdapter | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +ETHBridgeAdapter | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / ETHBridgeAdapter

    Class: ETHBridgeAdapter

    Bridge adapter for the ETH bridge.

    -

    Extends

    +

    Extends

    -

    Constructors

    -

    new ETHBridgeAdapter()

    +

    Constructors

    +

    new ETHBridgeAdapter()

    new ETHBridgeAdapter(opts): ETHBridgeAdapter

    Creates a StandardBridgeAdapter instance.

    -

    Parameters

    +

    Parameters

    opts

    Options for the adapter.

    opts.l1Bridge: AddressLike

    @@ -32,157 +36,157 @@

    ParametersL2 bridge contract.

    opts.messenger: CrossChainMessenger

    Provider used to make queries related to cross-chain interactions.

    -

    Returns

    +

    Returns

    ETHBridgeAdapter

    -

    Inherited from

    +

    Inherited from

    StandardBridgeAdapter.constructor

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:52

    -

    Properties

    -

    estimateGas

    +

    Properties

    +

    estimateGas

    estimateGas: object

    Object that holds the functions that estimates the gas required for a given transaction. Follows the pattern used by ethers.js.

    -

    approve()

    +

    approve()

    approve: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    deposit()

    +

    deposit()

    deposit: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    withdraw()

    +

    withdraw()

    withdraw: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    Inherited from

    +

    Inherited from

    StandardBridgeAdapter.estimateGas

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:405


    -

    l1Bridge

    +

    l1Bridge

    l1Bridge: Contract

    L1 bridge contract.

    -

    Inherited from

    +

    Inherited from

    StandardBridgeAdapter.l1Bridge

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:41


    -

    l2Bridge

    +

    l2Bridge

    l2Bridge: Contract

    L2 bridge contract.

    -

    Inherited from

    +

    Inherited from

    StandardBridgeAdapter.l2Bridge

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:42


    -

    messenger

    +

    messenger

    messenger: CrossChainMessenger

    Provider used to make queries related to cross-chain interactions.

    -

    Inherited from

    +

    Inherited from

    StandardBridgeAdapter.messenger

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:40


    -

    populateTransaction

    +

    populateTransaction

    populateTransaction: object

    Object that holds the functions that generate transactions to be signed by the user. Follows the pattern used by ethers.js.

    -

    approve()

    +

    approve()

    approve: (l1Token, l2Token, amount, opts?) => Promise<never>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<never>

    -

    deposit()

    +

    deposit()

    deposit: (l1Token, l2Token, amount, opts) => Promise<TransactionRequest>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts: IActionOptions

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    withdraw()

    +

    withdraw()

    withdraw: (l1Token, l2Token, amount, opts) => Promise<TransactionRequest>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts: IActionOptions

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    Overrides

    +

    Overrides

    StandardBridgeAdapter.populateTransaction

    -

    Source

    +

    Source

    src/adapters/eth-bridge.ts:116

    -

    Methods

    -

    approval()

    +

    Methods

    +

    approval()

    approval(l1Token, l2Token, opts?): Promise<BigNumber>

    Queries the account's approval amount for a given L1 token.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    The L2 token address.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Amount of tokens approved for deposits from the account.

    -

    Overrides

    +

    Overrides

    StandardBridgeAdapter.approval

    -

    Source

    +

    Source

    src/adapters/eth-bridge.ts:22


    -

    approve()

    +

    approve()

    approve(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Approves a deposit into the L2 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -193,20 +197,20 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the approval transaction.

    -

    Inherited from

    +

    Inherited from

    StandardBridgeAdapter.approve

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:250


    -

    deposit()

    +

    deposit()

    deposit(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Deposits some tokens into the L2 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -217,78 +221,78 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the deposit transaction.

    -

    Inherited from

    +

    Inherited from

    StandardBridgeAdapter.deposit

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:262


    -

    getDepositsByAddress()

    +

    getDepositsByAddress()

    getDepositsByAddress(address, opts?): Promise<TokenBridgeMessage[]>

    Gets all deposits for a given address.

    -

    Parameters

    +

    Parameters

    address: AddressLike

    Address to search for messages from.

    opts?

    Options object.

    opts.fromBlock?: BlockTag

    opts.toBlock?: BlockTag

    -

    Returns

    +

    Returns

    Promise<TokenBridgeMessage[]>

    All deposit token bridge messages sent by the given address.

    -

    Overrides

    +

    Overrides

    StandardBridgeAdapter.getDepositsByAddress

    -

    Source

    +

    Source

    src/adapters/eth-bridge.ts:30


    -

    getWithdrawalsByAddress()

    +

    getWithdrawalsByAddress()

    getWithdrawalsByAddress(address, opts?): Promise<TokenBridgeMessage[]>

    Gets all withdrawals for a given address.

    -

    Parameters

    +

    Parameters

    address: AddressLike

    Address to search for messages from.

    -

    opts?

    +

    opts?

    Options object.

    opts.fromBlock?: BlockTag

    opts.toBlock?: BlockTag

    -

    Returns

    +

    Returns

    Promise<TokenBridgeMessage[]>

    All withdrawal token bridge messages sent by the given address.

    -

    Overrides

    +

    Overrides

    StandardBridgeAdapter.getWithdrawalsByAddress

    -

    Source

    +

    Source

    src/adapters/eth-bridge.ts:64


    -

    supportsTokenPair()

    +

    supportsTokenPair()

    supportsTokenPair(l1Token, l2Token): Promise<boolean>

    Checks whether the given token pair is supported by the bridge.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    The L2 token address.

    -

    Returns

    +

    Returns

    Promise<boolean>

    Whether the given token pair is supported by the bridge.

    -

    Overrides

    +

    Overrides

    StandardBridgeAdapter.supportsTokenPair

    -

    Source

    +

    Source

    src/adapters/eth-bridge.ts:105


    -

    withdraw()

    +

    withdraw()

    withdraw(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Withdraws some tokens back to the L1 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -299,12 +303,12 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the withdraw transaction.

    -

    Inherited from

    +

    Inherited from

    StandardBridgeAdapter.withdraw

    -

    Source

    -

    src/adapters/standard-bridge.ts:274

    +

    Source

    +

    src/adapters/standard-bridge.ts:274

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/classes/StandardBridgeAdapter/index.html b/build/docs/build-on-morph/sdk/classes/StandardBridgeAdapter/index.html index e68945084..1bc03ef56 100644 --- a/build/docs/build-on-morph/sdk/classes/StandardBridgeAdapter/index.html +++ b/build/docs/build-on-morph/sdk/classes/StandardBridgeAdapter/index.html @@ -3,31 +3,35 @@ -StandardBridgeAdapter | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +StandardBridgeAdapter | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / StandardBridgeAdapter

    Class: StandardBridgeAdapter

    Bridge adapter for any token bridge that uses the standard token bridge interface.

    -

    Extended by

    +

    Extended by

    -

    Implements

    +

    Implements

    -

    Constructors

    -

    new StandardBridgeAdapter()

    +

    Constructors

    +

    new StandardBridgeAdapter()

    new StandardBridgeAdapter(opts): StandardBridgeAdapter

    Creates a StandardBridgeAdapter instance.

    -

    Parameters

    +

    Parameters

    opts

    Options for the adapter.

    opts.l1Bridge: AddressLike

    @@ -36,155 +40,155 @@

    ParametersL2 bridge contract.

    opts.messenger: CrossChainMessenger

    Provider used to make queries related to cross-chain interactions.

    -

    Returns

    +

    Returns

    StandardBridgeAdapter

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:52

    -

    Properties

    -

    estimateGas

    +

    Properties

    +

    estimateGas

    estimateGas: object

    Object that holds the functions that estimates the gas required for a given transaction. Follows the pattern used by ethers.js.

    -

    approve()

    +

    approve()

    approve: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    deposit()

    +

    deposit()

    deposit: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    withdraw()

    +

    withdraw()

    withdraw: (l1Token, l2Token, amount, opts?) => Promise<BigNumber>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.estimateGas

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:405


    -

    l1Bridge

    +

    l1Bridge

    l1Bridge: Contract

    L1 bridge contract.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.l1Bridge

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:41


    -

    l2Bridge

    +

    l2Bridge

    l2Bridge: Contract

    L2 bridge contract.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.l2Bridge

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:42


    -

    messenger

    +

    messenger

    messenger: CrossChainMessenger

    Provider used to make queries related to cross-chain interactions.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.messenger

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:40


    -

    populateTransaction

    +

    populateTransaction

    populateTransaction: object

    Object that holds the functions that generate transactions to be signed by the user. Follows the pattern used by ethers.js.

    -

    approve()

    +

    approve()

    approve: (l1Token, l2Token, amount, opts?) => Promise<TransactionRequest>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    deposit()

    +

    deposit()

    deposit: (l1Token, l2Token, amount, opts?) => Promise<TransactionRequest>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    withdraw()

    +

    withdraw()

    withdraw: (l1Token, l2Token, amount, opts?) => Promise<TransactionRequest>

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    l2Token: AddressLike

    amount: NumberLike

    opts?: IActionOptions

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.populateTransaction

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:286

    -

    Methods

    -

    approval()

    +

    Methods

    +

    approval()

    approval(l1Token, l2Token, opts): Promise<BigNumber>

    Queries the account's approval amount for a given L1 token.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    The L2 token address.

    opts: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Amount of tokens approved for deposits from the account.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.approval

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:209


    -

    approve()

    +

    approve()

    approve(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Approves a deposit into the L2 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -195,20 +199,20 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the approval transaction.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.approve

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:250


    -

    deposit()

    +

    deposit()

    deposit(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Deposits some tokens into the L2 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -219,78 +223,78 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the deposit transaction.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.deposit

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:262


    -

    getDepositsByAddress()

    +

    getDepositsByAddress()

    getDepositsByAddress(address, opts?): Promise<TokenBridgeMessage[]>

    Gets all deposits for a given address.

    -

    Parameters

    +

    Parameters

    address: AddressLike

    Address to search for messages from.

    opts?

    Options object.

    -

    opts.fromBlock?: BlockTag

    +

    opts.fromBlock?: BlockTag

    opts.toBlock?: BlockTag

    -

    Returns

    +

    Returns

    Promise<TokenBridgeMessage[]>

    All deposit token bridge messages sent by the given address.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.getDepositsByAddress

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:75


    -

    getWithdrawalsByAddress()

    +

    getWithdrawalsByAddress()

    getWithdrawalsByAddress(address, opts?): Promise<TokenBridgeMessage[]>

    Gets all withdrawals for a given address.

    -

    Parameters

    +

    Parameters

    address: AddressLike

    Address to search for messages from.

    opts?

    Options object.

    opts.fromBlock?: BlockTag

    opts.toBlock?: BlockTag

    -

    Returns

    +

    Returns

    Promise<TokenBridgeMessage[]>

    All withdrawal token bridge messages sent by the given address.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.getWithdrawalsByAddress

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:122


    -

    supportsTokenPair()

    +

    supportsTokenPair()

    supportsTokenPair(l1Token, l2Token): Promise<boolean>

    Checks whether the given token pair is supported by the bridge.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    The L2 token address.

    -

    Returns

    +

    Returns

    Promise<boolean>

    Whether the given token pair is supported by the bridge.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.supportsTokenPair

    -

    Source

    +

    Source

    src/adapters/standard-bridge.ts:165


    -

    withdraw()

    +

    withdraw()

    withdraw(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Withdraws some tokens back to the L1 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -301,12 +305,12 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the withdraw transaction.

    -

    Implementation of

    +

    Implementation of

    IBridgeAdapter.withdraw

    -

    Source

    -

    src/adapters/standard-bridge.ts:274

    +

    Source

    +

    src/adapters/standard-bridge.ts:274

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/enumerations/L1ChainID/index.html b/build/docs/build-on-morph/sdk/enumerations/L1ChainID/index.html index 4e2f8fc04..2241b2c3d 100644 --- a/build/docs/build-on-morph/sdk/enumerations/L1ChainID/index.html +++ b/build/docs/build-on-morph/sdk/enumerations/L1ChainID/index.html @@ -3,50 +3,54 @@ -L1ChainID | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L1ChainID | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L1ChainID

    Enumeration: L1ChainID

    L1 network chain IDs

    -

    Enumeration Members

    -

    HOLESKY

    +

    Enumeration Members

    +

    HOLESKY

    HOLESKY: 17000

    -

    Source

    +

    Source

    src/interfaces/types.ts:23


    -

    MAINNET

    +

    MAINNET

    MAINNET: 1

    -

    Source

    +

    Source

    src/interfaces/types.ts:17


    -

    MORPH_LOCAL_DEVNET

    +

    MORPH_LOCAL_DEVNET

    MORPH_LOCAL_DEVNET: 900

    -

    Source

    +

    Source

    src/interfaces/types.ts:20


    -

    MORPH_QANET

    +

    MORPH_QANET

    MORPH_QANET: 900

    -

    Source

    +

    Source

    src/interfaces/types.ts:21


    -

    SEPOLIA

    +

    SEPOLIA

    SEPOLIA: 11155111

    -

    Source

    -

    src/interfaces/types.ts:22

    +

    Source

    +

    src/interfaces/types.ts:22

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/enumerations/L1RpcUrls/index.html b/build/docs/build-on-morph/sdk/enumerations/L1RpcUrls/index.html index e75ecea57..441e09bc6 100644 --- a/build/docs/build-on-morph/sdk/enumerations/L1RpcUrls/index.html +++ b/build/docs/build-on-morph/sdk/enumerations/L1RpcUrls/index.html @@ -3,35 +3,39 @@ -L1RpcUrls | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L1RpcUrls | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L1RpcUrls

    Enumeration: L1RpcUrls

    -

    Enumeration Members

    -

    HOLESKY

    +

    Enumeration Members

    +

    HOLESKY

    HOLESKY: "https://1rpc.io/holesky"

    -

    Source

    +

    Source

    src/interfaces/types.ts:41


    -

    MORPH_LOCAL_DEVNET

    +

    MORPH_LOCAL_DEVNET

    MORPH_LOCAL_DEVNET: "http://localhost:9545"

    -

    Source

    +

    Source

    src/interfaces/types.ts:39


    -

    SEPOLIA

    +

    SEPOLIA

    SEPOLIA: "https://1rpc.io/sepolia"

    -

    Source

    -

    src/interfaces/types.ts:40

    +

    Source

    +

    src/interfaces/types.ts:40

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/enumerations/L2ChainID/index.html b/build/docs/build-on-morph/sdk/enumerations/L2ChainID/index.html index f928493f4..22d58c6b3 100644 --- a/build/docs/build-on-morph/sdk/enumerations/L2ChainID/index.html +++ b/build/docs/build-on-morph/sdk/enumerations/L2ChainID/index.html @@ -3,50 +3,54 @@ -L2ChainID | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L2ChainID | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L2ChainID

    Enumeration: L2ChainID

    L2 network chain IDs

    -

    Enumeration Members

    -

    MORPH_HOLESKY

    +

    Enumeration Members

    +

    MORPH_HOLESKY

    MORPH_HOLESKY: 2810

    -

    Source

    +

    Source

    src/interfaces/types.ts:35


    -

    MORPH_LOCAL_DEVNET

    +

    MORPH_LOCAL_DEVNET

    MORPH_LOCAL_DEVNET: 53077

    -

    Source

    +

    Source

    src/interfaces/types.ts:32


    -

    MORPH_MAINNET

    +

    MORPH_MAINNET

    MORPH_MAINNET: 0

    -

    Source

    +

    Source

    src/interfaces/types.ts:30


    -

    MORPH_QANET

    +

    MORPH_QANET

    MORPH_QANET: 53077

    -

    Source

    +

    Source

    src/interfaces/types.ts:33


    -

    MORPH_TESTNET

    +

    MORPH_TESTNET

    MORPH_TESTNET: 2710

    -

    Source

    -

    src/interfaces/types.ts:34

    +

    Source

    +

    src/interfaces/types.ts:34

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/enumerations/L2RpcUrls/index.html b/build/docs/build-on-morph/sdk/enumerations/L2RpcUrls/index.html index d041ce3ee..2a4ae6a5d 100644 --- a/build/docs/build-on-morph/sdk/enumerations/L2RpcUrls/index.html +++ b/build/docs/build-on-morph/sdk/enumerations/L2RpcUrls/index.html @@ -3,35 +3,39 @@ -L2RpcUrls | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L2RpcUrls | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L2RpcUrls

    Enumeration: L2RpcUrls

    -

    Enumeration Members

    -

    MORPH_HOLESKY

    +

    Enumeration Members

    +

    MORPH_HOLESKY

    MORPH_HOLESKY: "https://rpc-holesky.morphl2.io"

    -

    Source

    +

    Source

    src/interfaces/types.ts:47


    -

    MORPH_LOCAL_DEVNET

    +

    MORPH_LOCAL_DEVNET

    MORPH_LOCAL_DEVNET: "http://localhost:8545"

    -

    Source

    +

    Source

    src/interfaces/types.ts:45


    -

    MORPH_TESTNET

    +

    MORPH_TESTNET

    MORPH_TESTNET: "https://rpc-testnet.morphl2.io"

    -

    Source

    -

    src/interfaces/types.ts:46

    +

    Source

    +

    src/interfaces/types.ts:46

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/enumerations/MessageDirection/index.html b/build/docs/build-on-morph/sdk/enumerations/MessageDirection/index.html index c38d63185..3d75df44f 100644 --- a/build/docs/build-on-morph/sdk/enumerations/MessageDirection/index.html +++ b/build/docs/build-on-morph/sdk/enumerations/MessageDirection/index.html @@ -3,29 +3,33 @@ -MessageDirection | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +MessageDirection | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / MessageDirection

    Enumeration: MessageDirection

    Enum describing the direction of a message.

    -

    Enumeration Members

    -

    L1_TO_L2

    +

    Enumeration Members

    +

    L1_TO_L2

    L1_TO_L2: 0

    -

    Source

    +

    Source

    src/interfaces/types.ts:223


    -

    L2_TO_L1

    +

    L2_TO_L1

    L2_TO_L1: 1

    -

    Source

    -

    src/interfaces/types.ts:224

    +

    Source

    +

    src/interfaces/types.ts:224

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/enumerations/MessageReceiptStatus/index.html b/build/docs/build-on-morph/sdk/enumerations/MessageReceiptStatus/index.html index 7e072dc81..269d965f4 100644 --- a/build/docs/build-on-morph/sdk/enumerations/MessageReceiptStatus/index.html +++ b/build/docs/build-on-morph/sdk/enumerations/MessageReceiptStatus/index.html @@ -3,29 +3,33 @@ -MessageReceiptStatus | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +MessageReceiptStatus | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / MessageReceiptStatus

    Enumeration: MessageReceiptStatus

    Enum describing the status of a CrossDomainMessage message receipt.

    -

    Enumeration Members

    -

    RELAYED_FAILED

    +

    Enumeration Members

    +

    RELAYED_FAILED

    RELAYED_FAILED: 0

    -

    Source

    +

    Source

    src/interfaces/types.ts:299


    -

    RELAYED_SUCCEEDED

    +

    RELAYED_SUCCEEDED

    RELAYED_SUCCEEDED: 1

    -

    Source

    -

    src/interfaces/types.ts:300

    +

    Source

    +

    src/interfaces/types.ts:300

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/enumerations/MessageStatus/index.html b/build/docs/build-on-morph/sdk/enumerations/MessageStatus/index.html index 23a59881e..10b252fdf 100644 --- a/build/docs/build-on-morph/sdk/enumerations/MessageStatus/index.html +++ b/build/docs/build-on-morph/sdk/enumerations/MessageStatus/index.html @@ -3,81 +3,85 @@ -MessageStatus | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +MessageStatus | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / MessageStatus

    Enumeration: MessageStatus

    Enum describing the status of a message.

    -

    Enumeration Members

    -

    FAILED_L1_TO_L2_MESSAGE

    +

    Enumeration Members

    +

    FAILED_L1_TO_L2_MESSAGE

    FAILED_L1_TO_L2_MESSAGE: 1

    Message is an L1 to L2 message and the transaction to execute the message failed. When this status is returned, you will need to resend the L1 to L2 message, probably with a higher gas limit.

    -

    Source

    +

    Source

    src/interfaces/types.ts:186


    -

    IN_CHALLENGE_PERIOD

    +

    IN_CHALLENGE_PERIOD

    IN_CHALLENGE_PERIOD: 5

    Message is a proved L2 to L1 message and is undergoing the challenge period.

    -

    Source

    +

    Source

    src/interfaces/types.ts:206


    -

    READY_FOR_RELAY

    +

    READY_FOR_RELAY

    READY_FOR_RELAY: 6

    Message is ready to be relayed.

    -

    Source

    +

    Source

    src/interfaces/types.ts:211


    -

    READY_TO_PROVE

    +

    READY_TO_PROVE

    READY_TO_PROVE: 4

    Message is ready to be proved on L1 to initiate the challenge period.

    -

    Source

    +

    Source

    src/interfaces/types.ts:201


    -

    RELAYED

    +

    RELAYED

    RELAYED: 7

    Message has been relayed.

    -

    Source

    +

    Source

    src/interfaces/types.ts:216


    -

    UNCONFIRMED_L1_TO_L2_MESSAGE

    +

    UNCONFIRMED_L1_TO_L2_MESSAGE

    UNCONFIRMED_L1_TO_L2_MESSAGE: 0

    Message is an L1 to L2 message and has not been processed by the L2.

    -

    Source

    +

    Source

    src/interfaces/types.ts:179


    -

    WITHDRAWAL_HASH_NOT_SYNC

    +

    WITHDRAWAL_HASH_NOT_SYNC

    WITHDRAWAL_HASH_NOT_SYNC: 3

    Message is an L2 to L1 message and withdrawal hash has not been published to backend yet.

    -

    Source

    +

    Source

    src/interfaces/types.ts:196


    -

    WITHDRAWAL_ROOT_NOT_PUBLISHED

    +

    WITHDRAWAL_ROOT_NOT_PUBLISHED

    WITHDRAWAL_ROOT_NOT_PUBLISHED: 2

    Message is an L2 to L1 message and withdrawal root has not been published yet.

    -

    Source

    -

    src/interfaces/types.ts:191

    +

    Source

    +

    src/interfaces/types.ts:191

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/asL2Provider/index.html b/build/docs/build-on-morph/sdk/functions/asL2Provider/index.html index 4404350f8..7bd565c3e 100644 --- a/build/docs/build-on-morph/sdk/functions/asL2Provider/index.html +++ b/build/docs/build-on-morph/sdk/functions/asL2Provider/index.html @@ -3,12 +3,16 @@ -asL2Provider | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +asL2Provider | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / asL2Provider

    Function: asL2Provider()

    @@ -18,15 +22,15 @@

    Function: asL2Provider()

    Returns an provider wrapped as an Morph L2 provider. Adds a few extra helper functions to simplify the process of estimating the gas usage for a transaction on Morph. Returns a COPY of the original provider.

    -

    Type parameters

    +

    Type parameters

    TProvider extends Provider<TProvider>

    -

    Parameters

    +

    Parameters

    provider: TProvider

    Provider to wrap into an L2 provider.

    -

    Returns

    +

    Returns

    L2Provider<TProvider>

    Provider wrapped as an L2 provider.

    -

    Source

    -

    src/l2-provider.ts:171

    +

    Source

    +

    src/l2-provider.ts:171

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/estimateL1Gas/index.html b/build/docs/build-on-morph/sdk/functions/estimateL1Gas/index.html index 7f64a7eba..b7dc53029 100644 --- a/build/docs/build-on-morph/sdk/functions/estimateL1Gas/index.html +++ b/build/docs/build-on-morph/sdk/functions/estimateL1Gas/index.html @@ -3,12 +3,16 @@ -estimateL1Gas | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +estimateL1Gas | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / estimateL1Gas

    Function: estimateL1Gas()

    @@ -16,15 +20,15 @@

    Function: estimateL1Gas()

    estimateL1Gas(l2Provider, tx): Promise<BigNumber>

    Estimates the amount of L1 gas required for a given L2 transaction.

    -

    Parameters

    +

    Parameters

    l2Provider: ProviderLike

    L2 provider to query the gas usage from.

    tx: TransactionRequest

    Transaction to estimate L1 gas for.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimated L1 gas.

    -

    Source

    -

    src/l2-provider.ts:71

    +

    Source

    +

    src/l2-provider.ts:71

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/estimateL1GasCost/index.html b/build/docs/build-on-morph/sdk/functions/estimateL1GasCost/index.html index b27e33e14..a3df20ea3 100644 --- a/build/docs/build-on-morph/sdk/functions/estimateL1GasCost/index.html +++ b/build/docs/build-on-morph/sdk/functions/estimateL1GasCost/index.html @@ -3,12 +3,16 @@ -estimateL1GasCost | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +estimateL1GasCost | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / estimateL1GasCost

    Function: estimateL1GasCost()

    @@ -16,15 +20,15 @@

    Function: estimateL1GasCost()

    estimateL1GasCost(l2Provider, tx): Promise<BigNumber>

    Estimates the amount of L1 gas cost for a given L2 transaction in wei.

    -

    Parameters

    +

    Parameters

    l2Provider: ProviderLike

    L2 provider to query the gas usage from.

    tx: TransactionRequest

    Transaction to estimate L1 gas cost for.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimated L1 gas cost.

    -

    Source

    -

    src/l2-provider.ts:95

    +

    Source

    +

    src/l2-provider.ts:95

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/estimateL2GasCost/index.html b/build/docs/build-on-morph/sdk/functions/estimateL2GasCost/index.html index 4363e53ea..7e9623d97 100644 --- a/build/docs/build-on-morph/sdk/functions/estimateL2GasCost/index.html +++ b/build/docs/build-on-morph/sdk/functions/estimateL2GasCost/index.html @@ -3,12 +3,16 @@ -estimateL2GasCost | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +estimateL2GasCost | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / estimateL2GasCost

    Function: estimateL2GasCost()

    @@ -16,15 +20,15 @@

    Function: estimateL2GasCost()

    estimateL2GasCost(l2Provider, tx): Promise<BigNumber>

    Estimates the L2 gas cost for a given L2 transaction in wei.

    -

    Parameters

    +

    Parameters

    l2Provider: ProviderLike

    L2 provider to query the gas usage from.

    tx: TransactionRequest

    Transaction to estimate L2 gas cost for.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimated L2 gas cost.

    -

    Source

    -

    src/l2-provider.ts:119

    +

    Source

    +

    src/l2-provider.ts:119

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/estimateTotalGasCost/index.html b/build/docs/build-on-morph/sdk/functions/estimateTotalGasCost/index.html index aa7f06308..c32a8ff63 100644 --- a/build/docs/build-on-morph/sdk/functions/estimateTotalGasCost/index.html +++ b/build/docs/build-on-morph/sdk/functions/estimateTotalGasCost/index.html @@ -3,12 +3,16 @@ -estimateTotalGasCost | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +estimateTotalGasCost | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / estimateTotalGasCost

    Function: estimateTotalGasCost()

    @@ -16,15 +20,15 @@

    Function: estimateTotalGasCost()

    estimateTotalGasCost(l2Provider, tx): Promise<BigNumber>

    Estimates the total gas cost for a given L2 transaction in wei.

    -

    Parameters

    +

    Parameters

    l2Provider: ProviderLike

    L2 provider to query the gas usage from.

    tx: TransactionRequest

    Transaction to estimate total gas cost for.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimated total gas cost.

    -

    Source

    -

    src/l2-provider.ts:136

    +

    Source

    +

    src/l2-provider.ts:136

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/getAllOEContracts/index.html b/build/docs/build-on-morph/sdk/functions/getAllOEContracts/index.html index c48ba0574..3379f2bac 100644 --- a/build/docs/build-on-morph/sdk/functions/getAllOEContracts/index.html +++ b/build/docs/build-on-morph/sdk/functions/getAllOEContracts/index.html @@ -3,12 +3,16 @@ -getAllOEContracts | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +getAllOEContracts | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / getAllOEContracts

    Function: getAllOEContracts()

    @@ -19,7 +23,7 @@

    Function: getAllOEContracts()

    user can provide custom contract address overrides for L1 or L2 contracts. If the given chain ID is not known then the user MUST provide custom contract addresses for ALL L1 contracts or this function will throw an error.

    -

    Parameters

    +

    Parameters

    l2ChainId: number

    Chain ID for the L2 network.

    opts= {}

    @@ -28,11 +32,11 @@

    Parametersopts.l2SignerOrProvider?: Provider | Signer

    opts.overrides?: DeepPartial<OEContractsLike>

    Custom contract address overrides for L1 or L2 contracts.

    -

    Returns

    +

    Returns

    OEContracts

    An object containing ethers.Contract objects connected to the appropriate addresses on both L1 and L2.

    -

    Source

    -

    src/utils/contracts.ts:88

    +

    Source

    +

    src/utils/contracts.ts:88

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/getBridgeAdapters/index.html b/build/docs/build-on-morph/sdk/functions/getBridgeAdapters/index.html index a1a3323d8..7f11fc3d9 100644 --- a/build/docs/build-on-morph/sdk/functions/getBridgeAdapters/index.html +++ b/build/docs/build-on-morph/sdk/functions/getBridgeAdapters/index.html @@ -3,12 +3,16 @@ -getBridgeAdapters | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +getBridgeAdapters | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / getBridgeAdapters

    Function: getBridgeAdapters()

    @@ -16,7 +20,7 @@

    Function: getBridgeAdapters()

    getBridgeAdapters(l2ChainId, messenger, opts?): BridgeAdapters

    Gets a series of bridge adapters for the given L2 chain ID.

    -

    Parameters

    +

    Parameters

    l2ChainId: number

    Chain ID for the L2 network.

    messenger: CrossChainMessenger

    @@ -26,10 +30,10 @@

    Parametersopts.contracts?: DeepPartial<OEContractsLike>

    opts.overrides?: BridgeAdapterData

    Custom bridge adapters.

    -

    Returns

    +

    Returns

    BridgeAdapters

    An object containing all bridge adapters

    -

    Source

    -

    src/utils/contracts.ts:142

    +

    Source

    +

    src/utils/contracts.ts:142

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/getL1GasPrice/index.html b/build/docs/build-on-morph/sdk/functions/getL1GasPrice/index.html index 4b6f9db62..4efae2295 100644 --- a/build/docs/build-on-morph/sdk/functions/getL1GasPrice/index.html +++ b/build/docs/build-on-morph/sdk/functions/getL1GasPrice/index.html @@ -3,12 +3,16 @@ -getL1GasPrice | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +getL1GasPrice | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / getL1GasPrice

    Function: getL1GasPrice()

    @@ -16,13 +20,13 @@

    Function: getL1GasPrice()

    getL1GasPrice(l2Provider): Promise<BigNumber>

    Gets the current L1 gas price as seen on L2.

    -

    Parameters

    +

    Parameters

    l2Provider: ProviderLike

    L2 provider to query the L1 gas price from.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Current L1 gas price as seen on L2.

    -

    Source

    -

    src/l2-provider.ts:57

    +

    Source

    +

    src/l2-provider.ts:57

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/getOEContract/index.html b/build/docs/build-on-morph/sdk/functions/getOEContract/index.html index 984392207..fe5dc5055 100644 --- a/build/docs/build-on-morph/sdk/functions/getOEContract/index.html +++ b/build/docs/build-on-morph/sdk/functions/getOEContract/index.html @@ -3,12 +3,16 @@ -getOEContract | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +getOEContract | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / getOEContract

    Function: getOEContract()

    @@ -19,7 +23,7 @@

    Function: getOEContract()

    the given L2 chain ID. Users can also provide a custom address to connect the contract to instead. If the chain ID is not known then the user MUST provide a custom address or this function will throw an error.

    -

    Parameters

    +

    Parameters

    contractName: "L1MessageQueueWithGasPriceOracle" | "L1GatewayRouter" | "L2GatewayRouter" | "MorphStandardERC20" | "L2WETH" | "L1WETHGateway" | "L2WETHGateway" | "L2ToL1MessagePasser" | "Sequencer" | "Gov" | "L2ETHGateway" | "L2CrossDomainMessenger" | "L2StandardERC20Gateway" | "L2ERC721Gateway" | "L2TxFeeVault" | "L2ERC1155Gateway" | "MorphStandardERC20Factory" | "GasPriceOracle" | "WrappedEther" | "MorphToken" | "L1CrossDomainMessenger" | "Staking" | "Rollup" | "L1ETHGateway" | "L1StandardERC20Gateway" | "L1ERC721Gateway" | "L1ERC1155Gateway" | "EnforcedTxGateway" | "WETH"

    Name of the contract to connect to.

    l2ChainId: number

    @@ -30,10 +34,10 @@

    ParametersCustom address to connect to the contract.

    opts.signerOrProvider?: Provider | Signer

    Signer or provider to connect to the contract.

    -

    Returns

    +

    Returns

    Contract

    An ethers.Contract object connected to the appropriate address and interface.

    -

    Source

    -

    src/utils/contracts.ts:42

    +

    Source

    +

    src/utils/contracts.ts:42

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/hashLowLevelMessageV2/index.html b/build/docs/build-on-morph/sdk/functions/hashLowLevelMessageV2/index.html index 397d56c33..ea3b197e3 100644 --- a/build/docs/build-on-morph/sdk/functions/hashLowLevelMessageV2/index.html +++ b/build/docs/build-on-morph/sdk/functions/hashLowLevelMessageV2/index.html @@ -3,12 +3,16 @@ -hashLowLevelMessageV2 | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +hashLowLevelMessageV2 | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / hashLowLevelMessageV2

    Function: hashLowLevelMessageV2()

    @@ -16,13 +20,13 @@

    Function: hashLowLevelMessageV2()

    hashLowLevelMessageV2(message): string

    Utility for hashing a LowLevelMessage object.

    -

    Parameters

    +

    Parameters

    message: LowLevelMessage

    LowLevelMessage object to hash.

    -

    Returns

    +

    Returns

    string

    Hash of the given LowLevelMessage.

    -

    Source

    -

    src/utils/message-utils.ts:82

    +

    Source

    +

    src/utils/message-utils.ts:82

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/hashMessageHash/index.html b/build/docs/build-on-morph/sdk/functions/hashMessageHash/index.html index 035b7273b..0316f0786 100644 --- a/build/docs/build-on-morph/sdk/functions/hashMessageHash/index.html +++ b/build/docs/build-on-morph/sdk/functions/hashMessageHash/index.html @@ -3,12 +3,16 @@ -hashMessageHash | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +hashMessageHash | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / hashMessageHash

    Function: hashMessageHash()

    @@ -18,13 +22,13 @@

    Function: hashMessageHash()

    Utility for hashing a message hash. This computes the storage slot where the message hash will be stored in state. HashZero is used because the first mapping in the contract is used.

    -

    Parameters

    +

    Parameters

    messageHash: string

    Message hash to hash.

    -

    Returns

    +

    Returns

    string

    Hash of the given message hash.

    -

    Source

    -

    src/utils/message-utils.ts:24

    +

    Source

    +

    src/utils/message-utils.ts:24

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/isL2Provider/index.html b/build/docs/build-on-morph/sdk/functions/isL2Provider/index.html index c227b622d..cc2608717 100644 --- a/build/docs/build-on-morph/sdk/functions/isL2Provider/index.html +++ b/build/docs/build-on-morph/sdk/functions/isL2Provider/index.html @@ -3,12 +3,16 @@ -isL2Provider | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +isL2Provider | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / isL2Provider

    Function: isL2Provider()

    @@ -17,17 +21,17 @@

    Function: isL2Provider()

    Determines if a given Provider is an L2Provider. Will coerce type if true

    -

    Type parameters

    +

    Type parameters

    TProvider extends Provider<TProvider>

    -

    Parameters

    +

    Parameters

    provider: TProvider

    The provider to check

    -

    Returns

    +

    Returns

    provider is L2Provider<TProvider>

    Boolean

    -

    Example

    -
    if (isL2Provider(provider)) {
    // typescript now knows it is of type L2Provider
    const gasPrice = await provider.estimateL2GasPrice(tx)
    }
    -

    Source

    -

    src/l2-provider.ts:157

    +

    Example

    +
    if (isL2Provider(provider)) {
    // typescript now knows it is of type L2Provider
    const gasPrice = await provider.estimateL2GasPrice(tx)
    }
    +

    Source

    +

    src/l2-provider.ts:157

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/migratedWithdrawalGasLimit/index.html b/build/docs/build-on-morph/sdk/functions/migratedWithdrawalGasLimit/index.html index e2edce0bf..64ba31f63 100644 --- a/build/docs/build-on-morph/sdk/functions/migratedWithdrawalGasLimit/index.html +++ b/build/docs/build-on-morph/sdk/functions/migratedWithdrawalGasLimit/index.html @@ -3,12 +3,16 @@ -migratedWithdrawalGasLimit | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +migratedWithdrawalGasLimit | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / migratedWithdrawalGasLimit

    Function: migratedWithdrawalGasLimit()

    @@ -16,12 +20,12 @@

    Function: migratedWithdrawalGasLimit()

    migratedWithdrawalGasLimit(data, chainID): BigNumber

    Compute the min gas limit for a migrated withdrawal.

    -

    Parameters

    +

    Parameters

    data: string

    chainID: number

    -

    Returns

    +

    Returns

    BigNumber

    -

    Source

    -

    src/utils/message-utils.ts:35

    +

    Source

    +

    src/utils/message-utils.ts:35

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/omit/index.html b/build/docs/build-on-morph/sdk/functions/omit/index.html index c24504c73..80f425634 100644 --- a/build/docs/build-on-morph/sdk/functions/omit/index.html +++ b/build/docs/build-on-morph/sdk/functions/omit/index.html @@ -3,12 +3,16 @@ -omit | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +omit | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / omit

    Function: omit()

    @@ -16,18 +20,18 @@

    Function: omit()

    omit<T, K>(obj, ...keys): Omit<T, K>

    Returns a copy of the given object ( ...obj ) with the given keys omitted.

    -

    Type parameters

    +

    Type parameters

    T extends object

    K extends string | number | symbol

    -

    Parameters

    +

    Parameters

    obj: T

    Object to return with the keys omitted.

    • ...keys: K[]

    Keys to omit from the returned object.

    -

    Returns

    +

    Returns

    Omit<T, K>

    A copy of the given object with the given keys omitted.

    -

    Source

    -

    src/utils/misc-utils.ts:11

    +

    Source

    +

    src/utils/misc-utils.ts:11

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/toAddress/index.html b/build/docs/build-on-morph/sdk/functions/toAddress/index.html index 690886a76..1f8763227 100644 --- a/build/docs/build-on-morph/sdk/functions/toAddress/index.html +++ b/build/docs/build-on-morph/sdk/functions/toAddress/index.html @@ -3,12 +3,16 @@ -toAddress | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +toAddress | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / toAddress

    Function: toAddress()

    @@ -16,13 +20,13 @@

    Function: toAddress()

    toAddress(addr): string

    Converts an address-like into a 0x-prefixed address string.

    -

    Parameters

    +

    Parameters

    addr: AddressLike

    Address-like to convert into an address.

    -

    Returns

    +

    Returns

    string

    Address-like as an address.

    -

    Source

    -

    src/utils/coercion.ts:104

    +

    Source

    +

    src/utils/coercion.ts:104

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/toBigNumber/index.html b/build/docs/build-on-morph/sdk/functions/toBigNumber/index.html index 0698c8a8a..0c03c420f 100644 --- a/build/docs/build-on-morph/sdk/functions/toBigNumber/index.html +++ b/build/docs/build-on-morph/sdk/functions/toBigNumber/index.html @@ -3,12 +3,16 @@ -toBigNumber | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +toBigNumber | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / toBigNumber

    Function: toBigNumber()

    @@ -16,13 +20,13 @@

    Function: toBigNumber()

    toBigNumber(num): BigNumber

    Converts a number-like into an ethers BigNumber.

    -

    Parameters

    +

    Parameters

    num: NumberLike

    Number-like to convert into a BigNumber.

    -

    Returns

    +

    Returns

    BigNumber

    Number-like as a BigNumber.

    -

    Source

    -

    src/utils/coercion.ts:84

    +

    Source

    +

    src/utils/coercion.ts:84

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/toNumber/index.html b/build/docs/build-on-morph/sdk/functions/toNumber/index.html index 931fb7fa0..981c87992 100644 --- a/build/docs/build-on-morph/sdk/functions/toNumber/index.html +++ b/build/docs/build-on-morph/sdk/functions/toNumber/index.html @@ -3,12 +3,16 @@ -toNumber | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +toNumber | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / toNumber

    Function: toNumber()

    @@ -16,13 +20,13 @@

    Function: toNumber()

    toNumber(num): number

    Converts a number-like into a number.

    -

    Parameters

    +

    Parameters

    num: NumberLike

    Number-like to convert into a number.

    -

    Returns

    +

    Returns

    number

    Number-like as a number.

    -

    Source

    -

    src/utils/coercion.ts:94

    +

    Source

    +

    src/utils/coercion.ts:94

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/toProvider/index.html b/build/docs/build-on-morph/sdk/functions/toProvider/index.html index 7e10b71c0..2015714dd 100644 --- a/build/docs/build-on-morph/sdk/functions/toProvider/index.html +++ b/build/docs/build-on-morph/sdk/functions/toProvider/index.html @@ -3,12 +3,16 @@ -toProvider | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +toProvider | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / toProvider

    Function: toProvider()

    @@ -17,13 +21,13 @@

    Function: toProvider()

    Converts a ProviderLike into a Provider. Assumes that if the input is a string then it is a JSON-RPC url.

    -

    Parameters

    +

    Parameters

    provider: ProviderLike

    ProviderLike to turn into a Provider.

    -

    Returns

    +

    Returns

    Provider

    Input as a Provider.

    -

    Source

    -

    src/utils/coercion.ts:46

    +

    Source

    +

    src/utils/coercion.ts:46

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/toSignerOrProvider/index.html b/build/docs/build-on-morph/sdk/functions/toSignerOrProvider/index.html index f50153df9..391f0212a 100644 --- a/build/docs/build-on-morph/sdk/functions/toSignerOrProvider/index.html +++ b/build/docs/build-on-morph/sdk/functions/toSignerOrProvider/index.html @@ -3,12 +3,16 @@ -toSignerOrProvider | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +toSignerOrProvider | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / toSignerOrProvider

    Function: toSignerOrProvider()

    @@ -17,13 +21,13 @@

    Function: toSignerOrProvider()

    Converts a SignerOrProviderLike into a Signer or a Provider. Assumes that if the input is a string then it is a JSON-RPC url.

    -

    Parameters

    +

    Parameters

    signerOrProvider: SignerOrProviderLike

    SignerOrProviderLike to turn into a Signer or Provider.

    -

    Returns

    +

    Returns

    Provider | Signer

    Input as a Signer or Provider.

    -

    Source

    -

    src/utils/coercion.ts:25

    +

    Source

    +

    src/utils/coercion.ts:25

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/functions/toTransactionHash/index.html b/build/docs/build-on-morph/sdk/functions/toTransactionHash/index.html index 041acef38..a61ad063a 100644 --- a/build/docs/build-on-morph/sdk/functions/toTransactionHash/index.html +++ b/build/docs/build-on-morph/sdk/functions/toTransactionHash/index.html @@ -3,12 +3,16 @@ -toTransactionHash | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +toTransactionHash | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / toTransactionHash

    Function: toTransactionHash()

    @@ -16,13 +20,13 @@

    Function: toTransactionHash()

    toTransactionHash(transaction): string

    Pulls a transaction hash out of a TransactionLike object.

    -

    Parameters

    +

    Parameters

    transaction: TransactionLike

    TransactionLike to convert into a transaction hash.

    -

    Returns

    +

    Returns

    string

    Transaction hash corresponding to the TransactionLike input.

    -

    Source

    -

    src/utils/coercion.ts:62

    +

    Source

    +

    src/utils/coercion.ts:62

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/globals/index.html b/build/docs/build-on-morph/sdk/globals/index.html index 91b8ddb12..17d164c5b 100644 --- a/build/docs/build-on-morph/sdk/globals/index.html +++ b/build/docs/build-on-morph/sdk/globals/index.html @@ -3,34 +3,38 @@ -Use SDK to interact with Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Use SDK to interact with Morph | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk

    The @morph-l2/sdk package provides a set of tools for interacting with Morph.

    -

    Installation

    -
    npm install @morph-l2/sdk@latest
    -

    Docs

    +

    Installation

    +
    npm install @morph-l2/sdk@latest
    +

    Docs

    You can find auto-generated API documentation over at docs.morphl2.io.

    -

    Using the SDK

    -

    CrossChainMessenger

    +

    Using the SDK

    +

    CrossChainMessenger

    The CrossChainMessenger class simplifies the process of moving assets and data between Ethereum and Morph. You can use this class to, for example, initiate a withdrawal of ERC20 tokens from Morph back to Ethereum, accurately track when the withdrawal is ready to be finalized on Ethereum, and execute the finalization transaction after the challenge period has elapsed. The CrossChainMessenger can handle deposits and withdrawals of ETH and any ERC20-compatible token. The CrossChainMessenger automatically connects to all relevant contracts so complex configuration is not necessary.

    - +

    The Morph SDK includes various utilities for handling Morph's transaction fee model. For instance, estimateTotalGasCost will estimate the total cost (in wei) to send at transaction on Morph including both the L2 execution cost and the L1 data cost. You can also use the asL2Provider function to wrap an ethers Provider object into an L2Provider which will have all of these helper functions attached.

    -

    Other utilities

    +

    Other utilities

    The SDK contains other useful helper functions and constants. For a complete list, refer to the auto-generated SDK documentation

    -

    Documents

    -

    Enumerations

    +

    Documents

    +

    Enumerations

    -

    Classes

    +

    Classes

    -

    Interfaces

    +

    Interfaces

    -

    Type Aliases

    +

    Type Aliases

    -

    Variables

    +

    Variables

    -

    Functions

    +

    Functions

    +
    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/BridgeAdapterData/index.html b/build/docs/build-on-morph/sdk/interfaces/BridgeAdapterData/index.html index b8acb55f6..8db6c5360 100644 --- a/build/docs/build-on-morph/sdk/interfaces/BridgeAdapterData/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/BridgeAdapterData/index.html @@ -3,17 +3,21 @@ -BridgeAdapterData | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +BridgeAdapterData | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Indexable

    +

    [name: string]: object

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/BridgeAdapters/index.html b/build/docs/build-on-morph/sdk/interfaces/BridgeAdapters/index.html index 3e797f7e0..9d30a4e6b 100644 --- a/build/docs/build-on-morph/sdk/interfaces/BridgeAdapters/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/BridgeAdapters/index.html @@ -3,17 +3,21 @@ -BridgeAdapters | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +BridgeAdapters | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Indexable

    +

    [name: string]: IBridgeAdapter

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/CoreCrossChainMessage/index.html b/build/docs/build-on-morph/sdk/interfaces/CoreCrossChainMessage/index.html index e6c3b8bf7..62e633277 100644 --- a/build/docs/build-on-morph/sdk/interfaces/CoreCrossChainMessage/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/CoreCrossChainMessage/index.html @@ -3,61 +3,65 @@ -CoreCrossChainMessage | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +CoreCrossChainMessage | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / CoreCrossChainMessage

    Interface: CoreCrossChainMessage

    Core components of a cross chain message.

    -

    Extended by

    +

    Extended by

    -

    Properties

    -

    message

    +

    Properties

    +

    message

    message: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:242


    -

    messageNonce

    +

    messageNonce

    messageNonce: BigNumber

    -

    Source

    +

    Source

    src/interfaces/types.ts:243


    -

    minGasLimit

    +

    minGasLimit

    minGasLimit: BigNumber

    -

    Source

    +

    Source

    src/interfaces/types.ts:245


    -

    sender

    +

    sender

    sender: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:240


    -

    target

    +

    target

    target: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:241


    -

    value

    +

    value

    value: BigNumber

    -

    Source

    -

    src/interfaces/types.ts:244

    +

    Source

    +

    src/interfaces/types.ts:244

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/CrossChainMessage/index.html b/build/docs/build-on-morph/sdk/interfaces/CrossChainMessage/index.html index 4a9cc7d91..a935bd91b 100644 --- a/build/docs/build-on-morph/sdk/interfaces/CrossChainMessage/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/CrossChainMessage/index.html @@ -3,102 +3,106 @@ -CrossChainMessage | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +CrossChainMessage | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / CrossChainMessage

    Interface: CrossChainMessage

    Describes a message that is sent between L1 and L2. Direction determines where the message was sent from and where it's being sent to.

    -

    Extends

    +

    Extends

    -

    Properties

    -

    blockNumber

    +

    Properties

    +

    blockNumber

    blockNumber: number

    -

    Source

    +

    Source

    src/interfaces/types.ts:255


    -

    direction

    +

    direction

    direction: MessageDirection

    -

    Source

    +

    Source

    src/interfaces/types.ts:253


    -

    logIndex

    +

    logIndex

    logIndex: number

    -

    Source

    +

    Source

    src/interfaces/types.ts:254


    -

    message

    +

    message

    message: string

    -

    Inherited from

    +

    Inherited from

    CoreCrossChainMessage.message

    -

    Source

    +

    Source

    src/interfaces/types.ts:242


    -

    messageNonce

    +

    messageNonce

    messageNonce: BigNumber

    -

    Inherited from

    +

    Inherited from

    CoreCrossChainMessage.messageNonce

    -

    Source

    +

    Source

    src/interfaces/types.ts:243


    -

    minGasLimit

    +

    minGasLimit

    minGasLimit: BigNumber

    -

    Inherited from

    +

    Inherited from

    CoreCrossChainMessage.minGasLimit

    -

    Source

    +

    Source

    src/interfaces/types.ts:245


    -

    sender

    +

    sender

    sender: string

    -

    Inherited from

    +

    Inherited from

    CoreCrossChainMessage.sender

    -

    Source

    +

    Source

    src/interfaces/types.ts:240


    -

    target

    +

    target

    target: string

    -

    Inherited from

    +

    Inherited from

    CoreCrossChainMessage.target

    -

    Source

    +

    Source

    src/interfaces/types.ts:241


    -

    transactionHash

    +

    transactionHash

    transactionHash: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:256


    -

    value

    +

    value

    value: BigNumber

    -

    Inherited from

    +

    Inherited from

    CoreCrossChainMessage.value

    -

    Source

    -

    src/interfaces/types.ts:244

    +

    Source

    +

    src/interfaces/types.ts:244

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/CrossChainMessageRequest/index.html b/build/docs/build-on-morph/sdk/interfaces/CrossChainMessageRequest/index.html index ff2f4ad92..0ec3334f6 100644 --- a/build/docs/build-on-morph/sdk/interfaces/CrossChainMessageRequest/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/CrossChainMessageRequest/index.html @@ -3,36 +3,40 @@ -CrossChainMessageRequest | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +CrossChainMessageRequest | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / CrossChainMessageRequest

    Interface: CrossChainMessageRequest

    Partial message that needs to be signed and executed by a specific signer.

    -

    Properties

    -

    direction

    +

    Properties

    +

    direction

    direction: MessageDirection

    -

    Source

    +

    Source

    src/interfaces/types.ts:231


    -

    message

    +

    message

    message: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:233


    -

    target

    +

    target

    target: string

    -

    Source

    -

    src/interfaces/types.ts:232

    +

    Source

    +

    src/interfaces/types.ts:232

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/IActionOptions/index.html b/build/docs/build-on-morph/sdk/interfaces/IActionOptions/index.html index ea10dbab3..f3ff33b16 100644 --- a/build/docs/build-on-morph/sdk/interfaces/IActionOptions/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/IActionOptions/index.html @@ -3,70 +3,74 @@ -IActionOptions | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +IActionOptions | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / IActionOptions

    Interface: IActionOptions

    -

    Param

    +

    Param

    Optional signer to use to send the transaction.

    -

    Param

    +

    Param

    Optional address to receive the funds on chain. Defaults to sender.

    -

    Param

    +

    Param

    Direction to search for messages in. If not provided, will attempt to

    • automatically search both directions under the assumption that a transaction hash will only
    • exist on one chain. If the hash exists on both chains, will throw an error.
    -

    Param

    +

    Param

    Optional transaction overrides.

    -

    Properties

    -

    direction?

    +

    Properties

    +

    direction?

    optional direction: MessageDirection

    -

    Source

    +

    Source

    src/interfaces/types.ts:412


    -

    from?

    +

    from?

    optional from: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:410


    -

    overrides?

    +

    overrides?

    optional overrides: object & CallOverrides

    -

    Type declaration

    -
    gatewayAddress?
    +

    Type declaration

    +
    gatewayAddress?

    optional gatewayAddress: string

    -
    gatewayName?
    +
    gatewayName?

    optional gatewayName: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:413


    -

    recipient?

    +

    recipient?

    optional recipient: AddressLike

    -

    Source

    +

    Source

    src/interfaces/types.ts:411


    -

    signer?

    +

    signer?

    optional signer: Signer

    -

    Source

    -

    src/interfaces/types.ts:409

    +

    Source

    +

    src/interfaces/types.ts:409

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/IBridgeAdapter/index.html b/build/docs/build-on-morph/sdk/interfaces/IBridgeAdapter/index.html index 88428e8e6..3dcfab8dc 100644 --- a/build/docs/build-on-morph/sdk/interfaces/IBridgeAdapter/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/IBridgeAdapter/index.html @@ -3,27 +3,31 @@ -IBridgeAdapter | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +IBridgeAdapter | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / IBridgeAdapter

    Interface: IBridgeAdapter

    Represents an adapter for an L1 - L2 token bridge. Each custom bridge currently needs its own adapter because the bridge interface is not standardized. This may change in the future.

    -

    Properties

    -

    estimateGas

    +

    Properties

    +

    estimateGas

    estimateGas: object

    Object that holds the functions that estimates the gas required for a given transaction. Follows the pattern used by ethers.js.

    -

    approve()

    +

    approve()

    Estimates gas required to approve some tokens to deposit into the L2 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -32,12 +36,12 @@
    ParametersAmount of the token to approve.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    Gas estimate for the transaction.

    -

    deposit()

    +

    deposit()

    Estimates gas required to deposit some tokens into the L2 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -46,12 +50,12 @@
    ParametersAmount of the token to deposit.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    Gas estimate for the transaction.

    -

    withdraw()

    +

    withdraw()

    Estimates gas required to withdraw some tokens back to the L1 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -60,45 +64,45 @@
    ParametersAmount of the token to withdraw.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<BigNumber>

    Gas estimate for the transaction.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:221


    -

    l1Bridge

    +

    l1Bridge

    l1Bridge: Contract

    L1 bridge contract.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:38


    -

    l2Bridge

    +

    l2Bridge

    l2Bridge: Contract

    L2 bridge contract.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:43


    -

    messenger

    +

    messenger

    messenger: CrossChainMessenger

    Provider used to make queries related to cross-chain interactions.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:33


    -

    populateTransaction

    +

    populateTransaction

    populateTransaction: object

    Object that holds the functions that generate transactions to be signed by the user. Follows the pattern used by ethers.js.

    -

    approve()

    +

    approve()

    Generates a transaction for approving some tokens to deposit into the L2 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -107,12 +111,12 @@
    ParametersAmount of the token to approve.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    Transaction that can be signed and executed to deposit the tokens.

    -

    deposit()

    +

    deposit()

    Generates a transaction for depositing some tokens into the L2 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -121,12 +125,12 @@
    ParametersAmount of the token to deposit.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    Transaction that can be signed and executed to deposit the tokens.

    -

    withdraw()

    +

    withdraw()

    Generates a transaction for withdrawing some tokens back to the L1 chain.

    -
    Parameters
    +
    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -135,36 +139,36 @@
    ParametersAmount of the token to withdraw.

    opts?: IActionOptions

    Additional options.

    -
    Returns
    +
    Returns

    Promise<TransactionRequest>

    Transaction that can be signed and executed to withdraw the tokens.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:167

    -

    Methods

    -

    approval()

    +

    Methods

    +

    approval()

    approval(l1Token, l2Token, opts?): Promise<BigNumber>

    Queries the account's approval amount for a given L1 token.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    The L2 token address.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Amount of tokens approved for deposits from the account.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:103


    -

    approve()

    +

    approve()

    approve(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Approves a deposit into the L2 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -175,18 +179,18 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the approval transaction.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:119


    -

    deposit()

    +

    deposit()

    deposit(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Deposits some tokens into the L2 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -197,18 +201,18 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the deposit transaction.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:137


    -

    getDepositsByAddress()

    +

    getDepositsByAddress()

    getDepositsByAddress(address, opts?): Promise<TokenBridgeMessage[]>

    Gets all deposits for a given address.

    -

    Parameters

    +

    Parameters

    address: AddressLike

    Address to search for messages from.

    opts?

    @@ -219,18 +223,18 @@

    Parametersopts.toBlock?: BlockTag

    Block to stop searching for messages at. If not provided, will stop at the latest known block ("latest").

    -

    Returns

    +

    Returns

    Promise<TokenBridgeMessage[]>

    All deposit token bridge messages sent by the given address.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:56


    -

    getWithdrawalsByAddress()

    +

    getWithdrawalsByAddress()

    getWithdrawalsByAddress(address, opts?): Promise<TokenBridgeMessage[]>

    Gets all withdrawals for a given address.

    -

    Parameters

    +

    Parameters

    address: AddressLike

    Address to search for messages from.

    opts?

    @@ -241,34 +245,34 @@

    Parametersopts.toBlock?: BlockTag

    Block to stop searching for messages at. If not provided, will stop at the latest known block ("latest").

    -

    Returns

    +

    Returns

    Promise<TokenBridgeMessage[]>

    All withdrawal token bridge messages sent by the given address.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:75


    -

    supportsTokenPair()

    +

    supportsTokenPair()

    supportsTokenPair(l1Token, l2Token): Promise<boolean>

    Checks whether the given token pair is supported by the bridge.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    The L2 token address.

    -

    Returns

    +

    Returns

    Promise<boolean>

    Whether the given token pair is supported by the bridge.

    -

    Source

    +

    Source

    src/interfaces/bridge-adapter.ts:90


    -

    withdraw()

    +

    withdraw()

    withdraw(l1Token, l2Token, amount, signer, opts?): Promise<TransactionResponse>

    Withdraws some tokens back to the L1 chain.

    -

    Parameters

    +

    Parameters

    l1Token: AddressLike

    The L1 token address.

    l2Token: AddressLike

    @@ -279,10 +283,10 @@

    ParametersSigner used to sign and send the transaction.

    opts?: IActionOptions

    Additional options.

    -

    Returns

    +

    Returns

    Promise<TransactionResponse>

    Transaction response for the withdraw transaction.

    -

    Source

    -

    src/interfaces/bridge-adapter.ts:155

    +

    Source

    +

    src/interfaces/bridge-adapter.ts:155

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/L2Block/index.html b/build/docs/build-on-morph/sdk/interfaces/L2Block/index.html index 597b34986..7a3549911 100644 --- a/build/docs/build-on-morph/sdk/interfaces/L2Block/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/L2Block/index.html @@ -3,144 +3,148 @@ -L2Block | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L2Block | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L2Block

    Interface: L2Block

    JSON block representation when returned by L2Geth nodes. Just a normal block but with an added stateRoot field.

    -

    Extends

    +

    Extends

    • Block
    -

    Properties

    -

    _difficulty

    +

    Properties

    +

    _difficulty

    _difficulty: BigNumber

    -

    Inherited from

    +

    Inherited from

    Block._difficulty

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:41


    -

    baseFeePerGas?

    +

    baseFeePerGas?

    optional baseFeePerGas: BigNumber

    -

    Inherited from

    +

    Inherited from

    Block.baseFeePerGas

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:46


    -

    difficulty

    +

    difficulty

    difficulty: number

    -

    Inherited from

    +

    Inherited from

    Block.difficulty

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:40


    -

    extraData

    +

    extraData

    extraData: string

    -

    Inherited from

    +

    Inherited from

    Block.extraData

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:45


    -

    gasLimit

    +

    gasLimit

    gasLimit: BigNumber

    -

    Inherited from

    +

    Inherited from

    Block.gasLimit

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:42


    -

    gasUsed

    +

    gasUsed

    gasUsed: BigNumber

    -

    Inherited from

    +

    Inherited from

    Block.gasUsed

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:43


    -

    hash

    +

    hash

    hash: string

    -

    Inherited from

    +

    Inherited from

    Block.hash

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:35


    -

    miner

    +

    miner

    miner: string

    -

    Inherited from

    +

    Inherited from

    Block.miner

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:44


    -

    nonce

    +

    nonce

    nonce: string

    -

    Inherited from

    +

    Inherited from

    Block.nonce

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:39


    -

    number

    +

    number

    number: number

    -

    Inherited from

    +

    Inherited from

    Block.number

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:37


    -

    parentHash

    +

    parentHash

    parentHash: string

    -

    Inherited from

    +

    Inherited from

    Block.parentHash

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:36


    -

    stateRoot

    +

    stateRoot

    stateRoot: string

    -

    Source

    +

    Source

    src/interfaces/l2-provider.ts:27


    -

    timestamp

    +

    timestamp

    timestamp: number

    -

    Inherited from

    +

    Inherited from

    Block.timestamp

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:38


    -

    transactions

    +

    transactions

    transactions: string[]

    -

    Inherited from

    +

    Inherited from

    Block.transactions

    -

    Source

    -

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:49

    +

    Source

    +

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:49

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/L2BlockWithTransactions/index.html b/build/docs/build-on-morph/sdk/interfaces/L2BlockWithTransactions/index.html index 27cadf4b0..3ef6c7063 100644 --- a/build/docs/build-on-morph/sdk/interfaces/L2BlockWithTransactions/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/L2BlockWithTransactions/index.html @@ -3,144 +3,148 @@ -L2BlockWithTransactions | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L2BlockWithTransactions | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L2BlockWithTransactions

    Interface: L2BlockWithTransactions

    JSON block representation when returned by L2Geth nodes. Just a normal block but with L2Transaction objects instead of the standard transaction response object.

    -

    Extends

    +

    Extends

    • BlockWithTransactions
    -

    Properties

    -

    _difficulty

    +

    Properties

    +

    _difficulty

    _difficulty: BigNumber

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions._difficulty

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:41


    -

    baseFeePerGas?

    +

    baseFeePerGas?

    optional baseFeePerGas: BigNumber

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.baseFeePerGas

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:46


    -

    difficulty

    +

    difficulty

    difficulty: number

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.difficulty

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:40


    -

    extraData

    +

    extraData

    extraData: string

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.extraData

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:45


    -

    gasLimit

    +

    gasLimit

    gasLimit: BigNumber

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.gasLimit

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:42


    -

    gasUsed

    +

    gasUsed

    gasUsed: BigNumber

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.gasUsed

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:43


    -

    hash

    +

    hash

    hash: string

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.hash

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:35


    -

    miner

    +

    miner

    miner: string

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.miner

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:44


    -

    nonce

    +

    nonce

    nonce: string

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.nonce

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:39


    -

    number

    +

    number

    number: number

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.number

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:37


    -

    parentHash

    +

    parentHash

    parentHash: string

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.parentHash

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:36


    -

    stateRoot

    +

    stateRoot

    stateRoot: string

    -

    Source

    +

    Source

    src/interfaces/l2-provider.ts:35


    -

    timestamp

    +

    timestamp

    timestamp: number

    -

    Inherited from

    +

    Inherited from

    BlockWithTransactions.timestamp

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:38


    -

    transactions

    +

    transactions

    transactions: [L2Transaction]

    -

    Overrides

    +

    Overrides

    BlockWithTransactions.transactions

    -

    Source

    -

    src/interfaces/l2-provider.ts:36

    +

    Source

    +

    src/interfaces/l2-provider.ts:36

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/L2Transaction/index.html b/build/docs/build-on-morph/sdk/interfaces/L2Transaction/index.html index 564bdaaab..4f8563b66 100644 --- a/build/docs/build-on-morph/sdk/interfaces/L2Transaction/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/L2Transaction/index.html @@ -3,251 +3,255 @@ -L2Transaction | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L2Transaction | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L2Transaction

    Interface: L2Transaction

    JSON transaction representation when returned by L2Geth nodes. This is simply an extension to the standard transaction response type. You do NOT need to use this type unless you care about having typed access to L2-specific fields.

    -

    Extends

    +

    Extends

    • TransactionResponse
    -

    Properties

    -

    accessList?

    +

    Properties

    +

    accessList?

    optional accessList: AccessList

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.accessList

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:40


    -

    blockHash?

    +

    blockHash?

    optional blockHash: string

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.blockHash

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:26


    -

    blockNumber?

    +

    blockNumber?

    optional blockNumber: number

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.blockNumber

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:25


    -

    chainId

    +

    chainId

    chainId: number

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.chainId

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:35


    -

    confirmations

    +

    confirmations

    confirmations: number

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.confirmations

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:28


    -

    data

    +

    data

    data: string

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.data

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:33


    -

    from

    +

    from

    from: string

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.from

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:29


    -

    gasLimit

    +

    gasLimit

    gasLimit: BigNumber

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.gasLimit

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:31


    -

    gasPrice?

    +

    gasPrice?

    optional gasPrice: BigNumber

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.gasPrice

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:32


    -

    hash

    +

    hash

    hash: string

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.hash

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:24


    -

    l1BlockNumber

    +

    l1BlockNumber

    l1BlockNumber: number

    -

    Source

    +

    Source

    src/interfaces/l2-provider.ts:16


    -

    l1TxOrigin

    +

    l1TxOrigin

    l1TxOrigin: string

    -

    Source

    +

    Source

    src/interfaces/l2-provider.ts:17


    -

    maxFeePerGas?

    +

    maxFeePerGas?

    optional maxFeePerGas: BigNumber

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.maxFeePerGas

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:42


    -

    maxPriorityFeePerGas?

    +

    maxPriorityFeePerGas?

    optional maxPriorityFeePerGas: BigNumber

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.maxPriorityFeePerGas

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:41


    -

    nonce

    +

    nonce

    nonce: number

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.nonce

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:30


    -

    queueOrigin

    +

    queueOrigin

    queueOrigin: string

    -

    Source

    +

    Source

    src/interfaces/l2-provider.ts:18


    -

    r?

    +

    r?

    optional r: string

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.r

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:36


    -

    raw?

    +

    raw?

    optional raw: string

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.raw

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:30


    -

    rawTransaction

    +

    rawTransaction

    rawTransaction: string

    -

    Source

    +

    Source

    src/interfaces/l2-provider.ts:19


    -

    s?

    +

    s?

    optional s: string

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.s

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:37


    -

    timestamp?

    +

    timestamp?

    optional timestamp: number

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.timestamp

    -

    Source

    +

    Source

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:27


    -

    to?

    +

    to?

    optional to: string

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.to

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:28


    -

    type?

    +

    type?

    optional type: number

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.type

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:39


    -

    v?

    +

    v?

    optional v: number

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.v

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:38


    -

    value

    +

    value

    value: BigNumber

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.value

    -

    Source

    +

    Source

    node_modules/@ethersproject/transactions/lib/index.d.ts:34


    -

    wait()

    +

    wait()

    wait: (confirmations?) => Promise<TransactionReceipt>

    -

    Parameters

    +

    Parameters

    confirmations?: number

    -

    Returns

    +

    Returns

    Promise<TransactionReceipt>

    -

    Inherited from

    +

    Inherited from

    TransactionResponse.wait

    -

    Source

    -

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:31

    +

    Source

    +

    node_modules/@ethersproject/abstract-provider/lib/index.d.ts:31

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/MessageReceipt/index.html b/build/docs/build-on-morph/sdk/interfaces/MessageReceipt/index.html index 34114a61d..3841b4c9b 100644 --- a/build/docs/build-on-morph/sdk/interfaces/MessageReceipt/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/MessageReceipt/index.html @@ -3,29 +3,33 @@ -MessageReceipt | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +MessageReceipt | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/interfaces/types.ts:308

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/OEContracts/index.html b/build/docs/build-on-morph/sdk/interfaces/OEContracts/index.html index d0df883e2..389b77c77 100644 --- a/build/docs/build-on-morph/sdk/interfaces/OEContracts/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/OEContracts/index.html @@ -3,30 +3,34 @@ -OEContracts | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +OEContracts | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/interfaces/types.ts:122

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/OEContractsLike/index.html b/build/docs/build-on-morph/sdk/interfaces/OEContractsLike/index.html index 1f183de02..f6470d6a1 100644 --- a/build/docs/build-on-morph/sdk/interfaces/OEContractsLike/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/OEContractsLike/index.html @@ -3,30 +3,34 @@ -OEContractsLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +OEContractsLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/interfaces/types.ts:147

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/OEL1Contracts/index.html b/build/docs/build-on-morph/sdk/interfaces/OEL1Contracts/index.html index 71956cd86..122e561a6 100644 --- a/build/docs/build-on-morph/sdk/interfaces/OEL1Contracts/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/OEL1Contracts/index.html @@ -3,106 +3,110 @@ -OEL1Contracts | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +OEL1Contracts | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / OEL1Contracts

    Interface: OEL1Contracts

    L1 contract references.

    -

    Properties

    -

    EnforcedTxGateway

    +

    Properties

    +

    EnforcedTxGateway

    EnforcedTxGateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:64


    -

    L1CrossDomainMessenger

    +

    L1CrossDomainMessenger

    L1CrossDomainMessenger: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:54


    -

    L1ERC1155Gateway

    +

    L1ERC1155Gateway

    L1ERC1155Gateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:63


    -

    L1ERC721Gateway

    +

    L1ERC721Gateway

    L1ERC721Gateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:62


    -

    L1ETHGateway

    +

    L1ETHGateway

    L1ETHGateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:60


    -

    L1GatewayRouter

    +

    L1GatewayRouter

    L1GatewayRouter: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:59


    -

    L1MessageQueueWithGasPriceOracle

    +

    L1MessageQueueWithGasPriceOracle

    L1MessageQueueWithGasPriceOracle: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:55


    -

    L1StandardERC20Gateway

    +

    L1StandardERC20Gateway

    L1StandardERC20Gateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:61


    -

    L1WETHGateway

    +

    L1WETHGateway

    L1WETHGateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:66


    -

    MorphToken?

    +

    MorphToken?

    optional MorphToken: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:68


    -

    Rollup

    +

    Rollup

    Rollup: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:58


    -

    Staking

    +

    Staking

    Staking: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:56


    -

    WETH

    +

    WETH

    WETH: Contract

    -

    Source

    -

    src/interfaces/types.ts:65

    +

    Source

    +

    src/interfaces/types.ts:65

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/OEL2Contracts/index.html b/build/docs/build-on-morph/sdk/interfaces/OEL2Contracts/index.html index 8de36ed72..e885b3058 100644 --- a/build/docs/build-on-morph/sdk/interfaces/OEL2Contracts/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/OEL2Contracts/index.html @@ -3,134 +3,138 @@ -OEL2Contracts | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +OEL2Contracts | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / OEL2Contracts

    Interface: OEL2Contracts

    L2 contract references.

    -

    Properties

    -

    GasPriceOracle

    +

    Properties

    +

    GasPriceOracle

    GasPriceOracle: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:97


    -

    Gov

    +

    Gov

    Gov: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:86


    -

    L2CrossDomainMessenger

    +

    L2CrossDomainMessenger

    L2CrossDomainMessenger: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:89


    -

    L2ERC1155Gateway

    +

    L2ERC1155Gateway

    L2ERC1155Gateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:94


    -

    L2ERC721Gateway

    +

    L2ERC721Gateway

    L2ERC721Gateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:91


    -

    L2ETHGateway

    +

    L2ETHGateway

    L2ETHGateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:88


    -

    L2GatewayRouter

    +

    L2GatewayRouter

    L2GatewayRouter: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:84


    -

    L2StandardERC20Gateway

    +

    L2StandardERC20Gateway

    L2StandardERC20Gateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:90


    -

    L2ToL1MessagePasser

    +

    L2ToL1MessagePasser

    L2ToL1MessagePasser: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:83


    -

    L2TxFeeVault

    +

    L2TxFeeVault

    L2TxFeeVault: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:92


    -

    L2WETH

    +

    L2WETH

    L2WETH: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:98


    -

    L2WETHGateway

    +

    L2WETHGateway

    L2WETHGateway: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:99


    -

    MorphStandardERC20

    +

    MorphStandardERC20

    MorphStandardERC20: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:95


    -

    MorphStandardERC20Factory

    +

    MorphStandardERC20Factory

    MorphStandardERC20Factory: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:96


    -

    MorphToken?

    +

    MorphToken?

    optional MorphToken: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:102


    -

    Sequencer

    +

    Sequencer

    Sequencer: Contract

    -

    Source

    +

    Source

    src/interfaces/types.ts:85


    -

    WrappedEther

    +

    WrappedEther

    WrappedEther: Contract

    -

    Source

    -

    src/interfaces/types.ts:100

    +

    Source

    +

    src/interfaces/types.ts:100

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/ProvenWithdrawal/index.html b/build/docs/build-on-morph/sdk/interfaces/ProvenWithdrawal/index.html index b98fbf509..c18ed1cd2 100644 --- a/build/docs/build-on-morph/sdk/interfaces/ProvenWithdrawal/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/ProvenWithdrawal/index.html @@ -3,36 +3,40 @@ -ProvenWithdrawal | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +ProvenWithdrawal | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / ProvenWithdrawal

    Interface: ProvenWithdrawal

    ProvenWithdrawal in L1CrossDomainMessenger

    -

    Properties

    -

    timestamp

    +

    Properties

    +

    timestamp

    timestamp: BigNumber

    -

    Source

    +

    Source

    src/interfaces/types.ts:316


    -

    withdrawalIndex

    +

    withdrawalIndex

    withdrawalIndex: BigNumber

    -

    Source

    +

    Source

    src/interfaces/types.ts:319


    -

    withdrawalRoot

    +

    withdrawalRoot

    withdrawalRoot: string

    -

    Source

    -

    src/interfaces/types.ts:318

    +

    Source

    +

    src/interfaces/types.ts:318

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/StateRoot/index.html b/build/docs/build-on-morph/sdk/interfaces/StateRoot/index.html index 10ca3629b..745ba28a3 100644 --- a/build/docs/build-on-morph/sdk/interfaces/StateRoot/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/StateRoot/index.html @@ -3,36 +3,40 @@ -StateRoot | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +StateRoot | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / StateRoot

    Interface: StateRoot

    Information about a state root, including header, block number, and root iself.

    -

    Properties

    -

    batch

    +

    Properties

    +

    batch

    batch: StateRootBatch

    -

    Source

    +

    Source

    src/interfaces/types.ts:339


    -

    stateRoot

    +

    stateRoot

    stateRoot: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:337


    -

    stateRootIndexInBatch

    +

    stateRootIndexInBatch

    stateRootIndexInBatch: number

    -

    Source

    -

    src/interfaces/types.ts:338

    +

    Source

    +

    src/interfaces/types.ts:338

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/StateRootBatch/index.html b/build/docs/build-on-morph/sdk/interfaces/StateRootBatch/index.html index 4e34a2df1..abaa0f82d 100644 --- a/build/docs/build-on-morph/sdk/interfaces/StateRootBatch/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/StateRootBatch/index.html @@ -3,36 +3,40 @@ -StateRootBatch | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +StateRootBatch | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/interfaces/types.ts:348

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/StateRootBatchHeader/index.html b/build/docs/build-on-morph/sdk/interfaces/StateRootBatchHeader/index.html index facca04ab..2e5eae247 100644 --- a/build/docs/build-on-morph/sdk/interfaces/StateRootBatchHeader/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/StateRootBatchHeader/index.html @@ -3,50 +3,54 @@ -StateRootBatchHeader | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +StateRootBatchHeader | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / StateRootBatchHeader

    Interface: StateRootBatchHeader

    Header for a state root batch.

    -

    Properties

    -

    batchIndex

    +

    Properties

    +

    batchIndex

    batchIndex: BigNumber

    -

    Source

    +

    Source

    src/interfaces/types.ts:326


    -

    batchRoot

    +

    batchRoot

    batchRoot: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:327


    -

    batchSize

    +

    batchSize

    batchSize: BigNumber

    -

    Source

    +

    Source

    src/interfaces/types.ts:328


    -

    extraData

    +

    extraData

    extraData: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:330


    -

    prevTotalElements

    +

    prevTotalElements

    prevTotalElements: BigNumber

    -

    Source

    -

    src/interfaces/types.ts:329

    +

    Source

    +

    src/interfaces/types.ts:329

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/TokenBridgeMessage/index.html b/build/docs/build-on-morph/sdk/interfaces/TokenBridgeMessage/index.html index 5b85fbee5..993e4305e 100644 --- a/build/docs/build-on-morph/sdk/interfaces/TokenBridgeMessage/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/TokenBridgeMessage/index.html @@ -3,86 +3,90 @@ -TokenBridgeMessage | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +TokenBridgeMessage | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / TokenBridgeMessage

    Interface: TokenBridgeMessage

    Describes a token withdrawal or deposit, along with the underlying raw cross chain message behind the deposit or withdrawal.

    -

    Properties

    -

    amount

    +

    Properties

    +

    amount

    amount: BigNumber

    -

    Source

    +

    Source

    src/interfaces/types.ts:280


    -

    blockNumber

    +

    blockNumber

    blockNumber: number

    -

    Source

    +

    Source

    src/interfaces/types.ts:283


    -

    data

    +

    data

    data: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:281


    -

    direction

    +

    direction

    direction: MessageDirection

    -

    Source

    +

    Source

    src/interfaces/types.ts:275


    -

    from

    +

    from

    from: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:276


    -

    l1Token

    +

    l1Token

    l1Token: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:278


    -

    l2Token

    +

    l2Token

    l2Token: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:279


    -

    logIndex

    +

    logIndex

    logIndex: number

    -

    Source

    +

    Source

    src/interfaces/types.ts:282


    -

    to

    +

    to

    to: string

    -

    Source

    +

    Source

    src/interfaces/types.ts:277


    -

    transactionHash

    +

    transactionHash

    transactionHash: string

    -

    Source

    -

    src/interfaces/types.ts:284

    +

    Source

    +

    src/interfaces/types.ts:284

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/WithdrawMessageProof/index.html b/build/docs/build-on-morph/sdk/interfaces/WithdrawMessageProof/index.html index 6d9babbb2..e1326b99d 100644 --- a/build/docs/build-on-morph/sdk/interfaces/WithdrawMessageProof/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/WithdrawMessageProof/index.html @@ -3,42 +3,46 @@ -WithdrawMessageProof | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +WithdrawMessageProof | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / WithdrawMessageProof

    Interface: WithdrawMessageProof

    -

    Properties

    -

    withdrawalIndex

    +

    Properties

    +

    withdrawalIndex

    withdrawalIndex: BigNumber

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:61


    -

    withdrawalLeaf

    +

    withdrawalLeaf

    withdrawalLeaf: any

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:64


    -

    withdrawalProof

    +

    withdrawalProof

    withdrawalProof: string[]

    -

    Source

    +

    Source

    src/cross-chain-messenger.ts:62


    -

    withdrawalRoot

    +

    withdrawalRoot

    withdrawalRoot: string

    -

    Source

    -

    src/cross-chain-messenger.ts:63

    +

    Source

    +

    src/cross-chain-messenger.ts:63

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/interfaces/WithdrawalEntry/index.html b/build/docs/build-on-morph/sdk/interfaces/WithdrawalEntry/index.html index a4e7c4490..5b18cafbb 100644 --- a/build/docs/build-on-morph/sdk/interfaces/WithdrawalEntry/index.html +++ b/build/docs/build-on-morph/sdk/interfaces/WithdrawalEntry/index.html @@ -3,23 +3,27 @@ -WithdrawalEntry | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +WithdrawalEntry | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / WithdrawalEntry

    Interface: WithdrawalEntry

    Represents a withdrawal entry within the logs of a L2 to L1 CrossChainMessage

    -

    Properties

    -

    MessagePassed

    +

    Properties

    +

    MessagePassed

    MessagePassed: any

    -

    Source

    -

    src/interfaces/types.ts:292

    +

    Source

    +

    src/interfaces/types.ts:292

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/intro/index.html b/build/docs/build-on-morph/sdk/intro/index.html index 8c2b12e3f..f7dd762ce 100644 --- a/build/docs/build-on-morph/sdk/intro/index.html +++ b/build/docs/build-on-morph/sdk/intro/index.html @@ -3,15 +3,19 @@ -intro | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +intro | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    + +
    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/AddressLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/AddressLike/index.html index 8b16364e9..ec9e330d9 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/AddressLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/AddressLike/index.html @@ -3,12 +3,16 @@ -AddressLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +AddressLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / AddressLike

    Type alias: AddressLike

    @@ -16,7 +20,7 @@

    Type alias: AddressLike

    AddressLike: string | Contract

    Stuff that can be coerced into an address.

    -

    Source

    -

    src/interfaces/types.ts:391

    +

    Source

    +

    src/interfaces/types.ts:391

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/DeepPartial/index.html b/build/docs/build-on-morph/sdk/type-aliases/DeepPartial/index.html index 643010633..26d902e56 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/DeepPartial/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/DeepPartial/index.html @@ -3,12 +3,16 @@ -DeepPartial | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +DeepPartial | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / DeepPartial

    Type alias: DeepPartial<T>

    @@ -16,9 +20,9 @@

    Type alias: DeepPartial<T>

    DeepPartial<T>: { [P in keyof T]?: DeepPartial<T[P]> }

    Utility type for deep partials.

    -

    Type parameters

    +

    Type parameters

    T

    -

    Source

    -

    src/utils/type-utils.ts:4

    +

    Source

    +

    src/utils/type-utils.ts:4

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/L1Provider/index.html b/build/docs/build-on-morph/sdk/type-aliases/L1Provider/index.html index ff276a05c..97d3fe23a 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/L1Provider/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/L1Provider/index.html @@ -3,12 +3,16 @@ -L1Provider | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L1Provider | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L1Provider

    Type alias: L1Provider<TProvider>

    @@ -17,25 +21,25 @@

    Type alias: L1Provider<TProvider>

    Represents an extended version of an normal ethers Provider that returns additional L1 info and has special functions for L1-specific interactions.

    -

    Type declaration

    -

    _isL1Provider

    +

    Type declaration

    +

    _isL1Provider

    _isL1Provider: true

    Internal property to determine if a provider is a L1Provider You are likely looking for the isL2Provider function

    -

    estimateCrossDomainMessageFee()

    +

    estimateCrossDomainMessageFee()

    Gets the current L1 (data) gas price.

    -

    Parameters

    +

    Parameters

    l1Provider: ProviderLike

    sender: string

    gasLimit: number | bigint | BigNumber

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Current L1 data gas price in wei.

    -

    Type parameters

    +

    Type parameters

    TProvider extends Provider

    -

    Source

    -

    src/interfaces/l1-provider.ts:11

    +

    Source

    +

    src/interfaces/l1-provider.ts:11

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/L2Provider/index.html b/build/docs/build-on-morph/sdk/type-aliases/L2Provider/index.html index 255f5610e..e8d4cafee 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/L2Provider/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/L2Provider/index.html @@ -3,12 +3,16 @@ -L2Provider | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +L2Provider | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / L2Provider

    Type alias: L2Provider<TProvider>

    @@ -17,57 +21,57 @@

    Type alias: L2Provider<TProvider>

    Represents an extended version of an normal ethers Provider that returns additional L2 info and has special functions for L2-specific interactions.

    -

    Type declaration

    -

    _isL2Provider

    +

    Type declaration

    +

    _isL2Provider

    _isL2Provider: true

    Internal property to determine if a provider is a L2Provider You are likely looking for the isL2Provider function

    -

    estimateL1Gas()

    +

    estimateL1Gas()

    Estimates the L1 (data) gas required for a transaction.

    -

    Parameters

    +

    Parameters

    tx: TransactionRequest

    Transaction to estimate L1 gas for.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimated L1 gas.

    -

    estimateL1GasCost()

    +

    estimateL1GasCost()

    Estimates the L1 (data) gas cost for a transaction in wei by multiplying the estimated L1 gas cost by the current L1 gas price.

    -

    Parameters

    +

    Parameters

    tx: TransactionRequest

    Transaction to estimate L1 gas cost for.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimated L1 gas cost.

    -

    estimateL2GasCost()

    +

    estimateL2GasCost()

    Estimates the L2 (execution) gas cost for a transaction in wei by multiplying the estimated L1 gas cost by the current L2 gas price. This is a simple multiplication of the result of getGasPrice and estimateGas for the given transaction request.

    -

    Parameters

    +

    Parameters

    tx: TransactionRequest

    Transaction to estimate L2 gas cost for.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimated L2 gas cost.

    -

    estimateTotalGasCost()

    +

    estimateTotalGasCost()

    Estimates the total gas cost for a transaction in wei by adding the estimated the L1 gas cost and the estimated L2 gas cost.

    -

    Parameters

    +

    Parameters

    tx: TransactionRequest

    Transaction to estimate total gas cost for.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Estimated total gas cost.

    -

    getL1GasPrice()

    +

    getL1GasPrice()

    Gets the current L1 (data) gas price.

    -

    Returns

    +

    Returns

    Promise<BigNumber>

    Current L1 data gas price in wei.

    -

    Type parameters

    +

    Type parameters

    TProvider extends Provider

    -

    Source

    -

    src/interfaces/l2-provider.ts:43

    +

    Source

    +

    src/interfaces/l2-provider.ts:43

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/LowLevelMessage/index.html b/build/docs/build-on-morph/sdk/type-aliases/LowLevelMessage/index.html index b5b9a6fcf..661d43a0b 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/LowLevelMessage/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/LowLevelMessage/index.html @@ -3,12 +3,16 @@ -LowLevelMessage | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +LowLevelMessage | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / LowLevelMessage

    Type alias: LowLevelMessage

    @@ -17,24 +21,24 @@

    Type alias: LowLevelMessage

    Describes messages sent inside the L2ToL1MessagePasser on L2. Happens to be the same structure as the CoreCrossChainMessage so we'll reuse the type for now.

    -

    Type declaration

    -

    encodedMessage

    +

    Type declaration

    +

    encodedMessage

    encodedMessage: string

    -

    messageHash

    +

    messageHash

    messageHash: string

    -

    messageSender

    +

    messageSender

    messageSender: string

    -

    messageTarget

    +

    messageTarget

    messageTarget: string

    -

    Source

    -

    src/interfaces/types.ts:263

    +

    Source

    +

    src/interfaces/types.ts:263

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/MessageLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/MessageLike/index.html index 428701326..8a104e0b9 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/MessageLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/MessageLike/index.html @@ -3,12 +3,16 @@ -MessageLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +MessageLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/interfaces/types.ts:359

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/MessageRequestLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/MessageRequestLike/index.html index b8a07d00e..69a210b6a 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/MessageRequestLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/MessageRequestLike/index.html @@ -3,12 +3,16 @@ -MessageRequestLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +MessageRequestLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/interfaces/types.ts:367

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/NumberLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/NumberLike/index.html index 784d09e1d..080a892e7 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/NumberLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/NumberLike/index.html @@ -3,12 +3,16 @@ -NumberLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +NumberLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / NumberLike

    Type alias: NumberLike

    @@ -16,7 +20,7 @@

    Type alias: NumberLike

    NumberLike: string | number | BigNumber | bigint

    Stuff that can be coerced into a number.

    -

    Source

    -

    src/interfaces/types.ts:396

    +

    Source

    +

    src/interfaces/types.ts:396

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/OEL1ContractsLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/OEL1ContractsLike/index.html index e509722cf..e46ea8dfc 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/OEL1ContractsLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/OEL1ContractsLike/index.html @@ -3,12 +3,16 @@ -OEL1ContractsLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +OEL1ContractsLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / OEL1ContractsLike

    Type alias: OEL1ContractsLike

    @@ -17,7 +21,7 @@

    Type alias: OEL1ContractsLike

    Convenience type for something that looks like the L1 OE contract interface but could be addresses instead of actual contract objects.

    -

    Source

    -

    src/interfaces/types.ts:129

    +

    Source

    +

    src/interfaces/types.ts:129

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/OEL2ContractsLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/OEL2ContractsLike/index.html index 6549c5310..27fa9d567 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/OEL2ContractsLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/OEL2ContractsLike/index.html @@ -3,12 +3,16 @@ -OEL2ContractsLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +OEL2ContractsLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / OEL2ContractsLike

    Type alias: OEL2ContractsLike

    @@ -17,7 +21,7 @@

    Type alias: OEL2ContractsLike

    Convenience type for something that looks like the L2 OE contract interface but could be addresses instead of actual contract objects.

    -

    Source

    -

    src/interfaces/types.ts:137

    +

    Source

    +

    src/interfaces/types.ts:137

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/ProviderLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/ProviderLike/index.html index 5801a3676..a7cc60648 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/ProviderLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/ProviderLike/index.html @@ -3,12 +3,16 @@ -ProviderLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +ProviderLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / ProviderLike

    Type alias: ProviderLike

    @@ -16,7 +20,7 @@

    Type alias: ProviderLike

    ProviderLike: string | Provider

    Stuff that can be coerced into a provider.

    -

    Source

    -

    src/interfaces/types.ts:376

    +

    Source

    +

    src/interfaces/types.ts:376

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/SignerLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/SignerLike/index.html index 418906b38..322617009 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/SignerLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/SignerLike/index.html @@ -3,12 +3,16 @@ -SignerLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +SignerLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / SignerLike

    Type alias: SignerLike

    @@ -16,7 +20,7 @@

    Type alias: SignerLike

    SignerLike: string | Signer

    Stuff that can be coerced into a signer.

    -

    Source

    -

    src/interfaces/types.ts:381

    +

    Source

    +

    src/interfaces/types.ts:381

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/SignerOrProviderLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/SignerOrProviderLike/index.html index 7a2f5e433..8d3c1f423 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/SignerOrProviderLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/SignerOrProviderLike/index.html @@ -3,12 +3,16 @@ -SignerOrProviderLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +SignerOrProviderLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/interfaces/types.ts:386

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/type-aliases/TransactionLike/index.html b/build/docs/build-on-morph/sdk/type-aliases/TransactionLike/index.html index c70f87a81..b7bcacdd4 100644 --- a/build/docs/build-on-morph/sdk/type-aliases/TransactionLike/index.html +++ b/build/docs/build-on-morph/sdk/type-aliases/TransactionLike/index.html @@ -3,12 +3,16 @@ -TransactionLike | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +TransactionLike | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / TransactionLike

    Type alias: TransactionLike

    @@ -16,7 +20,7 @@

    Type alias: TransactionLike

    TransactionLike: string | TransactionReceipt | TransactionResponse

    Stuff that can be coerced into a transaction.

    -

    Source

    -

    src/interfaces/types.ts:354

    +

    Source

    +

    src/interfaces/types.ts:354

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/BRIDGE_ADAPTER_DATA/index.html b/build/docs/build-on-morph/sdk/variables/BRIDGE_ADAPTER_DATA/index.html index 67d96b48a..ac7c564e8 100644 --- a/build/docs/build-on-morph/sdk/variables/BRIDGE_ADAPTER_DATA/index.html +++ b/build/docs/build-on-morph/sdk/variables/BRIDGE_ADAPTER_DATA/index.html @@ -3,12 +3,16 @@ -BRIDGE_ADAPTER_DATA | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +BRIDGE_ADAPTER_DATA | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / BRIDGE_ADAPTER_DATA

    Variable: BRIDGE_ADAPTER_DATA

    @@ -16,7 +20,7 @@

    Variable: BRIDGE_ADAPTER_DATA

    const BRIDGE_ADAPTER_DATA: { [ChainID in L2ChainID]?: BridgeAdapterData }

    Mapping of L1 chain IDs to the list of custom bridge addresses for each chain.

    -

    Source

    -

    src/utils/chain-constants.ts:128

    +

    Source

    +

    src/utils/chain-constants.ts:128

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/CHAIN_BLOCK_TIMES/index.html b/build/docs/build-on-morph/sdk/variables/CHAIN_BLOCK_TIMES/index.html index d6e82b149..dd03ef40c 100644 --- a/build/docs/build-on-morph/sdk/variables/CHAIN_BLOCK_TIMES/index.html +++ b/build/docs/build-on-morph/sdk/variables/CHAIN_BLOCK_TIMES/index.html @@ -3,19 +3,23 @@ -CHAIN_BLOCK_TIMES | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +CHAIN_BLOCK_TIMES | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/utils/chain-constants.ts:22

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/CONTRACT_ADDRESSES/index.html b/build/docs/build-on-morph/sdk/variables/CONTRACT_ADDRESSES/index.html index 7505934cc..59eb29feb 100644 --- a/build/docs/build-on-morph/sdk/variables/CONTRACT_ADDRESSES/index.html +++ b/build/docs/build-on-morph/sdk/variables/CONTRACT_ADDRESSES/index.html @@ -3,12 +3,16 @@ -CONTRACT_ADDRESSES | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +CONTRACT_ADDRESSES | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / CONTRACT_ADDRESSES

    Variable: CONTRACT_ADDRESSES

    @@ -18,7 +22,7 @@

    Variable: CONTRACT_ADDRESSES

    Mapping of L1 chain IDs to the appropriate contract addresses for the OE deployments to the given network. Simplifies the process of getting the correct contract addresses for a given contract name.

    -

    Source

    -

    src/utils/chain-constants.ts:100

    +

    Source

    +

    src/utils/chain-constants.ts:100

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/DEFAULT_L1_CONTRACT_ADDRESSES/index.html b/build/docs/build-on-morph/sdk/variables/DEFAULT_L1_CONTRACT_ADDRESSES/index.html index c9efc1999..6c382468e 100644 --- a/build/docs/build-on-morph/sdk/variables/DEFAULT_L1_CONTRACT_ADDRESSES/index.html +++ b/build/docs/build-on-morph/sdk/variables/DEFAULT_L1_CONTRACT_ADDRESSES/index.html @@ -3,12 +3,16 @@ -DEFAULT_L1_CONTRACT_ADDRESSES | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +DEFAULT_L1_CONTRACT_ADDRESSES | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / DEFAULT_L1_CONTRACT_ADDRESSES

    Variable: DEFAULT_L1_CONTRACT_ADDRESSES

    @@ -16,7 +20,7 @@

    Variable: DEFAULT_L1_CONTRACT_ADDRESSES

    const DEFAULT_L1_CONTRACT_ADDRESSES: OEL1ContractsLike

    Full list of default L1 contract addresses.

    -

    Source

    -

    src/utils/chain-constants.ts:61

    +

    Source

    +

    src/utils/chain-constants.ts:61

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/DEFAULT_L2_CONTRACT_ADDRESSES/index.html b/build/docs/build-on-morph/sdk/variables/DEFAULT_L2_CONTRACT_ADDRESSES/index.html index d9972294a..ceff7f196 100644 --- a/build/docs/build-on-morph/sdk/variables/DEFAULT_L2_CONTRACT_ADDRESSES/index.html +++ b/build/docs/build-on-morph/sdk/variables/DEFAULT_L2_CONTRACT_ADDRESSES/index.html @@ -3,12 +3,16 @@ -DEFAULT_L2_CONTRACT_ADDRESSES | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +DEFAULT_L2_CONTRACT_ADDRESSES | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / DEFAULT_L2_CONTRACT_ADDRESSES

    Variable: DEFAULT_L2_CONTRACT_ADDRESSES

    @@ -16,7 +20,7 @@

    Variable: DEFAULT_L2_CONTRACT_ADDRESSES

    const DEFAULT_L2_CONTRACT_ADDRESSES: OEL2ContractsLike

    Full list of default L2 contract addresses.

    -

    Source

    -

    src/utils/chain-constants.ts:37

    +

    Source

    +

    src/utils/chain-constants.ts:37

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/DEPOSIT_CONFIRMATION_BLOCKS/index.html b/build/docs/build-on-morph/sdk/variables/DEPOSIT_CONFIRMATION_BLOCKS/index.html index 0b819a971..6abcddbc9 100644 --- a/build/docs/build-on-morph/sdk/variables/DEPOSIT_CONFIRMATION_BLOCKS/index.html +++ b/build/docs/build-on-morph/sdk/variables/DEPOSIT_CONFIRMATION_BLOCKS/index.html @@ -3,19 +3,23 @@ -DEPOSIT_CONFIRMATION_BLOCKS | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +DEPOSIT_CONFIRMATION_BLOCKS | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / DEPOSIT_CONFIRMATION_BLOCKS

    Variable: DEPOSIT_CONFIRMATION_BLOCKS

    const DEPOSIT_CONFIRMATION_BLOCKS: { [ChainID in L2ChainID]: number }

    -

    Source

    -

    src/utils/chain-constants.ts:12

    +

    Source

    +

    src/utils/chain-constants.ts:12

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/l1BridgeName/index.html b/build/docs/build-on-morph/sdk/variables/l1BridgeName/index.html index 2ced4d152..fd428c11e 100644 --- a/build/docs/build-on-morph/sdk/variables/l1BridgeName/index.html +++ b/build/docs/build-on-morph/sdk/variables/l1BridgeName/index.html @@ -3,19 +3,23 @@ -l1BridgeName | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +l1BridgeName | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/cross-chain-messenger.ts:69

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/l1CrossDomainMessengerName/index.html b/build/docs/build-on-morph/sdk/variables/l1CrossDomainMessengerName/index.html index 4d792b332..2bf0e139c 100644 --- a/build/docs/build-on-morph/sdk/variables/l1CrossDomainMessengerName/index.html +++ b/build/docs/build-on-morph/sdk/variables/l1CrossDomainMessengerName/index.html @@ -3,19 +3,23 @@ -l1CrossDomainMessengerName | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +l1CrossDomainMessengerName | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / l1CrossDomainMessengerName

    Variable: l1CrossDomainMessengerName

    const l1CrossDomainMessengerName: "L1CrossDomainMessenger" = 'L1CrossDomainMessenger'

    -

    Source

    -

    src/cross-chain-messenger.ts:67

    +

    Source

    +

    src/cross-chain-messenger.ts:67

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/l2BridgeName/index.html b/build/docs/build-on-morph/sdk/variables/l2BridgeName/index.html index 19d263eea..fadfe1d03 100644 --- a/build/docs/build-on-morph/sdk/variables/l2BridgeName/index.html +++ b/build/docs/build-on-morph/sdk/variables/l2BridgeName/index.html @@ -3,19 +3,23 @@ -l2BridgeName | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +l2BridgeName | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +
    +

    Source

    +

    src/cross-chain-messenger.ts:70

    \ No newline at end of file diff --git a/build/docs/build-on-morph/sdk/variables/l2CrossDomainMessengerName/index.html b/build/docs/build-on-morph/sdk/variables/l2CrossDomainMessengerName/index.html index 6a0bf84cf..6907c392c 100644 --- a/build/docs/build-on-morph/sdk/variables/l2CrossDomainMessengerName/index.html +++ b/build/docs/build-on-morph/sdk/variables/l2CrossDomainMessengerName/index.html @@ -3,19 +3,23 @@ -l2CrossDomainMessengerName | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +l2CrossDomainMessengerName | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    @morph-l2/sdkDocs

    +

    @morph-l2/sdkDocs


    @morph-l2/sdk / l2CrossDomainMessengerName

    Variable: l2CrossDomainMessengerName

    const l2CrossDomainMessengerName: "L2CrossDomainMessenger" = 'L2CrossDomainMessenger'

    -

    Source

    -

    src/cross-chain-messenger.ts:68

    +

    Source

    +

    src/cross-chain-messenger.ts:68

    \ No newline at end of file diff --git a/build/docs/how-morph-works/decentralized-sequencers/morph-decentralized-sequencer-network/index.html b/build/docs/how-morph-works/decentralized-sequencers/morph-decentralized-sequencer-network/index.html index 5cdf6ae3f..fc039dce7 100644 --- a/build/docs/how-morph-works/decentralized-sequencers/morph-decentralized-sequencer-network/index.html +++ b/build/docs/how-morph-works/decentralized-sequencers/morph-decentralized-sequencer-network/index.html @@ -3,60 +3,64 @@ -Morph's Decentralized Sequencer Network | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Morph's Decentralized Sequencer Network | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Morph's Decentralized Sequencer Network

    RVP

    -

    The Importance of Decentralized Sequencers

    -

    What is a sequencer and what does it do?

    +

    Morph's Decentralized Sequencer Network

    RVP

    +

    The Importance of Decentralized Sequencers

    +

    What is a sequencer and what does it do?

    In a traditional Layer 1 blockchain, transactions are packaged and processed by miners in proof-of-work systems or validators nodes in proof-of-stake systems. These entities earn the authority to package, sequence, and produce blocks either through the competitive task of computational mining or via staking-based elections.

    However, many current Layer 2 designs employ a single role, unburdened by competition or staking costs, responsible for packaging and sequencing all Layer 2 transactions. This entity is known as the “sequencer”. Its duties extend beyond sequencing; it is also tasked with generating L2 blocks, periodically committing Layer 2 transactions and state changes to Layer 1, and addressing any potential challenges to its submissions.

    Centralized sequencers present a challenge due to their sole dominion over the sequencing and packaging of Layer 2 transactions. This monopoly raises concerns, largely stemming from this centralized control.

    -

    What are the problems with centralized sequencers?

    -

    Vulnerability of a Single Point of Failure

    +

    What are the problems with centralized sequencers?

    +

    Vulnerability of a Single Point of Failure

    The proper functioning of Layer 2 is intrinsically tied to the operation of the sequencer. If the sequencer stops working, transactions from all Layer 2 users will not be processed, effectively bringing down Layer 2 operations. The problem is magnified when a single entity controls the sequencer. Should the entity fail, the entirety of the Layer 2 is paralyzed, rendering the system vulnerable to a single point of failure. Therefore, centralized sequencers pose a significant risk to the stability of Layer 2.

    -

    Excessive Transaction Censorship

    +

    Excessive Transaction Censorship

    Centralized sequencers have the ability to reject user-submitted transactions, rendering them unprocessable — a blatant form of transaction censorship. In a scenario where a centralized Layer 2 deliberately blocks transactions involving its governance tokens, panic and selling among users is likely to follow. Some solutions allow users to submit their intended transactions directly on Layer 1. However, this process is time-consuming, often taking several hours, and burdens users with Layer 1 gas fees. Therefore, this alternative does not fundamentally solve the problem. In a decentralized sequencer framework, should one sequencer decline a transaction, users can still relay it to alternative sequencers. The content of the next block is ultimately determined through consensus, ensuring no single entity can censor transactions based on personal interests.

    -

    Monopoly Over MEV

    +

    Monopoly Over MEV

    Because the sequencer can determine the order (or "sequence") of received transactions, it effectively has a monopoly over all Miner Extractable Value (MEV). In this scenario, users must bear any potential losses incurred by the sequencer’s exclusive control over MEV, necessitating an additional and unwarranted layer of trust in the sequencer. Decentralized sequencers introduce a competitive dynamic among multiple entities aiming for MEV. This competition eliminates the monopoly of any single sequencer, mitigating the adverse effects of unchecked MEV on users.

    -

    What's Morph's Approach to Decentralized Sequencers?

    +

    What's Morph's Approach to Decentralized Sequencers?

    Morph is distinct from other Rollup projects due to the emphasis on establishing a decentralized sequencer network from inception. This design is guided by the following core principles:

    -

    Efficiency:​

    +

    Efficiency:​

    Morph is first and foremost an Ethereum scaling solution, focused on improved efficiency and cost reduction. Our solution must guarantee fast execution and transaction confirmation at Layer 2 while maintaining the highest possible level of decentralization.

    -

    Scalable and Manageable:​

    +

    Scalable and Manageable:​

    The sequencer network’s design prioritizes ease of maintenance, expansion, and updating. If one network functionality requires maintenance, it should not disrupt the operation of other functionalities. In addition, the sequencer network should be adaptable and easily upgradable as new and more efficient solutions emerge.

    -

    Solutions Formulated on These Principles​

    +

    Solutions Formulated on These Principles​

    With these principles, Morph’s sequencer network design includes:

    • Modularity: The structure emphasizes modular components that are loosely connected, allowing for swift upgrades or replacements.
    • Byzantine Fault Tolerant (BFT) Consensus: Sequencers employ a BFT consensus for L2 block generation.
    • BLS Signature for Batch Signing: Sequencers sign a collective of L2 blocks using the BLS signature method. The L1 contract then verifies this L2 consensus through the BLS signature.
    -
    tip

    Why BLS signature?

    A current basic signature algorithm such as ECDSA in Ethereum has an excessive cost. This issue arises because the signature data needs to be submitted to the Layer 1 contract and requires payment of the corresponding cost. As the number of validators increases, this cost will also increase proportionally. By using BLS signatures, the cost of uploading signatures can be maintained at a constant level, unaffected by the gradual growth of the sequencer's quantity.

    -

    Architecture

    +
    tip

    Why BLS signature?

    A current basic signature algorithm such as ECDSA in Ethereum has an excessive cost. This issue arises because the signature data needs to be submitted to the Layer 1 contract and requires payment of the corresponding cost. As the number of validators increases, this cost will also increase proportionally. By using BLS signatures, the cost of uploading signatures can be maintained at a constant level, unaffected by the gradual growth of the sequencer's quantity.

    +

    Architecture

    The following is a simple illustration of Morph’s decentralized sequencing network architecture.

    -

    Sequencer Network Archi

    -

    Sequencer Set Selection

    +

    Sequencer Network Archi

    +

    Sequencer Set Selection

    A complete Morph decentralized sequencer network consists of two parts:

    • Sequencer Set : This forms the core group that provides sequencing services
    • Sequencer Staking Contract: This contract facilitates the selection of the sequencer set via an election process.

    Through the sequencer staking contract, members are elected into the sequencer set, where they collaboratively provide services for the Morph network. Periodically, the election results are synchronized to the Layer 1 Rollup contract. This synchronized data is utilized to obtain the BLS aggregate signatures of sequencer network participants for comparison and verification.

    -

    Layer 2 Blocks Generation

    +

    Layer 2 Blocks Generation

    Given Morph's modular design, each sequencer operates a consensus client that runs BFT to communicate with other sequencers.

    -

    Block Generation

    +

    Block Generation

    Following the BFT consensus protocol, the selected sequencer extracts transactions from the mempool, constructs blocks, and synchronizes these blocks with other sequencers to undergo verification and voting. The end result is the generation of new Layer 2 blocks.

    -

    Batching

    +

    Batching

    Considering the costs of uploading to and validating signatures on Layer 1, sequencers will sign a batch of blocks with BLS signatures at designated checkpoints.

    -

    BlockSign

    +

    BlockSign

    Post-signing, the designated sequencer forwards the collective batch of blocks to Layer 1 through its batch submitter component.

    -

    Consensus Verification

    +

    Consensus Verification

    The selected sequencer must submit to the Layer 1 contract:

    • The aggregated BLS signatures
    • @@ -64,16 +68,16 @@

      Conse
    • The consensus-determined state

    The Layer 1 contract will verify the submitted signature to confirm the transaction's consensus.

    -

    Summary

    +

    Summary

    • Morph operates a native decentralized sequencer network based on BFT consensus.
    • Through protocol and network optimization, Morph maximizes the scalability of Ethereum while ensuring decentralization.
    • Based on BLS signatures, other participants in Layer 1 and Layer 2 can effectively verify the consensus results of Layer 2, ensuring the security provided by the sequencer network is confirmable at the Layer 1 level.
    -

    Roadmap

    +

    Roadmap

    Stage 1: Close test on morph beta testnet

    Stage 2: Decentralized sequencer network live on mainnet

    Stage 3: Open election of sequencer set

    -

    Stage 4: Open Morph's sequencer network to the public l2 space

    +

    Stage 4: Open Morph's sequencer network to the public l2 space

    \ No newline at end of file diff --git a/build/docs/how-morph-works/general-protocol-design/communicate-between-morph-and-ethereum/index.html b/build/docs/how-morph-works/general-protocol-design/communicate-between-morph-and-ethereum/index.html index 8f16e8ac4..8547813c9 100644 --- a/build/docs/how-morph-works/general-protocol-design/communicate-between-morph-and-ethereum/index.html +++ b/build/docs/how-morph-works/general-protocol-design/communicate-between-morph-and-ethereum/index.html @@ -3,13 +3,17 @@ -Communication between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Communication between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Communication between Morph and Ethereum

    Although Morph is a Layer 2 solution built atop Ethereum, it remains a separate and distinct blockchain. Thus, it’s essential to establish a communication channel between Morph and Ethereum to facilitate the smooth transfer of assets and messages. The communication can occur in two directions: from Ethereum to Morph and from Morph to Ethereum.

    -

    The Basics of Morph - Ethereum Bridge​

    +

    Communication between Morph and Ethereum

    Although Morph is a Layer 2 solution built atop Ethereum, it remains a separate and distinct blockchain. Thus, it’s essential to establish a communication channel between Morph and Ethereum to facilitate the smooth transfer of assets and messages. The communication can occur in two directions: from Ethereum to Morph and from Morph to Ethereum.

    +

    The Basics of Morph - Ethereum Bridge​

    Transferring assets between Ethereum and Morph involves the following process:

    • @@ -23,32 +27,32 @@

      Understanding the Gateway

      +

      Understanding the Gateway

      The Gateway serves as the primary entry point for users to interact with the entire bridge system. While the core process of transferring assets across layers still relies on message transmission, we recommend using the Gateway approach for efficient cross-layer transactions.

      Catering to diverse cross-layer asset transfer needs, we have designed distinct Gateways such as the ETH Gateway, standard ERC20 Gateway, and others.

      Furthermore, we have implemented the Gateway Router to call on different Gateways based on the type of assets you have. This facilitates seamless interaction with the Gateway Router contract.

      L1 Gateway ContractDescription
      L1GatewayRouterThe gateway router supports the deposit of ETH and ERC20 tokens.
      L1ETHGatewayThe gateway to deposit ETH.
      L1StandardERC20GatewayThe gateway for standard ERC20 token deposits.
      L1CustomERC20GatewayThe gateway for custom ERC20 token deposits.
      L1WETHGatewayThe gateway for Wrapped ETH deposits.
      L2 Gateway ContractDescription
      L2GatewayRouterThe gateway router supports the withdraw of ETH and ERC20 tokens.
      L2ETHGatewayThe gateway to withdraw ETH.
      L2StandardERC20GatewayThe gateway for standard ERC20 token withdraw.
      L2CustomERC20GatewayThe gateway for custom ERC20 token withdraw.
      L2WETHGatewayThe gateway for Wrapped ETH withdraw.
      -

      Deposit (L1 to L2 message)

      -

      Deposit Process

      -

      Constructing a Deposit Request Through the Gateway

      +

      Deposit (L1 to L2 message)

      +

      Deposit Process

      +

      Constructing a Deposit Request Through the Gateway

      A bridge request, whether it is for ETH, ERC20, or ERC721, is essentially a cross-layer message, which necessitates the initial construction of a message.

      Generally, the message structure remains consistent, especially for ETH & ERC20 Gateways.

      Employing a token gateway compiles a standard token gateway message and relays it to the CrossDomainMessenger.

      -

      Passing the Message Through the CrossDomainMessenger

      +

      Passing the Message Through the CrossDomainMessenger

      The CrossDomainMessenger serves as the core unit of cross-layer communication, with corresponding messenger contracts on both Layer 1 and Layer 2.

      For a deposit, the L1 messenger sends a message to the L2 messenger, akin to a contract call on Layer 1, which means custom messages (contract interactions) can be constructed to perform various types of cross-layer interactions.

      -

      Executing the Message on Layer 2

      +

      Executing the Message on Layer 2

      The cross-domain message is delivered to the L1MessageQueueWithGasPriceOracle, which then triggers an event called QueueTransaction.

      The Sequencer will monitor this event and include a Layer 2 transaction in its next block.

      -

      How to make sure Sequencer doesn't fake a deposit transaction?

      +

      How to make sure Sequencer doesn't fake a deposit transaction?

      Sequencers may have the motivation to forge a non-existent deposit transaction, such as minting a large amount of Layer 2 tokens and transferring these to an address they own.

      Morph prevents these risks with two measures:

      Due to Morph’s decentralized Sequencer architecture, forging transactions would require control of at least two-thirds of the Sequencers, a challenging feat.

      Morph's optimistic zkEVM framework allows challengers to detect such malicious behavior and initiate challenges to correct the misconduct.

      A Layer 2 executor, holding the cross-layer message, interacts with the L2 messenger to execute the message, which may include transferring L2 ETH or ERC20 tokens to the recipient.

      -

      Finalizing the Deposit Message

      +

      Finalizing the Deposit Message

      The completion of the deposit process involves more than just executing the request on Layer 2. There is a possibility that the Layer 2 execution and its corresponding state update could be reverted due to incorrect batch data being identified through the challenge process.

      Therefore, a deposit request is only considered complete once the corresponding batch of the deposit execution transaction is finalized.

      Typically, this follows a simple workflow:

      @@ -63,9 +67,9 @@

      Withdraw (L2 -> L1 message)

      -

      Withdraw Process

      -

      Finalizing a Withdrawal

      +

      Withdraw (L2 -> L1 message)

      +

      Withdraw Process

      +

      Finalizing a Withdrawal

      Unlike Deposits, a withdrawal request must undergo 2 processes for execution:

      1. @@ -76,14 +80,14 @@

        Fina

      Typically, these 2 processes happen at the same time. Once the withdraw tree root is finalized, users can call the proveAndRelayMessage method within the L1CrossDomainMessenger contract to execute the withdrawal message.

      -
      function proveAndRelayMessage(
      address _from,
      address _to,
      uint256 _value,
      uint256 _nonce,
      bytes memory _message,
      bytes32[32] calldata _withdrawalProof,
      bytes32 _withdrawalRoot
      )

      +
      function proveAndRelayMessage(
      address _from,
      address _to,
      uint256 _value,
      uint256 _nonce,
      bytes memory _message,
      bytes32[32] calldata _withdrawalProof,
      bytes32 _withdrawalRoot
      )

      This function serves two primary purposes:

      1. It checks if the withdraw tree root associated with this message has been finalized through the rollup contract.
      2. It verifies whether the withdraw request actually occurred by validating the provided Merkle proof.

      Upon successful completion of both processes, this method will execute the corresponding action, such as releasing the user's ETH on Layer 1 for a standard ETH withdrawal request.

      -

      Understanding the Withdraw Tree

      +

      Understanding the Withdraw Tree

      Withdrawal actions involve interacting with L1 assets/contracts as a result of a Layer 2 transaction. Consequently, it’s imperative to verify the existence of a Layer 2 transaction that triggers a withdrawal request, in a manner that is verifiable on Layer 1.

      To achieve this, we introduce a structure known as a Withdraw Tree, which records every L2 withdrawal transaction within a Merkle tree. Thus, a Merkle tree's properties can be leveraged to confirm a withdrawal request’s occurrence.

      The term Withdraw Tree refers to an append-only Sparse Merkle Tree (SMT) with leaf nodes that capture information on assets being transferred out of the network. @@ -97,15 +101,15 @@

      Understanding the Challenge Period & Batch Finalization

      +

      Understanding the Challenge Period & Batch Finalization

      The Optimistic zkEVM architecture mandates that each L2 transaction be submitted to Layer 1 and undergo a challenge period before finalization.

      This process is vital to validate the Layer 2 state, eventually validating the authenticity of the withdraw request.

      The withdraw tree root, integral for withdrawal request verification, is also submitted by sequencers once the challenge period, batches, and states have been finalized.

      -

      Cross-layer (Bridge) Errors

      +

      Cross-layer (Bridge) Errors

      With the design of cross-layer bridges, the cross-layer message for deposits needs to be executed and have its Layer 2 states updated. Sending a cross-chain request successfully does not guarantee its successful execution on L2.

      Prior to this, there is a possibility of the cross-layer message failing during execution on Layer 2. This section outlines the potential scenarios and solutions for handling failed cross-layer deposit messages.

      -

      Cross-layer (Bridge) Failure Scenarios:

      +

      Cross-layer (Bridge) Failure Scenarios:

      Two primary types of failures can occur in cross-layer (bridge) communications:

      1. @@ -115,7 +119,7 @@

        Handling Cross-layer (Bridge) Failures:

        +

        Handling Cross-layer (Bridge) Failures:

        For Gas Failures:

    +
    \ No newline at end of file diff --git a/build/docs/how-morph-works/general-protocol-design/difference-between-ethereum-and-morph/index.html b/build/docs/how-morph-works/general-protocol-design/difference-between-ethereum-and-morph/index.html index d07cfea50..31baab1c6 100644 --- a/build/docs/how-morph-works/general-protocol-design/difference-between-ethereum-and-morph/index.html +++ b/build/docs/how-morph-works/general-protocol-design/difference-between-ethereum-and-morph/index.html @@ -3,38 +3,38 @@ -Difference between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Difference between Morph and Ethereum | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Difference between Morph and Ethereum

    There are several technical differences between Ethereum’s EVM and Morph's optimistic zkEVM. We’ve compiled a list to help you understand these distinctions better.

    -
    tip

    For most Solidity developers, these technical details won't significantly impact your development experience.

    -

    EVM Opcodes

    -
    OpcodeSolidity equivalentMorph Behavior
    BLOCKHASHblock.blockhashReturns keccak(chain_id || block_number) for the last 256 blocks.
    COINBASEblock.coinbaseReturns the pre-deployed fee vault contract address. See Contracts
    DIFFICULTY / PREVRANDAOblock.difficultyReturns 0.
    SELFDESTRUCTselfdestructDisabled. If the opcode is encountered, the transaction will be reverted.
    BLOBHASHtx.blob_versioned_hashes[index]Not supported
    BLOBBASEFEEblob_base_fee = BLOBBASEFEE()Not supported
    -

    EVM Precompiles

    -

    The RIPEMD-160 (address 0x3) blake2f (address 0x9), and point evaluation (address 0x0a) precompiles are currently not supported. Calls to unsupported precompiled contracts will revert. We plan to enable these precompiles in future hard forks.

    -

    The modexp precompile is supported but only supports inputs of size less than or equal to 32 bytes (i.e. u256).

    -

    The ecPairing precompile is supported, but the number of points(sets, pairs) is limited to 4, instead of 6.

    -

    The other EVM precompiles are all supported: ecRecover, identity, ecAdd, ecMul.

    -

    Precompile Limits

    -

    Because of a bounded size of the zkEVM circuits, there is an upper limit on the number of calls that can be made for some precompiles. These transactions will not revert, but simply be skipped by the sequencer if they cannot fit into the space of the circuit.

    -
    Precompile / OpcodeLimit
    keccak2563157
    ecRecover119
    modexp23
    ecAdd50
    ecMul50
    ecPairing2
    -
    Several opcode not available

    BLOBHASH and BLOBBASEFEE are not supported on Morph yet. Additionally, EIP-4788 for accessing the Beacon Chain block root is not supported.

    -

    State Account

    -

    Additional Fields

    -

    We added two fields in the current StateAccount object: PoseidonCodehash and CodeSize.

    -
    type StateAccount struct {
    Nonce uint64
    Balance *big.Int
    Root common.Hash // merkle root of the storage trie
    KeccakCodeHash []byte // still the Keccak codehash
    // added fields
    PoseidonCodeHash []byte // the Poseidon codehash
    CodeSize uint64
    }
    -

    CodeHash

    -

    Related to this, we maintain two types of codehash for each contract bytecode: Keccak hash and Poseidon hash.

    -

    KeccakCodeHash is kept to maintain compatibility for EXTCODEHASH. PoseidonCodeHash is used for verifying the correctness of bytecodes loaded in the zkEVM, where Poseidon hashing is far more efficient.

    -

    CodeSize

    -

    When verifying EXTCODESIZE, it is expensive to load the whole contract data into the zkEVM. Instead, we store the contract size in storage during contract creation. This way, we do not need to load the code — a storage proof is sufficient to verify this opcode.

    -

    Block Time

    -
    Block Time Subject to Change

    Blocks are produced every second, with an empty block generated if there are no transactions for 5 seconds. However, this frequency may change in the future.

    +

    Difference between Morph and Ethereum

    There are several technical differences between Ethereum’s EVM and Morph's optimistic zkEVM.

    +

    We’ve compiled a list to help you understand these distinctions better.

    +

    For most Solidity developers, these technical details won't significantly impact your development experience.

    +

    EVM Precompiles Difference

    +

    The RIPEMD-160 (address 0x3), blake2f (address 0x9), and point evaluation (address 0x0a) precompiles are currently unsupported. Calls to these unsupported precompiled contracts will result in a transaction revert.

    +

    The modexp precompile is supported, but it only accepts inputs that are 32 bytes or smaller (i.e., u256).

    +

    The ecPairing precompile is also supported; however, the maximum number of points (sets or pairs) is limited to 4, rather than 6.

    +

    All other EVM precompiles are fully supported: ecRecover, identity, ecAdd, and ecMul.

    +

    EVM Opcodes Difference

    +
    OpcodeSolidity equivalentMorph Behavior
    BLOCKHASHblock.blockhashReturns keccak(chain_id || block_number) for the last 256 blocks.
    COINBASEblock.coinbaseReturns the pre-deployed fee vault contract address. See Contracts
    DIFFICULTY / PREVRANDAOblock.difficultyReturns 0.
    SELFDESTRUCTselfdestructDisabled. If the opcode is triggered, the transaction will be reverted.
    BLOBHASHtx.blob_versioned_hashes[index]Not supported
    BLOBBASEFEEblob_base_fee = BLOBBASEFEE()Not supported
    +
    Several opcode not available

    BLOBHASH and BLOBBASEFEE are not supported on Morph yet.

    EIP-4788 for accessing the Beacon Chain block root is not supported too.

    +

    State Account Structure Difference

    +

    Additional Fields

    +

    There are two additional fields in the existing StateAccount object: PoseidonCodehash and CodeSize.

    +
    type StateAccount struct {
    Nonce uint64
    Balance *big.Int
    Root common.Hash // merkle root of the storage trie
    KeccakCodeHash []byte // still the Keccak codehash
    // added fields
    PoseidonCodeHash []byte // the Poseidon codehash
    CodeSize uint64
    }
    +

    CodeHash

    +

    In this context, we keep two varieties of code hashes for each contract's bytecode: the Keccak hash and the Poseidon hash.

    +

    The KeccakCodeHash is preserved to ensure compatibility with EXTCODEHASH, while the PoseidonCodeHash is utilized for verifying the accuracy of bytecodes loaded in the zkEVM, as Poseidon hashing offers significantly greater efficiency.

    +

    Block Time Difference

    +
    Block Time Subject to Change

    Blocks are produced every second, with an empty block generated if there are no transactions for 5 seconds. However, this frequency may change in the future.

    To compare, Ethereum has a block time of ~12 seconds.

    -

    Reasons for Faster Block Time in Morph -User Experience:

    +

    Reasons for Faster Block Time in Morph

    +

    User Experience:

    -

    Future EIPs

    -

    Morph closely monitors emerging Ethereum Improvement Proposals (EIPs) and adopts them when suitable. For more specifics, join our community forum or Discord for discussions.

    +
    \ No newline at end of file diff --git a/build/docs/how-morph-works/general-protocol-design/rollup/index.html b/build/docs/how-morph-works/general-protocol-design/rollup/index.html index 862034a72..719eabdfb 100644 --- a/build/docs/how-morph-works/general-protocol-design/rollup/index.html +++ b/build/docs/how-morph-works/general-protocol-design/rollup/index.html @@ -3,15 +3,19 @@ -Rollup | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Rollup | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Rollup

    info

    As the foundation of a Layer 2 project, the "Rollup" process refers to the method by which Layer 2 assembles L2 transactions and state into batches and subsequently submits them to L1, along with the L2 state.

    Within Morph's architecture, this Rollup process is executed by the Batch Submitter components.

    -

    An overview of Morph Rollup Design:

    -

    rollup

    -

    Constructing the Batch​

    +

    Rollup

    info

    As the foundation of a Layer 2 project, the "Rollup" process refers to the method by which Layer 2 assembles L2 transactions and state into batches and subsequently submits them to L1, along with the L2 state.

    Within Morph's architecture, this Rollup process is executed by the Batch Submitter components.

    +

    An overview of Morph Rollup Design:

    +

    rollup

    +

    Constructing the Batch​

    The L2 Node within the sequencer generates L2 blocks based on consensus results and updates the local state of L2. The batch submitter must query the L2 node to retrieve the latest L2 blocks.

    The batch submitter then reconstructs L2 blocks, compiling:

      @@ -28,39 +32,39 @@

      Const
    • WithdrawalRoot : L2 withdrawal Merkle tree root.
    • Signature : The batch’s BLS signature.
    -
    info

    Blockinfo (BlockWitness) is needed since Morph employs zk technology to prove the accuracy of submitted batch data. It serves as a witness in the Zero-Knowledge Proof.

    -

    Putting Multiple Batches into a Single Rollup Transaction​

    +
    info

    Blockinfo (BlockWitness) is needed since Morph employs zk technology to prove the accuracy of submitted batch data. It serves as a witness in the Zero-Knowledge Proof.

    +

    Putting Multiple Batches into a Single Rollup Transaction​

    While it's standard for roll-up projects to include only one batch per L1 roll-up transaction, Morph optimizes by inserting as many batches as feasible into a single L1 transaction. This efficiency-driven approach significantly reduces overall costs, as the L1 fee is a predominant component of the transaction costs associated with the L2. By optimizing the utilization of available space, Morph achieves cost-effectiveness without compromising transaction integrity.

    -

    Submitting Batch Data to the Rollup Contract​

    +

    Submitting Batch Data to the Rollup Contract​

    The batch submitter will eventually send an Ethereum transaction from its L1 account to Morph's main contract.

    The transaction's calldata contains the batch data.

    -
    info

    Based on the development process of ERC-4337, future batch data will likely be incorporated into a new ‘blob’ structure to further decrease costs.

    +
    info

    Based on the development process of ERC-4337, future batch data will likely be incorporated into a new ‘blob’ structure to further decrease costs.

    Once the transaction is submitted and confirmed on Ethereum, validator nodes can reconstruct and verify the validity of sequencers' submissions using the transactional data within the batch.

    -

    Finalize the batches

    +

    Finalize the batches

    If batches are valid according to Morph's responsive validity proof standards, all transactions within the batches will be finalized, including withdrawal transactions.

    Consequently, withdrawal requests will be fulfilled, and the corresponding locked assets on Layer 1 will be released.

    Decentralize Batch Submitter

    -

    What is Batch Submitter?

    +

    What is Batch Submitter?

    A Batch Submitter plays a crucial role in the "rollup" process, acting as the bridge that connects Layer 2 (L2) data with Ethereum (Layer 1 or L1). Their primary responsibilities include:

    • Collecting L2 transactions and block data, assembling them into a cohesive batch.
    • Embedding this batch data within a Layer 1 transaction.
    • Executing this transaction by calling the Layer 1 contract to complete the rollup process.
    -

    rollup

    -

    What is the relationship between Sequencers & Batch Submitters?

    +

    rollup

    +

    What is the relationship between Sequencers & Batch Submitters?

    The Batch submitter function is often integrated within the broader 'sequencer' role. In a decentralized sequencer network architecture, each sequencer is equipped with or has access to a batch submitter component. This integration is key to achieving and maintaining the highest levels of decentralization.

    This structure ensures that the data uploaded to Layer 1 remains decentralized, preventing a single entity from controlling the rollup process.

    -

    How to decentralize the Batch Submitter?

    +

    How to decentralize the Batch Submitter?

    To uphold the aforementioned principles, it is essential to ensure that multiple sequencers can share rollup tasks evenly within the same time frame. Our approach to achieving this involves a rotation system for sequencers to take turns with the responsibility of calling the batch submitter, as detailed below:

    -

    Submitter Rotation

    +

    Submitter Rotation

    • Epoch Cycle Role Switching: Sequencers alternate roles as batch submitters within an established Epoch cycle.
    • Cross-Epoch Execution Capability: Any Sequencer can perform a Rollup for another Sequencer's Epoch.
    • Timeout Logging: The system records instances when not a single rollup happens during an epoch, the epoch will be marked as “timeout” as well as the responsible sequencer.
    -

    Timeout

    +

    Timeout

    • Timeout Identification: If an epoch passes without a rollup (batch submission), it's identified as a "timeout." The timing of a rollup is pegged to the confirmation time of the Layer 1 rollup transaction.

      @@ -69,17 +73,17 @@

      TimeoutPenalties for Timeout

      +

      Penalties for Timeout

      • Accumulated Penalties: Sequencers that frequently exhibit timeout behaviors may face penalties that related to their Layer 1 ETH staking, if the timeout records reaches to a certain level, sequencer may/will be slashed from the sequencer network.
      -

      Module Design

      +

      Module Design

      Below you can find the contracts that are responsible for each module and their responsibilities:

      -

      Layer1

      +

      Layer1

      • RollupContract: records the rollup executor and sync with L2
      -

      Layer2

      +

      Layer2

      • SequencerContract: Sync Sequencers
      • GovContract: Manage Batch & Epoch Parameters
      • @@ -92,6 +96,6 @@

        Layer2

    +
    \ No newline at end of file diff --git a/build/docs/how-morph-works/general-protocol-design/transactions-life-cycle/index.html b/build/docs/how-morph-works/general-protocol-design/transactions-life-cycle/index.html index 32244d79e..2ee88340a 100644 --- a/build/docs/how-morph-works/general-protocol-design/transactions-life-cycle/index.html +++ b/build/docs/how-morph-works/general-protocol-design/transactions-life-cycle/index.html @@ -3,12 +3,16 @@ -Transactions Life Cycle | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Transactions Life Cycle | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Transactions Life Cycle

    How is a L2 transaction processed on Morph

    +

    Transactions Life Cycle

    How is a L2 transaction processed on Morph

    1. Submit Transaction
    @@ -34,14 +38,14 @@
  • Batch Verification
  • A batch (so do the transactions within the batch) will first go through the BLS signature verification by the rollup contract to confirm the L2 consensus results, and then a batch will go through a challenge period to be marked as finalized, solidifying their status within the L1 and L2 state.

    -

    Morph Transaction Status

    -

    Processing​

    +

    Morph Transaction Status

    +

    Processing​

    Once submitted, a transaction enters the consensus phase managed by sequencers and is placed into a block pre-execution.

    -

    Confirmed​

    +

    Confirmed​

    Post-execution by the Sequencer, the transaction’s updated state is local to L2. It is then batched and sent to L1, where it must undergo a challenge period before finalization.

    -

    Safe

    +

    Safe

    The batch that contains the transaction is submitted to Layer 1 but not finalized yet.

    -

    Finalized​

    -

    A transaction is considered finalized after it survives the challenge period or is verified by a Zero-Knowledge Proof (ZK-Proof). Only then is it officially integrated into the final L1 and L2 state.

    +

    Finalized​

    +

    A transaction is considered finalized after it survives the challenge period or is verified by a Zero-Knowledge Proof (ZK-Proof). Only then is it officially integrated into the final L1 and L2 state.

    \ No newline at end of file diff --git a/build/docs/how-morph-works/intro/index.html b/build/docs/how-morph-works/intro/index.html index 1e6dcd7ce..70b0f4e96 100644 --- a/build/docs/how-morph-works/intro/index.html +++ b/build/docs/how-morph-works/intro/index.html @@ -3,17 +3,21 @@ -Introduction | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Introduction | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Introduction

    This section provides an overview of Morph’s protocol architecture, including:

    +

    Introduction

    This section provides an overview of Morph’s protocol architecture, including:

    • The Decentralized Sequencer Network
    • Optimistic zkEVM & Responsive Validity Proof (RVP)
    • Morph's Modular Architecture
    • General Protocol Design
    • -
    +
    \ No newline at end of file diff --git a/build/docs/how-morph-works/morph-modular-design/index.html b/build/docs/how-morph-works/morph-modular-design/index.html index a05a6be3f..acdf3f6ec 100644 --- a/build/docs/how-morph-works/morph-modular-design/index.html +++ b/build/docs/how-morph-works/morph-modular-design/index.html @@ -3,14 +3,18 @@ -Morph Modular Design | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Morph Modular Design | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Morph Modular Design

    The modular design of blockchain technology, known for its improved composability, has become a prevalent trend. Morph leverages this design principle to enhance its architecture and functionality.

    -

    arichitecture

    -

    Overview

    +

    Morph Modular Design

    The modular design of blockchain technology, known for its improved composability, has become a prevalent trend. Morph leverages this design principle to enhance its architecture and functionality.

    +

    arichitecture

    +

    Overview

    A modular design typically divides a Layer 1 blockchain into four core functions:

    1. Consensus
    2. @@ -19,18 +23,18 @@

      Overview3 Major Morph Modules

      -

      Sequencer Network - Consensus & Execution

      -

      Sequencer Network

      +

      3 Major Morph Modules

      +

      Sequencer Network - Consensus & Execution

      +

      Sequencer Network

      Sequencer network responsible for the execution & consensus of the Layer 2 transactions, for more details please refer to Morph's decentralized sequencers.

      -

      Optimistic zkEVM - Settlement

      -

      Optimistic zkEVM

      +

      Optimistic zkEVM - Settlement

      +

      Optimistic zkEVM

      State verification ensures that state changes on Layer 2 are valid on Layer 1. Morph introduces Optimistic zkEVM, a hybrid solution combining zk-rollups and optimistic rollups for state verification. The process involves a Morph innovation known as Responsive Validity Proof (RVP). This innovative approach finalizes and settles Layer 2 transactions and states efficiently. For more details, refer to the documentation on Responsive Validity Proof.

      -

      Rollup - Data Availability

      -

      Rollup

      +

      Rollup - Data Availability

      +

      Rollup

      The Rollup process involves submitting Layer 2 transactions and states to Layer 1, ensuring data availability. Morph's rollup strategy maximizes efficiency by compressing block content using zk-proofs, which helps manage the cost of Layer 1 data availability.

      -

      5 Morph Roles

      -

      Sequencers

      +

      5 Morph Roles

      +

      Sequencers

      Sequencers play a crucial role in the network by:

      -

      Prover

      +

      Prover

      Provers are essential for generating zk proofs when a sequencer is challenged. They synchronize Layer 2 transaction information and produce the necessary zk proofs to validate state changes.

      -

      Validator

      +

      Validator

      Validators can be any user and play a key role in ensuring the correctness of states submitted by sequencers to Layer 1. They maintain an L2 node to synchronize transactions and state changes, triggering challenges when incorrect states are identified.

      -

      Nodes

      +

      Nodes

      Nodes facilitate easier access to Layer 2 transactions and states without actively participating in network operations. Running an L2 node is open to anyone and does not require permission.

      -

      Layer 1

      +

      Layer 1

      Every Layer 2 solution relies on a Layer 1 blockchain for final settlements and data availability. For Morph, this role is fulfilled by Ethereum. Key contracts on Layer 1 ensure the security and finality of Layer 2 transactions and states.

      -

      6 Morph Components

      -

      L2 Node​

      +

      6 Morph Components

      +

      L2 Node​

      The L2 node is central to Morph's architecture, interacting with various modules and roles. It includes sub-components such as:

      • Transactions Manager (Mempool): Manages all Layer 2 transactions, accepting and storing user-initiated transactions.
      • Executor: Applies state transitions and maintains the real-time status of Layer 2.
      • Synchronizer: Synchronizes data between L2 nodes to restore network status.
      -

      Batch Submitter​

      +

      Batch Submitter​

      The Batch Submitter is part of the sequencer, responsible for continuously obtaining L2 blocks, packaging them into batches, and assembling the batches into Layer 1 transactions, which are then submitted to the Layer 1 contract.

      -

      Consensus Client​

      +

      Consensus Client​

      Each sequencer runs a consensus client to reach consensus with other sequencers. The current design uses the Tendermint client to ensure seamless integration and developer friendliness.

      -

      zkEVM​

      +

      zkEVM​

      zkEVM is part of the Prover and is a zk-friendly virtual machine used to generate zk proofs for Ethereum blocks and state changes. These zk proofs are ultimately used to prove the validity of L2 transactions and states.

      -

      Aggregators​

      +

      Aggregators​

      Aggregators work with zkEVM to reduce the cost of verifying zk proofs by aggregating them for block production.

      -

      Layer 1 Contract​

      +

      Layer 1 Contract​

      These contracts on Ethereum store Layer 2 transactions, execute global state changes, and bridge assets and information between Layer 2 and Layer 1. They also manage the election and governance of the sequencer set, inheriting the security of Ethereum.

      -

      Integration of Components, Roles, and Modules

      -

      modular

      -

      The components form the foundation of the various roles in Morph. For instance, running an L2 node allows one to become a Node, while adding batch submitter and consensus client functionalities enables the role of Sequencer. These roles collaborate to perform the core functions of Morph, creating a complete and efficient rollup solution.

    +

    Integration of Components, Roles, and Modules

    +

    modular

    +

    The components form the foundation of the various roles in Morph. For instance, running an L2 node allows one to become a Node, while adding batch submitter and consensus client functionalities enables the role of Sequencer. These roles collaborate to perform the core functions of Morph, creating a complete and efficient rollup solution.

    \ No newline at end of file diff --git a/build/docs/how-morph-works/optimistic-zkevm/index.html b/build/docs/how-morph-works/optimistic-zkevm/index.html index 6c07e924d..0fe7977f7 100644 --- a/build/docs/how-morph-works/optimistic-zkevm/index.html +++ b/build/docs/how-morph-works/optimistic-zkevm/index.html @@ -3,17 +3,21 @@ -Optimistic zkEVM | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Optimistic zkEVM | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Optimistic zkEVM

    RVP

    -

    Introduction to State Verification

    +

    Optimistic zkEVM

    RVP

    +

    Introduction to State Verification

    Layer 2 state verification traditionally falls into two categories: fraud proofs and validity proofs. Morph introduces a new verification method called Responsive Validity Proof (RVP), combining the benefits of both approaches to address their limitations. Fraud proofs, while effective, suffer from capital inefficiency and low security assumptions. Additionally, no Optimistic Rollup (OP-Rollup) has fully implemented a permissionless fraud-proof challenge mechanism. Conversely, validity proofs offer high security but face practical issues with cost and efficiency that hinder Rollup scalability.

    -

    The Problem with Optimistic Rollups

    +

    The Problem with Optimistic Rollups

    In this model, Layer 2 (L2) optimistically assumes that the state changes submitted by the sequencer are valid without actively verifying their authenticity. Instead, a challenge period is introduced before the state changes are confirmed on Layer 1 (L1). During this period, external challengers verify the sequencer's submissions based on their own synchronized network status. If they find discrepancies, challengers can trigger a challenge process on L1 to prevent incorrect states from being confirmed.

    -

    Challenge Mechanism: Although all optimistic rollups claim to implement fraud proofs, only Arbitrum has successfully deployed them on the mainnet. Furthermore, the challengers are often limited to several whitelisted addresses. Fraud proofs in current optimistic rollup projects can be categorized into two types:

    +

    Challenge Mechanism: Although all optimistic rollups claim to implement fraud proofs, only very a few had successfully deployed them on the mainnet. Furthermore, the challengers are often limited to several whitelisted addresses. Fraud proofs in current optimistic rollup projects can be categorized into two types:

    Non-Interactive Fraud Proofs: When a new state submitted by the sequencer is challenged, L1 re-executes all corresponding L2 transactions to generate a valid state for comparison with the state submitted by the sequencer. This process incurs significant gas costs and may lead to discrepancies between L2 and L1, as some transactions might produce different outcomes on L2 compared to L1, or L1 might not be able to execute certain L2 transactions. Optimism (OP) once used this approach but abandoned it due to these issues.

    Interactive Fraud Proofs: To address the issues of non-interactive fraud proofs, multi-round interactive fraud proofs were introduced. This method involves determining the specific instruction execution that caused the incorrectness through multiple rounds of interaction between the sequencer and the challenger, then confirming fraud by executing the corresponding instructions on L1. This approach reduces computational costs and diminishes the issue of incongruent outcomes between L1 and L2. However, it introduces complexities, such as:

      @@ -23,51 +27,51 @@

      What is RVP?​

      -

      RVP

      +

      What is RVP?​

      +

      RVP

      Responsive Validity Proof (RVP) integrates ZK-based validity proofs into the optimistic rollup framework. The process is as follows:

      When challengers detect that the sequencer has submitted incorrect data, they initiate a challenge request to the sequencer on Layer 1 (L1). The sequencer must then generate the corresponding Zero-Knowledge (ZK) proof within a specified time (challenge period) and pass the verification of the L1 contract. If the verification passes, the challenge fails; otherwise, the challenge succeeds. This process combines the benefits of optimistic rollups and ZK-rollups, providing a balanced approach to security and efficiency.

      -

      Advantages of RVP Compared to Interactive Fraud Proofs

      +

      Advantages of RVP Compared to Interactive Fraud Proofs

        -
      1. Shorter Challenge Period: RVP can reduce the challenge period from the typical 7 days to just 1-3 days, improving overall efficiency and user experience.
      2. +
      3. Shorter Challenge Period: RVP can reduce the challenge period from the typical 7 days to just 1-3 days, improving overall efficiency and user experience. Right now the Morph mainnet has 48 hrs (2 days) challenge window.
      4. Reduced L2 Submission Costs: By using validity proofs, Layer 2 (L2) does not need to include most transaction bytes, significantly lowering submission costs.
      5. Improved Challenger Experience: With RVP, challengers only need to initiate the challenge. The sequencer must prove their correctness by generating and verifying the corresponding ZK-proof, simplifying the challenger's responsibilities.
      6. Seamless Transition to ZK-Rollup: The architectural design of RVP allows for an easy transition to a complete ZK-rollup. The primary change required is adjusting the sequencer's ZK-proof submission methods from responsive to active.

      RVP enhances the optimistic rollup model by incorporating ZK-proofs, offering a more efficient, cost-effective, and secure solution. It addresses the limitations of traditional fraud proofs and paves the way for a seamless transition to full ZK-rollup implementations in the future.

      -

      How Can RVP Shorten the Challenge Period of an Optimistic Rollup?

      -

      The Need for a Challenge Period

      +

      How Can RVP Shorten the Challenge Period of an Optimistic Rollup?

      +

      The Need for a Challenge Period

      Optimistic rollups incorporate a challenge period (or withdrawal period) to ensure that any malicious submissions by the sequencer can be identified and contested. This period provides sufficient time for challengers to verify transactions, conduct fraud proofs, and complete the challenge process, thereby ensuring that only valid state changes are confirmed on Layer 1 (L1). Two main factors influence the length of the challenge period:

      1. Completion Time: The time required for both parties to complete the challenge process.
      2. Mitigating Malicious Behavior: Ensuring that there is enough time to address any attempts by sequencers to maliciously block the challenger’s transactions on L1.
      -

      Solutions to Shorten the Challenge Period

      +

      Solutions to Shorten the Challenge Period

      Concise and Direct Challenge Process: For multi-round interactive fraud proofs, the entire challenge process might require several rounds of interaction, each demanding significant time. For example, if the process requires 10 rounds, at least 20 blocks of time are needed to complete the challenge, considering the back-and-forth responses. In contrast, RVP simplifies the challenge process by requiring only one interaction: the sequencer uploads the ZK-proof of the batch, which is then verified on L1. This streamlined process addresses the main problem of whether challengers have enough time to detect and prove incorrectness, thus significantly reducing the challenge period.

      Protection Against Malicious Behavior: In interactive fraud-proof systems, the challenged party might attempt to interfere with the challenge progress, such as launching a DoS attack on L1 to prevent challengers from interacting with L1 and submitting proofs. With RVP, challengers only need to trigger the challenge. Once the challenge is initiated, the sequencer has no opportunity to interfere. The sequencer must then prove the correctness of its submission through the ZK-proof. This ensures that the normal challenge process is not affected by malicious behavior, further shortening the challenge period.

      -

      Key Benefits of RVP in Reducing the Challenge Period

      +

      Key Benefits of RVP in Reducing the Challenge Period

      • Efficiency: The single interaction required for RVP simplifies the challenge process, reducing the time needed for resolution.
      • Security: By relying on ZK-proofs, RVP provides a robust mechanism to validate state changes without lengthy interactions.
      • Cost-Effectiveness: The reduction in the number of interactions lowers the gas costs associated with challenge processes on L1.

      By addressing these factors, RVP effectively shortens the challenge period from the traditional 7 days to just 1-3 days, offering a more efficient and secure solution for optimistic rollups.

      -

      Why is the Operating Cost Lower for L2 Based on RVP?

      -

      Compression of Transactions

      +

      Why is the Operating Cost Lower for L2 Based on RVP?

      +

      Compression of Transactions

      In ZK-rollups, the validity of each transaction is confirmed through a submitted ZK-proof, which eliminates the need to include extensive transaction details. For example, the length of an Ethereum transaction is approximately 110 bytes, with the signature occupying around 68 bytes. In optimistic rollups, because transactions need to be replayed on L1, these signatures must be included to ensure validity. This increases the cost. However, ZK-rollups only need to retain basic transaction information because the validity proof covers the entire batch. This compression capability reduces the amount of data that needs to be submitted to L1, significantly lowering costs.

      -

      Efficient Data Submission

      +

      Efficient Data Submission

      RVP utilizes ZK-proofs to validate transactions, adopting the ZK-rollup advantage of transaction compression during batch data submission. This reduces the overall data volume and associated costs. Additionally, when there are no challenges, the sequencer does not incur the cost of generating and submitting ZK-proofs, further lowering operational expenses.

      -

      Comparison with Existing Solutions

      +

      Comparison with Existing Solutions

      The design of RVP ensures that the cost of rollup operations is lower than that of both existing optimistic rollups and traditional ZK-rollups. This efficiency is achieved by:

      • Reducing the need for detailed transaction replays on L1.
      • Leveraging ZK-proofs only when necessary, minimizing unnecessary proof generation costs.
      -

      RVP is Friendly to Challengers

      +

      RVP is Friendly to Challengers

      The core of RVP is the use of validity proofs to ultimately validate challenged data. This benefits challengers in the following ways:

      1. Simplified Challenge Process:
      2. @@ -91,16 +95,67 @@

        Why do sequencers have to take on the responsibility of submitting ZK-proofs?​

        +

        Why do sequencers have to take on the responsibility of submitting ZK-proofs?​

        Some proposals have suggested that challengers could demonstrate the falsehood of a sequencer's submission by providing their own submission and corresponding ZK-proof. The two submissions could then be compared to identify any fraudulent activity by the sequencer. However, there are significant concerns with this approach:

        Challengers would need to generate ZK-proofs using the transactions provided by the sequencer. If the sequencer submits invalid transactions, challengers cannot create ZK-proofs that can be authenticated on Layer 1 (L1). Therefore, it is more effective for sequencers to prove the correctness of their submissions. This approach ensures that the entity responsible for the transactions verifies their accuracy, maintaining the integrity of the system..

        -

        Why Not Simply Employ ZK-Rollups?

        +

        Why Not Simply Employ ZK-Rollups?

        While verifying the validity of every state submission by the sequencer through numerous cryptographic calculations, as seen in current ZK-rollups, theoretically offers higher security, this approach presents several challenges:

        -

        The Cost of ZK-Rollup

        +

        The Cost of ZK-Rollup

        Currently, projects such as zkSync and Polygon zkEVM have launched on the mainnet, showing that generating and verifying ZK-proofs is no longer the most pressing issue. However, these ZK-proofs still face cost and efficiency constraints. For instance, the average transaction cost on zkSync Era ranges from 0.51toashighas0.51 to as high as 310, depending on L1 gas fees. This is significantly more expensive than the transaction costs of optimistic rollup projects like Arbitrum and Optimism. In contrast, with RVP, the high cost is avoided during normal network operation by only compressing transaction data using ZK-proofs when challenged. Normal operation incurs minimal costs, maintaining efficiency and affordability.

        -

        Block Finalization Time in ZK-Rollups

        +

        Block Finalization Time in ZK-Rollups

        Theoretically, ZK-rollups should have no withdrawal period because the entire L2 state transition verification process through ZK-proof should be completed in minutes or even seconds. However, the practical reality is different. Due to technical limitations, the time required for final verification of ZK-proofs on L1 is much slower than expected. For example, zkSync Era takes about 20-24 hours for L2 blocks to be finalized, which is not significantly different from the optimized withdrawal periods of optimistic rollups.

        -

        Seamless Transition with RVP-Based Rollups

        -

        L2 scaling solutions incorporating RVP technology can be designed using the ZK-rollup framework, allowing for an easy transition from RVP-based L2 to standard ZK-rollup L2 as ZK technology matures. The primary adjustment needed is changing the sequencer's ZK-proof submission methods from responsive to active. Thus, RVP-based systems can seamlessly adopt full ZK-rollup benefits in the future.

    +

    Seamless Transition with RVP-Based Rollups

    +

    L2 scaling solutions incorporating RVP technology can be designed using the ZK-rollup framework, allowing for an easy transition from RVP-based L2 to standard ZK-rollup L2 as ZK technology matures. The primary adjustment needed is changing the sequencer's ZK-proof submission methods from responsive to active. Thus, RVP-based systems can seamlessly adopt full ZK-rollup benefits in the future.

    +

    SP1 on Morph Mainnet

    +

    Morph’s Responsive Validity Proof (RVP) system morphed into the optimal design with our mainnet launch, enhanced by SP1.

    +

    Succinct, uniquely enables Morph’s RVP with their blazing fast zkVM and excellent developer experience. It represents a generational shift in how zkEVMs are built, custom circuits are a relic of that past. This upgrade refines RVP's capabilities, pushing the boundaries of scalability and security in blockchain applications.

    +

    Our RVP system with SP1 is:

    +
      +
    • Uses a generic, more developer-friendly Rust-based implementation
    • +
    • Generates proofs orders of magnitudes faster with SP1’s Prover Network
    • +
    • Handles unlimited transactions per block (previously capped at 100)
    • +
    +

    For users, this means:

    +
      +
    • Improved security and smoother user experience (thoroughly audited codes with faster challenge resolution and 2-day settlement)
    • +
    • Lower costs (more efficient proof generation for off-chain computation)
    • +
    • More scalable (no more transaction caps)
    • +
    +

    Morph Challengers Address List

    +

    As per our commitment to the decentralization of the challenging process, here is the list of all challenger addresses.

    +

    These addresses are responsible for monitoring the L2 state changes and responding to any malicious activities from the sequencers.

    +

    Challenger Address List

    +
    \ No newline at end of file diff --git a/build/docs/quick-start/bridge/index.html b/build/docs/quick-start/bridge/index.html index 06064a3d1..1dc87e5db 100644 --- a/build/docs/quick-start/bridge/index.html +++ b/build/docs/quick-start/bridge/index.html @@ -3,23 +3,29 @@ -Bridge | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Bridge | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Deposit from Holesky to Morph Testnet

    -

    Instructions:

    - +

    Bridge

    Deposit from Ethereum to Morph Mainnet

    +

    Please refer to the Morph Season 2 - Bridge Guide.

    +

    Deposit from Ethereum Holesky to Morph Testnet

    +

    Instructions:

    +
    1. Open your MetaMask wallet and switch to the Holesky network.
    -

    image1 -image1

    +

    image1 +image1

    1. Within Morph’s Bridge app, click Connect wallet, select MetaMask, and approve the connection if prompted.
    -

    image2

    +

    image2

    1. Make sure that Holesky is selected under ‘From’ and Morph L2 under ‘To’. If not, click the "↓" button to switch their positions.

      @@ -31,43 +37,43 @@

      Instructions:Click the Send button to initiate the deposit.

    -
    tip

    If this is your first time transferring an ERC20 token, you need to approve the Holesky Bridge contract to access your ERC20 token.

    +
    tip

    If this is your first time transferring an ERC20 token, you need to approve the Holesky Bridge contract to access your ERC20 token.

    1. A window will pop up asking for confirmation of the transfer transaction, click Deposit.
    -

    image3

    +

    image3

    1. Click the Confirm button in MetaMask. Once the transfer transaction is finalized, the token will be deducted from your Holesky wallet address.
    -

    image5

    +

    image5

    1. While you wait, you can check status of your transactions by clicking on the transactions button.
    -

    image6

    -

    How long does it take for a token to arrive to Morph Testnet ?

    +

    image6

    +

    How long does it take for a token to arrive to Morph Testnet ?

    A token transfer from Holesky to Morph Testnet may take 8 to 14 minutes (time for block to become Safe on Holesky) before it appears in your Morph wallet. To check the progress of your deposit transactions, follow these steps:

    1. Click your wallet address at the top-right corner of the Bridge web app.
    -

    image6

    +

    image6

    1. Click on Transactions. A pop-up panel will display your recent transactions.
    -
    tip

    Note: For deposit transactions (L1 -> L2), once your transaction is confirmed as Safe on Holesky (8 to 14 minutes), you will see a Success status. Your funds will then be relayed to L2.

    -

    image8

    +
    tip

    Note: For deposit transactions (L1 -> L2), once your transaction is confirmed as Safe on Holesky (8 to 14 minutes), you will see a Success status. Your funds will then be relayed to L2.

    +

    image8

    1. Click on the most recent Holesky transaction hash.
    -

    image9

    +

    image9

    1. You will be taken to a Transaction Details page in the Explorer. Verify your transaction status (this transaction is confirmed on Holesky).
    -

    image10

    +

    image10

    1. Once your transaction status shows success on L2, return to the Bridge app to see a transaction hash and funds in your Morph L2 wallet.
    -

    image11

    -

    image12

    +

    image11

    +

    image12

    Withdraw from Morph Testnet to Holesky

    To withdraw funds from Morph Testnet, follow these steps:

      @@ -77,7 +83,7 @@

      Withdraw from Morph Testnet to Holesky

    1. Wait for the verification challenge period, which lasts seven days from the time the withdrawal is proven on L1 (Holesky).
    2. Claim your withdrawal.
    -

    Initiate withdrawal

    +

    Initiate withdrawal

    1. Click Connect Wallet and select MetaMask. If prompted, approve the connection in your wallet.

      @@ -86,22 +92,22 @@

      Initiate

      Select Withdraw. Choose the asset and amount you wish to withdraw.

    -

    image13

    +

    image13

    1. Click Send ETH to Holesky.
    -

    image14

    +

    image14

    1. Click Initiate withdrawal, wait for a few minutes to confirm. After it is finished, you need to switch the network in your wallet and then prove the withdrawal on Holesky.
    -

    image15

    -

    image16

    +

    image15

    +

    image16

    1. Waiting for the batch submission to be completed.
    -

    image17

    -

    image18

    -

    Waiting for the verification challenge period

    +

    image17

    +

    image18

    +

    Waiting for the verification challenge period

    1. Click your address in the top right corner.

      @@ -110,20 +116,20 @@

      -

      image20

      -

      image21

      +

      image19

      +

      image20

      +

      image21

      1. You can search for the transaction hash on Morph Explorer.
      -

      image22

      -

      image23

      +

      image22

      +

      image23

      1. Click the L1 State Root Submission Tx to see when the transaction was written to L1 (Holesky).
      -

      image24

      -

      image25

      -

      Claim the Withdrawal

      +

      image24

      +

      image25

      +

      Claim the Withdrawal

      1. Once the challenge period is over, the status will change to Claim.

        @@ -132,14 +138,14 @@

        Claim t

        Click Claim withdrawal.

      -

      image26

      +

      image26

      1. Confirm the withdrawal in the wallet.
      -

      image27

      +

      image27

      1. Wait until the withdrawal is completed.
      -

      image28

    +

    image28

    \ No newline at end of file diff --git a/build/docs/quick-start/faucet/index.html b/build/docs/quick-start/faucet/index.html index 287414b87..1f0bbd66f 100644 --- a/build/docs/quick-start/faucet/index.html +++ b/build/docs/quick-start/faucet/index.html @@ -3,17 +3,21 @@ -Faucet | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Faucet | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Faucet

    Faucet

    -

    Morph Holesky Website Faucet

    -

    website faucet

    +

    Faucet

    Faucet

    +

    Morph Holesky Website Faucet

    +

    website faucet

    Our website faucet is live!

    Users can claim Morph ETH & USDT to fund their initial activities.

    -

    3rd Party Ethereum Holesky ETH Faucet

    +

    3rd Party Ethereum Holesky ETH Faucet

    To use Morph's public testnet, obtain testnet ETH on Holesky, then bridge it to the Morph testnet.

    Here are a few Holesky faucet apps:

    https://stakely.io/en/faucet/ethereum-holesky-testnet-eth

    @@ -22,18 +26,18 @@

    https://cloud.google.com/application/web3/faucet/ethereum (needs a Google account)

    Once you receive ETH on Holesky, you should see it in your wallet on the Holesky Network.

    It may take a few seconds for them to appear, but you can check the status by looking for a transaction to your address on the Holesky Block Explorer.

    -

    Discord Morph Holesky Faucet

    -

    Morph Holesky ETH

    +

    Discord Morph Holesky Faucet

    +

    Morph Holesky ETH

    You can obtain the Morph Holesky ETH in our discord too for development purposes.

    Using the /morph_eth command and type your address will grant you 0.01 Morph Holesky ETH.

    Once succeed, you will see the following message:

    -

    success

    -

    ERC20 USDT

    -
    tip

    Currently, we set the limit that for each discord user, you can only request the tokens once every 24 hours.

    +

    success

    +

    ERC20 USDT

    +
    tip

    Currently, we set the limit that for each discord user, you can only request the tokens once every 24 hours.

    You can obtain morph's version of USDT on Holesky through our discord faucet, here's how it works:

    1. -

      Join our discord server through this link.

      +

      Join our discord server through this link.

    2. Find the #| discord-faucet channel.

      @@ -42,7 +46,7 @@

      ERC20 USDTType /faucet in the channel and add your Holesky address behind it.

    -

    command

    +

    command

    1. Wait for a few seconds.

      @@ -51,13 +55,13 @@

      ERC20 USDTOnce succeeded, you will see this in the channel.

    -

    success

    +

    success

    1. Add the Morph Holesky USDT information to your wallet.
    -

    Ethereum Holesky USDT address: "0xD6e9Cd5ef382b0830653d1b2007D5Ca6987FaA26"

    Morph Holesky USDT address: "0x9E12AD42c4E4d2acFBADE01a96446e48e6764B98"

    +

    Ethereum Holesky USDT address: "0xD6e9Cd5ef382b0830653d1b2007D5Ca6987FaA26"

    Morph Holesky USDT address: "0x9E12AD42c4E4d2acFBADE01a96446e48e6764B98"

    1. Check you wallet for USDT balance and start to bridge!
    2. -
    +
    \ No newline at end of file diff --git a/build/docs/quick-start/morph-zoo/morph-points.htm/index.html b/build/docs/quick-start/morph-zoo/morph-points.htm/index.html deleted file mode 100644 index b0173976c..000000000 --- a/build/docs/quick-start/morph-zoo/morph-points.htm/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/build/docs/quick-start/morph-zoo/morph-points.html/index.html b/build/docs/quick-start/morph-zoo/morph-points.html/index.html deleted file mode 100644 index b0173976c..000000000 --- a/build/docs/quick-start/morph-zoo/morph-points.html/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/build/docs/quick-start/morph-zoo/morph-points/index.html b/build/docs/quick-start/morph-zoo/morph-points/index.html deleted file mode 100644 index c64eecd19..000000000 --- a/build/docs/quick-start/morph-zoo/morph-points/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - -Morph Points | Morph docs – The Optimistic zkEVM Scaling Solution docs - - - - -

    Morph Points

    To bring our community even closer to the action, we're excited to announce the Morph Zoo.

    -
      -
    • a multiphase program designed to engage, reward, and celebrate the vibrant ecosystem within our testnet and, eventually, our mainnet. Our aim is to immerse you in our world, one where consumer needs are prioritized and where your input directly impacts our growth trajectory.
    • -
    -

    Morph Points are used to measure your engagement and contributions within the Morph ecosystem with a variety of campaigns which will be listed in Morph Zoo. They represent your active participation and achievements in our world.

    -

    Morph Zoo's Season 1: The Genesis Jungle was officially launched on May 13, 2024.

    -

    How Do I Earn Morph Points?

    -

    To earn Morph points, you can participate in the following activities within Season 1:

    -
      -
    1. Engage with our ecosystem DApps. The more you do, the more you earn!
    2. -
    3. Check in daily to earn voting power, which can then be used to vote for your favorite projects. Voting earns you Morph Points!
    4. -
    5. Lastly, you can earn additional points by participating in events organized by Morph partners.
    6. -
    -

    Where will Morph Points be displayed?

    -

    Morph Points for season 1 will be recorded on the "My Points" page of the official campaign site. However, please note that Morph Points earned through dapp engagement will be calculated and displayed at the conclusion of the event, along with the final tally of all points earned through all activities.

    -

    What can I do with Morph Points?

    -

    Morph points will play an important role when taking into account future airdrops and other exclusive rewards. Stay tuned for more!

    -

    Can I transfer Morph Points?

    -

    No. Morph Points are linked to specific users and wallets with no way to transfer. -It's time to explore Morph's Genesis Jungle, discovering special dapps while earning generous Morph Points as you do!

    - - \ No newline at end of file diff --git a/build/docs/quick-start/morph-zoo/voting-rules.htm/index.html b/build/docs/quick-start/morph-zoo/voting-rules.htm/index.html deleted file mode 100644 index 8623bab5f..000000000 --- a/build/docs/quick-start/morph-zoo/voting-rules.htm/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/build/docs/quick-start/morph-zoo/voting-rules.html/index.html b/build/docs/quick-start/morph-zoo/voting-rules.html/index.html deleted file mode 100644 index 8623bab5f..000000000 --- a/build/docs/quick-start/morph-zoo/voting-rules.html/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/build/docs/quick-start/morph-zoo/voting-rules/index.html b/build/docs/quick-start/morph-zoo/voting-rules/index.html deleted file mode 100644 index 1d23eb592..000000000 --- a/build/docs/quick-start/morph-zoo/voting-rules/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - -Voting Rules in Voice of the Jungle | Morph docs – The Optimistic zkEVM Scaling Solution docs - - - - -

    Voting Rules in Voice of the Jungle

    Make your voice heard in our second Jungle activity: Voice of the Jungle. Use Voting power to vote for your favorite DApps, your votes help shape the ecosystem, make your 'roar' heard and you will be rewarded with Morph Points.

    -

    What is voting power?

    -

    To enhance our ecosystem and community, we’ve introduced a voting program to attract more valuable projects and DApps to the Morph ecosystem. Earn Voting Power through daily check-ins and unlocking bonus Mystery Boxes. Remember, it is the act of spending your Voting Power that earns you Morph Points, not the amount of unused Voting Power. At the end of the event, your Moph Points rewards will be calculated based on how much Voting Power you utilized, so be sure to vote every day!

    -

    How can I use my Voting Power?

    -

    You can utilize your Voting Power on the voting page to support projects that you like. You can vote for different projects and earn Points for the projects you vote for.

    -

    Voting rules:

    -

    1)Acquire Voting Power in two ways: daily check-ins and bonus Mystery Boxes.

    -
      -
    1. -

      To record your Voting Power and voting activities, you must sign in with your Web3 wallet. This verifies your Voting Power, without granting access to your assets.

      -
    2. -
    3. -

      You can allocate up to 100 Voting Power to each individual project per day. If you wish to vote more, you must wait until the next day.

      -
    4. -
    5. -

      Voting Power spent on a project is immediately consumed; it cannot be reused for multiple projects.

      -
    6. -
    7. -

      Only the act of voting will earn you Morph Points; simply accumulating Voting Power without using it will not earn you Morph Points for this activity.

      -
    8. -
    -

    Daily Check-in Rules:

    -

    Earn Voting Power by checking in daily. On the first day that you check-in, you will receive 2 Voting Power. On day two, you will receive 2 more Voting Power plus the same amount of Voting Power you received the previous day. After checking in for 7 days in a row, your Voting Power reward for that 7th day will be doubled to 28. So if you consistently check in for a week, you will receive 70 Voting Power total:

    -

    2(Day 1) + 4(Day 2) + 6(Day 3) + 8(Day 4) + 10(Day 5) + 12(Day 6) + 28(Day 7 you get a 2x multiplier bonus [14*2]) = 70

    -

    Please remember that on the 8th consecutive check-in day, your Voting Power reward will be reset back to 2, as this marks the beginning of a new 7-day cycle. However, to reward your commitment, on the 14th consecutive day, your bonus multiplier will be increased to 3x for that day. This means that on the fourteenth day, you actually receive 56 Voting Power. In fact, every consecutive day that you check in that lands on a multiple of 7, your bonus multiplier will increase by an additional factor compared to the previous week.

    -

    So if you consistently check in every day for a month or four weeks in a row, you will receive a total of 448 Voting Power:

    -

    (2+4+6+8+10+12)x4=168 -The same increasing Voting Power for the first 6 days of each week -+ -(28+56+84+112) = 280 The 7th day reward with an increasing multiplier each week -= 448

    -
    tip

    Please note that forgetting to check in one day will disrupt the 7-day cycle resetting it completely. This means you will start over from day one if that happens. For instance, if you have consistently checked in for 2 days but forgot on the 3rd day, you will only receive 2 Voting Power on the 4th day instead of 8.

    - - \ No newline at end of file diff --git a/build/docs/quick-start/wallet-setup/index.html b/build/docs/quick-start/wallet-setup/index.html index 3fc094496..804e48fba 100644 --- a/build/docs/quick-start/wallet-setup/index.html +++ b/build/docs/quick-start/wallet-setup/index.html @@ -3,15 +3,19 @@ -Wallet Setup | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Wallet Setup | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Wallet Setup

    Wallet

    +

    Wallet Setup

    Wallet

    To interact with dApps on Morph, you need a compatible wallet. Below are some example wallets and configuration tips.

    -

    Bitget Wallet

    -

    Bitget Wallet

    +

    Bitget Wallet

    +

    Bitget Wallet

    +

    You can also visit chainlist to add Morph.

    \ No newline at end of file diff --git a/build/docs/quick-start/welcome-to-morph/index.html b/build/docs/quick-start/welcome-to-morph/index.html index eced749f2..cb7ba5212 100644 --- a/build/docs/quick-start/welcome-to-morph/index.html +++ b/build/docs/quick-start/welcome-to-morph/index.html @@ -3,17 +3,21 @@ -Welcome to Morph! | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Welcome to Morph! | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Welcome to Morph!

    Thank you for choosing Morph! We're excited to have you onboard with the first optimistic ZK-EVM scaling solution for Ethereum. Morph is designed to meet a variety of needs, and you can easily navigate to the most relevant information for your interests.

    -
    tip

    Mainnet Beta Stage: Morph is currently in the mainnet beta phase, offering a brand-new platform for exploration. We encourage you to delve into its features and capabilities.

    +

    Welcome to Morph!

    Thank you for choosing Morph! We're excited to have you onboard with the first optimistic ZK-EVM scaling solution for Ethereum. Morph is designed to meet a variety of needs, and you can easily navigate to the most relevant information for your interests.

    +
    tip

    Mainnet Beta Stage: Morph is currently in the mainnet beta phase, offering a brand-new platform for exploration. We encourage you to delve into its features and capabilities.

    Web3 Enthusiasts: If you are a web3 enthusiast who wants to try out the Morph, you can start with how to connect to Morph.

    Researchers: For those seeking in-depth understanding of Morph's unique offerings compared to other solutions, the how Morph works section is your go-to resource for comprehensive details.

    Developers: As a skilled developer ready to build on Morph, the developer documentation provides all necessary resources and guides to kickstart your development journey.

    -

    Looking for help

    -

    Having issues while developing or exploring? Join our discord channel and talk to us in the right channel. We would love to hear your thoughts or feedback on how we can improve your experience, too.

    +

    Looking for help

    +

    Having issues while developing or exploring? Join our discord channel and talk to us in the right channel. We would love to hear your thoughts or feedback on how we can improve your experience, too.

    \ No newline at end of file diff --git a/build/img/cards/bridge.svg b/build/img/cards/bridge.svg new file mode 100644 index 000000000..5c99ae831 --- /dev/null +++ b/build/img/cards/bridge.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/contract.svg b/build/img/cards/contract.svg new file mode 100644 index 000000000..dc27296be --- /dev/null +++ b/build/img/cards/contract.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/dev.svg b/build/img/cards/dev.svg new file mode 100644 index 000000000..1bebd669f --- /dev/null +++ b/build/img/cards/dev.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/faucet.svg b/build/img/cards/faucet.svg new file mode 100644 index 000000000..0a48894bc --- /dev/null +++ b/build/img/cards/faucet.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/build/img/cards/guide.svg b/build/img/cards/guide.svg new file mode 100644 index 000000000..f9d282269 --- /dev/null +++ b/build/img/cards/guide.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/logo-dark.svg b/build/img/cards/logo-dark.svg new file mode 100644 index 000000000..b231fa745 --- /dev/null +++ b/build/img/cards/logo-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/logo.svg b/build/img/cards/logo.svg new file mode 100644 index 000000000..c0d560126 --- /dev/null +++ b/build/img/cards/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/node.svg b/build/img/cards/node.svg new file mode 100644 index 000000000..4411e96be --- /dev/null +++ b/build/img/cards/node.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/research.svg b/build/img/cards/research.svg new file mode 100644 index 000000000..a2e67aa4f --- /dev/null +++ b/build/img/cards/research.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/tools.svg b/build/img/cards/tools.svg new file mode 100644 index 000000000..c880a085d --- /dev/null +++ b/build/img/cards/tools.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/users.svg b/build/img/cards/users.svg new file mode 100644 index 000000000..7220f0cbb --- /dev/null +++ b/build/img/cards/users.svg @@ -0,0 +1,3 @@ + + + diff --git a/build/img/cards/wallet.svg b/build/img/cards/wallet.svg new file mode 100644 index 000000000..41466bfe4 --- /dev/null +++ b/build/img/cards/wallet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/build/index.html b/build/index.html index 845ef621f..159a7dab3 100644 --- a/build/index.html +++ b/build/index.html @@ -3,11 +3,15 @@ -Morph docs – The Optimistic zkEVM Scaling Solution docs | Morph docs – The Optimistic zkEVM Scaling Solution docs - - +Morph docs – The Optimistic zkEVM Scaling Solution docs | Morph docs – The Optimistic zkEVM Scaling Solution docs + + + + + + -

    Your gateway to the morph ecosystem

    MORPH-DOCS

    +

    Your gateway to the morph ecosystem

    MORPH-DOCS

    \ No newline at end of file diff --git a/build/js/cookbookdev.index.cjs.js b/build/js/cookbookdev.index.cjs.js new file mode 100644 index 000000000..38ce61f90 --- /dev/null +++ b/build/js/cookbookdev.index.cjs.js @@ -0,0 +1,1210 @@ +!function(){"use strict";"undefined"!=typeof window&&(window.__cookbook_styles=':host{--ifm-color-scheme: light;--ifm-dark-value: 10%;--ifm-darker-value: 15%;--ifm-darkest-value: 30%;--ifm-light-value: 15%;--ifm-lighter-value: 30%;--ifm-lightest-value: 50%;--ifm-contrast-background-value: 90%;--ifm-contrast-foreground-value: 70%;--ifm-contrast-background-dark-value: 70%;--ifm-contrast-foreground-dark-value: 90%;--ifm-color-primary: #3578e5;--ifm-color-secondary: #ebedf0;--ifm-color-success: #00a400;--ifm-color-info: #54c7ec;--ifm-color-warning: #ffba00;--ifm-color-danger: #fa383e;--ifm-color-primary-dark: #306cce;--ifm-color-primary-darker: #2d66c3;--ifm-color-primary-darkest: #2554a0;--ifm-color-primary-light: #538ce9;--ifm-color-primary-lighter: #72a1ed;--ifm-color-primary-lightest: #9abcf2;--ifm-color-primary-contrast-background: #ebf2fc;--ifm-color-primary-contrast-foreground: #102445;--ifm-color-secondary-dark: #d4d5d8;--ifm-color-secondary-darker: #c8c9cc;--ifm-color-secondary-darkest: #a4a6a8;--ifm-color-secondary-light: #eef0f2;--ifm-color-secondary-lighter: #f1f2f5;--ifm-color-secondary-lightest: #f5f6f8;--ifm-color-secondary-contrast-background: #fdfdfe;--ifm-color-secondary-contrast-foreground: #474748;--ifm-color-success-dark: #009400;--ifm-color-success-darker: #008b00;--ifm-color-success-darkest: #007300;--ifm-color-success-light: #26b226;--ifm-color-success-lighter: #4dbf4d;--ifm-color-success-lightest: #80d280;--ifm-color-success-contrast-background: #e6f6e6;--ifm-color-success-contrast-foreground: #003100;--ifm-color-info-dark: #4cb3d4;--ifm-color-info-darker: #47a9c9;--ifm-color-info-darkest: #3b8ba5;--ifm-color-info-light: #6ecfef;--ifm-color-info-lighter: #87d8f2;--ifm-color-info-lightest: #aae3f6;--ifm-color-info-contrast-background: #eef9fd;--ifm-color-info-contrast-foreground: #193c47;--ifm-color-warning-dark: #e6a700;--ifm-color-warning-darker: #d99e00;--ifm-color-warning-darkest: #b38200;--ifm-color-warning-light: #ffc426;--ifm-color-warning-lighter: #ffcf4d;--ifm-color-warning-lightest: #ffdd80;--ifm-color-warning-contrast-background: #fff8e6;--ifm-color-warning-contrast-foreground: #4d3800;--ifm-color-danger-dark: #e13238;--ifm-color-danger-darker: #d53035;--ifm-color-danger-darkest: #af272b;--ifm-color-danger-light: #fb565b;--ifm-color-danger-lighter: #fb7478;--ifm-color-danger-lightest: #fd9c9f;--ifm-color-danger-contrast-background: #ffebec;--ifm-color-danger-contrast-foreground: #4b1113;--ifm-color-white: #fff;--ifm-color-black: #000;--ifm-color-gray-0: var(--ifm-color-white);--ifm-color-gray-100: #f5f6f7;--ifm-color-gray-200: #ebedf0;--ifm-color-gray-300: #dadde1;--ifm-color-gray-400: #ccd0d5;--ifm-color-gray-500: #bec3c9;--ifm-color-gray-600: #8d949e;--ifm-color-gray-700: #606770;--ifm-color-gray-800: #444950;--ifm-color-gray-900: #1c1e21;--ifm-color-gray-1000: var(--ifm-color-black);--ifm-color-emphasis-0: var(--ifm-color-gray-0);--ifm-color-emphasis-100: var(--ifm-color-gray-100);--ifm-color-emphasis-200: var(--ifm-color-gray-200);--ifm-color-emphasis-300: var(--ifm-color-gray-300);--ifm-color-emphasis-400: var(--ifm-color-gray-400);--ifm-color-emphasis-600: var(--ifm-color-gray-600);--ifm-color-emphasis-700: var(--ifm-color-gray-700);--ifm-color-emphasis-800: var(--ifm-color-gray-800);--ifm-color-emphasis-900: var(--ifm-color-gray-900);--ifm-color-emphasis-1000: var(--ifm-color-gray-1000);--ifm-color-content: var(--ifm-color-emphasis-900);--ifm-color-content-inverse: var(--ifm-color-emphasis-0);--ifm-color-content-secondary: #525860;--ifm-background-color: transparent;--ifm-background-surface-color: var(--ifm-color-content-inverse);--ifm-global-border-width: 1px;--ifm-global-radius: 6.4px;--ifm-hover-overlay: rgba(0, 0, 0, .05);--ifm-font-color-base: var(--ifm-color-content);--ifm-font-color-base-inverse: var(--ifm-color-content-inverse);--ifm-font-color-secondary: var(--ifm-color-content-secondary);--ifm-font-family-base: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--ifm-font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--ifm-font-size-base: 100%;--ifm-font-weight-light: 300;--ifm-font-weight-normal: 400;--ifm-font-weight-semibold: 500;--ifm-font-weight-bold: 700;--ifm-font-weight-base: var(--ifm-font-weight-normal);--ifm-line-height-base: 1.65;--ifm-global-spacing: 16px;--ifm-spacing-vertical: var(--ifm-global-spacing);--ifm-spacing-horizontal: var(--ifm-global-spacing);--ifm-transition-fast: .2s;--ifm-transition-slow: .4s;--ifm-transition-timing-default: cubic-bezier(.08, .52, .52, 1);--ifm-global-shadow-lw: 0 1px 2px 0 rgba(0, 0, 0, .1);--ifm-global-shadow-md: 0 5px 40px rgba(0, 0, 0, .2);--ifm-global-shadow-tl: 0 12px 28px 0 rgba(0, 0, 0, .2), 0 2px 4px 0 rgba(0, 0, 0, .1);--ifm-z-index-dropdown: 100;--ifm-z-index-fixed: 200;--ifm-z-index-overlay: 400;--ifm-container-width: 1140px;--ifm-container-width-xl: 1320px;--ifm-code-background: #f6f7f8;--ifm-code-border-radius: var(--ifm-global-radius);--ifm-code-font-size: 90%;--ifm-code-padding-horizontal: 1.6px;--ifm-code-padding-vertical: 1.6px;--ifm-pre-background: var(--ifm-code-background);--ifm-pre-border-radius: var(--ifm-code-border-radius);--ifm-pre-color: inherit;--ifm-pre-line-height: 1.45;--ifm-pre-padding: 16px;--ifm-heading-color: inherit;--ifm-heading-margin-top: 0;--ifm-heading-margin-bottom: var(--ifm-spacing-vertical);--ifm-heading-font-family: var(--ifm-font-family-base);--ifm-heading-font-weight: var(--ifm-font-weight-bold);--ifm-heading-line-height: 1.25;--ifm-h1-font-size: 32px;--ifm-h2-font-size: 24px;--ifm-h3-font-size: 20px;--ifm-h4-font-size: 16px;--ifm-h5-font-size: 14px;--ifm-h6-font-size: 13.6px;--ifm-image-alignment-padding: 20px;--ifm-leading-desktop: 1.25;--ifm-leading: calc(var(--ifm-leading-desktop) * 16px);--ifm-list-left-padding: 32px;--ifm-list-margin: 16px;--ifm-list-item-margin: 4px;--ifm-list-paragraph-margin: 16px;--ifm-table-cell-padding: 12px;--ifm-table-background: transparent;--ifm-table-stripe-background: rgba(0, 0, 0, .03);--ifm-table-border-width: 1px;--ifm-table-border-color: var(--ifm-color-emphasis-300);--ifm-table-head-background: inherit;--ifm-table-head-color: inherit;--ifm-table-head-font-weight: var(--ifm-font-weight-bold);--ifm-table-cell-color: inherit;--ifm-link-color: var(--ifm-color-primary);--ifm-link-decoration: underline;--ifm-link-hover-color: var(--ifm-link-color);--ifm-link-hover-decoration: underline;--ifm-paragraph-margin-bottom: var(--ifm-leading);--ifm-blockquote-font-size: var(--ifm-font-size-base);--ifm-blockquote-border-left-width: 2px;--ifm-blockquote-padding-horizontal: var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical: 0;--ifm-blockquote-shadow: none;--ifm-blockquote-color: var(--ifm-color-emphasis-800);--ifm-blockquote-border-color: var(--ifm-color-emphasis-300);--ifm-hr-background-color: var(--ifm-color-emphasis-500);--ifm-hr-height: 1px;--ifm-hr-margin-vertical: 24px;--ifm-scrollbar-size: 7px;--ifm-scrollbar-track-background-color: #f1f1f1;--ifm-scrollbar-thumb-background-color: silver;--ifm-scrollbar-thumb-hover-background-color: #a7a7a7;--ifm-alert-background-color: inherit;--ifm-alert-border-color: inherit;--ifm-alert-border-radius: var(--ifm-global-radius);--ifm-alert-border-width: 0px;--ifm-alert-border-left-width: 5px;--ifm-alert-color: var(--ifm-font-color-base);--ifm-alert-padding-horizontal: var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical: var(--ifm-spacing-vertical);--ifm-alert-shadow: var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin: 16px;--ifm-avatar-intro-alignment: inherit;--ifm-avatar-photo-size: 48px;--ifm-badge-background-color: inherit;--ifm-badge-border-color: inherit;--ifm-badge-border-radius: var(--ifm-global-radius);--ifm-badge-border-width: var(--ifm-global-border-width);--ifm-badge-color: var(--ifm-color-white);--ifm-badge-padding-horizontal: calc(var(--ifm-spacing-horizontal) * .5);--ifm-badge-padding-vertical: calc(var(--ifm-spacing-vertical) * .25);--ifm-breadcrumb-border-radius: 24px;--ifm-breadcrumb-spacing: 8px;--ifm-breadcrumb-color-active: var(--ifm-color-primary);--ifm-breadcrumb-item-background-active: var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal: 12.8px;--ifm-breadcrumb-padding-vertical: 6.4px;--ifm-breadcrumb-size-multiplier: 1;--ifm-breadcrumb-separator: url(\'data:image/svg+xml;utf8,\');--ifm-breadcrumb-separator-filter: none;--ifm-breadcrumb-separator-size: 8px;--ifm-breadcrumb-separator-size-multiplier: 1.25;--ifm-button-background-color: transparent;--ifm-button-border-color: var(--ifm-button-background-color);--ifm-button-border-width: var(--ifm-global-border-width);--ifm-button-font-weight: var(--ifm-font-weight-bold);--ifm-button-padding-horizontal: 24px;--ifm-button-padding-vertical: 6px;--ifm-button-size-multiplier: 1;--ifm-button-transition-duration: var(--ifm-transition-fast);--ifm-button-border-radius: calc(var(--ifm-global-radius) * var(--ifm-button-size-multiplier));--ifm-button-group-spacing: 2px;--ifm-card-background-color: var(--ifm-background-surface-color);--ifm-card-border-radius: calc(var(--ifm-global-radius) * 2);--ifm-card-horizontal-spacing: var(--ifm-global-spacing);--ifm-card-vertical-spacing: var(--ifm-global-spacing);--ifm-toc-border-color: var(--ifm-color-emphasis-300);--ifm-toc-link-color: var(--ifm-color-content-secondary);--ifm-toc-padding-vertical: 8px;--ifm-toc-padding-horizontal: 8px;--ifm-dropdown-background-color: var(--ifm-background-surface-color);--ifm-dropdown-font-weight: var(--ifm-font-weight-semibold);--ifm-dropdown-link-color: var(--ifm-font-color-base);--ifm-dropdown-hover-background-color: var(--ifm-hover-overlay);--ifm-footer-background-color: var(--ifm-color-emphasis-100);--ifm-footer-color: inherit;--ifm-footer-link-color: var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color: var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing: 8px;--ifm-footer-padding-horizontal: calc(var(--ifm-spacing-horizontal) * 2);--ifm-footer-padding-vertical: calc(var(--ifm-spacing-vertical) * 2);--ifm-footer-title-color: inherit;--ifm-footer-logo-max-width: min(480px, 90vw);--ifm-hero-background-color: var(--ifm-background-surface-color);--ifm-hero-text-color: var(--ifm-color-emphasis-800);--ifm-menu-color: var(--ifm-color-emphasis-700);--ifm-menu-color-active: var(--ifm-color-primary);--ifm-menu-color-background-active: var(--ifm-hover-overlay);--ifm-menu-color-background-hover: var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal: 12px;--ifm-menu-link-padding-vertical: 6px;--ifm-menu-link-sublist-icon: url(\'data:image/svg+xml;utf8,\');--ifm-menu-link-sublist-icon-filter: none;--ifm-navbar-background-color: var(--ifm-background-surface-color);--ifm-navbar-height: 60px;--ifm-navbar-item-padding-horizontal: 12px;--ifm-navbar-item-padding-vertical: 4px;--ifm-navbar-link-color: var(--ifm-font-color-base);--ifm-navbar-link-active-color: var(--ifm-link-color);--ifm-navbar-padding-horizontal: var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical: calc(var(--ifm-spacing-vertical) * .5);--ifm-navbar-shadow: var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color: var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color: var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color: var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon: url(\'data:image/svg+xml;utf8,\');--ifm-navbar-sidebar-width: 83vw;--ifm-pagination-border-radius: var(--ifm-global-radius);--ifm-pagination-color-active: var(--ifm-color-primary);--ifm-pagination-font-size: 16px;--ifm-pagination-item-active-background: var(--ifm-hover-overlay);--ifm-pagination-page-spacing: .2em;--ifm-pagination-padding-horizontal: calc(var(--ifm-spacing-horizontal) * 1);--ifm-pagination-padding-vertical: calc(var(--ifm-spacing-vertical) * .25);--ifm-pagination-nav-border-radius: var(--ifm-global-radius);--ifm-pagination-nav-color-hover: var(--ifm-color-primary);--ifm-pills-color-active: var(--ifm-color-primary);--ifm-pills-color-background-active: var(--ifm-hover-overlay);--ifm-pills-spacing: 2px;--ifm-tabs-color: var(--ifm-font-color-secondary);--ifm-tabs-color-active: var(--ifm-color-primary);--ifm-tabs-color-active-border: var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal: 16px;--ifm-tabs-padding-vertical: 16px;--docusaurus-progress-bar-color: var(--ifm-color-primary);--ifm-color-primary: #0396f9;--ifm-color-primary-dark: #21af90;--ifm-color-primary-darker: #1fa588;--ifm-color-primary-darkest: #1a8870;--ifm-color-primary-light: #46cbae;--ifm-color-primary-lighter: #66d4bd;--ifm-color-primary-lightest: #92e0d0;--ifm-code-font-size: 95%;--ifm-link-color: var(--theme-color, var(--ifm-color-primary, #24c6bc));--docusaurus-announcement-bar-height: auto;--aa-search-input-height: 44px;--aa-input-icon-size: 20px;--aa-base-unit: 16;--aa-spacing-factor: 1;--aa-spacing: calc(var(--aa-base-unit) * var(--aa-spacing-factor) * 1px);--aa-spacing-half: calc(var(--aa-spacing) / 2);--aa-panel-max-height: 650px;--aa-base-z-index: 9999;--aa-font-size: calc(var(--aa-base-unit) * 1px);--aa-font-family: inherit;--aa-font-weight-medium: 500;--aa-font-weight-semibold: 600;--aa-font-weight-bold: 700;--aa-icon-size: 20px;--aa-icon-stroke-width: 1.6;--aa-icon-color-alpha: 1;--aa-action-icon-size: 20px;--aa-text-color-rgb: 38, 38, 39;--aa-text-color-alpha: 1;--aa-primary-color-rgb: 62, 52, 211;--aa-primary-color-alpha: .2;--aa-muted-color-rgb: 128, 126, 163;--aa-muted-color-alpha: .6;--aa-panel-border-color-rgb: 128, 126, 163;--aa-panel-border-color-alpha: .3;--aa-input-border-color-rgb: 128, 126, 163;--aa-input-border-color-alpha: .8;--aa-background-color-rgb: 255, 255, 255;--aa-background-color-alpha: 1;--aa-input-background-color-rgb: 255, 255, 255;--aa-input-background-color-alpha: 1;--aa-selected-color-rgb: 179, 173, 214;--aa-selected-color-alpha: .205;--aa-description-highlight-background-color-rgb: 245, 223, 77;--aa-description-highlight-background-color-alpha: .5;--aa-detached-media-query: (max-width: 680px);--aa-detached-modal-media-query: (min-width: 680px);--aa-detached-modal-max-width: 680px;--aa-detached-modal-max-height: 500px;--aa-overlay-color-rgb: 115, 114, 129;--aa-overlay-color-alpha: .4;--aa-panel-shadow: 0 0 0 1px rgba(35, 38, 59, .1), 0 6px 16px -4px rgba(35, 38, 59, .15);--aa-scrollbar-width: 13px;--aa-scrollbar-track-background-color-rgb: 234, 234, 234;--aa-scrollbar-track-background-color-alpha: 1;--aa-scrollbar-thumb-background-color-alpha: 1;--aa-search-input-height: 36px;--docusaurus-tag-list-border: var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg: transparent;--docusaurus-collapse-button-bg-hover: rgba(0, 0, 0, .1);--doc-sidebar-width: 300px;--doc-sidebar-hidden-width: 30px;font-size:16px;text-wrap:wrap}:host code,:host kbd,:host pre,:host samp{display:inline-block;filter:none}:host h1,:host h2,:host h3,:host label{color:hsl(var(--accent-foreground))!important}:host{--ifm-color-scheme: dark;--ifm-color-emphasis-0: var(--ifm-color-gray-1000);--ifm-color-emphasis-100: var(--ifm-color-gray-900);--ifm-color-emphasis-200: var(--ifm-color-gray-800);--ifm-color-emphasis-300: var(--ifm-color-gray-700);--ifm-color-emphasis-400: var(--ifm-color-gray-600);--ifm-color-emphasis-600: var(--ifm-color-gray-400);--ifm-color-emphasis-700: var(--ifm-color-gray-300);--ifm-color-emphasis-800: var(--ifm-color-gray-200);--ifm-color-emphasis-900: var(--ifm-color-gray-100);--ifm-color-emphasis-1000: var(--ifm-color-gray-0);--ifm-background-color: #1b1b1d !important;--ifm-background-surface-color: #242526;--ifm-hover-overlay: hsla(0, 0%, 100%, .05);--ifm-color-content: #e3e3e3;--ifm-color-content-secondary: #fff;--ifm-breadcrumb-separator-filter: invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background: hsla(0, 0%, 100%, .1);--ifm-scrollbar-track-background-color: #444;--ifm-scrollbar-thumb-background-color: #686868;--ifm-scrollbar-thumb-hover-background-color: #7a7a7a;--ifm-table-stripe-background: hsla(0, 0%, 100%, .07);--ifm-toc-border-color: var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background: #102445;--ifm-color-primary-contrast-foreground: #ebf2fc;--ifm-color-secondary-contrast-background: #474748;--ifm-color-secondary-contrast-foreground: #fdfdfe;--ifm-color-success-contrast-background: #003100;--ifm-color-success-contrast-foreground: #e6f6e6;--ifm-color-info-contrast-background: #193c47;--ifm-color-info-contrast-foreground: #eef9fd;--ifm-color-warning-contrast-background: #4d3800;--ifm-color-warning-contrast-foreground: #fff8e6;--ifm-color-danger-contrast-background: #4b1113;--ifm-color-danger-contrast-foreground: #ffebec;--ifm-color-emphasis-500: var(--ifm-color-gray-500)}@font-face{font-family:Geist;src:url(/fonts/GeistVariableVF.ttf) format("truetype-variations");src:url(/fonts/GeistVariableVF.woff2) format("woff2-variations");font-weight:100 900}#ask-cookbook-button{background-color:var(--ask-cb-bg, hsl(var(--secondary-foreground)))}#ask-cookbook-button:hover{background-color:var(--ask-cb-hover, hsl(var(--secondary-foreground)/.7))}#ask-cookbook-button span{color:var(--ask-cb-text, hsl(var(--secondary)))}#ask-cookbook-button-recommendations{background-color:var(--recommendations-bg, hsl(var(--secondary-foreground)/.1));color:var(--recommendations-text, hsl(var(--secondary-foreground)))}#ask-cookbook-button-recommendations:hover{background-color:var(--recommendations-hover, hsl(var(--secondary-foreground)/.7))}:where(html[dir=ltr]),:where([data-sonner-toaster][dir=ltr]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir=rtl]),:where([data-sonner-toaster][dir=rtl]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}:where([data-sonner-toaster][data-x-position=right]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position=left]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position=center]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=top]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position=bottom]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled=true]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=top]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=bottom]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise=true]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:#00000014}:where([data-sonner-toast][data-theme=dark]) :where([data-cancel]){background:#ffffff4d}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=true]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=true]):before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=top][data-swiping=true]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=bottom][data-swiping=true]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=false][data-removed=true]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=true]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded=false][data-front=false]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=false][data-front=false][data-styled=true])>*{opacity:0}:where([data-sonner-toast][data-visible=false]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=true][data-expanded=true]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed=true][data-front=false]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}._openModalButtonActive_u5qne_1{transform:scale(1.1) translateY(-2px)}._openModalButtonFixed_u5qne_6{position:fixed;bottom:40px;right:40px;z-index:calc(var(--ifm-z-index-fixed, 100) + 5);transition:all .3s cubic-bezier(.4,0,.2,1)!important}@media (max-width: 768px){._openModalButtonFixed_u5qne_6{bottom:20px;right:20px}}.monaco-editor{font-family:-apple-system,BlinkMacSystemFont,Segoe WPC,Segoe UI,HelveticaNeue-Light,system-ui,Ubuntu,Droid Sans,sans-serif;--monaco-monospace-font: "SF Mono", Monaco, Menlo, Consolas, "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace}.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.hc-light .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-hover p{margin:0}.monaco-aria-container{position:absolute!important;top:0;height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%)}.monaco-editor,.monaco-diff-editor .synthetic-focus,.monaco-diff-editor [tabindex="0"]:focus,.monaco-diff-editor [tabindex="-1"]:focus,.monaco-diff-editor button:focus,.monaco-diff-editor input[type=button]:focus,.monaco-diff-editor input[type=checkbox]:focus,.monaco-diff-editor input[type=search]:focus,.monaco-diff-editor input[type=text]:focus,.monaco-diff-editor select:focus,.monaco-diff-editor textarea:focus{outline-width:1px;outline-style:solid;outline-offset:-1px;outline-color:var(--vscode-focusBorder);opacity:1}.monaco-aria-container{position:absolute;left:-999em}::-ms-clear{display:none}.monaco-editor .editor-widget input{color:inherit}.monaco-editor{position:relative;overflow:visible;-webkit-text-size-adjust:100%;color:var(--vscode-editor-foreground);background-color:var(--vscode-editor-background)}.monaco-editor-background{background-color:var(--vscode-editor-background)}.monaco-editor .rangeHighlight{background-color:var(--vscode-editor-rangeHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-rangeHighlightBorder)}.monaco-editor.hc-black .rangeHighlight,.monaco-editor.hc-light .rangeHighlight{border-style:dotted}.monaco-editor .symbolHighlight{background-color:var(--vscode-editor-symbolHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-symbolHighlightBorder)}.monaco-editor.hc-black .symbolHighlight,.monaco-editor.hc-light .symbolHighlight{border-style:dotted}.monaco-editor .overflow-guard{position:relative;overflow:hidden}.monaco-editor .view-overlays{position:absolute;top:0}.monaco-editor .view-overlays>div,.monaco-editor .margin-view-overlays>div{position:absolute;width:100%}.monaco-editor .view-overlays>div>div,.monaco-editor .margin-view-overlays>div>div{bottom:0}.monaco-editor .squiggly-error{border-bottom:4px double var(--vscode-editorError-border)}.monaco-editor .squiggly-error:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorError-background)}.monaco-editor .squiggly-warning{border-bottom:4px double var(--vscode-editorWarning-border)}.monaco-editor .squiggly-warning:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorWarning-background)}.monaco-editor .squiggly-info{border-bottom:4px double var(--vscode-editorInfo-border)}.monaco-editor .squiggly-info:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorInfo-background)}.monaco-editor .squiggly-hint{border-bottom:2px dotted var(--vscode-editorHint-border)}.monaco-editor.showUnused .squiggly-unnecessary{border-bottom:2px dashed var(--vscode-editorUnnecessaryCode-border)}.monaco-editor.showDeprecated .squiggly-inline-deprecated{text-decoration:line-through;text-decoration-color:var(--vscode-editor-foreground, inherit)}.monaco-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.monaco-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.monaco-scrollable-element>.invisible{opacity:0;pointer-events:none}.monaco-scrollable-element>.invisible.fade{transition:opacity .8s linear}.monaco-scrollable-element>.shadow{position:absolute;display:none}.monaco-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.monaco-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.scrollbar>.slider{background:var(--vscode-scrollbarSlider-background)}.monaco-scrollable-element>.scrollbar>.slider:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-scrollable-element>.scrollbar>.slider.active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-editor .inputarea{min-width:0;min-height:0;margin:0;padding:0;position:absolute;outline:none!important;resize:none;border:none;overflow:hidden;color:transparent;background-color:transparent;z-index:-10}.monaco-editor .inputarea.ime-input{z-index:10;caret-color:var(--vscode-editorCursor-foreground);color:var(--vscode-editor-foreground)}.monaco-editor .margin-view-overlays .line-numbers{bottom:0;font-variant-numeric:tabular-nums;position:absolute;text-align:right;display:inline-block;vertical-align:middle;box-sizing:border-box;cursor:default}.monaco-editor .relative-current-line-number{text-align:left;display:inline-block;width:100%}.monaco-editor .margin-view-overlays .line-numbers.lh-odd{margin-top:1px}.monaco-editor .line-numbers{color:var(--vscode-editorLineNumber-foreground)}.monaco-editor .line-numbers.active-line-number{color:var(--vscode-editorLineNumber-activeForeground)}.monaco-editor .margin{background-color:var(--vscode-editorGutter-background)}.monaco-mouse-cursor-text{cursor:text}.monaco-editor .blockDecorations-container{position:absolute;top:0;pointer-events:none}.monaco-editor .blockDecorations-block{position:absolute;box-sizing:border-box}.monaco-editor .view-overlays .current-line,.monaco-editor .margin-view-overlays .current-line{display:block;position:absolute;left:0;top:0;box-sizing:border-box;height:100%}.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both{border-right:0}.monaco-editor .lines-content .cdr{position:absolute;height:100%}.monaco-editor .glyph-margin{position:absolute;top:0}.monaco-editor .glyph-margin-widgets .cgmr{position:absolute;display:flex;align-items:center;justify-content:center}.monaco-editor .glyph-margin-widgets .cgmr.codicon-modifier-spin:before{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.monaco-editor .lines-content .core-guide{position:absolute;box-sizing:border-box;height:100%}.mtkcontrol{color:#fff!important;background:#960000!important}.mtkoverflow{background-color:var(--vscode-button-background, var(--vscode-editor-background));color:var(--vscode-button-foreground, var(--vscode-editor-foreground));border-width:1px;border-style:solid;border-color:var(--vscode-contrastBorder);border-radius:2px;padding:4px;cursor:pointer}.mtkoverflow:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-editor.no-user-select .lines-content,.monaco-editor.no-user-select .view-line,.monaco-editor.no-user-select .view-lines{user-select:none;-webkit-user-select:none}.monaco-editor.mac .lines-content:hover,.monaco-editor.mac .view-line:hover,.monaco-editor.mac .view-lines:hover{user-select:text;-webkit-user-select:text;-ms-user-select:text}.monaco-editor.enable-user-select{user-select:initial;-webkit-user-select:initial}.monaco-editor .view-lines{white-space:nowrap}.monaco-editor .view-line{position:absolute;width:100%}.monaco-editor .lines-content>.view-lines>.view-line>span{top:0;bottom:0;position:absolute}.monaco-editor .mtkw{color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .mtkz{display:inline-block;color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .lines-decorations{position:absolute;top:0;background:#fff}.monaco-editor .margin-view-overlays .cldr{position:absolute;height:100%}.monaco-editor .margin-view-overlays .cmdr{position:absolute;left:0;width:100%;height:100%}.monaco-editor .minimap.slider-mouseover .minimap-slider{opacity:0;transition:opacity .1s linear}.monaco-editor .minimap.slider-mouseover:hover .minimap-slider,.monaco-editor .minimap.slider-mouseover .minimap-slider.active{opacity:1}.monaco-editor .minimap-slider .minimap-slider-horizontal{background:var(--vscode-minimapSlider-background)}.monaco-editor .minimap-slider:hover .minimap-slider-horizontal{background:var(--vscode-minimapSlider-hoverBackground)}.monaco-editor .minimap-slider.active .minimap-slider-horizontal{background:var(--vscode-minimapSlider-activeBackground)}.monaco-editor .minimap-shadow-visible{box-shadow:var(--vscode-scrollbar-shadow) -6px 0 6px -6px inset}.monaco-editor .minimap-shadow-hidden{position:absolute;width:0}.monaco-editor .minimap-shadow-visible{position:absolute;left:-6px;width:6px}.monaco-editor.no-minimap-shadow .minimap-shadow-visible{position:absolute;left:-1px;width:1px}.minimap.autohide{opacity:0;transition:opacity .5s}.minimap.autohide:hover{opacity:1}.monaco-editor .minimap{z-index:5}.monaco-editor .overlayWidgets{position:absolute;top:0;left:0}.monaco-editor .view-ruler{position:absolute;top:0;box-shadow:1px 0 0 0 var(--vscode-editorRuler-foreground) inset}.monaco-editor .scroll-decoration{position:absolute;top:0;left:0;height:6px;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-editor .lines-content .cslr{position:absolute}.monaco-editor .focused .selected-text{background-color:var(--vscode-editor-selectionBackground)}.monaco-editor .selected-text{background-color:var(--vscode-editor-inactiveSelectionBackground)}.monaco-editor .top-left-radius{border-top-left-radius:3px}.monaco-editor .bottom-left-radius{border-bottom-left-radius:3px}.monaco-editor .top-right-radius{border-top-right-radius:3px}.monaco-editor .bottom-right-radius{border-bottom-right-radius:3px}.monaco-editor.hc-black .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-black .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-black .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-black .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor.hc-light .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-light .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-light .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-light .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor .cursors-layer{position:absolute;top:0}.monaco-editor .cursors-layer>.cursor{position:absolute;overflow:hidden;box-sizing:border-box}.monaco-editor .cursors-layer.cursor-smooth-caret-animation>.cursor{transition:all 80ms}.monaco-editor .cursors-layer.cursor-block-outline-style>.cursor{background:transparent!important;border-style:solid;border-width:1px}.monaco-editor .cursors-layer.cursor-underline-style>.cursor{border-bottom-width:2px;border-bottom-style:solid;background:transparent!important}.monaco-editor .cursors-layer.cursor-underline-thin-style>.cursor{border-bottom-width:1px;border-bottom-style:solid;background:transparent!important}@keyframes monaco-cursor-smooth{0%,20%{opacity:1}60%,to{opacity:0}}@keyframes monaco-cursor-phase{0%,20%{opacity:1}90%,to{opacity:0}}@keyframes monaco-cursor-expand{0%,20%{transform:scaleY(1)}80%,to{transform:scaleY(0)}}.cursor-smooth{animation:monaco-cursor-smooth .5s ease-in-out 0s 20 alternate}.cursor-phase{animation:monaco-cursor-phase .5s ease-in-out 0s 20 alternate}.cursor-expand>.cursor{animation:monaco-cursor-expand .5s ease-in-out 0s 20 alternate}.monaco-editor .mwh{position:absolute;color:var(--vscode-editorWhitespace-foreground)!important}.monaco-workbench .workbench-hover{position:relative;font-size:13px;line-height:19px;z-index:40;overflow:hidden;max-width:700px;background:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);border-radius:3px;color:var(--vscode-editorHoverWidget-foreground);box-shadow:0 2px 8px var(--vscode-widget-shadow)}.monaco-workbench .workbench-hover hr{border-bottom:none}.monaco-workbench .workbench-hover:not(.skip-fade-in){animation:fadein .1s linear}.monaco-workbench .workbench-hover.compact{font-size:12px}.monaco-workbench .workbench-hover.compact .hover-contents{padding:2px 8px}.monaco-workbench .workbench-hover-container.locked .workbench-hover{outline:1px solid var(--vscode-editorHoverWidget-border)}.monaco-workbench .workbench-hover-container.locked .workbench-hover:focus,.monaco-workbench .workbench-hover-lock:focus{outline:1px solid var(--vscode-focusBorder)}.monaco-workbench .workbench-hover-container.locked .workbench-hover-lock:hover{background:var(--vscode-toolbar-hoverBackground)}.monaco-workbench .workbench-hover-pointer{position:absolute;z-index:41;pointer-events:none}.monaco-workbench .workbench-hover-pointer:after{content:"";position:absolute;width:5px;height:5px;background-color:var(--vscode-editorHoverWidget-background);border-right:1px solid var(--vscode-editorHoverWidget-border);border-bottom:1px solid var(--vscode-editorHoverWidget-border)}.monaco-workbench .locked .workbench-hover-pointer:after{width:4px;height:4px;border-right-width:2px;border-bottom-width:2px}.monaco-workbench .workbench-hover-pointer.left{left:-3px}.monaco-workbench .workbench-hover-pointer.right{right:3px}.monaco-workbench .workbench-hover-pointer.top{top:-3px}.monaco-workbench .workbench-hover-pointer.bottom{bottom:3px}.monaco-workbench .workbench-hover-pointer.left:after{transform:rotate(135deg)}.monaco-workbench .workbench-hover-pointer.right:after{transform:rotate(315deg)}.monaco-workbench .workbench-hover-pointer.top:after{transform:rotate(225deg)}.monaco-workbench .workbench-hover-pointer.bottom:after{transform:rotate(45deg)}.monaco-workbench .workbench-hover a{color:var(--vscode-textLink-foreground)}.monaco-workbench .workbench-hover a:focus{outline:1px solid;outline-offset:-1px;text-decoration:underline;outline-color:var(--vscode-focusBorder)}.monaco-workbench .workbench-hover a:hover,.monaco-workbench .workbench-hover a:active{color:var(--vscode-textLink-activeForeground)}.monaco-workbench .workbench-hover code{background:var(--vscode-textCodeBlock-background)}.monaco-workbench .workbench-hover .hover-row .actions{background:var(--vscode-editorHoverWidget-statusBarBackground)}.monaco-workbench .workbench-hover.right-aligned{left:1px}.monaco-workbench .workbench-hover.right-aligned .hover-row.status-bar .actions{flex-direction:row-reverse}.monaco-workbench .workbench-hover.right-aligned .hover-row.status-bar .actions .action-container{margin-right:0;margin-left:16px}.monaco-hover{cursor:default;position:absolute;overflow:hidden;user-select:text;-webkit-user-select:text;box-sizing:border-box;animation:fadein .1s linear;line-height:1.5em;white-space:var(--vscode-hover-whiteSpace, normal)}.monaco-hover.hidden{display:none}.monaco-hover a:hover:not(.disabled){cursor:pointer}.monaco-hover .hover-contents:not(.html-hover-contents){padding:4px 8px}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents){max-width:var(--vscode-hover-maxWidth, 500px);word-wrap:break-word}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents) hr{min-width:100%}.monaco-hover p,.monaco-hover .code,.monaco-hover ul,.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6{margin:8px 0}.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6{line-height:1.1}.monaco-hover code{font-family:var(--monaco-monospace-font)}.monaco-hover hr{box-sizing:border-box;border-left:0px;border-right:0px;margin:4px -8px -4px;height:1px}.monaco-hover p:first-child,.monaco-hover .code:first-child,.monaco-hover ul:first-child{margin-top:0}.monaco-hover p:last-child,.monaco-hover .code:last-child,.monaco-hover ul:last-child{margin-bottom:0}.monaco-hover ul,.monaco-hover ol{padding-left:20px}.monaco-hover li>p{margin-bottom:0}.monaco-hover li>ul{margin-top:0}.monaco-hover code{border-radius:3px;padding:0 .4em}.monaco-hover .monaco-tokenized-source{white-space:var(--vscode-hover-sourceWhiteSpace, pre-wrap)}.monaco-hover .hover-row.status-bar{font-size:12px;line-height:22px}.monaco-hover .hover-row.status-bar .info{font-style:italic;padding:0 8px}.monaco-hover .hover-row.status-bar .actions{display:flex;padding:0 8px}.monaco-hover .hover-row.status-bar .actions .action-container{margin-right:16px;cursor:pointer}.monaco-hover .hover-row.status-bar .actions .action-container .action .icon{padding-right:4px}.monaco-hover .markdown-hover .hover-contents .codicon{color:inherit;font-size:inherit;vertical-align:middle}.monaco-hover .hover-contents a.code-link:hover,.monaco-hover .hover-contents a.code-link{color:inherit}.monaco-hover .hover-contents a.code-link:before{content:"("}.monaco-hover .hover-contents a.code-link:after{content:")"}.monaco-hover .hover-contents a.code-link>span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under;color:var(--vscode-textLink-foreground)}.monaco-hover .hover-contents a.code-link>span:hover{color:var(--vscode-textLink-activeForeground)}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span{margin-bottom:4px;display:inline-block}.monaco-hover-content .action-container a{-webkit-user-select:none;user-select:none}.monaco-hover-content .action-container.disabled{pointer-events:none;opacity:.4;cursor:default}.monaco-editor .rendered-markdown kbd{background-color:var(--vscode-keybindingLabel-background);color:var(--vscode-keybindingLabel-foreground);border-style:solid;border-width:1px;border-radius:3px;border-color:var(--vscode-keybindingLabel-border);border-bottom-color:var(--vscode-keybindingLabel-bottomBorder);box-shadow:inset 0 -1px 0 var(--vscode-widget-shadow);vertical-align:middle;padding:1px 3px}.rendered-markdown li:has(input[type=checkbox]){list-style-type:none}.context-view{position:absolute}.context-view.fixed{all:initial;font-family:inherit;font-size:13px;position:fixed;color:inherit}.monaco-list{position:relative;height:100%;width:100%;white-space:nowrap}.monaco-list.mouse-support{user-select:none;-webkit-user-select:none}.monaco-list>.monaco-scrollable-element{height:100%}.monaco-list-rows{position:relative;width:100%;height:100%}.monaco-list.horizontal-scrolling .monaco-list-rows{width:auto;min-width:100%}.monaco-list-row{position:absolute;box-sizing:border-box;overflow:hidden;width:100%}.monaco-list.mouse-support .monaco-list-row{cursor:pointer;touch-action:none}.monaco-list .monaco-scrollable-element>.scrollbar.vertical,.monaco-pane-view>.monaco-split-view2.vertical>.monaco-scrollable-element>.scrollbar.vertical{z-index:14}.monaco-list-row.scrolling{display:none!important}.monaco-list.element-focused,.monaco-list.selection-single,.monaco-list.selection-multiple{outline:0!important}.monaco-drag-image{display:inline-block;padding:1px 7px;border-radius:10px;font-size:12px;position:absolute;z-index:1000}.monaco-list-type-filter-message{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;padding:40px 1em 1em;text-align:center;white-space:normal;opacity:.7;pointer-events:none}.monaco-list-type-filter-message:empty{display:none}.monaco-select-box-dropdown-padding{--dropdown-padding-top: 1px;--dropdown-padding-bottom: 1px}.hc-black .monaco-select-box-dropdown-padding,.hc-light .monaco-select-box-dropdown-padding{--dropdown-padding-top: 3px;--dropdown-padding-bottom: 4px}.monaco-select-box-dropdown-container{display:none;box-sizing:border-box}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown *{margin:0}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown a:focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown code{line-height:15px;font-family:var(--monaco-monospace-font)}.monaco-select-box-dropdown-container.visible{display:flex;flex-direction:column;text-align:left;width:1px;overflow:hidden;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container{flex:0 0 auto;align-self:flex-start;padding-top:var(--dropdown-padding-top);padding-bottom:var(--dropdown-padding-bottom);padding-left:1px;padding-right:1px;width:100%;overflow:hidden;box-sizing:border-box}.monaco-select-box-dropdown-container>.select-box-details-pane{padding:5px}.hc-black .monaco-select-box-dropdown-container>.select-box-dropdown-list-container{padding-top:var(--dropdown-padding-top);padding-bottom:var(--dropdown-padding-bottom)}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row{cursor:pointer}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-text{text-overflow:ellipsis;overflow:hidden;padding-left:3.5px;white-space:nowrap;float:left}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-detail{text-overflow:ellipsis;overflow:hidden;padding-left:3.5px;white-space:nowrap;float:left;opacity:.7}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-decorator-right{text-overflow:ellipsis;overflow:hidden;padding-right:10px;white-space:nowrap;float:right}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.visually-hidden{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control{flex:1 1 auto;align-self:flex-start;opacity:0}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div{overflow:hidden;max-height:0px}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div>.option-text-width-control{padding-left:4px;padding-right:8px;white-space:nowrap}.monaco-select-box{width:100%;cursor:pointer;border-radius:2px}.monaco-select-box-dropdown-container{font-size:13px;font-weight:400;text-transform:none}.monaco-action-bar .action-item.select-container{cursor:default}.monaco-action-bar .action-item .monaco-select-box{cursor:pointer;min-width:100px;min-height:18px;padding:2px 23px 2px 8px}.mac .monaco-action-bar .action-item .monaco-select-box{font-size:11px;border-radius:5px}.monaco-action-bar{white-space:nowrap;height:100%}.monaco-action-bar .actions-container{display:flex;margin:0 auto;padding:0;height:100%;width:100%;align-items:center}.monaco-action-bar.vertical .actions-container{display:inline-block}.monaco-action-bar .action-item{display:block;align-items:center;justify-content:center;cursor:pointer;position:relative}.monaco-action-bar .action-item.disabled{cursor:default}.monaco-action-bar .action-item .icon,.monaco-action-bar .action-item .codicon{display:block}.monaco-action-bar .action-item .codicon{display:flex;align-items:center;width:16px;height:16px}.monaco-action-bar .action-label{display:flex;font-size:11px;padding:3px;border-radius:5px}.monaco-action-bar .action-item.disabled .action-label,.monaco-action-bar .action-item.disabled .action-label:before,.monaco-action-bar .action-item.disabled .action-label:hover{color:var(--vscode-disabledForeground)}.monaco-action-bar.vertical{text-align:left}.monaco-action-bar.vertical .action-item{display:block}.monaco-action-bar.vertical .action-label.separator{display:block;border-bottom:1px solid #bbb;padding-top:1px;margin-left:.8em;margin-right:.8em}.monaco-action-bar .action-item .action-label.separator{width:1px;height:16px;margin:5px 4px!important;cursor:default;min-width:1px;padding:0;background-color:#bbb}.secondary-actions .monaco-action-bar .action-label{margin-left:6px}.monaco-action-bar .action-item.select-container{overflow:hidden;flex:1;max-width:170px;min-width:60px;display:flex;align-items:center;justify-content:center;margin-right:10px}.monaco-action-bar .action-item.action-dropdown-item{display:flex}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator{display:flex;align-items:center;cursor:default}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator>div{width:1px}.monaco-dropdown{height:100%;padding:0}.monaco-dropdown>.dropdown-label{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center}.monaco-dropdown>.dropdown-label>.action-label.disabled{cursor:default}.monaco-dropdown-with-primary{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-primary>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;padding-left:0;padding-right:0;line-height:16px;margin-left:-3px}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{display:block;background-size:16px;background-position:center center;background-repeat:no-repeat}.monaco-action-bar .action-item.menu-entry .action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-dropdown-with-default{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-default>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-default>.action-container.menu-entry>.action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-dropdown-with-default:hover{background-color:var(--vscode-toolbar-hoverBackground)}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;padding-left:0;padding-right:0;line-height:16px;margin-left:-3px}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{display:block;background-size:16px;background-position:center center;background-repeat:no-repeat}.quick-input-widget{font-size:13px}.quick-input-widget .monaco-highlighted-label .highlight{color:#0066bf}.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight{color:#9dddff}.vs-dark .quick-input-widget .monaco-highlighted-label .highlight{color:#0097fb}.hc-black .quick-input-widget .monaco-highlighted-label .highlight{color:#f38518}.hc-light .quick-input-widget .monaco-highlighted-label .highlight{color:#0f4a85}.monaco-keybinding>.monaco-keybinding-key{background-color:#ddd6;border:solid 1px rgba(204,204,204,.4);border-bottom-color:#bbb6;box-shadow:inset 0 -1px #bbb6;color:#555}.hc-black .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:solid 1px rgb(111,195,223);box-shadow:none;color:#fff}.hc-light .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:solid 1px #0F4A85;box-shadow:none;color:#292929}.vs-dark .monaco-keybinding>.monaco-keybinding-key{background-color:#8080802b;border:solid 1px rgba(51,51,51,.6);border-bottom-color:#4449;box-shadow:inset 0 -1px #4449;color:#ccc}.monaco-custom-toggle{margin-left:2px;float:left;cursor:pointer;overflow:hidden;width:20px;height:20px;border-radius:3px;border:1px solid transparent;padding:1px;box-sizing:border-box;user-select:none;-webkit-user-select:none}.monaco-custom-toggle:hover{background-color:var(--vscode-inputOption-hoverBackground)}.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle:hover{border:1px dashed var(--vscode-focusBorder)}.hc-black .monaco-custom-toggle,.hc-light .monaco-custom-toggle,.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle:hover{background:none}.monaco-custom-toggle.monaco-checkbox{height:18px;width:18px;border:1px solid transparent;border-radius:3px;margin-right:9px;margin-left:0;padding:0;opacity:1;background-size:16px!important}.monaco-action-bar .checkbox-action-item{display:flex;align-items:center}.monaco-action-bar .checkbox-action-item>.monaco-custom-toggle.monaco-checkbox{margin-right:4px}.monaco-action-bar .checkbox-action-item>.checkbox-label{font-size:12px}.monaco-custom-toggle.monaco-checkbox:not(.checked):before{visibility:hidden}.quick-input-widget{position:absolute;width:600px;z-index:2550;left:50%;margin-left:-300px;-webkit-app-region:no-drag;border-radius:6px}.quick-input-titlebar{display:flex;align-items:center;border-radius:inherit}.quick-input-left-action-bar{display:flex;margin-left:4px;flex:1}.quick-input-title{padding:3px 0;text-align:center;text-overflow:ellipsis;overflow:hidden}.quick-input-right-action-bar{display:flex;margin-right:4px;flex:1}.quick-input-right-action-bar>.actions-container{justify-content:flex-end}.quick-input-titlebar .monaco-action-bar .action-label.codicon{background-position:center;background-repeat:no-repeat;padding:2px}.quick-input-description{margin:6px 6px 6px 11px}.quick-input-header .quick-input-description{margin:4px 2px;flex:1}.quick-input-header{display:flex;padding:8px 6px 2px}.quick-input-widget.hidden-input .quick-input-header{padding:0;margin-bottom:0}.quick-input-and-message{display:flex;flex-direction:column;flex-grow:1;min-width:0;position:relative}.quick-input-check-all{align-self:center;margin:0}.quick-input-filter{flex-grow:1;display:flex;position:relative}.quick-input-box{flex-grow:1}.quick-input-widget.show-checkboxes .quick-input-box,.quick-input-widget.show-checkboxes .quick-input-message{margin-left:5px}.quick-input-visible-count{position:absolute;left:-10000px}.quick-input-count{align-self:center;position:absolute;right:4px;display:flex;align-items:center}.quick-input-count .monaco-count-badge{vertical-align:middle;padding:2px 4px;border-radius:2px;min-height:auto;line-height:normal}.quick-input-action{margin-left:6px}.quick-input-action .monaco-text-button{font-size:11px;padding:0 6px;display:flex;height:25px;align-items:center}.quick-input-message{margin-top:-1px;padding:5px;overflow-wrap:break-word}.quick-input-message>.codicon{margin:0 .2em;vertical-align:text-bottom}.quick-input-message a{color:inherit}.quick-input-progress.monaco-progress-container{position:relative}.quick-input-list{line-height:22px}.quick-input-widget.hidden-input .quick-input-list{margin-top:4px;padding-bottom:4px}.quick-input-list .monaco-list{overflow:hidden;max-height:440px;padding-bottom:5px}.quick-input-list .monaco-scrollable-element{padding:0 5px}.quick-input-list .quick-input-list-entry{box-sizing:border-box;overflow:hidden;display:flex;height:100%;padding:0 6px}.quick-input-list .quick-input-list-entry.quick-input-list-separator-border{border-top-width:1px;border-top-style:solid}.quick-input-list .monaco-list-row{border-radius:3px}.quick-input-list .monaco-list-row[data-index="0"] .quick-input-list-entry.quick-input-list-separator-border{border-top-style:none}.quick-input-list .quick-input-list-label{overflow:hidden;display:flex;height:100%;flex:1}.quick-input-list .quick-input-list-checkbox{align-self:center;margin:0}.quick-input-list .quick-input-list-icon{background-size:16px;background-position:left center;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;display:flex;align-items:center;justify-content:center}.quick-input-list .quick-input-list-rows{overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;height:100%;flex:1;margin-left:5px}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows{margin-left:10px}.quick-input-widget .quick-input-list .quick-input-list-checkbox{display:none}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox{display:inline}.quick-input-list .quick-input-list-rows>.quick-input-list-row{display:flex;align-items:center}.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label,.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label .monaco-icon-label-container>.monaco-icon-name-container{flex:1}.quick-input-list .quick-input-list-rows>.quick-input-list-row .codicon[class*=codicon-]{vertical-align:text-bottom}.quick-input-list .quick-input-list-rows .monaco-highlighted-label>span{opacity:1}.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding{margin-right:8px}.quick-input-list .quick-input-list-label-meta{opacity:.7;line-height:normal;text-overflow:ellipsis;overflow:hidden}.quick-input-list .monaco-list .monaco-list-row .monaco-highlighted-label .highlight{font-weight:700;background-color:unset;color:var(--vscode-list-highlightForeground)!important}.quick-input-list .monaco-list .monaco-list-row.focused .monaco-highlighted-label .highlight{color:var(--vscode-list-focusHighlightForeground)!important}.quick-input-list .quick-input-list-entry .quick-input-list-separator{margin-right:4px}.quick-input-list .quick-input-list-entry-action-bar{display:flex;flex:0;overflow:visible}.quick-input-list .quick-input-list-entry-action-bar .action-label{display:none}.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon{margin-right:4px;padding:0 2px 2px}.quick-input-list .quick-input-list-entry-action-bar{margin-top:1px}.quick-input-list .quick-input-list-entry-action-bar{margin-right:4px}.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible,.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label,.quick-input-list .quick-input-list-entry.focus-inside .quick-input-list-entry-action-bar .action-label,.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label,.quick-input-list .monaco-list-row.passive-focused .quick-input-list-entry-action-bar .action-label{display:flex}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key,.quick-input-list .monaco-list-row.focused .quick-input-list-entry .quick-input-list-separator{color:inherit}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key{background:none}.quick-input-list .quick-input-list-separator-as-item{padding:4px 6px;font-size:12px}.quick-input-list .quick-input-list-separator-as-item .label-name{font-weight:600}.quick-input-list .quick-input-list-separator-as-item .label-description{opacity:1!important}.quick-input-list .monaco-tree-sticky-row .quick-input-list-entry.quick-input-list-separator-as-item.quick-input-list-separator-border{border-top-style:none}.quick-input-list .monaco-tree-sticky-row{padding:0 5px}.quick-input-list .monaco-tl-twistie{display:none!important}:root{--vscode-sash-size: 4px;--vscode-sash-hover-size: 4px}.monaco-sash{position:absolute;z-index:35;touch-action:none}.monaco-sash.disabled{pointer-events:none}.monaco-sash.mac.vertical{cursor:col-resize}.monaco-sash.vertical.minimum{cursor:e-resize}.monaco-sash.vertical.maximum{cursor:w-resize}.monaco-sash.mac.horizontal{cursor:row-resize}.monaco-sash.horizontal.minimum{cursor:s-resize}.monaco-sash.horizontal.maximum{cursor:n-resize}.monaco-sash.disabled{cursor:default!important;pointer-events:none!important}.monaco-sash.vertical{cursor:ew-resize;top:0;width:var(--vscode-sash-size);height:100%}.monaco-sash.horizontal{cursor:ns-resize;left:0;width:100%;height:var(--vscode-sash-size)}.monaco-sash:not(.disabled)>.orthogonal-drag-handle{content:" ";height:calc(var(--vscode-sash-size) * 2);width:calc(var(--vscode-sash-size) * 2);z-index:100;display:block;cursor:all-scroll;position:absolute}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.start,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.end{cursor:nwse-resize}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.end,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.start{cursor:nesw-resize}.monaco-sash.vertical>.orthogonal-drag-handle.start{left:calc(var(--vscode-sash-size) * -.5);top:calc(var(--vscode-sash-size) * -1)}.monaco-sash.vertical>.orthogonal-drag-handle.end{left:calc(var(--vscode-sash-size) * -.5);bottom:calc(var(--vscode-sash-size) * -1)}.monaco-sash.horizontal>.orthogonal-drag-handle.start{top:calc(var(--vscode-sash-size) * -.5);left:calc(var(--vscode-sash-size) * -1)}.monaco-sash.horizontal>.orthogonal-drag-handle.end{top:calc(var(--vscode-sash-size) * -.5);right:calc(var(--vscode-sash-size) * -1)}.monaco-sash:before{content:"";pointer-events:none;position:absolute;width:100%;height:100%;background:transparent}.monaco-workbench:not(.reduce-motion) .monaco-sash:before{transition:background-color .1s ease-out}.monaco-sash.hover:before,.monaco-sash.active:before{background:var(--vscode-sash-hoverBorder)}.monaco-sash.vertical:before{width:var(--vscode-sash-hover-size);left:calc(50% - (var(--vscode-sash-hover-size) / 2))}.monaco-sash.horizontal:before{height:var(--vscode-sash-hover-size);top:calc(50% - (var(--vscode-sash-hover-size) / 2))}.pointer-events-disabled{pointer-events:none!important}.monaco-sash.debug{background:#0ff}.monaco-sash.debug.disabled{background:#0ff3}.monaco-sash.debug:not(.disabled)>.orthogonal-drag-handle{background:red}.monaco-split-view2{position:relative;width:100%;height:100%}.monaco-split-view2>.sash-container{position:absolute;width:100%;height:100%;pointer-events:none}.monaco-split-view2>.sash-container>.monaco-sash{pointer-events:initial}.monaco-split-view2>.monaco-scrollable-element{width:100%;height:100%}.monaco-split-view2>.monaco-scrollable-element>.split-view-container{width:100%;height:100%;white-space:nowrap;position:relative}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view{white-space:initial;position:absolute}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view:not(.visible){display:none}.monaco-split-view2.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view{width:100%}.monaco-split-view2.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view{height:100%}.monaco-split-view2.separator-border>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{content:" ";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--separator-border)}.monaco-split-view2.separator-border.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:100%;width:1px}.monaco-split-view2.separator-border.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:1px;width:100%}.monaco-table{display:flex;flex-direction:column;position:relative;height:100%;width:100%;white-space:nowrap;overflow:hidden}.monaco-table>.monaco-split-view2{border-bottom:1px solid transparent}.monaco-table>.monaco-list{flex:1}.monaco-table-tr{display:flex;height:100%}.monaco-table-th{width:100%;height:100%;font-weight:700;overflow:hidden;text-overflow:ellipsis}.monaco-table-th,.monaco-table-td{box-sizing:border-box;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{content:"";position:absolute;left:calc(var(--vscode-sash-size) / 2);width:0;border-left:1px solid transparent}.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2,.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{transition:border-color .2s ease-out}.monaco-inputbox{position:relative;display:block;padding:0;box-sizing:border-box;border-radius:2px;font-size:inherit}.monaco-inputbox>.ibwrapper>.input,.monaco-inputbox>.ibwrapper>.mirror{padding:4px 6px}.monaco-inputbox>.ibwrapper{position:relative;width:100%;height:100%}.monaco-inputbox>.ibwrapper>.input{display:inline-block;box-sizing:border-box;width:100%;height:100%;line-height:inherit;border:none;font-family:inherit;font-size:inherit;resize:none;color:inherit}.monaco-inputbox>.ibwrapper>input{text-overflow:ellipsis}.monaco-inputbox>.ibwrapper>textarea.input{display:block;scrollbar-width:none;outline:none}.monaco-inputbox>.ibwrapper>textarea.input::-webkit-scrollbar{display:none}.monaco-inputbox>.ibwrapper>textarea.input.empty{white-space:nowrap}.monaco-inputbox>.ibwrapper>.mirror{position:absolute;display:inline-block;width:100%;top:0;left:0;box-sizing:border-box;white-space:pre-wrap;visibility:hidden;word-wrap:break-word}.monaco-inputbox-container{text-align:right}.monaco-inputbox-container .monaco-inputbox-message{display:inline-block;overflow:hidden;text-align:left;width:100%;box-sizing:border-box;padding:.4em;font-size:12px;line-height:17px;margin-top:-1px;word-wrap:break-word}.monaco-inputbox .monaco-action-bar{position:absolute;right:2px;top:4px}.monaco-inputbox .monaco-action-bar .action-item{margin-left:2px}.monaco-inputbox .monaco-action-bar .action-item .codicon{background-repeat:no-repeat;width:16px;height:16px}.monaco-findInput{position:relative}.monaco-findInput .monaco-inputbox{font-size:13px;width:100%}.monaco-findInput>.controls{position:absolute;top:3px;right:2px}.vs .monaco-findInput.disabled{background-color:#e1e1e1}.vs-dark .monaco-findInput.disabled{background-color:#333}.monaco-findInput.highlight-0 .controls,.hc-light .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-0 .1s linear 0s}.monaco-findInput.highlight-1 .controls,.hc-light .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-1 .1s linear 0s}.hc-black .monaco-findInput.highlight-0 .controls,.vs-dark .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-dark-0 .1s linear 0s}.hc-black .monaco-findInput.highlight-1 .controls,.vs-dark .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-dark-1 .1s linear 0s}@keyframes monaco-findInput-highlight-0{0%{background:#fdff00cc}to{background:transparent}}@keyframes monaco-findInput-highlight-1{0%{background:#fdff00cc}99%{background:transparent}}@keyframes monaco-findInput-highlight-dark-0{0%{background:#ffffff70}to{background:transparent}}@keyframes monaco-findInput-highlight-dark-1{0%{background:#ffffff70}99%{background:transparent}}.monaco-tl-row{display:flex;height:100%;align-items:center;position:relative}.monaco-tl-row.disabled{cursor:default}.monaco-tl-indent{height:100%;position:absolute;top:0;left:16px;pointer-events:none}.hide-arrows .monaco-tl-indent{left:12px}.monaco-tl-indent>.indent-guide{display:inline-block;box-sizing:border-box;height:100%;border-left:1px solid transparent}.monaco-workbench:not(.reduce-motion) .monaco-tl-indent>.indent-guide{transition:border-color .1s linear}.monaco-tl-twistie,.monaco-tl-contents{height:100%}.monaco-tl-twistie{font-size:10px;text-align:right;padding-right:6px;flex-shrink:0;width:16px;display:flex!important;align-items:center;justify-content:center;transform:translate(3px)}.monaco-tl-contents{flex:1;overflow:hidden}.monaco-tl-twistie:before{border-radius:20px}.monaco-tl-twistie.collapsed:before{transform:rotate(-90deg)}.monaco-tl-twistie.codicon-tree-item-loading:before{animation:codicon-spin 1.25s steps(30) infinite}.monaco-tree-type-filter{position:absolute;top:0;display:flex;padding:3px;max-width:200px;z-index:100;margin:0 6px;border:1px solid var(--vscode-widget-border);border-bottom-left-radius:4px;border-bottom-right-radius:4px}.monaco-workbench:not(.reduce-motion) .monaco-tree-type-filter{transition:top .3s}.monaco-tree-type-filter.disabled{top:-40px!important}.monaco-tree-type-filter-grab{display:flex!important;align-items:center;justify-content:center;cursor:grab;margin-right:2px}.monaco-tree-type-filter-grab.grabbing{cursor:grabbing}.monaco-tree-type-filter-input{flex:1}.monaco-tree-type-filter-input .monaco-inputbox{height:23px}.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.input,.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.mirror{padding:2px 4px}.monaco-tree-type-filter-input .monaco-findInput>.controls{top:2px}.monaco-tree-type-filter-actionbar{margin-left:4px}.monaco-tree-type-filter-actionbar .monaco-action-bar .action-label{padding:2px}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container{position:absolute;top:0;left:0;width:100%;height:0;z-index:13;background-color:var(--vscode-sideBar-background)}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row.monaco-list-row{position:absolute;width:100%;opacity:1!important;overflow:hidden;background-color:var(--vscode-sideBar-background)}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row:hover{background-color:var(--vscode-list-hoverBackground)!important;cursor:pointer}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container.empty,.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container.empty .monaco-tree-sticky-container-shadow{display:none}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-container-shadow{position:absolute;bottom:-3px;left:0;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container[tabindex="0"]:focus{outline:none}.monaco-icon-label{display:flex;overflow:hidden;text-overflow:ellipsis}.monaco-icon-label:before{background-size:16px;background-position:left center;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;line-height:inherit!important;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top;flex-shrink:0}.monaco-icon-label-container.disabled{color:var(--vscode-disabledForeground)}.monaco-icon-label>.monaco-icon-label-container{min-width:0;overflow:hidden;text-overflow:ellipsis;flex:1}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{color:inherit;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name>.label-separator{margin:0 2px;opacity:.5}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-suffix-container>.label-suffix{opacity:.7;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.7;margin-left:.5em;font-size:.9em;white-space:pre}.monaco-icon-label.nowrap>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{white-space:nowrap}.vs .monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.95}.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-name-container>.label-name,.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{font-style:italic}.monaco-icon-label.deprecated{text-decoration:line-through;opacity:.66}.monaco-icon-label.italic:after{font-style:italic}.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-name-container>.label-name,.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{text-decoration:line-through}.monaco-icon-label:after{opacity:.75;font-size:90%;font-weight:600;margin:auto 16px 0 5px;text-align:center}.monaco-list:focus .selected .monaco-icon-label,.monaco-list:focus .selected .monaco-icon-label:after{color:inherit!important}.monaco-list-row.focused.selected .label-description,.monaco-list-row.selected .label-description{opacity:.8}.monaco-keybinding{display:flex;align-items:center;line-height:10px}.monaco-keybinding>.monaco-keybinding-key{display:inline-block;border-style:solid;border-width:1px;border-radius:3px;vertical-align:middle;font-size:11px;padding:3px 5px;margin:0 2px}.monaco-keybinding>.monaco-keybinding-key:first-child{margin-left:0}.monaco-keybinding>.monaco-keybinding-key:last-child{margin-right:0}.monaco-keybinding>.monaco-keybinding-key-separator{display:inline-block}.monaco-keybinding>.monaco-keybinding-key-chord-separator{width:6px}.monaco-text-button{box-sizing:border-box;display:flex;width:100%;padding:4px;border-radius:2px;text-align:center;cursor:pointer;justify-content:center;align-items:center;border:1px solid var(--vscode-button-border, transparent);line-height:18px}.monaco-text-button:focus{outline-offset:2px!important}.monaco-text-button:hover{text-decoration:none!important}.monaco-button.disabled:focus,.monaco-button.disabled{opacity:.4!important;cursor:default}.monaco-text-button .codicon{margin:0 .2em;color:inherit!important}.monaco-text-button.monaco-text-button-with-short-label{flex-direction:row;flex-wrap:wrap;padding:0 4px;overflow:hidden;height:28px}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label{flex-basis:100%}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{flex-grow:1;width:0;overflow:hidden}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label,.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{display:flex;justify-content:center;align-items:center;font-weight:400;font-style:inherit;padding:4px 0}.monaco-button-dropdown{display:flex;cursor:pointer}.monaco-button-dropdown.disabled{cursor:default}.monaco-button-dropdown>.monaco-button:focus{outline-offset:-1px!important}.monaco-button-dropdown.disabled>.monaco-button.disabled,.monaco-button-dropdown.disabled>.monaco-button.disabled:focus,.monaco-button-dropdown.disabled>.monaco-button-dropdown-separator{opacity:.4!important}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-right-width:0!important}.monaco-button-dropdown .monaco-button-dropdown-separator{padding:4px 0;cursor:default}.monaco-button-dropdown .monaco-button-dropdown-separator>div{height:100%;width:1px}.monaco-button-dropdown>.monaco-button.monaco-dropdown-button{border:1px solid var(--vscode-button-border, transparent);border-left-width:0!important;border-radius:0 2px 2px 0;display:flex;align-items:center}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-radius:2px 0 0 2px}.monaco-description-button{display:flex;flex-direction:column;align-items:center;margin:4px 5px}.monaco-description-button .monaco-button-description{font-style:italic;font-size:11px;padding:4px 20px}.monaco-description-button .monaco-button-label,.monaco-description-button .monaco-button-description{display:flex;justify-content:center;align-items:center}.monaco-description-button .monaco-button-label>.codicon,.monaco-description-button .monaco-button-description>.codicon{margin:0 .2em;color:inherit!important}.monaco-button.default-colors,.monaco-button-dropdown.default-colors>.monaco-button{color:var(--vscode-button-foreground);background-color:var(--vscode-button-background)}.monaco-button.default-colors:hover,.monaco-button-dropdown.default-colors>.monaco-button:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-button.default-colors.secondary,.monaco-button-dropdown.default-colors>.monaco-button.secondary{color:var(--vscode-button-secondaryForeground);background-color:var(--vscode-button-secondaryBackground)}.monaco-button.default-colors.secondary:hover,.monaco-button-dropdown.default-colors>.monaco-button.secondary:hover{background-color:var(--vscode-button-secondaryHoverBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator{background-color:var(--vscode-button-background);border-top:1px solid var(--vscode-button-border);border-bottom:1px solid var(--vscode-button-border)}.monaco-button-dropdown.default-colors .monaco-button.secondary+.monaco-button-dropdown-separator{background-color:var(--vscode-button-secondaryBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator>div{background-color:var(--vscode-button-separator)}.monaco-count-badge{padding:3px 6px;border-radius:11px;font-size:11px;min-width:18px;min-height:18px;line-height:11px;font-weight:400;text-align:center;display:inline-block;box-sizing:border-box}.monaco-count-badge.long{padding:2px 3px;border-radius:2px;min-height:auto;line-height:normal}.monaco-progress-container{width:100%;height:2px;overflow:hidden}.monaco-progress-container .progress-bit{width:2%;height:2px;position:absolute;left:0;display:none}.monaco-progress-container.active .progress-bit{display:inherit}.monaco-progress-container.discrete .progress-bit{left:0;transition:width .1s linear}.monaco-progress-container.discrete.done .progress-bit{width:100%}.monaco-progress-container.infinite .progress-bit{animation-name:progress;animation-duration:4s;animation-iteration-count:infinite;transform:translateZ(0);animation-timing-function:linear}.monaco-progress-container.infinite.infinite-long-running .progress-bit{animation-timing-function:steps(100)}@keyframes progress{0%{transform:translate(0) scaleX(1)}50%{transform:translate(2500%) scaleX(3)}to{transform:translate(4900%) scaleX(1)}}.monaco-editor .diff-hidden-lines-widget{width:100%}.monaco-editor .diff-hidden-lines{height:0px;transform:translateY(-10px);font-size:13px;line-height:14px}.monaco-editor .diff-hidden-lines:not(.dragging) .top:hover,.monaco-editor .diff-hidden-lines:not(.dragging) .bottom:hover,.monaco-editor .diff-hidden-lines .top.dragging,.monaco-editor .diff-hidden-lines .bottom.dragging{background-color:var(--vscode-focusBorder)}.monaco-editor .diff-hidden-lines .top,.monaco-editor .diff-hidden-lines .bottom{transition:background-color .1s ease-out;height:4px;background-color:transparent;background-clip:padding-box;border-bottom:2px solid transparent;border-top:4px solid transparent}.monaco-editor.draggingUnchangedRegion.canMoveTop:not(.canMoveBottom) *,.monaco-editor .diff-hidden-lines .top.canMoveTop:not(.canMoveBottom),.monaco-editor .diff-hidden-lines .bottom.canMoveTop:not(.canMoveBottom){cursor:n-resize!important}.monaco-editor.draggingUnchangedRegion:not(.canMoveTop).canMoveBottom *,.monaco-editor .diff-hidden-lines .top:not(.canMoveTop).canMoveBottom,.monaco-editor .diff-hidden-lines .bottom:not(.canMoveTop).canMoveBottom{cursor:s-resize!important}.monaco-editor.draggingUnchangedRegion.canMoveTop.canMoveBottom *,.monaco-editor .diff-hidden-lines .top.canMoveTop.canMoveBottom,.monaco-editor .diff-hidden-lines .bottom.canMoveTop.canMoveBottom{cursor:ns-resize!important}.monaco-editor .diff-hidden-lines .top{transform:translateY(4px)}.monaco-editor .diff-hidden-lines .bottom{transform:translateY(-6px)}.monaco-editor .diff-unchanged-lines{background:var(--vscode-diffEditor-unchangedCodeBackground)}.monaco-editor .noModificationsOverlay{z-index:1;background:var(--vscode-editor-background);display:flex;justify-content:center;align-items:center}.monaco-editor .diff-hidden-lines .center{background:var(--vscode-diffEditor-unchangedRegionBackground);color:var(--vscode-diffEditor-unchangedRegionForeground);overflow:hidden;display:block;text-overflow:ellipsis;white-space:nowrap;height:24px;box-shadow:inset 0 -5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow),inset 0 5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow)}.monaco-editor .diff-hidden-lines .center span.codicon{vertical-align:middle}.monaco-editor .diff-hidden-lines .center a:hover .codicon{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .diff-hidden-lines div.breadcrumb-item{cursor:pointer}.monaco-editor .diff-hidden-lines div.breadcrumb-item:hover{color:var(--vscode-editorLink-activeForeground)}.monaco-editor .movedOriginal,.monaco-editor .movedModified{border:2px solid var(--vscode-diffEditor-move-border)}.monaco-editor .movedOriginal.currentMove,.monaco-editor .movedModified.currentMove{border:2px solid var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path.currentMove{stroke:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path{pointer-events:visiblestroke}.monaco-diff-editor .moved-blocks-lines .arrow{fill:var(--vscode-diffEditor-move-border)}.monaco-diff-editor .moved-blocks-lines .arrow.currentMove{fill:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines .arrow-rectangle{fill:var(--vscode-editor-background)}.monaco-diff-editor .moved-blocks-lines{position:absolute;pointer-events:none}.monaco-diff-editor .moved-blocks-lines path{fill:none;stroke:var(--vscode-diffEditor-move-border);stroke-width:2}.monaco-editor .char-delete.diff-range-empty{margin-left:-1px;border-left:solid var(--vscode-diffEditor-removedTextBackground) 3px}.monaco-editor .char-insert.diff-range-empty{border-left:solid var(--vscode-diffEditor-insertedTextBackground) 3px}.monaco-editor .fold-unchanged{cursor:pointer}.monaco-diff-editor .diff-moved-code-block{display:flex;justify-content:flex-end;margin-top:-4px}.monaco-diff-editor .diff-moved-code-block .action-bar .action-label.codicon{width:12px;height:12px;font-size:12px}.monaco-diff-editor .diffOverview{z-index:9}.monaco-diff-editor .diffOverview .diffViewport{z-index:10}.monaco-diff-editor.vs .diffOverview{background:#00000008}.monaco-diff-editor.vs-dark .diffOverview{background:#ffffff03}.monaco-scrollable-element.modified-in-monaco-diff-editor.vs .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.vs-dark .scrollbar{background:#0000}.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-black .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-light .scrollbar{background:none}.monaco-scrollable-element.modified-in-monaco-diff-editor .slider{z-index:10}.modified-in-monaco-diff-editor .slider.active{background:#ababab66}.modified-in-monaco-diff-editor.hc-black .slider.active,.modified-in-monaco-diff-editor.hc-light .slider.active{background:none}.monaco-editor .insert-sign,.monaco-diff-editor .insert-sign,.monaco-editor .delete-sign,.monaco-diff-editor .delete-sign{font-size:11px!important;opacity:.7!important;display:flex!important;align-items:center}.monaco-editor.hc-black .insert-sign,.monaco-diff-editor.hc-black .insert-sign,.monaco-editor.hc-black .delete-sign,.monaco-diff-editor.hc-black .delete-sign,.monaco-editor.hc-light .insert-sign,.monaco-diff-editor.hc-light .insert-sign,.monaco-editor.hc-light .delete-sign,.monaco-diff-editor.hc-light .delete-sign{opacity:1}.monaco-editor .inline-deleted-margin-view-zone,.monaco-editor .inline-added-margin-view-zone{text-align:right}.monaco-editor .arrow-revert-change{z-index:10;position:absolute}.monaco-editor .arrow-revert-change:hover{cursor:pointer}.monaco-editor .view-zones .view-lines .view-line span{display:inline-block}.monaco-editor .margin-view-zones .lightbulb-glyph:hover{cursor:pointer}.monaco-editor .char-insert,.monaco-diff-editor .char-insert{background-color:var(--vscode-diffEditor-insertedTextBackground)}.monaco-editor .line-insert,.monaco-diff-editor .line-insert{background-color:var(--vscode-diffEditor-insertedLineBackground, var(--vscode-diffEditor-insertedTextBackground))}.monaco-editor .line-insert,.monaco-editor .char-insert{box-sizing:border-box;border:1px solid var(--vscode-diffEditor-insertedTextBorder)}.monaco-editor.hc-black .line-insert,.monaco-editor.hc-light .line-insert,.monaco-editor.hc-black .char-insert,.monaco-editor.hc-light .char-insert{border-style:dashed}.monaco-editor .line-delete,.monaco-editor .char-delete{box-sizing:border-box;border:1px solid var(--vscode-diffEditor-removedTextBorder)}.monaco-editor.hc-black .line-delete,.monaco-editor.hc-light .line-delete,.monaco-editor.hc-black .char-delete,.monaco-editor.hc-light .char-delete{border-style:dashed}.monaco-editor .inline-added-margin-view-zone,.monaco-editor .gutter-insert,.monaco-diff-editor .gutter-insert{background-color:var(--vscode-diffEditorGutter-insertedLineBackground, var(--vscode-diffEditor-insertedLineBackground), var(--vscode-diffEditor-insertedTextBackground))}.monaco-editor .char-delete,.monaco-diff-editor .char-delete{background-color:var(--vscode-diffEditor-removedTextBackground)}.monaco-editor .line-delete,.monaco-diff-editor .line-delete{background-color:var(--vscode-diffEditor-removedLineBackground, var(--vscode-diffEditor-removedTextBackground))}.monaco-editor .inline-deleted-margin-view-zone,.monaco-editor .gutter-delete,.monaco-diff-editor .gutter-delete{background-color:var(--vscode-diffEditorGutter-removedLineBackground, var(--vscode-diffEditor-removedLineBackground), var(--vscode-diffEditor-removedTextBackground))}.monaco-diff-editor.side-by-side .editor.modified{box-shadow:-6px 0 5px -5px var(--vscode-scrollbar-shadow);border-left:1px solid var(--vscode-diffEditor-border)}.monaco-diff-editor.side-by-side .editor.original{box-shadow:6px 0 5px -5px var(--vscode-scrollbar-shadow);border-right:1px solid var(--vscode-diffEditor-border)}.monaco-diff-editor .diffViewport{background:var(--vscode-scrollbarSlider-background)}.monaco-diff-editor .diffViewport:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-diff-editor .diffViewport:active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-editor .diagonal-fill{background-image:linear-gradient(-45deg,var(--vscode-diffEditor-diagonalFill) 12.5%,#0000 12.5%,#0000 50%,var(--vscode-diffEditor-diagonalFill) 50%,var(--vscode-diffEditor-diagonalFill) 62.5%,#0000 62.5%,#0000 100%);background-size:8px 8px}.monaco-diff-editor .gutter{position:relative;overflow:hidden;flex-shrink:0;flex-grow:0}.monaco-diff-editor .gutter .gutterItem{opacity:0;transition:opacity .7s}.monaco-diff-editor .gutter .gutterItem.showAlways{opacity:1;transition:none}.monaco-diff-editor .gutter .gutterItem.noTransition{transition:none}.monaco-diff-editor .gutter:hover .gutterItem{opacity:1;transition:opacity .1s ease-in-out}.monaco-diff-editor .gutter .gutterItem .background{position:absolute;height:100%;left:50%;width:1px;border-left:2px var(--vscode-menu-border) solid}.monaco-diff-editor .gutter .gutterItem .buttons{position:absolute;width:100%;display:flex;justify-content:center;align-items:center}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar{height:fit-content}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar{line-height:1}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container{width:fit-content;border-radius:4px;border:1px var(--vscode-menu-border) solid;background:var(--vscode-editor-background)}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container .action-item:hover{background:var(--vscode-toolbar-hoverBackground)}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container .action-item .action-label{padding:.5px 1px}.monaco-component.diff-review{user-select:none;-webkit-user-select:none;z-index:99}.monaco-diff-editor .diff-review{position:absolute}.monaco-component.diff-review .diff-review-line-number{text-align:right;display:inline-block;color:var(--vscode-editorLineNumber-foreground)}.monaco-component.diff-review .diff-review-summary{padding-left:10px}.monaco-component.diff-review .diff-review-shadow{position:absolute;box-shadow:var(--vscode-scrollbar-shadow) 0 -6px 6px -6px inset}.monaco-component.diff-review .diff-review-row{white-space:pre}.monaco-component.diff-review .diff-review-table{display:table;min-width:100%}.monaco-component.diff-review .diff-review-row{display:table-row;width:100%}.monaco-component.diff-review .diff-review-spacer{display:inline-block;width:10px;vertical-align:middle}.monaco-component.diff-review .diff-review-spacer>.codicon{font-size:9px!important}.monaco-component.diff-review .diff-review-actions{display:inline-block;position:absolute;right:10px;top:2px;z-index:100}.monaco-component.diff-review .diff-review-actions .action-label{width:16px;height:16px;margin:2px 0}.monaco-component.diff-review .revertButton{cursor:pointer}.monaco-toolbar{height:100%}.monaco-toolbar .toolbar-toggle-more{display:inline-block;padding:0}.monaco-component.multiDiffEditor{background:var(--vscode-multiDiffEditor-background);overflow-y:hidden}.monaco-component.multiDiffEditor .focused{--vscode-multiDiffEditor-border: var(--vscode-focusBorder)}.monaco-component.multiDiffEditor .multiDiffEntry{display:flex;flex-direction:column;flex:1;overflow:hidden}.monaco-component.multiDiffEditor .multiDiffEntry .collapse-button{margin:0 5px;cursor:pointer}.monaco-component.multiDiffEditor .multiDiffEntry .collapse-button a{display:block}.monaco-component.multiDiffEditor .multiDiffEntry .header{z-index:1000;background:var(--vscode-editor-background)}.monaco-component.multiDiffEditor .multiDiffEntry .header:not(.collapsed) .header-content{border-bottom:1px solid var(--vscode-sideBarSectionHeader-border)}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content{margin:8px 8px 0;padding:4px 5px;border-top:1px solid var(--vscode-multiDiffEditor-border);border-right:1px solid var(--vscode-multiDiffEditor-border);border-left:1px solid var(--vscode-multiDiffEditor-border);border-top-left-radius:2px;border-top-right-radius:2px;display:flex;align-items:center;color:var(--vscode-foreground);background:var(--vscode-multiDiffEditor-headerBackground)}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content.shadow{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path{display:flex;flex:1;min-width:0}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .title{font-size:14px;line-height:22px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .title.original{flex:1;min-width:0;text-overflow:ellipsis}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .status{font-weight:600;opacity:.75;margin:0 10px;line-height:22px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .actions{padding:0 8px}.monaco-component.multiDiffEditor .multiDiffEntry .editorParent{flex:1;display:flex;flex-direction:column;margin-right:8px;margin-left:8px;border-right:1px solid var(--vscode-multiDiffEditor-border);border-left:1px solid var(--vscode-multiDiffEditor-border);border-bottom:1px solid var(--vscode-multiDiffEditor-border);border-radius:2px;overflow:hidden}.monaco-component.multiDiffEditor .multiDiffEntry .editorContainer{flex:1}.monaco-editor .selection-anchor{background-color:#007acc;width:2px!important}.monaco-editor .bracket-match{box-sizing:border-box;background-color:var(--vscode-editorBracketMatch-background);border:1px solid var(--vscode-editorBracketMatch-border)}.inline-editor-progress-decoration{display:inline-block;width:1em;height:1em}.inline-progress-widget{display:flex!important;justify-content:center;align-items:center}.inline-progress-widget .icon{font-size:80%!important}.inline-progress-widget:hover .icon{font-size:90%!important;animation:none}.inline-progress-widget:hover .icon:before{content:""}.monaco-editor .monaco-editor-overlaymessage{padding-bottom:8px;z-index:10000}.monaco-editor .monaco-editor-overlaymessage.below{padding-bottom:0;padding-top:8px;z-index:10000}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.monaco-editor .monaco-editor-overlaymessage.fadeIn{animation:fadeIn .15s ease-out}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.monaco-editor .monaco-editor-overlaymessage.fadeOut{animation:fadeOut .1s ease-out}.monaco-editor .monaco-editor-overlaymessage .message{padding:2px 4px;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-inputValidation-infoBorder);border-radius:3px}.monaco-editor .monaco-editor-overlaymessage .message p{margin-block:0px}.monaco-editor .monaco-editor-overlaymessage .message a{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-editor-overlaymessage .message a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor.hc-black .monaco-editor-overlaymessage .message,.monaco-editor.hc-light .monaco-editor-overlaymessage .message{border-width:2px}.monaco-editor .monaco-editor-overlaymessage .anchor{width:0!important;height:0!important;border-color:transparent;border-style:solid;z-index:1000;border-width:8px;position:absolute;left:2px}.monaco-editor .monaco-editor-overlaymessage .anchor.top{border-bottom-color:var(--vscode-inputValidation-infoBorder)}.monaco-editor .monaco-editor-overlaymessage .anchor.below{border-top-color:var(--vscode-inputValidation-infoBorder)}.monaco-editor .monaco-editor-overlaymessage:not(.below) .anchor.top,.monaco-editor .monaco-editor-overlaymessage.below .anchor.below{display:none}.monaco-editor .monaco-editor-overlaymessage.below .anchor.top{display:inherit;top:-8px}.post-edit-widget{box-shadow:0 0 8px 2px var(--vscode-widget-shadow);border:1px solid var(--vscode-widget-border, transparent);border-radius:4px;background-color:var(--vscode-editorWidget-background);overflow:hidden}.post-edit-widget .monaco-button{padding:2px;border:none;border-radius:0}.post-edit-widget .monaco-button:hover{background-color:var(--vscode-button-secondaryHoverBackground)!important}.post-edit-widget .monaco-button .codicon{margin:0}@font-face{font-family:codicon;font-display:block;src:url(data:font/ttf;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI3T0tHAAABjAAAAGBjbWFwO462kQAACRgAABq0Z2x5ZkExNwYAACdkAAD1iGhlYWRYl6BTAAAA4AAAADZoaGVhAlsC9gAAALwAAAAkaG10eBi9//oAAAHsAAAHLGxvY2Ebh1ieAAAjzAAAA5htYXhwAuwBgQAAARgAAAAgbmFtZZP3uUsAARzsAAAB+HBvc3RMW9BGAAEe5AAAGP8AAQAAASwAAAAAASz////+AS4AAQAAAAAAAAAAAAAAAAAAAcsAAQAAAAEAANAcvqJfDzz1AAsBLAAAAAB8JbCAAAAAAHwlsID////9AS4BLQAAAAgAAgAAAAAAAAABAAABywF1ABcAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAQBKwGQAAUAAADLANIAAAAqAMsA0gAAAJAADgBNAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAwOpg8QEBLAAAABsBRwADAAAAAQAAAAAAAAAAAAAAAAACAAAAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASz//wEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEs//8BLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASz//wEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLP//ASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASz//wEsAAABLAAAASwAAAEs//8BLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAAAAABQAAAAMAAAAsAAAABAAABSAAAQAAAAAEGgADAAEAAAAsAAMACgAABSAABAPuAAAAEgAQAAMAAuqI6ozqx+rJ6wnrTuwx8QH//wAA6mDqiuqP6snqzOsL61DxAf//AAAAAAAAAAAAAAAAAAAAAAABABIAYgBmANYA1gFQAdYDmAAAAAMA7wFHAUQAswE0AZIBIgFrAQwBcQBNAcABXQFnAWYAkAA1AS0AhQDNAPwAQAGQAHgAFgG7AJoAhwFAARsBEgETAaUAxwClALsBnQF9AIoBjgF2AYUBgwF3AYYBjQGIAYEAvQF8AYoAAgAEAAUACgALAAwADQAOAA8AEAASABoAHAAdAB4AWwBcAF0AXgBhAGIAIQAiACMAJAAlACgAKgArACwALQAuAC8AMQAyADMANAA7ADgAPAA9AD4APwBBAEIARQBHAEgASgBUAFUAVgBXAGYAaABqAG0AcQBzAHQAdQB2AHcAeQB6AHsAfAB9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AADq9wAAAKQAAOr4AADq+AAAAKcAAOr5AADq+QAAAKgAAOr6AADq+gAAAKkAAOr7AADq+wAAAJMAAOr8AADq/AAAAKoAAOr9AADq/QAAAKsAAOr+AADq/gAAAK0AAOr/AADq/wAAALcAAOsAAADrAAAAALgAAOsBAADrAQAAALwAAOsCAADrAgAAAL4AAOsDAADrAwAAAMIAAOsEAADrBAAAAMMAAOsFAADrBQAAAMYAAOsGAADrBgAAAMgAAOsHAADrBwAAAMkAAOsIAADrCAAAAMoAAOsJAADrCQAAAMsAAOsLAADrCwAAANEAAOsMAADrDAAAANIAAOsNAADrDQAAANMAAOsOAADrDgAAANQAAOsPAADrDwAAANUAAOsQAADrEAAAANYAAOsRAADrEQAAANcAAOsSAADrEgAAANgAAOsTAADrEwAAAO0AAOsUAADrFAAAAPAAAOsVAADrFQAAAPEAAOsWAADrFgAAAPQAAOsXAADrFwAAAPcAAOsYAADrGAAAAPgAAOsZAADrGQAAAPkAAOsaAADrGgAAAPoAAOsbAADrGwAAAP4AAOscAADrHAAAAP8AAOsdAADrHQAAAQQAAOseAADrHgAAAQUAAOsfAADrHwAAAQYAAOsgAADrIAAAAQsAAOshAADrIQAAAQ0AAOsiAADrIgAAAQ4AAOsjAADrIwAAAQ8AAOskAADrJAAAAREAAOslAADrJQAAARUAAOsmAADrJgAAARYAAOsnAADrJwAAARkAAOsoAADrKAAAARoAAOspAADrKQAAAR0AAOsqAADrKgAAAR4AAOsrAADrKwAAASUAAOssAADrLAAAASkAAOstAADrLQAAASoAAOsuAADrLgAAASsAAOsvAADrLwAAASwAAOswAADrMAAAAS4AAOsxAADrMQAAAS8AAOsyAADrMgAAATAAAOszAADrMwAAATEAAOs0AADrNAAAATIAAOs1AADrNQAAATMAAOs2AADrNgAAATgAAOs3AADrNwAAATkAAOs4AADrOAAAAToAAOs5AADrOQAAATsAAOs6AADrOgAAATwAAOs7AADrOwAAAT0AAOs8AADrPAAAAT4AAOs9AADrPQAAAT8AAOs+AADrPgAAAUEAAOs/AADrPwAAAUMAAOtAAADrQAAAAUUAAOtBAADrQQAAAUYAAOtCAADrQgAAAUgAAOtDAADrQwAAAUkAAOtEAADrRAAAAUsAAOtFAADrRQAAAUwAAOtGAADrRgAAAU0AAOtHAADrRwAAAU4AAOtIAADrSAAAAU8AAOtJAADrSQAAAVYAAOtKAADrSgAAAVcAAOtLAADrSwAAAVgAAOtMAADrTAAAAVkAAOtNAADrTQAAAVoAAOtOAADrTgAAAVwAAOtQAADrUAAAAWEAAOtRAADrUQAAAWIAAOtSAADrUgAAAWMAAOtTAADrUwAAAWUAAOtUAADrVAAAAWgAAOtVAADrVQAAAWoAAOtWAADrVgAAAW4AAOtXAADrVwAAAW8AAOtYAADrWAAAAXAAAOtZAADrWQAAAXIAAOtaAADrWgAAAXMAAOtbAADrWwAAAXgAAOtcAADrXAAAAXkAAOtdAADrXQAAAXoAAOteAADrXgAAAXsAAOtfAADrXwAAAX4AAOtgAADrYAAAAX8AAOthAADrYQAAAYAAAOtiAADrYgAAAYIAAOtjAADrYwAAAYQAAOtkAADrZAAAAYcAAOtlAADrZQAAAYkAAOtmAADrZgAAAYsAAOtnAADrZwAAAZQAAOtoAADraAAAAZUAAOtpAADraQAAAZ4AAOtqAADragAAAZ8AAOtrAADrawAAAaEAAOtsAADrbAAAAaMAAOttAADrbQAAAaQAAOtuAADrbgAAAaYAAOtvAADrbwAAAacAAOtwAADrcAAAAagAAOtxAADrcQAAAakAAOtyAADrcgAAAaoAAOtzAADrcwAAAa4AAOt0AADrdAAAAbAAAOt1AADrdQAAAbEAAOt2AADrdgAAAbIAAOt3AADrdwAAAbUAAOt4AADreAAAAbYAAOt5AADreQAAAbcAAOt6AADregAAAbkAAOt7AADrewAAAboAAOt8AADrfAAAAcEAAOt9AADrfQAAAcIAAOt+AADrfgAAAcMAAOt/AADrfwAAAcQAAOuAAADrgAAAAcUAAOuBAADrgQAAAckAAOuCAADrggAAAcoAAOuDAADrgwAAAPIAAOuEAADrhAAAAPMAAOuFAADrhQAAAPUAAOuGAADrhgAAAPYAAOuHAADrhwAAAF8AAOuIAADriAAAAGAAAOuJAADriQAAAG8AAOuKAADrigAAADkAAOuLAADriwAAAHAAAOuMAADrjAAAAGMAAOuNAADrjQAAAYwAAOuOAADrjgAAAG4AAOuPAADrjwAAAHIAAOuQAADrkAAAAGwAAOuRAADrkQAAAFoAAOuSAADrkgAAACYAAOuTAADrkwAAACcAAOuUAADrlAAAAQcAAOuVAADrlQAAAIwAAOuWAADrlgAAAJEAAOuXAADrlwAAAMQAAOuYAADrmAAAAa8AAOuZAADrmQAAAAEAAOuaAADrmgAAABcAAOubAADrmwAAAGQAAOucAADrnAAAAOwAAOudAADrnQAAARwAAOueAADrngAAAVIAAOufAADrnwAAAY8AAOugAADroAAAAScAAOuhAADroQAAALkAAOuiAADrogAAAWAAAOujAADrowAAAV8AAOukAADrpAAAASAAAOulAADrpQAAAXQAAOumAADrpgAAASgAAOunAADrpwAAATYAAOuoAADrqAAAAFkAAOupAADrqQAAAbgAAOuqAADrqgAAAEMAAOurAADrqwAAAQgAAOusAADrrAAAAI0AAOutAADrrQAAAL8AAOuuAADrrgAAAP0AAOuvAADrrwAAARgAAOuwAADrsAAAATcAAOuxAADrsQAAACkAAOuyAADrsgAAASYAAOuzAADrswAAAR8AAOu0AADrtAAAADYAAOu1AADrtQAAADcAAOu2AADrtgAAAEkAAOu3AADrtwAAAZEAAOu4AADruAAAAbMAAOu5AADruQAAAa0AAOu6AADrugAAAasAAOu7AADruwAAAawAAOu8AADrvAAAAK8AAOu9AADrvQAAAVAAAOu+AADrvgAAAVMAAOu/AADrvwAAARcAAOvAAADrwAAAAGsAAOvBAADrwQAAAcYAAOvCAADrwgAAAcgAAOvDAADrwwAAAccAAOvEAADrxAAAAZcAAOvFAADrxQAAAZgAAOvGAADrxgAAAZkAAOvHAADrxwAAAZoAAOvIAADryAAAAZsAAOvJAADryQAAAZwAAOvKAADrygAAAZYAAOvLAADrywAAABEAAOvMAADrzAAAAFIAAOvNAADrzQAAASEAAOvOAADrzgAAAJwAAOvPAADrzwAAAb8AAOvQAADr0AAAAGkAAOvRAADr0QAAAM8AAOvSAADr0gAAANsAAOvTAADr0wAAANoAAOvUAADr1AAAANkAAOvVAADr1QAAAFAAAOvWAADr1gAAAE8AAOvXAADr1wAAAE4AAOvYAADr2AAAABQAAOvZAADr2QAAANAAAOvaAADr2gAAAK4AAOvbAADr2wAAALAAAOvcAADr3AAAAFgAAOvdAADr3QAAAGcAAOveAADr3gAAAVUAAOvfAADr3wAAAKMAAOvgAADr4AAAAGUAAOvhAADr4QAAABUAAOviAADr4gAAAMAAAOvjAADr4wAAAMEAAOvkAADr5AAAASQAAOvlAADr5QAAAB8AAOvmAADr5gAAACAAAOvnAADr5wAAAPsAAOvoAADr6AAAABMAAOvpAADr6QAAAbQAAOvqAADr6gAAARQAAOvrAADr6wAAAOsAAOvsAADr7AAAANwAAOvtAADr7QAAAN0AAOvuAADr7gAAAOIAAOvvAADr7wAAAOAAAOvwAADr8AAAAOEAAOvxAADr8QAAAOQAAOvyAADr8gAAAOUAAOvzAADr8wAAAOcAAOv0AADr9AAAAOkAAOv1AADr9QAAAOoAAOv2AADr9gAAAN8AAOv3AADr9wAAAN4AAOv4AADr+AAAAZMAAOv5AADr+QAAAMwAAOv6AADr+gAAATUAAOv7AADr+wAAAIkAAOv8AADr/AAAAAYAAOv9AADr/QAAAAcAAOv+AADr/gAAAAgAAOv/AADr/wAAAAkAAOwAAADsAAAAAOgAAOwBAADsAQAAAOMAAOwCAADsAgAAAOYAAOwDAADsAwAAABsAAOwEAADsBAAAAMUAAOwFAADsBQAAAQMAAOwGAADsBgAAAQAAAOwHAADsBwAAADoAAOwIAADsCAAAABkAAOwJAADsCQAAABgAAOwKAADsCgAAAEwAAOwLAADsCwAAALEAAOwMAADsDAAAALIAAOwNAADsDQAAAVsAAOwOAADsDgAAAEsAAOwPAADsDwAAAV4AAOwQAADsEAAAAW0AAOwRAADsEQAAAM4AAOwSAADsEgAAAQoAAOwTAADsEwAAAaAAAOwUAADsFAAAAaIAAOwVAADsFQAAAEYAAOwWAADsFgAAAWkAAOwXAADsFwAAAKYAAOwYAADsGAAAAbwAAOwZAADsGQAAADAAAOwaAADsGgAAASMAAOwbAADsGwAAARAAAOwcAADsHAAAAQkAAOwdAADsHQAAAUIAAOweAADsHgAAAFEAAOwfAADsHwAAAO4AAOwgAADsIAAAAUoAAOwhAADsIQAAAWwAAOwiAADsIgAAAIIAAOwjAADsIwAAAH8AAOwkAADsJAAAAXUAAOwlAADsJQAAAWQAAOwmAADsJgAAALYAAOwnAADsJwAAALQAAOwoAADsKAAAALUAAOwpAADsKQAAAb4AAOwqAADsKgAAAb0AAOwrAADsKwAAAEQAAOwsAADsLAAAAVQAAOwtAADsLQAAAVEAAOwuAADsLgAAAFMAAOwvAADsLwAAALoAAOwwAADsMAAAAQIAAOwxAADsMQAAAQEAAPEBAADxAQAAAKwAAAAAAJQA1ADoARQBMgFsAaYB4AIaAi4CQgJWAmoCfgKSAqYCyALeAvwDTgOoA9QEKgSQBOAFLgUuBVwFrgXKBmoHHgdeB+gIBghuCOAJmApMCpIKugrMCxQLJgs4C0oLXAukC74L0AvcC/oMJgxUDLgM7g0CDSoNUg3ADfIOQA56DpQO6g9ED4wPxg/qEHYQohDIESYRYBG0EeoSDhJ8EtoTJBPYE/wUUhR8FIgU+hVOFbgWGBZ6FrAW1BbsFvwXDBcYFywXOhdeF9wX9hgQGF4Yzhj6GQwZRhmQGcAZ2hoCGh4aNBpmGogarBrgGvgbeBuoG84cHBw6HGAcgBykHN4c+h0cHUwdfh2qHcwd9B4gHkgegB7YH1ofjB+mH94gPCB+IOIhPiF2IcgiMCJ4Ir4i/iNkI4YjtCPGI+IkZiSEJKAkvCUKJUglfCWqJhwmjicGJ1InfCf8KCIoqCk8KbgqQCqKKs4rYiuiK9gsDixMLO4taC2MLiYuqC7mLvovQC9kL5Av0C/2MFQwhDDmMSIxUDGWMfYyJjJEMpIyxjLqM1gzrjPqNBo0aDUgNVI1uDYgNnQ2tjbkNvw3FDcyN1o3fjegN7433Df6OBI4MDhIOGY4fjiWONA5DDleOfg6ODpcOr461jryO4g7oDvAO/I8Vjx0PMY88j0gPWY9jD2sPcQ93j4KPjY+XD6MPuw/Bj9cP5I/3kAIQERAfEC8QPBBQEFyQaBB2kH4QjxCZELqQyRDnkPoRMxFBEU2RZxFwEYORnBGyEcER0pHnkgWSGpIvEjSSQJJSEmASZhJwEngSkBKdEr+S1xLvkvwTEBMbEzSTQJNKE2ATZxNqk5kTspO7k9oT+RQKlCaUNJRClFiUZBRwFJQUqpTBlNgU4hTrFPQVChUSFRsVMBVHFVWVZZVvFXwVipWdFbSVwRXIldeV+pYVFjOWTRZlFoKWkJafFrWW0pbkFv8XIRdSl1oXYZedF6mXrxe4l8sX3Jfkl/EYAhgmGC6YPRhNGFYYYRhpmHcYnJipmLSYxhj0GP6ZHpktmUgZUhlgmX4ZjRmeGa6ZvZnPGeIZ+BoBGhOaOZpPms+bPRtIG1EbbBt2G4EbhxuSm6cbspvHG+6b/RwBHAUcCRwNHCUcNRxFHFecaRyFHI+coxzEnOuc950MHRidJ509HU2dYJ1onYUdlh2mnb0dxR3Und+d9h39ni6eSp5zHpEeoh6xAAEAAD//wEsASwAEQAiADQAZAAAJTQuASIOARUUFh8BFjI/AT4BByInNz4EMzIeARcWFwYnJjQ+AjIeAhQOAQcGJy4BFzA9AS4BJyYnNjc2NzYnNi4CIg4CFRQeARcWFwYHDgEHFS4BNTQ+ATIeARUUBgEsKEVSRSgcGQ0mXCYOGByWKSIBAwoOEBUKDx0VBgMCIlgECA0SFhEOCAgOCRMUCA6HBBEMCQsFBAcFCgEBCxQaHRoTCwYICAQFCgkMEQUSFCM8SDwjE5YpRSgoRSkhPBUKGhoKFTxiGAcKEQ4KBQsVDggJGIsJFBINCQgOEhURDgQICAQOWwEBDhgJBwUDBAcIEBQOGhQKChQaDgoTDggEBAQHCRgPARIwGiQ8IyM8JBowAAAAAAIAAAAAARoBGgAaACgAACUWDgEHNCc+ATcuAw4BByYjPgIzMh4CByIOARQeATI+ATQuASMBGQEUIhYDGSIBARAdIx4TAgkKAxglFREfGAyyFycWFicuJxcXJxfFFiUYAgoJAyUaER4SAQ8cEQMVIhQMGB8aFycuJxYWJy4nFgAAAQAAAAABBwEaAAsAACUVIxUjNSM1MzUzFQEHcRNwcBOpE3BwE3BwAAQAAAAAARoBGgANABIAFgAaAAABIwcVFzMVFzM3NTM3NQcjNTMVBzUzFScjFTMBEPQJCQoJzgoJCRzX4c+8JnBwARkJOAqfCQmfCjgvJiaplpZxEwAAAAABAAAAAAESAMwADwAANxcHJzU3FwczJzcXFQcnNzgoDTg4DSi8KA04OA0ogygNOA05DigoDjkNOA0oAAADAAAAAAEHAQcACQAWACMAADcXNTMVNxcHIyc3NC4BIg4BFB4BMj4BJxQOASIuATQ+ATIeAWUoEyYOOA04sB8zPjMeHjM+Mx8TGSwyLBkZLDIsGZQobGomDTc3Dx8zHx8zPjMeHjMfGSwZGSwyLBkZLAAAAAMAAAAAAQcBBwAJABcAJAAANyczNSM3JwcVFzcyHgEUDgIuAj4BFxUiDgEUHgEyPgE0LgGUKGxqJg03Nw8fMx8fMz4zHgEfMx8ZLBkZLDIsGRksZSgTJg44DTiwHzM+Mx4BHzM+Mx8BEhksMiwZGSwyLBkAAwAAAAABBwEHAAkAFgAjAAA3FyMVMwcXNzUnBwYuAj4BMh4BFA4BJzI+ATQuASIOARQeAZgobGomDTc3Dx8zHgEfMz4zHx8zHxksGRksMiwZGSzHKBMmDjgNOK8BHzM+Mx8fMz4zHhIZLDIsGRksMiwZAAADAAAAAAEHAQcACQAWACMAAD8BFTM1FzcnIwcXFA4CLgI+ATIeAQc0LgEiDgEUHgEyPgFlKBMmDjgNOLAfMz4zHgEfMz4zHxMZLDIsGRksMiwZmChsaiYNNzcPHzMeAR8zPjMfHzMfGSwZGSwyLBkZLAAAAAEAAAAAAQQBBwAJAAA3FzM3Jwc1IxUnO14NXg1OE06DXV0OTsTETgABAAAAAAEHAPMACQAANwcVFzcnMzUjN4NdXQ5OxMRO8l4NXg5NE04AAQAAAAABBwDxAAkAAD8BNScHFyMVMwepXl4OTsPDTihdDl0NThJOAAEAAAAAAMkA4QAJAAA3ByMnNxc1MxU3yS8NLw0fEx+KLy8NHmhoHwABAAAAAADRAM8ACQAANyc1NxcHMxUjF3ovLw0faWkfYy8NLw0fEx4AAQAAAAAA0QDPAAkAADcXFQcnNyM1MyeiLy8NHmhoHs4vDS8OHhMfAAEAAAAAAMkA4QAJAAA/ATMXBycVIzUHXi8NLw0fEx+yLy8NH2lpHwACAAAAAAEaARsACQATAAA3JzU3FwczFSMXPwE1JwcXIxUzB088PA0s6eksgTw8DSzp6SwSPA08DSwTLHY8DTwNLBMsAAEAAAAAAQQBBwAJAAAlJyMHFzcVMzUXAQReDV4NThNNqV5eDk7Dw04AAAAAAgAAAAABGgEaAAcADwAAJRUHJxUnFzUXJxUPARUXNQEZQWY6qAFeVhol6KA1JSVLDZABOSUaIUsRYQAAAwAAAAABIgEaABsAJwA2AAAlJy4BByMiBg8BBh4COwEyNj8BFxY7ATI+AgciLwEzNxccAQ4BIzMjNi8BMx4BFRcWDgIjASBLAgoHWAYKAkwCAgUJBTcFCgIMOAUGWAQJBQJrAgJsORQqAgQBV0UCAkxFAgRMAQECAgIs4QUIAQcF4QUJCAMHBiErAwQHCQgBUDR9AQMDAQYH4QECAuEBAwICAAAEAAAAAAEaARoAHQAsADUAPQAANzMmJyM3MzQ3Izc1MxUXNjcnNTM1IxUzFQcGHgI3NjMyHgIVFA4BLgI2FxYXMjcnBhUUNxc2NTQmIyI4XgsISx0bAhMkJgEJCQETcBJJAgEFCHISFw8cFQsZKi0gCRIUERcSD08KGE4LIRgSEwgKOQkJSE5PAwQCAUsTEkuOBQkJBIkNDBUbDxcmEQkgLCpZEAELTg4SGEZPDxIXIQAAAAADAAAAAAEKARoADwAWABoAACUnNTM1IxUzFQcGFjsBMjYnNzUzFRcjBzczFwEESBJwE0oECwq8CguIAiYkbicdgh0ujUsTEkuOChERkAROT0dLOTkAAAAAAwAAAAABGgEbACoAMQA6AAA3BiMVFB8BIzc2PQE0PgIXMzY3JicmDgIdARQPARczFBYyNjUzNycmNQcyNicjFBY3MjY0JiIGFBb0CQoIB7UHCQ0XHw8DBQcGBxQmHRAHCwhCFh8WQgkLB14HDAElC1MXISEuISGYAgQaGRQVGRkpEB4VCgIJBwIBAg0bJBQpFhYhDQ8WFg8NIRYWbQsICAuEIS4hIS4hAAAAAAYAAAAAASoBJgAVACcALgAzADgAQQAAEwYHIgcOAh0BFA8BNzY9ATQ+Ah8BBgcWHwEjBzMUFjI2NTM3JyYHBiImNTMWNyYnNxcPARc3JhcyNjQmIgYUFqIKBwkKDxcNBBwGBxAdJhRVCQoCBgd6EgwWHxZCCQsGUgYPCyUBdQYHCw2ClA2VBzMXISEuISEBGAgKAwUVHhApEREdExYWKRQkGw0CkQMBExIUEw8WFg8NIRFMBgsICN0HBwoNZ5UNlQYBIS4hIS4hAAAAAAQAAAAAASoBJgAVACcALgAyAAATJicmDgIdARQHNzY9ATQ+AhcWFwczJyY9ATcVFB8BByMUBiImJxcyNicjFBYHARcBzxUbFCYdEAcZAQ0XHw8UED1sBwgTBwsJQhYfFQEmBwwBJQt7AQkN/vcBBRAEAg0bJBQpFhUZCQkpEB4VCgIDDKwUGRoWEykWFiENDxYVDxILCAgLCQEJDf73AAADAAAAAAEGARsAGgAhADQAADcmPQE0LgInJg4CHQEUDwEXMxQWMjY1MzcHBiImNTMWJzc2PQE0PgIXFhceAR0BFB8B+wcMGB8SFCYdEAcLCEIWHxZCCWMGDwslAW4HCQ0XHw8eEwkKCAdmFRcmEiEbEQICDRskFCkXFSENDxYWDw0aBgsICBsVGBopEB4VCgIEFgsbDiYaGRQAAAADAAAAAADhAPQADgAWAB4AADc1MzIWFRQGBx4BFRQGIycVMzI2NTQjJzMyNjQmKwFePx8gEA0QEiIeKioSFCUrJxAUEhMmOLwaGA0VBQQYERkdWEQSECIUEB0OAAkAAAAAARoBBwAQABcAHgAiACYAKgAuADIANgAAASMPAS8BIwcVFzMXMzczNzUHLwEjNTMfASMPATU3MwcjFTMVIxUzJzMVIzcjFTMHMxUjFTMVIwEQZwcMDAdnCQljEA4QYwmMBAZdWQ56XgcCDVqWOTk5OTk5Obw4ODg4ODg4AQcDDAwDCrsKEBAKu7gDA6kOmwMCoQ0mEjkSOBM4EhMTExIAAgAAAAAA9AEaAAgADgAAEyMHFRc3Fzc1BycjBzUz6qgKEU1NERNEDkSWARkJ9AZWVgb020tL0gADAAAAAAEaAQcARwBxAH0AADcxIyIOAh0BFA4CBx4DHQEUHgI7ARUjIi4BJzEmJzUmNzU0JzEmJzUmJzEmKwE1MzI+ATcxNj0BJjcxNjcxPgI7ARczNSMiJzEmJzUmJzEmPQE2JzUmJzEuAisBFTMyHgIdARQeAhcjFgciDgEeAj4BNTQmcQIGCgcEAgQHBQUHBAIEBwoGAgIJEA0DAwEBAQICBAMFBQYBAQYKBwICAQEBAwMNEAkClAICBgUFAwQCAgEBAQMDDRAJAQEGCgcEAgQHBQEPFxEcDQYYIh8TIfQECAoGGQYMCwgEBAgLDAYZBgoIBBIGDQgIBwEICBAGBQUDAQMCAxIFBwUFBhAICAgICA0HehIDAgMBAwUFBhAICAEHCAgNBxMECAoGGQYMCwgEAhETHyIYBg0cERchAAQAAAAAARoBBwBHAHEAfgCKAAA3MSMiDgIdARQOAgceAx0BFB4COwEVIyIuAScxJic1Jjc1NCcxJic1JicxJisBNTMyPgE3MTY9ASY3MTY3MT4COwEXMzUjIicxJic1JicxJj0BNic1JicxLgIrARUzMh4CHQEUHgIXIxYHNjMyFhUUDgEuAjYXBycHFwcXNxc3JzdxAgYKBwQCBAcFBQcEAgQHCgYCAgkQDQMDAQEBAgIEAwUFBgEBBgoHAgIBAQEDAw0QCQKUAgIGBQUDBAICAQEBAwMNEAkBAQYKBwQCBAcFAQ82DhEXIRMfIhgGDUIVFQ4WFg4VFQ4WFvQECAoGGQYMCwgEBAgLDAYZBgoIBBIGDQgIBwEICBAGBQUDAQMCAxIFBwUFBhAICAgICA0HehIDAgMBAwUFBhAICAEHCAgNBxMECAoGGQYMCwgEAhoJIRcRHA0GGCIfAhYWDhUVDhYWDhUVAAUAAAAAARoBBwANABEAGwAfACkAACUjNScjBxUjBxUXMzc1JzMVIxcVBzUnIwcVJzUXFSM1BzUXFRczNzU3FQEQQgleCUIJCfQJqEtLlksKOAlLgyZdSwk4CkvhHAoKHAmWCgqWHBMTDioJCgoJKw04ExNLYCsGCQkGKl8AAAAABAAAAAABBwEaACIAPwBbAGQAABM2MzIeARcOAQc1MTY9AT4CJicuAQ4CFhcVFBcVLgI2FwYjFRQGKwEwIzEuAT0BIiY9ATQ2OwEyFh0BFAc3FAcWHQE+AiYnLgEOAhYXNTQ3Jj4CHgEHIxQGIiY0NjIWWBwiHzMeAQEpIQkRFwkHChE2OSgJGhkJHigIG3ICBAUEFAEEBAQFCwgSCAsDGQkGCQsBCwkNJCMaCQsNBgkBFB4eEwEeCxALCxALAQYTHjQeJDoMAQkLAwkgJicQGRUMKzo1DgMMCAELMUA6pwMvBAUBBAQvBQQmCAsLCCYEAlsPDQkKAgkZHBkJDgoKGiQjDQILCQ0fGgkLGRAICwsQCwsAAwAAAAABGgEaAAcACwAPAAATMxcVByMnNRcVMzUnMzUjHPQJCfQJE+Hh4eEBGQnhCQnhQpaWEyYAAAAAAwAAAAABGAEaADEAOQBJAAA3NTQmIgYdASMnBxcHBh0BIxU7ARYfAQcXNxceATI2PwEXNyc1NjcxMzUjNTYvATcnByM1NDYyFh0BFxUWFRQOAiIuAjU0NzXMIC0gEB8LHgEJJigBBA0BJQsjAgwfIh8MASQLJQ4FKScBCgEeCx9tFyAXHQkNFhsdHBYMCNgLFiAgFgsfCx4BGhsMEBsVASULIwEOEA8OASQLJgEWGxAMGxoBHgsfCxAXFxALEAEWGRcnHA8PHCcXGRYBAAAAABEAAAAAARoBGgAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AAAEjNSMVIzUjFSMHFRczNzUHIzUzNSM1MwcjFTMHMxUjFyMVMzczFSMXIxUzBzMVIzcjFTMXMxUjFyMVMwczFSM3IxUzFzMVIxcjFTMnMxUjARAcE5YTHAkJ9AkS4eHh4bwTExMTExMTEyYSEhISEhISEhISEiYTExMTExMTExMTEyUTExMTExMTEwEHEhISEgrhCQnh16gTE14TEhMTE14TEhMTE4QTExMSExMThBMTExITXhMAAAMAAAAAARoBGgA9AHkAggAANy4BDgEPAgYmLwEmJy4CPwI+AjU0Jy4DIyIPAQ4CFRQeBjMyPgE/ATY1NCYvASYvASYHBiciJicmJy4DNSY+AT8BNjMyHwEWHwEWFA8BDgIUFh8BFjMyNzY/AT4BMh8CFh8BFhUUDwEOATcHMxUjNTMVN+sFCwoHAwYFAwgCKQsLBAYBAwQHAwYDCAULDA0IDAgOBQkDChEYHCAiIRAKEQ0GDggDAwcEBA8EDQcIDh4OHxoNFhAJAQQGBQsDBAIEBwoHBgMCCwQFBAQFRQkMBQUJBgYCBgUEBwkFAwYDBAoFCi9XPl4TV30CAQUFBAYEAwEDJwsMBQgFAwUGAwcJBgwJBQwLCAgOBg0RCg8iISAcGREKBAgFDggMBQoECAQEDgRUAgEJBxIaDRweHg8HDgkFCgQDBggJBwQFAwsDBwoLCgVFCQIEBwYDBAMGCAQFCAMCBAMLBAfjVxNePlcAAwAAAAABGgEaAAgARACAAAA/ASM1MxUjNQcXMh8DHgEVFA8BDgIjIi4GNTQ+AT8BNjMyHgIXFhUUDgEPAgYUFhcWHwEeAT8CPgIHMj4BPwE2JzYvASYvAiYiBg8BDgIjIi8BLgE0PgI/ATY0LwQmIyIPAQ4CBx4DFxYXHgGiVz1dElgxDAkPCAcDAwgOBQ4RChAiISAcGBEKAwgGDggMBw4NCgUIAwYDBwQCBgQLCykCCAMFBgMICQYJDAoFCgQBAQMGAwUJBwQFBgIGAwcKBQwJRQUEBAUHAwUCAwYICQcEAgQDCwQHAwEBCRAWDRofDh6vWBJdPVcjCA4ICAQKBQwIDgUIBAoSGBwgISEQCxANBg4ICAsNBAkMBQkIAwYFAwUIBQwLJwMBAwQGBAUFWgMGBQsDBAIDCAUECAYDBAMGBAUECUUECwwJBwYDBQMFBAcJCAYDBAoECw0HDh8eHA0aEQgJAAAABAAAAAABAgDhAAcADwAkAC8AADcjJyMHIzczFycmJyMGDwEXIzUxBiMiJjU0PwE0IyIHNTYzMhUPAQ4BFRQWMzI2NaYTDz0PEjcREBYBAQEBARe2EQsVDxIiHxUSDw8UJBEYDAwLCQwQUSgokFk+AwYGAz43EBMQDh0FBBoMEAomDwQBCAsHChENAAAEAAAAAAElAPQABgAKAAwAEwAAJQcjJzcXNwc3Jw8BFwcXByMnNxcBJZIOOg40i5BSDVASCikLDw46DjTprVMKSaRtYgteFg8VDxFTCkkAAAEAAAAAAQ8A+gAGAAAlBy8BNxc3AQ+fDz8POJfuvAFZC0+yAAgAAAAAARoBBwAGAAoADgASABYAHQAkACsAADcjJzcXNx8BMxUjFTMVIxcjFTMHMxUjJzM3JwcnBxcjJzcXNxcHMzcnBycHRg0TDQ0aDhuWlpaWlpaWlpaWSg0iDhoNDSANEw0NGg4vDSIOGg0N2BQNDRsOBRMlEyYSJhNoIQ0aDQ5MFA0NGw1aIQ0aDQ0AAAEAAAAAAPMAwQAGAAA/ARcHIyc3llEMWAtYDG9SDFdXDAAAAAEAAAAAAMEA9AAGAAA3FwcnNTcXb1IMV1cMllEMWAtYDAAAAAEAAAAAAM8A8wAGAAA3JzcXFQcnvVIMV1cMllEMWAtYDAAAAAEAAAAAAPQAzwAGAAA3Byc3MxcHllEMWAtYDL1SDFdXDAAAAAIAAAAAAQcBGgA3ADsAABMzFTM1MxUzNTMVMxcVMxUjFTMVIxUzFSMVByMVIzUjFSM1IxUjNSMnNSM1MzUjNTM1IzUzNTczBzM1I14TEhMTExITJiYmJiYmExITExMSExMTJSUlJSUlExMTg4MBGSUlJSUlExMSExMTEhMTJSUlJSUlExMSExMTEhMTloMAAAEAAAAAAP0A/QALAAA3Bxc3FzcnNycHJweFVRFVVRFVVRFVVRGWVRFVVRFVVRFVVREAAAACAAAAAAD0APQAAwAHAAA3FTM1ByM1Mzi8E5aW9Ly8qZYAAAABAAAAAAEHAJYAAwAAJRUjNQEHz5YTEwADAAAAAAEHAPQAAwAHABEAADcVMzUHIzUzJzM1MxUjFTM1IzipE4ODcBODEyapzqioloQSE4MTqQAAAAABAAAAAADiAOIAGQAANzIXHgEXFhQHDgEHBiInLgEnJjQ2NzY3PgGWCgoTHAUDAwUcEwoUChMcBQMFBQoRCRPhAwUcEwoUChMcBQMDBRwTChQTCREKBQUAAQAAAAABGgEaABoAABMyFx4BFxYUBgcGBw4BIi4ENDY3Njc+AZYSESExCgQJCREeDyEkIR4YEQkJCREeDyEBGQQKMSERJCEPHhEJCQkRGB4hJCEPHhEJCQAAAAACAAAAAAEaARoAKgBEAAATJiIHMQYHBgcxDgEWFxYXHgI+ATcxNjc2NzE2JicxJicxJicxJicxJicXBgcOASIuBDQ2NzY3PgEyFx4BFxYUBrQPHg8ODRkPCAgBAwgVCxkdHxwNGQ8IAwUBBAMIBwsKDA0OUxEeDyEkIR4YEQkJCREeDyEkESExCgQJAQIFBQMIDxkNHR8OHBYKDwgBBwgPGQ0ODx8ODg0MCgsHCAOuHhEJCQkRGB4hJCEPHhEJCQQKMSERJCEAAAMAAAAAARoBGgAMABYAHwAAEzIeARQOASIuATQ+AQcUFhc3LgEOARUzNCYnBx4BPgGWJDwjIzxIPCMjPEwNDZ8ZQjsk4g4NnxlCOyQBGSM8SDwjIzxIPCODFCUQnxUJHDchFCUQnxUJHDcAAAEAAAAAALwAvAAIAAA3FAYuATQ2Mha8FiAVFSAWlhAWARUgFhYAAAACAAAAAAC8ALwACgAXAAA3DgEuAj4BMhYUFzY1NCYjIg4BHgI2pgQKCwgCBAkOCwwHFhALEwkEERYVjAUEAggLCgcLDg8KCxAWDRUWEQQJAAMAAAAAAOEA4gAMABUAFgAANzI+ATQuASIOARQeATcUBiImNDYyFieWFCMUFCMoIxQUI0UdKB0dKB0xSxQjKCMUFCMoIxRLFB0dKB0dIAAABQAAAAABGgEaAAcANAA9AEYATwAAASMHFRczNzUHIzUzHgEzMjY0JiIGFSMVIzUzFQ4BFRQWMjY1MxQWMjY0JiMiBgcjLgEjNTMHNDYyFhQGIiYnMhYUBiImNDYzMhYUBiImNDYBEPQJCfQJEqkrBBIKDxYWHxY4JSUICxYfFiYWHxYWEAoRBTAFEQqpcQoRCwsRCjgICwsRCgp5CQoKEQoKARkJ9AkJ9OolCAsWHxYWDzjhLAQSCRAWFhAQFhYfFgoJCQomqQgLCxEKCnkKEQoKEQoKEQoKEQoAAAUAAAAAARoA9AALAA8AEwAYABwAADcXNxc3JzcnBycHFychNSEVITUhFzUjFTMVNSMVvA0eHg8gIA8eHg0exwEG/voBBv76lpaWlkANHh4NHh4PICAPHoMTSxNCCRI5ExMAAAAEAAAAAAEWARoAFgAiACwANgAANyM1MxUzNScjNSM0JiIGFSMVIwcVFzM1PgIeARQOAS4CFwc1IxUnBxczNyczFwcnFSM1ByeDOJYTChwSFiAVFBsKCkEBCQsKBwUKCwgFhhQTFA4lDSR8DSUOFBMUDSaoJS8JEw8WFg8TCbwJ5QUJAgQKCgoFAQYKrBRkZBQNJCRbJA0UZGQUDQAEAAAAAAEHAQcACwAZACAAJAAANycHJwcXBxc3FzcvATczFxUHIxUHIyc1NzsCFxUzNSMXIxUzog4aGw0bGw0bGg4bKRODExMmEoQSEiYTSxImg0uEhJQOGxsOGhsNGxsNG3oTE4MTJhIShBISS4M4hAAAAAEAAAAAAOgA6AALAAA3FzcnNycHJwcXBxeWRA5FRQ5ERA5FRQ6JRQ5ERA5FRQ5ERA4AAAACAAAAAAEaAPYALwA5AAA3Mx4BFAYjNTI2NCYnIycuAgYPAScmJyIHDgEeATsBFSMiJicuAT4BNzYXPgEeAQcXNTMVNxcHIyfgARchIRcPFRUPEQICFx8bBgYQBQUUDQoGCxgOCQkOGgkMBwsbEQ4OCSYrH18YExgNKA0ovAEgLyETFh4WARAPFgUQDg4DAQEOChwaEBMLCw0jIhcDAwQUFgYfdhhmZRcNKCgAAgAAAAABGgD2ADIAPAAANzMeARQGKwE1MzI2NCYnIycuAgYPAScmJwYHDgEeATsBFSMiJicuATc+Ahc+AR4BFwcnFSM1Byc3MxfgARchIRclJQ8VFQ8RAgIXHxsGBhAFBRQNCgYLGA4vLw4aCQ8ECwcXHA4JJisfAx8ZEhgNKA0ovAEgLyETFh4WARAPFgUQDg4DAQEBDQocGhATCwsQKxIMEQUEFBYGHxZIGWZlGA4oKAAAAgAAAAABGgD2ABUALgAANzMeARQGKwEiJicuAT4BNzYXPgEeAQczMjY0JisBJy4CBg8BJyYnIgcOAR4BM+ABFyEhF4wOGgkMBwsbEQ4OCSYrH3+DEBYWEBECAhcfGwYGEAUFFA0KBgsYDrwBIC8hCwsNIyIXAwMEFBYGH3MWHxYQDxYFEA4OAwEBDgocGhAABwAAAAABGgEaAAMABwALAA8AEwAXACcAABMzFSM3MxUjFzMVIxUzFSMVMxUjBzMVIycHFTM1MxUjNSMVFzM3NSdeExMlS0smS0tLS0tLJktLXRMT4eETE+ESEgEHz7wTExITExMSExPOEl5ez3FxEhLPEgADAAAAAAEUAPQABgANABEAADcHFwcnNTczBxcHFzc1Bxc3J1gxMQ04OJEOMjIOOLgRXhHDMTINOA05DjEyDTgNYAi7CQAAAAAGAAAAAAEsARoAFQArAEEAUwBdAGUAABMVFBYXMxYXFh0BIzU0Ji8BJicmPQEzFQYWFzMWFxYdASM1NCYnNSYnJj0BMxUUFhcxFhcWHQEjNTQmLwEmJyY9AQc3MzIWFAYrAQ4BKwEiLgE9ARc1IxUUFjsBMjY3FTMWNjQmIzgHCAEKBAgTBwgBCgQITAEHCAEKBAgTBgkKBQdLBgkKBQcSBwgBCgQIcBLFFBsbFAwGKBo4FSIVvKkhFzkXIRMJDBAQDAEZCQYIBwgFCgwKCgYIBgEHBgoMCQkGCAcIBQoMCgoGCAYBBwYKDAkJBggHCAUKDAoKBggGAQcGCgwJcBMcJxsZHxQiFDk4ODgYISFQOAERFxEAAAAABAAAAAABBwEHAAMAEQAYABwAADcjFTMnNzMXFQcjFQcjJzU3OwIXFTM1IxcjFTOpXl5LE4MTEyYShBISJhNLEiaDS4SEgxKDExODEyYSEoQSEkuDOIQAAAIAAAAAARoBGgAMABQAABMiDgEUHgEyPgE0LgEHNTIeARQOAZYkPCMjPEg8IyM8JB8zHx8zARkjPEg8IyM8SDwj8+EfMz4zHgAAAAAKAAAAAAEsARoABwALABMAFwAfACMAKwAvADMAPQAAEwcVFzM3NScHNTMVDwEVFzM3NScHNTMVBzczFxUHIyc3FTM1NwcVFzM3NScHIzUzFSM1MycjFTMHFzc1JwccCQk4CgouJS8JCTgKCi4lOAk4Cgo4CRMlnwkJOQkJCiUlJSVuOjoTDSIiDQEZCTgKCjgJOCYmJQo4CQk4CjkmJi8KCjgJCS8lJYMJcQkJcQk4Jl4lExMSDCINIg0AAAMAAAAAARoBGgASAB4AJwAAPwEVByc1Iyc1NzMXFSM1IxUzHwI3NTM3NScjBxUXNyM1MxUjBxUnSxMWEBwJCeEKE84cCXYjEBwJCZYJCUtChB0JFlgTGxUHLwmWCQlUS4QJQiIGHApdCgpdChNLSwkPFQAACgAAAAABGgEHAAYACgAOABQAGAAjACcALQAxADgAAAEjFTMVMzUnMxUjJzMVIxcdATM3NQc1IxUnIw8BNScjFRc3Mzc1IxUHNSMVFzM9ASMVNxUjNTczFQEQHBMScCUlSyUlqQkJOCUmCQcoCgkQNgWDEuETCQoTExMJHAEGEhMcCRISEoQSEwkcJRMTEwMoIQpCBzZLJSU4EhwJSyUlXhMcCRIAAAAAAgAAAAABGgEHABcAIwAAEzMXFSYnNSMVMxcVPwEzBhUjByc1Iyc1FyIOAR4CPgE1NCYc9AkICuEuCigHCwIFNhAvCc4RHA0GGCIfEyEBBwqACQZolgohKAMJCjYHLwmpehMfIhgGDRwRFyEAAgAAAAABGgEHAAsAFAAAASMHFRczFRc3Mzc1ByMPATUnIzUzARD0CQkvEDZ/CRJ6BygKLuEBBwqpCS8HNgmpnwMoIQqWAAAABQAA//0BLQEaACwAMgA2AEMASgAANwYjNSMVLgInMzUjPgI3FTM1HgIXIxUzBxYXNjU0LgEiDgEUHgEzMjcmNy8BHwEGLwIfATYXMhYVFA4BLgI2FzcnBycHF6sGBhIbLhwCEhICHS0bEhsuHAISEgEJCAMjPEg8IyM8JA4NBA03JkwbBg0SJBJHDxEXIRMfIhgHDS4iDxwQDBgnARISAh0tGxMbLRwCEhICHC4bEgwCBA0OJDwjIzxIPCMDCEobTCY3BA0kEiQmCgEgGBEcDQYZISA/LQslDg8TAAQAAAAAASwBGgAsADIANgA/AAA3BiM1IxUuAiczNSM+AjcVMzUeAhcjFTMHFhc2NTQuASIOARQeATMyNyY3LwEfAQYvAh8BFBYyNjQmIgarBgYSGy4cAhISAh0tGxIbLhwCEhIBCQgDIzxIPCMjPCQODQQNNyZMGwYNEiQSLyAvISEvICcBEhICHS0bExstHAISEgIcLhsSDAIEDQ4kPCMjPEg8IwMIShtMJjcEDSQSJFUXISEvISEAAAAABAAAAAABGgEaAAMABwAjADAAADcXLwEXLwEXMw4CBzUjFS4CJzM1Iz4CNxUzNR4CFyMVBzI+ATQuASIOARQeAakmTCZUEiQSeQIcLhsSGy4cAhISAh0tGxIbLhwCEl4kPCMjPEg8IyM8qUwmTFQkEiQbLhwCEhICHS0bExstHAISEgIcLhsSeiM8SDwjIzxIPCMAAAb//wAAASwBCwAMABgATgBnAHEAewAANzIWHQEUBiImPQE0Nhc0JiIGHQEUFjI2NScWFzc2FxYXFhUUBxczHgEdARQHDgEPAQYHBgcGIicmJyYvAS4BJyY9ATQ2NzM3JjU0NzY3Ng8BFRcWFxYyNzY/ATUnBiMiJyYnBgcGIyI3Jg4BFBYyNjc2NwYXHgEyNjQuAXUGCAgMCAhWCAwICAwIMgIBAxEmIxANBQMBDg8DAgcHCwYHDA0pUikNDAcGCwcHAgMPDgEDBQ0QIyZJAQEKDCRGJAwKAQEMFCESBgQEBhIhFDoIMA8MKhMCAycHAwITKgwPMHEJBhwGCAgGHAYJDwYJCQYcBggIBrIBAgMTBQQTER4TDBAHGQ4YBQYDCQUIBQQHBRISBQcEBQgFCQMGBRgOGQcQDBMeERMEBYICUAEGBQ8PBQYBUAIGEwYICAYTYggFEygOFBQWCAgWFBQOKBMFAAAAAAMAAAAAAQcBGgAHAAwAEwAAPwEzFxUHIyc3JyMVMycHFRc1MydLE2VEE5YTqThelrwSEnkT4RNDixMTgzi78xK8E88SAAAAAAQAAAAAAQcA9AAGABsAKAA2AAA3DwEnNxc3Fz4BNTQuASMiByYjNjMyHgEUBgc2ByIuATQ+Ah4CDgEHMj4BNC4BIg4BFB4BF6cvDhwNFShJCQoSHhINDA0PFx4XJxcZFAVlEh4SEh4kHhEBEh4SFycWFicuJxYWJxeQOAEcDhUwKwkYDRIeEgUFExcnLigLDisSHiQeEQESHiQeEhIWJy4nFhYnLicWAQAAAAAEAAAAAAEaAOIAAwAHABcAGwAAJRUjNRUzFSM3IyIGHQEUFjsBMjY9ATQmBzMVIwEH4eHh4eEICwsI4QcLC0AmJs4SEiVelgsIgwgLCwiDCAtwEwABAAAAAADPAJYAAwAANzMVI15wcJYTAAAGAAAAAAEJARwADAAcACgAMAA6AEgAABM+AR4CDgIuAjYXFjMyPgE1NC4CDgIeATcXBxYOAS4CPgEXBxY2NCYOARY3BxYVFAcXPgEvASYjIg4BFBcHJj4CF0kbQTskBB02QTolBBwmGiAcLxwWJTAuJBMDGIINKAQFERQPAgwUChIFCgcIBAFUDwUJDgwDCjQLDBIeEgkNEAMmOBoBBRIEHTZBOyQEHDdBOqgSHC8cGSoeCQwgLS8qig0pCRQMAg4VEQUEIQMECwUBBwcrDgsNEg8OEy4UFwUSHiQPDhg5KwwNAAADAAAAAAD0ARoAEwAkADUAADc0LgEiDgEVFyMVFx4BMjY/ATUjJzIXHgEUBgcGIicuATQ2NzYXBw4BBwYiJy4BLwE1FjcWN/QZLDIsGQEBAQQ1SDUEAQFdFRMQExMQEyoTEBMTEBNgAQETDxIqEg8TAQEjKCgj6g0WDAwWDQKmBxEXFxEHph4FBA4KDQQFBQQNCg4EBcQDBQwEBQUEDAUDjBQBARUAAAAFAAAAAAEoAQcAJQAsADUAPwBGAAA3By4BIgYHJwcXBxUjFTMVFhcHFzceATI2Nxc3JzY3NTM1IzUnNycyFhUjNDYXDgEHLgEnNTMnBxUzNRcHFTc1BzU3JzUXFYkRBBkgGQQRDRYDExMBBBgNFQcWGBYHFQ0YBAETEwMWSwwQOBAyAhUPDxUBSyoPE44wR0dpj6WDEA8UFA8QDRYCExMBCQkYDRUKCwsKFQ0YCQoBEhMCFg0QDAwQSw8VAQEVDxyzCFZEXyAXLxBkFkZfF24QAAAAAAQAAAAAARYBBwAlACwANQA/AAA3By4BIgYHJwcXBxUjFTMVFhcHFzceATI2Nxc3JzY3NTM1IzUnNycyFhUjNDYXDgEHLgEnNTMnNxcVBzU3JxUjiREEGSAZBBENFgMTEwEEGA0VBxYYFgcVDRgEARMTAxZLDBA4EDICFQ8PFQFLEw6pbFaOE4MQDxQUDxANFgITEwEJCRgNFQoLCwoVDRgJCgESEwIWDRAMDBBLDxUBARUPHKsIcRBIFzlfRAAAAAQAAAAAASkBLAAlACwANQBAAAA3By4BIgYHJwcXBxUjFTMVFhcHFzceATI2Nxc3JzY3NTM1IzUnNycyFhUjNDYXDgEHLgEnNTM3FQc1NycVJic1N4kRBBkgGQQRDRYDExMBBBgNFQcWGBYHFQ0YBAETEwIVSwwQOBAyAhUPDxUBS7iAaqIJCg6DEA8UFA8QDRUDExMBCQkYDRUKCwsKFQ0ZCAoBEhMDFQ0QDAwQSw8VAQEVDxxgEFEWQ2d2BgN+CAAAAAAEAAAAAADjAOMADAAYABwAIAAANz4BHgIOAi4CNhceAT4CJicmDgEWNyMVMxUjFTNsESgkFwISISgkFgMSHQwcGQ8CDQsSKRgISjg4ODjUDAIRIigkFwISISgkXggCDBccGQgLCCMqOxMSEwADAAAAAADhAOIADAAQABQAADciDgEUHgEyPgE0LgEXFSM1NxUjNZYUIxQUIygjFBQjEktLS+EUIygjFBQjKCMUXhISORMTAAACAAAAAADmAOEABQALAAA3IwcXMzcHIyc3Mxe6ViwsViw6Oh4eOh3hS0tLMzMzMwABAAAAAADmAOEABQAANwcjJzcz5StWLCxWlktLSwAAAAIAAAAAAOEA4QACAAUAADczJwczJ0uWSyNGI16DbD0AAQAAAAAA4QDhAAIAADcXI5ZLluGBAAAAAgAAAAAA9AD0AAMABwAAPwEXBzU3Jwc5XV1dNDQ0ll5eXSk0NTUAAAEAAAAAAPQA9AADAAA3Fwcnll5eXvReXl4AAAADAAAAAADjAOMADAAQABQAADc+AS4CDgIeAjYnIxUzJzUzFdQMAhEiKCQXAhEiKCQnFxcXF2wRKCQXAhEiKCQXAhEWEyVLSwAFAAAAAAEcARwAFQAeAEQATABWAAATNzMfAhUPASsBNTQnMzUjFSYjPQEXByYvATcnNxcHNxcHFxUzFSMVBgcXBycOASImJwcnNyYnNSM1MzU3JzcXPgEyFgcuAQ4BFTM0BzY3NSMVHgEXNlgCsQEPAQEPAVwHYKwJCoYjAgIGHC0KNFcRDRUCExMBBBgNFQcWGBYHFQ0YBAETEwMWDREEGSAZFQYREAk4AgoBSgEVDw8BGwEBDwGxAg8CCgesWwJcAWcjAwMFHC4KMzsQDRUDExIBCgkYDRUKCwsKFQ0ZCAkBExMDFQ0QDxQUBwYDBg4JDFQKDxwcDxUBAQADAAAAAAEMAQcAAwAJAAwAABMjFTM3BxUXNzUPATVLExM+Dw+DFmkBB+HVB7wHXRAITJgAAwAAAAABDwEHAAMACQAMAAATMxUjNwcVFzc1DwE1LxwcXBYWhCFdAQfh2Qu8C14WC0KEAAMAAAAAARYBBwAJAC4AOAAAPwEXFQc1NycVIxcOAR0BFA4CKwEiLgI9ATQuAjU0PgQyHgQVFAYHIxUUFjsBMjY1Xg6pbFaOExUFBgIDBQMQAwUDAgYLBwMGCAoMDAwKCAYEBxwWAgEQAQL/CHEQSBc5X0RgBQ0HEAMFAwICAwUDEAcNCxAKBgsLCAYDAwYICwsGChAZFgECAgEAAAQAAAAAAREBGgARAB8ANwBEAAA3Jic3JwcmJyYHBg8BFzc2NzYHBg8BJzc2NzYXHgEXFgc3JwcnNycHJwcOARQWFwcXNx4BMjY/AQcGIi4CNTQ/ARcHBv8DBRkLGgcJFBQLCB1RHQkECBcDBhI6EgYHEBAHCwQGYRwMGyMcDBwLHQkIBQYZCxoHEhUVCB02CBAPDAYMEjoSBuQJBxoLGQYCBwgECR1RHQgLFA4HBhI6EgYDBgYECwcQbh0MHSMdDB0LHQgVFREIGQwZBQYJCB0aBAcLDwgRDBI6EgUAAAAABgAAAAABGgEAAAMABwALAA8AFQAYAAA3NTMVJzMVIzcVIzUdATM1JTcXFQcnNxU3cahdXV1dqKj++g5lZQ4TSnESEksTSxMTqRMTrQdDD0QIdWMxAAAAAAIAAAAAANgA9AADAAcAADczFSM3FSM1VB0dhBz0vLy8vAAAAAIAAP/9ARYBBwAaACQAADcUDgEmJwceAT4CLgEGBzUjFRczNSM+AR4BJzcXFQc1NycVI4YZJyMIEgotMiMHGi8xDxMJLBgKIyUXKA6pWUOOE0sUHwgSEgcXGQclMiwTDRQXMgoTEQ4KHqEIcRA7Fi1fRAAABQAAAAABHAD0AAQACQAOABIALQAANzUzBgc3NjcjFRcmJyMVJRUhNRcyPgEuAQYHMxUjJzUzFT4BHgEOAiYnNx4BE2ECARcJC4lpBQNhAQb++scSGgYRISAJFCUIEA0qJxYGHiolCQ8GF3ESCQk4CggScQkKE7wTE7wWIh4MDA8QCCoTEQsRJCseBxUUBg0PAAAAAAEAAAAAAQwBDQAdAAA3FA4BJicHHgI+AjU0LgEGBzUjFRczNSM+AR4B7yY6NQwaCigyMykXKkRFFhwOQSMONTcjlh4uDRscCxghDQogLxokOxcVHCJLDhwZFg8tAAAAAAMAAAAAAP4BBwADAAkADAAAEyMVMycXFQcnNR8BNf0cHFwWFoQhXQEH4dkLvAteFgtChAADAAAAAAEQAQcACAASABcAADcUBi4BNDYyFjMvASMHFRczPwEHIzUzF7wWIBUVIBZUUBFfGBhfEVBhX19PlhAWARUgFhZZCBiyFwhZSrJZAAIAAAAAARABBwAJAA4AACUvASMHFRczPwEHIzUzFwEQUBFfGBhfEVBhX19PplkIGLIXCFlKslkAAgAAAAAA/AEAAAUACAAAPwEXFQcnNxU3UBaWlhYcbvQLZBdkDK2TSgAAAAACAAAAAAEMAQwAFwAgAAA3NTMVPgEzMh4BHwEjNS4CIgYHMxUjJxciJjQ2MhYUBiEcEDAbHTQgAgEdAhgnLikLNU4SdRAVFSAWFsBLLxMWGy4cBQQUIhQWExwSkBUgFhYgFQAAAgAAAAAA6gEaAAoAEwAANzM3Jwc1IxUnBx8BFAYiJjQ2MhaWCkkUMRwxFEkvFh8WFh8WeUkUMXR0MRRJQRAVFSAWFgACAAAAAADqARoACgATAAATIwcXNxUzNRc3JxcUBiImNDYyFpYKSRQxHDEUSRsWHxYWHxYBGUkUMXR0MRRJ4RAVFSAWFgAAAAACAAAAAAEMAQwAFwAhAAAlNSMVLgEjIg4BDwEzNT4CMhYXIxUzNwcyNjQuAQYUFjMBCxwQMBsdNCACAR0CGCcuKQs1ThJ1EBYWIBUVEMBLLxMWGy4cBQQUIhQWExwSkBUgFQEWIBYAAAIAAAAAAQcBBwAHAAsAABMXFQcjJzU3FyMVM/QTE7wSEreysgEHE7wSErwTGLIAAAUAAAAAASsBLAABAA0AQQBJAFkAADc1Fyc3FzcXBxcHJwcnNxUzNxcHFRYVBzMVIzEGDwEXBycHDgEiJi8BByc3JyYnKwE1MzU0NzUnNxczNTQ+ATIeAQcVMzU0JiIGFzUjBwYVFB4CMj4CNTQrWyYNKCcNJiYNKCcNdBAkDSIMASwuBg8BKw0pAQ4kJiQOASkMKgEPBQEuLAsjDSQSEB0iHRFrWRolGnqbAQkOGR8iHxkPiwEJJgwoKA0mJg0pKA2QDCQNIgEeHw4SHxkBKwwpAg8SEhACKAwqARkeEg4gHAEjDSQMER0RER0RDAwTGhoyAQEaHBktIRERIS0ZHQACAAAAAAEaAQcAFAAeAAA3NTI2NzY1Iyc1NzMXFSc1IxUzBxczNycHNSMVJwcXSxERAgJVCQn0CRLhawkuKC8NHxMeDi8TEwUFAwUKuwoKrRORqQkvLw0feXkfDS8AAAADAAAAAAEaAOEADQARABUAACUHNScjBxUXMzc1Fzc1ByM1MxcnNTcBCz0JqQkJqQk9Dl2Wlks5OdMjKAkJhAkJJiMJa21wXR8KIgAABQAAAAABGgEHAA0AFwAgACkAMgAANzMXFQcjJzU3Mz8BMxcHMzUjLwEjDwEjFyIGFBY+ATQmFzIWFAYuATQ2NyIGFBYyNjQmyUcJCfQJCUcQBzgHk+FCBxAwEAdBHAQGBggFBVAQFhYgFRUQFyEhLiEh9AqoCgqoChADA7mWAxAQAxMFCAYBBQgFEhYgFgEVIBYSIS4hIS4hAAAAAwAAAAAA9AEaAAcACwAPAAATMxcVByMnNRczNSMXMxUjVJYKCpYJE4ODLyUlARkJ9AkJ9OrhvBMAAAAAAwAAAAABBwEaAAcACwAXAAATMxcVByMnNRczNSMXIxUjFTMVMzUzNSMc4QoK4QkTzs5wEzg4Ezg4ARkJ4QkJ4djPJjgTODgTAAAAAAMAAAAAARoBGgAHAAsAEQAAEzMXFQcjJzUXMzUjFzMVByM1HPQJCfQJE+HhliVwJgEZCfQJCfTq4SYlcSYAAAADAAAAAAEaARoABwALABQAABMzFxUHIyc1FxUzNQcyNjQmIgYUFhz0CQn0CRPhcRchIS4hIQEZCfQJCfQJ4eGpIS4hIS4hAAAFAAAAAAEaARoACQAOABoAHgAlAAATHwEVByMnNTczBzM1JyMXIxUzFTM1MzUjNSMHMxUjNx8BFQcvAbY4BhOpExNxcak4cUslJRMmJhMlXl6LKwUSATgBFDgOqBMT4RLzqDlLEyYmEyWDE84rDbsTzjgAAAMAAAAAAQcBGgADAAsADwAANxUjNSczFxUHIyc1FzM1I7xeQuEKCuEJE87OqRMTcAnhCQnh2M8AAwAAAAABGgEaAAcACwASAAATMxcVByMnNRczNSMXMxU3JxUjHPQJCfQJE+HhJTheXjgBGQn0CQn06uGEOEtLOAAAAAAEAAAAAAEHARoACQAOABoAHgAAEx8BFQcjJzU3MwczNScjFyMVMxUzNTM1IzUjBzMVI8k4BRKpExNwcKk5cEslJRMlJRMlXV0BFDgOqBMT4RLzqDlLEyYmEyWDEwAAAAAGAAAAAAEaAPQABwALAA8AFwAbAB8AAD8BMxcVByMnNzM1IzUzNSM3MxcVByMnNRczNSM1MzUjJgleCQleCRJLS0tLel4JCV4JE0tLS0vqCgqoCgoJcRITEwqoCgqonyYlSwAAAQAAAAAA9wEKABkAABMVFzM1Izc+AR4CBg8BFzc+AS4CBg8BNUIJQjASDSIjGQoKDWENYhAMDCEsLBAOAQdCCRISDQkJGSMjDGINYREsLCELCxENJwAAAAMAAAAAARoBGgAJAAwAEAAAEyMPAhc/AjUHNxc3JzcX+BubAywaTQWa7B0bECGWIQEZmgVNGiwDmxvLOBsKIZYhAAAAAwAAAAABGgEaAA0AEQAYAAAlJyM1JyMHFRczFRczNyc1MxUXIzUzNzUzARkJjQleCQkvCbwJ80uWqRwJhLIKVAkJlwhVCQlncXFdSwgdAAADAAAAAAEHAKkACAARABoAADcUBiImNDYyFhcUBiImNDYyFhcUBiImNDYyFksLEAoKEAteCxALCxALXgsQCwsQC5YICwsQCwsICAsLEAsLCAgLCxALCwAAAgAAAAABGgEaAAsAHAAANzMVIxUjNSM1MzUzBzUzFTM1IzUzNSM1MxcVByNLODgTODgTOBPhcXFxegkJ9OETODgTOP1nXYMTJRMKzgkAAAADAAAAAADiAOEACwAYACEAADcnByc3JzcXNxcHFzcUDgEiLgE0PgEyHgEHNCYiBhQWMjasFhYRFhYRFhYRFhYkFCMoIxQUIygjFBMhLiEhLiFvFhYRFhYRFhYRFhYWFCMUFCMoIxQUIxQXISEuISEAAwAAAAABFgEbABUAKAA0AAATHgEXFhUUBw4BBwYnLgM3Njc+ARc2NzYnNCYnJicmBgcOARYXHgEnNxcHFwcnByc3JzehFikQJh4PJhYwJxQeEAMHDyYSKyEmGRkCEQ8dJhMmDyAXISIQJgQtDS0tDS0tDS0tDQEZARQQKTcrJxIXBAkWCyIqLhUuGQwM9AkfIiUXKhAdAwEJCxhOSBMKBnwvDS8vDS8vDS8vDQAAAAAEAAAAAAEdARoALwBDAFAAVAAAEyMHJwcXBxUXBxc3FzMmJyMvAQcnNy8BNT8BJzcXPwEzHwE3FwcfARUWFzUnNycPATIWFwYHLgEOAhYXBgcuAT4BHwE+AR4CDgIuAjYXFTM1sDQKJiYaLS0aJiYKJwoIBgkOJg8ZBiwsBhkPJg4JFgkOJg8ZBiwLCC0aJiYkDBMECQgBCw4KAQgHBgMNDQQVDhgOIyEXBQ0cIiAWBgwIXgEZLRomJgo0CiYmGi0ICywGGQ8mDgkWCQ4mDxkGLCwGGQ8mDgkGCAonCiYmGjAOCwMGBwgBCg4LAQgJBRcbEgE0DAYMHCMhFgUMGyIhHhMTAAUAAAAAAQcBBwADAAcAFQAcACAAADcjFTMHNSMVJzczFxUHIxUHIyc1NzsCFxUzNSMXIxUzqV5eJhITE4MTEyYShBISJhNLEiaDS4SEgxImXl6pExODEyYSEoQSEkuDOIQAAAACAAAAAAEaAOMACAAMAAA3JzcXByc3IzUnMxUj9SwNQ0MNLL0lExOpLQ1EQw0tEziDAAAABgAAAAABLAEsAAcACwAXABsAHwAjAAATNzMXFQcjJzcVMzUFNTczFxUzFxUHIyc3NSMVFyMVOwI1I6kTXRMTXRMTXf7nE14SXhMTzhNxXl5eXhJeXgEZExNdExNdXV2ocBMTXhJeExNwXl4SXl4AAAQAAAAAARQBFAAgACYANwA7AAATBhQfAQ4BBwYeATY3PgE3FwYUFjI3FxYyNjQvATEnJiIfAQYiJjQ3IgcXNjMyFhceAT4BJy4CBxcuARwDAjMSGgUBBAcHAQUXERYOHSkPSgMIBQKAaAMIYiwJGhIfExEPCwolOQkBBwcEAQcjMxowARsBEAIHAzMNJRYEBwIEBBQgCxcOKR4PSgMFBwOAaAN0LAkTGVEFEAMuIwQEAgcEGysYLC8TGwAAAwAAAAABEQDoAAgAEQAoAAA3MhYUBiImNDYXIgYUFjI2NCYnMh4BFxYOASYnLgEiBgcOAS4BNz4ClhUdHSodHRUNEhIaEhINHDMjBwEEBwcBCTlKOQkBBwcEAQcjM7sdKR4eKR0SExoSEhoTPhgrGwQHAgQEIy0tIwQEAgcEGysYAAAAA///AAABGgEaABUAOwBEAAATBxU3FzUzFSMHNSMXBzMVFzczNzUnBz4BNC4BIg4BFBYXDgEHBg8BMzU0PgI7ATIeAh0BMycmJy4BJyImNDYyFhQGVAkJCqkhGCYBARQQIiIJCZgOEBIeIx8REA0NFgcEAQETChIYDQENGBIKEwEBBQYWMhMbGycbGwEZCR0BARReGBgKCRwHIwlxCbEJHSMeEhIeIx0JBhYQCwwSCg0XEwoKExcNChMLCxAWDxsnGxsnGwAAAAAIAAAAAAEHARoACQAOABgAHQAnADEAOwBAAAATHwEVByMnNTczBxUzNScHFDMyNjU0IyIGFzQyFCIXMzUjNQcVNxUjByM1MzUHNTcVMzcUMzI2NTQjIgYXNDIUIsY+AwrOCQmRiLw4aBkNDhkNDhAUFDwtDx8QDxotDxAgDhQaDQ0ZDQ4QFBQBFz4HtgkJ9AkS4ag5TCUUEiUUEhoyCww9Bg0DLWoMLQMNBj0YJBMTJRQTGjIAAAAABQAAAAABBwEaAAkADAATABoAIQAAEx8BFQcjJzU3MwczJyMVMzUjJzUHNycHFRc/AhcVByc3xj4DCs4JCZEEODiEvEIJSiINKSkNJA0pKQ0iARc+B7YJCfQJSznhlglCjiMNKQ0pDUQOKQ0pDSIAAAcAAAAAARoBGgARABQAHAAlACkALQA2AAATMxUXMxUzNS8CIwcVFzM1IzcXIxcjBxUXMzc1BxUnIwcnIwc1FzcXKwE1Nxc3MjY0JiIGFBYmcAlCEwM+BpEJCUI4gzg4Z5YJCZYJEh8NFigNDU8PHR5dEy8lBAYGCAUFAQdCCRMpBz4CCfQJE+E5OAlxCQlxCkseFigMJ1APHBsTLkEGBwYGBwYACQAAAAABBwEaAA4AEQAZAB4AKAAuADcAPwBJAAAlLwEjBxUzNTMVFzMVMzUHNRcPARUXMzc1JwcVIzUzByMVIzUzMhUUBicjFTMyNBc2JzQHIxUzMic1MzYWFAYnNyMVIzUzFSMVMwEEPgaRCRJxCUITSzjFCQnOCgoJvLyWBg0UFQ0KBQUKQgkBHhQUDRQGBwsKCE0SDSEUEtk+AglnXkIJEykEOTk4CXEJCXEJXhJdOBM5EwgLGxERJgkMHAE4CyMBCw8LAQsWOQsOAAAAAAQAAAAAARoBBwADACEAKwAyAAA3MzUjNzU3Mx8BMxcVByMnNSMnNTczHwEzFxUjNSMvASMVFycjFTM/ATM1IwcjFTM1IwcmEhISClMICGsJCc4KHAkJUwgIawoTZwgIRHEIRDsICHFoE0G8awheSxMJCQQOCpYJCS8JqQoFDgouJQUOOA8POQ4FEzhLXQ4AAAQAAAAAARoBBwAKABIAHAAsAAA3MxcVByMnNTczHwE1NyMPASMVNzM3Iy8BIxUzNxcnNxcVByc3Iw4BFyM0NjeRfwkJ9AkJXgeFAXcQBlRmegF6BxBQUBAxGQ4pKw0bGg8VARMeF/QKuwkJzgoDzB1nEANxlhMDEDkQSRoNKg0qDhkBFQ4WIAEAAAAABQAAAAABBwEaABEAFAAcACAAKgAAEx8BFQcjNTM1Iyc1IxUjNTczBzMnByMHFRczNzUHIzUzBxUjNQcnNyM1M8Y+AwpBOEIJcRIJkQQ4OB2DCQmDChNwcBMSMg0xITgBFz4HtgkTlglCS1QJSzleCoMJCYN5cBw4ITENMhIAAAALAAAAAAEHARoACgAOACMAJwArAC8AMwA3ADsAPwBJAAATMxcVDwEVByMnNRcjFTMVMzUvATUjFQcjFSM1Iyc1IxUzNTM1FTM1JxUjNTczFSM1FSM1NzMVIzUVIzU7ATUjFzc1IxUfARUzNS/OCgMQCrsJSxMTSxADJgkJEwoJEyYTEhITExISExMSEhMTEhJzEDgPAxMBGQleBhF/CQn0CSa7dhAHVC8KEhIKL+ESExMTExMTExMlEhITEyYTExMWEFFRDwd6eQAAAAADAAAAAAEHARoACQAPABIAACUvASMHFRczNzUHIzUzFTMnNRcBATgNcRMTqRMTqV5LODjcOAUS4RMTqKjhSxI5OQAAAAQAAAAAARMBLAANABAAFwAdAAATIwcVIwcVFzM3NTM3NScXIwcjNTMVFzM3IzUzFTPbcRI5EhKXEjsQOB4eJpY5EktLll44ASwTOBO8EhI5EpceHuG7cRITuzgAAQAAAAABGgEHAAcAAAEVBxUjNSc1ARldS14BByBZaGhZIAAAAgAAAAABGgEHAAcADwAAARUHFSM1JzUXFTM1NzUjFQEZXUtecCZe4QEHIFloaFkgcV5eWQUFAAACAAAAAAD7ARoALQBTAAA3JzYmJyYnBgcGFxYXBy4CNzU2NzY3Nj8BNjc2NzYnNx4BBzY/ARUWFxYHDgEnFwYWFx4BBz4BNzYmJw4BLwE2JicGBwYPAQYHBhUxBhYXJjc2N6sKCQMLEgQOAgMGAwoLFB8RAQEDBAkKEAgJBwoDBAYNHxsJBgQRCgYLCwklOxABCQkNCgQMEgUFBAgGEwoGDAkUAhEJDwIXCQQBEA8KBQYcEw4LHAkPFhMRDg0IDg4EGCUUBwkJDQ0PDggKCw8MEQwMFkclBwgCARATJRsUGn8HDRkJCRwPBBELESMQCQkCDRs7FhYaDQ8CFBcMChIfChcVHB8AAAACAAAAAAELARoABgANAAABJwcnBxczNycHJwcXMwEKDXBxDXcNdw1wcQ13DQEMDXBwDXcGDnFxDncAAAACAAAAAAEOARoABgANAAA3FzcXNycjBxc3FzcnIxMNcHENdg14DXBxDXYNoQ1xcQ146A1wcA14AAIAAAAAAO4BAAAGAA0AADcHJwcXMzcHNxc3JyMH4EpLDFELUaNNTAxTC1L/SkoLUVHOTEwLUlIABAAA//8BLgEHABQAHgArADIAADczFxUmJzUjDwEjFTMWFyMnNTczHwEzNyMvASMVMzcXPgEeAg4CLgI2FzcnBycHF5F/CQgLdhAGVWACBG8JCV4HC3oBegcQUFAQMREoJBcCEiEoJBYDEjgtDycYDCD0ClQHBBsQA3EJCQnOCgM2EwMQORBCDAIRIigkFwISISgkUjsMNBMOGgAABQAAAAABGgEHABIAHAAgACQAKAAANzMXFSM1Iw8BIxUzFSMnNTczHwEzNyMvASMVMzcXMxUjNzMVIz8BFweRfwkSdxAHVF5nCQleBwt6AXoHEFBQEBATEyYSEiUSJhH0CkETEANxEgnOCgM2EwMQORA1cHBwaQdqBgAAAAMAAAAAASUBBwANABkAIAAANzM/AScjNScjLwEjBxU3Mx8BMxUjDwEjDwEXIzczPwEzHM4JMgkVCmwRBl4JE1AQB2dVBhBHCRO9uh9FBhBtJgaEDC4KEAMKzsUQAyUDEAc5MV4DEAAAAwAAAAABGgEHAAoAEgAcAAAlIy8BIwcVFzM3NQcVIzUzPwEzJyMPASM1Mx8BMwEQfxAHXgkJ9AkT4VUGEHcBegYQUFAQB3r0EAMKzgkJu5UdcQMQEgMQORADAAAFAAAAAAEsAPQAEwAjAEAASQBTAAA3MzIeAR0BFA4BKwEiLgE9ATQ+ARciBh0BFBY7ATI2PQE0JiMHIgYdASMiBhQWOwEVFBYyNj0BMzI2NCYrATU0JhcUBiImNDYeAQcUBiImPgEyFhVLlhQjFBQjFJYUIxQUIxQXISEXlhchIRd6BAUcBAYGBBwFCAYcBAUFBBwGiQsQCwsQCxMLEAsBChAL9BQjFDgVIhQUIhQ5FCMUEyEXOBghIRg4FyElBgQcBQgGHAQFBQQcBggFHAQGEwgLCxALAQpACAsLDwsLCAAAAAAEAAAAAAEaARoAHwA3AEAASQAANycjDwEnBxcPARUfAQcXNx8BMz8BFzcnPwE1LwE3JwcnFzcXBxcVBxcHJwcjJwcnNyc1Nyc3FzcXFAYiJjQ2MhYHMjY0JiIGFBarChYKDSURGAMtLQUYDyUPCBYKDyUPGAUsLQYYDyUICicmGy0tGyYnCjQKJyUaLS0ZJicIQBceFhYeFyYICwsQCwvaLS0GGA8lDQoWCg8lDxgFKy0FGA8lDwgWCg8lDxhDLRkmJwg0CiclGi0tGSYnCDQKJyYbLYMPFhYeFxciCxALCxALAAAFAAAAAAEHARoAIgAmADkATABQAAA3IzY1JicmLwEmIgYHBgcmJyYjIgcGBwYPARQXIwcVFzM3NQcjNTM1IzUmNTc2NzY3NjIXFhcWFxYVMzQ3Njc2NzYyFhcWHwEUBxUHIxcjNTP9HgIEAwYIBQgJCAMRDQ0RDAUJCAcGAwQBAh4JCeEKhF1dOAIBAgMCBwIPBAkGBAECEwICBAUKAw8IBQEBAgICNl5eXuEIDwsFCQMCAwECBRQUBQMFAwkDCwMOCAmpCQmpoJYTBAUKAwUBBAQCAgQIBQMFBQUFAwUIBAIEBgEDBQoFAgKplgAAAAAFAAAAAAEaARoAEwAWACYAMAA0AAA3MxUXIyc1NzMfAhUmJzUjJzUjFycVFxUzFxUHIyc1NzM1NDYyFgcGHQEzNTQuAQYHFTM1OEsCVgkJkQY+AwgLQglxvDhBEwkJcQkJExYfFjMFJQYKDCVeJhIBCfQJAj4HMAsHCAlCOTk5SxIKSwkJSwoSEBYWAgYIEhIGCQUCNzg4AAIAAAAAAOEBLAAPABgAABMzFR4BFAYHFSM1LgE0NjcXMjY0JiIGFBaNEhwmJhwSHCYmHAkUHR0oHR0BLEwDKjoqA0xMAyo6KgN7HSgdHSgdAAAAAAQAAP/+ARwBGgAfACoASQBVAAA3JzcXFQcnNyMGJj0BLgI+ATMyFxYXFhUUBgcVFBYzJxY+Ai4BDgIWFxYXHgEHDgEuAjY3Njc1NCYrARcHJzU3FwczMhYPAT4CLgIOAh4BixgMKCgNGCMTHA4UBQsXDwkJEggDFRAQDDUIFA4CChAQDQMHyA4KDAMJCBocFAYLDAgJEQsjGA4oKA4YIxMcAQYHDAcBCRARDAMHEDgYDSgNKA4YARwTaAMUHBoQAwgSCQkRGgNnDBGbBQIOFA8HAw0QEHsDCgwhDgwLBhQcGggFAmgMEBgNKA0oDRgbFLIBCA4ODgYDDBEQCgAAAAAEAAAAAAEEAQcAAwANABEAFQAAEyMVMwcnNxc1MxU3FwcnMxUjFyMVM6kTExBeDU4TTQ5eEBMTExMTAQcTzl0OThsbTg5dqBImEwAABAAAAAABCAEtADQAPwBKAFcAADcuAQcGBwYHLgEnMjc+ATU0JyYnJiMiDgEeARcVBgcOAR4CPgE1Ni4BJzUWFxYXHgE+ATQHHgEOAi4BPgInIi4BPgIeAQ4BFw4BLgI+Ah4CBvkMIQ4MBgEBHioDBAQNEAQHEgkKDhcLBRQOCQgLCwUUHBsPAQkSCw8WExQEHSQYqAgKAg4UDwcDDRADCA4HAw0QEQoED40FDg4LBgQMEQ4JAwSbDAMJCA0EBAMqHgIGFw4KCRIHBBAaHBQDXwIFCBsbFAYLFw8JFA8CLRULCgESFQMbJTIEDxQOAgoQEA0DggoPEQwDBxEUDXsFBAMJDhEMAwYLDQ4AAAYAAP/+ARoBGgAhAC0AOQBKAFUAYQAANwYPARUWFx4BFRQOAiMiLgE+ATc1LgI+ATMyHgIVFAcuASIOAR4CPgInFjI+AS4CDgIWFxYXFhUUDgEuAjY3Njc1Mxc+AS4BDgIeATYnBxc3FzcnNycHJwdpCA0IBAQNEAcNEgkPFwsFFA4OFAULFw8JEg0HFgQNEA4HAw0QEAkBLAcQDQgBCRARDAMHyA4KDhAaHBQGCwwHChILBwIKEBEMAwYQFB0fDR8gDR8fDSAfDdAMBgJeAQIFGA4KEQ4HEBocFANfAxQcGhAHDRIJD58HCAoPEQwDBg4PngUIDhANBwQMEBB7AwoOEw4YCwYUHBoIBQJDhQcUEAYDDBEPCwLYHw4gIA4fIA0fHw0AAAAABQAAAAABLAEaAB0AKgA2AEoAVgAANwYPARUWFxYVFAcOASIuAT4BNzUuAj4BMzYWBxQHLgEjIgYXHgI+AicWMj4BLgIOAhYXIzU0JisBFwcnNTcXBzMyFhcWBxUjNSM1MzUzFTMVI2kIDQgTCggDBhgdFwsFFA4OFAULFw8THQEWBA0IDREDAQ0QEAkBLAcQDQgBCRARDAMHyBIRCyMYDigoDhgjDhgFBAETODgTODjQDAYCXgQQDA4KCQ0QEBocFANfAxQcGhABHBQPnwcIFQ0IDAMGDg+eBQgOEA0HBAwQEC8cDBAYDSgNKA0YEA0JCcU4Ezg4EwAHAAAAAAEbARoAIAAsADgAQQBKAFMAXAAANz4BNTQuAiMiDgEeARcVDgIeATMyPgI1NCYnJic1Fx4BDgIuAj4BMiciLgE+Ah4CDgEXFAYiJjQ2MhYHMjY0JiIGFBYnFBYyNjQmIgY1FBYyNjQmIgZUDRAHDRIJDxcLBRQODhQFCxcPCRINBxANBAQFBggBCRAQDQMHDhAICA4HAwwREAkBCA3QGycbGycbLwwRERcREQcLDwsLDwsLDwsLDwu+BhcPCRINBxAaHBQDXwMUHBoQBw4RCg4YBQIBXnUEDg8OBgMMEQ8KgwoQEAwEBw0QDgifFBsbJxwcLxAYEBAYEIgICwsPCwtIBwsLDwsLAAAAAAT//wAAAQcBGgAPABsAHwA1AAA3FRczNzUvAiMVMxcVIzU3IzUjFSMVMxUzNTMHMxUjNwcnNyMiBhQWOwEVIyImNDY7ASc3FzgTqRIFOA4lJTmpgyUTJSUTJV1dXRMoDRg4DBAQDAkJFBsbFDgYDShxSxMTqA44BRI5qEtLJSUTJiZLE5koDRgQGBATGyccGA0oAAAEAAAAAAEaARoAEQAWACIALgAAJS8BIwcVFzMmJyM1MxcVFhc1ByMVMzQnMzUzFTMVIxUjNSMXIg4BHgI+ATU0JgEBOA5wExNkCQZVcDkKCG4nJSUlEyUlEyVwERwNBhgiHxMh3DgFEuETCAriOToDBUJwEwpnJSUTJiYmEx8iGAYNHBEXIQAABQAA//4BGgEaAB0AKgA2AFcAYwAANwYPARUWFxYVFAcOASIuAT4BNzUuAj4BMzYWBxQHLgEjIgYXHgI+AicWMj4BLgIOAhYXFhcWFRQOAS4CNjc2NzU0JisBFwcnNTcXBzMyFhcWBxc+AS4BDgIeAjZpCA0IEwoIAwYYHRcLBRQODhQFCxcPEx0BFgQNCA0RAwENEBAJASwHEA0IAQkQEQwDB8gOCg4QGhwUBgsMCAkRCyMYDigoDhgjDhgFBAELBwIKEBEMAwYLDQ7QDAYCXgQQDA4KCQ0QEBocFANfAxQcGhABHBQPnwcIFQ0IDAMGDg+eBQgOEA0HBAwQEHsDCg4TDhgLBhQcGggFAmgMEBgNKA0oDRgQDQkJqgcUEAYDDBEOCQMEAAAFAAAAAAEHAQ4ACQAXACEAJQApAAA3FTM1FzcnIwcXDwEVFzM3NScjDgEiJicXMxUjNTMeATI2JzMVIxUzFSODEzINQg1CDjYJCeEKCkIEGiEaA2kszisIICcgPRMTExPwIiIyDkFBDjsJXgkJXgkQFRUQEktLERUVXBMTEwAAAAMAAAAAAQcBDgAJABcAIQAANxUzNRc3JyMHFw8BFRczNzUnIw4BIiYnFzMVIzUzHgEyNoMTMg1CDUIONgkJ4QoKQgQaIRoDaSzOKwggJyDwbW0yDkFBDjsJXgkJXgkQFRUQEktLERUVAAAAAAMAAAAAAQcBGgAJABcAIQAANzUzFTcXByMnNw8BFRczNzUnIw4BIiYnFzMVIzUzHgEyNoMTMg1CDUIONgkJ4QoKQgQaIRoDaSzOKwggJyCtbGwxDUJCDVsJXgkJXgkQFRUQEktLERUVAAAAAAUAAAAAARoBGgAMABgAHwAjACcAADczFyMnNTczFxUnNSMXBzM3JyM3JyMPARc3MwczBzcjJyM1MwcjNTM5MA1GCgrhCRPOaBsqaQ0fDw82ESsRKzYjQmwfMwo2PxolLnETCakJCVohMKlBbCAbHQteGnA4bUg4EzkTAAABAAAAAAEYASEAbAAAJRYVFAcGBxYdARQGIiY9ATYmJzc2NzY3NjU0LwE2JwYPASYHJyYjBhcHDgEVFBcWFxYfAQYXFRYGIiY9AQYnJicmLwEuAScuAT4BFxYXFh8BFhcWNzUmNyYnJjU0NyY/ATYXFhc2FzY3Nh8BFgEHERcSIAYFBwUBBQUFFg0RCQsQAgcGERMHKSkHGgsGBwMICQsIEg0WBQsBAQYHBhENCwkFCAEFBwMCAwIGAwcHAwcBCggNFQIHIBEZEQUJBgQKEBUpKhQQCwQGCeoUGy0YEQUKES4EBQUELggNBg4DBgcPEh0WEQoQEgQNAgsLAhATEAkIFQodEQ8IBgMPCg8vBAYGBBoEBAMIBAsBBgYBAQYGBAIBBQMIAg0EBwUEDg0GERgrHBQaFQQCAQMNCgoNBAICBRkAAAAB//8AAAEtASwAVAAAEyIOARUUHgEXMjY9AQYnJicmLwEuAS8BJjc2MzEeAR8BFhcWNzY3JicmNTQ3MSY3MzIXFhc2MzIXNjc2FzEWDwEWFRQHBgceAR0BFBYzPgI1NC4BlilFKBouHgUFDgsJBwQDAwIIAwMJBAIEBgsDAwkOCgoBCB4QFhAHCQQGCAoNDxcRFBINBwMIBQEQFg8fBAYFBR4vGSlFASwoRSkgOioKBAQZAwMCBQQFBAgKAwEGAwEBBwQEDwEBBAwIBA0TJxcRExQDBAkFBQwDAgETFAERFycSDQQDDgopBAQKKzofKUUoAAAAAwAAAAABBwEHAAsAEwAXAAA3MzUzNSM1IxUjFTMnMxcVByMnNRczNSNxEnFxEjk5Qs4KCs4JEry8OHESOTkSXgrOCQnOxbwAAgAAAAABLQEsAAwAagAAEyIOARQeATI+ATQuAQMjIiY9ATQmJz4CNzY1NCYnPgE0JicjIgYPAiYHLwEuASsBDgEUFhcOARUUFx4CFw4BBw4BJi8CLgEjBwYUHwEWHwEeATczNxUUBisBLgI+AjIeAg4BB5YpRSgoRVJFKChFAQICBAQFDRcQAwQHBgEBAgICBQgECQcgIAcJBAkEAwECAQEGBwQDEBYNAwQBBw8LBAQEAwYDBQECCAICBgMRCgYHBAMBHSwTCiQ3PjckChMsHQEsKEVSRSgoRVJFKP7wAwMjBw0EAQkQCw0OCRIHBAcJCQUCAgUECQkEBQICBQkJBwQHEgkODQsQCQEDCQUDAQgHBAUBAwEBAgIGAgILCQoBARYDAwksOj4yHBwyPjosCQAAAAAKAAAAAAEaARoADAASAB4AKgAxADcAQQBIAE0AUwAAEzIeARQOASIuATQ+ARcuAScWHwE2NSYnIxYVFAczNic1NjQnIwYVFBczNicmJysBBgcjNjcOAQ8BBhQXMyY1NDcjFyMeARcmJxc2NyMWNwYHPgE3nyE4ISE4QjghITh9CR4SDAYyAQEDLAEELwJBAQJIAQRDAgMHEAoJEQYUBQ0THQkIBAQvBAEsNCwKJhcSCS8SCjcJQgkSFyULARkhOEI4ICA4QjghSxIaBhcbOAUEDw0KCBMTCQoBCRIJCQkTEwpBHhoaHhsYBxoSEg4dDhMTCApKFhwFGR0xFhsbHB4ZBRwWAAMAAAAAASwBGgAWACcAKgAAPwE1JwcXIyIGFBY7ATUjIi4BNjsBBxc3IyczHwIVByMnNRcVMzUjNxUzcSYoDRg4FBsbFAkJDBABEQw4GA1fMhNYDTkFE6gTE6hLEzi9Jw0oDRgcJxsTEBgQGA1LEgU4DqgTE4wQfJZLOQACAAAAAAEaALwAAwAHAAAlIRUhFSEVIQEZ/voBBv76AQa8EyYSAAAABwAAAAABGgEPAAkAEQAVAB0AIQApAC0AADcXByc1NxcHMxUHNTczFxUHIzc1IxU3NTczFxUHIzc1IxU3FRczNzUnIxcVIzUoEAsgIAsP8M4JJgkJJh0TOAkmCQkmHRM4CSYJCSYdE+ERCx8MHwwPE8arCAirCBGZmR2FCAiFCRF1dX1gCAhgCBBQUAACAAAAAAEgASwABgATAAAlFSMnNTMVNwcjJwcnNzMXNzMXBwEZ/QkTzmENH0QOSw4fYA0mDTgSCf30uGEfRA1LH2EmDQAAAAAGAAAAAAEaASwABgAKAA4AEgAWABoAACUVIyc1MxU3MxUjNzMVIwczFSMHMxUjNzMVIwEZ/QkTOCUlgyYmSyYmOCUlgyYmOBIJ/fTPJjglJiUmJTglAAAABwAAAAABGgEsAAYADgASABoAHgAmACoAADczNSM1IxU3NTczFxUHIzc1IxU3FRczNzUnIxcVIzUHNTczFxUHIzc1IxUc/fMTJQolCgolHBODCiUKCiUcE14KJQoKJRwTJhL0/SWWCgqWCRODg7K8CQm8CRKpqbNxCQlxCRNeXgAGAAAAAADPAPQAAwAHAAsADwATABcAADczFSMVMxUjFTMVIzczFSMVMxUjFTMVI14lJSUlJSVLJSUlJSUl9CYlJiUmvCYlJiUmAAAACwAAAAABBwEaAAkAEQAVAB0AIQApAC0ANQA5AD0AQQAAEzMVIxUzFSMnNRcjJzU3MxcVJzM1IxcjJzU3MxcVJzM1IwcjJzU3MxcVJzM1IxcjJzU3MxcVJzM1KwIVMzUjFTMcJhwcJgl6JgkJJgklEhKMOAkJOAo5JiZBJgkJJgklEhKMOAkJOAo5JiYSJiYmJgEZEuETCfRnCSYJCSYKEiUJOAoKOAollgkmCQkmChM5CjgJCTgJJhNwEgABAAAAAAEaAQcAHAAAJS4BJy4BIgYPAScuASIGBw4CFB4BHwE3PgI0ARcCCQcKGhsZCg0NChkbGgoHCQQECQdvbwcJBNIJEQYKCgoJDQ0JCgoKBxASEhIQB25uBxASEgACAAAAAAEaAQcAHQA9AAAlLgEnLgEiBg8BJy4BIgYHBgcGFB4BHwE3Njc2NTQHBg8BJy4CND4BNzY3NhcWHwE3Njc2FxYXFhcWFRQHARcCCQcKGhsZCg0NChkbGgoNBQIECQdvbwcECRUDCmFiBQcDAwcFBwoTFAkHGhkHChMUCQcFAwcB0gkRBgoLCwkNDQkLCwoNEwkSEhAGb28GCBATCRUNCmFhBQwMDg0LBQcECAgDCBkZBwQICAQHBQYLDgcGAAAAAgAAAAABHQEbAB4AJQAANz4BJicuAQ4BBzUjFRczNSM+AR4BDgImJwceAjYnNyc1IxUX/RINDBITPEE4EBMJQikTSEouAjFLRhIQDzhCPisONhMDRRc5ORcaHAQhHC1CCRIiHRU+TTwSISIJHSYGGywNNkdLBwAAAgAAAAABFAETABEAHAAAExcHJxUHIyc1IxUHIyc1Byc3BxUzNTczFxUzNSeddw0TCjgJJgk4ChIOd0QmCTgKJUsBEmwOEXoJCUJCCQl6EQ5sWIJCCQlCgkQAAAAEAAAAAAD0AOIACwAgACwAMAAANzM1IxUjNSMVMzUzFzMnNjc2NzY0LgEnJicmKwEVMzUzNwYrATUzMhYVFAcGFyMVM3kPDzEQEDFqERgDBAgDAgMFBAYHBAMuDxwJAwIgIAYKAQMXvLxxcDExcDAwMQEDBgkFCwoHAwUCAXAuEAEkCggFAwdmEwAAAAUAAAAAAQcBGgAkAC4AOwA/AEMAADczFxUzFxUHIxUHIwcnNSMnNSMnNTczNTczNS4BNTQ2MhYVBgcXNSMVFzMVPwEzJwYHMQYmJwceATI2NycjFTM3MxUjn0sJCgoKCgk6LxAvCgkJCQkKSwQGCxALAQlCli8JIgc1KAsODRgJDQoZHBkJTBMTOBMT4QkmChIJOQk0By0MNgkSCigHFQMIBgcLCwcLBWE4bgIpJgMuCgMDCAkOCQsLCTMTExMAAAMAAAAAARoBGgAJABMAHQAANzM3NS8BIw8BFTcjNTMfATM/ATMnIw8BIy8BIzczHPQJNAiNCTT04S8OCFYIDTEBNQkMSw4INTF/JglUkAYGi1kJOBcFBRcTBRcXBYQAAAEAAAAAAPQAzwARAAA3FRQWOwEnNxcVByc3IyImPQFLBQSBHg0wMA0egQsRziUEBR4OMAsvDR4QDCUAAAQAAAAAARkBGwATACcAKwAvAAATHgEXHgEGBw4BJicuAz4DFz4BNz4BJicuAQYHDgEeARceATcnMzUjFxUjNaEWKQ8YEgwVEzc8GxQeEQINGiYrIBIhDBILEBQSMTMVGRoDHxoRJhIfGBgYGAEZAxMQGD5AGhgZAg4LIiotLCQaC/MEFA8WNzUVEhEHDhE1OzIOCQYElBIlS0sAAAUAAAAAARoBGgAHAAsAEwAXAB0AAAEXFQcjJzU3FyMVMxUXFQcjJzU3FyMVMycXBxc3JwEHEhKWExOWlpYSEpYTE5aWlvQeHg0rKwEZEksTE0sSEks5EksTE0sSEkuOHh4NKysAAAAAAwAAAAABJwEHAAwAEAAUAAA/ATMXFSM1IxUzFSMnBScVNwc1FyMTE+ESEuFdXRMBFH4zID0l9BMTcXGWExMgfrEzBlY+AAAACQAAAAABBwEaAAcADQAVABsAJAAqADIAOABBAAA3FzY0JwcWFCc3JicHFic3JiIHFzYyBycGBxc2BzQ3FwYWFwcmFwcWFzcmFwceATcnBiI3FzY3JwYnMjY0JiIGFBbvEgYGEgULEBIjCR4sBRInEgYPIT8JIxIRDy0GEgYBBRIGHhESIwkeLQYSJxIFECE/CSMSEBBMBwsLDwsLfwUSJxIGDyE/CSMSEQ8VEgYGEgYMERIjCR5NFBIGDyEQBRIbCSMSEBAWEgUBBhIFCxASIwkeOgsPCwsPCwAAAAMAAAAAASMBGwAVADAAOQAANwcvATcXPgMeAxcjLgIGBzcfAQcnDgMuAyczNRQeAz4CNwcnNycUFjI2NCYiBmM9DRkRDwgbJCgpJRwQARIEMkg+DCytGREPCBskKSkkHBACEwwYHyQjIBcHKwc9fwsQCwsQC8IZBTwHJBMfFAgGFB4mFCQ0CSciEkM9CCUTHxQIBxQeJhUJEiIcEgYGEhwREhIZCggLCw8LCwADAAAAAAEHARoADQAbACQAABMiDgEeAj4BJzYuAgciLgE+Ah4BFRQOAicUFjI2NCYiBo0lPhwONUhEKgEBEyItGCA0GA0sPTojEB0mJwsPCwsPCwEZKURJNA4cPSUZLCMS4SM6PSwNGDQgFCYdEGcHCwsPCwsAAAABAAAAAADgAQcAHAAANwcjNzI3Njc2PwE2NTQuASM3MwcmDgEPAQYUHgGpAlwCDgUHAwYGJgUECQwCVgIKDQgGJgYECS0GBgIDBQgUhxAJBAcCBwcBBgwVhxMJBgMAAAACAAAAAAEaAQcAGwAxAAA3Iyc1Iy8BPwEXHgEXFhcWNzY/Ax8BDwEjFSczNTczNycHBgcOASImJyYvAQcXMxffkwkbCQwGUAwBBQIFBg4NBgUFBAxQBgwJG5OACR0IPwMDAwgUFRMHBAMDQAkcCiEKfQcyCxsGBQcCBQMFBgIFBQkGGwsyB30JfQkjFQQFAwgICAgDBQQVIwkAAAACAAAAAAEHAQcARgCNAAA3NSMiDgEHMQYHMQYXFRQHMQYHBisBFTMyFxUWFxUWFzEWHQEGFxUWFzEeAhczNSMiLgI9ATQmJyYnNjc+AT0BNDY3NjMXFTMyPgE3MTY3MTYnNTQ3MTY3NjsBNSMiJzUmJzUmJzEmPQE2JzUmJzEuAgcjFTMyHgIdARQWFxYXBgcOAR0BFAYHBiNxAgkRDAMDAQEBAgQKBQYBAQYFBQMEAgIBAQEDAw0QCQICBgoHBAICBQkJBQICCQcFBk0BCRANAwMBAQECBAoFBgICBgUFAwQCAgEBAQMDDRAJAQEGCgcEAgIFCQkFAgIJBwUG9BMHDQgICAgIEAYFCgUCEgIBAgMBAwUFBhAICAEHCAgNBgETBAgKBhkGDAULBwcLBQwGGQkNBAK8EgYNCAcJCAgQBgUKBQISAgECAwEDBQUGEAgIAQcICA0HARIECAoGGQYMBQsHBwsFDAYZCQ0EAgAAAAMAAAAAAKoBBwALABQAHQAANx4BPgImJyYOARY3IiY0NjIWFAYnIiY0NjIWFAaMBAoJBQEEBQYPCAIRCAsLEAsLCAgLCxALCykDAQUICgkDBAMND1YLEAsLEAteCxALCxALAAADAAAAAAEcARwAHAA5AEUAABMeAgcOASMiJw8BIxUHIxUHIyc1PwEmNTQ+Ahc2NzE2LgIHDgEVBhcPARUzNTczNTczPwEWMzI3PgEuAgYHBh4BNtUXIwwEBi8eDQsPBxMJHAo4CQJeBBEdJSwSBQMJGCARFh4BBQJeJQkdCRcRCgwMFwMDAQUICwkCBAMNDgEYBSArFh0mBBIDHAocCQkrB10NDhIjFwmKDhcRIBgJAwUkFw0MCl8eHQkcCRMDBEIECgkGAQUEBw8IAwAGAAAAAAEaARoALwA2ADkAPQBAAEcAACUnMzUjNSMVIxUzByMVMx4BMjY3MzUjJzMVIw8BFzM3LwEjNTMHIxUzHgEyNjczNQcGIiYnMwYnIzcfASM/ARcjFwYiJiczBgESHhNeE14THgcCBRgeGQUCCB86JQglB6kHJQglOh8IAgUYHxgFArcGDwwELwQBJhN2F4MXdhMmIAYPDAQvBKlLExISE0sTDhISDhNLlgQvDw8vBJZLEw4SEg4THQMHBgYZLYscHIotHAQIBgYAAAAABgAA//0BLQEYAAcACwAXAB8ALAAzAAATIwcVFzM3NQc3Fw8BJzMXNzMHIyIGDwEXBycjFzM3Jjc2FzIWFRQOAS4CNhc3JwcnBxeZCm9vCnPWXmFhBW0hUVQiDwcZJwgTEBVRIW0KFAQrDxEXIRMfIhgHDS4iDxwQDBgBGEwQSkoQCEFBP0JKNzcKHRYNDg43Sg0JPQoBIBgRHA0GGSEgPy0LJQ4PEwAABQAAAAABLAEYAAcACwAXAB8AKAAAEyMHFRczNzUHNxcPASczFzczByMiBg8BFwcnIxczNyY3FBYyNjQmIgaZCm9vCnPWXmFhBW0hUVQiDwcZJwgTEBVRIW0KFAQTIC8hIS8gARhMEEpKEAhBQT9CSjc3Ch0WDQ4ON0oNCQ4XISEvISEABAAAAAABDAEYAAcACwASABkAABMzFxUHIyc1NwcXNwcXMzcjBycXJzMXNzMHjwpzcwpvdF5eYdNtCnEiVFFMbSFRVCJxARhMEEpKEDlBPz83Sko3N3lKNzdKAAACAAAAAAEaARoABwALAAATBxUXMzc1JxUjNTMmExPhEhK8vAEZEuETE+ES8+EAAAACAAAAAAEaARoABwALAAATBxUXMzc1Jwc1MxUmExPhEhLhuwEZEuETE+ES8+HhAAADAAAAAAEaARoABwALAA8AABMHFRczNzUnBzUzFTM1MxUmExPhEhLhS0tLARkS4RMT4RLz4eHh4QAAAAAFAAAAAAEaARoABwALAA8AEwAXAAATNzMXFQcjJzcVMzUHMxUjNzMVIzcjFTMTE+ESEuETE+HPJiY5JSVdJSUBBhMT4RIS4eHhEhMTExMTAAQAAAAAARoBGgAHAAsADwATAAATBxUXMzc1Jwc1MxU3NTMVNzMVIyYTE+ESEuElE3ATJiYBGRLhExPhEvPh4UuWlpbhAAAAAAQAAAAAARoBGgAHAAsADwATAAATBxUXMzc1Jwc1MxUzNTMVMzUzFSYTE+ESEuElE3ATJgEZEuETE+ESqJaWlpaWlgAAAwAAAAABGgEaAAcACwAPAAATNzMXFQcjJzcVMzUzFTM1ExPhEhLhExOWEjkBBxIS4RMT4ZaW4eEAAAAAAwAAAAABGgEaAAcACwAPAAATBxUXMzc1Jwc1MxUHMxUjJhMT4RIS4eHh4eEBGRPhEhLhE6mWlhI5AAAAAwAAAAABGgEaAAcACwAPAAATNzMXFQcjJzcVMzUzFTM1ExPhEhLhExM4E5YBBxIS4RMT4eHhlpYAAAAAAgAAAAABGgEaAAcACwAAEwcVFzM3NScHNTMVJhMT4RIS4eEBGRLhExPhEqiWlgAAAwAAAAABGgEaAAcACwAPAAATBxUXMzc1Jwc1MxUzNTMVJhMT4RIS4UsShAEZE+ESEuET9OHh4eEAAAAAAgAAAAABGgEaAAcACwAAEwcVFzM3NScVIzUzJhMT4RIShIQBGRLhExPhEvPhAAAAAwAAAAABGgEaAAcACwAPAAATBxUXMzc1Jwc1MxUzNTMVJhMT4RIS4YMTSwEZE+ESEuET9OHh4eEAAAAAAgAAAAABGgEaAAcACwAAEwcVFzM3NScHNTMVJhMT4RIS4YMBGRLhExPhEvPh4QAAAgAAAAABGgEaAAcACwAAEwcVFzM3NScHNTMVJhMT4RIS4eEBGRPhEhLhE+HOzgAABgAAAAABGgEHAAcACwATABcAHwAjAAATBxUXMzc1Jwc1MxU/ATMXFQcjJzcVMzUHNzMXFQcjJzcVMzU4EhJLExNLSzkSORISORISOUsSORISORISOQEHE7wSErwTz7y8vBMTOBMTODg4gxISORISOTk5AAAGAAAAAAEoAQcABwALABMAFwAfACMAAD8BMxcVByMnNxUzNRc/AR8BDwEvARc3LwE3MxcVByMnNxUzNV4JJgkJJgkTEikGIwxGBSMMMkASQb8JJgkJJgkTEv0KCs4JCcW8vAcMDQXCDA0FwLAGsAwKCs4JCcW8vAADAAAAAAEaARoACAASADcAADciBhQWMjY0JhcnBzcnMzcXMwcnDgEHIxUUFjsBFhcjBiY9ATQmJy4BNTQ3PgMzMh4BFRQHBuEXISEuISECGRgJFhsKChwXHxIdByMDAxoDBSIKDwoJDA4MBRATFQwXJxcHBIMhLiEhLiFdEhIcEB8fEFIDGBIpAgQKCAEPCh4NGAkLHxEXEwoPCwYWJxcSDgkAAAMAAAAAAR0BGgA7AFgAbAAANzY3Nj8BNjc2NTQuBCIOBAceARceAR0BFB4COwEyPgI1JyMmJxUUBisBIiY9ATM+ATM3Mhc2NzY3NjMwMScmJyYnJicGBwYHBg8BFxYXFhcWFzY3NjIXFhcWFAcGBwYiJyYnJjSoBQgGBAICBwUGCxATFRgVEw8LBgEBDQwKCgMHCQUeBQkHBAECCQcDAx4CBCUDCwcCBDMGDgsNBwUHCAgLCAoEBQoICwcJBwcJBwsICh8JBgIHAgYJAgIJBgIHAgYJAngKCAUGBwgFDQ8MFRMPCwYGCw8TFQwSHQwKFw0eBQkHAwMHCQUIAQYPAgQEAikGCAFQGA8KBQIBAQUGCg4TEw4KBgUBAQECBAYLDQUGCQICCQYCBgIGCQMDCQYCBgAAAgAAAAAA9QEaACEAKwAANw4BHQEUBgcGJyMGJj0BNCYnLgE1NDc+AzMyHgEVFAYHIxUUFjsBMjY12wkLCAcEBR4LDgoJDA4MBQ8TFgwXJxYNMykDAx4CA4oJGA0eBw0DAgEBDwoeDRgJCx8RFxMKDwsGFicXEh4uKQIEAwMAAAACAAAAAAEaARoADAAWAAATMxUjFTM1MxUHIyc1IRUjNQcnNyM1MxxVS+ESCfQJAQYSfw1+Y3oBGRLhS1UJCfR6Y34NfxIAAAACAAAAAAEaAPQAJABJAAA3MzIeAR0BFA4BKwE1MzI2PQE0JisBIgYdAR4BFxUuAT0BND4BFzUeAR0BFA4BKwEiLgE9ATQ+ATsBFSMiBh0BFBY7ATI2NzUuAVM5Eh0RER0SCQkTGhoTORMbARUQGCARHaAYIBEdEToSHRERHRIJCRMaGhM6EhoBARX0ER4RBBEdEhMbEgQTGhoTBBAZAxMDJBgEER4RTBMDJBgEER4RER4RBBEdERIbEgQTGhoTBBAZAAAAAwAAAAABBwD0AAMABwALAAA3NTMVJzMVIzcVIzVxS3GWlrzhSxMTXhNeExMAAAAABAAAAAABBwD0AAMABwALAA8AADczFSMVMxUjNTMVIzUzFSMmqKiWluHhzs6DEiYThBNLEwAAAAAGAAAAAAEaAQcABgAKAA4AEgAzAGsAABM3MxUjNQc3MxUjFTMVIxcjFTMnPwE2NCcmJyYiBwYHBgcVMzU0PwEyMxcVFg8CFTM1IxcyFxYVFAcGBwYiLgEvASYnMTMVFxYzPwIvASsBNTczPwEnNCYPAQYdASM1NDc+AjIeAhQHKwcNDQczu7u7u7u7u9MBAQMBAgcFCAUGAgEBEAEBAQIBAQECEyURCwIBAwECBwUIBQQCAgEBEAECAQEBAQEBAQQEAQEBAQMBAQEPAwEEBgcGBgQDAQAHOSoGAhM4EzgTUgEBBQgEBwICAgIHAwMBAQECAQIBAwMDFQsNOgIEBgMDBwICAgMCBAMEAgIBAQICAwIMAQEDAgEBAQEBAgEBBgUCAwICAwcJBAAAAAADAAAAAAEaAPQAAwAHAAsAADc1MxUnIRUhNxUjNROpqQEG/vrOzksTE14TXhMTAAAFAAAAAAEHAPQAAwAHAAsADwATAAA3MxUjFTMVIzUzFSMnMxUjOwEVI0upqYODvLw4zs44ExODEiYThBNLE6kACAAAAAABGgD0AAMABwALAA8AEwAXABsAHwAANyMVMxUjFTMHMxUjFyMVMzczFSMXIxUzBzMVIxcjFTMmExMTExMTExMTEyXOzs7Ozs7Ozs7OzvQTJRMmEiYTvBMlEyYSJhMAAAQAAAAAASMBIAAWACcAMwA/AAATNxcVByc1IyIHBgcGBycmNz4DFzMXFTcnFSMmBgcGBzY3Njc2Mwc+AR4CBgcGLgE2Fx4BPgImJyYOARasEmRkEggfDxYUFRcTAQQEGSgwGg0WR0YkGC4RFQkUFBIWDxxCDB0aEAINDBMrGQkeBxEQCQIIBwwaDwYBFwlQEUwJIwMEDQ8eBg4OGSwgEQFBIzY4IQERERYdEwoIAwJKCQINGB0bBwwJJCw7BQIIDxEQBAgGFhoAAQAAAAABGAEaAA8AACUuAiIOAQcjPgIyHgEXAQUFHzA2MB8FEwUlOEA4JQWpGisYGCsaIDMdHTMgAAAABAAAAAAA4gEQABAAHgAnADMAADcuASMxIg4CHwEzNzYnNCYnOwEeARcUDwEnJjU+ARcmDgEeAT4BJic+AR4CBgcGLgE2ywocDxUiFAEMOwo7DAELQQECFiABCTAwCQEgIgYQCAMNDwkDJggVEgsBCQkMHhEF+goMFSIqEnd3EhYPGw4BIRcQDWFhDRAXISgFAw0PCQMNDxQGAgkRFRIFCAYZHgADAAAAAAD0AQcABwALABsAAD8BMxcVByMnNxUzNSc1NCYiBh0BMzU0NjIWHQE4E5YTE5YTE5YTIS4hExUgFZYTE14SEl5eXhMlGCEhGCUlEBYWECUAAAAAAwAAAAABBwEaABEAGQAdAAA3IzU0LgEiDgEdASMHFRczNzUnND4BFh0BIxcjNTP0ExQjKCMUExISvBOpIS4hcJa8vKklFSIUFCIVJRNwExNwOBggASEYJYNwAAAEAAAAAAEaARAAFgAaAB4AMAAAEyIOAR0BFzM3NTQ2MhYdARczNzU0LgEHIzUzFyM1Myc1NCYiBgcVIzU0PgEyHgEdAZYkPCMTOBMWHhcSORIjPFw4OKk5OTkgLiEBOB40PDQfARAjPCReExNeDxYWD14TE14kPCPhODg4ExMYIB8WFhMeNB4eNB4TAAMAAAAAARoBDwAHAAwAFAAAEyMHFRczNzUnFwcjJxcjNR8BMz8Bmwp+CfQJg2oaoBjZ4RQIqAgVAQ9LlQkJlTg/HR2FchoDAxoAAAADAAAAAAEaAPQABwANABAAAD8BMxcVByMnNxUzNQcjNyMXEwn0CQn0CRPhawxkvF7qCgqoCgqVjIxSXEkAAAAAAwAAAAABBwD0AAMABwALAAA3FTc1FzUnFRc1NxUmQUs4S0LFjSmNsI0jjSONKY0AAwAAAAAA9AEHAAMABwALAAATMwcjFyMnMxcjBzNnjSmNsI0jjSONKY0BB0JLOEtBAAAAAAQAAAAAAPwBEAADAAcAFQAZAAA3MwcjFTMXIz8BJyMPARUXBxczPwE1BzMHI2x3I3d3I3dkLAiNCC8sLAiNCC+QdyN3/TgTOEJGDgVLCUZHDgVLCQ44AAAEAAAAAAEQAPwAAwAHABUAGQAANxU3NTMVFzUPASc1PwEzFzcXFQ8BIzcVNzUvOBM4QUcOBUsJR0YOBUsJDjjAdyN3dyN3ZCwIjQgvLCwIjQgvkHcjdwAAAgAAAAABGgDPABAAFwAANzMVIzcHIycUFRcjNTMXFhc3NSMVIxc3dycbASEXIQEZKA8OAZwlJDc2znpjY2MHLy16KysEFkJCNjYAAAMAAAAAARoA7gAPABcAGwAAPwEXFQcnDgIuAjcvATUXBhUUHgE2NycXNQcm5wwMcgMPFRYPBgMmCEABCxAOAljX161ACqEKHgsPBgUQFQsKCiQ9AgIJDAIICCw5ij0AAAIAAAAAAO4A9QA4AEIAADcGJwYuAjc0PgIzMhcWFRQGIyI1DgEjIiY0PgEzNhYXNzMHBhYzMjY1NCYjIg4BFQYeAjcWNycUMzI2NzYjIgbEGh8RIRkMAQ4dJhQkFhkfFxUGEQoOEQ0XDQkPAwQRDwMDBg4VJR8YJRUBCRQbDhwZTBELEAQJGQ4SRA8BAQwZIBIUJx0QExUjHicSCQkTIh0SAQoIDzwNCh8WHSAYKRgPGhQKAQENOBcSESQeAAAAAAMAAAAAASwA4QADAAcACwAAJSE1IRUhNSE1ITUhASz+1AEs/tQBLP7UASzOE6kTOBMAAAACAAAAAADrAP4AJgA7AAA3JyMHFzcVMRUxFRQfARYXHgEfAR4CHQEzNTQuAi8BLgI3JxcHNjcmLwEGDwEOAx0BMzU0PgE3xSgOKA0VAQICAgQNBw4HDAcaBQsMBw0GCwYBARU0AwMHBAIFBg0HDAsFGgcMB9UoKA0UEwkGBQULBgYLEQgPBxETDRERDRgSEAcOBhAUCx0UUwQDCgwFBwYOBw8TGA0REQ0TEQcAAwAAAAAA/gEQAAsADwAjAAA3NDYyFh0BFAYiJjUXNTMVJwYuATUzFB4BOwEyPgE1MxQOASNeIS4hIS4hLxISGisZExQiFRIVIhQTGSsa2BchIRdLGCEhGI0mJiYBGisZFCMUFCMUGSsZAAAABAAAAAAA/gEaAAsAHAAgADQAADc1NDYyFh0BFAYiJjciDgEdARQeATI+AT0BNC4BAzUzFScGLgE1MxQeATsBMj4BNTMUDgEjZxwmHBwmHC8SHhISHiQeEhIeGxISGisZExQiFRIVIhQTGSsajUsTHBwTSxQbG6ARHxFLEh4SEh4SSxEfEf7nJiYmARorGRQjFBQjFBkrGQADAAAAAAEaARoAEQAWABoAABMjFSMHFRczFTM1Mz8BNS8BIxcjNTMXJzMVI5YTZwkJZxNUBygoB1RQwMAfp15eARklCksJg4MCJg4lA0s4HAkSAAADAAAAAAEaARoACgAVACUAABMfARUHJwcnNT8BHwE1JxUjNQcVNzE/ARcVByc3IxcHJzU3FwczoXQEDnV1DgR0FWdnE2dnIw4uLg0ecR4NLi4NH3IBGUsHrAhLSwisB0urQpZCNjZClkJaDS8NLg0eHg0uDS8NHwADAAAAAAEaAPQAEwAeACIAACUnIwcVMzUXBh0BHwEzPwE1NCc3BxUHJzU2NxczNxYvATcXARmABoATKw8FSwhJBg8/QkFCAQ0xBzANQWdnZ8IyMndeERUaCAciIggIGRUZRwEeHgEWEhMTEhEoKCgABAAAAAABEAEaAAkAEwAdACcAADcHNSMVJwcXMzcnFzcVMzUXNycjDwEzFSMXByc1NxczJzcXFQcnNyPAIRIhDTAOMG4NIRIhDTAONSFBQSENMTFlQSENMTENIUFjIEBAIA0wMJMNIEBAIA0wUCATIA4xDTAtIA0wDTEOIAAAAAAFAAAAAAEaARoADAAQABgAHAAgAAATNzMXFQcjNTM1IxUjNxUzNQ8BFRczNzUnBzUzFQczFSNxCZYJCS8mhBIShOsJCZYKCoyDg4ODARAJCYMKE0sTORMTXgqDCQmDCiYTExJLAAAAAAUAAAAAAQcBBwAMABUAJwArADQAACUjFSYjIgYUFj4BPQEHMhYUBiImPgE3DwEVJiMOARQWMjY9ATcVMzUHFQc1BzIWFAYiJjQ2AQcTDQ8UGxsnGy4LEREXEQEQMZYJDQ8UGxsnG4QTE4MvCxERFxAQqS8JGyccARsTVTgRFxERFxGVCQmNCgEbJxsbFHEIElQKJQkmjREXEBAXEQAAAAADAAAAAAEZARcACQARAB0AADczNxcVBycjJzUfATUPASMVMzcXBxcHJwcnNyc3Fxw0SRAQSTQJSDs7By4utw0gIA0hIA0gIA0gzkgG9AZICV5YO8c7AktJDSAhDSAgDSEgDSAAAwAAAAABLAEaABAAEwAfAAATHwEVIzUjNSMVMxUjJzU3MwcVMxcjNSM1MzUzFTMVI7JAAhNLXktUCQl+BDYVEzg4Ezg4ARdBCCUTS88SCeEJEjnOOBM4OBMAAAADAAAAAAEsARoAEgAcACgAAAEjLwEjBxUXMzUjNTM/ATMHMzUHIw8BIzUzHwEzByM1IzUzNTMVMxUjARB/EAdeCQlnXlUGEHcBExN6BhBQUBAHehMTODgTODgBBw8DCc4KE3ECECVUHAMQOBAC9DgTODgTAAEAAAAAAPQAxQARAAA3FRQGKwE3JwcVFzcnMzI2PQHhBQSBHg0wMA0egQsRxSUEBh8NMAowDR8QDCUAAAQAAAAAARoA0gAIAA8AFgAoAAA3Nh4BDgEuATYXLgEOARYfAR4BPgEmJzcVFAYrATcnBxUXNyczMjY9ASwTLhoJJy4aCUYJFBIKAQUNCRQSCgEFnAYETR4NMDANHk0MEMUNCScuGgknLgIFAQoSFAkNBQEKEhQJJSUEBR4OMAsvDR4QDCUAAAAFAAAAAAEaAQcABwALAA8AEwAXAAATMxcVByMnNRcVMzUHMxUjFyMVMwczFSMc9AkJ9AkT4byWlnFxcXFLSwEHCrsKCrsJqakmEhMTExIAABcAAAAAASwBLAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMASwBPAFMAVwBbAF8AADcjNTMVIzUzFSM1MxUjNTMVIzUzHQEjNRczFSM3MxUjAyM1MxcjNTsCFSMzIzUzFyM1MxcjNTMVNTMdASM1MysBNTMXNzMXFQcjJzcVMzUXMxUjFTMVIxUzFSMnMxUjExMTExMTExMTExMTExMTJRMTJRMTJRISExMTOBISJhMTJRISExMTzhMTSxODExODExODJRMTExMTE5ZeXs4TOBM5EzgTORMlExMTExMTARkTExMTExMTExMlEhImExNLEhKpExOpqakTJhImEyWDEwAAAAAHAAAAAAEaARoABwALABMAFwAbAB8AIwAAEzczFxUHIyc3FTM1BzczFxUHIyc3FTM1FyMVMwczFSMXIxUzJhKpExOpEhKplhNeEhJeExNeXRISEhISEhISAQcSEuETE+Hh4SYTExMSEhMTExMlEyUTJgAAAAQAAAAAARoA+gAlAEAASQBSAAAlNjc2JyMmBwYHBgcmIgcmJyYHMQYXFhcGFRQXFhcWMjc2NzY1NAciJyYnJjU0NzY3MhcWMjc2MxYXFhUUBwYHBiciBhQWMjY0JjMiBhQWMjY0JgEEAwEBBwQEBggJDA4SQhIZEgkFBwEBAxURDx8aUxsfDxGDIRAYDA0RCA8KFhESEhUKDwgRDQwYEEoIDAwQDAxKCAwMEAwMwggKEhIBAgEFBQkFBRAEAgESEgoIFyApGBUKCAgKFRgpIHgDBAsMGRMPCAIBAQEBAggPExgNCwQDUhEYEREYEREYEREYEQAEAAAAAAEtARoADAAQACIALgAAEzMXFSYnNSMVByMnNRczNSMXIgcjDgEXBxc3HgE+Ai4CBwYuAT4CHgIOATjPEgkKXRVcEhJeXsMMCgERCQssDSwJFxUPBwQNFQgKDwcEDBAQCQEGDAEZEmQEAl7MFRLPz89xBwonESwNLAYDCBAVFhIKSwELDxEMAwYNDw4IAAAACgAAAAABGgEcAAsAFwAkAC0ASABiAHcAkgCeAKcAADcOAS4CNjc2HgEGJy4BDgIWFxY+ASY3NhYXHgEOAiYnJjYXFjI2NCYiBhQHMxUjIiY9ASImPQE0NjsBBgcjIgYdATMVFBY3JisBIgYdARQWMxUGFxYXMz4BPQEyNj0BNAcjFRQGKwEiJj0BIzUmNjsBMh4BFRcjNTMyNj0BMzU0JisBJiczMhYdARQGIxUUBiciDgEeAj4BNTQmByImNDYyFhQGqwkUEgsCCggNHhIGGAQKCQYBBQUGDwgDKwkUBwUEAwkOEQYJAhQDCAUFCAWcIiIJDgcLEw4iBwMYBgkTAosKDi4OEwsIAQcFByYICwcLEhMCAh4CAhIBCQYuBQcDNCIiAQMTCQYYAwciDhMLBw6uCQ4GAwwREAkQDAQFBQgFBdUGAgkRFBIGCAYZHyYDAQQJCgkDBAQMDwQFAgcFDQ4LBgMGChoWAwUIBgYIpRMNCiIMCCkNFAgLCQUqNQICegoUDjsIDCwJBwUBAgwILAwIPA1KPwECAgE/PQUJBQcCdhMCAjUqBQkLCBQNKQgMIgoN2QoQEQwDBg8IDBEmBQgGBggFAAAABQAAAAABBwEsABUAGQAdACEAJQAAExUXFQcjJzU3NTMVMzUzFTM1MxUzNQMzNSMXMxUjFyMVMwczFSP0ExO8EhITJhImEyWpvLwmcHBwcHBwcHABLBMS9BMT9BITExMTExMT/uf0JhM4EzgTAAAAAAQAAAAAARoA9AAKABAAFAAcAAA3HwEVDwEvATU/ARcHHwE/AQcXNScXFTc1BxUHNaFsDAdzcwYLawRLCkA5EbFeXnFeJhP0HQl+CSAgCX4JHRMTAxEPBXcabBkZbBprCjAFMAADAAAAAAESARoAIwAtAEIAACUnNSc1NCcmJyYjIgYdAQcGFB8BFhcWNzY/AQcUHgIyPgInJj4CHgEdAQcXDgEmLwEmND8BFQYUHgE+ASYnNRcBERZcAgQLBgUMEDkJCUQEBQsKBQRdDQEGBwoIBgKWAQEDBAYEEhMBBQYBRAMDUgUGCgkEAwRITzoBXBcGBQsEAhAMPTgIFwlEBAIEBAIEXSoECQcEBAcIswIEAwEBBQQXE6oCAgICRAIIA1E1BAsJAwUJCgM1SQAAAAACAAAAAAEaARoADAATAAA3Mj4BNC4BIg4BFB4BNyMnNxc3F5YkPCMjPEg8IyM8EQ0rDSRPDRMjPEg8IyM8SDwjTSsNJE8NAAADAAAAAAEWARsABgAcAC8AADczNycHJwc3HgEXFhUUBw4BBwYnLgM3Njc+ARc2NzYnNCYnJicmBgcOARYXHgF2DVUNTyQNVhYpECYeDyYWMCcUHhADBw8mEishJhkZAhEPHSYTJg8gFyEiECZgVg1PJA2OARQQKTcrJxIXBAkWCyIqLhUuGQwM9AkfIiUXKhAdAwEJCxhOSBMKBgAEAAAAAAEaARsACwAXACMARQAANyMVIxUzFTM1MzUjJy4BDgIWFxY+ASYnPgEeAgYHBi4BNhczMhYdASM1NCYrASIGHQEzFRQWOwEVIyImNzUiJjc1NDb0EyUlEyUlVAQKCQUBBAUGDwkDJgkUEgsCCggNHhEGCi4OExIJBi4GCRMCAg8PCQ4BCQsBE3EmEyUlE7gDAQUICgkDBAMNDxQGAQkRFBIFCQcZHkUTDg4OBggIBjM/AQITDQksDAgyDhMAAAAABAAAAAAAzwEaAAgAEQApAD0AABMyFhQGIiY0NjciBh4BMjY0JhcjIgYdAQYWMxUGFjsBMjY9ATI2JzU0Jgc1JjY7ATIWBxUjFRQGKwEiJj0BlggLCxALCwgQFgEVIBYWBy4OEwELCQEOCR4KDQgLARNKAQkGLgYJARICAh4CAgEHCxALCxALEhYfFhYfFlQTDjIIDCwJDQ0KKwwIMg4TVDMGCAgGMz8BAgIBPwAAAAABAAAAAAEsAQcALQAAEwcVMzUzFRczNzUzFRczNzUzFRczNzUzFSM1IxUjNSMVIzUjFSM1IxUXITc1JxMTEyUKEgolChIKJQoSCiU4Ey8SLxM4ExMBBhMTAQcTcXFnCgpnZwoKZ2cKCme8OTk5OTk5S0sSErwTAAAEAAAAAAEaARoABQAOABsALQAANzMuAScVNx4BFxYVIzUyBxczDgEjIi4BNTQ2NxcyPgE3NjUjNSIHDgIXFB4BvEkGKBwBIzMGAXAJLxNcBzMiGSwZKyATGzAgBAJxCQoaKxkBHjO8GygGSVwGMyMKCXCDEyArGSwZIjMHzBgrGgoJcQIEIDAbHzMeAAIAAAAAAQcA4QAcADcAACUVIyImJyMOAysBNSMnNzM1MzIWFxYXMz4BMwcGBwYPASMnJicuAScVPgE3Nj8BMxcWHwEWFwEHBgsTBzYEDA8SCgk8ExM8CQoRCBAINgcTCwkDAwUDBE0CBAkEDwYGDwQJBAJNBAECBQIEzoMKCQkOCgVLCglLBQUKEgkKFAECAwYFBgwIAwcBgwEHBAgLBwYDAgQCAQAAAAIAAAAAAS0BBwA2AFAAABMzFRQGBxUeARcGBzEmLwE1NzY/ATY3IxYXFh8BFQcGBw4BBzMGByMVByc1IzU0Njc2NzUuATUXPgIXHgEXFhQHDgEHBiInLgEnJjY3Njc2S4MJCgkNBAkICQwGBQMCBAIBWwIBBAUGBwsIBAcBXgUECgkKSwYEChIJCowHDg8IDhUEAgIEFQ4IDwcOFgQCAQEFDAQBBwYLEwc2BAsGAwUKBAJNBAECBQMDBAIFAwRNAgQJBA8GBwg8ExM8CQoRCBAINgcTC5gEAwEDAxUPBw8IDhUEAgIEFQ4IDwcQCwQAAAIAAAAAAOEBBwAcADcAABMzFRQGBxUeAx0BIxUHJzUjNTQ2NzY3NS4BNRcWFxYfARUHBgcOAQczLgEnJi8BNTc2PwE2N0uDCQoJDgoFSwkKSwYEChIJChQCAQQFBgcLCAQHAYMBBgQIDAYFAwIEAgEBBwYLEwc2BAwPEgoJPBMTPAkKEQgQCDYHEwsJBAIFAwRNAgQJBA8GBg8ECQQCTQQBAgUDAwAAAAQAAAAAARYBGwAVACgALgAxAAATHgEXFhUUBw4BBwYnLgM3Njc+ARc2NzYnNCYnJicmBgcOARYXHgEnNxcVByc3FTehFikQJh4PJhYwJxQeEAMHDyYSKyEmGRkCEQ8dJhMmDyAXISIQJicOVFQOEjoBGQEUECk3KycSFwQJFgsiKi4VLhkMDPQJHyIlFyoQHQMBCQsYTkgTCgarCDgQOAhfTicAAgAAAAAA8AEHAAUACAAAEwcVFzc1BzUXRw8PqaWPAQcI4QhwEGe+XwAAAAACAAAAAADiARoAFQAfAAATIxUjBxUUFhcVMzU+AT0BJyM1IxUjFw4BLgE9ATMVFIMSHQklHRIdJQkcEyY7DCIfE3ABGTgJQhwrAzk5AyscQgk4OHMMBg0cETg4FwAAAAAFAAAAAAENAO8ABwAPAB8AJwAvAAA3IycjByM3MxcnJicxBg8BFzUzMhYVFAYHFR4BFRQGIycVMzI2NTQjBxUzMjY1NCOgEw8+DhM4ERAXAQEBAhZuKRMWDgsOEhsUGREOEBwTFw8QI14oKJBZPgMHBwM+N5ASDwwSBAEBEw8SF4EvDgwVPjQODBoAAAgAAAAAARoBBwAHAAsADwATABcAGwAfACMAABMzFxUHIyc1FzM1IxcjFTMnIzUzBzM1IxczFSMnIxUzBzMVIybhEhLhExPh4c68vBOWljhLSxMlJTlLS0tLSwEHE7wSEry8vBM4ExKDSxMlOBMlEwACAAAAAADrAOsABwALAAA/ATMXFQcjJzcVMzVCCZYJCZYJEoThCQmWCQmNhIQAAAAFAAAAAAEaARoABwALAA8AEwAXAAATMxcVByMnNRczNSMXMxUjNyMVMzczFSMc9AkJ9AkT4eESJiZxJiYlJiYBGQn0CQn06uETvLxxcZYAAAEAAAAAARoA9AASAAA3JyMHJyMHIxUzPwEXMzcfATM13SETIxYSFjU8Cg0WEyMbCUODcX1dURIHMl+EWAYSAAAEAAAAAAEHARoADAAZADwAQAAAEyIOARQeATI+ATQuAQciLgE+AjIeARQOATcuASIOAgczND4BMh4CFAYPAQ4BFxUzNTQ2PwE+AjQmBzMVI40hOCEhOEI4ISE4IRwwHAEbMDgvHBwvAQUPEQ8KBAEXBQcGBQQCBAMOAwQBFgQDBwQGBAQuFRUBGSE4QjggIDhCOCHhHC84MBwcMDgvHJ4FBgYLDQcFBwMBAwUICQQQBAkFDAkECAQIBAoLDQxeFgACAAAAAAEKAQ0AEAAiAAA3DgEVMjMyFhQGIyImNTQ2NxcOARUyMzIWFAYjIiY1NDY3F4YjIAMFExwaFRsdLy+ZJCADBRMcGhUbHTAuFuoWMyQYKxsqJjVOGyMWMyQYKxsqJjVOGyMAAAgAAAAAARkBGgAMABkAJQAxAEMATgBSAFYAADc0NjcnDgEUFhc3LgE3FBYXNy4BNDY3Jw4BFyc+ATQmJzceARQGNwceARQGBxc+ATQmBxYPARcHJyMHJzcuAT4CHgEHDgIeATI2NC4BFyMHMxcnIwc4EA8OERMTEQ4PEBQNDA0JCgoJDQwNkA4KCgoKDgsNDQ4NDhAQDg0RExNLAQUFQBEOaA8RQAUEBw0PDQkeAgQBAgUGBgQFAgURJhkRNhDDFSYODREsMSwRDQ4mFBAfDA0JGBoYCQ4MH00OCRgaGAkNDB8hH4YNDiYpJg4NESwxLEIKCASRCCEhCJEGEBAJAQYMAQEEBQUDBQcEAickOCUlAAAAAAUAAAAAARoBCwAVAB4AKgAzAD8AADcUBzM2LgEOAh4BNzUGLgE+Ah4BBzI2NCYiBhQWFzI3Fw4BIiYnNx4BNzI2NCYiBhQWFzMVMxUjFSM1IzUz4QETAyA7QC4MHDkgGi4YBiMzMR56CAsLEAsLLhQODQkZGxkJDQcSLwgLCxALCzcTJSUTJSWfBAUgORwMLkA7IAMTAxgvNCcNEysRCw8LCw8LLw4NCQsLCg0HCC8LDwsLDws4JhMlJRMADgAAAAABGgD0AA8AEwAXABsAHwAjACcAKwAvADMANwA7AD8AQwAAJSMiBh0BFBY7ATI2PQE0JgcjNTMHIxUzByMVMzczFSMXIxUzJzMVIzcjFTMnMxUjFSMVMwczFSM1MxUjNyMVMwczFSMBB88ICgoIzwcLCwfPzzkSEhITEyUTExMTE4NdXYMmJl4TExMTSxMTExM4EhI4Jib0CwiDCAsLCIMIC5aDExITEzgSORISEjgTOBITExMSXRISEhMTAAAAAAMAAAAAAOIA4QAIABUAHgAANzI2NCYiBhQWNxQOASIuATQ+ATIeAQc0JiIGFBYyNpYICwsQCwtTFCMoIxQUIygjFBMhLiEhLiGDCxALCxALExQjFBQjKCMUFCMUFyEhLiEhAAADAAAAAAEWARsACAAeADEAADcyNjQmIgYeATceARcWFRQHDgEHBicuAzc2Nz4BFzY3Nic0JicmJyYGBw4BFhceAZYQFhYgFgEVGxYpECYeDyYWMCcUHhADBw8mEishJhkZAhEPHSYTJg8gFyEiECZxFSAWFiAVqAEUECk3KycSFwQJFgsiKi4VLhkMDPQJHyIlFyoQHQMBCQsYTkgTCgYAAQAAAAAA6wEKABkAABMVByM1MycuAQ4CFh8BBycuAT4CFh8BNeoJQjASDSIjGQoKDWENYhAMDCEsLBENAQdCCRISDQkJGSMjDGINYREsLCELCxENJwAAAAoAAAAAASoBLAAVAB0AIQAuADIANgA6AD4AQgBHAAA3Byc3IyIGFBY7ARUjLgE0NjczJzcXEyMnNTczFxUnMzUjNzMXFQcjNTM1IxUjNRcjFTMHMxUjFyMVMzczFSMXIxUzJzEzFSOLKw4aPA0REQ0LCxQcHBQ8Gg4rRXgKCngKeGRkRngKCjIoZBQUPDw8PDw8PDwUPDw8FBQqKhbzKw4aERkSFAEdKB0BGg4r/v8KoAoKoAqMeAqgChSMPEaCFBQUFBTIFDwUPBQAAAEAAAAAAQkBBwAdAAA3IzUzFxUjNQ4BHgE+AiYnNx4CDgMuAj4BWDJBChMaERo5QCsFJB8FGSUSBBorMzElEgQa9BMKQSUTPzwfCzBBNQoSCCMwMywdBxAjMDMsAAAAAAIAAAAAAQgBBwARABUAABMzFTcXBxcHJxUjNQcnNyc3FwczFSO8EjAJMDAJMBIwCTAwCTCWS0sBBzsdEB0eEB06Oh0QHh0QHVtLAAAFAAAAAAEtARIAEgAfACwAMgA4AAATMxcVJic1IxUzFBcjNTM1Iyc1FyIOARQeATI+ATQuAQciLgE0PgEyHgEUDgE3JzcXBxcnFwcXNycR/gkJCuphFE46awrXFSQVFSQqJBUVJBUQGxAQGyAbDw8bEBoaCRMTSxISCBsbAREJbAcFVrAgGhMUCcRsFSQqJBUVJCokFYgPGyAbEBAbIBsPJxsbCRITERITCBsbAAAAAAIAAAAAAPIBGgAGAA0AADcnNycHFRcnFwcXNzUn8ktLDFBQrk1NDFJSeUpLC1AMUFZNTAxTC1IAAQAAAAABGgCpAAMAACUhNSEBGf76AQaWEwAAAAsAAAAAARoBGgALABUAJgA6AEQAWABhAHMAewB/AIYAADc2MhYUBiInByM1MxUUFjI2NCYiBhUHJzcXNTQ2OwEVIyIGHQE3FzczNTQjIgYHFTYyDwEGFRQWMzI/ARUUBiImNTQ/AQcjNQYjIiY1ND8BNCIHNT4BNzIVBzUHBhUUFjI2FzI3NQYiJjQ2Mhc1JiciBhQWJzczFxUHIyc3FTM1JzczFxUHNdoEDggJDgMBCwsEBwQDBwWMJwwTDwssLAQFEgw7DRIECQMHDwELDgcGCAQBBQYDBgcsDAQIBgcOCw4HAwkEEQwHBgMGBDcJBQUMBwgLBAMIDA4NfRKpExOpEhKpcBKEEhL6CQ4YDwcGSjQEBwgOBwgFTigMEx0KEBEGAx0SDA0gFwMCDAUJAQMQBwkJEgQEBwQCBwEBrwcJCQcQAwEJBQwCAgEXCwQBAQcCBAYSAw4ECA4JBA4CARAaD0sTE10TE11dXSYTE14TcQAAAAYAAAAAAOIBGgAQAB0AJwA6AEIARgAANxc3Jwc1NDY7ATUjIgYdAScXMxY+ATQmIgcnIxUzPQE0NjIWFAYiJgcGIyImNSY2MzIXFSYiBhQWMjcnBxUXMzc1JwczFSM8KykNEwYDHRwMEBRvAQUVDQsWBgEQEAYLBgYLBhAHDhATARYRDAYHEQsKEQheExODExODg4PmKyoNEx4EBhIQDB4ULwkBEh4RCydcGwcHCAkRCgmWBRQQEhUDEwULEwsFWxNwExNwExNwAAAAAAEAAAAAAQcBBAAVAAATBxUXNyczMhYXFh0BMzU0LgIrATd2S0sOPSQnNBAeExEmPCkiOwEETA1LDTwQEB9HBgYnOSYTOgAAAAkAAAAAARoBGgAoACwAMAA0ADsASwBTAFcAWwAANyM1MzUjIg4CHQEGFhcWFzM1IyInJic0PQE0NTY3NjsBFSMVMzc1IycjFTMHMxUjFTMVIxcjNTMVIyc3MxcVByMVIzUjIiY9ATQ2FzM1IyIGHgE7ATUjJzM1I/SpS1AGDQkEAQsKBgYFBQMCBgICBgIDrktUChODExMTExMTEwUFOAUXQlQJCS8TEggLCxEJCQQGAQUgJiYTOTlxlhIFCgwGsgoQBAIBEwEDBQMCCgIDBQMBJhMKVHETExITE4M4OBzqCXEJExMLCF4HC3ATBggFExI5AAAHAAAAAAEaASwADwAfAC8APwBHAFcAYAAANzEyFhUxFAYjMSImNTE0NhcxMhYVMRQGIzEiJjUxNDY3MTIWFTEUBiMxIiY1MTQ2NzEyFhUxFAYjMSImNTE0NgczNxcHIyc3FyMVMx4BMjY3MzUjLgEiBhcUBiIuAT4BFp8EBgYEBAUFBAQGBgQEBQUEBAYGBAQFBQQEBgYEBAUFBRNEDVQNVQ4MODgEJTElAzk5AyUxJWwbJxsBHCcb4QUEBAYGBAQFJQYEBAUFBAQGSwYEBAUFBAQGJQUEBAYGBAQFeUUOVFQOrRMYICAYExggICEUGxsnGwEcAAAAAAQAAAAAARoBGgAJABMAIwAsAAA3FTM1FzcnIwcXNxUzNRc3JyMHHwEjFTMeATI2NzM1Iy4BIgYXFAYiLgE+ARaWE0QNVA1VDkQTRA1UDVUODDg4BCUxJQM5OQMlMSVsGycbARwnG/wSEkQNVFQNDC4uRQ5UVA40ExggIBgTGCAgIRQbGycbARwAAAAABAAAAAABBwEIAC8AOABBAEoAACU0LgEOARYXFRQPAScmPQE+AS4BIg4BFhcVFBYfARUOAR4BMj4BJic1Nz4BPQE+ASc0NjIWFAYiJhcUBiImNDYyFjciJjQ2MhYUBgEHFB4XBBAOBTQ0BQ4QBBUcFQQQDggHMw4QBBUdFQMQDTIICAwPuwsQCgoQC2cLEAsLEAsvCAsLEAsL4Q8VAxMcGQMUBgMaGgMGFAMYHBISHBgDFAgOAxsYBBccExMcFwQYGgQOCBQDFA0ICwsQCwuhCAoKEAsLjgsQCwsQCwAAAAADAAAAAAEaASwADwAYACIAADcjFTMeATI2NzM1Iy4BIgYXFAYiLgE+ARYnNTMVNxcHIyc3Xjg4BCUxJQM5OQMlMSVsGycbARwnGzgTRA1UDVUOSxMYICAYExggICEUGxsnGwEcXnl5RQ5UVA4AAAAAAwAAAAABGgEaAAkAGQAiAAA3FTM1FzcnIwcfASMVMx4BMjY3MzUjLgEiBhcUBiIuAT4BFpYTRA1UDVUODDg4BCUxJQM5OQMlMSVsGycbARwnG/xmZkQNVFQNbRMYICAYExggICEUGxsnGwEcAAAAAAYAAAAAAQcBGgAmACoALgAyADYAPQAAJTUnIyIHBgcGBxUUFxYXFjsBNSMiJyYnJj0BNDc2NzY7ARUjFTM3JzUzFSczFSMVMxUjFyMVMxcHIzUzFSMBBwq3BgYNBQIBAwUNBgYFBQMCBgIBAQIGAgOuS1QKvKmWExMTExMTEwkXBTgFcZ8JAgYNBgayBgYNBQISAQMFAwIKAgMFAwEmEglClpaDExMSExNnHDg4AAAABAAAAAABGgEaAAsAFAAYABwAABMzFxUHIwcnNSMnNRczNSMVMxcVPwEzFSMVMzUjHPQJCX82EC8JenrhLgooBxISEhIBGQm8CTYHLwm8sqmpCiEomV4lEgAAAAAEAAAAAAEHARoACQAOABoAHgAAEx8BFQcjJzU3MwczNScjFyMVMxUzNTM1IzUjBzMVI8k4BRKpExNwcKk5cEslJRMlJRMlXV0BFDgOqBMT4RLzqDlLEyYmEyWDEwAAAAAHAAAAAAEaASwACAARABoAIwAwAFYAZgAANxQGIiY0NjIWBxQWMjY0JiIGFxQWMjY0JiIGFxQGIiY0NjIWBzY3Fw4BIiYnNx4BPwEUBgcVMzIWHQEXFQcVFAYrASImPQEnNTc1NDY7ATUuATU0NjIWByIGHQEUFjsBPgE9ATQmI5YWHxYWHxY4Cw8LCw8LOBYfFhYfFjgLDwsLDwsuDgsNCRkcGQoNCRgNEgoJLxggExIhGHAYIBMTIBgvCQoQGBBUEBYWEHAQFhYQlhAVFSAVFRAICwsQCwsIEBUVIBUVEAgLCxALC0UDCw0KCgoKDQkHArcJDwMBIRcTEyUTExchIRcTEyUTExchAQMPCQwQEDsWD3EQFgEVEHEPFgAAAAAGAAAAAAEaARoAEQAWABsAKAAuADcAAAEiBwYHIwcVHwIzNzU2NzY1BzMGBycXJzY3FS8BNjc2NzY3BgcGBwYHNSM1IxU3Ni4BDgEeATYBEC8uJSROCQNwBzgJIRMX8zEXEwdqBxsXQEAQFSMkMC8DHhckF0glE7cGBRMXDQUTFwEZFxMhCTgHcQIJTiQlLi9UGBsHagcTFzEVQBgXJBceAy8wJCMVOBMlOJAJFw0FExcNBQAEAAAAAAElAQcAHgAoADUAPgAANzU3Mx8BMxcVMxcPASM2NzM3IyYnPwEzNSMvASMVBhcUBiImNDYyFhUzFA4BIi4BND4BMh4BBzI2NCYiBhQWEwleBhFsChUJMglGBwUzLWwGCAMGVWcHEFAKVREXEREXECYSHiMfEREfIx4SQhQbGycbG7dGCgMQCi4MhAYICnEHBgMDJQMQMQVXDBAQGBAQDBIeEREeJB4SEh5BHCcbGyccAAAABAAAAAABGgEHABwAJgAzADwAADczFxUHIzY3MzcjFSYnPwEzNyMvASMVBgc1NzMXBxQGIiY0NjIWFTMUDgEiLgE0PgEyHgEHMjY0JiIGFBaRfwkJbAcFVgF3CAkHBnoBegcQUAoJCV4HEBEXEREXECYSHiMfEREfIx4SQhQbGycbG/QKuwkICoQBBgQGAxMDEDEFB0YKA50MEBAYEBAMEh4RER4kHhISHkEcJxsbJxwAAAAAAwAAAAAA9AD0AAQADgAYAAA3IzUyFicVMh4BFTM0LgEHFTIeARUzNC4BXiYQFiYuTi0TM1YzGisZEx8zOCYWrBMtTi4zVjNLExkrGh8zHwADAAAAAAEaAPQACQAOABIAADcXMzc1LwEjDwEXJzczFyczFwcTfA58Pgd8Bz6DbzV0NW8yIlSlfHwOPgMDPnZvNTUiIlMAAAADAAAAAAEgARoABQAIABIAABMHFRc3NQc1HwEzFwcnFSM1BychDg6ppI4wDS8NHxMfDQEZCOEHcBBnvl8LLw0fZmYfDQAAAAAFAAAAAAEXAPgABgAQACAAMgA5AAA/ATUnFRcHJzcXFQc1NycVIxcmDgEeATY3MTY1NCcxLgEHNhcxFhceARUxFg4BLgE3MTYXByMnNxc3n3eahmNqDp9DLoYSIRgmDhEpLhAPEwgVLQ0TEQ0GCAEWIx4PBgVKIw0RDAwdL1AOZxVZQqwHag4tFR9ZQA4BGS0sFwgTFBYbFQgKGAoBAg0GEwsQHQgSIBIREyMRDQwdAAMAAAAAARYBBwAFAAgADwAAEwcVFzc1BzUXBzc1JxUXBzQODqmlj1akpI6OAQcI4QhwEGe+X3VtEG4XX18AAAADAAAAAAEgARoABQAIABIAABMHFRc3NQc1HwEjJzcXNTMVNxciDw+ppY49DS8NHxMfDQEZCOEHcBBnvl+OLw0fZmYfDgAAAAAEAAAAAAEWAQcACQAcAC4ANQAAPwEXFQc1NycVIwcmBgcGFhceATY3MTY1NCc1LgEHNhcxFhceARUxFg4BLgE3MTYXByMnNxc3Xg6pbFaOEwMZKAgEAgQJKzEREBQJFjAOFBIOBwgBGCQgEAYFTyUOEg0MH/8IcRBIFzlfRA8BGhkMGAwWGQoTFRceFQEICxkKAQINCBQLER8IEyETExUlEw0MHwAAAAAEAAAAAAEWAQcACQAcAC4AOgAAPwEXFQc1NycVIwcmBgcGFhceATY3MTY1NCc1LgEHNhcxFhceARUxFg4BLgE3MTYXJwcXBxc3FzcnNydeDqlsVo4TAxkoCAQCBAkrMREQFAkWMA4UEg4HCAEYJCAQBgUsFgwXFwwWFwwXFwz/CHEQSBc5X0QPARoZDBgMFhkKExUXHhUBCAsZCgECDQgUCxEfCBMhExMXFwwYFwwXFwwXGAwAAAAABAAAAAABGgEaAA8AGAAcACYAACUvASMHFSMHFRczNzUzNzUHIzUzFTM1MxcHNTMVFyM1LwIjNTMXARYcBqAJLwkJvAkvCUuoEnEPFl0lcSYDHAZekhf6HAMJLwm8CQkvCaDOqDk5Fg8lJUteBhwDJhcAAAAFAAAAAAEaARkAFAAYACAAIwAnAAATHwEVIwc1JyMVIzUjFTMHIyc1NzMHMzUjHwEVDwEnPwEPAT8BFzcnzx8GCgkfBnElOAouExOcPyYmehxyOQwccmcKEwMPYQ8BEx8OBgkPIEtLvBISvBNLOTkcDXIcDThyhxMJHQ9hDgAAAAMAAAAAARoBGgAJABIAFgAAEx8BFQcjJzU3MwcVMzUnIxUjNTMVMzX6HAMJ9AkJ2M7hFyKDSyYBFx0G2AkJ9AkS4coXS0s5OQAAAAAGAAAAAAEaAQcAAwAHAA4AFQAcACMAADczNSMXMxUjJyM1NzMVIzcVIzUjNTMHMxUHIzUzIzMVIyc1Mzi8vCZwcDgTCUI48xI5QgkSCUI54ThCCRNLliVLS0EKEwlBOBOWQgkSEglCAAYAAAAAARoBGgAGAA0AFAAbACMAJwAANyM1MzUzFTc1IxUXMzUHFTM1MzUrARUzFTM1JzcHIyc1NzMXByMVM0IvJROpEwkvOBMlL9clEwmfCYQJCYQJJUtL4RMlLwolLwkTsi8lExMlLwkcCQleCQkcJgAAAwAA//8BLAEQABIAHwAvAAATIg4BFRQWFwcXNxYzMj4BNC4BBzQ+ATIeARQOASIuARcHIyc3FzczFzczFxUnByOWFycWDAtFDUYVGhcnFhYnWRIeJB4SEh4kHhJVKA4cDRYoDSkoDR8lKQ0BEBcnFhEeDEUNRg4XJy0nF1QRHhISHiMeEhIegigcDRUoKCgfGiUoAAQAAAAAARsBHwAcACkAMgA6AAA3DgEXFhcGFxUnByc3LgE+AR4BFRQHJic1NC4BBhc+AR4CDgIuAjYXFjcWNycGFRQ3FzYnNiYjImwTCQsIDwIBCUcORxcFJEFCKQEICR0vMicQKSQWAxIiKCQWAhESERcSD08KGE4LAQEhGBLuEzUYEgwJCQMGRQ1FGUU6GRM3IwcIBwYCGioUCmQLAxIhKCQXAhEiKCRbEQEBC04OEhhGTw8SFyEAAAAAAgAAAAABLAEtAA8AHQAAEyIOARYXBxc3HgE+AS4BIxUiLgE0PgEyHgEUDgEjvx8zGQkUZA5kG0M4FhQ3IRcnFxcnLiYXFyYXASwhODwWcwxyFQImQEEouxYnLicWFicuJxcAAAIAAAAAARoBEAAGAA0AABM3FxUHJzcXBzcnHwEVEw74+A4dFBjR0RhlAQgIcBFwCG8JV2JfVgISAAAAAAYAAAAAARwBGgADAAcACwAdACEAKQAANzMVIxUzFSMVMxUjFyE3MzU0PgI7ATIeAh0BMwczNSMXJyMVIzUjB3FLS0tLS0ur/vQYIwMFBwRwBAcFAyOmcHCmDhWWFQ70E14SExNLXqkDBwUDAwUHBKgmz/Q4JSU4AAYAAAAAARoBBwAMABAALgA3AFUAXgAAEzMXFSM1IxUzFSMnNRczNSMXNSYnByc3JjcnNxc2NzUzFRYXNxcHFgcXBycGBxUnFBYyNjQmIgYXNSYnByc3JjcnNxc2NzUzFRYXNxcHFgcXBycGBxUnFBYyNjQmIgYc9AkS4YONCRPh4V0FBBEKEgEBEgoRBQQTBQQSCRIBARIJEgQFFwgLCQkLCWUFBBIJEQEBEQkSBAUSBQQSCREBAREJEgQFFwgMCAgMCAEHCno5hBIJzi8mqRUBAwoRCgUFChAKBAEVFQEEChAKBQUKEQsEARUvBggIDAgIbRQCAwoQCwUFChAKAwIVFQIDChAKBQULEAoDAhQvBgkJCwkJAAAGAAAAAAEHARoABwAbACMANwA/AFMAADcnNTczFxUHJyMVIzUjFSM1IxUjNSMVMzUjFSMHJzU3MxcVBycjFSM1IxUzNSMVIzUjFSM1IxUjFzc1JyMHFRc3NTMVMzUzFTM1MxUzNTMVMzUzFS8JCc4KCkETExMSExMTvCYSjQkJzgoKjBMTE7wmEhMTExKMCgrOCQkJExMTEhMTExImzgo4CQk4CjkTExMTExMmJhODCTgKCjgJOBMTJiYTExMTE4MJOAoKOAkTJRMTExMTExMTJQAAAAQAAAAAASwBLAAXADcAQwBOAAA3FxUHFwcnByMnByc3JzU3JzcXNzMXNxcHNzUvATcnBy8BIw8BJwcXDwEVHwEHFzcfATM/ARc3LwE2MzIWFRQOAS4BNhcWMzI2NC4BDgEW+DQ0HissCzwLLCodNDQdKiwLPAssKzEyMgccESsRChkKECsSHQcyMgcdEisQChkKESsRHGALDRIZFB4bCwgZBgYJDAkPDgYFvws8CywqHTQ0HissCzwLLCseNDQeK2wKGQsQKxIdBzIyBx0SKxALGQoQKxIdBzIyBx0SK0sHGRIPGAYOHR0tAwwRCwMHDg8AAAAEAAAAAAEHAP4AGQAjADwARgAANzIWFzMyFhQGByMOASImJyMiJj4BNzM+ATMXIgYUFjI2NCYjNzIWFzMyFhQGByMOASImJyMiJjQ2NzM+ARciBhQWMjY0JiNxDBUDaAQGBQNqAxUZFQMdBAYBBAMfAxUMAQgLCw8LCwhMDBUDHQQGBQMfAxUZFQNoBAUEA2oDFQ0ICwsPCwsIehAMBgcFAQwQEAwFCAUBDBATCw8LCw8LlhAMBQgFAQwQEAwGBwUBDBATCw8LCw8LAAAFAAAAAAEZARoADAAlAD0AQABCAAA3IwcVFzM3NSMVIzUzFyM1NDY3NTQ2Mh8BFQcGIiY9AQYHBg8BIzciDgEPATM2NzY3NjMXFBYyPwEnLgEGFQcyMCMxXkIJCc4KE7s4ExMqIQ8VB0VFBxUPFQoEAgETTBQhFQEBBAUKDxcJCQEDBgJERAIGAzkBAeEJvAkJOC+pcC8hNAYYCg8ISRlJCA8KFAURBwoGehMgEyEPCw8EASgDAwJJSAIBBAOiAAADAAAAAAEaARwAJABFAFEAADcuBTc1NzI+Ajc2NzYXFhcWFx4DMxcVFA4EBycVFB4DHwE2Nz4EPQEjJicmLwEmJyYHDgMHFz4BLgEiDgEWFwczmw8cGhYRCgEJChARDwcLDBITDAsGBQgPERAKCQkRFxkcD2wIDxUYDRYMCw0YFQ4JCwkKFBEJCAoODwkRExMKaAkKBBAUDwQJCgglGAkTFhkeIxI8CQIDBgUHBAUDAQYDAwUGAwIJPBIjHhkWEwnRMxAdGxcVCA8HCAkUFxsdEDMBAgQLBQQCAgQDCwgEAVEEEhMNDRMSBDEAAAMAAAAAARsBBwAVABkAIwAANzUXNScjBxUfATc1Mzc1BxUjNS8BMwcnNR8BMxUjFwcnNTcXzxIJqQkGXgxCCRI5BkSDTEtLOl1cHg4uLw3lARMqCgrKCSAJEwkqEw6cCBjUGa0ZLhMeDS4NLw0AAAADAAAAAAEbAQcAFwAbACUAADcVNzUnIwcVMRUfATc1Mzc1JxUjNS8BMwcnNR8BIzUzJzcXFQcnzxIJqQkGXgxCCRI5BkSDTEtLe15dHg0uLg3lHRMiCgoJwQkgCRMJIhMsnAgY1BmtGUATHg0uDi4NAAAAAAUAAAAAAR0BHQAMABkAIgArADgAABM+AR4CDgIuAjYXHgE+Ai4CDgIWNxQGIiY0NjIWFxQGIiY0NjIWByImJwceAT4BNycOAU0dRz8oBCA7RT8oBB4pGTw2IgQbMzs2IgQaPAsQCwsQC14LEAsLEAtCEBoIEAolKiMJEAccAQMUBR87RkAnBB48RT+3EAUbMj02IQQbMjw1XwgLCxALCwgICwsQCwtTEA0JEhUBFhMIDhEAAAMAAAAAARoBGgAIADEAWAAANxQGIiY0NjIWJyIGFRQXByMVMxUzNTcWFzMVIyIGFSIGHgE7AT4BNCYjNCYjNTQuASMHNDY7ATIWHQEXMzIWHQEzMhYUBisBIiY0NjsBNTQ2OwE3NScjIiaWBQgGBggFLxMcCBUiHRIVDA4cEhAWEBYBFRCpDxYWDxYQER8RQhAMJhMbCgkICxMICwsIqQgLCwgTCwgcCQkmDBDqBAUFCAYGKxsUDgsVExwhFQcBJRYPFiAWARUgFg8WQhEfES8MERwTSwoLCBILEAsLEAsTBwsKOAkRAAAHAAAAAAEaAQcACgAOABIAGgAeACIALAAAEwcVMzUzFTcXNScHMxUjByMVMycHFRczNzUnBzUzFScjFTM3IxUnBxczNycHgxIShAMPEnEmJjgmJjgTE4MTE4ODEyUlXhMWDSYNJg0WAQcTODguAw86EyYlOSVLE14SEl4TcV5eOSaWSBYOJiYOFgAAAAQAAP//AQcBLAAsADUAPgBHAAAlNC4BDgIeARcOASsBIgc1PgEuASIOARYXFQ4BHgI+ASYnPgE7ATI2Nz4BJzQ2MhYUBiImFxQGIiY0NjIWNyImNDYyFhQGAQcOGBoWCQQSDQUSCyUWEBIVAxskGwMVEhIWAxkkHAYSEgUSCyUSHQYRGM4QGBAQGBA4EBgQEBgQZwwQEBcREcUNFwwCEBkaEwQKCw9bAx0kGBgkHQNyBBwkGQIWJB4FCgsVEQIbSQwQEBcREcIMEBAXERFuERcQEBcRAAAAAAIAAAAAARoBGgAsAFcAADcWMjY/AT4BPwE+Ai4BLwEuAS8BLgIOAQ8BDgEPAQ4CHgEfARYXFh8BFhcWMjY/AT4BPwE+Ai4BLwEuAS8BLgIOAQ8BDgEPAQ4BFBYfAR4BHwEWZQUNCgIIBA4KGgUGAwIGBxkKDwMJAgkJCQYCCAMPCRoFBgMCBgYaDAkEAwgCeAQKCAEFAQcFDgUFAQMFAw8EBwEFAgYIBgUCBAIGBQ4FBQUFDgUHAQUBYQMHBhoKDgQIAgYJCQkCCQMOChoGBgIDBwQaCg4DCQEHCQkJAggECwYHGgZPAwUFDgUHAQUBBwcHBQEFAQcFDgUFAQMFAw4FBwEFAQgKCAEFAQcFDgUABAAAAAABGgEaACwAQABrAH8AADcWMjY/AT4BPwE+Ai4BLwEuAS8BLgIOAQ8BDgEPAQ4CHgEfARYXFh8BFj8BFx4BHwEHDgEPAScuAS8BNz4BFxYyNj8BPgE/AT4CLgEvAS4BLwEuAg4BDwEOAQ8BDgEUFh8BHgEfARYvATc+AT8BFx4BHwEHDgEPAScuAWUFDQoCCAQOChoFBgMCBgcZCg8DCQIJCQkGAggDDwkaBQYDAgYGGgwJBAMIAgcKCAUVDhoaDhUFCQkEFQ4aGg4UdgQKCAEFAQcFDgUFAQMFAw8EBwEFAgYIBgUCBAIGBQ4FBQUFDgUHAQUBDQMDCQ0DAQEDDQkDAwkNAwEBAw1hAwcGGgoOBAgCBgkJCQIJAw4KGgYGAgMHBBoKDgMJAQcJCQkCCAQLBgcaBocaGg4VBAoJBBUOGhoOFQUJCQUUyAMFBQ4FBwEFAQcHBwUBBQEHBQ4FBQEDBQMOBQYCBQEICggBBQEHBQ4FMgEBAw0JAwMJDQMBAQMNCQMDCQ0AAwAAAAABGgEaAAcACwAPAAABIwcVFzM3NQcjNTMXIzUzAQfPEhLPEoNeXnFeXgEZEs8SEs/Pz8/PAAAAAwAAAAABGgEaAAcACwAPAAABIwcVFzM3NQcjNTM1IzUzAQfPEhLPEhLPz8/PARkSzxISz89eE14AAAAAAwAAAAABGgESAE0AnACmAAA3JiMuASMVDgEHFRYXFhcyMQYHBgcGHQEUFjI3MwYHIw4BFQYWOwEWPgInJi8BLgE2PwEzMhcWFxY2NzY1NCcmJyYHBgcGByYnNTQmJxcWBwYHBisBNDY7ATUmNjcnBgcjIgcGJj4BOwEyNj8BBiYnPgE3MzIXFhcWHwEzNSY2Nz4BNzYXHgEXFRQOASYnJgcOAQcGFh8BHgEHJi8BIgYUFj4BNCYjaAEBAg8KFh4EBREICgEQCggEAwsPBycFAgYRFwEEBH0QHBYJAQENAgcFAwMCAwMDBgcKEgUCDQwRGBoSDQoFBQcPDGQCAgMOCAluCggYARIODAgDPAMCBQUECgcTBAUBBg8cCgQhFQIIBwoQCAYBAwECAQQTDhMQDRECBQcIBAoLBwkCAwcIAgoBBgEHgwQGBgcGBgT6AQkMGQkjFwgKBgQCAgcGCAYHBgcKAwkKAhsSBAUBCxcdEBYRAwgLCQIBAQQCAQkJBgcRFhILDQUDDgsOBwcDCxABuQ8JDggDBwsKDRQBEQMCAQIDCwgFAxgCCQoVHAEDBRULCgEBBxcGDBMCBAkIGwwCBwUCAgIGAwIKBwsXCAMMHg0NDHAFCAYBBQgFAAAFAAAAAAEaARoACQANAA8AEQAbAAA3JwcjFwc3Fyc3BzM3DwI3IwczNxczBxcnBze0Hh5lUh9QUB9S7VIYGBAYqlJSLA4OLCQOJCQOt2JiQGQ+PmRACU9PNFCEES0tHC0cHC0AAQAAAAABGgEaAAkAADcnByMXBzcXJze0Hh5lUh9QUB9St2JiQGQ+PmRAAAAEAAAAAAEaARoACQAPABAAEgAAPwEXMwcXJwc3Jx8BJzcjJzUXI3geHmVSH1BQH1KDJA4kLA5qUrdiYkBkPj5kQEccLRwtM08AAAAAAwAAAAABFgEbAAMAGQAsAAA3MxUjNx4BFxYVFAcOAQcGJy4DNzY3PgEXNjc2JzQmJyYnJgYHDgEWFx4BcUtLMBYpECYeDyYWMCcUHhADBw8mEishJhkZAhEPHSYTJg8gFyEiECa8S6gBFBApNysnEhcECRYLIiouFS4ZDAz0CR8iJRcqEB0DAQkLGE5IEwoGAAAAAAUAAAAAARoA9AAJABMAHAAlAC4AADczNSMHFRczNSM3IxUzFSMVMzc1BzI2NCYiBhQWNxQGIiY0NjIWFzI2NCYiBh4BJhIcCQkcEuocExMcCbsICwsQCwtTCxALCxALJQgLCxALAQrhEwqoChOpE5YTCqhnCxALCxALEwgLCxALCxsLEAsLEAsAAAAAAgAAAAABGgEHAAkAEwAAEwcVFzM1IzUzNRc3NScjFTMVIxUcCQkvJSXFCQkvJiYBBwrOCRK8E+EJzgoTvBIAAAIAAAAAARoA9AAHAB8AAD8BMxcVByMnNyMVIzcnBxUXNyczNTMnNxcVByc3IxUzEwn0CQn0CfRxTCcNODgNKE1JJw03Nw0nSXHqCgqoCgqfQScNNw43DSgSKA03DjcNJ0EAAAAEAAAAAAEUARoAIAAkACgALAAANzM3NScjByM1NzUnIwcVFzM3FRczFRczNzUnIwcjNTMVNxcHJx8BBy8CNxfVDTIZDSJeIyYNSyUOFQlYGA4yGQ0jXk84DCUMJQwlDJAYPRl2Mg0ZIhgiDiVLDSYWbQkKGTIOGSNLCSoLJgw4DCYMeBk9GAAABwAAAAABGgEaABkANQA+AEcAUABZAGIAABMiDgIdAR4BPgEeAg4BFhczMj4BNC4BIwcjLgE1Jjc2NCYiBwYnIiY9ATQ+ATIeARQOASM3FAYiJjQ2MhYXFAYiJj4BMhYnMjYuASIGFBY3FAYiJj4BMhYXFAYiJjQ2MhaWGjAlFAETGhQcFAEUAw4PCyM9IyM9IwEKBAUCCA8fLBAHCgIEHzM9NB4eNB4SCxALCxALOAsQCwEKEAuDCAsBChALC4sLEAsBChALEwsQCwsQCwEZFCUwGggODQQTARQbFRwVASQ8Rzwk9QEEBAwIECsgEAgCBAMHHzMfHzM9NB68CAsLEAsLiwgLCw8LC1YLEAsLEAsTCAsLEAsLQAgLCxALCwAABAAAAAABGgD0AAMABwAPABMAADczFSMXIxUzJzczFxUHIyc3FTM1S5aWlpaWzhPhEhLhExPhvBMmEnATE5YTE5aWlgAGAAAAAAEaAQcADAAVABkAHgAiACYAAD8BMxcVByM1MzUjFSMXNScjBxUXMzcnFSM1Nyc1MxUnMxUjByMVM4MTcRISS0txEyYTcBMTcBMTcIsIS0tLSyZLS/QTE14TE144ORMTE14SEl5eXhMICxM4E10TAAcAAAAAARoBBwAMABEAGgAeACIAJgAqAAABIwcVMzUzFSMVMzc1BzMVIycHIwcVFzM3NScVIzUzBzMVIxUzFSM3MxUjAQdxExNxS0sScEtEByZdExNwExNwcF5LS0tLcUtLAQcTODheExNeOBMHBxNeEhJeE3FeExITE5YTAAAAAgAAAAAA7wEaAAsAEgAAEzczFwczFwcnNyMnFwc3IzcjB4sRPg8pIQ6GHigXEUc2hUU+PkABDwodQCCJFkgbCWOJXoQAAAAABAAAAAABGgEHAAsADwATABcAACUnIw8BFR8BMz8BNQcnNRc3JzcfAQc1NwEPXhGDCgpeEYMKoFRUCVd9Vwd6etgvQhFUES9CEVSRKkYmECc/LFc9STkAAAMAAAAAAQcBGgAJAAwAEwAAJS8BIwcVFzM3NQcjNQc1MxUXMxUBBD4GkQkJzgoTOIRxCULZPgIJ9AkJtgQ54eFCCZYAAgAAAAABGwDiABcAIQAANyIGByMuAQ4BFB4BNjczHgI+Ai4CByImNDYyFhQGI9gZJQM6BBcdEhIdFwQ6AhUfIhwPAhIdERQbGycbGxPhIBgNEAMVHRUEEA4RGw4EEx4jHBFwGycbGyccAAAABQAAAAABGgDrABIAJQA/AEoAZQAANxY+ATc2JzYnLgEjIgc1IxUzNTc2FzYXFhUWBw4BJwYmNzUmNzYnDgEPARU3NjcyFhUHDgEUFjMyPwEVMzU2JhcUBiMiJjQ3Nj8BFxY3Fj8BNQcGIiY0NhcyHwE1JyYiBgcGFBcWhwoUEgYNAQEMBhAJEAwTExAFBgsGBwEJAwkGCw8BAQgEUAkRBwIICw8HCRcOFRMOCwkGEQETAQ8LBgkECAoTnAgKDgwDCQkXEBINCggIAwoWEwcPDgZfBgEICBEWFA8HBws0jwZMAwEBCQoNDw0EBgEBEQsLDAoEFgEFBQEXBwoBDAgEARIaEgYFCT8QFzkNEQgMBAUBAy8EAQEIARYGBxQcFgEFBRYBBQgHESoQBwAACAAAAAABGgEHAAMABwALAA8AEwAXABsAHwAAJSM1MwcjFTMnIxUzFyMVMycjFTM3IxUzJxUjNRcjFTMBGV1dEiYmS6mpJc7OXnBwll1dg4NwXV3hE0sTExNeEksTExOpOTkTEwAAAAAEAAAAAAEHARoACwAPABMAFwAANycjDwEVHwEzPwE1Byc1Fyc3FwcXBzU3/V0TXgkJXhNdCnpVVVBZWVleVFThODgQcRA4OBBxozJhLkE1NTFDMmUuAAAABQAAAAABHAEaAAgADAAQAB0AKQAAEzMVFhc1IxU3FycHMyc/ARc3PgEeAg4CLgI2Fx4BPgImJyYOARZLlgoJvBMoFUuWdiALKyoPIyAUAhAeIh8UAg8ZChkXDgIMChAmFggBB0sBBGKfISolgxM4E0t4CgIPHiMgEwIQHSIgVAcCCxUaFgcLCCAmAAACAAAAAAEHAQcARgCNAAA3NSMiDgEHMQYHMQYXFRQHMQYHBisBFTMyFxUWFxUWFzEWHQEGFxUWFzEeAhczNSMiLgI9ATQmJyYnNjc+AT0BNDY3NjMXFTMyPgE3MTY3MTYnNTQ3MTY3NjsBNSMiJzUmJzUmJzEmPQE2JzUmJzEuAgcjFTMyHgIdARQWFxYXBgcOAR0BFAcOASNxAgkRDAMDAQEBAgQKBQYBAQYFBQMEAgIBAQEDAw0QCQICBgoHBAICBQkJBQICCQcFBk0BCRANAwMBAQECBAoFBgICBgUFAwQCAgEBAQMDDBEJAQEGCgcEAgIFCQkFAgIIAwoG9BMHDQgICAgIEAYFCgUCEgIBAgMBAwUFBhAICAEHCAgNBgETBAgKBhkGDAULBwcLBQwGGQkNBAK8EgYNCAcJCAgQBgUKBQISAgECAwEDBQUGEAgIAQcICA0HARIECAoGGQYMBQsHBwsFDAYZDAgEBAAAAAIAAAAAARoBGgAbAB8AABMVMxUjFTMVIxUjNSMVIzUjNTM1IzUzNTMVMzUHFTM1zktLS0sSSxNLS0tLE0tLSwEZSxJLE0tLS0sTSxJLS0tdS0sAAAgAAAAAARoBHAAOABkAHQApADUAQgBPAFMAABMWFxYUDgEjIiY1NDY3Nhc2NzQuAQ4BFB4BNwcXNxczFTMVIxUjNSM1MycXBxcHJwcnNyc3FzcuASIOAR4DPgIHBgcGJy4BPgIWFxY3IxUzNgoEAgYMCAoPCAcKBAYBBQYGBAUGTGQNY1MSLy8SLy9sDSEhDSEhDSEhDSE6AwwQDQUBBwsNDAcBEQEEBgUCAgEFBgUBBY1LSwEXBAkFDAsIDwsHDQMEJQMHAwYCAwUHBQIiZAxjhy8SLy8SJQ0hIQ0hIQ0hIQ0hcAcJCQ0NCgYBBwoNCAQBAwUBBQYFAQICBTQTAAADAAAAAAEZAOEAGwAiACkAADcjNTQmKwEVFBY7ARUjNTMyNj0BIyIGBxUjNTMXJzcXFQcnIyc3JwcVF84SBgQTBQQKOQoEBRIEBQEScDccDiIhDqccGw4hIrwJBAVnBAUTEwUEZwUECSVMHA0iDiEOGxsNIQ4iAAACAAAAAAEaARsAHwBDAAA3Ii4BNzY3JjQ3Njc+AR8BBxc3FxYUBgcGBw4BJwYHBjciBwYHDgEfAQcGBwYeAjI3Nj8BFxY2NzY3PgE1NCcHJzcmNQ4TAggjQAUGChURKRIMNhc4BQYMCwYIECUSRCAJiRIQBgUOBwgDBEQjAwEHBggDHkkFBQ8gDgYFCQkBMTAwBhMTGQomPg4eDhgNCwQIBTgXNgwPIB4LBgULBAdFHgj1CwMFDiYSBgRCJQULBwIDG0sEAgcDCQMFCRcNBgYwMDEBAAIAAAAAAPQBGgAHABsAABMHFRczNzUnBzUzFSM1MzUjNTM1IzUzNSM1MzVLExOWExOWlpYmJktLJiZLARkS4RMT4RIlE+ESEyYSJhMlEwAACAAAAAABGgEaAAkADQARABUAGQAdACEAJQAAEwcVMzUzFTM1JwM1MxU3IxUzNzMVIzcjFTM3MxUjMzUjFSczFSMvCRLPEgnqEiYTExMSEjgTExMSEl0SJhMTARkJ2M/P2An++hMTExMTExMTExMTExMTAAAHAAAAAAEaAQcABwALAB8AKQA2AEAAUgAAEwcVFzM3NScHNTMVJzM1NCMiBgcVNjIVBwYVFBYzMj8BFRQGIiY1ND8BFyMVIzUzFzYyFhQGIicVFBYyNjQmIgYXMjc1BiImNDYyFzUmByYGFBYmExPhEhLh4aMNEgQJAwcPDA4HBggEAQUGAwYHKwELCwEEDggJDgQEBwQDBwVFCQUFCwcHDAQECAsODQEHE6kTE6kTvKmpOiAXAwIMBQkBAxAHCQkSBAQHBAIHAQEUBkofCQ4YDxwFBAcIDgcIIQMOBAgOCQQOAwEBEBoPAAAAAAYAAAAAARoBBwAHAAsAEwAYACAAJQAAEwcVFzM3NScHMxUjBzczFxUHIyc3IxUzNTM3MxcVByMnNyMVMzUmExPhEhLh4eETEzgTEzgTJRI4XhI5EhI5EiUTOQEHEzgTEzgTEzhLEhI5EhI5OTkSEjkSEjk5OQAAAAYAAAAAARoA4QAJABMAHwAjACcAKwAANzM1IwcVFzM1IzcjFTMVIxUzNzUHFxUPASMvATU/ATMHFzUnNxc3Jwc3NQcmJS8JCS8l6i8mJi8JPAQGVAkuBQZUCVAcHAsbPxsbQkLOEwmWChOWE4MTCpYnCC8JJRwILwgmVxEZEQ8QHBBXHRodAAADAAAAAAErAQgAEQAjACcAADcnPgEeARc3FwcjJzcXLgIGHwEGLgInByc3MxcHJx4DJzcXB2cPGj02IAEXDicPJw8XARosMUAPGjoyHgEXDycOKA8WAhgnLpIN3w3nDREDHDMfFg4nKA4XGCoYAbMNDgEdMR0XDicoDhYXJxcDvg3QDgACAAAAAAErAQ0AEQAjAAA3Byc3MxcHJx4CNjcXDgEuATcnBxczNycHLgIGBxc+AR4BJhcPJw4oDxYDKT05Dw8TRUkwzRcPJw8nDhcBLkhFFA8QOjwnkRcOJygOFh8vDRocCyEeETovFw4oJw4WJToTGyALGxgQMAALAAAAAAEHAQcABwALAA8AEwAXABsAHwAjACcAKwAvAAATIwcVFzM3NQczFSMXIzUzHQEjNSczFSMVMxUjFTUzFTM1MxUzIzUzNSM1Myc1MxX94QkJ4Qrhzs6DODg4Szg4ODg4EzhLODg4ODg4AQcKzgkJzgkTOCU4JSU4JRMlOSYmJiYmEyUTJSUAAAMAAAAAAScBBwARACMAMAAAEyMPARUXMzcWMj4BPwE0Jic1ByYjIgYUFjMyFxUHBg8BJzczFx4BFQYVDgMnPwH4YgZ9YQ0qEiolFwIBFBETDg4EBQUEDw1JAwIlVHNUEwkKAQIRGx4ORQMBBwN9DWIqChQiFQoVJQwqIQUFCAYGKEoBAyZUdDkKFw0FBQ8ZDwIGRQcAAAAABQAAAAABGgEaAAgAFQAeACsAOAAANzI2NCYiBhQWNxQOASIuATQ+ATIeAQcyNjQmIgYUFjcUDgEiLgE0PgEyHgEHMj4BNC4BIg4BFB4BlggLCxALC1MUIygjFBQjKCMUSxchIS4hIZojPEg8IyM8SDwjgx8zHx8zPjMeHjODCxALCxALExQjFBQjKCMUFCNMIS4hIS4hOCQ8IyM8SDwjIzyUHjM+Mx8fMz4zHgAAAAAEAAAAAAEaARoABgAKAA4AEgAAPwEnBycHFzcjNzMHMxUjFyMVM0NrDWQcDiLkmStuqKioqKiorl0OViIMKh8mSyYlJgAAAAAFAAAAAAEGARoAEwAXABsAIAAqAAATHwEPAS8BBy8BBy8BPwEnPwEnNwcXNyc3FzcnNxc3Jw8BFyMnFSM1ByM30wsnBD4LA0MKAzALDgUvAwRDAwVnBioHChU4FAojKyEuBTkWIxMjFSABGQRdCxoECBwEBxQFHwsUCAodCAtiEBEQFy4YLRhNE00Tc1s4S2FOSQAABAAAAAABEgEjABcARwBRAG4AACUnJiIPAQ4BHQEUFh8BFjI/AT4BPQE0JgcVFA8BBj0BBiciNTc0NzMWNzY0IiY1NDc1ND8BMh0BNhcyDwEUBzEmBhUUFjMyFDcUIwcjNTQ/ATE3Bw4BHQEUFyMiLwEuAT0BNDY/ATYyHwEWFy4BBwEAWQgSCFkICQkIWQgSCFkICQlNAQUBBQUBAgEBBQQHDQYKAQUBBAQCAQIBBQoEBAwkARYBARYQVAkJCAUHB1kGCAgGWQcPBlkLAgIJBuk1BQU1BRAJagkQBTUFBTUFEAlqCRCfCAEBAwECCAMCAQcBAQECAw0EBw0ICAEBAwEIAgECBgEBAQUHAgIaBAEOBgEBDXw0BQwJZwsDAzUEDgdqBw4ENQMDNQcNBAIDAAcAAAAAASwBGgADACAAJAAoADAANAA4AAA3FyMnByIOAhQeAjI3FwYjBiIuAjQ+AjIWFwcuARczFSMVMxUjNyEHFRchNzUHITUhNSE1IcwmDiVTCAwKBQUJDBIJAgQFBxAQDAcHDBISCgICBAklExMTE43+5gkJARoJE/76AQb++gEGqV5eCwUJDxANCQUDCQICBgwRFBEMBwICCQICCBMSE7sJ9AkJ9OqoEyYAAAAAD///AAAA8gEtAAQBFwEaAS0BNQE7AUoBUAFSAVcBXgFjAWQBbgF0AAATIisBNxc2NQc2PQEjLgEnLgEHPgEnDgEHBgcGMzcwByMOAQcUNjEHJgcGBzMGBzEGFQcGFRQXBxcjHgMXJicUFhcHFh8BJhcWHwE3BhczHgEzBxYXMxYXJxceAhcjJicuAjcmNzQnNTY3NTEWPwE2NzM2NzY3MTY3FTY3Nj8BBjM3BzYXMTIzBwYxFjcxNhcnFxYXMjcxNhcVFhcyJzEeARcmMRUWIxYXNSYnFCMxJgYXFjcxNDEXFh8BIicxJhUeARUxIhUUFjczBwYXJxQVMRYHNjQHFgcxBhUnBhYHNjUxNDciDwEOASc0JyYnJjc2NzY3PgIWFy4BDgEXNzI1FB4BNxU2PwEHBjY/ATY1MSY/AQcwOQEUFhcWNwYuAScyFzEWFyYnFhc3IiMyFiMwJxc0IgcXFAcGBzQmNjcUBzEGFD8BNgcuATcWNycPAhcWFycWHwEnJic3BwYHNicVMDMxMhQPATU2BxQHNTQ3hQQDAg5IAwICAQEbEA0jCQEGAQcIAwYGAQEGAwUFCAUEAggPDQUDAgQFAQIEAQMBAgQFBQQEAgUDAgIDAQQDAgYDAgEIBQEIAwMFAgEDBgMGBQ0OBQQUBxwyHAIBAQEHBwIDAwMBAgEFBAcHAgcMBw0IAQEPBwUEBAUFAgUFBgYBCwoKAgIEBQEIAQUPGgUDAQEEAgYGAwIBAgEBAgEBAQEBAgEDAQIBAQIDAQMBAgECAQUEAwQBAwEBAQUHECYUAhIGCQMCAgMFBBIWEgUJGhgOAQEBFR8OBQMJAQMFDgMBAQIEVAYDCxIJGxgGAQUIBAQGCQsDAQEGAgIENgIBAgMCBAQBBAICBAEDGQUGBAcFGgEnAQMEAwUCAgEBAwGMAQIGB+ACAQEEAgYCAwErAZAIBgUIEAoTJgcGAgQBAQEBAgIEAgEBAgEDBgECAwEPDAkFBwkEDBEIDQUHBwkEAQUJAQQCCQUCAwIBAgYDCAQCBQkDBwQBAgMCBAUGBQICAQIILUAhBgwPAgIWDgECBQUHBAQGBAcGAgMGBwMGAwECBAEBAQEBAgECAwQDBQEBAgEDBAUIHhEEBAULCgEUCQIBAwUCAQEEAgYFAgMBBAYBAwUDAQQJBwgDBAUGBgkDBwoIAwQHBQQCAQECBQcNBQcBAg4LDxcBBgsDBwwBCgcIBAsZDgECERsLBwEBAggCAwENAwICAgMDKQEEAgQBBAYQCgUKAQMICgW7AQF6BgQDAQsHBgEBBAUCAgQBAgEEEwECAQEBmQGfBAQGAxcEAgUCBgMYAg8NDlcBAQMDAQMVBAQCBAQAAAUAAAAAARIBLQBaALEAzwEZAT4AADceAR8BFh8BHgEUDgEPAQ4CBw4BIyImJyYvAiIPASIPAQ4BIiYnJi8BLgI0NjUnNDY3Nj8DJzQ+Ajc+ATUnNDU0PgIzMh4CHQEWFxYfAR4CFRQnMhYfARUPAQYPAQYUFxYfAR4BOwEyPwM0LwIuAS8BPQE0PgEzMhYUBhQXMzI2NScuAiMiBgcXJyYHIyI9AS4CIg4BFQcUHwEWMjY1IyIvASY2BzI+AyYvAi4CBg8BDgIVFxQGFBYfAhYXNzI3Njc2NzU/ATQ+ATc1ND8BNj8BLwEmLwEmNScmLwImIg8BBiImLwEmIh0BBwYHFxQXBw4BHQIyHwEWHwEWHwEUBgceAxcyPgE3Nj8CNj0BLwImIyIPAQYiJi8BBwYHBhUHBg8CFBb5BAUBAgEDAwIDAwYEBwYJCgYEBwQICwQCAQQdBwYNAQEEAwgLCgUJCRkDBQMDAQcHAwIFBwEBBwoMBggJAQULEg0OEgkDAQMDBA4HDAh+AgMBAQEEAQIGAgIDAQQBBgYBBgUOCwEBAgUDBwMBAgMCBQQCAQIDAwEBAwYECAYBAQUCAgICAQIEBgMDAQIBAQICAQEBAgEEHQQGBgMBAgINCgIEBQYDCgMIBQECBQQQCAMFQwQFCQkEBAIFAwYDAQIBAgMFAgICBwEBAgMDAwIFBRQFCQcDBQMCCAMBAQEFBgQDAwcEBAYEAQIFAwIICApAAwcIAwgKCgMBBQMFAwYDAgoDBQUBBAICAQICAQMBAQlbAgcFBgQFBAIGBwUEAQQDBwoEAgMGCAIBAQEBAgIFAgQCAwQCBAEDBggIBQ0HBwIBAgQJAgcKFBMSCAoYDgsGBgwSDgcMExcMDQoJBAYSCRQWDQqPAgEEBAIFAQEFAgMBAgQGAwUDCAgEAgECAQEEAQECBwIDAgcFBAIBAwMHBAgEBwgJAQEBAQYDBgUDBAMFBAMFAQIBAQUEBuQCAwYHBQISEAQGBAECCgMDBAQMBAcHAwEDAQEDDgECBAIDAQgfBAYFAgEBAgMBAQIXBgQCCgICBAcHBwUDAw0CBQQGAwIHDQcIBAICBwgTCQoEAgQDBAgDBAYEBQEEBgQCFQIFBAkFBQICAgIIBQ8EAQYBAwIKAwICBQURCAgFBQcKAAAAAAQAAAAAASsBGgAHAAsADwAVAAATHwEPAS8BNwcXNycXBxc3LwEHFwcXL/QIIgv0CCIO4SDhTQNeAj1FDTI9CQEZAwnyCQMK8egD3wKdEgITLzcPJycPAAAEAAAAAAEHARoABwAMABAAFAAAEyMHFRczNzUHFSM1MxcjNTM1IzUz/eEJCeEKhF1dcV5eXl4BGQn0CQn0cWfPz14TXgAAAAAG//8AAAEcARoACAARAB4AJwA0AEQAADcUBiImNDYyFgcUBiImNDYyFhcuAScGJx4BFxYzJjU3FAYiJjQ2MhYXNjc2JicGBxYHBgcWJyIxPgEXBg8BDgEHJicmI/YXIRcXIRemGCEXFyEYMhYiChESDTEgDg4LYRchGBghFxATBgYKDwYQEQgDCQ7SARJEJgkCARgpDggKBgbzERYWIRYWZREWFiEWFnQEGhMIBB4oBwIOEgEQFhYhFhYCFx0ZMhYRCR8iEA4LfCAjAwoNCAEVEwUCAQAAAAAEAAAAAAEaARoABwALABIAFgAAEzczFxUHIyc3FTM1DwEXBxc3NRUzFSMTE+ESEuETE+GvDTU1DT5LSwEHEhLhExPh4eE5DTU1DT0KMxMAAAQAAAAAARoA4QAHAAoAEgAYAAA3BzM3MxczJwc3FzcjBzM3MxczJzc2Nx8BPywZCSsKGSwbDw6FHj0eDj8OHWQWAgECF6lxHBxxQigoeqkrK0JDBgULQwADAAAAAAEHAPQAAwAHAAsAACUjNTMVIzUzBzM1IwEH4eHh4eHh4c4mcSZxJgAAAAABAAAAAAEaAQcAGwAANyIuAT8BIwYuAjc2Nz4BNzMeAR0BFAYrAQcGZggOBQQSNAcMBwEDIwgDDQinCw8PCxluCCMLEQkpAQYLDgZKFwcJAQEPC0IKD2cHAAAAAAIAAAAAARoBBwAbADYAADciLgE/ASMGLgI3Njc+ATczHgEdARQGKwEHBiciBwYHBhY3MxcVBwYeATI/AjMyNj0BNCYjZggOBQQSNAcMBwEDIwgDDQinCw8PCxluCBgFAgsgAgQFPgkUAQEEBQJyCRkDBQUDIwsRCSkBBgsOBkoXBwkBAQ8LQgoPZwfRBR9DBAcBDAkuAgUDAmgDBANCAwUAAAAAAQAAAAABGgEHABsAABMeAg8BMzYeAgcGBw4BKwEuAT0BNDY7ATc2xggOBQQSNAcMBwEDIwgDDQinCw8PCxptCAEHAQoRCSkBBwsNBkoXBwoBDwtCCg9nBgAAAAACAAAAAAEaAQcAGwA2AAATHgIPATM2HgIHBgcOASsBLgE9ATQ2OwE3NhcyNzY3NiYHIyc1NzYuASIPAiMiBhcVBhYzxggOBQQSNAcMBwEDIwgDDQinCw8PCxptCBgFAgshAQQFPQoUAQEEBQJyCRkDBQEBBQMBBwEKEQkpAQcLDQZKFwcKAQ8LQgoPZwbQBR9DBAcBDAkuAgUDAmgDBANCAwUAAAYAAAAAARkBGgAgAC8AQQBNAFIAaAAAJScHJzcnJiIOAhQXBgcGFhceATMyNzY3NjcWMj4CNAcGKwEiLgI3NjceARcGNxYGIicuATc+AjsBBxUXMzcHMxc3JzcvAQ8CFycXFSMnFzcXFhQHDgEnJi8BNxceAT4CNCYnARUPJxcnAw0bGhQLBTo5BgEIBAkFCQcVJCIaDRwaFAviAQICAgIDAgEqRgMGBEmpASAsDwwGBgQPFAoFIiMNIsocDgwMAQQ2Cw8CIworFByKDToICAYPCAUDOw06AgUFAgEBAesDJxcoDwQLFBsdDTo7CBUHBAUHEyUhGwYLFRoctwEBBAYCLEYEBwNLhRcfDwwgDwoQCCMNIyInDg0NHwgkAg8MNkAdFSx9DTwIFggGAwMCBDwNPAICAgMDBAMBAAAGAAAAAAD0ARoAEwAXABsAHwAjACcAADczFSMVByMnNSM1MzU0NjsBMhYVKwEVMwczNSMXIxUzNzMVIzczFSO8OBMTgxMSOAsIOAgLEzg4XoODJhMTEhMTJhMT9BOpEhKpExMHCwsHE7ypE4ODg4ODAAAAAAEAAAAAAQcAzwAFAAA/ATMXByMmB9IIahDECgpmAAAAAQAAAAAAzwEHAAUAABMXFQcnNcQKCmYBBwjSCGoQAAABAAAAAADPAQcABQAANyc1NxcVaAoKZiYH0ghqEAAAAAEAAAAAAQcAzwAFAAAlByMnNzMBBwjSB2kQaAoKZgAAAQAAAAABGgD/AD4AACUOAQcXFAYHDgMiJicWNjciJicmJxcWNy4BJyY1MRYzJicmJyY3NjcWFxYXFhcnNTQ3Njc2MhYXNjcGBzYBGQUOCAEHBwkdJCstKhIVKhAMFwcFAwUKCQkQBgwMDQsHAwIDBAEECg0ZHxAQAQQIFQoWFAgSEAYSEOUIDgYHEB8PFSIYDAwMAgsODAoHCAEBAwIJCA4UBgcMBgYODQcGDAoVCAQBBgYMCRUIBAkIBAkTCgEABAAAAAABBwEaAB4AIgAmACoAADcjJzM3NScjBxUXMwcjBxUXMzc1JyM3FyMHFRczNzUnNTMVBxUjNRcjNTP9ID8UCgpLCQkUPiEJCTgKCgE6OQEJCTgKljheJc4mJl5eCUsJCUsJXgo4CQk4ClZWCjgJCTh6OTmDJSUlJQAAAAAEAAAAAAEHARoAHgAiACYAKgAAEyMHFRczByczNzUnIwcVFzMXIwcVFzM3NScjNzM3NQc1MxUXFSM1NyM1M/04CQkBOToBCgo4CQkhPhQJCUsKChQ/IArhJV44gyYmARkJOApWVgo4CQk4Cl0KSwkJSwpdCjgvJiaDODiDJgAAAAUAAAAAAQcBGgAjACcAKwAvADMAADcjJzUnIzUzNzUnIwcVFzMVIwcVByMHFRczNzU3MxcVFzM3NSczFSMHMxUjByM1MxcjNTP9ISAKHAkKCiUJCQkcCSAiCQkmCSBDIAolCoQTExI4ODkSErwTE0sgRwolCSYJCSYJJQpHIAkmCQkiICAiCQkmxRNLOEsSEhIAAAADAAAAAAEHARoACQATAC0AADc1Byc3MxcHJxUHFScHFzM3Jwc1NxcHFwcjNTMnIwczFSMnNyc3MxUjFzM3IzWNEw0iDiINExITDSIOIg0TYgZFRQZOODg4OjlPBUVFBU85ODg6OLJLEw4hIg0TSzhLEw0iIg0TS2cTNzkTEy0tExM3ORMTLS0TAAAAAAwAAAAAARoBGgAJABMAGwAfACcAKwAzADcAPwBDAEcASwAAExcHJxUjNQcnNxc1IxUnBxczNyc3Iyc1NzMXFSczNSMXIyc1NzMXFSczNSMHIyc1NzMXFSczNSMXIyc1NzMXFSczNSsCFTM1IxUzNigPFxIXDScPEhcNJw0oDU4lCQklCiYTE404Cgo4CTgmJkIlCQklCiYTE404Cgo4CTgmJhMlJSUlARknDRZSVBgNJ+hSUhYNJycNYgkmCQkmChIlCTgKCjgKJZYJJgkJJgoTOQo4CQk4CSYTcBIAAAAAAgAAAAABBwEdABUAGgAANzU0PgEWFzMuAQ4BHQEjBxUXMzc1JwczFSM1XhopIwcUCC44JhMSErwTEyYmvKklFR8HFRMbIAcqHSUTcBMTcBMTcHAABQAAAAABGgEaAAkAEQAeACcALwAANzM3FxUHJyMnNR8BNQ8BIxUzNxQGByc+ASc2JzceAQcUByc2NCc3FgcUByc2JzcWHDRJEBBJNAlIOzsHLi7FDw4ODA0BARkODg8lEw0NDQ0TJggOBwcOCNFIBvQGSAleVzvGOgNLJRcqEg0PJBMnHw0RKxcfGQ0ULxMNGR8QDQ4PEA0NAAAABAAAAAABFQEUABcALwBbAF8AADczNzM3NTc1JzUnIycjByMHFQcVFxUXMzcjNS8BPwE1Mz8BHwEzFR8BDwEVIw8BJzcGDwEjNTY3PgMzMh4CFA4BDwEOAR0BIzU0Nj8BPgE0JzEuAScxJiIGFyM1M5ANIC0KICAJLiANHy8KHx8KLwMpAh0cAykGHB0GKAMdHQMoBxwcFQIBAREBAwIEBwkFCAsIAwQFAwYCBBEEAwsDAwEBAwIDBgYPEBAYIAotIA4gLgkgIAotIA4gLQoTKAccHAcoAxwcAygHHBwHKAMcHHEDAwYBCQcDBgQDBQgLDAkIBAcDBgMJCgUIAw4DCAcDAgQBAgRdEAAAAAYAAAAAASwBGgBCAE4AWgBiAGYAagAANzQ2HwEWMjY/AicuAiIHNTcWHwE3PgMWFRQjIiYiBgcGBxcWHwEWMjc2PwEXDgMiLgEvASYnDwEOAiImFz4BNCYnMxYVFAYHIy4BNTQ3Mw4BFRQXNyEHFRchNzUHITUhNSE1IWUHBAUBAwUDCwYHAQUGBwMbBgMFBQMJCQkGCAMFBgYDBQQIAQECAQQBBQMDAwEGBwgGBQMBBAEBCQYDCAcIBnMHCQkHDRIJCZ4JCRINCAgQz/7mCQkBGgkT/voBBv76AQZUBAUCBAEFAxANGwMFAwEEBQYIEAgGCQYBBAQIAwYEBggiBAMDAQEEBQQCAwgHBgQGAxQEAw8JBQYFBQUKGBoYChUaDhcKCRkNGhUKGQwbFM4J9AkJ9OqoEyYAAAIAAAAAARUBFAAXAB4AADcjJyMnNSc1NzU3MzczFzMXFRcVBxUHIyczNycHJwedDR8vCh8fCi8fDSAuCSAgCi0/DkYNQBoNGCAKLSAOIC0KICAJLiAOIC0KMEYOQRoNAAMAAAAAARUBFAAXAC8ANgAANzM3Mzc1NzUnNScjJyMHIwcVBxUXFRczNyM1LwE/ATUzPwEfATMVHwEPARUjDwEnNzM3JwcnB5ANIC0KICAJLiANHy8KHx8KLwMpAh0cAykGHB0GKAMdHQMoBxwcBA5GDUAaDRggCi0gDiAuCSAgCi0gDiAtChMoBxwcBygDHBwDKAccHAcoAxwcIEYOQRoNAAAABAAAAAABGgD0AAcACwAWACEAADcHFRczNzUnFSM1Mwc1MzUjBxUXMzUjJzUzNSMHFRczNSOWExNxEhJxcakTHQkJHRM4EhwJCRwS9BOWExOWE6mWXksTCYQJEzgmEgleCRMAAAMAAP//AS4BBwASAB8AJgAAEzMXFSYnNSMVMxQXIzUzNSMnNRc+AR4CDgIuAjYXNycHJwcXHPQJCAvgXRNLOGcJpBEoJBcCEiEoJBYDEjgtDycYDCABBwpnBwRTqR8ZExIKu3QMAhEiKCQXAhIhKCRSOww0Ew4aAAUAAAAAASwBBwASAB8AKwAxADcAABMzFxUmJzUjFTMUFyM1MzUjJzUXIg4BFB4BMj4BNC4BByIuATQ+ATMyFhQGJxc3JzcnByc3FwcnHPQJCAvgXRNLOGcJzhQjFBQjKCMUFCMUDxoPDxoPFyEhFRsJExMJMBIIGxsIAQcKZwcEU6kfGRMSCrtnFCMoIxQUIygjFIMPGh4aDyEuIUMbCBMSCC4SCBobCAAAAAADAAAAAAEsAQcAEgAfACsAABMzFxUmJzUjFTMUFyM1MzUjJzUXIg4BFB4BMj4BNC4BByIuATQ+ATMyFhQGHPQJCAvgXRNLOGcJzhQjFBQjKCMUFCMUDxoPDxoPFyEhAQcKZwcEU6kfGRMSCrtnFCMoIxQUIygjFIMPGh4aDyEuIQAAAAADAAD//gEuAQcAEgAuADEAABMzFxUmJzUjFTMUFyM1MzUjJzUXMh4CFx4BBw4CBw4BJy4CJy4BNz4CNzYXJxUc9AkIC+BdE0s4ZwnOChMRDgUHBAQCCg4IDR4PCREOBQcEBAIKDggSOjkBBwpnBwRTqR8ZExIKu2cFCg4IDR4PCREOBQcEBAIKDggNHg8JEQ4FCksmSwAAAAIAAAAAARoBBwAPABMAAAEjBxUXMxUjFTM1IzUzNzUHIzUzARD0CQlnOJY4ZwkS4eEBBwq7ChITExIKu7KpAAAGAAAAAAEsAPQAGQAzADcAOwBHAFMAADczMhYdARQGKwEiLwEmIg8BBisBIiY9ATQ2FyIGHQEeATsBMj8BNjIfARY7ATI2PQE0JiMHMxUjJTMVIycyFhQGKwEiJjQ2OwEyFhQGKwEiJjQ2M0uWFyEhFwcRDw8KFgoPDxEHFyEhFxAWARUQBwwJEA4iDhAJDAcQFhYQ4RMTARkTE58EBQUELwQFBQSWBAUFBC8EBQUE9CEXSxghCgoGBgoKIRhLFyETFg9LEBYGCwkJCwYWEEsPFjg4ODglBQgGBggFBQgGBggFAAAEAAAAAAEHARkABQARAB8AKQAAEwcXNzU0FScmIg8BDgEfATY1NxYdARQHNz4BPQE2JicHNxcHBiIvASY0t08oLIwCCAMNAwEEoQUOBAQ0BAQBBQToFh8bAggDDQMBEkgfITsGmmoCAwwDCQOUBQbhCQnPCQkZAggEpQQIAYEVHBUCAwwDCQAAAQAAAAABBwEaACoAADcGJyYvAQcGIi8BJjQ/AScmND8BNjIfATc+AR8BHgEdASM1Bxc1MxUUBgfMBgYDA2AqAggDDQMDJCQDAw0DCAIqYgQIBDIEBDxJST0FBCcDAwECWCACAwwDCQMhIgMJAwwDAiBZAwECGQEIBFxBODcuSQQIAgAABgAAAAABGgEaAAsAFwAjADAAOABAAAA3MzUzNSM1IxUjFTMXIxUjFTMVMzUzNSM3NSMVIxUzFTM1MzUHJiIPAQYUFjI/ATY0BwYiJjQ/ARc3Byc3NjIWFFITExMTExOWExISExMTHxMTExMSSggXCYwIEBgIjAiiAggGA3kOEwYNBgIIBs4TExMTE14SExMTE5YSEhMTExMuCAiNCBcRCYwIF54DBgcDeQ0TBg4GAgUIAAAABAAAAAABGQEaAAUACAAMABAAABMzFwcjJzcHMyc1IxU9ATMVjhB7CPYIg2vWXxgYARnmDQ3OyRMTEyZLSwAAAAMAAAAAAPQBGgAGABoAJwAANzM1IzUjFScOARQWFxUXMzc1PgE0Jic1JyMHFxQOASIuATQ+ATIeAY0lHBMcFhkZFgpLCRYZGRYJSwp6FCMoIxQUIygjFIMTLzhaDCwyLAwpCQkpDCwyLAwpCQl6FCMUFCMoIxQUIwAAAAADAAAAAADhARoAEQAZAB0AABM1IyIOARQeATsBFSMVMzUjNQcjIiY0NjsBFyM1M+FnEh4SEh4SHBNeEzgcFBsbFBwmExMBBxIRHyMeEl4SEs9eGyccz88ABQAAAAABLAD3AAcAHAAnADcAQwAANTMVITUzFSE3IzUjBiMiJjU0PwE0IyIHNTYzMhUPAQ4BFRQWMzI2NRcxFSM1MxUxNjMyFhUUBiInFRQWMzI2NTQmIgYTAQYT/tSAEAEKFRARIh8WEg8PFCQQGQwLCgkNED8REQwYFBYZKgsQDQ8REBwRXiYmODgQExENHQUEGgwRCSYPBAEICwcKEQ4bD5hDFBsYGh87Dg0SFxURExQAAwAAAAABGgEHAAcACwAPAAABIwcVFzM3NQcjNTM1IzUzARD0CQn0CRLh4eHhAQcKzgkJzsWEEiYAAAAABgAAAAABGgEaAB8ALwBFAFoAegCKAAA3JicmBwYPARU3PgEyFhcHDgIHBhYXFjMyNxUzNTQmBxUUBw4BJy4CPQE0PgEzNy4CIgcGBzUjFTM1FhcWMzI+AjQHFA4BBwYnLgI9AT4DFzYXHgEHPgEyFh8BNScmDgMUHgIyNj8BNQ8BBicuAjQ2NyM1MxcVByMXByc1NxcHM0kEBQkLBwYGBAQLCwUBEgcJBgEDBgkFBQsHEwMPAQIKBQICAQMEA2sBBgsOBQMCEhIDBgIEBwsHBBICBAIGBQIEAgECAwUDBgQBAl4DBggGAwcCCBIOCgUFCQ0OCgQCBgoGBgMFAwTcS1QJCXwnDjY2DiZy6wUCAwIBAwMUAwMFBgYCAQUHBAoSBAIJBzEHCx8FAwMGBQIBAgMCBAEDAhYGCwcEAgMudAUFAQEGDBAQBwcKBgEDAgIEBgQKBAgFAwEBBgIJYAMDAgIFFQEFAQYMDxEOCgYDAgERAgQBAgIGCAsJTRIJcQknDTYNNw4lAAADAAAAAAElAS0AJAA/AEwAABMyHgIXFhcWFxYzFRQOBA8BJy4FPQEyPgI3PgEXLgEnLgEiBgcOAQcVFB4EFz4FNS8BDwEvAQ8BHwI/AZcIDQ0MBwoLFRcMCwsTGR8hEQQFESIeGhMKCxgWFQoMGogVKRIJFhYVCRIpFgoRGBoeDxAdGxcSCTQICFEcCAgCJAQJBFsBLAIEBgQGBQgCAUoWJiMeGxcKAwMKFxseIycUTAEFCQYICDgBDAwGBgYGDAwBORIiIBsYFQkJFBkbICISGQcBYCcCBwczAgECawAAAAQAAAAAASUBLQAkAD8AaQBxAAATMh4CFxYXFhcyFxUUDgQPAScuBT0BFj4CNz4BFy4BJy4BIgYHDgEHFRQeBBc+BTUnHgEUDgEPAQ4BHQEHIyc1ND4BPwE+ATQmJyYiBw4BFQcjJzQ+ATc2FxYHNzMXFQcjJ5cIDQ0MBwoLFRYNCwsTGR8hEQUEESIeGhMKCxgWFQoMGogVKRIJFhYVCRIpFgoRGBoeDxAdGxcRCmAFBgUGBAYDAwMNAwUGBAYDAwMCBQ8FAgMDDQMGCgYODwYeAw0DAw0DASwCBAYEBgUIAgFKFiYjHhsXCgMDChcbHiMnFEwBAgUJBggIOAEMDAYGBgYMDAE5EiIgGxgVCQkUGRsgIhIZBgwOCwgDBgMGBAYDAwYHCwcDBgQGBwYDBQUDBgQCAggNCgIGBgNhAwMNAwMAAAMAAAAAASUBLQAkAD8AUwAAEzIeAhcWFxYXMhcVFA4EDwEnLgU9ARY+Ajc+ARcuAScuASIGBw4BBxUUHgQXPgU1LwEjBycjBxUXBxUXMzcXMzc1JzeXCA0NDAcKCxUWDQsLExkfIREFBBEiHhoTCgsYFhUKDBqIFSkSCRYWFQkSKRYKERgaHg8QHRsXEQpHBwQlJQQIJSUIBCUlBAclJQEsAgQGBAYFCAIBShYmIx4bFwoDAwoXGx4jJxRMAQIFCQYICDgBDAwGBgYGDAwBORIiIBsYFQkJFBkbICISCwgmJggEJSUECCYmCAQlJQAAAAMAAAAAARoBHgAOAB8AKwAANxYGBxcHJw4BLgE+AR4BBzI2Nwc+ATU0LgEiDgEUHgE3NSM1IxUjFTMVMzXiAQ0MUA5PHEg5Exw/RzBkER8MAQwOFycuJhcXJkUlEyYmE7kUJhBPDlAXAitFQiMMNYANDAEMHxEXJxcXJy0nF0sTJSUTJSUAAAADAAAAAAEaAR4ADgAfACMAADcWBgcXBycOAS4BPgEeAQcyNjcHPgE1NC4BIg4BFB4BJzMVI+IBDQxQDk8cSDkTHD9HMGQRHwwBDA4XJy4mFxcmGF1duRQmEE8OUBcCK0VCIww1gA0MAQwfERcnFxcnLScXXRIAAAAAABAAxgABAAAAAAABAAcAAAABAAAAAAACAAcABwABAAAAAAADAAcADgABAAAAAAAEAAcAFQABAAAAAAAFAAwAHAABAAAAAAAGAAcAKAABAAAAAAAKACQALwABAAAAAAALABMAUwADAAEECQABAA4AZgADAAEECQACAA4AdAADAAEECQADAA4AggADAAEECQAEAA4AkAADAAEECQAFABgAngADAAEECQAGAA4AtgADAAEECQAKAEgAxAADAAEECQALACYBDGNvZGljb25SZWd1bGFyY29kaWNvbmNvZGljb25WZXJzaW9uIDEuMTFjb2RpY29uVGhlIGljb24gZm9udCBmb3IgVmlzdWFsIFN0dWRpbyBDb2RlaHR0cDovL2ZvbnRlbGxvLmNvbQBjAG8AZABpAGMAbwBuAFIAZQBnAHUAbABhAHIAYwBvAGQAaQBjAG8AbgBjAG8AZABpAGMAbwBuAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAxAGMAbwBkAGkAYwBvAG4AVABoAGUAIABpAGMAbwBuACAAZgBvAG4AdAAgAGYAbwByACAAVgBpAHMAdQBhAGwAIABTAHQAdQBkAGkAbwAgAEMAbwBkAGUAaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQACAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcsBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswAB2FjY291bnQUYWN0aXZhdGUtYnJlYWtwb2ludHMDYWRkB2FyY2hpdmUKYXJyb3ctYm90aBFhcnJvdy1jaXJjbGUtZG93bhFhcnJvdy1jaXJjbGUtbGVmdBJhcnJvdy1jaXJjbGUtcmlnaHQPYXJyb3ctY2lyY2xlLXVwCmFycm93LWRvd24KYXJyb3ctbGVmdAthcnJvdy1yaWdodBBhcnJvdy1zbWFsbC1kb3duEGFycm93LXNtYWxsLWxlZnQRYXJyb3ctc21hbGwtcmlnaHQOYXJyb3ctc21hbGwtdXAKYXJyb3ctc3dhcAhhcnJvdy11cAxhenVyZS1kZXZvcHMFYXp1cmULYmVha2VyLXN0b3AGYmVha2VyCGJlbGwtZG90DmJlbGwtc2xhc2gtZG90CmJlbGwtc2xhc2gEYmVsbAVibGFuawRib2xkBGJvb2sIYm9va21hcmsLYnJhY2tldC1kb3QNYnJhY2tldC1lcnJvcglicmllZmNhc2UJYnJvYWRjYXN0B2Jyb3dzZXIDYnVnCGNhbGVuZGFyDWNhbGwtaW5jb21pbmcNY2FsbC1vdXRnb2luZw5jYXNlLXNlbnNpdGl2ZQljaGVjay1hbGwFY2hlY2sJY2hlY2tsaXN0DGNoZXZyb24tZG93bgxjaGV2cm9uLWxlZnQNY2hldnJvbi1yaWdodApjaGV2cm9uLXVwBGNoaXAMY2hyb21lLWNsb3NlD2Nocm9tZS1tYXhpbWl6ZQ9jaHJvbWUtbWluaW1pemUOY2hyb21lLXJlc3RvcmUNY2lyY2xlLWZpbGxlZBNjaXJjbGUtbGFyZ2UtZmlsbGVkDGNpcmNsZS1sYXJnZQxjaXJjbGUtc2xhc2gTY2lyY2xlLXNtYWxsLWZpbGxlZAxjaXJjbGUtc21hbGwGY2lyY2xlDWNpcmN1aXQtYm9hcmQJY2xlYXItYWxsBmNsaXBweQljbG9zZS1hbGwFY2xvc2UOY2xvdWQtZG93bmxvYWQMY2xvdWQtdXBsb2FkBWNsb3VkCGNvZGUtb3NzBGNvZGUGY29mZmVlDGNvbGxhcHNlLWFsbApjb2xvci1tb2RlB2NvbWJpbmUSY29tbWVudC1kaXNjdXNzaW9uDWNvbW1lbnQtZHJhZnQSY29tbWVudC11bnJlc29sdmVkB2NvbW1lbnQOY29tcGFzcy1hY3RpdmULY29tcGFzcy1kb3QHY29tcGFzcwdjb3BpbG90BGNvcHkIY292ZXJhZ2ULY3JlZGl0LWNhcmQEZGFzaAlkYXNoYm9hcmQIZGF0YWJhc2UJZGVidWctYWxsD2RlYnVnLWFsdC1zbWFsbAlkZWJ1Zy1hbHQnZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkHGRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwgZGVidWctYnJlYWtwb2ludC1kYXRhLXVudmVyaWZpZWQVZGVidWctYnJlYWtwb2ludC1kYXRhJGRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tdW52ZXJpZmllZBlkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uH2RlYnVnLWJyZWFrcG9pbnQtbG9nLXVudmVyaWZpZWQUZGVidWctYnJlYWtwb2ludC1sb2ccZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZA1kZWJ1Zy1jb25zb2xlFGRlYnVnLWNvbnRpbnVlLXNtYWxsDmRlYnVnLWNvbnRpbnVlDmRlYnVnLWNvdmVyYWdlEGRlYnVnLWRpc2Nvbm5lY3QSZGVidWctbGluZS1ieS1saW5lC2RlYnVnLXBhdXNlC2RlYnVnLXJlcnVuE2RlYnVnLXJlc3RhcnQtZnJhbWUNZGVidWctcmVzdGFydBZkZWJ1Zy1yZXZlcnNlLWNvbnRpbnVlF2RlYnVnLXN0YWNrZnJhbWUtYWN0aXZlEGRlYnVnLXN0YWNrZnJhbWULZGVidWctc3RhcnQPZGVidWctc3RlcC1iYWNrD2RlYnVnLXN0ZXAtaW50bw5kZWJ1Zy1zdGVwLW91dA9kZWJ1Zy1zdGVwLW92ZXIKZGVidWctc3RvcAVkZWJ1ZxBkZXNrdG9wLWRvd25sb2FkE2RldmljZS1jYW1lcmEtdmlkZW8NZGV2aWNlLWNhbWVyYQ1kZXZpY2UtbW9iaWxlCmRpZmYtYWRkZWQMZGlmZi1pZ25vcmVkDWRpZmYtbW9kaWZpZWQNZGlmZi1tdWx0aXBsZQxkaWZmLXJlbW92ZWQMZGlmZi1yZW5hbWVkC2RpZmYtc2luZ2xlBGRpZmYHZGlzY2FyZARlZGl0DWVkaXRvci1sYXlvdXQIZWxsaXBzaXMMZW1wdHktd2luZG93C2Vycm9yLXNtYWxsBWVycm9yB2V4Y2x1ZGUKZXhwYW5kLWFsbAZleHBvcnQKZXh0ZW5zaW9ucwpleWUtY2xvc2VkA2V5ZQhmZWVkYmFjawtmaWxlLWJpbmFyeQlmaWxlLWNvZGUKZmlsZS1tZWRpYQhmaWxlLXBkZg5maWxlLXN1Ym1vZHVsZRZmaWxlLXN5bWxpbmstZGlyZWN0b3J5EWZpbGUtc3ltbGluay1maWxlCGZpbGUtemlwBGZpbGUFZmlsZXMNZmlsdGVyLWZpbGxlZAZmaWx0ZXIFZmxhbWUJZm9sZC1kb3duB2ZvbGQtdXAEZm9sZA1mb2xkZXItYWN0aXZlDmZvbGRlci1saWJyYXJ5DWZvbGRlci1vcGVuZWQGZm9sZGVyBGdhbWUEZ2VhcgRnaWZ0C2dpc3Qtc2VjcmV0CmdpdC1jb21taXQLZ2l0LWNvbXBhcmUJZ2l0LWZldGNoCWdpdC1tZXJnZRdnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZBdnaXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZRZnaXQtcHVsbC1yZXF1ZXN0LWRyYWZ0HmdpdC1wdWxsLXJlcXVlc3QtZ28tdG8tY2hhbmdlcxxnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzEGdpdC1wdWxsLXJlcXVlc3QPZ2l0LXN0YXNoLWFwcGx5DWdpdC1zdGFzaC1wb3AJZ2l0LXN0YXNoDWdpdGh1Yi1hY3Rpb24KZ2l0aHViLWFsdA9naXRodWItaW52ZXJ0ZWQOZ2l0aHViLXByb2plY3QGZ2l0aHViBWdsb2JlCmdvLXRvLWZpbGUHZ3JhYmJlcgpncmFwaC1sZWZ0CmdyYXBoLWxpbmUNZ3JhcGgtc2NhdHRlcgVncmFwaAdncmlwcGVyEWdyb3VwLWJ5LXJlZi10eXBlDGhlYXJ0LWZpbGxlZAVoZWFydAdoaXN0b3J5BGhvbWUPaG9yaXpvbnRhbC1ydWxlBWh1Ym90BWluYm94BmluZGVudARpbmZvBmluc2VydAdpbnNwZWN0C2lzc3VlLWRyYWZ0Dmlzc3VlLXJlb3BlbmVkBmlzc3VlcwZpdGFsaWMGamVyc2V5BGpzb24Oa2ViYWItdmVydGljYWwDa2V5A2xhdw1sYXllcnMtYWN0aXZlCmxheWVycy1kb3QGbGF5ZXJzF2xheW91dC1hY3Rpdml0eWJhci1sZWZ0GGxheW91dC1hY3Rpdml0eWJhci1yaWdodA9sYXlvdXQtY2VudGVyZWQObGF5b3V0LW1lbnViYXITbGF5b3V0LXBhbmVsLWNlbnRlchRsYXlvdXQtcGFuZWwtanVzdGlmeRFsYXlvdXQtcGFuZWwtbGVmdBBsYXlvdXQtcGFuZWwtb2ZmEmxheW91dC1wYW5lbC1yaWdodAxsYXlvdXQtcGFuZWwXbGF5b3V0LXNpZGViYXItbGVmdC1vZmYTbGF5b3V0LXNpZGViYXItbGVmdBhsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYUbGF5b3V0LXNpZGViYXItcmlnaHQQbGF5b3V0LXN0YXR1c2JhcgZsYXlvdXQHbGlicmFyeRFsaWdodGJ1bGItYXV0b2ZpeBFsaWdodGJ1bGItc3BhcmtsZQlsaWdodGJ1bGINbGluay1leHRlcm5hbARsaW5rC2xpc3QtZmlsdGVyCWxpc3QtZmxhdAxsaXN0LW9yZGVyZWQObGlzdC1zZWxlY3Rpb24JbGlzdC10cmVlDmxpc3QtdW5vcmRlcmVkCmxpdmUtc2hhcmUHbG9hZGluZwhsb2NhdGlvbgpsb2NrLXNtYWxsBGxvY2sGbWFnbmV0CW1haWwtcmVhZARtYWlsCm1hcC1maWxsZWQTbWFwLXZlcnRpY2FsLWZpbGxlZAxtYXAtdmVydGljYWwDbWFwCG1hcmtkb3duCW1lZ2FwaG9uZQdtZW50aW9uBG1lbnUFbWVyZ2UKbWljLWZpbGxlZANtaWMJbWlsZXN0b25lBm1pcnJvcgxtb3J0YXItYm9hcmQEbW92ZRBtdWx0aXBsZS13aW5kb3dzBW11c2ljBG11dGUIbmV3LWZpbGUKbmV3LWZvbGRlcgduZXdsaW5lCm5vLW5ld2xpbmUEbm90ZRFub3RlYm9vay10ZW1wbGF0ZQhub3RlYm9vawhvY3RvZmFjZQxvcGVuLXByZXZpZXcMb3JnYW5pemF0aW9uBm91dHB1dAdwYWNrYWdlCHBhaW50Y2FuC3Bhc3MtZmlsbGVkBHBhc3MKcGVyc29uLWFkZAZwZXJzb24FcGlhbm8JcGllLWNoYXJ0A3BpbgxwaW5uZWQtZGlydHkGcGlubmVkC3BsYXktY2lyY2xlBHBsYXkEcGx1Zw1wcmVzZXJ2ZS1jYXNlB3ByZXZpZXcQcHJpbWl0aXZlLXNxdWFyZQdwcm9qZWN0BXB1bHNlCHF1ZXN0aW9uBXF1b3RlC3JhZGlvLXRvd2VyCXJlYWN0aW9ucwtyZWNvcmQta2V5cwxyZWNvcmQtc21hbGwGcmVjb3JkBHJlZG8KcmVmZXJlbmNlcwdyZWZyZXNoBXJlZ2V4D3JlbW90ZS1leHBsb3JlcgZyZW1vdGUGcmVtb3ZlC3JlcGxhY2UtYWxsB3JlcGxhY2UFcmVwbHkKcmVwby1jbG9uZQpyZXBvLWZldGNoD3JlcG8tZm9yY2UtcHVzaAtyZXBvLWZvcmtlZAlyZXBvLXB1bGwJcmVwby1wdXNoBHJlcG8GcmVwb3J0D3JlcXVlc3QtY2hhbmdlcwVyb2JvdAZyb2NrZXQScm9vdC1mb2xkZXItb3BlbmVkC3Jvb3QtZm9sZGVyA3JzcwRydWJ5CXJ1bi1hYm92ZRBydW4tYWxsLWNvdmVyYWdlB3J1bi1hbGwJcnVuLWJlbG93DHJ1bi1jb3ZlcmFnZQpydW4tZXJyb3JzCHNhdmUtYWxsB3NhdmUtYXMEc2F2ZQtzY3JlZW4tZnVsbA1zY3JlZW4tbm9ybWFsDHNlYXJjaC1mdXp6eQtzZWFyY2gtc3RvcAZzZWFyY2gEc2VuZBJzZXJ2ZXItZW52aXJvbm1lbnQOc2VydmVyLXByb2Nlc3MGc2VydmVyDXNldHRpbmdzLWdlYXIIc2V0dGluZ3MFc2hhcmUGc2hpZWxkB3NpZ24taW4Ic2lnbi1vdXQGc21pbGV5BXNuYWtlD3NvcnQtcHJlY2VkZW5jZQ5zb3VyY2UtY29udHJvbA5zcGFya2xlLWZpbGxlZAdzcGFya2xlEHNwbGl0LWhvcml6b250YWwOc3BsaXQtdmVydGljYWwIc3F1aXJyZWwKc3Rhci1lbXB0eQlzdGFyLWZ1bGwJc3Rhci1oYWxmC3N0b3AtY2lyY2xlDXN1cnJvdW5kLXdpdGgMc3ltYm9sLWFycmF5DnN5bWJvbC1ib29sZWFuDHN5bWJvbC1jbGFzcwxzeW1ib2wtY29sb3IPc3ltYm9sLWNvbnN0YW50EnN5bWJvbC1lbnVtLW1lbWJlcgtzeW1ib2wtZW51bQxzeW1ib2wtZXZlbnQMc3ltYm9sLWZpZWxkC3N5bWJvbC1maWxlEHN5bWJvbC1pbnRlcmZhY2UKc3ltYm9sLWtleQ5zeW1ib2wta2V5d29yZA1zeW1ib2wtbWV0aG9kC3N5bWJvbC1taXNjEHN5bWJvbC1uYW1lc3BhY2UOc3ltYm9sLW51bWVyaWMPc3ltYm9sLW9wZXJhdG9yEHN5bWJvbC1wYXJhbWV0ZXIPc3ltYm9sLXByb3BlcnR5DHN5bWJvbC1ydWxlcg5zeW1ib2wtc25pcHBldA1zeW1ib2wtc3RyaW5nEHN5bWJvbC1zdHJ1Y3R1cmUPc3ltYm9sLXZhcmlhYmxlDHN5bmMtaWdub3JlZARzeW5jBXRhYmxlA3RhZwZ0YXJnZXQIdGFza2xpc3QJdGVsZXNjb3BlDXRlcm1pbmFsLWJhc2gMdGVybWluYWwtY21kD3Rlcm1pbmFsLWRlYmlhbg50ZXJtaW5hbC1saW51eBN0ZXJtaW5hbC1wb3dlcnNoZWxsDXRlcm1pbmFsLXRtdXgPdGVybWluYWwtdWJ1bnR1CHRlcm1pbmFsCXRleHQtc2l6ZQp0aHJlZS1iYXJzEXRodW1ic2Rvd24tZmlsbGVkCnRodW1ic2Rvd24PdGh1bWJzdXAtZmlsbGVkCHRodW1ic3VwBXRvb2xzBXRyYXNoDXRyaWFuZ2xlLWRvd24NdHJpYW5nbGUtbGVmdA50cmlhbmdsZS1yaWdodAt0cmlhbmdsZS11cAd0d2l0dGVyEnR5cGUtaGllcmFyY2h5LXN1YhR0eXBlLWhpZXJhcmNoeS1zdXBlcg50eXBlLWhpZXJhcmNoeQZ1bmZvbGQTdW5ncm91cC1ieS1yZWYtdHlwZQZ1bmxvY2sGdW5tdXRlCnVudmVyaWZpZWQOdmFyaWFibGUtZ3JvdXAPdmVyaWZpZWQtZmlsbGVkCHZlcmlmaWVkCHZlcnNpb25zCXZtLWFjdGl2ZQp2bS1jb25uZWN0CnZtLW91dGxpbmUKdm0tcnVubmluZwJ2bQJ2cg92c2NvZGUtaW5zaWRlcnMGdnNjb2RlBHdhbmQHd2FybmluZwV3YXRjaAp3aGl0ZXNwYWNlCndob2xlLXdvcmQGd2luZG93CXdvcmQtd3JhcBF3b3Jrc3BhY2UtdHJ1c3RlZBF3b3Jrc3BhY2UtdW5rbm93bhN3b3Jrc3BhY2UtdW50cnVzdGVkB3pvb20taW4Iem9vbS1vdXQAAAA=) format("truetype")}.codicon[class*=codicon-]{font: 16px/1 codicon;display:inline-block;text-decoration:none;text-rendering:auto;text-align:center;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;user-select:none;-webkit-user-select:none}.codicon-wrench-subaction{opacity:.5}@keyframes codicon-spin{to{transform:rotate(360deg)}}.codicon-sync.codicon-modifier-spin,.codicon-loading.codicon-modifier-spin,.codicon-gear.codicon-modifier-spin,.codicon-notebook-state-executing.codicon-modifier-spin{animation:codicon-spin 1.5s steps(30) infinite}.codicon-modifier-disabled{opacity:.4}.codicon-loading,.codicon-tree-item-loading:before{animation-duration:1s!important;animation-timing-function:cubic-bezier(.53,.21,.29,.67)!important}.monaco-editor .codicon.codicon-symbol-array,.monaco-workbench .codicon.codicon-symbol-array{color:var(--vscode-symbolIcon-arrayForeground)}.monaco-editor .codicon.codicon-symbol-boolean,.monaco-workbench .codicon.codicon-symbol-boolean{color:var(--vscode-symbolIcon-booleanForeground)}.monaco-editor .codicon.codicon-symbol-class,.monaco-workbench .codicon.codicon-symbol-class{color:var(--vscode-symbolIcon-classForeground)}.monaco-editor .codicon.codicon-symbol-method,.monaco-workbench .codicon.codicon-symbol-method{color:var(--vscode-symbolIcon-methodForeground)}.monaco-editor .codicon.codicon-symbol-color,.monaco-workbench .codicon.codicon-symbol-color{color:var(--vscode-symbolIcon-colorForeground)}.monaco-editor .codicon.codicon-symbol-constant,.monaco-workbench .codicon.codicon-symbol-constant{color:var(--vscode-symbolIcon-constantForeground)}.monaco-editor .codicon.codicon-symbol-constructor,.monaco-workbench .codicon.codicon-symbol-constructor{color:var(--vscode-symbolIcon-constructorForeground)}.monaco-editor .codicon.codicon-symbol-value,.monaco-workbench .codicon.codicon-symbol-value,.monaco-editor .codicon.codicon-symbol-enum,.monaco-workbench .codicon.codicon-symbol-enum{color:var(--vscode-symbolIcon-enumeratorForeground)}.monaco-editor .codicon.codicon-symbol-enum-member,.monaco-workbench .codicon.codicon-symbol-enum-member{color:var(--vscode-symbolIcon-enumeratorMemberForeground)}.monaco-editor .codicon.codicon-symbol-event,.monaco-workbench .codicon.codicon-symbol-event{color:var(--vscode-symbolIcon-eventForeground)}.monaco-editor .codicon.codicon-symbol-field,.monaco-workbench .codicon.codicon-symbol-field{color:var(--vscode-symbolIcon-fieldForeground)}.monaco-editor .codicon.codicon-symbol-file,.monaco-workbench .codicon.codicon-symbol-file{color:var(--vscode-symbolIcon-fileForeground)}.monaco-editor .codicon.codicon-symbol-folder,.monaco-workbench .codicon.codicon-symbol-folder{color:var(--vscode-symbolIcon-folderForeground)}.monaco-editor .codicon.codicon-symbol-function,.monaco-workbench .codicon.codicon-symbol-function{color:var(--vscode-symbolIcon-functionForeground)}.monaco-editor .codicon.codicon-symbol-interface,.monaco-workbench .codicon.codicon-symbol-interface{color:var(--vscode-symbolIcon-interfaceForeground)}.monaco-editor .codicon.codicon-symbol-key,.monaco-workbench .codicon.codicon-symbol-key{color:var(--vscode-symbolIcon-keyForeground)}.monaco-editor .codicon.codicon-symbol-keyword,.monaco-workbench .codicon.codicon-symbol-keyword{color:var(--vscode-symbolIcon-keywordForeground)}.monaco-editor .codicon.codicon-symbol-module,.monaco-workbench .codicon.codicon-symbol-module{color:var(--vscode-symbolIcon-moduleForeground)}.monaco-editor .codicon.codicon-symbol-namespace,.monaco-workbench .codicon.codicon-symbol-namespace{color:var(--vscode-symbolIcon-namespaceForeground)}.monaco-editor .codicon.codicon-symbol-null,.monaco-workbench .codicon.codicon-symbol-null{color:var(--vscode-symbolIcon-nullForeground)}.monaco-editor .codicon.codicon-symbol-number,.monaco-workbench .codicon.codicon-symbol-number{color:var(--vscode-symbolIcon-numberForeground)}.monaco-editor .codicon.codicon-symbol-object,.monaco-workbench .codicon.codicon-symbol-object{color:var(--vscode-symbolIcon-objectForeground)}.monaco-editor .codicon.codicon-symbol-operator,.monaco-workbench .codicon.codicon-symbol-operator{color:var(--vscode-symbolIcon-operatorForeground)}.monaco-editor .codicon.codicon-symbol-package,.monaco-workbench .codicon.codicon-symbol-package{color:var(--vscode-symbolIcon-packageForeground)}.monaco-editor .codicon.codicon-symbol-property,.monaco-workbench .codicon.codicon-symbol-property{color:var(--vscode-symbolIcon-propertyForeground)}.monaco-editor .codicon.codicon-symbol-reference,.monaco-workbench .codicon.codicon-symbol-reference{color:var(--vscode-symbolIcon-referenceForeground)}.monaco-editor .codicon.codicon-symbol-snippet,.monaco-workbench .codicon.codicon-symbol-snippet{color:var(--vscode-symbolIcon-snippetForeground)}.monaco-editor .codicon.codicon-symbol-string,.monaco-workbench .codicon.codicon-symbol-string{color:var(--vscode-symbolIcon-stringForeground)}.monaco-editor .codicon.codicon-symbol-struct,.monaco-workbench .codicon.codicon-symbol-struct{color:var(--vscode-symbolIcon-structForeground)}.monaco-editor .codicon.codicon-symbol-text,.monaco-workbench .codicon.codicon-symbol-text{color:var(--vscode-symbolIcon-textForeground)}.monaco-editor .codicon.codicon-symbol-type-parameter,.monaco-workbench .codicon.codicon-symbol-type-parameter{color:var(--vscode-symbolIcon-typeParameterForeground)}.monaco-editor .codicon.codicon-symbol-unit,.monaco-workbench .codicon.codicon-symbol-unit{color:var(--vscode-symbolIcon-unitForeground)}.monaco-editor .codicon.codicon-symbol-variable,.monaco-workbench .codicon.codicon-symbol-variable{color:var(--vscode-symbolIcon-variableForeground)}.monaco-editor .lightBulbWidget{display:flex;align-items:center;justify-content:center}.monaco-editor .lightBulbWidget:hover{cursor:pointer}.monaco-editor .lightBulbWidget.codicon-light-bulb,.monaco-editor .lightBulbWidget.codicon-lightbulb-sparkle{color:var(--vscode-editorLightBulb-foreground)}.monaco-editor .lightBulbWidget.codicon-lightbulb-autofix,.monaco-editor .lightBulbWidget.codicon-lightbulb-sparkle-autofix{color:var(--vscode-editorLightBulbAutoFix-foreground, var(--vscode-editorLightBulb-foreground))}.monaco-editor .lightBulbWidget.codicon-sparkle-filled{color:var(--vscode-editorLightBulbAi-foreground, var(--vscode-icon-foreground))}.monaco-editor .lightBulbWidget:before{position:relative;z-index:2}.monaco-editor .lightBulbWidget:after{position:absolute;top:0;left:0;content:"";display:block;width:100%;height:100%;opacity:.3;background-color:var(--vscode-editor-background);z-index:1}.action-widget{font-size:13px;min-width:160px;max-width:80vw;z-index:40;display:block;width:100%;border:1px solid var(--vscode-editorWidget-border)!important;border-radius:2px;background-color:var(--vscode-editorWidget-background);color:var(--vscode-editorWidget-foreground)}.context-view-block{position:fixed;cursor:initial;left:0;top:0;width:100%;height:100%;z-index:-1}.context-view-pointerBlock{position:fixed;cursor:initial;left:0;top:0;width:100%;height:100%;z-index:2}.action-widget .monaco-list{user-select:none;-webkit-user-select:none;border:none!important;border-width:0!important}.action-widget .monaco-list:focus:before{outline:0!important}.action-widget .monaco-list .monaco-scrollable-element{overflow:visible}.action-widget .monaco-list .monaco-list-row{padding:0 10px;white-space:nowrap;cursor:pointer;touch-action:none;width:100%}.action-widget .monaco-list .monaco-list-row.action.focused:not(.option-disabled){background-color:var(--vscode-quickInputList-focusBackground)!important;color:var(--vscode-quickInputList-focusForeground);outline:1px solid var(--vscode-menu-selectionBorder, transparent);outline-offset:-1px}.action-widget .monaco-list-row.group-header{color:var(--vscode-descriptionForeground)!important;font-weight:600}.action-widget .monaco-list .group-header,.action-widget .monaco-list .option-disabled,.action-widget .monaco-list .option-disabled:before,.action-widget .monaco-list .option-disabled .focused,.action-widget .monaco-list .option-disabled .focused:before{cursor:default!important;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;background-color:transparent!important;outline:0 solid!important}.action-widget .monaco-list-row.action{display:flex;gap:6px;align-items:center}.action-widget .monaco-list-row.action.option-disabled,.action-widget .monaco-list:focus .monaco-list-row.focused.action.option-disabled,.action-widget .monaco-list-row.action.option-disabled .codicon,.action-widget .monaco-list:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused).option-disabled{color:var(--vscode-disabledForeground)}.action-widget .monaco-list-row.action:not(.option-disabled) .codicon{color:inherit}.action-widget .monaco-list-row.action .title{flex:1;overflow:hidden;text-overflow:ellipsis}.action-widget .monaco-list-row.action .monaco-keybinding>.monaco-keybinding-key{background-color:var(--vscode-keybindingLabel-background);color:var(--vscode-keybindingLabel-foreground);border-style:solid;border-width:1px;border-radius:3px;border-color:var(--vscode-keybindingLabel-border);border-bottom-color:var(--vscode-keybindingLabel-bottomBorder);box-shadow:inset 0 -1px 0 var(--vscode-widget-shadow)}.action-widget .action-widget-action-bar{background-color:var(--vscode-editorHoverWidget-statusBarBackground);border-top:1px solid var(--vscode-editorHoverWidget-border)}.action-widget .action-widget-action-bar:before{display:block;content:"";width:100%}.action-widget .action-widget-action-bar .actions-container{padding:0 8px}.action-widget-action-bar .action-label{color:var(--vscode-textLink-activeForeground);font-size:12px;line-height:22px;padding:0;pointer-events:all}.action-widget-action-bar .action-item{margin-right:16px;pointer-events:none}.action-widget-action-bar .action-label:hover{background-color:transparent!important}.monaco-action-bar .actions-container.highlight-toggled .action-label.checked{background:var(--vscode-actionBar-toggledBackground)!important}.monaco-editor .codelens-decoration{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap;color:var(--vscode-editorCodeLens-foreground);line-height:var(--vscode-editorCodeLens-lineHeight);font-size:var(--vscode-editorCodeLens-fontSize);padding-right:calc(var(--vscode-editorCodeLens-fontSize)*.5);font-feature-settings:var(--vscode-editorCodeLens-fontFeatureSettings);font-family:var(--vscode-editorCodeLens-fontFamily),var(--vscode-editorCodeLens-fontFamilyDefault)}.monaco-editor .codelens-decoration>span,.monaco-editor .codelens-decoration>a{user-select:none;-webkit-user-select:none;white-space:nowrap;vertical-align:sub}.monaco-editor .codelens-decoration>a{text-decoration:none}.monaco-editor .codelens-decoration>a:hover{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .codelens-decoration>a:hover .codicon{color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .codelens-decoration .codicon{vertical-align:middle;color:currentColor!important;color:var(--vscode-editorCodeLens-foreground);line-height:var(--vscode-editorCodeLens-lineHeight);font-size:var(--vscode-editorCodeLens-fontSize)}.monaco-editor .codelens-decoration>a:hover .codicon:before{cursor:pointer}@keyframes fadein{0%{opacity:0;visibility:visible}to{opacity:1}}.monaco-editor .codelens-decoration.fadein{animation:fadein .1s linear}.colorpicker-widget{height:190px;user-select:none;-webkit-user-select:none}.colorpicker-color-decoration,.hc-light .colorpicker-color-decoration{border:solid .1em #000;box-sizing:border-box;margin:.1em .2em 0;width:.8em;height:.8em;line-height:.8em;display:inline-block;cursor:pointer}.hc-black .colorpicker-color-decoration,.vs-dark .colorpicker-color-decoration{border:solid .1em #eee}.colorpicker-header{display:flex;height:24px;position:relative;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=);background-size:9px 9px;image-rendering:pixelated}.colorpicker-header .picked-color{width:240px;display:flex;align-items:center;justify-content:center;line-height:24px;cursor:pointer;color:#fff;flex:1;white-space:nowrap;overflow:hidden}.colorpicker-header .picked-color .picked-color-presentation{white-space:nowrap;margin-left:5px;margin-right:5px}.colorpicker-header .picked-color .codicon{color:inherit;font-size:14px}.colorpicker-header .picked-color.light{color:#000}.colorpicker-header .original-color{width:74px;z-index:inherit;cursor:pointer}.standalone-colorpicker{color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.colorpicker-header.standalone-colorpicker{border-bottom:none}.colorpicker-header .close-button{cursor:pointer;background-color:var(--vscode-editorHoverWidget-background);border-left:1px solid var(--vscode-editorHoverWidget-border)}.colorpicker-header .close-button-inner-div{width:100%;height:100%;text-align:center}.colorpicker-header .close-button-inner-div:hover{background-color:var(--vscode-toolbar-hoverBackground)}.colorpicker-header .close-icon{padding:3px}.colorpicker-body{display:flex;padding:8px;position:relative}.colorpicker-body .saturation-wrap{overflow:hidden;height:150px;position:relative;min-width:220px;flex:1}.colorpicker-body .saturation-box{height:150px;position:absolute}.colorpicker-body .saturation-selection{width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid rgb(255,255,255);border-radius:100%;box-shadow:0 0 2px #000c;position:absolute}.colorpicker-body .strip{width:25px;height:150px}.colorpicker-body .standalone-strip{width:25px;height:122px}.colorpicker-body .hue-strip{position:relative;margin-left:8px;cursor:grab;background:linear-gradient(to bottom,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.colorpicker-body .opacity-strip{position:relative;margin-left:8px;cursor:grab;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=);background-size:9px 9px;image-rendering:pixelated}.colorpicker-body .strip.grabbing{cursor:grabbing}.colorpicker-body .slider{position:absolute;top:0;left:-2px;width:calc(100% + 4px);height:4px;box-sizing:border-box;border:1px solid rgba(255,255,255,.71);box-shadow:0 0 1px #000000d9}.colorpicker-body .strip .overlay{height:150px;pointer-events:none}.colorpicker-body .standalone-strip .standalone-overlay{height:122px;pointer-events:none}.standalone-colorpicker-body{display:block;border:1px solid transparent;border-bottom:1px solid var(--vscode-editorHoverWidget-border);overflow:hidden}.colorpicker-body .insert-button{position:absolute;height:20px;width:58px;padding:0;right:8px;bottom:8px;background:var(--vscode-button-background);color:var(--vscode-button-foreground);border-radius:2px;border:none;cursor:pointer}.colorpicker-body .insert-button:hover{background:var(--vscode-button-hoverBackground)}.monaco-editor .goto-definition-link{text-decoration:underline;cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .peekview-widget .head{box-sizing:border-box;display:flex;justify-content:space-between;flex-wrap:nowrap}.monaco-editor .peekview-widget .head .peekview-title{display:flex;align-items:baseline;font-size:13px;margin-left:20px;min-width:0;text-overflow:ellipsis;overflow:hidden}.monaco-editor .peekview-widget .head .peekview-title.clickable{cursor:pointer}.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty){font-size:.9em;margin-left:.5em}.monaco-editor .peekview-widget .head .peekview-title .meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.monaco-editor .peekview-widget .head .peekview-title .dirname,.monaco-editor .peekview-widget .head .peekview-title .filename{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .peekview-widget .head .peekview-title .meta:not(:empty):before{content:"-";padding:0 .3em}.monaco-editor .peekview-widget .head .peekview-actions{flex:1;text-align:right;padding-right:2px}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar{display:inline-block}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar,.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar>.actions-container{height:100%}.monaco-editor .peekview-widget>.body{border-top:1px solid;position:relative}.monaco-editor .peekview-widget .head .peekview-title .codicon{margin-right:4px;align-self:center}.monaco-editor .peekview-widget .monaco-list .monaco-list-row.focused .codicon{color:inherit!important}.monaco-editor .zone-widget{position:absolute;z-index:10}.monaco-editor .zone-widget .zone-widget-container{border-top-style:solid;border-bottom-style:solid;border-top-width:0;border-bottom-width:0;position:relative}.monaco-editor .zone-widget .zone-widget-container.reference-zone-widget{border-top-width:1px;border-bottom-width:1px}.monaco-editor .reference-zone-widget .inline{display:inline-block;vertical-align:top}.monaco-editor .reference-zone-widget .messages{height:100%;width:100%;text-align:center;padding:3em 0}.monaco-editor .reference-zone-widget .ref-tree{line-height:23px;background-color:var(--vscode-peekViewResult-background);color:var(--vscode-peekViewResult-lineForeground)}.monaco-editor .reference-zone-widget .ref-tree .reference{text-overflow:ellipsis;overflow:hidden}.monaco-editor .reference-zone-widget .ref-tree .reference-file{display:inline-flex;width:100%;height:100%;color:var(--vscode-peekViewResult-fileForeground)}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .selected .reference-file{color:inherit!important}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows>.monaco-list-row.selected:not(.highlighted){background-color:var(--vscode-peekViewResult-selectionBackground);color:var(--vscode-peekViewResult-selectionForeground)!important}.monaco-editor .reference-zone-widget .ref-tree .reference-file .count{margin-right:12px;margin-left:auto}.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight{background-color:var(--vscode-peekViewResult-matchHighlightBackground)}.monaco-editor .reference-zone-widget .preview .reference-decoration{background-color:var(--vscode-peekViewEditor-matchHighlightBackground);border:2px solid var(--vscode-peekViewEditor-matchHighlightBorder);box-sizing:border-box}.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background,.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input{background-color:var(--vscode-peekViewEditor-background)}.monaco-editor .reference-zone-widget .preview .monaco-editor .margin{background-color:var(--vscode-peekViewEditorGutter-background)}.monaco-editor.hc-black .reference-zone-widget .ref-tree .reference-file,.monaco-editor.hc-light .reference-zone-widget .ref-tree .reference-file{font-weight:700}.monaco-editor.hc-black .reference-zone-widget .ref-tree .referenceMatch .highlight,.monaco-editor.hc-light .reference-zone-widget .ref-tree .referenceMatch .highlight{border:1px dotted var(--vscode-contrastActiveBorder, transparent);box-sizing:border-box}.monaco-editor .peekview-widget .head .peekview-title .severity-icon{display:inline-block;vertical-align:text-top;margin-right:4px}.monaco-editor .marker-widget{text-overflow:ellipsis;white-space:nowrap}.monaco-editor .marker-widget>.stale{opacity:.6;font-style:italic}.monaco-editor .marker-widget .title{display:inline-block;padding-right:5px}.monaco-editor .marker-widget .descriptioncontainer{position:absolute;white-space:pre;user-select:text;-webkit-user-select:text;padding:8px 12px 0 20px}.monaco-editor .marker-widget .descriptioncontainer .message{display:flex;flex-direction:column}.monaco-editor .marker-widget .descriptioncontainer .message .details{padding-left:6px}.monaco-editor .marker-widget .descriptioncontainer .message .source,.monaco-editor .marker-widget .descriptioncontainer .message span.code{opacity:.6}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link{opacity:.6;color:inherit}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:before{content:"("}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:after{content:")"}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link>span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under;color:var(--vscode-textLink-activeForeground)}.monaco-editor .marker-widget .descriptioncontainer .filename{cursor:pointer;color:var(--vscode-textLink-activeForeground)}.monaco-editor .zone-widget .codicon.codicon-error,.markers-panel .marker-icon.error,.markers-panel .marker-icon .codicon.codicon-error,.text-search-provider-messages .providerMessage .codicon.codicon-error,.extensions-viewlet>.extensions .codicon.codicon-error,.extension-editor .codicon.codicon-error,.preferences-editor .codicon.codicon-error{color:var(--vscode-problemsErrorIcon-foreground)}.monaco-editor .zone-widget .codicon.codicon-warning,.markers-panel .marker-icon.warning,.markers-panel .marker-icon .codicon.codicon-warning,.text-search-provider-messages .providerMessage .codicon.codicon-warning,.extensions-viewlet>.extensions .codicon.codicon-warning,.extension-editor .codicon.codicon-warning,.preferences-editor .codicon.codicon-warning{color:var(--vscode-problemsWarningIcon-foreground)}.monaco-editor .zone-widget .codicon.codicon-info,.markers-panel .marker-icon.info,.markers-panel .marker-icon .codicon.codicon-info,.text-search-provider-messages .providerMessage .codicon.codicon-info,.extensions-viewlet>.extensions .codicon.codicon-info,.extension-editor .codicon.codicon-info,.preferences-editor .codicon.codicon-info{color:var(--vscode-problemsInfoIcon-foreground)}.monaco-editor .inlineSuggestionsHints.withBorder{z-index:39;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor .inlineSuggestionsHints a,.monaco-editor .inlineSuggestionsHints a:hover{color:var(--vscode-foreground)}.monaco-editor .inlineSuggestionsHints .keybinding{display:flex;margin-left:4px;opacity:.6}.monaco-editor .inlineSuggestionsHints .keybinding .monaco-keybinding-key{font-size:8px;padding:2px 3px}.monaco-editor .inlineSuggestionsHints .availableSuggestionCount a{display:flex;min-width:19px;justify-content:center}.monaco-editor .inlineSuggestionStatusBarItemLabel{margin-right:2px}.monaco-editor .hoverHighlight{background-color:var(--vscode-editor-hoverHighlightBackground)}.monaco-editor .monaco-hover{color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);border-radius:3px}.monaco-editor .monaco-hover a{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-hover a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .monaco-hover .hover-row .actions{background-color:var(--vscode-editorHoverWidget-statusBarBackground)}.monaco-editor .monaco-hover code{background-color:var(--vscode-textCodeBlock-background)}.monaco-editor.vs .dnd-target,.monaco-editor.hc-light .dnd-target{border-right:2px dotted black;color:#fff}.monaco-editor.vs-dark .dnd-target{border-right:2px dotted #AEAFAD;color:#51504f}.monaco-editor.hc-black .dnd-target{border-right:2px dotted #fff;color:#000}.monaco-editor.mouse-default .view-lines,.monaco-editor.vs-dark.mac.mouse-default .view-lines,.monaco-editor.hc-black.mac.mouse-default .view-lines,.monaco-editor.hc-light.mac.mouse-default .view-lines{cursor:default}.monaco-editor.mouse-copy .view-lines,.monaco-editor.vs-dark.mac.mouse-copy .view-lines,.monaco-editor.hc-black.mac.mouse-copy .view-lines,.monaco-editor.hc-light.mac.mouse-copy .view-lines{cursor:copy}.monaco-editor .findOptionsWidget{background-color:var(--vscode-editorWidget-background);color:var(--vscode-editorWidget-foreground);box-shadow:0 0 8px 2px var(--vscode-widget-shadow);border:2px solid var(--vscode-contrastBorder)}.monaco-editor .find-widget{position:absolute;z-index:35;height:33px;overflow:hidden;line-height:19px;transition:transform .2s linear;padding:0 4px;box-sizing:border-box;transform:translateY(calc(-100% - 10px));box-shadow:0 0 8px 2px var(--vscode-widget-shadow);color:var(--vscode-editorWidget-foreground);border-left:1px solid var(--vscode-widget-border);border-right:1px solid var(--vscode-widget-border);border-bottom:1px solid var(--vscode-widget-border);border-bottom-left-radius:4px;border-bottom-right-radius:4px;background-color:var(--vscode-editorWidget-background)}.monaco-workbench.reduce-motion .monaco-editor .find-widget{transition:transform 0ms linear}.monaco-editor .find-widget textarea{margin:0}.monaco-editor .find-widget.hiddenEditor{display:none}.monaco-editor .find-widget.replaceToggled>.replace-part{display:flex}.monaco-editor .find-widget.visible{transform:translateY(0)}.monaco-editor .find-widget .monaco-inputbox.synthetic-focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px;outline-color:var(--vscode-focusBorder)}.monaco-editor .find-widget .monaco-inputbox .input{background-color:transparent;min-height:0}.monaco-editor .find-widget .monaco-findInput .input{font-size:13px}.monaco-editor .find-widget>.find-part,.monaco-editor .find-widget>.replace-part{margin:3px 25px 0 17px;font-size:12px;display:flex}.monaco-editor .find-widget>.find-part .monaco-inputbox,.monaco-editor .find-widget>.replace-part .monaco-inputbox{min-height:25px}.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.mirror{padding-right:22px}.monaco-editor .find-widget>.find-part .monaco-inputbox>.ibwrapper>.input,.monaco-editor .find-widget>.find-part .monaco-inputbox>.ibwrapper>.mirror,.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.input,.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.mirror{padding-top:2px;padding-bottom:2px}.monaco-editor .find-widget>.find-part .find-actions{height:25px;display:flex;align-items:center}.monaco-editor .find-widget>.replace-part .replace-actions{height:25px;display:flex;align-items:center}.monaco-editor .find-widget .monaco-findInput{vertical-align:middle;display:flex;flex:1}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element{width:100%}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element .scrollbar.vertical{opacity:0}.monaco-editor .find-widget .matchesCount{display:flex;flex:initial;margin:0 0 0 3px;padding:2px 0 0 2px;height:25px;vertical-align:middle;box-sizing:border-box;text-align:center;line-height:23px}.monaco-editor .find-widget .button{width:16px;height:16px;padding:3px;border-radius:5px;flex:initial;margin-left:3px;background-position:center center;background-repeat:no-repeat;cursor:pointer;display:flex;align-items:center;justify-content:center}.monaco-editor .find-widget .codicon-find-selection{width:22px;height:22px;padding:3px;border-radius:5px}.monaco-editor .find-widget .button.left{margin-left:0;margin-right:3px}.monaco-editor .find-widget .button.wide{width:auto;padding:1px 6px;top:-1px}.monaco-editor .find-widget .button.toggle{position:absolute;top:0;left:3px;width:18px;height:100%;border-radius:0;box-sizing:border-box}.monaco-editor .find-widget .button.toggle.disabled{display:none}.monaco-editor .find-widget .disabled{color:var(--vscode-disabledForeground);cursor:default}.monaco-editor .find-widget>.replace-part{display:none}.monaco-editor .find-widget>.replace-part>.monaco-findInput{position:relative;display:flex;vertical-align:middle;flex:auto;flex-grow:0;flex-shrink:0}.monaco-editor .find-widget>.replace-part>.monaco-findInput>.controls{position:absolute;top:3px;right:2px}.monaco-editor .find-widget.reduced-find-widget .matchesCount{display:none}.monaco-editor .find-widget.narrow-find-widget{max-width:257px!important}.monaco-editor .find-widget.collapsed-find-widget{max-width:170px!important}.monaco-editor .find-widget.collapsed-find-widget .button.previous,.monaco-editor .find-widget.collapsed-find-widget .button.next,.monaco-editor .find-widget.collapsed-find-widget .button.replace,.monaco-editor .find-widget.collapsed-find-widget .button.replace-all,.monaco-editor .find-widget.collapsed-find-widget>.find-part .monaco-findInput .controls{display:none}.monaco-editor .find-widget.no-results .matchesCount{color:var(--vscode-errorForeground)}.monaco-editor .findMatch{animation-duration:0;animation-name:inherit!important;background-color:var(--vscode-editor-findMatchHighlightBackground)}.monaco-editor .currentFindMatch{background-color:var(--vscode-editor-findMatchBackground);border:2px solid var(--vscode-editor-findMatchBorder);padding:1px;box-sizing:border-box}.monaco-editor .findScope{background-color:var(--vscode-editor-findRangeHighlightBackground)}.monaco-editor .find-widget .monaco-sash{left:0!important;background-color:var(--vscode-editorWidget-resizeBorder, var(--vscode-editorWidget-border))}.monaco-editor.hc-black .find-widget .button:before{position:relative;top:1px;left:2px}.monaco-editor .find-widget .button:not(.disabled):hover,.monaco-editor .find-widget .codicon-find-selection:hover{background-color:var(--vscode-toolbar-hoverBackground)!important}.monaco-editor.findMatch{background-color:var(--vscode-editor-findMatchHighlightBackground)}.monaco-editor.currentFindMatch{background-color:var(--vscode-editor-findMatchBackground)}.monaco-editor.findScope{background-color:var(--vscode-editor-findRangeHighlightBackground)}.monaco-editor.findMatch{background-color:var(--vscode-editorWidget-background)}.monaco-editor .find-widget>.button.codicon-widget-close{position:absolute;top:5px;right:4px}.monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed,.monaco-editor .margin-view-overlays .codicon-folding-manual-expanded,.monaco-editor .margin-view-overlays .codicon-folding-expanded,.monaco-editor .margin-view-overlays .codicon-folding-collapsed{cursor:pointer;opacity:0;transition:opacity .5s;display:flex;align-items:center;justify-content:center;font-size:140%;margin-left:2px}.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-expanded,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-expanded,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-collapsed{transition:initial}.monaco-editor .margin-view-overlays:hover .codicon,.monaco-editor .margin-view-overlays .codicon.codicon-folding-collapsed,.monaco-editor .margin-view-overlays .codicon.codicon-folding-manual-collapsed,.monaco-editor .margin-view-overlays .codicon.alwaysShowFoldIcons{opacity:1}.monaco-editor .inline-folded:after{color:gray;margin:.1em .2em 0;content:"⋯";display:inline;line-height:1em;cursor:pointer}.monaco-editor .folded-background{background-color:var(--vscode-editor-foldBackground)}.monaco-editor .cldr.codicon.codicon-folding-expanded,.monaco-editor .cldr.codicon.codicon-folding-collapsed,.monaco-editor .cldr.codicon.codicon-folding-manual-expanded,.monaco-editor .cldr.codicon.codicon-folding-manual-collapsed{color:var(--vscode-editorGutter-foldingControlForeground)!important}.monaco-editor .suggest-preview-additional-widget{white-space:nowrap}.monaco-editor .suggest-preview-additional-widget .content-spacer{color:transparent;white-space:pre}.monaco-editor .suggest-preview-additional-widget .button{display:inline-block;cursor:pointer;text-decoration:underline;text-underline-position:under}.monaco-editor .ghost-text-hidden{opacity:0;font-size:0}.monaco-editor .ghost-text-decoration,.monaco-editor .suggest-preview-text .ghost-text{font-style:italic}.monaco-editor .ghost-text-decoration,.monaco-editor .ghost-text-decoration-preview,.monaco-editor .suggest-preview-text .ghost-text{color:var(--vscode-editorGhostText-foreground)!important;background-color:var(--vscode-editorGhostText-background);border:1px solid var(--vscode-editorGhostText-border)}.monaco-editor .snippet-placeholder{min-width:2px;outline-style:solid;outline-width:1px;background-color:var(--vscode-editor-snippetTabstopHighlightBackground, transparent);outline-color:var(--vscode-editor-snippetTabstopHighlightBorder, transparent)}.monaco-editor .finish-snippet-placeholder{outline-style:solid;outline-width:1px;background-color:var(--vscode-editor-snippetFinalTabstopHighlightBackground, transparent);outline-color:var(--vscode-editor-snippetFinalTabstopHighlightBorder, transparent)}.monaco-editor .suggest-widget{width:430px;z-index:40;display:flex;flex-direction:column;border-radius:3px}.monaco-editor .suggest-widget.message{flex-direction:row;align-items:center}.monaco-editor .suggest-widget,.monaco-editor .suggest-details{flex:0 1 auto;width:100%;border-style:solid;border-width:1px;border-color:var(--vscode-editorSuggestWidget-border);background-color:var(--vscode-editorSuggestWidget-background)}.monaco-editor.hc-black .suggest-widget,.monaco-editor.hc-black .suggest-details,.monaco-editor.hc-light .suggest-widget,.monaco-editor.hc-light .suggest-details{border-width:2px}.monaco-editor .suggest-widget .suggest-status-bar{box-sizing:border-box;display:none;flex-flow:row nowrap;justify-content:space-between;width:100%;font-size:80%;padding:0 4px;border-top:1px solid var(--vscode-editorSuggestWidget-border);overflow:hidden}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar{display:flex}.monaco-editor .suggest-widget .suggest-status-bar .left{padding-right:8px}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-label{color:var(--vscode-editorSuggestWidgetStatus-foreground)}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label{margin-right:0}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label:after{content:", ";margin-right:.3em}.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore,.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label{width:100%}.monaco-editor .suggest-widget>.message{padding-left:22px}.monaco-editor .suggest-widget>.tree{height:100%;width:100%}.monaco-editor .suggest-widget .monaco-list{user-select:none;-webkit-user-select:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row{display:flex;-mox-box-sizing:border-box;box-sizing:border-box;padding-right:10px;background-repeat:no-repeat;background-position:2px 2px;white-space:nowrap;cursor:pointer;touch-action:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused{color:var(--vscode-editorSuggestWidget-selectedForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused .codicon{color:var(--vscode-editorSuggestWidget-selectedIconForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents{flex:1;height:100%;overflow:hidden;padding-left:2px}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:pre;justify-content:space-between}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{display:flex}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label{color:var(--vscode-editorSuggestWidget-foreground)}.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight{font-weight:700}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-highlightForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-focusHighlightForeground)}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:before{color:inherit;opacity:1;font-size:14px;cursor:pointer}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close{position:absolute;top:6px;right:2px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover{opacity:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{opacity:.7}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label{overflow:hidden;text-overflow:ellipsis;opacity:.6}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label{margin-left:12px;opacity:.4;font-size:85%;line-height:initial;text-overflow:ellipsis;overflow:hidden;align-self:center}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{font-size:85%;margin-left:1.1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{display:none}.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label,.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label{width:calc(100% - 26px)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left{flex-shrink:1;flex-grow:1;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label{flex-shrink:0}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label{max-width:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label{flex-shrink:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{overflow:hidden;flex-shrink:4;max-width:70%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:inline-block;position:absolute;right:10px;width:18px;height:18px;visibility:hidden}.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none!important}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:inline-block}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right>.readMore{visibility:visible}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated{opacity:.66;text-decoration:unset}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container{text-decoration:line-through}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label:before{height:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon{display:block;height:16px;width:16px;margin-left:2px;background-repeat:no-repeat;background-size:80%;background-position:center}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.hide{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .suggest-icon{display:flex;align-items:center;margin-right:4px}.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .icon,.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon:before{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan{margin:0 0 0 .3em;border:.1em solid #000;width:.7em;height:.7em;display:inline-block}.monaco-editor .suggest-details-container{z-index:41}.monaco-editor .suggest-details{display:flex;flex-direction:column;cursor:default;color:var(--vscode-editorSuggestWidget-foreground)}.monaco-editor .suggest-details.focused{border-color:var(--vscode-focusBorder)}.monaco-editor .suggest-details a{color:var(--vscode-textLink-foreground)}.monaco-editor .suggest-details a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .suggest-details code{background-color:var(--vscode-textCodeBlock-background)}.monaco-editor .suggest-details.no-docs{display:none}.monaco-editor .suggest-details>.monaco-scrollable-element{flex:1}.monaco-editor .suggest-details>.monaco-scrollable-element>.body{box-sizing:border-box;height:100%;width:100%}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type{flex:2;overflow:hidden;text-overflow:ellipsis;opacity:.7;white-space:pre;margin:0 24px 0 0;padding:4px 0 12px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap{white-space:normal;word-break:break-all}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs{margin:0;padding:4px 5px;white-space:pre-wrap}.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs{margin-right:24px;overflow:hidden}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs{padding:0;white-space:initial;min-height:calc(1rem + 8px)}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div,.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty){padding:4px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child{margin-top:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child{margin-bottom:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .monaco-tokenized-source{white-space:pre}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code{white-space:pre-wrap;word-wrap:break-word}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon{vertical-align:sub}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty{display:none}.monaco-editor .suggest-details code{border-radius:3px;padding:0 .4em}.monaco-editor .suggest-details ul,.monaco-editor .suggest-details ol{padding-left:20px}.monaco-editor .suggest-details p code{font-family:var(--monaco-monospace-font)}.monaco-editor.vs .valueSetReplacement{outline:solid 2px var(--vscode-editorBracketMatch-border)}.monaco-editor .linked-editing-decoration{background-color:var(--vscode-editor-linkedEditingBackground);min-width:1px}.monaco-editor .detected-link,.monaco-editor .detected-link-active{text-decoration:underline;text-underline-position:under}.monaco-editor .detected-link-active{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .focused .selectionHighlight{background-color:var(--vscode-editor-selectionHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-selectionHighlightBorder)}.monaco-editor.hc-black .focused .selectionHighlight,.monaco-editor.hc-light .focused .selectionHighlight{border-style:dotted}.monaco-editor .wordHighlight{background-color:var(--vscode-editor-wordHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightBorder)}.monaco-editor.hc-black .wordHighlight,.monaco-editor.hc-light .wordHighlight{border-style:dotted}.monaco-editor .wordHighlightStrong{background-color:var(--vscode-editor-wordHighlightStrongBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightStrongBorder)}.monaco-editor.hc-black .wordHighlightStrong,.monaco-editor.hc-light .wordHighlightStrong{border-style:dotted}.monaco-editor .wordHighlightText{background-color:var(--vscode-editor-wordHighlightTextBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightTextBorder)}.monaco-editor.hc-black .wordHighlightText,.monaco-editor.hc-light .wordHighlightText{border-style:dotted}.monaco-editor .inline-edit-remove{background-color:var(--vscode-editorGhostText-background);font-style:italic;text-decoration:line-through}.monaco-editor .inline-edit-remove.backgroundColoring{background-color:var(--vscode-diffEditor-removedLineBackground)}.monaco-editor .inline-edit-hidden{opacity:0;font-size:0}.monaco-editor .inline-edit-decoration,.monaco-editor .suggest-preview-text .inline-edit{font-style:italic}.monaco-editor .inline-completion-text-to-replace{text-decoration:underline;text-underline-position:under}.monaco-editor .inline-edit-decoration,.monaco-editor .inline-edit-decoration-preview,.monaco-editor .suggest-preview-text .inline-edit{color:var(--vscode-editorGhostText-foreground)!important;background-color:var(--vscode-editorGhostText-background);border:1px solid var(--vscode-editorGhostText-border)}.monaco-editor .inlineEditHints.withBorder{z-index:39;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor .inlineEditHints a,.monaco-editor .inlineEditHints a:hover{color:var(--vscode-foreground)}.monaco-editor .inlineEditHints .keybinding{display:flex;margin-left:4px;opacity:.6}.monaco-editor .inlineEditHints .keybinding .monaco-keybinding-key{font-size:8px;padding:2px 3px}.monaco-editor .inlineEditStatusBarItemLabel{margin-right:2px}.monaco-editor .parameter-hints-widget{z-index:39;display:flex;flex-direction:column;line-height:1.5em;cursor:default;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.hc-black .monaco-editor .parameter-hints-widget,.hc-light .monaco-editor .parameter-hints-widget{border-width:2px}.monaco-editor .parameter-hints-widget>.phwrapper{max-width:440px;display:flex;flex-direction:row}.monaco-editor .parameter-hints-widget.multiple{min-height:3.3em;padding:0}.monaco-editor .parameter-hints-widget.multiple .body:before{content:"";display:block;height:100%;position:absolute;opacity:.5;border-left:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor .parameter-hints-widget p,.monaco-editor .parameter-hints-widget ul{margin:8px 0}.monaco-editor .parameter-hints-widget .monaco-scrollable-element,.monaco-editor .parameter-hints-widget .body{display:flex;flex:1;flex-direction:column;min-height:100%}.monaco-editor .parameter-hints-widget .signature{padding:4px 5px;position:relative}.monaco-editor .parameter-hints-widget .signature.has-docs:after{content:"";display:block;position:absolute;left:0;width:100%;padding-top:4px;opacity:.5;border-bottom:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor .parameter-hints-widget .docs{padding:0 10px 0 5px;white-space:pre-wrap}.monaco-editor .parameter-hints-widget .docs.empty{display:none}.monaco-editor .parameter-hints-widget .docs a{color:var(--vscode-textLink-foreground)}.monaco-editor .parameter-hints-widget .docs a:hover{color:var(--vscode-textLink-activeForeground);cursor:pointer}.monaco-editor .parameter-hints-widget .docs .markdown-docs{white-space:initial}.monaco-editor .parameter-hints-widget .docs code{font-family:var(--monaco-monospace-font);border-radius:3px;padding:0 .4em;background-color:var(--vscode-textCodeBlock-background)}.monaco-editor .parameter-hints-widget .docs .monaco-tokenized-source,.monaco-editor .parameter-hints-widget .docs .code{white-space:pre-wrap}.monaco-editor .parameter-hints-widget .controls{display:none;flex-direction:column;align-items:center;min-width:22px;justify-content:flex-end}.monaco-editor .parameter-hints-widget.multiple .controls{display:flex;padding:0 2px}.monaco-editor .parameter-hints-widget.multiple .button{width:16px;height:16px;background-repeat:no-repeat;cursor:pointer}.monaco-editor .parameter-hints-widget .button.previous{bottom:24px}.monaco-editor .parameter-hints-widget .overloads{text-align:center;height:12px;line-height:12px;font-family:var(--monaco-monospace-font)}.monaco-editor .parameter-hints-widget .signature .parameter.active{color:var(--vscode-editorHoverWidget-highlightForeground);font-weight:700}.monaco-editor .parameter-hints-widget .documentation-parameter>.parameter{font-weight:700;margin-right:.5em}.monaco-editor .rename-box{z-index:100;color:inherit;border-radius:4px}.monaco-editor .rename-box.preview{padding:4px 4px 0}.monaco-editor .rename-box .rename-input{padding:3px;border-radius:2px;width:calc(100% - 8px)}.monaco-editor .rename-box .rename-label{display:none;opacity:.8}.monaco-editor .rename-box.preview .rename-label{display:inherit}.monaco-editor .sticky-widget{overflow:hidden}.monaco-editor .sticky-widget-line-numbers{float:left;background-color:inherit}.monaco-editor .sticky-widget-lines-scrollable{display:inline-block;position:absolute;overflow:hidden;width:var(--vscode-editorStickyScroll-scrollableWidth);background-color:inherit}.monaco-editor .sticky-widget-lines{position:absolute;background-color:inherit}.monaco-editor .sticky-line-number,.monaco-editor .sticky-line-content{color:var(--vscode-editorLineNumber-foreground);white-space:nowrap;display:inline-block;position:absolute;background-color:inherit}.monaco-editor .sticky-line-number .codicon-folding-expanded,.monaco-editor .sticky-line-number .codicon-folding-collapsed{float:right;transition:var(--vscode-editorStickyScroll-foldingOpacityTransition)}.monaco-editor .sticky-line-content{width:var(--vscode-editorStickyScroll-scrollableWidth);background-color:inherit;white-space:nowrap}.monaco-editor .sticky-line-number-inner{display:inline-block;text-align:right}.monaco-editor .sticky-widget{border-bottom:1px solid var(--vscode-editorStickyScroll-border)}.monaco-editor .sticky-line-content:hover{background-color:var(--vscode-editorStickyScrollHover-background);cursor:pointer}.monaco-editor .sticky-widget{width:100%;box-shadow:var(--vscode-editorStickyScroll-shadow) 0 3px 2px -2px;z-index:4;background-color:var(--vscode-editorStickyScroll-background)}.monaco-editor .sticky-widget.peek{background-color:var(--vscode-peekViewEditorStickyScroll-background)}.monaco-editor .unicode-highlight{border:1px solid var(--vscode-editorUnicodeHighlight-border);background-color:var(--vscode-editorUnicodeHighlight-background);box-sizing:border-box}.editor-banner{box-sizing:border-box;cursor:default;width:100%;font-size:12px;display:flex;overflow:visible;height:26px;background:var(--vscode-banner-background)}.editor-banner .icon-container{display:flex;flex-shrink:0;align-items:center;padding:0 6px 0 10px}.editor-banner .icon-container.custom-icon{background-repeat:no-repeat;background-position:center center;background-size:16px;width:16px;padding:0;margin:0 6px 0 10px}.editor-banner .message-container{display:flex;align-items:center;line-height:26px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.editor-banner .message-container p{margin-block-start:0;margin-block-end:0}.editor-banner .message-actions-container{flex-grow:1;flex-shrink:0;line-height:26px;margin:0 4px}.editor-banner .message-actions-container a.monaco-button{width:inherit;margin:2px 8px;padding:0 12px}.editor-banner .message-actions-container a{padding:3px;margin-left:12px;text-decoration:underline}.editor-banner .action-container{padding:0 10px 0 6px}.editor-banner{background-color:var(--vscode-banner-background)}.editor-banner,.editor-banner .action-container .codicon,.editor-banner .message-actions-container .monaco-link{color:var(--vscode-banner-foreground)}.editor-banner .icon-container .codicon{color:var(--vscode-banner-iconForeground)}.monaco-link{color:var(--vscode-textLink-foreground)}.monaco-link:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .iPadShowKeyboard{width:58px;min-width:0;height:36px;min-height:0;margin:0;padding:0;position:absolute;resize:none;overflow:hidden;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjNDI0MjQyIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) center center no-repeat;border:4px solid #F6F6F6;border-radius:4px}.monaco-editor.vs-dark .iPadShowKeyboard{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjQzVDNUM1Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) center center no-repeat;border:4px solid #252526}.monaco-editor .tokens-inspect-widget{z-index:50;user-select:text;-webkit-user-select:text;padding:10px;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor.hc-black .tokens-inspect-widget,.monaco-editor.hc-light .tokens-inspect-widget{border-width:2px}.monaco-editor .tokens-inspect-widget .tokens-inspect-separator{height:1px;border:0;background-color:var(--vscode-editorHoverWidget-border)}.monaco-editor .tokens-inspect-widget .tm-token{font-family:var(--monaco-monospace-font)}.monaco-editor .tokens-inspect-widget .tm-token-length{font-weight:400;font-size:60%;float:right}.monaco-editor .tokens-inspect-widget .tm-metadata-table{width:100%}.monaco-editor .tokens-inspect-widget .tm-metadata-value{font-family:var(--monaco-monospace-font);text-align:right}.monaco-editor .tokens-inspect-widget .tm-token-type{font-family:var(--monaco-monospace-font)}.markdown-body code{max-width:100%}.markdown-body pre{padding:0}.markdown-body code>div{margin-bottom:0!important}.markdown-body{max-width:100%;--prism-color: #bfc7d5;--prism-background-color: #292d3e}.cb-pre{overflow:hidden;width:100%;max-width:none;margin:0!important}.cb-pre,.cb-pre *{color:#abb2bf;font-family:Fira Code,Fira Mono,ui-monospace,monospace,Menlo,Consolas,DejaVu Sans Mono!important;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;tab-size:2;hyphens:none}.copy-button-group{column-gap:3.2px;display:flex;position:absolute;right:calc(var(--ifm-pre-padding) / 2);top:calc(var(--ifm-pre-padding) / 2)}.copy-button-group button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:6.4px;transition:opacity .2s ease-in-out;background:var(--prism-background-color)}.markdown-body .copy-btn>svg{width:18px;height:18px;position:relative}.markdown-body .copy-btn>svg path{fill:var(--prism-color)}.markdown-body .copy-btn--container{position:relative}.markdown-body .copy-btn--container:hover .copy-button-group button{opacity:.4}.markdown-body .copy-btn--container:hover .copy-button-group button:hover{opacity:1}._messageContainer_1ks3y_1{width:100%;box-sizing:border-box;overflow-wrap:break-word;color:var(--ifm-color-content);padding:20px;font-size:inherit;line-height:inherit;display:flex;flex-direction:column;align-items:flex-start;gap:10px}._messageContainer_1ks3y_1>*{max-width:100%}._messageText_1ks3y_19{overflow-wrap:wrap;max-width:100%!important}._messageText_1ks3y_19 a{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration);transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}._messageText_1ks3y_19 li{margin-bottom:var(--ifm-leading)}._messageText_1ks3y_19 p{margin:var(--ifm-leading) 0}._messageActions_1ks3y_37{display:flex;flex-direction:row;align-items:center;gap:10px;color:var(--cookbook-muted-color);font-weight:500;font-size:14px}._messageButton_1ks3y_47{cursor:pointer;opacity:.6}._messageButton_1ks3y_47:hover{opacity:1}._messageRating_1ks3y_56{cursor:pointer;opacity:1}._markdownBody_1ks3y_61{max-width:100%;overflow:scroll}._typingAnimationContainer_1ks3y_66{display:flex;align-items:center;gap:4px}@keyframes _typingAnimation_1ks3y_66{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-6px)}}._typingDot_1ks3y_85{display:inline-block;font-size:24px;line-height:1.5;color:var(--ifm-color-emphasis-600);animation:_typingAnimation_1ks3y_66 1s infinite}._typingDot_1ks3y_85:nth-child(1){animation-delay:0s}._typingDot_1ks3y_85:nth-child(2){animation-delay:.2s}._typingDot_1ks3y_85:nth-child(3){animation-delay:.4s}._flex_1ks3y_103{display:flex}._suggestedQuestionContainer_lwl8p_1{position:relative;display:flex;flex-wrap:wrap;padding-top:20px;padding-bottom:12px;gap:8px}._openModalButton_lwl8p_10{background-color:#1098fc}._suggestedQuestionBox_lwl8p_14{height:max-content;padding-top:12px;padding-bottom:12px}._maximizeButton_lwl8p_20{position:absolute;top:20px;right:20px;color:#fff;cursor:pointer;z-index:20}._column_lwl8p_29{display:flex;flex-direction:column}._readSection__container_lwl8p_34{height:calc(100% - 100px);overflow:scroll}._readSection_lwl8p_34{--padding-top: 0px;--padding-bottom: 75px;flex-grow:1;display:flex;flex-direction:column;justify-content:end;padding-bottom:var(--padding-bottom);padding-top:var(--padding-top);overflow-y:scroll;gap:10px;height:100%;mask-image:linear-gradient(to bottom,transparent,rgba(0,0,0,1) calc(var(--padding-top) + 40px),rgba(0,0,0,1) calc(100% - var(--padding-bottom) - 40px),transparent calc(100% - var(--padding-bottom) + 20px));text-align:left}._readSection_lwl8p_34::-webkit-scrollbar{display:none}._readSection_lwl8p_34{scrollbar-width:none}._writeSection_lwl8p_75{position:relative;display:flex;flex-shrink:0;align-items:center;width:100%;height:max-content;gap:4px;padding-left:20px;padding-right:20px;border-radius:10px}._writeSection_lwl8p_75 textarea::placeholder{color:var(--cookbook-muted-color)!important}._writeSection_lwl8p_75 textarea{font-size:16px}._sendButton_lwl8p_96{border-radius:10px;background-color:var(--cookbook-modal-background);position:absolute;display:flex;justify-content:center;align-items:center;padding:0;height:35px;width:35px;bottom:10px;right:30px;color:var(--cookbook-muted-color)}._sendButton_lwl8p_96:hover{color:unset}._sendButton_lwl8p_96>svg{margin-top:4px;color:var(--ifm-color-emphasis-600);transition:color .2s ease-in-out}._sendButton_lwl8p_96>svg:hover{color:var(--ifm-color-emphasis-700)}._container_lwl8p_163{position:relative;display:flex;flex-direction:column;overflow:hidden;color:#646464;padding:0;animation:.2s _fadeinfall_lwl8p_1;text-align:left!important;background:var(--cookbook-modal-background);border-radius:10px;transform:translateZ(0);width:100%;height:100%;max-width:var(--cookbook-modal-width);max-height:var(--cookbook-modal-height)}._row_lwl8p_185{display:flex;flex-direction:row;flex-grow:1;overflow:hidden}._sidebarWrapper_lwl8p_192{box-sizing:border-box;display:flex;flex-shrink:0;overflow:hidden;transition-duration:.3s;transition-timing-function:cubic-bezier(.87,0,.13,1);background-color:var(--ifm-background-color);width:0px}._sidebarWrapper__open_lwl8p_204{width:260px}._sidebarContent_lwl8p_208{position:relative;box-sizing:border-box;display:flex;width:260px;flex-shrink:0;flex-direction:column;border-right-width:1px;border-right-style:solid;--tw-border-opacity: 1;border-right-color:var(--ifm-color-emphasis-200);overflow:hidden;text-align:left}._container__expanded_lwl8p_223{height:100%;box-sizing:border-box;margin-top:-300px}._inputField_lwl8p_229{appearance:none;background:var( --cookbook-searchbox-background, var(--ifm-color-emphasis-100) );border:0;border-radius:10px;color:var(--cookbook-text-color);flex:1;font-size:14.4px;height:100%;outline:0;width:80%;padding-left:16px;padding-right:16px}._suggestionsContainer_lwl8p_248{display:flex;flex-direction:column;position:relative;z-index:10;width:100%;height:max-content;padding-left:20px;padding-right:20px;padding-bottom:20px}._suggestionsContainer_lwl8p_248>*{height:max-content}._tags_lwl8p_265{position:relative;flex-direction:column;display:flex;flex-wrap:wrap;align-items:start;width:100%;row-gap:8px;column-gap:4px;font-weight:500!important}@media (max-width: 768px){._tags_lwl8p_265{padding:unset}}._tags_lwl8p_265::-webkit-scrollbar{display:none}._tags_lwl8p_265{scrollbar-width:none}._tags_lwl8p_265>*{width:max-content}._modalOuterContainer_lwl8p_300{--cookbook-text-color: var(--ifm-color-emphasis-1000);--cookbook-muted-color: var(--ifm-color-secondary-darkest);--cookbook-container-background: rgba(47, 55, 69, .7);--cookbook-modal-background: var(--ifm-background-color);--cookbook-searchbox-background: var(--ifm-color-emphasis-100);--cookbook-searchbox-focus-background: var(--ifm-color-black);--cookbook-hit-background: var(--ifm-color-emphasis-100);--cookbook-footer-background: var(--ifm-background-surface-color);--cookbook-key-gradient: linear-gradient( -26.5deg, var(--ifm-color-emphasis-200) 0%, var(--ifm-color-emphasis-100) 100% );--cookbook-modal-width: 1000px;--cookbook-modal-height: 800px;--cookbook-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--cookbook-mobile-trigger: 768px;background:var(--cookbook-container-background);left:0;position:fixed;top:0;z-index:calc(var(--ifm-z-index-fixed) + 9998);display:flex;align-items:center;justify-content:center;cursor:unset;padding-bottom:calc(env(safe-area-inset-bottom) + 90px);padding-top:20px;padding-left:20px;padding-right:20px}._modalOuterContainer_lwl8p_300{height:100vh;padding-bottom:calc(env(safe-area-inset-bottom) + 90px);width:100vw}@media (max-width: 768px){._modalOuterContainer_lwl8p_300{padding:unset}}@supports (height: 100dvh){._modalOuterContainer_lwl8p_300{padding-bottom:20px;height:100dvh;width:100dvw}}._header_lwl8p_356{display:flex;border-bottom:1px solid var(--ifm-color-emphasis-200);background-color:var(--ifm-background-color);box-shadow:var(--ifm-navbar-shadow);padding-left:20px;padding-right:20px;width:100%}._poweredByContainer_lwl8p_369>*{color:var(--ifm-font-color-base)}._poweredByCookbook_lwl8p_373{display:flex!important;align-items:center!important;padding-left:0!important;font-weight:800!important}._poweredByCookbookLogo_lwl8p_380{width:calc(16px * var(--ifm-breadcrumb-size-multiplier) * 1.5);height:calc(16px * var(--ifm-breadcrumb-size-multiplier) * 1.5);margin-right:6px;margin-bottom:3px}._notActive_lwl8p_387{pointer-events:none}._closeBtn_lwl8p_391{position:absolute;width:35px;height:35px;top:10px;right:10px;color:var(--cookbook-muted-color);transition:all .2s ease-in-out;border-radius:10px;display:flex;justify-content:center;align-items:center;padding:0}._closeBtn_lwl8p_391:hover{background-color:var(--cookbook-modal-background)!important;color:var(--cookbook-text-color)!important}._buttonIcon_lwl8p_411{cursor:pointer}._buttonIcon_lwl8p_411:hover>*{color:var(--ifm-link-color)}._buttonIcon_lwl8p_411>*{transform:scale(1.1);transform-origin:bottom;transition:color .15s ease-in;color:var(--cookbook-text-color)}._sidebarToggleContainer_lwl8p_426{position:absolute;width:32px;height:max-content;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:10;left:-18px;top:0}._sidebarToggleButton_lwl8p_440{margin-left:4px;display:flex;height:50px;width:32px;flex-shrink:0;display:flex!important;flex-direction:column;align-items:center;justify-content:center;align-self:center;cursor:pointer;border-radius:10px;background:var(--ifm-background-surface-color);border-color:var(--ifm-color-emphasis-200);--color: var(--ifm-color-emphasis-300);--hover-color: var(--ifm-color-emphasis-200)}._sidebarToggleButton_lwl8p_440:before,._sidebarToggleButton_lwl8p_440:after{height:12px;width:4px;border-radius:9999px;--tw-bg-opacity: 1;background-color:var(--color);transition-property:all;transition-timing-function:cubic-bezier(.87,0,.13,1);transition-duration:.3s;--tw-content: "";content:var(--tw-content);display:block}._sidebarToggleButton_lwl8p_440:before{content:var(--tw-content);transform-origin:bottom;--tw-rotate: 0deg;--tw-translate-x: 0px;--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate))}._sidebarToggleButton_lwl8p_440:after{content:var(--tw-content);transform-origin:top;--tw-rotate: 0deg;--tw-translate-x: 0px;--tw-translate-y: -2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate))}@media (hover: hover) and (pointer: fine){._sidebarToggleButton_lwl8p_440:hover:before{background-color:var(--hover-color)}._sidebarToggleButton_lwl8p_440:hover:after{background-color:var(--hover-color)}}@media (hover: hover) and (pointer: fine){._sidebarToggleButton__open_lwl8p_506:hover:before{--tw-rotate: 15deg;--tw-translate-x: -2px}._sidebarToggleButton__open_lwl8p_506:hover:after{--tw-rotate: -15deg;--tw-translate-x: -2px}}._sidebarToggleButton_lwl8p_440:not(._sidebarToggleButton__open_lwl8p_506):before{--tw-rotate: -15deg}._sidebarToggleButton_lwl8p_440:not(._sidebarToggleButton__open_lwl8p_506):after{--tw-rotate: 15deg}._sidebarToggleButton_lwl8p_440{transition:all .3s cubic-bezier(.87,0,.13,1)!important;transform:translate(0)}._sidebarToggleButton_lwl8p_440:not(._sidebarToggleButton__open_lwl8p_506){transform:translate(10px);padding-left:16px!important}._sidebarToggleButton__open_lwl8p_506{transform:translate(-13px);border-top-right-radius:0;border-bottom-right-radius:0}._option_lwl8p_548{--bg-color: transparent;--active-color: #363a3f;--border-color: #30a46c;--icon-color: #edeef0;--padding-for-icons: 80px;position:relative;padding:15px 0 15px 16px;display:flex;align-items:center;justify-content:space-between;width:100%;border-left-width:2px;border-left-color:transparent;border-left-style:solid;background-color:var(--bg-color);transition:all ease-out .15s;cursor:pointer}._optionLabel_lwl8p_572{transition:all ease-out .15s;font-size:16px;font-weight:400;--tw-text-opacity: 1;color:var(--ifm-color-content);width:100%;height:22px;line-height:1.25;overflow:hidden;word-break:break-all;--tw-text-opacity: 1 !important;mask-image:linear-gradient(to right,rgba(0,0,0,1) calc(100% - var(--padding-for-icons) - 32px),transparent calc(100% - var(--padding-for-icons) + 16px));mask-size:calc(100% + var(--padding-for-icons) * .6) 100%}@media (hover: hover) and (pointer: fine){._option_lwl8p_548:hover>*{opacity:1}._option_lwl8p_548:hover ._optionLabel_lwl8p_572{mask-size:100% 100%}._option_lwl8p_548:hover{--tw-bg-opacity: 1;backdrop-filter:invert(10%);-webkit-backdrop-filter:invert(10%);transform:translateZ(0)}}._option__active_lwl8p_611>*{opacity:1}._option__active_lwl8p_611 ._optionLabel_lwl8p_572{mask-size:100% 100%}._option__active_lwl8p_611{--tw-bg-opacity: 1;backdrop-filter:invert(10%);-webkit-backdrop-filter:invert(10%);transform:translateZ(0)}._optionIcons_lwl8p_626{position:absolute;right:10px;margin-top:auto;margin-bottom:auto;z-index:10;display:flex;width:max-content;align-items:center;justify-content:center;gap:8px;transition-property:opacity;transition-timing-function:ease-in-out;transition-duration:.15s;opacity:0}._sidebarBottomContainer_lwl8p_645{margin-top:auto;bottom:0;box-sizing:border-box;width:100%;overflow:visible;border-top-width:1px;--tw-border-opacity: 1;border-top-style:solid;border-top-color:var(--ifm-color-emphasis-200);padding:20px 14px;background:var(--cookbook-modal-background);flex-shrink:0}._mainContentContainer_lwl8p_663{position:relative;display:flex;flex-grow:1;flex-direction:column;padding-bottom:20px}@keyframes _fadein_lwl8p_1{0%{opacity:0}to{opacity:1}}@keyframes _fadeinfall_lwl8p_1{0%{opacity:0;transform:translateY(-30px)}to{opacity:1;transform:translateY(0)}}.react-scroll-to-bottom__panel{width:100%;max-height:100%;height:max-content;overflow-y:auto}.react-scroll-to-bottom__BasicScrollToBottom{position:absolute;width:100%;height:100%}.react-scroll-to-bottom__AutoHideFollowButton{background-color:#0003;border-radius:10px;border-width:0;bottom:5px;cursor:pointer;height:20px;outline:0;position:absolute;right:20px;width:20px;padding-top:50px}.react-scroll-to-bottom__AutoHideFollowButton:hover{background-color:#0006}.react-scroll-to-bottom__AutoHideFollowButton:active{background-color:#0009}._container_lh73c_1{position:relative;display:inline-flex;height:20px;width:44px;align-items:center;border-radius:9999px;background:var(--ifm-background-surface-color)!important;transition:background-color .2s ease;border:1px solid var(--ifm-color-emphasis-300)!important}._containerActive_lh73c_13{background:var(--ifm-color-info)!important}._containerActive_lh73c_13 ._toggle_lh73c_16{background:var(--ifm-color-emphasis-900, #000000)}._srLabel_lh73c_20{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}._toggle_lh73c_16{--position: 4px;display:inline-block;height:12px;width:12px;transform:translate(var(--position));border-radius:9999px;transition:transform .2s ease,background-color .2s ease;background:var(--ifm-color-emphasis-900, #ffffff)}._toggleActive_lh73c_45{--position: 27.2px}._modeContainer_1cc2j_2{position:relative;display:flex;flex-direction:row;align-items:center;justify-content:left;gap:10px;margin-bottom:15px;margin-top:-5px}._modeText_1cc2j_25{font-weight:700;color:var(--ifm-color-content);font-size:13px}')}(); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e,t){for(var n=0;ni[t]})}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var i={exports:{}},a={},o=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable;var c=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach((function(e){i[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(a){return!1}}()?Object.assign:function(e,t){for(var n,i,a=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c=f},a=function(){},e.unstable_forceFrameRate=function(e){0>e||125>>1,a=e[i];if(!(void 0!==a&&0x(r,n))void 0!==c&&0>x(c,r)?(e[i]=c,e[s]=n,i=s):(e[i]=r,e[o]=n,i=o);else{if(!(void 0!==c&&0>x(c,n)))break e;e[i]=c,e[s]=n,i=s}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var _=[],E=[],I=1,S=null,B=3,D=!1,L=!1,N=!1;function T(e){for(var t=k(E);null!==t;){if(null===t.callback)C(E);else{if(!(t.startTime<=e))break;C(E),t.sortIndex=t.expirationTime,v(_,t)}t=k(E)}}function Z(e){if(N=!1,T(e),!L)if(null!==k(_))L=!0,t(M);else{var i=k(E);null!==i&&n(Z,i.startTime-e)}}function M(t,a){L=!1,N&&(N=!1,i()),D=!0;var o=B;try{for(T(a),S=k(_);null!==S&&(!(S.expirationTime>a)||t&&!e.unstable_shouldYield());){var r=S.callback;if("function"==typeof r){S.callback=null,B=S.priorityLevel;var s=r(S.expirationTime<=a);a=e.unstable_now(),"function"==typeof s?S.callback=s:S===k(_)&&C(_),T(a)}else C(_);S=k(_)}if(null!==S)var c=!0;else{var l=k(E);null!==l&&n(Z,l.startTime-a),c=!1}return c}finally{S=null,B=o,D=!1}}var Q=a;e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_continueExecution=function(){L||D||(L=!0,t(M))},e.unstable_getCurrentPriorityLevel=function(){return B},e.unstable_getFirstCallbackNode=function(){return k(_)},e.unstable_next=function(e){switch(B){case 1:case 2:case 3:var t=3;break;default:t=B}var n=B;B=t;try{return e()}finally{B=n}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=Q,e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=B;B=e;try{return t()}finally{B=n}},e.unstable_scheduleCallback=function(a,o,r){var s=e.unstable_now();switch("object"==typeof r&&null!==r?r="number"==typeof(r=r.delay)&&0s?(a.sortIndex=r,v(E,a),null===k(_)&&a===k(E)&&(N?i():N=!0,n(Z,r-s))):(a.sortIndex=c,v(_,a),L||D||(L=!0,t(M))),a},e.unstable_wrapCallback=function(e){var t=B;return function(){var n=B;B=t;try{return e.apply(this,arguments)}finally{B=n}}}}(te),ee.exports=te;var ne=ee.exports,ie=P,ae=c,oe=ne; +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */function re(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n