From 7c77f3576acde21a7f517f0db01fbdb5ca448bf4 Mon Sep 17 00:00:00 2001 From: benarc Date: Wed, 15 May 2024 11:23:49 +0100 Subject: [PATCH 1/9] Added advanced description --- config.json | 44 ++++++++++++++++++++++++++++++++++++++++++-- description.md | 12 ++++++++++++ static/images/1.png | Bin 0 -> 544561 bytes static/images/2.png | Bin 0 -> 48490 bytes static/images/3.png | Bin 0 -> 54989 bytes static/images/4.png | Bin 0 -> 42503 bytes static/images/5.png | Bin 0 -> 49667 bytes static/images/6.jpg | Bin 0 -> 60234 bytes toc.md | 22 ++++++++++++++++++++++ 9 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 description.md create mode 100644 static/images/1.png create mode 100644 static/images/2.png create mode 100644 static/images/3.png create mode 100644 static/images/4.png create mode 100644 static/images/5.png create mode 100644 static/images/6.jpg create mode 100644 toc.md diff --git a/config.json b/config.json index 01d62e5..365f522 100644 --- a/config.json +++ b/config.json @@ -2,6 +2,46 @@ "name": "Nostr Market", "short_description": "Nostr Webshop/market on LNbits", "tile": "/nostrmarket/static/images/bitcoin-shop.png", - "contributors": [], - "min_lnbits_version": "0.12.6" + "min_lnbits_version": "0.12.6", + "contributors": [ + { + "name": "motorina0", + "uri": "https://github.com/motorina0", + "role": "Contributor" + }, + { + "name": "benarc", + "uri": "https://github.com/benarc", + "role": "Developer" + }, + { + "name": "talvasconcelos", + "uri": "https://github.com/talvasconcelos", + "role": "Developer" + } + ], + "images": [ + { + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/1.png" + }, + { + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/2.png" + }, + { + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/3.png" + }, + { + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/4.png" + }, + { + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/5.png" + }, + { + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/6.jpg", + "link": "https://www.youtube.com/embed/t9Z2tEsrNIU?si=rOQvwCUSWhwPPmYW" + } + ], + "description_md": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/description.md", + "terms_and_conditions_md": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/toc.md", + "license": "MIT" } diff --git a/description.md b/description.md new file mode 100644 index 0000000..9b3b5ba --- /dev/null +++ b/description.md @@ -0,0 +1,12 @@ +> IMPORTANT: Nostr market needs the nostr-client extension installed. + +Buy and sell things over Nostr, using NIP15 https://github.com/nostr-protocol/nips/blob/master/15.md + +Nostr was partly based on the the previous version of this extension "Diagon Alley", so lends itself very well to buying and sellinng over Nostr. + +The Nostr Market extension includes: +* A merchant client to manage products, sales and communication with customers. +* A customer client to find and order products from merchants, communicate with merchants and track status of ordered products. + +All communication happens over NIP04 encrypted DMs. + diff --git a/static/images/1.png b/static/images/1.png new file mode 100644 index 0000000000000000000000000000000000000000..b52baa83ceef9e5b19a6ee58fb21d2f1c02a1c84 GIT binary patch literal 544561 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

;nzJ?bu~*~wuUhn>b;DJ=j#GJezSrK~ z?sIyM;FCyQzKdJl-~Rjd?eyP&uixI+%y;JUGY| zjpjtU?kN5H^m_iPRlaA|+I_M~f25)jbm)@A+Jn(v2j}n3`Tj-h-s(gnZH_NhuR=OX z&Te$MK6~qo(xi1eXRe*URWMmiE_ItwRA9y{>Uzo-6~O=76b7p_*#?UHD__T>sL*YE?%~FlJEQiaf>-p&MUTlds|jN`C6perFoZ}!iw_@ zPX%V)n8>l2Q82x}umAkV$B#eS_dow%WB2d(@&5WhKmOf6-*0bc_pidv&WOGHcFC#& zwM3207rd_SV%zS@mhQW=(I@R}eg1-1%)ozS>wqvuI>ow2T7Ab9UJb&Lq3zmlKaTW_hZ2%06$u`7rP0%Xu$X%FSZQ_|*nsvPF=cW~WyO{dwGhk?7CtyD3{-07R;i#f}St8Te1`@-`-@868NY4KLP zg-U)s>GS$+;j@ zMl&AE96lVJ;WC5&^Jf|VwE1Oj2lT~uxHS5Rgk&kLxfkNJ)Zfi%=4#LFr_7BeMQWw~ z;t~;2TDdAL=790$H@EBd@87$Be`i4U6T{?X!s(kjR^;X9@6Y-Bw(j?~@3lVZ(+aj1 z{-|ikoi{OahX1Vjg?|*RlkB!1TgB3KHF?*L*f_UW*=&1V_%vi*Y<PkjI0N49&Gk*q z-c_FI6;svF)1x4kvZR_-RWOOq`=M9Xjr_A~_W%E6_H4#}{>>HVn9Dl&XPv(`Yx`CA zYx&#Xx~1{wdS!3?*ug2VxgxQm<+LZSzrx{@%EheH*M@r@X_|g>d)`{DovWhH>V8tG zXqpzw7R1igyhn(0g2Kn{EU~mpVM@-2uBikUW$!<0IFtXu;j`xoQ)DK(DRj75L?q6$ zbaj{`+A-AN|KrcU-#=^4e01@PGL&_l^T+0DEC=V_bLSVGt~(@mN@A+1 zc-;I?mwQ6X-D*E{6|NIl^Xt&oiQbo9*%b;bQn`CdQ>S+N_V3?L_ue+Wov= zr+xFQ>vwQ%oftzy)m;Ikgp_C=lbQW4XJ`=GsTt(s9 zu_>HiCnT2i{jhoK{^-mW9(SYV6`PnRv4|;NjG7q{5pB7mMO9GLBl+BeByQOo>A=Yq@4FcaqCWbvJRZxB=bJ#s(azxc3<(d0h*l$K9&o~g&>DeNB z?wzC~|D0#(2@&(8+AMVBp8w$~H{aA*d5G`E!RP5`n9COBP4H>BleCHF?T-B?*Vpg; z|Lgki?c2+*+BP4zy!-0!Nmdr&Eu2#q@7r2?`&;zw{M_4B*Wd2j|M%0s>G$h?zOJqR z{q5iB?c2AneSgZwk1f%k24y#Vks!SKjB} zzV`li+55NaZaoi~ZI-*Ezem{8=xpu-n@2ShWVzO-$Hpa`+I9QDb$%^}qLni1K2O&R z{H8Ty-I->c{jXl%)7eqE)0Sze_}bq#T8=vU&ecJt&6ltD&zB18aM%*`aHr7x9a@R6 zb8~M!DchZ&pZ~XP|JQ3XRG25q89TaYU3z_f!J@^7?ko;lsU;Hr^mgv;@Bf}WmRY`Y zW4>;>jQzcP_ph42lU-z&sB=X=@71m>w}T4PxUZefS{0Z7l+`msJ?5Ig73olR83wKE z1z#0Ji zYxuoNy%eXHS_^F{+4^I;!;u|-^t?+q@7NP@w5#)}uBN8FO7`+ccXw`!%IW8|rH zvFQvJO|IK~w+gP85YP#&c)PXaC_h)GaN?DB>SugeW+wJ2SWM(*Un?ZTpebo!oOW`_ znG>%p(yM;5Pgq#GK7{8$X>*QK6d%K>2@guPU;fNdA7HbLFJoPFZ--5I|4*qHv13w# z|J(Zi%&+uaIVor3;_jKd-5ESmu3fsi`R@P!Dt3V zf4`rfumAb$>GtXQ^ZRd~?UOU(Fe|qDfBW^^x3->qD*M0GJ!vVvr+AN*wW6IN^Vy>` zr{kK&O}l5ap1t-W#*#^hrCP=Ps8eV_=juwO7GiT;uJusw9X*xs<%?lqsg z4mq4yX)N&Q%)s|-^)=qvjQ%dWc^QS+VOjBlm$XUPmgHF+0PB+HF6*Is1xqrT$ zn4i0+(qy|_vGgSl$rEcF)x?rQbu-_1DDUw&=%DM(_W$axE4y5p%;rRKKib2Vtr@j7 z3W|P@K5@9GwxxWR;%&OnO0r}o9`N)$(>Q!FPO*Y&6&VdC)hG!##9{> zLA`UEwtP1foXB<|Ath!*b(+~z6mL zyn+Ho%A(5K(*lexDs5VO`)O6Ies*kjtXHC6Xzxr{fz6YRCmIPnOgX%Ec6p0%;96Ek z*QXD6z5V_*ES~><{(Aj=-95hrRPA5wn)+5KO7)CvnyNa7p5vo63S$5In*26OEOXLi zNDFjX_BZkjWA;B+o*lwG6WjPxd>ATyvN>6nFgj}deHd`Mi9hMW?klXH-y|Dw87G`x z{@9{xpV;59($Z*~9$uxWEk>CW1f~Bb-si2K&t9D8AFY=jFLLmC*VdT<3<@z$&&t#n z`8<+y$lE;S<8#3t1ExJYxP*)4zx{c5NoUth%US%NGu|e!arZM$Q)vnIH+q+MOfZv~yS%R5CQTylSMtAl8`f`T0xZ+NZ?3#o+w?#)aYD<# z7SrJ0t|1{t_oBH|pXYvC^B=YrfJytJk$sM3x8%(Go?I>}tq*267PKtzSoO%I$v{7l z!QijR6brt4laq>W3Ab@X9O$_zdf=c4BUE=5I#JX~g`Lu&Tr=KV2AdU<_{4tt6}k2`=y9Y5K69;HT@`sMb@K6ExzKA` z*Vo#t{aUz|zk6ELw5ZUQ8G#@8+Ep~?%$YYwbJ8S_qn_;hA2+HuIElDCcA5QovJew@ zbkx?nbB^E5(|>z=`|s)b-_L*lXH>(VpC@)KXR0%^QU1OoGffZMC_6oy>*Y0Z?X;~| z76rLmu9UzB$b&v(MiYhN8Ges*LF>v+FV=lKKAd~vK_`pIqc7D z?w!J^q7$_Gbi#&7)8^=}40yix?z^|QFYddRJmLETw!Fjd5BEJxbKhe9&HT;!jQkhh zC9KbIC`_}Qe5L8@B6&N#`d^;qK43 z67O;&tV%*6O{|>6joGhHw=($uR(Jt9^nXZl!(|f;ZFYYQY zxt1EMf4gjNoV@<@wPC7lmGAeKch}0_ed6W)Ud++Qbw}DPL*bn>qm6Ih%}?Cj(;TfV zFSLy3aVz)Jms4jt`Mk_M`?+t~e~)L~om-}Grq#7GYwj=QI{(YAZoa_hS8r!@w@l6` z^V)2)Ii34Rb>EHOwsn_IxIDLcA(FtwIOCw_1rf!_X>Y4)cf_pQ>UH%DJHP+yd9Ey$ zn^TTdPndo9to!zhN<0iZIk`PWr(-gRiIG*7Y>GoxXO1)6M9(E<>~u8?*MuG3b& zRtjq0YTS)7dx~!R&z$(gSzwL#&kefnyYDcSUznX?-drgtH1*Vy1#%K|p7t5Eu-cq= zQ*gejtaFiF!N&Xcq0RdXRi3|k_vT%q;7kvx<+;;2Sx#E8o?2J5tivgK#m`;aH-6tJ z|Mo@gjZ-qo5>3Y>e%GFVlcjs{_r+U9dwphjOg#{M#D3|Y_v(Lno+^Z1J0zx}?9zPm z_YV2DVjrjQul^}9FX_aYt8NMhoJFkUS;EppI}iCRedTuU$(z2kYeD~ft}VW85uqSy zuM@CTM5akox!q$<=L5OJ?h?GLfh&^(DtI z%@#QDreR0ARpm4V!;V((iA!IFr3A-KxqfQ;(ipMYh}WgD>t0vIZqbR_GNB;otEz6I zX21W$f=L2X9z=c6F@9pn^en5Mo!xjtzSr{PqK8K!rzG61dVPHF-TdRXU;lf1FV1$C zMwI+JG3Ofxr`&2e@xXRs(CbY)w>PcvjtyCzr5m-%?#d^>uU#EkD<{``?X8zvzUENq z4xgZEwbjBCxvs9Y(FqEV73Jc5EZF<5gojH}`GeeDO%WkJw(f>TrPQ_Fy4@SRI^oC;n0#aJ?Yb|E`!Dk6m*0M$VI3uOP`UC{3S+ayDJOqG^y?@`Hy1&1Ee*K!-!^oBBH_?Uq1eP{Q3Cu*WVs)%DWx5 zWyOi0YoVbXs(TF>n9L@)p011ySoVfrt97a1qVMZkWmO;>)_F)~fpr z-v|7gCp%e@c}>*zw?Wx&*S`O~@wj2q41V(^vl;o)bXgnnUOz3W+z}_gt#s{Hp^3ZY zYxCDeUbtA59dn9VZR=@4gYJ84%3rVTy?B`Y_lAwhCS7{!=8mO`zOKF90fK5Q&n=l3 zJvh1ZLdv}&E*}5IN}U|u+wxrf*iS}2V0rm7cG}!?RZdB1KjWTEDcNSXKb}ur%%Wc0 z*#C;frWv{|&&>Rsc3pY8E2lpyEN!vG=F9`_zVBsOdAs{~Ec|X<)5)oj5YSzdQOd0- zy6kk=tHbz9c1(Mn z`d45__T8oTrq%WweAer5sC9v$dw{Z6;_Z$NlV5moS1G(bF!|B3l&+Z;hdl&!L=w{y z(vsDAo(E_?e>&Y!rcc5$C@pHC;6jmoajy?=ygOTRgU-{syH(#WzP0G9T>V|bc4hjO z;8lucb$jxg{NLU8&)jjT@S1DUad>%;m6FaOjf`bw zWo%y+c-|^(zW6rd_}{YXzqj7s|M1rQ_n+`T-&X(qwYvUq)tzrIe9stvndB&VIlLgv zlj*;x+0Xy~e*N}uw7Ha0JZZzu)pMG&pD1Wt{=D#%<(~Aa`@i*PF52s{pMT?HleorB zCwmzhCNuLUyz+iDr==jztk1zB-R!sKzvQJ?1U5_%dvf`Up2d`$OJ_x-n9}Qo8W}k) zj#l4QX;pMPl5x+vihnk5K;+^&uZK!ZhIdsHpSb0noKke=t>O1ME9YCP8cyISdoCe! z=H3aJ3kv2XLawh2E(y*0pLPi#kr54T{x$(Im5kv@BRIKh2K9qZRFw9=6B1FiZDrjZZH4XQ2X3Q=$%h$Xx-7Do$Nc?du3QAn?9RtH}BBe6H7dU7A`$i zs@osBZmNFk^i$Cn*S^|yt#s|_Ag`-B5tA8~@12-rb}`Uv`inhtRNbc;y?+_kRG;4Y zU;HeU-(U0h`}FDi-+j+tU|Vyb*zThO zztVCJ#-#$g*1ayfd+qe5HA}Aqb!DYa37Qrpc2z4VBIVenWwM_a^epXr5}xBoovmy6Vek{{H%3Pk+Y$f4jW?-*x}<_Ay%u z-q+oKpa1>$_3PKK|GsMUtEmUoc*L+|6y|$;BF1c&T}zZTOcPRZco_1^Y1NUa>8HzTcf`oQ+GTX|MOyNK;}VA*legsE z$=wk0taU}p#?tM{+kczik582maXwVT^EFVQ)$tAE4vo1%*Gd=ywpID-&A31Lr++a= z$O+Du4+R3}Rc`y-=(=pj*}gp@`;-(I3?t|8_a;jvs0aR&eg6NjuHm_KPL`x5#g~(2 z{yQxED^XBLt&hW6-m+UF^6F!T0|!$Ms-!>T;%KOLW8!vAVBwrR-RZSf=|uBSzw3I; zbbfqT!S-_7j@iut5n890ZP^qa#45U7uS3DDLM&>@ypBsuE?@MReLN?&pA9w2KeAct zXh+WpkIv7N<}aVY`JqmOfuqC!rq8D*91RESm{!i)+8Olvlf)g**~#jk?7Du+CR*OA z3~>3z5$&MNX6SFfwmo>vu=r_25kr@SXTGRUq$%-4+&1%DWb` zp1DxC+xpjy=-v1Gw{QP_{d{-n&u^0Pb-m~JAA5fP&DXQLH%bReF#Wl=;A8Et?)Uv? z?mztceLjr>~&F6*Lmvx<}7t9HNQ9JX|( zRo@q!%h|w}&!qjt-6T9ajW;&f? zfhjS2G+TGPj!^AcAv`(Q;`f_}e&5oL?PStuDqVb9Iahi|lW4-cwp1h0NeZte1b4eP zv#_$Zo>0?%g?=y=n^wqj)$cE7wG=%vKT2*PCotrK$T|4Cee{hy!h&%Z9@`JVXp?LE8t>e`*}+jswt2x(c+vOKlAZr7hLU;ZqgUsqGL$1Y}D z`_?t5LSr&t@XWARNn=|2Q?tFxoXaKXu$+|Pu?rkU5uXcNZgXTYa;r-#Ojw?AyO=dC z)yl@*p}(NW`H8XLE4F8gBJ`hr43b+V_E=&4@940_OEx$NM4aA~%O9ha9eM3^+0JXF z7lRnTy-QQhUb5@Eq10(Nodr{0zFOR;yvF=~{NJzZi~d)+N*|BCaMbf)>%u86aXdyW z#(`Qz6=G{AR|`10Oif9e{gdb5;kliiQ#_WPhGo z{leLzKMD=DXD06YUh^mYor!}%xtuI6+KaH*CsDapLp%P-i_QgfF zBHWHFc+oN~pTYNbjmB&b#fo`}6HUVyp6$qK+WgYwc)~XY34;S}+)E~{ofDB<;^LP% z_YlX7>4{ORy>X{&HqjaJvQg7{$B3@4v)X$u0 z_fbq|YGF!DQsDDiOH;*%EQ% z(2iHjETn!;zLS4^?H%!Br(fIZL~XwpZTw-^Uen4Bqm0DwJxOX$YR@`I1hZVxY1`Rq zedgqW=93Kv)86f!;Mz0$YvKjRM|rL($JmWDXLs&=lghcl;PkePtM1Ekqvx-mo-QqO zZbS0@c=@h>>wK<#za4#j@l4kRyt}{FEj4_z`lq_Cyo>py)y;EvSMu9g#eM%4nqO_7 z=br!fM*sEeAAc#W{ro)t&)4lgK1uK0n;@g>qp`ATmSDewnswU!9?So0&wr|a`ISF& zLiKYs#wQo+KE=Pkxywe`)Q|IIIj?B#c8$H>49lNH%ruIxvx}PY(3tbe(ehh@&slXE zZI#s0o}08@nAu>O`rEieGymJ<6W0H4{^=CByxg!>*32kV|I7pBJ9jxfefl;`yl|G| zv5eZ`^Vxz2ExZq1?rHtJ`^;)1rTtfX9tF*Na`vY!%N=$LmPd_-zdG*iRX0DSqNt_k zwR(bhn-JGzA?+O#{6ci@crf_|?^lp{lyX_d%eXmWlVyICfd~Y zex0}bH^&+43ZX56MjwBDdF$Dv%2X|!}2_~nR{C*!rc?9 zuI0@6a{J0dkKvl_8}IjRpAMRC{q#Ct zKYx3zz0iLS|L%z#O`rK-I%j4;S-FN6e|JEiL~Cve>LvwughOsnf2zynyLsfJ<;2)c7H#7`OGi> z@9q5he=q&#*ZsNN&VOEfWyyX1?fdTEi;Lg)_WSJKI0^5IxzT#lKYjf9@bTxz{`PkN ze;hvkI`yQRjiU9^cP>ZXU36bu5q?DY!C@=cf-~FLz0Et$@@3e2UsyKv^78mk{K@hR zU&L-Iq_>G2coLLaR9>-Q%BFR%A3siByLGEw+f%z0N}7Fw)7sw_?v3$|jqJ`^dpanD zGjTER>ub9wMfSWqyt{DWp;pGOMvJQ3-)~?4{r38`xV!xwVulRCSDDsv9Lvcn@4B*e znNoB}mlxY6!HFE&n$1c67@Tz?Ds-1W16gC`W_kA8IvuzXSz?Y^jrJ> z8D>Jx;kz= z95cMs%IfTwD4l2W&ug4HJ#}vm|Lad>zqiT%Hmv&6cyDo;eBarQFAMt&-JaiLnVYd= z#_a+&$=@xnbZet3t9(m7R|`GTOr5-C(W@qnfAb0<^3&6(Z(1stz;b$aa0d2vjzDCXAfs`aO( zyZQRJ|1I;6oci;`G8OMLbC*eoM_zXN7dub--NgI%X8O-D5D-4g@?}QQl_^h`6dkrr z>Pbw#P^qHp9Xow_=}(6n+nyfYWutUuZj#LOxFwTxQcT{}mLEC&_8#Bvy|P>R>QkP% zR_dlkzlvHRlwfw}a7|13`{So?*KhlFt!jJXzV{N}Z=XK>@h$hhzkciEUzR1$ep;d4 z%lhHuvS-!~3ih$$_5IiF74!}EUH+2$z3oyTK#TiGdm^*)SYKdIdu92^88J~JOyl;ueiQgex=2&&!d3CuxiB0;$ zAFG7B?rmMO%eTKXt4aB;KKJ8fN#VJ3N)IIk>lH29Wf{`YaY$4DxsF!kL6`S78BhN4 zrWbL3e&_xxs=QG7k{!YT^C~# z;WU@6`GjMSf_e7Z`?AdwB943PUFLqub(3Lbo!mT*jJy`V#1Dek<}#m|+4JGPo{6Q^ zxs+UQ*-I`qwytiD#(NqVdJODi76192m>-mFFj;svNA|+hiMdz3rygHxllwJO^ZL@5 zRXN^~tMx*=3RL5oL?(28shK{bZolz|%AE^!jw&uPPHEJT{N?#epjA1IQODcv+VWNZ za!i^Pgx*{^AQi#fezsGJC2g%w=#EJqT)(=!G^4twEz-<0$!M^6%C2>%4?iy2 z`ReH@`+tA_eCGGJ|NrI7%j2&P2kVN8-QBZw+x~rZwY5Jl-QL?_6T6+?zhB-&$z2D>Vq_#nbCGlF&si5h*bY7|m`km12I`OqAa$0Hhy3@NdS0>CrKV)5Ph?=N=W&0D|!?fU=W`|CFrhL?%1i&+)$Ew+H=#NF7$ z6BhF&uN++}Vz;}rrLs?0bK|1T<~$|Of(#ih-RaX*y2~n;SQ7PA+2*|p zV>x|sAN3ZTnXa_=^T8dh`*+@FbShEzUi4kY@bblpoA))GFjef?(x*9@r9(p{sM{mh zc{W$FXLHmy^}rTMo{LEh3Oy5RGkl&D1S&NZ?FbHV^oTybOK;Juci$gttaq}$bK&>J zzQyK}t2G0;tl15{mv~zBv!0gd{(0JeqJ_p$zT#(_Ip#VlKKC=%Ns7qd+kfr1;W33N zK_!u|wyky5+qy24d*KYmzAP3qk^H(lecKm*uid`bHC!Y2`swA%kI$Evv&(&*Jkj-l zh+IL0`R(fZ*T>gxzn)xw^ZViUg{Ajq-;ewG)if^tX`TMs&hy)XXMI|(@Jv(ALOK0M z%>Vl7*X@^BvvkJJUHwn?W75LQ{By1@`T4X*_5@4!l*rn8)xNgQ>u25VWtnB39GN+- zQ}~$jlEvNk-5r-Sc34i1S8!5#E^%b$?}<#eSKj`$F6UhD+&h{b2G=FdXv|4!DV1;E znktO^KfU>T((w;G=jJ_hEMBr)Qp?F@N>cZvYcIchr)WhAIeeZ|XX9NR z{X_7Hk4k{3&Z+Jz-BWyDhrV`wkl z3C;ytSJ#g{cFh%Y3lFfpGX0N|&dZe{oGN52aHGi^Kt>B@5@z?k-a_)Ju zW%{I3TaxCBTP=CtlO*;_^>*G&kr^koS9&zIZwQMDySc3>_H?N(fA-G;P5|VVqSGJ9Dj_}%Zt#U^yQ~Q4k6dNQ}xfj13zwaGr`uEiUg3@GxX0Ua$R$B_<(kmYtpU2JnoFOFtk9Y?qjxv6*j{&+`PXCm z-$ZzPHQ^4~IVE&Qgsh-)l7&>OxrXLq;CHS6S&)@$4&)d`c>#KkNt-I5=xL5G)0gEJ)9x+WJWj96L)XE)p z|6Wd)m!CJSo&B!di=RI~JF#1bA;?xN z9FkfreT6=K7woI)V%qTC%+h}8?TOn2QZGhrFTFc$SLRBsSvP;UZoTGo;PBU94-dEJ z-d(kB4VO^AgxRkQU7OM_8MlY4*jS1KS54g^(EI!E*VpmKdF}Se{9d2@U;DQ9X6<0n zwNd8;4NOznj21fjCO zm6K9y9H;d3Fe}bX=P0Up(%`)0;6cq8PrLTC@{98Pr(>MYFfq+^b(zQ{|B&hN2gl73 zEobi)=?cHR)OEw;9r+!H+2UNWXlos*#Jgnu}-lMVj-t66sfn8UY8mx4`r|q_& zI-rM9$d5H|#>}mC4Lv71*<9J!M3=dq4tlcb#nV;0IQ3KSPHXqx8>V?^36J7-$$qoA zTk-!NfBye*di;OTY~$^W!+zo?4m^=yX3^Q2_xkej=koQxUOtci_viA{Q`g-i%~o?y z%Q}53$|hsSi6WlPQ5LsmmRoHRr=4Tot!=| z4U`y?ypKMRBNvv}eb zwlGXjjhvo(IfyeSy~0QL>BnCO`oH}6QL#5JB&+4dhD3L1vnu(;t))K%Hfe>lbhM?Y zuAS}`_~7xsPgeK%EDzO{|BoqHpEPqvR7h9A$!lK{T#gtN8SmdXVP5B2rKr=h7B#5^ zt1M1FegCI$ocR*jCy-vuuej*KhIy9fMdT#xN}s+v=qOj|kTOy8X-xxzzZJKm zjZw&i&Tbn6QI=No&$f>w9v9rQOz)1oGHJHid5dJ9GgDeN$z48c%soNUicuytr=v9} z`*7>ap7KvO*NNx#yjrklmN9!VL&>aDj5{j*g|~BLJuSWZx^!pEtFraquboLe9JTr0 zUV&brX;IofTUaA2|HN;asdM|s9MkA@O{M++zXvKEQZ5!aF0pp|wOhnzYiJqRu5Q4=^~FDUdePPGGt5vomqCvMk+St?RfK z=upLP>Z=wxLqnsqktgBS41pQbSAEeFnE$ke@kZtSxlUrm?26N;x$58SvW*z#l;a=2) zPKQ>l(@XWH@5)QvJMDGr`q}GduMrK6z3eu9rmEb{s_9=3-t0)0o9C=H(SYTgQ_zl# zwtvqZJ@3yBbeOv`xbwa6s`P)CSXL_^3R;=X;eTJVJve2m`o!RZHUl-zPx05zuk@QO zXeenido9nwL$ktO^X%>S{1arM=wh(?>y)hp4+T0meN26r`*e-`?}EsA+luac`(%r6@0 zoaMY%Z7jXFedp~LE2s9Iv~msWott00iedAqTSm#34vJm;EphnQiz5e9T%0AGlpd@) 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 z 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ⅈEv^y0Xi);M3K%ZT;uv|9|`cbAR2x zFUbz2CU5VutvkNXS#*!i|3jT;?CbwVeql;yD*x}5_U@z9!Ofcs_P?ymTgoxx=1Q-+ za!qAEp~p!fbGn^+ZbUX&EM$6hEp+#?1C6^|w_WUed}DUsvTfhjEqj-hoS~xXS)I_b zdbi+aj;m2FK|b1BJ7ze!WUYO@^0o>4?Dd=vZq8R=SeTZ#Y_stTGdFW%|3gv?dJiAo zIwYEB@U`$p#^Squx8LrNy|s(GU+>biO>2W@Sj1G{SP+mH@{DWUnW?FXD|JFsbX7mw zcr02{o4EM%qs&t#GsRD+zAy6&DV(?bXRqbnsVx5f6HJATcg{bU<<~HC!oI`B+^zzC z@gGdeCeC#6s`~ph;rr{vq!TWu&zR5p5hIp1Q}4*j`|X(@XUgxLI)RmulP!@&mC5bx zrnR?s)pai3YTL8JSX{8_+qyHZ5$^lnnyamAz5Cdr>fx?9vu8>iZ;v0klBa(=NS}Z9 z*4Yz`FN98CTK9kV{o;r3>%Z@Q{#?Ith4l#kJtaV|9|%D z<>k&_ukZiy&Hn%V|HtF&zjrU4vcLY{pFbZTA3rb8Sz(uV-)3+1u9$r_|Nh+m|Ly)F z-k^TNQ;}j*qqZGiYq#$3+n{N+JzqCXje4EM#o*a-Njvn|$JJ*{``iu=tdx-@%Iu)~>{B|4>*H&WK7oO3*K@Q{zsw8h6S+cV7JESOU=Po+6r zQ`J)D@EZP5-(5!{-3}|qg!(EcJX`$o=Et+~_7)v7_k43@_Ihe=D40Egib<-B z!lgQYZ?*Hjef%v+e2trO&X(KVA$&!GA3uLon>M{;a-=Au5~p^ciVEvIha>Y!!WkH) zmy4|yS+x67$+E9!=Eyy33iAEACjI%+loL@i^ zZ?oEeg9k@AQ>JpQlPvmF=323h;jWZZYj@Vh&P6j1bsF~?HyO94%$o9*-KSCT&S6=- z4O6Z>vN(U|H&fc8lxG4vndi*XUzT{-cBV!-`U!u@^L zwf1fI+Gnj!+q-)2*SemK^6tiSA8BUpH|zFGTX;y-Wyh6GOH}4Ku-JAqPLYDejY5NAj}5 z^--%92p@3#UNf69D&i7*=BMy?SsTA=FXPwnoo1Fled)T_o36dx)Mw@)-Dq}iT2zco z;;m@wJTt2$OD2@I^j}X;oof4Uf2(RM zYyM|2zupwH-{yV%zJMQ}m-~MOU7c$G=lcIo+u!g1J8kA-*~4EheEj)+|L=d>_s4F3 z`+50%dAmKo&G-Mh`u6nme*2pJ26?&vzdSzAnxb&v{@(iSwsGI;ijOZ$j-7V;@#BlX zFCGsH7bv}2y7u){+%cb7gL=VHB+j*Q1IY}7klvGdw4mm}Zr*Z)7ezV7GS!%H_=Xk0m?uvD!`w}Yp! zvTDhps;+y+D-76s8ltp!S0#$X$?0#OZ&&~OuKtXr*M8-&SEeXQxSmQqoFSsQ#QLd+ zv4m>yDbtIMKAsi4$pMLxUb;aKByQEN=&f79=HQbyE#;<6po-&kKi)ez&4v?a@2#m+ zd$vnNO=|7eWy@}U`LI+>;M?CHKVAxRzr67JG`ECV*u+)IQ&^9`eHGRr%TvBO$SBWX zda#TCrq8Ez*10Y}tHvmx8F=dFgJoM;I!@0%7?$?e(pqQfj*f1D(>eNrMof3unLaN` zs*swf!fC6Tj`Q z*NJa;zSn08SBk7S|+Zc0mBKxGN zGc=ghEi`5{vrMY9Hc(PFN>Vr6z$BZZa8%^~M#IpDK@vIlzu()v`c{CvS)bjph1>e= zVw9!b)MtNl(Gc$RSX*@ST5k08rCm!jd5ygqnl%pnbh+iqBCO*tv0Y>yr}^vM?JJ+f ztm?lQ$}V_u8%u5jxA%nErP98~7w+wSd?P-t@AlTW`nCH#Sq|+CTQ~J&qEBC^JBw&R zYTU{-OVZeO-9lTi5keYV6kXt^2NR zx}qicx9sol`E@llH8p!|YIg1WbGZKRZ&2f_G;-<&yBM#EjPzBie|GQxb(MeB@8kV; zB037&*7UmEad2&uuHtrIdpcXLqmNojo46dN$1}6xBM~ z;pWmXXNGsIUO!7?pMmMy#ov2+v{}A+8SVNWE4iNW+0)J1wfWB{p+} z%I*JKQ2G5!^X#48f&vjs8Y*Q^Z=04|xG;}vfzH!SVhdj7hVuu6IM~*TH3zxMyEyu- z*xAec?pk&5Rl|_GpCabROq_G-=bQD9_gLS&CVM!9zhC1}bo6Ik~(Yd+&5?bNK(Y{r!S#UpR_Zs+?JsY{qnX^VFG}WoNJ_Yx+!j>&M{g;-%DL zyz0!S^IQHNoOJTE+PozKy21~O{=IRrn8UPAPoz|fJ4G*PxiqKnav9~x?Z$%a2C8o- z=C)@(YAa}JbYBuEZ8`PPl$i^TEwM1$lh$~SqpUQyAlM?t*;eO)SdLt?p@N9|Hz|b+ z1+!JH(w)6a#X_o#=0ukk~FcKO%`e4M;jR<6nc7grippv$()mWsK7nruv*JpTwB(K4<{Zge0V!Z+(omL=^4|?Ka*l=&aDr+rXpBrlp=j6*jxA6iu_v(BaUb| z9Z?nKGQQBwA~=)3c(H-fQi%=E-m1nVS1(y`i2I^cT!^yD$I~1fE0oTx=}l~8)Jju+ zV8xdtv`{MT@rAnLVp-lTyG08%LpQBph-qQ$eKGNnXiNvU!j$FgmpdbVhL>JH7g#in z+p^19VJFu?_3jsQWP=+d3vyT&Zm^5FZQ-_`^JZ96NOkscabBB*>Xf!+N$UDXras__ z3j4Kv|IK}s-)Hat*&iGF|NH;1^}nz0d07AHSFukEqYF#&C*jNe?S2(M_gwb7tZyu7 zS{yv@d2Jf&O0Fd=s!|IcUg+%f&b8Wp&)5C+-&@~qznymKpWT)AwprgE-eO$(CHibF zhuWhfPt)crFe#JgH2yoQVW92z(y;zpLRO#qQSvJQ--DTd9 z=H>s?&z<_ozft<-lzCwuPZTa(ZZGfG|NHUp*PlySclUeDPGEAp!H_2M@Poly2F1{I zcbN@+N=x3#%Gup|ds@9%-951`VmmW~(+qFT__%#{;^MC5W;q6;g1{@-F{d63|DzU%j&A9vo@FWL3~s&bM4p5rfMWmZ{* zG&gl@G1c2M_1EL~`~N@v|3x}#nv7UQ#Vd`ytql8=yyDckzUMFKkf`msx7mEg%;PK{ zW-gsz@pNM8x)qV{1q_R=I?|1JQp62R`GkJE_bE&~{n(jnr;yQe`PX<8e!ZeM=< z^rhe#IlnXWn7NgNmMN7+uM}I%5ullRnboP1UWEZiUdt}5zWSGIj)U8@mXev5FH|_Y+VW>tB<fm z!>v8$uzIh(dB*zyr-xA{^G0`p6HDh9M<-Ot6-}Jf6<>5+^4agqS^X)Os+1O`WK8A_ zHmFu|e&??jc>b7RbD9{3g2JKiOC~sQ_#YL&5G$;g@@n?1=j>H27KKY!X>hGuIBAWQ zxvRzGw996Pl@GQYicS8qC8>S(uM3794i`HFrh1qZH64_!Jo%U<*hqMzGH-+gi*d2B z)ZH&>Wy(EKVjZlN7YdS=7o0jb!8kNvX@PY6?Sjx1?aMAq-1WscCar%}i*TXZU%7`1 z@A|fSEaC8eR(-OXlc8YQPgSNLC7XB7XROp%)*fdkXnc9YluF$*O2OT83=d3_u-@!w zm!P~RbN|=B-aUFj(|f&ldQ=8&Sk$Z*H6^n%B4ZQF2^|mj{M{Vw(oW)vT*cXfv0ki7 zX9S$yU29*={^=WcMhicGL&~ll8_ql|U*ySrV7}4wxnHl$KXT|!qjAln_-8X&tZrVj z_?pErqsdx|(Rcptf&;lSDZXze6#m#@TDARy{_Cd)n=hZ_VdIx-lL$Qhxcq)?#V@w4 ze^@s=Z(1&2F1@59xaQv(rt{I?!>(OZKd9Dd$fCrqd1Hpi#kw z@48yMzPopFR`fn}P87>ZJiKtG`}~iFvnMB}xhO8>_`GS&^wWLQ9Ui+UNIp=%sPNM2 zyX1$ED33`Tjk?c{H2Qn5F7`NclbfaR&i9meen$J$8H;Oc=dz|9v#?z&A>y>hE+^*a z;qv=3zPHzf?npSryX;P4?DdFMt33JUY}DCmbW!55#jO`>x2q}j^d36VGlRQ$?bSOP zM~}Gv%6Qh#&(D8+qrLt9J9nl`CFW+;R!f9pgzvEKn{KtRJUy0`C z*lX8Z5o=ceBjsIq&|;-UU*FAnIwgAB&Bg%bNB#DHYyN(EI{W+npz}-?I*jG{n;q^< zWj(j*aSoSJpv#tfQQ0RaE-gMXt+ctrr+#n2_CK6gqAFsm)}G0EXVvy?--?MI5ni{> zpB9W|pS|{W+3tNSvYO88EKgbKxkidZ{YtK8_Erx5^-3z4u?$*4+d`*#Ej2hX^UmRf zJhrAQK^#oFO7o1upUrzCe86B*o7u4o8#t#enfZC*hfbr})sN;JIP=_S3C+iTS5UCO`WcEcNu%(IROEIbL{zFaYG*=%WZr%6UYFKF(h{?sFaDc>Jk z8&3MUv9)#f@x2WTPV7_{I47tgDeq{>cM*p&mKSf>+Em7*DMD5-nCPn z%33PjSRuTrf1iOptKm(K2`gvyT`X_mw5+Vpv)(z)>BomHYpy;tNcQqwl(_7Oqv}+h z&*5jE3QsJ~-siq9rsSiLOr@*3VSFZcyM<#LEX~%08wH@5t@@&nU zq;Ey%>|f|4Gd(c2PxhPpz~t!}&i^`>Enlr}kXL%(<7m_E&t$RIIU<5fHCf_wu;2Vs zbHtOE{VUg9KUs#8;Z3u@%#AmUe;doM-&s(6V*W{=yJC8OzWn=Gm3!oPs>r69|DP4q z#D*(LB{Lj6^NeL(i^1i4{N~Dcp6@`ct z_?_IG+C0sr4kxaDB4CB5DP6xX#EwxfT)}oa*;q1rg4do@hiBAND zIu{qnos+e6PD|3C$2=|M_=zuf{%+xC6!eX5k4)n>WKWnjYr>li5>ijZVtuc=aki${ zA6@0J5ork?Vy*|5Bla zLM(YJf4t0-I?TCL$Hi#oxyxx)>y}pJzWKX)-TFgu%YLTUmQA0tFZ_yN$AVeDb*sW2 zgv|K$(3kHj!@(~vu9y9tw{q?D?;6t`6r&uORBkanJ7%`7{^UJHPg8_U(IIiBuD!cs=2cWqNL{~pl!RvmalyHBhBTQQi_=2 zP7TMDv}ajnEjze&|CHzzcsA|j%MH$7HMSZA$|rxRtNr)r-SqbM)}N{NNA|=CoT-xW z)n&;4^0xiEb7_6$zjxE`w^m9&{`BR?-|zMwYyZEj|LHGZ|F2T>^uGN)cK2*;>TZ57 zjlTAF(ihk58EfrpK7aY*5MH}4ZvF8KU;hU0n5}i^^rjTIqi2?SOxtm!;`lFrz9Q~S}ySL^k#qjLA|J=qm@`O%A%3hlr60!Mt z%a^gH{jqiw|Lnj2d@d)Syj;qbX{wROxJ?HlCX(o|-LMkeEoY+;;G)uF!oz?ni$joB%tA;wY zI+|1We?BYmN2GoE`bqC+sK#{NX0V*yHS_1W2p`w3-O&*)KD*kqeLbI9zDwfLT;!a~ zA}*BFo?d@L*K6YO_S4g+E62Vol`x*2#kEhpaq0}$CRGL{wS_GIo>iBmaV0P6oGrBT z@t?TgUtCfyxJ*q+%YWyiD*x0{VBSaG>zc4l)Nm(+8566cZ4wZjM$@-7A2@XA zV8M@o%N;uJ4*N2v-8*c(d)eY0>`g7x+n0*0lkc)=aB<%KHQ6Ms!ra3+P! zgxp_?5cZf(XR(zB`JXOKy4oyzW!L7IV;O0Oi<4izNZygTWBcEX7W1oHEnJG;}?7F?d&ps=rJYi&N=dC)jjK96U=t3?)~Pg8Pm#=y0SF#fT{Dh zO**%CE#o~F_WJVS$Emlc1?fL<3Q;+F?u4VxqswK<)2f^re_A$A&YBQy<+{#y#i8bz z(^D0dw)@O_UTD@_7!~5HAvdX8QczA)VDj4cmwi+CZcX%B*!jx;so#`IBKsMxmb%_~ zts>yZV)0qz*xawSOfS#M=xYov~wH_Wu94|4;MIx4-37 z0zWJ*zjy7SU#*Acsw`!%EB^L1@AfiIUXpu#Z<;;hf<(u#?9{aF3>mR{fnTi3M6WDo zkJp;kdgZ{OtzMcZ9hq)8UeA-ua^<=p{;WNh^X>0mn?nbJ+w2Ygax)5~>?}3z=9@S9 zT(QQaxbHKUE`PFlm$8D2Ux0++nbM4OzpjafD>B6&FE5omf4AvZ3a&QSNI%&opI?ZvZ>`j%4Gb^`N(}J|aZN{n7!}9g7%h$EPp6>el z@KUzVa*HP?>VDe5+tr@?_P2Mc%-YZvg>U!H@K3OI4!*5xIp^W>>g!7m3vl^f^O^MN z^90N7t<4NSy*?}5h;5iv_2}n!KY@rd&tx8O$ewD*(+A{`2kr<`^oy z_;pElN2#}@TUxrB;1s2U5AQ`>L`E*?Ik{<|S@-V#TF z72j<;^H1tAPX6EM#>V^X;gN(>EvN4vU^iZ~;$Hg6teNbF%;}Mg;q3ed+%poNEC`w| z@y0WF@toWrk>Y1v40a#2di%slp+_~;;4=TrnVLr0n(zNr-g+vdv9xrJ z)sm)}b88Mn&A9wcH>u_B3YLHzjf-9yM-+@MbZB%~74O^5&Ep|_IGiJ4o$!+{hRcld z>WBXBI7RGkGQT%IX-O zOxoi9nO|1k{bT2zr7)twz$7;iBV5)T}=F~x3|8n=I55pS#{j+;amld7aj!~vo}^VMtH@Z3R}|JNklV9YqLvdS@xA;KL`;;Bis`U%b?JsKdRlMwCZ0sGYW%cyM@~~+s{4-{` z3#cndH&k|bNc-Nk+f)C)@V@S!r@xHYbA5CkJ!JW`S$vLpM{9S-rzH-m;=PJ;hPN1} z?aEcS^KJ3>xTS6^f%o0Rw`PTUDK4`6b#c~CPr(K+%|?s9WczQak*+GeB_ZxC+j31m zUv!@l+&CqYBkG4z(6n1o(#b4}=O%4j>2%!foVTTab%JJjJYxAec z?yE^xuh6J|C^zNrei`}Q(t=lm7K;cuTsp;}tfRL5pzqbQKYVOIxn7RFICLP?K?u& zyf!+<@#Kfy&Kp*1j3;tT4_eIOYTB~%^pWSfE4YIbJKEb13F_FCXP#1M@`{Rfd*CO= zxv#%g`GMmTtJ!l7zR_Iq<(t%j8A(Cwn?lyNf0=EkbdLYNnKyHTK}+Wip=C0RvUb0x zP2mw=G)Z*T{5_8=YNvBJ^@M9)Gta#H#6|sXZHH|N7FLIWuE#baV)BIcnJW-uRZWbJ0G{)JQK)9UmFS zbcur&LK{s5T|bAOIVqAj@m#sS{@wnkvL8Q5I64TX1^=z7){D7k8yF$FEO+vAef#>K zf1W1p)Zj={(+=L4z}$LRw6$|_Lr+P&eA;f7j_@4~f96cRc*S*raE0Oa^O{Pwhwsh) z{JJ#0ZmZ*dImOF!HoHvRlsA2O(CZBL$t)H+w+gSc?$mj?-+cD^!t~<*|BL@xZaToA z5zQWXNZIjjdd2DFnn%+)`GT5?Rs^J*+;~^EgKzuZ?YIBc-08bEt5kXAVduN$nzb+P z&0)qa_6PoqVSXX=L8qNUg_9f0%a}g% z9$o!ZTW}dq=>+!=nyXC056-l$V)=Q7|NW8X%}Y*6%nrORxIm`t{`t*ETIR+%%=}gS z@buG7{A;~a6)l!{Fi6dNoU9qlf8s8~3yG|6=KnwD|NC6`=DKu7)|;8u;yjxfu9yb* z9C8)n49#BYreG*6C|vf{p+h86tk`|SEXFOm*{gy?1!qmudLx%yamHq{S+aX) zO9{NY7F}MRwr(kh_ryoHuSFG?7tQ}0KT*NLahjBm-POGaGd>e1 zoY`TwUuS=fyx_7^XFf<+HNAf+aWBmyKVDfpGp%uNx$G*dj-?F8{8+k9R@KGUKkrMJ zxJ$>r{!hu?xcO1LXDBLd6nK8hIZAkEl-pZ%%N*HFlRe_GytmT>ydUq0vlmfpKC zgM(q#i@J^t)-%f)wuU5S)(TVyBrR#r>@R$JWWI~)l!tdeiKnS4ZBPAiY-?Cti&v7c zq)>6ngdbr`#CLQY?=0K@+~;|;_K`Q|R>rz7ue~$ddg7#{FQuD~?nrNB_#E@qWx3Gb z@WrJ|4D(h+Kh>CUgW2WGME>aM9tE`6%F7P#`0r{I&8H*+m4 zS>0P2MGYrRdZu$xw)`DmQ6`&ktJjpEtkUiY9MAU%zVVrKd7h5YNtr~!4IE!3p1exS zn)d}|`5l;&xlV3b+Qr$%(oV9^p712<8OY3Ex848vj;l*^rt>e|cY1MulcP+9 zvZU|#+HdUE@8g3eU6ihqW#m!(!7$0;h)U{i8-we0Gop8B?_~K|>&W18u--`QUw>?U zo6ZNFFM=H#ri8Kmd3%fP!~ri64ps9m$Au2u_A&X_%HJM7meKxAd$wL;=PR2t-)jHg zxPAQfX}gkzsnK%t=E+Sz&D^M)#;@Ku|MG3Cx9hJuU3D*iyKeWlXczT%-MTy5{%-T+ zERFg8_~}zNrx}3}H!j@Exlx$C{dMV=YkkT-g3oUGy8pVklJBkgr?``@D+I(J+3cCF z#2uU{b}XuLwYO;GQX8Gqhj+zpJAHWD)u^Q+dNWyz1T}+#Ug)>)e=2gzs*uaY#Vu{ba!dl^*k@=XGqh?`9}Wve0b`Hqbg*B~!S*Qu#yI zRL%;mzGc-N9LwkPA6+tOuVu$({V7YBor;>%uX=Oz6?oOoTqFJ>XXkzYoeY~6nwHLI z5SX#^LfK9kef`pvF%@qXcRYFcFpY6h>N&m1Z#P{znt%P?@yC}hAD>_6cTUj8Yi-Dq z)yqUz&b-^3EOACD$opJnTVKf(wih2i7S>kXskZNPE^Rq3;cRhcP29Gs?QT5%GxmpA zty#iQq!_tv*V@@Te;TMqO>+&sU3W&N@8}h!MFNF_Nw1cfCEdK1x>8eRxr^`dg6S)d z&brvfbU8prV6ADe=)$GfzWcu~tZaFCdMkTZyXMX83$q{1D&*1%5ZrjC|KIP44_>FF z2u++2`bIOFk>Q|=-IveD`{n=rji0L3s(${8uI{@>F`9n$ChV4p&2>%JgIQiJIrRKp zM+ax{8Mkt^G@&zR0=+#C2{1mqcznVk7LS56??gOqD7$pE*Z=yGdH=iVKF;#n91__dS-!EyFzS1W>dtN2y$|2MFzmT{a)QiDS-3x4K&7Zh~xsbgES;Q9`U@3W7p=e_d_P@b1?WCpKUi>AiXjhcGEd^hSLvF+EF1<{#dlqqF1dems<~|MjntPmT&FI)AQ%Yl}r)qky<&NL>>&J%;)4p!{SAS;j z?MXVGMKUY0p1qqGTI%7BbZOLLA=oN8F9ez|V~%da&C+?;}` zT#OTxLIMt*yVTa)XW+4qzgRwPTTs=cO*2rw}%5`K2@4R?&_^UXUtM5fGp<-p;Q zbty?tLBQkczxLFV6TV$h(C}UQz^rPu@ADX+^BegVTnqEQ82Rw(#oyo+hu`=AZ~tp? zsdwvc%|*W*lFsmpW|fP3F)UhT`s!NMd(lL>DDT^|CfD{%(W$GgULAGUc8dRb|Ktey z%_SCVes^43rS<*si^ZF^t#bAFyry^szja=m>uk@)P{@weBi)h)fMFa7%Ybm@EcpWAZh_Z^<|J65-?qmp|yd$5E*zWweqa6nPfP#3+01fASGf1GPp;C0?_D4MM)}(> zcj&sObLfuF{5c{Ues6MVntpsJ^wH@ETe^0rb z<~89!Slelq?6v35pTA%8@7dF*OSkpjY;AeDQd!CDjfEBWafvjy%`&3j3#`If|IL@b z!IL4+^|b!QLG8vf$?=m+g!HmgSEVqtY?$*{WZIYJB~!lFzB$gIo3Zk>>H;UFz13D{ zWgJc!uW?B<~Q;Bu6eipQ@Wd#0B3359;kQ=R_)`1va~ zbV|glrg+2cMi-}^Jak%pCwF*88LxWq$G(Rr?=XK>&tqvZdL~lhQ#kLd_+^*rr_27` zd%wpi;?@ks1t)$^*uB}zQ~cPcM;{_TcmCK=DzwNfiEB;kPJW|vn(s5e+Um}bo$}zx zx&}L4@k5*D`#VHRWjVH2bhLg^3F4gDm9%-Po$__p5LcO{GON0(8DuSUHhyrJAfz|3 zYMrbdQ{KJy=p7R;RH*g`6bh>69Lo1eRx+w(N&{JP`Ih$SUUL?Ar;=uZ{-|P0* zoA=F?c>MDA4XY!}KQuBWPkY_4zcYD#`0dAEe>|Tt;mn_^vnea1f~Q4y)>`Q3NPk${ zZ&!AnhqKk^a`P|t?H%_2eg%Kw_-)B2C^#p_X#TYn&#xWKh7!tuJ{Ts%CG9Bf%lo}= z|J&bF|5oghJ^FLaQl|$m4)@hvxqWuupAGfj?>b&F>w9qTl<2}!k8ia1wr;t7Ei0joiW?IwclRSJMXU_nteIUdu>!m z*Q%tCi-niZYKkysJ99C5N4xbyzkU(Zc?aePs65RLR-B-;RD|pA!k>#ePUv(l+qtvj zRm@%%CONqU=lv2zH3d&j^*pRCs%aBGlX ztlIzU>iT^(-~ZPCJpcda`hS1)L#|#Dw%VMtSyQjO)%)o+jwi`0qM~?N&ICVMx~;5` z{psENXLaUkRJ|{~V)x5ncACJu!@G7)y|8CJ)2^HI?yNR+QEBapTKSVlAxqQo)`kVC ztGBuC*gfr1RB$L;$ktWa&ywwy{$>2JvHza3joWfbN8|e658K&{0$k?n`Cos%n}1H` z`&)n0K1VMxdhNe`0sqCDt4xlCJKlC$7A`YGSlPL&?sk0rkB_sTdmnI@4>8Kf3x;N@-WYC6hOTx^Fk!I~@1@@sEdBFE;z_ z(h7-KVX9Xd|3YA*&*AF#f*P(1Qms9TdAb{eCNPDqG7LTWa-xT*(k1EXGSiq$_)o-N zJi34O{Fj1kGZ{APA3DV)eBS=N{4-ta`ZH7B9&Tx4%-CggS+RKk+3M5n+b321HVd9O zqr$y_mf7 z=ELK@-ZMAWYF(RDe7&!rWv8c@wXKSfaoOjGi4EmVf4L(SA7%da$ygcu#m2zK?aM>! zUYX{{3-~t+3J7wFn}2L9lo7o6J+Ce#bJNP1t}bh3{#tyy{q@`I`~Tj_H-F9l_xS$b ztNZ`o)|EPZrEN#tm!EHsUq7v0S^M{H-CsxVz+V=5c5Pd>K6&=)>uS^zEmsfC@44D1rkpsU#aZw!!q|a_>t)c3XYc0K9>{#Z zc4^AS>6%xSth`-Q1ZM3Lw|eZ&5Yc2MGOMyo(v4+BieRoF&;I0#lTCV0+MfI_uHJRr z^L(X3&=K38bvtx&ex5kL_L+{9+CQVzU#Zt@1&ZIt9hX>k%EakN^SJ`fw&PEq?#wNH zqZg_nv$=JS;D?`_H&=eJ$g5tNs{K~}-|PC{_5V))|2w<>*VprLcH6JrIeW~a&$D!q z<)+DZb^7nGS(VCMFR(R~-`sFztJcyj@5&U9Z`k)fauv_f-@k8P+|7J@Tk4vGXN$jg z##Q`~I4+@bdA44z*0ycAYh9068yxc1d{+169mf*IDYJL4epRvSNP)|b4HC*#-~Z0I z;dhDQ(D4_GdB>E8M90{T%0q+FDz;>enYu-JX9- zyK#<5CD-$7>Q4Ne2ljM*GwgfK`)<<-#+a(2)m)QHZ2K!cd~|$NV)yTmuQoe0J5o&G zjx1BF5qH_MiR^EeoZ<2aRlU%^Sl<18dqnq{u*Wvfl6kbFe%;Gn`}f6Rx7@E*-x9uD z%)WYLh7gO?;eG%A{eHjiH{bPo@vXigGDn;qW%ml!hORMmuV#~!7 zwMlH{B57^$g}yGwB(AUi&ipLnY`)xlUA^9n7Vfz^I$BLiiju0cTew9QDAxuRxuo4u zQF)Pk=52oLzl>(PWFr+T?gu)K1zP_Cg11Y~RC|3y#+W1K)OXt;^Q=#7p4*~|7h9V0 z*uIfTRoZZ61 z&DN{EVAyoc>T?edyK(xNzjr6!7L(lTq|_wnw~vYSX1X3zM|teq>x~VUWo@et#2hl2 zw0i2bD{p0_A3)k1* zzr&{X^UKTU?e^9vpa10l|EvA}dM*9)vWDBrR&EtLEBEq)iNu$NUFXD>at}I<>F{F%>oe^?b>A%T|Ln>q^X|p^_4ogO_?y4({rXi`Hrc-ZtXjY*k#}$H z{allf&%LBnlqICAcVB$I*{<7$$L{r)OJ8^X zqh;`4b}Lg7pMM>}dTHDA z<E z-nvpk1)TjCBAy-1_F8l2rQfM}mwHbaxgK&8)}8-eEZx!l`K7>##rN3-1o#hxY_3h7>D{J@v{qXp9x&4(Oj$N|_ z#5J=DckfFtIvga?m@NPM?C}kG7kTB(a`a6#XGUo~Onv34@^9wO|Lvmx)^84W`4Gaw z*Pr(^6G%)j!w)IKc6uJK5H-3>;MlyD~ok+usn zryjoGq|3Tg^0dUKx}&A`kxc@QQ#G=@c27BeqvvqW{j+RJ0sR%+@8#y}eR`7P+Z|Y) zBVOeb?#Hr1Bl@Ju#Xm0d!~3@Xx%GZ4UsH-abGd`%`P-Vi&5w6j{Py5bv8_C|>gLG< zIx%TSj=5IuV4u%YbK}kxv6CMbY8x-hKX|3Gkt0-P#p#C@ArFM~3SWKGk2<{MYQ>J)a&zie!UB}ipClzupy#Fl1z~b|&f35BA-@g?^T&*Yh-)2ZXU2r}D#YYYkaPc^bgyw8*RO(?YSs-Mhu>_yy;?T^ z{+^sa-Sx{?9q-?teemBm<^J-w?{Dn?^Y{Pndfxqi<^MmgzqBjROa5K^*1gkt^^DK) zm3S#nDZcmfRQKb@p3h%L$Fs)QNo=+}9Ij)*zuDo_64t1Imb}sqqdAGIuJX8lzjwBc z^$hFME%qDE{eSV=|B~z>k0thz$r~+Pw|tN*obff0J?DU$;KAM1_0@m>y*>VZo&BF{ z{n6R3uOtr5p0=)?x4wG+zJ2laf1mD_kK6y{-!%)C!k$LkzIolsefzR6&RDiVaC7q> zE{k6l-|n8hvn!h4TB+}$tYAuDu1M*54HvJKTNg}<+Tu0WSL9UK>7`eryadG(SEpu| zW^c{VT)OSg^3>H^r|!y)z8#h8yZK>wv~F}}sMo}xtyiK}9l5g5>Dn6!!Iu{wPg9Z< z7M^!2a`FO|5I@0pM%l+U|C%7W><{0J<*s>OK5v+4@^ObXx4%!+Gwqaz`bL7SE*<_= zIt@$h=l`mkT+-PY(Bz}%FEpp2Kb!g8HvuL;os5MFECCpSN`KYd^4-p9j|XGI;UyZbv!7wsAjlK2UHB}Ex`imks+8r1zcYJ2yX%~U0(`2Jhh!>9eNNeW_0CVHv6Z&3%mFT-Z_qOQmH2>(^+oIlP_Hl~lQ|V^C>oV8lN0??V(&F+H{x+jJ+5YiC%k+@0 zX__;fW(vMi+V$azNt?ZwM6qJ)$zZXg~EZHEWERk6Fe~-3q^&HpYqid(ibBH~47MbyUcM5x%$V@MnjwQyN3M+Jk*CiOa zn+ok(cuHi)#)hTVq7TKIjXwXJx|BDWpXXGC-3$Oou|KC4(yV~Dp&+Fa4@^B>&{Z#Hoc5+oQa6-?)DN`=WM2 z>&5>+P5&K_uUFFfuq^(#qJ{AtbbF)74#9uXs5L-i*5Ws)s4M`dnE5vZYg_x~>JC zzP3dpbn7&&>0$G>Or7zmRcogqYeHiI$K`v;Yb)lZ-g&yzPqWl$&FAN*1^J!4w*Aqv ze7!$?)eMJAUY_9$7UlsgN_XdOsAv~#n(<6?;=CoVYo=bAm}vL*)$Q2lk@pH5o;Y7r zd*}J|ugmGA+dOxZ-12wsOx>tF|7~B+8D;x$?_(+Rik|do&VS7~nZtg~hG}6;^R{w! z3o0iDe14eBvnp--n|<%CLR@m*ubra5K41U5zHc{s-`@pY*RpCmJgWBo{&GGhX@Q{U znVFUB4<6Q*yj+^W*`L#Qvd1>OB};QHlZIfFNyo%Z97^u?Rs9Y#ZWi8N+i&-4Y3{SK z>iYM4XFJ@Qmg49fekwTo_t$TK^XsZJ-~RlxWp7Q@-;Y<7jqX*vFRQ7%n;*U=xW%Dk zhEwpLghw^bHLohFdJKZaT90Uc+VV<3{!MiR>t_Z4e6hu;X2=ebgR-jw_dc zpEM0-6WH^=cHg}9+B;>JPPye$yzdh8qB++VW*<{h+N3mR&w-28@An=(b$5cF{f0%UE4>n*eCcpFb#O{h&VIFH&Vq+?)TU)_ShzM&araMCD^2aGyXtq@e>%mk zckR7^W#~>z5Ge_w_=N_8zlOTliGrBUSQty zey{W`-c@_2-Tr*}+n+0054UAzFI~05D|lzX`CU#naol>zJW7{jjQ`j7^xrvn;#-8v z4&CkBzp#7eZCbUek7rHTT8Wu#OD-sTE?`*XBO}PltKbwb4Q+5+Jj5-X&Y-0Z*A zich>YOMC0Jtc6kwepwoZiAW@^Jij*h;Bil*gL_pzD&D#NDCTe3y+1LNO*8J|r^80^& zneYGmHoxxAzxx0F_0jrk+mA44_vg9xm}E6HzYvrvS4yb+5c)s%>dML$b$i|HWB8X# z8Te1G6wzB*ce?CckoUuDl05wv)=i4D33`!eU;C{7=GWyNOoh*N3zh|SdZ*V|f3N-_ zQsQ~;`irg!7b|6q_^Jv&nxDw+SuLA?{NK}GWp}@C-@g5^MU{+*xN+yiQq%8zP6h&= zcfZW|x*f<%Yw2h@7;QODXQzw(iO|DF-;ZNlyPwB3D>T+3jz$gB|l4i%h^)A`SFw5Y6};a z*7BvyLT$m16)1V&aUPy zPtunYd$y_Lh@<-npNGxr`zCE!E8=(9%fWMJv6_U-4I%f_Ix__?H<`%01U=Y!^o#(v z$2WhUg);mzS})t^7$~jbIQC-EqOD8jZ(7y!rI#Ux>)x-2aa%OJ%WC`XZIAl@>HgoN z{ri9adw##JdiTAo)mlP_Hz}wn%{!|k>7TyXbCGNDk2#ywr@y=RJ3vq&WXUw9lX<7V zY&aS0rR>x-D?K4`X~xC3H~0mA{yDq7_DkKD^ZN61dS1Uh=Ae7@?ylaj`6u4Y;b`JA z3*`I0cY08UBflfZp}xCm?&>LgIZMRlXV$DqShDZ@k!ukPm^xQ7xSUzs|Ge@1ed*bM zz1MLr)3b9Dt=${-Jd5n$_$<-0Hq0RB#KMsrojv)=iR^b2mAE`}5&{jSJrG(fsdy{X~MMz=tEzhn%&xX59|) zKC<-N-u>k=2Rx?t-cpl#n#j1=`I!Gb-#dnUkGdC1rLcSp{1zC0KV*aHmNq4Ur;}f7 zzvGgssaRuUtjyrS<9KG*%Sv{`ndy<=)GvRxx_!SlI4Ztz!IE-M-#styDJVs(GL+<$ zHh5|5G%0a0htslKR!tWz&&QtYH4gpJN5^<*AFp@7`2#o%Bide5{d@lACUghvSdFaZ~%Moss-c#~KFaBM9bcS|CttdmxW|d6=VeJyieAh~kwEV1X3$czC82^3m_lwo-q*(w(TwXFjPG*NPle>hW5en!Q#;*LCx+#f#R)6;032y}il5I5a^$Qn$-s zM%&4E??JM1Ng|&)MRf{w7&t0~f;G!kY$nxh4Un1_RAAhZ!ZIx{ zR^h=sEz$HZmDkdQ8dwq;Q>S$3_*X=P%~CFi@?uCVtEgDAQM9M;Ep7 z$!$-(TXVyLjpC^%fS2!d6awR4o&Wdf`JF8>t6XSwaKa@Gjv>x<=6EEaoH~V{`kc^Tl0^e%%}X=+jJF56%R+j;Bx)6%@p_O3R)$kY=MYg)zD;&x!s z{`kjLTb_4&S|kPgRwwX_8|~h@+5U+5B4NQrT?{9`fB(Mx`*-oHQLA@e_F>~}5mW!A zV#ycCW4+|Z#QX<`zWuzkZIXj_EsM@vHrb^?D|X2rpM0h6i@*N-sO;mp-_S{7u!d~DUW^Tbxq8KTR3Gz1SDA3WSSIc{_MUxWX%-`s6!<(buTIz_X{ZUNWoo!36u{Mi|Q_II|g zt+?QO+45hBZuatp{h`J!i&?N!gQE z?)9Cd6tv~Uog2;qu0qGZ1#h#OS*EqBRVnOtN9)~dL6bBs&cEFmt9DkoxJ*-PdUq0+ zW6GP33+W#del`+H^M%l02ycWK`Kwf^%P&-&=;PYl8qY=x8G6w=v^P7vL~FeD8{2*zU*zX{-NCJzJhDK$9o-1n9Gwcv`wqu z`rxg918bXscz)Q~q^eWK3h!PmZeir(XG>QO_-^>ewac?`?E!=0&4q7|zuob5U$uNv z?LWoj6DcBX9EyS|8G1ZZw=6zmdr8-ZWtFGVgdnf%=(QC}Te_8ge{=m3 zvtF{cljCyJX1|{NSNosn1&0;IZ%sSx`p(AUq^$Q_)ihx{!6odQ&0_t$E?&u*we)U~ z*V;v@H#bSTH-)T?Y$@$I(sB0C8RbPCD>bIS-~QyWg|sf?fyrwQNlHCq>(E?kxUh#s z-Q~Td(e?T638hu*B7aY~aHijIe$u}p-;U7k89~1*m#Z*!Kib;0zcTKuzEY^1@!>PO z+N}-0uC}?OyZ!IJ4Tl^G%(xU5+?uEVbmi2yZl@>7ykHV<{A$=Fk;wRcgHzztZ&&vH z+?>zaq-3aLpxaZDC8p=gTFz2a(cqcK`TeSqZp_B;S02?f)EDb0ecxgE#PE2dfU2*C z%X{miE&uXrzsTLI|5Frtb&<^D4TcQjnlAHvPVVaU*?ISFd!9_TD|ef5E3;+(%V z%)fu1<-dH^-6G_{N>3S&TRP`%m^BGThCA%L%8-zD{r1{ez1ylKY#SZ>uZVj#ZuN;* zvXRicczEN>x4-{>ef#zDa)00XDu;4*_yuM(EM39Nt*NwWtC(EveP=1(%bJ=h4iPPa z%~!5@Wpau7pFC{CHh0xUulv@rte156o~w27XmQ!4ZzOibK>7RcqDib9p0h{$+-_g@ zHe%zCT`vmGDRUS|qg>C-s}&3VDX@%fF??&vl$+NA`(k1pZM6U6S=3UKAD?K<(oTyW==MSMLQ4Dapx{cuO`>E-(K z>;Ij8`}FhW<>y89_qlgQMI7e;-uUX!!@RxHPTPO+Of)HOyc2j}zDS4tt7r3UCWLCw z|2@Nn!};n`7PXoCXI#HmTk?a!>0g5Q4f)!?np%g18aHayzBEiY8B?&FpELN*ZSBMC zhgBA>wA(7SjrTBzu~+Ac1>IhpygObjm?{u_df%zcIlmi>-5gv>wmArJoUL-mT$?-n z^wKH2w!Z!OG&Os6mf%F+q&ySJ9!0Nm|zzR)>mtzFQcr z>)sp@?RIL`6R~$3C(Bp+DB8_f*_ENWH6wSCs$d^`YxUfv5%U?R?(Tp1&}`YSDM3o@ zD)tw4R@v)Zi*PttHGATfho29goDg|*GW)4;wevqLHb2*|DRepa{Aa;hCX@47w#!u9 zjAYZ#F`S8azj5S`faK?+pW;|^BIFO}Myz?Z;OCdic1t~e{`vIs^J(?{Z+;6#Db1~# z^k>e@l{bq{Ffimye|tN>zUQ&I?3HYsU5{H$HCmy% zE!TMS_U+pZ-PYyJjx%^@z?>>puDhCX@AumKua}v#NeCRkGJA9X8x#F}b~Yp5Vol&PAL`6aHy0E?00_I&G1wIOB6? zDchCiCyv>PUR8Rsg@;YBM^acI@7nK+zc2FdzxHnX!>H3!7EDkLjF=+gnsMsjDwW$p z4F)sRv>gQM*3a;dP`>u%jKb|h=ccVOec;#`Y-V%%wn_YV_0|=e3+!iq6xCCYa?(ql zY5ZmR>{8>vvso5FJ`)YO4KmLhF7HaK^z%-_|1)#1SJ8(ygfwMr$E zZx^zvu1Ma$?|z>BpC3l3E`B2|rg2|?~k z0+&q<_M0~Ie>}5Jg7Ldt*@5;$FYkGEZkxF{{khf671CQ*^U9jloOq$LZx(af{_8An zCSP3W>NRoEswEsNnyzh|#_-^B@!H(mdgssUug!H5Tv&8`?l>c8Nd zEN8^M@8;x>g8L^MFFIZOM- z=eRY4aogF+^{xlMr){12gj@LfskH}#S>7vhomusuQ0C{mV;c(7@zpZ*lxjmy6ie9Q2G(yXl)B68MRItXg*%FW&XHaViHH#tJrttjP!7n9+cGcnJ6 zPeo0!sP**je6g~{Q82afaNF(58I8|9&MWJizSav;u8?ten-!v3uscqer-P$?vmg(b zi^Q&snVgLicsf5`HfZ?1;Ekf!k1W3yz`uM z+uHBHe!TP6y!~`hp`X3|@6zWFp0+foMlSEK+q?Jla$O%*k!cAjZ?Cn@j1<;fnihKf zY~nGFnJL?fzZ}kyIFl@;^Hb;Gdb_ommp&Nm+5f$Z-|(Zq{I`edofbRJHuRj>8IpBz z)y<>V`)~ig{XO}P2uGFTwB+-vik=z^KG;(zuw#Canz5pe)$2s#J3I##HgI*RJv5st znYQ&qkD@K(@|7hIp65iG|8fqPAzk~e>uGlH`epV4+*iGnwA5Z$+<#kp=u%%&a{ukC z*;l_TefQTR`A{cc%8E_vK7;PmQFt)#)}oUotEcvFRG525e%b3Q|AJC~ZFc>!=BB;M zol2b-U24X!=H}&c9CBUZC8|`zBW=5_sdoG9w@(-qIwb%2-VgA#J@jRr&d=4M|6{A` zgE}jdWNordi=~QtT!o{icNmz?c2oOa)TI3U#M<+HrTj;g-UV5Bm=wunJGD(-xH42Q zBCCxlQA?HY`^CqyN>L%%+MEkg?(R?V?A3E!y5!4Z4c8^|wK3&_niDym7#Md2Ij;y^ z(*OAQ`?}xX9`oD(`4)cv{~z)Czt`*ko;|-{wxHSzi6ptl7Bv=KY6m%04quP4w^y)# zxAoU#)2er!#fh9-(zcrh?G8P`lzVgYflCj!thb!?|I=&#Mph%6oR_^fj~weMIP@ZR z8T-;hl8+bkH*qA2=-!!C5Fxqr+b!+Vbju~PcJdnYOPjSRPKXLP)beqPNMe^<=ENXx z?WL>47EW0;{q3gQwby>GznXj7OxHA7bz<|MlWE=w->h5`glprD#;@Hv!DwQ?rlR{6Q2cTJe|dh5AQq-a zoAo4S-gqwWz9hG8X)^n>m2(2lNVqMNNRhf(BHhljB|(vWKHD4_#2iBl-OZ*Kd*( z+UZd~H`6ySO`fs*ehByXkYB~c-nM3i+aG3rd8%@#}k_u7l+b=vl@WgeU} zx@r^@Cf+G!F!%av z;_RDqQo2EsYju&V(0Auk>FMVeb+{DCzc=bV_d(d9*!Mt@#9<{{k3+h73|6k*zW4Pm zD$R-)?{e_c)a7>%)r?X))YjTDP08tfGs^=(<-3ktQ-#dF-G2KweEt37Z;wCL|DIp> z?ez5X=eKGq_uWg3^PYOiCc$p^3;9#~vg04k+&pKwmYrL>ypiRi7g29mPBICYcnPju zn#1TTf2DrvYyX4XDQurt*BNi*KP1^~_+qZz13u;23$e@#rj!+iYcJ)uT`|>lZtvAo zs!CfO1^A4)4UBn`CJ1Cn&7HV(YM58{*P!g+wJHm1s;aVbPv4C3%6-0`L6GtI5hnF_ zya@*{3J0t{Qnrpo*J`6=|H`+I^tKrO%5!IOGUT2+rJd{0&h^W$Se*>Y(tOD{?Pgfk zO>H9|uh?Hx=P-I)m2Ft$dRIAMi$nLSEm0vNQ&i0vYHo18Pd_sAMAF);{5wv#)Y!N( zE}z1(Q{>Sj9v1tUmIgf~x#fG<-|w&K&_5Smkx=pUw7bgji^n$@?z*|RZ`yt<*Wd5* zA|M6L;vfZ9<>{Zv#q}sLhi#(H?d#wH@+ru4q^WH67`lfdNUB4KeCL3>cHfFaS zx}WaYFdROUUecFoQ>(w_7|#YZkv;cTt@`%3!BunVv?62g-05>>y_`2kICaT7{~ODv zPk%oBxola_T%TR1c^s0qY3`V5IPLbD_DLO)XB3UNj&QMDuZ~`F!}vjW|Nnn0ZvXoF zYmRqq=1zM9vlBWjeFgl@mAfM1wY(-P+?lHsb>){w=0Z_cqlo7n>o2i|7BM{PImD_I z{3n+y#?@!)ZUcj_F=<}U1hs@TG#Ms@62Ubq=K`NNqGJ3ZL_(RlnJw~CEql-i1T5gz7_ye8CEsIjm zu{_cV@4oOR_nlJq^i%1l7oO7(;V#(r(nD~1e{hl7rO5xwCO9oAm-m`Di$}r!e3L*@ zkE6~>rG_IOds!#G*>g_i;0aehwnGo@y7#}>tlxh#P3+ovjSZcBL2VujGXmTtmx?iX z+hpuw`}SCXt9zEw)F+!iUbM}L_~enl{d)ZW@893o{k}W@|I_*(um69zZvXq}c~RXQ zfsC!5ch9_hw&<7PhQlc?=kx2|i$6E4)n6ybYP_3U{c^Ne(iE**TV`$kbNij(G$D?K zGx|BYIGpYnxX>j|w(MKl1hav?>KNe)!6ve5>UYDHt zqCv3kg6y1C`YPVJOV8+Jsji=-sed47l~?5Kbjz>Y3_oI= zYLr$QP2Mxp{#^E$P9jt?jwEb;|3v(^{&^!xPP&k8I1849e2Hx!1a? zKbQHYdwEJ{*4HCPRT`ePOD!%p=eC~g;NEi6l7ny66qUmU2F-N>OZ??m2uzCNF{?^< zxx8rU0cN?Ws)ux)lx>|Ma|C!o$b-52Wxt#FlnwC;(=RS3^cRAB~ zNdf=q4Wi#t|H$*}3vw@e+O*`eXG3RO+wa7?F`r9!@dkL-{QTD*FSqxq&W6;5`O~si zM&`vw6u5YapS|g%XKQcW*R14|$|u+n9IH4pYC_3p@7u@fuH3rUxBZ%w&gJbkjYpn; z5fGiYD1UvvtKRg}sRcE^zWn+5xm(0E!Q%Lf6D1-g-*4~xfA#*K-kpp)?&fU`W!oNA z-hcb+tjOzMf4#G_(Xn{?NH#5-$NotDoP^RIHTbK_`NfDgL zx#ZZEB#l*k3OY$!R_*_Dbh~ns(O1VqhugdyWQ0}*IX1I3iD*V`y07#ydGdAF{)mVN zXR0(#{`~OaM2)6|6Vs#5%a$=(x@t3SzREM(nBixWRr%=>amTW{i4%;a4{#o4Vc0QK zr|;Cy-2rs}^;%RLyW!30Y_*tUPJ!HOJYxQLl}kuXm|wdR_3n<#tzV z>2CFg=eC!WZd#Y8P0V)i6HXTuI?S@}3*YpTxqO`0k1*NtH7rRn&78~3BS9V?9HT9N@Nys9xQ;*WlylGibaCJ@a=KL^MBd(I@j64^Xvse7* z*v#&&Nn18AU)A(USJq{wF5wk7eS^B@ggoid*7Yqnxuz(|SpI3r?KzqUeO^5e?D;Cc z&?1!Op-wdG1f4fFGEW`PCBznAuk!HTZ>L(LRAlUMe$~3&lOOS2-F%9tfl2bPoM5ZP zYVUHVBQ*x;_s)oDd=3#RaaY*&n~S-4#r5*d7sEG&_@DEgoH8@=gHps?lPz~nr@vH9 z6;f1ra@qX8O}(|L#97!{fPXc+<$hPMU$k`V#a^eLo1tBIj-Tvgy;dcoeCVNoXurm) z&tWN&M@1Q>AHV(T>pEXg+@Bfum4E)+X}R39w>C2;_Ws|pV(F??+Ob<_N3w87+qUZL&HXxi`uX$c&u{;$#>#&8 zZb(PN_k)Ia)=c^I>1FEfm<!E8B#+Ia8<9J0ALf*?MlW zUH0ph#S=ZnC#V_aIZ9vs`Z8$VyjdLEycaH$POsSZn1Aw&H2=%bBSbsri-ziI=KV5w zwfTi*`vc{DFEb}RNxNrkdc@Xm)`EPOp2Sws)$?`a1H9(`K34Sc*ve-`|Id7$wJ=%d z#A}nfh_5X*GnN_On9JJu_ywbs49L1PiCf ztXj2NJfS0%g~3oE&0@)iMkm3#;~&i3e|UZB>^H8F;$UEM*6CfkYxlI6cY7b^?fT$& z)#g!Jm_Bn!XODMT*|k{ZJ7=%-$=Ozkh#y+>>{`mr44YZ8ayJYT(oA}J?a+xf*&GB-w$1|6MMK^r6a4*|fY1g-RwRJM< z$2rl?ciZgu+5bNqZ@aI);`>ehx-T!E+wZcx^J14}b-bVEl~XI~R&G3UhjVL`-f!ji z@7?DwdTBaCKJmPSmejxhXZD}BfBx(1Vuz#&lT)s53D{=b*txQm_jBH|g5a%p zn~L(Li6qQUzsc*k=B6A&gXe_W?v2Szd6Oe1$m~2+WHGO3&g?Dc&K#6kI@x=s*4fs1 z-aSeI!l#WYnFD<47(5myTsmm=&F}nzr1_tn><)iXpLVahbK0ueD&Y}M^M6gdbE$KZ zMDZW@A5Z*};!UU6&2*_=D&_M~Mn@FJ6Dj{H1TYo>*?bl>Tzc!{D%~-_P5&KXJ`C^5(b30+ES7^re++ zR&fPbiB5{;WpUam5w~AZugxmST)!S!&DiX+iW_IjC&E;06mwVtU zx$tYjr%IL?4^o!d+?;cSVOjFMPn$9(cC;mY?+}=@in)FI>)ZMa)gO!P!_|xbK9YTW zktK5XrPWfboJV%>NZ-Bw>}x*%DbMoHy>4pWPk+vSe^fy1V8a>bv&v3~+izNJkU8@G zh2>-CtiKK2k4)o(lU%&^wLG6_)_Ax@{O8SV*TXK{2X#2iHygGEuRfaf?#;VK{_$$doM6H&HSv1vF`F^0bs(-|qI;W{qSbUu( z&J^CTYL#TGYfnpz>A4A?<`&JBnqwTbNay0_oXmNZMjcsQzvk_alW8)#e9pR~A$qU- zy2orSS)p9FuTAALV-?Dcd6r_NF-sX(!IRq44aQ z_4YIBRquE1vk*4gZsehL*+OmI6Pp7ehozpK_L-h~%lYcR?oSrlDeMzozWLhC^~s){ z99^aat-BQ9?c6SSe~w>#-A`3c?X1$Y4d*uNhN`VnRur~SvzByu**I$CpX=kB_OIUgWq7o@zPht||F@hsx0DP1EB;Ks{$Ie$Un-N4&r3BxiQS#RQ(xE<-ox>kDshV_axvaHDC*)e~1Y1YG_6bI#}2dvZ<*Eq^k(=k;PV=QrE04K7#saqwU7O*NU{Z~u#~<9A}Xe)28b`DH&|{Y@`groiH~WPV=WyZ7(& z{dyA~&eL-_+?_w!S^SY}RQ}q{2Aj>_Sk3g9I5XwIy4*Xf1yv5#zX^HIcYq^eNp%RP z!u1I|TjK-fX0z_SBJ^%%{N1@uJB$y0nH#$6&Ory39**g=F61o~n6YwadQp6vZ9^2} z{+X@}#zkQ*cXm(t#@r^j;muR6PQ{ByZ(OlG{wht>D7;EL^yBwM(7P9x2{= z$3CR6rX)7MMo-VcXxFnZ*WFwSvd%utd)!!8x8T42-hIM)0)g9>gcv^#xH3K1pmLk7 zr}O3*!>bh&El!qe>FE55DKPr~;U2q#4==Z>y6@GNW0nsVPcJpLytpIDah0*AY`12# zuI%fnrEUrg+V}e26#ZHrq`P~`j+nfOqP0u5G=JO1!(bw)z?}H(<(Juo8V#Dx&rT^# zzUgJ8o@O3@OEhiQ?4*Mi7O^EgYuWmEUC|+a#{|X|KUbd0n_t^{zR6f{UDnj zT5GchFP{{sp8h;!(Nmpo5ldKJblvbeX82R^O{JCE*{Md2f8;}3MO3Co8Klksx`#<& z*29uT4zr^5W*2vK9C{bOr{d?UtJ9b3e=U5m>ZYXly*noH%;{N1&rdTdD)H>wyZ7(Q z^L1jD7Wzs8N3KK_M`S3xT%Q!-sdDvy8izq=hp6FU$zYAsD}x0DABL5$e74sPn$cx-=0VW0A; zy_SXl+Bjm0=U-KEo@p+!H}~__GX^s+w<$eeFB27QW&gu+qOt!YyJx3MSZp#EB+Zxc zdzYN^*>cghUnvusIu_r#_$-?L`>YSIpC$7Ii|V|SQw)huu&aqZ-}~{$7lUgbUtRXU z8NGtfVUyT0w#9{U*FUdXwR6rVzFpPlw%)i_D!qD@*O{5N8^t$0ciZ`^`SkIB-a8LG z4_x4rrBc~maDThxsrT*E4j0wemzURTr|_6qwm9B(YwXKdYd&%5SLfHUQrwZB*F+z? zn$dA!NhT+^=jto7vs?vyXD4x4u$rHbj^+J-W=a@?;bi6OM+&E}=3_c=_t*svr%Q)1!&zze%+vC--N2|UGUGRBu z$NAgL&>4~*4NPZ0Tb#}-N_}=O`YE$y|WK6-5NdwTr7`rpr9 z{#mmBKYKl>^}3Z!WdmR!N%lSJ)yo zzpida7{BK(cH_eLnrr78ny<=k)R5)YJ=BnSv%zNdgtH6s4qs)OB0Q%dWF6N=hJ*7y zi*Yt=IHTlXn=|pH>T^FCnMk_=vBPt;;}34SmT@UY-heT5LAS{Zjqo*1yc{RKxZZG9 zC}S&pK6&GM2d1}E_pH|5?Xbv+VT1Z-R`c{9YdvJAT$8?@^_t<%@+bD~g3n*EDcR&Y zako6nG*@(}zzOqkP+1#JXgf1!DUKW!Ve`ju<|NHaI z20rU`6qfzpykhmt)m1@^?=Dtb%ZR0&N|`saJh4~6ny2Hz1d%2KqZa~Am&((sT%IRX za{kzm5OMY2>XQq7d=K01DV}Y#WJc?6&J$e%j7)}qJ3ig`bn|(~Uu!!DuB-VawK2B4 z)m}ce3HPPmG-DHZsunI1%Qe>a!;^V`SP~;~ln6_=!Iy1A& z&MeB+{5r}`eK(wrY|G{M@9*#T-)_GAp_$GcRf%=CPQ+Y2-m&oU$2HGO=bUf8vHQrj z-rT#_Lg$-tdU;E7D@(-w-1w$kEPU62>;Mnp*7pncCb=ctm#En)`D%B^w0r!=7kAj$ z*{$R=_jU}bU|DE7$M5a8XBVouKhJ3reRJr}lGN9cQC%hz_130yR;*MrJkQv-^W$XJ zM5c>>KVGq9H(I)TeQxsMD-T$dcs8mX^JrT8>POz?-4Yh|^UAYUUOHA}BUmn-{N`un zA+}lG6_=*)BwXHHxv^x1JBRUQ5#cW?I!c$qH98#DJe#%6v@&7Gv(*`g)}B;(Z1cR{ z&820=_LQd0+={;~)BJUXS1eVOnAkp3lF_ovE}(ML6sC#gbF*D~44F>IOS}`|jUj!c|@VQw&e4n23 zb-^3cU!uPh$U+C8;FGUtS1am>3X zlNZdhR5IS-7JVlC(TPW;F5ix9I>20@#JW>i#dxOYA3=o)Uw&(Z=`pL81qy89e~@%e z#?bAo-s){yO6K$9J{)}%P`M+$(kMN#en*4G?E24=iYhft-KQs3YsR`YO#H{s>9M+V z`KDba$q5&Zm|uOf@${nSp9|Mp6&dRJO%_^t%cNsxiIa(RGxs}p+fcQcK5E}iT@Y1R ze%9SuPv5@!@5%J__v`>}a#xa)e>pzO-O}Z|>@TCH4MFVrp)(2JVGPm4l*;o1hpRsY7+w=k> z3&%+d-Mg+%TI9ZK`?H!gMas@C{H<1sGn6xVPH*FxSi4j(SfT2DB42{+?Z*-E_ho!e z9G+cydU0k|T?;F>e(p!9dYQu|%2BtN9x~dmJZf+)f`{M!ch#Qii2arOtD^Jz@~n=n zdj9dlQ|YjD(=yhbEtl<>nUzFlPCZt`Rp%=Eq)YSDPNO5-kN#b2pF7=kPM-h#x?g*r zZus*x{{PuZ>*aGd3*5OV9k=hr{ohZX{d>0|_xUyJ?RgtFwmfmDV0f~ZbE7ePsaNiT zBXQY$d=U%>Ti!KTPfLCH^a}s!Ldy`X)Wxq~S=rp3^2u`Udpm0bE!=~WoRB;E-fdfCMe_0J|Sko%;zh9syKSMq&F8!^>Utm_j6X^wAv!E z;^PxM_P#JtHRv!FbmtQTy>k$lg%C&2(pRr2)IkS1SA)^8MHJB3hGuU9uV3p zJVo!62Akl{k`I@RcRPfx`4FrPxkjdJzo9(|F>@W zzpD?cyW94c#jG%0ukfDb^p;r)yN`U~l8Li>)DZkL`HE)T>4Ot5Piu*ks(m8*!GGUA zW<3MF14oTTI~M%xNnZBG`ta`fqLpt8Pw)F?W@(?KbW%(}Bz?jcucBm4z7;J(458^^ zi9a=DnHmxvdc0*?8lt@|_sT#ycgNy+@~1UMbkFY2%)_BTBn*%cb?d1KvNI z^;*qO+?P#AdFj$9LHj8-w^Me$Ts%AE%+BQFDI103r_`Q$x}@V|fk5&r?(~$M&n`Xl zUM*@Kz9@R<;;Xx7#+<&AvV6)urKZRoZ(Zk;`)!UT6ZiM~y2Z}{-xaZ$$hn*WdfRoLvU{;|yawRiZ78$~bD zw_JNsQBzSNzxk1}Qa^wH-tXf2acf@x`gFAW|J(b2cmIEG|L6Gs*Z+Um=l3svyh&hk zrAPM5Yf>+*r=0Z($=7`!eb&MAX@cn<_2k$Drc&>l$LCGB@Gozj{-M;qoPZfew|cFb z_w4xnHvat&qW3*}{@_?gZA7lik&x%AtEX?hkrUWA|Mz75{oA)Jz5c>L{F%RE-!AYNgE_Y4qURbnUp=V#l=U`_le`AhWr)3@|FcI`R&8|?N7qK9u9-e?lU5* zIaFHaHwfT&2+e&_6}P#( z#nmGvCpBE;_urKdB5VB(pPKwX)7^0R;fhtSw^i=le#MAI&`*8W{{4IR?wxwf;QTx* z#hFttcNu4$atxWH;jm=Y6Q&83IcbOQI3`9O6ilnEsq(sUb@ms%w*?Q5wKTu9SpQr? z`i|Or9-rM$zi>TlX?0rL^I3~oB_Q5QGo*ZVoMx)NI`{Ul8){ve-^FrQbY<+-b z^&DJ6E}S!;B>Hg9xtN2KHMtX`!fr7xP<3Ww+3>O=>iYC{IhWVlY;A0<_LOtV9zT5O z(B7~6zTEr$vP4L5*1aDJ+d5*dJ`~I{bDMEHAo%QbqpC|XTYV?3jJ;lZ+f1zNd+F5= zfB904;wPH-b26Q(&1~DLb{&FC)d?Mxd+CLF%oWz()2fdM67qJ6t0!^s8PtbMk0VOGsmwV5UO1Lq@`m z-h!)VlNS{JU%mg=$NPWp`rG}!c>muu`QG}^`TviXS>(P>UM#%B;(8L}sbGQ0j6YgG z3QcETdy1(~WahI8zv}a1W?U~fv{t$KKtt^EQNfenu0J@%Z9C_GHLWKnC#wCN;$nMVhMU2`aOtj{W}&%3`kV(>xU8yFQFT@Ced&=p zLw(|+E2kwVDH^giKe6=4G`dlmaDEb#=zn&#E~)o*Z{@b!@5#5HynaJGtN*G+)q$xi zrpu}B>vo7_pCZbtRI}{d@6@!)Jm2-}PAuz>tm<;=*j&f%kgdKm^O{Q8BH5qoHg7Q~ z-p4YduU03XtxrTNv8W=%^^>NX+QYvh$5?n)#6Qa{cHi<_UaV_ww-%S8VWHguf4je5 zUcayXcJ}=Xb0z5oCB{@=I# z^&kG8f1m%p?ojW_cr7AbLJ!bVXpbS z2hP`hyWGCqU1`!al^ci6z8)6TkKbGK_vGu#FDJNKD6wB!R4Sy%!g6Vsqu|EeJhNjn z4)QSu^_Q-wY*3j|WiP|e9?G06ch1K<|M=sDrg6U>7FbRA@SDBgOO~<4b;qvBt=r#p z8yTA#o2pD%zj^MBjP1e(!R_XGp(_Oac5^)W5ad5~-t5Lp%`3P2xC?Jyk(Cl`DV)Bx zDc#Al^q0Z&4Q5OaP6oQZvO8nCgj2Wujj^$RoKIBt$}O*THJMYS&h#=(d(X|W&mv9T z{eX|l!Rdbw-qh}Xrn^|(xI8N*U^Bxm`IJom+q?2!AAbD!@=wny`?-GhfBt=6$}|7A zoqI#t-W{C|DKl#D)DWPAI$ z%x|Bn&+lJY|D8Yn&*RHoXtylZ>;uq4@%yXmr9+RVG|*QI|=N{D;= zer93((JLJv8s6J}*uU(x^+P7cl;A2QM=nnOEwB1cT;Al_o#|$_{)}<+sjI9leH!*E zTx{IkK6)DuBt~il-+gA&GedR($EQ0hOOH2o+^ON&Y8iF>jL$?>mU$jZ(<>Mq8MbVg zQx;k5>LDX7^n!F-6Q`GmCqI(J7Bf zNv~XA*M;6c^V#&n#F8gB<^E*c{qt)6+1ExF%APl+?R&hrVPbv?->I8Zmsm&j@&_oK zE#G%}n<)1(4S|rj03VZM72m(f=KCA{`uq2<<1G#wTieiMMIQwYZ4qraEY0EaY~iZ7 zV75vms%qC>%X@dXJvQ2uq?Y4+e{ZGrHeSKSJ)5#ty;TX$=1solqsKp!YciX! z_CasAZx6o~UJ1CI8y$MNgKyQX--cJ1cI@0+`SsV;w|99B+tw}3>7974Vdl!KVrN#> zSDubOb?^C+607yMFYj8pb4zQ4pZSerA20B!=ytS8a-5A)aQSgz`qO7623r&DOddPB zEm!E0aAptvUe?R3DZ->wAf)(|Lz1sg!TXbdkYnQ2k~P!1<|#}xk$TEuF70Yr^+IBm zn@f9ge(t-N1}5)#ji$}6w%;t?DM`l6^vHNQXH8a>tii-BGWL^~m0UeKDY9jQ$GLq@ zs{QaK|~LzmMgs%ltkG|L5QP-`}_2bN+6*jcoj$ijS`* zUtb@;=Z>+(8D~qSGgb}RevWalwE)+oC2rry>G@z{T)=eaOj~Q@rN^(IK5LJBw&CLJ z8!vBEyU%*Kd-W@c^6R)zlO> zu($@%KnH^e>`Mg36WD?)`NcK0W#?G&bpCq^H@TJ3SOqS9CQQ3!L zqr5}4XYjJD|1@Ry4D<3TEBh}`&)F&*f4ngA_LM*8|9!Eq{IUP1{J-V$|Bme!m?gda z#NrvpM63m#$i9npJiK$W{{J=4tkk;RI6mt)|7HL2m)A-kEecp)%qxBcG^#mR+T$d(geEXcE<>dq(SGP}V zj070xb}jXvVD{0g?RZDS>|Zh4p15dS%igbg^GiWt8e7B59hULNt1K(!Y_9Lk`Mr0g z@RYr5T@$8D*!ZdkEq!h(*XX%PWzy{=D-+vvIX(SNm-O9v*ZqAk>+5|JA@22CPCh@g zuvWryY2I|L-e;Zu%;EjTc3HQk+cEm^nmm_gI5+38Bj=R-7U}kARZbrxS;m@6`z75! zsXghAn}6-{rPAA0PySt9{r>+4_WI8SVfUAG8_ZsvXEFc0W!%d>eFExnN=n|A$vjNG zhV$;(8-4iq_xIAR-{0S3EcyQE-xG7QD`ym*x@o2!`qPW`CYk%FZVZ|-#+>OysiT~j3(?- zQm;Sx^8gA8_SIMX|8Qchr*WELKg0I7H5Pi_?*;dLX?amm@#S%%r40W;pWdBU zHD|E3M((@5FmH1InWgV;#_9*QtPj6+_Jhsb+TzfRGe5)`muK$W{zXhKk8L*JdO4pf zEvjdmSsle3&gOY>FTU9@bzx!iv$s>F7*8E?QsUv{D>7&640wOVdefFGQImL0Cw9uD zoH^*!vdaD$ho}ORo5~#x#^8zyzbA@bysMYJfAB%VVDs_Mmw&gnm*&*I)PMgj@BO=5 zm->%CzI*rXrK(59^Uv$=e&(u?{<7)d9k%8GAroWQFDZvVP00?_xOOK*lu_`c__e6u z(CrWNu4TMTxpwF8vng%&qB8p|R~(;u%4X-uKMwnrOw>DQb|-k{j8dUAp+_1A4Roq) z)aG+2@m*oCQz{Y{V4pdu$wWbLPC-~l>q+Ur{L>FNY*D)uvHw5E|Czb-@59H3pU?mQqGDGp zpSlivLxP>D?eDPCH**|n@2r1iIeqcw7yfwy&bQCD)$v|0Kf>x}Hh(IQ#)->@1#Tf~ zVh{5J&HbztlvK5MC+Pi8Q|j9wazc=y_zjD9h(43=pSfI3QFU%yd0Nxj50Y1k|421( z78oW9h2M_4do3l%uy*RV%(S1!?w&oY%WKl`a`N0f@!vN+H@n!~HWCm`Pv0KqlXt$> zuWUctgq_@${>v>-@Wy<0HQ3#z{(Q4|M43p3>~}+T)!?T^^O`@X$@qIomNkm4+@3s- zZF!{r&6BJ4mR{lJe14gyAev96X3yjQ&&uncpPpa)^T%0hp5Xg7JreJxT~rsyx)pPb zLureeV4W$0Q7WE^&y2&rD#?G!6(l`?O>&HblopbLt74H-MYX5s$|Goucdh5>p|M~HTu-J8(^`4y zM?zBO2EiNA;mi!rbduhbJn?H?Ucs~ZHP4T-9ra5$pP83q{5?Xv(ZtYL;LKE3eY?t^ zkG{r6M@XHCjhd8K{2|$DU1i_5C2|%Y~{vYtx;I9#_`DP zEydP)r#F4Mk?ORr%4*rF&Kbh~5tf@;c8ZH0(_~(CSWj}owN=6gBcJt&`|nm*XE-&D z%_Yif%Osv-Wp$?{X2hO1s+Bn`>yTV%*1U|roQ^HfMxSZ9Lc26oIiq+!jfGyif|jy<%hn4DPG`&({rko!rEeB{<%)?eJnb_MhX`Jbn6^~V%3MKeVnd8@ ziQ8Y+rsm%0hjx7A1~WI3=+Aweo69Yhg3Dj?m(f; z{qtV$zQFoSFr?Ndq^>B=_%ShV_j4xsAMaB3+J{;TCN4{p zGuU-yuI3`2J(s@rdVjq5(r6zqE4#kBIlDyl*|Pe^k8j?rIq~&R!aSq;7{9Bs7R%QD z{Nu`yUfK1`JfVt9E%}M-kHRPm)op9ecK;D74ldq$C0arH$7UvL^(j}H7I7%paBZ~o z?>^1L{;WW~Kj19m{=ROvo+SOm@TDun^0x5^FLgfEDxt;UedX5XqtnV$kDjQ~Qcuu61nsadi25`~MgD|NVL>D0oBQ;oj{V zRjUfpT2h(aw=CVN*bxyv=lbW@;p_A5Dr;?I>OLJ6PhPW1s-RhSt@(twUh_4*w*R+= zhko+&WO^a{UH$WJGUSQAl$>7u``z23n%z3x9Ws8) zAD?|$V6kOsv*q8Los%AN&+n;FsLC&#%6#_vgr1at&*prd=;KmrV!Sg;>-6#oo#_j< zm(|zTSC_9|uuv*_$(N~z6Tba;_jgy`cm24}m%_rCg(v1pJ-;e{{_)2gE2A|b&yRo-(GgR%xdl(AMam0`o67MF}gcd7g^|epR;`%ICkR?bR`^=nb)CKPsaN)17fu%@p=ZZJEhaITig|r-Ke3*>oW=8P zLfWBqFW0NEO`Y}J*!26;3Y+=YWBOLDdUpKs$G5k)$JhS-diXJO$Gi7&HQ!FEAAejJ zIqmXG7O$yg0tTX&8MpUrm$Q7+@U3d%?^KuBI7?OF6^`=;`N12=nEIL|H@c!&#-py8PVmfCE9Lf;!e}C`K)A|2T{(Sk8 z|No1A`=4JvKl95ClubDG@VIZ(<2=LO)b&bFuf`p7Y47=vGa8k1y( zm$#)pD4f6V!LakZ=aZAKj16}h78oisEVZ->l})&`^?=>GU$-Uu?p!hPpJTFUdClF+ z{7PEC8748#D0=?q?4LX5E$x~0U!UX<$(`=asL--}k7^LR?U^fCW}JZ@E-8!eKKZ?D z%7Sx8bh={Iid?t;bux9AyUBO#^U5$kHkZzw8C9v`&XOziXDja3X%bxUE%9BF>r}>- zN7VY3lx;SsomeNh>ZOH}cI{^wce8gZ+btz6b}-I3d%`0nLiw4d1v~f0{(ndF|Gnv+ zzvu7G@H;=AeM^}=Z@$ObnM+I!TW%&~&6O6kS)`vU{jH!bXYJknRf@iT=F83V@5%YK z*V$M+d}S7^-(|3Q=IekXTN36TYPFePmf_?g7-nTyQR?x&G*ZAT`0VFnA*~bCn)Y9? z4=Kp{_xH^$YsNE`F}tBeauu&vyZ6bweB$ogyE#@wUUFivY2T1^FM!MD{!zo_oQmh) z_kYegFDiLvj}E(7WM6xM{OxIJ`L`=`Z~u7pdcE1*TZM*)Rw=*WVA^@IpuYZ|+`OEK z*=N75=2s1$;$ZN%-01k)+kHYzahEsl|FX#IQ0Depm1S!_U)}vYgT3nKuV+`6e>X30 zKd>x|^=q2*kDj~L>Gm^LUQvovNVqpceB$xa>d)`~R>rnUcYE1d2br!AR=(s|9XV}j z=ZA&cLvKCk?fh{;sYEt=hyI;|CqFcIq|7?isuj3oXZ(_b=|NqSgOwJQ?Du}oR^-8T z=ImXq+9h>`97YbEe6^V?jo5jV9b67FGCk)zT_=)dJSE`7p*vCU=X#tvHl;O7h?8;R ziDMIEwNpHzvlC|k1t>DS=)a2 z?CI<4R>v3s|z44>t@OI#~{NGO*CylnC@?LTMb5V@mh=7xnAcYV1xBSTu5F;8Ij z>|FqC)^+?kr5w=Xm0 zS0}&J*sim;T(dMxs`sjW&5DzAL`^eOu0*deew{R7|Jtm+hXov-%dhdbx6YhhkT0<9 zVP5kcj-`y9*Hi*`cqmT@*iew%wEN|aGXX1h?(&TCe(U7(ijk+smszaZS@d!sUtp|` zl-%>rKlT6Lx98k$|LgkyZU~3H#Mg|JH)ki=o-N}&lec(p*9PbN z9-c`l?~ff-ds%hx&nAvfh1U(Z`rdd(Zepnx-~MKz&bs)k=YM|;uU~iVld1KL{}-54 zrz8cdN9@q_vE3l}@a^v9hc6XBbIC8VlFQ4__cuT8pt6{Oe^U3AO+DR0JbrmbN@d0U zCfytJs}EYWtrR?Xhi`3QcGrz-rmctlpMN&bzn5{O$m(Qa;V}c%XJUIAUfSf`Wl2!# zHQ0XE%vbaU-wxyanS6V%oBzML`A4h2KGV~A6K2eLka<|Tsd9uTxS)mPU18=SjyJ8bea*vBL+D+`Fnfny&v3@xSb(%=AoG2mEBuRo?JFC zO21V4`IterZ{Km|Y4c98XQs}celq#%;w$SsSEPtd|9Eh!Uvlhq!R%9msm7RhUg_Q*j-S-4Yx&~YFKL56I;*zyn-F(hW+`RIP?Ul`)R?mA_&usR3 zG|@=RATly$sf3nf)T6owZv?lQOy^y;>HDWFv7`grb8T$w?B`Q}7}g{&RX%H={Y&nUf>FmKNd4i;Rv zp{6#^P$zbmr|--ig`qA7ip}QlWR;m{`kKLIiD$5BLsZzo>27O1&o5&tz2A2HnN5+| z*PNQ~3w1W7#9OlFw5*%G?x%N#-INx?-j2grF+I;qbOa{OoG4(vfn}nw#qCQ1Pak_L z-QM=^=lp-meUI0FU;qF2_4&2^e-vJ7+>~l=U%4S>(%p22505RpX6(6Cf7SNT=}VkG zMH&J#I`}2iHMRLxzU_X#LE-hJkQMUu}wmWKl!cqnmoR+y^B+4+~W5-aK=KY2sbE;^pD& zZOytC&tA_djV`#hWM|x;e{P@l%yO?^66v%pBYuY70ed~kXRn`riI{I1e}6x-;Kt({ zN@ki~{TqFG7c<{{sl_r0y*eHKeMH7A5W|6a~M@!E{b-0`!%Jl@pD>vD(1Mb3oLJ9eHs^8rf(tA>=I zolnBvS^BJ8aW=|b_(Q_7{o$SLtS8iyK5)K!HtDSXL7g<$c_|fou?LQ1otI~={cwNd z{#noOZ%SX&a{9rFJ7P~2oUh;i{P}T+&&`K?+UxgywbXdS=08oVdU=zy%2U3p;T!S} z^YC$esfoM4ue!XvoLOn&-5%XW=fAG+T;4p1`EGb;?##`1VkXR;cXx7#!YebSKNVJA zA7{!oi+frYY};#VV^j0_+uAK<|9?F#vWhC3d4j3fKL7pxKUK9ACBi;*{m#Mb-5@+kD$OS}s~FU*DDT^4X=8 z^O|^tGFuj8r55o{y4RT+Ec@z^h}D%v-Q6u4cC#mD?(wiXm}Wln)dqovzV7VX+pZ=@ zPivjos@~jtYD&?+3h{4i)K<+56=GYC!1D``5-z?3KD zw#qp)laF(<+7$sNgW1;H4t$(k924@kW_Bj!F*Ncnjp6H0(0*s4)WRxS{OPWB;}nGt zotFg!D__0L$>Qu^{`v6Z%a?!dnf3ea-M8xV>#8hdPoKZEmg8Th)r_D+MXQ)L7Noaq zn7MRn*n8WlQy(UtTb9ErVAz&-+pLYP>DUL3Gh93~qOwgUyFOd<@+r69LB1I)r=FV` z@hWz9W|H#!FuR8S&pWr~y>q$4fBKTO;oLi=D`vLl?c5dXv_|#v@?{$j*tTWu5Il7D zY{bGj#;mrYd{-4J%BxwpJ)iFjc<(2%im!Xq4>yZIEk8|3mqk|+xCM9iF5H%MWle{} zp-4p~F~)8wfr)M|96{XNDU%!uTvqV$^QvocyvQ_@Kk%?b3Y3-qcJBJS+Wy~T`G4o$ zFS|NrH>daXvb&-Nhws&?9J#vx`-K_3EB=d?w|}|EDf8lt&EDd41kdT-sCrE$J7zp~Fbw|vUxl6tpc>ACfl zAC_!uQce9O99KVkbEM#ISIuiDL-jv!-4ju7C^)mw?xdpFm8mkvQpMhJczYKF&wiS- zYAI`;@2(9E24A+x|9i0iZ*%+leZSiGSJoF-zkX$P?D65pKmU|O@U^FIG(5v29@W&b zLVvGk@l~6nS7WP$^PJm%w!d^V^pEMURoWBN{8eS0jN_>*Q!GCT7?wQ?I4vFc-I^m( z@LR$C^us=H%=4Fqx>@E#c?R+snLITUJu5d{dDJ!M$qNz2q;9RRZY@5| z_ccCVX?IODzn(i|mcjOGZ0&uCBC$to=gm9!UjE+x%HPX$|9)LQ-{ZZ%)uRg!);$L` zh}G-=^Yg#I_j22|f~$f|YUk$E{nD{zuKy_bT)buG=6{P;UlaLu;pI=2nHP7<__yD_ zJ^TIN4^JOnIpdyR6Crho|8x-V&!w7Y{C4O(c=EqU)~#tl%Ke>N=ctQ|CG$-4NIP>< zStgHZi%eVEgP$^=p2*!^w(XP9_U+q!k6cwc^{u_Kq3z?s*tpXsc>D zz+d#nw?ismXQ`Ek`hoE8i`-TU#k)LtIlHa$%%&~ZCNqdK7C&MzU_E&F>XoKVjDnl9 zgjtMFH*Q|(oU5~?pH(U4w!Cj+l1s|8C|z@fhP$gLEM2woKwU-5cHipwxO;c+-MJ^1 zpU1I9hr9F1byW^UrAaw5*IrH#a1ogJrtYNIl}#m?lWdx1S7>MJGr0>~OpKi7vu<1N z>BGiNQSbMb=iHXts?iZ~=d!{zqiqJ}XX2xdD@C1Qoog&}#b)m*&9hRoBWCn_h_2Y_ zDR<0eQmf2_XWA-d3DMg(u1$RQ#*2lY!}MjziF;C~E=A?LXZ1!iZwL`Xf_{aVjITrH7tyQSpnwa*Eqm9z0yPIO$*9#Tt`(fhI zX6@ZF=gKx{yU*Jr-+7nOhk4#iRTqYZFP*z*oQV5o>fqq=^k?!7Gc%=EdxbZyoD~`9 z*piy*a!7&8Lu{jz)yZ`GAAj2Se~yl?`TBHssqL4%zI|J)tv6cEyCy9Z>OJj#qyPJN zof)y)8)T<9dr7Zy&vc%ut6g${TH}V zF0}XY7tdQ8@6TKAtM-4=fp-Drao2b4-|J&j|0^Z^Ri&HQ3C>3@ZYMqlNmYQ;(&)_Z$v zG}kuXWS*08Yz~tS6ZiFs8XJ2XyE}L8|2TB|5MzAR@c^lRAHG`GTJ-1s{`2|$ZO46; zRoCCe1h+{yf{eVaxK*ZaQ)i z+ut6TE0BDbqs~Gm#d2?b4a1ol*~dCg2ZAm)EH!_(*7Q^&>t4_7GixrFhMv`IT2yi- z#@%UCq2i@Wjte^(@;0&>3g+Ivd4Arjz4xrICnsmIGfw<1k$n4F$BnkypHIWBjxC>G zTlN3Z(W3e1nkJRTC#~pnwc5D7^`K49<V3S@|H%gqd8JFy>Qf3%`S|vB z%<7O->WJKBa$%0_tI5G9W*DqFDb)JIHg#43Z}(E&ODQ?bGDix&m*&j4I=jF;IQZ?} z`!ct;&1JQa37Yiq=cI|rQL&28!qRRlU0KR``UYEZ{@&R)lV4cQn8x;K;jfao)Z)l# z_xN2FrOBx%**^cvaD?aCisF9mE+sQ_<(S_G|NcL-*L$+c$%$&;R<4@4(>*24cGv3o z44bmF>CW#0rp3rrM4aNPe9&ml#sBB1NRV5~&O?$#>1nAAjL#SsFqV{thwf84bk`@e zGQhb1#H(XW&P+-LnJJ>19zD!^m-g-D^7(bEydIWt97+h(f~^GzR?}Z;9q1o?@trZR zasT!im6yZ9UG+ZO6i+H$`#RIqn6F;YV)i8A<>x}IS4bWSKGpd;uwv`0{Xb^^e|~!Y z-hDsk&$s>m+TO4>11%dGCmGgQ*iOsm==KovbIH7rM!uJpHUU)0_5 zmn@8QVRJMo*c4g3MKy*qL`CJ?-FfY;u0n>4q7&D5a(ObJ@y~7i?LNQu*Uj(yzi+Pp zbG$TnsmhhIRj*y{c4!JV-%avrFS*nk<7D8XlOrHz+&;Oo`x#gCmz*qxX)co_7L=~N z_ez7UM2%^4uAgD8!=eKdCUvN9+4AZ^$D_#Cs$Al#Dt7bk9ylhVIeU5VrTIyA_v>o&%-olrcAs;8@NuJG!30a541>cj4!*qR%IjE{ zcP=l1ZN`zj84BSe|OrP{lA;v@BQ(@S@-0fHCnHB+1T0KySuftQER2ul?7Z^ zeSf}`n-=bMW7_JseKwMp3f=b`-t!k&c+m1jeNnr2lW@d_`|s!3?%%m{=eg=$rM-Ur zZcmQSP7S-hqUC6kX?FJ8JD%Ymg&5S%1%10bZ|?L|LBC~w2JM2IRia*Jz0+OlqI2M5 z!Hnfhi*99AuUVdISTxbZ*VuZ2lwa}31JCB%JbK29FP}YPOQyLx|85h%IW2QlP0O=+ zC-tx#+5NIhCdKT%+U2n9S_@mVwP&*KP5NMx&X$_!m~_fjO}Tsqx8+yUNy77|D<&Dt zsR}kW5hj8M5~spPhT zVV0S3-{}J5Q;#0K%L{b7byHQ?F@>R}wNhx>luwzFeeJK_@f78{=}cNyn|b%yhmh4f zcW=m!KCAhu|IizkS5rF{F)Fj)vcGz7+k^uTe*O6H{$Kz9*c1EzAFp3>tEKy^meT#O zJS+Xl$@BZJSSx*xy!*v`Me~2nKV@r1ir_Lg^F7hEe1`MqkL zX~DwV9v6jLb$UBvJrW-NRGKt%iTToF6U35}O&E?Wx_>oC`dqZ`8DGA+f1=ad7oR_E>z#96LWAx5zT+?AW#V2$3r%x;7Wnzv zWv+(6_dgrESHFokb*Sky58vl^RZrhF*X>N{W?Lkyek(s-{KU6IbMsz%%T~7JG_6p+ zDp>k;@%hg;Ob*o*1}u6PTYn?}$brANere|Qd!1|TaDF5l-QS!j_P6S)?6X}fPq$B> zdU$3g%VmR4FDiw0+`O|uENcV5{l6#d^));8?ydd(G@ISqZ&L7*>w+c{hi4wVa&1}K zL1uwsrFZ4?-KNj6&;IFL@PkJu4_EL1^;gDjT3t@V*Xw)M$Vbn0X*aN2!e8smx5UDM zizA@IY0bAaY~|V4f|5Kht;q^bGc#VaVP^lcSf zALZAuuCcFnpIm+3>Yw_t&qA*McU`a04|tt0t)-)8-tu()d9n7pXFlspQRG@XW0!f_ zyK|Aw-puYL4&TRqeG&W))pTDKO< zMz6M1SIP>T9XZo`NAk*5>!$8qUvcIPPvh+0yJU_Vdus|d%=sknWrBh9$5m=8pJe8> z%}KYob~(u3eFc}H&EZl#rIU9jFXjsLoD?j0(nr&qZz}7G-%5+RcbT0u5e(jJutsiW z=e=#6zZSdt9J0Ih&(P3#dxvP%TJ1BpqvYScf6srMS=je;&DQ(Nr#POleE)3b%-GT% zhQkjZt=*a$8I`T1sgl|myk%cT#=`5Dm&IO6Nqf=a6k*=}-^}3<57$x7N{el~H!9sy ztlA#WSaovx?n8GvCU_?)?cnzIyJ&sxj>M8Q5r!@0amh)Krd&GVCNWW9<;tVmcoVG8 z?x@|XHKj^=Qh=7Ocdp=0Pd}xF=foDq1kFoh-yLksudBVe#LNEMgA*Mpm)0%#^lIH+ zvE`eeD9T9)R*SH7mhL}vBUaSml;(3yPp$)VyRSSuUDV}y@Qh{glZ-1<6pu_gWIp|v z&}Ht_s5`+)W%hr6~jUx z9z{fEvix+8{IW&N<_Zmg&>??0j=xLCT-!uye(b=8quwf8$acSWcyWs%Rk z|KQM`!xQIy>Y2RDq4D9{oqvm3>Se=c&WzlAA#uTKj$DE8LirWOHH{gMcRstQlKzsg+*QQV8KF;Z82~0UGRPEd#r7?kRUGL26#%G^@ z?(%>8l53HHe{w+5w0kyOFV2Z7^1sags&P&#t1y3U?>zatIi(G!@?`b~ek|Z#e1F%q zdClK9?ygMlyQmq|(zI;*TjrSGyUZ4OF45uR?0Bds+^waoxIy}Y()D}R>=rX8SBnLH zp7i;2_-yI?>@f!w`{uR&1r0%ZniFG1k}=uuU=)GVH)bSvp}fK|4iDpYf@%@ zS6*wJ^od+@b=S3{cU)L_*p4%2?&Z66P$uQ8T64!M)&;j$1y_U?Rm_{ zZ!A&&r+whJF#q)P56m+6f9$$n^2bd3!nawcgC42JONbhX*Ce;EZ%r?MvLu|DMuWSyLnwdd3Mcdt;iB)~?!K&0SYMEPO>4`p&>egZ z>;0W}+GU7;WHd`&%RB3jdOpY3e{Q7UyUVwyEk13{>0QRZ*FDK|XY+oTpI7U5zNQ-t>dU`rse&4P48i2Y7~MMb=Gy87ZCYNk48dO*dF6XId{l4RynWd+u4Pk-b9og7KPoO}5qRhE+NEmmS<(tyi#_@3ci$0+N1q)c9welr577)d{dK|R~YYDc*w-q^^J$3p>s*j0~7t< zbN;`}|M%%=_v-)O_W$1A`TdY^;~WWr_iP5!FIOgS{iXMo&vbG9uSI`f_uX&LHhGxS z+wHfdbm{e<7p}={y(%_s;j?SHf0b4&@;L2Tah73frUvRE{%sOL=9+Ts4M_l!{C4|B84mHYp{`@a8s#qV$L z<=%y_R&a1omD`Z<;lPoYk|5JQH=nhWIyz<;H-~f{;*yYIUUyhf!_9vy$|q>(BunM z{XQiqWTLUFo9!ot*c49~=92 zndKG1&ep~iXSZvxB)478+t>GswIH=DZN*F{i?gpj&)&|zzvl0^w|@^mez?TV++4qJ z`O<4<&mXON{qe)WZgKk`@6zY*o3Z}8`8)25R=z=8PY*TDQ8GMm`;N=>4;fFAHduNY zIGUvz3+_H_Y2+hhy62tQtMD4x;~y(>)*k(mK2cmh{@Il0m9w5(F1-@+I*L);lTZBF z)^%&QUdwVQNZYq-S6A>^OMbn>*GogMhRvQm(Rmklw1vVisam_=N{&Zz6wLG2W?j~p zV;=rZLu<*22YmO0CtgwDXIFfEG{+!x{c5+m%1H6{c7HR&?g^83xANu*gr~8k`B_E^ zFkdWT*(k{V%P4kQhVa{m9rtYKEavR8o+ywyX^#4>S*=Y1wYP%VCayG8HcGddW`6bB z1qXpd&&o-2gHOEJxO90^cHrA>7dFN`pL2J!wacWHx)1Nai0cY5Rgv1n$*^Tzc1Lr? z4*_=m{AXUaM_UapzkJxJ9_9V$ce}a$uh;*7FYdSdvDp4+u$ZEdfV-;9!Jlu$Pu#Bg za#5|>)#BUa`xig{ex)F8ypa7JpK0{;ub)znoUMty9`#ykqu+OKfzA`oE(`QD7q+^u zY}t6fp@F3#a?kN)(NlBc4`pUd(wkOsNHWSb&C*Qmwd(2Sm0Uj@9WTyoJ1bYfR-~M! z)MYod_TPcsn>m^P%~Sb*^2LtBb7x$Pmdr{yc=+R!Nt0w2T-m)@HFU@m_Zi$k|p*h?q4Ffpd@efdqGoa07* zSiO$fk-9wF->=nQRvTR0zfkp0Zr}Y6)3_f$?|v^Wu-yB%!HiFDZ}1U(aFN-dr;*NdlW{CJ3;( zZ;pzNjrLVtzxCSXlRg&eCyUd}i%ow2I;}sy{!7n}^9@?HJva+{?HCHDOn+o!Ab!fH>-TQMFZY`yI_E6WPfnN+F!S`kD*O1eJ5@A; zij39=S}zT}<9Frpl8av^sd}Ee_;u?_-TvcqE@`BGRZ%*$>_lbK#Jm4~Jw45T?G|5q za&YkF%ZrXro;H&~&?`mj-6Ylzmp`%``+D~3zgMq*etw>KO>C?0>z7;fx(%LdKA)7- zd(AEH?)TeD$I=;nr+hy?`OlxPfBpAYRM%VmeeAzq!K?ny`SSdGd;UJ^j(~w|8|Jf3IHcA7At7(b4WH-O5Mq z*Ya_7Ki?;NW$Ua}9W4!xE=78l&m(3l+vNFXuefw)rsecaU)^8YsTCNXk5m%wbo{Y! z{oyALGnTjZS*|KKoOLXxd;8AUySCj5n)HTghuPZKyXH*0vDk09>U5tuXLj=joHw1> z*}iXP=Zpl+rwe{G#V?opu(|z4;psmv>UY0dAe`u|?(|NEOhzjm6p;>?&u z;#-A(FG$tf?eQhHx1*)C$g}=LZOd_i?8|Hw4b9hPMSfn#$j#a&UY z&OB_1l5SjP^!ca7A&kzDK$8-FUUn=cI?-k90%D|4*leR_1Z6^ z^g?EH;6*uBfyeJZuD@7!<*<0yujYHk8?WuWkl5Njk2UX}GnZ08#LV(+=KETKR*Ro6 z?n!v@jBVQ1f+dSz^fQL`2E{0KebVDe5-_WoSLwaDd~KlxqY_KFiG<7|i}MD*?s0iq zo!$2INcCmz@T+-gUF%w32>ML7sM>$!ht}Z>{~vscb>4D2x`I_By^D!EVuHYeh4GI( zE*-TEZ7rxNt?_GLa;wKZY?g(Uk&(5}?Wk~zO&^ZWulqFj{Ql3A<^Qe~DoQ$~xm2fl zYRaOgTc%8kHmNI*x_-3NB`E&qjYtc}Yg@NTmF`hFwD2*{xuY@Wbyx0Qzjkc%ahBIh z=dWWCD14$e$>Rh^_3twqnxC!RZgR+sW4g@5!~0q1+WtIi&Z>IwV73Y0qv`nDqD6uT?%b zPkx@VHI!HFxb2K~6-{rc19FKoX9lghc4g{;mW$!05;4XnS6&M{mD4Bx|B3q6YwgF6 z|Gde2{2$}0<*i|>zxVI|(O#c(+Q|24!ika?e;)DAUqAkMCcb}H{qJ>p>W;=&u5NXT zc5s+*u(xX7ZvV~iUW+Ju$USXV{{DX9zPAC37Q4JM6n~&#&UBQ??CF;`Kd*kCe!eWc zcwVqpC#&!3jxDRQj=4E$DqYd#~AMZ{*=TGK`4QP+fpyPw>tjo0jK$zVNl|NlXL zo*zHO_peyK)NF0&Yp(SFpT54W+I;U#TI}>`!G0c==Xbxn`8oZw&DC2`$_roYd}lfJ zuF3Kv3ag^B*ZR542RWsjS+U%&mR|95o${^}3w@6Vlc`R?JBL6NKLe!jby zd2j!Zh*MM6eaqY>xNNui`u~sp>&mj;_V4@m#{d6k`7M`Mt`H2&WfnQnu`k2r&J&K; z!izpw8#_b`_p5C)$uORz@+@QP)@!S-MO_C?Vl3VE>e=qQ|9(AtcJu7nJ-2_p2;Rkd z<=sRLj)%fU=lIySO!3*#)&Bib$iXu%I|3L>nT+OLd$BV0-8x;Rbyh*Hhu=1yS#vdO znai7Jw-#%03+Z(3i1gSS+Izxv$*iN_{{HyUVRzR`;O5)1r9KPg4K{mBY`kfD>Fi?9 zl9MdiX>){UoSbs^>YA(9qC!o}X9uM%n(v%pcr-Dj}?|lx5c>Qn56BGWv=6H76t}Q0>lX|g z`}0%-HH%Kp$xW8HZxVD_R*$WzXP55#+8m~n8<$-9TB-Ex_PSjY)Bp0$72)KKHz;Io z;`_&WyOlqwQ2FPct!Dq^o*w)A=FY_!!x<&=CTE_BBrl%DV!^-lNF4tL1I9CVOD#FR z-Ds;VSWVWwz+tpGA+|g0s)w4W9JA?)~mnZ{OGdnS43(X6#$d zVv%JlqOwnUGCT>o;(Jy3iHUh==>*1S37(fts#Esc?hO6p(RF0s!E4`tDR#fij;B6$%b7 zYrbt&Khb*8#CNT~P0S9sGpEM=`y~C`>PGfQJta52%6ikoQ%+nJQORA)!*1DfcGj$} zjR$9(@R^ywyYB2+k8^sLpIOa%^=e& zGB(pJ)g2^`7&!RO3|v<8`OT}Jr_=TAD<(dl!fjn?T)H_b+Dr5Kp@r(j@821?%q{$A z_AdLo44?OuYauM2lRSj;d5cjY=4@MS(#B<8EiqNv zeOtF(&OABEV(EiEp+Y|&mn<&lNoNlEXg-%&er?Up%hTiS{^ZwxtN(kI|Gw$5&;0g5 z(enMrUo8lka5`__BActJrk<+ejCpo{ZoK-to3;Mi^ZKuc=l^;8|JVLM{?FXI-g@pi zpRxU{;KKaJ6Q2pc>i&L1`q;fAn(7UQs!AiT9e()WO8B$C|FZVqKmS=~4V&QBYf-tk za^{sgcd@vYIK0^UPw?impnKh?b5`6{GUI!BH!Q+C+Uj@GyX~coD^~_8xJ=W?FWnyT zXHjbU^4({7I^41Zr>=?$Rb94iU0}={7q4>e4TXQT*ep0SKZrouQJ-);$QV;M z%I+7Z?^v$e#;ES}t9hNE-CQ|ksTYxlCd&1PO`SM(dZ4aB&kKRNxzTE3=S&_wWc zg%u1-59H4M^ZJLe(KfS5H=h4Bf5y6Nd$js3GjpjHt2!HJ=N$rXZXIJ~QxsIHdfj5z zD;CKhSo~;3%p^PY*s~3K8y53USKP9fT=Wn-S0CHxiHzWs=A$0my&E^D{;oQeDTmnw-gN!=AcTf1`WRgaw3wByYZJ^pG% z>legj%Npp^?0v|W|8DKou-8?k#b1AZ-}k$q{{OqP(x)!9Uf?rb8|AH~BV%)UQ%ERx zt>lbJOJ<%dQG7mW`LbJ4!XMLaFO{-*^W4C~U~9%?iGag*d#g|H_jzf^m z!)I|kBf~45ob+2}A}@Y~S$#O^_+D50e#PE;Z_ksL#eX;`r}KR0Rr&ePO4M}*v+*~z z3Ol0%w@=0=IKH>9zngmC;-UK-4|FQMF2|Gwmu>(3`*-HOvVW0w$-uy@xp7r{>s;s{C(3F{Ah|rP3PT&b*HQTKg;#}^yp}@ z(7JWEY-VnM{PNw`>-qIxZ)KnM47=QQjl-*slV$tMJKpu%uIe~NN*T(s*<1X(w>bVg z!)4C{PJ9Lnr_}s?^QxIYeqY5$9Z|N*tJl`#8}yvvlajT&yC+jxF>C%-8MY%AeN-Pk zna5wC9`w01)^GXc!-xMq{7_*bn;mQ#f4wS7=g(uN#X8=$bH&P2n??*J6o$2JagG}`8{*Wi%-s+nVr2hOw91=vSX9h zJ)7IXqWI)s>jB0O9fzH{m#vz8l##(WdRnT>@s@MkJ#r^sWd8r2HtPe&l0!zlJ$Ic2 z+BsHrYRu^D_;j{Y_Mog)!nLU6O)Ea7Je$(eUb7>!o3CiX8u!>lAp`AMA=6!kGi-R_A4Pf@x<9v5!BcJot?YATz zinOXZW}YpU++OdM3tJ2D?^{$hH+OeTmq*Cbf>SGAXYEouHmB96{>SzI4;TB}RsXxV z{Ms~)2W4EFKPt|y+$1F|xWAwK|9{#2)gnJCY79afiqDC^auBfOm;Uvm_P~*ds*a4w zOL(OELbWyI&T(_C*}c@j!H#M2M7>vY$;2QJ;e!CkGaZM=%l zA|ql#@$%bI+0lOwR{npzQc}v|92>jX^!w(%QnNUCER`FIb=}Xu|7o$cBJS}{hjiz= zyJu#)cZs*E@CiIuk$&u9``9h|#PfT-d(Kv+^A`zu$u2k|dvL`O8~M47hM#+Xe|GfD zGkEvu{hj$&j33V^`p_-0i-9%9H#*y8BUcGW-$yyc!UJbHTN1a(g(@(1C+fXgd+o(S z6(y;z_Zg~84GKb<$zPNUSlD}TAUFJB_`*waIX zlWr{zyr96OzvDo@Y~A+t=h=B2t9ak__p`t0$~^n-)~uC|zuHc_ z+*%#rcBu8moEK%~-(TbgtiF5y{`uWMe{O!RbLWnWsNUL4rdylt?X4{T{_gJSzweHo z7C&bYVXQkPYHfM`J-PStYfRHtY|oS6*z_-6VSk0w`5*iZz437_eYFPXxoq+QP9Q0!;$awg*;7nk?fgfvDcn% zne*z_waM2?BX3vP$X+j9>-+wl{CoLnmkZxSiSpgK7ioKUYKzhg^(zl9sk)Y53(HoX z*04@xsY>VO6qC)nuHD{U?im!_n|bPIR7d^K?)KyETY9!$Bo`@85;17`|F_Rncv_1{5)O0rl7X=tY=g6@0V-I|v5Zl3qOw`FJUTy8$FWk1_Qk0igmYaw@Mb`&e635uzF+)%rb&FhHT-!E*> zk2R=t@tG$sX3N+0$!VHb5?btf((;vGJbYA1baPtxBT+U0t?RNbGS=CC5Nop zbv4Yl*J0s$H3>WU|U#a+Bsn_p)_Ua`f`|SN-L;|9P?g z>%;alZ@A7SH5}%6^WOivhtTEsVmtrJ?KtrG;2E!Zik&RaZEKf&bmDlk(NVbh(8DAZ zGd+Q$ORtgS7z$QMZ~Ulcc<0)Vx7)foIJjIJ>^I+vI`MB&rq#;yuh&8wSWLy4 z1tG<4GcQ5PnvSrt{=;qG6?BcUiq%cD# zl)-RjbH^1QmxL>44qZNdH>7uo_4VDeXQiK<_)l)}k=WN47b0jl8_vi8QybbF$|~N4K6lJHxZ%%v7Gdy&+Cw> zx>95UMXKxm{d|5tZqI``2Lf$pugRQL6LoEU-2S>9d;kBF|Nr3Gv$WFo38BR|9^bt? zTYrDf>qpC81sJIYH%T5(jT38)N%;LwntR{ZInV8z-$sN#dao#~uR3*7h%|Gm`P=p1 zf4{Ds*>!Nn%*hj4{w|qSYQApOu8TV-3H9#PD{17L5xLe>XK_+{-1MgfHhQNotx}s6 zEfTwP{+H{dX8EyeUEZ|ime-6Qh7@U8 z&d!X@E?yfoJ(bbiymazPAE(bRchr4-%FMA`^y<~t^?B>$^8AlK_1L<~u_&>?Gc$Mj zZS(wld#l5xZ*BDJobUVPmDj$i^6&57J=`3A{mjZKnzz<+x9~hvKIGZNVlmI}S)5nm zvSq$|*PZ_Lbocf5_xA1Hz29H6{?kYG^>MW&rKO@1@9kQ1#Axcxhg-Mpx;Ev~u5H&! zA`kuErn++ie=mocXV=%uK4+yK_|86jy|lK*W{S|;h*ql~ifNsqY|dxyi8mhfTC-f) z+r+d_EYr?nA_wD~Ig59zy04H*k}DTKX{pX99d{u1>YXf=q{ZeAEgvSjz3a9r{Ih25 zuI57z?*3~^ltq({`&tv zzyH6U=E2zN2|33b;AnWuihVBd{1J%St zO{?o^ucHq4Zd_$vnjX+KrK>Sunai8CTWfEAbzM@Obo{e}^b)y0H_& z9hvR*@OM|ixp(`TI!-n|5OBP&z_h<~r3JhH?Ik<+^gf%e`8YqxsGskZGV|T}Kfmu^ z86VD)B6mKoWUi#*M1HgS-(3Q)CU2JLbap7{Z!PF{J!X0I|Cu$D%!}WYo6GO1`1vVq zI_K+`B0?g$rEC43sKkV>*4paDu-fhS`FC;hvnAU;T;*}Nd`idXP9JyF?pe`#o?8jbp@~mrMI<@W{7njln zrM2we?GksdIQ;v>&B-G6?N667$~hn6@jNqguFRXuHnIEn?A*EY=KYwZnzOTgEGDeX zysQ!S?%MIRWou_v7wTKOJDs()$O#Y5zt_>SbK5H4t)^w&ORjIyYv2k#mw9UDoC zMOS4GcDg*b^jA$^_WEy0vFUS_-Ldn$yw0djuhiR}IjiVOz%rf8NWbNm0~aq6QMfS2 zaf#kapGz|N@7~pY`*pT!#*KT|s)~!5zuvxm`)Pp@>!n+>p8u^0vEH|PahsAu+pk~W zF18x@?w0@ern}$%|Mhjc=ZzOEyE^Oe%!nx~RtoMm3qGK7HADT;pVjfTTi2Dwh9~`e za`}9I-n#kr^<`W4D=iW@-?}=)AjmTP!n$i=^78%1Ri92N?$e6nF7FBBG&x^9=}0G2 zdi#A{;iVaGotTzKU5_}F^w%s^S@QfU_dt$2hO=CE&VJ?TlJR89*+nw_wIbatQ$@u@ zg*F={B{OK2HYazodH6Z)O!+Pna7_2pZZrR4FIArMt0il*&mU-T(eS*clBLyp?rG(j zRa~DYn9zjYE4R+tvT4pt+$3p#A z$FZY6bAtUek7l&&lfNC7cThGUcWPwW?!WUaUQEl_#57^1dF~+<&8L3Sg>LiJ0%cuv zF2BpFIBp=AnZ5BMvzYB}NzDjGwvLIc8E=1l_|`rD-`%sPr>EXpyDR7vPr6D|kO0#~ zquy;(`fG|0{{3I`=Uw1~JoD})mG|=h2vkjx`Sa_i&}(a#R9wt*h+7H5TCRbIuBcZM^zuY!?7 zIn-*M=-ituRt1LrKCvkb+oL4qdm{h5TvE_fxc_XeLQ2Q784sV_;x((1Q9dG5So6XC z$>AS|W;!PBcD;LU${pJ$50d9_ICxop_`bsG&E*qklV>Jg@Nm9-!Oyg(|K%N??PVLbcL$l7NtoS?wX2i+TeF3EIRsdoH@@^_D|bBe@=Pj7qUs9Gr()o zA@(D_(c2S4a^G&@Yj)~StJ=DDt6tXGy<4~Ka@_GG#%rF+NzwZ;_wUH8=ZpXMXF7j5 zKVOok)*6Q-z2K8D8r|7Db5_dDx694r?SJJd1)P#>*yZk-pi+6( zWJ%9+mGf#`eeUe@RCZ46sxEF=I(dU!=*GE@{C6(gRJzxb^x~0Syj*(ow8oWAm#r#V z1RkHP)_lktUnbOj<%FL7+tB`tpm_nZ4Yuj@>@$=B{)o@|zAxpvkmJ;t*+xl)|^+e2qOOqj5t zW!r=~Ck2lRx?H>R?5`is>xVPu>

Eohj{Xbb890i~jxn%WwZaemy?^>89$RcZz}* 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 OCTJy|`M@gn@fg*@?mqL(;hVMT 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

}4=k4qF@4S)IusrX;|E<5_)!UCJGv_$p37=Xf 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 z zo=qymX1`FC6> zbv`F4G;4O{(hVKU-oBe!X&9KI=J6thuOnuftBZ3_vEJit&lSASt(1Pu;8A*KPto%u zYt}7u^;-LR$|F8z&xx_>~`EKdhNJFEp|n5#N1 z8Chvk9mn^*4}SA&!_B^DZm}OFW&|Bb2wi=`NPp{x3;c&~SavioIjCtQROW1O>8wL$ zLu!yHx1rSyo9UTR##fvctg5T9YWf&d8Y%Y7A!6I@w|Toe6&D^XiklYGHTA$mOC$E+ z^`H05@h*-RzE~OeYu>iq6D_mOuCmhI+%d~if$iC`6&)UvcN?@Pc7$>zoNwgRRK5SM zvEft5+F3J}I^^~KWxZ&V_xG8e-Cbd&JhRzBUYGsoueNyMO1Kj`g=z@BjYw!`=EV@z|@=+V)KQ?6bTqHMUg`t|p32_^$usozx@N+Mjt_ZfvaF zZK%}x+?3lXbYTen3f`o`yVPP@M6^f8OL8iBp7tQ#(_n&24z+NQuEb|)5mC|ch-F|kfIQet?tUt`|@^ne(3A8&5~@tUY?Ir_GNpPc37?9`mC!TZ+x|x z|73Q)oZ0QO^9*`J4#YIC^w!mqE8Kni@6mTxTOQ}DZ%qAodE)!`=Y22oXFq3jdb5kK z;aO!=@82j@+oWd+56*db$o#39uqmL!wxYxEyEJS-MNPorP=B)>2L-wi1W) zkv`cocW)A4njI16{*p)Vgu_<%a!|rq?SYWeR33E8P9EZC>XA zlc4UVqp#fC8?Ge3NqUpivG%Z?jSYk2wBqY`Q%=@ah_>;hs8nxw(&m%bm(cUfQ0G({ zga7i)Yxa4mJm1kF#;)a1SV)8|0f!A%CoPha;xQ~JVv$%n7u^{)_YLc+Hgi>!kxTw&4P(X zS54mcE=6-u8a8Yx1Pt> zKBdaxUAsuIm#xvyI{PP4JXcR%I#BTEAoDHv?eeznKR%hq?P0hZ)@@W=kTvzGl<3#< z*Sl(W?$sB}m$!2_u>W%>p5vO{so$^pKbYp<=84i=HSHRs?ssNA`K>jK+tZpao{2i^ zqdjBI2LGdHV^(>ZMz1-y;ArUDb9u%Y7pu(X-t9WwVz>Cr1IZO;y!P9iHdV0h319Up zc0pm~8MloGxSgJ)x_#Jxr)_%h+ON-N@m-p)d5Qn_XWJ_t@6Epcp8i9wyzpnIuKe}+ z`p>V2eC(Imw$FEa_l)(4R#om=+s=Io7oOWT>&{g{ea1YNf&hl_+(4TTITo6B%a?B3 z94r4vN^-wW?yS#T>+)=0pB5;NIqkQ5C*uJ^Vz6u(xlp;!p7!sI7{Q!6M+C}0h1M7N_t)5Spr9L zN}n5F*sA>d)!r+U&hpy#Fq@=>MYD>>lrJ@9mMjd-USrhuEQ~jMn&di8+jk2%o_Kkb zX?kASbNKe7&+Wh0Eb}NY|GQ!KySRM6@1>TnEOL%74F7sL@ul@F_uKDw9lmVhUu83| z$ntD(_$DRCwVQ5#y!)2VLay)l`hO)dyXsyjC#nf4@ytCj`Ck2W&7-^fLK$?rL>38M z`upuzQ~BMF{-6ENi)`ll`{$SE@3+3*^x%q`U&gdXkuwXXtjapOP3Ek(V7W;VheJ+K zJ4aU7gc%p&_g?d_-(;zK`pf^V-jDu`D50rUKJ;)j%%Cm`ytywrnu&3vsQ`Us2 zAn%MZ> z%_U^Z?CDP&;=1{q@0;Xa-s0&!P0_7r-a;ppG$o}oZ)#rrHsZPdJMToK$OltZ=Z7-F zF}GPfokBhv?>v^6<;1aBu;RrI@za)u8b7YFPSrWLc&^3!=)j!!LAR@pZ`y8t`}W

6)# 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 YKl6qiMJ}!CQyDblL1AHG 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 TN24a3W7} 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 literal 0 HcmV?d00001 diff --git a/toc.md b/toc.md new file mode 100644 index 0000000..544be53 --- /dev/null +++ b/toc.md @@ -0,0 +1,22 @@ +# Terms and Conditions for LNbits Extension + +## 1. Acceptance of Terms +By installing and using the LNbits extension ("Extension"), you agree to be bound by these terms and conditions ("Terms"). If you do not agree to these Terms, do not use the Extension. + +## 2. License +The Extension is free and open-source software, released under [specify the FOSS license here, e.g., GPL-3.0, MIT, etc.]. You are permitted to use, copy, modify, and distribute the Extension under the terms of that license. + +## 3. No Warranty +The Extension is provided "as is" and with all faults, and the developer expressly disclaims all warranties of any kind, whether express, implied, statutory, or otherwise, including but not limited to warranties of merchantability, fitness for a particular purpose, non-infringement, and any warranties arising out of course of dealing or usage of trade. No advice or information, whether oral or written, obtained from the developer or elsewhere will create any warranty not expressly stated in this Terms. + +## 4. Limitation of Liability +In no event will the developer be liable to you or any third party for any direct, indirect, incidental, special, consequential, or punitive damages, including lost profit, lost revenue, loss of data, or other damages arising out of or in connection with your use of the Extension, even if the developer has been advised of the possibility of such damages. The foregoing limitation of liability shall apply to the fullest extent permitted by law in the applicable jurisdiction. + +## 5. Modification of Terms +The developer reserves the right to modify these Terms at any time. You are advised to review these Terms periodically for any changes. Changes to these Terms are effective when they are posted on the appropriate location within or associated with the Extension. + +## 6. General Provisions +If any provision of these Terms is held to be invalid or unenforceable, that provision will be enforced to the maximum extent permissible, and the other provisions of these Terms will remain in full force and effect. These Terms constitute the entire agreement between you and the developer regarding the use of the Extension. + +## 7. Contact Information +If you have any questions about these Terms, please contact the developer at [developer's contact information]. \ No newline at end of file From 3325626777712c618a5dbcf9b0509b751048ee80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Mon, 27 May 2024 11:47:39 +0200 Subject: [PATCH 2/9] fix: properly start/stop tasks (#100) * fix: properly start/stop tasks https://github.com/lnbits/lnbits/issues/2411 --- __init__.py | 35 ++++++++++++++++++++++------------- views_api.py | 19 +------------------ 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/__init__.py b/__init__.py index 5e1e46d..3d90cee 100644 --- a/__init__.py +++ b/__init__.py @@ -1,12 +1,13 @@ import asyncio -from asyncio import Task -from typing import List from fastapi import APIRouter +from loguru import logger from lnbits.db import Database from lnbits.helpers import template_renderer -from lnbits.tasks import catch_everything_and_restart +from lnbits.tasks import create_permanent_unique_task + +from .nostr.nostr_client import NostrClient db = Database("ext_nostrmarket") @@ -23,12 +24,7 @@ nostrmarket_static_files = [ def nostrmarket_renderer(): return template_renderer(["nostrmarket/templates"]) - -from .nostr.nostr_client import NostrClient - -nostr_client = NostrClient() - -scheduled_tasks: List[Task] = [] +nostr_client: NostrClient = NostrClient() from .tasks import wait_for_nostr_events, wait_for_paid_invoices @@ -36,7 +32,21 @@ from .views import * # noqa from .views_api import * # noqa +scheduled_tasks: list[asyncio.Task] = [] + + +async def nostrmarket_stop(): + for task in scheduled_tasks: + try: + task.cancel() + except Exception as ex: + logger.warning(ex) + + await nostr_client.stop() + + def nostrmarket_start(): + async def _subscribe_to_nostr_client(): # wait for 'nostrclient' extension to initialize await asyncio.sleep(10) @@ -47,8 +57,7 @@ def nostrmarket_start(): await asyncio.sleep(15) await wait_for_nostr_events(nostr_client) - loop = asyncio.get_event_loop() - task1 = loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) - task2 = loop.create_task(catch_everything_and_restart(_subscribe_to_nostr_client)) - task3 = loop.create_task(catch_everything_and_restart(_wait_for_nostr_events)) + task1 = create_permanent_unique_task("ext_nostrmarket_paid_invoices", wait_for_paid_invoices) + task2 = create_permanent_unique_task("ext_nostrmarket_subscribe_to_nostr_client", _subscribe_to_nostr_client) + task3 = create_permanent_unique_task("ext_nostrmarket_wait_for_events", _wait_for_nostr_events) scheduled_tasks.extend([task1, task2, task3]) diff --git a/views_api.py b/views_api.py index ceab28c..9f77217 100644 --- a/views_api.py +++ b/views_api.py @@ -9,14 +9,13 @@ from loguru import logger from lnbits.core.services import websocket_updater from lnbits.decorators import ( WalletTypeInfo, - check_admin, get_key_type, require_admin_key, require_invoice_key, ) from lnbits.utils.exchange_rates import currencies -from . import nostr_client, nostrmarket_ext, scheduled_tasks +from . import nostr_client, nostrmarket_ext from .crud import ( create_customer, create_direct_message, @@ -1116,19 +1115,3 @@ async def restart_nostr_client(wallet: WalletTypeInfo = Depends(require_admin_ke await nostr_client.restart() except Exception as ex: logger.warning(ex) - - -@nostrmarket_ext.delete("/api/v1", status_code=HTTPStatus.OK) -async def api_stop(wallet: WalletTypeInfo = Depends(check_admin)): - for t in scheduled_tasks: - try: - t.cancel() - except Exception as ex: - logger.warning(ex) - - try: - await nostr_client.stop() - except Exception as ex: - logger.warning(ex) - - return {"success": True} From 1278ca367b68db979b9db1417d8959a0a3ad4861 Mon Sep 17 00:00:00 2001 From: Arc <33088785+arcbtc@users.noreply.github.com> Date: Sun, 11 Aug 2024 10:58:59 +0100 Subject: [PATCH 3/9] slight path change --- config.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/config.json b/config.json index 365f522..5fa6879 100644 --- a/config.json +++ b/config.json @@ -22,22 +22,22 @@ ], "images": [ { - "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/1.png" + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/images/1.png" }, { - "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/2.png" + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/images/2.png" }, { - "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/3.png" + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/images/3.png" }, { - "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/4.png" + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/images/4.png" }, { - "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/5.png" + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/images/5.png" }, { - "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/image/6.jpg", + "uri": "https://raw.githubusercontent.com/lnbits/nostrmarket/main/static/images/6.jpg", "link": "https://www.youtube.com/embed/t9Z2tEsrNIU?si=rOQvwCUSWhwPPmYW" } ], From 7a3b144a9458a3b313bd57bfd8330403853fad0c Mon Sep 17 00:00:00 2001 From: PatMulligan <43773168+PatMulligan@users.noreply.github.com> Date: Fri, 25 Oct 2024 14:19:13 +0200 Subject: [PATCH 4/9] pass showKeys as prop to merchant-details child and use emit to toggle (#105) previously, index and its child compoment merchant-details had their own booleans and their values were not synched. Using a prop avoids this problem --- static/components/merchant-details/merchant-details.html | 2 +- static/components/merchant-details/merchant-details.js | 8 +++----- static/js/index.js | 4 ++-- templates/nostrmarket/index.html | 3 ++- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/static/components/merchant-details/merchant-details.html b/static/components/merchant-details/merchant-details.html index 35f9e31..e48a8e8 100644 --- a/static/components/merchant-details/merchant-details.html +++ b/static/components/merchant-details/merchant-details.html @@ -15,7 +15,7 @@ > - + Show Keys Hide Keys diff --git a/static/components/merchant-details/merchant-details.js b/static/components/merchant-details/merchant-details.js index 31dcfac..ed78226 100644 --- a/static/components/merchant-details/merchant-details.js +++ b/static/components/merchant-details/merchant-details.js @@ -2,18 +2,16 @@ async function merchantDetails(path) { const template = await loadTemplateAsync(path) Vue.component('merchant-details', { name: 'merchant-details', - props: ['merchant-id', 'adminkey', 'inkey'], + props: ['merchant-id', 'adminkey', 'inkey','showKeys'], template, data: function () { return { - showKeys: false } }, methods: { - toggleMerchantKeys: async function () { - this.showKeys = !this.showKeys - this.$emit('show-keys', this.showKeys) + toggleShowKeys: async function () { + this.$emit('toggle-show-keys') }, republishMerchantData: async function () { diff --git a/static/js/index.js b/static/js/index.js index 72f1607..4e8cf2f 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -58,8 +58,8 @@ const merchant = async () => { showImportKeysDialog: async function () { this.importKeyDialog.show = true }, - toggleMerchantKeys: function (value) { - this.showKeys = value + toggleShowKeys: function () { + this.showKeys = !this.showKeys }, toggleMerchantState: async function () { const merchant = await this.getMerchant() diff --git a/templates/nostrmarket/index.html b/templates/nostrmarket/index.html index c39eb32..e7296c3 100644 --- a/templates/nostrmarket/index.html +++ b/templates/nostrmarket/index.html @@ -11,7 +11,8 @@ :merchant-id="merchant.id" :inkey="g.user.wallets[0].inkey" :adminkey="g.user.wallets[0].adminkey" - @show-keys="toggleMerchantKeys" + :show-keys="showKeys" + @toggle-show-keys="toggleShowKeys" @merchant-deleted="handleMerchantDeleted" > From 2020bd9838047bf8d05bd2f01f9f37aba0d7729c Mon Sep 17 00:00:00 2001 From: rleed <101502594+rleed@users.noreply.github.com> Date: Mon, 4 Nov 2024 05:59:04 -0300 Subject: [PATCH 5/9] Changes to deactivate/reactivate products (#89) --- crud.py | 10 ++++---- migrations.py | 5 ++++ models.py | 23 +++++++++++-------- .../stall-details/stall-details.html | 10 ++++++++ .../components/stall-details/stall-details.js | 6 +++++ 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/crud.py b/crud.py index 986b7b5..e8ab117 100644 --- a/crud.py +++ b/crud.py @@ -292,8 +292,8 @@ async def create_product(merchant_id: str, data: PartialProduct) -> Product: await db.execute( f""" INSERT INTO nostrmarket.products - (merchant_id, id, stall_id, name, price, quantity, pending, event_id, event_created_at, image_urls, category_list, meta) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + (merchant_id, id, stall_id, name, price, quantity, active, pending, event_id, event_created_at, image_urls, category_list, meta) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO NOTHING """, ( @@ -303,6 +303,7 @@ async def create_product(merchant_id: str, data: PartialProduct) -> Product: data.name, data.price, data.quantity, + data.active, data.pending, data.event_id, data.event_created_at, @@ -321,13 +322,14 @@ async def update_product(merchant_id: str, product: Product) -> Product: await db.execute( f""" - UPDATE nostrmarket.products set name = ?, price = ?, quantity = ?, pending = ?, event_id =?, event_created_at = ?, image_urls = ?, category_list = ?, meta = ? + UPDATE nostrmarket.products set name = ?, price = ?, quantity = ?, active = ?, pending = ?, event_id =?, event_created_at = ?, image_urls = ?, category_list = ?, meta = ? WHERE merchant_id = ? AND id = ? """, ( product.name, product.price, product.quantity, + product.active, product.pending, product.event_id, product.event_created_at, @@ -385,7 +387,7 @@ async def get_products_by_ids( q = ",".join(["?"] * len(product_ids)) rows = await db.fetchall( f""" - SELECT id, stall_id, name, price, quantity, category_list, meta + SELECT id, stall_id, name, price, quantity, active, category_list, meta FROM nostrmarket.products WHERE merchant_id = ? AND pending = false AND id IN ({q}) """, diff --git a/migrations.py b/migrations.py index aa2ec04..005913e 100644 --- a/migrations.py +++ b/migrations.py @@ -172,4 +172,9 @@ async def m003_update_direct_message_type(db): async def m004_add_merchant_timestamp(db): await db.execute( f"ALTER TABLE nostrmarket.merchants ADD COLUMN time TIMESTAMP;" + ) + +async def m005_update_product_activation(db): + await db.execute( + "ALTER TABLE nostrmarket.products ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;" ) \ No newline at end of file diff --git a/models.py b/models.py index effd7f9..be04ea5 100644 --- a/models.py +++ b/models.py @@ -236,6 +236,7 @@ class PartialProduct(BaseModel): images: List[str] = [] price: float quantity: int + active: bool = True pending: bool = False config: ProductConfig = ProductConfig() @@ -257,20 +258,24 @@ class Product(PartialProduct, Nostrable): "currency": self.config.currency, "price": self.price, "quantity": self.quantity, + "active": self.active, "shipping": [dict(s) for s in self.config.shipping or []] } categories = [["t", tag] for tag in self.categories] - event = NostrEvent( - pubkey=pubkey, - created_at=round(time.time()), - kind=30018, - tags=[["d", self.id]] + categories, - content=json.dumps(content, separators=(",", ":"), ensure_ascii=False), - ) - event.id = event.event_id + if self.active: + event = NostrEvent( + pubkey=pubkey, + created_at=round(time.time()), + kind=30018, + tags=[["d", self.id]] + categories, + content=json.dumps(content, separators=(",", ":"), ensure_ascii=False), + ) + event.id = event.event_id - return event + return event + else: + return self.to_nostr_delete_event(pubkey) def to_nostr_delete_event(self, pubkey: str) -> NostrEvent: delete_event = NostrEvent( diff --git a/static/components/stall-details/stall-details.html b/static/components/stall-details/stall-details.html index 1a16461..bb07526 100644 --- a/static/components/stall-details/stall-details.html +++ b/static/components/stall-details/stall-details.html @@ -100,6 +100,16 @@ + + + {{props.row.id}} {{shortLabel(props.row.name)}} diff --git a/static/components/stall-details/stall-details.js b/static/components/stall-details/stall-details.js index 32fcad5..8a6cf8c 100644 --- a/static/components/stall-details/stall-details.js +++ b/static/components/stall-details/stall-details.js @@ -40,6 +40,12 @@ async function stallDetails(path) { label: '', field: '' }, + { + name: 'activate', + align: 'left', + label: '', + field: '' + }, { name: 'id', From de7fe059b856baa790f0ff3d8cf217512ce24d56 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 6 Nov 2024 11:50:21 +0200 Subject: [PATCH 6/9] V1 (#106) --- .gitignore | 1 + .prettierignore | 14 + .prettierrc | 12 + Makefile | 47 + README.md | 22 +- __init__.py | 19 +- config.json | 2 +- crud.py | 832 +++--- description.md | 6 +- helpers.py | 11 +- migrations.py | 43 +- models.py | 197 +- nostr/event.py | 4 +- nostr/nostr_client.py | 12 +- package.json | 15 + poetry.lock | 2616 +++++++++++++++++ pyproject.toml | 96 + services.py | 105 +- static/components/direct-messages.js | 170 ++ .../direct-messages/direct-messages.html | 104 - .../direct-messages/direct-messages.js | 173 -- static/components/key-pair.js | 22 + static/components/key-pair/key-pair.js | 25 - static/components/merchant-details.js | 102 + .../merchant-details/merchant-details.js | 106 - static/components/order-list.js | 406 +++ static/components/order-list/order-list.html | 212 -- static/components/order-list/order-list.js | 409 --- static/components/shipping-zones.js | 183 ++ .../shipping-zones/shipping-zones.js | 186 -- static/components/stall-details.js | 338 +++ .../stall-details/stall-details.html | 255 -- .../components/stall-details/stall-details.js | 334 --- static/components/stall-list.js | 262 ++ static/components/stall-list/stall-list.html | 117 - static/components/stall-list/stall-list.js | 266 -- static/js/index.js | 459 ++- static/js/utils.js | 6 +- static/market/index.html | 10 +- tasks.py | 5 +- .../components/direct-messages.html | 169 ++ .../nostrmarket/components}/key-pair.html | 10 +- .../components}/merchant-details.html | 0 .../nostrmarket/components/order-list.html | 369 +++ .../components}/shipping-zones.html | 11 +- .../nostrmarket/components/stall-details.html | 466 +++ .../nostrmarket/components/stall-list.html | 215 ++ templates/nostrmarket/index.html | 56 +- templates/nostrmarket/market.html | 73 +- toc.md | 9 +- views.py | 11 +- views_api.py | 211 +- 52 files changed, 6684 insertions(+), 3120 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 Makefile create mode 100644 package.json create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 static/components/direct-messages.js delete mode 100644 static/components/direct-messages/direct-messages.html delete mode 100644 static/components/direct-messages/direct-messages.js create mode 100644 static/components/key-pair.js delete mode 100644 static/components/key-pair/key-pair.js create mode 100644 static/components/merchant-details.js delete mode 100644 static/components/merchant-details/merchant-details.js create mode 100644 static/components/order-list.js delete mode 100644 static/components/order-list/order-list.html delete mode 100644 static/components/order-list/order-list.js create mode 100644 static/components/shipping-zones.js delete mode 100644 static/components/shipping-zones/shipping-zones.js create mode 100644 static/components/stall-details.js delete mode 100644 static/components/stall-details/stall-details.html delete mode 100644 static/components/stall-details/stall-details.js create mode 100644 static/components/stall-list.js delete mode 100644 static/components/stall-list/stall-list.html delete mode 100644 static/components/stall-list/stall-list.js create mode 100644 templates/nostrmarket/components/direct-messages.html rename {static/components/key-pair => templates/nostrmarket/components}/key-pair.html (84%) rename {static/components/merchant-details => templates/nostrmarket/components}/merchant-details.html (100%) create mode 100644 templates/nostrmarket/components/order-list.html rename {static/components/shipping-zones => templates/nostrmarket/components}/shipping-zones.html (91%) create mode 100644 templates/nostrmarket/components/stall-details.html create mode 100644 templates/nostrmarket/components/stall-list.html diff --git a/.gitignore b/.gitignore index 10a11d5..f3a8853 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ __pycache__ htmlcov test-reports tests/data/*.sqlite3 +node_modules *.swo *.swp diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..931dc7f --- /dev/null +++ b/.prettierignore @@ -0,0 +1,14 @@ +**/.git +**/.svn +**/.hg +**/node_modules + +*.yml + +**/static/market/* +**/static/js/nostr.bundle.js* + + +flake.lock + +.venv diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..725c398 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,12 @@ +{ + "semi": false, + "arrowParens": "avoid", + "insertPragma": false, + "printWidth": 80, + "proseWrap": "preserve", + "singleQuote": true, + "trailingComma": "none", + "useTabs": false, + "bracketSameLine": false, + "bracketSpacing": false +} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9a08146 --- /dev/null +++ b/Makefile @@ -0,0 +1,47 @@ +all: format check + +format: prettier black ruff + +check: mypy pyright checkblack checkruff checkprettier + +prettier: + poetry run ./node_modules/.bin/prettier --write . +pyright: + poetry run ./node_modules/.bin/pyright + +mypy: + poetry run mypy . + +black: + poetry run black . + +ruff: + poetry run ruff check . --fix + +checkruff: + poetry run ruff check . + +checkprettier: + poetry run ./node_modules/.bin/prettier --check . + +checkblack: + poetry run black --check . + +checkeditorconfig: + editorconfig-checker + +test: + PYTHONUNBUFFERED=1 \ + DEBUG=true \ + poetry run pytest +install-pre-commit-hook: + @echo "Installing pre-commit hook to git" + @echo "Uninstall the hook with poetry run pre-commit uninstall" + poetry run pre-commit install + +pre-commit: + poetry run pre-commit run --all-files + + +checkbundle: + @echo "skipping checkbundle" diff --git a/README.md b/README.md index 9e3f157..1839351 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Nostr Market ([NIP-15](https://github.com/nostr-protocol/nips/blob/master/15.md)) - [LNbits](https://github.com/lnbits/lnbits) extension -For more about LNBits extension check [this tutorial](https://github.com/lnbits/lnbits/wiki/LNbits-Extensions). +For more about LNBits extension check [this tutorial](https://github.com/lnbits/lnbits/wiki/LNbits-Extensions). **Demo at Nostrica here**. @@ -8,15 +8,15 @@ > The concepts around resilience in Diagon Alley helped influence the creation of the NOSTR protocol, now we get to build Diagon Alley on NOSTR! - ## Prerequisites + This extension uses the LNbits [nostrclient](https://github.com/lnbits/nostrclient) extension, an extension that makes _nostrfying_ other extensions easy. ![image](https://user-images.githubusercontent.com/2951406/236773044-81d3f30b-1ce7-4c5d-bdaf-b4a80ddddc58.png) + - before you continue, please make sure that [nostrclient](https://github.com/lnbits/nostrclient) extension is installed, activated and correctly configured. - [nostrclient](https://github.com/lnbits/nostrclient) is usually installed as admin-only extension, so if you do not have admin access please ask an admin to confirm that [nostrclient](https://github.com/lnbits/nostrclient) is OK. - see the [Troubleshoot](https://github.com/lnbits/nostrclient#troubleshoot) section for more details on how to check the health of `nostrclient` extension - ## Create, or import, a merchant account As a merchant you need to provide a Nostr key pair, or the extension can generate one for you. @@ -97,35 +97,39 @@ Make sure to add your `merchant` public key to the list: ![image](https://user-images.githubusercontent.com/2951406/236787686-0e300c0a-eb5d-4490-aa70-568738ac78f4.png) ### Styling + In order to create a customized Marketplace, we use `naddr` as defined in [NIP-19](https://github.com/nostr-protocol/nips/blob/master/19.md#shareable-identifiers-with-extra-metadata). You must create an event (kind: `30019`) that has all the custom properties, including merchants and relays, of your marketplace. Start by going to the marketplace page: ![vanilla market](https://i.imgur.com/nCaMh1N.png) -You'll need to Login, and head over to *Marketplace Info*. Optionally import some merchants and relays, that will be included in the event. Click on *Edit* and fill out your marketplace custom info: +You'll need to Login, and head over to _Marketplace Info_. Optionally import some merchants and relays, that will be included in the event. Click on _Edit_ and fill out your marketplace custom info: ![edit](https://i.imgur.com/wEuHuN9.png) Fill in the optional fields: + - Add a name to the Marketplace - Add a small description - Add a logo image URL - Add a banner image URL (max height: 250px) -- Choose a theme +- Choose a theme -By clicking *Publish*, a `kind: 30019` event will be sent to the defined relays containing all the information about your custom Marketplace. On the left drawer, a button with *Copy Naddr* will show up. +By clicking _Publish_, a `kind: 30019` event will be sent to the defined relays containing all the information about your custom Marketplace. On the left drawer, a button with _Copy Naddr_ will show up. ![copy naddr](https://i.imgur.com/VuNIMVf.png) -You can then share your Marketplace, with the merchants and relays, banner, and style by using that Nostr identifier. The URL for the marketplace will be for example: `https://legend.lnbits.com/nostrmarket/market?naddr=naddr1qqfy6ctjddjhgurvv93k....`, you need to include the URL parameter `naddr=`. When a user visits that URL, the client will get the `30019` event and configure the Marketplace to what you defined. In the example bellow, a couple of merchants, relays, `autumn` theme, name (*Veggies Market*) and a header banner: +You can then share your Marketplace, with the merchants and relays, banner, and style by using that Nostr identifier. The URL for the marketplace will be for example: `https://legend.lnbits.com/nostrmarket/market?naddr=naddr1qqfy6ctjddjhgurvv93k....`, you need to include the URL parameter `naddr=`. When a user visits that URL, the client will get the `30019` event and configure the Marketplace to what you defined. In the example bellow, a couple of merchants, relays, `autumn` theme, name (_Veggies Market_) and a header banner: ![final](https://i.imgur.com/EYG7vYS.png) The nostr event is a replaceable event, so you can change it to what you like and publish a new one to replace a previous one. For example adding a new merchant, or remove, change theme, add more relays,e tc... - ## Troubleshoot + ### Check communication with Nostr + In order to test that the integration with Nostr is working fine, one can add an `npub` to the chat box and check that DMs are working as expected: https://user-images.githubusercontent.com/2951406/236777983-259f81d8-136f-48b3-bb73-80749819b5f9.mov ### Restart connection to Nostr + If the communication with Nostr is not working then an admin user can `Restart` the Nostr connection. Merchants can afterwards re-publish their products. @@ -133,8 +137,8 @@ Merchants can afterwards re-publish their products. https://user-images.githubusercontent.com/2951406/236778651-7ada9f6d-07a1-491c-ac9c-55530326c32a.mp4 ### Check Nostrclient extension -- see the [Troubleshoot](https://github.com/lnbits/nostrclient#troubleshoot) section for more details on how to check the health of `nostrclient` extension +- see the [Troubleshoot](https://github.com/lnbits/nostrclient#troubleshoot) section for more details on how to check the health of `nostrclient` extension ## Aditional info diff --git a/__init__.py b/__init__.py index 3d90cee..921c383 100644 --- a/__init__.py +++ b/__init__.py @@ -1,11 +1,10 @@ import asyncio from fastapi import APIRouter -from loguru import logger - from lnbits.db import Database from lnbits.helpers import template_renderer from lnbits.tasks import create_permanent_unique_task +from loguru import logger from .nostr.nostr_client import NostrClient @@ -24,14 +23,14 @@ nostrmarket_static_files = [ def nostrmarket_renderer(): return template_renderer(["nostrmarket/templates"]) + nostr_client: NostrClient = NostrClient() -from .tasks import wait_for_nostr_events, wait_for_paid_invoices +from .tasks import wait_for_nostr_events, wait_for_paid_invoices # noqa from .views import * # noqa from .views_api import * # noqa - scheduled_tasks: list[asyncio.Task] = [] @@ -57,7 +56,13 @@ def nostrmarket_start(): await asyncio.sleep(15) await wait_for_nostr_events(nostr_client) - task1 = create_permanent_unique_task("ext_nostrmarket_paid_invoices", wait_for_paid_invoices) - task2 = create_permanent_unique_task("ext_nostrmarket_subscribe_to_nostr_client", _subscribe_to_nostr_client) - task3 = create_permanent_unique_task("ext_nostrmarket_wait_for_events", _wait_for_nostr_events) + task1 = create_permanent_unique_task( + "ext_nostrmarket_paid_invoices", wait_for_paid_invoices + ) + task2 = create_permanent_unique_task( + "ext_nostrmarket_subscribe_to_nostr_client", _subscribe_to_nostr_client + ) + task3 = create_permanent_unique_task( + "ext_nostrmarket_wait_for_events", _wait_for_nostr_events + ) scheduled_tasks.extend([task1, task2, task3]) diff --git a/config.json b/config.json index 5fa6879..fe7456f 100644 --- a/config.json +++ b/config.json @@ -2,7 +2,7 @@ "name": "Nostr Market", "short_description": "Nostr Webshop/market on LNbits", "tile": "/nostrmarket/static/images/bitcoin-shop.png", - "min_lnbits_version": "0.12.6", + "min_lnbits_version": "1.0.0", "contributors": [ { "name": "motorina0", diff --git a/crud.py b/crud.py index e8ab117..4cb18c2 100644 --- a/crud.py +++ b/crud.py @@ -1,5 +1,5 @@ import json -from typing import List, Optional +from typing import List, Optional, Tuple from lnbits.helpers import urlsafe_short_hash @@ -13,25 +13,29 @@ from .models import ( Order, PartialDirectMessage, PartialMerchant, - PartialProduct, - PartialStall, - PartialZone, Product, Stall, Zone, ) -######################################## MERCHANT ######################################## +######################################## MERCHANT ###################################### async def create_merchant(user_id: str, m: PartialMerchant) -> Merchant: merchant_id = urlsafe_short_hash() await db.execute( """ - INSERT INTO nostrmarket.merchants (user_id, id, private_key, public_key, meta) - VALUES (?, ?, ?, ?, ?) + INSERT INTO nostrmarket.merchants + (user_id, id, private_key, public_key, meta) + VALUES (:user_id, :id, :private_key, :public_key, :meta) """, - (user_id, merchant_id, m.private_key, m.public_key, json.dumps(dict(m.config))), + { + "user_id": user_id, + "id": merchant_id, + "private_key": m.private_key, + "public_key": m.public_key, + "meta": json.dumps(dict(m.config)), + }, ) merchant = await get_merchant(user_id, merchant_id) assert merchant, "Created merchant cannot be retrieved" @@ -43,10 +47,10 @@ async def update_merchant( ) -> Optional[Merchant]: await db.execute( f""" - UPDATE nostrmarket.merchants SET meta = ?, time = {db.timestamp_now} - WHERE id = ? AND user_id = ? + UPDATE nostrmarket.merchants SET meta = :meta, time = {db.timestamp_now} + WHERE id = :id AND user_id = :user_id """, - (json.dumps(config.dict()), merchant_id, user_id), + {"meta": json.dumps(config.dict()), "id": merchant_id, "user_id": user_id}, ) return await get_merchant(user_id, merchant_id) @@ -55,46 +59,46 @@ async def touch_merchant(user_id: str, merchant_id: str) -> Optional[Merchant]: await db.execute( f""" UPDATE nostrmarket.merchants SET time = {db.timestamp_now} - WHERE id = ? AND user_id = ? + WHERE id = :id AND user_id = :user_id """, - (merchant_id, user_id), + {"id": merchant_id, "user_id": user_id}, ) return await get_merchant(user_id, merchant_id) async def get_merchant(user_id: str, merchant_id: str) -> Optional[Merchant]: - row = await db.fetchone( - """SELECT * FROM nostrmarket.merchants WHERE user_id = ? AND id = ?""", - ( - user_id, - merchant_id, - ), + row: dict = await db.fetchone( + """SELECT * FROM nostrmarket.merchants WHERE user_id = :user_id AND id = :id""", + { + "user_id": user_id, + "id": merchant_id, + }, ) return Merchant.from_row(row) if row else None async def get_merchant_by_pubkey(public_key: str) -> Optional[Merchant]: - row = await db.fetchone( - """SELECT * FROM nostrmarket.merchants WHERE public_key = ? """, - (public_key,), + row: dict = await db.fetchone( + """SELECT * FROM nostrmarket.merchants WHERE public_key = :public_key""", + {"public_key": public_key}, ) return Merchant.from_row(row) if row else None -async def get_merchants_ids_with_pubkeys() -> List[str]: - rows = await db.fetchall( +async def get_merchants_ids_with_pubkeys() -> List[Tuple[str, str]]: + rows: list[dict] = await db.fetchall( """SELECT id, public_key FROM nostrmarket.merchants""", ) - return [(row[0], row[1]) for row in rows] + return [(row["id"], row["public_key"]) for row in rows] async def get_merchant_for_user(user_id: str) -> Optional[Merchant]: - row = await db.fetchone( - """SELECT * FROM nostrmarket.merchants WHERE user_id = ? """, - (user_id,), + row: dict = await db.fetchone( + """SELECT * FROM nostrmarket.merchants WHERE user_id = :user_id """, + {"user_id": user_id}, ) return Merchant.from_row(row) if row else None @@ -102,29 +106,31 @@ async def get_merchant_for_user(user_id: str) -> Optional[Merchant]: async def delete_merchant(merchant_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.merchants WHERE id = ?", - (merchant_id,), + "DELETE FROM nostrmarket.merchants WHERE id = :id", + { + "id": merchant_id, + }, ) ######################################## ZONES ######################################## -async def create_zone(merchant_id: str, data: PartialZone) -> Zone: +async def create_zone(merchant_id: str, data: Zone) -> Zone: zone_id = data.id or urlsafe_short_hash() await db.execute( - f""" + """ INSERT INTO nostrmarket.zones (id, merchant_id, name, currency, cost, regions) - VALUES (?, ?, ?, ?, ?, ?) + VALUES (:id, :merchant_id, :name, :currency, :cost, :regions) """, - ( - zone_id, - merchant_id, - data.name, - data.currency, - data.cost, - json.dumps(data.countries), - ), + { + "id": zone_id, + "merchant_id": merchant_id, + "name": data.name, + "currency": data.currency, + "cost": data.cost, + "regions": json.dumps(data.countries), + }, ) zone = await get_zone(merchant_id, zone_id) @@ -134,26 +140,38 @@ async def create_zone(merchant_id: str, data: PartialZone) -> Zone: async def update_zone(merchant_id: str, z: Zone) -> Optional[Zone]: await db.execute( - f"UPDATE nostrmarket.zones SET name = ?, cost = ?, regions = ? WHERE id = ? AND merchant_id = ?", - (z.name, z.cost, json.dumps(z.countries), z.id, merchant_id), + """ + UPDATE nostrmarket.zones + SET name = :name, cost = :cost, regions = :regions + WHERE id = :id AND merchant_id = :merchant_id + """, + { + "name": z.name, + "cost": z.cost, + "regions": json.dumps(z.countries), + "id": z.id, + "merchant_id": merchant_id, + }, ) + assert z.id return await get_zone(merchant_id, z.id) async def get_zone(merchant_id: str, zone_id: str) -> Optional[Zone]: - row = await db.fetchone( - "SELECT * FROM nostrmarket.zones WHERE merchant_id = ? AND id = ?", - ( - merchant_id, - zone_id, - ), + row: dict = await db.fetchone( + "SELECT * FROM nostrmarket.zones WHERE merchant_id = :merchant_id AND id = :id", + { + "merchant_id": merchant_id, + "id": zone_id, + }, ) return Zone.from_row(row) if row else None async def get_zones(merchant_id: str) -> List[Zone]: - rows = await db.fetchall( - "SELECT * FROM nostrmarket.zones WHERE merchant_id = ?", (merchant_id,) + rows: list[dict] = await db.fetchall( + "SELECT * FROM nostrmarket.zones WHERE merchant_id = :merchant_id", + {"merchant_id": merchant_id}, ) return [Zone.from_row(row) for row in rows] @@ -161,47 +179,55 @@ async def get_zones(merchant_id: str) -> List[Zone]: async def delete_zone(merchant_id: str, zone_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.zones WHERE merchant_id = ? AND id = ?", - ( - merchant_id, - zone_id, - ), + "DELETE FROM nostrmarket.zones WHERE merchant_id = :merchant_id AND id = :id", + { + "merchant_id": merchant_id, + "id": zone_id, + }, ) async def delete_merchant_zones(merchant_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.zones WHERE merchant_id = ?", (merchant_id,) + "DELETE FROM nostrmarket.zones WHERE merchant_id = ?", + {"merchant_id": merchant_id}, ) ######################################## STALL ######################################## -async def create_stall(merchant_id: str, data: PartialStall) -> Stall: +async def create_stall(merchant_id: str, data: Stall) -> Stall: stall_id = data.id or urlsafe_short_hash() await db.execute( - f""" + """ INSERT INTO nostrmarket.stalls - (merchant_id, id, wallet, name, currency, pending, event_id, event_created_at, zones, meta) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ( + merchant_id, id, wallet, name, currency, + pending, event_id, event_created_at, zones, meta + ) + VALUES + ( + :merchant_id, :id, :wallet, :name, :currency, + :pending, :event_id, :event_created_at, :zones, :meta + ) ON CONFLICT(id) DO NOTHING """, - ( - merchant_id, - stall_id, - data.wallet, - data.name, - data.currency, - data.pending, - data.event_id, - data.event_created_at, - json.dumps( + { + "merchant_id": merchant_id, + "id": stall_id, + "wallet": data.wallet, + "name": data.name, + "currency": data.currency, + "pending": data.pending, + "event_id": data.event_id, + "event_created_at": data.event_created_at, + "zones": json.dumps( [z.dict() for z in data.shipping_zones] ), # todo: cost is float. should be int for sats - json.dumps(data.config.dict()), - ), + "meta": json.dumps(data.config.dict()), + }, ) stall = await get_stall(merchant_id, stall_id) @@ -210,107 +236,129 @@ async def create_stall(merchant_id: str, data: PartialStall) -> Stall: async def get_stall(merchant_id: str, stall_id: str) -> Optional[Stall]: - row = await db.fetchone( - "SELECT * FROM nostrmarket.stalls WHERE merchant_id = ? AND id = ?", - ( - merchant_id, - stall_id, - ), + row: dict = await db.fetchone( + """ + SELECT * FROM nostrmarket.stalls + WHERE merchant_id = :merchant_id AND id = :id + """, + { + "merchant_id": merchant_id, + "id": stall_id, + }, ) return Stall.from_row(row) if row else None async def get_stalls(merchant_id: str, pending: Optional[bool] = False) -> List[Stall]: - rows = await db.fetchall( - "SELECT * FROM nostrmarket.stalls WHERE merchant_id = ? AND pending = ?", - ( - merchant_id, - pending, - ), + rows: list[dict] = await db.fetchall( + """ + SELECT * FROM nostrmarket.stalls + WHERE merchant_id = :merchant_id AND pending = :pending + """, + { + "merchant_id": merchant_id, + "pending": pending, + }, ) return [Stall.from_row(row) for row in rows] async def get_last_stall_update_time() -> int: - row = await db.fetchone( + row: dict = await db.fetchone( """ - SELECT event_created_at FROM nostrmarket.stalls + SELECT event_created_at FROM nostrmarket.stalls ORDER BY event_created_at DESC LIMIT 1 """, - (), + {}, ) - return row[0] or 0 if row else 0 + return row["event_created_at"] or 0 if row else 0 async def update_stall(merchant_id: str, stall: Stall) -> Optional[Stall]: await db.execute( - f""" - UPDATE nostrmarket.stalls SET wallet = ?, name = ?, currency = ?, pending = ?, event_id = ?, event_created_at = ?, zones = ?, meta = ? - WHERE merchant_id = ? AND id = ? + """ + UPDATE nostrmarket.stalls + SET wallet = :wallet, name = :name, currency = :currency, + pending = :pending, event_id = :event_id, + event_created_at = :event_created_at, + zones = :zones, meta = :meta + WHERE merchant_id = :merchant_id AND id = :id """, - ( - stall.wallet, - stall.name, - stall.currency, - stall.pending, - stall.event_id, - stall.event_created_at, - json.dumps( + { + "wallet": stall.wallet, + "name": stall.name, + "currency": stall.currency, + "pending": stall.pending, + "event_id": stall.event_id, + "event_created_at": stall.event_created_at, + "zones": json.dumps( [z.dict() for z in stall.shipping_zones] ), # todo: cost is float. should be int for sats - json.dumps(stall.config.dict()), - merchant_id, - stall.id, - ), + "meta": json.dumps(stall.config.dict()), + "merchant_id": merchant_id, + "id": stall.id, + }, ) + assert stall.id return await get_stall(merchant_id, stall.id) async def delete_stall(merchant_id: str, stall_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.stalls WHERE merchant_id =? AND id = ?", - ( - merchant_id, - stall_id, - ), + """ + DELETE FROM nostrmarket.stalls + WHERE merchant_id = :merchant_id AND id = :id + """, + { + "merchant_id": merchant_id, + "id": stall_id, + }, ) async def delete_merchant_stalls(merchant_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.stalls WHERE merchant_id = ?", - (merchant_id,), + "DELETE FROM nostrmarket.stalls WHERE merchant_id = :merchant_id", + {"merchant_id": merchant_id}, ) -######################################## PRODUCTS ######################################## +######################################## PRODUCTS ###################################### -async def create_product(merchant_id: str, data: PartialProduct) -> Product: +async def create_product(merchant_id: str, data: Product) -> Product: product_id = data.id or urlsafe_short_hash() await db.execute( - f""" - INSERT INTO nostrmarket.products - (merchant_id, id, stall_id, name, price, quantity, active, pending, event_id, event_created_at, image_urls, category_list, meta) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """ + INSERT INTO nostrmarket.products + ( + merchant_id, id, stall_id, name, price, quantity, + active, pending, event_id, event_created_at, + image_urls, category_list, meta + ) + VALUES ( + :merchant_id, :id, :stall_id, :name, :price, :quantity, + :active, :pending, :event_id, :event_created_at, + :image_urls, :category_list, :meta + ) ON CONFLICT(id) DO NOTHING """, - ( - merchant_id, - product_id, - data.stall_id, - data.name, - data.price, - data.quantity, - data.active, - data.pending, - data.event_id, - data.event_created_at, - json.dumps(data.images), - json.dumps(data.categories), - json.dumps(data.config.dict()), - ), + { + "merchant_id": merchant_id, + "id": product_id, + "stall_id": data.stall_id, + "name": data.name, + "price": data.price, + "quantity": data.quantity, + "active": data.active, + "pending": data.pending, + "event_id": data.event_id, + "event_created_at": data.event_created_at, + "image_urls": json.dumps(data.images), + "category_list": json.dumps(data.categories), + "meta": json.dumps(data.config.dict()), + }, ) product = await get_product(merchant_id, product_id) assert product, "Newly created product couldn't be retrieved" @@ -319,26 +367,30 @@ async def create_product(merchant_id: str, data: PartialProduct) -> Product: async def update_product(merchant_id: str, product: Product) -> Product: - + assert product.id await db.execute( - f""" - UPDATE nostrmarket.products set name = ?, price = ?, quantity = ?, active = ?, pending = ?, event_id =?, event_created_at = ?, image_urls = ?, category_list = ?, meta = ? - WHERE merchant_id = ? AND id = ? + """ + UPDATE nostrmarket.products + SET name = :name, price = :price, quantity = :quantity, + active = :active, pending = :pending, event_id =:event_id, + event_created_at = :event_created_at, image_urls = :image_urls, + category_list = :category_list, meta = :meta + WHERE merchant_id = :merchant_id AND id = :id """, - ( - product.name, - product.price, - product.quantity, - product.active, - product.pending, - product.event_id, - product.event_created_at, - json.dumps(product.images), - json.dumps(product.categories), - json.dumps(product.config.dict()), - merchant_id, - product.id, - ), + { + "name": product.name, + "price": product.price, + "quantity": product.quantity, + "active": product.active, + "pending": product.pending, + "event_id": product.event_id, + "event_created_at": product.event_created_at, + "image_urls": json.dumps(product.images), + "category_list": json.dumps(product.categories), + "meta": json.dumps(product.config.dict()), + "merchant_id": merchant_id, + "id": product.id, + }, ) updated_product = await get_product(merchant_id, product.id) assert updated_product, "Updated product couldn't be retrieved" @@ -350,33 +402,44 @@ async def update_product_quantity( product_id: str, new_quantity: int ) -> Optional[Product]: await db.execute( - f"UPDATE nostrmarket.products SET quantity = ? WHERE id = ?", - (new_quantity, product_id), + """ + UPDATE nostrmarket.products SET quantity = :quantity + WHERE id = :id + """, + {"quantity": new_quantity, "id": product_id}, ) - row = await db.fetchone( - "SELECT * FROM nostrmarket.products WHERE id = ?", - (product_id,), + row: dict = await db.fetchone( + "SELECT * FROM nostrmarket.products WHERE id = :id", + {"id": product_id}, ) return Product.from_row(row) if row else None async def get_product(merchant_id: str, product_id: str) -> Optional[Product]: - row = await db.fetchone( - "SELECT * FROM nostrmarket.products WHERE merchant_id =? AND id = ?", - ( - merchant_id, - product_id, - ), + row: dict = await db.fetchone( + """ + SELECT * FROM nostrmarket.products + WHERE merchant_id = :merchant_id AND id = :id + """, + { + "merchant_id": merchant_id, + "id": product_id, + }, ) + # TODO: remove from_row return Product.from_row(row) if row else None async def get_products( merchant_id: str, stall_id: str, pending: Optional[bool] = False ) -> List[Product]: - rows = await db.fetchall( - "SELECT * FROM nostrmarket.products WHERE merchant_id = ? AND stall_id = ? AND pending = ?", - (merchant_id, stall_id, pending), + rows: list[dict] = await db.fetchall( + """ + SELECT * FROM nostrmarket.products + WHERE merchant_id = :merchant_id + AND stall_id = :stall_id AND pending = :pending + """, + {"merchant_id": merchant_id, "stall_id": stall_id, "pending": pending}, ) return [Product.from_row(row) for row in rows] @@ -384,56 +447,67 @@ async def get_products( async def get_products_by_ids( merchant_id: str, product_ids: List[str] ) -> List[Product]: - q = ",".join(["?"] * len(product_ids)) - rows = await db.fetchall( + # todo: revisit + + keys = [] + values = {"merchant_id": merchant_id} + for i, v in enumerate(product_ids): + key = f"p_{i}" + values[key] = v + keys.append(f":{key}") + rows: list[dict] = await db.fetchall( f""" - SELECT id, stall_id, name, price, quantity, active, category_list, meta - FROM nostrmarket.products - WHERE merchant_id = ? AND pending = false AND id IN ({q}) + SELECT id, stall_id, name, price, quantity, active, category_list, meta + FROM nostrmarket.products + WHERE merchant_id = :merchant_id + AND pending = false AND id IN ({", ".join(keys)}) """, - (merchant_id, *product_ids), + values, ) return [Product.from_row(row) for row in rows] async def get_wallet_for_product(product_id: str) -> Optional[str]: - row = await db.fetchone( + row: dict = await db.fetchone( """ - SELECT s.wallet FROM nostrmarket.products p + SELECT s.wallet as wallet FROM nostrmarket.products p INNER JOIN nostrmarket.stalls s ON p.stall_id = s.id - WHERE p.id = ? AND p.pending = false AND s.pending = false + WHERE p.id = :product_id AND p.pending = false AND s.pending = false """, - (product_id,), + {"product_id": product_id}, ) - return row[0] if row else None + return row["wallet"] if row else None async def get_last_product_update_time() -> int: - row = await db.fetchone( + row: dict = await db.fetchone( """ - SELECT event_created_at FROM nostrmarket.products + SELECT event_created_at FROM nostrmarket.products ORDER BY event_created_at DESC LIMIT 1 """, - (), + {}, ) - return row[0] or 0 if row else 0 + return row["event_created_at"] or 0 if row else 0 async def delete_product(merchant_id: str, product_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.products WHERE merchant_id =? AND id = ?", - ( - merchant_id, - product_id, - ), + """ + DELETE FROM nostrmarket.products + WHERE merchant_id = :merchant_id AND id = :id + """, + { + "merchant_id": merchant_id, + "id": product_id, + }, ) async def delete_merchant_products(merchant_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.products WHERE merchant_id = ?", - (merchant_id,), + "DELETE FROM nostrmarket.products WHERE merchant_id = :merchant_id", + {"merchant_id": merchant_id}, ) @@ -442,42 +516,57 @@ async def delete_merchant_products(merchant_id: str) -> None: async def create_order(merchant_id: str, o: Order) -> Order: await db.execute( - f""" + """ INSERT INTO nostrmarket.orders ( - merchant_id, - id, - event_id, + merchant_id, + id, + event_id, event_created_at, merchant_public_key, - public_key, - address, - contact_data, - extra_data, + public_key, + address, + contact_data, + extra_data, order_items, shipping_id, - stall_id, - invoice_id, + stall_id, + invoice_id, total ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + VALUES ( + :merchant_id, + :id, + :event_id, + :event_created_at, + :merchant_public_key, + :public_key, + :address, + :contact_data, + :extra_data, + :order_items, + :shipping_id, + :stall_id, + :invoice_id, + :total + ) ON CONFLICT(event_id) DO NOTHING """, - ( - merchant_id, - o.id, - o.event_id, - o.event_created_at, - o.merchant_public_key, - o.public_key, - o.address, - json.dumps(o.contact.dict() if o.contact else {}), - json.dumps(o.extra.dict()), - json.dumps([i.dict() for i in o.items]), - o.shipping_id, - o.stall_id, - o.invoice_id, - o.total, - ), + { + "merchant_id": merchant_id, + "id": o.id, + "event_id": o.event_id, + "event_created_at": o.event_created_at, + "merchant_public_key": o.merchant_public_key, + "public_key": o.public_key, + "address": o.address, + "contact_data": json.dumps(o.contact.dict() if o.contact else {}), + "extra_data": json.dumps(o.extra.dict()), + "order_items": json.dumps([i.dict() for i in o.items]), + "shipping_id": o.shipping_id, + "stall_id": o.stall_id, + "invoice_id": o.invoice_id, + "total": o.total, + }, ) order = await get_order(merchant_id, o.id) assert order, "Newly created order couldn't be retrieved" @@ -486,38 +575,54 @@ async def create_order(merchant_id: str, o: Order) -> Order: async def get_order(merchant_id: str, order_id: str) -> Optional[Order]: - row = await db.fetchone( - "SELECT * FROM nostrmarket.orders WHERE merchant_id =? AND id = ?", - ( - merchant_id, - order_id, - ), + row: dict = await db.fetchone( + """ + SELECT * FROM nostrmarket.orders + WHERE merchant_id = :merchant_id AND id = :id + """, + { + "merchant_id": merchant_id, + "id": order_id, + }, ) return Order.from_row(row) if row else None async def get_order_by_event_id(merchant_id: str, event_id: str) -> Optional[Order]: - row = await db.fetchone( - "SELECT * FROM nostrmarket.orders WHERE merchant_id =? AND event_id =?", - ( - merchant_id, - event_id, - ), + row: dict = await db.fetchone( + """ + SELECT * FROM nostrmarket.orders + WHERE merchant_id = :merchant_id AND event_id = :event_id + """, + { + "merchant_id": merchant_id, + "event_id": event_id, + }, ) return Order.from_row(row) if row else None async def get_orders(merchant_id: str, **kwargs) -> List[Order]: q = " AND ".join( - [f"{field[0]} = ?" for field in kwargs.items() if field[1] != None] + [ + f"{field[0]} = :{field[0]}" + for field in kwargs.items() + if field[1] is not None + ] ) - values = () - if q: - q = f"AND {q}" - values = (v for v in kwargs.values() if v != None) - rows = await db.fetchall( - f"SELECT * FROM nostrmarket.orders WHERE merchant_id = ? {q} ORDER BY event_created_at DESC", - (merchant_id, *values), + values = {"merchant_id": merchant_id} + for field in kwargs.items(): + if field[1] is None: + continue + values[field[0]] = field[1] + + rows: list[dict] = await db.fetchall( + f""" + SELECT * FROM nostrmarket.orders + WHERE merchant_id = :merchant_id {q} + ORDER BY event_created_at DESC + """, + values, ) return [Order.from_row(row) for row in rows] @@ -526,26 +631,48 @@ async def get_orders_for_stall( merchant_id: str, stall_id: str, **kwargs ) -> List[Order]: q = " AND ".join( - [f"{field[0]} = ?" for field in kwargs.items() if field[1] != None] + [ + f"{field[0]} = :{field[0]}" + for field in kwargs.items() + if field[1] is not None + ] ) - values = () - if q: - q = f"AND {q}" - values = (v for v in kwargs.values() if v != None) - rows = await db.fetchall( - f"SELECT * FROM nostrmarket.orders WHERE merchant_id = ? AND stall_id = ? {q} ORDER BY time DESC", - (merchant_id, stall_id, *values), + values = {"merchant_id": merchant_id, "stall_id": stall_id} + for field in kwargs.items(): + if field[1] is None: + continue + values[field[0]] = field[1] + + rows: list[dict] = await db.fetchall( + f""" + SELECT * FROM nostrmarket.orders + WHERE merchant_id = :merchant_id AND stall_id = :stall_id {q} + ORDER BY time DESC + """, + values, ) return [Order.from_row(row) for row in rows] async def update_order(merchant_id: str, order_id: str, **kwargs) -> Optional[Order]: - q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) + q = ", ".join( + [ + f"{field[0]} = :{field[0]}" + for field in kwargs.items() + if field[1] is not None + ] + ) + values = {"merchant_id": merchant_id, "id": order_id} + for field in kwargs.items(): + if field[1] is None: + continue + values[field[0]] = field[1] await db.execute( f""" - UPDATE nostrmarket.orders SET {q} WHERE merchant_id = ? and id = ? + UPDATE nostrmarket.orders + SET {q} WHERE merchant_id = :merchant_id and id = :id """, - (*kwargs.values(), merchant_id, order_id), + values, ) return await get_order(merchant_id, order_id) @@ -553,12 +680,12 @@ async def update_order(merchant_id: str, order_id: str, **kwargs) -> Optional[Or async def update_order_paid_status(order_id: str, paid: bool) -> Optional[Order]: await db.execute( - f"UPDATE nostrmarket.orders SET paid = ? WHERE id = ?", - (paid, order_id), + "UPDATE nostrmarket.orders SET paid = :paid WHERE id = :id", + {"paid": paid, "id": order_id}, ) - row = await db.fetchone( - "SELECT * FROM nostrmarket.orders WHERE id = ?", - (order_id,), + row: dict = await db.fetchone( + "SELECT * FROM nostrmarket.orders WHERE id = :id", + {"id": order_id}, ) return Order.from_row(row) if row else None @@ -567,25 +694,29 @@ async def update_order_shipped_status( merchant_id: str, order_id: str, shipped: bool ) -> Optional[Order]: await db.execute( - f"UPDATE nostrmarket.orders SET shipped = ? WHERE merchant_id = ? AND id = ?", - (shipped, merchant_id, order_id), + """ + UPDATE nostrmarket.orders + SET shipped = :shipped + WHERE merchant_id = :merchant_id AND id = :id + """, + {"shipped": shipped, "merchant_id": merchant_id, "id": order_id}, ) - row = await db.fetchone( - "SELECT * FROM nostrmarket.orders WHERE id = ?", - (order_id,), + row: dict = await db.fetchone( + "SELECT * FROM nostrmarket.orders WHERE id = :id", + {"id": order_id}, ) return Order.from_row(row) if row else None async def delete_merchant_orders(merchant_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.orders WHERE merchant_id = ?", - (merchant_id,), + "DELETE FROM nostrmarket.orders WHERE merchant_id = :merchant_id", + {"merchant_id": merchant_id}, ) -######################################## MESSAGES ########################################L +######################################## MESSAGES ###################################### async def create_direct_message( @@ -593,21 +724,29 @@ async def create_direct_message( ) -> DirectMessage: dm_id = urlsafe_short_hash() await db.execute( - f""" - INSERT INTO nostrmarket.direct_messages (merchant_id, id, event_id, event_created_at, message, public_key, type, incoming) - VALUES (?, ?, ?, ?, ?, ?, ?, ?) + """ + INSERT INTO nostrmarket.direct_messages + ( + merchant_id, id, event_id, event_created_at, + message, public_key, type, incoming + ) + VALUES + ( + :merchant_id, :id, :event_id, :event_created_at, + :message, :public_key, :type, :incoming + ) ON CONFLICT(event_id) DO NOTHING """, - ( - merchant_id, - dm_id, - dm.event_id, - dm.event_created_at, - dm.message, - dm.public_key, - dm.type, - dm.incoming, - ), + { + "merchant_id": merchant_id, + "id": dm_id, + "event_id": dm.event_id, + "event_created_at": dm.event_created_at, + "message": dm.message, + "public_key": dm.public_key, + "type": dm.type, + "incoming": dm.incoming, + }, ) if dm.event_id: msg = await get_direct_message_by_event_id(merchant_id, dm.event_id) @@ -618,12 +757,15 @@ async def create_direct_message( async def get_direct_message(merchant_id: str, dm_id: str) -> Optional[DirectMessage]: - row = await db.fetchone( - "SELECT * FROM nostrmarket.direct_messages WHERE merchant_id = ? AND id = ?", - ( - merchant_id, - dm_id, - ), + row: dict = await db.fetchone( + """ + SELECT * FROM nostrmarket.direct_messages + WHERE merchant_id = :merchant_id AND id = :id + """, + { + "merchant_id": merchant_id, + "id": dm_id, + }, ) return DirectMessage.from_row(row) if row else None @@ -631,75 +773,85 @@ async def get_direct_message(merchant_id: str, dm_id: str) -> Optional[DirectMes async def get_direct_message_by_event_id( merchant_id: str, event_id: str ) -> Optional[DirectMessage]: - row = await db.fetchone( - "SELECT * FROM nostrmarket.direct_messages WHERE merchant_id = ? AND event_id = ?", - ( - merchant_id, - event_id, - ), + row: dict = await db.fetchone( + """ + SELECT * FROM nostrmarket.direct_messages + WHERE merchant_id = :merchant_id AND event_id = :event_id + """, + { + "merchant_id": merchant_id, + "event_id": event_id, + }, ) return DirectMessage.from_row(row) if row else None async def get_direct_messages(merchant_id: str, public_key: str) -> List[DirectMessage]: - rows = await db.fetchall( - "SELECT * FROM nostrmarket.direct_messages WHERE merchant_id = ? AND public_key = ? ORDER BY event_created_at", - (merchant_id, public_key), + rows: list[dict] = await db.fetchall( + """ + SELECT * FROM nostrmarket.direct_messages + WHERE merchant_id = :merchant_id AND public_key = :public_key + ORDER BY event_created_at + """, + {"merchant_id": merchant_id, "public_key": public_key}, ) return [DirectMessage.from_row(row) for row in rows] async def get_orders_from_direct_messages(merchant_id: str) -> List[DirectMessage]: - rows = await db.fetchall( - "SELECT * FROM nostrmarket.direct_messages WHERE merchant_id = ? AND type >= 0 ORDER BY event_created_at, type", - (merchant_id), + rows: list[dict] = await db.fetchall( + """ + SELECT * FROM nostrmarket.direct_messages + WHERE merchant_id = :merchant_id AND type >= 0 ORDER BY event_created_at, type + """, + {"merchant_id": merchant_id}, ) return [DirectMessage.from_row(row) for row in rows] async def get_last_direct_messages_time(merchant_id: str) -> int: - row = await db.fetchone( + row: dict = await db.fetchone( """ - SELECT time FROM nostrmarket.direct_messages - WHERE merchant_id = ? ORDER BY time DESC LIMIT 1 + SELECT time FROM nostrmarket.direct_messages + WHERE merchant_id = :merchant_id ORDER BY time DESC LIMIT 1 """, - (merchant_id,), + {"merchant_id": merchant_id}, ) - return row[0] if row else 0 + return row["time"] if row else 0 async def get_last_direct_messages_created_at() -> int: - row = await db.fetchone( + row: dict = await db.fetchone( """ - SELECT event_created_at FROM nostrmarket.direct_messages + SELECT event_created_at FROM nostrmarket.direct_messages ORDER BY event_created_at DESC LIMIT 1 """, - (), + {}, ) - return row[0] if row else 0 + return row["event_created_at"] if row else 0 async def delete_merchant_direct_messages(merchant_id: str) -> None: await db.execute( - "DELETE FROM nostrmarket.direct_messages WHERE merchant_id = ?", - (merchant_id,), + "DELETE FROM nostrmarket.direct_messages WHERE merchant_id = :merchant_id", + {"merchant_id": merchant_id}, ) -######################################## CUSTOMERS ######################################## +######################################## CUSTOMERS ##################################### async def create_customer(merchant_id: str, data: Customer) -> Customer: await db.execute( - f""" + """ INSERT INTO nostrmarket.customers (merchant_id, public_key, meta) - VALUES (?, ?, ?) + VALUES (:merchant_id, :public_key, :meta) """, - ( - merchant_id, - data.public_key, - json.dumps(data.profile) if data.profile else "{}", - ), + { + "merchant_id": merchant_id, + "public_key": data.public_key, + "meta": json.dumps(data.profile) if data.profile else "{}", + }, ) customer = await get_customer(merchant_id, data.public_key) @@ -708,30 +860,34 @@ async def create_customer(merchant_id: str, data: Customer) -> Customer: async def get_customer(merchant_id: str, public_key: str) -> Optional[Customer]: - row = await db.fetchone( - "SELECT * FROM nostrmarket.customers WHERE merchant_id = ? AND public_key = ?", - ( - merchant_id, - public_key, - ), + row: dict = await db.fetchone( + """ + SELECT * FROM nostrmarket.customers + WHERE merchant_id = :merchant_id AND public_key = :public_key + """, + { + "merchant_id": merchant_id, + "public_key": public_key, + }, ) return Customer.from_row(row) if row else None async def get_customers(merchant_id: str) -> List[Customer]: - rows = await db.fetchall( - "SELECT * FROM nostrmarket.customers WHERE merchant_id = ?", (merchant_id,) + rows: list[dict] = await db.fetchall( + "SELECT * FROM nostrmarket.customers WHERE merchant_id = :merchant_id", + {"merchant_id": merchant_id}, ) return [Customer.from_row(row) for row in rows] async def get_all_unique_customers() -> List[Customer]: q = """ - SELECT public_key, MAX(merchant_id) as merchant_id, MAX(event_created_at) - FROM nostrmarket.customers + SELECT public_key, MAX(merchant_id) as merchant_id, MAX(event_created_at) + FROM nostrmarket.customers GROUP BY public_key """ - rows = await db.fetchall(q) + rows: list[dict] = await db.fetchall(q) return [Customer.from_row(row) for row in rows] @@ -739,27 +895,43 @@ async def update_customer_profile( public_key: str, event_created_at: int, profile: CustomerProfile ): await db.execute( - f"UPDATE nostrmarket.customers SET event_created_at = ?, meta = ? WHERE public_key = ?", - (event_created_at, json.dumps(profile.dict()), public_key), + """ + UPDATE nostrmarket.customers + SET event_created_at = :event_created_at, meta = :meta + WHERE public_key = :public_key + """, + { + "event_created_at": event_created_at, + "meta": json.dumps(profile.dict()), + "public_key": public_key, + }, ) async def increment_customer_unread_messages(merchant_id: str, public_key: str): await db.execute( - f"UPDATE nostrmarket.customers SET unread_messages = unread_messages + 1 WHERE merchant_id = ? AND public_key = ?", - ( - merchant_id, - public_key, - ), + """ + UPDATE nostrmarket.customers + SET unread_messages = unread_messages + 1 + WHERE merchant_id = :merchant_id AND public_key = :public_key + """, + { + "merchant_id": merchant_id, + "public_key": public_key, + }, ) # ??? two merchants async def update_customer_no_unread_messages(merchant_id: str, public_key: str): await db.execute( - f"UPDATE nostrmarket.customers SET unread_messages = 0 WHERE merchant_id =? AND public_key = ?", - ( - merchant_id, - public_key, - ), + """ + UPDATE nostrmarket.customers + SET unread_messages = 0 + WHERE merchant_id = :merchant_id AND public_key = :public_key + """, + { + "merchant_id": merchant_id, + "public_key": public_key, + }, ) diff --git a/description.md b/description.md index 9b3b5ba..6446ca7 100644 --- a/description.md +++ b/description.md @@ -5,8 +5,8 @@ Buy and sell things over Nostr, using NIP15 https://github.com/nostr-protocol/ni Nostr was partly based on the the previous version of this extension "Diagon Alley", so lends itself very well to buying and sellinng over Nostr. The Nostr Market extension includes: -* A merchant client to manage products, sales and communication with customers. -* A customer client to find and order products from merchants, communicate with merchants and track status of ordered products. + +- A merchant client to manage products, sales and communication with customers. +- A customer client to find and order products from merchants, communicate with merchants and track status of ordered products. All communication happens over NIP04 encrypted DMs. - diff --git a/helpers.py b/helpers.py index f7e0d88..69d1f2f 100644 --- a/helpers.py +++ b/helpers.py @@ -1,7 +1,6 @@ import base64 -import json import secrets -from typing import Any, Optional, Tuple +from typing import Optional import secp256k1 from bech32 import bech32_decode, convertbits @@ -44,12 +43,14 @@ def encrypt_message(message: str, encryption_key, iv: Optional[bytes] = None) -> encryptor = cipher.encryptor() encrypted_message = encryptor.update(padded_data) + encryptor.finalize() - return f"{base64.b64encode(encrypted_message).decode()}?iv={base64.b64encode(iv).decode()}" + base64_message = base64.b64encode(encrypted_message).decode() + base64_iv = base64.b64encode(iv).decode() + return f"{base64_message}?iv={base64_iv}" -def sign_message_hash(private_key: str, hash: bytes) -> str: +def sign_message_hash(private_key: str, hash_: bytes) -> str: privkey = secp256k1.PrivateKey(bytes.fromhex(private_key)) - sig = privkey.schnorr_sign(hash, None, raw=True) + sig = privkey.schnorr_sign(hash_, None, raw=True) return sig.hex() diff --git a/migrations.py b/migrations.py index 005913e..c742565 100644 --- a/migrations.py +++ b/migrations.py @@ -1,5 +1,4 @@ async def m001_initial(db): - """ Initial merchants table. """ @@ -121,7 +120,10 @@ async def m001_initial(db): Create indexes for message fetching """ await db.execute( - "CREATE INDEX idx_messages_timestamp ON nostrmarket.direct_messages (time DESC)" + """ + CREATE INDEX idx_messages_timestamp + ON nostrmarket.direct_messages (time DESC) + """ ) await db.execute( "CREATE INDEX idx_event_id ON nostrmarket.direct_messages (event_id)" @@ -142,23 +144,26 @@ async def m001_initial(db): """ ) + async def m002_update_stall_and_product(db): await db.execute( - "ALTER TABLE nostrmarket.stalls ADD COLUMN pending BOOLEAN NOT NULL DEFAULT false;" - ) - await db.execute( - "ALTER TABLE nostrmarket.stalls ADD COLUMN event_id TEXT;" + """ + ALTER TABLE nostrmarket.stalls + ADD COLUMN pending BOOLEAN NOT NULL DEFAULT false; + """ ) + await db.execute("ALTER TABLE nostrmarket.stalls ADD COLUMN event_id TEXT;") await db.execute( "ALTER TABLE nostrmarket.stalls ADD COLUMN event_created_at INTEGER;" ) await db.execute( - "ALTER TABLE nostrmarket.products ADD COLUMN pending BOOLEAN NOT NULL DEFAULT false;" - ) - await db.execute( - "ALTER TABLE nostrmarket.products ADD COLUMN event_id TEXT;" + """ + ALTER TABLE nostrmarket.products + ADD COLUMN pending BOOLEAN NOT NULL DEFAULT false; + """ ) + await db.execute("ALTER TABLE nostrmarket.products ADD COLUMN event_id TEXT;") await db.execute( "ALTER TABLE nostrmarket.products ADD COLUMN event_created_at INTEGER;" ) @@ -166,15 +171,21 @@ async def m002_update_stall_and_product(db): async def m003_update_direct_message_type(db): await db.execute( - "ALTER TABLE nostrmarket.direct_messages ADD COLUMN type INTEGER NOT NULL DEFAULT -1;" + """ + ALTER TABLE nostrmarket.direct_messages + ADD COLUMN type INTEGER NOT NULL DEFAULT -1; + """ ) + async def m004_add_merchant_timestamp(db): - await db.execute( - f"ALTER TABLE nostrmarket.merchants ADD COLUMN time TIMESTAMP;" - ) + await db.execute("ALTER TABLE nostrmarket.merchants ADD COLUMN time TIMESTAMP;") + async def m005_update_product_activation(db): await db.execute( - "ALTER TABLE nostrmarket.products ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;" - ) \ No newline at end of file + """ + ALTER TABLE nostrmarket.products + ADD COLUMN active BOOLEAN NOT NULL DEFAULT true; + """ + ) diff --git a/models.py b/models.py index be04ea5..1faab7c 100644 --- a/models.py +++ b/models.py @@ -2,12 +2,10 @@ import json import time from abc import abstractmethod from enum import Enum -from sqlite3 import Row from typing import Any, List, Optional, Tuple -from pydantic import BaseModel - from lnbits.utils.exchange_rates import btc_price, fiat_amount_as_satoshis +from pydantic import BaseModel from .helpers import ( decrypt_message, @@ -30,17 +28,17 @@ class Nostrable: pass -######################################## MERCHANT ######################################## +######################################## MERCHANT ###################################### class MerchantProfile(BaseModel): - name: Optional[str] - about: Optional[str] - picture: Optional[str] + name: Optional[str] = None + about: Optional[str] = None + picture: Optional[str] = None class MerchantConfig(MerchantProfile): - event_id: Optional[str] + event_id: Optional[str] = None sync_from_nostr = False active: bool = False restore_in_progress: Optional[bool] = False @@ -56,8 +54,8 @@ class Merchant(PartialMerchant, Nostrable): id: str time: Optional[int] = 0 - def sign_hash(self, hash: bytes) -> str: - return sign_message_hash(self.private_key, hash) + def sign_hash(self, hash_: bytes) -> str: + return sign_message_hash(self.private_key, hash_) def decrypt_message(self, encrypted_message: str, public_key: str) -> str: encryption_key = get_shared_secret(self.private_key, public_key) @@ -82,8 +80,8 @@ class Merchant(PartialMerchant, Nostrable): return event @classmethod - def from_row(cls, row: Row) -> "Merchant": - merchant = cls(**dict(row)) + def from_row(cls, row: dict) -> "Merchant": + merchant = cls(**row) merchant.config = MerchantConfig(**json.loads(row["meta"])) return merchant @@ -123,20 +121,16 @@ class Merchant(PartialMerchant, Nostrable): ######################################## ZONES ######################################## -class PartialZone(BaseModel): - id: Optional[str] - name: Optional[str] +class Zone(BaseModel): + id: Optional[str] = None + name: Optional[str] = None currency: str cost: float countries: List[str] = [] - -class Zone(PartialZone): - id: str - @classmethod - def from_row(cls, row: Row) -> "Zone": - zone = cls(**dict(row)) + def from_row(cls, row: dict) -> "Zone": + zone = cls(**row) zone.countries = json.loads(row["regions"]) return zone @@ -145,12 +139,12 @@ class Zone(PartialZone): class StallConfig(BaseModel): - image_url: Optional[str] - description: Optional[str] + image_url: Optional[str] = None + description: Optional[str] = None -class PartialStall(BaseModel): - id: Optional[str] +class Stall(BaseModel, Nostrable): + id: Optional[str] = None wallet: str name: str currency: str = "sat" @@ -159,8 +153,8 @@ class PartialStall(BaseModel): pending: bool = False """Last published nostr event for this Stall""" - event_id: Optional[str] - event_created_at: Optional[int] + event_id: Optional[str] = None + event_created_at: Optional[int] = None def validate_stall(self): for z in self.shipping_zones: @@ -169,10 +163,6 @@ class PartialStall(BaseModel): f"Sipping zone '{z.name}' has different currency than stall." ) - -class Stall(PartialStall, Nostrable): - id: str - def to_nostr_event(self, pubkey: str) -> NostrEvent: content = { "id": self.id, @@ -181,6 +171,7 @@ class Stall(PartialStall, Nostrable): "currency": self.currency, "shipping": [dict(z) for z in self.shipping_zones], } + assert self.id event = NostrEvent( pubkey=pubkey, created_at=round(time.time()), @@ -197,7 +188,7 @@ class Stall(PartialStall, Nostrable): pubkey=pubkey, created_at=round(time.time()), kind=5, - tags=[["e", self.event_id]], + tags=[["e", self.event_id or ""]], content=f"Stall '{self.name}' deleted", ) delete_event.id = delete_event.event_id @@ -205,14 +196,14 @@ class Stall(PartialStall, Nostrable): return delete_event @classmethod - def from_row(cls, row: Row) -> "Stall": - stall = cls(**dict(row)) + def from_row(cls, row: dict) -> "Stall": + stall = cls(**row) stall.config = StallConfig(**json.loads(row["meta"])) stall.shipping_zones = [Zone(**z) for z in json.loads(row["zones"])] return stall -######################################## PRODUCTS ######################################## +######################################## PRODUCTS ###################################### class ProductShippingCost(BaseModel): @@ -221,15 +212,15 @@ class ProductShippingCost(BaseModel): class ProductConfig(BaseModel): - description: Optional[str] - currency: Optional[str] + description: Optional[str] = None + currency: Optional[str] = None use_autoreply: Optional[bool] = False - autoreply_message: Optional[str] - shipping: Optional[List[ProductShippingCost]] = [] + autoreply_message: Optional[str] = None + shipping: List[ProductShippingCost] = [] -class PartialProduct(BaseModel): - id: Optional[str] +class Product(BaseModel, Nostrable): + id: Optional[str] = None stall_id: str name: str categories: List[str] = [] @@ -241,12 +232,8 @@ class PartialProduct(BaseModel): config: ProductConfig = ProductConfig() """Last published nostr event for this Product""" - event_id: Optional[str] - event_created_at: Optional[int] - - -class Product(PartialProduct, Nostrable): - id: str + event_id: Optional[str] = None + event_created_at: Optional[int] = None def to_nostr_event(self, pubkey: str) -> NostrEvent: content = { @@ -259,16 +246,17 @@ class Product(PartialProduct, Nostrable): "price": self.price, "quantity": self.quantity, "active": self.active, - "shipping": [dict(s) for s in self.config.shipping or []] + "shipping": [dict(s) for s in self.config.shipping or []], } categories = [["t", tag] for tag in self.categories] + assert self.id if self.active: event = NostrEvent( pubkey=pubkey, created_at=round(time.time()), kind=30018, - tags=[["d", self.id]] + categories, + tags=[["d", self.id], *categories], content=json.dumps(content, separators=(",", ":"), ensure_ascii=False), ) event.id = event.event_id @@ -282,7 +270,7 @@ class Product(PartialProduct, Nostrable): pubkey=pubkey, created_at=round(time.time()), kind=5, - tags=[["e", self.event_id]], + tags=[["e", self.event_id or ""]], content=f"Product '{self.name}' deleted", ) delete_event.id = delete_event.event_id @@ -290,8 +278,8 @@ class Product(PartialProduct, Nostrable): return delete_event @classmethod - def from_row(cls, row: Row) -> "Product": - product = cls(**dict(row)) + def from_row(cls, row: dict) -> "Product": + product = cls(**row) product.config = ProductConfig(**json.loads(row["meta"])) product.images = json.loads(row["image_urls"]) if "image_urls" in row else [] product.categories = json.loads(row["category_list"]) @@ -302,6 +290,12 @@ class ProductOverview(BaseModel): id: str name: str price: float + product_shipping_cost: Optional[float] = None + + @classmethod + def from_product(cls, p: Product) -> "ProductOverview": + assert p.id + return ProductOverview(id=p.id, name=p.name, price=p.price) ######################################## ORDERS ######################################## @@ -313,9 +307,9 @@ class OrderItem(BaseModel): class OrderContact(BaseModel): - nostr: Optional[str] - phone: Optional[str] - email: Optional[str] + nostr: Optional[str] = None + phone: Optional[str] = None + email: Optional[str] = None class OrderExtra(BaseModel): @@ -324,27 +318,33 @@ class OrderExtra(BaseModel): btc_price: str shipping_cost: float = 0 shipping_cost_sat: float = 0 - fail_message: Optional[str] + fail_message: Optional[str] = None @classmethod async def from_products(cls, products: List[Product]): currency = products[0].config.currency if len(products) else "sat" exchange_rate = ( - (await btc_price(currency)) if currency and currency != "sat" else 1 + await btc_price(currency) if currency and currency != "sat" else 1 + ) + + products_overview = [ProductOverview.from_product(p) for p in products] + return OrderExtra( + products=products_overview, + currency=currency or "sat", + btc_price=str(exchange_rate), ) - return OrderExtra(products=products, currency=currency, btc_price=exchange_rate) class PartialOrder(BaseModel): id: str - event_id: Optional[str] - event_created_at: Optional[int] + event_id: Optional[str] = None + event_created_at: Optional[int] = None public_key: str merchant_public_key: str shipping_id: str items: List[OrderItem] - contact: Optional[OrderContact] - address: Optional[str] + contact: Optional[OrderContact] = None + address: Optional[str] = None def validate_order(self): assert len(self.items) != 0, f"Order has no items. Order: '{self.id}'" @@ -383,10 +383,11 @@ class PartialOrder(BaseModel): } product_cost: float = 0 # todo + currency = "sat" for item in self.items: assert item.quantity > 0, "Quantity cannot be negative" - price = product_prices[item.product_id]["price"] - currency = product_prices[item.product_id]["currency"] + price = float(str(product_prices[item.product_id]["price"])) + currency = str(product_prices[item.product_id]["currency"]) if currency != "sat": price = await fiat_amount_as_satoshis(price, currency) product_cost += item.quantity * price @@ -404,30 +405,39 @@ class PartialOrder(BaseModel): if len(products) == 0: return "[No Products]" receipt = "" - product_prices = {} + product_prices: dict[str, ProductOverview] = {} for p in products: product_shipping_cost = next( (s.cost for s in p.config.shipping if s.id == shipping_id), 0 ) - product_prices[p.id] = { - "name": p.name, - "price": p.price, - "product_shipping_cost": product_shipping_cost - } + assert p.id + product_prices[p.id] = ProductOverview( + id=p.id, + name=p.name, + price=p.price, + product_shipping_cost=product_shipping_cost, + ) currency = products[0].config.currency or "sat" products_cost: float = 0 # todo items_receipts = [] for item in self.items: prod = product_prices[item.product_id] - price = prod["price"] + prod["product_shipping_cost"] + price = prod.price + (prod.product_shipping_cost or 0) products_cost += item.quantity * price - items_receipts.append(f"""[{prod["name"]}: {item.quantity} x ({prod["price"]} + {prod["product_shipping_cost"]}) = {item.quantity * price} {currency}] """) + items_receipts.append( + f"""[{prod.name}: {item.quantity} x ({prod.price}""" + f""" + {prod.product_shipping_cost})""" + f""" = {item.quantity * price} {currency}] """ + ) receipt = "; ".join(items_receipts) - receipt += f"[Products cost: {products_cost} {currency}] [Stall shipping cost: {stall_shipping_cost} {currency}]; " + receipt += ( + f"[Products cost: {products_cost} {currency}] " + f"[Stall shipping cost: {stall_shipping_cost} {currency}]; " + ) receipt += f"[Total: {products_cost + stall_shipping_cost} {currency}]" return receipt @@ -439,23 +449,23 @@ class Order(PartialOrder): total: float paid: bool = False shipped: bool = False - time: Optional[int] + time: Optional[int] = None extra: OrderExtra @classmethod - def from_row(cls, row: Row) -> "Order": + def from_row(cls, row: dict) -> "Order": contact = OrderContact(**json.loads(row["contact_data"])) extra = OrderExtra(**json.loads(row["extra_data"])) items = [OrderItem(**z) for z in json.loads(row["order_items"])] - order = cls(**dict(row), contact=contact, items=items, extra=extra) + order = cls(**row, contact=contact, items=items, extra=extra) return order class OrderStatusUpdate(BaseModel): id: str - message: Optional[str] - paid: Optional[bool] - shipped: Optional[bool] + message: Optional[str] = None + paid: Optional[bool] = False + shipped: Optional[bool] = None class OrderReissue(BaseModel): @@ -470,11 +480,11 @@ class PaymentOption(BaseModel): class PaymentRequest(BaseModel): id: str - message: Optional[str] + message: Optional[str] = None payment_options: List[PaymentOption] -######################################## MESSAGE ######################################## +######################################## MESSAGE ####################################### class DirectMessageType(Enum): @@ -487,13 +497,13 @@ class DirectMessageType(Enum): class PartialDirectMessage(BaseModel): - event_id: Optional[str] - event_created_at: Optional[int] + event_id: Optional[str] = None + event_created_at: Optional[int] = None message: str public_key: str type: int = DirectMessageType.PLAIN_TEXT.value incoming: bool = False - time: Optional[int] + time: Optional[int] = None @classmethod def parse_message(cls, msg) -> Tuple[DirectMessageType, Optional[Any]]: @@ -511,29 +521,28 @@ class DirectMessage(PartialDirectMessage): id: str @classmethod - def from_row(cls, row: Row) -> "DirectMessage": - dm = cls(**dict(row)) - return dm + def from_row(cls, row: dict) -> "DirectMessage": + return cls(**row) -######################################## CUSTOMERS ######################################## +######################################## CUSTOMERS ##################################### class CustomerProfile(BaseModel): - name: Optional[str] - about: Optional[str] + name: Optional[str] = None + about: Optional[str] = None class Customer(BaseModel): merchant_id: str public_key: str - event_created_at: Optional[int] - profile: Optional[CustomerProfile] + event_created_at: Optional[int] = None + profile: Optional[CustomerProfile] = None unread_messages: int = 0 @classmethod - def from_row(cls, row: Row) -> "Customer": - customer = cls(**dict(row)) + def from_row(cls, row: dict) -> "Customer": + customer = cls(**row) customer.profile = ( CustomerProfile(**json.loads(row["meta"])) if "meta" in row else None ) diff --git a/nostr/event.py b/nostr/event.py index c92a4fa..a3216cf 100644 --- a/nostr/event.py +++ b/nostr/event.py @@ -13,7 +13,7 @@ class NostrEvent(BaseModel): kind: int tags: List[List[str]] = [] content: str = "" - sig: Optional[str] + sig: Optional[str] = None def serialize(self) -> List: return [0, self.pubkey, self.created_at, self.kind, self.tags, self.content] @@ -41,7 +41,7 @@ class NostrEvent(BaseModel): f"Invalid public key: '{self.pubkey}' for event '{self.id}'" ) - valid_signature = pub_key.schnorr_verify( + valid_signature = self.sig and pub_key.schnorr_verify( bytes.fromhex(event_id), bytes.fromhex(self.sig), None, raw=True ) if not valid_signature: diff --git a/nostr/nostr_client.py b/nostr/nostr_client.py index 7353e44..5e902e4 100644 --- a/nostr/nostr_client.py +++ b/nostr/nostr_client.py @@ -2,12 +2,12 @@ import asyncio import json from asyncio import Queue from threading import Thread -from typing import Callable, List +from typing import Callable, List, Optional from loguru import logger from websocket import WebSocketApp -from lnbits.app import settings +from lnbits.settings import settings from lnbits.helpers import encrypt_internal_message, urlsafe_short_hash from .event import NostrEvent @@ -17,7 +17,7 @@ class NostrClient: def __init__(self): self.recieve_event_queue: Queue = Queue() self.send_req_queue: Queue = Queue() - self.ws: WebSocketApp = None + self.ws: Optional[WebSocketApp] = None self.subscription_id = "nostrmarket-" + urlsafe_short_hash()[:32] self.running = False @@ -30,7 +30,6 @@ class NostrClient: async def connect_to_nostrclient_ws(self) -> WebSocketApp: logger.debug(f"Connecting to websockets for 'nostrclient' extension...") - relay_endpoint = encrypt_internal_message("relay") on_open, on_message, on_error, on_close = self._ws_handlers() ws = WebSocketApp( @@ -57,19 +56,18 @@ class NostrClient: await asyncio.sleep(5) req = await self.send_req_queue.get() + assert self.ws self.ws.send(json.dumps(req)) except Exception as ex: logger.warning(ex) await asyncio.sleep(60) - async def get_event(self): value = await self.recieve_event_queue.get() if isinstance(value, ValueError): raise value return value - async def publish_nostr_event(self, e: NostrEvent): await self.send_req_queue.put(["EVENT", e.dict()]) @@ -119,7 +117,7 @@ class NostrClient: asyncio.create_task(unsubscribe_with_delay(subscription_id, duration)) - async def user_profile_temp_subscribe(self, public_key: str, duration=5) -> List: + async def user_profile_temp_subscribe(self, public_key: str, duration=5): try: profile_filter = [{"kinds": [0], "authors": [public_key]}] subscription_id = "profile-" + urlsafe_short_hash()[:32] diff --git a/package.json b/package.json new file mode 100644 index 0000000..4917983 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "nostrmarket", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "prettier": "^3.2.5", + "pyright": "^1.1.358" + } +} diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..09ccb84 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2616 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "aiosqlite" +version = "0.20.0" +description = "asyncio bridge to the standard sqlite3 module" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiosqlite-0.20.0-py3-none-any.whl", hash = "sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6"}, + {file = "aiosqlite-0.20.0.tar.gz", hash = "sha256:6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7"}, +] + +[package.dependencies] +typing_extensions = ">=4.0" + +[package.extras] +dev = ["attribution (==1.7.0)", "black (==24.2.0)", "coverage[toml] (==7.4.1)", "flake8 (==7.0.0)", "flake8-bugbear (==24.2.6)", "flit (==3.9.0)", "mypy (==1.8.0)", "ufmt (==2.3.0)", "usort (==1.0.8.post1)"] +docs = ["sphinx (==7.2.6)", "sphinx-mdinclude (==0.5.3)"] + +[[package]] +name = "anyio" +version = "4.6.2.post1" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +files = [ + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "asn1crypto" +version = "1.5.1" +description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" +optional = false +python-versions = "*" +files = [ + {file = "asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"}, + {file = "asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"}, +] + +[[package]] +name = "async-timeout" +version = "5.0.0" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async_timeout-5.0.0-py3-none-any.whl", hash = "sha256:904719a4bd6e0520047d0ddae220aabee67b877f7ca17bf8cea20f67f6247ae0"}, + {file = "async_timeout-5.0.0.tar.gz", hash = "sha256:49675ec889daacfe65ff66d2dde7dd1447a6f4b2f23721022e4ba121f8772a85"}, +] + +[[package]] +name = "asyncpg" +version = "0.29.0" +description = "An asyncio PostgreSQL driver" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "asyncpg-0.29.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72fd0ef9f00aeed37179c62282a3d14262dbbafb74ec0ba16e1b1864d8a12169"}, + {file = "asyncpg-0.29.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52e8f8f9ff6e21f9b39ca9f8e3e33a5fcdceaf5667a8c5c32bee158e313be385"}, + {file = "asyncpg-0.29.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e6823a7012be8b68301342ba33b4740e5a166f6bbda0aee32bc01638491a22"}, + {file = "asyncpg-0.29.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:746e80d83ad5d5464cfbf94315eb6744222ab00aa4e522b704322fb182b83610"}, + {file = "asyncpg-0.29.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ff8e8109cd6a46ff852a5e6bab8b0a047d7ea42fcb7ca5ae6eaae97d8eacf397"}, + {file = "asyncpg-0.29.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:97eb024685b1d7e72b1972863de527c11ff87960837919dac6e34754768098eb"}, + {file = "asyncpg-0.29.0-cp310-cp310-win32.whl", hash = "sha256:5bbb7f2cafd8d1fa3e65431833de2642f4b2124be61a449fa064e1a08d27e449"}, + {file = "asyncpg-0.29.0-cp310-cp310-win_amd64.whl", hash = "sha256:76c3ac6530904838a4b650b2880f8e7af938ee049e769ec2fba7cd66469d7772"}, + {file = "asyncpg-0.29.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4900ee08e85af01adb207519bb4e14b1cae8fd21e0ccf80fac6aa60b6da37b4"}, + {file = "asyncpg-0.29.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a65c1dcd820d5aea7c7d82a3fdcb70e096f8f70d1a8bf93eb458e49bfad036ac"}, + {file = "asyncpg-0.29.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b52e46f165585fd6af4863f268566668407c76b2c72d366bb8b522fa66f1870"}, + {file = "asyncpg-0.29.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc600ee8ef3dd38b8d67421359779f8ccec30b463e7aec7ed481c8346decf99f"}, + {file = "asyncpg-0.29.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:039a261af4f38f949095e1e780bae84a25ffe3e370175193174eb08d3cecab23"}, + {file = "asyncpg-0.29.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6feaf2d8f9138d190e5ec4390c1715c3e87b37715cd69b2c3dfca616134efd2b"}, + {file = "asyncpg-0.29.0-cp311-cp311-win32.whl", hash = "sha256:1e186427c88225ef730555f5fdda6c1812daa884064bfe6bc462fd3a71c4b675"}, + {file = "asyncpg-0.29.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfe73ffae35f518cfd6e4e5f5abb2618ceb5ef02a2365ce64f132601000587d3"}, + {file = "asyncpg-0.29.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6011b0dc29886ab424dc042bf9eeb507670a3b40aece3439944006aafe023178"}, + {file = "asyncpg-0.29.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b544ffc66b039d5ec5a7454667f855f7fec08e0dfaf5a5490dfafbb7abbd2cfb"}, + {file = "asyncpg-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d84156d5fb530b06c493f9e7635aa18f518fa1d1395ef240d211cb563c4e2364"}, + {file = "asyncpg-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54858bc25b49d1114178d65a88e48ad50cb2b6f3e475caa0f0c092d5f527c106"}, + {file = "asyncpg-0.29.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bde17a1861cf10d5afce80a36fca736a86769ab3579532c03e45f83ba8a09c59"}, + {file = "asyncpg-0.29.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:37a2ec1b9ff88d8773d3eb6d3784dc7e3fee7756a5317b67f923172a4748a175"}, + {file = "asyncpg-0.29.0-cp312-cp312-win32.whl", hash = "sha256:bb1292d9fad43112a85e98ecdc2e051602bce97c199920586be83254d9dafc02"}, + {file = "asyncpg-0.29.0-cp312-cp312-win_amd64.whl", hash = "sha256:2245be8ec5047a605e0b454c894e54bf2ec787ac04b1cb7e0d3c67aa1e32f0fe"}, + {file = "asyncpg-0.29.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0009a300cae37b8c525e5b449233d59cd9868fd35431abc470a3e364d2b85cb9"}, + {file = "asyncpg-0.29.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cad1324dbb33f3ca0cd2074d5114354ed3be2b94d48ddfd88af75ebda7c43cc"}, + {file = "asyncpg-0.29.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:012d01df61e009015944ac7543d6ee30c2dc1eb2f6b10b62a3f598beb6531548"}, + {file = "asyncpg-0.29.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000c996c53c04770798053e1730d34e30cb645ad95a63265aec82da9093d88e7"}, + {file = "asyncpg-0.29.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e0bfe9c4d3429706cf70d3249089de14d6a01192d617e9093a8e941fea8ee775"}, + {file = "asyncpg-0.29.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:642a36eb41b6313ffa328e8a5c5c2b5bea6ee138546c9c3cf1bffaad8ee36dd9"}, + {file = "asyncpg-0.29.0-cp38-cp38-win32.whl", hash = "sha256:a921372bbd0aa3a5822dd0409da61b4cd50df89ae85150149f8c119f23e8c408"}, + {file = "asyncpg-0.29.0-cp38-cp38-win_amd64.whl", hash = "sha256:103aad2b92d1506700cbf51cd8bb5441e7e72e87a7b3a2ca4e32c840f051a6a3"}, + {file = "asyncpg-0.29.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5340dd515d7e52f4c11ada32171d87c05570479dc01dc66d03ee3e150fb695da"}, + {file = "asyncpg-0.29.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e17b52c6cf83e170d3d865571ba574577ab8e533e7361a2b8ce6157d02c665d3"}, + {file = "asyncpg-0.29.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f100d23f273555f4b19b74a96840aa27b85e99ba4b1f18d4ebff0734e78dc090"}, + {file = "asyncpg-0.29.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48e7c58b516057126b363cec8ca02b804644fd012ef8e6c7e23386b7d5e6ce83"}, + {file = "asyncpg-0.29.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9ea3f24eb4c49a615573724d88a48bd1b7821c890c2effe04f05382ed9e8810"}, + {file = "asyncpg-0.29.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8d36c7f14a22ec9e928f15f92a48207546ffe68bc412f3be718eedccdf10dc5c"}, + {file = "asyncpg-0.29.0-cp39-cp39-win32.whl", hash = "sha256:797ab8123ebaed304a1fad4d7576d5376c3a006a4100380fb9d517f0b59c1ab2"}, + {file = "asyncpg-0.29.0-cp39-cp39-win_amd64.whl", hash = "sha256:cce08a178858b426ae1aa8409b5cc171def45d4293626e7aa6510696d46decd8"}, + {file = "asyncpg-0.29.0.tar.gz", hash = "sha256:d1c49e1f44fffafd9a55e1a9b101590859d881d639ea2922516f5d9c512d354e"}, +] + +[package.dependencies] +async-timeout = {version = ">=4.0.3", markers = "python_version < \"3.12.0\""} + +[package.extras] +docs = ["Sphinx (>=5.3.0,<5.4.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["flake8 (>=6.1,<7.0)", "uvloop (>=0.15.3)"] + +[[package]] +name = "base58" +version = "2.1.1" +description = "Base58 and Base58Check implementation." +optional = false +python-versions = ">=3.5" +files = [ + {file = "base58-2.1.1-py3-none-any.whl", hash = "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2"}, + {file = "base58-2.1.1.tar.gz", hash = "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c"}, +] + +[package.extras] +tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", "pytest-cov", "pytest-flake8"] + +[[package]] +name = "bcrypt" +version = "4.2.0" +description = "Modern password hashing for your software and your servers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bcrypt-4.2.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:096a15d26ed6ce37a14c1ac1e48119660f21b24cba457f160a4b830f3fe6b5cb"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c02d944ca89d9b1922ceb8a46460dd17df1ba37ab66feac4870f6862a1533c00"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d84cf6d877918620b687b8fd1bf7781d11e8a0998f576c7aa939776b512b98d"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1bb429fedbe0249465cdd85a58e8376f31bb315e484f16e68ca4c786dcc04291"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:655ea221910bcac76ea08aaa76df427ef8625f92e55a8ee44fbf7753dbabb328"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:1ee38e858bf5d0287c39b7a1fc59eec64bbf880c7d504d3a06a96c16e14058e7"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0da52759f7f30e83f1e30a888d9163a81353ef224d82dc58eb5bb52efcabc399"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3698393a1b1f1fd5714524193849d0c6d524d33523acca37cd28f02899285060"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:762a2c5fb35f89606a9fde5e51392dad0cd1ab7ae64149a8b935fe8d79dd5ed7"}, + {file = "bcrypt-4.2.0-cp37-abi3-win32.whl", hash = "sha256:5a1e8aa9b28ae28020a3ac4b053117fb51c57a010b9f969603ed885f23841458"}, + {file = "bcrypt-4.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:8f6ede91359e5df88d1f5c1ef47428a4420136f3ce97763e31b86dd8280fbdf5"}, + {file = "bcrypt-4.2.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:c52aac18ea1f4a4f65963ea4f9530c306b56ccd0c6f8c8da0c06976e34a6e841"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3bbbfb2734f0e4f37c5136130405332640a1e46e6b23e000eeff2ba8d005da68"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3413bd60460f76097ee2e0a493ccebe4a7601918219c02f503984f0a7ee0aebe"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8d7bb9c42801035e61c109c345a28ed7e84426ae4865511eb82e913df18f58c2"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d3a6d28cb2305b43feac298774b997e372e56c7c7afd90a12b3dc49b189151c"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9c1c4ad86351339c5f320ca372dfba6cb6beb25e8efc659bedd918d921956bae"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:27fe0f57bb5573104b5a6de5e4153c60814c711b29364c10a75a54bb6d7ff48d"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8ac68872c82f1add6a20bd489870c71b00ebacd2e9134a8aa3f98a0052ab4b0e"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cb2a8ec2bc07d3553ccebf0746bbf3d19426d1c6d1adbd4fa48925f66af7b9e8"}, + {file = "bcrypt-4.2.0-cp39-abi3-win32.whl", hash = "sha256:77800b7147c9dc905db1cba26abe31e504d8247ac73580b4aa179f98e6608f34"}, + {file = "bcrypt-4.2.0-cp39-abi3-win_amd64.whl", hash = "sha256:61ed14326ee023917ecd093ee6ef422a72f3aec6f07e21ea5f10622b735538a9"}, + {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:39e1d30c7233cfc54f5c3f2c825156fe044efdd3e0b9d309512cc514a263ec2a"}, + {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f4f4acf526fcd1c34e7ce851147deedd4e26e6402369304220250598b26448db"}, + {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1ff39b78a52cf03fdf902635e4c81e544714861ba3f0efc56558979dd4f09170"}, + {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:373db9abe198e8e2c70d12b479464e0d5092cc122b20ec504097b5f2297ed184"}, + {file = "bcrypt-4.2.0.tar.gz", hash = "sha256:cf69eaf5185fd58f268f805b505ce31f9b9fc2d64b376642164e9244540c1221"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + +[[package]] +name = "bech32" +version = "1.2.0" +description = "Reference implementation for Bech32 and segwit addresses." +optional = false +python-versions = ">=3.5" +files = [ + {file = "bech32-1.2.0-py3-none-any.whl", hash = "sha256:990dc8e5a5e4feabbdf55207b5315fdd9b73db40be294a19b3752cde9e79d981"}, + {file = "bech32-1.2.0.tar.gz", hash = "sha256:7d6db8214603bd7871fcfa6c0826ef68b85b0abd90fa21c285a9c5e21d2bd899"}, +] + +[[package]] +name = "bitarray" +version = "2.9.3" +description = "efficient arrays of booleans -- C extension" +optional = false +python-versions = "*" +files = [ + {file = "bitarray-2.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2cf5f5400636c7dda797fd681795ce63932458620fe8c40955890380acba9f62"}, + {file = "bitarray-2.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3487b4718ffa5942fab777835ee36085f8dda7ec4bd0b28433efb117f84852b6"}, + {file = "bitarray-2.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10f44b1e4994035408bea54d7bf0aec79744cad709706bedf28091a48bb7f1a4"}, + {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb5c16f97c65add6535748a9c98c70e7ca79759c38a2eb990127fef72f76111a"}, + {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13dbfc42971ba84e9c4ba070f720df6570285a3f89187f07ef422efcb611c19f"}, + {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c28076acfbe7f9a5494d7ae98094a6e209c390c340938845f294818ebf5e4d3"}, + {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7cdd21835936d9a66477836ca23b2cb63295142cb9d9158883e2c0f1f8f6bd"}, + {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f60887ab3a46e507fa6f8544d8d4b0748da48718591dfe3fe80c62bdea60f10"}, + {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f75e1abd4a37cba3002521d3f5e2b50ef4f4a74342207cad3f52468411d5d8ba"}, + {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dc63da9695383c048b83f5ab77eab35a55bbb2e77c7b6e762eba219929b45b84"}, + {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6fe5a57b859d9bc9c2fd27c78c4b7b83158faf984202de6fb44618caeebfff10"}, + {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1fe5a37bd9441a5ecc2f6e71b43df7176fa376a542ef97484310b8b46a45649a"}, + {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8a16e42c169ca818d6a15b5dd5acd5d2a26af0fa0588e1036e0e58d01f8387d4"}, + {file = "bitarray-2.9.3-cp310-cp310-win32.whl", hash = "sha256:5e6b5e7940af3474ffaa930cd1ce8215181cbe864d6b5ddb67a15d3c15e935cd"}, + {file = "bitarray-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:c63dbb99ef2ab1281871678624f9c9a5f1682b826e668ce559275ec488b3fa8b"}, + {file = "bitarray-2.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:49fb93b488d180f5c84b79fe687c585a84bf0295ff035d63e09ee24ce1da0558"}, + {file = "bitarray-2.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c2944fb83bbc2aa7f29a713bc4f8c1318e54fa0d06a72bedd350a3fb4a4b91d8"}, + {file = "bitarray-2.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3612d9d3788dc62f1922c917b1539f1cdf02cecc9faef8ae213a8b36093136ca"}, + {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90a9300cdb7c99b1e692bb790cba8acecee1a345a83e58e28c94a0d87c522237"}, + {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1211ed66acbbb221fd7554abf4206a384d79e6192d5cb95325c5c361bbb52a74"}, + {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67757279386accf93eba76b8f97b5acf1664a3e350cbea5f300f53490f8764fd"}, + {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64e19c6a99c32f460c2613f797f77aa37d8e298891d00ea5355158cce80e11ec"}, + {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72734bd3775f43c5a75385730abb9f84fee6c627eb14f579de4be478f1615c8c"}, + {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a92703471b5d3316c7481bc1852f620f42f7a1b62be27f39d13694827635786f"}, + {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d5d77c81300ca430d4b195ccfbb629d6858258f541b6e96c6b11ec1563cd2681"}, + {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3ba8a29c0d091c952ced1607ce715f5e0524899f24333a493807d00f5938463d"}, + {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:418171d035b191dbe5e86cd2bfb5c3e1ae7d947edc22857a897d1c7251674ae5"}, + {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e0bd272eba256183be2a17488f9cb096d2e6d3435ecf2e28c1e0857c6d20749"}, + {file = "bitarray-2.9.3-cp311-cp311-win32.whl", hash = "sha256:cc3fd2b0637a619cf13e122bbcf4729ae214d5f25623675597e67c25f9edfe61"}, + {file = "bitarray-2.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1fc2a81a585dbe5e367682156e6350d908a56e2ffd6ca651b0af01994db596f"}, + {file = "bitarray-2.9.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dc47be026f76f1728af00dc7140cec8483fe2f0c476bbf2a59ef47865e00ff96"}, + {file = "bitarray-2.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:82b091742ff511cdb06f90af0d2c22e7af3dbff9b8212e2e0d88dfef6a8570b3"}, + {file = "bitarray-2.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d5edb4302a0e3a3d1d0eeb891de3c615d4cb7a446fb41c21eecdcfb29400a6f"}, + {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4786c5525069c19820549dd2f42d33632bc42959ad167138bd8ee5024b922b"}, + {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bfe2de2b4df61ccb9244871a0fdf1fff83be0c1bd7187048c3cf7f81c5fe631"}, + {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31e4f69538f95d2934587d957eea0d283162322dd1af29e57122b20b8cd60f92"}, + {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca44908b2bc08d8995770018638d62626706864f9c599b7818225a12f3dbc2c"}, + {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:279f8de5d251ee521e365df29c927d9b5732f1ed4f373d2dbbd278fcbad94ff5"}, + {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49bb631b38431c09ecd534d56ef04264397d24d18c4ee6653c84e14ae09d92d"}, + {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:192bffc93ee9a5b6c833c98d1dcc81f5633ddd726b85e18341387d0c1d51f691"}, + {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c516cec28c6511df51d87033f40ec420324a2247469b0c989d344f4d27ea37d2"}, + {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:66241cb9a1c1db294f46cd440141e57e8242874e38f3f61877f72d92ae14768a"}, + {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab1f0e7631110c89bea7b605c0c35832333eb9cc97e5de05d71c76d42a1858c9"}, + {file = "bitarray-2.9.3-cp312-cp312-win32.whl", hash = "sha256:42aa5bee6fe8ad3385eaf5c6585016bbc38a7b75efb52ce5c6f8e00e05237dfa"}, + {file = "bitarray-2.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:dc3fd647d845b94fac3652390866f921f914a17f3807a031c826f68dae3f43e3"}, + {file = "bitarray-2.9.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fcfcc1989e3e021a282624017b7fb754210f5332e933b1c3ebc79643727b6551"}, + {file = "bitarray-2.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:71b1e229a706798a9e106ca7b03d4c63455deb40b18c92950ec073a05a8f8285"}, + {file = "bitarray-2.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4bb49556d3d505d24c942a4206ad4d0d40e89fa3016a7ea6edc994d5c08d4a8e"}, + {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4466aa1e533a59d5f7fd37219d154ec3f2ba73fce3d8a2e11080ec475bc15fb"}, + {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9b75adc0fd0bf278bea89dc3d679d74e10d2df98d3d074b7f3d36f323138818"}, + {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701582bbbeac372b1cd8a3c9daf6c2336dc2d22e14373a6271d788bc4f2b6edc"}, + {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea1f119668bbdbd68008031491515e84441e505163918819994b28f295f762c"}, + {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f400bc18a70bfdb073532c3054ecd78a0e64f96ff7b6140adde5b122580ec2b"}, + {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:aacff5656fb3e15cede7d02903da2634d376aa928d7a81ec8df19b0724d7972a"}, + {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8a2ae42a14cbf766d4478d7101da6359b0648dd813e60eb3486ac56ad2f5add3"}, + {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:616698edb547d10f0b960cb9f2e8629c55a420dd4c2b1ab46706f49a1815621d"}, + {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f277c50ba184929dfeed39b6cf9468e3446093521b0aeb52bd54a21ca08f5473"}, + {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:661237739b385c90d8837d5e96b06de093cc6e610236977e198f88f5a979686e"}, + {file = "bitarray-2.9.3-cp313-cp313-win32.whl", hash = "sha256:68acec6c19d798051f178a1197b76f891985f683f95a4b12811b68e58b080f5a"}, + {file = "bitarray-2.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:3055720afdcfd7e8f630fa16db7bed7e55c9d0a1f4756195e3b250e203f3b436"}, + {file = "bitarray-2.9.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:72bf17d0e7d8a4f645655a07999d23e42472cbf2100b8dad7ce26586075241d7"}, + {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cfd332b5f1ad8c4dc3cc79ecef33c19b42d8d8e6a39fd5c9ecb5855be0b9723"}, + {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5b466ef1e48f25621c9d27e95deb5e33b8656827ed8aa530b972de73870bd1f"}, + {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:938cf26fdaf4d0adfac82d830c025523c5d36ddead0470b735286028231c1784"}, + {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0f766669e768ef9a2b23ecfa710b38b6a48da3f91755113c79320b207ae255d"}, + {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b6337c0c64044f35ddfb241143244aac707a68f34ae31a71dad115f773ccc8b"}, + {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:731b59540167f8b2b20f69f487ecee2339fc4657059906a16cb51acac17f89c3"}, + {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:4feed0539a9d6432361fc4d3820eea3a81fa631d542f166cf8430aad81a971da"}, + {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:eb65c96a42e73f35175ec738d67992ffdf054c20abee3933cfcfa2343fa1187d"}, + {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_s390x.whl", hash = "sha256:4f40ceac94d182de6135759d81289683ff3e4cf0da709bc5826a7fe00d754114"}, + {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:5b29f7844080a281635a231a37e99f0bd6f567af6cf19f4f6d212137f99a9cdf"}, + {file = "bitarray-2.9.3-cp36-cp36m-win32.whl", hash = "sha256:947cf522a3b339b73114d12417fd848fa01303dbaa7883ced4c87688dba5637c"}, + {file = "bitarray-2.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:ea794ea60d514d68777a87a74106110db7a4bbc2c46720e67010e3071afefb95"}, + {file = "bitarray-2.9.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c7bc7cb79dcac8bdce23b305e671c06eaeffb012fa065b8c33bc51df7e1733f0"}, + {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6380ad0f929ad9220abadd1c9b7234271c4b6ea9c753a88611d489e93a8f2e"}, + {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05f4e2451e2ad450b41ede8440e52c1fd798e81027e1dc2256292ec0787d3bf1"}, + {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7267885c98138f3707c710d5b08eedef150a3e5112c760cfe1200f3366fd7064"}, + {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:976957423cb41df8fe0eb811dbb53d8c5ab1ca3beec7a3ca7ff679be44a72714"}, + {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0ec5141a69f73ed6ff17ea7344d5cc166e087095bfe3661dbb42b519e76aa16"}, + {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:218a1b7c0652a3c1020f903ded0f9768c3719fb6d43a6e9d346e985292992d35"}, + {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:cf0c9ebf2df280794244e1e12ed626357506ddaa2f0d6f69efe493ae7bbf4bf7"}, + {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:c450a04a7e091b57d4c0bd1531648522cd0ef26913ad0e5dea0432ea29b0e5c1"}, + {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a212eb89a50e32ef4969387e44a7410447dc59587615e3966d090edc338a1b85"}, + {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:4269232026212ee6b73379b88a578107a6b36a6182307a49d5509686c7495261"}, + {file = "bitarray-2.9.3-cp37-cp37m-win32.whl", hash = "sha256:8a0fb358e6a43f216c3fb0871e2ac14c16563aec363c23bc2fbbb18f6201285d"}, + {file = "bitarray-2.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a8368774cdc737eec8fce6f28d0abc095fbc0edccf8fab8d29fddc264b68def9"}, + {file = "bitarray-2.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7d0724a4fef6ded914075a3385ea2d05afdeed567902f83490ed4e7e7e75d9bf"}, + {file = "bitarray-2.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0e11b37c6dff6f41ebc49914628824ceb8c8d6ebd0fda2ebe3c0fe0c63e8621e"}, + {file = "bitarray-2.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:085f4081d72c7468f82f722a9f113e03a1f7a4c132ef4c2a4e680c5d78b7db00"}, + {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b530b5fbed2900634fbc43f546e384abd72ad9c49795ff5bd6a93cac1aa9c4d8"}, + {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09ff88e4385967571146fb0d270442de39393d44198f4d108f3350cfd6486f0b"}, + {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a344bb212ddf87db4976a6711d274660a5d887da4fd3faafcdaa092152f85a6d"}, + {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc569c96b990f92fd5946d5b50501fee48b01a116a286d1de7961ebd9c6f06f3"}, + {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2fbbe7938ef8a7abe3e8519fa0578b51d2787f7171d3144e7d373551b5851fd"}, + {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0b5912fab904507b47217509b01aa903d7f98b6e725e490a7f01661f4d9a4fa7"}, + {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:0c836ccfca9cf60927256738ef234dfe500565492eff269610cdd1bca56801d0"}, + {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:af0e4441ebf51c18fc450962f1e201c96f444d63b17cc8dcf7c0b05111bd4486"}, + {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:9e9b57175fb6fe76d7ddd0647e06a25f6e23f4b54b5febf337c5a840ab37dc3b"}, + {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7f7de81721ae9492926bd067007ac974692182bb83fc8f0ba330a67f37a018bd"}, + {file = "bitarray-2.9.3-cp38-cp38-win32.whl", hash = "sha256:4beafb6b6e344385480df6611fdebfcb3579bbb40636ce1ddf5e72fb744e095f"}, + {file = "bitarray-2.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:d8eaeca98900bd6f06a29cdef57999813a67d314f661d14901d71e04f4cf9f00"}, + {file = "bitarray-2.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:413965d9d384aef90e58b959f4a39f1d5060b145c26080297b7b4cf23cf38faa"}, + {file = "bitarray-2.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2fbb56f2bb89c3a15304a6c0ea56013dc340a98337d9bbd7fc5c21451dc05f8c"}, + {file = "bitarray-2.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b8a84f39f7885627711473872d8fc58fc7a0a1e4ecd9ddf42daf9a3643432742"}, + {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45147a9c8580e857c1344d15bd49d2b4387777bd582a2ede11be2ba740653f28"}, + {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed255423dc60c6b2d5c0d90c13dea2962a31929767fdf1c525ab3210269e75c5"}, + {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4f5bd02671ea5c4ad52bbfe0e8e8197b6e8fa85dec1e93a4a05448c19354cc65"}, + {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1c99c58f044549c93fb6d4cda22678deccaed19845eaa2e6917b5b7ca058f2d"}, + {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:921ee87681e32e17d1849e11c96eb6a8a7edaa1269dd26831013daf8546bde05"}, + {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2ed97d8ec40c4658d9f9aa8f26cb473f44fa1dbccba3fa3fbe4a102e38c6a8d7"}, + {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9d7f7db37edb9c50c9aad6a18f2e87dd7dc5ff2a33406821804a03263fedb2ca"}, + {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:292f726cdb9efc744ed0a1d7453c44151526648148a28d9a2495cc7c7b2c62a8"}, + {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2cc94784238782a9376f307b1aa9a85ce77b6eded9f82d2fe062db7fdb02c645"}, + {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5051436b1d318f6ce0df3b2f8a60bfa66a54c1d9e8719d6cb6b448140e7061f2"}, + {file = "bitarray-2.9.3-cp39-cp39-win32.whl", hash = "sha256:a3d436c686ce59fd0b93438ed2c0e1d3e1716e56bce64b874d05b9f49f1ca5d1"}, + {file = "bitarray-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:f168fc45664266a560f2cb28a327041b7f69d4a7faad8ab89e0a1dd7c270a70d"}, + {file = "bitarray-2.9.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ae36787299cff41f212aee33cfe1defee13979a41552665a412b6ca3fa8f7eb8"}, + {file = "bitarray-2.9.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42afe48abb8eeb386d93e7f1165ace1dd027f136a8a31edd2b20bc57a0c071d7"}, + {file = "bitarray-2.9.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451ceecdb86bb95ae101b0d65c8c4524d692ae3666662fef8c89877ce17748c5"}, + {file = "bitarray-2.9.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4d67d3e3de2aede737b12cd75a84963700c941b77b579c14bd05517e05d7a9f"}, + {file = "bitarray-2.9.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2406d13ded84049b4238815a5821e44d6f58ba00fbb6b705b6ef8ccd88be8f03"}, + {file = "bitarray-2.9.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0db944fc2a048020fc940841ef46c0295b045d45a5a582cba69f78962a49a384"}, + {file = "bitarray-2.9.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25c603f141171a7d108773d5136d14e572c473e4cdb3fb464c39c8a138522eb2"}, + {file = "bitarray-2.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86c06b02705305cab0914d209caa24effda81316e2f2555a71a9aa399b75c5a5"}, + {file = "bitarray-2.9.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ddda45b24a802eaaca8f794e6267ff2b62de5fe7b900b76d6f662d95192bebf"}, + {file = "bitarray-2.9.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:81490623950d04870c6dd4d7e6df2eb68dd04eca8bec327895ebee8bbe0cc3c7"}, + {file = "bitarray-2.9.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a9e69ac6a514cc574891c24a50847022dac2fef8c3f4df530f92820a07337755"}, + {file = "bitarray-2.9.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:545c695ee69d26b41351ced4c76244d8b6225669fc0af3652ff8ed5a6b28325d"}, + {file = "bitarray-2.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbb2e6daabd2a64d091ac7460b0c5c5f9268199ae9a8ce32737cf5273987f1fa"}, + {file = "bitarray-2.9.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a969e5cf63144b944ee8d0a0739f53ef1ae54725b5e01258d690a8995d880526"}, + {file = "bitarray-2.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:73bbb9301ac9000f869c51db2cc5fcc6541985d3fcdcfe6e02f90c9e672a00be"}, + {file = "bitarray-2.9.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c07e346926488a85a48542d898f4168f3587ec42379fef0d18be301e08a3f27"}, + {file = "bitarray-2.9.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a26d8a14cd8ee496306f2afac34833502dd1ae826355af309333b6f252b23fe"}, + {file = "bitarray-2.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cef148ed37c892395ca182d6a235524165a9f765f4283d0a1ced891e7c43c67a"}, + {file = "bitarray-2.9.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94f35a8f0c8a50ee98a8bef9a070d0b68ecf623f20a2148cc039aba5557346a6"}, + {file = "bitarray-2.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b03207460daae828e2743874c84264e8d96a8c6156490279092b624cd5d2de08"}, + {file = "bitarray-2.9.3.tar.gz", hash = "sha256:9eff55cf189b0c37ba97156a00d640eb7392db58a8049be6f26ff2712b93fa89"}, +] + +[[package]] +name = "bitstring" +version = "4.2.3" +description = "Simple construction, analysis and modification of binary data." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bitstring-4.2.3-py3-none-any.whl", hash = "sha256:20ed0036e2fcf0323acb0f92f0b7b178516a080f3e91061470aa019ac4ede404"}, + {file = "bitstring-4.2.3.tar.gz", hash = "sha256:e0c447af3fda0d114f77b88c2d199f02f97ee7e957e6d719f40f41cf15fbb897"}, +] + +[package.dependencies] +bitarray = ">=2.9.0,<3.0.0" + +[[package]] +name = "black" +version = "24.10.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.9" +files = [ + {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, + {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, + {file = "black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f"}, + {file = "black-24.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"}, + {file = "black-24.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad"}, + {file = "black-24.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50"}, + {file = "black-24.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392"}, + {file = "black-24.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175"}, + {file = "black-24.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3"}, + {file = "black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65"}, + {file = "black-24.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f"}, + {file = "black-24.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8"}, + {file = "black-24.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981"}, + {file = "black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b"}, + {file = "black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2"}, + {file = "black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b"}, + {file = "black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd"}, + {file = "black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f"}, + {file = "black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800"}, + {file = "black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7"}, + {file = "black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d"}, + {file = "black-24.10.0.tar.gz", hash = "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.10)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "bolt11" +version = "2.1.0" +description = "A library for encoding and decoding BOLT11 payment requests." +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "bolt11-2.1.0-py3-none-any.whl", hash = "sha256:1535e441233414a9d8031a99fd3be07de4674bffda948033579404d44a42f614"}, + {file = "bolt11-2.1.0.tar.gz", hash = "sha256:177c63cd88d1eaba669eddb5937364676226253f2e9e5b77e8fe317ef32e62dd"}, +] + +[package.dependencies] +base58 = "*" +bech32 = "*" +bitstring = "*" +click = "*" +coincurve = "*" + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "cffi" +version = "1.17.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "coincurve" +version = "20.0.0" +description = "Cross-platform Python CFFI bindings for libsecp256k1" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coincurve-20.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d559b22828638390118cae9372a1bb6f6594f5584c311deb1de6a83163a0919b"}, + {file = "coincurve-20.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33d7f6ebd90fcc550f819f7f2cce2af525c342aac07f0ccda46ad8956ad9d99b"}, + {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22d70dd55d13fd427418eb41c20fde0a20a5e5f016e2b1bb94710701e759e7e0"}, + {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f18d481eaae72c169f334cde1fd22011a884e0c9c6adc3fdc1fd13df8236a3"}, + {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de1ec57f43c3526bc462be58fb97910dc1fdd5acab6c71eda9f9719a5bd7489"}, + {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a6f007c44c726b5c0b3724093c0d4fb8e294f6b6869beb02d7473b21777473a3"}, + {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0ff1f3b81330db5092c24da2102e4fcba5094f14945b3eb40746456ceabdd6d9"}, + {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f7de97694d9343f26bd1c8e081b168e5f525894c12445548ce458af227f536"}, + {file = "coincurve-20.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:e905b4b084b4f3b61e5a5d58ac2632fd1d07b7b13b4c6d778335a6ca1dafd7a3"}, + {file = "coincurve-20.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:3657bb5ed0baf1cf8cf356e7d44aa90a7902cc3dd4a435c6d4d0bed0553ad4f7"}, + {file = "coincurve-20.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44087d1126d43925bf9a2391ce5601bf30ce0dba4466c239172dc43226696018"}, + {file = "coincurve-20.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ccf0ba38b0f307a9b3ce28933f6c71dc12ef3a0985712ca09f48591afd597c8"}, + {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:566bc5986debdf8572b6be824fd4de03d533c49f3de778e29f69017ae3fe82d8"}, + {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4d70283168e146f025005c15406086513d5d35e89a60cf4326025930d45013a"}, + {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:763c6122dd7d5e7a81c86414ce360dbe9a2d4afa1ca6c853ee03d63820b3d0c5"}, + {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f00c361c356bcea386d47a191bb8ac60429f4b51c188966a201bfecaf306ff7f"}, + {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4af57bdadd2e64d117dd0b33cfefe76e90c7a6c496a7b034fc65fd01ec249b15"}, + {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a26437b7cbde13fb6e09261610b788ca2a0ca2195c62030afd1e1e0d1a62e035"}, + {file = "coincurve-20.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed51f8bba35e6c7676ad65539c3dbc35acf014fc402101fa24f6b0a15a74ab9e"}, + {file = "coincurve-20.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:594b840fc25d74118407edbbbc754b815f1bba9759dbf4f67f1c2b78396df2d3"}, + {file = "coincurve-20.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4df4416a6c0370d777aa725a25b14b04e45aa228da1251c258ff91444643f688"}, + {file = "coincurve-20.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1ccc3e4db55abf3fc0e604a187fdb05f0702bc5952e503d9a75f4ae6eeb4cb3a"}, + {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8335b1658a2ef5b3eb66d52647742fe8c6f413ad5b9d5310d7ea6d8060d40f"}, + {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ac025e485a0229fd5394e0bf6b4a75f8a4f6cee0dcf6f0b01a2ef05c5210ff"}, + {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e46e3f1c21b3330857bcb1a3a5b942f645c8bce912a8a2b252216f34acfe4195"}, + {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:df9ff9b17a1d27271bf476cf3fa92df4c151663b11a55d8cea838b8f88d83624"}, + {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4155759f071375699282e03b3d95fb473ee05c022641c077533e0d906311e57a"}, + {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0530b9dd02fc6f6c2916716974b79bdab874227f560c422801ade290e3fc5013"}, + {file = "coincurve-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:eacf9c0ce8739c84549a89c083b1f3526c8780b84517ee75d6b43d276e55f8a0"}, + {file = "coincurve-20.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:52a67bfddbd6224dfa42085c88ad176559801b57d6a8bd30d92ee040de88b7b3"}, + {file = "coincurve-20.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61e951b1d695b62376f60519a84c4facaf756eeb9c5aff975bea0942833f185d"}, + {file = "coincurve-20.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e9e548db77f4ea34c0d748dddefc698adb0ee3fab23ed19f80fb2118dac70f6"}, + {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cdbf0da0e0809366fdfff236b7eb6e663669c7b1f46361a4c4d05f5b7e94c57"}, + {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d72222b4ecd3952e8ffcbf59bc7e0d1b181161ba170b60e5c8e1f359a43bbe7e"}, + {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9add43c4807f0c17a940ce4076334c28f51d09c145cd478400e89dcfb83fb59d"}, + {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc94cceea6ec8863815134083e6221a034b1ecef822d0277cf6ad2e70009b7f"}, + {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ffbdfef6a6d147988eabaed681287a9a7e6ba45ecc0a8b94ba62ad0a7656d97"}, + {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13335c19c7e5f36eaba2a53c68073d981980d7dc7abfee68d29f2da887ccd24e"}, + {file = "coincurve-20.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:7fbfb8d16cf2bea2cf48fc5246d4cb0a06607d73bb5c57c007c9aed7509f855e"}, + {file = "coincurve-20.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4870047704cddaae7f0266a549c927407c2ba0ec92d689e3d2b511736812a905"}, + {file = "coincurve-20.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81ce41263517b0a9f43cd570c87720b3c13324929584fa28d2e4095969b6015d"}, + {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572083ccce6c7b514d482f25f394368f4ae888f478bd0b067519d33160ea2fcc"}, + {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee5bc78a31a2f1370baf28aaff3949bc48f940a12b0359d1cd2c4115742874e6"}, + {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2895d032e281c4e747947aae4bcfeef7c57eabfd9be22886c0ca4e1365c7c1f"}, + {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d3e2f21957ada0e1742edbde117bb41758fa8691b69c8d186c23e9e522ea71cd"}, + {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c2baa26b1aad1947ca07b3aa9e6a98940c5141c6bdd0f9b44d89e36da7282ffa"}, + {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7eacc7944ddf9e2b7448ecbe84753841ab9874b8c332a4f5cc3b2f184db9f4a2"}, + {file = "coincurve-20.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c293c095dc690178b822cadaaeb81de3cc0d28f8bdf8216ed23551dcce153a26"}, + {file = "coincurve-20.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:11a47083a0b7092d3eb50929f74ffd947c4a5e7035796b81310ea85289088c7a"}, + {file = "coincurve-20.0.0.tar.gz", hash = "sha256:872419e404300302e938849b6b92a196fabdad651060b559dc310e52f8392829"}, +] + +[package.dependencies] +asn1crypto = "*" +cffi = ">=1.3.0" + +[package.extras] +dev = ["coverage", "pytest", "pytest-benchmark"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cryptography" +version = "42.0.8" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, + {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, + {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, + {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, + {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, + {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, + {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, + {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + +[[package]] +name = "distlib" +version = "0.3.9" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + +[[package]] +name = "dnspython" +version = "2.7.0" +description = "DNS toolkit" +optional = false +python-versions = ">=3.9" +files = [ + {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, + {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, +] + +[package.extras] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=43)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=1.0.0)"] +idna = ["idna (>=3.7)"] +trio = ["trio (>=0.23)"] +wmi = ["wmi (>=1.5.1)"] + +[[package]] +name = "ecdsa" +version = "0.19.0" +description = "ECDSA cryptographic signature library (pure python)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.6" +files = [ + {file = "ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a"}, + {file = "ecdsa-0.19.0.tar.gz", hash = "sha256:60eaad1199659900dd0af521ed462b793bbdf867432b3948e87416ae4caf6bf8"}, +] + +[package.dependencies] +six = ">=1.9.0" + +[package.extras] +gmpy = ["gmpy"] +gmpy2 = ["gmpy2"] + +[[package]] +name = "email-validator" +version = "2.2.0" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, + {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + +[[package]] +name = "embit" +version = "0.8.0" +description = "A minimal bitcoin library for MicroPython and Python3 with a focus on embedded systems." +optional = false +python-versions = "*" +files = [ + {file = "embit-0.8.0.tar.gz", hash = "sha256:8bf4b10073c67400370ce523fb16f035fe759f6fdd987c579bdcc268d75ed770"}, +] + +[package.extras] +dev = ["black", "mkdocs", "mkdocs-material", "mkdocstrings[python]", "mypy", "pre-commit", "pytest", "pytest-cov", "requests"] + +[[package]] +name = "environs" +version = "9.5.0" +description = "simplified environment variable parsing" +optional = false +python-versions = ">=3.6" +files = [ + {file = "environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124"}, + {file = "environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9"}, +] + +[package.dependencies] +marshmallow = ">=3.0.0" +python-dotenv = "*" + +[package.extras] +dev = ["dj-database-url", "dj-email-url", "django-cache-url", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)", "pytest", "tox"] +django = ["dj-database-url", "dj-email-url", "django-cache-url"] +lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"] +tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastapi" +version = "0.115.2" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.115.2-py3-none-any.whl", hash = "sha256:61704c71286579cc5a598763905928f24ee98bfcc07aabe84cfefb98812bbc86"}, + {file = "fastapi-0.115.2.tar.gz", hash = "sha256:3995739e0b09fa12f984bce8fa9ae197b35d433750d3d312422d846e283697ee"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.37.2,<0.41.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "fastapi-sso" +version = "0.15.0" +description = "FastAPI plugin to enable SSO to most common providers (such as Facebook login, Google login and login via Microsoft Office 365 Account)" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "fastapi_sso-0.15.0-py3-none-any.whl", hash = "sha256:071e0c204181bdb6a8afad2714f9f6abad32bd8984b9e57500ff0d2b680fdb37"}, + {file = "fastapi_sso-0.15.0.tar.gz", hash = "sha256:9717c3e0f88ae7cccb43fa1827e6b85fa2621a4c41b21347ddebf719b40abc15"}, +] + +[package.dependencies] +fastapi = ">=0.80" +httpx = ">=0.23.0" +oauthlib = ">=3.1.0" +pydantic = {version = ">=1.8.0", extras = ["email"]} + +[[package]] +name = "filelock" +version = "3.16.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] + +[[package]] +name = "greenlet" +version = "3.1.1" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, + {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, + {file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"}, + {file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"}, + {file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"}, + {file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"}, + {file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"}, + {file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"}, + {file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"}, + {file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"}, + {file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"}, + {file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"}, + {file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"}, + {file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"}, + {file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"}, + {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, + {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "grpcio" +version = "1.66.1" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.8" +files = [ + {file = "grpcio-1.66.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492"}, + {file = "grpcio-1.66.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083"}, + {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a"}, + {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d"}, + {file = "grpcio-1.66.1-cp310-cp310-win32.whl", hash = "sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c"}, + {file = "grpcio-1.66.1-cp310-cp310-win_amd64.whl", hash = "sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858"}, + {file = "grpcio-1.66.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a"}, + {file = "grpcio-1.66.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1"}, + {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e"}, + {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd"}, + {file = "grpcio-1.66.1-cp311-cp311-win32.whl", hash = "sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791"}, + {file = "grpcio-1.66.1-cp311-cp311-win_amd64.whl", hash = "sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb"}, + {file = "grpcio-1.66.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a"}, + {file = "grpcio-1.66.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761"}, + {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815"}, + {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524"}, + {file = "grpcio-1.66.1-cp312-cp312-win32.whl", hash = "sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759"}, + {file = "grpcio-1.66.1-cp312-cp312-win_amd64.whl", hash = "sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734"}, + {file = "grpcio-1.66.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:ecfe735e7a59e5a98208447293ff8580e9db1e890e232b8b292dc8bd15afc0d2"}, + {file = "grpcio-1.66.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4825a3aa5648010842e1c9d35a082187746aa0cdbf1b7a2a930595a94fb10fce"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:f517fd7259fe823ef3bd21e508b653d5492e706e9f0ef82c16ce3347a8a5620c"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1fe60d0772831d96d263b53d83fb9a3d050a94b0e94b6d004a5ad111faa5b5b"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31a049daa428f928f21090403e5d18ea02670e3d5d172581670be006100db9ef"}, + {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f914386e52cbdeb5d2a7ce3bf1fdfacbe9d818dd81b6099a05b741aaf3848bb"}, + {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bff2096bdba686019fb32d2dde45b95981f0d1490e054400f70fc9a8af34b49d"}, + {file = "grpcio-1.66.1-cp38-cp38-win32.whl", hash = "sha256:aa8ba945c96e73de29d25331b26f3e416e0c0f621e984a3ebdb2d0d0b596a3b3"}, + {file = "grpcio-1.66.1-cp38-cp38-win_amd64.whl", hash = "sha256:161d5c535c2bdf61b95080e7f0f017a1dfcb812bf54093e71e5562b16225b4ce"}, + {file = "grpcio-1.66.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:d0cd7050397b3609ea51727b1811e663ffda8bda39c6a5bb69525ef12414b503"}, + {file = "grpcio-1.66.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0e6c9b42ded5d02b6b1fea3a25f036a2236eeb75d0579bfd43c0018c88bf0a3e"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:c9f80f9fad93a8cf71c7f161778ba47fd730d13a343a46258065c4deb4b550c0"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dd67ed9da78e5121efc5c510f0122a972216808d6de70953a740560c572eb44"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48b0d92d45ce3be2084b92fb5bae2f64c208fea8ceed7fccf6a7b524d3c4942e"}, + {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d813316d1a752be6f5c4360c49f55b06d4fe212d7df03253dfdae90c8a402bb"}, + {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9c9bebc6627873ec27a70fc800f6083a13c70b23a5564788754b9ee52c5aef6c"}, + {file = "grpcio-1.66.1-cp39-cp39-win32.whl", hash = "sha256:30a1c2cf9390c894c90bbc70147f2372130ad189cffef161f0432d0157973f45"}, + {file = "grpcio-1.66.1-cp39-cp39-win_amd64.whl", hash = "sha256:17663598aadbedc3cacd7bbde432f541c8e07d2496564e22b214b22c7523dac8"}, + {file = "grpcio-1.66.1.tar.gz", hash = "sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.66.1)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "http-ece" +version = "1.2.1" +description = "Encrypted Content Encoding for HTTP" +optional = false +python-versions = "*" +files = [ + {file = "http_ece-1.2.1.tar.gz", hash = "sha256:8c6ab23116bbf6affda894acfd5f2ca0fb8facbcbb72121c11c75c33e7ce8cff"}, +] + +[package.dependencies] +cryptography = ">=2.5" + +[[package]] +name = "httpcore" +version = "1.0.6" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, + {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.27.0" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "identify" +version = "2.6.1" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, + {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "importlib-resources" +version = "6.4.5" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, + {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] +type = ["pytest-mypy"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +description = "Safely pass data to untrusted environments and back." +optional = false +python-versions = ">=3.8" +files = [ + {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, + {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, +] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "limits" +version = "3.13.0" +description = "Rate limiting utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "limits-3.13.0-py3-none-any.whl", hash = "sha256:9767f7233da4255e9904b79908a728e8ec0984c0b086058b4cbbd309aea553f6"}, + {file = "limits-3.13.0.tar.gz", hash = "sha256:6571b0c567bfa175a35fed9f8a954c0c92f1c3200804282f1b8f1de4ad98a953"}, +] + +[package.dependencies] +deprecated = ">=1.2" +importlib-resources = ">=1.3" +packaging = ">=21,<25" +typing-extensions = "*" + +[package.extras] +all = ["aetcd", "coredis (>=3.4.0,<5)", "emcache (>=0.6.1)", "emcache (>=1)", "etcd3", "motor (>=3,<4)", "pymemcache (>3,<5.0.0)", "pymongo (>4.1,<5)", "redis (>3,!=4.5.2,!=4.5.3,<6.0.0)", "redis (>=4.2.0,!=4.5.2,!=4.5.3)"] +async-etcd = ["aetcd"] +async-memcached = ["emcache (>=0.6.1)", "emcache (>=1)"] +async-mongodb = ["motor (>=3,<4)"] +async-redis = ["coredis (>=3.4.0,<5)"] +etcd = ["etcd3"] +memcached = ["pymemcache (>3,<5.0.0)"] +mongodb = ["pymongo (>4.1,<5)"] +redis = ["redis (>3,!=4.5.2,!=4.5.3,<6.0.0)"] +rediscluster = ["redis (>=4.2.0,!=4.5.2,!=4.5.3)"] + +[[package]] +name = "lnbits" +version = "1.0.0rc5" +description = "LNbits, free and open-source Lightning wallet and accounts system." +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "lnbits-1.0.0rc5-py3-none-any.whl", hash = "sha256:3107a9c6711720299add7880b62c020cbf34cee2486d47f2c3ddd3f6b4a76b9d"}, + {file = "lnbits-1.0.0rc5.tar.gz", hash = "sha256:f5559efa5d9b81f89acc1510db052d6300b3e93e1d0acdc70204689501865a51"}, +] + +[package.dependencies] +aiosqlite = "0.20.0" +asyncpg = "0.29.0" +bcrypt = "4.2.0" +bech32 = "1.2.0" +bolt11 = "2.1.0" +click = "8.1.7" +ecdsa = "0.19.0" +embit = "0.8.0" +environs = "9.5.0" +fastapi = "0.115.2" +fastapi-sso = "0.15.0" +grpcio = "1.66.1" +httpx = "0.27.0" +itsdangerous = "2.2.0" +jinja2 = "3.1.4" +lnurl = "0.5.3" +loguru = "0.7.2" +packaging = "24.0" +passlib = "1.7.4" +protobuf = "5.28.0" +pycryptodomex = "3.20.0" +pydantic = "1.10.18" +pyjwt = "2.9.0" +pyln-client = "24.8.1" +pyqrcode = "1.2.1" +python-crontab = "3.2.0" +pywebpush = "1.14.1" +secp256k1 = "0.14.0" +shortuuid = "1.0.13" +slowapi = "0.1.9" +sqlalchemy = "1.4.54" +sse-starlette = "1.8.2" +typing-extensions = "4.12.2" +uvicorn = "0.30.6" +uvloop = "0.19.0" +websocket-client = "1.8.0" +websockets = "11.0.3" + +[package.extras] +breez = ["breez-sdk (==0.5.2)"] +liquid = ["wallycore (==1.3.0)"] + +[[package]] +name = "lnurl" +version = "0.5.3" +description = "LNURL implementation for Python." +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "lnurl-0.5.3-py3-none-any.whl", hash = "sha256:feaf6c60b0b7f104894ef3accbd30d23d52e038c2797c58432baea7f4a8aa952"}, + {file = "lnurl-0.5.3.tar.gz", hash = "sha256:60154bcfdbb98fb143eeca970a16d73a582f28e057a826b5f222259411c497fe"}, +] + +[package.dependencies] +bech32 = ">=1.2.0,<2.0.0" +bolt11 = ">=2.0.5,<3.0.0" +ecdsa = ">=0.19.0,<0.20.0" +httpx = ">=0.27.0,<0.28.0" +pydantic = ">=1,<2" + +[[package]] +name = "loguru" +version = "0.7.2" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"}, + {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "marshmallow" +version = "3.23.1" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +optional = false +python-versions = ">=3.9" +files = [ + {file = "marshmallow-3.23.1-py3-none-any.whl", hash = "sha256:fece2eb2c941180ea1b7fcbd4a83c51bfdd50093fdd3ad2585ee5e1df2508491"}, + {file = "marshmallow-3.23.1.tar.gz", hash = "sha256:3a8dfda6edd8dcdbf216c0ede1d1e78d230a6dc9c5a088f58c4083b974a0d468"}, +] + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] +docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)", "sphinx-version-warning (==1.1.2)"] +tests = ["pytest", "simplejson"] + +[[package]] +name = "mypy" +version = "1.13.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "passlib" +version = "1.7.4" +description = "comprehensive password hashing framework supporting over 30 schemes" +optional = false +python-versions = "*" +files = [ + {file = "passlib-1.7.4-py2.py3-none-any.whl", hash = "sha256:aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1"}, + {file = "passlib-1.7.4.tar.gz", hash = "sha256:defd50f72b65c5402ab2c573830a6978e5f202ad0d984793c8dde2c4152ebe04"}, +] + +[package.extras] +argon2 = ["argon2-cffi (>=18.2.0)"] +bcrypt = ["bcrypt (>=3.1.0)"] +build-docs = ["cloud-sptheme (>=1.10.1)", "sphinx (>=1.6)", "sphinxcontrib-fulltoc (>=1.2.0)"] +totp = ["cryptography"] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "3.8.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "protobuf" +version = "5.28.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-5.28.0-cp310-abi3-win32.whl", hash = "sha256:66c3edeedb774a3508ae70d87b3a19786445fe9a068dd3585e0cefa8a77b83d0"}, + {file = "protobuf-5.28.0-cp310-abi3-win_amd64.whl", hash = "sha256:6d7cc9e60f976cf3e873acb9a40fed04afb5d224608ed5c1a105db4a3f09c5b6"}, + {file = "protobuf-5.28.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:532627e8fdd825cf8767a2d2b94d77e874d5ddb0adefb04b237f7cc296748681"}, + {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:018db9056b9d75eb93d12a9d35120f97a84d9a919bcab11ed56ad2d399d6e8dd"}, + {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:6206afcb2d90181ae8722798dcb56dc76675ab67458ac24c0dd7d75d632ac9bd"}, + {file = "protobuf-5.28.0-cp38-cp38-win32.whl", hash = "sha256:eef7a8a2f4318e2cb2dee8666d26e58eaf437c14788f3a2911d0c3da40405ae8"}, + {file = "protobuf-5.28.0-cp38-cp38-win_amd64.whl", hash = "sha256:d001a73c8bc2bf5b5c1360d59dd7573744e163b3607fa92788b7f3d5fefbd9a5"}, + {file = "protobuf-5.28.0-cp39-cp39-win32.whl", hash = "sha256:dde9fcaa24e7a9654f4baf2a55250b13a5ea701493d904c54069776b99a8216b"}, + {file = "protobuf-5.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:853db610214e77ee817ecf0514e0d1d052dff7f63a0c157aa6eabae98db8a8de"}, + {file = "protobuf-5.28.0-py3-none-any.whl", hash = "sha256:510ed78cd0980f6d3218099e874714cdf0d8a95582e7b059b06cabad855ed0a0"}, + {file = "protobuf-5.28.0.tar.gz", hash = "sha256:dde74af0fa774fa98892209992295adbfb91da3fa98c8f67a88afe8f5a349add"}, +] + +[[package]] +name = "py-vapid" +version = "1.9.1" +description = "Simple VAPID header generation library" +optional = false +python-versions = "*" +files = [ + {file = "py_vapid-1.9.1.tar.gz", hash = "sha256:fe2b5461bf45c7baff1039df6981f03b87faa87cde0482addfa35b3fe636ac1b"}, +] + +[package.dependencies] +cryptography = ">=2.5" + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pycryptodomex" +version = "3.20.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"}, + {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"}, +] + +[[package]] +name = "pydantic" +version = "1.10.18" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e405ffcc1254d76bb0e760db101ee8916b620893e6edfbfee563b3c6f7a67c02"}, + {file = "pydantic-1.10.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e306e280ebebc65040034bff1a0a81fd86b2f4f05daac0131f29541cafd80b80"}, + {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11d9d9b87b50338b1b7de4ebf34fd29fdb0d219dc07ade29effc74d3d2609c62"}, + {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b661ce52c7b5e5f600c0c3c5839e71918346af2ef20062705ae76b5c16914cab"}, + {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c20f682defc9ef81cd7eaa485879ab29a86a0ba58acf669a78ed868e72bb89e0"}, + {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c5ae6b7c8483b1e0bf59e5f1843e4fd8fd405e11df7de217ee65b98eb5462861"}, + {file = "pydantic-1.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:74fe19dda960b193b0eb82c1f4d2c8e5e26918d9cda858cbf3f41dd28549cb70"}, + {file = "pydantic-1.10.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72fa46abace0a7743cc697dbb830a41ee84c9db8456e8d77a46d79b537efd7ec"}, + {file = "pydantic-1.10.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef0fe7ad7cbdb5f372463d42e6ed4ca9c443a52ce544472d8842a0576d830da5"}, + {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00e63104346145389b8e8f500bc6a241e729feaf0559b88b8aa513dd2065481"}, + {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae6fa2008e1443c46b7b3a5eb03800121868d5ab6bc7cda20b5df3e133cde8b3"}, + {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9f463abafdc92635da4b38807f5b9972276be7c8c5121989768549fceb8d2588"}, + {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3445426da503c7e40baccefb2b2989a0c5ce6b163679dd75f55493b460f05a8f"}, + {file = "pydantic-1.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:467a14ee2183bc9c902579bb2f04c3d3dac00eff52e252850509a562255b2a33"}, + {file = "pydantic-1.10.18-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:efbc8a7f9cb5fe26122acba1852d8dcd1e125e723727c59dcd244da7bdaa54f2"}, + {file = "pydantic-1.10.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24a4a159d0f7a8e26bf6463b0d3d60871d6a52eac5bb6a07a7df85c806f4c048"}, + {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b74be007703547dc52e3c37344d130a7bfacca7df112a9e5ceeb840a9ce195c7"}, + {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcb20d4cb355195c75000a49bb4a31d75e4295200df620f454bbc6bdf60ca890"}, + {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46f379b8cb8a3585e3f61bf9ae7d606c70d133943f339d38b76e041ec234953f"}, + {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbfbca662ed3729204090c4d09ee4beeecc1a7ecba5a159a94b5a4eb24e3759a"}, + {file = "pydantic-1.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:c6d0a9f9eccaf7f438671a64acf654ef0d045466e63f9f68a579e2383b63f357"}, + {file = "pydantic-1.10.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d5492dbf953d7d849751917e3b2433fb26010d977aa7a0765c37425a4026ff1"}, + {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe734914977eed33033b70bfc097e1baaffb589517863955430bf2e0846ac30f"}, + {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15fdbe568beaca9aacfccd5ceadfb5f1a235087a127e8af5e48df9d8a45ae85c"}, + {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c3e742f62198c9eb9201781fbebe64533a3bbf6a76a91b8d438d62b813079dbc"}, + {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:19a3bd00b9dafc2cd7250d94d5b578edf7a0bd7daf102617153ff9a8fa37871c"}, + {file = "pydantic-1.10.18-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce3fcf75b2bae99aa31bd4968de0474ebe8c8258a0110903478bd83dfee4e3b"}, + {file = "pydantic-1.10.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:335a32d72c51a313b33fa3a9b0fe283503272ef6467910338e123f90925f0f03"}, + {file = "pydantic-1.10.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34a3613c7edb8c6fa578e58e9abe3c0f5e7430e0fc34a65a415a1683b9c32d9a"}, + {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ee4e6ca1d9616797fa2e9c0bfb8815912c7d67aca96f77428e316741082a1b"}, + {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23e8ec1ce4e57b4f441fc91e3c12adba023fedd06868445a5b5f1d48f0ab3682"}, + {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:44ae8a3e35a54d2e8fa88ed65e1b08967a9ef8c320819a969bfa09ce5528fafe"}, + {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5389eb3b48a72da28c6e061a247ab224381435256eb541e175798483368fdd3"}, + {file = "pydantic-1.10.18-cp38-cp38-win_amd64.whl", hash = "sha256:069b9c9fc645474d5ea3653788b544a9e0ccd3dca3ad8c900c4c6eac844b4620"}, + {file = "pydantic-1.10.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80b982d42515632eb51f60fa1d217dfe0729f008e81a82d1544cc392e0a50ddf"}, + {file = "pydantic-1.10.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aad8771ec8dbf9139b01b56f66386537c6fe4e76c8f7a47c10261b69ad25c2c9"}, + {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941a2eb0a1509bd7f31e355912eb33b698eb0051730b2eaf9e70e2e1589cae1d"}, + {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65f7361a09b07915a98efd17fdec23103307a54db2000bb92095457ca758d485"}, + {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6951f3f47cb5ca4da536ab161ac0163cab31417d20c54c6de5ddcab8bc813c3f"}, + {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a4c5eec138a9b52c67f664c7d51d4c7234c5ad65dd8aacd919fb47445a62c86"}, + {file = "pydantic-1.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:49e26c51ca854286bffc22b69787a8d4063a62bf7d83dc21d44d2ff426108518"}, + {file = "pydantic-1.10.18-py3-none-any.whl", hash = "sha256:06a189b81ffc52746ec9c8c007f16e5167c8b0a696e1a726369327e3db7b2a82"}, + {file = "pydantic-1.10.18.tar.gz", hash = "sha256:baebdff1907d1d96a139c25136a9bb7d17e118f133a76a2ef3b845e831e3403a"}, +] + +[package.dependencies] +email-validator = {version = ">=1.0.3", optional = true, markers = "extra == \"email\""} +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pyjwt" +version = "2.9.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, + {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pyln-bolt7" +version = "1.0.246" +description = "BOLT7" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pyln-bolt7-1.0.246.tar.gz", hash = "sha256:2b53744fa21c1b12d2c9c9df153651b122e38fa65d4a5c3f2957317ee148e089"}, + {file = "pyln_bolt7-1.0.246-py3-none-any.whl", hash = "sha256:54d48ec27fdc8751762cb068b0a9f2757a58fb57933c6d8f8255d02c27eb63c5"}, +] + +[[package]] +name = "pyln-client" +version = "24.8.1" +description = "Client library and plugin library for Core Lightning" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "pyln_client-24.8.1-py3-none-any.whl", hash = "sha256:4a389de96813a23b587007f181a5d4ba37bb8a4ac6bed7074a591b6b710e4615"}, + {file = "pyln_client-24.8.1.tar.gz", hash = "sha256:47e1bcadc91df511b7dbd66059d25a6c67fb0d49953291762272abf151fe8846"}, +] + +[package.dependencies] +pyln-bolt7 = ">=1.0" +pyln-proto = ">=23" + +[[package]] +name = "pyln-proto" +version = "24.8.2" +description = "This package implements some of the Lightning Network protocol in pure python. It is intended for protocol testing and some minor tooling only. It is not deemed secure enough to handle any amount of real funds (you have been warned!)." +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "pyln_proto-24.8.2-py3-none-any.whl", hash = "sha256:9c6c080c41fff40b119ea518fae37b1c8d4e917fa55389002afceffd4850ec98"}, + {file = "pyln_proto-24.8.2.tar.gz", hash = "sha256:efa222284e2990f7227f0243acc0e9ec5acd3bb89bb66ecad9f7dfb22b09fc90"}, +] + +[package.dependencies] +base58 = ">=2.1.1,<3.0.0" +bitstring = ">=4.1.0,<5.0.0" +coincurve = ">=20,<21" +cryptography = ">=42,<43" +PySocks = ">=1,<2" + +[[package]] +name = "pyqrcode" +version = "1.2.1" +description = "A QR code generator written purely in Python with SVG, EPS, PNG and terminal output." +optional = false +python-versions = "*" +files = [ + {file = "PyQRCode-1.2.1.tar.gz", hash = "sha256:fdbf7634733e56b72e27f9bce46e4550b75a3a2c420414035cae9d9d26b234d5"}, + {file = "PyQRCode-1.2.1.zip", hash = "sha256:1b2812775fa6ff5c527977c4cd2ccb07051ca7d0bc0aecf937a43864abe5eff6"}, +] + +[package.extras] +png = ["pypng (>=0.0.13)"] + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + +[[package]] +name = "pytest" +version = "7.4.4" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.21.2" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b"}, + {file = "pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] + +[[package]] +name = "python-crontab" +version = "3.2.0" +description = "Python Crontab API" +optional = false +python-versions = "*" +files = [ + {file = "python_crontab-3.2.0-py3-none-any.whl", hash = "sha256:82cb9b6a312d41ff66fd3caf3eed7115c28c195bfb50711bc2b4b9592feb9fe5"}, + {file = "python_crontab-3.2.0.tar.gz", hash = "sha256:40067d1dd39ade3460b2ad8557c7651514cd3851deffff61c5c60e1227c5c36b"}, +] + +[package.dependencies] +python-dateutil = "*" + +[package.extras] +cron-description = ["cron-descriptor"] +cron-schedule = ["croniter"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pywebpush" +version = "1.14.1" +description = "WebPush publication library" +optional = false +python-versions = "*" +files = [ + {file = "pywebpush-1.14.1-py3-none-any.whl", hash = "sha256:2865ee65cf44375f7cbdcfd5ba915a9d84c239900c6fba2245efd8d8314a3e84"}, + {file = "pywebpush-1.14.1.tar.gz", hash = "sha256:f88d7e2bf5e87c616dfb04b8c95c119238c511659b02f735ee77cc16842855ee"}, +] + +[package.dependencies] +cryptography = ">=2.6.1" +http-ece = ">=1.1.0" +py-vapid = ">=1.7.0" +requests = ">=2.21.0" +six = ">=1.15.0" + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "ruff" +version = "0.3.7" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0e8377cccb2f07abd25e84fc5b2cbe48eeb0fea9f1719cad7caedb061d70e5ce"}, + {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:15a4d1cc1e64e556fa0d67bfd388fed416b7f3b26d5d1c3e7d192c897e39ba4b"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28bdf3d7dc71dd46929fafeec98ba89b7c3550c3f0978e36389b5631b793663"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:379b67d4f49774ba679593b232dcd90d9e10f04d96e3c8ce4a28037ae473f7bb"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c060aea8ad5ef21cdfbbe05475ab5104ce7827b639a78dd55383a6e9895b7c51"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ebf8f615dde968272d70502c083ebf963b6781aacd3079081e03b32adfe4d58a"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48098bd8f5c38897b03604f5428901b65e3c97d40b3952e38637b5404b739a2"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8a4fda219bf9024692b1bc68c9cff4b80507879ada8769dc7e985755d662ea"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c44e0149f1d8b48c4d5c33d88c677a4aa22fd09b1683d6a7ff55b816b5d074f"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3050ec0af72b709a62ecc2aca941b9cd479a7bf2b36cc4562f0033d688e44fa1"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a29cc38e4c1ab00da18a3f6777f8b50099d73326981bb7d182e54a9a21bb4ff7"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b15cc59c19edca917f51b1956637db47e200b0fc5e6e1878233d3a938384b0b"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e491045781b1e38b72c91247cf4634f040f8d0cb3e6d3d64d38dcf43616650b4"}, + {file = "ruff-0.3.7-py3-none-win32.whl", hash = "sha256:bc931de87593d64fad3a22e201e55ad76271f1d5bfc44e1a1887edd0903c7d9f"}, + {file = "ruff-0.3.7-py3-none-win_amd64.whl", hash = "sha256:5ef0e501e1e39f35e03c2acb1d1238c595b8bb36cf7a170e7c1df1b73da00e74"}, + {file = "ruff-0.3.7-py3-none-win_arm64.whl", hash = "sha256:789e144f6dc7019d1f92a812891c645274ed08af6037d11fc65fcbc183b7d59f"}, + {file = "ruff-0.3.7.tar.gz", hash = "sha256:d5c1aebee5162c2226784800ae031f660c350e7a3402c4d1f8ea4e97e232e3ba"}, +] + +[[package]] +name = "secp256k1" +version = "0.14.0" +description = "FFI bindings to libsecp256k1" +optional = false +python-versions = "*" +files = [ + {file = "secp256k1-0.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f666c67dcf1dc69e1448b2ede5e12aaf382b600204a61dbc65e4f82cea444405"}, + {file = "secp256k1-0.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fcabb3c3497a902fb61eec72d1b69bf72747d7bcc2a732d56d9319a1e8322262"}, + {file = "secp256k1-0.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a27c479ab60571502516a1506a562d0a9df062de8ad645313fabfcc97252816"}, + {file = "secp256k1-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4b9306bff6dde020444dfee9ca9b9f5b20ca53a2c0b04898361a3f43d5daf2e"}, + {file = "secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:72735da6cb28273e924431cd40aa607e7f80ef09608c8c9300be2e0e1d2417b4"}, + {file = "secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:87f4ad42a370f768910585989a301d1d65de17dcd86f6e8def9b021364b34d5c"}, + {file = "secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:130f119b06142e597c10eb4470b5a38eae865362d01aaef06b113478d77f728d"}, + {file = "secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:3aedcfe6eb1c5fa7c6be25b7cc91c76d8eb984271920ba0f7a934ae41ed56f51"}, + {file = "secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c91dd3154f6c46ac798d9a41166120e1751222587f54516cc3f378f56ce4ac82"}, + {file = "secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fec790cb6d0d37129ca0ce5b3f8e85692d5fb618d1c440f189453d18694035df"}, + {file = "secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:63eb148196b8f646922d4be6739b17fbbf50ebb3a020078c823e2445d88b7a81"}, + {file = "secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:adc23a4c5d24c95191638eb2ca313097827f07db102e77b59faed15d50c98cae"}, + {file = "secp256k1-0.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ce0314788d3248b275426501228969fd32f6501c9d1837902ee0e7bd8264a36f"}, + {file = "secp256k1-0.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bc761894b3634021686714278fc62b73395fa3eded33453eadfd8a00a6c44ef3"}, + {file = "secp256k1-0.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:373dc8bca735f3c2d73259aa2711a9ecea2f3c7edbb663555fe3422e3dd76102"}, + {file = "secp256k1-0.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fe3f503c9dfdf663b500d3e0688ad842e116c2907ad3f1e1d685812df3f56290"}, + {file = "secp256k1-0.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4b1bf09953cde181132cf5e9033065615e5c2694e803165e2db763efa47695e5"}, + {file = "secp256k1-0.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6af07be5f8612628c3638dc7b208f6cc78d0abae3e25797eadb13890c7d5da81"}, + {file = "secp256k1-0.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a8dbd75a9fb6f42de307f3c5e24573fe59c3374637cbf39136edc66c200a4029"}, + {file = "secp256k1-0.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97a30c8dae633cb18135c76b6517ae99dc59106818e8985be70dbc05dcc06c0d"}, + {file = "secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f4062d8c101aa63b9ecb3709f1f075ad9c01b6672869bbaa1bd77271816936a7"}, + {file = "secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c9e7c024ff17e9b9d7c392bb2a917da231d6cb40ab119389ff1f51dca10339a4"}, + {file = "secp256k1-0.14.0.tar.gz", hash = "sha256:82c06712d69ef945220c8b53c1a0d424c2ff6a1f64aee609030df79ad8383397"}, +] + +[package.dependencies] +cffi = ">=1.3.0" + +[[package]] +name = "shortuuid" +version = "1.0.13" +description = "A generator library for concise, unambiguous and URL-safe UUIDs." +optional = false +python-versions = ">=3.6" +files = [ + {file = "shortuuid-1.0.13-py3-none-any.whl", hash = "sha256:a482a497300b49b4953e15108a7913244e1bb0d41f9d332f5e9925dba33a3c5a"}, + {file = "shortuuid-1.0.13.tar.gz", hash = "sha256:3bb9cf07f606260584b1df46399c0b87dd84773e7b25912b7e391e30797c5e72"}, +] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "slowapi" +version = "0.1.9" +description = "A rate limiting extension for Starlette and Fastapi" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "slowapi-0.1.9-py3-none-any.whl", hash = "sha256:cfad116cfb84ad9d763ee155c1e5c5cbf00b0d47399a769b227865f5df576e36"}, + {file = "slowapi-0.1.9.tar.gz", hash = "sha256:639192d0f1ca01b1c6d95bf6c71d794c3a9ee189855337b4821f7f457dddad77"}, +] + +[package.dependencies] +limits = ">=2.3" + +[package.extras] +redis = ["redis (>=3.4.1,<4.0.0)"] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "sqlalchemy" +version = "1.4.54" +description = "Database Abstraction Library" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "SQLAlchemy-1.4.54-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:af00236fe21c4d4f4c227b6ccc19b44c594160cc3ff28d104cdce85855369277"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1183599e25fa38a1a322294b949da02b4f0da13dbc2688ef9dbe746df573f8a6"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990d5a6a5dc358a0894c8ca02043fb9a5ad9538422001fb2826e91c50f1d539"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14b3f4783275339170984cadda66e3ec011cce87b405968dc8d51cf0f9997b0d"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b24364150738ce488333b3fb48bfa14c189a66de41cd632796fbcacb26b4585"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-win32.whl", hash = "sha256:a8a72259a1652f192c68377be7011eac3c463e9892ef2948828c7d58e4829988"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-win_amd64.whl", hash = "sha256:b67589f7955924865344e6eacfdcf70675e64f36800a576aa5e961f0008cde2a"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b05e0626ec1c391432eabb47a8abd3bf199fb74bfde7cc44a26d2b1b352c2c6e"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13e91d6892b5fcb94a36ba061fb7a1f03d0185ed9d8a77c84ba389e5bb05e936"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb59a11689ff3c58e7652260127f9e34f7f45478a2f3ef831ab6db7bcd72108f"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-win32.whl", hash = "sha256:1390ca2d301a2708fd4425c6d75528d22f26b8f5cbc9faba1ddca136671432bc"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-win_amd64.whl", hash = "sha256:2b37931eac4b837c45e2522066bda221ac6d80e78922fb77c75eb12e4dbcdee5"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3f01c2629a7d6b30d8afe0326b8c649b74825a0e1ebdcb01e8ffd1c920deb07d"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c24dd161c06992ed16c5e528a75878edbaeced5660c3db88c820f1f0d3fe1f4"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5e0d47d619c739bdc636bbe007da4519fc953393304a5943e0b5aec96c9877c"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-win32.whl", hash = "sha256:12bc0141b245918b80d9d17eca94663dbd3f5266ac77a0be60750f36102bbb0f"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-win_amd64.whl", hash = "sha256:f941aaf15f47f316123e1933f9ea91a6efda73a161a6ab6046d1cde37be62c88"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:a41611835010ed4ea4c7aed1da5b58aac78ee7e70932a91ed2705a7b38e40f52"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8c1b9ecaf9f2590337d5622189aeb2f0dbc54ba0232fa0856cf390957584a9"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de620f978ca273ce027769dc8db7e6ee72631796187adc8471b3c76091b809e"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5a2530400a6e7e68fd1552a55515de6a4559122e495f73554a51cedafc11669"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cf7076c8578b3de4e43a046cc7a1af8466e1c3f5e64167189fe8958a4f9c02"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:f1e1b92ee4ee9ffc68624ace218b89ca5ca667607ccee4541a90cc44999b9aea"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41cffc63c7c83dfc30c4cab5b4308ba74440a9633c4509c51a0c52431fb0f8ab"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5933c45d11cbd9694b1540aa9076816cc7406964c7b16a380fd84d3a5fe3241"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cafe0ba3a96d0845121433cffa2b9232844a2609fce694fcc02f3f31214ece28"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a19f816f4702d7b1951d7576026c7124b9bfb64a9543e571774cf517b7a50b29"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-win32.whl", hash = "sha256:76c2ba7b5a09863d0a8166fbc753af96d561818c572dbaf697c52095938e7be4"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-win_amd64.whl", hash = "sha256:a86b0e4be775902a5496af4fb1b60d8a2a457d78f531458d294360b8637bb014"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:a49730afb716f3f675755afec109895cab95bc9875db7ffe2e42c1b1c6279482"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26e78444bc77d089e62874dc74df05a5c71f01ac598010a327881a48408d0064"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02d2ecb9508f16ab9c5af466dfe5a88e26adf2e1a8d1c56eb616396ccae2c186"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:394b0135900b62dbf63e4809cdc8ac923182af2816d06ea61cd6763943c2cc05"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed3576675c187e3baa80b02c4c9d0edfab78eff4e89dd9da736b921333a2432"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-win32.whl", hash = "sha256:fc9ffd9a38e21fad3e8c5a88926d57f94a32546e937e0be46142b2702003eba7"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-win_amd64.whl", hash = "sha256:a01bc25eb7a5688656c8770f931d5cb4a44c7de1b3cec69b84cc9745d1e4cc10"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0b76bbb1cbae618d10679be8966f6d66c94f301cfc15cb49e2f2382563fb6efb"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdb2886c0be2c6c54d0651d5a61c29ef347e8eec81fd83afebbf7b59b80b7393"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:954816850777ac234a4e32b8c88ac1f7847088a6e90cfb8f0e127a1bf3feddff"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1d83cd1cc03c22d922ec94d0d5f7b7c96b1332f5e122e81b1a61fb22da77879a"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1576fba3616f79496e2f067262200dbf4aab1bb727cd7e4e006076686413c80c"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-win32.whl", hash = "sha256:3112de9e11ff1957148c6de1df2bc5cc1440ee36783412e5eedc6f53638a577d"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-win_amd64.whl", hash = "sha256:6da60fb24577f989535b8fc8b2ddc4212204aaf02e53c4c7ac94ac364150ed08"}, + {file = "sqlalchemy-1.4.54.tar.gz", hash = "sha256:4470fbed088c35dc20b78a39aaf4ae54fe81790c783b3264872a0224f437c31a"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)", "mariadb (>=1.0.1,!=1.1.2)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql", "pymssql"] +mssql-pyodbc = ["pyodbc", "pyodbc"] +mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] +mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] +mysql-connector = ["mysql-connector-python", "mysql-connector-python"] +oracle = ["cx_oracle (>=7)", "cx_oracle (>=7,<8)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "asyncpg", "greenlet (!=0.4.17)", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)", "pg8000 (>=1.16.6,!=1.29.0)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +pymysql = ["pymysql", "pymysql (<1)"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "sse-starlette" +version = "1.8.2" +description = "SSE plugin for Starlette" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sse_starlette-1.8.2-py3-none-any.whl", hash = "sha256:70cc7ef5aca4abe8a25dec1284cce4fe644dd7bf0c406d3e852e516092b7f849"}, + {file = "sse_starlette-1.8.2.tar.gz", hash = "sha256:e0f9b8dec41adc092a0a6e0694334bd3cfd3084c44c497a6ebc1fb4bdd919acd"}, +] + +[package.dependencies] +anyio = "*" +fastapi = "*" +starlette = "*" +uvicorn = "*" + +[[package]] +name = "starlette" +version = "0.40.0" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.40.0-py3-none-any.whl", hash = "sha256:c494a22fae73805376ea6bf88439783ecfba9aac88a43911b48c653437e784c4"}, + {file = "starlette-0.40.0.tar.gz", hash = "sha256:1a3139688fb298ce5e2d661d37046a66ad996ce94be4d4983be019a23a04ea35"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + +[[package]] +name = "tomli" +version = "2.0.2" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, + {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "urllib3" +version = "2.2.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "uvicorn" +version = "0.30.6" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.30.6-py3-none-any.whl", hash = "sha256:65fd46fe3fda5bdc1b03b94eb634923ff18cd35b2f084813ea79d1f103f711b5"}, + {file = "uvicorn-0.30.6.tar.gz", hash = "sha256:4b15decdda1e72be08209e860a1e10e92439ad5b97cf44cc945fcbee66fc5788"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "uvloop" +version = "0.19.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + +[[package]] +name = "virtualenv" +version = "20.27.1" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +files = [ + {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, + {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[[package]] +name = "websocket-client" +version = "1.8.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "websockets" +version = "11.0.3" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, + {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, + {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, + {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, + {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, + {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, + {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, + {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, + {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, + {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, + {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, + {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, + {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, + {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, +] + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + +[[package]] +name = "zipp" +version = "3.20.2" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, + {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10 | ^3.9" +content-hash = "3c44aa4c67a390622291459f117b591302ed643bf86e0953c9f3b6c31dc3d504" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..0d6f216 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,96 @@ +[tool.poetry] +name = "lnbits-nostrmarket" +version = "0.0.0" +description = "LNbits, free and open-source Lightning wallet and accounts system." +authors = ["Alan Bits "] + +[tool.poetry.dependencies] +python = "^3.10 | ^3.9" +lnbits = {version = "*", allow-prereleases = true} + +[tool.poetry.group.dev.dependencies] +black = "^24.3.0" +pytest-asyncio = "^0.21.0" +pytest = "^7.3.2" +mypy = "^1.5.1" +pre-commit = "^3.2.2" +ruff = "^0.3.2" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" + +[tool.mypy] +exclude = "(nostr/*)" +[[tool.mypy.overrides]] +module = [ + "secp256k1.*", + "embit.*", + "lnbits.*", + "lnurl.*", + "loguru.*", + "fastapi.*", + "pydantic.*", + "pyqrcode.*", + "shortuuid.*", + "httpx.*", +] +ignore_missing_imports = "True" + +[tool.pytest.ini_options] +log_cli = false +testpaths = [ + "tests" +] + +[tool.black] +line-length = 88 + +[tool.ruff] +# Same as Black. + 10% rule of black +line-length = 88 +exclude = [ + "nostr", +] + +[tool.ruff.lint] +# Enable: +# F - pyflakes +# E - pycodestyle errors +# W - pycodestyle warnings +# I - isort +# A - flake8-builtins +# C - mccabe +# N - naming +# UP - pyupgrade +# RUF - ruff +# B - bugbear +select = ["F", "E", "W", "I", "A", "C", "N", "UP", "RUF", "B"] +ignore = ["C901"] + +# Allow autofix for all enabled rules (when `--fix`) is provided. +fixable = ["ALL"] +unfixable = [] + +# Allow unused variables when underscore-prefixed. +dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +# needed for pydantic +[tool.ruff.lint.pep8-naming] +classmethod-decorators = [ + "root_validator", +] + +# Ignore unused imports in __init__.py files. +# [tool.ruff.lint.extend-per-file-ignores] +# "__init__.py" = ["F401", "F403"] + +# [tool.ruff.lint.mccabe] +# max-complexity = 10 + +[tool.ruff.lint.flake8-bugbear] +# Allow default arguments like, e.g., `data: List[str] = fastapi.Query(None)`. +extend-immutable-calls = [ + "fastapi.Depends", + "fastapi.Query", +] diff --git a/services.py b/services.py index 55f68d9..a9b32ed 100644 --- a/services.py +++ b/services.py @@ -2,10 +2,10 @@ import asyncio import json from typing import List, Optional, Tuple -from loguru import logger - from lnbits.bolt11 import decode -from lnbits.core.services import websocket_updater, create_invoice, get_wallet +from lnbits.core.crud import get_wallet +from lnbits.core.services import create_invoice, websocket_updater +from loguru import logger from . import nostr_client from .crud import ( @@ -75,7 +75,9 @@ async def create_new_order( await create_order(merchant.id, order) return PaymentRequest( - id=data.id, payment_options=[PaymentOption(type="ln", link=invoice)], message=receipt + id=data.id, + payment_options=[PaymentOption(type="ln", link=invoice)], + message=receipt, ) @@ -89,12 +91,11 @@ async def build_order_with_payment( shipping_zone = await get_zone(merchant_id, data.shipping_id) assert shipping_zone, f"Shipping zone not found for order '{data.id}'" + assert shipping_zone.id product_cost_sat, shipping_cost_sat = await data.costs_in_sats( products, shipping_zone.id, shipping_zone.cost ) - receipt = data.receipt( - products, shipping_zone.id, shipping_zone.cost - ) + receipt = data.receipt(products, shipping_zone.id, shipping_zone.cost) wallet_id = await get_wallet_for_product(data.items[0].product_id) assert wallet_id, "Missing wallet for order `{data.id}`" @@ -106,7 +107,7 @@ async def build_order_with_payment( if not success: raise ValueError(message) - payment_hash, invoice = await create_invoice( + payment = await create_invoice( wallet_id=wallet_id, amount=round(product_cost_sat + shipping_cost_sat), memo=f"Order '{data.id}' for pubkey '{data.public_key}'", @@ -124,19 +125,21 @@ async def build_order_with_payment( order = Order( **data.dict(), stall_id=products[0].stall_id, - invoice_id=payment_hash, + invoice_id=payment.payment_hash, total=product_cost_sat + shipping_cost_sat, extra=extra, ) - return order, invoice, receipt + return order, payment.bolt11, receipt async def update_merchant_to_nostr( merchant: Merchant, delete_merchant=False ) -> Merchant: stalls = await get_stalls(merchant.id) + event: Optional[NostrEvent] = None for stall in stalls: + assert stall.id products = await get_products(merchant.id, stall.id) for product in products: event = await sign_and_send_to_nostr(merchant, product, delete_merchant) @@ -150,6 +153,7 @@ async def update_merchant_to_nostr( if delete_merchant: # merchant profile updates not supported yet event = await sign_and_send_to_nostr(merchant, merchant, delete_merchant) + assert event merchant.config.event_id = event.id return merchant @@ -227,25 +231,29 @@ async def update_products_for_order( return success, message for p in products: + assert p.id product = await update_product_quantity(p.id, p.quantity) + assert product event = await sign_and_send_to_nostr(merchant, product) product.event_id = event.id await update_product(merchant.id, product) return True, "ok" -async def autoreply_for_products_in_order( - merchant: Merchant, order: Order -) -> Tuple[bool, str]: + +async def autoreply_for_products_in_order(merchant: Merchant, order: Order): product_ids = [i.product_id for i in order.items] products = await get_products_by_ids(merchant.id, product_ids) products_with_autoreply = [p for p in products if p.config.use_autoreply] for p in products_with_autoreply: - dm_content = p.config.autoreply_message + dm_content = p.config.autoreply_message or "" await send_dm( - merchant, order.public_key, DirectMessageType.PLAIN_TEXT.value, dm_content + merchant, + order.public_key, + DirectMessageType.PLAIN_TEXT.value, + dm_content, ) await asyncio.sleep(1) # do not send all autoreplies at once @@ -253,7 +261,7 @@ async def autoreply_for_products_in_order( async def send_dm( merchant: Merchant, other_pubkey: str, - type: str, + type_: int, dm_content: str, ): dm_event = merchant.build_dm_event(dm_content, other_pubkey) @@ -263,7 +271,7 @@ async def send_dm( event_created_at=dm_event.created_at, message=dm_content, public_key=other_pubkey, - type=type, + type=type_, ) dm_reply = await create_direct_message(merchant.id, dm) @@ -296,7 +304,8 @@ async def compute_products_new_quantity( return ( False, [], - f"Quantity not sufficient for product: '{p.name}' ({p.id}). Required '{required_quantity}' but only have '{p.quantity}'.", + f"Quantity not sufficient for product: '{p.name}' ({p.id})." + f" Required '{required_quantity}' but only have '{p.quantity}'.", ) p.quantity -= required_quantity @@ -306,9 +315,9 @@ async def compute_products_new_quantity( async def process_nostr_message(msg: str): try: - type, *rest = json.loads(msg) + type_, *rest = json.loads(msg) - if type.upper() == "EVENT": + if type_.upper() == "EVENT": _, event = rest event = NostrEvent(**event) if event.kind == 0: @@ -328,11 +337,11 @@ async def process_nostr_message(msg: str): async def create_or_update_order_from_dm( merchant_id: str, merchant_pubkey: str, dm: DirectMessage ): - type, json_data = PartialDirectMessage.parse_message(dm.message) - if "id" not in json_data: + type_, json_data = PartialDirectMessage.parse_message(dm.message) + if not json_data or "id" not in json_data: return - if type == DirectMessageType.CUSTOMER_ORDER: + if type_ == DirectMessageType.CUSTOMER_ORDER: order = await extract_customer_order_from_dm( merchant_id, merchant_pubkey, dm, json_data ) @@ -348,7 +357,7 @@ async def create_or_update_order_from_dm( ) return - if type == DirectMessageType.PAYMENT_REQUEST: + if type_ == DirectMessageType.PAYMENT_REQUEST: payment_request = PaymentRequest(**json_data) pr = next( (o.link for o in payment_request.payment_options if o.type == "ln"), None @@ -356,14 +365,15 @@ async def create_or_update_order_from_dm( if not pr: return invoice = decode(pr) + total = invoice.amount_msat / 1000 if invoice.amount_msat else 0 await update_order( merchant_id, payment_request.id, - **{"total": invoice.amount_msat / 1000, "invoice_id": invoice.payment_hash}, + **{"total": total, "invoice_id": invoice.payment_hash}, ) return - if type == DirectMessageType.ORDER_PAID_OR_SHIPPED: + if type_ == DirectMessageType.ORDER_PAID_OR_SHIPPED: order_update = OrderStatusUpdate(**json_data) if order_update.paid: await update_order_paid_status(order_update.id, True) @@ -380,16 +390,18 @@ async def extract_customer_order_from_dm( ) extra = await OrderExtra.from_products(products) order = Order( - id=json_data.get("id"), + id=str(json_data.get("id")), event_id=dm.event_id, event_created_at=dm.event_created_at, public_key=dm.public_key, merchant_public_key=merchant_pubkey, shipping_id=json_data.get("shipping_id", "None"), items=order_items, - contact=OrderContact(**json_data.get("contact")) - if json_data.get("contact") - else None, + contact=( + OrderContact(**json_data.get("contact", {})) + if json_data.get("contact") + else None + ), address=json_data.get("address"), stall_id=products[0].stall_id if len(products) else "None", invoice_id="None", @@ -406,12 +418,9 @@ async def _handle_nip04_message(event: NostrEvent): if not merchant: p_tags = event.tag_values("p") - merchant_public_key = p_tags[0] if len(p_tags) else None - merchant = ( - await get_merchant_by_pubkey(merchant_public_key) - if merchant_public_key - else None - ) + if len(p_tags) and p_tags[0]: + merchant_public_key = p_tags[0] + merchant = await get_merchant_by_pubkey(merchant_public_key) assert merchant, f"Merchant not found for public key '{merchant_public_key}'" @@ -461,21 +470,21 @@ async def _handle_outgoing_dms( event: NostrEvent, merchant: Merchant, clear_text_msg: str ): sent_to = event.tag_values("p") - type, _ = PartialDirectMessage.parse_message(clear_text_msg) + type_, _ = PartialDirectMessage.parse_message(clear_text_msg) if len(sent_to) != 0: dm = PartialDirectMessage( event_id=event.id, event_created_at=event.created_at, message=clear_text_msg, public_key=sent_to[0], - type=type.value, + type=type_.value, ) await create_direct_message(merchant.id, dm) async def _handle_incoming_structured_dm( merchant: Merchant, dm: DirectMessage, json_data: dict -) -> Tuple[DirectMessageType, str]: +) -> Tuple[DirectMessageType, Optional[str]]: try: if dm.type == DirectMessageType.CUSTOMER_ORDER.value and merchant.config.active: json_resp = await _handle_new_order( @@ -487,7 +496,7 @@ async def _handle_incoming_structured_dm( except Exception as ex: logger.warning(ex) - return None, None + return DirectMessageType.PLAIN_TEXT, None async def _persist_dm( @@ -570,9 +579,13 @@ async def _handle_new_order( except Exception as e: logger.debug(e) payment_req = await create_new_failed_order( - merchant_id, merchant_public_key, dm, json_data, "Order received, but cannot be processed. Please contact merchant." + merchant_id, + merchant_public_key, + dm, + json_data, + "Order received, but cannot be processed. Please contact merchant.", ) - + assert payment_req response = { "type": DirectMessageType.PAYMENT_REQUEST.value, **payment_req.dict(), @@ -594,12 +607,14 @@ async def create_new_failed_order( await create_order(merchant_id, order) return PaymentRequest(id=order.id, message=fail_message, payment_options=[]) + async def resubscribe_to_all_merchants(): await nostr_client.unsubscribe_merchants() # give some time for the message to propagate - asyncio.sleep(1) + await asyncio.sleep(1) await subscribe_to_all_merchants() + async def subscribe_to_all_merchants(): ids = await get_merchants_ids_with_pubkeys() public_keys = [pk for _, pk in ids] @@ -608,7 +623,9 @@ async def subscribe_to_all_merchants(): last_stall_time = await get_last_stall_update_time() last_prod_time = await get_last_product_update_time() - await nostr_client.subscribe_merchants(public_keys, last_dm_time, last_stall_time, last_prod_time, 0) + await nostr_client.subscribe_merchants( + public_keys, last_dm_time, last_stall_time, last_prod_time, 0 + ) async def _handle_new_customer(event: NostrEvent, merchant: Merchant): diff --git a/static/components/direct-messages.js b/static/components/direct-messages.js new file mode 100644 index 0000000..b9dee13 --- /dev/null +++ b/static/components/direct-messages.js @@ -0,0 +1,170 @@ +window.app.component('direct-messages', { + name: 'direct-messages', + props: ['active-chat-customer', 'merchant-id', 'adminkey', 'inkey'], + template: '#direct-messages', + delimiters: ['${', '}'], + watch: { + activeChatCustomer: async function (n) { + this.activePublicKey = n + }, + activePublicKey: async function (n) { + await this.getDirectMessages(n) + } + }, + computed: { + messagesAsJson: function () { + return this.messages.map(m => { + const dateFrom = moment(m.event_created_at * 1000).fromNow() + try { + const message = JSON.parse(m.message) + return { + isJson: message.type >= 0, + dateFrom, + ...m, + message + } + } catch (error) { + return { + isJson: false, + dateFrom, + ...m, + message: m.message + } + } + }) + } + }, + data: function () { + return { + customers: [], + unreadMessages: 0, + activePublicKey: null, + messages: [], + newMessage: '', + showAddPublicKey: false, + newPublicKey: null, + showRawMessage: false, + rawMessage: null + } + }, + methods: { + sendMessage: async function () {}, + buildCustomerLabel: function (c) { + let label = `${c.profile.name || 'unknown'} ${c.profile.about || ''}` + if (c.unread_messages) { + label += `[new: ${c.unread_messages}]` + } + label += ` (${c.public_key.slice(0, 16)}...${c.public_key.slice( + c.public_key.length - 16 + )}` + return label + }, + getDirectMessages: async function (pubkey) { + if (!pubkey) { + this.messages = [] + return + } + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/message/' + pubkey, + this.inkey + ) + this.messages = data + + this.focusOnChatBox(this.messages.length - 1) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + getCustomers: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/customer', + this.inkey + ) + this.customers = data + this.unreadMessages = data.filter(c => c.unread_messages).length + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + + sendDirectMesage: async function () { + try { + const {data} = await LNbits.api.request( + 'POST', + '/nostrmarket/api/v1/message', + this.adminkey, + { + message: this.newMessage, + public_key: this.activePublicKey + } + ) + this.messages = this.messages.concat([data]) + this.newMessage = '' + this.focusOnChatBox(this.messages.length - 1) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + addPublicKey: async function () { + try { + const {data} = await LNbits.api.request( + 'POST', + '/nostrmarket/api/v1/customer', + this.adminkey, + { + public_key: this.newPublicKey, + merchant_id: this.merchantId, + unread_messages: 0 + } + ) + this.newPublicKey = null + this.activePublicKey = data.public_key + await this.selectActiveCustomer() + } catch (error) { + LNbits.utils.notifyApiError(error) + } finally { + this.showAddPublicKey = false + } + }, + handleNewMessage: async function (data) { + if (data.customerPubkey === this.activePublicKey) { + this.messages.push(data.dm) + this.focusOnChatBox(this.messages.length - 1) + // focus back on input box + } + this.getCustomersDebounced() + }, + showOrderDetails: function (orderId, eventId) { + this.$emit('order-selected', {orderId, eventId}) + }, + showClientOrders: function () { + this.$emit('customer-selected', this.activePublicKey) + }, + selectActiveCustomer: async function () { + await this.getDirectMessages(this.activePublicKey) + await this.getCustomers() + }, + showMessageRawData: function (index) { + this.rawMessage = this.messages[index]?.message + this.showRawMessage = true + }, + focusOnChatBox: function (index) { + setTimeout(() => { + const lastChatBox = document.getElementsByClassName( + `chat-mesage-index-${index}` + ) + if (lastChatBox && lastChatBox[0]) { + lastChatBox[0].scrollIntoView() + } + }, 100) + } + }, + created: async function () { + await this.getCustomers() + this.getCustomersDebounced = _.debounce(this.getCustomers, 2000, false) + } +}) diff --git a/static/components/direct-messages/direct-messages.html b/static/components/direct-messages/direct-messages.html deleted file mode 100644 index b6b90d6..0000000 --- a/static/components/direct-messages/direct-messages.html +++ /dev/null @@ -1,104 +0,0 @@ -

- - -
-
-
Messages
-
-
-   new -
-
- Client - Orders -
-
-
- - - - -
-
- - -
-
- - - Add a public key to chat with - - -
-
- -
- -
-
-
- -
-
- New order: -
-
- Reply sent for order: -
-
- Paid - Shipped -
-
- - - - -
- ... - -
-
-
-
- - - - - - - -
-
-
-
- - - - -
- Add - Cancel -
-
-
-
- - - -
- - Close -
- -
-
-
-
\ No newline at end of file diff --git a/static/components/direct-messages/direct-messages.js b/static/components/direct-messages/direct-messages.js deleted file mode 100644 index 607342a..0000000 --- a/static/components/direct-messages/direct-messages.js +++ /dev/null @@ -1,173 +0,0 @@ -async function directMessages(path) { - const template = await loadTemplateAsync(path) - Vue.component('direct-messages', { - name: 'direct-messages', - props: ['active-chat-customer', 'merchant-id', 'adminkey', 'inkey'], - template, - - watch: { - activeChatCustomer: async function (n) { - this.activePublicKey = n - }, - activePublicKey: async function (n) { - await this.getDirectMessages(n) - } - }, - computed: { - messagesAsJson: function () { - return this.messages.map(m => { - const dateFrom = moment(m.event_created_at * 1000).fromNow() - try { - const message = JSON.parse(m.message) - return { - isJson: message.type >= 0, - dateFrom, - ...m, - message - } - } catch (error) { - return { - isJson: false, - dateFrom, - ...m, - message: m.message - } - } - }) - } - }, - data: function () { - return { - customers: [], - unreadMessages: 0, - activePublicKey: null, - messages: [], - newMessage: '', - showAddPublicKey: false, - newPublicKey: null, - showRawMessage: false, - rawMessage: null, - } - }, - methods: { - sendMessage: async function () { }, - buildCustomerLabel: function (c) { - let label = `${c.profile.name || 'unknown'} ${c.profile.about || ''}` - if (c.unread_messages) { - label += `[new: ${c.unread_messages}]` - } - label += ` (${c.public_key.slice(0, 16)}...${c.public_key.slice( - c.public_key.length - 16 - )}` - return label - }, - getDirectMessages: async function (pubkey) { - if (!pubkey) { - this.messages = [] - return - } - try { - const { data } = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/message/' + pubkey, - this.inkey - ) - this.messages = data - - this.focusOnChatBox(this.messages.length - 1) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - getCustomers: async function () { - try { - const { data } = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/customer', - this.inkey - ) - this.customers = data - this.unreadMessages = data.filter(c => c.unread_messages).length - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - - sendDirectMesage: async function () { - try { - const { data } = await LNbits.api.request( - 'POST', - '/nostrmarket/api/v1/message', - this.adminkey, - { - message: this.newMessage, - public_key: this.activePublicKey - } - ) - this.messages = this.messages.concat([data]) - this.newMessage = '' - this.focusOnChatBox(this.messages.length - 1) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - addPublicKey: async function () { - try { - const { data } = await LNbits.api.request( - 'POST', - '/nostrmarket/api/v1/customer', - this.adminkey, - { - public_key: this.newPublicKey, - merchant_id: this.merchantId, - unread_messages: 0 - } - ) - this.newPublicKey = null - this.activePublicKey = data.public_key - await this.selectActiveCustomer() - } catch (error) { - LNbits.utils.notifyApiError(error) - } finally { - this.showAddPublicKey = false - } - }, - handleNewMessage: async function (data) { - if (data.customerPubkey === this.activePublicKey) { - this.messages.push(data.dm) - this.focusOnChatBox(this.messages.length - 1) - // focus back on input box - } - this.getCustomersDebounced() - }, - showOrderDetails: function (orderId, eventId) { - this.$emit('order-selected', { orderId, eventId }) - }, - showClientOrders: function () { - this.$emit('customer-selected', this.activePublicKey) - }, - selectActiveCustomer: async function () { - await this.getDirectMessages(this.activePublicKey) - await this.getCustomers() - }, - showMessageRawData: function (index) { - this.rawMessage = this.messages[index]?.message - this.showRawMessage = true - }, - focusOnChatBox: function (index) { - setTimeout(() => { - const lastChatBox = document.getElementsByClassName( - `chat-mesage-index-${index}` - ) - if (lastChatBox && lastChatBox[0]) { - lastChatBox[0].scrollIntoView() - } - }, 100) - } - }, - created: async function () { - await this.getCustomers() - this.getCustomersDebounced = _.debounce(this.getCustomers, 2000, false) - } - }) -} diff --git a/static/components/key-pair.js b/static/components/key-pair.js new file mode 100644 index 0000000..5bf9d23 --- /dev/null +++ b/static/components/key-pair.js @@ -0,0 +1,22 @@ +window.app.component('key-pair', { + name: 'key-pair', + template: '#key-pair', + delimiters: ['${', '}'], + props: ['public-key', 'private-key'], + data: function () { + return { + showPrivateKey: false + } + }, + methods: { + copyText: function (text, message, position) { + var notify = this.$q.notify + Quasar.copyToClipboard(text).then(function () { + notify({ + message: message || 'Copied to clipboard!', + position: position || 'bottom' + }) + }) + } + } +}) diff --git a/static/components/key-pair/key-pair.js b/static/components/key-pair/key-pair.js deleted file mode 100644 index bee16b4..0000000 --- a/static/components/key-pair/key-pair.js +++ /dev/null @@ -1,25 +0,0 @@ -async function keyPair(path) { - const template = await loadTemplateAsync(path) - Vue.component('key-pair', { - name: 'key-pair', - template, - - props: ['public-key', 'private-key'], - data: function () { - return { - showPrivateKey: false - } - }, - methods: { - copyText: function (text, message, position) { - var notify = this.$q.notify - Quasar.utils.copyToClipboard(text).then(function () { - notify({ - message: message || 'Copied to clipboard!', - position: position || 'bottom' - }) - }) - } - } - }) -} diff --git a/static/components/merchant-details.js b/static/components/merchant-details.js new file mode 100644 index 0000000..4581b4e --- /dev/null +++ b/static/components/merchant-details.js @@ -0,0 +1,102 @@ +window.app.component('merchant-details', { + name: 'merchant-details', + template: '#merchant-details', + props: ['merchant-id', 'adminkey', 'inkey', 'showKeys'], + delimiters: ['${', '}'], + data: function () { + return {} + }, + methods: { + toggleShowKeys: async function () { + this.$emit('toggle-show-keys') + }, + + republishMerchantData: async function () { + try { + await LNbits.api.request( + 'PUT', + `/nostrmarket/api/v1/merchant/${this.merchantId}/nostr`, + this.adminkey + ) + this.$q.notify({ + type: 'positive', + message: 'Merchant data republished to Nostr', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }, + requeryMerchantData: async function () { + try { + await LNbits.api.request( + 'GET', + `/nostrmarket/api/v1/merchant/${this.merchantId}/nostr`, + this.adminkey + ) + this.$q.notify({ + type: 'positive', + message: 'Merchant data refreshed from Nostr', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }, + deleteMerchantTables: function () { + LNbits.utils + .confirmDialog( + ` + Stalls, products and orders will be deleted also! + Are you sure you want to delete this merchant? + ` + ) + .onOk(async () => { + try { + await LNbits.api.request( + 'DELETE', + '/nostrmarket/api/v1/merchant/' + this.merchantId, + this.adminkey + ) + this.$emit('merchant-deleted', this.merchantId) + this.$q.notify({ + type: 'positive', + message: 'Merchant Deleted', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }) + }, + deleteMerchantFromNostr: function () { + LNbits.utils + .confirmDialog( + ` + Do you want to remove the merchant from Nostr? + ` + ) + .onOk(async () => { + try { + await LNbits.api.request( + 'DELETE', + `/nostrmarket/api/v1/merchant/${this.merchantId}/nostr`, + this.adminkey + ) + this.$q.notify({ + type: 'positive', + message: 'Merchant Deleted from Nostr', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }) + } + }, + created: async function () {} +}) diff --git a/static/components/merchant-details/merchant-details.js b/static/components/merchant-details/merchant-details.js deleted file mode 100644 index ed78226..0000000 --- a/static/components/merchant-details/merchant-details.js +++ /dev/null @@ -1,106 +0,0 @@ -async function merchantDetails(path) { - const template = await loadTemplateAsync(path) - Vue.component('merchant-details', { - name: 'merchant-details', - props: ['merchant-id', 'adminkey', 'inkey','showKeys'], - template, - - data: function () { - return { - } - }, - methods: { - toggleShowKeys: async function () { - this.$emit('toggle-show-keys') - }, - - republishMerchantData: async function () { - try { - await LNbits.api.request( - 'PUT', - `/nostrmarket/api/v1/merchant/${this.merchantId}/nostr`, - this.adminkey - ) - this.$q.notify({ - type: 'positive', - message: 'Merchant data republished to Nostr', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }, - requeryMerchantData: async function () { - try { - await LNbits.api.request( - 'GET', - `/nostrmarket/api/v1/merchant/${this.merchantId}/nostr`, - this.adminkey - ) - this.$q.notify({ - type: 'positive', - message: 'Merchant data refreshed from Nostr', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }, - deleteMerchantTables: function () { - LNbits.utils - .confirmDialog( - ` - Stalls, products and orders will be deleted also! - Are you sure you want to delete this merchant? - ` - ) - .onOk(async () => { - try { - await LNbits.api.request( - 'DELETE', - '/nostrmarket/api/v1/merchant/' + this.merchantId, - this.adminkey - ) - this.$emit('merchant-deleted', this.merchantId) - this.$q.notify({ - type: 'positive', - message: 'Merchant Deleted', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }) - }, - deleteMerchantFromNostr: function () { - LNbits.utils - .confirmDialog( - ` - Do you want to remove the merchant from Nostr? - ` - ) - .onOk(async () => { - try { - await LNbits.api.request( - 'DELETE', - `/nostrmarket/api/v1/merchant/${this.merchantId}/nostr`, - this.adminkey - ) - this.$q.notify({ - type: 'positive', - message: 'Merchant Deleted from Nostr', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }) - } - }, - created: async function () {} - }) -} diff --git a/static/components/order-list.js b/static/components/order-list.js new file mode 100644 index 0000000..f936fba --- /dev/null +++ b/static/components/order-list.js @@ -0,0 +1,406 @@ +window.app.component('order-list', { + name: 'order-list', + props: ['stall-id', 'customer-pubkey-filter', 'adminkey', 'inkey'], + template: '#order-list', + delimiters: ['${', '}'], + watch: { + customerPubkeyFilter: async function (n) { + this.search.publicKey = n + this.search.isPaid = {label: 'All', id: null} + this.search.isShipped = {label: 'All', id: null} + await this.getOrders() + } + }, + + data: function () { + return { + orders: [], + stalls: [], + selectedOrder: null, + shippingMessage: '', + showShipDialog: false, + filter: '', + search: { + publicKey: null, + isPaid: { + label: 'All', + id: null + }, + isShipped: { + label: 'All', + id: null + }, + restoring: false + }, + customers: [], + ternaryOptions: [ + { + label: 'All', + id: null + }, + { + label: 'Yes', + id: 'true' + }, + { + label: 'No', + id: 'false' + } + ], + zoneOptions: [], + ordersTable: { + columns: [ + { + name: '', + align: 'left', + label: '', + field: '' + }, + { + name: 'id', + align: 'left', + label: 'Order ID', + field: 'id' + }, + { + name: 'total', + align: 'left', + label: 'Total Sats', + field: 'total' + }, + { + name: 'fiat', + align: 'left', + label: 'Total Fiat', + field: 'fiat' + }, + { + name: 'paid', + align: 'left', + label: 'Paid', + field: 'paid' + }, + { + name: 'shipped', + align: 'left', + label: 'Shipped', + field: 'shipped' + }, + { + name: 'public_key', + align: 'left', + label: 'Customer', + field: 'pubkey' + }, + { + name: 'event_created_at', + align: 'left', + label: 'Created At', + field: 'event_created_at' + } + ], + pagination: { + rowsPerPage: 10 + } + } + } + }, + computed: { + customerOptions: function () { + const options = this.customers.map(c => ({ + label: this.buildCustomerLabel(c), + value: c.public_key + })) + options.unshift({label: 'All', value: null, id: null}) + return options + } + }, + methods: { + toShortId: function (value) { + return value.substring(0, 5) + '...' + value.substring(value.length - 5) + }, + formatDate: function (value) { + return Quasar.date.formatDate(new Date(value * 1000), 'YYYY-MM-DD HH:mm') + }, + satBtc(val, showUnit = true) { + return satOrBtc(val, showUnit, true) + }, + formatFiat(value, currency) { + return Math.trunc(value) + ' ' + currency + }, + shortLabel(value = '') { + if (value.length <= 44) return value + return value.substring(0, 20) + '...' + }, + productName: function (order, productId) { + product = order.extra.products.find(p => p.id === productId) + if (product) { + return product.name + } + return '' + }, + productPrice: function (order, productId) { + product = order.extra.products.find(p => p.id === productId) + if (product) { + return `${product.price} ${order.extra.currency}` + } + return '' + }, + orderTotal: function (order) { + const productCost = order.items.reduce((t, item) => { + product = order.extra.products.find(p => p.id === item.product_id) + return t + item.quantity * product.price + }, 0) + return productCost + order.extra.shipping_cost + }, + getOrders: async function () { + try { + const ordersPath = this.stallId + ? `stall/order/${this.stallId}` + : 'order' + + const query = [] + if (this.search.publicKey) { + query.push(`pubkey=${this.search.publicKey}`) + } + if (this.search.isPaid.id) { + query.push(`paid=${this.search.isPaid.id}`) + } + if (this.search.isShipped.id) { + query.push(`shipped=${this.search.isShipped.id}`) + } + const {data} = await LNbits.api.request( + 'GET', + `/nostrmarket/api/v1/${ordersPath}?${query.join('&')}`, + this.inkey + ) + this.orders = data.map(s => ({...s, expanded: false})) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + getOrder: async function (orderId) { + try { + const {data} = await LNbits.api.request( + 'GET', + `/nostrmarket/api/v1/order/${orderId}`, + this.inkey + ) + return {...data, expanded: false, isNew: true} + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + restoreOrder: async function (eventId) { + console.log('### restoreOrder', eventId) + try { + this.search.restoring = true + const {data} = await LNbits.api.request( + 'PUT', + `/nostrmarket/api/v1/order/restore/${eventId}`, + this.adminkey + ) + await this.getOrders() + this.$q.notify({ + type: 'positive', + message: 'Order restored!' + }) + return data + } catch (error) { + LNbits.utils.notifyApiError(error) + } finally { + this.search.restoring = false + } + }, + restoreOrders: async function () { + try { + this.search.restoring = true + await LNbits.api.request( + 'PUT', + `/nostrmarket/api/v1/orders/restore`, + this.adminkey + ) + await this.getOrders() + this.$q.notify({ + type: 'positive', + message: 'Orders restored!' + }) + } catch (error) { + LNbits.utils.notifyApiError(error) + } finally { + this.search.restoring = false + } + }, + reissueOrderInvoice: async function (order) { + try { + const {data} = await LNbits.api.request( + 'PUT', + `/nostrmarket/api/v1/order/reissue`, + this.adminkey, + { + id: order.id, + shipping_id: order.shipping_id + } + ) + this.$q.notify({ + type: 'positive', + message: 'Order invoice reissued!' + }) + data.expanded = order.expanded + + const i = this.orders.map(o => o.id).indexOf(order.id) + if (i !== -1) { + this.orders[i] = {...this.orders[i], ...data} + } + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + updateOrderShipped: async function () { + this.selectedOrder.shipped = !this.selectedOrder.shipped + try { + await LNbits.api.request( + 'PATCH', + `/nostrmarket/api/v1/order/${this.selectedOrder.id}`, + this.adminkey, + { + id: this.selectedOrder.id, + message: this.shippingMessage, + shipped: this.selectedOrder.shipped + } + ) + this.$q.notify({ + type: 'positive', + message: 'Order updated!' + }) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + this.showShipDialog = false + }, + addOrder: async function (data) { + if ( + !this.search.publicKey || + this.search.publicKey === data.customerPubkey + ) { + const orderData = JSON.parse(data.dm.message) + const i = this.orders.map(o => o.id).indexOf(orderData.id) + if (i === -1) { + const order = await this.getOrder(orderData.id) + this.orders.unshift(order) + } + } + }, + orderSelected: async function (orderId, eventId) { + const order = await this.getOrder(orderId) + if (!order) { + LNbits.utils + .confirmDialog( + 'Order could not be found. Do you want to restore it from this direct message?' + ) + .onOk(async () => { + const restoredOrder = await this.restoreOrder(eventId) + console.log('### restoredOrder', restoredOrder) + if (restoredOrder) { + restoredOrder.expanded = true + restoredOrder.isNew = false + this.orders = [restoredOrder] + } + }) + return + } + order.expanded = true + order.isNew = false + this.orders = [order] + }, + getZones: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/zone', + this.inkey + ) + return data.map(z => ({ + id: z.id, + value: z.id, + label: z.name + ? `${z.name} (${z.countries.join(', ')})` + : z.countries.join(', ') + })) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + return [] + }, + getStalls: async function (pending = false) { + try { + const {data} = await LNbits.api.request( + 'GET', + `/nostrmarket/api/v1/stall?pending=${pending}`, + this.inkey + ) + return data.map(s => ({...s, expanded: false})) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + return [] + }, + getStallZones: function (stallId) { + const stall = this.stalls.find(s => s.id === stallId) + if (!stall) return [] + + return this.zoneOptions.filter(z => + stall.shipping_zones.find(s => s.id === z.id) + ) + }, + showShipOrderDialog: function (order) { + this.selectedOrder = order + this.shippingMessage = order.shipped + ? 'The order has been shipped!' + : 'The order has NOT yet been shipped!' + + // do not change the status yet + this.selectedOrder.shipped = !order.shipped + this.showShipDialog = true + }, + customerSelected: function (customerPubkey) { + this.$emit('customer-selected', customerPubkey) + }, + getCustomers: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/customer', + this.inkey + ) + this.customers = data + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + buildCustomerLabel: function (c) { + let label = `${c.profile.name || 'unknown'} ${c.profile.about || ''}` + if (c.unread_messages) { + label += `[new: ${c.unread_messages}]` + } + label += ` (${c.public_key.slice(0, 16)}...${c.public_key.slice( + c.public_key.length - 16 + )}` + return label + }, + orderPaid: function (orderId) { + const order = this.orders.find(o => o.id === orderId) + if (order) { + order.paid = true + } + } + }, + created: async function () { + if (this.stallId) { + await this.getOrders() + } + await this.getCustomers() + this.zoneOptions = await this.getZones() + this.stalls = await this.getStalls() + } +}) diff --git a/static/components/order-list/order-list.html b/static/components/order-list/order-list.html deleted file mode 100644 index 44feb44..0000000 --- a/static/components/order-list/order-list.html +++ /dev/null @@ -1,212 +0,0 @@ -
-
-
- - -
-
- - -
-
- - -
-
- - - - - - Restore Orders - Restore previous orders from Nostr - - - -
-
-
-
- - - -
-
- - - - - -
- - - Cancel -
-
-
-
-
diff --git a/static/components/order-list/order-list.js b/static/components/order-list/order-list.js deleted file mode 100644 index 2dc721a..0000000 --- a/static/components/order-list/order-list.js +++ /dev/null @@ -1,409 +0,0 @@ -async function orderList(path) { - const template = await loadTemplateAsync(path) - Vue.component('order-list', { - name: 'order-list', - props: ['stall-id', 'customer-pubkey-filter', 'adminkey', 'inkey'], - template, - - watch: { - customerPubkeyFilter: async function (n) { - this.search.publicKey = n - this.search.isPaid = { label: 'All', id: null } - this.search.isShipped = { label: 'All', id: null } - await this.getOrders() - } - }, - - data: function () { - return { - orders: [], - stalls: [], - selectedOrder: null, - shippingMessage: '', - showShipDialog: false, - filter: '', - search: { - publicKey: null, - isPaid: { - label: 'All', - id: null - }, - isShipped: { - label: 'All', - id: null - }, - restoring: false - }, - customers: [], - ternaryOptions: [ - { - label: 'All', - id: null - }, - { - label: 'Yes', - id: 'true' - }, - { - label: 'No', - id: 'false' - } - ], - zoneOptions: [], - ordersTable: { - columns: [ - { - name: '', - align: 'left', - label: '', - field: '' - }, - { - name: 'id', - align: 'left', - label: 'Order ID', - field: 'id' - }, - { - name: 'total', - align: 'left', - label: 'Total Sats', - field: 'total' - }, - { - name: 'fiat', - align: 'left', - label: 'Total Fiat', - field: 'fiat' - }, - { - name: 'paid', - align: 'left', - label: 'Paid', - field: 'paid' - }, - { - name: 'shipped', - align: 'left', - label: 'Shipped', - field: 'shipped' - }, - { - name: 'public_key', - align: 'left', - label: 'Customer', - field: 'pubkey' - }, - { - name: 'event_created_at', - align: 'left', - label: 'Created At', - field: 'event_created_at' - } - ], - pagination: { - rowsPerPage: 10 - } - } - } - }, - computed: { - customerOptions: function () { - const options = this.customers.map(c => ({ label: this.buildCustomerLabel(c), value: c.public_key })) - options.unshift({ label: 'All', value: null, id: null }) - return options - } - }, - methods: { - toShortId: function (value) { - return value.substring(0, 5) + '...' + value.substring(value.length - 5) - }, - formatDate: function (value) { - return Quasar.utils.date.formatDate( - new Date(value * 1000), - 'YYYY-MM-DD HH:mm' - ) - }, - satBtc(val, showUnit = true) { - return satOrBtc(val, showUnit, true) - }, - formatFiat(value, currency) { - return Math.trunc(value) + ' ' + currency - }, - shortLabel(value = ''){ - if (value.length <= 44) return value - return value.substring(0, 20) + '...' - }, - productName: function (order, productId) { - product = order.extra.products.find(p => p.id === productId) - if (product) { - return product.name - } - return '' - }, - productPrice: function (order, productId) { - product = order.extra.products.find(p => p.id === productId) - if (product) { - return `${product.price} ${order.extra.currency}` - } - return '' - }, - orderTotal: function (order) { - const productCost = order.items.reduce((t, item) => { - product = order.extra.products.find(p => p.id === item.product_id) - return t + item.quantity * product.price - }, 0) - return productCost + order.extra.shipping_cost - }, - getOrders: async function () { - try { - const ordersPath = this.stallId - ? `stall/order/${this.stallId}` - : 'order' - - const query = [] - if (this.search.publicKey) { - query.push(`pubkey=${this.search.publicKey}`) - } - if (this.search.isPaid.id) { - query.push(`paid=${this.search.isPaid.id}`) - } - if (this.search.isShipped.id) { - query.push(`shipped=${this.search.isShipped.id}`) - } - const { data } = await LNbits.api.request( - 'GET', - `/nostrmarket/api/v1/${ordersPath}?${query.join('&')}`, - this.inkey - ) - this.orders = data.map(s => ({ ...s, expanded: false })) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - getOrder: async function (orderId) { - try { - const { data } = await LNbits.api.request( - 'GET', - `/nostrmarket/api/v1/order/${orderId}`, - this.inkey - ) - return { ...data, expanded: false, isNew: true } - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - restoreOrder: async function (eventId) { - console.log('### restoreOrder', eventId) - try { - this.search.restoring = true - const {data} = await LNbits.api.request( - 'PUT', - `/nostrmarket/api/v1/order/restore/${eventId}`, - this.adminkey - ) - await this.getOrders() - this.$q.notify({ - type: 'positive', - message: 'Order restored!' - }) - return data - } catch (error) { - LNbits.utils.notifyApiError(error) - } finally { - this.search.restoring = false - } - }, - restoreOrders: async function () { - try { - this.search.restoring = true - await LNbits.api.request( - 'PUT', - `/nostrmarket/api/v1/orders/restore`, - this.adminkey - ) - await this.getOrders() - this.$q.notify({ - type: 'positive', - message: 'Orders restored!' - }) - } catch (error) { - LNbits.utils.notifyApiError(error) - } finally { - this.search.restoring = false - } - }, - reissueOrderInvoice: async function (order) { - try { - const { data } = await LNbits.api.request( - 'PUT', - `/nostrmarket/api/v1/order/reissue`, - this.adminkey, - { - id: order.id, - shipping_id: order.shipping_id - } - ) - this.$q.notify({ - type: 'positive', - message: 'Order invoice reissued!' - }) - data.expanded = order.expanded - - const i = this.orders.map(o => o.id).indexOf(order.id) - if (i !== -1) { - this.orders[i] = { ...this.orders[i], ...data } - } - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - updateOrderShipped: async function () { - this.selectedOrder.shipped = !this.selectedOrder.shipped - try { - await LNbits.api.request( - 'PATCH', - `/nostrmarket/api/v1/order/${this.selectedOrder.id}`, - this.adminkey, - { - id: this.selectedOrder.id, - message: this.shippingMessage, - shipped: this.selectedOrder.shipped - } - ) - this.$q.notify({ - type: 'positive', - message: 'Order updated!' - }) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - this.showShipDialog = false - }, - addOrder: async function (data) { - if ( - !this.search.publicKey || - this.search.publicKey === data.customerPubkey - ) { - const orderData = JSON.parse(data.dm.message) - const i = this.orders.map(o => o.id).indexOf(orderData.id) - if (i === -1) { - const order = await this.getOrder(orderData.id) - this.orders.unshift(order) - } - - } - }, - orderSelected: async function (orderId, eventId) { - const order = await this.getOrder(orderId) - if (!order) { - LNbits.utils - .confirmDialog( - "Order could not be found. Do you want to restore it from this direct message?" - ) - .onOk(async () => { - const restoredOrder = await this.restoreOrder(eventId) - console.log('### restoredOrder', restoredOrder) - if (restoredOrder) { - restoredOrder.expanded = true - restoredOrder.isNew = false - this.orders = [restoredOrder] - } - - }) - return - } - order.expanded = true - order.isNew = false - this.orders = [order] - }, - getZones: async function () { - try { - const { data } = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/zone', - this.inkey - ) - return data.map(z => ({ - id: z.id, - value: z.id, - label: z.name - ? `${z.name} (${z.countries.join(', ')})` - : z.countries.join(', ') - })) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - return [] - }, - getStalls: async function (pending = false) { - try { - const { data } = await LNbits.api.request( - 'GET', - `/nostrmarket/api/v1/stall?pending=${pending}`, - this.inkey - ) - return data.map(s => ({ ...s, expanded: false })) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - return [] - }, - getStallZones: function (stallId) { - const stall = this.stalls.find(s => s.id === stallId) - if (!stall) return [] - - return this.zoneOptions.filter(z => stall.shipping_zones.find(s => s.id === z.id)) - }, - showShipOrderDialog: function (order) { - this.selectedOrder = order - this.shippingMessage = order.shipped - ? 'The order has been shipped!' - : 'The order has NOT yet been shipped!' - - // do not change the status yet - this.selectedOrder.shipped = !order.shipped - this.showShipDialog = true - }, - customerSelected: function (customerPubkey) { - this.$emit('customer-selected', customerPubkey) - }, - getCustomers: async function () { - try { - const { data } = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/customer', - this.inkey - ) - this.customers = data - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - buildCustomerLabel: function (c) { - let label = `${c.profile.name || 'unknown'} ${c.profile.about || ''}` - if (c.unread_messages) { - label += `[new: ${c.unread_messages}]` - } - label += ` (${c.public_key.slice(0, 16)}...${c.public_key.slice( - c.public_key.length - 16 - )}` - return label - }, - orderPaid: function (orderId) { - const order = this.orders.find(o => o.id === orderId) - if (order) { - order.paid = true - } - } - }, - created: async function () { - if (this.stallId) { - await this.getOrders() - } - await this.getCustomers() - this.zoneOptions = await this.getZones() - this.stalls = await this.getStalls() - } - }) -} diff --git a/static/components/shipping-zones.js b/static/components/shipping-zones.js new file mode 100644 index 0000000..742021a --- /dev/null +++ b/static/components/shipping-zones.js @@ -0,0 +1,183 @@ +window.app.component('shipping-zones', { + name: 'shipping-zones', + props: ['adminkey', 'inkey'], + template: '#shipping-zones', + delimiters: ['${', '}'], + data: function () { + return { + zones: [], + zoneDialog: { + showDialog: false, + data: { + id: null, + name: '', + countries: [], + cost: 0, + currency: 'sat' + } + }, + currencies: [], + shippingZoneOptions: [ + 'Free (digital)', + 'Flat rate', + 'Worldwide', + 'Europe', + 'Australia', + 'Austria', + 'Belgium', + 'Brazil', + 'Canada', + 'Denmark', + 'Finland', + 'France', + 'Germany', + 'Greece', + 'Hong Kong', + 'Hungary', + 'Ireland', + 'Indonesia', + 'Israel', + 'Italy', + 'Japan', + 'Kazakhstan', + 'Korea', + 'Luxembourg', + 'Malaysia', + 'Mexico', + 'Netherlands', + 'New Zealand', + 'Norway', + 'Poland', + 'Portugal', + 'Romania', + 'Russia', + 'Saudi Arabia', + 'Singapore', + 'Spain', + 'Sweden', + 'Switzerland', + 'Thailand', + 'Turkey', + 'Ukraine', + 'United Kingdom**', + 'United States***', + 'Vietnam', + 'China' + ] + } + }, + methods: { + openZoneDialog: function (data) { + data = data || { + id: null, + name: '', + countries: [], + cost: 0, + currency: 'sat' + } + this.zoneDialog.data = data + + this.zoneDialog.showDialog = true + }, + createZone: async function () { + try { + const {data} = await LNbits.api.request( + 'POST', + '/nostrmarket/api/v1/zone', + this.adminkey, + {} + ) + this.zones = data + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + getZones: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/zone', + this.inkey + ) + this.zones = data + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + sendZoneFormData: async function () { + this.zoneDialog.showDialog = false + if (this.zoneDialog.data.id) { + await this.updateShippingZone(this.zoneDialog.data) + } else { + await this.createShippingZone(this.zoneDialog.data) + } + await this.getZones() + }, + createShippingZone: async function (newZone) { + try { + await LNbits.api.request( + 'POST', + '/nostrmarket/api/v1/zone', + this.adminkey, + newZone + ) + this.$q.notify({ + type: 'positive', + message: 'Zone created!' + }) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + updateShippingZone: async function (updatedZone) { + try { + await LNbits.api.request( + 'PATCH', + `/nostrmarket/api/v1/zone/${updatedZone.id}`, + this.adminkey, + updatedZone + ) + this.$q.notify({ + type: 'positive', + message: 'Zone updated!' + }) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + deleteShippingZone: async function () { + try { + await LNbits.api.request( + 'DELETE', + `/nostrmarket/api/v1/zone/${this.zoneDialog.data.id}`, + this.adminkey + ) + this.$q.notify({ + type: 'positive', + message: 'Zone deleted!' + }) + await this.getZones() + this.zoneDialog.showDialog = false + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + async getCurrencies() { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/currencies', + this.inkey + ) + + this.currencies = ['sat', ...data] + } catch (error) { + LNbits.utils.notifyApiError(error) + } + } + }, + created: async function () { + await this.getZones() + await this.getCurrencies() + } +}) diff --git a/static/components/shipping-zones/shipping-zones.js b/static/components/shipping-zones/shipping-zones.js deleted file mode 100644 index 173d713..0000000 --- a/static/components/shipping-zones/shipping-zones.js +++ /dev/null @@ -1,186 +0,0 @@ -async function shippingZones(path) { - const template = await loadTemplateAsync(path) - Vue.component('shipping-zones', { - name: 'shipping-zones', - props: ['adminkey', 'inkey'], - template, - - data: function () { - return { - zones: [], - zoneDialog: { - showDialog: false, - data: { - id: null, - name: '', - countries: [], - cost: 0, - currency: 'sat' - } - }, - currencies: [], - shippingZoneOptions: [ - 'Free (digital)', - 'Flat rate', - 'Worldwide', - 'Europe', - 'Australia', - 'Austria', - 'Belgium', - 'Brazil', - 'Canada', - 'Denmark', - 'Finland', - 'France', - 'Germany', - 'Greece', - 'Hong Kong', - 'Hungary', - 'Ireland', - 'Indonesia', - 'Israel', - 'Italy', - 'Japan', - 'Kazakhstan', - 'Korea', - 'Luxembourg', - 'Malaysia', - 'Mexico', - 'Netherlands', - 'New Zealand', - 'Norway', - 'Poland', - 'Portugal', - 'Romania', - 'Russia', - 'Saudi Arabia', - 'Singapore', - 'Spain', - 'Sweden', - 'Switzerland', - 'Thailand', - 'Turkey', - 'Ukraine', - 'United Kingdom**', - 'United States***', - 'Vietnam', - 'China' - ] - } - }, - methods: { - openZoneDialog: function (data) { - data = data || { - id: null, - name: '', - countries: [], - cost: 0, - currency: 'sat' - } - this.zoneDialog.data = data - - this.zoneDialog.showDialog = true - }, - createZone: async function () { - try { - const {data} = await LNbits.api.request( - 'POST', - '/nostrmarket/api/v1/zone', - this.adminkey, - {} - ) - this.zones = data - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - getZones: async function () { - try { - const {data} = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/zone', - this.inkey - ) - this.zones = data - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - sendZoneFormData: async function () { - this.zoneDialog.showDialog = false - if (this.zoneDialog.data.id) { - await this.updateShippingZone(this.zoneDialog.data) - } else { - await this.createShippingZone(this.zoneDialog.data) - } - await this.getZones() - }, - createShippingZone: async function (newZone) { - try { - await LNbits.api.request( - 'POST', - '/nostrmarket/api/v1/zone', - this.adminkey, - newZone - ) - this.$q.notify({ - type: 'positive', - message: 'Zone created!' - }) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - updateShippingZone: async function (updatedZone) { - try { - await LNbits.api.request( - 'PATCH', - `/nostrmarket/api/v1/zone/${updatedZone.id}`, - this.adminkey, - updatedZone - ) - this.$q.notify({ - type: 'positive', - message: 'Zone updated!' - }) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - deleteShippingZone: async function () { - try { - await LNbits.api.request( - 'DELETE', - `/nostrmarket/api/v1/zone/${this.zoneDialog.data.id}`, - this.adminkey - ) - this.$q.notify({ - type: 'positive', - message: 'Zone deleted!' - }) - await this.getZones() - this.zoneDialog.showDialog = false - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - async getCurrencies() { - try { - const {data} = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/currencies', - this.inkey - ) - - this.currencies = ['sat', ...data] - } catch (error) { - LNbits.utils.notifyApiError(error) - } - } - }, - created: async function () { - await this.getZones() - await this.getCurrencies() - } - }) -} diff --git a/static/components/stall-details.js b/static/components/stall-details.js new file mode 100644 index 0000000..be0633b --- /dev/null +++ b/static/components/stall-details.js @@ -0,0 +1,338 @@ +window.app.component('stall-details', { + name: 'stall-details', + template: '#stall-details', + delimiters: ['${', '}'], + props: [ + 'stall-id', + 'adminkey', + 'inkey', + 'wallet-options', + 'zone-options', + 'currencies' + ], + data: function () { + return { + tab: 'products', + stall: null, + products: [], + pendingProducts: [], + productDialog: { + showDialog: false, + showRestore: false, + url: true, + data: null + }, + productsFilter: '', + productsTable: { + columns: [ + { + name: 'delete', + align: 'left', + label: '', + field: '' + }, + { + name: 'edit', + align: 'left', + label: '', + field: '' + }, + { + name: 'activate', + align: 'left', + label: '', + field: '' + }, + + { + name: 'id', + align: 'left', + label: 'ID', + field: 'id' + }, + { + name: 'name', + align: 'left', + label: 'Name', + field: 'name' + }, + { + name: 'price', + align: 'left', + label: 'Price', + field: 'price' + }, + { + name: 'quantity', + align: 'left', + label: 'Quantity', + field: 'quantity' + } + ], + pagination: { + rowsPerPage: 10 + } + } + } + }, + computed: { + filteredZoneOptions: function () { + if (!this.stall) return [] + return this.zoneOptions.filter(z => z.currency === this.stall.currency) + } + }, + methods: { + mapStall: function (stall) { + stall.shipping_zones.forEach( + z => + (z.label = z.name + ? `${z.name} (${z.countries.join(', ')})` + : z.countries.join(', ')) + ) + return stall + }, + newEmtpyProductData: function () { + return { + id: null, + name: '', + categories: [], + images: [], + image: null, + price: 0, + + quantity: 0, + config: { + description: '', + use_autoreply: false, + autoreply_message: '', + shipping: (this.stall.shipping_zones || []).map(z => ({ + id: z.id, + name: z.name, + cost: 0 + })) + } + } + }, + getStall: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/stall/' + this.stallId, + this.inkey + ) + this.stall = this.mapStall(data) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + updateStall: async function () { + try { + const {data} = await LNbits.api.request( + 'PUT', + '/nostrmarket/api/v1/stall/' + this.stallId, + this.adminkey, + this.stall + ) + this.stall = this.mapStall(data) + this.$emit('stall-updated', this.stall) + this.$q.notify({ + type: 'positive', + message: 'Stall Updated', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }, + deleteStall: function () { + LNbits.utils + .confirmDialog( + ` + Products and orders will be deleted also! + Are you sure you want to delete this stall? + ` + ) + .onOk(async () => { + try { + await LNbits.api.request( + 'DELETE', + '/nostrmarket/api/v1/stall/' + this.stallId, + this.adminkey + ) + this.$emit('stall-deleted', this.stallId) + this.$q.notify({ + type: 'positive', + message: 'Stall Deleted', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }) + }, + addProductImage: function () { + if (!isValidImageUrl(this.productDialog.data.image)) { + this.$q.notify({ + type: 'warning', + message: 'Not a valid image URL', + timeout: 5000 + }) + return + } + this.productDialog.data.images.push(this.productDialog.data.image) + this.productDialog.data.image = null + }, + removeProductImage: function (imageUrl) { + const index = this.productDialog.data.images.indexOf(imageUrl) + if (index !== -1) { + this.productDialog.data.images.splice(index, 1) + } + }, + getProducts: async function (pending = false) { + try { + const {data} = await LNbits.api.request( + 'GET', + `/nostrmarket/api/v1/stall/product/${this.stall.id}?pending=${pending}`, + this.inkey + ) + return data + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + sendProductFormData: function () { + const data = { + stall_id: this.stall.id, + id: this.productDialog.data.id, + name: this.productDialog.data.name, + + images: this.productDialog.data.images, + price: this.productDialog.data.price, + quantity: this.productDialog.data.quantity, + categories: this.productDialog.data.categories, + config: this.productDialog.data.config + } + this.productDialog.showDialog = false + if (this.productDialog.data.id) { + data.pending = false + this.updateProduct(data) + } else { + this.createProduct(data) + } + }, + updateProduct: async function (product) { + try { + const {data} = await LNbits.api.request( + 'PATCH', + '/nostrmarket/api/v1/product/' + product.id, + this.adminkey, + product + ) + const index = this.products.findIndex(r => r.id === product.id) + if (index !== -1) { + this.products.splice(index, 1, data) + } else { + this.products.unshift(data) + } + this.$q.notify({ + type: 'positive', + message: 'Product Updated', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }, + createProduct: async function (payload) { + try { + const {data} = await LNbits.api.request( + 'POST', + '/nostrmarket/api/v1/product', + this.adminkey, + payload + ) + this.products.unshift(data) + this.$q.notify({ + type: 'positive', + message: 'Product Created', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }, + editProduct: async function (product) { + const emptyShipping = this.newEmtpyProductData().config.shipping + this.productDialog.data = {...product} + this.productDialog.data.config.shipping = emptyShipping.map( + shippingZone => { + const existingShippingCost = (product.config.shipping || []).find( + ps => ps.id === shippingZone.id + ) + shippingZone.cost = existingShippingCost?.cost || 0 + return shippingZone + } + ) + + this.productDialog.showDialog = true + }, + deleteProduct: async function (productId) { + LNbits.utils + .confirmDialog('Are you sure you want to delete this product?') + .onOk(async () => { + try { + await LNbits.api.request( + 'DELETE', + '/nostrmarket/api/v1/product/' + productId, + this.adminkey + ) + this.products = _.reject(this.products, function (obj) { + return obj.id === productId + }) + this.$q.notify({ + type: 'positive', + message: 'Product deleted', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }) + }, + showNewProductDialog: async function (data) { + this.productDialog.data = data || this.newEmtpyProductData() + this.productDialog.showDialog = true + }, + openSelectPendingProductDialog: async function () { + this.productDialog.showRestore = true + this.pendingProducts = await this.getProducts(true) + }, + openRestoreProductDialog: async function (pendingProduct) { + pendingProduct.pending = true + await this.showNewProductDialog(pendingProduct) + }, + restoreAllPendingProducts: async function () { + for (const p of this.pendingProducts) { + p.pending = false + await this.updateProduct(p) + } + }, + customerSelectedForOrder: function (customerPubkey) { + this.$emit('customer-selected-for-order', customerPubkey) + }, + shortLabel(value = '') { + if (value.length <= 44) return value + return value.substring(0, 40) + '...' + } + }, + created: async function () { + await this.getStall() + this.products = await this.getProducts() + this.productDialog.data = this.newEmtpyProductData() + } +}) diff --git a/static/components/stall-details/stall-details.html b/static/components/stall-details/stall-details.html deleted file mode 100644 index bb07526..0000000 --- a/static/components/stall-details/stall-details.html +++ /dev/null @@ -1,255 +0,0 @@ -
- - - - - - - -
-
-
ID:
-
- -
-
-
-
-
Name:
-
- -
-
-
-
-
Description:
-
- -
-
-
-
-
Wallet:
-
- - -
-
-
-
-
Currency:
-
- -
-
-
-
-
Shipping Zones:
-
- -
-
-
-
-
-
- Update Stall -
-
- Delete Stall -
-
-
- -
-
-
- - - - - New Product - Create a new product - - - - - Restore Product - Restore existing product from Nostr - - - - -
-
-
-
- -
-
- - - -
-
-
-
- -
- -
-
-
- - - - - - - -
-
- -
-
- -
-
- - - -
- -
-
- - -
- - - - - - -
-
- - - -
-
- -
-
- - -
-
-
- - - -
-
- -
-
- -
-
- - -
-
-
-
-
- - -
- - - Create Product - - Cancel -
- - -
-
-
- - -
- - - - - - - - Restore - - - - - -
-
- There are no products to be restored. -
-
- Restore All - Close -
-
-
-
\ No newline at end of file diff --git a/static/components/stall-details/stall-details.js b/static/components/stall-details/stall-details.js deleted file mode 100644 index 8a6cf8c..0000000 --- a/static/components/stall-details/stall-details.js +++ /dev/null @@ -1,334 +0,0 @@ -async function stallDetails(path) { - const template = await loadTemplateAsync(path) - - Vue.component('stall-details', { - name: 'stall-details', - template, - - props: [ - 'stall-id', - 'adminkey', - 'inkey', - 'wallet-options', - 'zone-options', - 'currencies' - ], - data: function () { - return { - tab: 'products', - stall: null, - products: [], - pendingProducts: [], - productDialog: { - showDialog: false, - showRestore: false, - url: true, - data: null - }, - productsFilter: '', - productsTable: { - columns: [ - { - name: 'delete', - align: 'left', - label: '', - field: '' - }, - { - name: 'edit', - align: 'left', - label: '', - field: '' - }, - { - name: 'activate', - align: 'left', - label: '', - field: '' - }, - - { - name: 'id', - align: 'left', - label: 'ID', - field: 'id' - }, - { - name: 'name', - align: 'left', - label: 'Name', - field: 'name' - }, - { - name: 'price', - align: 'left', - label: 'Price', - field: 'price' - }, - { - name: 'quantity', - align: 'left', - label: 'Quantity', - field: 'quantity' - } - ], - pagination: { - rowsPerPage: 10 - } - } - } - }, - computed: { - filteredZoneOptions: function () { - if (!this.stall) return [] - return this.zoneOptions.filter(z => z.currency === this.stall.currency) - } - }, - methods: { - mapStall: function (stall) { - stall.shipping_zones.forEach( - z => - (z.label = z.name - ? `${z.name} (${z.countries.join(', ')})` - : z.countries.join(', ')) - ) - return stall - }, - newEmtpyProductData: function() { - return { - id: null, - name: '', - categories: [], - images: [], - image: null, - price: 0, - - quantity: 0, - config: { - description: '', - use_autoreply: false, - autoreply_message: '', - shipping: (this.stall.shipping_zones || []).map(z => ({id: z.id, name: z.name, cost: 0})) - } - } - }, - getStall: async function () { - try { - const { data } = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/stall/' + this.stallId, - this.inkey - ) - this.stall = this.mapStall(data) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - updateStall: async function () { - try { - const { data } = await LNbits.api.request( - 'PUT', - '/nostrmarket/api/v1/stall/' + this.stallId, - this.adminkey, - this.stall - ) - this.stall = this.mapStall(data) - this.$emit('stall-updated', this.stall) - this.$q.notify({ - type: 'positive', - message: 'Stall Updated', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }, - deleteStall: function () { - LNbits.utils - .confirmDialog( - ` - Products and orders will be deleted also! - Are you sure you want to delete this stall? - ` - ) - .onOk(async () => { - try { - await LNbits.api.request( - 'DELETE', - '/nostrmarket/api/v1/stall/' + this.stallId, - this.adminkey - ) - this.$emit('stall-deleted', this.stallId) - this.$q.notify({ - type: 'positive', - message: 'Stall Deleted', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }) - }, - addProductImage: function () { - if (!isValidImageUrl(this.productDialog.data.image)) { - this.$q.notify({ - type: 'warning', - message: 'Not a valid image URL', - timeout: 5000 - }) - return - } - this.productDialog.data.images.push(this.productDialog.data.image) - this.productDialog.data.image = null - }, - removeProductImage: function (imageUrl) { - const index = this.productDialog.data.images.indexOf(imageUrl) - if (index !== -1) { - this.productDialog.data.images.splice(index, 1) - } - }, - getProducts: async function (pending = false) { - try { - const { data } = await LNbits.api.request( - 'GET', - `/nostrmarket/api/v1/stall/product/${this.stall.id}?pending=${pending}`, - this.inkey - ) - return data - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - sendProductFormData: function () { - const data = { - stall_id: this.stall.id, - id: this.productDialog.data.id, - name: this.productDialog.data.name, - - images: this.productDialog.data.images, - price: this.productDialog.data.price, - quantity: this.productDialog.data.quantity, - categories: this.productDialog.data.categories, - config: this.productDialog.data.config - } - this.productDialog.showDialog = false - if (this.productDialog.data.id) { - data.pending = false - this.updateProduct(data) - } else { - this.createProduct(data) - } - }, - updateProduct: async function (product) { - try { - const { data } = await LNbits.api.request( - 'PATCH', - '/nostrmarket/api/v1/product/' + product.id, - this.adminkey, - product - ) - const index = this.products.findIndex(r => r.id === product.id) - if (index !== -1) { - this.products.splice(index, 1, data) - } else { - this.products.unshift(data) - } - this.$q.notify({ - type: 'positive', - message: 'Product Updated', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }, - createProduct: async function (payload) { - try { - const { data } = await LNbits.api.request( - 'POST', - '/nostrmarket/api/v1/product', - this.adminkey, - payload - ) - this.products.unshift(data) - this.$q.notify({ - type: 'positive', - message: 'Product Created', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }, - editProduct: async function (product) { - const emptyShipping = this.newEmtpyProductData().config.shipping - this.productDialog.data = { ...product } - this.productDialog.data.config.shipping = emptyShipping.map(shippingZone => { - const existingShippingCost = (product.config.shipping || []).find(ps => ps.id === shippingZone.id) - shippingZone.cost = existingShippingCost?.cost || 0 - return shippingZone - }) - - this.productDialog.showDialog = true - }, - deleteProduct: async function (productId) { - LNbits.utils - .confirmDialog('Are you sure you want to delete this product?') - .onOk(async () => { - try { - await LNbits.api.request( - 'DELETE', - '/nostrmarket/api/v1/product/' + productId, - this.adminkey - ) - this.products = _.reject(this.products, function (obj) { - return obj.id === productId - }) - this.$q.notify({ - type: 'positive', - message: 'Product deleted', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }) - }, - showNewProductDialog: async function (data) { - this.productDialog.data = data || this.newEmtpyProductData() - this.productDialog.showDialog = true - }, - openSelectPendingProductDialog: async function () { - this.productDialog.showRestore = true - this.pendingProducts = await this.getProducts(true) - }, - openRestoreProductDialog: async function (pendingProduct) { - pendingProduct.pending = true - await this.showNewProductDialog(pendingProduct) - }, - restoreAllPendingProducts: async function () { - for (const p of this.pendingProducts){ - p.pending = false - await this.updateProduct(p) - } - }, - customerSelectedForOrder: function (customerPubkey) { - this.$emit('customer-selected-for-order', customerPubkey) - }, - shortLabel(value = ''){ - if (value.length <= 44) return value - return value.substring(0, 40) + '...' - } - }, - created: async function () { - await this.getStall() - this.products = await this.getProducts() - this.productDialog.data = this.newEmtpyProductData() - } - }) -} diff --git a/static/components/stall-list.js b/static/components/stall-list.js new file mode 100644 index 0000000..1ef4d70 --- /dev/null +++ b/static/components/stall-list.js @@ -0,0 +1,262 @@ +window.app.component('stall-list', { + name: 'stall-list', + template: '#stall-list', + delimiters: ['${', '}'], + props: [`adminkey`, 'inkey', 'wallet-options'], + data: function () { + return { + filter: '', + stalls: [], + pendingStalls: [], + currencies: [], + stallDialog: { + show: false, + showRestore: false, + data: { + name: '', + description: '', + wallet: null, + currency: 'sat', + shippingZones: [] + } + }, + zoneOptions: [], + stallsTable: { + columns: [ + { + name: '', + align: 'left', + label: '', + field: '' + }, + { + name: 'id', + align: 'left', + label: 'Name', + field: 'id' + }, + { + name: 'currency', + align: 'left', + label: 'Currency', + field: 'currency' + }, + { + name: 'description', + align: 'left', + label: 'Description', + field: 'description' + }, + { + name: 'shippingZones', + align: 'left', + label: 'Shipping Zones', + field: 'shippingZones' + } + ], + pagination: { + rowsPerPage: 10 + } + } + } + }, + computed: { + filteredZoneOptions: function () { + return this.zoneOptions.filter( + z => z.currency === this.stallDialog.data.currency + ) + } + }, + methods: { + sendStallFormData: async function () { + const stallData = { + name: this.stallDialog.data.name, + wallet: this.stallDialog.data.wallet, + currency: this.stallDialog.data.currency, + shipping_zones: this.stallDialog.data.shippingZones, + config: { + description: this.stallDialog.data.description + } + } + if (this.stallDialog.data.id) { + stallData.id = this.stallDialog.data.id + await this.restoreStall(stallData) + } else { + await this.createStall(stallData) + } + }, + createStall: async function (stall) { + try { + const {data} = await LNbits.api.request( + 'POST', + '/nostrmarket/api/v1/stall', + this.adminkey, + stall + ) + this.stallDialog.show = false + data.expanded = false + this.stalls.unshift(data) + this.$q.notify({ + type: 'positive', + message: 'Stall created!' + }) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + restoreStall: async function (stallData) { + try { + stallData.pending = false + const {data} = await LNbits.api.request( + 'PUT', + `/nostrmarket/api/v1/stall/${stallData.id}`, + this.adminkey, + stallData + ) + this.stallDialog.show = false + data.expanded = false + this.stalls.unshift(data) + this.$q.notify({ + type: 'positive', + message: 'Stall restored!' + }) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + deleteStall: async function (pendingStall) { + LNbits.utils + .confirmDialog( + ` + Are you sure you want to delete this pending stall '${pendingStall.name}'? + ` + ) + .onOk(async () => { + try { + await LNbits.api.request( + 'DELETE', + '/nostrmarket/api/v1/stall/' + pendingStall.id, + this.adminkey + ) + this.$q.notify({ + type: 'positive', + message: 'Pending Stall Deleted', + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }) + }, + getCurrencies: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/currencies', + this.inkey + ) + + return ['sat', ...data] + } catch (error) { + LNbits.utils.notifyApiError(error) + } + return [] + }, + getStalls: async function (pending = false) { + try { + const {data} = await LNbits.api.request( + 'GET', + `/nostrmarket/api/v1/stall?pending=${pending}`, + this.inkey + ) + return data.map(s => ({...s, expanded: false})) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + return [] + }, + getZones: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/zone', + this.inkey + ) + return data.map(z => ({ + ...z, + label: z.name + ? `${z.name} (${z.countries.join(', ')})` + : z.countries.join(', ') + })) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + return [] + }, + handleStallDeleted: function (stallId) { + this.stalls = _.reject(this.stalls, function (obj) { + return obj.id === stallId + }) + }, + handleStallUpdated: function (stall) { + const index = this.stalls.findIndex(r => r.id === stall.id) + if (index !== -1) { + stall.expanded = true + this.stalls.splice(index, 1, stall) + } + }, + openCreateStallDialog: async function (stallData) { + this.currencies = await this.getCurrencies() + this.zoneOptions = await this.getZones() + if (!this.zoneOptions || !this.zoneOptions.length) { + this.$q.notify({ + type: 'warning', + message: 'Please create a Shipping Zone first!' + }) + return + } + this.stallDialog.data = stallData || { + name: '', + description: '', + wallet: null, + currency: 'sat', + shippingZones: [] + } + this.stallDialog.show = true + }, + openSelectPendingStallDialog: async function () { + this.stallDialog.showRestore = true + this.pendingStalls = await this.getStalls(true) + }, + openRestoreStallDialog: async function (pendingStall) { + const shippingZonesIds = this.zoneOptions.map(z => z.id) + await this.openCreateStallDialog({ + id: pendingStall.id, + name: pendingStall.name, + description: pendingStall.config?.description, + currency: pendingStall.currency, + shippingZones: (pendingStall.shipping_zones || []) + .filter(z => shippingZonesIds.indexOf(z.id) !== -1) + .map(z => ({ + ...z, + label: z.name + ? `${z.name} (${z.countries.join(', ')})` + : z.countries.join(', ') + })) + }) + }, + customerSelectedForOrder: function (customerPubkey) { + this.$emit('customer-selected-for-order', customerPubkey) + }, + shortLabel(value = '') { + if (value.length <= 64) return value + return value.substring(0, 60) + '...' + } + }, + created: async function () { + this.stalls = await this.getStalls() + this.currencies = await this.getCurrencies() + this.zoneOptions = await this.getZones() + } +}) diff --git a/static/components/stall-list/stall-list.html b/static/components/stall-list/stall-list.html deleted file mode 100644 index 8981355..0000000 --- a/static/components/stall-list/stall-list.html +++ /dev/null @@ -1,117 +0,0 @@ -
-
-
- - - - - New Stall - Create a new stall - - - - - Restore Stall - Restore existing stall from Nostr - - - - - - -
-
- - - - - -
- - - - - - - - - - -
- - Cancel -
-
-
-
- - -
- - - - - - - - Restore - - - - - -
-
- There are no stalls to be restored. -
-
- Close -
-
-
-
-
\ No newline at end of file diff --git a/static/components/stall-list/stall-list.js b/static/components/stall-list/stall-list.js deleted file mode 100644 index e384895..0000000 --- a/static/components/stall-list/stall-list.js +++ /dev/null @@ -1,266 +0,0 @@ -async function stallList(path) { - const template = await loadTemplateAsync(path) - Vue.component('stall-list', { - name: 'stall-list', - template, - - props: [`adminkey`, 'inkey', 'wallet-options'], - data: function () { - return { - filter: '', - stalls: [], - pendingStalls: [], - currencies: [], - stallDialog: { - show: false, - showRestore: false, - data: { - name: '', - description: '', - wallet: null, - currency: 'sat', - shippingZones: [] - } - }, - zoneOptions: [], - stallsTable: { - columns: [ - { - name: '', - align: 'left', - label: '', - field: '' - }, - { - name: 'id', - align: 'left', - label: 'Name', - field: 'id' - }, - { - name: 'currency', - align: 'left', - label: 'Currency', - field: 'currency' - }, - { - name: 'description', - align: 'left', - label: 'Description', - field: 'description' - }, - { - name: 'shippingZones', - align: 'left', - label: 'Shipping Zones', - field: 'shippingZones' - } - ], - pagination: { - rowsPerPage: 10 - } - } - } - }, - computed: { - filteredZoneOptions: function () { - return this.zoneOptions.filter( - z => z.currency === this.stallDialog.data.currency - ) - } - }, - methods: { - sendStallFormData: async function () { - const stallData = { - name: this.stallDialog.data.name, - wallet: this.stallDialog.data.wallet, - currency: this.stallDialog.data.currency, - shipping_zones: this.stallDialog.data.shippingZones, - config: { - description: this.stallDialog.data.description - } - } - if (this.stallDialog.data.id) { - stallData.id = this.stallDialog.data.id - await this.restoreStall(stallData) - } else { - await this.createStall(stallData) - } - - }, - createStall: async function (stall) { - try { - const { data } = await LNbits.api.request( - 'POST', - '/nostrmarket/api/v1/stall', - this.adminkey, - stall - ) - this.stallDialog.show = false - data.expanded = false - this.stalls.unshift(data) - this.$q.notify({ - type: 'positive', - message: 'Stall created!' - }) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - restoreStall: async function (stallData) { - try { - stallData.pending = false - const { data } = await LNbits.api.request( - 'PUT', - `/nostrmarket/api/v1/stall/${stallData.id}`, - this.adminkey, - stallData - ) - this.stallDialog.show = false - data.expanded = false - this.stalls.unshift(data) - this.$q.notify({ - type: 'positive', - message: 'Stall restored!' - }) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - deleteStall: async function (pendingStall) { - LNbits.utils - .confirmDialog( - ` - Are you sure you want to delete this pending stall '${pendingStall.name}'? - ` - ) - .onOk(async () => { - try { - await LNbits.api.request( - 'DELETE', - '/nostrmarket/api/v1/stall/' + pendingStall.id, - this.adminkey - ) - this.$q.notify({ - type: 'positive', - message: 'Pending Stall Deleted', - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) - } - }) - }, - getCurrencies: async function () { - try { - const { data } = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/currencies', - this.inkey - ) - - return ['sat', ...data] - } catch (error) { - LNbits.utils.notifyApiError(error) - } - return [] - }, - getStalls: async function (pending = false) { - try { - const { data } = await LNbits.api.request( - 'GET', - `/nostrmarket/api/v1/stall?pending=${pending}`, - this.inkey - ) - return data.map(s => ({ ...s, expanded: false })) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - return [] - }, - getZones: async function () { - try { - const { data } = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/zone', - this.inkey - ) - return data.map(z => ({ - ...z, - label: z.name - ? `${z.name} (${z.countries.join(', ')})` - : z.countries.join(', ') - })) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - return [] - }, - handleStallDeleted: function (stallId) { - this.stalls = _.reject(this.stalls, function (obj) { - return obj.id === stallId - }) - }, - handleStallUpdated: function (stall) { - const index = this.stalls.findIndex(r => r.id === stall.id) - if (index !== -1) { - stall.expanded = true - this.stalls.splice(index, 1, stall) - } - }, - openCreateStallDialog: async function (stallData) { - this.currencies = await this.getCurrencies() - this.zoneOptions = await this.getZones() - if (!this.zoneOptions || !this.zoneOptions.length) { - this.$q.notify({ - type: 'warning', - message: 'Please create a Shipping Zone first!' - }) - return - } - this.stallDialog.data = stallData || { - name: '', - description: '', - wallet: null, - currency: 'sat', - shippingZones: [] - } - this.stallDialog.show = true - }, - openSelectPendingStallDialog: async function () { - this.stallDialog.showRestore = true - this.pendingStalls = await this.getStalls(true) - }, - openRestoreStallDialog: async function (pendingStall) { - const shippingZonesIds = this.zoneOptions.map(z => z.id) - await this.openCreateStallDialog({ - id: pendingStall.id, - name: pendingStall.name, - description: pendingStall.config?.description, - currency: pendingStall.currency, - shippingZones: (pendingStall.shipping_zones || []) - .filter(z => shippingZonesIds.indexOf(z.id) !== -1) - .map(z => ({ - ...z, - label: z.name - ? `${z.name} (${z.countries.join(', ')})` - : z.countries.join(', ') - })) - }) - }, - customerSelectedForOrder: function (customerPubkey) { - this.$emit('customer-selected-for-order', customerPubkey) - }, - shortLabel(value = ''){ - if (value.length <= 64) return value - return value.substring(0, 60) + '...' - } - }, - created: async function () { - this.stalls = await this.getStalls() - this.currencies = await this.getCurrencies() - this.zoneOptions = await this.getZones() - } - }) -} diff --git a/static/js/index.js b/static/js/index.js index 4e8cf2f..3d89779 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -1,241 +1,228 @@ -const merchant = async () => { - Vue.component(VueQrcode.name, VueQrcode) +const nostr = window.NostrTools - await keyPair('static/components/key-pair/key-pair.html') - await shippingZones('static/components/shipping-zones/shipping-zones.html') - await stallDetails('static/components/stall-details/stall-details.html') - await stallList('static/components/stall-list/stall-list.html') - await orderList('static/components/order-list/order-list.html') - await directMessages('static/components/direct-messages/direct-messages.html') - await merchantDetails( - 'static/components/merchant-details/merchant-details.html' - ) - - const nostr = window.NostrTools - - new Vue({ - el: '#vue', - mixins: [windowMixin], - data: function () { - return { - merchant: {}, - shippingZones: [], - activeChatCustomer: '', - orderPubkey: null, - showKeys: false, - importKeyDialog: { - show: false, - data: { - privateKey: null - } - }, - wsConnection: null - } - }, - methods: { - generateKeys: async function () { - const privateKey = nostr.generatePrivateKey() - await this.createMerchant(privateKey) - }, - importKeys: async function () { - this.importKeyDialog.show = false - let privateKey = this.importKeyDialog.data.privateKey - if (!privateKey) { - return - } - try { - if (privateKey.toLowerCase().startsWith('nsec')) { - privateKey = nostr.nip19.decode(privateKey).data - } - } catch (error) { - this.$q.notify({ - type: 'negative', - message: `${error}` - }) - } - await this.createMerchant(privateKey) - }, - showImportKeysDialog: async function () { - this.importKeyDialog.show = true - }, - toggleShowKeys: function () { - this.showKeys = !this.showKeys - }, - toggleMerchantState: async function () { - const merchant = await this.getMerchant() - if (!merchant) { - this.$q.notify({ - timeout: 5000, - type: 'warning', - message: "Cannot fetch merchant!" - }) - return - } - const message = merchant.config.active ? - 'New orders will not be processed. Are you sure you want to deactivate?' : - merchant.config.restore_in_progress ? - 'Merchant restore from nostr in progress. Please wait!! ' + - 'Activating now can lead to duplicate order processing. Click "OK" if you want to activate anyway?' : - 'Are you sure you want activate this merchant?' - - LNbits.utils - .confirmDialog(message) - .onOk(async () => { - await this.toggleMerchant() - }) - }, - toggleMerchant: async function () { - try { - const { data } = await LNbits.api.request( - 'PUT', - `/nostrmarket/api/v1/merchant/${this.merchant.id}/toggle`, - this.g.user.wallets[0].adminkey, - ) - const state = data.config.active ? 'activated' : 'disabled' - this.merchant = data - this.$q.notify({ - type: 'positive', - message: `'Merchant ${state}`, - timeout: 5000 - }) - } catch (error) { - console.warn(error) - LNbits.utils.notifyApiError(error) +window.app = Vue.createApp({ + el: '#vue', + mixins: [window.windowMixin], + data: function () { + return { + merchant: {}, + shippingZones: [], + activeChatCustomer: '', + orderPubkey: null, + showKeys: false, + importKeyDialog: { + show: false, + data: { + privateKey: null } }, - handleMerchantDeleted: function () { - this.merchant = null - this.shippingZones = [] - this.activeChatCustomer = '' - this.showKeys = false - }, - createMerchant: async function (privateKey) { - try { - const pubkey = nostr.getPublicKey(privateKey) - const payload = { - private_key: privateKey, - public_key: pubkey, - config: {} - } - const { data } = await LNbits.api.request( - 'POST', - '/nostrmarket/api/v1/merchant', - this.g.user.wallets[0].adminkey, - payload - ) - this.merchant = data - this.$q.notify({ - type: 'positive', - message: 'Merchant Created!' - }) - this.waitForNotifications() - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - getMerchant: async function () { - try { - const { data } = await LNbits.api.request( - 'GET', - '/nostrmarket/api/v1/merchant', - this.g.user.wallets[0].inkey - ) - this.merchant = data - return data - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }, - customerSelectedForOrder: function (customerPubkey) { - this.activeChatCustomer = customerPubkey - }, - filterOrdersForCustomer: function (customerPubkey) { - this.orderPubkey = customerPubkey - }, - showOrderDetails: async function (orderData) { - await this.$refs.orderListRef.orderSelected(orderData.orderId, orderData.eventId) - }, - waitForNotifications: async function () { - if (!this.merchant) return - try { - const scheme = location.protocol === 'http:' ? 'ws' : 'wss' - const port = location.port ? `:${location.port}` : '' - const wsUrl = `${scheme}://${document.domain}${port}/api/v1/ws/${this.merchant.id}` - console.log('Reconnecting to websocket: ', wsUrl) - this.wsConnection = new WebSocket(wsUrl) - this.wsConnection.onmessage = async e => { - const data = JSON.parse(e.data) - if (data.type === 'dm:0') { - this.$q.notify({ - timeout: 5000, - type: 'positive', - message: 'New Order' - }) - - await this.$refs.directMessagesRef.handleNewMessage(data) - return - } - if (data.type === 'dm:1') { - await this.$refs.directMessagesRef.handleNewMessage(data) - await this.$refs.orderListRef.addOrder(data) - return - } - if (data.type === 'dm:2') { - const orderStatus = JSON.parse(data.dm.message) - this.$q.notify({ - timeout: 5000, - type: 'positive', - message: orderStatus.message - }) - if (orderStatus.paid) { - await this.$refs.orderListRef.orderPaid(orderStatus.id) - } - await this.$refs.directMessagesRef.handleNewMessage(data) - return - } - if (data.type === 'dm:-1') { - await this.$refs.directMessagesRef.handleNewMessage(data) - } - // order paid - // order shipped - } - - } catch (error) { - this.$q.notify({ - timeout: 5000, - type: 'warning', - message: 'Failed to watch for updates', - caption: `${error}` - }) - } - }, - restartNostrConnection: async function () { - LNbits.utils - .confirmDialog( - 'Are you sure you want to reconnect to the nostrcient extension?' - ) - .onOk(async () => { - try { - await LNbits.api.request( - 'PUT', - '/nostrmarket/api/v1/restart', - this.g.user.wallets[0].adminkey - ) - } catch (error) { - LNbits.utils.notifyApiError(error) - } - }) - } - }, - created: async function () { - await this.getMerchant() - setInterval(async () => { - if (!this.wsConnection || this.wsConnection.readyState !== WebSocket.OPEN) { - await this.waitForNotifications() - } - }, 1000) + wsConnection: null } - }) -} + }, + methods: { + generateKeys: async function () { + const privateKey = nostr.generatePrivateKey() + await this.createMerchant(privateKey) + }, + importKeys: async function () { + this.importKeyDialog.show = false + let privateKey = this.importKeyDialog.data.privateKey + if (!privateKey) { + return + } + try { + if (privateKey.toLowerCase().startsWith('nsec')) { + privateKey = nostr.nip19.decode(privateKey).data + } + } catch (error) { + this.$q.notify({ + type: 'negative', + message: `${error}` + }) + } + await this.createMerchant(privateKey) + }, + showImportKeysDialog: async function () { + this.importKeyDialog.show = true + }, + toggleShowKeys: function () { + this.showKeys = !this.showKeys + }, + toggleMerchantState: async function () { + const merchant = await this.getMerchant() + if (!merchant) { + this.$q.notify({ + timeout: 5000, + type: 'warning', + message: 'Cannot fetch merchant!' + }) + return + } + const message = merchant.config.active + ? 'New orders will not be processed. Are you sure you want to deactivate?' + : merchant.config.restore_in_progress + ? 'Merchant restore from nostr in progress. Please wait!! ' + + 'Activating now can lead to duplicate order processing. Click "OK" if you want to activate anyway?' + : 'Are you sure you want activate this merchant?' -merchant() + LNbits.utils.confirmDialog(message).onOk(async () => { + await this.toggleMerchant() + }) + }, + toggleMerchant: async function () { + try { + const {data} = await LNbits.api.request( + 'PUT', + `/nostrmarket/api/v1/merchant/${this.merchant.id}/toggle`, + this.g.user.wallets[0].adminkey + ) + const state = data.config.active ? 'activated' : 'disabled' + this.merchant = data + this.$q.notify({ + type: 'positive', + message: `'Merchant ${state}`, + timeout: 5000 + }) + } catch (error) { + console.warn(error) + LNbits.utils.notifyApiError(error) + } + }, + handleMerchantDeleted: function () { + this.merchant = null + this.shippingZones = [] + this.activeChatCustomer = '' + this.showKeys = false + }, + createMerchant: async function (privateKey) { + try { + const pubkey = nostr.getPublicKey(privateKey) + const payload = { + private_key: privateKey, + public_key: pubkey, + config: {} + } + const {data} = await LNbits.api.request( + 'POST', + '/nostrmarket/api/v1/merchant', + this.g.user.wallets[0].adminkey, + payload + ) + this.merchant = data + this.$q.notify({ + type: 'positive', + message: 'Merchant Created!' + }) + this.waitForNotifications() + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + getMerchant: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/nostrmarket/api/v1/merchant', + this.g.user.wallets[0].inkey + ) + this.merchant = data + return data + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + customerSelectedForOrder: function (customerPubkey) { + this.activeChatCustomer = customerPubkey + }, + filterOrdersForCustomer: function (customerPubkey) { + this.orderPubkey = customerPubkey + }, + showOrderDetails: async function (orderData) { + await this.$refs.orderListRef.orderSelected( + orderData.orderId, + orderData.eventId + ) + }, + waitForNotifications: async function () { + if (!this.merchant) return + try { + const scheme = location.protocol === 'http:' ? 'ws' : 'wss' + const port = location.port ? `:${location.port}` : '' + const wsUrl = `${scheme}://${document.domain}${port}/api/v1/ws/${this.merchant.id}` + console.log('Reconnecting to websocket: ', wsUrl) + this.wsConnection = new WebSocket(wsUrl) + this.wsConnection.onmessage = async e => { + const data = JSON.parse(e.data) + if (data.type === 'dm:0') { + this.$q.notify({ + timeout: 5000, + type: 'positive', + message: 'New Order' + }) + + await this.$refs.directMessagesRef.handleNewMessage(data) + return + } + if (data.type === 'dm:1') { + await this.$refs.directMessagesRef.handleNewMessage(data) + await this.$refs.orderListRef.addOrder(data) + return + } + if (data.type === 'dm:2') { + const orderStatus = JSON.parse(data.dm.message) + this.$q.notify({ + timeout: 5000, + type: 'positive', + message: orderStatus.message + }) + if (orderStatus.paid) { + await this.$refs.orderListRef.orderPaid(orderStatus.id) + } + await this.$refs.directMessagesRef.handleNewMessage(data) + return + } + if (data.type === 'dm:-1') { + await this.$refs.directMessagesRef.handleNewMessage(data) + } + // order paid + // order shipped + } + } catch (error) { + this.$q.notify({ + timeout: 5000, + type: 'warning', + message: 'Failed to watch for updates', + caption: `${error}` + }) + } + }, + restartNostrConnection: async function () { + LNbits.utils + .confirmDialog( + 'Are you sure you want to reconnect to the nostrcient extension?' + ) + .onOk(async () => { + try { + await LNbits.api.request( + 'PUT', + '/nostrmarket/api/v1/restart', + this.g.user.wallets[0].adminkey + ) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }) + } + }, + created: async function () { + await this.getMerchant() + setInterval(async () => { + if ( + !this.wsConnection || + this.wsConnection.readyState !== WebSocket.OPEN + ) { + await this.waitForNotifications() + } + }, 1000) + } +}) diff --git a/static/js/utils.js b/static/js/utils.js index a28c455..b244fce 100644 --- a/static/js/utils.js +++ b/static/js/utils.js @@ -23,7 +23,7 @@ function imgSizeFit(img, maxWidth = 1024, maxHeight = 768) { maxWidth / img.naturalWidth, maxHeight / img.naturalHeight ) - return { width: img.naturalWidth * ratio, height: img.naturalHeight * ratio } + return {width: img.naturalWidth * ratio, height: img.naturalHeight * ratio} } async function hash(string) { @@ -125,7 +125,7 @@ function isValidImageUrl(string) { function isValidKey(key, prefix = 'n') { try { if (key && key.startsWith(prefix)) { - let { _, data } = NostrTools.nip19.decode(key) + let {_, data} = NostrTools.nip19.decode(key) key = data } return isValidKeyHex(key) @@ -143,4 +143,4 @@ function formatCurrency(value, currency) { style: 'currency', currency: currency }).format(value) -} \ No newline at end of file +} diff --git a/static/market/index.html b/static/market/index.html index 4b4e656..381d551 100644 --- a/static/market/index.html +++ b/static/market/index.html @@ -11,11 +11,11 @@ - - - - - + + + + + diff --git a/tasks.py b/tasks.py index 4f50ebe..013a281 100644 --- a/tasks.py +++ b/tasks.py @@ -1,10 +1,9 @@ -from asyncio import Queue import asyncio - -from loguru import logger +from asyncio import Queue from lnbits.core.models import Payment from lnbits.tasks import register_invoice_listener +from loguru import logger from .nostr.nostr_client import NostrClient from .services import ( diff --git a/templates/nostrmarket/components/direct-messages.html b/templates/nostrmarket/components/direct-messages.html new file mode 100644 index 0000000..8950923 --- /dev/null +++ b/templates/nostrmarket/components/direct-messages.html @@ -0,0 +1,169 @@ +
+ + +
+
+
Messages
+
+
+   new +
+
+ Client Orders +
+
+
+ + + + +
+
+ + +
+
+ + Add a public key to chat with + +
+
+
+ +
+
+
+ +
+
+ New order: +
+
+ Reply sent for order: +
+
+ Paid + Shipped + +
+
+ + + + +
+ ... +
+
+
+
+
+ + + + + + + +
+
+
+
+ + + + +
+ Add + Cancel +
+
+
+
+ + + + +
+ Close +
+
+
+
+
+
diff --git a/static/components/key-pair/key-pair.html b/templates/nostrmarket/components/key-pair.html similarity index 84% rename from static/components/key-pair/key-pair.html rename to templates/nostrmarket/components/key-pair.html index a0657fa..2b65737 100644 --- a/static/components/key-pair/key-pair.html +++ b/templates/nostrmarket/components/key-pair.html @@ -13,11 +13,11 @@
- + >
Click to copy
@@ -30,11 +30,7 @@ class="q-mx-xl" @click="copyText(privateKey)" > - +
Click to copy
diff --git a/static/components/merchant-details/merchant-details.html b/templates/nostrmarket/components/merchant-details.html similarity index 100% rename from static/components/merchant-details/merchant-details.html rename to templates/nostrmarket/components/merchant-details.html diff --git a/templates/nostrmarket/components/order-list.html b/templates/nostrmarket/components/order-list.html new file mode 100644 index 0000000..13e684f --- /dev/null +++ b/templates/nostrmarket/components/order-list.html @@ -0,0 +1,369 @@ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + + + + Restore Orders + Restore previous orders from Nostr + + + +
+
+
+
+ + + +
+
+ + + + + +
+ + + Cancel +
+
+
+
+
diff --git a/static/components/shipping-zones/shipping-zones.html b/templates/nostrmarket/components/shipping-zones.html similarity index 91% rename from static/components/shipping-zones/shipping-zones.html rename to templates/nostrmarket/components/shipping-zones.html index 04f5650..3f0fd08 100644 --- a/static/components/shipping-zones/shipping-zones.html +++ b/templates/nostrmarket/components/shipping-zones.html @@ -22,12 +22,13 @@ @click="openZoneDialog(zone)" > - {{zone.name}} - {{zone.countries.join(", ")}} + + - - + diff --git a/templates/nostrmarket/components/stall-details.html b/templates/nostrmarket/components/stall-details.html new file mode 100644 index 0000000..aa67673 --- /dev/null +++ b/templates/nostrmarket/components/stall-details.html @@ -0,0 +1,466 @@ +
+ + + + + + + +
+
+
ID:
+
+ +
+
+
+
+
Name:
+
+ +
+
+
+
+
Description:
+
+ +
+
+
+
+
Wallet:
+
+ + +
+
+
+
+
Currency:
+
+ +
+
+
+
+
Shipping Zones:
+
+ +
+
+
+
+
+
+ Update Stall +
+
+ Delete Stall +
+
+
+ +
+
+
+ + + + New Product + Create a new product + + + + + Restore Product + Restore existing product from Nostr + + + +
+
+
+
+ +
+
+ + + +
+
+
+
+ +
+ +
+
+
+ + + + + + + +
+
+ +
+
+ +
+
+ + +
+ +
+
+ + +
+ + + + + + +
+
+ + +
+
+ +
+
+ + +
+
+
+ + + +
+
+ +
+
+ +
+
+ + +
+
+
+
+
+ +
+ + + Create Product + + Cancel +
+
+
+
+ + +
+ + + + + + + + Restore + + + + + +
+
There are no products to be restored.
+
+ Restore All + Close +
+
+
+
diff --git a/templates/nostrmarket/components/stall-list.html b/templates/nostrmarket/components/stall-list.html new file mode 100644 index 0000000..632eeaa --- /dev/null +++ b/templates/nostrmarket/components/stall-list.html @@ -0,0 +1,215 @@ +
+
+
+ + + + New Stall + Create a new stall + + + + + Restore Stall + Restore existing stall from Nostr + + + + + + +
+
+ + + + + +
+ + + + + + + + + + +
+ + Cancel +
+
+
+
+ + +
+ + + + + + + + Restore + + + + + +
+
There are no stalls to be restored.
+
+ Close +
+
+
+
+
diff --git a/templates/nostrmarket/index.html b/templates/nostrmarket/index.html index e7296c3..9b1cafc 100644 --- a/templates/nostrmarket/index.html +++ b/templates/nostrmarket/index.html @@ -18,14 +18,17 @@
+ @update:model-value="toggleMerchantState()" + size="md" + checked-icon="check" + v-model="merchant.config.active" + color="primary" + unchecked-icon="clear" + class="float-left" + /> +
+ + + + + + + + - - - - - - - + + + + + + + + {% endblock %} diff --git a/templates/nostrmarket/market.html b/templates/nostrmarket/market.html index b03a7a4..4c72d1a 100644 --- a/templates/nostrmarket/market.html +++ b/templates/nostrmarket/market.html @@ -1,36 +1,59 @@ - + - - + Nostr Market App - - - - - - + + + + + - + - - - + + + - - - + + + - -
- - - \ No newline at end of file + +
+ + diff --git a/toc.md b/toc.md index 544be53..baa0342 100644 --- a/toc.md +++ b/toc.md @@ -1,22 +1,29 @@ # Terms and Conditions for LNbits Extension ## 1. Acceptance of Terms + By installing and using the LNbits extension ("Extension"), you agree to be bound by these terms and conditions ("Terms"). If you do not agree to these Terms, do not use the Extension. ## 2. License + The Extension is free and open-source software, released under [specify the FOSS license here, e.g., GPL-3.0, MIT, etc.]. You are permitted to use, copy, modify, and distribute the Extension under the terms of that license. ## 3. No Warranty + The Extension is provided "as is" and with all faults, and the developer expressly disclaims all warranties of any kind, whether express, implied, statutory, or otherwise, including but not limited to warranties of merchantability, fitness for a particular purpose, non-infringement, and any warranties arising out of course of dealing or usage of trade. No advice or information, whether oral or written, obtained from the developer or elsewhere will create any warranty not expressly stated in this Terms. ## 4. Limitation of Liability + In no event will the developer be liable to you or any third party for any direct, indirect, incidental, special, consequential, or punitive damages, including lost profit, lost revenue, loss of data, or other damages arising out of or in connection with your use of the Extension, even if the developer has been advised of the possibility of such damages. The foregoing limitation of liability shall apply to the fullest extent permitted by law in the applicable jurisdiction. ## 5. Modification of Terms + The developer reserves the right to modify these Terms at any time. You are advised to review these Terms periodically for any changes. Changes to these Terms are effective when they are posted on the appropriate location within or associated with the Extension. ## 6. General Provisions + If any provision of these Terms is held to be invalid or unenforceable, that provision will be enforced to the maximum extent permissible, and the other provisions of these Terms will remain in full force and effect. These Terms constitute the entire agreement between you and the developer regarding the use of the Extension. ## 7. Contact Information -If you have any questions about these Terms, please contact the developer at [developer's contact information]. \ No newline at end of file + +If you have any questions about these Terms, please contact the developer at [developer's contact information]. diff --git a/views.py b/views.py index 3b757fb..4c3e5e7 100644 --- a/views.py +++ b/views.py @@ -1,13 +1,8 @@ -import json -from http import HTTPStatus - -from fastapi import Depends, Query, Request +from fastapi import Depends, Request from fastapi.templating import Jinja2Templates -from loguru import logger -from starlette.responses import HTMLResponse - from lnbits.core.models import User from lnbits.decorators import check_user_exists +from starlette.responses import HTMLResponse from . import nostrmarket_ext, nostrmarket_renderer @@ -18,7 +13,7 @@ templates = Jinja2Templates(directory="templates") async def index(request: Request, user: User = Depends(check_user_exists)): return nostrmarket_renderer().TemplateResponse( "nostrmarket/index.html", - {"request": request, "user": user.dict()}, + {"request": request, "user": user.json()}, ) diff --git a/views_api.py b/views_api.py index 9f77217..b8019fa 100644 --- a/views_api.py +++ b/views_api.py @@ -4,16 +4,14 @@ from typing import List, Optional from fastapi import Depends from fastapi.exceptions import HTTPException -from loguru import logger - from lnbits.core.services import websocket_updater from lnbits.decorators import ( WalletTypeInfo, - get_key_type, require_admin_key, require_invoice_key, ) from lnbits.utils.exchange_rates import currencies +from loguru import logger from . import nostr_client, nostrmarket_ext from .crud import ( @@ -71,9 +69,6 @@ from .models import ( PartialDirectMessage, PartialMerchant, PartialOrder, - PartialProduct, - PartialStall, - PartialZone, PaymentOption, PaymentRequest, Product, @@ -81,16 +76,16 @@ from .models import ( Zone, ) from .services import ( - reply_to_structured_dm, build_order_with_payment, create_or_update_order_from_dm, + reply_to_structured_dm, resubscribe_to_all_merchants, sign_and_send_to_nostr, subscribe_to_all_merchants, update_merchant_to_nostr, ) -######################################## MERCHANT ######################################## +######################################## MERCHANT ###################################### @nostrmarket_ext.post("/api/v1/merchant") @@ -101,16 +96,16 @@ async def api_create_merchant( try: merchant = await get_merchant_by_pubkey(data.public_key) - assert merchant == None, "A merchant already uses this public key" + assert merchant is None, "A merchant already uses this public key" merchant = await get_merchant_for_user(wallet.wallet.user) - assert merchant == None, "A merchant already exists for this user" + assert merchant is None, "A merchant already exists for this user" merchant = await create_merchant(wallet.wallet.user, data) await create_zone( merchant.id, - PartialZone( + Zone( id=f"online-{merchant.public_key}", name="Online", currency="sat", @@ -128,13 +123,13 @@ async def api_create_merchant( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot create merchant", - ) + ) from ex @nostrmarket_ext.get("/api/v1/merchant") @@ -145,11 +140,12 @@ async def api_get_merchant( try: merchant = await get_merchant_for_user(wallet.wallet.user) if not merchant: - return + return None merchant = await touch_merchant(wallet.wallet.user, merchant.id) + assert merchant last_dm_time = await get_last_direct_messages_time(merchant.id) - + assert merchant.time merchant.config.restore_in_progress = (merchant.time - last_dm_time) < 30 return merchant @@ -158,7 +154,7 @@ async def api_get_merchant( raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get merchant", - ) + ) from ex @nostrmarket_ext.delete("/api/v1/merchant/{merchant_id}") @@ -186,16 +182,17 @@ async def api_delete_merchant( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get merchant", - ) + ) from ex finally: await subscribe_to_all_merchants() + @nostrmarket_ext.put("/api/v1/merchant/{merchant_id}/nostr") async def api_republish_merchant( merchant_id: str, @@ -213,13 +210,14 @@ async def api_republish_merchant( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot republish to nostr", - ) + ) from ex + @nostrmarket_ext.get("/api/v1/merchant/{merchant_id}/nostr") async def api_refresh_merchant( @@ -237,13 +235,13 @@ async def api_refresh_merchant( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot refresh from nostr", - ) + ) from ex @nostrmarket_ext.put("/api/v1/merchant/{merchant_id}/toggle") @@ -264,17 +262,17 @@ async def api_toggle_merchant( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get merchant", - ) + ) from ex @nostrmarket_ext.delete("/api/v1/merchant/{merchant_id}/nostr") -async def api_delete_merchant( +async def api_delete_merchant_on_nostr( merchant_id: str, wallet: WalletTypeInfo = Depends(require_admin_key), ): @@ -290,20 +288,22 @@ async def api_delete_merchant( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get merchant", - ) + ) from ex ######################################## ZONES ######################################## @nostrmarket_ext.get("/api/v1/zone") -async def api_get_zones(wallet: WalletTypeInfo = Depends(get_key_type)) -> List[Zone]: +async def api_get_zones( + wallet: WalletTypeInfo = Depends(require_invoice_key), +) -> List[Zone]: try: merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found" @@ -312,18 +312,18 @@ async def api_get_zones(wallet: WalletTypeInfo = Depends(get_key_type)) -> List[ raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get zone", - ) + ) from ex @nostrmarket_ext.post("/api/v1/zone") async def api_create_zone( - data: PartialZone, wallet: WalletTypeInfo = Depends(require_admin_key) + data: Zone, wallet: WalletTypeInfo = Depends(require_admin_key) ): try: merchant = await get_merchant_for_user(wallet.wallet.user) @@ -334,13 +334,13 @@ async def api_create_zone( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot create zone", - ) + ) from ex @nostrmarket_ext.patch("/api/v1/zone/{zone_id}") @@ -365,15 +365,14 @@ async def api_update_zone( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) - except HTTPException as ex: - raise ex + ) from ex + except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot update zone", - ) + ) from ex @nostrmarket_ext.delete("/api/v1/zone/{zone_id}") @@ -394,13 +393,13 @@ async def api_delete_zone(zone_id, wallet: WalletTypeInfo = Depends(require_admi raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot delete zone", - ) + ) from ex ######################################## STALLS ######################################## @@ -408,7 +407,7 @@ async def api_delete_zone(zone_id, wallet: WalletTypeInfo = Depends(require_admi @nostrmarket_ext.post("/api/v1/stall") async def api_create_stall( - data: PartialStall, + data: Stall, wallet: WalletTypeInfo = Depends(require_admin_key), ) -> Stall: try: @@ -430,13 +429,13 @@ async def api_create_stall( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot create stall", - ) + ) from ex @nostrmarket_ext.put("/api/v1/stall/{stall_id}") @@ -459,23 +458,24 @@ async def api_update_stall( await update_stall(merchant.id, stall) return stall - except HTTPException as ex: - raise ex + except (ValueError, AssertionError) as ex: raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot update stall", - ) + ) from ex @nostrmarket_ext.get("/api/v1/stall/{stall_id}") -async def api_get_stall(stall_id: str, wallet: WalletTypeInfo = Depends(get_key_type)): +async def api_get_stall( + stall_id: str, wallet: WalletTypeInfo = Depends(require_invoice_key) +): try: merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found" @@ -490,7 +490,7 @@ async def api_get_stall(stall_id: str, wallet: WalletTypeInfo = Depends(get_key_ raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except HTTPException as ex: raise ex except Exception as ex: @@ -498,12 +498,13 @@ async def api_get_stall(stall_id: str, wallet: WalletTypeInfo = Depends(get_key_ raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get stall", - ) + ) from ex @nostrmarket_ext.get("/api/v1/stall") async def api_get_stalls( - pending: Optional[bool] = False, wallet: WalletTypeInfo = Depends(get_key_type) + pending: Optional[bool] = False, + wallet: WalletTypeInfo = Depends(require_invoice_key), ): try: merchant = await get_merchant_for_user(wallet.wallet.user) @@ -514,13 +515,13 @@ async def api_get_stalls( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get stalls", - ) + ) from ex @nostrmarket_ext.get("/api/v1/stall/product/{stall_id}") @@ -538,13 +539,13 @@ async def api_get_stall_products( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get stall products", - ) + ) from ex @nostrmarket_ext.get("/api/v1/stall/order/{stall_id}") @@ -566,13 +567,13 @@ async def api_get_stall_orders( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get stall products", - ) + ) from ex @nostrmarket_ext.delete("/api/v1/stall/{stall_id}") @@ -600,23 +601,21 @@ async def api_delete_stall( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) - except HTTPException as ex: - raise ex + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot delete stall", - ) + ) from ex -######################################## PRODUCTS ######################################## +######################################## PRODUCTS ###################################### @nostrmarket_ext.post("/api/v1/product") async def api_create_product( - data: PartialProduct, + data: Product, wallet: WalletTypeInfo = Depends(require_admin_key), ) -> Product: try: @@ -639,13 +638,13 @@ async def api_create_product( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot create product", - ) + ) from ex @nostrmarket_ext.patch("/api/v1/product/{product_id}") @@ -675,13 +674,13 @@ async def api_update_product( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot update product", - ) + ) from ex @nostrmarket_ext.get("/api/v1/product/{product_id}") @@ -699,13 +698,13 @@ async def api_get_product( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get product", - ) + ) from ex @nostrmarket_ext.delete("/api/v1/product/{product_id}") @@ -731,15 +730,13 @@ async def api_delete_product( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) - except HTTPException as ex: - raise ex + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot delete product", - ) + ) from ex ######################################## ORDERS ######################################## @@ -764,15 +761,13 @@ async def api_get_order( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) - except HTTPException as ex: - raise ex + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get order", - ) + ) from ex @nostrmarket_ext.get("/api/v1/order") @@ -780,7 +775,7 @@ async def api_get_orders( paid: Optional[bool] = None, shipped: Optional[bool] = None, pubkey: Optional[str] = None, - wallet: WalletTypeInfo = Depends(get_key_type), + wallet: WalletTypeInfo = Depends(require_invoice_key), ): try: merchant = await get_merchant_for_user(wallet.wallet.user) @@ -794,13 +789,13 @@ async def api_get_orders( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get orders", - ) + ) from ex @nostrmarket_ext.patch("/api/v1/order/{order_id}") @@ -809,7 +804,7 @@ async def api_update_order_status( wallet: WalletTypeInfo = Depends(require_admin_key), ) -> Order: try: - assert data.shipped != None, "Shipped value is required for order" + assert data.shipped is not None, "Shipped value is required for order" merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found for order {data.id}" @@ -852,20 +847,20 @@ async def api_update_order_status( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot update order", - ) + ) from ex @nostrmarket_ext.put("/api/v1/order/restore/{event_id}") async def api_restore_order( event_id: str, wallet: WalletTypeInfo = Depends(require_admin_key), -) -> Order: +) -> Optional[Order]: try: merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found" @@ -881,13 +876,13 @@ async def api_restore_order( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot restore order", - ) + ) from ex @nostrmarket_ext.put("/api/v1/orders/restore") @@ -906,20 +901,20 @@ async def api_restore_orders( ) except Exception as e: logger.debug( - f"Failed to restore order from event '{dm.event_id}': '{str(e)}'." + f"Failed to restore order from event '{dm.event_id}': '{e!s}'." ) except AssertionError as ex: raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot restore orders", - ) + ) from ex @nostrmarket_ext.put("/api/v1/order/reissue") @@ -955,7 +950,9 @@ async def api_reissue_order_invoice( **order_update, ) payment_req = PaymentRequest( - id=data.id, payment_options=[PaymentOption(type="ln", link=invoice)], message=receipt + id=data.id, + payment_options=[PaymentOption(type="ln", link=invoice)], + message=receipt, ) response = { "type": DirectMessageType.PAYMENT_REQUEST.value, @@ -975,25 +972,25 @@ async def api_reissue_order_invoice( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot reissue order invoice", - ) + ) from ex -######################################## DIRECT MESSAGES ######################################## +######################################## DIRECT MESSAGES ############################### @nostrmarket_ext.get("/api/v1/message/{public_key}") async def api_get_messages( - public_key: str, wallet: WalletTypeInfo = Depends(get_key_type) + public_key: str, wallet: WalletTypeInfo = Depends(require_invoice_key) ) -> List[DirectMessage]: try: merchant = await get_merchant_for_user(wallet.wallet.user) - assert merchant, f"Merchant cannot be found" + assert merchant, "Merchant cannot be found" messages = await get_direct_messages(merchant.id, public_key) await update_customer_no_unread_messages(merchant.id, public_key) @@ -1002,13 +999,13 @@ async def api_get_messages( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot get direct message", - ) + ) from ex @nostrmarket_ext.post("/api/v1/message") @@ -1017,7 +1014,7 @@ async def api_create_message( ) -> DirectMessage: try: merchant = await get_merchant_for_user(wallet.wallet.user) - assert merchant, f"Merchant cannot be found" + assert merchant, "Merchant cannot be found" dm_event = merchant.build_dm_event(data.message, data.public_key) data.event_id = dm_event.id @@ -1031,38 +1028,38 @@ async def api_create_message( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot create message", - ) + ) from ex -######################################## CUSTOMERS ######################################## +######################################## CUSTOMERS ##################################### @nostrmarket_ext.get("/api/v1/customer") async def api_get_customers( - wallet: WalletTypeInfo = Depends(get_key_type), + wallet: WalletTypeInfo = Depends(require_invoice_key), ) -> List[Customer]: try: merchant = await get_merchant_for_user(wallet.wallet.user) - assert merchant, f"Merchant cannot be found" + assert merchant, "Merchant cannot be found" return await get_customers(merchant.id) except AssertionError as ex: raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot create message", - ) + ) from ex @nostrmarket_ext.post("/api/v1/customer") @@ -1079,7 +1076,7 @@ async def api_create_customer( assert merchant.id == data.merchant_id, "Invalid merchant id for user" existing_customer = await get_customer(merchant.id, pubkey) - assert existing_customer == None, "This public key already exists" + assert existing_customer is None, "This public key already exists" customer = await create_customer( merchant.id, Customer(merchant_id=merchant.id, public_key=pubkey) @@ -1092,13 +1089,13 @@ async def api_create_customer( raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail=str(ex), - ) + ) from ex except Exception as ex: logger.warning(ex) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot create customer", - ) + ) from ex ######################################## OTHER ######################################## From 49384917742bd6e1c652e1f95a4d48467bb46681 Mon Sep 17 00:00:00 2001 From: PatMulligan <43773168+PatMulligan@users.noreply.github.com> Date: Wed, 10 Sep 2025 14:10:45 +0200 Subject: [PATCH 7/9] FIX: add urlsafe=True (#111) --- nostr/nostr_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostr/nostr_client.py b/nostr/nostr_client.py index 5e902e4..a611980 100644 --- a/nostr/nostr_client.py +++ b/nostr/nostr_client.py @@ -30,7 +30,7 @@ class NostrClient: async def connect_to_nostrclient_ws(self) -> WebSocketApp: logger.debug(f"Connecting to websockets for 'nostrclient' extension...") - relay_endpoint = encrypt_internal_message("relay") + relay_endpoint = encrypt_internal_message("relay", urlsafe=True) on_open, on_message, on_error, on_close = self._ws_handlers() ws = WebSocketApp( f"ws://localhost:{settings.port}/nostrclient/api/v1/{relay_endpoint}", From 499b1f81f13a4ecb2a0eec3a60e05bd7bc96b9ac Mon Sep 17 00:00:00 2001 From: PatMulligan <43773168+PatMulligan@users.noreply.github.com> Date: Mon, 15 Sep 2025 08:48:13 +0200 Subject: [PATCH 8/9] CHORE: Improve UI (#112) * Refactor merchant details layout for improved responsiveness and styling in index.html * Revamp key pair component layout with improved styling and functionality. Added a header with a toggle for showing the private key, enhanced QR code display for both public and private keys, and included copy buttons for better user interaction. Update key pair component styling and functionality: adjust QR code dimensions, improve key display format with truncation, and refine button margins for enhanced user experience. Add 'show-buttons' prop to QR code components in key pair template for improved functionality Update key pair component layout to use 'col-sm-6' for responsive design of QR code sections, enhancing display on smaller screens. * Enhance direct messages component layout with improved styling and responsiveness. Updated class names for better alignment, added ellipsis for long customer labels, and modified button styles for consistency. Improved select options display with custom templates for better user experience. * Refactor customer label generation in direct messages component for improved readability. Added checks for undefined customer data, enhanced label formatting with truncation for long descriptions, and adjusted unread message display format. * make format --- static/components/direct-messages.js | 15 ++- .../components/direct-messages.html | 38 ++++-- .../nostrmarket/components/key-pair.html | 113 +++++++++++++----- .../nostrmarket/components/stall-list.html | 1 - templates/nostrmarket/index.html | 35 +++--- 5 files changed, 138 insertions(+), 64 deletions(-) diff --git a/static/components/direct-messages.js b/static/components/direct-messages.js index b9dee13..3bb1aa0 100644 --- a/static/components/direct-messages.js +++ b/static/components/direct-messages.js @@ -50,13 +50,16 @@ window.app.component('direct-messages', { methods: { sendMessage: async function () {}, buildCustomerLabel: function (c) { - let label = `${c.profile.name || 'unknown'} ${c.profile.about || ''}` - if (c.unread_messages) { - label += `[new: ${c.unread_messages}]` + if (!c) return '' + let label = c.profile.name || 'unknown' + if (c.profile.about) { + label += ` - ${c.profile.about.substring(0, 30)}` + if (c.profile.about.length > 30) label += '...' } - label += ` (${c.public_key.slice(0, 16)}...${c.public_key.slice( - c.public_key.length - 16 - )}` + if (c.unread_messages) { + label = `[${c.unread_messages} new] ${label}` + } + label += ` (${c.public_key.slice(0, 8)}...${c.public_key.slice(-8)})` return label }, getDirectMessages: async function (pubkey) { diff --git a/templates/nostrmarket/components/direct-messages.html b/templates/nostrmarket/components/direct-messages.html index 8950923..9f68511 100644 --- a/templates/nostrmarket/components/direct-messages.html +++ b/templates/nostrmarket/components/direct-messages.html @@ -1,22 +1,22 @@
-
-
+
+
Messages
-
+
  new
-
+
Client Orders
@@ -26,22 +26,40 @@ -
-
+
+
+
-
+
Add a public key to chat with diff --git a/templates/nostrmarket/components/key-pair.html b/templates/nostrmarket/components/key-pair.html index 2b65737..911e057 100644 --- a/templates/nostrmarket/components/key-pair.html +++ b/templates/nostrmarket/components/key-pair.html @@ -1,40 +1,93 @@
-
-
Public Key
-
- - Show Private Key - -
+ + +
+
Keys
+
-
-
-
- - - -
Click to copy
-
+ +
+ +
+ + +
Public Key
+
+ + + +
+
+ ... +
+ +
+
-
-
-
- +
+ + +
+ + Private Key (Keep Secret!) +
+
- - -
Click to copy
-
-
+ + + +
+
+ ... +
+ + +
diff --git a/templates/nostrmarket/components/stall-list.html b/templates/nostrmarket/components/stall-list.html index 632eeaa..673e8a7 100644 --- a/templates/nostrmarket/components/stall-list.html +++ b/templates/nostrmarket/components/stall-list.html @@ -62,7 +62,6 @@ /> - diff --git a/templates/nostrmarket/index.html b/templates/nostrmarket/index.html index 9b1cafc..d95d965 100644 --- a/templates/nostrmarket/index.html +++ b/templates/nostrmarket/index.html @@ -5,8 +5,8 @@
-
-
+
+
-
- - +
+
+ + +
-
+
From 3a8c16d1552b28ca2ab7bd88e469dc3c40004434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Thu, 30 Oct 2025 10:11:18 +0100 Subject: [PATCH 9/9] chore: add uv, add ci, fix some issues (#113) in preparation of removing secp --- .github/workflows/ci.yml | 10 + Makefile | 24 +- crud.py | 69 +- helpers.py | 3 +- models.py | 116 +- poetry.lock | 2616 -------------------------------------- pyproject.toml | 55 +- services.py | 17 +- uv.lock | 2316 +++++++++++++++++++++++++++++++++ views_api.py | 31 +- 10 files changed, 2482 insertions(+), 2775 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 poetry.lock create mode 100644 uv.lock diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1e04acc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,10 @@ +name: CI +on: + push: + branches: + - main + pull_request: + +jobs: + lint: + uses: lnbits/lnbits/.github/workflows/lint.yml@dev diff --git a/Makefile b/Makefile index 9a08146..0fac253 100644 --- a/Makefile +++ b/Makefile @@ -5,27 +5,27 @@ format: prettier black ruff check: mypy pyright checkblack checkruff checkprettier prettier: - poetry run ./node_modules/.bin/prettier --write . + uv run ./node_modules/.bin/prettier --write . pyright: - poetry run ./node_modules/.bin/pyright + uv run ./node_modules/.bin/pyright mypy: - poetry run mypy . + uv run mypy . black: - poetry run black . + uv run black . ruff: - poetry run ruff check . --fix + uv run ruff check . --fix checkruff: - poetry run ruff check . + uv run ruff check . checkprettier: - poetry run ./node_modules/.bin/prettier --check . + uv run ./node_modules/.bin/prettier --check . checkblack: - poetry run black --check . + uv run black --check . checkeditorconfig: editorconfig-checker @@ -33,14 +33,14 @@ checkeditorconfig: test: PYTHONUNBUFFERED=1 \ DEBUG=true \ - poetry run pytest + uv run pytest install-pre-commit-hook: @echo "Installing pre-commit hook to git" - @echo "Uninstall the hook with poetry run pre-commit uninstall" - poetry run pre-commit install + @echo "Uninstall the hook with uv run pre-commit uninstall" + uv run pre-commit install pre-commit: - poetry run pre-commit run --all-files + uv run pre-commit run --all-files checkbundle: diff --git a/crud.py b/crud.py index 4cb18c2..17282d7 100644 --- a/crud.py +++ b/crud.py @@ -1,5 +1,4 @@ import json -from typing import List, Optional, Tuple from lnbits.helpers import urlsafe_short_hash @@ -44,7 +43,7 @@ async def create_merchant(user_id: str, m: PartialMerchant) -> Merchant: async def update_merchant( user_id: str, merchant_id: str, config: MerchantConfig -) -> Optional[Merchant]: +) -> Merchant | None: await db.execute( f""" UPDATE nostrmarket.merchants SET meta = :meta, time = {db.timestamp_now} @@ -55,7 +54,7 @@ async def update_merchant( return await get_merchant(user_id, merchant_id) -async def touch_merchant(user_id: str, merchant_id: str) -> Optional[Merchant]: +async def touch_merchant(user_id: str, merchant_id: str) -> Merchant | None: await db.execute( f""" UPDATE nostrmarket.merchants SET time = {db.timestamp_now} @@ -66,7 +65,7 @@ async def touch_merchant(user_id: str, merchant_id: str) -> Optional[Merchant]: return await get_merchant(user_id, merchant_id) -async def get_merchant(user_id: str, merchant_id: str) -> Optional[Merchant]: +async def get_merchant(user_id: str, merchant_id: str) -> Merchant | None: row: dict = await db.fetchone( """SELECT * FROM nostrmarket.merchants WHERE user_id = :user_id AND id = :id""", { @@ -78,7 +77,7 @@ async def get_merchant(user_id: str, merchant_id: str) -> Optional[Merchant]: return Merchant.from_row(row) if row else None -async def get_merchant_by_pubkey(public_key: str) -> Optional[Merchant]: +async def get_merchant_by_pubkey(public_key: str) -> Merchant | None: row: dict = await db.fetchone( """SELECT * FROM nostrmarket.merchants WHERE public_key = :public_key""", {"public_key": public_key}, @@ -87,7 +86,7 @@ async def get_merchant_by_pubkey(public_key: str) -> Optional[Merchant]: return Merchant.from_row(row) if row else None -async def get_merchants_ids_with_pubkeys() -> List[Tuple[str, str]]: +async def get_merchants_ids_with_pubkeys() -> list[tuple[str, str]]: rows: list[dict] = await db.fetchall( """SELECT id, public_key FROM nostrmarket.merchants""", ) @@ -95,7 +94,7 @@ async def get_merchants_ids_with_pubkeys() -> List[Tuple[str, str]]: return [(row["id"], row["public_key"]) for row in rows] -async def get_merchant_for_user(user_id: str) -> Optional[Merchant]: +async def get_merchant_for_user(user_id: str) -> Merchant | None: row: dict = await db.fetchone( """SELECT * FROM nostrmarket.merchants WHERE user_id = :user_id """, {"user_id": user_id}, @@ -138,7 +137,7 @@ async def create_zone(merchant_id: str, data: Zone) -> Zone: return zone -async def update_zone(merchant_id: str, z: Zone) -> Optional[Zone]: +async def update_zone(merchant_id: str, z: Zone) -> Zone | None: await db.execute( """ UPDATE nostrmarket.zones @@ -157,7 +156,7 @@ async def update_zone(merchant_id: str, z: Zone) -> Optional[Zone]: return await get_zone(merchant_id, z.id) -async def get_zone(merchant_id: str, zone_id: str) -> Optional[Zone]: +async def get_zone(merchant_id: str, zone_id: str) -> Zone | None: row: dict = await db.fetchone( "SELECT * FROM nostrmarket.zones WHERE merchant_id = :merchant_id AND id = :id", { @@ -168,7 +167,7 @@ async def get_zone(merchant_id: str, zone_id: str) -> Optional[Zone]: return Zone.from_row(row) if row else None -async def get_zones(merchant_id: str) -> List[Zone]: +async def get_zones(merchant_id: str) -> list[Zone]: rows: list[dict] = await db.fetchall( "SELECT * FROM nostrmarket.zones WHERE merchant_id = :merchant_id", {"merchant_id": merchant_id}, @@ -235,7 +234,7 @@ async def create_stall(merchant_id: str, data: Stall) -> Stall: return stall -async def get_stall(merchant_id: str, stall_id: str) -> Optional[Stall]: +async def get_stall(merchant_id: str, stall_id: str) -> Stall | None: row: dict = await db.fetchone( """ SELECT * FROM nostrmarket.stalls @@ -249,7 +248,7 @@ async def get_stall(merchant_id: str, stall_id: str) -> Optional[Stall]: return Stall.from_row(row) if row else None -async def get_stalls(merchant_id: str, pending: Optional[bool] = False) -> List[Stall]: +async def get_stalls(merchant_id: str, pending: bool | None = False) -> list[Stall]: rows: list[dict] = await db.fetchall( """ SELECT * FROM nostrmarket.stalls @@ -274,7 +273,7 @@ async def get_last_stall_update_time() -> int: return row["event_created_at"] or 0 if row else 0 -async def update_stall(merchant_id: str, stall: Stall) -> Optional[Stall]: +async def update_stall(merchant_id: str, stall: Stall) -> Stall | None: await db.execute( """ UPDATE nostrmarket.stalls @@ -398,9 +397,7 @@ async def update_product(merchant_id: str, product: Product) -> Product: return updated_product -async def update_product_quantity( - product_id: str, new_quantity: int -) -> Optional[Product]: +async def update_product_quantity(product_id: str, new_quantity: int) -> Product | None: await db.execute( """ UPDATE nostrmarket.products SET quantity = :quantity @@ -415,7 +412,7 @@ async def update_product_quantity( return Product.from_row(row) if row else None -async def get_product(merchant_id: str, product_id: str) -> Optional[Product]: +async def get_product(merchant_id: str, product_id: str) -> Product | None: row: dict = await db.fetchone( """ SELECT * FROM nostrmarket.products @@ -431,8 +428,8 @@ async def get_product(merchant_id: str, product_id: str) -> Optional[Product]: async def get_products( - merchant_id: str, stall_id: str, pending: Optional[bool] = False -) -> List[Product]: + merchant_id: str, stall_id: str, pending: bool | None = False +) -> list[Product]: rows: list[dict] = await db.fetchall( """ SELECT * FROM nostrmarket.products @@ -445,8 +442,8 @@ async def get_products( async def get_products_by_ids( - merchant_id: str, product_ids: List[str] -) -> List[Product]: + merchant_id: str, product_ids: list[str] +) -> list[Product]: # todo: revisit keys = [] @@ -467,7 +464,7 @@ async def get_products_by_ids( return [Product.from_row(row) for row in rows] -async def get_wallet_for_product(product_id: str) -> Optional[str]: +async def get_wallet_for_product(product_id: str) -> str | None: row: dict = await db.fetchone( """ SELECT s.wallet as wallet FROM nostrmarket.products p @@ -574,7 +571,7 @@ async def create_order(merchant_id: str, o: Order) -> Order: return order -async def get_order(merchant_id: str, order_id: str) -> Optional[Order]: +async def get_order(merchant_id: str, order_id: str) -> Order | None: row: dict = await db.fetchone( """ SELECT * FROM nostrmarket.orders @@ -588,7 +585,7 @@ async def get_order(merchant_id: str, order_id: str) -> Optional[Order]: return Order.from_row(row) if row else None -async def get_order_by_event_id(merchant_id: str, event_id: str) -> Optional[Order]: +async def get_order_by_event_id(merchant_id: str, event_id: str) -> Order | None: row: dict = await db.fetchone( """ SELECT * FROM nostrmarket.orders @@ -602,7 +599,7 @@ async def get_order_by_event_id(merchant_id: str, event_id: str) -> Optional[Ord return Order.from_row(row) if row else None -async def get_orders(merchant_id: str, **kwargs) -> List[Order]: +async def get_orders(merchant_id: str, **kwargs) -> list[Order]: q = " AND ".join( [ f"{field[0]} = :{field[0]}" @@ -629,7 +626,7 @@ async def get_orders(merchant_id: str, **kwargs) -> List[Order]: async def get_orders_for_stall( merchant_id: str, stall_id: str, **kwargs -) -> List[Order]: +) -> list[Order]: q = " AND ".join( [ f"{field[0]} = :{field[0]}" @@ -654,7 +651,7 @@ async def get_orders_for_stall( return [Order.from_row(row) for row in rows] -async def update_order(merchant_id: str, order_id: str, **kwargs) -> Optional[Order]: +async def update_order(merchant_id: str, order_id: str, **kwargs) -> Order | None: q = ", ".join( [ f"{field[0]} = :{field[0]}" @@ -678,7 +675,7 @@ async def update_order(merchant_id: str, order_id: str, **kwargs) -> Optional[Or return await get_order(merchant_id, order_id) -async def update_order_paid_status(order_id: str, paid: bool) -> Optional[Order]: +async def update_order_paid_status(order_id: str, paid: bool) -> Order | None: await db.execute( "UPDATE nostrmarket.orders SET paid = :paid WHERE id = :id", {"paid": paid, "id": order_id}, @@ -692,7 +689,7 @@ async def update_order_paid_status(order_id: str, paid: bool) -> Optional[Order] async def update_order_shipped_status( merchant_id: str, order_id: str, shipped: bool -) -> Optional[Order]: +) -> Order | None: await db.execute( """ UPDATE nostrmarket.orders @@ -756,7 +753,7 @@ async def create_direct_message( return msg -async def get_direct_message(merchant_id: str, dm_id: str) -> Optional[DirectMessage]: +async def get_direct_message(merchant_id: str, dm_id: str) -> DirectMessage | None: row: dict = await db.fetchone( """ SELECT * FROM nostrmarket.direct_messages @@ -772,7 +769,7 @@ async def get_direct_message(merchant_id: str, dm_id: str) -> Optional[DirectMes async def get_direct_message_by_event_id( merchant_id: str, event_id: str -) -> Optional[DirectMessage]: +) -> DirectMessage | None: row: dict = await db.fetchone( """ SELECT * FROM nostrmarket.direct_messages @@ -786,7 +783,7 @@ async def get_direct_message_by_event_id( return DirectMessage.from_row(row) if row else None -async def get_direct_messages(merchant_id: str, public_key: str) -> List[DirectMessage]: +async def get_direct_messages(merchant_id: str, public_key: str) -> list[DirectMessage]: rows: list[dict] = await db.fetchall( """ SELECT * FROM nostrmarket.direct_messages @@ -798,7 +795,7 @@ async def get_direct_messages(merchant_id: str, public_key: str) -> List[DirectM return [DirectMessage.from_row(row) for row in rows] -async def get_orders_from_direct_messages(merchant_id: str) -> List[DirectMessage]: +async def get_orders_from_direct_messages(merchant_id: str) -> list[DirectMessage]: rows: list[dict] = await db.fetchall( """ SELECT * FROM nostrmarket.direct_messages @@ -859,7 +856,7 @@ async def create_customer(merchant_id: str, data: Customer) -> Customer: return customer -async def get_customer(merchant_id: str, public_key: str) -> Optional[Customer]: +async def get_customer(merchant_id: str, public_key: str) -> Customer | None: row: dict = await db.fetchone( """ SELECT * FROM nostrmarket.customers @@ -873,7 +870,7 @@ async def get_customer(merchant_id: str, public_key: str) -> Optional[Customer]: return Customer.from_row(row) if row else None -async def get_customers(merchant_id: str) -> List[Customer]: +async def get_customers(merchant_id: str) -> list[Customer]: rows: list[dict] = await db.fetchall( "SELECT * FROM nostrmarket.customers WHERE merchant_id = :merchant_id", {"merchant_id": merchant_id}, @@ -881,7 +878,7 @@ async def get_customers(merchant_id: str) -> List[Customer]: return [Customer.from_row(row) for row in rows] -async def get_all_unique_customers() -> List[Customer]: +async def get_all_unique_customers() -> list[Customer]: q = """ SELECT public_key, MAX(merchant_id) as merchant_id, MAX(event_created_at) FROM nostrmarket.customers diff --git a/helpers.py b/helpers.py index 69d1f2f..bb5efaf 100644 --- a/helpers.py +++ b/helpers.py @@ -1,6 +1,5 @@ import base64 import secrets -from typing import Optional import secp256k1 from bech32 import bech32_decode, convertbits @@ -33,7 +32,7 @@ def decrypt_message(encoded_message: str, encryption_key) -> str: return unpadded_data.decode() -def encrypt_message(message: str, encryption_key, iv: Optional[bytes] = None) -> str: +def encrypt_message(message: str, encryption_key, iv: bytes | None = None) -> str: padder = padding.PKCS7(128).padder() padded_data = padder.update(message.encode()) + padder.finalize() diff --git a/models.py b/models.py index 1faab7c..f1af073 100644 --- a/models.py +++ b/models.py @@ -2,7 +2,7 @@ import json import time from abc import abstractmethod from enum import Enum -from typing import Any, List, Optional, Tuple +from typing import Any from lnbits.utils.exchange_rates import btc_price, fiat_amount_as_satoshis from pydantic import BaseModel @@ -32,16 +32,16 @@ class Nostrable: class MerchantProfile(BaseModel): - name: Optional[str] = None - about: Optional[str] = None - picture: Optional[str] = None + name: str | None = None + about: str | None = None + picture: str | None = None class MerchantConfig(MerchantProfile): - event_id: Optional[str] = None - sync_from_nostr = False + event_id: str | None = None + sync_from_nostr: bool = False active: bool = False - restore_in_progress: Optional[bool] = False + restore_in_progress: bool | None = False class PartialMerchant(BaseModel): @@ -52,7 +52,7 @@ class PartialMerchant(BaseModel): class Merchant(PartialMerchant, Nostrable): id: str - time: Optional[int] = 0 + time: int | None = 0 def sign_hash(self, hash_: bytes) -> str: return sign_message_hash(self.private_key, hash_) @@ -122,11 +122,11 @@ class Merchant(PartialMerchant, Nostrable): ######################################## ZONES ######################################## class Zone(BaseModel): - id: Optional[str] = None - name: Optional[str] = None + id: str | None = None + name: str | None = None currency: str cost: float - countries: List[str] = [] + countries: list[str] = [] @classmethod def from_row(cls, row: dict) -> "Zone": @@ -139,22 +139,22 @@ class Zone(BaseModel): class StallConfig(BaseModel): - image_url: Optional[str] = None - description: Optional[str] = None + image_url: str | None = None + description: str | None = None class Stall(BaseModel, Nostrable): - id: Optional[str] = None + id: str | None = None wallet: str name: str currency: str = "sat" - shipping_zones: List[Zone] = [] + shipping_zones: list[Zone] = [] config: StallConfig = StallConfig() pending: bool = False """Last published nostr event for this Stall""" - event_id: Optional[str] = None - event_created_at: Optional[int] = None + event_id: str | None = None + event_created_at: int | None = None def validate_stall(self): for z in self.shipping_zones: @@ -212,19 +212,19 @@ class ProductShippingCost(BaseModel): class ProductConfig(BaseModel): - description: Optional[str] = None - currency: Optional[str] = None - use_autoreply: Optional[bool] = False - autoreply_message: Optional[str] = None - shipping: List[ProductShippingCost] = [] + description: str | None = None + currency: str | None = None + use_autoreply: bool | None = False + autoreply_message: str | None = None + shipping: list[ProductShippingCost] = [] class Product(BaseModel, Nostrable): - id: Optional[str] = None + id: str | None = None stall_id: str name: str - categories: List[str] = [] - images: List[str] = [] + categories: list[str] = [] + images: list[str] = [] price: float quantity: int active: bool = True @@ -232,8 +232,8 @@ class Product(BaseModel, Nostrable): config: ProductConfig = ProductConfig() """Last published nostr event for this Product""" - event_id: Optional[str] = None - event_created_at: Optional[int] = None + event_id: str | None = None + event_created_at: int | None = None def to_nostr_event(self, pubkey: str) -> NostrEvent: content = { @@ -290,7 +290,7 @@ class ProductOverview(BaseModel): id: str name: str price: float - product_shipping_cost: Optional[float] = None + product_shipping_cost: float | None = None @classmethod def from_product(cls, p: Product) -> "ProductOverview": @@ -307,21 +307,21 @@ class OrderItem(BaseModel): class OrderContact(BaseModel): - nostr: Optional[str] = None - phone: Optional[str] = None - email: Optional[str] = None + nostr: str | None = None + phone: str | None = None + email: str | None = None class OrderExtra(BaseModel): - products: List[ProductOverview] + products: list[ProductOverview] currency: str btc_price: str shipping_cost: float = 0 shipping_cost_sat: float = 0 - fail_message: Optional[str] = None + fail_message: str | None = None @classmethod - async def from_products(cls, products: List[Product]): + async def from_products(cls, products: list[Product]): currency = products[0].config.currency if len(products) else "sat" exchange_rate = ( await btc_price(currency) if currency and currency != "sat" else 1 @@ -337,19 +337,19 @@ class OrderExtra(BaseModel): class PartialOrder(BaseModel): id: str - event_id: Optional[str] = None - event_created_at: Optional[int] = None + event_id: str | None = None + event_created_at: int | None = None public_key: str merchant_public_key: str shipping_id: str - items: List[OrderItem] - contact: Optional[OrderContact] = None - address: Optional[str] = None + items: list[OrderItem] + contact: OrderContact | None = None + address: str | None = None def validate_order(self): assert len(self.items) != 0, f"Order has no items. Order: '{self.id}'" - def validate_order_items(self, product_list: List[Product]): + def validate_order_items(self, product_list: list[Product]): assert len(self.items) != 0, f"Order has no items. Order: '{self.id}'" assert ( len(product_list) != 0 @@ -370,8 +370,8 @@ class PartialOrder(BaseModel): ) async def costs_in_sats( - self, products: List[Product], shipping_id: str, stall_shipping_cost: float - ) -> Tuple[float, float]: + self, products: list[Product], shipping_id: str, stall_shipping_cost: float + ) -> tuple[float, float]: product_prices = {} for p in products: product_shipping_cost = next( @@ -400,7 +400,7 @@ class PartialOrder(BaseModel): return product_cost, stall_shipping_cost def receipt( - self, products: List[Product], shipping_id: str, stall_shipping_cost: float + self, products: list[Product], shipping_id: str, stall_shipping_cost: float ) -> str: if len(products) == 0: return "[No Products]" @@ -449,7 +449,7 @@ class Order(PartialOrder): total: float paid: bool = False shipped: bool = False - time: Optional[int] = None + time: int | None = None extra: OrderExtra @classmethod @@ -463,14 +463,14 @@ class Order(PartialOrder): class OrderStatusUpdate(BaseModel): id: str - message: Optional[str] = None - paid: Optional[bool] = False - shipped: Optional[bool] = None + message: str | None = None + paid: bool | None = False + shipped: bool | None = None class OrderReissue(BaseModel): id: str - shipping_id: Optional[str] = None + shipping_id: str | None = None class PaymentOption(BaseModel): @@ -480,8 +480,8 @@ class PaymentOption(BaseModel): class PaymentRequest(BaseModel): id: str - message: Optional[str] = None - payment_options: List[PaymentOption] + message: str | None = None + payment_options: list[PaymentOption] ######################################## MESSAGE ####################################### @@ -497,16 +497,16 @@ class DirectMessageType(Enum): class PartialDirectMessage(BaseModel): - event_id: Optional[str] = None - event_created_at: Optional[int] = None + event_id: str | None = None + event_created_at: int | None = None message: str public_key: str type: int = DirectMessageType.PLAIN_TEXT.value incoming: bool = False - time: Optional[int] = None + time: int | None = None @classmethod - def parse_message(cls, msg) -> Tuple[DirectMessageType, Optional[Any]]: + def parse_message(cls, msg) -> tuple[DirectMessageType, Any | None]: try: msg_json = json.loads(msg) if "type" in msg_json: @@ -529,15 +529,15 @@ class DirectMessage(PartialDirectMessage): class CustomerProfile(BaseModel): - name: Optional[str] = None - about: Optional[str] = None + name: str | None = None + about: str | None = None class Customer(BaseModel): merchant_id: str public_key: str - event_created_at: Optional[int] = None - profile: Optional[CustomerProfile] = None + event_created_at: int | None = None + profile: CustomerProfile | None = None unread_messages: int = 0 @classmethod diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 09ccb84..0000000 --- a/poetry.lock +++ /dev/null @@ -1,2616 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "aiosqlite" -version = "0.20.0" -description = "asyncio bridge to the standard sqlite3 module" -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiosqlite-0.20.0-py3-none-any.whl", hash = "sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6"}, - {file = "aiosqlite-0.20.0.tar.gz", hash = "sha256:6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7"}, -] - -[package.dependencies] -typing_extensions = ">=4.0" - -[package.extras] -dev = ["attribution (==1.7.0)", "black (==24.2.0)", "coverage[toml] (==7.4.1)", "flake8 (==7.0.0)", "flake8-bugbear (==24.2.6)", "flit (==3.9.0)", "mypy (==1.8.0)", "ufmt (==2.3.0)", "usort (==1.0.8.post1)"] -docs = ["sphinx (==7.2.6)", "sphinx-mdinclude (==0.5.3)"] - -[[package]] -name = "anyio" -version = "4.6.2.post1" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.9" -files = [ - {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, - {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} - -[package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] -trio = ["trio (>=0.26.1)"] - -[[package]] -name = "asn1crypto" -version = "1.5.1" -description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" -optional = false -python-versions = "*" -files = [ - {file = "asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"}, - {file = "asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"}, -] - -[[package]] -name = "async-timeout" -version = "5.0.0" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.8" -files = [ - {file = "async_timeout-5.0.0-py3-none-any.whl", hash = "sha256:904719a4bd6e0520047d0ddae220aabee67b877f7ca17bf8cea20f67f6247ae0"}, - {file = "async_timeout-5.0.0.tar.gz", hash = "sha256:49675ec889daacfe65ff66d2dde7dd1447a6f4b2f23721022e4ba121f8772a85"}, -] - -[[package]] -name = "asyncpg" -version = "0.29.0" -description = "An asyncio PostgreSQL driver" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "asyncpg-0.29.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72fd0ef9f00aeed37179c62282a3d14262dbbafb74ec0ba16e1b1864d8a12169"}, - {file = "asyncpg-0.29.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52e8f8f9ff6e21f9b39ca9f8e3e33a5fcdceaf5667a8c5c32bee158e313be385"}, - {file = "asyncpg-0.29.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e6823a7012be8b68301342ba33b4740e5a166f6bbda0aee32bc01638491a22"}, - {file = "asyncpg-0.29.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:746e80d83ad5d5464cfbf94315eb6744222ab00aa4e522b704322fb182b83610"}, - {file = "asyncpg-0.29.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ff8e8109cd6a46ff852a5e6bab8b0a047d7ea42fcb7ca5ae6eaae97d8eacf397"}, - {file = "asyncpg-0.29.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:97eb024685b1d7e72b1972863de527c11ff87960837919dac6e34754768098eb"}, - {file = "asyncpg-0.29.0-cp310-cp310-win32.whl", hash = "sha256:5bbb7f2cafd8d1fa3e65431833de2642f4b2124be61a449fa064e1a08d27e449"}, - {file = "asyncpg-0.29.0-cp310-cp310-win_amd64.whl", hash = "sha256:76c3ac6530904838a4b650b2880f8e7af938ee049e769ec2fba7cd66469d7772"}, - {file = "asyncpg-0.29.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4900ee08e85af01adb207519bb4e14b1cae8fd21e0ccf80fac6aa60b6da37b4"}, - {file = "asyncpg-0.29.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a65c1dcd820d5aea7c7d82a3fdcb70e096f8f70d1a8bf93eb458e49bfad036ac"}, - {file = "asyncpg-0.29.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b52e46f165585fd6af4863f268566668407c76b2c72d366bb8b522fa66f1870"}, - {file = "asyncpg-0.29.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc600ee8ef3dd38b8d67421359779f8ccec30b463e7aec7ed481c8346decf99f"}, - {file = "asyncpg-0.29.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:039a261af4f38f949095e1e780bae84a25ffe3e370175193174eb08d3cecab23"}, - {file = "asyncpg-0.29.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6feaf2d8f9138d190e5ec4390c1715c3e87b37715cd69b2c3dfca616134efd2b"}, - {file = "asyncpg-0.29.0-cp311-cp311-win32.whl", hash = "sha256:1e186427c88225ef730555f5fdda6c1812daa884064bfe6bc462fd3a71c4b675"}, - {file = "asyncpg-0.29.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfe73ffae35f518cfd6e4e5f5abb2618ceb5ef02a2365ce64f132601000587d3"}, - {file = "asyncpg-0.29.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6011b0dc29886ab424dc042bf9eeb507670a3b40aece3439944006aafe023178"}, - {file = "asyncpg-0.29.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b544ffc66b039d5ec5a7454667f855f7fec08e0dfaf5a5490dfafbb7abbd2cfb"}, - {file = "asyncpg-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d84156d5fb530b06c493f9e7635aa18f518fa1d1395ef240d211cb563c4e2364"}, - {file = "asyncpg-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54858bc25b49d1114178d65a88e48ad50cb2b6f3e475caa0f0c092d5f527c106"}, - {file = "asyncpg-0.29.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bde17a1861cf10d5afce80a36fca736a86769ab3579532c03e45f83ba8a09c59"}, - {file = "asyncpg-0.29.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:37a2ec1b9ff88d8773d3eb6d3784dc7e3fee7756a5317b67f923172a4748a175"}, - {file = "asyncpg-0.29.0-cp312-cp312-win32.whl", hash = "sha256:bb1292d9fad43112a85e98ecdc2e051602bce97c199920586be83254d9dafc02"}, - {file = "asyncpg-0.29.0-cp312-cp312-win_amd64.whl", hash = "sha256:2245be8ec5047a605e0b454c894e54bf2ec787ac04b1cb7e0d3c67aa1e32f0fe"}, - {file = "asyncpg-0.29.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0009a300cae37b8c525e5b449233d59cd9868fd35431abc470a3e364d2b85cb9"}, - {file = "asyncpg-0.29.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cad1324dbb33f3ca0cd2074d5114354ed3be2b94d48ddfd88af75ebda7c43cc"}, - {file = "asyncpg-0.29.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:012d01df61e009015944ac7543d6ee30c2dc1eb2f6b10b62a3f598beb6531548"}, - {file = "asyncpg-0.29.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000c996c53c04770798053e1730d34e30cb645ad95a63265aec82da9093d88e7"}, - {file = "asyncpg-0.29.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e0bfe9c4d3429706cf70d3249089de14d6a01192d617e9093a8e941fea8ee775"}, - {file = "asyncpg-0.29.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:642a36eb41b6313ffa328e8a5c5c2b5bea6ee138546c9c3cf1bffaad8ee36dd9"}, - {file = "asyncpg-0.29.0-cp38-cp38-win32.whl", hash = "sha256:a921372bbd0aa3a5822dd0409da61b4cd50df89ae85150149f8c119f23e8c408"}, - {file = "asyncpg-0.29.0-cp38-cp38-win_amd64.whl", hash = "sha256:103aad2b92d1506700cbf51cd8bb5441e7e72e87a7b3a2ca4e32c840f051a6a3"}, - {file = "asyncpg-0.29.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5340dd515d7e52f4c11ada32171d87c05570479dc01dc66d03ee3e150fb695da"}, - {file = "asyncpg-0.29.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e17b52c6cf83e170d3d865571ba574577ab8e533e7361a2b8ce6157d02c665d3"}, - {file = "asyncpg-0.29.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f100d23f273555f4b19b74a96840aa27b85e99ba4b1f18d4ebff0734e78dc090"}, - {file = "asyncpg-0.29.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48e7c58b516057126b363cec8ca02b804644fd012ef8e6c7e23386b7d5e6ce83"}, - {file = "asyncpg-0.29.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9ea3f24eb4c49a615573724d88a48bd1b7821c890c2effe04f05382ed9e8810"}, - {file = "asyncpg-0.29.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8d36c7f14a22ec9e928f15f92a48207546ffe68bc412f3be718eedccdf10dc5c"}, - {file = "asyncpg-0.29.0-cp39-cp39-win32.whl", hash = "sha256:797ab8123ebaed304a1fad4d7576d5376c3a006a4100380fb9d517f0b59c1ab2"}, - {file = "asyncpg-0.29.0-cp39-cp39-win_amd64.whl", hash = "sha256:cce08a178858b426ae1aa8409b5cc171def45d4293626e7aa6510696d46decd8"}, - {file = "asyncpg-0.29.0.tar.gz", hash = "sha256:d1c49e1f44fffafd9a55e1a9b101590859d881d639ea2922516f5d9c512d354e"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.3", markers = "python_version < \"3.12.0\""} - -[package.extras] -docs = ["Sphinx (>=5.3.0,<5.4.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["flake8 (>=6.1,<7.0)", "uvloop (>=0.15.3)"] - -[[package]] -name = "base58" -version = "2.1.1" -description = "Base58 and Base58Check implementation." -optional = false -python-versions = ">=3.5" -files = [ - {file = "base58-2.1.1-py3-none-any.whl", hash = "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2"}, - {file = "base58-2.1.1.tar.gz", hash = "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c"}, -] - -[package.extras] -tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", "pytest-cov", "pytest-flake8"] - -[[package]] -name = "bcrypt" -version = "4.2.0" -description = "Modern password hashing for your software and your servers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "bcrypt-4.2.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:096a15d26ed6ce37a14c1ac1e48119660f21b24cba457f160a4b830f3fe6b5cb"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c02d944ca89d9b1922ceb8a46460dd17df1ba37ab66feac4870f6862a1533c00"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d84cf6d877918620b687b8fd1bf7781d11e8a0998f576c7aa939776b512b98d"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1bb429fedbe0249465cdd85a58e8376f31bb315e484f16e68ca4c786dcc04291"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:655ea221910bcac76ea08aaa76df427ef8625f92e55a8ee44fbf7753dbabb328"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:1ee38e858bf5d0287c39b7a1fc59eec64bbf880c7d504d3a06a96c16e14058e7"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0da52759f7f30e83f1e30a888d9163a81353ef224d82dc58eb5bb52efcabc399"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3698393a1b1f1fd5714524193849d0c6d524d33523acca37cd28f02899285060"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:762a2c5fb35f89606a9fde5e51392dad0cd1ab7ae64149a8b935fe8d79dd5ed7"}, - {file = "bcrypt-4.2.0-cp37-abi3-win32.whl", hash = "sha256:5a1e8aa9b28ae28020a3ac4b053117fb51c57a010b9f969603ed885f23841458"}, - {file = "bcrypt-4.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:8f6ede91359e5df88d1f5c1ef47428a4420136f3ce97763e31b86dd8280fbdf5"}, - {file = "bcrypt-4.2.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:c52aac18ea1f4a4f65963ea4f9530c306b56ccd0c6f8c8da0c06976e34a6e841"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3bbbfb2734f0e4f37c5136130405332640a1e46e6b23e000eeff2ba8d005da68"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3413bd60460f76097ee2e0a493ccebe4a7601918219c02f503984f0a7ee0aebe"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8d7bb9c42801035e61c109c345a28ed7e84426ae4865511eb82e913df18f58c2"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d3a6d28cb2305b43feac298774b997e372e56c7c7afd90a12b3dc49b189151c"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9c1c4ad86351339c5f320ca372dfba6cb6beb25e8efc659bedd918d921956bae"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:27fe0f57bb5573104b5a6de5e4153c60814c711b29364c10a75a54bb6d7ff48d"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8ac68872c82f1add6a20bd489870c71b00ebacd2e9134a8aa3f98a0052ab4b0e"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cb2a8ec2bc07d3553ccebf0746bbf3d19426d1c6d1adbd4fa48925f66af7b9e8"}, - {file = "bcrypt-4.2.0-cp39-abi3-win32.whl", hash = "sha256:77800b7147c9dc905db1cba26abe31e504d8247ac73580b4aa179f98e6608f34"}, - {file = "bcrypt-4.2.0-cp39-abi3-win_amd64.whl", hash = "sha256:61ed14326ee023917ecd093ee6ef422a72f3aec6f07e21ea5f10622b735538a9"}, - {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:39e1d30c7233cfc54f5c3f2c825156fe044efdd3e0b9d309512cc514a263ec2a"}, - {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f4f4acf526fcd1c34e7ce851147deedd4e26e6402369304220250598b26448db"}, - {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1ff39b78a52cf03fdf902635e4c81e544714861ba3f0efc56558979dd4f09170"}, - {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:373db9abe198e8e2c70d12b479464e0d5092cc122b20ec504097b5f2297ed184"}, - {file = "bcrypt-4.2.0.tar.gz", hash = "sha256:cf69eaf5185fd58f268f805b505ce31f9b9fc2d64b376642164e9244540c1221"}, -] - -[package.extras] -tests = ["pytest (>=3.2.1,!=3.3.0)"] -typecheck = ["mypy"] - -[[package]] -name = "bech32" -version = "1.2.0" -description = "Reference implementation for Bech32 and segwit addresses." -optional = false -python-versions = ">=3.5" -files = [ - {file = "bech32-1.2.0-py3-none-any.whl", hash = "sha256:990dc8e5a5e4feabbdf55207b5315fdd9b73db40be294a19b3752cde9e79d981"}, - {file = "bech32-1.2.0.tar.gz", hash = "sha256:7d6db8214603bd7871fcfa6c0826ef68b85b0abd90fa21c285a9c5e21d2bd899"}, -] - -[[package]] -name = "bitarray" -version = "2.9.3" -description = "efficient arrays of booleans -- C extension" -optional = false -python-versions = "*" -files = [ - {file = "bitarray-2.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2cf5f5400636c7dda797fd681795ce63932458620fe8c40955890380acba9f62"}, - {file = "bitarray-2.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3487b4718ffa5942fab777835ee36085f8dda7ec4bd0b28433efb117f84852b6"}, - {file = "bitarray-2.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10f44b1e4994035408bea54d7bf0aec79744cad709706bedf28091a48bb7f1a4"}, - {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb5c16f97c65add6535748a9c98c70e7ca79759c38a2eb990127fef72f76111a"}, - {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13dbfc42971ba84e9c4ba070f720df6570285a3f89187f07ef422efcb611c19f"}, - {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c28076acfbe7f9a5494d7ae98094a6e209c390c340938845f294818ebf5e4d3"}, - {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7cdd21835936d9a66477836ca23b2cb63295142cb9d9158883e2c0f1f8f6bd"}, - {file = "bitarray-2.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f60887ab3a46e507fa6f8544d8d4b0748da48718591dfe3fe80c62bdea60f10"}, - {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f75e1abd4a37cba3002521d3f5e2b50ef4f4a74342207cad3f52468411d5d8ba"}, - {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dc63da9695383c048b83f5ab77eab35a55bbb2e77c7b6e762eba219929b45b84"}, - {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6fe5a57b859d9bc9c2fd27c78c4b7b83158faf984202de6fb44618caeebfff10"}, - {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1fe5a37bd9441a5ecc2f6e71b43df7176fa376a542ef97484310b8b46a45649a"}, - {file = "bitarray-2.9.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8a16e42c169ca818d6a15b5dd5acd5d2a26af0fa0588e1036e0e58d01f8387d4"}, - {file = "bitarray-2.9.3-cp310-cp310-win32.whl", hash = "sha256:5e6b5e7940af3474ffaa930cd1ce8215181cbe864d6b5ddb67a15d3c15e935cd"}, - {file = "bitarray-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:c63dbb99ef2ab1281871678624f9c9a5f1682b826e668ce559275ec488b3fa8b"}, - {file = "bitarray-2.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:49fb93b488d180f5c84b79fe687c585a84bf0295ff035d63e09ee24ce1da0558"}, - {file = "bitarray-2.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c2944fb83bbc2aa7f29a713bc4f8c1318e54fa0d06a72bedd350a3fb4a4b91d8"}, - {file = "bitarray-2.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3612d9d3788dc62f1922c917b1539f1cdf02cecc9faef8ae213a8b36093136ca"}, - {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90a9300cdb7c99b1e692bb790cba8acecee1a345a83e58e28c94a0d87c522237"}, - {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1211ed66acbbb221fd7554abf4206a384d79e6192d5cb95325c5c361bbb52a74"}, - {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67757279386accf93eba76b8f97b5acf1664a3e350cbea5f300f53490f8764fd"}, - {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64e19c6a99c32f460c2613f797f77aa37d8e298891d00ea5355158cce80e11ec"}, - {file = "bitarray-2.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72734bd3775f43c5a75385730abb9f84fee6c627eb14f579de4be478f1615c8c"}, - {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a92703471b5d3316c7481bc1852f620f42f7a1b62be27f39d13694827635786f"}, - {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d5d77c81300ca430d4b195ccfbb629d6858258f541b6e96c6b11ec1563cd2681"}, - {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3ba8a29c0d091c952ced1607ce715f5e0524899f24333a493807d00f5938463d"}, - {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:418171d035b191dbe5e86cd2bfb5c3e1ae7d947edc22857a897d1c7251674ae5"}, - {file = "bitarray-2.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e0bd272eba256183be2a17488f9cb096d2e6d3435ecf2e28c1e0857c6d20749"}, - {file = "bitarray-2.9.3-cp311-cp311-win32.whl", hash = "sha256:cc3fd2b0637a619cf13e122bbcf4729ae214d5f25623675597e67c25f9edfe61"}, - {file = "bitarray-2.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1fc2a81a585dbe5e367682156e6350d908a56e2ffd6ca651b0af01994db596f"}, - {file = "bitarray-2.9.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dc47be026f76f1728af00dc7140cec8483fe2f0c476bbf2a59ef47865e00ff96"}, - {file = "bitarray-2.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:82b091742ff511cdb06f90af0d2c22e7af3dbff9b8212e2e0d88dfef6a8570b3"}, - {file = "bitarray-2.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d5edb4302a0e3a3d1d0eeb891de3c615d4cb7a446fb41c21eecdcfb29400a6f"}, - {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4786c5525069c19820549dd2f42d33632bc42959ad167138bd8ee5024b922b"}, - {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bfe2de2b4df61ccb9244871a0fdf1fff83be0c1bd7187048c3cf7f81c5fe631"}, - {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31e4f69538f95d2934587d957eea0d283162322dd1af29e57122b20b8cd60f92"}, - {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca44908b2bc08d8995770018638d62626706864f9c599b7818225a12f3dbc2c"}, - {file = "bitarray-2.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:279f8de5d251ee521e365df29c927d9b5732f1ed4f373d2dbbd278fcbad94ff5"}, - {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49bb631b38431c09ecd534d56ef04264397d24d18c4ee6653c84e14ae09d92d"}, - {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:192bffc93ee9a5b6c833c98d1dcc81f5633ddd726b85e18341387d0c1d51f691"}, - {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c516cec28c6511df51d87033f40ec420324a2247469b0c989d344f4d27ea37d2"}, - {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:66241cb9a1c1db294f46cd440141e57e8242874e38f3f61877f72d92ae14768a"}, - {file = "bitarray-2.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab1f0e7631110c89bea7b605c0c35832333eb9cc97e5de05d71c76d42a1858c9"}, - {file = "bitarray-2.9.3-cp312-cp312-win32.whl", hash = "sha256:42aa5bee6fe8ad3385eaf5c6585016bbc38a7b75efb52ce5c6f8e00e05237dfa"}, - {file = "bitarray-2.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:dc3fd647d845b94fac3652390866f921f914a17f3807a031c826f68dae3f43e3"}, - {file = "bitarray-2.9.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fcfcc1989e3e021a282624017b7fb754210f5332e933b1c3ebc79643727b6551"}, - {file = "bitarray-2.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:71b1e229a706798a9e106ca7b03d4c63455deb40b18c92950ec073a05a8f8285"}, - {file = "bitarray-2.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4bb49556d3d505d24c942a4206ad4d0d40e89fa3016a7ea6edc994d5c08d4a8e"}, - {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4466aa1e533a59d5f7fd37219d154ec3f2ba73fce3d8a2e11080ec475bc15fb"}, - {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9b75adc0fd0bf278bea89dc3d679d74e10d2df98d3d074b7f3d36f323138818"}, - {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701582bbbeac372b1cd8a3c9daf6c2336dc2d22e14373a6271d788bc4f2b6edc"}, - {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea1f119668bbdbd68008031491515e84441e505163918819994b28f295f762c"}, - {file = "bitarray-2.9.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f400bc18a70bfdb073532c3054ecd78a0e64f96ff7b6140adde5b122580ec2b"}, - {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:aacff5656fb3e15cede7d02903da2634d376aa928d7a81ec8df19b0724d7972a"}, - {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8a2ae42a14cbf766d4478d7101da6359b0648dd813e60eb3486ac56ad2f5add3"}, - {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:616698edb547d10f0b960cb9f2e8629c55a420dd4c2b1ab46706f49a1815621d"}, - {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f277c50ba184929dfeed39b6cf9468e3446093521b0aeb52bd54a21ca08f5473"}, - {file = "bitarray-2.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:661237739b385c90d8837d5e96b06de093cc6e610236977e198f88f5a979686e"}, - {file = "bitarray-2.9.3-cp313-cp313-win32.whl", hash = "sha256:68acec6c19d798051f178a1197b76f891985f683f95a4b12811b68e58b080f5a"}, - {file = "bitarray-2.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:3055720afdcfd7e8f630fa16db7bed7e55c9d0a1f4756195e3b250e203f3b436"}, - {file = "bitarray-2.9.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:72bf17d0e7d8a4f645655a07999d23e42472cbf2100b8dad7ce26586075241d7"}, - {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cfd332b5f1ad8c4dc3cc79ecef33c19b42d8d8e6a39fd5c9ecb5855be0b9723"}, - {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5b466ef1e48f25621c9d27e95deb5e33b8656827ed8aa530b972de73870bd1f"}, - {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:938cf26fdaf4d0adfac82d830c025523c5d36ddead0470b735286028231c1784"}, - {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0f766669e768ef9a2b23ecfa710b38b6a48da3f91755113c79320b207ae255d"}, - {file = "bitarray-2.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b6337c0c64044f35ddfb241143244aac707a68f34ae31a71dad115f773ccc8b"}, - {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:731b59540167f8b2b20f69f487ecee2339fc4657059906a16cb51acac17f89c3"}, - {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:4feed0539a9d6432361fc4d3820eea3a81fa631d542f166cf8430aad81a971da"}, - {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:eb65c96a42e73f35175ec738d67992ffdf054c20abee3933cfcfa2343fa1187d"}, - {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_s390x.whl", hash = "sha256:4f40ceac94d182de6135759d81289683ff3e4cf0da709bc5826a7fe00d754114"}, - {file = "bitarray-2.9.3-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:5b29f7844080a281635a231a37e99f0bd6f567af6cf19f4f6d212137f99a9cdf"}, - {file = "bitarray-2.9.3-cp36-cp36m-win32.whl", hash = "sha256:947cf522a3b339b73114d12417fd848fa01303dbaa7883ced4c87688dba5637c"}, - {file = "bitarray-2.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:ea794ea60d514d68777a87a74106110db7a4bbc2c46720e67010e3071afefb95"}, - {file = "bitarray-2.9.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c7bc7cb79dcac8bdce23b305e671c06eaeffb012fa065b8c33bc51df7e1733f0"}, - {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6380ad0f929ad9220abadd1c9b7234271c4b6ea9c753a88611d489e93a8f2e"}, - {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05f4e2451e2ad450b41ede8440e52c1fd798e81027e1dc2256292ec0787d3bf1"}, - {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7267885c98138f3707c710d5b08eedef150a3e5112c760cfe1200f3366fd7064"}, - {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:976957423cb41df8fe0eb811dbb53d8c5ab1ca3beec7a3ca7ff679be44a72714"}, - {file = "bitarray-2.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0ec5141a69f73ed6ff17ea7344d5cc166e087095bfe3661dbb42b519e76aa16"}, - {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:218a1b7c0652a3c1020f903ded0f9768c3719fb6d43a6e9d346e985292992d35"}, - {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:cf0c9ebf2df280794244e1e12ed626357506ddaa2f0d6f69efe493ae7bbf4bf7"}, - {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:c450a04a7e091b57d4c0bd1531648522cd0ef26913ad0e5dea0432ea29b0e5c1"}, - {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a212eb89a50e32ef4969387e44a7410447dc59587615e3966d090edc338a1b85"}, - {file = "bitarray-2.9.3-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:4269232026212ee6b73379b88a578107a6b36a6182307a49d5509686c7495261"}, - {file = "bitarray-2.9.3-cp37-cp37m-win32.whl", hash = "sha256:8a0fb358e6a43f216c3fb0871e2ac14c16563aec363c23bc2fbbb18f6201285d"}, - {file = "bitarray-2.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a8368774cdc737eec8fce6f28d0abc095fbc0edccf8fab8d29fddc264b68def9"}, - {file = "bitarray-2.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7d0724a4fef6ded914075a3385ea2d05afdeed567902f83490ed4e7e7e75d9bf"}, - {file = "bitarray-2.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0e11b37c6dff6f41ebc49914628824ceb8c8d6ebd0fda2ebe3c0fe0c63e8621e"}, - {file = "bitarray-2.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:085f4081d72c7468f82f722a9f113e03a1f7a4c132ef4c2a4e680c5d78b7db00"}, - {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b530b5fbed2900634fbc43f546e384abd72ad9c49795ff5bd6a93cac1aa9c4d8"}, - {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09ff88e4385967571146fb0d270442de39393d44198f4d108f3350cfd6486f0b"}, - {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a344bb212ddf87db4976a6711d274660a5d887da4fd3faafcdaa092152f85a6d"}, - {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc569c96b990f92fd5946d5b50501fee48b01a116a286d1de7961ebd9c6f06f3"}, - {file = "bitarray-2.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2fbbe7938ef8a7abe3e8519fa0578b51d2787f7171d3144e7d373551b5851fd"}, - {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0b5912fab904507b47217509b01aa903d7f98b6e725e490a7f01661f4d9a4fa7"}, - {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:0c836ccfca9cf60927256738ef234dfe500565492eff269610cdd1bca56801d0"}, - {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:af0e4441ebf51c18fc450962f1e201c96f444d63b17cc8dcf7c0b05111bd4486"}, - {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:9e9b57175fb6fe76d7ddd0647e06a25f6e23f4b54b5febf337c5a840ab37dc3b"}, - {file = "bitarray-2.9.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7f7de81721ae9492926bd067007ac974692182bb83fc8f0ba330a67f37a018bd"}, - {file = "bitarray-2.9.3-cp38-cp38-win32.whl", hash = "sha256:4beafb6b6e344385480df6611fdebfcb3579bbb40636ce1ddf5e72fb744e095f"}, - {file = "bitarray-2.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:d8eaeca98900bd6f06a29cdef57999813a67d314f661d14901d71e04f4cf9f00"}, - {file = "bitarray-2.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:413965d9d384aef90e58b959f4a39f1d5060b145c26080297b7b4cf23cf38faa"}, - {file = "bitarray-2.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2fbb56f2bb89c3a15304a6c0ea56013dc340a98337d9bbd7fc5c21451dc05f8c"}, - {file = "bitarray-2.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b8a84f39f7885627711473872d8fc58fc7a0a1e4ecd9ddf42daf9a3643432742"}, - {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45147a9c8580e857c1344d15bd49d2b4387777bd582a2ede11be2ba740653f28"}, - {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed255423dc60c6b2d5c0d90c13dea2962a31929767fdf1c525ab3210269e75c5"}, - {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4f5bd02671ea5c4ad52bbfe0e8e8197b6e8fa85dec1e93a4a05448c19354cc65"}, - {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1c99c58f044549c93fb6d4cda22678deccaed19845eaa2e6917b5b7ca058f2d"}, - {file = "bitarray-2.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:921ee87681e32e17d1849e11c96eb6a8a7edaa1269dd26831013daf8546bde05"}, - {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2ed97d8ec40c4658d9f9aa8f26cb473f44fa1dbccba3fa3fbe4a102e38c6a8d7"}, - {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9d7f7db37edb9c50c9aad6a18f2e87dd7dc5ff2a33406821804a03263fedb2ca"}, - {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:292f726cdb9efc744ed0a1d7453c44151526648148a28d9a2495cc7c7b2c62a8"}, - {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2cc94784238782a9376f307b1aa9a85ce77b6eded9f82d2fe062db7fdb02c645"}, - {file = "bitarray-2.9.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5051436b1d318f6ce0df3b2f8a60bfa66a54c1d9e8719d6cb6b448140e7061f2"}, - {file = "bitarray-2.9.3-cp39-cp39-win32.whl", hash = "sha256:a3d436c686ce59fd0b93438ed2c0e1d3e1716e56bce64b874d05b9f49f1ca5d1"}, - {file = "bitarray-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:f168fc45664266a560f2cb28a327041b7f69d4a7faad8ab89e0a1dd7c270a70d"}, - {file = "bitarray-2.9.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ae36787299cff41f212aee33cfe1defee13979a41552665a412b6ca3fa8f7eb8"}, - {file = "bitarray-2.9.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42afe48abb8eeb386d93e7f1165ace1dd027f136a8a31edd2b20bc57a0c071d7"}, - {file = "bitarray-2.9.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451ceecdb86bb95ae101b0d65c8c4524d692ae3666662fef8c89877ce17748c5"}, - {file = "bitarray-2.9.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4d67d3e3de2aede737b12cd75a84963700c941b77b579c14bd05517e05d7a9f"}, - {file = "bitarray-2.9.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2406d13ded84049b4238815a5821e44d6f58ba00fbb6b705b6ef8ccd88be8f03"}, - {file = "bitarray-2.9.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0db944fc2a048020fc940841ef46c0295b045d45a5a582cba69f78962a49a384"}, - {file = "bitarray-2.9.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25c603f141171a7d108773d5136d14e572c473e4cdb3fb464c39c8a138522eb2"}, - {file = "bitarray-2.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86c06b02705305cab0914d209caa24effda81316e2f2555a71a9aa399b75c5a5"}, - {file = "bitarray-2.9.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ddda45b24a802eaaca8f794e6267ff2b62de5fe7b900b76d6f662d95192bebf"}, - {file = "bitarray-2.9.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:81490623950d04870c6dd4d7e6df2eb68dd04eca8bec327895ebee8bbe0cc3c7"}, - {file = "bitarray-2.9.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a9e69ac6a514cc574891c24a50847022dac2fef8c3f4df530f92820a07337755"}, - {file = "bitarray-2.9.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:545c695ee69d26b41351ced4c76244d8b6225669fc0af3652ff8ed5a6b28325d"}, - {file = "bitarray-2.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbb2e6daabd2a64d091ac7460b0c5c5f9268199ae9a8ce32737cf5273987f1fa"}, - {file = "bitarray-2.9.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a969e5cf63144b944ee8d0a0739f53ef1ae54725b5e01258d690a8995d880526"}, - {file = "bitarray-2.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:73bbb9301ac9000f869c51db2cc5fcc6541985d3fcdcfe6e02f90c9e672a00be"}, - {file = "bitarray-2.9.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c07e346926488a85a48542d898f4168f3587ec42379fef0d18be301e08a3f27"}, - {file = "bitarray-2.9.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a26d8a14cd8ee496306f2afac34833502dd1ae826355af309333b6f252b23fe"}, - {file = "bitarray-2.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cef148ed37c892395ca182d6a235524165a9f765f4283d0a1ced891e7c43c67a"}, - {file = "bitarray-2.9.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94f35a8f0c8a50ee98a8bef9a070d0b68ecf623f20a2148cc039aba5557346a6"}, - {file = "bitarray-2.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b03207460daae828e2743874c84264e8d96a8c6156490279092b624cd5d2de08"}, - {file = "bitarray-2.9.3.tar.gz", hash = "sha256:9eff55cf189b0c37ba97156a00d640eb7392db58a8049be6f26ff2712b93fa89"}, -] - -[[package]] -name = "bitstring" -version = "4.2.3" -description = "Simple construction, analysis and modification of binary data." -optional = false -python-versions = ">=3.8" -files = [ - {file = "bitstring-4.2.3-py3-none-any.whl", hash = "sha256:20ed0036e2fcf0323acb0f92f0b7b178516a080f3e91061470aa019ac4ede404"}, - {file = "bitstring-4.2.3.tar.gz", hash = "sha256:e0c447af3fda0d114f77b88c2d199f02f97ee7e957e6d719f40f41cf15fbb897"}, -] - -[package.dependencies] -bitarray = ">=2.9.0,<3.0.0" - -[[package]] -name = "black" -version = "24.10.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.9" -files = [ - {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, - {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, - {file = "black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f"}, - {file = "black-24.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"}, - {file = "black-24.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad"}, - {file = "black-24.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50"}, - {file = "black-24.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392"}, - {file = "black-24.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175"}, - {file = "black-24.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3"}, - {file = "black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65"}, - {file = "black-24.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f"}, - {file = "black-24.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8"}, - {file = "black-24.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981"}, - {file = "black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b"}, - {file = "black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2"}, - {file = "black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b"}, - {file = "black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd"}, - {file = "black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f"}, - {file = "black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800"}, - {file = "black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7"}, - {file = "black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d"}, - {file = "black-24.10.0.tar.gz", hash = "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.10)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "bolt11" -version = "2.1.0" -description = "A library for encoding and decoding BOLT11 payment requests." -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "bolt11-2.1.0-py3-none-any.whl", hash = "sha256:1535e441233414a9d8031a99fd3be07de4674bffda948033579404d44a42f614"}, - {file = "bolt11-2.1.0.tar.gz", hash = "sha256:177c63cd88d1eaba669eddb5937364676226253f2e9e5b77e8fe317ef32e62dd"}, -] - -[package.dependencies] -base58 = "*" -bech32 = "*" -bitstring = "*" -click = "*" -coincurve = "*" - -[[package]] -name = "certifi" -version = "2024.8.30" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, -] - -[[package]] -name = "cffi" -version = "1.17.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, - {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, - {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, - {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, - {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, - {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, - {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, - {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, - {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, - {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, - {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, - {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, - {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, - {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, - {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, - {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "cfgv" -version = "3.4.0" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, - {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, - {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, - {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "coincurve" -version = "20.0.0" -description = "Cross-platform Python CFFI bindings for libsecp256k1" -optional = false -python-versions = ">=3.8" -files = [ - {file = "coincurve-20.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d559b22828638390118cae9372a1bb6f6594f5584c311deb1de6a83163a0919b"}, - {file = "coincurve-20.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33d7f6ebd90fcc550f819f7f2cce2af525c342aac07f0ccda46ad8956ad9d99b"}, - {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22d70dd55d13fd427418eb41c20fde0a20a5e5f016e2b1bb94710701e759e7e0"}, - {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f18d481eaae72c169f334cde1fd22011a884e0c9c6adc3fdc1fd13df8236a3"}, - {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de1ec57f43c3526bc462be58fb97910dc1fdd5acab6c71eda9f9719a5bd7489"}, - {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a6f007c44c726b5c0b3724093c0d4fb8e294f6b6869beb02d7473b21777473a3"}, - {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0ff1f3b81330db5092c24da2102e4fcba5094f14945b3eb40746456ceabdd6d9"}, - {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f7de97694d9343f26bd1c8e081b168e5f525894c12445548ce458af227f536"}, - {file = "coincurve-20.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:e905b4b084b4f3b61e5a5d58ac2632fd1d07b7b13b4c6d778335a6ca1dafd7a3"}, - {file = "coincurve-20.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:3657bb5ed0baf1cf8cf356e7d44aa90a7902cc3dd4a435c6d4d0bed0553ad4f7"}, - {file = "coincurve-20.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44087d1126d43925bf9a2391ce5601bf30ce0dba4466c239172dc43226696018"}, - {file = "coincurve-20.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ccf0ba38b0f307a9b3ce28933f6c71dc12ef3a0985712ca09f48591afd597c8"}, - {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:566bc5986debdf8572b6be824fd4de03d533c49f3de778e29f69017ae3fe82d8"}, - {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4d70283168e146f025005c15406086513d5d35e89a60cf4326025930d45013a"}, - {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:763c6122dd7d5e7a81c86414ce360dbe9a2d4afa1ca6c853ee03d63820b3d0c5"}, - {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f00c361c356bcea386d47a191bb8ac60429f4b51c188966a201bfecaf306ff7f"}, - {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4af57bdadd2e64d117dd0b33cfefe76e90c7a6c496a7b034fc65fd01ec249b15"}, - {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a26437b7cbde13fb6e09261610b788ca2a0ca2195c62030afd1e1e0d1a62e035"}, - {file = "coincurve-20.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed51f8bba35e6c7676ad65539c3dbc35acf014fc402101fa24f6b0a15a74ab9e"}, - {file = "coincurve-20.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:594b840fc25d74118407edbbbc754b815f1bba9759dbf4f67f1c2b78396df2d3"}, - {file = "coincurve-20.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4df4416a6c0370d777aa725a25b14b04e45aa228da1251c258ff91444643f688"}, - {file = "coincurve-20.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1ccc3e4db55abf3fc0e604a187fdb05f0702bc5952e503d9a75f4ae6eeb4cb3a"}, - {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8335b1658a2ef5b3eb66d52647742fe8c6f413ad5b9d5310d7ea6d8060d40f"}, - {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ac025e485a0229fd5394e0bf6b4a75f8a4f6cee0dcf6f0b01a2ef05c5210ff"}, - {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e46e3f1c21b3330857bcb1a3a5b942f645c8bce912a8a2b252216f34acfe4195"}, - {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:df9ff9b17a1d27271bf476cf3fa92df4c151663b11a55d8cea838b8f88d83624"}, - {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4155759f071375699282e03b3d95fb473ee05c022641c077533e0d906311e57a"}, - {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0530b9dd02fc6f6c2916716974b79bdab874227f560c422801ade290e3fc5013"}, - {file = "coincurve-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:eacf9c0ce8739c84549a89c083b1f3526c8780b84517ee75d6b43d276e55f8a0"}, - {file = "coincurve-20.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:52a67bfddbd6224dfa42085c88ad176559801b57d6a8bd30d92ee040de88b7b3"}, - {file = "coincurve-20.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61e951b1d695b62376f60519a84c4facaf756eeb9c5aff975bea0942833f185d"}, - {file = "coincurve-20.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e9e548db77f4ea34c0d748dddefc698adb0ee3fab23ed19f80fb2118dac70f6"}, - {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cdbf0da0e0809366fdfff236b7eb6e663669c7b1f46361a4c4d05f5b7e94c57"}, - {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d72222b4ecd3952e8ffcbf59bc7e0d1b181161ba170b60e5c8e1f359a43bbe7e"}, - {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9add43c4807f0c17a940ce4076334c28f51d09c145cd478400e89dcfb83fb59d"}, - {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc94cceea6ec8863815134083e6221a034b1ecef822d0277cf6ad2e70009b7f"}, - {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ffbdfef6a6d147988eabaed681287a9a7e6ba45ecc0a8b94ba62ad0a7656d97"}, - {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13335c19c7e5f36eaba2a53c68073d981980d7dc7abfee68d29f2da887ccd24e"}, - {file = "coincurve-20.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:7fbfb8d16cf2bea2cf48fc5246d4cb0a06607d73bb5c57c007c9aed7509f855e"}, - {file = "coincurve-20.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4870047704cddaae7f0266a549c927407c2ba0ec92d689e3d2b511736812a905"}, - {file = "coincurve-20.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81ce41263517b0a9f43cd570c87720b3c13324929584fa28d2e4095969b6015d"}, - {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572083ccce6c7b514d482f25f394368f4ae888f478bd0b067519d33160ea2fcc"}, - {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee5bc78a31a2f1370baf28aaff3949bc48f940a12b0359d1cd2c4115742874e6"}, - {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2895d032e281c4e747947aae4bcfeef7c57eabfd9be22886c0ca4e1365c7c1f"}, - {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d3e2f21957ada0e1742edbde117bb41758fa8691b69c8d186c23e9e522ea71cd"}, - {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c2baa26b1aad1947ca07b3aa9e6a98940c5141c6bdd0f9b44d89e36da7282ffa"}, - {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7eacc7944ddf9e2b7448ecbe84753841ab9874b8c332a4f5cc3b2f184db9f4a2"}, - {file = "coincurve-20.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c293c095dc690178b822cadaaeb81de3cc0d28f8bdf8216ed23551dcce153a26"}, - {file = "coincurve-20.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:11a47083a0b7092d3eb50929f74ffd947c4a5e7035796b81310ea85289088c7a"}, - {file = "coincurve-20.0.0.tar.gz", hash = "sha256:872419e404300302e938849b6b92a196fabdad651060b559dc310e52f8392829"}, -] - -[package.dependencies] -asn1crypto = "*" -cffi = ">=1.3.0" - -[package.extras] -dev = ["coverage", "pytest", "pytest-benchmark"] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "cryptography" -version = "42.0.8" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = ">=3.7" -files = [ - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, - {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, - {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, - {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, - {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, - {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, - {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, -] - -[package.dependencies] -cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] -nox = ["nox"] -pep8test = ["check-sdist", "click", "mypy", "ruff"] -sdist = ["build"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] -test-randomorder = ["pytest-randomly"] - -[[package]] -name = "deprecated" -version = "1.2.14" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] - -[[package]] -name = "distlib" -version = "0.3.9" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, - {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, -] - -[[package]] -name = "dnspython" -version = "2.7.0" -description = "DNS toolkit" -optional = false -python-versions = ">=3.9" -files = [ - {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, - {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, -] - -[package.extras] -dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] -dnssec = ["cryptography (>=43)"] -doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] -doq = ["aioquic (>=1.0.0)"] -idna = ["idna (>=3.7)"] -trio = ["trio (>=0.23)"] -wmi = ["wmi (>=1.5.1)"] - -[[package]] -name = "ecdsa" -version = "0.19.0" -description = "ECDSA cryptographic signature library (pure python)" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.6" -files = [ - {file = "ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a"}, - {file = "ecdsa-0.19.0.tar.gz", hash = "sha256:60eaad1199659900dd0af521ed462b793bbdf867432b3948e87416ae4caf6bf8"}, -] - -[package.dependencies] -six = ">=1.9.0" - -[package.extras] -gmpy = ["gmpy"] -gmpy2 = ["gmpy2"] - -[[package]] -name = "email-validator" -version = "2.2.0" -description = "A robust email address syntax and deliverability validation library." -optional = false -python-versions = ">=3.8" -files = [ - {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, - {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, -] - -[package.dependencies] -dnspython = ">=2.0.0" -idna = ">=2.0.0" - -[[package]] -name = "embit" -version = "0.8.0" -description = "A minimal bitcoin library for MicroPython and Python3 with a focus on embedded systems." -optional = false -python-versions = "*" -files = [ - {file = "embit-0.8.0.tar.gz", hash = "sha256:8bf4b10073c67400370ce523fb16f035fe759f6fdd987c579bdcc268d75ed770"}, -] - -[package.extras] -dev = ["black", "mkdocs", "mkdocs-material", "mkdocstrings[python]", "mypy", "pre-commit", "pytest", "pytest-cov", "requests"] - -[[package]] -name = "environs" -version = "9.5.0" -description = "simplified environment variable parsing" -optional = false -python-versions = ">=3.6" -files = [ - {file = "environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124"}, - {file = "environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9"}, -] - -[package.dependencies] -marshmallow = ">=3.0.0" -python-dotenv = "*" - -[package.extras] -dev = ["dj-database-url", "dj-email-url", "django-cache-url", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)", "pytest", "tox"] -django = ["dj-database-url", "dj-email-url", "django-cache-url"] -lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"] -tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] - -[[package]] -name = "exceptiongroup" -version = "1.2.2" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastapi" -version = "0.115.2" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fastapi-0.115.2-py3-none-any.whl", hash = "sha256:61704c71286579cc5a598763905928f24ee98bfcc07aabe84cfefb98812bbc86"}, - {file = "fastapi-0.115.2.tar.gz", hash = "sha256:3995739e0b09fa12f984bce8fa9ae197b35d433750d3d312422d846e283697ee"}, -] - -[package.dependencies] -pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.37.2,<0.41.0" -typing-extensions = ">=4.8.0" - -[package.extras] -all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] - -[[package]] -name = "fastapi-sso" -version = "0.15.0" -description = "FastAPI plugin to enable SSO to most common providers (such as Facebook login, Google login and login via Microsoft Office 365 Account)" -optional = false -python-versions = "<4.0,>=3.8" -files = [ - {file = "fastapi_sso-0.15.0-py3-none-any.whl", hash = "sha256:071e0c204181bdb6a8afad2714f9f6abad32bd8984b9e57500ff0d2b680fdb37"}, - {file = "fastapi_sso-0.15.0.tar.gz", hash = "sha256:9717c3e0f88ae7cccb43fa1827e6b85fa2621a4c41b21347ddebf719b40abc15"}, -] - -[package.dependencies] -fastapi = ">=0.80" -httpx = ">=0.23.0" -oauthlib = ">=3.1.0" -pydantic = {version = ">=1.8.0", extras = ["email"]} - -[[package]] -name = "filelock" -version = "3.16.1" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, - {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, -] - -[package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] -typing = ["typing-extensions (>=4.12.2)"] - -[[package]] -name = "greenlet" -version = "3.1.1" -description = "Lightweight in-process concurrent programming" -optional = false -python-versions = ">=3.7" -files = [ - {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, - {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, - {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, - {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, - {file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"}, - {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"}, - {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"}, - {file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"}, - {file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"}, - {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"}, - {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"}, - {file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"}, - {file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"}, - {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"}, - {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"}, - {file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"}, - {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"}, - {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"}, - {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"}, - {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"}, - {file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"}, - {file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"}, - {file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"}, - {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"}, - {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"}, - {file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"}, - {file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"}, - {file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"}, - {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"}, - {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"}, - {file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"}, - {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, - {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, -] - -[package.extras] -docs = ["Sphinx", "furo"] -test = ["objgraph", "psutil"] - -[[package]] -name = "grpcio" -version = "1.66.1" -description = "HTTP/2-based RPC framework" -optional = false -python-versions = ">=3.8" -files = [ - {file = "grpcio-1.66.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492"}, - {file = "grpcio-1.66.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac"}, - {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60"}, - {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f"}, - {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083"}, - {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a"}, - {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d"}, - {file = "grpcio-1.66.1-cp310-cp310-win32.whl", hash = "sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c"}, - {file = "grpcio-1.66.1-cp310-cp310-win_amd64.whl", hash = "sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858"}, - {file = "grpcio-1.66.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a"}, - {file = "grpcio-1.66.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26"}, - {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df"}, - {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22"}, - {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1"}, - {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e"}, - {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd"}, - {file = "grpcio-1.66.1-cp311-cp311-win32.whl", hash = "sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791"}, - {file = "grpcio-1.66.1-cp311-cp311-win_amd64.whl", hash = "sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb"}, - {file = "grpcio-1.66.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a"}, - {file = "grpcio-1.66.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9"}, - {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d"}, - {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0"}, - {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761"}, - {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815"}, - {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524"}, - {file = "grpcio-1.66.1-cp312-cp312-win32.whl", hash = "sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759"}, - {file = "grpcio-1.66.1-cp312-cp312-win_amd64.whl", hash = "sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734"}, - {file = "grpcio-1.66.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:ecfe735e7a59e5a98208447293ff8580e9db1e890e232b8b292dc8bd15afc0d2"}, - {file = "grpcio-1.66.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4825a3aa5648010842e1c9d35a082187746aa0cdbf1b7a2a930595a94fb10fce"}, - {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:f517fd7259fe823ef3bd21e508b653d5492e706e9f0ef82c16ce3347a8a5620c"}, - {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1fe60d0772831d96d263b53d83fb9a3d050a94b0e94b6d004a5ad111faa5b5b"}, - {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31a049daa428f928f21090403e5d18ea02670e3d5d172581670be006100db9ef"}, - {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f914386e52cbdeb5d2a7ce3bf1fdfacbe9d818dd81b6099a05b741aaf3848bb"}, - {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bff2096bdba686019fb32d2dde45b95981f0d1490e054400f70fc9a8af34b49d"}, - {file = "grpcio-1.66.1-cp38-cp38-win32.whl", hash = "sha256:aa8ba945c96e73de29d25331b26f3e416e0c0f621e984a3ebdb2d0d0b596a3b3"}, - {file = "grpcio-1.66.1-cp38-cp38-win_amd64.whl", hash = "sha256:161d5c535c2bdf61b95080e7f0f017a1dfcb812bf54093e71e5562b16225b4ce"}, - {file = "grpcio-1.66.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:d0cd7050397b3609ea51727b1811e663ffda8bda39c6a5bb69525ef12414b503"}, - {file = "grpcio-1.66.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0e6c9b42ded5d02b6b1fea3a25f036a2236eeb75d0579bfd43c0018c88bf0a3e"}, - {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:c9f80f9fad93a8cf71c7f161778ba47fd730d13a343a46258065c4deb4b550c0"}, - {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dd67ed9da78e5121efc5c510f0122a972216808d6de70953a740560c572eb44"}, - {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48b0d92d45ce3be2084b92fb5bae2f64c208fea8ceed7fccf6a7b524d3c4942e"}, - {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d813316d1a752be6f5c4360c49f55b06d4fe212d7df03253dfdae90c8a402bb"}, - {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9c9bebc6627873ec27a70fc800f6083a13c70b23a5564788754b9ee52c5aef6c"}, - {file = "grpcio-1.66.1-cp39-cp39-win32.whl", hash = "sha256:30a1c2cf9390c894c90bbc70147f2372130ad189cffef161f0432d0157973f45"}, - {file = "grpcio-1.66.1-cp39-cp39-win_amd64.whl", hash = "sha256:17663598aadbedc3cacd7bbde432f541c8e07d2496564e22b214b22c7523dac8"}, - {file = "grpcio-1.66.1.tar.gz", hash = "sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.66.1)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "http-ece" -version = "1.2.1" -description = "Encrypted Content Encoding for HTTP" -optional = false -python-versions = "*" -files = [ - {file = "http_ece-1.2.1.tar.gz", hash = "sha256:8c6ab23116bbf6affda894acfd5f2ca0fb8facbcbb72121c11c75c33e7ce8cff"}, -] - -[package.dependencies] -cryptography = ">=2.5" - -[[package]] -name = "httpcore" -version = "1.0.6" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, - {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.13,<0.15" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<1.0)"] - -[[package]] -name = "httpx" -version = "0.27.0" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, - {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" -sniffio = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - -[[package]] -name = "identify" -version = "2.6.1" -description = "File identification library for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, - {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.10" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "importlib-resources" -version = "6.4.5" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, - {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] -type = ["pytest-mypy"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "itsdangerous" -version = "2.2.0" -description = "Safely pass data to untrusted environments and back." -optional = false -python-versions = ">=3.8" -files = [ - {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, - {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, -] - -[[package]] -name = "jinja2" -version = "3.1.4" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "limits" -version = "3.13.0" -description = "Rate limiting utilities" -optional = false -python-versions = ">=3.8" -files = [ - {file = "limits-3.13.0-py3-none-any.whl", hash = "sha256:9767f7233da4255e9904b79908a728e8ec0984c0b086058b4cbbd309aea553f6"}, - {file = "limits-3.13.0.tar.gz", hash = "sha256:6571b0c567bfa175a35fed9f8a954c0c92f1c3200804282f1b8f1de4ad98a953"}, -] - -[package.dependencies] -deprecated = ">=1.2" -importlib-resources = ">=1.3" -packaging = ">=21,<25" -typing-extensions = "*" - -[package.extras] -all = ["aetcd", "coredis (>=3.4.0,<5)", "emcache (>=0.6.1)", "emcache (>=1)", "etcd3", "motor (>=3,<4)", "pymemcache (>3,<5.0.0)", "pymongo (>4.1,<5)", "redis (>3,!=4.5.2,!=4.5.3,<6.0.0)", "redis (>=4.2.0,!=4.5.2,!=4.5.3)"] -async-etcd = ["aetcd"] -async-memcached = ["emcache (>=0.6.1)", "emcache (>=1)"] -async-mongodb = ["motor (>=3,<4)"] -async-redis = ["coredis (>=3.4.0,<5)"] -etcd = ["etcd3"] -memcached = ["pymemcache (>3,<5.0.0)"] -mongodb = ["pymongo (>4.1,<5)"] -redis = ["redis (>3,!=4.5.2,!=4.5.3,<6.0.0)"] -rediscluster = ["redis (>=4.2.0,!=4.5.2,!=4.5.3)"] - -[[package]] -name = "lnbits" -version = "1.0.0rc5" -description = "LNbits, free and open-source Lightning wallet and accounts system." -optional = false -python-versions = "<4.0,>=3.9" -files = [ - {file = "lnbits-1.0.0rc5-py3-none-any.whl", hash = "sha256:3107a9c6711720299add7880b62c020cbf34cee2486d47f2c3ddd3f6b4a76b9d"}, - {file = "lnbits-1.0.0rc5.tar.gz", hash = "sha256:f5559efa5d9b81f89acc1510db052d6300b3e93e1d0acdc70204689501865a51"}, -] - -[package.dependencies] -aiosqlite = "0.20.0" -asyncpg = "0.29.0" -bcrypt = "4.2.0" -bech32 = "1.2.0" -bolt11 = "2.1.0" -click = "8.1.7" -ecdsa = "0.19.0" -embit = "0.8.0" -environs = "9.5.0" -fastapi = "0.115.2" -fastapi-sso = "0.15.0" -grpcio = "1.66.1" -httpx = "0.27.0" -itsdangerous = "2.2.0" -jinja2 = "3.1.4" -lnurl = "0.5.3" -loguru = "0.7.2" -packaging = "24.0" -passlib = "1.7.4" -protobuf = "5.28.0" -pycryptodomex = "3.20.0" -pydantic = "1.10.18" -pyjwt = "2.9.0" -pyln-client = "24.8.1" -pyqrcode = "1.2.1" -python-crontab = "3.2.0" -pywebpush = "1.14.1" -secp256k1 = "0.14.0" -shortuuid = "1.0.13" -slowapi = "0.1.9" -sqlalchemy = "1.4.54" -sse-starlette = "1.8.2" -typing-extensions = "4.12.2" -uvicorn = "0.30.6" -uvloop = "0.19.0" -websocket-client = "1.8.0" -websockets = "11.0.3" - -[package.extras] -breez = ["breez-sdk (==0.5.2)"] -liquid = ["wallycore (==1.3.0)"] - -[[package]] -name = "lnurl" -version = "0.5.3" -description = "LNURL implementation for Python." -optional = false -python-versions = "<4.0,>=3.9" -files = [ - {file = "lnurl-0.5.3-py3-none-any.whl", hash = "sha256:feaf6c60b0b7f104894ef3accbd30d23d52e038c2797c58432baea7f4a8aa952"}, - {file = "lnurl-0.5.3.tar.gz", hash = "sha256:60154bcfdbb98fb143eeca970a16d73a582f28e057a826b5f222259411c497fe"}, -] - -[package.dependencies] -bech32 = ">=1.2.0,<2.0.0" -bolt11 = ">=2.0.5,<3.0.0" -ecdsa = ">=0.19.0,<0.20.0" -httpx = ">=0.27.0,<0.28.0" -pydantic = ">=1,<2" - -[[package]] -name = "loguru" -version = "0.7.2" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = ">=3.5" -files = [ - {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"}, - {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] - -[[package]] -name = "markupsafe" -version = "3.0.2" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.9" -files = [ - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, - {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, -] - -[[package]] -name = "marshmallow" -version = "3.23.1" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.9" -files = [ - {file = "marshmallow-3.23.1-py3-none-any.whl", hash = "sha256:fece2eb2c941180ea1b7fcbd4a83c51bfdd50093fdd3ad2585ee5e1df2508491"}, - {file = "marshmallow-3.23.1.tar.gz", hash = "sha256:3a8dfda6edd8dcdbf216c0ede1d1e78d230a6dc9c5a088f58c4083b974a0d468"}, -] - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)", "sphinx-version-warning (==1.1.2)"] -tests = ["pytest", "simplejson"] - -[[package]] -name = "mypy" -version = "1.13.0" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, - {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, - {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, - {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, - {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, - {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, - {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, - {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, - {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, - {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, - {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, - {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, - {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, - {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, - {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, - {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, - {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, - {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, - {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, - {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, - {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, - {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, - {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, - {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, - {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, - {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, - {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, - {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, - {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, - {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, - {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, - {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -faster-cache = ["orjson"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nodeenv" -version = "1.9.1" -description = "Node.js virtual environment builder" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, - {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, -] - -[[package]] -name = "oauthlib" -version = "3.2.2" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -optional = false -python-versions = ">=3.6" -files = [ - {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, - {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, -] - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - -[[package]] -name = "packaging" -version = "24.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, -] - -[[package]] -name = "passlib" -version = "1.7.4" -description = "comprehensive password hashing framework supporting over 30 schemes" -optional = false -python-versions = "*" -files = [ - {file = "passlib-1.7.4-py2.py3-none-any.whl", hash = "sha256:aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1"}, - {file = "passlib-1.7.4.tar.gz", hash = "sha256:defd50f72b65c5402ab2c573830a6978e5f202ad0d984793c8dde2c4152ebe04"}, -] - -[package.extras] -argon2 = ["argon2-cffi (>=18.2.0)"] -bcrypt = ["bcrypt (>=3.1.0)"] -build-docs = ["cloud-sptheme (>=1.10.1)", "sphinx (>=1.6)", "sphinxcontrib-fulltoc (>=1.2.0)"] -totp = ["cryptography"] - -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - -[[package]] -name = "platformdirs" -version = "4.3.6" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, - {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, -] - -[package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.11.2)"] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "3.8.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.9" -files = [ - {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, - {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "protobuf" -version = "5.28.0" -description = "" -optional = false -python-versions = ">=3.8" -files = [ - {file = "protobuf-5.28.0-cp310-abi3-win32.whl", hash = "sha256:66c3edeedb774a3508ae70d87b3a19786445fe9a068dd3585e0cefa8a77b83d0"}, - {file = "protobuf-5.28.0-cp310-abi3-win_amd64.whl", hash = "sha256:6d7cc9e60f976cf3e873acb9a40fed04afb5d224608ed5c1a105db4a3f09c5b6"}, - {file = "protobuf-5.28.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:532627e8fdd825cf8767a2d2b94d77e874d5ddb0adefb04b237f7cc296748681"}, - {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:018db9056b9d75eb93d12a9d35120f97a84d9a919bcab11ed56ad2d399d6e8dd"}, - {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:6206afcb2d90181ae8722798dcb56dc76675ab67458ac24c0dd7d75d632ac9bd"}, - {file = "protobuf-5.28.0-cp38-cp38-win32.whl", hash = "sha256:eef7a8a2f4318e2cb2dee8666d26e58eaf437c14788f3a2911d0c3da40405ae8"}, - {file = "protobuf-5.28.0-cp38-cp38-win_amd64.whl", hash = "sha256:d001a73c8bc2bf5b5c1360d59dd7573744e163b3607fa92788b7f3d5fefbd9a5"}, - {file = "protobuf-5.28.0-cp39-cp39-win32.whl", hash = "sha256:dde9fcaa24e7a9654f4baf2a55250b13a5ea701493d904c54069776b99a8216b"}, - {file = "protobuf-5.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:853db610214e77ee817ecf0514e0d1d052dff7f63a0c157aa6eabae98db8a8de"}, - {file = "protobuf-5.28.0-py3-none-any.whl", hash = "sha256:510ed78cd0980f6d3218099e874714cdf0d8a95582e7b059b06cabad855ed0a0"}, - {file = "protobuf-5.28.0.tar.gz", hash = "sha256:dde74af0fa774fa98892209992295adbfb91da3fa98c8f67a88afe8f5a349add"}, -] - -[[package]] -name = "py-vapid" -version = "1.9.1" -description = "Simple VAPID header generation library" -optional = false -python-versions = "*" -files = [ - {file = "py_vapid-1.9.1.tar.gz", hash = "sha256:fe2b5461bf45c7baff1039df6981f03b87faa87cde0482addfa35b3fe636ac1b"}, -] - -[package.dependencies] -cryptography = ">=2.5" - -[[package]] -name = "pycparser" -version = "2.22" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, - {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, -] - -[[package]] -name = "pycryptodomex" -version = "3.20.0" -description = "Cryptographic library for Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, - {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, - {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"}, - {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"}, - {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"}, - {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"}, - {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"}, - {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"}, - {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"}, - {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"}, - {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"}, - {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"}, - {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"}, - {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"}, - {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"}, - {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"}, - {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"}, - {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"}, - {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"}, - {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"}, - {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"}, - {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"}, - {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"}, -] - -[[package]] -name = "pydantic" -version = "1.10.18" -description = "Data validation and settings management using python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e405ffcc1254d76bb0e760db101ee8916b620893e6edfbfee563b3c6f7a67c02"}, - {file = "pydantic-1.10.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e306e280ebebc65040034bff1a0a81fd86b2f4f05daac0131f29541cafd80b80"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11d9d9b87b50338b1b7de4ebf34fd29fdb0d219dc07ade29effc74d3d2609c62"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b661ce52c7b5e5f600c0c3c5839e71918346af2ef20062705ae76b5c16914cab"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c20f682defc9ef81cd7eaa485879ab29a86a0ba58acf669a78ed868e72bb89e0"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c5ae6b7c8483b1e0bf59e5f1843e4fd8fd405e11df7de217ee65b98eb5462861"}, - {file = "pydantic-1.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:74fe19dda960b193b0eb82c1f4d2c8e5e26918d9cda858cbf3f41dd28549cb70"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72fa46abace0a7743cc697dbb830a41ee84c9db8456e8d77a46d79b537efd7ec"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef0fe7ad7cbdb5f372463d42e6ed4ca9c443a52ce544472d8842a0576d830da5"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00e63104346145389b8e8f500bc6a241e729feaf0559b88b8aa513dd2065481"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae6fa2008e1443c46b7b3a5eb03800121868d5ab6bc7cda20b5df3e133cde8b3"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9f463abafdc92635da4b38807f5b9972276be7c8c5121989768549fceb8d2588"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3445426da503c7e40baccefb2b2989a0c5ce6b163679dd75f55493b460f05a8f"}, - {file = "pydantic-1.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:467a14ee2183bc9c902579bb2f04c3d3dac00eff52e252850509a562255b2a33"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:efbc8a7f9cb5fe26122acba1852d8dcd1e125e723727c59dcd244da7bdaa54f2"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24a4a159d0f7a8e26bf6463b0d3d60871d6a52eac5bb6a07a7df85c806f4c048"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b74be007703547dc52e3c37344d130a7bfacca7df112a9e5ceeb840a9ce195c7"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcb20d4cb355195c75000a49bb4a31d75e4295200df620f454bbc6bdf60ca890"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46f379b8cb8a3585e3f61bf9ae7d606c70d133943f339d38b76e041ec234953f"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbfbca662ed3729204090c4d09ee4beeecc1a7ecba5a159a94b5a4eb24e3759a"}, - {file = "pydantic-1.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:c6d0a9f9eccaf7f438671a64acf654ef0d045466e63f9f68a579e2383b63f357"}, - {file = "pydantic-1.10.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d5492dbf953d7d849751917e3b2433fb26010d977aa7a0765c37425a4026ff1"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe734914977eed33033b70bfc097e1baaffb589517863955430bf2e0846ac30f"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15fdbe568beaca9aacfccd5ceadfb5f1a235087a127e8af5e48df9d8a45ae85c"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c3e742f62198c9eb9201781fbebe64533a3bbf6a76a91b8d438d62b813079dbc"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:19a3bd00b9dafc2cd7250d94d5b578edf7a0bd7daf102617153ff9a8fa37871c"}, - {file = "pydantic-1.10.18-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce3fcf75b2bae99aa31bd4968de0474ebe8c8258a0110903478bd83dfee4e3b"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:335a32d72c51a313b33fa3a9b0fe283503272ef6467910338e123f90925f0f03"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34a3613c7edb8c6fa578e58e9abe3c0f5e7430e0fc34a65a415a1683b9c32d9a"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ee4e6ca1d9616797fa2e9c0bfb8815912c7d67aca96f77428e316741082a1b"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23e8ec1ce4e57b4f441fc91e3c12adba023fedd06868445a5b5f1d48f0ab3682"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:44ae8a3e35a54d2e8fa88ed65e1b08967a9ef8c320819a969bfa09ce5528fafe"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5389eb3b48a72da28c6e061a247ab224381435256eb541e175798483368fdd3"}, - {file = "pydantic-1.10.18-cp38-cp38-win_amd64.whl", hash = "sha256:069b9c9fc645474d5ea3653788b544a9e0ccd3dca3ad8c900c4c6eac844b4620"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80b982d42515632eb51f60fa1d217dfe0729f008e81a82d1544cc392e0a50ddf"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aad8771ec8dbf9139b01b56f66386537c6fe4e76c8f7a47c10261b69ad25c2c9"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941a2eb0a1509bd7f31e355912eb33b698eb0051730b2eaf9e70e2e1589cae1d"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65f7361a09b07915a98efd17fdec23103307a54db2000bb92095457ca758d485"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6951f3f47cb5ca4da536ab161ac0163cab31417d20c54c6de5ddcab8bc813c3f"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a4c5eec138a9b52c67f664c7d51d4c7234c5ad65dd8aacd919fb47445a62c86"}, - {file = "pydantic-1.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:49e26c51ca854286bffc22b69787a8d4063a62bf7d83dc21d44d2ff426108518"}, - {file = "pydantic-1.10.18-py3-none-any.whl", hash = "sha256:06a189b81ffc52746ec9c8c007f16e5167c8b0a696e1a726369327e3db7b2a82"}, - {file = "pydantic-1.10.18.tar.gz", hash = "sha256:baebdff1907d1d96a139c25136a9bb7d17e118f133a76a2ef3b845e831e3403a"}, -] - -[package.dependencies] -email-validator = {version = ">=1.0.3", optional = true, markers = "extra == \"email\""} -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pyjwt" -version = "2.9.0" -description = "JSON Web Token implementation in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, - {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, -] - -[package.extras] -crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] - -[[package]] -name = "pyln-bolt7" -version = "1.0.246" -description = "BOLT7" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "pyln-bolt7-1.0.246.tar.gz", hash = "sha256:2b53744fa21c1b12d2c9c9df153651b122e38fa65d4a5c3f2957317ee148e089"}, - {file = "pyln_bolt7-1.0.246-py3-none-any.whl", hash = "sha256:54d48ec27fdc8751762cb068b0a9f2757a58fb57933c6d8f8255d02c27eb63c5"}, -] - -[[package]] -name = "pyln-client" -version = "24.8.1" -description = "Client library and plugin library for Core Lightning" -optional = false -python-versions = "<4.0,>=3.8" -files = [ - {file = "pyln_client-24.8.1-py3-none-any.whl", hash = "sha256:4a389de96813a23b587007f181a5d4ba37bb8a4ac6bed7074a591b6b710e4615"}, - {file = "pyln_client-24.8.1.tar.gz", hash = "sha256:47e1bcadc91df511b7dbd66059d25a6c67fb0d49953291762272abf151fe8846"}, -] - -[package.dependencies] -pyln-bolt7 = ">=1.0" -pyln-proto = ">=23" - -[[package]] -name = "pyln-proto" -version = "24.8.2" -description = "This package implements some of the Lightning Network protocol in pure python. It is intended for protocol testing and some minor tooling only. It is not deemed secure enough to handle any amount of real funds (you have been warned!)." -optional = false -python-versions = "<4.0,>=3.8" -files = [ - {file = "pyln_proto-24.8.2-py3-none-any.whl", hash = "sha256:9c6c080c41fff40b119ea518fae37b1c8d4e917fa55389002afceffd4850ec98"}, - {file = "pyln_proto-24.8.2.tar.gz", hash = "sha256:efa222284e2990f7227f0243acc0e9ec5acd3bb89bb66ecad9f7dfb22b09fc90"}, -] - -[package.dependencies] -base58 = ">=2.1.1,<3.0.0" -bitstring = ">=4.1.0,<5.0.0" -coincurve = ">=20,<21" -cryptography = ">=42,<43" -PySocks = ">=1,<2" - -[[package]] -name = "pyqrcode" -version = "1.2.1" -description = "A QR code generator written purely in Python with SVG, EPS, PNG and terminal output." -optional = false -python-versions = "*" -files = [ - {file = "PyQRCode-1.2.1.tar.gz", hash = "sha256:fdbf7634733e56b72e27f9bce46e4550b75a3a2c420414035cae9d9d26b234d5"}, - {file = "PyQRCode-1.2.1.zip", hash = "sha256:1b2812775fa6ff5c527977c4cd2ccb07051ca7d0bc0aecf937a43864abe5eff6"}, -] - -[package.extras] -png = ["pypng (>=0.0.13)"] - -[[package]] -name = "pysocks" -version = "1.7.1" -description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, - {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, - {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, -] - -[[package]] -name = "pytest" -version = "7.4.4" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-asyncio" -version = "0.21.2" -description = "Pytest support for asyncio" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b"}, - {file = "pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45"}, -] - -[package.dependencies] -pytest = ">=7.0.0" - -[package.extras] -docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] -testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] - -[[package]] -name = "python-crontab" -version = "3.2.0" -description = "Python Crontab API" -optional = false -python-versions = "*" -files = [ - {file = "python_crontab-3.2.0-py3-none-any.whl", hash = "sha256:82cb9b6a312d41ff66fd3caf3eed7115c28c195bfb50711bc2b4b9592feb9fe5"}, - {file = "python_crontab-3.2.0.tar.gz", hash = "sha256:40067d1dd39ade3460b2ad8557c7651514cd3851deffff61c5c60e1227c5c36b"}, -] - -[package.dependencies] -python-dateutil = "*" - -[package.extras] -cron-description = ["cron-descriptor"] -cron-schedule = ["croniter"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.0.1" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, - {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "pywebpush" -version = "1.14.1" -description = "WebPush publication library" -optional = false -python-versions = "*" -files = [ - {file = "pywebpush-1.14.1-py3-none-any.whl", hash = "sha256:2865ee65cf44375f7cbdcfd5ba915a9d84c239900c6fba2245efd8d8314a3e84"}, - {file = "pywebpush-1.14.1.tar.gz", hash = "sha256:f88d7e2bf5e87c616dfb04b8c95c119238c511659b02f735ee77cc16842855ee"}, -] - -[package.dependencies] -cryptography = ">=2.6.1" -http-ece = ">=1.1.0" -py-vapid = ">=1.7.0" -requests = ">=2.21.0" -six = ">=1.15.0" - -[[package]] -name = "pyyaml" -version = "6.0.2" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, -] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "ruff" -version = "0.3.7" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0e8377cccb2f07abd25e84fc5b2cbe48eeb0fea9f1719cad7caedb061d70e5ce"}, - {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:15a4d1cc1e64e556fa0d67bfd388fed416b7f3b26d5d1c3e7d192c897e39ba4b"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28bdf3d7dc71dd46929fafeec98ba89b7c3550c3f0978e36389b5631b793663"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:379b67d4f49774ba679593b232dcd90d9e10f04d96e3c8ce4a28037ae473f7bb"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c060aea8ad5ef21cdfbbe05475ab5104ce7827b639a78dd55383a6e9895b7c51"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ebf8f615dde968272d70502c083ebf963b6781aacd3079081e03b32adfe4d58a"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48098bd8f5c38897b03604f5428901b65e3c97d40b3952e38637b5404b739a2"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8a4fda219bf9024692b1bc68c9cff4b80507879ada8769dc7e985755d662ea"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c44e0149f1d8b48c4d5c33d88c677a4aa22fd09b1683d6a7ff55b816b5d074f"}, - {file = "ruff-0.3.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3050ec0af72b709a62ecc2aca941b9cd479a7bf2b36cc4562f0033d688e44fa1"}, - {file = "ruff-0.3.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a29cc38e4c1ab00da18a3f6777f8b50099d73326981bb7d182e54a9a21bb4ff7"}, - {file = "ruff-0.3.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b15cc59c19edca917f51b1956637db47e200b0fc5e6e1878233d3a938384b0b"}, - {file = "ruff-0.3.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e491045781b1e38b72c91247cf4634f040f8d0cb3e6d3d64d38dcf43616650b4"}, - {file = "ruff-0.3.7-py3-none-win32.whl", hash = "sha256:bc931de87593d64fad3a22e201e55ad76271f1d5bfc44e1a1887edd0903c7d9f"}, - {file = "ruff-0.3.7-py3-none-win_amd64.whl", hash = "sha256:5ef0e501e1e39f35e03c2acb1d1238c595b8bb36cf7a170e7c1df1b73da00e74"}, - {file = "ruff-0.3.7-py3-none-win_arm64.whl", hash = "sha256:789e144f6dc7019d1f92a812891c645274ed08af6037d11fc65fcbc183b7d59f"}, - {file = "ruff-0.3.7.tar.gz", hash = "sha256:d5c1aebee5162c2226784800ae031f660c350e7a3402c4d1f8ea4e97e232e3ba"}, -] - -[[package]] -name = "secp256k1" -version = "0.14.0" -description = "FFI bindings to libsecp256k1" -optional = false -python-versions = "*" -files = [ - {file = "secp256k1-0.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f666c67dcf1dc69e1448b2ede5e12aaf382b600204a61dbc65e4f82cea444405"}, - {file = "secp256k1-0.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fcabb3c3497a902fb61eec72d1b69bf72747d7bcc2a732d56d9319a1e8322262"}, - {file = "secp256k1-0.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a27c479ab60571502516a1506a562d0a9df062de8ad645313fabfcc97252816"}, - {file = "secp256k1-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4b9306bff6dde020444dfee9ca9b9f5b20ca53a2c0b04898361a3f43d5daf2e"}, - {file = "secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:72735da6cb28273e924431cd40aa607e7f80ef09608c8c9300be2e0e1d2417b4"}, - {file = "secp256k1-0.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:87f4ad42a370f768910585989a301d1d65de17dcd86f6e8def9b021364b34d5c"}, - {file = "secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:130f119b06142e597c10eb4470b5a38eae865362d01aaef06b113478d77f728d"}, - {file = "secp256k1-0.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:3aedcfe6eb1c5fa7c6be25b7cc91c76d8eb984271920ba0f7a934ae41ed56f51"}, - {file = "secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c91dd3154f6c46ac798d9a41166120e1751222587f54516cc3f378f56ce4ac82"}, - {file = "secp256k1-0.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fec790cb6d0d37129ca0ce5b3f8e85692d5fb618d1c440f189453d18694035df"}, - {file = "secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:63eb148196b8f646922d4be6739b17fbbf50ebb3a020078c823e2445d88b7a81"}, - {file = "secp256k1-0.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:adc23a4c5d24c95191638eb2ca313097827f07db102e77b59faed15d50c98cae"}, - {file = "secp256k1-0.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ce0314788d3248b275426501228969fd32f6501c9d1837902ee0e7bd8264a36f"}, - {file = "secp256k1-0.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bc761894b3634021686714278fc62b73395fa3eded33453eadfd8a00a6c44ef3"}, - {file = "secp256k1-0.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:373dc8bca735f3c2d73259aa2711a9ecea2f3c7edbb663555fe3422e3dd76102"}, - {file = "secp256k1-0.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fe3f503c9dfdf663b500d3e0688ad842e116c2907ad3f1e1d685812df3f56290"}, - {file = "secp256k1-0.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4b1bf09953cde181132cf5e9033065615e5c2694e803165e2db763efa47695e5"}, - {file = "secp256k1-0.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6af07be5f8612628c3638dc7b208f6cc78d0abae3e25797eadb13890c7d5da81"}, - {file = "secp256k1-0.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a8dbd75a9fb6f42de307f3c5e24573fe59c3374637cbf39136edc66c200a4029"}, - {file = "secp256k1-0.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97a30c8dae633cb18135c76b6517ae99dc59106818e8985be70dbc05dcc06c0d"}, - {file = "secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f4062d8c101aa63b9ecb3709f1f075ad9c01b6672869bbaa1bd77271816936a7"}, - {file = "secp256k1-0.14.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c9e7c024ff17e9b9d7c392bb2a917da231d6cb40ab119389ff1f51dca10339a4"}, - {file = "secp256k1-0.14.0.tar.gz", hash = "sha256:82c06712d69ef945220c8b53c1a0d424c2ff6a1f64aee609030df79ad8383397"}, -] - -[package.dependencies] -cffi = ">=1.3.0" - -[[package]] -name = "shortuuid" -version = "1.0.13" -description = "A generator library for concise, unambiguous and URL-safe UUIDs." -optional = false -python-versions = ">=3.6" -files = [ - {file = "shortuuid-1.0.13-py3-none-any.whl", hash = "sha256:a482a497300b49b4953e15108a7913244e1bb0d41f9d332f5e9925dba33a3c5a"}, - {file = "shortuuid-1.0.13.tar.gz", hash = "sha256:3bb9cf07f606260584b1df46399c0b87dd84773e7b25912b7e391e30797c5e72"}, -] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "slowapi" -version = "0.1.9" -description = "A rate limiting extension for Starlette and Fastapi" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "slowapi-0.1.9-py3-none-any.whl", hash = "sha256:cfad116cfb84ad9d763ee155c1e5c5cbf00b0d47399a769b227865f5df576e36"}, - {file = "slowapi-0.1.9.tar.gz", hash = "sha256:639192d0f1ca01b1c6d95bf6c71d794c3a9ee189855337b4821f7f457dddad77"}, -] - -[package.dependencies] -limits = ">=2.3" - -[package.extras] -redis = ["redis (>=3.4.1,<4.0.0)"] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "sqlalchemy" -version = "1.4.54" -description = "Database Abstraction Library" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "SQLAlchemy-1.4.54-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:af00236fe21c4d4f4c227b6ccc19b44c594160cc3ff28d104cdce85855369277"}, - {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1183599e25fa38a1a322294b949da02b4f0da13dbc2688ef9dbe746df573f8a6"}, - {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990d5a6a5dc358a0894c8ca02043fb9a5ad9538422001fb2826e91c50f1d539"}, - {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14b3f4783275339170984cadda66e3ec011cce87b405968dc8d51cf0f9997b0d"}, - {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b24364150738ce488333b3fb48bfa14c189a66de41cd632796fbcacb26b4585"}, - {file = "SQLAlchemy-1.4.54-cp310-cp310-win32.whl", hash = "sha256:a8a72259a1652f192c68377be7011eac3c463e9892ef2948828c7d58e4829988"}, - {file = "SQLAlchemy-1.4.54-cp310-cp310-win_amd64.whl", hash = "sha256:b67589f7955924865344e6eacfdcf70675e64f36800a576aa5e961f0008cde2a"}, - {file = "SQLAlchemy-1.4.54-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b05e0626ec1c391432eabb47a8abd3bf199fb74bfde7cc44a26d2b1b352c2c6e"}, - {file = "SQLAlchemy-1.4.54-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13e91d6892b5fcb94a36ba061fb7a1f03d0185ed9d8a77c84ba389e5bb05e936"}, - {file = "SQLAlchemy-1.4.54-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb59a11689ff3c58e7652260127f9e34f7f45478a2f3ef831ab6db7bcd72108f"}, - {file = "SQLAlchemy-1.4.54-cp311-cp311-win32.whl", hash = "sha256:1390ca2d301a2708fd4425c6d75528d22f26b8f5cbc9faba1ddca136671432bc"}, - {file = "SQLAlchemy-1.4.54-cp311-cp311-win_amd64.whl", hash = "sha256:2b37931eac4b837c45e2522066bda221ac6d80e78922fb77c75eb12e4dbcdee5"}, - {file = "SQLAlchemy-1.4.54-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3f01c2629a7d6b30d8afe0326b8c649b74825a0e1ebdcb01e8ffd1c920deb07d"}, - {file = "SQLAlchemy-1.4.54-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c24dd161c06992ed16c5e528a75878edbaeced5660c3db88c820f1f0d3fe1f4"}, - {file = "SQLAlchemy-1.4.54-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5e0d47d619c739bdc636bbe007da4519fc953393304a5943e0b5aec96c9877c"}, - {file = "SQLAlchemy-1.4.54-cp312-cp312-win32.whl", hash = "sha256:12bc0141b245918b80d9d17eca94663dbd3f5266ac77a0be60750f36102bbb0f"}, - {file = "SQLAlchemy-1.4.54-cp312-cp312-win_amd64.whl", hash = "sha256:f941aaf15f47f316123e1933f9ea91a6efda73a161a6ab6046d1cde37be62c88"}, - {file = "SQLAlchemy-1.4.54-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:a41611835010ed4ea4c7aed1da5b58aac78ee7e70932a91ed2705a7b38e40f52"}, - {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8c1b9ecaf9f2590337d5622189aeb2f0dbc54ba0232fa0856cf390957584a9"}, - {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de620f978ca273ce027769dc8db7e6ee72631796187adc8471b3c76091b809e"}, - {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5a2530400a6e7e68fd1552a55515de6a4559122e495f73554a51cedafc11669"}, - {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cf7076c8578b3de4e43a046cc7a1af8466e1c3f5e64167189fe8958a4f9c02"}, - {file = "SQLAlchemy-1.4.54-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:f1e1b92ee4ee9ffc68624ace218b89ca5ca667607ccee4541a90cc44999b9aea"}, - {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41cffc63c7c83dfc30c4cab5b4308ba74440a9633c4509c51a0c52431fb0f8ab"}, - {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5933c45d11cbd9694b1540aa9076816cc7406964c7b16a380fd84d3a5fe3241"}, - {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cafe0ba3a96d0845121433cffa2b9232844a2609fce694fcc02f3f31214ece28"}, - {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a19f816f4702d7b1951d7576026c7124b9bfb64a9543e571774cf517b7a50b29"}, - {file = "SQLAlchemy-1.4.54-cp37-cp37m-win32.whl", hash = "sha256:76c2ba7b5a09863d0a8166fbc753af96d561818c572dbaf697c52095938e7be4"}, - {file = "SQLAlchemy-1.4.54-cp37-cp37m-win_amd64.whl", hash = "sha256:a86b0e4be775902a5496af4fb1b60d8a2a457d78f531458d294360b8637bb014"}, - {file = "SQLAlchemy-1.4.54-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:a49730afb716f3f675755afec109895cab95bc9875db7ffe2e42c1b1c6279482"}, - {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26e78444bc77d089e62874dc74df05a5c71f01ac598010a327881a48408d0064"}, - {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02d2ecb9508f16ab9c5af466dfe5a88e26adf2e1a8d1c56eb616396ccae2c186"}, - {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:394b0135900b62dbf63e4809cdc8ac923182af2816d06ea61cd6763943c2cc05"}, - {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed3576675c187e3baa80b02c4c9d0edfab78eff4e89dd9da736b921333a2432"}, - {file = "SQLAlchemy-1.4.54-cp38-cp38-win32.whl", hash = "sha256:fc9ffd9a38e21fad3e8c5a88926d57f94a32546e937e0be46142b2702003eba7"}, - {file = "SQLAlchemy-1.4.54-cp38-cp38-win_amd64.whl", hash = "sha256:a01bc25eb7a5688656c8770f931d5cb4a44c7de1b3cec69b84cc9745d1e4cc10"}, - {file = "SQLAlchemy-1.4.54-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0b76bbb1cbae618d10679be8966f6d66c94f301cfc15cb49e2f2382563fb6efb"}, - {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdb2886c0be2c6c54d0651d5a61c29ef347e8eec81fd83afebbf7b59b80b7393"}, - {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:954816850777ac234a4e32b8c88ac1f7847088a6e90cfb8f0e127a1bf3feddff"}, - {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1d83cd1cc03c22d922ec94d0d5f7b7c96b1332f5e122e81b1a61fb22da77879a"}, - {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1576fba3616f79496e2f067262200dbf4aab1bb727cd7e4e006076686413c80c"}, - {file = "SQLAlchemy-1.4.54-cp39-cp39-win32.whl", hash = "sha256:3112de9e11ff1957148c6de1df2bc5cc1440ee36783412e5eedc6f53638a577d"}, - {file = "SQLAlchemy-1.4.54-cp39-cp39-win_amd64.whl", hash = "sha256:6da60fb24577f989535b8fc8b2ddc4212204aaf02e53c4c7ac94ac364150ed08"}, - {file = "sqlalchemy-1.4.54.tar.gz", hash = "sha256:4470fbed088c35dc20b78a39aaf4ae54fe81790c783b3264872a0224f437c31a"}, -] - -[package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} - -[package.extras] -aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] -aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] -asyncio = ["greenlet (!=0.4.17)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)", "mariadb (>=1.0.1,!=1.1.2)"] -mssql = ["pyodbc"] -mssql-pymssql = ["pymssql", "pymssql"] -mssql-pyodbc = ["pyodbc", "pyodbc"] -mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] -mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] -mysql-connector = ["mysql-connector-python", "mysql-connector-python"] -oracle = ["cx_oracle (>=7)", "cx_oracle (>=7,<8)"] -postgresql = ["psycopg2 (>=2.7)"] -postgresql-asyncpg = ["asyncpg", "asyncpg", "greenlet (!=0.4.17)", "greenlet (!=0.4.17)"] -postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)", "pg8000 (>=1.16.6,!=1.29.0)"] -postgresql-psycopg2binary = ["psycopg2-binary"] -postgresql-psycopg2cffi = ["psycopg2cffi"] -pymysql = ["pymysql", "pymysql (<1)"] -sqlcipher = ["sqlcipher3_binary"] - -[[package]] -name = "sse-starlette" -version = "1.8.2" -description = "SSE plugin for Starlette" -optional = false -python-versions = ">=3.8" -files = [ - {file = "sse_starlette-1.8.2-py3-none-any.whl", hash = "sha256:70cc7ef5aca4abe8a25dec1284cce4fe644dd7bf0c406d3e852e516092b7f849"}, - {file = "sse_starlette-1.8.2.tar.gz", hash = "sha256:e0f9b8dec41adc092a0a6e0694334bd3cfd3084c44c497a6ebc1fb4bdd919acd"}, -] - -[package.dependencies] -anyio = "*" -fastapi = "*" -starlette = "*" -uvicorn = "*" - -[[package]] -name = "starlette" -version = "0.40.0" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.8" -files = [ - {file = "starlette-0.40.0-py3-none-any.whl", hash = "sha256:c494a22fae73805376ea6bf88439783ecfba9aac88a43911b48c653437e784c4"}, - {file = "starlette-0.40.0.tar.gz", hash = "sha256:1a3139688fb298ce5e2d661d37046a66ad996ce94be4d4983be019a23a04ea35"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] - -[[package]] -name = "tomli" -version = "2.0.2" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, - {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[[package]] -name = "urllib3" -version = "2.2.3" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "uvicorn" -version = "0.30.6" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.8" -files = [ - {file = "uvicorn-0.30.6-py3-none-any.whl", hash = "sha256:65fd46fe3fda5bdc1b03b94eb634923ff18cd35b2f084813ea79d1f103f711b5"}, - {file = "uvicorn-0.30.6.tar.gz", hash = "sha256:4b15decdda1e72be08209e860a1e10e92439ad5b97cf44cc945fcbee66fc5788"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" -typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "uvloop" -version = "0.19.0" -description = "Fast implementation of asyncio event loop on top of libuv" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, - {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, - {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, - {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, - {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, - {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, - {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, - {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, - {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, - {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, - {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, - {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, - {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, - {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, - {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, - {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, - {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, - {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, - {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, - {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, - {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, - {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, - {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, - {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, - {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, - {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, - {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, - {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, - {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, - {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, - {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, -] - -[package.extras] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] - -[[package]] -name = "virtualenv" -version = "20.27.1" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.8" -files = [ - {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, - {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<5" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - -[[package]] -name = "websocket-client" -version = "1.8.0" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.8" -files = [ - {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, - {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, -] - -[package.extras] -docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - -[[package]] -name = "websockets" -version = "11.0.3" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, -] - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - -[[package]] -name = "wrapt" -version = "1.16.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = ">=3.6" -files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, -] - -[[package]] -name = "zipp" -version = "3.20.2" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, - {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.10 | ^3.9" -content-hash = "3c44aa4c67a390622291459f117b591302ed643bf86e0953c9f3b6c31dc3d504" diff --git a/pyproject.toml b/pyproject.toml index 0d6f216..b0a9d98 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,42 +1,45 @@ -[tool.poetry] -name = "lnbits-nostrmarket" +[project] +name = "nostrmarket" version = "0.0.0" +requires-python = ">=3.10,<3.13" description = "LNbits, free and open-source Lightning wallet and accounts system." -authors = ["Alan Bits "] +authors = [{ name = "Alan Bits", email = "alan@lnbits.com" }] +urls = { Homepage = "https://lnbits.com", Repository = "https://github.com/lnbits/nostrmarket" } +dependencies = [ "lnbits>1" ] -[tool.poetry.dependencies] -python = "^3.10 | ^3.9" -lnbits = {version = "*", allow-prereleases = true} +[tool.poetry] +package-mode = false -[tool.poetry.group.dev.dependencies] -black = "^24.3.0" -pytest-asyncio = "^0.21.0" -pytest = "^7.3.2" -mypy = "^1.5.1" -pre-commit = "^3.2.2" -ruff = "^0.3.2" - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" +[dependency-groups] +dev = [ + "black", + "pytest-asyncio", + "pytest", + "mypy==1.17.1", + "pre-commit", + "ruff", + "pytest-md", + "types-cffi", +] [tool.mypy] exclude = "(nostr/*)" +plugins = ["pydantic.mypy"] + [[tool.mypy.overrides]] module = [ + "nostr.*", "secp256k1.*", - "embit.*", - "lnbits.*", - "lnurl.*", - "loguru.*", - "fastapi.*", - "pydantic.*", - "pyqrcode.*", - "shortuuid.*", - "httpx.*", ] ignore_missing_imports = "True" + +[tool.pydantic-mypy] +init_forbid_extra = true +init_typed = true +warn_required_dynamic_aliases = true +warn_untyped_fields = true + [tool.pytest.ini_options] log_cli = false testpaths = [ diff --git a/services.py b/services.py index a9b32ed..4039dbb 100644 --- a/services.py +++ b/services.py @@ -1,8 +1,7 @@ import asyncio import json -from typing import List, Optional, Tuple -from lnbits.bolt11 import decode +from bolt11 import decode from lnbits.core.crud import get_wallet from lnbits.core.services import create_invoice, websocket_updater from loguru import logger @@ -60,7 +59,7 @@ from .nostr.event import NostrEvent async def create_new_order( merchant_public_key: str, data: PartialOrder -) -> Optional[PaymentRequest]: +) -> PaymentRequest | None: merchant = await get_merchant_by_pubkey(merchant_public_key) assert merchant, "Cannot find merchant for order!" @@ -137,7 +136,7 @@ async def update_merchant_to_nostr( merchant: Merchant, delete_merchant=False ) -> Merchant: stalls = await get_stalls(merchant.id) - event: Optional[NostrEvent] = None + event: NostrEvent | None = None for stall in stalls: assert stall.id products = await get_products(merchant.id, stall.id) @@ -222,7 +221,7 @@ async def notify_client_of_order_status( async def update_products_for_order( merchant: Merchant, order: Order -) -> Tuple[bool, str]: +) -> tuple[bool, str]: product_ids = [i.product_id for i in order.items] success, products, message = await compute_products_new_quantity( merchant.id, product_ids, order.items @@ -290,9 +289,9 @@ async def send_dm( async def compute_products_new_quantity( - merchant_id: str, product_ids: List[str], items: List[OrderItem] -) -> Tuple[bool, List[Product], str]: - products: List[Product] = await get_products_by_ids(merchant_id, product_ids) + merchant_id: str, product_ids: list[str], items: list[OrderItem] +) -> tuple[bool, list[Product], str]: + products: list[Product] = await get_products_by_ids(merchant_id, product_ids) for p in products: required_quantity = next( @@ -484,7 +483,7 @@ async def _handle_outgoing_dms( async def _handle_incoming_structured_dm( merchant: Merchant, dm: DirectMessage, json_data: dict -) -> Tuple[DirectMessageType, Optional[str]]: +) -> tuple[DirectMessageType, str | None]: try: if dm.type == DirectMessageType.CUSTOMER_ORDER.value and merchant.config.active: json_resp = await _handle_new_order( diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..60799b1 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2316 @@ +version = 1 +revision = 3 +requires-python = ">=3.10, <3.13" + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "async-timeout", marker = "python_full_version < '3.11'" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/ce/3b83ebba6b3207a7135e5fcaba49706f8a4b6008153b4e30540c982fae26/aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca", size = 7837994, upload-time = "2025-10-28T20:59:39.937Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/34/939730e66b716b76046dedfe0842995842fa906ccc4964bba414ff69e429/aiohttp-3.13.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2372b15a5f62ed37789a6b383ff7344fc5b9f243999b0cd9b629d8bc5f5b4155", size = 736471, upload-time = "2025-10-28T20:55:27.924Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/dcbdf2df7f6ca72b0bb4c0b4509701f2d8942cf54e29ca197389c214c07f/aiohttp-3.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7f8659a48995edee7229522984bd1009c1213929c769c2daa80b40fe49a180c", size = 493985, upload-time = "2025-10-28T20:55:29.456Z" }, + { url = "https://files.pythonhosted.org/packages/9d/87/71c8867e0a1d0882dcbc94af767784c3cb381c1c4db0943ab4aae4fed65e/aiohttp-3.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:939ced4a7add92296b0ad38892ce62b98c619288a081170695c6babe4f50e636", size = 489274, upload-time = "2025-10-28T20:55:31.134Z" }, + { url = "https://files.pythonhosted.org/packages/38/0f/46c24e8dae237295eaadd113edd56dee96ef6462adf19b88592d44891dc5/aiohttp-3.13.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6315fb6977f1d0dd41a107c527fee2ed5ab0550b7d885bc15fee20ccb17891da", size = 1668171, upload-time = "2025-10-28T20:55:36.065Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c6/4cdfb4440d0e28483681a48f69841fa5e39366347d66ef808cbdadddb20e/aiohttp-3.13.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6e7352512f763f760baaed2637055c49134fd1d35b37c2dedfac35bfe5cf8725", size = 1636036, upload-time = "2025-10-28T20:55:37.576Z" }, + { url = "https://files.pythonhosted.org/packages/84/37/8708cf678628216fb678ab327a4e1711c576d6673998f4f43e86e9ae90dd/aiohttp-3.13.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e09a0a06348a2dd73e7213353c90d709502d9786219f69b731f6caa0efeb46f5", size = 1727975, upload-time = "2025-10-28T20:55:39.457Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2e/3ebfe12fdcb9b5f66e8a0a42dffcd7636844c8a018f261efb2419f68220b/aiohttp-3.13.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a09a6d073fb5789456545bdee2474d14395792faa0527887f2f4ec1a486a59d3", size = 1815823, upload-time = "2025-10-28T20:55:40.958Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4f/ca2ef819488cbb41844c6cf92ca6dd15b9441e6207c58e5ae0e0fc8d70ad/aiohttp-3.13.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b59d13c443f8e049d9e94099c7e412e34610f1f49be0f230ec656a10692a5802", size = 1669374, upload-time = "2025-10-28T20:55:42.745Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fe/1fe2e1179a0d91ce09c99069684aab619bf2ccde9b20bd6ca44f8837203e/aiohttp-3.13.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:20db2d67985d71ca033443a1ba2001c4b5693fe09b0e29f6d9358a99d4d62a8a", size = 1555315, upload-time = "2025-10-28T20:55:44.264Z" }, + { url = "https://files.pythonhosted.org/packages/5a/2b/f3781899b81c45d7cbc7140cddb8a3481c195e7cbff8e36374759d2ab5a5/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:960c2fc686ba27b535f9fd2b52d87ecd7e4fd1cf877f6a5cba8afb5b4a8bd204", size = 1639140, upload-time = "2025-10-28T20:55:46.626Z" }, + { url = "https://files.pythonhosted.org/packages/72/27/c37e85cd3ece6f6c772e549bd5a253d0c122557b25855fb274224811e4f2/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6c00dbcf5f0d88796151e264a8eab23de2997c9303dd7c0bf622e23b24d3ce22", size = 1645496, upload-time = "2025-10-28T20:55:48.933Z" }, + { url = "https://files.pythonhosted.org/packages/66/20/3af1ab663151bd3780b123e907761cdb86ec2c4e44b2d9b195ebc91fbe37/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fed38a5edb7945f4d1bcabe2fcd05db4f6ec7e0e82560088b754f7e08d93772d", size = 1697625, upload-time = "2025-10-28T20:55:50.377Z" }, + { url = "https://files.pythonhosted.org/packages/95/eb/ae5cab15efa365e13d56b31b0d085a62600298bf398a7986f8388f73b598/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:b395bbca716c38bef3c764f187860e88c724b342c26275bc03e906142fc5964f", size = 1542025, upload-time = "2025-10-28T20:55:51.861Z" }, + { url = "https://files.pythonhosted.org/packages/e9/2d/1683e8d67ec72d911397fe4e575688d2a9b8f6a6e03c8fdc9f3fd3d4c03f/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:204ffff2426c25dfda401ba08da85f9c59525cdc42bda26660463dd1cbcfec6f", size = 1714918, upload-time = "2025-10-28T20:55:53.515Z" }, + { url = "https://files.pythonhosted.org/packages/99/a2/ffe8e0e1c57c5e542d47ffa1fcf95ef2b3ea573bf7c4d2ee877252431efc/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:05c4dd3c48fb5f15db31f57eb35374cb0c09afdde532e7fb70a75aede0ed30f6", size = 1656113, upload-time = "2025-10-28T20:55:55.438Z" }, + { url = "https://files.pythonhosted.org/packages/0d/42/d511aff5c3a2b06c09d7d214f508a4ad8ac7799817f7c3d23e7336b5e896/aiohttp-3.13.2-cp310-cp310-win32.whl", hash = "sha256:e574a7d61cf10351d734bcddabbe15ede0eaa8a02070d85446875dc11189a251", size = 432290, upload-time = "2025-10-28T20:55:56.96Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ea/1c2eb7098b5bad4532994f2b7a8228d27674035c9b3234fe02c37469ef14/aiohttp-3.13.2-cp310-cp310-win_amd64.whl", hash = "sha256:364f55663085d658b8462a1c3f17b2b84a5c2e1ba858e1b79bff7b2e24ad1514", size = 455075, upload-time = "2025-10-28T20:55:58.373Z" }, + { url = "https://files.pythonhosted.org/packages/35/74/b321e7d7ca762638cdf8cdeceb39755d9c745aff7a64c8789be96ddf6e96/aiohttp-3.13.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4647d02df098f6434bafd7f32ad14942f05a9caa06c7016fdcc816f343997dd0", size = 743409, upload-time = "2025-10-28T20:56:00.354Z" }, + { url = "https://files.pythonhosted.org/packages/99/3d/91524b905ec473beaf35158d17f82ef5a38033e5809fe8742e3657cdbb97/aiohttp-3.13.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3403f24bcb9c3b29113611c3c16a2a447c3953ecf86b79775e7be06f7ae7ccb", size = 497006, upload-time = "2025-10-28T20:56:01.85Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9", size = 493195, upload-time = "2025-10-28T20:56:03.314Z" }, + { url = "https://files.pythonhosted.org/packages/98/31/913f774a4708775433b7375c4f867d58ba58ead833af96c8af3621a0d243/aiohttp-3.13.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2a9ea08e8c58bb17655630198833109227dea914cd20be660f52215f6de5613", size = 1747759, upload-time = "2025-10-28T20:56:04.904Z" }, + { url = "https://files.pythonhosted.org/packages/e8/63/04efe156f4326f31c7c4a97144f82132c3bb21859b7bb84748d452ccc17c/aiohttp-3.13.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53b07472f235eb80e826ad038c9d106c2f653584753f3ddab907c83f49eedead", size = 1704456, upload-time = "2025-10-28T20:56:06.986Z" }, + { url = "https://files.pythonhosted.org/packages/8e/02/4e16154d8e0a9cf4ae76f692941fd52543bbb148f02f098ca73cab9b1c1b/aiohttp-3.13.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e736c93e9c274fce6419af4aac199984d866e55f8a4cec9114671d0ea9688780", size = 1807572, upload-time = "2025-10-28T20:56:08.558Z" }, + { url = "https://files.pythonhosted.org/packages/34/58/b0583defb38689e7f06798f0285b1ffb3a6fb371f38363ce5fd772112724/aiohttp-3.13.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a", size = 1895954, upload-time = "2025-10-28T20:56:10.545Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592", size = 1747092, upload-time = "2025-10-28T20:56:12.118Z" }, + { url = "https://files.pythonhosted.org/packages/ac/61/98a47319b4e425cc134e05e5f3fc512bf9a04bf65aafd9fdcda5d57ec693/aiohttp-3.13.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:97a0895a8e840ab3520e2288db7cace3a1981300d48babeb50e7425609e2e0ab", size = 1606815, upload-time = "2025-10-28T20:56:14.191Z" }, + { url = "https://files.pythonhosted.org/packages/97/4b/e78b854d82f66bb974189135d31fce265dee0f5344f64dd0d345158a5973/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e8f8afb552297aca127c90cb840e9a1d4bfd6a10d7d8f2d9176e1acc69bad30", size = 1723789, upload-time = "2025-10-28T20:56:16.101Z" }, + { url = "https://files.pythonhosted.org/packages/ed/fc/9d2ccc794fc9b9acd1379d625c3a8c64a45508b5091c546dea273a41929e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed2f9c7216e53c3df02264f25d824b079cc5914f9e2deba94155190ef648ee40", size = 1718104, upload-time = "2025-10-28T20:56:17.655Z" }, + { url = "https://files.pythonhosted.org/packages/66/65/34564b8765ea5c7d79d23c9113135d1dd3609173da13084830f1507d56cf/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:99c5280a329d5fa18ef30fd10c793a190d996567667908bef8a7f81f8202b948", size = 1785584, upload-time = "2025-10-28T20:56:19.238Z" }, + { url = "https://files.pythonhosted.org/packages/30/be/f6a7a426e02fc82781afd62016417b3948e2207426d90a0e478790d1c8a4/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ca6ffef405fc9c09a746cb5d019c1672cd7f402542e379afc66b370833170cf", size = 1595126, upload-time = "2025-10-28T20:56:20.836Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c7/8e22d5d28f94f67d2af496f14a83b3c155d915d1fe53d94b66d425ec5b42/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:47f438b1a28e926c37632bff3c44df7d27c9b57aaf4e34b1def3c07111fdb782", size = 1800665, upload-time = "2025-10-28T20:56:22.922Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/91133c8b68b1da9fc16555706aa7276fdf781ae2bb0876c838dd86b8116e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9acda8604a57bb60544e4646a4615c1866ee6c04a8edef9b8ee6fd1d8fa2ddc8", size = 1739532, upload-time = "2025-10-28T20:56:25.924Z" }, + { url = "https://files.pythonhosted.org/packages/17/6b/3747644d26a998774b21a616016620293ddefa4d63af6286f389aedac844/aiohttp-3.13.2-cp311-cp311-win32.whl", hash = "sha256:868e195e39b24aaa930b063c08bb0c17924899c16c672a28a65afded9c46c6ec", size = 431876, upload-time = "2025-10-28T20:56:27.524Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/688462108c1a00eb9f05765331c107f95ae86f6b197b865d29e930b7e462/aiohttp-3.13.2-cp311-cp311-win_amd64.whl", hash = "sha256:7fd19df530c292542636c2a9a85854fab93474396a52f1695e799186bbd7f24c", size = 456205, upload-time = "2025-10-28T20:56:29.062Z" }, + { url = "https://files.pythonhosted.org/packages/29/9b/01f00e9856d0a73260e86dd8ed0c2234a466c5c1712ce1c281548df39777/aiohttp-3.13.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b1e56bab2e12b2b9ed300218c351ee2a3d8c8fdab5b1ec6193e11a817767e47b", size = 737623, upload-time = "2025-10-28T20:56:30.797Z" }, + { url = "https://files.pythonhosted.org/packages/5a/1b/4be39c445e2b2bd0aab4ba736deb649fabf14f6757f405f0c9685019b9e9/aiohttp-3.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:364e25edaabd3d37b1db1f0cbcee8c73c9a3727bfa262b83e5e4cf3489a2a9dc", size = 492664, upload-time = "2025-10-28T20:56:32.708Z" }, + { url = "https://files.pythonhosted.org/packages/28/66/d35dcfea8050e131cdd731dff36434390479b4045a8d0b9d7111b0a968f1/aiohttp-3.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5c94825f744694c4b8db20b71dba9a257cd2ba8e010a803042123f3a25d50d7", size = 491808, upload-time = "2025-10-28T20:56:34.57Z" }, + { url = "https://files.pythonhosted.org/packages/00/29/8e4609b93e10a853b65f8291e64985de66d4f5848c5637cddc70e98f01f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba2715d842ffa787be87cbfce150d5e88c87a98e0b62e0f5aa489169a393dbbb", size = 1738863, upload-time = "2025-10-28T20:56:36.377Z" }, + { url = "https://files.pythonhosted.org/packages/9d/fa/4ebdf4adcc0def75ced1a0d2d227577cd7b1b85beb7edad85fcc87693c75/aiohttp-3.13.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:585542825c4bc662221fb257889e011a5aa00f1ae4d75d1d246a5225289183e3", size = 1700586, upload-time = "2025-10-28T20:56:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/da/04/73f5f02ff348a3558763ff6abe99c223381b0bace05cd4530a0258e52597/aiohttp-3.13.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39d02cb6025fe1aabca329c5632f48c9532a3dabccd859e7e2f110668972331f", size = 1768625, upload-time = "2025-10-28T20:56:39.75Z" }, + { url = "https://files.pythonhosted.org/packages/f8/49/a825b79ffec124317265ca7d2344a86bcffeb960743487cb11988ffb3494/aiohttp-3.13.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e67446b19e014d37342f7195f592a2a948141d15a312fe0e700c2fd2f03124f6", size = 1867281, upload-time = "2025-10-28T20:56:41.471Z" }, + { url = "https://files.pythonhosted.org/packages/b9/48/adf56e05f81eac31edcfae45c90928f4ad50ef2e3ea72cb8376162a368f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4356474ad6333e41ccefd39eae869ba15a6c5299c9c01dfdcfdd5c107be4363e", size = 1752431, upload-time = "2025-10-28T20:56:43.162Z" }, + { url = "https://files.pythonhosted.org/packages/30/ab/593855356eead019a74e862f21523db09c27f12fd24af72dbc3555b9bfd9/aiohttp-3.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeacf451c99b4525f700f078becff32c32ec327b10dcf31306a8a52d78166de7", size = 1562846, upload-time = "2025-10-28T20:56:44.85Z" }, + { url = "https://files.pythonhosted.org/packages/39/0f/9f3d32271aa8dc35036e9668e31870a9d3b9542dd6b3e2c8a30931cb27ae/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8a9b889aeabd7a4e9af0b7f4ab5ad94d42e7ff679aaec6d0db21e3b639ad58d", size = 1699606, upload-time = "2025-10-28T20:56:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3c/52d2658c5699b6ef7692a3f7128b2d2d4d9775f2a68093f74bca06cf01e1/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fa89cb11bc71a63b69568d5b8a25c3ca25b6d54c15f907ca1c130d72f320b76b", size = 1720663, upload-time = "2025-10-28T20:56:48.528Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d4/8f8f3ff1fb7fb9e3f04fcad4e89d8a1cd8fc7d05de67e3de5b15b33008ff/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8aa7c807df234f693fed0ecd507192fc97692e61fee5702cdc11155d2e5cadc8", size = 1737939, upload-time = "2025-10-28T20:56:50.77Z" }, + { url = "https://files.pythonhosted.org/packages/03/d3/ddd348f8a27a634daae39a1b8e291ff19c77867af438af844bf8b7e3231b/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9eb3e33fdbe43f88c3c75fa608c25e7c47bbd80f48d012763cb67c47f39a7e16", size = 1555132, upload-time = "2025-10-28T20:56:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/39/b8/46790692dc46218406f94374903ba47552f2f9f90dad554eed61bfb7b64c/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9434bc0d80076138ea986833156c5a48c9c7a8abb0c96039ddbb4afc93184169", size = 1764802, upload-time = "2025-10-28T20:56:54.292Z" }, + { url = "https://files.pythonhosted.org/packages/ba/e4/19ce547b58ab2a385e5f0b8aa3db38674785085abcf79b6e0edd1632b12f/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff15c147b2ad66da1f2cbb0622313f2242d8e6e8f9b79b5206c84523a4473248", size = 1719512, upload-time = "2025-10-28T20:56:56.428Z" }, + { url = "https://files.pythonhosted.org/packages/70/30/6355a737fed29dcb6dfdd48682d5790cb5eab050f7b4e01f49b121d3acad/aiohttp-3.13.2-cp312-cp312-win32.whl", hash = "sha256:27e569eb9d9e95dbd55c0fc3ec3a9335defbf1d8bc1d20171a49f3c4c607b93e", size = 426690, upload-time = "2025-10-28T20:56:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0d/b10ac09069973d112de6ef980c1f6bb31cb7dcd0bc363acbdad58f927873/aiohttp-3.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:8709a0f05d59a71f33fd05c17fc11fcb8c30140506e13c2f5e8ee1b8964e1b45", size = 453465, upload-time = "2025-10-28T20:57:00.795Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "aiosqlite" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/7d/8bca2bf9a247c2c5dfeec1d7a5f40db6518f88d314b8bca9da29670d2671/aiosqlite-0.21.0.tar.gz", hash = "sha256:131bb8056daa3bc875608c631c678cda73922a2d4ba8aec373b19f18c17e7aa3", size = 13454, upload-time = "2025-02-03T07:30:16.235Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl", hash = "sha256:2549cf4057f95f53dcba16f2b64e8e2791d7e1adedb13197dd8ed77bb226d7d0", size = 15792, upload-time = "2025-02-03T07:30:13.6Z" }, +] + +[[package]] +name = "anyio" +version = "4.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094, upload-time = "2025-09-23T09:19:12.58Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc", size = 109097, upload-time = "2025-09-23T09:19:10.601Z" }, +] + +[[package]] +name = "asn1crypto" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/cf/d547feed25b5244fcb9392e288ff9fdc3280b10260362fc45d37a798a6ee/asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", size = 121080, upload-time = "2022-03-15T14:46:52.889Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67", size = 105045, upload-time = "2022-03-15T14:46:51.055Z" }, +] + +[[package]] +name = "async-timeout" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, +] + +[[package]] +name = "asyncpg" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-timeout", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/4c/7c991e080e106d854809030d8584e15b2e996e26f16aee6d757e387bc17d/asyncpg-0.30.0.tar.gz", hash = "sha256:c551e9928ab6707602f44811817f82ba3c446e018bfe1d3abecc8ba5f3eac851", size = 957746, upload-time = "2024-10-20T00:30:41.127Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/07/1650a8c30e3a5c625478fa8aafd89a8dd7d85999bf7169b16f54973ebf2c/asyncpg-0.30.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfb4dd5ae0699bad2b233672c8fc5ccbd9ad24b89afded02341786887e37927e", size = 673143, upload-time = "2024-10-20T00:29:08.846Z" }, + { url = "https://files.pythonhosted.org/packages/a0/9a/568ff9b590d0954553c56806766914c149609b828c426c5118d4869111d3/asyncpg-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc1f62c792752a49f88b7e6f774c26077091b44caceb1983509edc18a2222ec0", size = 645035, upload-time = "2024-10-20T00:29:12.02Z" }, + { url = "https://files.pythonhosted.org/packages/de/11/6f2fa6c902f341ca10403743701ea952bca896fc5b07cc1f4705d2bb0593/asyncpg-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3152fef2e265c9c24eec4ee3d22b4f4d2703d30614b0b6753e9ed4115c8a146f", size = 2912384, upload-time = "2024-10-20T00:29:13.644Z" }, + { url = "https://files.pythonhosted.org/packages/83/83/44bd393919c504ffe4a82d0aed8ea0e55eb1571a1dea6a4922b723f0a03b/asyncpg-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7255812ac85099a0e1ffb81b10dc477b9973345793776b128a23e60148dd1af", size = 2947526, upload-time = "2024-10-20T00:29:15.871Z" }, + { url = "https://files.pythonhosted.org/packages/08/85/e23dd3a2b55536eb0ded80c457b0693352262dc70426ef4d4a6fc994fa51/asyncpg-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:578445f09f45d1ad7abddbff2a3c7f7c291738fdae0abffbeb737d3fc3ab8b75", size = 2895390, upload-time = "2024-10-20T00:29:19.346Z" }, + { url = "https://files.pythonhosted.org/packages/9b/26/fa96c8f4877d47dc6c1864fef5500b446522365da3d3d0ee89a5cce71a3f/asyncpg-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c42f6bb65a277ce4d93f3fba46b91a265631c8df7250592dd4f11f8b0152150f", size = 3015630, upload-time = "2024-10-20T00:29:21.186Z" }, + { url = "https://files.pythonhosted.org/packages/34/00/814514eb9287614188a5179a8b6e588a3611ca47d41937af0f3a844b1b4b/asyncpg-0.30.0-cp310-cp310-win32.whl", hash = "sha256:aa403147d3e07a267ada2ae34dfc9324e67ccc4cdca35261c8c22792ba2b10cf", size = 568760, upload-time = "2024-10-20T00:29:22.769Z" }, + { url = "https://files.pythonhosted.org/packages/f0/28/869a7a279400f8b06dd237266fdd7220bc5f7c975348fea5d1e6909588e9/asyncpg-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb622c94db4e13137c4c7f98834185049cc50ee01d8f657ef898b6407c7b9c50", size = 625764, upload-time = "2024-10-20T00:29:25.882Z" }, + { url = "https://files.pythonhosted.org/packages/4c/0e/f5d708add0d0b97446c402db7e8dd4c4183c13edaabe8a8500b411e7b495/asyncpg-0.30.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5e0511ad3dec5f6b4f7a9e063591d407eee66b88c14e2ea636f187da1dcfff6a", size = 674506, upload-time = "2024-10-20T00:29:27.988Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a0/67ec9a75cb24a1d99f97b8437c8d56da40e6f6bd23b04e2f4ea5d5ad82ac/asyncpg-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:915aeb9f79316b43c3207363af12d0e6fd10776641a7de8a01212afd95bdf0ed", size = 645922, upload-time = "2024-10-20T00:29:29.391Z" }, + { url = "https://files.pythonhosted.org/packages/5c/d9/a7584f24174bd86ff1053b14bb841f9e714380c672f61c906eb01d8ec433/asyncpg-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c198a00cce9506fcd0bf219a799f38ac7a237745e1d27f0e1f66d3707c84a5a", size = 3079565, upload-time = "2024-10-20T00:29:30.832Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d7/a4c0f9660e333114bdb04d1a9ac70db690dd4ae003f34f691139a5cbdae3/asyncpg-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3326e6d7381799e9735ca2ec9fd7be4d5fef5dcbc3cb555d8a463d8460607956", size = 3109962, upload-time = "2024-10-20T00:29:33.114Z" }, + { url = "https://files.pythonhosted.org/packages/3c/21/199fd16b5a981b1575923cbb5d9cf916fdc936b377e0423099f209e7e73d/asyncpg-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51da377487e249e35bd0859661f6ee2b81db11ad1f4fc036194bc9cb2ead5056", size = 3064791, upload-time = "2024-10-20T00:29:34.677Z" }, + { url = "https://files.pythonhosted.org/packages/77/52/0004809b3427534a0c9139c08c87b515f1c77a8376a50ae29f001e53962f/asyncpg-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc6d84136f9c4d24d358f3b02be4b6ba358abd09f80737d1ac7c444f36108454", size = 3188696, upload-time = "2024-10-20T00:29:36.389Z" }, + { url = "https://files.pythonhosted.org/packages/52/cb/fbad941cd466117be58b774a3f1cc9ecc659af625f028b163b1e646a55fe/asyncpg-0.30.0-cp311-cp311-win32.whl", hash = "sha256:574156480df14f64c2d76450a3f3aaaf26105869cad3865041156b38459e935d", size = 567358, upload-time = "2024-10-20T00:29:37.915Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0a/0a32307cf166d50e1ad120d9b81a33a948a1a5463ebfa5a96cc5606c0863/asyncpg-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:3356637f0bd830407b5597317b3cb3571387ae52ddc3bca6233682be88bbbc1f", size = 629375, upload-time = "2024-10-20T00:29:39.987Z" }, + { url = "https://files.pythonhosted.org/packages/4b/64/9d3e887bb7b01535fdbc45fbd5f0a8447539833b97ee69ecdbb7a79d0cb4/asyncpg-0.30.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c902a60b52e506d38d7e80e0dd5399f657220f24635fee368117b8b5fce1142e", size = 673162, upload-time = "2024-10-20T00:29:41.88Z" }, + { url = "https://files.pythonhosted.org/packages/6e/eb/8b236663f06984f212a087b3e849731f917ab80f84450e943900e8ca4052/asyncpg-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aca1548e43bbb9f0f627a04666fedaca23db0a31a84136ad1f868cb15deb6e3a", size = 637025, upload-time = "2024-10-20T00:29:43.352Z" }, + { url = "https://files.pythonhosted.org/packages/cc/57/2dc240bb263d58786cfaa60920779af6e8d32da63ab9ffc09f8312bd7a14/asyncpg-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c2a2ef565400234a633da0eafdce27e843836256d40705d83ab7ec42074efb3", size = 3496243, upload-time = "2024-10-20T00:29:44.922Z" }, + { url = "https://files.pythonhosted.org/packages/f4/40/0ae9d061d278b10713ea9021ef6b703ec44698fe32178715a501ac696c6b/asyncpg-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1292b84ee06ac8a2ad8e51c7475aa309245874b61333d97411aab835c4a2f737", size = 3575059, upload-time = "2024-10-20T00:29:46.891Z" }, + { url = "https://files.pythonhosted.org/packages/c3/75/d6b895a35a2c6506952247640178e5f768eeb28b2e20299b6a6f1d743ba0/asyncpg-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f5712350388d0cd0615caec629ad53c81e506b1abaaf8d14c93f54b35e3595a", size = 3473596, upload-time = "2024-10-20T00:29:49.201Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e7/3693392d3e168ab0aebb2d361431375bd22ffc7b4a586a0fc060d519fae7/asyncpg-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:db9891e2d76e6f425746c5d2da01921e9a16b5a71a1c905b13f30e12a257c4af", size = 3641632, upload-time = "2024-10-20T00:29:50.768Z" }, + { url = "https://files.pythonhosted.org/packages/32/ea/15670cea95745bba3f0352341db55f506a820b21c619ee66b7d12ea7867d/asyncpg-0.30.0-cp312-cp312-win32.whl", hash = "sha256:68d71a1be3d83d0570049cd1654a9bdfe506e794ecc98ad0873304a9f35e411e", size = 560186, upload-time = "2024-10-20T00:29:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/7e/6b/fe1fad5cee79ca5f5c27aed7bd95baee529c1bf8a387435c8ba4fe53d5c1/asyncpg-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:9a0292c6af5c500523949155ec17b7fe01a00ace33b68a476d6b5059f9630305", size = 621064, upload-time = "2024-10-20T00:29:53.757Z" }, +] + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "backports-asyncio-runner" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, +] + +[[package]] +name = "backports-datetime-fromisoformat" +version = "2.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/81/eff3184acb1d9dc3ce95a98b6f3c81a49b4be296e664db8e1c2eeabef3d9/backports_datetime_fromisoformat-2.0.3.tar.gz", hash = "sha256:b58edc8f517b66b397abc250ecc737969486703a66eb97e01e6d51291b1a139d", size = 23588, upload-time = "2024-12-28T20:18:15.017Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/4b/d6b051ca4b3d76f23c2c436a9669f3be616b8cf6461a7e8061c7c4269642/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f681f638f10588fa3c101ee9ae2b63d3734713202ddfcfb6ec6cea0778a29d4", size = 27561, upload-time = "2024-12-28T20:16:47.974Z" }, + { url = "https://files.pythonhosted.org/packages/6d/40/e39b0d471e55eb1b5c7c81edab605c02f71c786d59fb875f0a6f23318747/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:cd681460e9142f1249408e5aee6d178c6d89b49e06d44913c8fdfb6defda8d1c", size = 34448, upload-time = "2024-12-28T20:16:50.712Z" }, + { url = "https://files.pythonhosted.org/packages/f2/28/7a5c87c5561d14f1c9af979231fdf85d8f9fad7a95ff94e56d2205e2520a/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:ee68bc8735ae5058695b76d3bb2aee1d137c052a11c8303f1e966aa23b72b65b", size = 27093, upload-time = "2024-12-28T20:16:52.994Z" }, + { url = "https://files.pythonhosted.org/packages/80/ba/f00296c5c4536967c7d1136107fdb91c48404fe769a4a6fd5ab045629af8/backports_datetime_fromisoformat-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8273fe7932db65d952a43e238318966eab9e49e8dd546550a41df12175cc2be4", size = 52836, upload-time = "2024-12-28T20:16:55.283Z" }, + { url = "https://files.pythonhosted.org/packages/e3/92/bb1da57a069ddd601aee352a87262c7ae93467e66721d5762f59df5021a6/backports_datetime_fromisoformat-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39d57ea50aa5a524bb239688adc1d1d824c31b6094ebd39aa164d6cadb85de22", size = 52798, upload-time = "2024-12-28T20:16:56.64Z" }, + { url = "https://files.pythonhosted.org/packages/df/ef/b6cfd355982e817ccdb8d8d109f720cab6e06f900784b034b30efa8fa832/backports_datetime_fromisoformat-2.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ac6272f87693e78209dc72e84cf9ab58052027733cd0721c55356d3c881791cf", size = 52891, upload-time = "2024-12-28T20:16:58.887Z" }, + { url = "https://files.pythonhosted.org/packages/37/39/b13e3ae8a7c5d88b68a6e9248ffe7066534b0cfe504bf521963e61b6282d/backports_datetime_fromisoformat-2.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:44c497a71f80cd2bcfc26faae8857cf8e79388e3d5fbf79d2354b8c360547d58", size = 52955, upload-time = "2024-12-28T20:17:00.028Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e4/70cffa3ce1eb4f2ff0c0d6f5d56285aacead6bd3879b27a2ba57ab261172/backports_datetime_fromisoformat-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:6335a4c9e8af329cb1ded5ab41a666e1448116161905a94e054f205aa6d263bc", size = 29323, upload-time = "2024-12-28T20:17:01.125Z" }, + { url = "https://files.pythonhosted.org/packages/62/f5/5bc92030deadf34c365d908d4533709341fb05d0082db318774fdf1b2bcb/backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2e4b66e017253cdbe5a1de49e0eecff3f66cd72bcb1229d7db6e6b1832c0443", size = 27626, upload-time = "2024-12-28T20:17:03.448Z" }, + { url = "https://files.pythonhosted.org/packages/28/45/5885737d51f81dfcd0911dd5c16b510b249d4c4cf6f4a991176e0358a42a/backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:43e2d648e150777e13bbc2549cc960373e37bf65bd8a5d2e0cef40e16e5d8dd0", size = 34588, upload-time = "2024-12-28T20:17:04.459Z" }, + { url = "https://files.pythonhosted.org/packages/bc/6d/bd74de70953f5dd3e768c8fc774af942af0ce9f211e7c38dd478fa7ea910/backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:4ce6326fd86d5bae37813c7bf1543bae9e4c215ec6f5afe4c518be2635e2e005", size = 27162, upload-time = "2024-12-28T20:17:06.752Z" }, + { url = "https://files.pythonhosted.org/packages/47/ba/1d14b097f13cce45b2b35db9898957578b7fcc984e79af3b35189e0d332f/backports_datetime_fromisoformat-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7c8fac333bf860208fd522a5394369ee3c790d0aa4311f515fcc4b6c5ef8d75", size = 54482, upload-time = "2024-12-28T20:17:08.15Z" }, + { url = "https://files.pythonhosted.org/packages/25/e9/a2a7927d053b6fa148b64b5e13ca741ca254c13edca99d8251e9a8a09cfe/backports_datetime_fromisoformat-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4da5ab3aa0cc293dc0662a0c6d1da1a011dc1edcbc3122a288cfed13a0b45", size = 54362, upload-time = "2024-12-28T20:17:10.605Z" }, + { url = "https://files.pythonhosted.org/packages/c1/99/394fb5e80131a7d58c49b89e78a61733a9994885804a0bb582416dd10c6f/backports_datetime_fromisoformat-2.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:58ea11e3bf912bd0a36b0519eae2c5b560b3cb972ea756e66b73fb9be460af01", size = 54162, upload-time = "2024-12-28T20:17:12.301Z" }, + { url = "https://files.pythonhosted.org/packages/88/25/1940369de573c752889646d70b3fe8645e77b9e17984e72a554b9b51ffc4/backports_datetime_fromisoformat-2.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8a375c7dbee4734318714a799b6c697223e4bbb57232af37fbfff88fb48a14c6", size = 54118, upload-time = "2024-12-28T20:17:13.609Z" }, + { url = "https://files.pythonhosted.org/packages/b7/46/f275bf6c61683414acaf42b2df7286d68cfef03e98b45c168323d7707778/backports_datetime_fromisoformat-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:ac677b1664c4585c2e014739f6678137c8336815406052349c85898206ec7061", size = 29329, upload-time = "2024-12-28T20:17:16.124Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0f/69bbdde2e1e57c09b5f01788804c50e68b29890aada999f2b1a40519def9/backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66ce47ee1ba91e146149cf40565c3d750ea1be94faf660ca733d8601e0848147", size = 27630, upload-time = "2024-12-28T20:17:19.442Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1d/1c84a50c673c87518b1adfeafcfd149991ed1f7aedc45d6e5eac2f7d19d7/backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8b7e069910a66b3bba61df35b5f879e5253ff0821a70375b9daf06444d046fa4", size = 34707, upload-time = "2024-12-28T20:17:21.79Z" }, + { url = "https://files.pythonhosted.org/packages/71/44/27eae384e7e045cda83f70b551d04b4a0b294f9822d32dea1cbf1592de59/backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:a3b5d1d04a9e0f7b15aa1e647c750631a873b298cdd1255687bb68779fe8eb35", size = 27280, upload-time = "2024-12-28T20:17:24.503Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7a/a4075187eb6bbb1ff6beb7229db5f66d1070e6968abeb61e056fa51afa5e/backports_datetime_fromisoformat-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec1b95986430e789c076610aea704db20874f0781b8624f648ca9fb6ef67c6e1", size = 55094, upload-time = "2024-12-28T20:17:25.546Z" }, + { url = "https://files.pythonhosted.org/packages/71/03/3fced4230c10af14aacadc195fe58e2ced91d011217b450c2e16a09a98c8/backports_datetime_fromisoformat-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffe5f793db59e2f1d45ec35a1cf51404fdd69df9f6952a0c87c3060af4c00e32", size = 55605, upload-time = "2024-12-28T20:17:29.208Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0a/4b34a838c57bd16d3e5861ab963845e73a1041034651f7459e9935289cfd/backports_datetime_fromisoformat-2.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:620e8e73bd2595dfff1b4d256a12b67fce90ece3de87b38e1dde46b910f46f4d", size = 55353, upload-time = "2024-12-28T20:17:32.433Z" }, + { url = "https://files.pythonhosted.org/packages/d9/68/07d13c6e98e1cad85606a876367ede2de46af859833a1da12c413c201d78/backports_datetime_fromisoformat-2.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4cf9c0a985d68476c1cabd6385c691201dda2337d7453fb4da9679ce9f23f4e7", size = 55298, upload-time = "2024-12-28T20:17:34.919Z" }, + { url = "https://files.pythonhosted.org/packages/60/33/45b4d5311f42360f9b900dea53ab2bb20a3d61d7f9b7c37ddfcb3962f86f/backports_datetime_fromisoformat-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:d144868a73002e6e2e6fef72333e7b0129cecdd121aa8f1edba7107fd067255d", size = 29375, upload-time = "2024-12-28T20:17:36.018Z" }, + { url = "https://files.pythonhosted.org/packages/be/03/7eaa9f9bf290395d57fd30d7f1f2f9dff60c06a31c237dc2beb477e8f899/backports_datetime_fromisoformat-2.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90e202e72a3d5aae673fcc8c9a4267d56b2f532beeb9173361293625fe4d2039", size = 28980, upload-time = "2024-12-28T20:18:06.554Z" }, + { url = "https://files.pythonhosted.org/packages/47/80/a0ecf33446c7349e79f54cc532933780341d20cff0ee12b5bfdcaa47067e/backports_datetime_fromisoformat-2.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2df98ef1b76f5a58bb493dda552259ba60c3a37557d848e039524203951c9f06", size = 28449, upload-time = "2024-12-28T20:18:07.77Z" }, +] + +[[package]] +name = "base58" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/45/8ae61209bb9015f516102fa559a2914178da1d5868428bd86a1b4421141d/base58-2.1.1.tar.gz", hash = "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c", size = 6528, upload-time = "2021-10-30T22:12:17.858Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/45/ec96b29162a402fc4c1c5512d114d7b3787b9d1c2ec241d9568b4816ee23/base58-2.1.1-py3-none-any.whl", hash = "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2", size = 5621, upload-time = "2021-10-30T22:12:16.658Z" }, +] + +[[package]] +name = "bcrypt" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/5d/6d7433e0f3cd46ce0b43cd65e1db465ea024dbb8216fb2404e919c2ad77b/bcrypt-4.3.0.tar.gz", hash = "sha256:3a3fd2204178b6d2adcf09cb4f6426ffef54762577a7c9b54c159008cb288c18", size = 25697, upload-time = "2025-02-28T01:24:09.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/22/5ada0b9af72b60cbc4c9a399fdde4af0feaa609d27eb0adc61607997a3fa/bcrypt-4.3.0-cp38-abi3-macosx_10_12_universal2.whl", hash = "sha256:f81b0ed2639568bf14749112298f9e4e2b28853dab50a8b357e31798686a036d", size = 498019, upload-time = "2025-02-28T01:23:05.838Z" }, + { url = "https://files.pythonhosted.org/packages/b8/8c/252a1edc598dc1ce57905be173328eda073083826955ee3c97c7ff5ba584/bcrypt-4.3.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:864f8f19adbe13b7de11ba15d85d4a428c7e2f344bac110f667676a0ff84924b", size = 279174, upload-time = "2025-02-28T01:23:07.274Z" }, + { url = "https://files.pythonhosted.org/packages/29/5b/4547d5c49b85f0337c13929f2ccbe08b7283069eea3550a457914fc078aa/bcrypt-4.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e36506d001e93bffe59754397572f21bb5dc7c83f54454c990c74a468cd589e", size = 283870, upload-time = "2025-02-28T01:23:09.151Z" }, + { url = "https://files.pythonhosted.org/packages/be/21/7dbaf3fa1745cb63f776bb046e481fbababd7d344c5324eab47f5ca92dd2/bcrypt-4.3.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:842d08d75d9fe9fb94b18b071090220697f9f184d4547179b60734846461ed59", size = 279601, upload-time = "2025-02-28T01:23:11.461Z" }, + { url = "https://files.pythonhosted.org/packages/6d/64/e042fc8262e971347d9230d9abbe70d68b0a549acd8611c83cebd3eaec67/bcrypt-4.3.0-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7c03296b85cb87db865d91da79bf63d5609284fc0cab9472fdd8367bbd830753", size = 297660, upload-time = "2025-02-28T01:23:12.989Z" }, + { url = "https://files.pythonhosted.org/packages/50/b8/6294eb84a3fef3b67c69b4470fcdd5326676806bf2519cda79331ab3c3a9/bcrypt-4.3.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:62f26585e8b219cdc909b6a0069efc5e4267e25d4a3770a364ac58024f62a761", size = 284083, upload-time = "2025-02-28T01:23:14.5Z" }, + { url = "https://files.pythonhosted.org/packages/62/e6/baff635a4f2c42e8788fe1b1633911c38551ecca9a749d1052d296329da6/bcrypt-4.3.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:beeefe437218a65322fbd0069eb437e7c98137e08f22c4660ac2dc795c31f8bb", size = 279237, upload-time = "2025-02-28T01:23:16.686Z" }, + { url = "https://files.pythonhosted.org/packages/39/48/46f623f1b0c7dc2e5de0b8af5e6f5ac4cc26408ac33f3d424e5ad8da4a90/bcrypt-4.3.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:97eea7408db3a5bcce4a55d13245ab3fa566e23b4c67cd227062bb49e26c585d", size = 283737, upload-time = "2025-02-28T01:23:18.897Z" }, + { url = "https://files.pythonhosted.org/packages/49/8b/70671c3ce9c0fca4a6cc3cc6ccbaa7e948875a2e62cbd146e04a4011899c/bcrypt-4.3.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:191354ebfe305e84f344c5964c7cd5f924a3bfc5d405c75ad07f232b6dffb49f", size = 312741, upload-time = "2025-02-28T01:23:21.041Z" }, + { url = "https://files.pythonhosted.org/packages/27/fb/910d3a1caa2d249b6040a5caf9f9866c52114d51523ac2fb47578a27faee/bcrypt-4.3.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:41261d64150858eeb5ff43c753c4b216991e0ae16614a308a15d909503617732", size = 316472, upload-time = "2025-02-28T01:23:23.183Z" }, + { url = "https://files.pythonhosted.org/packages/dc/cf/7cf3a05b66ce466cfb575dbbda39718d45a609daa78500f57fa9f36fa3c0/bcrypt-4.3.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:33752b1ba962ee793fa2b6321404bf20011fe45b9afd2a842139de3011898fef", size = 343606, upload-time = "2025-02-28T01:23:25.361Z" }, + { url = "https://files.pythonhosted.org/packages/e3/b8/e970ecc6d7e355c0d892b7f733480f4aa8509f99b33e71550242cf0b7e63/bcrypt-4.3.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:50e6e80a4bfd23a25f5c05b90167c19030cf9f87930f7cb2eacb99f45d1c3304", size = 362867, upload-time = "2025-02-28T01:23:26.875Z" }, + { url = "https://files.pythonhosted.org/packages/a9/97/8d3118efd8354c555a3422d544163f40d9f236be5b96c714086463f11699/bcrypt-4.3.0-cp38-abi3-win32.whl", hash = "sha256:67a561c4d9fb9465ec866177e7aebcad08fe23aaf6fbd692a6fab69088abfc51", size = 160589, upload-time = "2025-02-28T01:23:28.381Z" }, + { url = "https://files.pythonhosted.org/packages/29/07/416f0b99f7f3997c69815365babbc2e8754181a4b1899d921b3c7d5b6f12/bcrypt-4.3.0-cp38-abi3-win_amd64.whl", hash = "sha256:584027857bc2843772114717a7490a37f68da563b3620f78a849bcb54dc11e62", size = 152794, upload-time = "2025-02-28T01:23:30.187Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c1/3fa0e9e4e0bfd3fd77eb8b52ec198fd6e1fd7e9402052e43f23483f956dd/bcrypt-4.3.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0d3efb1157edebfd9128e4e46e2ac1a64e0c1fe46fb023158a407c7892b0f8c3", size = 498969, upload-time = "2025-02-28T01:23:31.945Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d4/755ce19b6743394787fbd7dff6bf271b27ee9b5912a97242e3caf125885b/bcrypt-4.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08bacc884fd302b611226c01014eca277d48f0a05187666bca23aac0dad6fe24", size = 279158, upload-time = "2025-02-28T01:23:34.161Z" }, + { url = "https://files.pythonhosted.org/packages/9b/5d/805ef1a749c965c46b28285dfb5cd272a7ed9fa971f970435a5133250182/bcrypt-4.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6746e6fec103fcd509b96bacdfdaa2fbde9a553245dbada284435173a6f1aef", size = 284285, upload-time = "2025-02-28T01:23:35.765Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/698580547a4a4988e415721b71eb45e80c879f0fb04a62da131f45987b96/bcrypt-4.3.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:afe327968aaf13fc143a56a3360cb27d4ad0345e34da12c7290f1b00b8fe9a8b", size = 279583, upload-time = "2025-02-28T01:23:38.021Z" }, + { url = "https://files.pythonhosted.org/packages/f2/87/62e1e426418204db520f955ffd06f1efd389feca893dad7095bf35612eec/bcrypt-4.3.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d9af79d322e735b1fc33404b5765108ae0ff232d4b54666d46730f8ac1a43676", size = 297896, upload-time = "2025-02-28T01:23:39.575Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c6/8fedca4c2ada1b6e889c52d2943b2f968d3427e5d65f595620ec4c06fa2f/bcrypt-4.3.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f1e3ffa1365e8702dc48c8b360fef8d7afeca482809c5e45e653af82ccd088c1", size = 284492, upload-time = "2025-02-28T01:23:40.901Z" }, + { url = "https://files.pythonhosted.org/packages/4d/4d/c43332dcaaddb7710a8ff5269fcccba97ed3c85987ddaa808db084267b9a/bcrypt-4.3.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:3004df1b323d10021fda07a813fd33e0fd57bef0e9a480bb143877f6cba996fe", size = 279213, upload-time = "2025-02-28T01:23:42.653Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/1e36379e169a7df3a14a1c160a49b7b918600a6008de43ff20d479e6f4b5/bcrypt-4.3.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:531457e5c839d8caea9b589a1bcfe3756b0547d7814e9ce3d437f17da75c32b0", size = 284162, upload-time = "2025-02-28T01:23:43.964Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0a/644b2731194b0d7646f3210dc4d80c7fee3ecb3a1f791a6e0ae6bb8684e3/bcrypt-4.3.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:17a854d9a7a476a89dcef6c8bd119ad23e0f82557afbd2c442777a16408e614f", size = 312856, upload-time = "2025-02-28T01:23:46.011Z" }, + { url = "https://files.pythonhosted.org/packages/dc/62/2a871837c0bb6ab0c9a88bf54de0fc021a6a08832d4ea313ed92a669d437/bcrypt-4.3.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6fb1fd3ab08c0cbc6826a2e0447610c6f09e983a281b919ed721ad32236b8b23", size = 316726, upload-time = "2025-02-28T01:23:47.575Z" }, + { url = "https://files.pythonhosted.org/packages/0c/a1/9898ea3faac0b156d457fd73a3cb9c2855c6fd063e44b8522925cdd8ce46/bcrypt-4.3.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e965a9c1e9a393b8005031ff52583cedc15b7884fce7deb8b0346388837d6cfe", size = 343664, upload-time = "2025-02-28T01:23:49.059Z" }, + { url = "https://files.pythonhosted.org/packages/40/f2/71b4ed65ce38982ecdda0ff20c3ad1b15e71949c78b2c053df53629ce940/bcrypt-4.3.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:79e70b8342a33b52b55d93b3a59223a844962bef479f6a0ea318ebbcadf71505", size = 363128, upload-time = "2025-02-28T01:23:50.399Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/12f6a58eca6dea4be992d6c681b7ec9410a1d9f5cf368c61437e31daa879/bcrypt-4.3.0-cp39-abi3-win32.whl", hash = "sha256:b4d4e57f0a63fd0b358eb765063ff661328f69a04494427265950c71b992a39a", size = 160598, upload-time = "2025-02-28T01:23:51.775Z" }, + { url = "https://files.pythonhosted.org/packages/a9/cf/45fb5261ece3e6b9817d3d82b2f343a505fd58674a92577923bc500bd1aa/bcrypt-4.3.0-cp39-abi3-win_amd64.whl", hash = "sha256:e53e074b120f2877a35cc6c736b8eb161377caae8925c17688bd46ba56daaa5b", size = 152799, upload-time = "2025-02-28T01:23:53.139Z" }, + { url = "https://files.pythonhosted.org/packages/55/2d/0c7e5ab0524bf1a443e34cdd3926ec6f5879889b2f3c32b2f5074e99ed53/bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c950d682f0952bafcceaf709761da0a32a942272fad381081b51096ffa46cea1", size = 275367, upload-time = "2025-02-28T01:23:54.578Z" }, + { url = "https://files.pythonhosted.org/packages/10/4f/f77509f08bdff8806ecc4dc472b6e187c946c730565a7470db772d25df70/bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:107d53b5c67e0bbc3f03ebf5b030e0403d24dda980f8e244795335ba7b4a027d", size = 280644, upload-time = "2025-02-28T01:23:56.547Z" }, + { url = "https://files.pythonhosted.org/packages/35/18/7d9dc16a3a4d530d0a9b845160e9e5d8eb4f00483e05d44bb4116a1861da/bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:b693dbb82b3c27a1604a3dff5bfc5418a7e6a781bb795288141e5f80cf3a3492", size = 274881, upload-time = "2025-02-28T01:23:57.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/c4/ae6921088adf1e37f2a3a6a688e72e7d9e45fdd3ae5e0bc931870c1ebbda/bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:b6354d3760fcd31994a14c89659dee887f1351a06e5dac3c1142307172a79f90", size = 280203, upload-time = "2025-02-28T01:23:59.331Z" }, + { url = "https://files.pythonhosted.org/packages/4c/b1/1289e21d710496b88340369137cc4c5f6ee036401190ea116a7b4ae6d32a/bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a839320bf27d474e52ef8cb16449bb2ce0ba03ca9f44daba6d93fa1d8828e48a", size = 275103, upload-time = "2025-02-28T01:24:00.764Z" }, + { url = "https://files.pythonhosted.org/packages/94/41/19be9fe17e4ffc5d10b7b67f10e459fc4eee6ffe9056a88de511920cfd8d/bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:bdc6a24e754a555d7316fa4774e64c6c3997d27ed2d1964d55920c7c227bc4ce", size = 280513, upload-time = "2025-02-28T01:24:02.243Z" }, + { url = "https://files.pythonhosted.org/packages/aa/73/05687a9ef89edebdd8ad7474c16d8af685eb4591c3c38300bb6aad4f0076/bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:55a935b8e9a1d2def0626c4269db3fcd26728cbff1e84f0341465c31c4ee56d8", size = 274685, upload-time = "2025-02-28T01:24:04.512Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/47bba97924ebe86a62ef83dc75b7c8a881d53c535f83e2c54c4bd701e05c/bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:57967b7a28d855313a963aaea51bf6df89f833db4320da458e5b3c5ab6d4c938", size = 280110, upload-time = "2025-02-28T01:24:05.896Z" }, +] + +[[package]] +name = "bech32" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/fe/b67ac9b123e25a3c1b8fc3f3c92648804516ab44215adb165284e024c43f/bech32-1.2.0.tar.gz", hash = "sha256:7d6db8214603bd7871fcfa6c0826ef68b85b0abd90fa21c285a9c5e21d2bd899", size = 3695, upload-time = "2020-02-17T15:31:09.763Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/41/7022a226e5a6ac7091a95ba36bad057012ab7330b9894ad4e14e31d0b858/bech32-1.2.0-py3-none-any.whl", hash = "sha256:990dc8e5a5e4feabbdf55207b5315fdd9b73db40be294a19b3752cde9e79d981", size = 4587, upload-time = "2020-02-17T15:31:08.299Z" }, +] + +[[package]] +name = "bip32" +version = "4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coincurve" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/37/b69968b1b6eaea1fedb8efdb1862d86e92b6f68e182f39c764f894984db5/bip32-4.0.tar.gz", hash = "sha256:8035588f252f569bb414bc60df151ae431fc1c6789a19488a32890532ef3a2fc", size = 21662, upload-time = "2024-09-07T12:40:26.388Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/bd/dcf1650776a241c10a2bc6826b6e23ff63bf55373bb053b716c69c463758/bip32-4.0-py3-none-any.whl", hash = "sha256:9728b38336129c00e1f870bbb3e328c9632d51c1bddeef4011fd3115cb3aeff9", size = 12898, upload-time = "2024-09-07T12:40:25.358Z" }, +] + +[[package]] +name = "bitarray" +version = "3.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c1/644ea86b6f1a0864f656a3b3ee5bf8c29daa895cb3233942315fe065ea3a/bitarray-3.7.2.tar.gz", hash = "sha256:27a59bb7c64c0d094057a3536e15fdd693f8520771ee75d9344b82d0a5ade2d0", size = 150586, upload-time = "2025-10-08T14:29:03.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/78/488d06983f34f974c857ff6494dc8ef4f4b9d5e237d91d99ba47298bf446/bitarray-3.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10b53d85e98c5e6189f2c5e9744171901eec4fc7b7d5a0ea47d0902fb9738abc", size = 147139, upload-time = "2025-10-08T14:26:51.915Z" }, + { url = "https://files.pythonhosted.org/packages/d5/aa/8ebe4ed9c2acba77d49e4a2c1fd25fefb841ceaba39bf6b3949c6c6e1a18/bitarray-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7770f1b8f880acca6743da21665578082378014415c85454ca9eabf41c06b1d1", size = 144090, upload-time = "2025-10-08T14:26:53.472Z" }, + { url = "https://files.pythonhosted.org/packages/2f/20/0d93b1b54cb8944e582109814712fe37d934c8cd51d3faeaa69effacac0a/bitarray-3.7.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e83f074d9c52565cd14ec24f9895d6bbab14f123ac64c81415c2911d09b827ea", size = 321801, upload-time = "2025-10-08T14:26:54.963Z" }, + { url = "https://files.pythonhosted.org/packages/88/e8/bca798cdd87d9bd54f77bb0f304cd61c9a83d7610cc0c7c287207a6c3c39/bitarray-3.7.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5abc46f51e5414ef792172ee52e6af1f43d15cfab32f326b26e52be860476a25", size = 349665, upload-time = "2025-10-08T14:26:56.375Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d3/052aca85c4d92f2ee221598249bd8332d72c716255beedbbb8799660909f/bitarray-3.7.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7f950ac47ead99959fca0017de8af3e966c16654399d04d6da84e395d7f1e3d", size = 359949, upload-time = "2025-10-08T14:26:57.879Z" }, + { url = "https://files.pythonhosted.org/packages/7b/6e/0633ffbbe621fc1820765b509deff640a34a35ccb8400ca2f574a50daf92/bitarray-3.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6bfaf2f91616fca3025804100effa9153da8bfb3312232cfea9e2917956fd15f", size = 328142, upload-time = "2025-10-08T14:26:59.643Z" }, + { url = "https://files.pythonhosted.org/packages/30/68/9d34bbef00de3caf2d5a555c985b265736d264f884f54bb74d2735795f0d/bitarray-3.7.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f7cadb42a1a71203dfa3717e22a26779b60e7eea224efc063e11615ceeffe02d", size = 319634, upload-time = "2025-10-08T14:27:01.03Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/f27c5f68fb4b59d873e63a036b71735900602caf62029153ed5fa72cad7f/bitarray-3.7.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:041fb7c29156b0d2779d600abdcf632e67e2e2b93664a00cd39d7d492a769ac4", size = 347811, upload-time = "2025-10-08T14:27:02.445Z" }, + { url = "https://files.pythonhosted.org/packages/92/a9/a3a60a4ae40c1ca726ea856e3e66090f9290d36df95fe179f01c8e3e3d00/bitarray-3.7.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3ffb9a746282687b26d3475ab2288fa932e8321acdeae8b5cef26c0daeb43e4c", size = 344003, upload-time = "2025-10-08T14:27:03.68Z" }, + { url = "https://files.pythonhosted.org/packages/59/34/d9a7dc4187a72c30c7d98c995ba1b77f3280c5afe64e7409a3257c66d938/bitarray-3.7.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:042076dd5663401a6c881e8da40b883409cb1c7dbfb11959d80c0961d62ae388", size = 325038, upload-time = "2025-10-08T14:27:06.054Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c8/926a2833ab80e15b5514d8270fb4b69ae858a84fadfe64c968ca663e35de/bitarray-3.7.2-cp310-cp310-win32.whl", hash = "sha256:90265fa81144e62ec00038796096d53a0b4e6b695c26628dc19a6a1805d018d8", size = 141257, upload-time = "2025-10-08T14:27:07.122Z" }, + { url = "https://files.pythonhosted.org/packages/be/88/f80eab0d7501bcfdf59efc2dd5e4da4784af7d1ccec263c3fda14a9d8bac/bitarray-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:72d7c86fd64dbad5b8e35eddff90f63a2db380760b84dab1287b0fe5a112eb76", size = 148071, upload-time = "2025-10-08T14:27:08.511Z" }, + { url = "https://files.pythonhosted.org/packages/f0/43/0ebf3c1f8aa39135f43c45f64c2b86bcc1bf8d0a1cc7cba43fe5e11b09fa/bitarray-3.7.2-cp310-cp310-win_arm64.whl", hash = "sha256:0bf145b35ce851778aa14c922376f0801a66b5d9cc69ed37b94a9582ff3c6af8", size = 145059, upload-time = "2025-10-08T14:27:09.562Z" }, + { url = "https://files.pythonhosted.org/packages/39/92/267e7234faefe3cddd3b1360b4c2946a2ebf7179513b8c7a5744f8b2ffd0/bitarray-3.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f0b36a06fd7416feb2bf4651cf9ebd692ab457df38f2cf577209ba4b805bb4b6", size = 147140, upload-time = "2025-10-08T14:27:10.716Z" }, + { url = "https://files.pythonhosted.org/packages/4a/96/fb1081a580cc2ef7fdaba7bb8a6e34dafdef3b0c1697dbc6617216795987/bitarray-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ee7c41ac961c5625791f463280c9de2dfb8cb1852843689c9701244a528b9b48", size = 144089, upload-time = "2025-10-08T14:27:11.74Z" }, + { url = "https://files.pythonhosted.org/packages/fb/f6/beeb02dec52bc970db9789b75eebee07467e9b824aad66eba53a763eef15/bitarray-3.7.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fffd2387aee2df25da51ae232e038febc6537a34e25d986aa8d4a1b43547d994", size = 329875, upload-time = "2025-10-08T14:27:12.772Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/9d9fed4db42b4ac9e367786f007bde6cf41dcb3f0863b5176d95d8db5d10/bitarray-3.7.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:739153b628389e72e7a10a766c5f417a1f60e14f7d6c18e1d601c77ee3b03360", size = 357727, upload-time = "2025-10-08T14:27:13.965Z" }, + { url = "https://files.pythonhosted.org/packages/0d/35/1371a5ce63d3238abfad179dcb371dbe2491c9a2f5fe7fac41c1216a5955/bitarray-3.7.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1f69aedc2f995e8f046b6bf9625866fdff9d6502cc02df59f57ada4196a03647", size = 368179, upload-time = "2025-10-08T14:27:15.097Z" }, + { url = "https://files.pythonhosted.org/packages/42/e3/85e699578e1eca1ad6104f6934596c10efc0cde0d87c75be331d8c7203a8/bitarray-3.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad2462fd80e12fc61776fbf4c0ec5b37ddc03cdbca479110329aa11ca5487e8", size = 335984, upload-time = "2025-10-08T14:27:16.234Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c6/785aa7925645c250cfa36e782cc078a0bc136140dd72293a51acab99a7bb/bitarray-3.7.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a0480c8cab13646a362dd4b925f486af0186c4334cc9ddfd4083b56fdb39fc1d", size = 327573, upload-time = "2025-10-08T14:27:17.368Z" }, + { url = "https://files.pythonhosted.org/packages/ed/2b/a06e84b85884666e2b784bd4d9f605484f5fedc6dd557729585a09ca5b28/bitarray-3.7.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0617cd06aef4d38c5fa81475efcfd0ca5b73683331736042381b8c58be2bd913", size = 355752, upload-time = "2025-10-08T14:27:18.428Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/57728ce036c1a8e740d22d229d325a7307d5aed07587a58a9aded7752b71/bitarray-3.7.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:13033bd04178695a93cbde503dde4a4f07f3b0d33927713ce55befffea5c20dc", size = 352164, upload-time = "2025-10-08T14:27:20.313Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fe/719e62f924073be1d935266964a6a186a67389b1ad8e876271ad5f2ac5b4/bitarray-3.7.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a52a00c73afbea40522346b11850338bbc3c83c54572f3fd5eb4d28e7bb5fb4", size = 333041, upload-time = "2025-10-08T14:27:21.762Z" }, + { url = "https://files.pythonhosted.org/packages/73/f7/584d7f0c4267f845fb01d20fb16f9ad1d977d270557bfdd6b31824e9d08b/bitarray-3.7.2-cp311-cp311-win32.whl", hash = "sha256:4f9ea4014e7635570b609445ff10043eb23b60948f4fd70fb206fdc2b4cbcc60", size = 141405, upload-time = "2025-10-08T14:27:23.163Z" }, + { url = "https://files.pythonhosted.org/packages/ac/b2/ec72d1233fb2dfbe6d248ba567818c26038644c270926b865da411d958c7/bitarray-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:682d23e555dfb729039ddc7f36ac6fce1c84811c441d91714b0cb75d14a6dc98", size = 148254, upload-time = "2025-10-08T14:27:24.718Z" }, + { url = "https://files.pythonhosted.org/packages/2e/f1/6b6c76f92ba21a7eef847b8b5977c2b4f89736295616b996dc1da2ede9ca/bitarray-3.7.2-cp311-cp311-win_arm64.whl", hash = "sha256:824cb8f94268249755dc0fb2d72e09ddc5a48a1d4915f1c709a37099ae5b1e64", size = 145352, upload-time = "2025-10-08T14:27:25.951Z" }, + { url = "https://files.pythonhosted.org/packages/2d/6f/f91eda05b138e69e842c913461765b3cab4e22269f0ad756e530ae4aa932/bitarray-3.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0be3705631c15394231b205f19bfac1cfd67d86024c3ee0325305b8557303a8c", size = 147237, upload-time = "2025-10-08T14:27:27.336Z" }, + { url = "https://files.pythonhosted.org/packages/21/90/dd90023aa54d698d1afdbcac2cc76f0b67840dc2c44334543c057b43817b/bitarray-3.7.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48e2551ba3562464ed3b0a6d10ae3505cbcd63b5a5fb8effcf13c65d5a39931c", size = 144020, upload-time = "2025-10-08T14:27:28.729Z" }, + { url = "https://files.pythonhosted.org/packages/49/15/7d5dc84ef3e8e12ec376ff06f1593c2f2cc5e16c9f3a1cb946b999031e78/bitarray-3.7.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f88ef6412eefee6bd99ad8b6f985f140da37e8e21cbcb84a4090be433267c8c9", size = 331886, upload-time = "2025-10-08T14:27:30.612Z" }, + { url = "https://files.pythonhosted.org/packages/e3/0f/77a1de93cf3a5878f555bb5f689b3f4c97b41cc1f4a8fd4a02e9fee5b9aa/bitarray-3.7.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5e113bc700a1c97fbb9442f129de9bcf10008bfafb5b12dc97f689d37002badd", size = 359759, upload-time = "2025-10-08T14:27:31.728Z" }, + { url = "https://files.pythonhosted.org/packages/d7/b4/fe070c3903e9b7b03b8198110b1b5c2f80bf91bb8abfe926b7b5fae5b1b4/bitarray-3.7.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:de5c6f960f279f716571ffb9146a601d5f64921264c41f2fc4316b86f996a648", size = 370990, upload-time = "2025-10-08T14:27:32.984Z" }, + { url = "https://files.pythonhosted.org/packages/ce/1a/fc71d713832d36b6221eee7f98a3422aa6febea1f55f3ee82fbbd5133d77/bitarray-3.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:06ebdf0d663e38a6c77aeaec16b89c8bb00110696aae12ef369413990ed467da", size = 339304, upload-time = "2025-10-08T14:27:34.04Z" }, + { url = "https://files.pythonhosted.org/packages/be/40/737018176f57265ec73164c98b7919345798eb984bd1ac311eb9eb156101/bitarray-3.7.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:890dd8431b6cc2c4cdaa24539d191c949802a11a20dca4cc0678452b1e527daf", size = 329607, upload-time = "2025-10-08T14:27:35.683Z" }, + { url = "https://files.pythonhosted.org/packages/a8/40/47087cdde8a70c1a77754a4c6f8a7a636289a83fb14e3e0608bc010a4719/bitarray-3.7.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:43330e929846790ac6d76b52de58da5b550fcef0627b4632de01f405c223b612", size = 357175, upload-time = "2025-10-08T14:27:36.761Z" }, + { url = "https://files.pythonhosted.org/packages/7d/0c/f06abce6637156efcfc836e4637e24be475478e5e81c9b050a1d1885e9c3/bitarray-3.7.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:b9f8d8d116925d12ab9d2992b12781bf34eeb2a6a329dcf1ea1c7407e6c07e07", size = 355268, upload-time = "2025-10-08T14:27:37.924Z" }, + { url = "https://files.pythonhosted.org/packages/03/3e/d50498496f97d12e65d48bb96e831db537b17344dd071293353171ed1633/bitarray-3.7.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ddf01e86d866e6d321f71ee6e63d6381957797530125fa558ebca76b54567958", size = 335971, upload-time = "2025-10-08T14:27:39.738Z" }, + { url = "https://files.pythonhosted.org/packages/a8/28/ad7a934b37a8d20cd7673d0dcb3b1c125a077059309abb555518a7901d64/bitarray-3.7.2-cp312-cp312-win32.whl", hash = "sha256:73a29c49a81426a1b0d153064045f3f4fde6cb88ae38ada1d99d200486cf53a3", size = 141539, upload-time = "2025-10-08T14:27:41.021Z" }, + { url = "https://files.pythonhosted.org/packages/9f/20/6bbbd4309801ccad39624f66fc6407a3c9c95827074e8270591c9a6d3599/bitarray-3.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:283e5a5b735a7574a5242ed2ecbb0b09c9521ed78ff4067089efd2ba856e2332", size = 148533, upload-time = "2025-10-08T14:27:42.371Z" }, + { url = "https://files.pythonhosted.org/packages/88/e8/eb9bb20c8ad309c0e404b4d7b9d0e37b0d265b842998fcc4e9a12cd6895e/bitarray-3.7.2-cp312-cp312-win_arm64.whl", hash = "sha256:9c3f1d983c12dd1e54a808b78d685ccd9b96b7c43ef20fbf9b85fa076e491cec", size = 145496, upload-time = "2025-10-08T14:27:43.606Z" }, +] + +[[package]] +name = "bitstring" +version = "4.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bitarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/15/a8/a80c890db75d5bdd5314b5de02c4144c7de94fd0cefcae51acaeb14c6a3f/bitstring-4.3.1.tar.gz", hash = "sha256:a08bc09d3857216d4c0f412a1611056f1cc2b64fd254fb1e8a0afba7cfa1a95a", size = 251426, upload-time = "2025-03-22T09:39:06.978Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/2d/174566b533755ddf8efb32a5503af61c756a983de379f8ad3aed6a982d38/bitstring-4.3.1-py3-none-any.whl", hash = "sha256:69d1587f0ac18dc7d93fc7e80d5f447161a33e57027e726dc18a0a8bacf1711a", size = 71930, upload-time = "2025-03-22T09:39:05.163Z" }, +] + +[[package]] +name = "black" +version = "25.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "mypy-extensions" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "pytokens" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4b/43/20b5c90612d7bdb2bdbcceeb53d588acca3bb8f0e4c5d5c751a2c8fdd55a/black-25.9.0.tar.gz", hash = "sha256:0474bca9a0dd1b51791fcc507a4e02078a1c63f6d4e4ae5544b9848c7adfb619", size = 648393, upload-time = "2025-09-19T00:27:37.758Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/40/dbe31fc56b218a858c8fc6f5d8d3ba61c1fa7e989d43d4a4574b8b992840/black-25.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ce41ed2614b706fd55fd0b4a6909d06b5bab344ffbfadc6ef34ae50adba3d4f7", size = 1715605, upload-time = "2025-09-19T00:36:13.483Z" }, + { url = "https://files.pythonhosted.org/packages/92/b2/f46800621200eab6479b1f4c0e3ede5b4c06b768e79ee228bc80270bcc74/black-25.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ab0ce111ef026790e9b13bd216fa7bc48edd934ffc4cbf78808b235793cbc92", size = 1571829, upload-time = "2025-09-19T00:32:42.13Z" }, + { url = "https://files.pythonhosted.org/packages/4e/64/5c7f66bd65af5c19b4ea86062bb585adc28d51d37babf70969e804dbd5c2/black-25.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f96b6726d690c96c60ba682955199f8c39abc1ae0c3a494a9c62c0184049a713", size = 1631888, upload-time = "2025-09-19T00:30:54.212Z" }, + { url = "https://files.pythonhosted.org/packages/3b/64/0b9e5bfcf67db25a6eef6d9be6726499a8a72ebab3888c2de135190853d3/black-25.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:d119957b37cc641596063cd7db2656c5be3752ac17877017b2ffcdb9dfc4d2b1", size = 1327056, upload-time = "2025-09-19T00:31:08.877Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f4/7531d4a336d2d4ac6cc101662184c8e7d068b548d35d874415ed9f4116ef/black-25.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:456386fe87bad41b806d53c062e2974615825c7a52159cde7ccaeb0695fa28fa", size = 1698727, upload-time = "2025-09-19T00:31:14.264Z" }, + { url = "https://files.pythonhosted.org/packages/28/f9/66f26bfbbf84b949cc77a41a43e138d83b109502cd9c52dfc94070ca51f2/black-25.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a16b14a44c1af60a210d8da28e108e13e75a284bf21a9afa6b4571f96ab8bb9d", size = 1555679, upload-time = "2025-09-19T00:31:29.265Z" }, + { url = "https://files.pythonhosted.org/packages/bf/59/61475115906052f415f518a648a9ac679d7afbc8da1c16f8fdf68a8cebed/black-25.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aaf319612536d502fdd0e88ce52d8f1352b2c0a955cc2798f79eeca9d3af0608", size = 1617453, upload-time = "2025-09-19T00:30:42.24Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5b/20fd5c884d14550c911e4fb1b0dae00d4abb60a4f3876b449c4d3a9141d5/black-25.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:c0372a93e16b3954208417bfe448e09b0de5cc721d521866cd9e0acac3c04a1f", size = 1333655, upload-time = "2025-09-19T00:30:56.715Z" }, + { url = "https://files.pythonhosted.org/packages/fb/8e/319cfe6c82f7e2d5bfb4d3353c6cc85b523d677ff59edc61fdb9ee275234/black-25.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1b9dc70c21ef8b43248f1d86aedd2aaf75ae110b958a7909ad8463c4aa0880b0", size = 1742012, upload-time = "2025-09-19T00:33:08.678Z" }, + { url = "https://files.pythonhosted.org/packages/94/cc/f562fe5d0a40cd2a4e6ae3f685e4c36e365b1f7e494af99c26ff7f28117f/black-25.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8e46eecf65a095fa62e53245ae2795c90bdecabd53b50c448d0a8bcd0d2e74c4", size = 1581421, upload-time = "2025-09-19T00:35:25.937Z" }, + { url = "https://files.pythonhosted.org/packages/84/67/6db6dff1ebc8965fd7661498aea0da5d7301074b85bba8606a28f47ede4d/black-25.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9101ee58ddc2442199a25cb648d46ba22cd580b00ca4b44234a324e3ec7a0f7e", size = 1655619, upload-time = "2025-09-19T00:30:49.241Z" }, + { url = "https://files.pythonhosted.org/packages/10/10/3faef9aa2a730306cf469d76f7f155a8cc1f66e74781298df0ba31f8b4c8/black-25.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:77e7060a00c5ec4b3367c55f39cf9b06e68965a4f2e61cecacd6d0d9b7ec945a", size = 1342481, upload-time = "2025-09-19T00:31:29.625Z" }, + { url = "https://files.pythonhosted.org/packages/1b/46/863c90dcd3f9d41b109b7f19032ae0db021f0b2a81482ba0a1e28c84de86/black-25.9.0-py3-none-any.whl", hash = "sha256:474b34c1342cdc157d307b56c4c65bce916480c4a8f6551fdc6bf9b486a7c4ae", size = 203363, upload-time = "2025-09-19T00:27:35.724Z" }, +] + +[[package]] +name = "bolt11" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "base58" }, + { name = "bech32" }, + { name = "bitstring" }, + { name = "click" }, + { name = "coincurve" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/16/39/4b151129bac9a5a7bce390531659de760b065c679d6a47b20f9fa034f4e1/bolt11-2.1.1.tar.gz", hash = "sha256:4e903d77208bfc4de8fc7e183a0689ea54afe874c91d62524d3b8c09492fa7ea", size = 13872, upload-time = "2025-03-12T13:33:09.668Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/9e/78e59887cbf94116bdc890af7726ae264d55df14f1c777724c656e8a35fe/bolt11-2.1.1-py3-none-any.whl", hash = "sha256:fd4edb9e73e27bf5e017f47c97f7c6827b523fcf9cab152b123961ca78323e2d", size = 17102, upload-time = "2025-03-12T13:33:08.142Z" }, +] + +[[package]] +name = "certifi" +version = "2025.10.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/5b/b6ce21586237c77ce67d01dc5507039d444b630dd76611bbca2d8e5dcd91/certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43", size = 164519, upload-time = "2025-10-05T04:12:15.808Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de", size = 163286, upload-time = "2025-10-05T04:12:14.03Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" }, + { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" }, + { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" }, + { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" }, + { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" }, + { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" }, + { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" }, + { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" }, + { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" }, + { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, + { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, + { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, + { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, + { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, + { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, + { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, + { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, +] + +[[package]] +name = "coincurve" +version = "20.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asn1crypto" }, + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/4c/9e5e51e6c12cec6444c86697992f9c6ccffa19f84d042ff939c8b89206ff/coincurve-20.0.0.tar.gz", hash = "sha256:872419e404300302e938849b6b92a196fabdad651060b559dc310e52f8392829", size = 122865, upload-time = "2024-06-02T18:15:50.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/0c/f6a8b06f461089aeab441824134ea5d5824dba3acaac0a9dbf8444cbe1d6/coincurve-20.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d559b22828638390118cae9372a1bb6f6594f5584c311deb1de6a83163a0919b", size = 1255634, upload-time = "2024-06-02T18:14:26.381Z" }, + { url = "https://files.pythonhosted.org/packages/62/c2/0dbabd2c6648f49f730fdcbba84c53b5ffaf452fca85c750633141fe049c/coincurve-20.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33d7f6ebd90fcc550f819f7f2cce2af525c342aac07f0ccda46ad8956ad9d99b", size = 1255532, upload-time = "2024-06-02T18:14:28.792Z" }, + { url = "https://files.pythonhosted.org/packages/f5/77/c4fa50f8cb5d050a9bcab806503acdd1705b0dfb5c554eed15cc18bc12e8/coincurve-20.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22d70dd55d13fd427418eb41c20fde0a20a5e5f016e2b1bb94710701e759e7e0", size = 1191928, upload-time = "2024-06-02T18:14:30.874Z" }, + { url = "https://files.pythonhosted.org/packages/a3/11/6254ea354a32a3a1d70722daf58f2ebf0f689f0940eaced5127233416553/coincurve-20.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f18d481eaae72c169f334cde1fd22011a884e0c9c6adc3fdc1fd13df8236a3", size = 1194364, upload-time = "2024-06-02T18:14:32.684Z" }, + { url = "https://files.pythonhosted.org/packages/a7/a9/d8717d41eb02688691adc30d7348f7c5fdc78e977f4cea83ee84622050b5/coincurve-20.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de1ec57f43c3526bc462be58fb97910dc1fdd5acab6c71eda9f9719a5bd7489", size = 1204658, upload-time = "2024-06-02T18:14:33.919Z" }, + { url = "https://files.pythonhosted.org/packages/55/13/40923832d99c18fb01a00f83e5f6f702156e71cc0eb5d6281535eee662af/coincurve-20.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a6f007c44c726b5c0b3724093c0d4fb8e294f6b6869beb02d7473b21777473a3", size = 1215298, upload-time = "2024-06-02T18:14:35.318Z" }, + { url = "https://files.pythonhosted.org/packages/4d/87/646462a7a7810c7a3dcadae8969e1b78d535bcff072c26b17588e93a39b8/coincurve-20.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0ff1f3b81330db5092c24da2102e4fcba5094f14945b3eb40746456ceabdd6d9", size = 1204504, upload-time = "2024-06-02T18:14:36.567Z" }, + { url = "https://files.pythonhosted.org/packages/01/58/fbb9a312d559aee701491435b691e409fb0efa12eabf269ff651d537fed4/coincurve-20.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f7de97694d9343f26bd1c8e081b168e5f525894c12445548ce458af227f536", size = 1209298, upload-time = "2024-06-02T18:14:38.384Z" }, + { url = "https://files.pythonhosted.org/packages/ee/d0/1d5679c000b31f3b32512632d98571f2bb752cd25c127d6f5bf3711b6eae/coincurve-20.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:e905b4b084b4f3b61e5a5d58ac2632fd1d07b7b13b4c6d778335a6ca1dafd7a3", size = 1198934, upload-time = "2024-06-02T18:14:39.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/f6/8c1499f730fac49ec13740fb1c015ce8082fa6b917790056988559f22212/coincurve-20.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:3657bb5ed0baf1cf8cf356e7d44aa90a7902cc3dd4a435c6d4d0bed0553ad4f7", size = 1193319, upload-time = "2024-06-02T18:14:41.165Z" }, + { url = "https://files.pythonhosted.org/packages/24/a7/d60a41b3f0a546854c9b7ca65ab99a5fdf1c9e158ae264a580de8f23fd1c/coincurve-20.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44087d1126d43925bf9a2391ce5601bf30ce0dba4466c239172dc43226696018", size = 1255635, upload-time = "2024-06-02T18:14:42.483Z" }, + { url = "https://files.pythonhosted.org/packages/b7/4a/727fab66c0fbecfd7beeb38467910bd3652a77df649565e30160a9d2bae2/coincurve-20.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ccf0ba38b0f307a9b3ce28933f6c71dc12ef3a0985712ca09f48591afd597c8", size = 1255536, upload-time = "2024-06-02T18:14:44.077Z" }, + { url = "https://files.pythonhosted.org/packages/0f/8b/25d4ae5bb60665023e6d71681fada88ee95b5010dae6fc0b44d8b23b8df1/coincurve-20.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:566bc5986debdf8572b6be824fd4de03d533c49f3de778e29f69017ae3fe82d8", size = 1191928, upload-time = "2024-06-02T18:14:45.739Z" }, + { url = "https://files.pythonhosted.org/packages/0d/86/8c32c512fa27bfe7cfe70329fd43ebac23c0c8cec202cf6e4f52854e7ce3/coincurve-20.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4d70283168e146f025005c15406086513d5d35e89a60cf4326025930d45013a", size = 1194365, upload-time = "2024-06-02T18:14:47.008Z" }, + { url = "https://files.pythonhosted.org/packages/fe/74/fefbe512f54df7d02a7ea4821b87cf199a91b3565cdf0c94448b3f6b1af1/coincurve-20.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:763c6122dd7d5e7a81c86414ce360dbe9a2d4afa1ca6c853ee03d63820b3d0c5", size = 1204658, upload-time = "2024-06-02T18:14:48.348Z" }, + { url = "https://files.pythonhosted.org/packages/09/68/05b29f881f628ce8e8468f5f7420f6c4d7c129f43964e81d15bf388ae67a/coincurve-20.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f00c361c356bcea386d47a191bb8ac60429f4b51c188966a201bfecaf306ff7f", size = 1215301, upload-time = "2024-06-02T18:14:49.84Z" }, + { url = "https://files.pythonhosted.org/packages/ee/5d/d91549cf5a163797b0724dc2dcd551b908b6beddb6598b37743df7f6f3ec/coincurve-20.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4af57bdadd2e64d117dd0b33cfefe76e90c7a6c496a7b034fc65fd01ec249b15", size = 1204505, upload-time = "2024-06-02T18:14:51.816Z" }, + { url = "https://files.pythonhosted.org/packages/37/0f/898022e08760fb57d281f3695576e859b0f8a8ac629670223d9066c3f60d/coincurve-20.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a26437b7cbde13fb6e09261610b788ca2a0ca2195c62030afd1e1e0d1a62e035", size = 1209305, upload-time = "2024-06-02T18:14:53.39Z" }, + { url = "https://files.pythonhosted.org/packages/57/b9/643567d3f680ddf8d1bf10a56112ae7755296500d8eaaef498be637a8533/coincurve-20.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed51f8bba35e6c7676ad65539c3dbc35acf014fc402101fa24f6b0a15a74ab9e", size = 1198932, upload-time = "2024-06-02T18:14:54.751Z" }, + { url = "https://files.pythonhosted.org/packages/b3/3a/898f5c12469b292042608dd0702bcb0420ec32bac6b1ca2a0dd790f922bd/coincurve-20.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:594b840fc25d74118407edbbbc754b815f1bba9759dbf4f67f1c2b78396df2d3", size = 1193318, upload-time = "2024-06-02T18:14:55.981Z" }, + { url = "https://files.pythonhosted.org/packages/8f/24/e1bf259dd57186fbdc7cec51909db320884162cfad5ec72cbaa63573ff9d/coincurve-20.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4df4416a6c0370d777aa725a25b14b04e45aa228da1251c258ff91444643f688", size = 1255671, upload-time = "2024-06-02T18:14:57.863Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c5/1817f87d1cd5ff50d8537fe60fb96f66b76dd02da885d970952e6189a801/coincurve-20.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1ccc3e4db55abf3fc0e604a187fdb05f0702bc5952e503d9a75f4ae6eeb4cb3a", size = 1255565, upload-time = "2024-06-02T18:14:59.128Z" }, + { url = "https://files.pythonhosted.org/packages/90/9f/35e15f993717ed1dcc4c26d9771f073a1054af26808a0f421783bb4cd7e0/coincurve-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8335b1658a2ef5b3eb66d52647742fe8c6f413ad5b9d5310d7ea6d8060d40f", size = 1191953, upload-time = "2024-06-02T18:15:01.047Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3d/6a9bc32e69b738b5e05f5027bace1da6722352a4a447e495d3c03a601d99/coincurve-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ac025e485a0229fd5394e0bf6b4a75f8a4f6cee0dcf6f0b01a2ef05c5210ff", size = 1194425, upload-time = "2024-06-02T18:15:02.919Z" }, + { url = "https://files.pythonhosted.org/packages/1a/a6/15424973dc47fc7c87e3c0f8859f6f1b1032582ee9f1b85fdd5d1e33d630/coincurve-20.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e46e3f1c21b3330857bcb1a3a5b942f645c8bce912a8a2b252216f34acfe4195", size = 1204678, upload-time = "2024-06-02T18:15:04.308Z" }, + { url = "https://files.pythonhosted.org/packages/6a/e7/71ddb4d66c11c4ad13e729362f8852e048ae452eba3dfcf57751842bb292/coincurve-20.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:df9ff9b17a1d27271bf476cf3fa92df4c151663b11a55d8cea838b8f88d83624", size = 1215395, upload-time = "2024-06-02T18:15:05.701Z" }, + { url = "https://files.pythonhosted.org/packages/b9/7d/03e0a19cfff1d86f5d019afc69cfbff02caada701ed5a4a50abc63d4261c/coincurve-20.0.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4155759f071375699282e03b3d95fb473ee05c022641c077533e0d906311e57a", size = 1204552, upload-time = "2024-06-02T18:15:07.107Z" }, + { url = "https://files.pythonhosted.org/packages/07/cd/e9bd4ca7d931653a35c74194da04191a9aecc54b8f48a554cd538dc810e4/coincurve-20.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0530b9dd02fc6f6c2916716974b79bdab874227f560c422801ade290e3fc5013", size = 1209392, upload-time = "2024-06-02T18:15:08.663Z" }, + { url = "https://files.pythonhosted.org/packages/99/54/260053f14f74b99b645084231e1c76994134ded49407a3bba23a8ffc0ff6/coincurve-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:eacf9c0ce8739c84549a89c083b1f3526c8780b84517ee75d6b43d276e55f8a0", size = 1198932, upload-time = "2024-06-02T18:15:10.786Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b5/c465e09345dd38b9415f5d47ae7683b3f461db02fcc03e699b6b5687ab2b/coincurve-20.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:52a67bfddbd6224dfa42085c88ad176559801b57d6a8bd30d92ee040de88b7b3", size = 1193324, upload-time = "2024-06-02T18:15:12.511Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cryptography" +version = "46.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, + { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, + { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, + { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, + { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, + { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, + { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, + { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, + { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, + { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, + { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, + { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cd/1a8633802d766a0fa46f382a77e096d7e209e0817892929655fe0586ae32/cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32", size = 3689163, upload-time = "2025-10-15T23:18:13.821Z" }, + { url = "https://files.pythonhosted.org/packages/4c/59/6b26512964ace6480c3e54681a9859c974172fb141c38df11eadd8416947/cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c", size = 3429474, upload-time = "2025-10-15T23:18:15.477Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" }, + { url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" }, + { url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" }, + { url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" }, + { url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, +] + +[[package]] +name = "deprecated" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/85/12f0a49a7c4ffb70572b6c2ef13c90c88fd190debda93b23f026b25f9634/deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223", size = 2932523, upload-time = "2025-10-30T08:19:02.757Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f", size = 11298, upload-time = "2025-10-30T08:19:00.758Z" }, +] + +[[package]] +name = "distlib" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "ecdsa" +version = "0.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/1f/924e3caae75f471eae4b26bd13b698f6af2c44279f67af317439c2f4c46a/ecdsa-0.19.1.tar.gz", hash = "sha256:478cba7b62555866fcb3bb3fe985e06decbdb68ef55713c4e5ab98c57d508e61", size = 201793, upload-time = "2025-03-13T11:52:43.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/a3/460c57f094a4a165c84a1341c373b0a4f5ec6ac244b998d5021aade89b77/ecdsa-0.19.1-py2.py3-none-any.whl", hash = "sha256:30638e27cf77b7e15c4c4cc1973720149e1033827cfd00661ca5c8cc0cdb24c3", size = 150607, upload-time = "2025-03-13T11:52:41.757Z" }, +] + +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + +[[package]] +name = "embit" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/88/b054b00ade6d2a41749e15976cdcec4b7ec4656ac1cb917ce3de395528d1/embit-0.8.0.tar.gz", hash = "sha256:8bf4b10073c67400370ce523fb16f035fe759f6fdd987c579bdcc268d75ed770", size = 763120, upload-time = "2024-05-30T10:56:48.944Z" } + +[[package]] +name = "environs" +version = "14.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "marshmallow" }, + { name = "python-dotenv" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/eb/805549ab44db6a9a8206973e8283b49734b903f85d3fed549db78b0817fc/environs-14.2.0.tar.gz", hash = "sha256:2b6c78a77dfefb57ca30d43a232270ecc82adabf67ab318e018084b9a3529e9b", size = 32317, upload-time = "2025-05-22T19:25:01.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/75/e309b90c6f95a6e01aa86425ff567d3c634eea33bde915f3ceb910092461/environs-14.2.0-py3-none-any.whl", hash = "sha256:22669a58d53c5b86a25d0231c4a41a6ebeb82d3942b8fbd9cf645890c92a1843", size = 15733, upload-time = "2025-05-22T19:24:59.666Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" }, +] + +[[package]] +name = "fastapi" +version = "0.116.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/d7/6c8b3bfe33eeffa208183ec037fee0cce9f7f024089ab1c5d12ef04bd27c/fastapi-0.116.1.tar.gz", hash = "sha256:ed52cbf946abfd70c5a0dccb24673f0670deeb517a88b3544d03c2a6bf283143", size = 296485, upload-time = "2025-07-11T16:22:32.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/47/d63c60f59a59467fda0f93f46335c9d18526d7071f025cb5b89d5353ea42/fastapi-0.116.1-py3-none-any.whl", hash = "sha256:c46ac7c312df840f0c9e220f7964bada936781bc4e2e6eb71f1c4d7553786565", size = 95631, upload-time = "2025-07-11T16:22:30.485Z" }, +] + +[[package]] +name = "fastapi-sso" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastapi" }, + { name = "httpx" }, + { name = "oauthlib" }, + { name = "pydantic", extra = ["email"] }, + { name = "pyjwt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/57/cc971c018af5d09eb5f8d1cd12abdd99ab4c59ea5c0b0b1b96349ffe117d/fastapi_sso-0.18.0.tar.gz", hash = "sha256:d8df5a686af7a6a7be248817544b405cf77f7e9ffcd5d0d7d2a196fd071964bc", size = 16811, upload-time = "2025-03-20T17:09:09.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/03/70ca13994f5569d343a9f99dba2930c8ae3471171f161b8887d44b6c526f/fastapi_sso-0.18.0-py3-none-any.whl", hash = "sha256:727754ad770b70690f1471f7b0a9e17c6dfd8ebd6e477616d3bde1eaf62e53dc", size = 26103, upload-time = "2025-03-20T17:09:08.656Z" }, +] + +[[package]] +name = "filelock" +version = "3.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" }, +] + +[[package]] +name = "filetype" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/29/745f7d30d47fe0f251d3ad3dc2978a23141917661998763bebb6da007eb1/filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb", size = 998020, upload-time = "2022-11-02T17:34:04.141Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25", size = 19970, upload-time = "2022-11-02T17:34:01.425Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, + { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, + { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, + { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, + { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, + { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, + { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, + { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, + { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "greenlet" +version = "3.2.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/b8/704d753a5a45507a7aab61f18db9509302ed3d0a27ac7e0359ec2905b1a6/greenlet-3.2.4.tar.gz", hash = "sha256:0dca0d95ff849f9a364385f36ab49f50065d76964944638be9691e1832e9f86d", size = 188260, upload-time = "2025-08-07T13:24:33.51Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/ed/6bfa4109fcb23a58819600392564fea69cdc6551ffd5e69ccf1d52a40cbc/greenlet-3.2.4-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8c68325b0d0acf8d91dde4e6f930967dd52a5302cd4062932a6b2e7c2969f47c", size = 271061, upload-time = "2025-08-07T13:17:15.373Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fc/102ec1a2fc015b3a7652abab7acf3541d58c04d3d17a8d3d6a44adae1eb1/greenlet-3.2.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:94385f101946790ae13da500603491f04a76b6e4c059dab271b3ce2e283b2590", size = 629475, upload-time = "2025-08-07T13:42:54.009Z" }, + { url = "https://files.pythonhosted.org/packages/c5/26/80383131d55a4ac0fb08d71660fd77e7660b9db6bdb4e8884f46d9f2cc04/greenlet-3.2.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f10fd42b5ee276335863712fa3da6608e93f70629c631bf77145021600abc23c", size = 640802, upload-time = "2025-08-07T13:45:25.52Z" }, + { url = "https://files.pythonhosted.org/packages/9f/7c/e7833dbcd8f376f3326bd728c845d31dcde4c84268d3921afcae77d90d08/greenlet-3.2.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c8c9e331e58180d0d83c5b7999255721b725913ff6bc6cf39fa2a45841a4fd4b", size = 636703, upload-time = "2025-08-07T13:53:12.622Z" }, + { url = "https://files.pythonhosted.org/packages/e9/49/547b93b7c0428ede7b3f309bc965986874759f7d89e4e04aeddbc9699acb/greenlet-3.2.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58b97143c9cc7b86fc458f215bd0932f1757ce649e05b640fea2e79b54cedb31", size = 635417, upload-time = "2025-08-07T13:18:25.189Z" }, + { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d", size = 584358, upload-time = "2025-08-07T13:18:23.708Z" }, + { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5", size = 1113550, upload-time = "2025-08-07T13:42:37.467Z" }, + { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f", size = 1137126, upload-time = "2025-08-07T13:18:20.239Z" }, + { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c", size = 298654, upload-time = "2025-08-07T13:50:00.469Z" }, + { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2", size = 272305, upload-time = "2025-08-07T13:15:41.288Z" }, + { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246", size = 632472, upload-time = "2025-08-07T13:42:55.044Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/95d48d7e3d433e6dae5b1682e4292242a53f22df82e6d3dda81b1701a960/greenlet-3.2.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:94abf90142c2a18151632371140b3dba4dee031633fe614cb592dbb6c9e17bc3", size = 644646, upload-time = "2025-08-07T13:45:26.523Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5e/405965351aef8c76b8ef7ad370e5da58d57ef6068df197548b015464001a/greenlet-3.2.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:4d1378601b85e2e5171b99be8d2dc85f594c79967599328f95c1dc1a40f1c633", size = 640519, upload-time = "2025-08-07T13:53:13.928Z" }, + { url = "https://files.pythonhosted.org/packages/25/5d/382753b52006ce0218297ec1b628e048c4e64b155379331f25a7316eb749/greenlet-3.2.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0db5594dce18db94f7d1650d7489909b57afde4c580806b8d9203b6e79cdc079", size = 639707, upload-time = "2025-08-07T13:18:27.146Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8", size = 587684, upload-time = "2025-08-07T13:18:25.164Z" }, + { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52", size = 1116647, upload-time = "2025-08-07T13:42:38.655Z" }, + { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa", size = 1142073, upload-time = "2025-08-07T13:18:21.737Z" }, + { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9", size = 299100, upload-time = "2025-08-07T13:44:12.287Z" }, + { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd", size = 274079, upload-time = "2025-08-07T13:15:45.033Z" }, + { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb", size = 640997, upload-time = "2025-08-07T13:42:56.234Z" }, + { url = "https://files.pythonhosted.org/packages/3b/16/035dcfcc48715ccd345f3a93183267167cdd162ad123cd93067d86f27ce4/greenlet-3.2.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f28588772bb5fb869a8eb331374ec06f24a83a9c25bfa1f38b6993afe9c1e968", size = 655185, upload-time = "2025-08-07T13:45:27.624Z" }, + { url = "https://files.pythonhosted.org/packages/31/da/0386695eef69ffae1ad726881571dfe28b41970173947e7c558d9998de0f/greenlet-3.2.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5c9320971821a7cb77cfab8d956fa8e39cd07ca44b6070db358ceb7f8797c8c9", size = 649926, upload-time = "2025-08-07T13:53:15.251Z" }, + { url = "https://files.pythonhosted.org/packages/68/88/69bf19fd4dc19981928ceacbc5fd4bb6bc2215d53199e367832e98d1d8fe/greenlet-3.2.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c60a6d84229b271d44b70fb6e5fa23781abb5d742af7b808ae3f6efd7c9c60f6", size = 651839, upload-time = "2025-08-07T13:18:30.281Z" }, + { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0", size = 607586, upload-time = "2025-08-07T13:18:28.544Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0", size = 1123281, upload-time = "2025-08-07T13:42:39.858Z" }, + { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f", size = 1151142, upload-time = "2025-08-07T13:18:22.981Z" }, + { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02", size = 299899, upload-time = "2025-08-07T13:38:53.448Z" }, +] + +[[package]] +name = "grpcio" +version = "1.69.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/87/06a145284cbe86c91ca517fe6b57be5efbb733c0d6374b407f0992054d18/grpcio-1.69.0.tar.gz", hash = "sha256:936fa44241b5379c5afc344e1260d467bee495747eaf478de825bab2791da6f5", size = 12738244, upload-time = "2025-01-05T05:53:20.27Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/6e/2f8ee5fb65aef962d0bd7e46b815e7b52820687e29c138eaee207a688abc/grpcio-1.69.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:2060ca95a8db295ae828d0fc1c7f38fb26ccd5edf9aa51a0f44251f5da332e97", size = 5190753, upload-time = "2025-01-05T05:45:05.892Z" }, + { url = "https://files.pythonhosted.org/packages/89/07/028dcda44d40f9488f0a0de79c5ffc80e2c1bc5ed89da9483932e3ea67cf/grpcio-1.69.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2e52e107261fd8fa8fa457fe44bfadb904ae869d87c1280bf60f93ecd3e79278", size = 11096752, upload-time = "2025-01-05T05:45:11.517Z" }, + { url = "https://files.pythonhosted.org/packages/99/a0/c727041b1410605ba38b585b6b52c1a289d7fcd70a41bccbc2c58fc643b2/grpcio-1.69.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:316463c0832d5fcdb5e35ff2826d9aa3f26758d29cdfb59a368c1d6c39615a11", size = 5705442, upload-time = "2025-01-05T05:45:18.828Z" }, + { url = "https://files.pythonhosted.org/packages/7a/2f/1c53f5d127ff882443b19c757d087da1908f41c58c4b098e8eaf6b2bb70a/grpcio-1.69.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26c9a9c4ac917efab4704b18eed9082ed3b6ad19595f047e8173b5182fec0d5e", size = 6333796, upload-time = "2025-01-05T05:45:23.431Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f6/2017da2a1b64e896af710253e5bfbb4188605cdc18bce3930dae5cdbf502/grpcio-1.69.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90b3646ced2eae3a0599658eeccc5ba7f303bf51b82514c50715bdd2b109e5ec", size = 5954245, upload-time = "2025-01-05T05:45:27.374Z" }, + { url = "https://files.pythonhosted.org/packages/c1/65/1395bec928e99ba600464fb01b541e7e4cdd462e6db25259d755ef9f8d02/grpcio-1.69.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3b75aea7c6cb91b341c85e7c1d9db1e09e1dd630b0717f836be94971e015031e", size = 6664854, upload-time = "2025-01-05T05:45:32.031Z" }, + { url = "https://files.pythonhosted.org/packages/40/57/8b3389cfeb92056c8b44288c9c4ed1d331bcad0215c4eea9ae4629e156d9/grpcio-1.69.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5cfd14175f9db33d4b74d63de87c64bb0ee29ce475ce3c00c01ad2a3dc2a9e51", size = 6226854, upload-time = "2025-01-05T05:45:36.915Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/1f2bbeb7c15544dffc98b3f65c093e746019995e6f1e21dc3655eec3dc23/grpcio-1.69.0-cp310-cp310-win32.whl", hash = "sha256:9031069d36cb949205293cf0e243abd5e64d6c93e01b078c37921493a41b72dc", size = 3662734, upload-time = "2025-01-05T05:45:40.798Z" }, + { url = "https://files.pythonhosted.org/packages/ef/ba/bf1a6d9f5c17d2da849793d72039776c56c98c889c9527f6721b6ee57e6e/grpcio-1.69.0-cp310-cp310-win_amd64.whl", hash = "sha256:cc89b6c29f3dccbe12d7a3b3f1b3999db4882ae076c1c1f6df231d55dbd767a5", size = 4410306, upload-time = "2025-01-05T05:45:45.299Z" }, + { url = "https://files.pythonhosted.org/packages/8d/cd/ca256aeef64047881586331347cd5a68a4574ba1a236e293cd8eba34e355/grpcio-1.69.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:8de1b192c29b8ce45ee26a700044717bcbbd21c697fa1124d440548964328561", size = 5198734, upload-time = "2025-01-05T05:45:49.29Z" }, + { url = "https://files.pythonhosted.org/packages/37/3f/10c1e5e0150bf59aa08ea6aebf38f87622f95f7f33f98954b43d1b2a3200/grpcio-1.69.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:7e76accf38808f5c5c752b0ab3fd919eb14ff8fafb8db520ad1cc12afff74de6", size = 11135285, upload-time = "2025-01-05T05:45:53.724Z" }, + { url = "https://files.pythonhosted.org/packages/08/61/61cd116a572203a740684fcba3fef37a3524f1cf032b6568e1e639e59db0/grpcio-1.69.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:d5658c3c2660417d82db51e168b277e0ff036d0b0f859fa7576c0ffd2aec1442", size = 5699468, upload-time = "2025-01-05T05:45:58.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/f1/a841662e8e2465ba171c973b77d18fa7438ced535519b3c53617b7e6e25c/grpcio-1.69.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5494d0e52bf77a2f7eb17c6da662886ca0a731e56c1c85b93505bece8dc6cf4c", size = 6332337, upload-time = "2025-01-05T05:46:05.323Z" }, + { url = "https://files.pythonhosted.org/packages/62/b1/c30e932e02c2e0bfdb8df46fe3b0c47f518fb04158ebdc0eb96cc97d642f/grpcio-1.69.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ed866f9edb574fd9be71bf64c954ce1b88fc93b2a4cbf94af221e9426eb14d6", size = 5949844, upload-time = "2025-01-05T05:46:09.727Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cb/55327d43b6286100ffae7d1791be6178d13c917382f3e9f43f82e8b393cf/grpcio-1.69.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c5ba38aeac7a2fe353615c6b4213d1fbb3a3c34f86b4aaa8be08baaaee8cc56d", size = 6661828, upload-time = "2025-01-05T05:46:14.937Z" }, + { url = "https://files.pythonhosted.org/packages/6f/e4/120d72ae982d51cb9cabcd9672f8a1c6d62011b493a4d049d2abdf564db0/grpcio-1.69.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f79e05f5bbf551c4057c227d1b041ace0e78462ac8128e2ad39ec58a382536d2", size = 6226026, upload-time = "2025-01-05T05:46:17.465Z" }, + { url = "https://files.pythonhosted.org/packages/96/e8/2cc15f11db506d7b1778f0587fa7bdd781602b05b3c4d75b7ca13de33d62/grpcio-1.69.0-cp311-cp311-win32.whl", hash = "sha256:bf1f8be0da3fcdb2c1e9f374f3c2d043d606d69f425cd685110dd6d0d2d61258", size = 3662653, upload-time = "2025-01-05T05:46:19.797Z" }, + { url = "https://files.pythonhosted.org/packages/42/78/3c5216829a48237fcb71a077f891328a435e980d9757a9ebc49114d88768/grpcio-1.69.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb9302afc3a0e4ba0b225cd651ef8e478bf0070cf11a529175caecd5ea2474e7", size = 4412824, upload-time = "2025-01-05T05:46:22.421Z" }, + { url = "https://files.pythonhosted.org/packages/61/1d/8f28f147d7f3f5d6b6082f14e1e0f40d58e50bc2bd30d2377c730c57a286/grpcio-1.69.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:fc18a4de8c33491ad6f70022af5c460b39611e39578a4d84de0fe92f12d5d47b", size = 5161414, upload-time = "2025-01-05T05:46:27.03Z" }, + { url = "https://files.pythonhosted.org/packages/35/4b/9ab8ea65e515e1844feced1ef9e7a5d8359c48d986c93f3d2a2006fbdb63/grpcio-1.69.0-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:0f0270bd9ffbff6961fe1da487bdcd594407ad390cc7960e738725d4807b18c4", size = 11108909, upload-time = "2025-01-05T05:46:31.986Z" }, + { url = "https://files.pythonhosted.org/packages/99/68/1856fde2b3c3162bdfb9845978608deef3606e6907fdc2c87443fce6ecd0/grpcio-1.69.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:dc48f99cc05e0698e689b51a05933253c69a8c8559a47f605cff83801b03af0e", size = 5658302, upload-time = "2025-01-05T05:46:37.05Z" }, + { url = "https://files.pythonhosted.org/packages/3e/21/3fa78d38dc5080d0d677103fad3a8cd55091635cc2069a7c06c7a54e6c4d/grpcio-1.69.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e925954b18d41aeb5ae250262116d0970893b38232689c4240024e4333ac084", size = 6306201, upload-time = "2025-01-05T05:46:41.138Z" }, + { url = "https://files.pythonhosted.org/packages/f3/cb/5c47b82fd1baf43dba973ae399095d51aaf0085ab0439838b4cbb1e87e3c/grpcio-1.69.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d222569273720366f68a99cb62e6194681eb763ee1d3b1005840678d4884f9", size = 5919649, upload-time = "2025-01-05T05:46:45.366Z" }, + { url = "https://files.pythonhosted.org/packages/c6/67/59d1a56a0f9508a29ea03e1ce800bdfacc1f32b4f6b15274b2e057bf8758/grpcio-1.69.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b62b0f41e6e01a3e5082000b612064c87c93a49b05f7602fe1b7aa9fd5171a1d", size = 6648974, upload-time = "2025-01-05T05:46:48.208Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fe/ca70c14d98c6400095f19a0f4df8273d09c2106189751b564b26019f1dbe/grpcio-1.69.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:db6f9fd2578dbe37db4b2994c94a1d9c93552ed77dca80e1657bb8a05b898b55", size = 6215144, upload-time = "2025-01-05T05:46:50.891Z" }, + { url = "https://files.pythonhosted.org/packages/b3/94/b2b0a9fd487fc8262e20e6dd0ec90d9fa462c82a43b4855285620f6e9d01/grpcio-1.69.0-cp312-cp312-win32.whl", hash = "sha256:b192b81076073ed46f4b4dd612b8897d9a1e39d4eabd822e5da7b38497ed77e1", size = 3644552, upload-time = "2025-01-05T05:46:55.811Z" }, + { url = "https://files.pythonhosted.org/packages/93/99/81aec9f85412e3255a591ae2ccb799238e074be774e5f741abae08a23418/grpcio-1.69.0-cp312-cp312-win_amd64.whl", hash = "sha256:1227ff7836f7b3a4ab04e5754f1d001fa52a730685d3dc894ed8bc262cc96c01", size = 4399532, upload-time = "2025-01-05T05:46:58.348Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "http-ece" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/af/249d1576653b69c20b9ac30e284b63bd94af6a175d72d87813235caf2482/http_ece-1.2.1.tar.gz", hash = "sha256:8c6ab23116bbf6affda894acfd5f2ca0fb8facbcbb72121c11c75c33e7ce8cff", size = 8830, upload-time = "2024-08-08T00:10:47.301Z" } + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/3da5bdf4408b8b2800061c339f240c1802f2e82d55e50bd39c5a881f47f0/httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5", size = 126413, upload-time = "2024-02-21T13:07:52.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/7b/ddacf6dcebb42466abd03f368782142baa82e08fc0c1f8eaa05b4bae87d5/httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5", size = 75590, upload-time = "2024-02-21T13:07:50.455Z" }, +] + +[[package]] +name = "identify" +version = "2.6.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311, upload-time = "2025-10-02T17:43:40.631Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183, upload-time = "2025-10-02T17:43:39.137Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jsonpath-ng" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ply" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload-time = "2024-10-11T15:41:42.404Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload-time = "2024-11-20T17:58:30.418Z" }, +] + +[[package]] +name = "limits" +version = "5.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecated" }, + { name = "packaging" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/e5/c968d43a65128cd54fb685f257aafb90cd5e4e1c67d084a58f0e4cbed557/limits-5.6.0.tar.gz", hash = "sha256:807fac75755e73912e894fdd61e2838de574c5721876a19f7ab454ae1fffb4b5", size = 182984, upload-time = "2025-09-29T17:15:22.689Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/96/4fcd44aed47b8fcc457653b12915fcad192cd646510ef3f29fd216f4b0ab/limits-5.6.0-py3-none-any.whl", hash = "sha256:b585c2104274528536a5b68864ec3835602b3c4a802cd6aa0b07419798394021", size = 60604, upload-time = "2025-09-29T17:15:18.419Z" }, +] + +[[package]] +name = "lnbits" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiosqlite" }, + { name = "asyncpg" }, + { name = "bcrypt" }, + { name = "bech32" }, + { name = "bolt11" }, + { name = "click" }, + { name = "ecdsa" }, + { name = "embit" }, + { name = "environs" }, + { name = "fastapi" }, + { name = "fastapi-sso" }, + { name = "filetype" }, + { name = "grpcio" }, + { name = "httpx" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "jsonpath-ng" }, + { name = "lnurl" }, + { name = "loguru" }, + { name = "nostr-sdk" }, + { name = "packaging" }, + { name = "protobuf" }, + { name = "pycryptodomex" }, + { name = "pydantic" }, + { name = "pyjwt" }, + { name = "pyln-client" }, + { name = "pynostr" }, + { name = "pyqrcode" }, + { name = "python-crontab" }, + { name = "python-multipart" }, + { name = "pywebpush" }, + { name = "secp256k1" }, + { name = "shortuuid" }, + { name = "slowapi" }, + { name = "sqlalchemy" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "uvicorn" }, + { name = "uvloop" }, + { name = "websocket-client" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/b5/b4ff19581b09086a393991af92e15fe8487fac6950385ad68245ec3a2e79/lnbits-1.3.1.tar.gz", hash = "sha256:3015a3c28d6384cd94a69beed568b21158655f9274bf2081d646f94aeed02c0a", size = 3717923, upload-time = "2025-10-17T11:56:37.769Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/3e/821975e6d8ed8df7400aebb1209f201ee26d3e8b1e7657597d5fe516ebf5/lnbits-1.3.1-py3-none-any.whl", hash = "sha256:4d477e0963ff86adc237ffd2a15642213277772c0c1d51944cd2943f917bb53f", size = 3371310, upload-time = "2025-10-17T11:56:36.022Z" }, +] + +[[package]] +name = "lnurl" +version = "0.8.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bech32" }, + { name = "bip32" }, + { name = "bolt11" }, + { name = "ecdsa" }, + { name = "httpx" }, + { name = "pycryptodomex" }, + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/dc/29cce6bb8688622c7f5f6db4355c54b5c87bb05be58e49374fd2c6f4b0f2/lnurl-0.8.3.tar.gz", hash = "sha256:8ca73af84fb9ee36a184d731d165f289ba7bc6260d4dadb2b6cf24f381c3afba", size = 17171, upload-time = "2025-09-08T13:30:56.636Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/99/e400734afb7469a0cfa661259de2bb66417d6c3f14361444a010e9d186ee/lnurl-0.8.3-py3-none-any.whl", hash = "sha256:670cdeaef2c55de986dad89126ab58275d5199ba6554a93d9965d1e162080c2a", size = 17459, upload-time = "2025-09-08T13:30:55.691Z" }, +] + +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, +] + +[[package]] +name = "marshmallow" +version = "4.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-datetime-fromisoformat", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/ff/8f092fe402ef12aa71b7f4ceba0c557ce4d5876a9cf421e01a67b7210560/marshmallow-4.0.1.tar.gz", hash = "sha256:e1d860bd262737cb2d34e1541b84cb52c32c72c9474e3fe6f30f137ef8b0d97f", size = 220453, upload-time = "2025-08-28T15:01:37.044Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/18/297efc62b3539b9cd379fc49be3740a02e4c8a43e486f50322cfe0b9568a/marshmallow-4.0.1-py3-none-any.whl", hash = "sha256:72f14ef346f81269dbddee891bac547dda1501e9e08b6a809756ea3dbb7936a1", size = 48414, upload-time = "2025-08-28T15:01:35.221Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/1e/5492c365f222f907de1039b91f922b93fa4f764c713ee858d235495d8f50/multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5", size = 101834, upload-time = "2025-10-06T14:52:30.657Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/63/7bdd4adc330abcca54c85728db2327130e49e52e8c3ce685cec44e0f2e9f/multidict-6.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349", size = 77153, upload-time = "2025-10-06T14:48:26.409Z" }, + { url = "https://files.pythonhosted.org/packages/3f/bb/b6c35ff175ed1a3142222b78455ee31be71a8396ed3ab5280fbe3ebe4e85/multidict-6.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e", size = 44993, upload-time = "2025-10-06T14:48:28.4Z" }, + { url = "https://files.pythonhosted.org/packages/e0/1f/064c77877c5fa6df6d346e68075c0f6998547afe952d6471b4c5f6a7345d/multidict-6.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3", size = 44607, upload-time = "2025-10-06T14:48:29.581Z" }, + { url = "https://files.pythonhosted.org/packages/04/7a/bf6aa92065dd47f287690000b3d7d332edfccb2277634cadf6a810463c6a/multidict-6.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046", size = 241847, upload-time = "2025-10-06T14:48:32.107Z" }, + { url = "https://files.pythonhosted.org/packages/94/39/297a8de920f76eda343e4ce05f3b489f0ab3f9504f2576dfb37b7c08ca08/multidict-6.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32", size = 242616, upload-time = "2025-10-06T14:48:34.054Z" }, + { url = "https://files.pythonhosted.org/packages/39/3a/d0eee2898cfd9d654aea6cb8c4addc2f9756e9a7e09391cfe55541f917f7/multidict-6.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73", size = 222333, upload-time = "2025-10-06T14:48:35.9Z" }, + { url = "https://files.pythonhosted.org/packages/05/48/3b328851193c7a4240815b71eea165b49248867bbb6153a0aee227a0bb47/multidict-6.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc", size = 253239, upload-time = "2025-10-06T14:48:37.302Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ca/0706a98c8d126a89245413225ca4a3fefc8435014de309cf8b30acb68841/multidict-6.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62", size = 251618, upload-time = "2025-10-06T14:48:38.963Z" }, + { url = "https://files.pythonhosted.org/packages/5e/4f/9c7992f245554d8b173f6f0a048ad24b3e645d883f096857ec2c0822b8bd/multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84", size = 241655, upload-time = "2025-10-06T14:48:40.312Z" }, + { url = "https://files.pythonhosted.org/packages/31/79/26a85991ae67efd1c0b1fc2e0c275b8a6aceeb155a68861f63f87a798f16/multidict-6.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0", size = 239245, upload-time = "2025-10-06T14:48:41.848Z" }, + { url = "https://files.pythonhosted.org/packages/14/1e/75fa96394478930b79d0302eaf9a6c69f34005a1a5251ac8b9c336486ec9/multidict-6.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e", size = 233523, upload-time = "2025-10-06T14:48:43.749Z" }, + { url = "https://files.pythonhosted.org/packages/b2/5e/085544cb9f9c4ad2b5d97467c15f856df8d9bac410cffd5c43991a5d878b/multidict-6.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4", size = 243129, upload-time = "2025-10-06T14:48:45.225Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c3/e9d9e2f20c9474e7a8fcef28f863c5cbd29bb5adce6b70cebe8bdad0039d/multidict-6.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648", size = 248999, upload-time = "2025-10-06T14:48:46.703Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3f/df171b6efa3239ae33b97b887e42671cd1d94d460614bfb2c30ffdab3b95/multidict-6.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111", size = 243711, upload-time = "2025-10-06T14:48:48.146Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2f/9b5564888c4e14b9af64c54acf149263721a283aaf4aa0ae89b091d5d8c1/multidict-6.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36", size = 237504, upload-time = "2025-10-06T14:48:49.447Z" }, + { url = "https://files.pythonhosted.org/packages/6c/3a/0bd6ca0f7d96d790542d591c8c3354c1e1b6bfd2024d4d92dc3d87485ec7/multidict-6.7.0-cp310-cp310-win32.whl", hash = "sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85", size = 41422, upload-time = "2025-10-06T14:48:50.789Z" }, + { url = "https://files.pythonhosted.org/packages/00/35/f6a637ea2c75f0d3b7c7d41b1189189acff0d9deeb8b8f35536bb30f5e33/multidict-6.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7", size = 46050, upload-time = "2025-10-06T14:48:51.938Z" }, + { url = "https://files.pythonhosted.org/packages/e7/b8/f7bf8329b39893d02d9d95cf610c75885d12fc0f402b1c894e1c8e01c916/multidict-6.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0", size = 43153, upload-time = "2025-10-06T14:48:53.146Z" }, + { url = "https://files.pythonhosted.org/packages/34/9e/5c727587644d67b2ed479041e4b1c58e30afc011e3d45d25bbe35781217c/multidict-6.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc", size = 76604, upload-time = "2025-10-06T14:48:54.277Z" }, + { url = "https://files.pythonhosted.org/packages/17/e4/67b5c27bd17c085a5ea8f1ec05b8a3e5cba0ca734bfcad5560fb129e70ca/multidict-6.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721", size = 44715, upload-time = "2025-10-06T14:48:55.445Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6", size = 44332, upload-time = "2025-10-06T14:48:56.706Z" }, + { url = "https://files.pythonhosted.org/packages/31/61/0c2d50241ada71ff61a79518db85ada85fdabfcf395d5968dae1cbda04e5/multidict-6.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c", size = 245212, upload-time = "2025-10-06T14:48:58.042Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e0/919666a4e4b57fff1b57f279be1c9316e6cdc5de8a8b525d76f6598fefc7/multidict-6.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7", size = 246671, upload-time = "2025-10-06T14:49:00.004Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cc/d027d9c5a520f3321b65adea289b965e7bcbd2c34402663f482648c716ce/multidict-6.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7", size = 225491, upload-time = "2025-10-06T14:49:01.393Z" }, + { url = "https://files.pythonhosted.org/packages/75/c4/bbd633980ce6155a28ff04e6a6492dd3335858394d7bb752d8b108708558/multidict-6.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9", size = 257322, upload-time = "2025-10-06T14:49:02.745Z" }, + { url = "https://files.pythonhosted.org/packages/4c/6d/d622322d344f1f053eae47e033b0b3f965af01212de21b10bcf91be991fb/multidict-6.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8", size = 254694, upload-time = "2025-10-06T14:49:04.15Z" }, + { url = "https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd", size = 246715, upload-time = "2025-10-06T14:49:05.967Z" }, + { url = "https://files.pythonhosted.org/packages/78/59/950818e04f91b9c2b95aab3d923d9eabd01689d0dcd889563988e9ea0fd8/multidict-6.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb", size = 243189, upload-time = "2025-10-06T14:49:07.37Z" }, + { url = "https://files.pythonhosted.org/packages/7a/3d/77c79e1934cad2ee74991840f8a0110966d9599b3af95964c0cd79bb905b/multidict-6.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6", size = 237845, upload-time = "2025-10-06T14:49:08.759Z" }, + { url = "https://files.pythonhosted.org/packages/63/1b/834ce32a0a97a3b70f86437f685f880136677ac00d8bce0027e9fd9c2db7/multidict-6.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2", size = 246374, upload-time = "2025-10-06T14:49:10.574Z" }, + { url = "https://files.pythonhosted.org/packages/23/ef/43d1c3ba205b5dec93dc97f3fba179dfa47910fc73aaaea4f7ceb41cec2a/multidict-6.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff", size = 253345, upload-time = "2025-10-06T14:49:12.331Z" }, + { url = "https://files.pythonhosted.org/packages/6b/03/eaf95bcc2d19ead522001f6a650ef32811aa9e3624ff0ad37c445c7a588c/multidict-6.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b", size = 246940, upload-time = "2025-10-06T14:49:13.821Z" }, + { url = "https://files.pythonhosted.org/packages/e8/df/ec8a5fd66ea6cd6f525b1fcbb23511b033c3e9bc42b81384834ffa484a62/multidict-6.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34", size = 242229, upload-time = "2025-10-06T14:49:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a2/59b405d59fd39ec86d1142630e9049243015a5f5291ba49cadf3c090c541/multidict-6.7.0-cp311-cp311-win32.whl", hash = "sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff", size = 41308, upload-time = "2025-10-06T14:49:16.871Z" }, + { url = "https://files.pythonhosted.org/packages/32/0f/13228f26f8b882c34da36efa776c3b7348455ec383bab4a66390e42963ae/multidict-6.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81", size = 46037, upload-time = "2025-10-06T14:49:18.457Z" }, + { url = "https://files.pythonhosted.org/packages/84/1f/68588e31b000535a3207fd3c909ebeec4fb36b52c442107499c18a896a2a/multidict-6.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912", size = 43023, upload-time = "2025-10-06T14:49:19.648Z" }, + { url = "https://files.pythonhosted.org/packages/c2/9e/9f61ac18d9c8b475889f32ccfa91c9f59363480613fc807b6e3023d6f60b/multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184", size = 76877, upload-time = "2025-10-06T14:49:20.884Z" }, + { url = "https://files.pythonhosted.org/packages/38/6f/614f09a04e6184f8824268fce4bc925e9849edfa654ddd59f0b64508c595/multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45", size = 45467, upload-time = "2025-10-06T14:49:22.054Z" }, + { url = "https://files.pythonhosted.org/packages/b3/93/c4f67a436dd026f2e780c433277fff72be79152894d9fc36f44569cab1a6/multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa", size = 43834, upload-time = "2025-10-06T14:49:23.566Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f5/013798161ca665e4a422afbc5e2d9e4070142a9ff8905e482139cd09e4d0/multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7", size = 250545, upload-time = "2025-10-06T14:49:24.882Z" }, + { url = "https://files.pythonhosted.org/packages/71/2f/91dbac13e0ba94669ea5119ba267c9a832f0cb65419aca75549fcf09a3dc/multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e", size = 258305, upload-time = "2025-10-06T14:49:26.778Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b0/754038b26f6e04488b48ac621f779c341338d78503fb45403755af2df477/multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546", size = 242363, upload-time = "2025-10-06T14:49:28.562Z" }, + { url = "https://files.pythonhosted.org/packages/87/15/9da40b9336a7c9fa606c4cf2ed80a649dffeb42b905d4f63a1d7eb17d746/multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4", size = 268375, upload-time = "2025-10-06T14:49:29.96Z" }, + { url = "https://files.pythonhosted.org/packages/82/72/c53fcade0cc94dfaad583105fd92b3a783af2091eddcb41a6d5a52474000/multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1", size = 269346, upload-time = "2025-10-06T14:49:31.404Z" }, + { url = "https://files.pythonhosted.org/packages/0d/e2/9baffdae21a76f77ef8447f1a05a96ec4bc0a24dae08767abc0a2fe680b8/multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d", size = 256107, upload-time = "2025-10-06T14:49:32.974Z" }, + { url = "https://files.pythonhosted.org/packages/3c/06/3f06f611087dc60d65ef775f1fb5aca7c6d61c6db4990e7cda0cef9b1651/multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304", size = 253592, upload-time = "2025-10-06T14:49:34.52Z" }, + { url = "https://files.pythonhosted.org/packages/20/24/54e804ec7945b6023b340c412ce9c3f81e91b3bf5fa5ce65558740141bee/multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12", size = 251024, upload-time = "2025-10-06T14:49:35.956Z" }, + { url = "https://files.pythonhosted.org/packages/14/48/011cba467ea0b17ceb938315d219391d3e421dfd35928e5dbdc3f4ae76ef/multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62", size = 251484, upload-time = "2025-10-06T14:49:37.631Z" }, + { url = "https://files.pythonhosted.org/packages/0d/2f/919258b43bb35b99fa127435cfb2d91798eb3a943396631ef43e3720dcf4/multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0", size = 263579, upload-time = "2025-10-06T14:49:39.502Z" }, + { url = "https://files.pythonhosted.org/packages/31/22/a0e884d86b5242b5a74cf08e876bdf299e413016b66e55511f7a804a366e/multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a", size = 259654, upload-time = "2025-10-06T14:49:41.32Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e5/17e10e1b5c5f5a40f2fcbb45953c9b215f8a4098003915e46a93f5fcaa8f/multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8", size = 251511, upload-time = "2025-10-06T14:49:46.021Z" }, + { url = "https://files.pythonhosted.org/packages/e3/9a/201bb1e17e7af53139597069c375e7b0dcbd47594604f65c2d5359508566/multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4", size = 41895, upload-time = "2025-10-06T14:49:48.718Z" }, + { url = "https://files.pythonhosted.org/packages/46/e2/348cd32faad84eaf1d20cce80e2bb0ef8d312c55bca1f7fa9865e7770aaf/multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b", size = 46073, upload-time = "2025-10-06T14:49:50.28Z" }, + { url = "https://files.pythonhosted.org/packages/25/ec/aad2613c1910dce907480e0c3aa306905830f25df2e54ccc9dea450cb5aa/multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec", size = 43226, upload-time = "2025-10-06T14:49:52.304Z" }, + { url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" }, +] + +[[package]] +name = "mypy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/ea637422dedf0bf36f3ef238eab4e455e2a0dcc3082b5cc067615347ab8e/mypy-1.17.1.tar.gz", hash = "sha256:25e01ec741ab5bb3eec8ba9cdb0f769230368a22c959c4937360efb89b7e9f01", size = 3352570, upload-time = "2025-07-31T07:54:19.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/a9/3d7aa83955617cdf02f94e50aab5c830d205cfa4320cf124ff64acce3a8e/mypy-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3fbe6d5555bf608c47203baa3e72dbc6ec9965b3d7c318aa9a4ca76f465bd972", size = 11003299, upload-time = "2025-07-31T07:54:06.425Z" }, + { url = "https://files.pythonhosted.org/packages/83/e8/72e62ff837dd5caaac2b4a5c07ce769c8e808a00a65e5d8f94ea9c6f20ab/mypy-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80ef5c058b7bce08c83cac668158cb7edea692e458d21098c7d3bce35a5d43e7", size = 10125451, upload-time = "2025-07-31T07:53:52.974Z" }, + { url = "https://files.pythonhosted.org/packages/7d/10/f3f3543f6448db11881776f26a0ed079865926b0c841818ee22de2c6bbab/mypy-1.17.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a580f8a70c69e4a75587bd925d298434057fe2a428faaf927ffe6e4b9a98df", size = 11916211, upload-time = "2025-07-31T07:53:18.879Z" }, + { url = "https://files.pythonhosted.org/packages/06/bf/63e83ed551282d67bb3f7fea2cd5561b08d2bb6eb287c096539feb5ddbc5/mypy-1.17.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd86bb649299f09d987a2eebb4d52d10603224500792e1bee18303bbcc1ce390", size = 12652687, upload-time = "2025-07-31T07:53:30.544Z" }, + { url = "https://files.pythonhosted.org/packages/69/66/68f2eeef11facf597143e85b694a161868b3b006a5fbad50e09ea117ef24/mypy-1.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a76906f26bd8d51ea9504966a9c25419f2e668f012e0bdf3da4ea1526c534d94", size = 12896322, upload-time = "2025-07-31T07:53:50.74Z" }, + { url = "https://files.pythonhosted.org/packages/a3/87/8e3e9c2c8bd0d7e071a89c71be28ad088aaecbadf0454f46a540bda7bca6/mypy-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:e79311f2d904ccb59787477b7bd5d26f3347789c06fcd7656fa500875290264b", size = 9507962, upload-time = "2025-07-31T07:53:08.431Z" }, + { url = "https://files.pythonhosted.org/packages/46/cf/eadc80c4e0a70db1c08921dcc220357ba8ab2faecb4392e3cebeb10edbfa/mypy-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad37544be07c5d7fba814eb370e006df58fed8ad1ef33ed1649cb1889ba6ff58", size = 10921009, upload-time = "2025-07-31T07:53:23.037Z" }, + { url = "https://files.pythonhosted.org/packages/5d/c1/c869d8c067829ad30d9bdae051046561552516cfb3a14f7f0347b7d973ee/mypy-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:064e2ff508e5464b4bd807a7c1625bc5047c5022b85c70f030680e18f37273a5", size = 10047482, upload-time = "2025-07-31T07:53:26.151Z" }, + { url = "https://files.pythonhosted.org/packages/98/b9/803672bab3fe03cee2e14786ca056efda4bb511ea02dadcedde6176d06d0/mypy-1.17.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70401bbabd2fa1aa7c43bb358f54037baf0586f41e83b0ae67dd0534fc64edfd", size = 11832883, upload-time = "2025-07-31T07:53:47.948Z" }, + { url = "https://files.pythonhosted.org/packages/88/fb/fcdac695beca66800918c18697b48833a9a6701de288452b6715a98cfee1/mypy-1.17.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e92bdc656b7757c438660f775f872a669b8ff374edc4d18277d86b63edba6b8b", size = 12566215, upload-time = "2025-07-31T07:54:04.031Z" }, + { url = "https://files.pythonhosted.org/packages/7f/37/a932da3d3dace99ee8eb2043b6ab03b6768c36eb29a02f98f46c18c0da0e/mypy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c1fdf4abb29ed1cb091cf432979e162c208a5ac676ce35010373ff29247bcad5", size = 12751956, upload-time = "2025-07-31T07:53:36.263Z" }, + { url = "https://files.pythonhosted.org/packages/8c/cf/6438a429e0f2f5cab8bc83e53dbebfa666476f40ee322e13cac5e64b79e7/mypy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:ff2933428516ab63f961644bc49bc4cbe42bbffb2cd3b71cc7277c07d16b1a8b", size = 9507307, upload-time = "2025-07-31T07:53:59.734Z" }, + { url = "https://files.pythonhosted.org/packages/17/a2/7034d0d61af8098ec47902108553122baa0f438df8a713be860f7407c9e6/mypy-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:69e83ea6553a3ba79c08c6e15dbd9bfa912ec1e493bf75489ef93beb65209aeb", size = 11086295, upload-time = "2025-07-31T07:53:28.124Z" }, + { url = "https://files.pythonhosted.org/packages/14/1f/19e7e44b594d4b12f6ba8064dbe136505cec813549ca3e5191e40b1d3cc2/mypy-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b16708a66d38abb1e6b5702f5c2c87e133289da36f6a1d15f6a5221085c6403", size = 10112355, upload-time = "2025-07-31T07:53:21.121Z" }, + { url = "https://files.pythonhosted.org/packages/5b/69/baa33927e29e6b4c55d798a9d44db5d394072eef2bdc18c3e2048c9ed1e9/mypy-1.17.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89e972c0035e9e05823907ad5398c5a73b9f47a002b22359b177d40bdaee7056", size = 11875285, upload-time = "2025-07-31T07:53:55.293Z" }, + { url = "https://files.pythonhosted.org/packages/90/13/f3a89c76b0a41e19490b01e7069713a30949d9a6c147289ee1521bcea245/mypy-1.17.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03b6d0ed2b188e35ee6d5c36b5580cffd6da23319991c49ab5556c023ccf1341", size = 12737895, upload-time = "2025-07-31T07:53:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/23/a1/c4ee79ac484241301564072e6476c5a5be2590bc2e7bfd28220033d2ef8f/mypy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c837b896b37cd103570d776bda106eabb8737aa6dd4f248451aecf53030cdbeb", size = 12931025, upload-time = "2025-07-31T07:54:17.125Z" }, + { url = "https://files.pythonhosted.org/packages/89/b8/7409477be7919a0608900e6320b155c72caab4fef46427c5cc75f85edadd/mypy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:665afab0963a4b39dff7c1fa563cc8b11ecff7910206db4b2e64dd1ba25aed19", size = 9584664, upload-time = "2025-07-31T07:54:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/1d/f3/8fcd2af0f5b806f6cf463efaffd3c9548a28f84220493ecd38d127b6b66d/mypy-1.17.1-py3-none-any.whl", hash = "sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9", size = 2283411, upload-time = "2025-07-31T07:53:24.664Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, +] + +[[package]] +name = "nostr-sdk" +version = "0.42.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/4e/d413f3620707daad7649a7e83be7b395a0b4130372fb7dc90850e6eb4988/nostr_sdk-0.42.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:57ac8b7a6f56bb619a3ef58fbfe1bd93e180d5cd73681b45eeaf5ae2dd45d345", size = 3925439, upload-time = "2025-05-26T09:08:53.522Z" }, + { url = "https://files.pythonhosted.org/packages/e5/2b/ae1dadd3390846d067bd6602f484e690232f868dc30f11d138262ec9ca97/nostr_sdk-0.42.1-cp39-abi3-macosx_11_0_x86_64.whl", hash = "sha256:8897a4c3c34aa3cf4d500e570a1697ba253f89223e8548d2b75da2006fc730eb", size = 3988204, upload-time = "2025-05-26T09:09:06.853Z" }, + { url = "https://files.pythonhosted.org/packages/e9/8d/f0f8def4999384df6739dd5dce8166454a6bacf73d374e5984b3f1d25e79/nostr_sdk-0.42.1-cp39-abi3-manylinux_2_17_aarch64.whl", hash = "sha256:166f1c7b1901813ad9a6296641384cbcc7e35c18ccdf3229d88fcd1e0b51d6ee", size = 3673138, upload-time = "2025-05-26T09:08:42.03Z" }, + { url = "https://files.pythonhosted.org/packages/fb/50/2fea941dcfcd311250f181913dd23031ad8422820acefe86914935c09a6e/nostr_sdk-0.42.1-cp39-abi3-manylinux_2_17_armv7l.whl", hash = "sha256:f2b86bc50805be59113c974665bdf4dcaaf76a1f591a9dba41f1d50acb674b3c", size = 3420691, upload-time = "2025-05-26T09:08:49.608Z" }, + { url = "https://files.pythonhosted.org/packages/cd/cf/cdf16f83a5ed1bfe88512fb4a899ec395296c6b63bb19d329d3cb51f20f6/nostr_sdk-0.42.1-cp39-abi3-manylinux_2_17_i686.whl", hash = "sha256:73b0c16494221a0faf8ec369a2609faba3f17ffd0f03620baa0ec83c58c49b71", size = 3706012, upload-time = "2025-05-26T09:08:57.181Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ee/9b1e90670fe32bb4d520c73dfe25035dc989518f43ae9facf7d4e286179e/nostr_sdk-0.42.1-cp39-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:f68663073630c8edee55d9bec689f019ea616ef6482857e7f72ba1dc1b4fa9cc", size = 3817054, upload-time = "2025-05-26T09:09:11.778Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f3/8b62b3bc24c63a5c165669dfb444c877275959fe7983a80a5e0c60e8ff42/nostr_sdk-0.42.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b6659308d7629e23be252455c46d81549fe6bf945915ec4a0cba2c4b61815c07", size = 3670777, upload-time = "2025-05-26T09:09:02.686Z" }, + { url = "https://files.pythonhosted.org/packages/62/14/78851a956ab8dae47c28812a89c93e883aeadf2655596522a72030943541/nostr_sdk-0.42.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:1fa8a8688cf17e838c31caf5c8a357b7c7c2ba3b6ee85e39c05c93e80d999b99", size = 3419180, upload-time = "2025-05-26T09:09:16.714Z" }, + { url = "https://files.pythonhosted.org/packages/b4/06/41bad843700ce7d47c2ef2a17ccd823db9e10504c4d368168f24c91f2d81/nostr_sdk-0.42.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:0a89ae1c7b2c36025024511240aa10540aade2551e8b97d40b4a0b88feaabe8c", size = 3571964, upload-time = "2025-05-26T09:08:45.516Z" }, + { url = "https://files.pythonhosted.org/packages/f6/ea/d62f311a90faae44d4e0c0d6646c5a8dca10124bd5706fa3fa51156d892c/nostr_sdk-0.42.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e3dda5d65591158a0c9794aa79a2f2ea7bbe3cfcba236645fbff8291d94946f1", size = 3822060, upload-time = "2025-05-26T09:08:39.336Z" }, + { url = "https://files.pythonhosted.org/packages/f3/39/935f70ee05a25de220d236774a1258d13b470595954bd5fd1ffcf4f5df2a/nostr_sdk-0.42.1-cp39-abi3-win32.whl", hash = "sha256:d20988c0d6dd16c183607dfdbd243e4f5cc9d8a4faa0c498df546fa8383da902", size = 3254061, upload-time = "2025-05-26T09:09:14.515Z" }, + { url = "https://files.pythonhosted.org/packages/7f/9e/d509f09b98c4d91f339bd68d3a9d6c313161e54554e392d001466206ca67/nostr_sdk-0.42.1-cp39-abi3-win_amd64.whl", hash = "sha256:35978a8e526e66d05a346546391c28d643dfca31117a95c51c940c994c422d7d", size = 3500340, upload-time = "2025-05-26T09:09:00.279Z" }, + { url = "https://files.pythonhosted.org/packages/bc/0f/f704d328499458434b45c54ef88bdfee803366e0c9ef32f3377e2f396921/nostr_sdk-0.42.1-cp39-abi3-win_arm64.whl", hash = "sha256:802c74f903b120b74bf501bf68c81d5ee1dc9f7f57801a53a507044a14b9a840", size = 3303179, upload-time = "2025-05-26T09:09:09.122Z" }, +] + +[[package]] +name = "nostrmarket" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "lnbits" }, +] + +[package.dev-dependencies] +dev = [ + { name = "black" }, + { name = "mypy" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-md" }, + { name = "ruff" }, + { name = "types-cffi" }, +] + +[package.metadata] +requires-dist = [{ name = "lnbits", specifier = ">1" }] + +[package.metadata.requires-dev] +dev = [ + { name = "black" }, + { name = "mypy", specifier = "==1.17.1" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-md" }, + { name = "ruff" }, + { name = "types-cffi" }, +] + +[[package]] +name = "oauthlib" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "ply" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload-time = "2018-02-15T19:01:31.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload-time = "2018-02-15T19:01:27.172Z" }, +] + +[[package]] +name = "pre-commit" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792, upload-time = "2025-08-09T18:56:14.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965, upload-time = "2025-08-09T18:56:13.192Z" }, +] + +[[package]] +name = "propcache" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/0e/934b541323035566a9af292dba85a195f7b78179114f2c6ebb24551118a9/propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db", size = 79534, upload-time = "2025-10-08T19:46:02.083Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6b/db0d03d96726d995dc7171286c6ba9d8d14251f37433890f88368951a44e/propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8", size = 45526, upload-time = "2025-10-08T19:46:03.884Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c3/82728404aea669e1600f304f2609cde9e665c18df5a11cdd57ed73c1dceb/propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925", size = 47263, upload-time = "2025-10-08T19:46:05.405Z" }, + { url = "https://files.pythonhosted.org/packages/df/1b/39313ddad2bf9187a1432654c38249bab4562ef535ef07f5eb6eb04d0b1b/propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21", size = 201012, upload-time = "2025-10-08T19:46:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/5b/01/f1d0b57d136f294a142acf97f4ed58c8e5b974c21e543000968357115011/propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5", size = 209491, upload-time = "2025-10-08T19:46:08.909Z" }, + { url = "https://files.pythonhosted.org/packages/a1/c8/038d909c61c5bb039070b3fb02ad5cccdb1dde0d714792e251cdb17c9c05/propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db", size = 215319, upload-time = "2025-10-08T19:46:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/08/57/8c87e93142b2c1fa2408e45695205a7ba05fb5db458c0bf5c06ba0e09ea6/propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7", size = 196856, upload-time = "2025-10-08T19:46:12.003Z" }, + { url = "https://files.pythonhosted.org/packages/42/df/5615fec76aa561987a534759b3686008a288e73107faa49a8ae5795a9f7a/propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4", size = 193241, upload-time = "2025-10-08T19:46:13.495Z" }, + { url = "https://files.pythonhosted.org/packages/d5/21/62949eb3a7a54afe8327011c90aca7e03547787a88fb8bd9726806482fea/propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60", size = 190552, upload-time = "2025-10-08T19:46:14.938Z" }, + { url = "https://files.pythonhosted.org/packages/30/ee/ab4d727dd70806e5b4de96a798ae7ac6e4d42516f030ee60522474b6b332/propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f", size = 200113, upload-time = "2025-10-08T19:46:16.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0b/38b46208e6711b016aa8966a3ac793eee0d05c7159d8342aa27fc0bc365e/propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900", size = 200778, upload-time = "2025-10-08T19:46:18.023Z" }, + { url = "https://files.pythonhosted.org/packages/cf/81/5abec54355ed344476bee711e9f04815d4b00a311ab0535599204eecc257/propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c", size = 193047, upload-time = "2025-10-08T19:46:19.449Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b6/1f237c04e32063cb034acd5f6ef34ef3a394f75502e72703545631ab1ef6/propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb", size = 38093, upload-time = "2025-10-08T19:46:20.643Z" }, + { url = "https://files.pythonhosted.org/packages/a6/67/354aac4e0603a15f76439caf0427781bcd6797f370377f75a642133bc954/propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37", size = 41638, upload-time = "2025-10-08T19:46:21.935Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e1/74e55b9fd1a4c209ff1a9a824bf6c8b3d1fc5a1ac3eabe23462637466785/propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581", size = 38229, upload-time = "2025-10-08T19:46:23.368Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d4/4e2c9aaf7ac2242b9358f98dccd8f90f2605402f5afeff6c578682c2c491/propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf", size = 80208, upload-time = "2025-10-08T19:46:24.597Z" }, + { url = "https://files.pythonhosted.org/packages/c2/21/d7b68e911f9c8e18e4ae43bdbc1e1e9bbd971f8866eb81608947b6f585ff/propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5", size = 45777, upload-time = "2025-10-08T19:46:25.733Z" }, + { url = "https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e", size = 47647, upload-time = "2025-10-08T19:46:27.304Z" }, + { url = "https://files.pythonhosted.org/packages/58/1a/3c62c127a8466c9c843bccb503d40a273e5cc69838805f322e2826509e0d/propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566", size = 214929, upload-time = "2025-10-08T19:46:28.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/b9/8fa98f850960b367c4b8fe0592e7fc341daa7a9462e925228f10a60cf74f/propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165", size = 221778, upload-time = "2025-10-08T19:46:30.358Z" }, + { url = "https://files.pythonhosted.org/packages/46/a6/0ab4f660eb59649d14b3d3d65c439421cf2f87fe5dd68591cbe3c1e78a89/propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc", size = 228144, upload-time = "2025-10-08T19:46:32.607Z" }, + { url = "https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48", size = 210030, upload-time = "2025-10-08T19:46:33.969Z" }, + { url = "https://files.pythonhosted.org/packages/40/e2/27e6feebb5f6b8408fa29f5efbb765cd54c153ac77314d27e457a3e993b7/propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570", size = 208252, upload-time = "2025-10-08T19:46:35.309Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f8/91c27b22ccda1dbc7967f921c42825564fa5336a01ecd72eb78a9f4f53c2/propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85", size = 202064, upload-time = "2025-10-08T19:46:36.993Z" }, + { url = "https://files.pythonhosted.org/packages/f2/26/7f00bd6bd1adba5aafe5f4a66390f243acab58eab24ff1a08bebb2ef9d40/propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e", size = 212429, upload-time = "2025-10-08T19:46:38.398Z" }, + { url = "https://files.pythonhosted.org/packages/84/89/fd108ba7815c1117ddca79c228f3f8a15fc82a73bca8b142eb5de13b2785/propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757", size = 216727, upload-time = "2025-10-08T19:46:39.732Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/3ec3f7e3173e73f1d600495d8b545b53802cbf35506e5732dd8578db3724/propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f", size = 205097, upload-time = "2025-10-08T19:46:41.025Z" }, + { url = "https://files.pythonhosted.org/packages/61/b0/b2631c19793f869d35f47d5a3a56fb19e9160d3c119f15ac7344fc3ccae7/propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1", size = 38084, upload-time = "2025-10-08T19:46:42.693Z" }, + { url = "https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6", size = 41637, upload-time = "2025-10-08T19:46:43.778Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e9/754f180cccd7f51a39913782c74717c581b9cc8177ad0e949f4d51812383/propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239", size = 38064, upload-time = "2025-10-08T19:46:44.872Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, + { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" }, + { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" }, + { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" }, + { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" }, + { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" }, + { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" }, + { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" }, + { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, +] + +[[package]] +name = "protobuf" +version = "5.29.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/29/d09e70352e4e88c9c7a198d5645d7277811448d76c23b00345670f7c8a38/protobuf-5.29.5.tar.gz", hash = "sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84", size = 425226, upload-time = "2025-05-28T23:51:59.82Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/11/6e40e9fc5bba02988a214c07cf324595789ca7820160bfd1f8be96e48539/protobuf-5.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079", size = 422963, upload-time = "2025-05-28T23:51:41.204Z" }, + { url = "https://files.pythonhosted.org/packages/81/7f/73cefb093e1a2a7c3ffd839e6f9fcafb7a427d300c7f8aef9c64405d8ac6/protobuf-5.29.5-cp310-abi3-win_amd64.whl", hash = "sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc", size = 434818, upload-time = "2025-05-28T23:51:44.297Z" }, + { url = "https://files.pythonhosted.org/packages/dd/73/10e1661c21f139f2c6ad9b23040ff36fee624310dc28fba20d33fdae124c/protobuf-5.29.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e38c5add5a311f2a6eb0340716ef9b039c1dfa428b28f25a7838ac329204a671", size = 418091, upload-time = "2025-05-28T23:51:45.907Z" }, + { url = "https://files.pythonhosted.org/packages/6c/04/98f6f8cf5b07ab1294c13f34b4e69b3722bb609c5b701d6c169828f9f8aa/protobuf-5.29.5-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:fa18533a299d7ab6c55a238bf8629311439995f2e7eca5caaff08663606e9015", size = 319824, upload-time = "2025-05-28T23:51:47.545Z" }, + { url = "https://files.pythonhosted.org/packages/85/e4/07c80521879c2d15f321465ac24c70efe2381378c00bf5e56a0f4fbac8cd/protobuf-5.29.5-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:63848923da3325e1bf7e9003d680ce6e14b07e55d0473253a690c3a8b8fd6e61", size = 319942, upload-time = "2025-05-28T23:51:49.11Z" }, + { url = "https://files.pythonhosted.org/packages/7e/cc/7e77861000a0691aeea8f4566e5d3aa716f2b1dece4a24439437e41d3d25/protobuf-5.29.5-py3-none-any.whl", hash = "sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5", size = 172823, upload-time = "2025-05-28T23:51:58.157Z" }, +] + +[[package]] +name = "py-vapid" +version = "1.9.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/57/5c1c61f27ce01f939443cf3f6c279a295f7ec0327b18a1cbbcfefe0b5456/py_vapid-1.9.2.tar.gz", hash = "sha256:3c8973b6cf8384ad0c9ae64d6270ccc480e0b92c702d8f5ea2cc03e6b51247f9", size = 20300, upload-time = "2024-11-19T21:55:41.859Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/fb/b877a221b09dabcebeb073d5e7f19244f3fa1d5aec87092c359a6049a006/py_vapid-1.9.2-py3-none-any.whl", hash = "sha256:4ccf8a00fc54f1f99f66fb543c96f2c82622508ad814b6e9225f2c26948934d7", size = 21492, upload-time = "2024-11-19T21:55:40.832Z" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + +[[package]] +name = "pycryptodomex" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/85/e24bf90972a30b0fcd16c73009add1d7d7cd9140c2498a68252028899e41/pycryptodomex-3.23.0.tar.gz", hash = "sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da", size = 4922157, upload-time = "2025-05-17T17:23:41.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/9c/1a8f35daa39784ed8adf93a694e7e5dc15c23c741bbda06e1d45f8979e9e/pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6", size = 2499240, upload-time = "2025-05-17T17:22:46.953Z" }, + { url = "https://files.pythonhosted.org/packages/7a/62/f5221a191a97157d240cf6643747558759126c76ee92f29a3f4aee3197a5/pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545", size = 1644042, upload-time = "2025-05-17T17:22:49.098Z" }, + { url = "https://files.pythonhosted.org/packages/8c/fd/5a054543c8988d4ed7b612721d7e78a4b9bf36bc3c5ad45ef45c22d0060e/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587", size = 2186227, upload-time = "2025-05-17T17:22:51.139Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a9/8862616a85cf450d2822dbd4fff1fcaba90877907a6ff5bc2672cafe42f8/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c", size = 2272578, upload-time = "2025-05-17T17:22:53.676Z" }, + { url = "https://files.pythonhosted.org/packages/46/9f/bda9c49a7c1842820de674ab36c79f4fbeeee03f8ff0e4f3546c3889076b/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c", size = 2312166, upload-time = "2025-05-17T17:22:56.585Z" }, + { url = "https://files.pythonhosted.org/packages/03/cc/870b9bf8ca92866ca0186534801cf8d20554ad2a76ca959538041b7a7cf4/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003", size = 2185467, upload-time = "2025-05-17T17:22:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/96/e3/ce9348236d8e669fea5dd82a90e86be48b9c341210f44e25443162aba187/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744", size = 2346104, upload-time = "2025-05-17T17:23:02.112Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e9/e869bcee87beb89040263c416a8a50204f7f7a83ac11897646c9e71e0daf/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd", size = 2271038, upload-time = "2025-05-17T17:23:04.872Z" }, + { url = "https://files.pythonhosted.org/packages/8d/67/09ee8500dd22614af5fbaa51a4aee6e342b5fa8aecf0a6cb9cbf52fa6d45/pycryptodomex-3.23.0-cp37-abi3-win32.whl", hash = "sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c", size = 1771969, upload-time = "2025-05-17T17:23:07.115Z" }, + { url = "https://files.pythonhosted.org/packages/69/96/11f36f71a865dd6df03716d33bd07a67e9d20f6b8d39820470b766af323c/pycryptodomex-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9", size = 1803124, upload-time = "2025-05-17T17:23:09.267Z" }, + { url = "https://files.pythonhosted.org/packages/f9/93/45c1cdcbeb182ccd2e144c693eaa097763b08b38cded279f0053ed53c553/pycryptodomex-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51", size = 1707161, upload-time = "2025-05-17T17:23:11.414Z" }, + { url = "https://files.pythonhosted.org/packages/f3/b8/3e76d948c3c4ac71335bbe75dac53e154b40b0f8f1f022dfa295257a0c96/pycryptodomex-3.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5", size = 1627695, upload-time = "2025-05-17T17:23:17.38Z" }, + { url = "https://files.pythonhosted.org/packages/6a/cf/80f4297a4820dfdfd1c88cf6c4666a200f204b3488103d027b5edd9176ec/pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798", size = 1675772, upload-time = "2025-05-17T17:23:19.202Z" }, + { url = "https://files.pythonhosted.org/packages/d1/42/1e969ee0ad19fe3134b0e1b856c39bd0b70d47a4d0e81c2a8b05727394c9/pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f", size = 1668083, upload-time = "2025-05-17T17:23:21.867Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c3/1de4f7631fea8a992a44ba632aa40e0008764c0fb9bf2854b0acf78c2cf2/pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea", size = 1706056, upload-time = "2025-05-17T17:23:24.031Z" }, + { url = "https://files.pythonhosted.org/packages/f2/5f/af7da8e6f1e42b52f44a24d08b8e4c726207434e2593732d39e7af5e7256/pycryptodomex-3.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe", size = 1806478, upload-time = "2025-05-17T17:23:26.066Z" }, +] + +[[package]] +name = "pydantic" +version = "1.10.22" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/57/5996c63f0deec09e9e901a2b838247c97c6844999562eac4e435bcb83938/pydantic-1.10.22.tar.gz", hash = "sha256:ee1006cebd43a8e7158fb7190bb8f4e2da9649719bff65d0c287282ec38dec6d", size = 356771, upload-time = "2025-04-24T13:38:43.605Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/92/91eb5c75a1460292e1f2f3e577122574ebb942fbac19ad2369ff00b9eb24/pydantic-1.10.22-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:57889565ccc1e5b7b73343329bbe6198ebc472e3ee874af2fa1865cfe7048228", size = 2852481, upload-time = "2025-04-24T13:36:55.045Z" }, + { url = "https://files.pythonhosted.org/packages/08/f3/dd54b49fc5caaed06f5a0d0a5ec35a81cf722cd6b42455f408dad1ef3f7d/pydantic-1.10.22-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90729e22426de79bc6a3526b4c45ec4400caf0d4f10d7181ba7f12c01bb3897d", size = 2585586, upload-time = "2025-04-24T13:36:58.453Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9b/48d10180cc614ffb66da486e99bc1f8b639fb44edf322864f2fb161e2351/pydantic-1.10.22-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8684d347f351554ec94fdcb507983d3116dc4577fb8799fed63c65869a2d10", size = 3336974, upload-time = "2025-04-24T13:37:00.652Z" }, + { url = "https://files.pythonhosted.org/packages/ff/80/b55ad0029ae8e7b8b5c81ad7c4e800774a52107d26f70c6696857dc733d5/pydantic-1.10.22-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8dad498ceff2d9ef1d2e2bc6608f5b59b8e1ba2031759b22dfb8c16608e1802", size = 3362338, upload-time = "2025-04-24T13:37:02.42Z" }, + { url = "https://files.pythonhosted.org/packages/65/e0/8a5cd2cd29a5632581ba466f5792194b2a568aa052ce9da9ba98b634debf/pydantic-1.10.22-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fac529cc654d4575cf8de191cce354b12ba705f528a0a5c654de6d01f76cd818", size = 3519505, upload-time = "2025-04-24T13:37:04.322Z" }, + { url = "https://files.pythonhosted.org/packages/38/c5/c776d03ec374f22860802b2cee057b41e866be3c80826b53d4c001692db3/pydantic-1.10.22-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4148232aded8dd1dd13cf910a01b32a763c34bd79a0ab4d1ee66164fcb0b7b9d", size = 3485878, upload-time = "2025-04-24T13:37:06.102Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a2/1efd064513a2c1bcb5c2b0e022cdf77d132ef7f7f20d91bb439d759f6a88/pydantic-1.10.22-cp310-cp310-win_amd64.whl", hash = "sha256:ece68105d9e436db45d8650dc375c760cc85a6793ae019c08769052902dca7db", size = 2299673, upload-time = "2025-04-24T13:37:07.969Z" }, + { url = "https://files.pythonhosted.org/packages/42/03/e435ed85a9abda29e3fbdb49c572fe4131a68c6daf3855a01eebda9e1b27/pydantic-1.10.22-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e530a8da353f791ad89e701c35787418605d35085f4bdda51b416946070e938", size = 2845682, upload-time = "2025-04-24T13:37:10.142Z" }, + { url = "https://files.pythonhosted.org/packages/72/ea/4a625035672f6c06d3f1c7e33aa0af6bf1929991e27017e98b9c2064ae0b/pydantic-1.10.22-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:654322b85642e9439d7de4c83cb4084ddd513df7ff8706005dada43b34544946", size = 2553286, upload-time = "2025-04-24T13:37:11.946Z" }, + { url = "https://files.pythonhosted.org/packages/a4/f0/424ad837746e69e9f061ba9be68c2a97aef7376d1911692904d8efbcd322/pydantic-1.10.22-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8bece75bd1b9fc1c32b57a32831517943b1159ba18b4ba32c0d431d76a120ae", size = 3141232, upload-time = "2025-04-24T13:37:14.394Z" }, + { url = "https://files.pythonhosted.org/packages/14/67/4979c19e8cfd092085a292485e0b42d74e4eeefbb8cd726aa8ba38d06294/pydantic-1.10.22-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eccb58767f13c6963dcf96d02cb8723ebb98b16692030803ac075d2439c07b0f", size = 3214272, upload-time = "2025-04-24T13:37:16.201Z" }, + { url = "https://files.pythonhosted.org/packages/1a/04/32339ce43e97519d19e7759902515c750edbf4832a13063a4ab157f83f42/pydantic-1.10.22-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7778e6200ff8ed5f7052c1516617423d22517ad36cc7a3aedd51428168e3e5e8", size = 3321646, upload-time = "2025-04-24T13:37:19.086Z" }, + { url = "https://files.pythonhosted.org/packages/92/35/dffc1b29cb7198aadab68d75447191e59bdbc1f1d2d51826c9a4460d372f/pydantic-1.10.22-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bffe02767d27c39af9ca7dc7cd479c00dda6346bb62ffc89e306f665108317a2", size = 3244258, upload-time = "2025-04-24T13:37:20.929Z" }, + { url = "https://files.pythonhosted.org/packages/11/c5/c4ce6ebe7f528a879441eabd2c6dd9e2e4c54f320a8c9344ba93b3aa8701/pydantic-1.10.22-cp311-cp311-win_amd64.whl", hash = "sha256:23bc19c55427091b8e589bc08f635ab90005f2dc99518f1233386f46462c550a", size = 2309702, upload-time = "2025-04-24T13:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/f6/a3/ec66239ed7c9e90edfb85b23b6b18eb290ed7aa05f54837cdcb6a14faa98/pydantic-1.10.22-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:92d0f97828a075a71d9efc65cf75db5f149b4d79a38c89648a63d2932894d8c9", size = 2794865, upload-time = "2025-04-24T13:37:25.087Z" }, + { url = "https://files.pythonhosted.org/packages/49/6a/99cf3fee612d93210c85f45a161e98c1c5b45b6dcadb21c9f1f838fa9e28/pydantic-1.10.22-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6af5a2811b6b95b58b829aeac5996d465a5f0c7ed84bd871d603cf8646edf6ff", size = 2534212, upload-time = "2025-04-24T13:37:26.848Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e6/0f8882775cd9a60b221103ee7d6a89e10eb5a892d877c398df0da7140704/pydantic-1.10.22-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cf06d8d40993e79af0ab2102ef5da77b9ddba51248e4cb27f9f3f591fbb096e", size = 2994027, upload-time = "2025-04-24T13:37:28.683Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a3/f20fdecbaa2a2721a6a8ee9e4f344d1f72bd7d56e679371c3f2be15eb8c8/pydantic-1.10.22-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:184b7865b171a6057ad97f4a17fbac81cec29bd103e996e7add3d16b0d95f609", size = 3036716, upload-time = "2025-04-24T13:37:30.547Z" }, + { url = "https://files.pythonhosted.org/packages/1f/83/dab34436d830c38706685acc77219fc2a209fea2a2301a1b05a2865b28bf/pydantic-1.10.22-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:923ad861677ab09d89be35d36111156063a7ebb44322cdb7b49266e1adaba4bb", size = 3171801, upload-time = "2025-04-24T13:37:32.474Z" }, + { url = "https://files.pythonhosted.org/packages/1e/6e/b64deccb8a7304d584088972437ea3091e9d99d27a8e7bf2bd08e29ae84e/pydantic-1.10.22-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:82d9a3da1686443fb854c8d2ab9a473251f8f4cdd11b125522efb4d7c646e7bc", size = 3123560, upload-time = "2025-04-24T13:37:34.855Z" }, + { url = "https://files.pythonhosted.org/packages/08/9a/90d1ab704329a7ae8666354be84b5327d655764003974364767c9d307d3a/pydantic-1.10.22-cp312-cp312-win_amd64.whl", hash = "sha256:1612604929af4c602694a7f3338b18039d402eb5ddfbf0db44f1ebfaf07f93e7", size = 2191378, upload-time = "2025-04-24T13:37:36.649Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e0/1ed151a56869be1588ad2d8cda9f8c1d95b16f74f09a7cea879ca9b63a8b/pydantic-1.10.22-py3-none-any.whl", hash = "sha256:343037d608bcbd34df937ac259708bfc83664dadf88afe8516c4f282d7d471a9", size = 166503, upload-time = "2025-04-24T13:38:41.374Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, +] + +[[package]] +name = "pyln-bolt7" +version = "1.0.246" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/3c/6d1d6643c6a501e998c17c25d40c3b68ab75be1d16d9055e6a9ffba30fe4/pyln-bolt7-1.0.246.tar.gz", hash = "sha256:2b53744fa21c1b12d2c9c9df153651b122e38fa65d4a5c3f2957317ee148e089", size = 17905, upload-time = "2022-08-31T17:28:20.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/f1/30b626e7cec279a2f84084898594c8e84537d6d9af9afbe9858f9a6d8e13/pyln_bolt7-1.0.246-py3-none-any.whl", hash = "sha256:54d48ec27fdc8751762cb068b0a9f2757a58fb57933c6d8f8255d02c27eb63c5", size = 18811, upload-time = "2022-08-31T17:28:22.137Z" }, +] + +[[package]] +name = "pyln-client" +version = "25.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyln-bolt7" }, + { name = "pyln-proto" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/f5/70dae7e6985ba44f53e1c634e204ecc4e9ccde8de6cd90e009672203023f/pyln_client-25.5.tar.gz", hash = "sha256:18656e667c7218f8b40c70f893b936aef4518e87e3ce99081bd52f89e6e5af85", size = 36015, upload-time = "2025-06-16T18:13:48.973Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/45/c504ed8ea59577d8093d377e2f657482f08e87b93aaa039e64421297ff55/pyln_client-25.5-py3-none-any.whl", hash = "sha256:269f9ab346ff679b532af2d24c2a524201884efc5b4781dd40685c8ccaec9507", size = 37362, upload-time = "2025-06-16T18:13:47.394Z" }, +] + +[[package]] +name = "pyln-proto" +version = "25.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "base58" }, + { name = "bitstring" }, + { name = "coincurve" }, + { name = "cryptography" }, + { name = "pysocks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/d1/7048f5a373f1dfa04bf1944e338823a9e33a789a823f411fb5e517d5335c/pyln_proto-25.9.1.tar.gz", hash = "sha256:01d4745c9ffbad98ebb24f999cf4961d1388412675fbd9f23a8de1a6f0e5e0a0", size = 44861, upload-time = "2025-10-16T00:50:19.126Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/77/713c3b739d804cf5855b03fc59524bc987957e730bc7af8c3db02bc72d7d/pyln_proto-25.9.1-py3-none-any.whl", hash = "sha256:a1ca7d977913d1a7ccc520eb29d5a83667dddb68eda68cf8bc253cb7fea7ea75", size = 31830, upload-time = "2025-10-16T00:50:20.098Z" }, +] + +[[package]] +name = "pynostr" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coincurve" }, + { name = "cryptography" }, + { name = "requests" }, + { name = "rich" }, + { name = "tlv8" }, + { name = "tornado" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/b6/818c072bd98c6472c305fa0ce9822592a3c8601ebe550b02465404fa629b/pynostr-0.6.2.tar.gz", hash = "sha256:2974ea05b3ff41a1a4060e3b1813eb0ce0e60c0b81fbe668afaa65164c7f82f4", size = 52310, upload-time = "2023-03-16T20:54:02.826Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/4c/d76378abc44c15375708cb3eb8ee9f199879b905b4c2ceda9ea108dfae79/pynostr-0.6.2-py3-none-any.whl", hash = "sha256:d43fb236c73174093275ee0080b2f8ed17e974b2b516f0d73da4c9a3e908ddc5", size = 36301, upload-time = "2023-03-16T20:54:01.055Z" }, +] + +[[package]] +name = "pyqrcode" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/61/f07226075c347897937d4086ef8e55f0a62ae535e28069884ac68d979316/PyQRCode-1.2.1.tar.gz", hash = "sha256:fdbf7634733e56b72e27f9bce46e4550b75a3a2c420414035cae9d9d26b234d5", size = 36989, upload-time = "2016-06-20T03:28:03.411Z" } + +[[package]] +name = "pysocks" +version = "1.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/11/293dd436aea955d45fc4e8a35b6ae7270f5b8e00b53cf6c024c83b657a11/PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0", size = 284429, upload-time = "2019-09-20T02:07:35.714Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5", size = 16725, upload-time = "2019-09-20T02:06:22.938Z" }, +] + +[[package]] +name = "pytest" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, +] + +[[package]] +name = "pytest-asyncio" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" }, + { name = "pytest" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/86/9e3c5f48f7b7b638b216e4b9e645f54d199d7abbbab7a64a13b4e12ba10f/pytest_asyncio-1.2.0.tar.gz", hash = "sha256:c609a64a2a8768462d0c99811ddb8bd2583c33fd33cf7f21af1c142e824ffb57", size = 50119, upload-time = "2025-09-12T07:33:53.816Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/93/2fa34714b7a4ae72f2f8dad66ba17dd9a2c793220719e736dda28b7aec27/pytest_asyncio-1.2.0-py3-none-any.whl", hash = "sha256:8e17ae5e46d8e7efe51ab6494dd2010f4ca8dae51652aa3c8d55acf50bfb2e99", size = 15095, upload-time = "2025-09-12T07:33:52.639Z" }, +] + +[[package]] +name = "pytest-md" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/55/1d4248f08a97255abb23b05d8ba07586333194fadb17beda96b707aebecd/pytest-md-0.2.0.tar.gz", hash = "sha256:3b248d5b360ea5198e05b4f49c7442234812809a63137ec6cdd3643a40cf0112", size = 5985, upload-time = "2019-07-11T08:15:59.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/71/23d03f57c18116c6770141478e33b3500c4e92500cf4b49a396e9226733f/pytest_md-0.2.0-py3-none-any.whl", hash = "sha256:4c4cd16fea6d1485e87ee254558712c804a96d2aa9674b780e7eb8fb6526e1d1", size = 6117, upload-time = "2019-07-11T08:15:57.829Z" }, +] + +[[package]] +name = "python-crontab" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/f0/25775565c133d4e29eeb607bf9ddba0075f3af36041a1844dd207881047f/python_crontab-3.2.0.tar.gz", hash = "sha256:40067d1dd39ade3460b2ad8557c7651514cd3851deffff61c5c60e1227c5c36b", size = 57001, upload-time = "2024-07-01T22:29:10.903Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/91/832fb3b3a1f62bd2ab4924f6be0c7736c9bc4f84d3b153b74efcf6d4e4a1/python_crontab-3.2.0-py3-none-any.whl", hash = "sha256:82cb9b6a312d41ff66fd3caf3eed7115c28c195bfb50711bc2b4b9592feb9fe5", size = 27351, upload-time = "2024-07-01T22:29:08.549Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload-time = "2025-10-26T15:12:10.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158, upload-time = "2024-12-16T19:45:46.972Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546, upload-time = "2024-12-16T19:45:44.423Z" }, +] + +[[package]] +name = "pytokens" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/c2/dbadcdddb412a267585459142bfd7cc241e6276db69339353ae6e241ab2b/pytokens-0.2.0.tar.gz", hash = "sha256:532d6421364e5869ea57a9523bf385f02586d4662acbcc0342afd69511b4dd43", size = 15368, upload-time = "2025-10-15T08:02:42.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/5a/c269ea6b348b6f2c32686635df89f32dbe05df1088dd4579302a6f8f99af/pytokens-0.2.0-py3-none-any.whl", hash = "sha256:74d4b318c67f4295c13782ddd9abcb7e297ec5630ad060eb90abf7ebbefe59f8", size = 12038, upload-time = "2025-10-15T08:02:41.694Z" }, +] + +[[package]] +name = "pywebpush" +version = "2.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "cryptography" }, + { name = "http-ece" }, + { name = "py-vapid" }, + { name = "requests" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/ca/6e669bf676916d66c8c7adedc291e9a9758650f9d85ec040fda13e3c82f4/pywebpush-2.0.3.tar.gz", hash = "sha256:584878e3c243e873a22db8895505d95715bc796ef74cc1b8fe99f596174161e3", size = 25874, upload-time = "2024-11-19T21:30:20.444Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/8a/ecaa2a589338a038b89148b01a5db2dac53e45918342da69baca1fb058fc/pywebpush-2.0.3-py3-none-any.whl", hash = "sha256:04666441715bc547918d7668b2ac7ad5c4b5de7d0a6cf528daf61e0c4bc5431c", size = 21364, upload-time = "2024-11-19T21:30:19.312Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "rich" +version = "14.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/d2/8920e102050a0de7bfabeb4c4614a49248cf8d5d7a8d01885fbb24dc767a/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", size = 219990, upload-time = "2025-10-09T14:16:53.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" }, +] + +[[package]] +name = "ruff" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/34/8218a19b2055b80601e8fd201ec723c74c7fe1ca06d525a43ed07b6d8e85/ruff-0.14.2.tar.gz", hash = "sha256:98da787668f239313d9c902ca7c523fe11b8ec3f39345553a51b25abc4629c96", size = 5539663, upload-time = "2025-10-23T19:37:00.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/dd/23eb2db5ad9acae7c845700493b72d3ae214dce0b226f27df89216110f2b/ruff-0.14.2-py3-none-linux_armv6l.whl", hash = "sha256:7cbe4e593505bdec5884c2d0a4d791a90301bc23e49a6b1eb642dd85ef9c64f1", size = 12533390, upload-time = "2025-10-23T19:36:18.044Z" }, + { url = "https://files.pythonhosted.org/packages/5a/8c/5f9acff43ddcf3f85130d0146d0477e28ccecc495f9f684f8f7119b74c0d/ruff-0.14.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8d54b561729cee92f8d89c316ad7a3f9705533f5903b042399b6ae0ddfc62e11", size = 12887187, upload-time = "2025-10-23T19:36:22.664Z" }, + { url = "https://files.pythonhosted.org/packages/99/fa/047646491479074029665022e9f3dc6f0515797f40a4b6014ea8474c539d/ruff-0.14.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5c8753dfa44ebb2cde10ce5b4d2ef55a41fb9d9b16732a2c5df64620dbda44a3", size = 11925177, upload-time = "2025-10-23T19:36:24.778Z" }, + { url = "https://files.pythonhosted.org/packages/15/8b/c44cf7fe6e59ab24a9d939493a11030b503bdc2a16622cede8b7b1df0114/ruff-0.14.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d0bbeffb8d9f4fccf7b5198d566d0bad99a9cb622f1fc3467af96cb8773c9e3", size = 12358285, upload-time = "2025-10-23T19:36:26.979Z" }, + { url = "https://files.pythonhosted.org/packages/45/01/47701b26254267ef40369aea3acb62a7b23e921c27372d127e0f3af48092/ruff-0.14.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7047f0c5a713a401e43a88d36843d9c83a19c584e63d664474675620aaa634a8", size = 12303832, upload-time = "2025-10-23T19:36:29.192Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5c/ae7244ca4fbdf2bee9d6405dcd5bc6ae51ee1df66eb7a9884b77b8af856d/ruff-0.14.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bf8d2f9aa1602599217d82e8e0af7fd33e5878c4d98f37906b7c93f46f9a839", size = 13036995, upload-time = "2025-10-23T19:36:31.861Z" }, + { url = "https://files.pythonhosted.org/packages/27/4c/0860a79ce6fd4c709ac01173f76f929d53f59748d0dcdd662519835dae43/ruff-0.14.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1c505b389e19c57a317cf4b42db824e2fca96ffb3d86766c1c9f8b96d32048a7", size = 14512649, upload-time = "2025-10-23T19:36:33.915Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7f/d365de998069720a3abfc250ddd876fc4b81a403a766c74ff9bde15b5378/ruff-0.14.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a307fc45ebd887b3f26b36d9326bb70bf69b01561950cdcc6c0bdf7bb8e0f7cc", size = 14088182, upload-time = "2025-10-23T19:36:36.983Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ea/d8e3e6b209162000a7be1faa41b0a0c16a133010311edc3329753cc6596a/ruff-0.14.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61ae91a32c853172f832c2f40bd05fd69f491db7289fb85a9b941ebdd549781a", size = 13599516, upload-time = "2025-10-23T19:36:39.208Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ea/c7810322086db68989fb20a8d5221dd3b79e49e396b01badca07b433ab45/ruff-0.14.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1967e40286f63ee23c615e8e7e98098dedc7301568bd88991f6e544d8ae096", size = 13272690, upload-time = "2025-10-23T19:36:41.453Z" }, + { url = "https://files.pythonhosted.org/packages/a9/39/10b05acf8c45786ef501d454e00937e1b97964f846bf28883d1f9619928a/ruff-0.14.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2877f02119cdebf52a632d743a2e302dea422bfae152ebe2f193d3285a3a65df", size = 13496497, upload-time = "2025-10-23T19:36:43.61Z" }, + { url = "https://files.pythonhosted.org/packages/59/a1/1f25f8301e13751c30895092485fada29076e5e14264bdacc37202e85d24/ruff-0.14.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e681c5bc777de5af898decdcb6ba3321d0d466f4cb43c3e7cc2c3b4e7b843a05", size = 12266116, upload-time = "2025-10-23T19:36:45.625Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/0029bfc9ce16ae78164e6923ef392e5f173b793b26cc39aa1d8b366cf9dc/ruff-0.14.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e21be42d72e224736f0c992cdb9959a2fa53c7e943b97ef5d081e13170e3ffc5", size = 12281345, upload-time = "2025-10-23T19:36:47.618Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ab/ece7baa3c0f29b7683be868c024f0838770c16607bea6852e46b202f1ff6/ruff-0.14.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b8264016f6f209fac16262882dbebf3f8be1629777cf0f37e7aff071b3e9b92e", size = 12629296, upload-time = "2025-10-23T19:36:49.789Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7f/638f54b43f3d4e48c6a68062794e5b367ddac778051806b9e235dfb7aa81/ruff-0.14.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5ca36b4cb4db3067a3b24444463ceea5565ea78b95fe9a07ca7cb7fd16948770", size = 13371610, upload-time = "2025-10-23T19:36:51.882Z" }, + { url = "https://files.pythonhosted.org/packages/8d/35/3654a973ebe5b32e1fd4a08ed2d46755af7267da7ac710d97420d7b8657d/ruff-0.14.2-py3-none-win32.whl", hash = "sha256:41775927d287685e08f48d8eb3f765625ab0b7042cc9377e20e64f4eb0056ee9", size = 12415318, upload-time = "2025-10-23T19:36:53.961Z" }, + { url = "https://files.pythonhosted.org/packages/71/30/3758bcf9e0b6a4193a6f51abf84254aba00887dfa8c20aba18aa366c5f57/ruff-0.14.2-py3-none-win_amd64.whl", hash = "sha256:0df3424aa5c3c08b34ed8ce099df1021e3adaca6e90229273496b839e5a7e1af", size = 13565279, upload-time = "2025-10-23T19:36:56.578Z" }, + { url = "https://files.pythonhosted.org/packages/2e/5d/aa883766f8ef9ffbe6aa24f7192fb71632f31a30e77eb39aa2b0dc4290ac/ruff-0.14.2-py3-none-win_arm64.whl", hash = "sha256:ea9d635e83ba21569fbacda7e78afbfeb94911c9434aff06192d9bc23fd5495a", size = 12554956, upload-time = "2025-10-23T19:36:58.714Z" }, +] + +[[package]] +name = "secp256k1" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/41/bb668a6e4192303542d2d90c3b38d564af3c17c61bd7d4039af4f29405fe/secp256k1-0.14.0.tar.gz", hash = "sha256:82c06712d69ef945220c8b53c1a0d424c2ff6a1f64aee609030df79ad8383397", size = 2420607, upload-time = "2021-11-06T01:36:10.707Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/46/5d3ca364058d39160e3623f0babafe78c2236d359e86924aa07524377c98/secp256k1-0.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f666c67dcf1dc69e1448b2ede5e12aaf382b600204a61dbc65e4f82cea444405", size = 1376587, upload-time = "2022-01-24T12:36:39.127Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/5b1616593ed1fa0e07e87b9f5118dc098bd1ddb2a6a7698d82b0ff85ad3f/secp256k1-0.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fcabb3c3497a902fb61eec72d1b69bf72747d7bcc2a732d56d9319a1e8322262", size = 1362187, upload-time = "2022-01-24T12:36:41.677Z" }, + { url = "https://files.pythonhosted.org/packages/c9/9c/8148f74dd1fc65d0b97c8cbb101b468e27a2e93a3f291807d0d8ebe4bbf3/secp256k1-0.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a27c479ab60571502516a1506a562d0a9df062de8ad645313fabfcc97252816", size = 1376363, upload-time = "2022-01-24T12:36:44.314Z" }, + { url = "https://files.pythonhosted.org/packages/64/11/ff6d18314bc05a8f66619959a61be2fb6f37793d73e1dd106954b0978d92/secp256k1-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4b9306bff6dde020444dfee9ca9b9f5b20ca53a2c0b04898361a3f43d5daf2e", size = 1369109, upload-time = "2022-01-24T12:36:46.782Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "shortuuid" +version = "1.0.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/e2/bcf761f3bff95856203f9559baf3741c416071dd200c0fc19fad7f078f86/shortuuid-1.0.13.tar.gz", hash = "sha256:3bb9cf07f606260584b1df46399c0b87dd84773e7b25912b7e391e30797c5e72", size = 9662, upload-time = "2024-03-11T20:11:06.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/44/21d6bf170bf40b41396480d8d49ad640bca3f2b02139cd52aa1e272830a5/shortuuid-1.0.13-py3-none-any.whl", hash = "sha256:a482a497300b49b4953e15108a7913244e1bb0d41f9d332f5e9925dba33a3c5a", size = 10529, upload-time = "2024-03-11T20:11:04.807Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "slowapi" +version = "0.1.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "limits" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a0/99/adfc7f94ca024736f061257d39118e1542bade7a52e86415a4c4ae92d8ff/slowapi-0.1.9.tar.gz", hash = "sha256:639192d0f1ca01b1c6d95bf6c71d794c3a9ee189855337b4821f7f457dddad77", size = 14028, upload-time = "2024-02-05T12:11:52.13Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/bb/f71c4b7d7e7eb3fc1e8c0458a8979b912f40b58002b9fbf37729b8cb464b/slowapi-0.1.9-py3-none-any.whl", hash = "sha256:cfad116cfb84ad9d763ee155c1e5c5cbf00b0d47399a769b227865f5df576e36", size = 14670, upload-time = "2024-02-05T12:11:50.898Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "sqlalchemy" +version = "1.4.54" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/af/20290b55d469e873cba9d41c0206ab5461ff49d759989b3fe65010f9d265/sqlalchemy-1.4.54.tar.gz", hash = "sha256:4470fbed088c35dc20b78a39aaf4ae54fe81790c783b3264872a0224f437c31a", size = 8470350, upload-time = "2024-09-05T15:54:10.398Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/7f/f7c1e0b65790649bd573f201aa958263a389f336d6e000a569275ff9bd97/SQLAlchemy-1.4.54-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:af00236fe21c4d4f4c227b6ccc19b44c594160cc3ff28d104cdce85855369277", size = 1573472, upload-time = "2024-09-05T17:38:45.351Z" }, + { url = "https://files.pythonhosted.org/packages/e1/da/ff7f0fe50844496db523613979651f076f44da8625b8ad89c503dcff0a52/SQLAlchemy-1.4.54-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1183599e25fa38a1a322294b949da02b4f0da13dbc2688ef9dbe746df573f8a6", size = 1639088, upload-time = "2024-09-05T17:46:37.726Z" }, + { url = "https://files.pythonhosted.org/packages/04/45/3a35bb156aa2fd87b66a4992bb8d65593efd7e16ca2e0597e68c32c29037/SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990d5a6a5dc358a0894c8ca02043fb9a5ad9538422001fb2826e91c50f1d539", size = 1627447, upload-time = "2024-09-05T17:45:32.379Z" }, + { url = "https://files.pythonhosted.org/packages/fe/5b/ed36a50e7147d0d090cd8e35de3b18d2c69a3e85df3be5fe42a570d6c331/SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14b3f4783275339170984cadda66e3ec011cce87b405968dc8d51cf0f9997b0d", size = 1639081, upload-time = "2024-09-05T17:46:39.895Z" }, + { url = "https://files.pythonhosted.org/packages/4b/75/bfbdeb5dece7bc98acb414751a62ee43398b34b10133b1853f4282597757/SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b24364150738ce488333b3fb48bfa14c189a66de41cd632796fbcacb26b4585", size = 1638975, upload-time = "2024-09-05T17:46:41.569Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/358a9291d2fc3d51ad50557e126ad5f48200f199878437f7cb38817d607b/SQLAlchemy-1.4.54-cp310-cp310-win32.whl", hash = "sha256:a8a72259a1652f192c68377be7011eac3c463e9892ef2948828c7d58e4829988", size = 1591719, upload-time = "2024-09-05T17:52:26.646Z" }, + { url = "https://files.pythonhosted.org/packages/10/ad/87cd5578efdcef43a08ce4a21448192abf46bf69a5678ac0039e44364914/SQLAlchemy-1.4.54-cp310-cp310-win_amd64.whl", hash = "sha256:b67589f7955924865344e6eacfdcf70675e64f36800a576aa5e961f0008cde2a", size = 1593512, upload-time = "2024-09-05T17:51:21.402Z" }, + { url = "https://files.pythonhosted.org/packages/da/49/fb98983b5568e93696a25fd5bec1b789095b79a72d5f57c6effddaa81d0a/SQLAlchemy-1.4.54-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b05e0626ec1c391432eabb47a8abd3bf199fb74bfde7cc44a26d2b1b352c2c6e", size = 1589301, upload-time = "2024-09-05T19:22:42.197Z" }, + { url = "https://files.pythonhosted.org/packages/03/98/5a81430bbd646991346cb088a2bdc84d1bcd3dbe6b0cfc1aaa898370e5c7/SQLAlchemy-1.4.54-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13e91d6892b5fcb94a36ba061fb7a1f03d0185ed9d8a77c84ba389e5bb05e936", size = 1629553, upload-time = "2024-09-05T17:49:18.846Z" }, + { url = "https://files.pythonhosted.org/packages/f1/17/14e35db2b0d6deaa27691d014addbb0dd6f7e044f7ee465446a3c0c71404/SQLAlchemy-1.4.54-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb59a11689ff3c58e7652260127f9e34f7f45478a2f3ef831ab6db7bcd72108f", size = 1627640, upload-time = "2024-09-05T17:48:01.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/62/335006a8f2c98f704f391e1a0cc01446d1b1b9c198f579f03599f55bd860/SQLAlchemy-1.4.54-cp311-cp311-win32.whl", hash = "sha256:1390ca2d301a2708fd4425c6d75528d22f26b8f5cbc9faba1ddca136671432bc", size = 1591723, upload-time = "2024-09-05T17:53:17.486Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a1/6b4b8c07082920f5445ec65c221fa33baab102aced5dcc2d87a15d3f8db4/SQLAlchemy-1.4.54-cp311-cp311-win_amd64.whl", hash = "sha256:2b37931eac4b837c45e2522066bda221ac6d80e78922fb77c75eb12e4dbcdee5", size = 1593511, upload-time = "2024-09-05T17:51:50.947Z" }, + { url = "https://files.pythonhosted.org/packages/a5/1b/aa9b99be95d1615f058b5827447c18505b7b3f1dfcbd6ce1b331c2107152/SQLAlchemy-1.4.54-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3f01c2629a7d6b30d8afe0326b8c649b74825a0e1ebdcb01e8ffd1c920deb07d", size = 1589983, upload-time = "2024-09-05T17:39:02.132Z" }, + { url = "https://files.pythonhosted.org/packages/59/47/cb0fc64e5344f0a3d02216796c342525ab283f8f052d1c31a1d487d08aa0/SQLAlchemy-1.4.54-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c24dd161c06992ed16c5e528a75878edbaeced5660c3db88c820f1f0d3fe1f4", size = 1630158, upload-time = "2024-09-05T17:50:13.255Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8b/f45dd378f6c97e8ff9332ff3d03ecb0b8c491be5bb7a698783b5a2f358ec/SQLAlchemy-1.4.54-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5e0d47d619c739bdc636bbe007da4519fc953393304a5943e0b5aec96c9877c", size = 1629232, upload-time = "2024-09-05T17:48:15.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/3c/884fe389f5bec86a310b81e79abaa1e26e5d78dc10a84d544a6822833e47/SQLAlchemy-1.4.54-cp312-cp312-win32.whl", hash = "sha256:12bc0141b245918b80d9d17eca94663dbd3f5266ac77a0be60750f36102bbb0f", size = 1592027, upload-time = "2024-09-05T17:54:02.253Z" }, + { url = "https://files.pythonhosted.org/packages/01/c3/c690d037be57efd3a69cde16a2ef1bd2a905dafe869434d33836de0983d0/SQLAlchemy-1.4.54-cp312-cp312-win_amd64.whl", hash = "sha256:f941aaf15f47f316123e1933f9ea91a6efda73a161a6ab6046d1cde37be62c88", size = 1593827, upload-time = "2024-09-05T17:52:07.454Z" }, +] + +[[package]] +name = "sse-starlette" +version = "2.3.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8c/f4/989bc70cb8091eda43a9034ef969b25145291f3601703b82766e5172dfed/sse_starlette-2.3.6.tar.gz", hash = "sha256:0382336f7d4ec30160cf9ca0518962905e1b69b72d6c1c995131e0a703b436e3", size = 18284, upload-time = "2025-05-30T13:34:12.914Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/05/78850ac6e79af5b9508f8841b0f26aa9fd329a1ba00bf65453c2d312bcc8/sse_starlette-2.3.6-py3-none-any.whl", hash = "sha256:d49a8285b182f6e2228e2609c350398b2ca2c36216c2675d875f81e93548f760", size = 10606, upload-time = "2025-05-30T13:34:11.703Z" }, +] + +[[package]] +name = "starlette" +version = "0.47.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0a/69/662169fdb92fb96ec3eaee218cf540a629d629c86d7993d9651226a6789b/starlette-0.47.1.tar.gz", hash = "sha256:aef012dd2b6be325ffa16698f9dc533614fb1cebd593a906b90dc1025529a79b", size = 2583072, upload-time = "2025-06-21T04:03:17.337Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/95/38ef0cd7fa11eaba6a99b3c4f5ac948d8bc6ff199aabd327a29cc000840c/starlette-0.47.1-py3-none-any.whl", hash = "sha256:5e11c9f5c7c3f24959edbf2dffdc01bba860228acf657129467d8a7468591527", size = 72747, upload-time = "2025-06-21T04:03:15.705Z" }, +] + +[[package]] +name = "tlv8" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/89/6df40b0c5fd9a1c30711f569bd31446f89d1de6d23948b391775f6784d94/tlv8-0.10.0.tar.gz", hash = "sha256:7930a590267b809952272ac2a27ee81b99ec5191fa2eba08050e0daee4262684", size = 16054, upload-time = "2022-04-12T07:47:19.102Z" } + +[[package]] +name = "tomli" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, + { url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" }, + { url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" }, + { url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" }, + { url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" }, + { url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" }, + { url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" }, + { url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" }, + { url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" }, + { url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" }, + { url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, + { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, + { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, + { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821, upload-time = "2025-08-08T18:27:00.78Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563, upload-time = "2025-08-08T18:26:42.945Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729, upload-time = "2025-08-08T18:26:44.473Z" }, + { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295, upload-time = "2025-08-08T18:26:46.021Z" }, + { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644, upload-time = "2025-08-08T18:26:47.625Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878, upload-time = "2025-08-08T18:26:50.599Z" }, + { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549, upload-time = "2025-08-08T18:26:51.864Z" }, + { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973, upload-time = "2025-08-08T18:26:53.625Z" }, + { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954, upload-time = "2025-08-08T18:26:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023, upload-time = "2025-08-08T18:26:56.677Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427, upload-time = "2025-08-08T18:26:57.91Z" }, + { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456, upload-time = "2025-08-08T18:26:59.207Z" }, +] + +[[package]] +name = "typer" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/28/7c85c8032b91dbe79725b6f17d2fffc595dff06a35c7a30a37bef73a1ab4/typer-0.20.0.tar.gz", hash = "sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37", size = 106492, upload-time = "2025-10-20T17:03:49.445Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl", hash = "sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a", size = 47028, upload-time = "2025-10-20T17:03:47.617Z" }, +] + +[[package]] +name = "types-cffi" +version = "1.17.0.20250915" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "types-setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/98/ea454cea03e5f351323af6a482c65924f3c26c515efd9090dede58f2b4b6/types_cffi-1.17.0.20250915.tar.gz", hash = "sha256:4362e20368f78dabd5c56bca8004752cc890e07a71605d9e0d9e069dbaac8c06", size = 17229, upload-time = "2025-09-15T03:01:25.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/ec/092f2b74b49ec4855cdb53050deb9699f7105b8fda6fe034c0781b8687f3/types_cffi-1.17.0.20250915-py3-none-any.whl", hash = "sha256:cef4af1116c83359c11bb4269283c50f0688e9fc1d7f0eeb390f3661546da52c", size = 20112, upload-time = "2025-09-15T03:01:24.187Z" }, +] + +[[package]] +name = "types-setuptools" +version = "80.9.0.20250822" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/bd/1e5f949b7cb740c9f0feaac430e301b8f1c5f11a81e26324299ea671a237/types_setuptools-80.9.0.20250822.tar.gz", hash = "sha256:070ea7716968ec67a84c7f7768d9952ff24d28b65b6594797a464f1b3066f965", size = 41296, upload-time = "2025-08-22T03:02:08.771Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/2d/475bf15c1cdc172e7a0d665b6e373ebfb1e9bf734d3f2f543d668b07a142/types_setuptools-80.9.0.20250822-py3-none-any.whl", hash = "sha256:53bf881cb9d7e46ed12c76ef76c0aaf28cfe6211d3fab12e0b83620b1a8642c3", size = 63179, upload-time = "2025-08-22T03:02:07.643Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423, upload-time = "2025-06-02T14:52:11.399Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839, upload-time = "2025-06-02T14:52:10.026Z" }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.34.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/ad/713be230bcda622eaa35c28f0d328c3675c371238470abdea52417f17a8e/uvicorn-0.34.3.tar.gz", hash = "sha256:35919a9a979d7a59334b6b10e05d77c1d0d574c50e0fc98b8b1a0f165708b55a", size = 76631, upload-time = "2025-06-01T07:48:17.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/0d/8adfeaa62945f90d19ddc461c55f4a50c258af7662d34b6a3d5d1f8646f6/uvicorn-0.34.3-py3-none-any.whl", hash = "sha256:16246631db62bdfbf069b0645177d6e8a77ba950cfedbfd093acef9444e4d885", size = 62431, upload-time = "2025-06-01T07:48:15.664Z" }, +] + +[[package]] +name = "uvloop" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741, upload-time = "2024-10-14T23:38:35.489Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/76/44a55515e8c9505aa1420aebacf4dd82552e5e15691654894e90d0bd051a/uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f", size = 1442019, upload-time = "2024-10-14T23:37:20.068Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/62d5800358a78cc25c8a6c72ef8b10851bdb8cca22e14d9c74167b7f86da/uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d", size = 801898, upload-time = "2024-10-14T23:37:22.663Z" }, + { url = "https://files.pythonhosted.org/packages/f3/96/63695e0ebd7da6c741ccd4489b5947394435e198a1382349c17b1146bb97/uvloop-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26", size = 3827735, upload-time = "2024-10-14T23:37:25.129Z" }, + { url = "https://files.pythonhosted.org/packages/61/e0/f0f8ec84979068ffae132c58c79af1de9cceeb664076beea86d941af1a30/uvloop-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb", size = 3825126, upload-time = "2024-10-14T23:37:27.59Z" }, + { url = "https://files.pythonhosted.org/packages/bf/fe/5e94a977d058a54a19df95f12f7161ab6e323ad49f4dabc28822eb2df7ea/uvloop-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f", size = 3705789, upload-time = "2024-10-14T23:37:29.385Z" }, + { url = "https://files.pythonhosted.org/packages/26/dd/c7179618e46092a77e036650c1f056041a028a35c4d76945089fcfc38af8/uvloop-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c", size = 3800523, upload-time = "2024-10-14T23:37:32.048Z" }, + { url = "https://files.pythonhosted.org/packages/57/a7/4cf0334105c1160dd6819f3297f8700fda7fc30ab4f61fbf3e725acbc7cc/uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8", size = 1447410, upload-time = "2024-10-14T23:37:33.612Z" }, + { url = "https://files.pythonhosted.org/packages/8c/7c/1517b0bbc2dbe784b563d6ab54f2ef88c890fdad77232c98ed490aa07132/uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0", size = 805476, upload-time = "2024-10-14T23:37:36.11Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ea/0bfae1aceb82a503f358d8d2fa126ca9dbdb2ba9c7866974faec1cb5875c/uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e", size = 3960855, upload-time = "2024-10-14T23:37:37.683Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ca/0864176a649838b838f36d44bf31c451597ab363b60dc9e09c9630619d41/uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb", size = 3973185, upload-time = "2024-10-14T23:37:40.226Z" }, + { url = "https://files.pythonhosted.org/packages/30/bf/08ad29979a936d63787ba47a540de2132169f140d54aa25bc8c3df3e67f4/uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6", size = 3820256, upload-time = "2024-10-14T23:37:42.839Z" }, + { url = "https://files.pythonhosted.org/packages/da/e2/5cf6ef37e3daf2f06e651aae5ea108ad30df3cb269102678b61ebf1fdf42/uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d", size = 3937323, upload-time = "2024-10-14T23:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/8c/4c/03f93178830dc7ce8b4cdee1d36770d2f5ebb6f3d37d354e061eefc73545/uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c", size = 1471284, upload-time = "2024-10-14T23:37:47.833Z" }, + { url = "https://files.pythonhosted.org/packages/43/3e/92c03f4d05e50f09251bd8b2b2b584a2a7f8fe600008bcc4523337abe676/uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2", size = 821349, upload-time = "2024-10-14T23:37:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/a6/ef/a02ec5da49909dbbfb1fd205a9a1ac4e88ea92dcae885e7c961847cd51e2/uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d", size = 4580089, upload-time = "2024-10-14T23:37:51.703Z" }, + { url = "https://files.pythonhosted.org/packages/06/a7/b4e6a19925c900be9f98bec0a75e6e8f79bb53bdeb891916609ab3958967/uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc", size = 4693770, upload-time = "2024-10-14T23:37:54.122Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0c/f07435a18a4b94ce6bd0677d8319cd3de61f3a9eeb1e5f8ab4e8b5edfcb3/uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb", size = 4451321, upload-time = "2024-10-14T23:37:55.766Z" }, + { url = "https://files.pythonhosted.org/packages/8f/eb/f7032be105877bcf924709c97b1bf3b90255b4ec251f9340cef912559f28/uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f", size = 4659022, upload-time = "2024-10-14T23:37:58.195Z" }, +] + +[[package]] +name = "virtualenv" +version = "20.35.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/28/e6f1a6f655d620846bd9df527390ecc26b3805a0c5989048c210e22c5ca9/virtualenv-20.35.4.tar.gz", hash = "sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c", size = 6028799, upload-time = "2025-10-29T06:57:40.511Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl", hash = "sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b", size = 6005095, upload-time = "2025-10-29T06:57:37.598Z" }, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648, upload-time = "2024-04-23T22:16:16.976Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826, upload-time = "2024-04-23T22:16:14.422Z" }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/da/6462a9f510c0c49837bbc9345aca92d767a56c1fb2939e1579df1e1cdcf7/websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b", size = 175423, upload-time = "2025-03-05T20:01:35.363Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205", size = 173080, upload-time = "2025-03-05T20:01:37.304Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4f/b462242432d93ea45f297b6179c7333dd0402b855a912a04e7fc61c0d71f/websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a", size = 173329, upload-time = "2025-03-05T20:01:39.668Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312, upload-time = "2025-03-05T20:01:41.815Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319, upload-time = "2025-03-05T20:01:43.967Z" }, + { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631, upload-time = "2025-03-05T20:01:46.104Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016, upload-time = "2025-03-05T20:01:47.603Z" }, + { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426, upload-time = "2025-03-05T20:01:48.949Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360, upload-time = "2025-03-05T20:01:50.938Z" }, + { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388, upload-time = "2025-03-05T20:01:52.213Z" }, + { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830, upload-time = "2025-03-05T20:01:53.922Z" }, + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" }, + { url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, + { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, + { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, + { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, +] + +[[package]] +name = "wrapt" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/19/5e5bcd855d808892fe02d49219f97a50f64cd6d8313d75df3494ee97b1a3/wrapt-2.0.0.tar.gz", hash = "sha256:35a542cc7a962331d0279735c30995b024e852cf40481e384fd63caaa391cbb9", size = 81722, upload-time = "2025-10-19T23:47:54.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/db/ac9546e89b645e525686727f8749847485e3b45ffc4507b61c4669358638/wrapt-2.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a7cebcee61f21b1e46aa32db8d9d93826d0fbf1ad85defc2ccfb93b4adef1435", size = 77431, upload-time = "2025-10-19T23:45:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/74/bc/3b57c8012bbd0d02eec5ae838681c1a819df6c5e765ebc897f52623b5eb1/wrapt-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:827e6e3a3a560f6ec1f5ee92d4319c21a0549384f896ec692f3201eda31ebd11", size = 60644, upload-time = "2025-10-19T23:45:27.511Z" }, + { url = "https://files.pythonhosted.org/packages/b8/6e/b5e7d47713e3d46c30ec6ae83fafd369bc34de8148668c6e3168d9301863/wrapt-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a91075a5383a7cbfe46aed1845ef7c3f027e8e20e7d9a8a75e36ebc9b0dd15e", size = 61526, upload-time = "2025-10-19T23:45:28.789Z" }, + { url = "https://files.pythonhosted.org/packages/28/8d/d5df2af58ae479785473607a3b25726c295640cdcaee830847cee339eff9/wrapt-2.0.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b6a18c813196e18146b8d041e20875bdb0cb09b94ac1d1e1146e0fa87b2deb0d", size = 113638, upload-time = "2025-10-19T23:45:31.977Z" }, + { url = "https://files.pythonhosted.org/packages/f9/b7/9501c45ab93b4d6ba396ef02fcfb55867866bc8579fff045bb54cae58423/wrapt-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec5028d26011a53c76bd91bb6198b30b438c6e0f7adb45f2ad84fe2655b6a104", size = 115651, upload-time = "2025-10-19T23:45:33.257Z" }, + { url = "https://files.pythonhosted.org/packages/5e/3a/bfebe2ba51cf98ae80c5dbb6fa5892ae75d1acf1a4c404eda88e28f5ab06/wrapt-2.0.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bed9b04900204721a24bcefc652ca267b01c1e8ad8bc8c0cff81558a45a3aadc", size = 112060, upload-time = "2025-10-19T23:45:30.298Z" }, + { url = "https://files.pythonhosted.org/packages/00/e7/cd50a32bed022d98f61a90e57faf782aa063f7930f57eb67eb105d3189be/wrapt-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:03442f2b45fa3f2b98a94a1917f52fb34670de8f96c0a009c02dbd512d855a3d", size = 114829, upload-time = "2025-10-19T23:45:34.23Z" }, + { url = "https://files.pythonhosted.org/packages/9d/2c/c709578271df0c70a27ab8f797c44c258650f24a32b452f03d7afedc070d/wrapt-2.0.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:17d0b5c42495ba142a1cee52b76414f9210591c84aae94dffda70240753bfb3c", size = 111249, upload-time = "2025-10-19T23:45:35.554Z" }, + { url = "https://files.pythonhosted.org/packages/60/ef/cb58f6eea41f129600bda68d1ae4c80b14d4e0663eec1d5220cbffe50be5/wrapt-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ee44215e7d13e112a8fc74e12ed1a1f41cab2bc07b11cc703f2398cd114b261c", size = 113312, upload-time = "2025-10-19T23:45:36.66Z" }, + { url = "https://files.pythonhosted.org/packages/59/55/97e6c4e1c175fb27f8dec717a3e36493ff0c4e50173a95f439496556910f/wrapt-2.0.0-cp310-cp310-win32.whl", hash = "sha256:fe6eafac3bc3c957ab6597a0c0654a0a308868458d00d218743e5b5fae51951c", size = 57961, upload-time = "2025-10-19T23:45:40.958Z" }, + { url = "https://files.pythonhosted.org/packages/3b/0a/898b1d81ae1f3dd9a79fd2e0330a7c8dd793982f815a318548777cb21ee5/wrapt-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:9e070c3491397fba0445b8977900271eca9656570cca7c900d9b9352186703a0", size = 60311, upload-time = "2025-10-19T23:45:38.033Z" }, + { url = "https://files.pythonhosted.org/packages/44/f1/e7e92f9535f5624ee22879f09456df9d1f1ae9bb338eef711077b48e456a/wrapt-2.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:806e2e73186eb5e3546f39fb5d0405040e0088db0fc8b2f667fd1863de2b3c99", size = 58822, upload-time = "2025-10-19T23:45:39.785Z" }, + { url = "https://files.pythonhosted.org/packages/12/8f/8e4c8b6da60b4205191d588cbac448fb9ff4f5ed89f4e555dc4813ab30cf/wrapt-2.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b7e221abb6c5387819db9323dac3c875b459695057449634f1111955d753c621", size = 77433, upload-time = "2025-10-19T23:45:42.543Z" }, + { url = "https://files.pythonhosted.org/packages/22/9a/01a29ccb029aa8e78241f8b53cb89ae8826c240129abbbb6ebba3416eff9/wrapt-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1147a84c8fc852426580af8b6e33138461ddbc65aa459a25ea539374d32069fa", size = 60641, upload-time = "2025-10-19T23:45:43.866Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ec/e058997971428b7665b5c3665a55b18bb251ea7e08d002925e3ca017c020/wrapt-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d6691d4a711504a0bc10de789842ad6ac627bed22937b10f37a1211a8ab7bb3", size = 61526, upload-time = "2025-10-19T23:45:44.839Z" }, + { url = "https://files.pythonhosted.org/packages/70/c3/c82263503f554715aa1847e85dc75a69631a54e9d7ab0f1a55e34a22d44a/wrapt-2.0.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f460e1eb8e75a17c3918c8e35ba57625721eef2439ef0bcf05304ac278a65e1d", size = 114069, upload-time = "2025-10-19T23:45:47.223Z" }, + { url = "https://files.pythonhosted.org/packages/dc/97/d95e88a3a1bc2890a1aa47880c2762cf0eb6d231b5a64048e351cec6f071/wrapt-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:12c37784b77bf043bf65cc96c7195a5db474b8e54173208af076bdbb61df7b3e", size = 116109, upload-time = "2025-10-19T23:45:48.252Z" }, + { url = "https://files.pythonhosted.org/packages/dc/36/cba0bf954f2303897b80fa5342499b43f8c5201110dddf0d578d6841b149/wrapt-2.0.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75e5c049eb583835f7a0e0e311d9dde9bfbaac723a6dd89d052540f9b2809977", size = 112500, upload-time = "2025-10-19T23:45:45.838Z" }, + { url = "https://files.pythonhosted.org/packages/d7/2b/8cb88e63bec989f641d208acb3fd198bfdbbb4ef7dfb71f0cac3c90b07a9/wrapt-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e50bcbd5b65dac21b82319fcf18486e6ac439947e9305034b00704eb7405f553", size = 115356, upload-time = "2025-10-19T23:45:49.249Z" }, + { url = "https://files.pythonhosted.org/packages/bb/60/a6d5fb94648cd430648705bef9f4241bd22ead123ead552b6d2873ad5240/wrapt-2.0.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:06b78cb6b9320f57737a52fede882640d93cface98332d1a3df0c5696ec9ae9f", size = 111754, upload-time = "2025-10-19T23:45:51.21Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/1963854edf0592ae806307899dc7bf891e76cec19e598f55845c94603a65/wrapt-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c8349ebfc3cd98bc9105e0112dd8c8ac1f3c7cb5601f9d02248cae83a63f748", size = 113789, upload-time = "2025-10-19T23:45:52.473Z" }, + { url = "https://files.pythonhosted.org/packages/62/ec/4b1d76cb6d96ac511aaaa92efc57f528e57f06082a595b8b2663fcdb0f20/wrapt-2.0.0-cp311-cp311-win32.whl", hash = "sha256:028f19ec29e204fe725139d4a8b09f77ecfb64f8f02b7ab5ee822c85e330b68b", size = 57954, upload-time = "2025-10-19T23:45:57.03Z" }, + { url = "https://files.pythonhosted.org/packages/d4/cf/df8ff9bd64d4a75f9a9f6c1c93480a51904d0c9bd71c11994301c47d8a33/wrapt-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:c6961f05e58d919153ba311b397b7b904b907132b7b8344dde47865d4bb5ec89", size = 60308, upload-time = "2025-10-19T23:45:54.314Z" }, + { url = "https://files.pythonhosted.org/packages/69/d8/61e245fe387d58d84b3f913d5da9d909c4f239b887db692a05105aaf2a1b/wrapt-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:be7e316c2accd5a31dbcc230de19e2a846a325f8967fdea72704d00e38e6af06", size = 58822, upload-time = "2025-10-19T23:45:55.772Z" }, + { url = "https://files.pythonhosted.org/packages/3c/28/7f266b5bf50c3ad0c99c524d99faa0f7d6eecb045d950e7d2c9e1f0e1338/wrapt-2.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73c6f734aecb1a030d9a265c13a425897e1ea821b73249bb14471445467ca71c", size = 78078, upload-time = "2025-10-19T23:45:58.855Z" }, + { url = "https://files.pythonhosted.org/packages/06/0c/bbdcad7eb535fae9d6b0fcfa3995c364797cd8e2b423bba5559ab2d88dcf/wrapt-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b4a7f8023b8ce8a36370154733c747f8d65c8697cb977d8b6efeb89291fff23e", size = 61158, upload-time = "2025-10-19T23:46:00.096Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8a/bba3e7a4ebf4d1624103ee59d97b78a1fbb08fb5753ff5d1b69f5ef5e863/wrapt-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a1cb62f686c50e9dab5983c68f6c8e9cbf14a6007935e683662898a7d892fa69", size = 61646, upload-time = "2025-10-19T23:46:01.279Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0c/0f565294897a72493dbafe7b46229b5f09f3776795a894d6b737e98387de/wrapt-2.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:43dc0550ae15e33e6bb45a82a5e1b5495be2587fbaa996244b509921810ee49f", size = 121442, upload-time = "2025-10-19T23:46:04.287Z" }, + { url = "https://files.pythonhosted.org/packages/da/80/7f03501a8a078ad79b19b1a888f9192a9494e62ddf8985267902766a4f30/wrapt-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39c5b45b056d630545e40674d1f5e1b51864b3546f25ab6a4a331943de96262e", size = 123018, upload-time = "2025-10-19T23:46:06.052Z" }, + { url = "https://files.pythonhosted.org/packages/37/6b/ad0e1ff98359f13b4b0c2c52848e792841146fe79ac5f56899b9a028fc0d/wrapt-2.0.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:804e88f824b76240a1b670330637ccfd2d18b9efa3bb4f02eb20b2f64880b324", size = 117369, upload-time = "2025-10-19T23:46:02.53Z" }, + { url = "https://files.pythonhosted.org/packages/ac/6c/a90437bba8cb1ce2ed639af979515e09784678c2a7f4ffc79f2cf7de809e/wrapt-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c2c476aa3fc2b9899c3f7b20963fac4f952e7edb74a31fc92f7745389a2e3618", size = 121453, upload-time = "2025-10-19T23:46:07.747Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a9/b3982f9bd15bd45857a23c48b7c36e47d05db4a4dcc5061c31f169238845/wrapt-2.0.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8d851e526891216f89fcb7a1820dad9bd503ba3468fb9635ee28e93c781aa98e", size = 116250, upload-time = "2025-10-19T23:46:09.385Z" }, + { url = "https://files.pythonhosted.org/packages/73/e2/b7a8b1afac9f791d8f5eac0d9726559f1d7ec4a2b5a6b4e67ac145b007a5/wrapt-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b95733c2360c4a8656ee93c7af78e84c0bd617da04a236d7a456c8faa34e7a2d", size = 120575, upload-time = "2025-10-19T23:46:11.882Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0f/37920eeea96094f450ae35505d39f1135df951a2cdee0d4e01d4f843396a/wrapt-2.0.0-cp312-cp312-win32.whl", hash = "sha256:ea56817176834edf143df1109ae8fdaa087be82fdad3492648de0baa8ae82bf2", size = 58175, upload-time = "2025-10-19T23:46:15.678Z" }, + { url = "https://files.pythonhosted.org/packages/f0/db/b395f3b0c7f2c60d9219afacc54ceb699801ccf2d3d969ba556dc6d3af20/wrapt-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c7d3bee7be7a2665286103f4d1f15405c8074e6e1f89dac5774f9357c9a3809", size = 60415, upload-time = "2025-10-19T23:46:12.913Z" }, + { url = "https://files.pythonhosted.org/packages/86/22/33d660214548af47fc59d9eec8c0e0693bcedc5b3a0b52e8cbdd61f3b646/wrapt-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:680f707e1d26acbc60926659799b15659f077df5897a6791c7c598a5d4a211c4", size = 58911, upload-time = "2025-10-19T23:46:13.889Z" }, + { url = "https://files.pythonhosted.org/packages/00/5c/c34575f96a0a038579683c7f10fca943c15c7946037d1d254ab9db1536ec/wrapt-2.0.0-py3-none-any.whl", hash = "sha256:02482fb0df89857e35427dfb844319417e14fae05878f295ee43fa3bf3b15502", size = 43998, upload-time = "2025-10-19T23:47:52.858Z" }, +] + +[[package]] +name = "yarl" +version = "1.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169, upload-time = "2025-10-06T14:12:55.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/43/a2204825342f37c337f5edb6637040fa14e365b2fcc2346960201d457579/yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e", size = 140517, upload-time = "2025-10-06T14:08:42.494Z" }, + { url = "https://files.pythonhosted.org/packages/44/6f/674f3e6f02266428c56f704cd2501c22f78e8b2eeb23f153117cc86fb28a/yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f", size = 93495, upload-time = "2025-10-06T14:08:46.2Z" }, + { url = "https://files.pythonhosted.org/packages/b8/12/5b274d8a0f30c07b91b2f02cba69152600b47830fcfb465c108880fcee9c/yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf", size = 94400, upload-time = "2025-10-06T14:08:47.855Z" }, + { url = "https://files.pythonhosted.org/packages/e2/7f/df1b6949b1fa1aa9ff6de6e2631876ad4b73c4437822026e85d8acb56bb1/yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a", size = 347545, upload-time = "2025-10-06T14:08:49.683Z" }, + { url = "https://files.pythonhosted.org/packages/84/09/f92ed93bd6cd77872ab6c3462df45ca45cd058d8f1d0c9b4f54c1704429f/yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c", size = 319598, upload-time = "2025-10-06T14:08:51.215Z" }, + { url = "https://files.pythonhosted.org/packages/c3/97/ac3f3feae7d522cf7ccec3d340bb0b2b61c56cb9767923df62a135092c6b/yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147", size = 363893, upload-time = "2025-10-06T14:08:53.144Z" }, + { url = "https://files.pythonhosted.org/packages/06/49/f3219097403b9c84a4d079b1d7bda62dd9b86d0d6e4428c02d46ab2c77fc/yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb", size = 371240, upload-time = "2025-10-06T14:08:55.036Z" }, + { url = "https://files.pythonhosted.org/packages/35/9f/06b765d45c0e44e8ecf0fe15c9eacbbde342bb5b7561c46944f107bfb6c3/yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6", size = 346965, upload-time = "2025-10-06T14:08:56.722Z" }, + { url = "https://files.pythonhosted.org/packages/c5/69/599e7cea8d0fcb1694323b0db0dda317fa3162f7b90166faddecf532166f/yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0", size = 342026, upload-time = "2025-10-06T14:08:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/95/6f/9dfd12c8bc90fea9eab39832ee32ea48f8e53d1256252a77b710c065c89f/yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda", size = 335637, upload-time = "2025-10-06T14:09:00.506Z" }, + { url = "https://files.pythonhosted.org/packages/57/2e/34c5b4eb9b07e16e873db5b182c71e5f06f9b5af388cdaa97736d79dd9a6/yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc", size = 359082, upload-time = "2025-10-06T14:09:01.936Z" }, + { url = "https://files.pythonhosted.org/packages/31/71/fa7e10fb772d273aa1f096ecb8ab8594117822f683bab7d2c5a89914c92a/yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737", size = 357811, upload-time = "2025-10-06T14:09:03.445Z" }, + { url = "https://files.pythonhosted.org/packages/26/da/11374c04e8e1184a6a03cf9c8f5688d3e5cec83ed6f31ad3481b3207f709/yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467", size = 351223, upload-time = "2025-10-06T14:09:05.401Z" }, + { url = "https://files.pythonhosted.org/packages/82/8f/e2d01f161b0c034a30410e375e191a5d27608c1f8693bab1a08b089ca096/yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea", size = 82118, upload-time = "2025-10-06T14:09:11.148Z" }, + { url = "https://files.pythonhosted.org/packages/62/46/94c76196642dbeae634c7a61ba3da88cd77bed875bf6e4a8bed037505aa6/yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca", size = 86852, upload-time = "2025-10-06T14:09:12.958Z" }, + { url = "https://files.pythonhosted.org/packages/af/af/7df4f179d3b1a6dcb9a4bd2ffbc67642746fcafdb62580e66876ce83fff4/yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b", size = 82012, upload-time = "2025-10-06T14:09:14.664Z" }, + { url = "https://files.pythonhosted.org/packages/4d/27/5ab13fc84c76a0250afd3d26d5936349a35be56ce5785447d6c423b26d92/yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511", size = 141607, upload-time = "2025-10-06T14:09:16.298Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a1/d065d51d02dc02ce81501d476b9ed2229d9a990818332242a882d5d60340/yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6", size = 94027, upload-time = "2025-10-06T14:09:17.786Z" }, + { url = "https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028", size = 94963, upload-time = "2025-10-06T14:09:19.662Z" }, + { url = "https://files.pythonhosted.org/packages/68/fe/2c1f674960c376e29cb0bec1249b117d11738db92a6ccc4a530b972648db/yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d", size = 368406, upload-time = "2025-10-06T14:09:21.402Z" }, + { url = "https://files.pythonhosted.org/packages/95/26/812a540e1c3c6418fec60e9bbd38e871eaba9545e94fa5eff8f4a8e28e1e/yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503", size = 336581, upload-time = "2025-10-06T14:09:22.98Z" }, + { url = "https://files.pythonhosted.org/packages/0b/f5/5777b19e26fdf98563985e481f8be3d8a39f8734147a6ebf459d0dab5a6b/yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65", size = 388924, upload-time = "2025-10-06T14:09:24.655Z" }, + { url = "https://files.pythonhosted.org/packages/86/08/24bd2477bd59c0bbd994fe1d93b126e0472e4e3df5a96a277b0a55309e89/yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e", size = 392890, upload-time = "2025-10-06T14:09:26.617Z" }, + { url = "https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d", size = 365819, upload-time = "2025-10-06T14:09:28.544Z" }, + { url = "https://files.pythonhosted.org/packages/30/2d/f715501cae832651d3282387c6a9236cd26bd00d0ff1e404b3dc52447884/yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7", size = 363601, upload-time = "2025-10-06T14:09:30.568Z" }, + { url = "https://files.pythonhosted.org/packages/f8/f9/a678c992d78e394e7126ee0b0e4e71bd2775e4334d00a9278c06a6cce96a/yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967", size = 358072, upload-time = "2025-10-06T14:09:32.528Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d1/b49454411a60edb6fefdcad4f8e6dbba7d8019e3a508a1c5836cba6d0781/yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed", size = 385311, upload-time = "2025-10-06T14:09:34.634Z" }, + { url = "https://files.pythonhosted.org/packages/87/e5/40d7a94debb8448c7771a916d1861d6609dddf7958dc381117e7ba36d9e8/yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6", size = 381094, upload-time = "2025-10-06T14:09:36.268Z" }, + { url = "https://files.pythonhosted.org/packages/35/d8/611cc282502381ad855448643e1ad0538957fc82ae83dfe7762c14069e14/yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e", size = 370944, upload-time = "2025-10-06T14:09:37.872Z" }, + { url = "https://files.pythonhosted.org/packages/2d/df/fadd00fb1c90e1a5a8bd731fa3d3de2e165e5a3666a095b04e31b04d9cb6/yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca", size = 81804, upload-time = "2025-10-06T14:09:39.359Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f7/149bb6f45f267cb5c074ac40c01c6b3ea6d8a620d34b337f6321928a1b4d/yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b", size = 86858, upload-time = "2025-10-06T14:09:41.068Z" }, + { url = "https://files.pythonhosted.org/packages/2b/13/88b78b93ad3f2f0b78e13bfaaa24d11cbc746e93fe76d8c06bf139615646/yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376", size = 81637, upload-time = "2025-10-06T14:09:42.712Z" }, + { url = "https://files.pythonhosted.org/packages/75/ff/46736024fee3429b80a165a732e38e5d5a238721e634ab41b040d49f8738/yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f", size = 142000, upload-time = "2025-10-06T14:09:44.631Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9a/b312ed670df903145598914770eb12de1bac44599549b3360acc96878df8/yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2", size = 94338, upload-time = "2025-10-06T14:09:46.372Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f5/0601483296f09c3c65e303d60c070a5c19fcdbc72daa061e96170785bc7d/yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74", size = 94909, upload-time = "2025-10-06T14:09:48.648Z" }, + { url = "https://files.pythonhosted.org/packages/60/41/9a1fe0b73dbcefce72e46cf149b0e0a67612d60bfc90fb59c2b2efdfbd86/yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df", size = 372940, upload-time = "2025-10-06T14:09:50.089Z" }, + { url = "https://files.pythonhosted.org/packages/17/7a/795cb6dfee561961c30b800f0ed616b923a2ec6258b5def2a00bf8231334/yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb", size = 345825, upload-time = "2025-10-06T14:09:52.142Z" }, + { url = "https://files.pythonhosted.org/packages/d7/93/a58f4d596d2be2ae7bab1a5846c4d270b894958845753b2c606d666744d3/yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2", size = 386705, upload-time = "2025-10-06T14:09:54.128Z" }, + { url = "https://files.pythonhosted.org/packages/61/92/682279d0e099d0e14d7fd2e176bd04f48de1484f56546a3e1313cd6c8e7c/yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82", size = 396518, upload-time = "2025-10-06T14:09:55.762Z" }, + { url = "https://files.pythonhosted.org/packages/db/0f/0d52c98b8a885aeda831224b78f3be7ec2e1aa4a62091f9f9188c3c65b56/yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a", size = 377267, upload-time = "2025-10-06T14:09:57.958Z" }, + { url = "https://files.pythonhosted.org/packages/22/42/d2685e35908cbeaa6532c1fc73e89e7f2efb5d8a7df3959ea8e37177c5a3/yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124", size = 365797, upload-time = "2025-10-06T14:09:59.527Z" }, + { url = "https://files.pythonhosted.org/packages/a2/83/cf8c7bcc6355631762f7d8bdab920ad09b82efa6b722999dfb05afa6cfac/yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa", size = 365535, upload-time = "2025-10-06T14:10:01.139Z" }, + { url = "https://files.pythonhosted.org/packages/25/e1/5302ff9b28f0c59cac913b91fe3f16c59a033887e57ce9ca5d41a3a94737/yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7", size = 382324, upload-time = "2025-10-06T14:10:02.756Z" }, + { url = "https://files.pythonhosted.org/packages/bf/cd/4617eb60f032f19ae3a688dc990d8f0d89ee0ea378b61cac81ede3e52fae/yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d", size = 383803, upload-time = "2025-10-06T14:10:04.552Z" }, + { url = "https://files.pythonhosted.org/packages/59/65/afc6e62bb506a319ea67b694551dab4a7e6fb7bf604e9bd9f3e11d575fec/yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520", size = 374220, upload-time = "2025-10-06T14:10:06.489Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3d/68bf18d50dc674b942daec86a9ba922d3113d8399b0e52b9897530442da2/yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8", size = 81589, upload-time = "2025-10-06T14:10:09.254Z" }, + { url = "https://files.pythonhosted.org/packages/c8/9a/6ad1a9b37c2f72874f93e691b2e7ecb6137fb2b899983125db4204e47575/yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c", size = 87213, upload-time = "2025-10-06T14:10:11.369Z" }, + { url = "https://files.pythonhosted.org/packages/44/c5/c21b562d1680a77634d748e30c653c3ca918beb35555cff24986fff54598/yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74", size = 81330, upload-time = "2025-10-06T14:10:13.112Z" }, + { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, +] diff --git a/views_api.py b/views_api.py index b8019fa..af675cd 100644 --- a/views_api.py +++ b/views_api.py @@ -1,12 +1,11 @@ import json from http import HTTPStatus -from typing import List, Optional from fastapi import Depends from fastapi.exceptions import HTTPException +from lnbits.core.models import WalletTypeInfo from lnbits.core.services import websocket_updater from lnbits.decorators import ( - WalletTypeInfo, require_admin_key, require_invoice_key, ) @@ -135,7 +134,7 @@ async def api_create_merchant( @nostrmarket_ext.get("/api/v1/merchant") async def api_get_merchant( wallet: WalletTypeInfo = Depends(require_invoice_key), -) -> Optional[Merchant]: +) -> Merchant | None: try: merchant = await get_merchant_for_user(wallet.wallet.user) @@ -303,7 +302,7 @@ async def api_delete_merchant_on_nostr( @nostrmarket_ext.get("/api/v1/zone") async def api_get_zones( wallet: WalletTypeInfo = Depends(require_invoice_key), -) -> List[Zone]: +) -> list[Zone]: try: merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found" @@ -503,7 +502,7 @@ async def api_get_stall( @nostrmarket_ext.get("/api/v1/stall") async def api_get_stalls( - pending: Optional[bool] = False, + pending: bool | None = False, wallet: WalletTypeInfo = Depends(require_invoice_key), ): try: @@ -527,7 +526,7 @@ async def api_get_stalls( @nostrmarket_ext.get("/api/v1/stall/product/{stall_id}") async def api_get_stall_products( stall_id: str, - pending: Optional[bool] = False, + pending: bool | None = False, wallet: WalletTypeInfo = Depends(require_invoice_key), ): try: @@ -551,9 +550,9 @@ async def api_get_stall_products( @nostrmarket_ext.get("/api/v1/stall/order/{stall_id}") async def api_get_stall_orders( stall_id: str, - paid: Optional[bool] = None, - shipped: Optional[bool] = None, - pubkey: Optional[str] = None, + paid: bool | None = None, + shipped: bool | None = None, + pubkey: str | None = None, wallet: WalletTypeInfo = Depends(require_invoice_key), ): try: @@ -687,7 +686,7 @@ async def api_update_product( async def api_get_product( product_id: str, wallet: WalletTypeInfo = Depends(require_invoice_key), -) -> Optional[Product]: +) -> Product | None: try: merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found" @@ -772,9 +771,9 @@ async def api_get_order( @nostrmarket_ext.get("/api/v1/order") async def api_get_orders( - paid: Optional[bool] = None, - shipped: Optional[bool] = None, - pubkey: Optional[str] = None, + paid: bool | None = None, + shipped: bool | None = None, + pubkey: str | None = None, wallet: WalletTypeInfo = Depends(require_invoice_key), ): try: @@ -860,7 +859,7 @@ async def api_update_order_status( async def api_restore_order( event_id: str, wallet: WalletTypeInfo = Depends(require_admin_key), -) -> Optional[Order]: +) -> Order | None: try: merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found" @@ -987,7 +986,7 @@ async def api_reissue_order_invoice( @nostrmarket_ext.get("/api/v1/message/{public_key}") async def api_get_messages( public_key: str, wallet: WalletTypeInfo = Depends(require_invoice_key) -) -> List[DirectMessage]: +) -> list[DirectMessage]: try: merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found" @@ -1043,7 +1042,7 @@ async def api_create_message( @nostrmarket_ext.get("/api/v1/customer") async def api_get_customers( wallet: WalletTypeInfo = Depends(require_invoice_key), -) -> List[Customer]: +) -> list[Customer]: try: merchant = await get_merchant_for_user(wallet.wallet.user) assert merchant, "Merchant cannot be found"

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 STw`EhVDNPHb6Mw<&;$Uds%azu literal 0 HcmV?d00001 diff --git a/static/images/2.png b/static/images/2.png new file mode 100644 index 0000000000000000000000000000000000000000..2c67a463f5f6726ebe456c995563d42df436a6c1 GIT binary patch literal 48490 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 a`_KP=y`@*^McFx^wU?f*elF{r5}E*~HH(=5 literal 0 HcmV?d00001 diff --git a/static/images/3.png b/static/images/3.png new file mode 100644 index 0000000000000000000000000000000000000000..833b0f68473c779bd606a9c0d3681ca11d340a40 GIT binary patch literal 54989 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 literal 0 HcmV?d00001 diff --git a/static/images/5.png b/static/images/5.png new file mode 100644 index 0000000000000000000000000000000000000000..71b04ddfc593f811e6b27abd0d28d4af2e9e2fb3 GIT binary patch literal 49667 zcmeAS@N?(olHy`uVBq!ia0y~yV7$)2z$DJW#K6Gd_^f$91A_vCr;B4q#hf>Ht7C-2 zZ&`eBcU6nyh|*iVXMsW>XQPs)tFvyKR$Eugv}j$fXvS#K^&O%jtkJAdf`0=)utjh? ziC)kvEcMJ*t=FPukaMcnxu@5^z_p-14? z=L;++6A!oX%G<>VSDOC+YpW+_N%WU@r+#8Q=81P)E;5^y@! z5-6eA(!;sfz==cha`JiZ$F_$!6kSTQ-wR7*iM*4pF%(d4`FEy`SNfVTTYbGnU5Us$ z%{9+gruH1-SZKd_Ui*uxLm%IF9_{ZqWSdyNL0wNsv1MNT;V*%!ulmb$@VY*nC-7$j zKhF`4h4yRrO)RgF->)uU|0^m&xMuh6-B+`|o|vfY>*F);(H0XY4%_l8SzEo9zIyfQ z)lP}4ERWPr_Zo41-z)GA4CIW{c#g%l2uPXb%y>3w%jV6S(@zV>^GWZDk1&4w;lsnj z>(;HCsO+A^;l{C0ZdSydt5>fYhyG6aX=BAzUS3{aS~_#qEW1cX4#h9`PhGjPW%X)r zv?MoCOBb>~prTlaj40Z*Z+{2o&Y#g;F>{yzM8F;K!86pSCNn^o53bfN{Wuv=n_ zfRS3yAr8e9A5a{fm|?)B+%my1QN)cyG5L^253w3-cWbP%k+jRYu^}+7dKUZsGR?Eu zS2iR*UVP4G^Cdy27e7C&S>HPK(W6J+%ynD+LW4te!t5S52|B&l`Jrd=hZas@J+Y_Z z-)}Gbvu(wW!b2^b=eMP_2vq6W+}7|Z=I2W@nXhAa{rRcz%6Fd^N$VXvxNeIb=hW$T z{rqL~E$-#~IWoPu{NLlW_uTtMj_Vi9%P`BDa#dvgiMh|K;&uj4{`@W`eRbgCGsmp= zi%tIgckaB{yt=K%&$iBsE$hzzs-3D={6}N+$Kbf=sq=TAx_Ku1yT0x2xwmCauiwnN zqM`kKr}pRUy6O@~4#h9OZC^`rrUmTy-FxX#@m|NbJ{QHy_b4^X{PGFDqZ9KdD&?Z= zd|6lZ?n!rM8y^yT^M{jxq0U-dULbZ!%!b83zI2{>@$r%DzlFQ?S28^C`*@1=WBf(2 z^m!Jsb2c*gt>=oEbDxW0fsOqCr~tRU!8v^o?!0u~$Y<)weNXpVOWxD)j|T%S&1ZbP z$@V(x`Az@ zW5FWnuacWH9#5MWw)*O;-|_hg7u0lY*ZN*mz4_2__J%iKYPUwkZazBKO!1p{Y+rm{ zq`-!UEk0}C{jw@!I$OKi<#*E;mz)Dlvd`avw4a@{e*cs^7eXH$+jl+V@ge^^;j6Ej ze`3nmA{ng`yK6e1?t+UJlG986%dP&qJ!!yB-Y7qBb8KO1S zOLX$*PdltlP0unM`0!~~!Sf^RtIO&Y^Y$^D+?QR>D(N_lLG4`J`o7&E67ut_mo0PU z+~#<*>2h>U27|-q^7Q`cDJ^G9=UEjlx?1txXp@JH zp+(X`i-3FKuby?~-`}}-SFnsp-IQ~8{+drM&$}PU*b_S;urlfD74M(#_n95d+GA{Q z_h0>NobVz3`KRlvovt45zRCAkeV@#nFRq)-cF!-<`_OA|uBWm1L(J9wNyW4GmMDHc z_tx6roY(vErt-Wyj8DINp0hPAh$!`2xu@7Y6BMddQa*BXpOi~~uPWKFwEo|7)41>5 zSvk#R{5z(ZNV^*sa@dD#>AJbQ*KPIz6GnywH}!86RU8xxxVOe`@?J|bwFl>Z+}g9C zkRf^I!l@UiZ~XWQ<* zzn1a%I8*MoX_t5ZasPVLqR)`8Vbg-;*Q_}f+He1VVsr79>tgLzF#GjEA z_&Imao?~}+T=6QNfAnF-zvqWa3JMo6-qDFUQ&)L)rZt1Z><5Bdl9NBQL<@OxA2@pV z-@D?;=d>9c($07K#eSXTS?qh3mtn{M+i&e6?@#(IBN<)-ze%brW`oNfO8 z#k#EHg%$QsjuuBADi0g)rDR;BC8!&-0(|yx8I#P58fYT zSg`k5>ZC2nu3vueFWS3i%GaYepNH^mlwoH`_`T0e&)ojo-Oi8u9?$weaq`DX;~56; z|FapC#awvxLYBLXrQP|`?ROW7jFi9j2wBY1ve5DFvXhaK7AXGxx8R#a>R z^DfVOaqrv*|DH_~W|fZn9I@fCd#+}P@MB|^cu~0or zx!2;Gv){AqmEYT7`0kwlQER((g%R7T8QT(CCItTNT=ZdwdHM6LYH!bVoz2|iJo~{u zg?C5#T=?$2ZV)h9XMeSa#fifR?|}l7YmXSH4wUK(Kggk& z;sU81+n5>Hl3E0e#O8>DBo9e)g6dC*N)l>IT-EF4fcoa2x3*@V-y+AM_~p6D6^)+# z2YUpZn*aXO4w*C2fwVdqmo3z*^)YRD$uH2F{ptF9QO%xM?iK+fuF2`sw?4Ww^O3%m z{`R}<-0t76J2^eO(OakWb6fnMRfS))9s{Qc49*T=r6 z9%r#PnfUDTbDged*1c>EeX}+l`t*L?J)@0f^X30-`@Ns*+n=|Knq+y&vlx!|>o$=M<(6AI^D2??26K zN}eii9r7$VjtPIoi+g;9WWDck)-?E|1>BP0W z^2g6kny)Ez_r+%S>sLShxm)^9U;1&$3r8?(eG`<%`Ah&feQ?`>4K7 zQ|wB~P2Gt7Z{NP$@-jdF_Lc;rI|9$dy=9fRr`PYfSii&~zMS)ZsdwJbW6S!#tNfT1 z^7Q$C6GNNK^T#*N`+jcTxVq?(Mr69&CHku3cvLdF~5kcfT*6X5K6O`04FE+gWuh8mIq_pJ`B}a<}!h=l+=c zEVAPI+x)+O-6(Bav*hXNe4Sa(EuJm>cWKuYt>C1N>tB@?I)&FojSXX;+%0`1rhyM0nSBv@c@sTY#i#J5_jiBT2S$FJC%rIw zQT&9{C%fn8$NsluU?{PjlTf)|y>z;h;{M2~JO4>DFjU-N)xY=tm+w8xtS>JFXR(wl z55K#zOUl)_vLM=YNfht)XaV86XYZHFtKOA*YH{0M<3erD{pn9X{r=MVcx(NISuWA2Xo*=#zsx!&h5(5SaVHMRPiq!!c;s~RzKF4M?VE%jFFN0GJKa)||6e02 z)@Qc7x-F;wP5IxS`Dg$4%Gg#-k*&YHta933{n8W1@9eKzA62r}ILJGo3V&$c8+V6*0jg^#B1e}CRS@8ynP zQ|&5e&F&99kz)V%hnE(3l&wD&YO7gvl>&w`}qG_`gYUyyc3&YUG+&k@>`|2#7m(~G2bc+zx`(Y?yF`{d+4w` zbI-R}Atimg5Bnb6d-1>UV{cc96sN(_yOXEQpIMUs(|w}e;onof=T$_$+{kZ!XP1A3 z-*=wc_r03Rj0bWLN{fH`Y`)%n=7UF8_kq_hQYrQ$=?6>*glKAi1r|Kgt;(1?g>-Vx%JkiY&X5Y^JTt&di+0bWg82`Oh zVXLoZeLdXHAF4GqXyugCPbaJU|2rSfr`YoE!MfPpX?b~mi!VY(8ldd~+c3T#e{G#O zBq6oavh>R3QcfI_vRA{O*3a+`0CnyEhkai^SJ$Ry+sA(o9BgVtlH)>->^Zr(Ct!8s zKZAUB4#h81dS}__D`m+gUum%T?#^|vAy7i`OMGsC!oTL$go$#a9FL61ZU-jv3P-4}UKQn!vd4FDfsrAymUnh>tU&HYs$tX6BZOskcU6w0k3Sa$M zdFH6=riEWx+A==(NWSmpQCp}nWmBNY%lD?!a^h|3)h53*D*m_W?xAb$W?~IfJolaO zjM!6AzBSL=_tl@3!M~E(-sGFyadVx#qQE`mz^zI9PJh#0_4yj>`I!%mlKnpHIwbX% z``2qL_rOg(mJ6b-7ZJKh;GL+YvZNPNv&u*XSX+f zW6JjY`*w3?*6e%FkoI%W>~AmA=RcD>W&gAOyX5D%_jXUj7n)Z!`0Uxg{EkfF{>jnt zJGngXwN2P?{drZ<{g_$*LSHWkytTu=t^$=_9-d89g(TP=(=!9 z?;;QV^*&$99_MRMkJ%X)K2h-DOOYwnM-!6Q&%d+f!sU}EFJJC`xc9SrY;MS@Z{NOs zliu||Rxjezx3fQH?)o-2^rm<1-8pw`Z0F9ICO7?iPQHHpyO&~f!U`9@bE-V$WPa`z zS8eUJ%a&f1^PTcz*8jP1J-2da%y~Jh-kk^Y?w#%riOt*@F;VQzvB+q}@YPpeacA!H zGd%wFjmN}&@>g4XD*e2@pZZUjw<%_?)zez3+jX%Uu6@4hJ9Tc>)>)6fOq{Nt`t#is z8>R4{C!hM=nJXTWwKZz(nmbQUM(yw|c$k#Dds0^U)uTE4X6MHoY(4fmd{xo({jbF8 zT*`}H+IMT3JY(CuXS&>)J(nsL+GH*iPR~8MzHODKVF2%(+N$$OTcbjEp1fTB_POoU zJq59L6%5Z?{YopX*FTj@{SvT!x?X8=dwNLBo}loFg0G%!`|_jI`ROTb;k|d8%IdyN zjVO9|K{JKxx<>lWGxASjZzg?tdv#g8+_hxt^ zNB6xc^4z_tX!3LA#T!-?Of8PLrJw#rNH4ikD#;!Bkk!2E`|e5d?<9AX{oJ!$ zx>b{FX^x2NuX9~n^XARgD%G8u@+0f>!mKsFyfWSLj=KI_|MYZZ?V=A2r(}7{xv$Ps z`Smwy=IqivURwKqY|Ou}ai`AY&Pn@dYn~8s<3Do`^}l#&@^|jyHMfp^y;l-uX;Is+ z{aehc^?BTT&;P5otzWT7G4xm6FPE#weg9Vk?vSrMD&>EF3-_)4U*_5M%eUU{Z?pdS z`qRQ&f1mTjU%NCf;QD)xSN7dsch@aBzwzCgh|^`aOQunk6FLdkW*;~K-SbybdS=gG?>bzAU+qP`Ev#&OK*6xfd zhp@xV^EB?n$-UlLaQ0ThwZ)4+7|)p)a6%*@(O2FuVY6($tIqwqUgxc*7!}@Yn_#JL zIMcXv{&e?(?cx7EE6XjcoNJ)CK-%MOs{KtRkG?s^hg&U;1HM~Mx2nDSl51u95hMOZ z@tt#nUal`I`*!PS&5L(&YvNzOielWgwD)X_a`!^tXD=RQT)K5*&F$A|o>}vhbPOk5 z+@5(i=;Az4#yH~{ddAFQU+bm?b`*!{%sE*y)3E;LyH)$-*R10Vo_==z%R_S>?zZ^Z z?IyH>duf(PYSr`YcDJM-ugunDWD#I-yc@ybcA`x}uKV8p{9iBgbTn5cv$GoUn3UO= zrf=bwzM#+8=P4i~Xoc;9p`P-~*o3`d&um8osa8vJ=>{IjR zmqy9|y5`(_xpMZRD=U7^x~v$!=xofM+Gl6hCT+4)Ur_$d=l;8MtNs3Nus`E9eJUrT z)+Cdd-s)b}Xz}yc=d9iBa_i>WJRuH+EyrgqnAsq-<)#OpddrV92}bE>IK4I2s57o$ z*ZO*M`F|a@hWJ#j1=0HrcC0U9<4M?ik=f&gT4Iad=Z!A@hQChly?DdRD8lbn@3i3M z5%Jk?B-y&wm%rclX8Xgv(|^5Py#4aLmwO6+=SphoM!vV6{L(17E@jn+SqFcrOc2Y9 zn7I0br~c1RA$}}>U;Ao*zsks9IO~F3h->V_bkQxW`2{82udmd`y2fu=zUIjXt>3?{ z?6~`=+F@>7VEFxvT(z@(v+O@Fl`KAVP4t=;0|Q64)kVGC3s=wJWYBoR#Sow&l3*8g zy-|&&cf#abta_q{VlCHlo2{?fnE!oJX{2`e9K}PMPVKYVX+A+Ga^uPXE(W86%Sv~y zeHY#3H!b(M<`MfBetW7PJ^8-vs_*TBA77@ohu`wtw*LG&(-4i&#b1`Izp=34bH44p z#6@9B)vupD<`-_bE7xmi?mStW-8gmOv7iO}9ooNrD~t7GaJUydfz4|9^filoQe;Jr zUE8u(Q9UcvQgGw*kf+mKFNQ5T(sC%9!C}&OkI#m-$D0h~nNyZKh37tWJ+`V=HMRQw zvhZaYRx^!kEA2{CqxL4hdARBPcNd}3q_;9pA1_<3B`)$jc=7hGxA(07q`F>wHht;M zjkjC=?%UFEOy5f-FEO$2mc6F`{JfPf_B`s9Og{Hw!K8$pe8Nemg&Plx!jzCSbb;h{M%#kWSAe7HU9AG3r*{g(yB&x)qT zKbvMU(ZP(XkK>7q{ke))MWSA;0xsvH;*(#vYhwXnpnee~~MmeexSG_YIzOza#CdcXV|XZOohT%JcrZAEHwG#U>V;%j?~d&yJrj zHCro)LEz2xodJag(K^gKV#9YR`}+u)ba^|eGB9YIdw=h*a=Nq5@_4PFpdhWM>wYR6 zYECro6`m||T6L)}*M!=?<`-WaIO|#S&4f)oDN{F=Eiurtl{6%bUZt!o+~iYQm4W@TFW(grNIunHNOtsjW?Ne zcgdI6cX#`rG?^|PGWYW8g-ZesadBUW-RJXQ`Fx#U8ZEiz2m3^SiA}#(@ljleVM_C~ zscNOs9DZlm-xoz*j<_RwJA9`pm%sOl%aa%BpL$wsUbA7w;aSI?<=zoUTV4CL@N)2! z)dI5G?G0yV-%q)Db5lj(?CCpCO3nV2rln_j^BnKT*PX&smY?U?ec;F28h*CJ&HF2p zC49eZKXsddw`tP<&C%2L%zS<-;cVZJ2ex;A$SkxxVv^MJt~ciWJE?f}GbM>ewb!q1 z*k1Et+0=zuCR3l+y_J|Pb$D*t@dqwB7451k1-uv!7^>M`Ta|QFX4&PQhAmUtHOj~0;BPvgP zccSBeMc=ELcQ2*?xY8EuQ5D$nY<|wRtxiG_L4oq8i>}U}k&`)P-+=_5EB`#7=juOt z8Mm41&w@G1)30*dd&X{GxI`!Xvgs^;{aIJe>22#;b*+rS`tQr#jVg^_p{=sx>8wWx-Rz`7GNGR$rd$dg6s`?DhY)&1?)yRLu7tDm;6?^6~He zRl7F^CO$Wf-TwT^hP|!~43mzj6;w4Zo$bxQc__63x z{`))k9xwd=WhM^;%R=ijM@ptCcPw4YkQ=^)rF-e_zIT5k*0%4vYigfuP+ffUrG)Ed zjq>N)M1RYk4%@I|)xnJ25!W^Sz9p(<7b|&cPg^6srvBdCf`Et9qeMO`UDP_`cXyxf zgDunT89B6zk1ovZK7F**NNAU*tNH9V)_LrFAq*GHH)x(uVw$7;P243T`=?TD)aD(J zvNK(#d=rthXxO@UfqIom-L|}R8{fB6?`{W?7y55zvSQYd2=_X8+4RK+F$2+$N*gnz+TE^`#Ij0Lp$19JKEZ9 z)0Rv7T`q`-z0OeBc<&2KBHs~-y8`lWElQapOT8HrSi|m|RsDZQVe-ThZKpX8{+c!? zvNDud&7E>jnURBmL3E|c*|ldKKc?m-?(OmUn6`|8fx&Z<^`3MN^ZCDS1nmAYN8ql* zo?Q!dcAkGKe^+XOU;e@=y_>Gbd#EvVN=$5ZtX;imwNeM%lg`!O8$tv{2Vx6Z`DoNy`hKxTKrdDCo6m8 zq+MVU14EPDtO@1ce99(%@>4kTbbNtXO64Z_7M2 zDWQLXUH5OPg9$g9SHv#ct0w)6;oY<;GAonU|GY1uC(97AvWwepH+Ox*?z>R)gbZVqdB+!X_o$1@Qi)d^{abr z$?lWa9A@6@Gd&yitN!b*pNGO$_H5Yn#x|T&TiZ%ecv|SCwBH-t8F~^7BwQxH^H#~& zb%Uj^=cL2@-v?Ko%HL=6_v!TI`~Q6Ua?hZ;Y44^NSB^K9h4HY(R(;&`E_tWVoau2I zJK4*4+%xuEx=}3mYTZ|fZ`&^Dg!*jQJUb`d{N}m5rmbHqnpOpzatmC_&M<*<`#ODz z%~|nAoMdTUvl@={$VY*l^An=}7r7{ipgi_d;NQ+Tl= z?#Al9jY~hecV4-upR`W4mZf3U^9RD)E=zWuF1^KRwrS(W)`B^UR_DAIm}q9U<@U{6 zLQ`J8mH6h8oSdD%gZ1#w;HAqo%3JP+R4-b&?)hx1l^-UDIG)d4;;X7^Z*Zt7Vy~ry zRjo%*Iip+Lx@@DuEt^?4%+9)g^Tv(e$-CJ0HDBDm+rm`AU~9V9`tL!r7D=`2m0i5q z)9n@8hm`EsA4`}TR6L{JyQ&Gar18Zn{@i%3Do>(bN|s?k@V(_lzu2^%9$046ebkzX z>C(|%R^Cg^51fjce*XdEnzyZv7nwai#m&!7X;N_Tn{?&rtxXciQm^YSKD%7?H0yT? zTQkGAUzhUF)vfFm+G+UaVo%4L;P%CmzpQgvk|Xb#pV#5)PbjqQ=<=WBy=v*D>_>-W zD}|0b*fZz5pG!=9vun@V%13G|x9n1>e4S_LxqXrK=C~EwH>N6QO*pyElgrp!YWeSi zw_B^P$ok%^b-Q#!LGR8y-9^7ytArfp&ih=}a`)#I-}a-uzNLr0+!b|sAic|Y&J@qr zt6D3i7j5&ru~FOf{_)GTVg*m)-<-3&ud!F{-0fhcr$2s1F!pS_^mW19xodT6Sp@WN z-1J>=n4>IW#axT*XwR)7w^a1*%$pF)AGY{l);sAtw^et4R^^&BrL(wb|3x`>?K+k9 zyH$Svbt-HQiBk6H<+xGe<`}7wx>(~9bL95=yUXO~nyawR(oQj&>7y2`Q4$ywpUfNB z!F9^|ckNoos}at-L@zC~y14Pmitk*BAKN-kGC16{WMH@u5u}yI()P7>@`iai-s|(^4rR`XuhNAwvlnY*ms|eWyKwgsm7|rn`8r=oy>j_IdGr5% z!4v7h%hh+}vt2s(=A50rvZw3ajWLPc+wL6q^$*mWyIn)TZ|Smmt0r$V>$3B__pQ=; z;onNz!j@BWVrmw$lbDOR1Gu z>tX~Cel1+AH~j(2x#giXn|{w;ZT|1;XYv2*H=L_HSmVx+v?n%y%7)Eq4F=mcZeAoD zGS_W>!grnb;$d;?J)&Q|e);6cr!TR)HYYjA-RIjCzhkdf^;swXX_F^EKlF6w)VEr1 zkKNgkkZ-Q8KJEFTr;<}|%`RL2yv?e0`O`e^?`6eBpPsDO{SkR{a_7D;S)gIInH#4( zfBEFeGud4)D`L;Dtv}UenwK|k-^0S2Q*~?Kv*)b8wY^61_{q+vFL&E4F8Uz5ZdJGB z9=q?{tJj6s>?v8ee6sLqYYV;YUgev2?a`{XJb(7&$+Ol;x3@jLXS@A~mcIObv4^jZ z6%{?!iJ7-FTPJkkl-^6z<3hK-4Q*$%*;?)xWE!?MZ1vT-&F{tY?ByOm`63U@zQ-c>gxXYpUz~J zJT0zgzi4mm&#I&6mfHBMtE>C}yA{*9t%W;tU*2hBE;F|3&2#R=@!l)@AseSXUimyw zVDIw&JvExy54SZ-dOzQ3xzVO}diwXWf4!&Xf(H2J+^O&`S8LsU_I36Cg0lI)Tfe^7 z`@b_Gc*pwLlP6DJ{{9mG>1yllS31+;HEu|}IeX2-{`;ZzyVm~9Zr+*a$D{6l@6ueR zShM|cC*t0{e);5ynSRali*L66`H<83u+gjXTj1QI;@;a^i|@{vGsouV>COA!+7^G| zO?dU zeC5aOW&%zxPCm@fRcN{JnHRh;4>C?qm9=B5<86L@yPZEj@EnKYmp6NUy;}YMq0szL zk$>m6vnaOAbGJ}#Bz7Gd=8QCC86ovtOR^0!C3Z7K`R@N0{Qlc4esSHC`%YVjOpwel z{9qbd+EqPA>2JO9-{@~2m9+0$gzY-S#^4Y-+tPYl-PxCW3N|kk(be{QAiwFpddxdN zhDxQzy@!q7AFt?Jmn@Q-%T?LFL_>S+A+@Jx%IG4k4%U>Lj(JxB`0=l zTYBiQ&91!e4|gjy^;5bo+cKu;_3MvRPBk$NugA4lLeK8pa%P4tFLJBncFcV9K`XD({pHQ_Ilp;=j=oHZ zn-ux%`$w5a7mxETNWFh2^^xm*QN7I}Z@lVq%w6*=^ioR5ID8G85)-DJ^f>OoM6r0 zzQv83N@U_^Shj@h72!I1LHP2^FYfA9tNv*O&glAlivN;`bike~;+lgcC$A(iFjP2{%{u0@n#;DvsFj<+Vf)5~w{P57wq~WZbaa*3JaIM#2TP5o zp-a`}3hX}`7D#-(63oi*V4qd-d8OI&a$B}WCimXsIrE}q)7H<74VnxN-oJ8xXHG3~UbFuQ`;yMu7yrIUq~GDl2`gCR2UfGb-Rt#&{-+h#rnO(}kz3PRd=p3Ir-1{?b|?KFSAoAF_G@}c}bPNBUV((_Fc%Vd_X zHPJHq_F+MgubR;^f!?iWcPZU!k&JBezGa{ClxZTXd5^c@j+L)6lM=0GW@NovV146; z6$nM#jEL%G+?~mna#-J2EBDc|NzA|fwl{X#CR<&MsE*vd_2G244e36NNvB+npG%t= zG`o3i^U|rUl8&K^w(ebA8GU)bZ*H~MpKjJz<6ogFE4}Z2DK@q|daQ5R{;CC8H^g^n zeEhHY!$18^)sADBpUK8>VdVw0FJ4=B9G<%W%Hc8|h6!Eg>QecvmWePk zANY9m<(FT#ta6u?r(S;_6&WqS@Mwugo!3^giLcte#3%d}kDYts)}&O*V)B{yfQhzn{63YJBZ?SoQec%8)NBxgCvJ zpT@T4#oI1#+sxhlXX(D@cXr-$i;9l=|I^9f&&S0E3=D?T*tj-bcHjzr7j3iXPeR{{ zW|jBX#6>t~e^tvCerv0=!>AyBm+$$G?Hjk6u?ib&vrAhg9xh_Ls2=(Ad2~vy?xVl+ zx$3??IBUji@Ywa!1DCK{oo&}%>n`f)nR4EW5*wkz}PCVYFzTV`;5+M=oiqh9ONAv?4efBC)b+Ot=SJ&#UWSy!jW zkRUJhH|X)YCuh3au6c*fl%E%L=5gWIIF8`$vGdtY=ZBi?l{zs0*NNoimba!Zbu#{! zwBAnf%$aKkH+?O+85rn%_U5J|zRPEs519Ep6(yy(d0jc5^s- z)5vjoc*gykW`B=QY&u!;&c-+}Y}$k6W;egG9c*`1I@JA|Z%VVv)v#SgkqH}1s<-qm z+UtDno?`a?)d7KWUVoJ*yxL(L|IqK(&JWIxzQyftfemWp8=@{?M!KVy|DlOeZet;oU8|k_&(5A6z2t zeEHJjwAoAzp*N15*%q6*TDka1+O|6lXL$CBGBo(USm;>lWp<61S6@D~Y1Xb>i-)%_FUnc5n*Chi%ghwF zXO~ z%;VrWQfYU-d^xftcBW&h(V=p*3+V& zPfkvrpJ}^d-&|$}h1Ei~Ws_dUr~C@8z2wgExAV`!eRFr0y`8mlr)963v7w=)UCj^B zqE=q%ZxNO@;>JR8f)~vm#YP@_#@_GOBjDux;rjl6S8s$~sFGV`(C~TJoW-kkqi4%K zjy7)*ShR@qVEqJ#KQ%6i48g}AlrMVD`|@9Wi-6IB{11PXSsp!CRExF#mvzz%b<#H86FN~E-d&C?MY27o) zzcyvTh4SvBvJ2dc3tucr{b~FC32#=yYxUC+f4NitsA|0Zy)Sah)O}A+7n~PZouCk! z`%LHkj7PiMwokU7dh}z{jo?4R+Hwu6%!g1iOVy9f%-zxQ7f)85 z&bs-0zs~jilPhy>~oB>+EWm^%t)GVsmHZwL)*hYuXzvVt%Wv?o{O`h7jmMr zcekD0a$QX=+jx3vNBq4>`>#*^vC%@YF8bM)CYM#|Eeo8dOqmn(VRI6Xyl2Gz-Wkhk4}|D{dUNo|;q4XGMTg?HY}^|pBdn@$?Z|Yw4S_Yk zGo6B*X5HOrVsG4KV=Huie&1_evD~HJkB`LgpFJC~>GDeNu#jl?y_0u-b!7{l{Gido zQtzqz`YDsn<}6yOl9?W}sP%(D|1ayR8ue<8mwb`j$V2&N{l(`l&GNushRp5Sjx(5M2$`IXUv_Twebg|1RlMv`yk6d)bZ$7v!f#GH#mf+3$Hl8V#1C#j_Z{-nHrpH-bDW2vR=P= zK6~iAlGk?T`teqw7vD$;<}fojggsXczhwUG+1hRI_r`{V>T2vi?Hhl1ej-&i;RFha@)JonL-elxy|N#+Q4`*PdE!bUDk?QSMM(`0;+{t7?1s-YgM# z#}mxZ&=+lVsqOIB2VeFJ?%4Xm;oSZjqt@9wop&|PZt7&6%a>qy?aqN|&sqMmS}|NW ztNT0G)NpaM07J=V@h#FE+|};Oco`Tj+vz?Q(_i6J(Aod+{m-v5XFN1+y>Dt&tv&F& zb&uBv(}VFh?OB*Lq@q$LzmdH4`Fzh)o4~TAzMmQ6)vSc9ug|wVIsNtgsxRtir!L^l zziVB?&%LN#ZCl{XNyfITy98KxJ?=hT^=SE~BL`gHc;3tD57kuFRcWv|IDhlTS!-+$ z{qHV6@{sR#!SUQf46XYyP7q2SFdZ4zw+j!(B}Ky zpCxZ^&->aw`RBTOYcd@LJ*WC=HQ&B{N=a?4Rn_0d53%`g=NwzV|5W0e1?@9#yDVQV zJH6#K=fSzUOQpjDo6tVZrV?V>>GqcbC>)v(0q;0d$o}{1uQLwQ1@WrdAcLeW=Jab~lVcW?S z<=I7(o$uC0PX6;V(0xmBe0uQBcPribm$&Wuy-AI=HBV&Qss*OyqNh!r@7$bVSuLi& zw5&jOV&Zv6k!gRcy7%Zs*q@$ndUCq>n%&tyPCa#-${RUT=GD8?X?k6r7w1`ao!f2D zc29Uyry0e6CO5#oC7Bdb!v7d1t$~EI9w+QRRzAUeT=q zIR~RH?gq@WeG4ncnaakyEE`56Ioxz*5^59!D#mebM({If9^sPShd#%lJmIwE_X0BRlpaZJxjIH%P=dd#{ z+zblOPpkD7IQ=!{?&5XLtm%^HCvJGI|M|jM zd!9Q^+d@O{eYq7ERA6$~Ic`I*d|emE{Wz^NJ;iw^JT+E@2Tr>YH9@NUlF6gX$xaW& z_MZzbe9daautGOZK0bH1q5F?ozelHYExnCfiWoLo87n#Gh)=Em$DODr-!(bduZ*GL zQO>bb{H3LG!K!~e#qWRVb5qObynd!j`cOJkgXC#_g`RAGh8w@y3)E-sa{qMqYu%%l zF9I4^Yh?~BRlXP~>hh(`@$1IL+PW^U%jI&}W}Nyu`<9Z>HU@?jQb!hA`^*8kcbi{|Zg7Ma(q;S*uKG1m6b zrOW+d>z`@)A3Z8^eKkYgU$x2M-1W00HrqeXV4H3;Z%K}lxYuT`@K($JDOGEJul-X#x!;WWPnoycdx5#R$?8kwbu0S+u3r@4J7c%f z8R1*U-*G-S%9TlPKeE?6_EUMFc4=h4*)i=j>+^Fn-^+dTTcCZR^1TY%ZYv|(X?sp@ z-Fq)UeYuuk%Juw-!8R3}b8=?JX&Y}-XS>C~@MrhhscGkDnx8GZWD@si+7=gmYtaK8 zF9mn*{CRulxyd>?>FpmZQ|2y_e9*XK$)qpWuUdYz-PgSCzMQR;uk7Jz>%Y`rIkIQZ z!V>qHM~Wrx4zBJNlb4&t@j@(jY)rIa;{52?`_fJREE&phYL^7>HX-PcKf!`-Y_+` z3$9a>c5bsz{@zj?`*tp~IQy>qxmV^eCHpWom^~12aQ-awWoGV=XNL;T+Q;7g{!eYD z_KF=p`jkB_2)yZElYf6dx_4@s{t2Fy!*WC7CT0Zy6 zy5H^xD@*$l3fn_srfpMJ%#CtKJx9Z|e2)P5x70=p0*Bg<7M(Tg;PAdu=MRV*0jr!~6NG*1ptw z`QzA@d#0SeJo)lROjVw{bUd5?&iKp{`(s?%x2Cb!Dfs3%8QXQt%jJ47Yt!FN7CtIj z&pH0Cm#av5JV_CR&ojQlqg|nrV0?Sw!N|;yf zcPWUMIamE#*lv55_4RJ)2f|W$j0_*LJl6dFHRa|+r~TJ=*y!m8eZIP4rf5i-Tkhqx z0e>3gI2m$%uY26SXC-X=_Z!RNjs5JV)?ynkF)(-ttx5Z_^od@%Is=FIt``L{dpwGk zHnU8c!tBq=@ZiP&S;f!F7dadSs=bKhS1vCw{>WO#_I`R(i%SEtOqv2$NThi<35!AnaE z|FcIQJ(ya+s~47?WqR^h)}*tizHB>Xxtt~Zhju(e#hL?4OpiRRGG4oKdVbxT)VbAS zH)NeR@@)LaTBa%HRj0LL+LyVf&i{Eg_1CHQE=qxEHxBOU*z#wsTuD;Ymyh~Cu7)03 zzlz24w9$9{v-*7HVXxvB&R|&ZQup0Q_hk8H=d_K!>ugi;@k#7ix_0Y2=GFWz`D>o0 zr7kdh6!f|LI}5nzT%$d-A2_ zH*d$~ue^NEv2y#me{EMo*jFEqIwH29?!DH(tibob!qe4=UUODGgWm<_}@)Ba<;YU z>Kgger?OXsX>8j#*U9AHozJP_EC0%UHFRG*k1P6yh2Pfede2r~R#}%j_m%L&bZ2wM z7j+I=)o~l2>(7Y`FWd0My;|P>_rht339MOPw)}m#*x+i?vXJh{=RQ34U3JP^@Jf9C zYWqS1|CEE($-f@!Bylr5c#*hX!+t_o%q&{L6fxSEAaGb@2YbTdtaht^$Jc zr`cwvabEA+tx`IVp(^~)(ug(JYNSp-Dtg%N?lRpfXUJdy4jK{|d}M!IGH#as^^ zRNZWJAk9kuX|n}?u*5H=Z49@LNU~qrBvkSGy%3-Nr%B&be$8eK(A$1%`kVKuP0w~e zxfgn8ukFpsB_Zkh3r|f>QjO_4nw2~4jlc3_{$)Spr>#6Avy*Y={H%J8QeNUg%HU zY-;N}b>ildz^*wPYG+R0WPj==i-JL2{BQM@^2g+Im0t$i{Ft8;_lSW(L|dfz`Wx?? zGdF1W-OoJ9_pInmUDyEu_s4g4eY!MhzfbqK&4yoQ=ht5Ndwq%S?U~a=!mSRqNlOa7 z)z6qz&MEI&haMc(Atd;t|%flD<%n(b_CllfDoXR&Isw@m)==l?W;Klh(o z&Y0+sk)g9g`^T|$&h|&ve6X0`YRF!t55eVEo?Hh>tuK8 z*>izqQJb+4$HM14=R82W{j&_XlucZ6AAO3t`S>1N`-R1Sel99_J2Bw;j>Y}E`cF?d zczO;+fe`>|@H$E`5dPg{pz0=R+nhz{`_}u;e4K5%R@uwnrUmS z`(r4tD5>Q9diVD%t&<%eKBO87d)?Ojw9@v#d=dAbtKyzCU+bFtXM5M{kI(rp27i6t zeQ0tVSM~Jc+v;}Bd=))^wt*@8i^vPl40)EeiOlR4{uBAWYhKipicM-WEDG-PKHUF9 z{>MazuB&&fTV`@Paoj1|lEV9*b+5HuWahVp)sHK$+nud+%Qtv&{?+;N{+6BDFJ3LL z5C8e#>rPH@Z>ueWVrl)dt?dDa)zAMaw8_*Io3r9Wdhp_ZE5eHN_bZ0_@^?SmW&bn3 zH9%q6=D8>5{1RiRF<`Vct^bjoxYHmlDB#Vp6uZl_zb7&?IBeF){it+KCBJNbX!*ju zR`o}X)}>8-Co(ZFwxBjU^R-=xbNI1NzdYHLvw!Q69e(@2?qpJ&a<>Rq*b84LSHbyW_l=x-nQC>ND(W?#f}PUS9p<=?lm z5nYd#Z*r+W+y8RytMA!$|JR+mBGY%1^S6ojyw$6MWA;AwV=g_s()vl~_44(02h!J_ z+Rv0yX_Wn~@z=RmBG)5l^|Ok+UjKbj#;kp&=NcJ=6+$gk8|N*vuMuHm2%Wv-pwhR? zO@F?>S-9CsH7R`W^WBrH>WfJ+Hq+&zELkIJTqBZI{sG9o{A0N3Q+