From b48e06de040e20ba29ebdaccff934a3c9d844a1b Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Fri, 14 Mar 2025 10:52:33 -0700 Subject: [PATCH 1/2] Add VSS Blogpost. --- docs/_blog/announcing-vss.md | 180 +++++++++++++++++++++++ docs/assets/vss-data-flow-simplified.png | Bin 0 -> 37332 bytes 2 files changed, 180 insertions(+) create mode 100644 docs/_blog/announcing-vss.md create mode 100644 docs/assets/vss-data-flow-simplified.png diff --git a/docs/_blog/announcing-vss.md b/docs/_blog/announcing-vss.md new file mode 100644 index 00000000..3f186a4b --- /dev/null +++ b/docs/_blog/announcing-vss.md @@ -0,0 +1,180 @@ +--- +title: "Announcing Versioned Storage Service (VSS)" +description: "The Versioned Storage Service (VSS) provides a server-side storage solution for non-custodial mobile, web and hosted wallets." +date: "2025-03-14" +authors: + - Gursharan Singh +tags: + - VSS + - Mobile + - Storage + - Self-custody +--- + +The Versioned Storage Service (VSS) provides a server-side storage solution for non-custodial mobile, web and hosted +wallets. VSS significantly simplifies the wallet development process by offering a reliable, secure, and robust +framework that stores and manages the various forms of state data required for the Lightning Network (LN) and Bitcoin +applications. + +# What Is VSS? + +VSS is a client-server storage framework for Lightning Network (LN) and Bitcoin wallet data. VSS primarily serves two +core functionalities: + +* Recovery: VSS enables the restoration of states and wallet access, helping users regain their funds and control even + in scenarios of device or data loss. +* Multi-device Access: While this isn’t available now, future phases will allow the same wallet app across multiple + devices to securely share and access the LN state, leading to consistent access to funds. + +Clients can also leverage VSS for general application metadata storage including payment history, user metadata, and +more. + +# Why VSS? + +VSS aims to lower the barriers to high-quality LN wallet development. Wallet builders can host the VSS service in-house +for straightforward interaction with the service or use reliable third-party VSS providers, if available. + +VSS was designed with privacy in mind, offering features such as client-side encryption, key-obfuscation, and robust +authorization. It also ensures data and version number verifiability, and will support multi-device access in the +future. The software ensures modularity for seamless integration with different storage backend technologies. +Additionally, VSS can work with various applications with different key-level versioning and data-integrity mechanisms +and even allows disabling versioning for single-device wallet usage. + +### Why do we need VSS as primary storage for lightning wallets? + +Keeping VSS in sync with the latest Lightning state isn’t optional; if the server’s version lags and the user loses the +device, there is a risk for funds loss. That’s why VSS-powered wallets must be designed to hold off advancing the +lightning state until everything’s securely updated on the server. + +The on-device state of a Lightning wallet changes every time a user sends or receives payments. While some backup +options offer frequency-based backups, these can lead to data being out of sync and do not ensure full funds or channel +recovery if the device is lost. Protocols that sync asynchronously based on intervals inherently have insufficient data +for complete recovery by design. + +Using VSS as the primary storage ensures that every state change is securely stored in real-time, enabling full recovery +of funds and channels regardless of device loss. + +
VSS High Level Data Flow (Simplified)
+Z{NqV>4O!wWI9ZV?#s+_lHdeg+l zw27}71ZGrM|NFZ=OZ3kXYy@Bl^d~-89$1`kn(`<9JhTEW0}C+ou!+2UxemQmxGs>w zKmtmp2_sIdb~E4Kv9PcZe*@=VSIXmt%*;!o(09J^p&bz5 z&hGAO0b0MUpV7BqRY2N>HY`y8{M=j-mhrE)SanTcbU_-y55nMg;guQ6dnPF uP>=wE$`woIu)j8?an(_Af%|(xppPRaLOuy9-@;1qG5*P>@_kN}gX>*7V)h z%QK(EilR2ht7g~NlVW0U808ccaFDr$g_zh_Kx9ASu0CW#8A6V)sW}E?5Q86Bk?8K4 zNSm5wiKc0knfF0V_U6B9F+%f{m?*}qk5y(g;o}$+QV;}y&$6PD)H4I?J%aKPPL8jD z_U;MTVU{$yuisMd1YrhZ=|`2}3L66obhm*ry+ZyC7K9PH`a3^wA;_bY^ZqAXY1ps| zjEs!1?y{MY==PZzBjXfTXoe$zj0KIpzwPf=Nyq}`TrA8>Ef@JooauqbKL-non|2 7%laQ*sq@FA^DH9STdJ36c&lUSC6nXz08OcpPI zP9wq%Z%#)a5l5n-KMi0P+@3`Ak7}K_jrMrq- *-iipPux}n$$i66_qJL9SDNnN%AbIAhf=Q;ETTWTI@7=W<;AVsVNl*bJ z$|uVrU)`$H=(C8QC}UWg*!fdZe}`g)?7YH4E)EVf%BRJMR>0wH^E5;GkHy{4ccI&l zU#gL)EVV{nH7fo)X5CO;SxH1d5G9)lAQBo>M%vNHg?IA>A9d9qnMhuNhv8v#nGJ=? zpDbMA5JDoWR?pi%Jk)P^;{j;`dh}&lw?&ADhK98AV+`ZGyu5z@)=0>bzm?90KXFsQ zZ^ZlnEMbs<5#hWcS#%`0Xn+2M(vhW*v@$&{5;^yTt8Q*%W3smwOo5NZB_wWZSFF{C z%{T0ZdFxSh^0bbRnm|Q|+i~gF?i(C*SRXCts{fl_R78vj6Mu)eAL#FAl~0&kSpnvu zIak7V>sF1;w5YqgP+&7y6{6ZrAX(-3sb3CZ^n)|O6p;fd?01pjQV~CI(^!Q*0plmO zptjkY(Xt6yp-E3sY0~Hwke!T-W*{qSa>VFx;v#@hqGDpe5_)`gb_Pl7hwb-i8)qRp zSpz?`jG|%>M3RY_S=;yTgTH=Fezi6JyEQExP!U;%*`jY(HQwZl3#96NyN#ZXj*gR) z)6vlplHF`;DAq;Ii j0#Td!UfG#S`9ID~|Rj8|IgJ3D`c&=Miea_d}n5SS}p0t*nJXGj82fTCqHbvRS_ zt&^3Hn5-l9F5Vt8Jvd|`0cKc?_Vg&Sk*1?4eHiMG780N7xwJsl1*MlMf`C?FaAYLD z%QQvcwJe$hoE>0(_B@)81xF}YU4e$aefxF`)LzGxq>mq=Qtq4{PC@+rJ6Ip{#U&y{ zp?WRL**H;|Ro27J&g2LJIt=)p$@SfBe}pr7dwYW^5pq?8DtmcxG1xBb9UbZTUws50 zACzLgm!pFXp64YccX>si*RKcGY6vmWjJ{M#>p3oxcj90!8-+p>KuC+v2yI5HNA6!k zL%WKN+oU5MY;3+lh3U@(%@hm~kf{WnHb8f~f{zc$-0klz@HEWN&qFpR8r}qFH4#2e zvqADhv 3&2u%FL1q4=$LR*eE$5I!4JN^Ai<+>xO|(0iT#w=2=MVEJLVzz!@K6h z0K|ak2lMw2lM=VX4cNLzDVu9+I{NyX>+7L0 !I5b93OO4Izu|nBPfHXR6cdF)ghF)suz>NQZ?*ZcUA# z-D-zP37A!xB8ZnbDFW_neDrpg2W|l2k9eJ&xR<3t-xSU!e2ZB0ow$m+dcc=aZ!FxI z*;%kJCMG06S63^aRYnC(B7+7gkPQ(AxCoveJ2p)X4Un0@odl;6%s8rFva@ec8Kl|V zj6_dNOz7(9(4DalS?)ub1kKpMz`)#m$phCN7zq8cI1aLF5+RMAa^LL&+i~B=t ^sK{z+$F2GpaJ$L77M zfByX0+S-D|kWqDwi;Jta9lKS|ix@6N-Xb1{M{9%K`};QqIN~TNEnZ!HMoSQh*5n}5 zO6ujrOua-8xfVRt661Q{Yz8pH6!Bwh%nb@DgjuO+*Ebx*m^GD|u^7X-x=7;-AOtuj zRMy-h#f&KM1$}(v;R*-@3{wDrSwCPP)vs5 9OhWwrR@{Yn-Tj9}-aqqvwssj+i zLnwrtx1{JjcujtUtK)@OW#6ITX&P633dtPPn}Llj2e_q>Ze(O6{BqTck&*}Y3(l^t zll<}y4!p@oV;m8-Na~fE&Ojh B>yi{hJpp1_R31qxP$EU^z=IQo5tLSnXpiG68}+Dp*d-3 zxojV_jJ>v#@A6#SSVTCjlJbnd0R^@mDgahR{@!b0tj1}Z-aAWi3hx601FK$t
DHAI3WwLIn+@1M=9xS;BEJ9N*!1x#c#Rz*z4=s*TLuxDlGu-VaLl!Qf-ry zZ=j0}0S`DmO!vn?vry(Y2h-l8FAHL@h6{2oE=K^lr(70kFJBJ!jP5hw{*;|fO{6cL ze1&Y)y08b14ICI!2{^$33;|BEv9bnaE#oeW1f`$Nsy~3k56;cDF!~fhC(g+?SiUYB zjW~Z4!Nu&jKKdFAh572#w6qVcCxzfNBq>yS93RZhnIvT464BKfG+`!Wf# K6wWSK+5mpTK(zda65&L4c(UEpwM(7Ygv=!UCXdFy3OUYjJ#N|B{~{ zdVC$s+xyumZ`g0%Ok?}m)@C;JSq)MpC???TKL^tVE~3On3e 9N4em#GC6t>3 ziNeCd_^*U1=MBMSzq;%$Xj|8Tx%SQ6kBINz#WPhXNk~deyP%Z<(yZgwpC%DsoR<^T zL*Kp`frFk|>b mwX7tq?AOghSp! zPU;q`IT?Ylh{b0ll zR=)L?{+lBfBo)dg&?}_K?eJAX*0pQb8el3XUakUYC%_{zQc_`57|jDr zUnejl!{E2rlY)!5Z?}+xQ5m3|S+NFuM~Vdut1yP}6)51Hsb2%=8#kn~2g)l+DLPYn zd6S}}hbC1{LJ9BVeF4o7AOB2^%!dKx16O{^MheM8NND`muZqk}7NE;;R=^etFW_{* zM*(e!-nX8tg~SID2kY1X9`cL8A*ZIk1*{ZioThCU{4C2|VaH&MATcyl-oW6`ds;z! ze0&E1T`@6V@Z$HK4;1P@j#5UGu-v!-oSz!ccyB%R-W6;Sa43MbVQAQNVKXBWA%<}= zn9hLlE>ILeYJhS; b1&eF21r<0d6*@isF3nV9voJYkUz9xdP1D(Xm3EV#$h>q zU>O7ikLhpz;o-#p+0y-Bw1MpUU5BOK3&{EVH#Rml^jtmzFV$V#J%X&XP&LWU%q#|$ z*Z&qv7zJBC{@-GmBXn4Ni4%}8z;y1g`YV*-Eevuguzmm-1o8t8Ha3H`jE#+rt}ZRC zk-3>!psDT6pc%U=DEn-qejW1wSo(RP%}$8eynZc_^&I+2;0hag0sh%4oq{1t 5^8&o9+}SvnF7_HzKv zE>zf=8B8Qx8ZDc7my?t5-5}uCs7s*R zr~UH2F)tQD)>Fgx4P)nTb1%<}z%0Q4i;HEsz{7`N?z@HWFPf`LNX3hKy>4u542e?* z2CbBpuhP>$HtVKAKt^pn JMN2(b4vGc!(;E{mD5dPWohSr(5{=*h_|LA?TS2NOxQRpT&V zBbUgx4&2DDs`l$w;8o2zOar<@04FEyp!R_9>LN7R;40OFQw#j&Rh)L>r$@(Yr3W$7 zcw)rZDLoC=slctDu}8xxfhu#jyUX)$hB6>GC+9arZTp9dlP36bwCu+ZX~Mv3;00Y? zuJSxT10yhyqQvd(ZC?2&Xc9zNRh5*zsJ?y@;;u>wO30q82kgyPosA;HW+>V4@lPPl zfmj828&oh59z!KFRB|yfF*$DEzJw_vDcQ=^a1t320V96azkmOR!AhSlQ^*Hk2HJ%Q zpoQHd(0M>)f_7vY+X{RW$Y4afiJqPwuYAK^|C1kw{TEzdtuF(&nij0+fZONipA+x{ zCWm?h<6-)imMc)>1wr}%l`}$`Ehq>W)4>5D5z%A2Iq8epJ!9j#y1I*71=_D$W!C~d zw7Yjpa&y}axKn$XeVclFdkuhjtgq{8Yr6s2hZ#9Wv#6@3c{^Gfnj$xRV^(5pLko-L zxw*kfpOdg|JEl0%G^JcsP?tc;;k ?%GMYm8l|&<>Z*FmM3a$iE0!w-T2>akbojsc5 z-FKKkDK5SPv#=Qn4@0g77=ri;o#IX&QM>^>Z(<;vrK5RY0h7hcIYP585)E!l1c7lC z7 P~PDWG-;#3pg8sbP7T^BynyuqH`OvVU4UW5mDN?y zL7%^p+BHbNpOrVwO<~_S?%1{Bh0_Q$8 50)#Dik(0;5$%9cZ=o!G5?gr9rty5F< zg_zA3s5?#@WrRzB^_)Voa2O`S0zW|*x<5LncM53~8U`C9SahmO>2L<>A 1=wwT^j6c8lL2TA=i zMi3BHh#s(A@pWkxM)g%O{D&^lGBaCr1c+CcY2sKlwVW9a?Z(7K*}-K8sRmjh_D)%R zGLcZ@A;WRTKCV496S6*yZx3*Zfj&gJ7HIm(HGCn v#0}GzLa|1*= z658(o8NnS}os^_2_3yee>1zORM2}Cl>JBFX!t+#4Jh*7Dy%SSbg**c>bD!pY-~MS) zU$I`H6O85cWdus2|Fylkd*QiG5B=Rau2r-|c-8LzyZ{;;Nea+^fvKFzR}-V!G_aj6 zWYGSIkT!9hrytKCXzm5e&R+8sL?#jh2 s#5`?_4q17@hwlqkr^4os||;}l3le*iA1 z{0)65Wwy|N0cC#0;bL^GtaKVADO;>nL>QI#`SbY1#F%#Y`S$npPkr?@LUcqfvC@$y zi3ZiTK*NFokH6Q0TmGep1+|Di8-25Ha#T4z4T+c*AU;e {JWXX2(zAi{O{|+~;U3J-`0j?ha;Zm%XBwbKeQ``T|0_e8(-%1_~ zKNSu`61 h)u(X _JKX}8K zUFWpToZS(Sfy;=wg++UJH{Bg0?3E (}VW$UR ^i0~0YoGtjw!fWgEnn?MBsA;_Qrc0scqdZrJpcX*(K0u(+7Cx}_c&B@y&@7RJY z&COAGc;Fg<4=0es2~8&f0je%65WsV)s^SePzzho8gNuy~kAYxiVW|SIbGcToDisWv z 1aTf!D2#mRyQUzQD znFOF`RBY_|ztutzczNZ)ujU^R0Q1HA8GSEC%a(z=BVM3vgJjj2aPRU30K6H5Pe{ng z&JMHUQHhD#Po7*BA%+52qQnO5$w5;yzRBQ^&3)+nT_6+$=9QtNAjuxx&%3^{@yMVN zadSI{ld>>3m#R)nO3G{A%WyFTsGy`2uEPoCrva`BI3I`w=;L>Jc(Uaa;ddPX_ka5) z3UZxMF+2uh6h8IEph=C>LMNrR_86#pgLlCo4MTFE7=Y>Zs4($ Lz#|^yejTe?XzB(jf$=3+io12q_91 z@dEx_2 pqAGD=<&}DJzTa zf!!Qnp6A6HFtmQYKdgTVvk6WR7`!gjDQL^wv-$=3=sol?LEb4UvH>j?e9#)T&UX+7 zPR>_=J3;M(Pz)rb9W8l&S$^Qwvx5KLijkCLA^MqKmCG)xpABSXPzOM_A$j+yxL7$~ zJ>|YF)6JX9(0+Wu=LR|mP(T>?hbkZ^Ee)!1x=OANXwpeZ6TlRLgM)!@y9gzNdIOR= z?0a%dOzXVeg&H*Jwt0n`kAsQnq9*|}&G1H6mX=yY2Hw!DH8Gh39YTUhSyB=wwnIV} zmP&`yx<=8}&~Q4hu)Z3aAppc-&{Hnu5iN3oKA`Lg!UIwOP61ng7aR O)Ndk?gb z2H}SJ?f*I4&pTos2nrVJH=OPEJobdgZitGB0W)&jUwJ+MGg>WA9lGd1ZlM31QBmOt zu?l1#*lKWSXeQfdXq$H>+yf#VoS(lAOc^jXM6lz=cojT@0}QsXuOA<}@!h;>0l6QL z6@=>i#W5tHG}5UE__hV(*bSEH6g+KfF cZeP8rrA=tt9u$%@1p>WGs2+)rt z(7Rw@-wE+rT3P~Ox>)0)?!+3{lI8?(PlP9P@n2{?AbN*rP3B-VpKHo^5-ks!Ai| zOpI__^nY4gTk|CSa~1R)m{r3-_Tb#-sy 2X9FJ;@dADU z;y85wtgWr1^fFa25Iq<@g8L{hD_e397%;j FYL1qCnGgAH8WEpZzw&Y3xdJ({L~2%HZ?UJqki}PeL-Gc4GeT6 z1|2cCiA9SwYVGEKLK+MVIP-K{q@|PCezY|*VO7;Jkr}wBC(X=wi9}R}LG`8&lM41# zVq%O4R+a16S1(<^`U%B!D)j*!g^fomiswhy?^YGnpYPrB`|QY zgumu^V{QDnyOw9S-us6EWOWqd%1OFzFmOs=Vx|ZfS=UuoE(T2pY1H>Tg(nmQt_7*& z4h};phMtL7%2O2;5Hc~5-!MEP&ZJpo2TIWA&-kKm_mY6XNM=}=o13H8VKV!_VQbB= zHq&Whf#wMT#4GkLD{U%}nd{vSIS~UmCIF@y&i>s(Qo*GGYX^lRN#Hdm0^nw^m4&1o zk_qJ3EB^^rhynZpV7H}>i)s5|0z5nsdO#mxt}o#x!O3b1PhnAI_a_D$D&2Jy0f9I@ zFijp4W0>3aau@ke8H4$A{EMet*rKMN>3a+<{ev_iuJ`?-X_}sXAqOB{m&rL(sWf1= z|H2wlKmYQ&aY-+4o#hZaGrrBrU@mmIKu?9)Acwh@Fld^?Cq)qOnoRuq1*VM~Xf*hH z3#zNN8cwpH9S9N>=rd4>b*mj@ m3QN0l^CG8r=|I`v?!CIF1Bs0(;%(0&zbqdRySe4%kv#!veGc7f-uw3{S~6|y z?Pqt7AkOZ)?wQNWUqKq-0X1N_zAXe|#oM>2Iop!*atZR{l9HYMeTfu66M##b!O9fR zfZ}B}ub_jo5x(G0jER8f2}G)k#C^CnvJ3v_GZ^6M-Nw7d>VC4_2Er)@k~-}D9^e9y zfiyFq!r&zfWglp7w`lUY1n`1b6lTHU87>+cD8$Cesj{L%(wO!8;~M3&q 7`g5#h-busJZ4dRJs*l!`M!qE9L>e?9Olz=9TtwB>5I z{*3b+PykX1+xs+wt5P_)9?>Z&g{tfiXx^*ja z*6{QI>0^DcB0MN9NyGKVd5V($0f+wlXfXwzVWJ7XjI_dY+ovPaffpJrw1-SepfZAn z8`wMzDUgSS GPz>u#yAra d5`OTUDtcZ4h)cUF)!Y+qYLO_iqbh#nHqNH9r$C( zNh>OUywwxCeej>q)x8oIXA&5wIHsTZJ`V4;t)l} qaSYJn4|IE+D=7Lw(@r=lh^ahb2F*C5Iw|l z?_NW&a&eKb0#~815EYTY&8&pu+bbJKYl_{esr~;lO~vrGXb1{3b9>x{)F>Ul2xVbF zD)JJSD%7u_=Ksc{srnOejLOdsC{1<;@uP+aXU#B1ki(xB<58E$N-W?@*!m_YD2QoS z!p)nPhSPvacm23@MQck|m#ATa>EXjy1=d#H!uj0lX>De9@xxXnnSg26+2fX$oP;A9 zS60n$kKcX#7|t3z{a%zHEXpt<{MSlDfI7s@&Ap1MqX=E2Igi4gr;kJ`w6^sl*XXpO znC4dX2@Y0OJhj*A3!*WqgWie&cH;WIdrZPwH%%6+-wo0eSFT;N%xfpTzTn8zY=vV$ zgyORD^l>!OjOyv@hq3lmh4jM#g`az$kE@0TO}IC5R^&FIh1U$flLi+LX17nkfNF6( za}#|a`Z7Y;(8x$Tr0(rog1`ZeWh}6MM(enlb(o>0jbZjb=GQo+xAcz!Jw|viO~!?o zz=cC!H#Uc0_c2Au>K|Q#f)|>OR10xWH#hY)jw{Ox4|^cee1~VO97m&mL*w7_44gnf z6i78%stI8ZwGh8Byt9HwgzY^b4RXft_^>%RSj7Z!A7mZLif)8(2-WU)Oy`FJGu^OZ z!+t-HLNH#T62h>@i7qt2OnHtkw6AjN+uS@F6&Sjun@TfX(oBWF&Nloh A*v#(p!H89x7$dAD zR)D0DT)^X;!$-}{%w(Xs1SI}@ti9pGheutqi>W_CrqM~EGXu{qZgJmO$NCiG {K5M$(2+bu3W_^5yH zEu1`n(Bk7$hyvid?_$ZCgbtoaCw!Is7*={{tkmCRB9a?*mdrtrw0}(FX3xPnj{8NB zrc$5*D4X0DkaHFj6Py3}a+18s$V$gLYKr-a*Q}WdJdFSXP_v_rxT2NO;rlfrfRD8r zJeH0c_$%ySrI-dO?A~2u VM5|NcY5`{fDem0wfNE{x;}%2x-j#< zj)u(UCvTeY(3o
$VaxdQPYaJvIsqsL4ZM z;PCQ36k3GmuGbX r}@>Vyx@C<;Bf7KU%xtfY?My; zr@ BsFZAdx V-e1HSbS4Gr9p@TmZF1k?uLcizK?>Tk*% zXfU2Z*2lqY8Geoy6BFJDO?-~ZN|Kq;Q|x}`=a+rx-NE%y`+0(?<_jPf(3VJYYIMA` znp!^!hBnSVr#@?;a9|RP{=?boJNandxyo|zzuM?i9)x*DWb$>Ke01df)eRUhaS(-v z<#>z^9*oz2aAKhS`frb0#s|0DKzcj_W~5lKxDgcvlPAv$6xNRD9*}CrsX0wR`vK{* z08l^@wo+RFG@dL~1S&*eaPSJ+JV3u*$BseL1!x%a=);G**rl{t!D?e*Z2p&_YhqIW zo ??_3@VNlxnoarcO6RAWJi*0vyRf$8-vIBX{l`^YS7|W2iRh2n+Fc zR7_}eJ`H#S$2Xg_m%0ne<_uz?Vv4Z@=LTN+$C#5L82>@H^v!2qTGJ$0h~ewl2?8Os z;nSz#U;Y;sXSwCvOt(5EoiKsUMD+q5haewc44a&MEMFlmFkoWznfKk)fP3Q`B0W(c zH-8L#Ku{&{R{bE^geoc~)eoj1CgJ0vBNowHoS#Qebg5>*4kZa{1W@Ggjbq3M7$+(^ z`ewrrnxbD*Q_p>d^uZ-VXj-0WGLwzO{09{2bP)Med<+c@i*`z!@$q3}XGiWe{o;b4 zNp>*9FoMI>3Z`0{*w|!Gec8()TMC-d5IstXCw5XeY MvY2gVR?n-1`!@F zf`f$k^{cq2eC~UlG#C4uZwIfaNv+~~2+q<7h&au6xzm2unp;}lNl56N^#^_e0;lN~ zaV-o})(QsQZ*fDjOGf~{Ie@tbP%88mP^QxhYn49$ZyVhT4FRl|wHlEfnMO5e{^^Ss zfjBG}<{@c)YG{B&1S8@OOx8Xq&ymv&EiJGKae^CKS~hBne@3q(>r@?%T*D 6Ufh~EP03|Kyhi<>2F !`P2BuTm((D}N@b1L*WI z_8Om<@H~2y#Ezkg1XzI-DRp-zsC!#(s0)F !IHNHlz*lDK?Lis9L%j@R zNf#G(9v;P@d2evPSi^NPyATo`9q(I9r0zLsX=4LdI-IlT&;4 pzF)ZGzy>@#J#p&-7p9M1c=d%djP`?S`wp&;215~Vp9ftm*4)gR))ewZ4j5x3 z4~?cSEByzf$+590ANj+!wp-_H&?Z}0w3T|=W_?F|1K2`C=s)m5{~W22j?3~|nyK*N zC}pe@l7!I)^oGUTsyo`+;BO1Q9vUgAY2|w_0fL1@1Z+Jjaex(=laid-MY$cV2^c*t z!dCRU_*%mE=NIk^PoF*0SVsZ1)>KUEMwxrk+0&;r*mD-ecmS{fvXZ$#x(J>A%Gv4_YUqR!?kI=g76=s1ieuE%=6HR4z0G|T4 z5tn>R?d;b#bXhbw%S%)fwWF@C>J+#$Y(}sD_=Qtk=ll1t5*#gT9;uYgau?<4ZD?(s z#$`qP2gk=JQzJAYLR($^HJZny_Q Q;vwMfr49p^+!p`HnRnenVtX{fEGAm zp70*8E038dGC9JwoY8uE+W(oY;mqO4;s?h+BS;obr5Jl_!d4WwU=ipk9f3zisxNKJ zFmr4_QKBotBjfxQ1v0*T_}c<_f-KGa2A(O*UdSJCW_frZ0kA>7Kx@5WLmadgpcl-; zc@r@Qu7&1@4q>2i>dSK(_f`>Cai;x7=>{!wjUzL-`8N3oq~quXlN66})tO#GFPIgS z>{o r0cAKW z9QeKs =?=#eMrA16Vb*lRRAb4TB``4&d7?DS4s$?zK0Lsp>m@ zX;dzv6Z^HW4921u2P4pH kzdr3D!b^-)o zJ!No`DI!9l<^y6GJlAf;RD*jFP#d*LS-?by6|x*sBnI@Id$0FbG(Bh nCpzzGhL5Ozj3;Y+wq7OG%z0I?D z1c)E_800Ps4;Ui@%z%es(13OtZT^`vGxe1xZ|k@JFlJz?vlhGk;kdEk(lSPn$VWR> zRfAz9svCopgkZRzH`j(@qc-zg;x-rQy_$_m3*hl2tocyYVnl|6p2Ydm|JRn_d@d@@ zgK)W0j<{w<=1`mb;OT6tjw#2`_&6^{m(yC+72dGZ{QTqyFDt7wrZ|W;7z?2s$b0_0 z)0<_hsOU(^`eWDJYt<>q%m*E{YzFu+U^OY3kE e#`Lq@iWI-Nxk;DCaDCibA-_Y|!2uFKV6Ha#@+B|oDy(5V=FY=l1zS(e z^y`hs?%ufrwg#dowKy|#t6r(5sOaz ?8jrnt zm0Rho2lNNP(eR^6Lv&9^zDc0aYbZ~g`hC|30WU$}A|yGm#2mqd8l(9sn7c;T8lC&- zB%L67iJ2IlBNbq% 2t zA;#?Wx{ET|k+~)BE#2T}LEpC~=8baVXLn+17l!4ID>w14KQ=aE+!iazP&cooqw^oX zFc 6}QMLJG5D*5<$whOIX4-O`#rTtqrc;}Xc zfh~#RhJ>oz8Tx-Nz@5iH>%_#Qm7k$*L%p)?9KLLF2#EkO$OwieV3Xo+2jMUaIMdT# zD~AedFRV2y6EXb&p9Kyf-@ikth47263_pmlvWbtOdqa^};4^gI*!bGbo93Ak>Tqwj zvH~F&JtNcva4CTIPl?SDQ`4z$K^k&Kfd3SdPd;qNJtB;#kkND=bc`{%aN#femg?c* z;TPrQaFbbraBx%?OkD_QW)uVvoq#={CRsWD9;F~KHM4&?7>A;;0cXqLr>5Dh#KbQ4 zgJ~Fr`ky~vhK>LyP*6~?=4X-q1ARlo+3D%-st~n!0_Tav-fD z2_R%vsjo9?yjNVkkI1!HoEq3))4yrB@f#SWNXqWFN(DeEK}Fve^6x^t2u6aqd+Wl~ z{|?R0`hrFQyaCXGso2l{s)80bYl%BWMQ0EoA-RAof;2WeD0SDI0}v4`O~5VXiX50( zKvV^n1Xa$eDKia$lnD3f<~wpwDIm6vUa}~%ejFM~R9et$O!+Hgs%x2tcd$B42e%8H zLlF`Bln3~weU;HZM|2+?1m%QKM NN)JWWvuFEOV~iVG7rl7U4Nh{nCOah{N8wAAI$TJ4XcN~{QgD{t zlCs6XavTF53ogLJCt%Xi5Maral$5Y)LXPa|2@V&Uc)Sk{Rulr;Z<=wy(!$Bb#T*_| zc(#xb&F1ThOixXzPZr~q?%xm1c83S-$cQK_CFzx0iZKX#e(2 b`09YtYraP} z#rPap_jhKQ?74AM(Lmz*p_Lj$A5IJ505;Ye_$BU@PZQew{sW;*r)CxCR_JfD5Ci zw{9^A5eM+$2;QTp=s##B(PIO_z|(R7qd8*zX1qrTJj(!oAvdbP3?IFOq9R$rG1VY@ z;kEw?zUW5c1StZS$s2$Vg!KPDnrp!YRQxZXTZjh(Ft-2`6sjwWs!JrB80oADzE375 zYC-eTt+lwwq9&;y0Zn}RM7HZ2`1azXH1EHS>HVEM@^W&BC`f{yolk|;)IuOdLxebW zwLmY2iZ>;Rl0i~3ALFgAWk!So6zlio+}T=J2m Imzjk5XSXm?RgOB;`7@Ty1oaf@1BGr4qOlX%ZIW6_fX%&pkD{s5F~cU{RY)` zKHUi1$>jV8g9n>Psq1TZb!pO9P_S%k)+(Lk3v?vu=}zc-fl|N@B{n7o8Zmx3Ho zk|G1N8681geLW%}zDZHc#IeT%OdiaDAWcQ(3f&^kC4McRqOX{?8Qu$?%S2a^=;a!X z$~Mdj5Yj%Ts`Nl&htDLJBr3|FMVpzfZf)I(YzAh*kWT=tw8Bld-;CwiGY04ms6KdR zz~DzE5DLiIpg<+YQ-Fm4&fmFyogfuF(&CV#`Qc2Gy@HU?eXu{kzQ95i?Z3Z7UrWcl zd E1q8JvHC2F}9rz`-8^psk z5+%Qqq9PnO^RP(7=;(eI2^=s87V2tik#-`&!(l@Y9!@EoUjX0ZDL(v$hXFDx^lg5A zbA?A6Fw9l;pZW@+JTggbeSM}ZNKkxW(_9t|)@9X#un`Dbn)F(#M0R!(ikeW?|Lh#O zNYZqp6a{)DCBLyYTpv^m(9i&fI6w4ZlZlB*q>~&^Y%tq%pojP#fh`jRjG7Y?xIiT( znO5jO%ZiGyjU+ITmO#9?G>fUGH3%Fhf`RU0&Bdlo;5DpY2=iCAFIo}X4-4|>-1ae8 z%|mAm=jF7+rlxSRr{ O@f#uzszm@I zSULj052WvVcPug?;+>s^ui+$y+j|^ehi1n?O*{C=CbQ*jZ7o0n(Awt-6|iqBgBA*P zGGXxwj9}CkR|#`9 V3J{=!2V1eFXLUtPB>Rd_`7**QMosyakcoU}QfEMl+Qy~_@D#|$ zVF^oo1~9!0#G6^o8_au94%}^MxAps&90Q6|QLksBp*#RabP!mHkdzJX3etYd%X40B zO4L6s*pe_-l$@BTL76kN6AA}#(tik4$K%d=@!_mnQX(qe<6mXAfOByniD&;Rd~wx6 zTsz7>uicW|oDfkb#S^>ch`wO!wVDAi8D>S<*7g3vdB>YV07Sv9Q7tz{w~=1M>{eA( zh?|?(<(hRA%5%SQ%k@ 0CAb)wsy@9*qGI7Qoy#t zb`Owp70>;AY?&vh>>tWe=~N4`yYsVIo!Y4_P-fS=gP#Cv^|3+li{a71w(ks&MtoLf zrAq5M4Dq8mCCOH0(~}TZJQ0+2NW;*{AQYg)snnz1O&8OL-UV G5w{wK9-hqIHHdC0 zF)`rVyN$jPs1k5eDD<=xxPkYUdM0aaapD>VvIamG`$QBJRvq{W0`(X&-UBg|I4H Bf)iRM+#2)R)T%Q&j5|5NK|;1v%9-5KN`Ov*&JZ 6p64@ojAD0*{hSsj)FiN>V7y%nTcVz;5QX7%!!~-o?)u-R|MFekQx+N2E8_ zO$E(Q;Q)d8A#{$uMj8 zP>(On2EMrD(?PYP(RkJSp%bHSUf;#bN`w&ZEm@V>H@vW z#_2N9u^r|h1p(?`g2F_B-yS?Ms7`zkDFLjrqLYaS7zjiZ4|0q-_0 zLQt?}8z#2Cx^Q0V?s;^GJIu59?%RhcBS_n1Ztdw&l9&ID(v25zJRTFoRxmsJ7I|qoysqN<(fm6+)5sx^s|$)%4>f}C&hNvEeT@|rkd*_??+~UUHU4f*h!7} zl)u{qnH0 7SQD}}c5WTX@L?$#2g06xZ}i5RuB=mDcC NNVGnK(q+2O{p3^6%T_bci`>c7>+ zICvHVtR*Znt2wl}e<#7I$%zIZd-kPlv6M;b66lFt-{#z`G^mFZjkIYY^t^X$cV_w# z+Q?S<^Sl0PC)t;8G@%r?|8U{?ys7(O^Xzkhn!abRoSB<6&kn6ShX?8Y*-z?j&yTa^ zI!Qb&Z-lOV@*ti|m7LvCOR{1Idj1r!J#)+jV!|qf>u*WVM9=MK#H0C6=>VIwrVq z^Nfw7rzaW!Qb-6utr*k;I6rtKCBTLQv66fLi~3e1OXGD{HAZt*?3HlPNavP~8=X8f zq)je@b&AP> DvtKd z @o#|vf^d+Ol*#PEk<@r2>UZ z|0!|z+96*cb=TtJ0Mj9W3sEvaCD?@O>a?#fJro@1>7EEmJ$9% F;F54*bJB8%zIE4oIRSy`$ zC}WY~Kh@P8Lm>zmX>M>OO>+ojcZo7CI#467dY6GG3FRl6a)?;KY9ftL$e-fz0<@1v z-$W>>41e+jy^45}*j1I5`2Rpm5uKh}TONQSg-#Q{8An z_X}5Q{IK>frk;?!e8wm+3=NsW$^BFS84PrFh4i2c{aY$a8r{2cWtWzIMuP`zFeDI# z2%J|+O7`5__wdP+H3ax}G@i!TYJxI|UIWvQ! B&c@%nR{?Vh zw70?7lY>gN=?JrzqW@;Dx;E(&`7YdAy?AKTa*dt1U}ho1 zlePtj>YnZ6*h^~cFavIdx z>1ohyS9z{@^;o`r@iha`r(pK93+%ES>ieN-^j1|dNdZ)>4 _To=Ny)Ljw{ab!qT=G~Dw@EalK46ysGhpOjFr(`#Um z`Letm?mfGiW*}NvSXzRgG1&)7_M(CZ#S6VXYBqF^z!D%ptf;WdY=K_rs#XTbm9V=& z$%B >mAOY}s9F-7gC!NK zv25@f0a6Ag^!Qt_gd!JpfWl4DXB~9MNrTOf{)4gps;ZT}dhzhn!H<#2=`&~cr{2@S z0E850#j-?RzMOefGY|z6%*&e}T7#YD>Y6pM5pzC#4a$v~j?$2dPiN1@;TK_2h9x7P zaB1)#K>&}!>|>`U%r0YO+#|LUSU~9D;C1{s93;eVlY9_hRnVp2jR7q{gshL@cENPi zLq=v7iD;m$R<22MWEwsin!$wXmIuN$WTsHV?JvP+*NZ3hT%SIvqV)m9-E4&_R#4s} z!CFH8NqB-)4RR1(JK}O67dy=az0OX;C>#?8x1>He6eKs2oe0YE?nVRBAPuH?&W8?d z3U6++9CWtdOApQX7)}wlEi2P-2-;ki=qWOzveLJJ`GRRJs4kEVC1smklZFoi8yh}> z4lBJpkuLxje|X<5XUJ@i$n`XINAf4-^`wLiRCb(oK-H+q7e@0yv{+hLfNcwxmFCC1 zi`ZX87b>&EP;&2~opubUY$7>NL4k<_L!yb;YyeaRwLVgAR7{MaiHSmKOoEjL0-urO zEaR|Iq|g gqnj*^M%` zG<+<_(ZjeM>+CEfzyCZ!TlSRi)H8fqs0mM;5Wm}isarvZE06uiC7S2lj)ohymO^dW za;Nk8^SzZ!aeJ^7xZ};60i;8Ksy6w*53O6MK%ZkO2Czd#MWv;aVdfYNJV1~tD#But z>SKh<7TkU=vpv5Sf{ 3~pc`{p zKdpw+?=>E)p@Cb3)T(cAG5zW?vted(c)98{;6c8&DAsZo&{ij~uvVjd;Q3#UgdZoK zNYiTJg3W%p`7dfJ-rv7 ikw=KC1Q>aCdM5r(^l z#p}er9t)M(W0-GLs!4Z$gHvok&6`HT +Z z3Ce%p7k92UbISzp%KlVSAc(^eb+)V8*)*=P&s2)JOvu{5q2h{#0q! za!6Kq5G_aTu=ie@{P%vvM%)l?ZQi`=0b7Bw`wpPQG&B?8nk{*Jt*6V6<+mzD1;~oL zANC0-C^6nj$#AJhQLU(wJ zl2ZcIAG?pQU`85T{Z>epOM r2#%X|SFm8CtEWMHJ068P<6}8R4B(e`1 z=;`>wbzQO}B;o__;5zAowMMtEs@C)A9W=2#ncWn9D^=)9Qqowm!ft#O5V>9EJcTW2 zhY$by(=RF^ng8E^Yywse^cohHmNC2v$|`?TO*{8y?$V3L8rNFqn<6`IfA;KM?D_Vd zI`N}h`P6fmhT+hpBqujwg%~!#k)DwoCWSbo(>ztyLCE2=4{%Y0NjBI4fXBfeo@mLu zYni8gpzTC^@5?gS!)osDDYE{NtWbb-+#&}vnB+!4{=k~rzmLYpX8@EuB)*LZ%@7k6 zz5DvLW4dX0N3l~9?4xY*UxoZbx|BCMNst!5RUzs ;cJ%dOYz){ |ND7hTy8aS=Ti?E^{N8oYDH{b`0Paa(S#>biWpy8=>6P`|2 z*I{_>6k*NI#ATr?)6<1>;~}@+j|C_fVXcvb-Cl4lyZibsHjuu3lK{|6Id dqNPAdy4Bb=t}4RY^&Tx?}KQUHeWesdTUCC`Rya z6{0c#I&1&U3=+uczaFgqFLN+b{9SX7r~jAc^y$5gGs+c?HQKE7$&KH8U;gW>45_P~ z!=^ovb)1q(N WdSH=vAjS)&WN2}NKaNw49k(g7Tzga z2>-~xAT1?(_Q(e>ejl-u0>MONyFkTJist}9Y_!wU(y%!H=bG^WEH;JB5y!@s^oI|n z_sqFzY1M~@3Z)p=J3l*k@ESxw=UcOK%ggs&y?S}O@x2ctGq?4%eWo2EA{K!DwYG|@ zzRJ0Ld9(I2NH+skmJ_?Xp*ipUqTF}k-1A(9;1he)DQfeMb`};r7>>WK|C5E4@<0h5 zef$V_t&tC|b6EC~ChuvPV|)az(neJ5$>z`os11Ps_AQPJf9K9&^(nz>X2uUF&Q$De zZ-}8eCG25-ex?7fpnofua5+TT4kOr&jv7CFrcOb4#jt$k(V+&c#*K bj4dA$$|P@qvW@txpFOA7p0T`emj@;D=7`OT&Ctg^Hh10Z%l5le%( zBff2DG({;99p ^GkPbUV4Z^^EIhgu^jLstl|=di;2k^v4 wZrJmHssXfUe6Ar$}rJS^DsD>v$OVVh5dpf#V<3N=9N#b%>+I?( zaQJ6_uvHk6mM?>7i(O}i9ePTc$q~CxIh&sL%d<{5ZnS{CfAVvXt)=CM0q<-42KV;< zqEmIiw^jD&5h)KbF)&~tFhan Lw1y`u}>eGbtMz zb!chBe*f%!=J=)%BN5N#c@ux--B{+peKl+BzuMgn7v_#=X|1KCs|zJ4ojYM?7gkcj zOsJ>3jrRP>2kfjzI>nBNrUijaocnuXD?xD7Zqd^(_`43gtlo=s=Qm5tZx>GAklYAE z)cA&@$D6X}Mq6@j=#ndr?T++fFQq%P5fv1>y}n}G#Kn_D^ssYoF%T~C=Q1)B1O5GR zp(^I*Q_*B`b6c6DDzA*BEp>VPuKKert920|--(7hy}y28ef>mt#0`-L?X8K43eGMs znfd0gS$pWQ!U!#3`f}z06GDBd`Xm<}yme1}x)*_RMS16VYFu21pI>{@o(2%nBeDZ9 zC#sJ<|L? TpHufxyvarb4%?ss*){O}>y4c!>J11?Fl z PVCf+#R*wF#?#~!IC2XuA0#-8H3*q8gr2ni)LfYIb;1IFY17O?{{2?Ikz z?EL(B)RwehMF`)6>762tzjt_<;;zH!M|Nce75?1}u>%KkCSTchHw$%~*aL(nNzQ%o zsgoewoE#jgK7QooV_B ;( 6ezl6M@ z7q6NA(4neqTfBJEXL-LCgagy-w&vz4XMa5X*-Ltef5|*B3k!n0ylpUpXg12aoFR7O zU6|07$B!Y3ic<}&vMqZzI(pr{(m7-$;5Mj1xoya#UwSJ+6VqT#Oym~7{iU^4Kjd6w zi;BNDMo2UR1N_a^Y~PF?J(j?8zqk9iO;vEOvvb(Xv&?DA3;PN6{rl<8N>z#I#xt?7 z7@1UEPYu4| Qm@jBU3_VABU zJa*pFYkcl7C@K;}b4~5)V#v3}tdjxTBg8AOv22Lb+}YiJ!tcb`GpCw0Z)>$LOubP; z+HO1Hr=byS`T1{n_$&Ba!gSRETuVo|=3C|!77707T^f1n^jGN|OLQzVU>{7;cgQBj zIHl%IP9NM};GXoe^O?Da$MR*tSL-1({`368()K9jM=cM#JXo}!3564^ZYyuSiBE%x zf0s65=uAnh?^MvtG_$h2GuiFe`R0vY2!qsJgLn&SD3*0vTHNYrZ};A7cUvEB{iU91 z<>joJYY19$!v%#F{v~tYscL)X9>UUDPw!U@w}a2#xVMqm*5x68xp5_@uUQw?Y~^;p z2ji+37)rM4u@P4U?$l;H^%@vLs08u%5IDEi2~{rjpRr;J7a*gbPTLIbYpSn~+u2oT zXz#ounXKm79iF})dU=24)SR3$>=J!`I_(QKYks)(4C^I9eo^>Y qahSNcq9V)&! zgGD @cjeCK2)YbXyrf$4j)^V;#jYXOX>oC@gqnVNV!~!pO @{ z70U1{@7`TgIAsR`vymb{9lBQjyAA7^m{cz)Zd3RJUK@utNJo5%#gMFLrWWSq)&Cm2 zDx$|mpHBTAAJ4KrVoNbgPKzX$4yse^WSW~ApmT5tQL8F_^~&?_ayRy?a=o~UCA%j| zX4~`bD*2Am6Oiw(Apo7jp>Sbw&HQ31=CE$mx{dodv9Aw)qJKxyszkT(!`xRPuAbU| zPbByC>+8_OkwIW_ZkV-N-jlDgA_!(VeEcc6%|RFFmY2I17fLR0`$cQ0Q(#IrH6RG; zAB;6U0;j&FrW{G$&L2RV&xw6l ykHnklzu^|S*)$9#aqp!S(qI+8J^g!v7vf~s zADvexdJZr~WK>rNQMeTp&N(>z!+wuq$9SPD-@etL&!`_{pbvLF+Ph7!wO?)2ftlU$ z)TxzwCUap22v*vZYio$s; D!fGvb_gfP~3ISE~^nSd@GWd#-o1Ngex zz$<09*9FE;XMbpk7#=+e))h_7>n~q^U@g5jQrgUj*Or{diU5P{#(cfaLUA!MPxA9$ zc@I2Jb5Nh`^O9j292jUXKU0<#V!y|K%G9;;hKb-2bBR(e8Rw6v=q$t^+`PHoNBwem zc&R5Z7W|&2Bm&MzZX9-XwbL`Hnx~rZ8cFXmIvLiafb#`JS+Hu}S+A$`qGHN5k@w5X zUyPE2pOu}9iJcJVv{m)@#`4n}HJ9Ur^~CorG=oH{y6hc>>tncGDR6cQ17RF#gLskD zHLvBuMBbw^huA8&Jqh^}R-p_G`wZ@W^6FO&YuH0aKo60oc-v>$-^bPU0F LDx z8i!3+@zx$K>HBkB>Y>vt_)E9;l|lS1d>1)6O^*&4sLg-fiWPCo%M~*tCLyyeBKX6| zVTzU{<}%#InWV?@$@KJr$Uoc3MQ~u?Ei92L9;}Zow F#r|!TjvHqN=OsC z_AL~kqSHB0&mySW{rNMCrYYDlc6QI5Yscu;{>Galh`sKu#ix1$K`f8eIbwq?OSWKN z?Y#XVK3+5ApE_pX&COR(HNm$D_1(Y!YR}NqWMnGAr1p`;7?x;)|CW_4pyVgMN8yi? zo7;Son%7w$9}VtHE-o(txs!hvIQtG4I70I@Y9ytX@=P@V!XLGRVEN(npz3KXQc$^Y zHS5vi$KUeH`XDTbyY^G!_Gf;z)OobvNQ7=~=fS}_cP{Sh*R$BqC7@cNCMj8xk)f>m z>MqLu%yau$T@M|KDBsu7*SC_`-^Hs9L3?zqmpt#PBOI8m0K7#-X4f$?YUtl<7;2SE zxp8{p+xtOLW4^{upLmr0NAEgFX{f}+$Nz_~9>4frYVgIT%@Vf1_oIQ1l`=MKdth)J zDu|V_RCX5+p>TKik<1K5o|R)amV|fD=-AkR`#6mS){19;6g$_(iM2n}72%+KG&hff zBBULpI5DxepFgWgNGx}k>_o#=Som`Tx9kt>GD8PRPXj2Chlc|fP5ULyd{A(*{54Ty zk^YJR73GTkrlv}Wh@U^pr>9RqtB%qx^_H)-kaWmo |ttoY*M`KbyHgK3w;~x8H& s@R8i>-3oX0855B}4i^}5XAJaJEh$k% z;`=6-C$|?K2oEU^eu!SM)O{<8lYqz*A$0rv#yIYtoIpF`p>SD<5|8x`a*roM`c-|_ zrvF**o)la>q0;KebL39rv4X=zzO_+a_QN-w3?Y9n^Z)h1L^Uz;_noatCk=@2GE-jP zc(WL}bS~R`tqS~lBXX@kyKr1;G#?Xv&1ka(Z8%fhaUIg54aIs=dAWCO6nfA|AzjYs z){_D?(Y%bX5^hQ};n{u6!yt8$;bkaSr2Fs7kEkt+4&2xbPmOU2ck< g9%i{&z|*S<*oiI_F5+rdi@y|_f1xsEgss>MCWkg zn)Cnu!Xor~`gf}`F>bHWw|J#hs4ko3TK2^^6(Xs<7#dtVGt+imL?d40+J+V%t~G4* z3m=ksE;_XE>W(+NNpRLmOM1R)QeAtW3dX-=bnPh~fAA~mHQL(Sbw!R!NofEwEzuDA zIx?(^)d#y36haO~-fYI|`HPqKSDcn+`uk#BjxtbrUcuAD!^V1rTOmw_>CE`&iQUJg z&Xn7IN%ItDr9E@T-rD+lT-=6ky( {07v%vyyt>- zuBh-n<(hA{KbeBRii Date: Mon, 17 Mar 2025 12:38:20 -0400 Subject: [PATCH 2/2] Update date --- docs/_blog/announcing-vss.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/_blog/announcing-vss.md b/docs/_blog/announcing-vss.md index 3f186a4b..de6205e7 100644 --- a/docs/_blog/announcing-vss.md +++ b/docs/_blog/announcing-vss.md @@ -1,7 +1,7 @@ --- title: "Announcing Versioned Storage Service (VSS)" description: "The Versioned Storage Service (VSS) provides a server-side storage solution for non-custodial mobile, web and hosted wallets." -date: "2025-03-14" +date: "2025-03-17" authors: - Gursharan Singh tags: @@ -21,9 +21,9 @@ applications. VSS is a client-server storage framework for Lightning Network (LN) and Bitcoin wallet data. VSS primarily serves two core functionalities: -* Recovery: VSS enables the restoration of states and wallet access, helping users regain their funds and control even +- Recovery: VSS enables the restoration of states and wallet access, helping users regain their funds and control even in scenarios of device or data loss. -* Multi-device Access: While this isn’t available now, future phases will allow the same wallet app across multiple +- Multi-device Access: While this isn’t available now, future phases will allow the same wallet app across multiple devices to securely share and access the LN state, leading to consistent access to funds. Clients can also leverage VSS for general application metadata storage including payment history, user metadata, and @@ -80,12 +80,12 @@ is integrated in LDK Node (written in Rust) using [VSS-rust-client](https://gith and there is also support for other languages such as Swift, Kotlin and Python through [UniFFI](https://mozilla.github.io/uniffi-rs/) bindings. -```rust +```rust use ldk_node::Builder; -fn main() { -let mut node_builder = Builder::new(); - ... +fn main() { +let mut node_builder = Builder::new(); + ... // Note: store_id can be freely set by the user and is useful for creating separate namespaces within storage. // However, it must remain fixed for the entire life of the node as it is used for database storage. let node = node_builder @@ -96,10 +96,10 @@ let mut node_builder = Builder::new(); ) .unwrap(); - node.start().unwrap(); - ... + node.start().unwrap(); + ... ... -} +} ``` ### Using with Other Applications