From 78ea60b7b738bd34989b385be31f7876b6885e48 Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Thu, 21 Dec 2023 19:57:33 +0000 Subject: [PATCH] Safe to say these relations are fixed!! --- bun.lockb | Bin 285566 -> 286794 bytes ...sasquatch.sql => 0000_watery_zaladane.sql} | 14 +++-- drizzle/meta/0000_snapshot.json | 39 ++++++++++++-- drizzle/meta/_journal.json | 4 +- package.json | 12 +++-- scripts/reset.sh | 7 ++- src/app/api/child/route.ts | 4 +- src/app/api/device/connect/route.ts | 2 +- src/components/header/auth-header.tsx | 1 + src/components/main-nav.tsx | 17 +++--- src/db/index.ts | 1 - src/db/migrate.ts | 8 --- src/db/schema.ts | 39 ++++++++------ src/db/scripts/auth.ts | 33 ++++++++++++ src/db/scripts/seed.ts | 51 ++++++++++++++++++ src/db/seed.ts | 5 -- src/pages/api/socket/ping.ts | 22 ++++---- tsconfig.json | 2 +- types/next-auth.d.ts | 3 ++ 19 files changed, 193 insertions(+), 71 deletions(-) rename drizzle/{0000_thankful_sasquatch.sql => 0000_watery_zaladane.sql} (83%) delete mode 100644 src/db/migrate.ts create mode 100644 src/db/scripts/auth.ts create mode 100644 src/db/scripts/seed.ts delete mode 100644 src/db/seed.ts diff --git a/bun.lockb b/bun.lockb index 367c336679c53b73a0994811ce4743db01aed5ce..e35a745aa7a0904ba1e8776b2ca85f4b569f3be9 100755 GIT binary patch delta 56685 zcmeFacYICR|2=%~NiI2vZX_Xy-Xcm!2=^+Z1kqbU5E4m9loUj}(ME4`umu^SCWuay zF&MowMo9>w3}M1(GmJ5wwaz)$Wa{tp{XW0X^ZYaCWo7O6+IzqE-tWE7KIfiW{JOiy z=|e^4*Qz#a(AF&XV%ul8*fMuP@#qKj`)<8dxzvXIJNJZDm|Iys7qYLPy@AKh1wG4_ z3f?5ChW01F!4N-YSg>l0Sg@d^?}|JILve`1!=r*?LZS_kW3+-3@)`^*91|8YG<;B; zVUTW*06RjTi+V-Cp%KFdutv!R&r3QNlnn;_i+9XtFcboh0OMc$K*h~i(rSk+x}1ut zEHxBd5*%2-U~mRE2bTgL15T?}?y zP-FzhHWM~Gd|oeitf*G+5N!I3L}At+&OqVths~I7L_P zh`AvQ!=!`FU^+B>qUGBf9vmJMPRHTV?rOZBA)n=~dIKZD^cNWt6&h04V6f>25XQpL z2L(mPjPQhmsF2ubc5;G~HbM*Hjwr{^0&~Jr^$NieBiWuILdllO%7(4dHr7=t%#OmY5r zHxyvl9PE{u_GOHFl@$B3){N>}A4kW83=M|&bFkUkK``UBP3PgE?%_jYybYVHX}yCz zeAuuE!&2B>J#)aU7q9bsJFVQ%kkK)4YiQtMFkl+vUBMV}yd4-5WsQGQOUw8c%=2g; z7#Z2MMW&@+ZSV-|h!7|t%%qg0T6;u!$3_Bm#cDne%=3*HT8$DoHoWW2YD~h(K zuE#`2gby&ZHyCO_pu<<_F*!DtXO+P)u)fxz;cB1_hDHsv5%z%2k>>N#!f88ij9yC7 zJe51QLpJ;M2=3TkI+#&UXsGq?XD}B@4w!E4=xp0(=E7$Elc>inYmYJ`Pg!d+EY=E% z9uONI5o|bT)|TErFeW#C9hgyCsO#~%9jWK{*7er9UI)x*y6ScwFr)uN6HU(q)9)!T z{95DFkl<96k^?V;azlv^`0JDA~2EyS555s~Ri6}<~4`H;= zw$j2e)TsHL(?;`K5qSl$8**Qai5nhbSmLWiVj7t7X$Gdl)orzPP)E-%4Q7XSwbQ0` zlg=jS9O)!9zS0q7N2{%K0J14+`wVMA;Y7Qf#Wmi9DX+H z=Le^Q*}HdRzbb^2}p3<4~J?U`Qvs|b(q%h;9=1rbSza+Hsq^pEf}K}x7T^T z&Ob+Mx+PX?FCt_l92*SvVdq0LMRhI>W|V?MLWbkwVR(Xi+@5ZOxn1o8<3bcaINDvk zp$Li!9Uc@F9kK~JmZdd52?-7?Jap)=DD-RzYzBsx`k;ttL+?1v9uz(_*gbZ*;SOw; zzoPSS_lRKwaq|Waj|`77Tp6R~Plq1{YS37%!%^XpQ9*+Y2HP#$kdU~MXy0IHI!>!F zC?Y5(CM4Jphl(6QNOWvWI64p#Jt8(FD$X!syyhq*8ap^TItb;8q1+Sb>~PS)VNncG z0CbMLD11|I1-m#nc-X+0sPLg7KCn4}QDNZ&!%znIH6f!pC8grEhM$7DlMfGy33Ep` z2ZjYj3_Uo!EY|TNDIoc)?I&8RlNqrBU zp?!vOJW1Nk)$DZGJhzwVy5Bs_?^)RFa0;01JY9hJvtrxNwa^b57UhoHps*A3wE}Iy zbaZ=xmcLKYPO^3jwT`_(K0D|Gn~|yxraw15e+$a9p>wET6l?@@z`Mcf?q}5#bMyky zV9rr*Ft^KA;1XajFc&56fulk~Lq=DIT|~8mqN0N049>7QvO?f|;JbRqzX7vjd%&!} z8O;18U=GYW5efDrN-ywanbyPpu-Rh|Ft0)-!R%0UNaV;6%&YBXNfzdm4S%ci*I?G$ z3Fb)G>w2*j+SH5!7lYnf%eTf)L4v}hm0HC+VD_wSl4d^u7iNW3TF;y4j7UV|Zj`SI zB7=q-3>Q(3k=hI9fRe$C&=B~eZ9DxU&>jcU9bA$(0yjr!4Zc~cjimKDtw0WJ&RqtW z9Xt!>h=M~##0Ete3_+tq+;Pf>e5LC7j17JobNavWK;Xwl; zLJZL;$J5Yzvvw)}B~=?xaoD*1iSM^XtIw%ajutL$ov~HxVR0}=d=nMQf!o6oL+1%* z$l9Y*%pVmMG&D3KBx>~ztzO))*nwfl3)!jVZw50GlaNn-4V!BM`&JBlcygB(p~%?i z7@Ta@kWs^;hJ-`~8|tKK8%GInX;k=ew>E-wFe9)R%#Otl4Gtd|ZZP!QtF7uXXn-Lu zpf^-^pVkpOT^|@UeCTlZnCQ29hh~F0kkP7*HL!EP*3;GCBFG3w22YpXV9xn}^){Jn z;BW4e|6kuGchW~%9b6ghJUpUBcHmKM3hsb=aBfZ@p`OR!0DeAS7mH~i`0$9Cm$vC8EmPHHo=;FK2NYhcb)NOXO7zLM*5TB%#SvUMtCwi+1{ zIV^lkNXYkRv|@L`TtQdB?A<9a%Y_9E9UP8UYn{{b%Yr#ywu`&1H?|i+wo7Ojdd=oL zgSoPcT~OKj-<@DI^w0B)75Kk>9n=IPDUJp_uWBP31!knMEshEciZL`rlo+w-Yg&ZD z!1-Z!1XGW_j@_>k5_m`y6cH305(a?|x`F8!h1FBwW%>^3lUjKk!d=@o*m3<`b7g*& zJr1{S9ZcL<_dvrPwM+kCS9t6AiAQSR|2EF|Le8c6TU+1RQLfy{JUf1<9A;DsS8M7J z_k7p&8xmdsvLa6n_tkyaMy> z3BN|g?Wnhs4!yMET-zd##ky(?-JrO6c$v~*eX1mS_!!?Q>By~zVS8(}+`WuL6#qIF zQwp?3N?`b%VIsV-;xqk$4l-HtNF+3tCR#! zizzQQf3?qYccfSrEuriT>ag-~WX5w!LVb&=2zIsR9G|HxQjL|sIzFaEq&$_tnm+O+ zq&lF6y^@3)WtH>>7P(_ljP^I5uox|S`jo$c#onNA6TBUY84N996jHJpdE3KKy~{h0 zs;!oBtL24=C3qvMSWx;Lqn{&Sv7c(Mjk^^8h8Fo}XlzwdvfRC7Ph8NoaiL#w6fE{3 zuM$+>+W`hEo74`;pJ>&P1;;IP3r@VejMEio9}AvN`TJPpx5%Ljbi9_ATpwEiyOT#9 zcC_N$*n)8RH@3(|CoRXMWFa6HB^@~n6z3)u`6zN4ppH?=s_kX`SxJD_4p-Zzs+Q#K zWn8K_n=SGkXcn!dh74(f*<$ol((!kO;%u?V7jT!y1%^JN$9Zv`r)8%kVb~T}9GlvI zc_Az=BT0dG`POeG&0g{+rLhMh5B>D?c7V}LHCS*etdCBN*A)L|7GqTm#wM2IsN; z^y^v9V5qBFSq;48L9lAV!jLeNpTp`7%Z?KyKZM14Sg#f@xifBY+N&iomBvKHxuwN; zSMhIYF;y?Go_{TTj1!b}s3#TYRu-d+;@`?5x2>S9HcSg9Y>bi)Z8J12#Psx?;@{e0 ztgR&AZ-kPLzbT4y8;kLd;*YF1jW4hw+YccuZ;#pU? zy)f2O3a^uubYF}7B_xKYu##2JOa2iSPYDF8rI*~UisqsygJqnjq_?&3oNs554OMOH zf@{;FB($>_mnrGUxrZEW4FqAulv4cLTZ~vUace5DRD+%2!@>Aq+_dy6P-VR7LRShoL zp|G?ilGW17lme@+lG)KmzJXMIlu`#R6|S$i^f1dip>QX3P}~}O$@gLLJi^8m@8#GU zdkMFbdO#$On%X)m+Utfcp{7)L11{uX&HmI=yWU>LIFO;~IOJuuWz=GUm96uu@q zG}Kzda=>C-tvCl*q_pD_YW~e-Tq^LvA&_!_fP6hsDJkG_D^N!x0eev{VTUKp#Isxd8of{ zY<@Gj0QPCWKlLCO>hFu}3dAR_@KfAs8=c4FBCG_=A-IWHnR5JRQ<Z)p45m`(a9efnO2dlcJr9;-D=(?NuM*JLEGHvOT#vX8 zo4ur4zDh=4vsA9F;?mD7hhPD7MXQ$>`8+Iil$Mv5sVGL=Mscm>BL^VWMRm(f@GDq6 zG1W`0^roGXF~nkzt6L8xvw@FkI#OoE)$C(Bj?`fFrmPbJ(pODwMyi#XdWBREHPse9 z?xd!cBGo}n$ygly)l@iA>flT}kW$Z4(`%%g4hzVyDG2{ zBh511gVjpCcdmx<_uysGWJPMQn#xA1ubOJ@&naQa55aA9dau)e7d)N3`WhNby|PLU<9D zHu?X&+|m2HWWZOCLY1<*>BqvE+;2EX-4za9c#Mg~>}`Ve`lB1a51k ze1nyxqs*oTgR#(+KzAQ`98<`~eF9!soQB1r;nIn!pA50>jBKP8tfuM^cuTWdw{XE8 z;*D3l0dZ!zS%h|4Yj+t_VX?fnuO5Ttt<`q-lHNxs0b|T^jY!*U@pVirEbf??yA*E+ z7;Ru^uTcvO)e7P+sH3+%46MAyK1G%yh0QMBfWrW(0L4%4Cr zH@M4~39A9h zPr%}YVP8c*?M7-AmTF5c$ud%Li8sqLAaYvd$K|*J7JH?=@VldzM9b)7nXy`o zv@i~b#i-y)j8`+8V6j)QJiMekW0j>-&2r&!S{U(6q7`0p!D1)Wl`hQ~rv!XvHXVeB zP&IArFkWjIivdIS(JkC|`g_S^VX-N7$Z{GiHYM|}+w=++F0<_$J510nYADp$OIk5O z37Bq{zk$dlmRHHbqAF#zUH1?=xjU>*$kT$d78b*xt^Q0{>?32tSlVVp>m97-AH6i0_|YfYi-lEJZ7&N`d-r5~m!E_2Ot;8g9E93B9i^EOUZPosO#nraTBz2xSfX}hC#-pz-_JWMA#nXOyu z08G`U*{)|XNHtPRp$pRHX-dF+T=XIG8im4$MDTRHC97IE)ulJn6_*8O$#bR>u)r)A zn58wMUb5r>SS?W!Ry{A%3RumROk6!4BgJ@WSC6W*c}nm?HGnBi$0of6RtL?(iBoM3 zE)Ohanut_wwfr`u7(DpFkc@L}Tcw+aw>=D8EzLgCmbuE(g=X1q-p7l>5pM?=dIwN( zF)U6P7B2>LeV(#(ky-w*K)dTk-)nlA{6ANhJ)ZHcK+0Rmtm7kH`&?PN*esV&K3byF=jJY!pCyG&Sg*sOTC3@_Jz$IUu(~Sr8R|8 z(xoqyjFo1&$_m^1!WLzk39ExT)ayvGFb0RhrB^B$NoINB%8%27@&5=*8zU#NPZDPY zH%`*)B*n$UEO%a|1w`AS=6tlUW5}mqdBVGv_x^WQoz>dI97JS+muU(t+!i7D8A$Qg zN4=>tRa~Pl3V94t-m1Ahuk@1G<_3A0ypz@C zbFQ%i5_oZhZfEuJl6+E>rO9S_QHr+y)t%jR0Tz~KV;?#12HOiHw?uE_24!iA*%S>8 zH#&$w8dBUXuo)L!s14zJ=o5- zO`B1z_5QHhArIG&j%W{7S6JF@*RR`@j4fuz&$k;44I$bY@SYW#R__6&Jv)?ut!BC2 zPFpXsa9cclr;@SNY}x~{i4y3G>DZ+$VcfF8eG6FJoYX}t&D*79Y%@zYcPTF0&8CLC zIfZzlDvjH%WI*VchIg8k%Lpi<^=IcMDUs{kDBJ z6e;ScgY)7m-NLM`@HXyOT++<4`Acnz%OS*Vmaj9#T%bd_oHtl6X6s+263ph=rRVS2y<7W9LM4o|IB160#PHNMS z9*w~b9V~77u|=3tX{jgs1EhF*!z(U9rB2yiOJM7e+riQo5Kh`LL z!fgN^we3TS{lgi7tHonjYzvQi5SEJPHA`0S@cY7|KkW{GzMhA@3@;{5pI2PYn@!a( za1G%#s3{sLZ^iX;V|yf8Dv9TPOg|viT1|OfWHD;-NNKspK57Lo*~)cCO3Ph}lvd*& zQhsXP+TYl;IHWqN+DW9e+!B{e-|6uBhgNESM-Xl zYHy@8$H_KLdVWO-_!hg*)sM>sr@$0goDp2f8hS~`uPQEA%#!0ZCE$u#o^(xHru9vhjHx^*6 zk$?n@26+4xGk=Vl`+H{V;{oQYPXC5kZW6!)tQDoe4oud03YZ6(4nL!TBR5l@4$$E& zfX834J@k2M?(doP7Z_S-ISW86xCmfJ76Ux~iRoYo3n_`|C6#W^3L6c|xpXa}%OTTG zB47em0X)dmR|Bk%yEfHc2j)Sho(!;D3c%x^*a7+5)KV&UQ7dkTKnFYY3^E<>((T;L za=QU?nx0Q)WcL9^rO6K^t<1%BPd&&C*I|HOj{wX+3h>Cy9R4X))tKe64XOv3%NeJ- zS|6t}Ki*`>1X%7izyn;=miWk$5_rQy?bdx&GZ@JBz$4uza}ZB-o6P)Y0QDCDyZsX2 zL8ksAK>a6x-FOS|$jvfr$;i*9Y6-Q19c$qrn-ssBRg~|a7gi!}I;h>ur|13^vsp*v zmjIX7%l+SAcE6&nn@Fe!nHiPAcFOykWt%ahhMt?79ie;cI+?W^>2_|mS0Xb@Dy3gK zsOPgqFY!;zB2Dp!18<>oE4|+TggKvW^?G1!KglJiU2cy8B~fsoUhu!iTKoT%hKgYT zBlQ80Ir1^OO)dg^78e@NsL#O+?IOLvUojmd==o%pUk>IOn*?UoD*n-#<=5%@dN9jx z0CQ1n(rxP&UDyU@giQut9UKAY0iV+I&w#n3UDorjg7MFA4S(2BIt`tf z%)lS|$<%bKnxJq80<|nH<9E#b`_Sp|J3T))Ge29`$t?E-%n<(qX4ZTBVaM%|NtVI( zTz`&8&_Q8Uz{lWpyCj%XQ%1Mlz^qsWTnO9%OvheeM$SiP3z+_zgIT_fZnp#DpTUoR zbT)GRb$~zzUBKK;`{;ImFdGO0GsNLwj%W;++u39=Px$%Zg5WQ}Y&Z#A0Gz7Z{0dZI z*oVOMcNol$od8?8A!Z@Lkv;;mp&!6>^b$;1Q!R_0CSa_^?W}tPupNH z8yE~`{n21{XbPC+1vo!=l^x>G5p01#{u0cQ9Rt(B8NJ|DFdf|ob8%*a(Ko{ropW@4 z2Ii5QS?)P>M)qG|C_+-xRQJ<@SDxhz0q|t?YBDr3})mcw894M+1h`? zrE?WzND9HO46aXINqke%$~ZLEOOff`3}*8dUH_jj>owKu{RdoBZK#=Efh;MB_q5xK zmayoqm7Ytc-5Sh5@q53t+krWZ&br+N%;TS!_4sXL9%TCKq1#}q>bR#akQo<$Fe?V= zI+=EFFdg*O?S6Vbnfd*7J2%tc06m{ymgYfb`Cxmj8zw^Z3^J49dV#^Z{!h#fMe5~p zGf#k#x=v;;96LmW`v)oEOe+`%o zuGM)RnEBQeJ+TSQgUpOAI&ar?GWA{HD&U)7p2AsRI=-v(Jur{lOz9#1u>ALWxg3qH zhNrsl49t-~*X>J(ZV#CHUY+-W8R7$A{4;!wKRkQRfLZP=MU~M$L&M*c;6Y{xzXemj zs_SIVWhR&oZs~j*%<>PwJjl%dPPcP2{XNokGRtK%w4B4Az`Qi)fj7=wQ7}hP0?djf zb#?~x$jx-*qU*VtZI#vazhi6e3_2>OSIEumKzUuy&D1OEdTyp(S=Y(*TSd2X^Cvw2 zn&=t-|F9RHjQ?*spkzKSX|!9EXe{fD!5LcVqin5n8?dA_c~Vw=0qO^fli5kn?F{BY zW^B6XHkp&w6U-R;>pGeB`{;UKFzfZx^T{k9q}ybc56*-5@^&Ty0xLx71<0&049xQ< zTDN2M{M^hAje*YkWA*&MV)`4e`>}#CxrRk~wDTJYSgP>jjYH+f6ELY38>F7{UPn8w>|{i*k)?UxiGv0Hee|dYqYIcfH~&6* z{P)r0zmFdI$dLz`xA^})dc+gQe;+;m`{+?UEB<#+08#aS_2lqly?-A)@>>1xqsQEj zCV9*9f9uhsbM8lu@T)$PWCQEd(j{X>W78g0>zxk2TlTB_%bNslsdVE^@d=}!-<>k1 z^o+&VmhW!ewdU>XM{1@o8oa1&`pw?ieLhtCVxI5$0r}Hh2M@=73NGl@jg3zMB%q-l?oW+D>Q8}gg`nU)6$H&%j-}q~xUlFKO22DTgmyftSx_h(sF|Cd+Iz4~m-l-Pp z{nUx`-&MW$eCeo7L+6R!>u!vn-p|i@(7|xm9a(wyUe53h8uRo!*T!8#U)(#iWXg=R zRI_oqUDJn`%NMHsviQ7P<3{(sJKn?j%B_V*hOc^hYN2sh_gbY^I=1?-dr8+lE}MQT zKVa@p4tHLD?viz(d54KNy0m}w#e>T=7Nx~DH+tI(QV{L5?x?*HicF z&%6|Mw%n%y33JvQf3SH(y%B|1-+JoleBxn;@KK&~#y&rjCw17RV*96Wc{uTER>d;w z3gnCN-mn&r=$mg;)oc8OU}2R4{;=SX||8J(}pJDJ*g zZl8dwWea~gw?Vo!-0@_eDMepOfp$J$T#s-Hu6llRzHhHi&ASp#jCl7U9()q89rlH@ z7S&7*>vgE-#CMUEE}wApUUgu~>VC;b>aQ#|`tnkTtWUe2I6L?1^PG@Qhh9y&a<^>0 z6<>$DjZCb5B+bja!nI%g;K+z~E#kqa)HiT-&-QOC?@6kCV@=89>jF=#h`rnSY1!xX z8&vF@(eFgT2}!+bpS-p{W$B}DTAWXhD_-ZzVvS=OHO@1$dEO(B;vasNzrbaFPg0FU zQ!qYb{_(IM)V$#Co$a2x$#V}bD${WB<%ajo7m_QD4ym+b__#UNcbngoshjS#quBg0 zuP^j%7~e#>JF(ltsON)go|v#V(81(ZFBz^F;&R|KAKfCvmXhVZ^6E18dZD@%E^a!P zeYo;xcblb5`LN8r@~=@dw(jt!O5zj^)Qr-n5>^Icu+xBT{z!0L{B-y96z@^;Z+OP4O2*San{ zcst?w4d;v9i_F^O-nLr48P$p!zuA&!`;uuDqQ+gKWBBEVjn3uv+jg;I(PYcx#l4a) z>^i%3b+_+4j#+=~KFGZF;+hVjBLiNyVl*e7-HOCSipU>@h?Sj4+A8wj|_@(QXZnsaGFC4FPziacFy}K=6)~W7tw|0-; zwEJRTSnBdwV@G>dc(dDQ%%~-A_sw;CdZ|vZ_2jMU(~{^5Jyt&+bs@LoOCP>p?^tMD zF=zXX)M`&#dem;=GN)*@&$ra=+tGDOjoS}bwLMX`$}LgU_v^8D!y0bd9vNb4mL_-D z+vHwy+PoV}f>poqs^5#b{qDB^@buaIseM;k$DTFSYp`bFcRtmVx6iy@>|0ab+W7+Z zk55?q>hOn$D@NC7uS^r|o=iDCDBq2FzT2m-S)`1)S85DKAzzaajtIum(Ew+x7KUzF#6%@MLqp* zS{l{NYwFW2aLjjure$`j{JL20#NOVUdt5L5(CM2>_p&F4!4XeqPTggjQ?S+k?su;T znw}5vem||d!=Q6XL3=L;m+HIxmxlFUf8EMh(fL5BM|Vd~N+|GUqXmwW>{@vS`d2yF z-YH>mdfLF4#%(f3G*BJetB&!lfscoMi%*jG#3sBOu(+uCrc=U}_7krd(z4b>gk=u+ zZqc+;Z!b0+H-F5+I#!3tkIQ`M_~Dc97nQl6CJtJUlp7H-=2e6IBPywmCDrkjk8W|= z%}XxcdvSc&8@qdbrzw|OA0NNJ(fBXRPFqwV<5bqBcPrhL5RpIoh?(?d><-PLidcpf&lNUMDt zSFdeeW@UrElFy{t_g{TgydQeaxBQYk7T2xc%Z#&Hm*Vc}@*jeb2Dy}$JI1(la}ELd#j#&O^8@+x6HwJGpmPS$r@dXN6P zpi-2d!p9rj_Ue1c>A4*TRqVVY;{5soDN!BwIUV@HdEChO%kLb=-P%34;hNYpsq?Os zJ5%)G&6yMG-91;ZQmtFV3eWSbH>dyH$ce|dB|PZ3s5X3I5j*ftMsB}8Z_oc)=-~J1 z19r9lv_ngeUuGS$7TB23&+U! z{A#^zI&%4|Ggo@6ju8hqzLDGUl?hV5E=dIqX~SyWf4+Kg$eo_etgf!+PKHDAO>5V1 z*u7*z+whh4!=|;qn-=?H^9!^4G`v&o@U!gL7uKfLdwt`aj|+v zTcJ4iiym^<^mC5E*RJZw)S%}tx4b!Rh#vB))cyYTFAT4>Ea}Fe9}3K>czI}YwRZK_ zE498a-s)DNmX^S0s^56^-FkjH-*(uy$X@f)su^#3c#ry~Y`?7u6P|3Z;F*wiB2>KT z-@|2aX+v_o^+Rv2Hq33bCUM)bU%ok4bnT^{gQ7e>C6dnlK7s49~k-iWfioFz) zyFhSl3n5#Cw}sHFD}-|to(Si55FENe7~c*;jyOeO4+Z!35T1#+_7K9lL&&7?TvYRe z;M4=c96tyzMLLC(6qZz(*Y5ZJ}oPBI$BhAze)Vo7f(j$NVH8AU)>C~f*c zIY7l^6#2SAc|#?#o3Wi=UaSS%VIS5or+3dD(Ldel-l}$w^=E(mszYGvC9e*PKD%1O zZ|Z>wPOqw;ORQ3G@=V{X*8#mY6g9^$&FU8a{z0h^p`QDChd1>UiGfBZtM85-J$D&< zAGW)7dHv}LYmzT*ii(b(FuTjt8NCmzsruoIkuUnES6}wz>q#H3+}QPNcG3K6+Dqlv zow(H{b>`Ybzg*=fjBIzea_-(WA1r@a>&I=CHr;Z{GxLHxGQ7oCt8VuXSy*Fgo=5k` zx7axH2gUKn$f?eSqODYwJJTD2qzD6g%qZf?Lws{vX zT%z#Lzoe};McnQ9_W1e&eO^sH-lWXDy`hsXMwQ!l*=Ww0pZ`R{PvxWEwBBy-QPz<3 z?cP#ROU@Rq%@0l6x|iQ5TzVj!4*d|$@jVb=N254RWe*kio=^%I#h9K@!umtWq*BBv zs`rB86a-~XFDS)~B7@3FDoy;MlrV~!{!m5_fRaO{q){{qfKqiJl*9n60B4aMz(qsB zuQ!BJBB3`IO)!M_6kLUGA1;~@2&sJ_lof9&JfaX72*FLH1VUIc2!dl@2o;2XUkGhN zAsnDkNyz;myrB@;4?-2OmqKzF1lRr$s)_La5PF3}I7gv|a1MgtFc`x4APDZ_6oow$ z+y_AL5OD(_gbjg^NuiFYHV}eS1cW&QA=DG;6i!lT5)7ffm=O$NbR>iv3SOdN2!yIb zAtZ)CXehENT&LhS2!fAD7zAPZFbMA{G!ed`5WI&&NDYNx5pO9xq7WDcp_xbtgRo=- z1jld)ErfqKgf>wS4p3+*381p|#jcAvqd?>ktUOB76vhUNI2PQD`TeBOo}$ zLKq(b!B3o`u!n+sB!rG4E)qi6NC=q}I*V#UAvleKFlQ))t|FbnNeWGdLFg`K41+Lw zG=v-qJw?Oe_)|3wLgH`;{vw;gbqLlc556w5_1dH^^LnirROW#p`~Ci2=RFTvXSb+i zvW8Bme8_Y6ouP-mZ&dE**i(4ndFSlou(f5&FP}TR_=L5KU-j$vI@hA_o%@{3(+uab zSbSmA+2F~E!!?mZSGcs~Lo=qG%mFoH)EQllUQiMJG% zjDrvu4Pl^2iH6W-JOsxW2qD5h2ErQ(2PlLJITk|l1PGC_5W>Y?3cailTt`9}BEm;P zaEOO+jzXkx9tB|!h4G^x3=^j)giVCtJ{rOZ5jPrw(x%!z{#E7B>9 zo(!SM7zm@pj4=?ZPJxg^Ax<@ifjtgr$X=>2VuNO7ze@oGYIb~ScUI+ z2#+YFj)yQ&yrr;Y8ic?J5GIS12@u*$hu~<1Fje?lA-th*fWkB($3sY-0UBtr0B58*w9+rsw?2#+YFegPp%yrr-t8A9L+ z2=_$F3J7gdAULjs@Id&lgz$#K0SXU=oCG0x1BA#V2-#vUgDwUqB|~^G5|SZ!Z-?-n!Uy4-0^t#b z)D&#FMoIjff-QH+4k&>epx8-b!v-jAc0zI72*o6cfQ?YzP&q&)uO#wqf|9%oO5`Re zvLyCV>9re*Ybuodk{Fx{#UTyKIVz5laM=uH50&wop%jwDX)0lRptx^=QbZDCwm@;( z3ni0EF-cV43gsk~Ia{HWkVFQR(fgn@*#@PgBxY`dQguI+94gL|XtW*5bt;M5G4xU* zdpm>kB?P}65L`vV4r5Pa8S$J{R`~7&l@m!MH}RHKUUc3CsvuH8qRl~6b=-}rm4yFp z2yZAHpio7~X%LbRL5NI)P)+Qm(CaV+*F6wwi10lS9KMEd4uYRMUr6hR{kU6Kz5CAn zV&3JRi^gAkH>2sbS3^Aa=Y87zm)oaXHA-4270zo}e!2X4mu6$;dt@k1Pp*|WcbLDUtONcBXu{UA>x$&<6+RJ!k^SqY$LT2^4Fl&A_yds&!DTvzD8GlMUf+n+F1y(MVbEh$KJJ_A=vzJ=ReXW(|AFrJ0b z<_ZMAZy|(;gl{3dq41tUsPMf4A^9qV)GH9e#ajx!u0aUA3So#yxeCGII)n%LAw&w} zH3)ksgj|C#Ol+eNmJXrBbqFIw&~*q-84!+9h!#cCA)KTTn+_pX9Hub(282o(5Jrg+ z84#-8gm8sIoN&7V;W~w>Hz14^mnclngi!w`gz;kHO$gq%AUvR86?HNpJfg5D6T(E1 zMPbQp2rX|xm@F3Dg3#s;gx3_Nie|SVyrHo6HiT*7Ifdjb2;J{Mm?4txK8^k(P;S4?)YtL{g$iCw(F6JOZr{Ge|2%7AZ+I%m%Fz z3rMR)HffD$_87EQB!I-5CurpTV>Gf}_&$M<{5^!!ClFG^TME5$AOwC7VWUX-9)iPD z2#z@rQiXpGggq1vP}m~mrx3!PL5O?`VVl?s!MI%%c?Q~%7XHk*L&BYa>kA_;aN@uV z<3QuQG`E+=u}0(gw8U3NAIa#Hmj0u0p1mo@9bbh_OL}EoZ^Tcj+sn59eRF-9+k0an zBhLCdzZyRE=vxkUQv2OdDVs-2kZaAUD_zTz0VGKsJb|rUwUI&JON*XqJvP?Z}oWX zzpe2E7fxH?Dh*TH_qJEv_i>UOKCvXKU+InKo@)EQwhlUKeHG~IY!;Pm|Cdzpv?3*? zu11quOQ7-9s;9!vQdLLW|I)N+2fpIOJ}71M|9C0HeYg6pC$$mV|G_k3ciI=PjFYs^ z|1Lyqwz2BhzMRz9am04@%U$v1PwIncEvcEdI`C3ZRUDgQ3*Z&ysrN|CCSG5q>LJ5b)xTYL7W zej7}+#ibOfm^DzB`KcRk>Nxu98Xw0tQWboaN7wj4ogeg1>-5j%^0lt|)pM(7&9Kp3bhSYW!w?*InrS~N8LQ@?P| zuW9p$g~0as<#qlf1M}nXhn*_{)aGb$d}f8n^e4atDmbP=qo0z%MG81(>gAk}KBy}A zO$S}$7rbm=c$%$i{I>mjObNflGY1;|mjdkdZ}qI!%UMf9j6qj9Uu$&H73m0QoUgUI zRt9N)DUegMPS?sJeN>z zHtJeMq=Ny5oU5GCssu2;{P;P4e1KYIU;+{h`DSSNr+yDOUf1~J1T0q-n5b*pB)mIG zu^KR07q{yL`8LXDy0$~tYCz+6$QbgS&=}U5fG;}3Y$z$LN@I8cc2#F0n`EN z0`&k-fO~`q$OGiH7bCYwpVXO-!OsNR1AagUpd-);;HljW=nnJ%dIG&fk*!iGYY>t= zd-=-`4}kB0hXDUKY5pq2H6R_x0B!&`flS~Qa2q%X90GO#yMZ)dDKH(F0n7wu0}Fu9 zfnh*vpds)|!jFXUXGi#xB>dfy8^BFq6wnH24YUD#fu=xnfIkXU5GVu`5!qX%8dg^% zYXa^-Ex-fdPE!Y{3-CKbKLhW8Ux4?(ufPX@r@=nZ55N=PKJWnG=K;kB- z2LNtFX}}&}CBMpju! z16l#ifaX9`U>V9-z>NX^AM;*-H{b)*2lyTD3&2I-60jdQ0&uJ47tp@|Rsbu3wLl86 z0kCewpHyHbFb9|m%md~F3xLmog}@>}029#IXTU5V1)bUeYy!3biNH!g0G|W%fZ4zl zU@8y~Oaul1A;2Jh(j^p$FyI#~>R$o=x(R!-)B*UrJ-2|{Knvhgpc+sfXaew8r|bZGzy##sCr$W{mIUlaL)pM%;0|yL;CuHs zfRg~f1SnD*<@{2SDam zc?$rJKtZ4|zz?^N0@kB}wLm!10|EZvM?Zi+6w(@K1Mni!0vLsIoxthn*iGOZ&<Q0=fY`fnI<=5CHTB`T&8zrvQH%K|x~+fkgn{ zGROU@`h$04z+-`MU8f#?p5EEIMC^UKNQfc`)L z&>I*8gaTneIKXeBHwDT9{BeL%Kxx1gC<7D&iUa&bl4SS|26qNN1^DX*cYyoA3jS0I ze-vaJunX7?qyhVY{lEd>AaD#g4x9i^0;hm8z**oN@C|So_!hVVTm`NH*MW2(1GoY3 z2SS3-a4}#5(g|o^{kAiI{HGmOaC?B)@n%4CpaoC@_ylN)3j8gGN4bOfD;PwmYR2-&48l7XgJ{wVGMNM z+r^>*-p}!uD3X9x0Pov20lZh^W;Pj^0n7w8qWlVA7BCP92Hs(y?|~11!5&xIv1n)< zFdmoy;IkL_ja2P^YZ92ZSW|$h0B^0P1C0TGUgtW%4<>vAoB+m)wcDhgts0}>g#h-K z;7t&JO~YoB#{s;vvP0elxVs1(2Mz;iK(bK`-XpcGy8wPZ2NYl-&=%!we(0A!TR^+^ zmzX&mXRiv}SXH+2jxZYbeSnu+-mcaJf{`8wRE5sV5yMab%u5$9VZ3DX(#=bFOMqJ# zx3cB{=cOrN0l2epOY;Hv&DDkgw>K}Kfe~@##hVv#UeGz2yueonssdF2-Usl0AV0wK zj@zISFaRGwcYsO2ZQxeg;k{CC``{p?j{}(ibg_Z>b0Gza*0B=HG0=yA< z2mB21M&%9g6Yv^%1-t-wbMg$h2iSZ(MfwTAy@A{PBY+dd{D;7Izyko6gSKiRTP7>y zPUpb>K9|-TX_le$+~wHm=c3L*ymS9jr6TN_tvk$pDV`seiivRtC5KAvdhWa*bz3cm zH1nT}$b(WzH(MlB3Gy#`QCp;*i!3y1<%I4Bc=6-4E)T$qAkP3^2=f7Kkqd#Jp|f$`%RE zf9`pwPu68*^ttEsT0i!ljo2!)p}(7JHpB(SmnK|bwuQyt6a7y+XRBL;^Ka|fUyUmF z)Y!tu#%+<{>mtta|EX?ml=)+X*oh*%rrE;sPtF(}Hu_f${hf18L4Cjz$bBl>qRW9> zb2rX;;f7cb{Ktm=X=Aia9Uar@AL}xonr$K4I*jSIew<6&Jkr76oszkyfZ?;%vCaKI zMbI{FzwaF8pS{cN`0v7IYs|KT{avJN{&JrU?5u4^wE5vci*x=tTK1gb|9$U%>)aom zaXxvk!;srX|DV>)JwR*jg<i`Bw{#75{Pyp!Wbe0Q@avUqFA4;6pn-&4)GZf$l&@pc~K? z=mK=&`QI6dFL4U?0>^`UgVVr4;Ql~Apf3;z^a0qwX5^;=HE`Qp9pG=>@^^2Yfr5ZN zunlFm0tJ9zU<H6R;cFc2(|0^S5{1X2NZh_gey1ne+# z5?};g!Da`409f}K_$iPBd=Kz3%MWua`%9{fUVKoo#Q~VfD^zSAOpA!oCUrCZUGz=+sp*49Q6$#9k>o$1FiyBfNz1z zz$M@ma1^k0>NwKuz%hW4VT0`KMcqCPz5tvD&H?Pe8GvP3hd_C&nqVbXrc?Ivj}38z z)NN&Q+l+`U&o-|t_jhTQXH;0`80Vh}itO1bbbZibN)FO zT$Kzx7tI@h^ZyI*4)_^(3(&DGluXkZ8|LPeyHSpm<^HJgrpplnWt6yw6aez`{W$(! zx&x3G;D%Bj1-YS^VCUXcf}!PsmQM#AIU&uE)8Qw85#VK}1W+D++yDzeKiru36YQKC zZb*fY4(9w9L!u~91SqU??%s1WbUpx1$ZlZ1(U-f7ZPY=~OQQ@s&>U$Oy*xX?0r1*a z3Rnr-6>Q}r@N$3~P!^yA7Nj;?XPaIT8XZ*tmj?-eGO0NtwM|vc*7T`*-s{r)F z`jesaeO$gdJR6t=%#<+yd?s`Zm=0koz_-DN0c^w_Ks`ewcnB~U7zhjiIzZ=B&l=#i zU|*mWP#0(k)B-vpj~BB~k!}Gr2a=#Q1zUh7QYfB!Au$Ld-w0r1eAA!-(zO9kfNu`e z1L(Lu&=}xP;x_^s0^WcbXa=xM5bEGo({) ztS~_n)iev)98E!bGB6342(YrvDeJMEtt=a5-D$vQKuL7+6QBez19l-WJ3kk2k&59~ z2?<7jEwBbyEwa9mI(Au)WHOKfqylSDZxeVUP#tMcpejIp8?>#!W?+k+&pLe1+;EM5 zup3QIn|oOrV>H%HldnjX?C_C9kL!{%K7{CdU5W>tzAl-Ig}b(Gu;co>=8~~*y;}8a z)y63$jOi$LQj|)U>fuws9bq}~E!hGH?omT_*B5g_YoK`TT6G&X6!Ga&Y2z!A$SUsz zencQtakr|S6DZWMLhywc`crAWerQ87&s9URctvYoLZAB6a;1h@YGtj$%;u)VY86(8n8&bVed`!=7)Um9oG;VSc7x=1Is~$&c6)#zCrf7B(P889b zlqk+U0BscWXzdm$H_^@^kqN65-zCfkSEW*{w>LlBg-3yXJ=rbXHi#mbDE>s$AiWhn zS(3Bpn<;sg8k$F467kDQq&;?-`sEPRsg36A;!GE*neaUqpW{O>RtS$`f+LGOJ->{p`m9jSPpIt-**xTL+O!B|k-39)mM3KbM9??_Jg%2Z%4 z^r>P`I~Pn@&K(T*t#CtZv=I4~-mOP8dPbXHcdo5CPVWGG+7}U9pTosWaUe?y#pmWL z-Nj`3V}7v<#IK#PvO@I^tMLDHsWX7`ks|u8G_llkM~| z6uKul*WZls7DNI2UUj>j%d_Da3Sil@0MA-ht?tq0mp8qOzd()`a^U-!2)u``r-}ve zfUf~;Bw58Vii&tknjqZoV-{1z*!u{Z1u^64GA(blFZ@<-Uk_J|Kf*RkY+*U8c#m@U zzCg(bsGKO;J&^qB|7G9nvTKvE3l@RD;Mu!-gx~z)sX8jPYua-C>tWZfg+1exFn))Y zN{CXRQfpn+--C-kIW!=lS=rQ!$V|dBP15_jAc%XgAMGQjo*q2k1)Bx<+Y}FoLu(A zL+MxMH00$X4V6W|$LN5wP)Mc4wpLidcOFYF#>(Q|W1NQ#Dr;x7lkj+gHnme#^m!tc z!)Lk2Kf&xeiHYAM*nc0x&%}o(aPB1PeQzsX!}ys<{a&iq#1_W*YT6!{_4<@y@`52) z$=m`l0fsqxPOqBPbM{BRjFya;7&T|9aLs|=&7yM-{O%Pia?ru!VlS*x+i(%#!aq9w z+w%dhE;_3tR;wKpZckC}obdU7YP<4)sH*P|?+xHC;vfSIf@x}k2nZvH47h;^BAMhG zxTGi|u_&(TU}|VCVCGRX1vQs6+(_J)vXVkl(_AyO#Wh7!GuPkezWW{n<4j@Se*E)h z-Z}T&bIv{I+;i_ecVLgR6n7K4HjUo))@%}Df1Y%k;rUbTTNvgZ-rP{yE*LuT;756H z3)W$H!-97|>IVc^$J|>`Mhf0Cvw57ocERb=G)E>5f+y&Wqk}*|rSUn2mk&G^aW+kz zdc~pUt;H&9UlwCw$-Ah2x!|lj0R+skhEvlTZK?Uam&%B69S{v5Ipyn0!ZS;n8X;mE ziZ2&5u5N8O@x-}fzn_yk!eGSEQ7(w1*nLB}G%y%IN4i@sGL=LKuT|;CvPV#3UHGv%@-n+tI%n8x_lq&b>1{+;`F0gGR`YA!HcC zB`BBs+z>wUjr7nK%Zy02dT!gt^6lLYwY=KX2yp|1siu`f%eL0<{hV)v_yWQtNFKEE z*$=rpI~pMoa+@KI9@nhzuD;J8vIGMFViH_lH0Dlz=>6TsMxy~?s>)Vv9FfqV{dgn9 zpr_ceT!Mvi^Mk+Uu50KN@uv}Kjojzq`v&*PtK;4`LUzf7Yc$Y%?yz21VuT!#sp+Ci zw&yP>oM?os@5(*eCb9ddpK5zvR9ovqYQWF%cd#qz?;*=P3l!!GFU30DeX>u8S69TT zD{|w=`c?~Kn{P>Djrl|$L+{-aoV8Zr++GX`1LxbVI{Gq0fLr6wF`N#7xULm2m>2A> z`{65n4qxhQB;FPf7Uaf`Ecia6Yxo@_BrKfj-G|G?0)sJj`<~Y)GgbM2G3rRb@E0FW zo$d=)gpzRb`cv?erwi-i4~~h>!mtQB+E7&6vdB0-f(~fq&kOP1L;k!Wg6x~gpGzVZ zwHDQ6|3FY_uS7`eCByXJ>^(lPYakdW2C*CYJOERU-MF!wTJQezUjGdbjToNYXi#IB zX6J5{V-KPW9te$vf!!!iEd!=?qob{n-_7ktzdaCIHOm7z7K@*cLkh$ulFD7tLK{gj ze+hnqZzSop_}(#+mi;BP66(6s(MN)&nKJ9W8_6@By>sq{t8Yy}pi-ut#gU|X2nwsZ zQ{Y3Pi?F4;)Ut-sl42hUUJAV`Z(Xz-qxd*BUUI%{{BFmqQp}R(zR#lQrAJ0SDv}rt zz4b_FE3>VkJ&yzj^R(q*^XWlHZAJA5KB9{Bj|GRCiUOojrNz%oUkUQy(w@gcqkqJv z$u?pm(mxRzHB|^();Tw%%EogghBiMHT2;5LId&DB82I!Bc#!+8DxM;_Wa2Ve>9eU0 z{}*;GxsiqbglDlI=)`I(NHAr!s)XDoBrOVg-AH3CdhqE`-Ncuzv5)lP<~V;z#E3ht zpR|EFvK$94|3fcIu@?PYhrGrYa6QMhS`lz;(^J`Cv3%CjZfnumuLuY%x~Rubac!1Y zwhY;voCGfG&0}WD`3pCkkIX$RSO<6`g$kgsCxV(>1kuCA&*}+~*mM%JxZj{PziA%H zNPZk?gdonY5{@+Tm}vwahBN{XK^j5qMzJpN=l!o!j)_5*=jIRzG=E(dTxwW%UK)~_==NWxFyV=B_fa%B!hZX%PtR}`r z;Z7M#xf|K26|OZxVShT$@JssBMqfOC=}-2xswWLol{|P{2YwW5Cz?b>nV>1?pEOa8 zS!dNi8eT{A(>)&}F~jS;1HFB24&?L9`krpbmMu8GTXHaewmN+_kV@-7TKW0UQt(h? zRI8~vpT*LRy46>kJPegAtdcU7zLY-r{fNSjlQ8Mg8PU@sFXyfxQg-B2xrwyqAQZu$_Ze_ z6fFC$A8ob~y{hA=)iDlJn^cU#)b$kIyugH5C0{v^P@d9jHk4F zTK~~e_t6*Fr(KAH8PGfBT26lHM*-K`MH7cSBEY8%NHJy7n4{f z-35dl5UzHN$PF14nJz=v=4=wp(cwUvpWSIsG~qiHM+4No`<=gQr{)K)Ad#L#cXeX4 zc1IH5j9%U9!h2&QU+E4~IG<ptO2-nyqtWCQC~5*sYY^-!PJ1t>@B{CooJMA3vmu`N4UEC>|+gqCm7B|Ke+;xvZsf^L30>kFS>PE25%DL8b7CMHsw zAS{HX!QK>)|vi2@*Bh^T1%6 z0)K8^7$FYGya5cIcRQw*J86sBiyF0eI`8N8F*hgld*=9sU~Q95UhPFceFPv4&~z!D zjq%Lb6Stv2sDB$IuwG`Pv_o!tG5g$@EivEJkRUon{8&0I19k01V6ZczMmGK2V%**- z7OVrk19YtI^>jK444rKTr{3N-s<%tlPa8pl?Pr0;UMPmiyWi`>v%zs1W*xrh7h7S? zGN^GdDjc*(IB2jSa+CV*EENuja5IUC1(2KxZXtV)n!T1SW)Oul)FB~vPQ*iFe1_>D6 zp`bZn0^heh=n#A_A$q~L632ch1hP6gfhLE7R@nqv6beT@Ig!VWHf!|i3QV`Udn=2Z0)kQ;;cn z78P{GcufaJL$q;x{m9Q=O%KIO7#Mm#D~!V9u8?LeFxbgi?{gDddTIkv7Djl(JY04V zT_L`+z3o5O4T+w9#@!&%@MWp|=YTi>vMqOuP&cQP6=2Cp{)t&Mg*n&7SrqoB=%@m+ zRJ!3Q+?+)h!bK0^(X2%gVyjx}+5DJ({%k7mi3W>jlh12-uAfb1eeo=uO?h#mqYY#_ zh>zXys$@2K48-%yY&sf&=dIZ^uRA1R7qgkx>o$7OzkE&^GjbNQF!r3dV<3E|5dAT6 zZ)^(5SAQ1QQbs~Nh(>cJX4eUwmhL{-wXOsSV*VzTN;wM`-=oRV=#TT^$1A9u6%K>I z;j%eg+vP>sIZJB%8Yq#FEaM3vY7jrEJ#hZD!b7W#5LrO_K2mfO8qB5CNOU2;bO&2z z8I~fU*_Kb{P#q{kh?+;Kuj8puG}W)HG(o{v@OsRr(jG<*sCJa-_BWb!%Av46KyQ;n z@lkko&!G#i;wfv~22=5%9NGwwHa&-j^xxn77^WshK$+= z=%gk(QJkx8*Ndh!pxByu4L2Ab4eQmR@woX&3BVl_3S>lpk##H5sWW9mtujT8vqPe zO_LfndBcIJ!S#&HW&pw>uBQ3rCKqy+HZ?-#=F)Q3b_Fn4KBMj!&}r=F-<>m3-!4P4 zR)67eRyDVS5ppD#ZZOV%0tVx(ypB`Sh~p1Y!yWS0Cj)Lk2tYM;6LLEr7Q(0=>L zlZAZft_?1*2^q8Iq>Sl{+FU>yuwE_&UyFJ_m%FhvR|GGlIcRHX*kP(s3+Vtb6sDQ& zC~_!I#gCNlo8G5^vcV7P1>545<7k7b9Il^6sG_T+Aqh#bS&rOD<-;PBWr!3QW#?dl zuu3ztQB&d4G@Aa?dvxN`8&W8Eij>OtN=(QjLZ!X2^5Jkt=I*@9Dgj%GDGC+SC#Q;B zLh`ysjeS6b4`R1NA&p|vWBNRADi*>bw4+crm0gaAItyk9zr6k-p8>StS(#T(3+_gv z;)Wpw6GbJ8DvUNF)zu10M6|?)(hi(f3Q=-Ms!%)!K_zA@cq`CMWi;s9bD zy@e6UiGONkVlV?amdh!O#7QOk3Z1e%+Jo#xdrLO)&9%>t9zSFI_n^aar@t}aO2lMl zwcYbMGl#qE|E_4hK1OB+s|r4+N*<|L?7Dn9@CIV11v7{5?gTkDPk1kG^2)W2FR>|$ zX&JH|&8K?t2n_XesS|t3aai~@pK{_6F?p(h2vGp9-!D)9}J1`x%5YeF`8IM>)GlyU$#N`vdTt_#DfD;}Qq$n6S zi(VQE48H535iYHx*+bd%C&jBqbYiHeWeX^2g)R4?y|<2Qp+oa^zV@AR@?}1u1s+TM z1aUo$c@wLG2J59uHU`6bTK6XFWeiM)c_< z(M}k=kv0#9hg<@qY*1S#`#aF6kmnMpVIOXhz{xk?5BW(^=>~NKDo6k zs?D*1Bi#oIEFkR&u}iH!z_15~(qec9=lOEMgxo%t(*6X`ZLwVd&SVUMxAdcHBg7aX zVH33<$p(y9Bn#@zl#TD!nY4SPn5dn#ndesp=Xc*|lHuh7YH~?bRcabaO@iBnY^6C# zVEfgrJb=_&Tk`R%_}4a);sThBj@U{El0bh3{gDKD*NN0}6gDQ59|k@ap_Q^%ye@`iNkf@f+Q}U86K3@YPBS0`wt+Ah{PiQWkB2jaSo{^=eGNx3mCuL*yVD-a{I9hBk{I!i1kB0iiLMj2K)^b&Qox(*aFpS29CaJ_W{8T62p#TF404?(i4mj$09yJR-H#K zaS6z3X@vL!!nP>4=!I9WM2dL|L}g`2*hw8y!M5Knp7BqA_Sy1B8pjl{Ezj$m?Py`u zZrTS-p>Q{yPKCfNLa0s}S_aEi+r9KhJ+*EP)=E{%*g_3LMLLB6Lua=BT*5G0e=b4h zhR{6L)?Br@uY_T?*j$1XhtPS(*^l6?A;ey}eoE5K8ZRF=a#kKf_UWK*wys>FVYaSZ zg81qwp0zbsMb0@hTSP9k9j&L0Xsb2oc{qAM_(s#Dxl6N+oGsK-8KZ8tUR+|`!Tku8 zOax8uBb@V<*C%?88TiM$pvim=LAuf%#+XUahpaB4;dgX&5-4DfyT;zvLC~2D?U=nF z66o#cV`bJmB?!DT8Ev&@y;H)N7(#iBy4kxR5{6mtlpsYRbd$9;d+|fUFzcNX1m4-< zZE$ARJ0%P^J*5IeXZDVVgkjb@CCC6h?PG1tUg(f8%zCE;fp^xK0?y2Or-ZRfPhr5& znZ3IqVfg>REotD+IT_z;>>MO3lv2=fKhV4>qF=1?8~bl9{;vL%>}Uc8PL!~H>GS-h zvH_>K<&MCU?de1uh^I-8p6ODXwrp=W;}qFX#R;J0YghfK^Hi~|?s?)7r#bQ7c&b7C zdhp=E#eOk0B}4W1*7^93I87TtTo`+rzM6{M*m5VPLfKoFfhu#UKhBW1LDbX=n~uxW z_zRmsu?8{LT21)|(H)P2cr;(}yLF%osB)y=cS?@gr*yNm)^icf~|I z!Oy2Cb)FcfrD1(k9!0-?B0j5w|7`PXkr;;mWpi+^*rX_8hd5QR4l4S3mpEOd1u-fe zg$AgCUD#bO?=guJ!{k2N3?4bYb!zHRoqy4^0M$Kf5eT#;PW1{si&fduzF3uGl~-=Y zZ%LslSNzKz3ArFt<*t0bAF6UwJ{!V7q+XD!p|KfWRiH}X(l8VJr@d58Rq$;oRi~;! zJzuNLOwMbnCMH;=?JFZl#9Q@#j#hkdWp?a4gYwZ%Dkp_yylAR?o*$>Oqn>dpwXq|- za#y~ED<6ERLl;FEzLecXq1MV((Qcd8MoqWI%AcuuaGvN<6tz!usE=O+h(96@!p{Wk zKO*+0^wpvV1(k}eanUnPt!h$~T`GDw1G@gQs7IeZbnUX}Nd-k>FkQ7(xw22TD$$kt>Q#>PL7>WukMDB5s$tQ%cB+fE qMff?nD@HY=&i?^r=ghqT delta 56484 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�vCZx0KcYW8}huc&?aN8@cUMHmhhZ73FHI5 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 statement-breakpoint CREATE TABLE IF NOT EXISTS "child" ( - "id" uuid PRIMARY KEY NOT NULL, + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "name" varchar(256), + "email" varchar(256), "phone" varchar(256), "key" varchar(256), - "parent_id" uuid + "parent_id" uuid NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "device" ( - "id" uuid PRIMARY KEY NOT NULL, - "child_id" uuid, + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "device_id" varchar NOT NULL, + "child_id" uuid NOT NULL, "api_key" varchar NOT NULL, "pin" integer NOT NULL, "expires" timestamp DEFAULT now () + interval '1 hour', + CONSTRAINT "device_device_id_unique" UNIQUE("device_id"), CONSTRAINT "device_api_key_unique" UNIQUE("api_key") ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "ping" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "device_id" uuid NOT NULL, "latitude" double precision NOT NULL, "longitude" double precision NOT NULL, @@ -46,7 +50,7 @@ CREATE TABLE IF NOT EXISTS "session" ( ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "user" ( - "id" uuid PRIMARY KEY NOT NULL, + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "name" text, "email" text NOT NULL, "emailVerified" timestamp, diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json index 9dfc748..96196e9 100644 --- a/drizzle/meta/0000_snapshot.json +++ b/drizzle/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "876770f8-cae4-4913-b299-855783c0b37c", + "id": "7ac914a6-b952-4605-8341-0b7f522e85a5", "prevId": "00000000-0000-0000-0000-000000000000", "version": "5", "dialect": "pg", @@ -110,7 +110,8 @@ "name": "id", "type": "uuid", "primaryKey": true, - "notNull": true + "notNull": true, + "default": "gen_random_uuid()" }, "name": { "name": "name", @@ -118,6 +119,12 @@ "primaryKey": false, "notNull": false }, + "email": { + "name": "email", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, "phone": { "name": "phone", "type": "varchar(256)", @@ -134,7 +141,7 @@ "name": "parent_id", "type": "uuid", "primaryKey": false, - "notNull": false + "notNull": true } }, "indexes": {}, @@ -150,13 +157,20 @@ "name": "id", "type": "uuid", "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "device_id": { + "name": "device_id", + "type": "varchar", + "primaryKey": false, "notNull": true }, "child_id": { "name": "child_id", "type": "uuid", "primaryKey": false, - "notNull": false + "notNull": true }, "api_key": { "name": "api_key", @@ -182,6 +196,13 @@ "foreignKeys": {}, "compositePrimaryKeys": {}, "uniqueConstraints": { + "device_device_id_unique": { + "name": "device_device_id_unique", + "nullsNotDistinct": false, + "columns": [ + "device_id" + ] + }, "device_api_key_unique": { "name": "device_api_key_unique", "nullsNotDistinct": false, @@ -195,6 +216,13 @@ "name": "ping", "schema": "", "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, "device_id": { "name": "device_id", "type": "uuid", @@ -275,7 +303,8 @@ "name": "id", "type": "uuid", "primaryKey": true, - "notNull": true + "notNull": true, + "default": "gen_random_uuid()" }, "name": { "name": "name", diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index 195b37c..9f2ac7a 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "5", - "when": 1703070994335, - "tag": "0000_thankful_sasquatch", + "when": 1703185817079, + "tag": "0000_watery_zaladane", "breakpoints": true } ] diff --git a/package.json b/package.json index 30f28d5..057ef9b 100644 --- a/package.json +++ b/package.json @@ -5,13 +5,14 @@ "scripts": { "dev2": "next dev", "dev": "NODE_ENV=development next dev -p 3002 & local-ssl-proxy --key /etc/letsencrypt/live/dev.fergl.ie/privkey.pem --cert /etc/letsencrypt/live/dev.fergl.ie/fullchain.pem --source 3000 --target 3002", + "drizzle:migrate": "node --loader esbuild-register/loader -r esbuild-register ./src/db/migrate.ts", "drizzle:seed": "node --loader esbuild-register/loader -r esbuild-register ./src/db/seed.ts", "build": "next build", "start": "next start", "lint": "next lint" }, "dependencies": { - "@auth/drizzle-adapter": "^0.3.11", + "@auth/drizzle-adapter": "^0.3.12", "@hookform/resolvers": "^3.3.2", "@microsoft/signalr": "^8.0.0", "@radix-ui/react-accordion": "^1.1.2", @@ -42,20 +43,21 @@ "@radix-ui/react-tooltip": "^1.0.7", "@t3-oss/env-core": "^0.7.1", "@t3-oss/env-nextjs": "^0.7.1", - "@tanstack/react-query": "^5.14.1", - "@tanstack/react-query-devtools": "^5.14.1", + "@tanstack/react-query": "^5.14.2", + "@tanstack/react-query-devtools": "^5.14.5", "axios": "^1.6.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "cmdk": "^0.2.0", - "date-fns": "^3.0.0", + "date-fns": "^3.0.5", "dotenv": "^16.3.1", "drizzle-orm": "^0.29.1", + "esbuild-register": "^3.5.0", "generate-api-key": "^1.0.2", "http-status-codes": "^2.3.0", "leaflet": "^1.9.4", "local-ssl-proxy": "^2.0.5", - "lucide-react": "^0.298.0", + "lucide-react": "^0.299.0", "next": "14.0.4", "next-auth": "^4.24.5", "next-themes": "^0.2.1", diff --git a/scripts/reset.sh b/scripts/reset.sh index c07a717..eec76c7 100755 --- a/scripts/reset.sh +++ b/scripts/reset.sh @@ -3,7 +3,6 @@ export PGUSER=postgres export PGPASSWORD=hackme export PGHOST=localhost - echo Removing migrations rm -rf drizzle echo "Dropping db" @@ -11,9 +10,9 @@ echo "Dropping db" dropdb -f --if-exists parentgrine echo "Creating db" createdb parentgrine -echo "Exiting" -exit bunx drizzle-kit generate:pg --config=./drizzle.config.ts bunx drizzle-kit push:pg --config=./drizzle.config.ts -bunx tsx src/db/migrate.ts + +# bun run src/db/migrate.ts +bun run ./src/db/scripts/seed.ts diff --git a/src/app/api/child/route.ts b/src/app/api/child/route.ts index cb0f4c8..5dfcefb 100644 --- a/src/app/api/child/route.ts +++ b/src/app/api/child/route.ts @@ -15,7 +15,9 @@ export async function GET(request: Request) { const activeChildren = await db.query.child.findMany({ where: eq(child.parentId, session.user.id), with: { - devices: true, + devices: { + with: { pings: true }, + }, }, }); diff --git a/src/app/api/device/connect/route.ts b/src/app/api/device/connect/route.ts index b504f07..1ac78e9 100644 --- a/src/app/api/device/connect/route.ts +++ b/src/app/api/device/connect/route.ts @@ -49,7 +49,7 @@ const POST = async (req: Request, res: Response) => { .execute(); return Response.json( { childId, deviceId, pin, apiKey }, - { status: StatusCodes.CREATED }, + { status: StatusCodes.CREATED } ); } return badRequest('Invalid registration request'); diff --git a/src/components/header/auth-header.tsx b/src/components/header/auth-header.tsx index ca9cd2b..b536e8c 100644 --- a/src/components/header/auth-header.tsx +++ b/src/components/header/auth-header.tsx @@ -15,6 +15,7 @@ import { Icons } from '../icons'; const AuthHeader = () => { const { data: session, status } = useSession(); + if (status === 'loading') return null; return !session ? ( - - - {siteConfig.name} +
+ + + {siteConfig.name} {items?.length ? ( -