From b73cdaa5ceeaa2d23a3c8304cc399987de429199 Mon Sep 17 00:00:00 2001 From: Josepablo Cruz Date: Wed, 1 Apr 2026 14:59:24 -0600 Subject: [PATCH] feat(SQL): Adding alert groups and privacy groups --- db/Models/eta_rbac.mwb | Bin 38575 -> 46154 bytes db/Models/init/eta_rbac_init.sql | 56 ++++++--- db/Models/schemas/eta_rbac.sql | 193 +++++++++++++++++++++++++++++-- db/service/initdb/00-schema.sql | 193 +++++++++++++++++++++++++++++-- db/service/initdb/01-initdb.sql | 56 ++++++--- 5 files changed, 446 insertions(+), 52 deletions(-) diff --git a/db/Models/eta_rbac.mwb b/db/Models/eta_rbac.mwb index d916414bfdb95de544fa68a3559fde9fbd08108f..dc4ce00474973ca6af7df809e2d0048fcd5d3f77 100644 GIT binary patch literal 46154 zcmZ^Kb95vRw{7fX(y`I8&53Q>wlT47P9~VxwmESowmq@!Q(<#@3YU|`zT0*L!g2D{Y01q=nQQ-gur}$|9e1u9ya#I)=W&StW2C-APWDw6YTTa z%C`WWz2!dqfK(8W@zO6K$e(wb*c-drn%cS0+qxOiyW85Fz1h00wj|Oc_-%Ig(oBZ= z>{l3afPfJ#Sr=Vs0}J0wWGONul9s*rJOW4$EsUfIB;~ljmVdnHCjaUGW`j*?n2>Y) z)5qy`hB}DIzr0MrRrllmo%GNwik z(rzgyK;)Cg25LzD#+L0*9_H`H9_3Gc-93K3-qerh2ja|BMDLEn9LH=MIr5F(4am1s ztRR@6h>HN|gG6MCK;w!Wk#9yQC5nOR!3jpnTt4nZWaiPq0GTcEo4rl_(`b8J`=NVV z7jyNKJ+t|U180!OU^eLV|*5RN-NxG`{S^01kS65`zKSRs~Q z4^7&A2tSV2KRuoESH8bT>3^IZjQd@l@pq?=^Pg+;`Ds`AZN7QGK=V%;ZgsCzZuz~m zGIwj2Hh)}#%a_2bwP;{<_sPAnvSe=_dNlrS4(fWVw@$bbK`ls6Z85|!)V`*)-BACH*jg7j`70_@#}{fO!<0qlkt>X z%Km=wqO`Kgl7`Q<8SAF+6_T$7FFD1{wP{zXUu(eI{QcKefJy%^n2n>;9W&s<{9-vF zyJRJPdwuhA4NvZF3%B%gFvZsQm|lZ1W0Yugz-6~2PSKxj#L8a!0t#a+e9gp96-nPFMyC0flkVZwFj6RJUuy0ln{0#I2X|8Yc zpa@hFg_H)P-X^R{JkAVf#JV~PuT`PMDGl3{Ec(tIy&s2gI4wE9crq~R(Z!n4v#s7{ zZuZcvdowgYQ&DzldeOellI#qwm#vp!^Z~!YA8jutw-{B(2W@`at=HxA;CriW9Q6d< zIrp?eD?k2xCwyKx4mYRLq!l1}SBC1)yD07BC;sYAq{%b4vm>Og=aWg{*&|o`wSvM= zM|bRc`8j4oM2rq0T}fZR;-mc8XEwxTb#Qe4Hd znifhu?G+20YVB6Emm-IYp7cQKC}Y?JVv{VfStf`WBQU{yWKev`gxDkt6!|1`NL6MY zg)lm^_ny6XXc2 zx+WV4NiHV2z#|J_uOgPR9GXzJ{M3&mu-r+G!%@rNsj#Uk)!tM za*p*pAWbxXNjTLMB4sb88E-qQx#?mHOtG~qF!RXO%b=l|jn*W(B$bg5D9D;fy#>q@ z#Jh4tjuFL)nNL>c7B#u0=20OA=7XE?JiXnGyl@;HuKy`8FG(v0Q$$s)C$`elN1srb z-B2S`oNanP+^|laG)%2wly~EJj2Szf2rQV0_-J4|$-kdQJr?qN`f{^(F}l3MN?GTm z_k1!i4{lAIICP3m>NwHAcMu(dSrqU*BfT8#f*(Y3Aw^jH$;QMA>2~x?hSXg zPSmr3*!6q7!{TcqPE|8q&xR(Pv~s$ss=v;u?`yfP?jK(p+o|Rqw9$(DXXUu98oASn z-N`b<8^U@kTh^PVt?a7-;D=fT`!_Uq%zYp>b7 z=FgDtELuEq&fWI(3;Wl{2s!~6xR2UDjqCMvp>fv=dB4jiDW zRyExD{f;R&jSblCuRxq{hCCa_+1VQ$3UA^vYVrkXT?>DlXhIr~>^zr>90Wo4SIVvJ z+udhmC>9j`9OuwqC)|A4JpEEl@H0CzCL&Y#aZcrzPF&XzdBOJARqRzEJz?B(beF#K zhY*{N6~g@Ca=K8pX4 zk3nGVhOap|db4oY?49d^#d@E3ch5w-&EvM)7G!VZ+O_noXloafLpnnh4w>p1cRIz|ipZH%eDws)(Fh{V)-SH*w2%1oM@*6h(;GKvRYxrL5VVm(xZa%2nW!eUm0an zQCVr2o3|fm+A5-g2S$xE;6#m#-YGNyq=)m6pl1y%;UuDO$oPF)|Hbp}m!OTt&{_>j zDIobJx+q>EB$zsy`lrHSw5no!9jjrWyeYHbK4vvaDH8`w=-sb)mki065FvKV$sXj} z)~?%JdUMw%YYHc1fYvGw2Et$xtaR=^eLN46p$bUQRkA~lkn|%b0>$hI)`?3;pdc|- zZ;l%yrAa7bIO7sBl%RX_Z!-)zhpC07o}FKgJdsL+;BezI0yW^*61&ON7EVe@sj$FZ zN-?5aSQxSq08Hn>aEkn)7?2UTdZ55r_Yx63%PKc(DHUXb0xFw;RcpW_rx_n^iFQSm zi7bbV%_}tcGZZJmaTsrzYY$KH#$EB|2AXA4ZR00x%BGdF+YcX#1NeIGClG{ueth&F z_s)4VPL}QaGe}Vf`!jZDWa~{`cgZIG5akkzBI#fu!RbOi=!U;UBqZ|V(jcBj!gveA zEmZd%%$m9U&o86bNKiK3=g1EJ=yr@~9|IOmdfy${eH*R0e0QdCh-~$^iJ4vHz2U!3 zRgABm9CuRW&zdC5;pMFHO1VEiFIGFrkfcws`e%?@NbQoKmq2U;C^?df^ivr(hRfJ1 zk{ogM^yaZ2o#VsP@twxQVeFsZFSvwC#nFxeotlX+ZW0zZ(vg-%Gdg=NNc`p<$kvyY zv?)y63-vyHnWZ*5U*GNwVe1GT`hLfmBQyDNuBx$Bo13}bqhY2NDlZH>(Qq79q4urF_@z8wH6iF^@6 zbgz;FbhLX(QfgRZb|FM*J!y;#MQa!A0r2IWu|Nz;qW~aA5N7T0awX4mZKOs^l>RfF z(e%>S2Dn(SJ^W)ObUx28=FpDS)Ka1daw2C!Il)sIGFpWzPBI>JKoUe}--c%x(zTne zR~QnC;URvW+fwgW?7dg9XiL%9W$Q09X4%cRgsZmk2vx^G zt;7{H<`%)WO(OOR_n|Ic#*W_0{s@)~8;Wj;;It#Zl5C(F2KgT7>jC^sT9fx**QS~XNI9LR}6_q4eq?r4Lv zB1E`3@&FomVG+$upxQkIKZcZbUigx+gT~t`0fcP@0{k<%i;N&TLW2^yF>HR|XvB1C zY#<|IpZnMrhk{wi)B)-(Iwkf#;Vt%FoG&?4fOaVwCH^VSeOXh?o{cirCc&E(7A^)1 z98w^qatah}%$5@$T)#CSV=78F^oC{A2rm}iJU;wd{~7|+TirOp9PkwLdPNiMj| zWM7~$E0Qr6P681SBA&@4-vCW4$$&K`Cl)&Oi#Qc^xJO7d&!6zoV;0YD3=h0!|gV}cbz-ZfAF<4#n*GOvDw zVRM^7`Q{*Z;(#VkfjSUGrH*A#@#<5p6s_R7MdYGu$kS4tHVszk@bw5i zWBG>v62jizp6ceq#Wn)iEU&TAYqF&zt#8Q zL@BkwL+a-pYIdF861%`-@`*XwvR>k#V{&124ol65fMfE1oi4Gvc0Z#k%RtaxhnN#K zSr>JTns{HHmwjZAaV@f|yV_BlEl4XGc^`4EG(jOta%cW-89&Gv!lPnL8HuDCe?8*P zy$xHKbR>{0Q!v7-$eae!_p2c9D@?9fW-&FQ%GeH3qA`=KFjzkfF?HHwzb~>S>CjCq z9>Z_6x@r5|?AGGQg9#CJ{gG5Ev{gmdFH@uz7YQCg%blb+jDl5~_k{LgVk$8Slp+sOXZDao z7TMPv8mq5E=rqoXafKK_R7&eDUoJgj?NI7N_=Bu zyT80(aodwOR+!r=u)l09uG++VeF8Co|x1gIWq!k*RL# z{)fy+5qte6ZG)N@{@49lV**W!ut_0Y8k1aC%mIX?5OxYy2GRaE!`ykj=TK}avhhX{ z0efP`lv2Q{dx*JsRwqk3B>rQCdGFVmqd$PCcjh!9I+(Q{11vnZd9@mFUPp;juCP6*&n2 zl)0#m5=s0C#?2n`8~bou-}q<6Og0ev>`+&$W&r#GHf2K0_=31q2;v1R^t9m=5N(u+ z5r0b2ta>GfkYDhAF4yEs1HXo8luKhCAZsV?91^P)%)0y@v}6oq&-0fLFt;2tMF9yA zffGMs#R-8GIu#^tD#(*ZUd?L8B5uOy-*|pb^Iv#o;K5u|+H#rwnYzLOLSQ`rGGR5# zHMg?X*#fzugRS`67<$EO-~e)5d+cj(#n)6ir+C?61)6;e!G%r(nJE5kIW}^d@0evw zmIeJ-hdN}~!X4sCii{|;u-@#zO3PeP=AorH#%^b;G#88{ zzMf(Eq{LGG^237;84accl1r=xBb1?Sh$z34bKI7+FQx=dr4~1GgHXQQB29nA1N*ol zxkDBo_w5K!bHVO(#MY+WJ-8&TEW>@?lT_m8mE=l~6*m?OOqDe#T82PT^~QlTrkpl* zO8*_~bW7@WBFRnJbG(w|qA(JiMe3OtbW3WF`HI)hFFBokyP93mn3^p--xgh}IH=;3 zH3+SG676xMY`4#4Tz1csFCNhP(KLxHy38taOBu<`1zCvrCBMWf3%(9rB35C2g@K~hr&(=?-sq)? z!UZrbif1B6KvvbwA~8c7HRX8AMHR=rSmL~%IpHd2G}lVdHsRXN$2`|6mTCRBoD6+E zkp4W~GQn0kj^Qo6b&Jfs=xENp_<-+;*8VPiQ{agixtK3Wxr^pm0^AA+2D91HBTz?6 zU^Z1ul~bZ7oDI5_z2e@@yA{6jM2mK!%8Miss-6NCxy5Vbt%iCsE=&?(&&&oQ%a}9f z59PiKN*;5ux<&dyc+tiuVgO_TvM<3!iw+n2B8+1*Q#B5*V4bUp{_!G-i8aS_{$2-H zq=-OK4{iVn7y0K1E8jw${|Ou%I^QFKRlurySamn_oe8P&I5>6bTqC7FW`u=b^U64= z7ZtH^VoHwD%l5U7U{tFBs)~D_IknbkpJb8ia(C1c#bHVuNsI~&69&%3L`n%OwRdU0 zc!|vjL9vPN_x~c%LDd6BPkPTMVPe*WjLFs;vUJny>#T#<)GpD@J=Y2F&ukHC%i(_% zqG&YahQXwYa^g}c#HOh*Ss*kQO_P4N2^>B|XWoYd=G$womxLq11VaQkCK<+4e?A6XUzF;*<{G4@Q}Pe&wXw!s#M?3s5#drH8O? z>$ye3&$pIoa>=1R&T?sQ{L!r^ywzgIrJ`e7$)FQ@%XP&vqipgPStBQ9@nP9N%F2Iib` z_l)OstG3wkc8%1Sy<9W}oE8B%Y^Q`22as}alJS$IcNSSL;`MqD6E#-_w zM3Eg4i8nG&X5w1M154C)zjf|TyLd|SbVJf+(`UXmYN;y*R#(IY0G;C1J$vgsN9CUM zBUs4=`%UK8qV`Y~_R)D(SB#9#F~5MD*Zl3QnTMU;gdyL8Ep10Ozw6}%6JtiRyMODG zG4BfV_&QZa0ye#_I-JutPFiux}W-Xlndqb_3j~?xVm)!jvT(g&CbyKRgB7egK5NwAIEiG*y{`DTDC^B$ zt#kV1oe-O`x_tVcV$20eT9+Q@h1`oTFxFT zb3>2o`-txzCNT1@5?{aBxrW6#j;S8AQOM35b~Q92op=AGG5|l0j<5te692l`Ll6%2$C9xJMU6_cz+5 z!WRCRC;|9ui?W@epf^$7zOg($GMpy0eND-b_rfk-!Vi;|$k!j8Dw5 zNpagDA{$Zsi4r3IOe%LI6o0)eLTURNE(~v*P!SJMuAm_mO`}_sC{x^D<|iHJ1X2Ml zt4*@17YVm~0WyMy{_ty;rNeC z8;!O5w*AufD%MmdepX--j=w_mzsrpkX6e3q{}pWcCoxYhK1K=y_`haX(yL$UXJfSp zvyP%ZveZZNzCiH74&`ZPudV&A*6KYo6EP>eJr?%LX>4XA3Xh3S{4J116CFX^j|5^g zx(jFWF{#gCKD}J54Lz^_ardV>qyA_p`+Op^ew^uc(GMF!K)Lq~)B-`32hzW9HW`IZQ~_fS;ax2cEUF&S`IGZL{>4uvls1zhfeEpKo+c_ zg6Wmy)KX2ZfR`(7sPgB|5yz5t13UH*UcN1+8Pgpu+Vnc_h3$*+$|7Cz*%$NW z#m*$pci91{J*NulTkKY|)-zGe@bD`@ZOVmv`$t(NhA}(8Z*mD1i=&mKTeBT_X>fJr z*jr>$$#(+gTH-#&f)P;U@J|#0B~Y1BsLDAnv-05V@1MKkURC>CUCh7g>Z?vHeEZt@ z{$`Tg;q~-#(&tplJI4F1-C);7IRWx0NE>~MMM23y2xLFR5DS(9?c{4>JXBl|C>Zf~Jq!C`#cW?6_V zhp5kos7(`pTu)J(T*Y_Jd;xbHR_oz%}jH z^D0n&Q@19oGAHI%%+#2EU(prMFF}c<&iz|>_1udUR4l{uq=>Z8pon=5PceTV)58Ig zh|649_%K|_%WehEG3URhm(t9qNewYea~F`ty1cD`Y?`E8Q(g<3QNdf5Ml(~^v&JJi zpc_HAxZ!V6i=>gA(u=2&t+sRG^6yOPP`5IA*f1w+;vghqNKoz*CgLP(3Xz_nC)&+L z>-Llu<`NrPrOYxHKry)zrQ*;;%XRk6Y2=p7Oh-~TLUhmHBl9>@`KoO0`xDh}i2}q$ zW8*oIB_N>Gf<-Ro@m#`17KXPy(5#R;MFxb-wa~CAk)Y7w5zusVc1A9$95FR*vEv#Fzk@O3ZEbz{Oy2(UfOTqf+~Ve<$(}%JnyAM2_?ut z`eWq;d>P0H3KzUEh_*izJg}S+gpkGrpPUoMr6uw+LQxO^rF?MDSR3~_fz=o{3b=VNyiGd>m{#YcB|Qi4eKVw4Bc3p{9*RU z6|p|^QilF%Yh11xaoc>WEc6j{<|(hwS95aGwbE^wdpd-V_&Hd3 zioNXzA@?_Il0JAB;K1T_w(>^CKfPIewQ6Ra+e!IlZsMJ?s6oMoPgA?;W%MYCHL62V1<<1WT zP-Er(ExdYqpO=Ev86%JBBQO2o#I_kkz7-j`B;AWH=XEzk1R@ow7BCaHY^>d#WLDY! zL^pER5`~=hwLl*TmX`E*;|SCe?L1weFX^|l-E3>zF3eQ}d<)E1OE{zZ8AIr3v5};K znJ}GEJ}wuJ<{^(qLPa9+zK5U49H}K5UeGC|RO1ZEdm{HI^3)a)Mw4w^0>*<*WFeQx zI+Ur*Z#dmBI&yf0!DM}e*+hR$l849ET3|T6oRZX0&6VFWcKDdTE)>jI?INBnSvW#7 z0osLV7|xVW0cV%gq>-JCR0k62xrG*X=UBkuJ8HB>XP>H^(_amUZ=0IcuFCvoe8Ls1 z>h2T~#!y(PKiYoyut6XgAEftqH&W-bP0be4FZ#VLCUtkUPHaW+r{+DAYpNV9dp?X0 z7&X2~3FF=k=zk0V7%$%4haP|CDkRxsS^aHUK^F72&YezE;8v#Q0y(AO$qotm$gI#{ z=|Tn?$GRHS!Q#NqWaNI{o=$mB&9kM2sRyaa_or$K)xPx|efcqNd)N^5QBlyzWde9Q zL_`>bdQK!wa_qoug`S%JcKM4Q1(a9=_X-0IMGhVMEp?EH{F^<5Z_(cZB5B-@2WB88 z<6|;G4S}X>!9-I^F_J*?=eP(ZWB)@!aw`PnI1E&6A^kfQ!pSoI<}iLQZSX(=!FuN3 zzzD-_0V2j7EDUykff+g|F|Z3LpCEw}k*Ap;99#qa*Mb`cb2B}_7j$~3{6++%(woGP zLJWu(VJPrWvcaH@fgnYXVRvL}SzQA|GTIF`WFgzb(}AubyAH~!x5kULP|rog$tpDrijx;oB_U-+bpkP^MCNXgtDDa+BY{LH+QQ0q$S$+{Zrk>mL4FD@hduZpAku6>W zsa6^`@?ounz!#_i_V-->tXQV#Tclf;XhTvktLon2$i;mp;o)=!HEW8I6`W7i!JY~p zLouL^R9J9{w!fwhwD*6R(1q*sGK;g~&%>ywfrEL;Z?(hxy?!1}s){fN8E4@9^8z^Db*b4V zi{;CBv0X`fccM|NBlxaQHhU%6GYd2E!~3kLQ-dM>+`@vBz<&4HcCQIwznByP@hVtO z5>{Pk?fb8-F8wnP#2YRI6pa0&D$1OMv~|t+Ij;WfCNm#TK2IUtLxvB-u2&x}ZGHeL zj|*c$$`0l#FN-d1u7&4+QaZJPF*xUAwkNnTEPAz&`*#c}BzdZ7!dSEW8q2Xqx{YDq zzO=IzYT_u2P&Vh!@+9!rmJSA+Jpt)VSbFREW2uz4$t zafWICf~LHor*8iry3?vR0e>@uSYhAw-l%m0uw=XVGTC341wKWWqK`AQW{^7&hRGPx zJ;`9R5jZfmzL63;b(lbA8Qfm^_y!`0WBa@M|JM-w+Llrt^fw<8x~*Db&uxlreZAT< z|I2cAy>S>#cv1CTQ;@His8Tm;%{$Yr;fB)PgE$YOWJ{X@uKt0vAQWtX5hix&Upv<( z(Og8vIRP@Krw0j@BwW=BTQu%C+x_W6k3;t4gkb}meF?_!P@JkEn(U;C!xi|o^*w7c zS{b>K^;t(i%S3Y|ZOj_e1s_hr(1sNQVCi$dzTP?Lf>_WRDTHF~l_szTZb`)hGBZ2U zp0s%3_j2YD-=KA^G*~v!PmB{5V5`8&Gp8m-6-MFLvYX0zKleZt(#VLh=W zEZSo&H#;dE$vRh}S>%wZBvNESVP1Ga%^yTeE}$iUe1i%T@F)RD<%L9QDx1)7&TA)z zzqY&aHP@`w(ZQ#krHyKj9M6KIq{_!x+k{okQLm%q!|8V53G953Ux&T4i8(mAYQK?Q zZt>^#SF#(%NkuBjGmjLRP*V6C-d)ezr6s-@`*vVnajXwVyLUB9&A&rfs^Lu*O_-!x zzWyMa9D8)}^n~%C5OyvurEDphbgQ{mYN2l3EF>#v9 zk8f7%d2M&7b1SyJiThKp*b|~9^*XBdXEouc8&E>Kd8xEy||WBpV}s|2OAd=`-;g0cC>qmSC=t&Jb6?)@|s73Q5f!l zVoWL`wc3;aldaW()WDyhp{1 z;(17Ax33xUS0pZ83OY4BIo^ro9k@4bJEY1h=ERe~^71&D_KGqM-N-ZFFp8OfK_JMN z&9$238B8hsx$YjF;jvKg&XYg%sgEpmMRys;)%tL8dqy8JAq^S7>J9pw5|B90RRj_2 zZu1P{ls|Csh(!gS`g%kgVm}=+somi1ad}4bc}7>RiniTjX*cWU422Wyg7AucJ0&o- zkh;b4xx>=LjjIJj?XK51B}7QS4QU(9+5IP9#`o`hS?YiCW$_9Gwp97JS}ikALv+(7 zKKElZojQ|cjY+gs*+%8QHD}c3NIx$)IPxWAxiaj#+W5OJx;=ui-8WxPZDdaI28xT| z_C0TTjffF9mnW7mkZ@NtD)|^vUfxJwCN5Sx?bWq|E4gR2zt!{bc^hofCw^JHVK*P* zz%9ps(&`A@+hJk73Tm_Lo2>S?@=!f{Z-xrbzF}9}5Ku+2=_y|87;-PBK`n0E3H1fX zyC}ywc}__V+GC!c=7 z?*2D+ukJk!Inc0*{awAyDkl)4iGqZ3HI(&8&(ygHCH%J?lPz;=k0pEn` zdVplsPf8sT8JIOll(Xy+FNG0fjs{~=vf&}ywU83`WB+AW&RC?&*9!z$;rEF9=;gC* z-(6oKwV^xIAe32hBIbhrI1=qFp39yfE^8T?XJ49WC!V`MirGpFB54()@64@>Lp0rU zrhZXSxpyo(H6|6*<=IU3L11K?Q@yY4P+ax7UVNyQ*MC2|BXxD(_D}ShEW-ICWLIsf z<+m?DWq+@O<6&#Lo-Ir=si5g#<)SVTiQ^HQz={%Hut97|%8QbUo=m(3y5=)8YBlr? z(PO^*OmK4Wcf0|^584?e;3*=+J({4U#)W}AAUX6-P8~lIgBvp>z);7E)~KSBy{AZ*`A_$Gqcm{$;#>3 z?)F%AXxnfQfX53yBz0l(kNoi1LMQbv`GNIQen6&HN~xDB!BBK0D#3yuOK1}qNZQoT z?(j>B-H?^@3{9;a1~37baDn@3m1BrTe}7?wp;$zGJD>C_X_$EAFJ z1Vx2g-IjseoJM>^Lt9!{NFETH!!!=yg?1#9bS?Ts4RtmyNC|rQZFyNFOqi^^rOy=ysPL^XW=e_enC$^{_C|p&H3}O>P>FNG>=s ziU;V$+2u`cL^`jwZ``cV3BLN7Yya3l?R5NeBGNVSOq@J7yvSwKHSukO=-L&iPw}@L z?1BizS36I6XP#mzt(FrF{Cec3dNI8SnY_7n^-a1FnV2y9nJF)yW4s|p?p#6Hp9gpMCkGScH7@Je#Bb9f_-lmxcu#tSc3!P$U$vE#O~G zO1z=<4CPI>jS%o9pjuN24JQk)K$xxq0ruWtalkQJJvu0WH|Q$Mug08lLwL#B6B8yA zUmA1R+}uK9i^3#ffOybb7?i(^asLMC)#6lnOdR>;ImqYZr|#a=<1E1oEg~Z9i&46B ze1X_0F3f!`GC2Q5O7c5BN z!+(m=533Xa;{_i)Mu%KS0@jO1X~$y8h|7&e6byz1A++hwsIo#x)L-7C2f7^sFB=+V zK5KMHa){1qE~>)}(HY=RV2<_X0qx0S0^OyHGp#lutAc37 z&fA((ggO)KaP~;S=4Ua8Fd(qRqRIAYtpE^c5dTEOwM7t+Pd>jXr`P?}>*0F-&+Yo* ze8zwK+xkB0Hd|1oiCwcyPN8%$o-7w~(Xa2)D1F;G-7NQ-=V5G7yW8Ch z18#Ts%at93QSEZe`l`ignRt2)3+V2%z^iWfRw zTctM_@d}5w;jtzYqUh|CRVT;R9M+PhwXQ~P#>Ev(7gfwPTDF`)kxsTyU37O`?E20- zpsz2>tQz>Vr~NkyJv^GQtLn?suJH#qSTEB@8P0X8eWl-lX6TUMR2<3RV?&Z{GzPq3 z6MKEcNl6m7;Qis2Y`!?zpvXOBGk&!ykD|ncvURk%=SmCWc++ zI$jX@<)CXNGkmVE?aOCgK7p!s`=YA}bHj$qc`JG~AlYL=?cYAG?46O?+*8DRKNXet zIdINo;`WaA}v-vg)sKm=jtcj<%;(EVy_9`>e-G}i#``HBV!2U6EZc8M+>}{Q3 z+VwI|>o8HXhpw0Xal3kf|4Q*U9&gZ^|7gp+s9!g(9CYN(e!FP2)Zwl3qR9dATc-}| zmZcX|S)g6S|6ZG0AK&T0)YOx0+1WI zqr}1MMQu5t+W4}G^O-$d)$lM*p;_{mZ}p1%9;Qkz=c?L!2W7>g&bDwzN3y6Hbn_<{ zy3Mp?y{OZ6WT30lwtApVQ=Q}ZyZHBs6k8dY{R0767`wZF?*QEU{@npU`nv;wtGo*$ zut8^jaIn>V7Fz!{0YzyShFN@aQZd~Y7Uvs~>9%~?chSQT9C=s_mhl$5H`rs@)ncV` zW=8101W6dph>c8u>?yRw5InDo=D0wLT>C}nJT|WOnZ*n{o<~yCdAGkg;L-wf}nS-ec z26jT(H?SY@B~>OWpC(hmUy})wqjeQZ`_p7v>GCP{INGwPO3=1nN<$T-Xbn)#FV|Cx z%;d8B>db6Z!!pFd92Q;H7Q>msVbd=E{``J-G}_&nRe;1mR5Nn0obGL)qU-iB7I`1B zP;ATE5m|plg0#Mi6M&M6VH#V3EG#%915ES`E8r3&6(v1GO|-Me`gacm7g8HEQ4=!> zsvriIe+;L?M=N#;FX$kViHS1z1rS-+{`6s%rs%PmyBaJ4p zb1W7o8UiiT`3(}dblxjKR2bnD6Y6*wat*}J|0KGt=a&`~bZ|)MB@eU~O@D8Ifng~V z!R;4#mOzbgjU@v3G;3ND@!*iDxJnfbtBP7|2n?av7-OBo_G|18(OiWmgzuBFf=?B3 zC6pe8o`sxwI|>T5{VM;kR_;(9`tyi)>K^7` ztBQqgdld@o!!|2|M}?q6%{S(41&8PF|B}eXIJYHx@)fb7J!ArF%dX>%{%SAv@AOc5 z(N&=Hq3L~GIm~MAASJ~~Zl84a<6hfXL&(6ohD>Oh(BOrdQdOmfGzaBj%qCWoApI(6HL`% zfg*yQ{VGhDeFxE!X-Q6|iJr^Co}k`n*Th}A% z{t-g&r0?QI2J7)B*N$P#S%e5gY+dh*tCuYr(6e&Yx_(r#8PnA(Tef*o?E8jT>yM^e zMy(iQ80t>{Y(tMz>duLsWOKEnM$O8qYldcTp^Wn1zE8nFmB0A(j`P6Ve$L+06gIlz z(|>1gBGCVdlJzRkAjSuTL#L$IjA9hiUnpv~!F-{*69xo83Q|jbOc&EODSO9+yB%33 zdq%WAGxqkU8}>H(^mDbF7WJdk_9ER^%ddkE)%x!TFOmnbyBw{__3Yqnj+mv3=Xo%~ zE|_l)nAUWw<_;(xq(quO4&FH<>P!VqIplWCvicNqlMZu}mbxISjVY$he&i>G%k4~M z_GdnSX$u$OKGqP#yjs@n$B9~S&Hh-=Z~WJ6y*hB9IxC;C*XqF)w(GDy*!%LNT>MM` zUhfeFotnYFkWV)+FAT5F{n2vvTrF?v@OODD#Nu;#iz+1-I?Aljam%{96X{wF``8j>)wuovxJ~ z%lWn0I*d=`2DeuFUy%FD@n7Ut>+!5F`}Uy?j>q$Ndn@M#o_$MMZ`~M8;CqC!?(}U3 zs9lw6jH}P+uqRKFT5`-JZ^x4H-ys1KY_R|= zD)y{IN7ll8{*0bxRghVFa6`Z|50~HH*;>8*H7^Ji{?> z$-4_u?SO1x)33n|#M~-#2FU^=XlUmc2v1?Xg+$ThI@`_GQ~w{|fehu^dTImc*LBZ@ zYoH9WHEk;8DT@~E@8_mm)fG{&o zhJ1K)9OG#wOPT?6Pl0;zQJ*=eLL(~L4bsUVcWU{GHNF9!HaOyFC(cqP% zXz|BEHHikqfwS`Ko&IO5z_l@Wl)2k$FU+boJ2@VGxQV*pmme2Zt%3V^>*nm;y&yTn zNHZQ+kn3l;WxY8Wt=g_{)9%!36qo<{6&y^SJO@kFA!v&W`Em{qTb4St+SNeg)1vDZEK{h1>C?|{TiAINWq4h(Y!HURi(zDk; z#v77YLI);Oi3ke(`j@3LVNaCn`*PX~39_PvgZwI~RaQZSux(Ft`6CRA(G%K_%N)iJ z#*c36bA*6<&uW_Ef3#jQWzFs*GUUxVkKFv5j02U-?0fl}jN8wrnEgz~HGCl9R~88d z$&V5pi(?O;O@EHGNH{*{Q8Fo^33<^bXDFuKqU1Ng3oVnGBF?qeVG}!{FCyeg)0WIq z6i8dgS?+k=Z!{I|QYsZ%V=oDj+W!D}=uXNI(5|)gb2mCwR~1T^T4#a%RBFF2@NF18 zZM3YsIr`>VU=#bq0`Np>32`%~F{X0nA+|7mt|@M-wdpm^ZB;*-;EJXxuDI{?2qzZ8 z;|WP(4j5%LrMDH@{zN*lXG-;kw1eoqf4ktbu4kxCa_;}Q;3o8hQYiTC6NL%Ho)Nz8 z5whx+&M>+{sHL%giom2iwz*Pf#QzUr-vC@^+pgQ#w%ORWZQHhO+qP{rwi_o+8rx1| zH0@bwzi;n->7RMGK@-pPVddhu~Y9*Gqu zUUZluCG^No3lz;@UutS4}fva=CtB}jZHSd^*Bb2r`9cD9Sm zPV2R@mLZ#Ky{^{ERSL6^tNjYISxIvn*7oOAy0n7?<;NqZ0uI4AGGB zLrmfnxR9t}NMY$)f_j*qq+-J%0#nWs)h|rEnknS_+kOQ3{ei9RdPilSkxj0y|nHXXbLVO$4NyN@@H-Wn}I zcyEvW2~fgh2hopY4oPG~{a@qzp0x@O4v?Wo4hz1c96*{courdJ`N`nZP2*wL`>|!CIq~hRGvsa|; zYG6#jIfA+Z(hmGbF4~-ei4>P7;Mht}W>Rrr8HW_@8Z-=^AXj$J^{dflnT9@kj+9u- zNRfCNX(|Plqe~K!`sB!xQ7OIJY!Q~?WM_5BAi^9rj&c>g@cHsQX^JD2$tM98D30i4 z1KcV{LS^*OQ_@lFwnj}%#PH%_UhxuS@8!4*{5r<2tcB}6M4)0u1A`%Pp z6bexLK;*_q6nPM-n{4Zj0=l;m4*v%)%+ z44F*yKDc5l{=`*OMLvS@<*xwlcVU2=VvZlwhz1EsDIc?%xi)(N>Tsp-i(QrH_aYO3 zx@d%_6XUMIF#h~YMmRuS#E5`;C-6SBdrpwX#qWlNV2(7!@PJ@@I;&T7nak!4Sze+@X9znfviOCP1 zV4*0cP@j)&mbM)1%OB#=Wn}(7>%VsXojP3G z)pTsFPqH`h+Qeb67szle2iIu_=!GEVKc}ZDl$2+Vvg@znuixy|Tth4IzHV?YwYw8J z_?N0z&qg2m{r=jked4Bjzl82tZC93-8W)d15K$9#F!azpz4~K%v???Zz22bX88%iw zz4LUn8JM`}4`?qC{V&k|MWxrik?8}pkL28gpDd{TKS4XMK&tt_puO4i(CmNj{LW7! z@IL(yk?5z9ONaj@5`7LAPH~d@3KXy~ureM6=Z6ZcgBvn`Ylh3d~o|jf3urr*QymAI4!{-2~6} z1;F+#J{alKorbzZUweuC?Cc~&q~y92XUc_RuF_dk9u$fE^UNgZ?iS=F{zTh0d2Ca< zmaloT$x|P{GH{8?SfiHd`KrS`u!KDd9#R`7mJ^ONS{*!~7W<>he)mu#=OH;eeoBnnsQM+sdlm0IjUFb5qJy*wuA6SB2fs(9WZKS35dhtSXyQwkwUZ zxpK;x)){=ZHcnR-Rn12*idI=5hRU2(WoFH2ouc(4Ni%L_}X4F;bEX3$)6hNB>t1&?s_4LJcm} z%BUn0rWcgLXU~FX^u*_8;fBj?r?Qu6j$M2UKlKoj(w$!xe$3Opi|!$wWpf?DHfMZI zmFo?+_gS)=X6Yo^Tuqh5M^87L-&py*h{Vkkrx{rLZ0Vxj4pD^As{iySXu0+P!OgBgLfGb7l6F`MS<_=cSp+W+;?9-Y=& zh5MGh+7lf~*#Dcbf3vTu(ef{|^IN`q_W5nx&OXoT*UOdnsX;}1`2j=JW z7y$@*O>F<4(kN00?~_(}l=~<8d$gVqze)jp_&4(Vr1>5FcAwu%{xx|ncLsN3b~D>h zha+L-GJJ_4IGzMQ?l=JRvg)qIqzRZ@vaqc7jN`bx3Lg@Wk6{ojr5%V8ft8vhddk2F3&=&v;X zmGvKKe3$4W-g%q$O?1B*_AmFL3~ZZJg&c#^STp&H-|rwFY? z?j_9TLY=PfpdPgVur^Jes(>;M5QqjKk8dUG5?f0CkjI%X#StPgz-qnxFk$v^0gsO&EFa+5KhR6@Dj0xQrSgQh+=(9@%a`QaoGu{b_$??Pr}LQodJds^O!NcXs*x1` z;4LkaeD6z?HGpOqYMva|%Xpg2Gs2hkQ_(o%X{515pIKuq__~!&>rx8WXls^X+fs`( zx{)?q>yp7o;qjx@GSZ$dShpI~hpg|S@bGJB&9d?-YHrPvZvJkr{e<^siT(IZW4dr( z44b4Fv74CpSuBfzr2`|D1^nmYibZfN3kc=!L$0A){p|^VPqKzYa2(5q#L>s^(}Msy zlSGzMA|o_$R4fZ{uka}9LP~52m!J{}jAdDo_y&1frQZUcdS8Kj2jAmh*(*wha^VuxR{7UIkU+0>spddqgP5VtNHc*A{^X#fk{*kg8b z$y#(3+sih#sOLNxJBFU!#{m@%zhow?LZ+%>GbqY?!iF;vi($)FG7f``qxKeSkS)s} z9c-**;Mib4GQb$yFb%$L(=a`Ht2gt(`)0#^&KVNm5>~Qlc8o2_6d-+omuyD~O5Ml;JI|ILsY&e$}YRKym`Iz^)QoQ?8lQYrMWYj!H;p{ZI-2r$%!d2q&` z0bp7~W7XHNRQ7w_a%d`B7cLBSV*_%wZP>O=aVXy-(?l!Xdw;gA1*8WO`UF8fgY&U9 z!54coeLK1Lenb2vf3<#9va+?{X_ z16FXJ1B9V9M{C$JLg6j4_E7jH_SOu}@OK9rxUrAok1GJ$8fI+$+#`zA7~C2rzS$Z! z#JUYzimuHX#?KfUw?0TRGpQ6Zq^=p#_&Se{Us;q=un=Xt3sQM)!1>+XLw$Py+6HE< z)xid)t;gbnYSE>{IxJi;%rGuJ5J+H&X^`#bCaqnWN0da8^bRR8IF_3IZ?*+ZNvc%j zeXo#^x+0LU={2k-$MBf*k&xwrCp=u62CpSgd-asy-Vh>a9UfGop5Gfn$Qt9Q^&u8V z85=FS!H?SX!+t_RZsVM^(GlID9?%ZN8yRM#i)lXO%T8i{Dx?UO@af~V@R>XVtQ-d5cUfPdz;;cvXhZMeSQa*$3J@9r~2>3&b!tPfDtT}0FE;(Udu zQ^NTQrd%=6;KTDLD3AT*Ho08qE98J~PwP9_x?apcO4`orvw_c63iXkYV=|a<`Xk}= z{cl1Jml3g?UB&EL%n_L#zyT z2lS&HIDQg*Od4oTA7;e>qlF*S6I!J=+`#hw+EayR!tf$pZC6oVHqRI>sUrXaWBhWX zDT4~vW577Sw3?WRt0@D%KvcGtHf|KYvdcZJl4yL*`lv?|9eKE!4ba@5=viC*E*w38 z_O68pDse19lJpf`&~Ow{5>YZ?#6oN`Gc+-=Q;>9}7_Y(_t=J-}Hsfr{AdHqIfvm|p z+t++Je?3HKHn{VX9f0r@AcWY3)gI$y2Y(4Q@ zDKb~aSvW`M1@tjmua%xvEIpSxH{@W(juwNzUeh z8W;joPKz-|BfykHLmp-hUB!2JqbUcQs@IT%DT|uiD43QU=#r4xTH3rK==KcHq@1#n z9ow@y?quYN@n;T&v3_9sRkETH!<$e-OY9FM)2f2}s~Lh`_RF?C4>>9cYa}wX#;VpC z8+T?xv_T6oOgY189h4rTKx_P>4{PL5HXvI{0?p_RkYK5iDmcm%7+LJ%1wt2gE|#t? z?wR_MDi|`AH%74OKrf={h7fvgum(oSK8^t@A($XA+ANgHn$VyzweUl@z~_>n0OCfQ z#?wRrQ-r{Yww(T%Kp?qfdwyq;f`vW#_6dle0j@=hg$6Zk8pkrXcQZ3(LN0Nx=&P8= z8segSxHZjy!IFpH&c|ShzQ`6v_j~U*V8PZ)wUlmtLL5L-TT3|JN`Y+JM!LyUTe%ao zt>r(6Yn)=Z0y4%*X&6EM^&>1-NTv88KDQ{#Tu;KJ{HF1Jt8Auu`SJ;HCtSa7e8^*nF8Dz(mg9TOBLcC20I{$XCB~*> zGUWO-%vvbWrhUk4$X2}`@Wpso^hbH~FtrM^X%{vhGG)aOb*w(MU9o9L;CKK$lJ3Uo z7G3Ew6($`;9OSUJDEIn08b-Z?zXrpmlcfx$e)QlCoe0;K&m*jad4P2rYc3%b$|F3^ z9AeYny6lebH(ZGIW|3*y5bFxq0GrH2 z3Z0=0=Z6SQ)i~yipvergn7HW?TC-Z8BT!XZ_ekUAu7%W)?xDxx8wtgSnM zi3*0|Vf$W&+1$iLs-eyk$kvH(#uKP;42jc$xBS=|1}eS=R?=H!mR!n^$xzG2tK@iH zx!pe*dS!fd%jY;Eu|D$h*r*52Ia$tnv-s0R#?{VvcxZAzsmRa^$Y z?u#R;*Gj7Xv@^PMnC=U{+u{16(_<&~wpqHdI-lDi$^PYy_my!bp7(4|vxQkkOdG7$ z9%0{pqI`wvpB7?{QYe2?D!=j?R%M(&XO`|h;en%sHehJv;O)`QyH?)*-|MDr8>Tq% z2K}c@U}G{tqjHby8?0i=w5f4lQAN#-BD)FmY~jucSy8r!2YVx6V%r&cLIxjr{dgMv zWNh9weT&;8&fhK0evZ{)mw5i2Xt@?KQ?PE`(0Q}9dQqTG`=C?wqxj+qa5!zk=bp3G zbWzx`w!vkeKc)fVm)fQ|>}<>C7~5*6P<2ME_>xJ8Ws|&ujqJVCEZ9A_UvrYFA;fA|7Y9H=yq6`+1Qq^hjzg$zW2bl#5B~#agDHKP57*>J`YTdwzg}(iB{+oD4jN?)KQm>5caHUUoVO2 zsbRl2%N!*Ynfr?OqP?wh^TKtkXPRy-&ikTWoNj%-cY%97Ie9;(`NMmp$kFIoqf9fYC*5l-p0DhWBkITUsX1a0EyA&)oz-j*ia)L~*p zT9dGY1Ct2?m19NUV1Fb}mm2l$l`A|~fGJHk0~f)%AkGW&bO*2Wx_rVDaX}34H+nmf zeM?MU2Cjj=$9%s5^GUPkAl_rRJQU|yEWQ>4$ZE(Fm^>kvFz z3v>XHv?vgVdFQP$AzO({(6ILy8 zM-?lRFapRXG2}l+z9_4)8h-aMzZAp}{(!!}4mreUd^#ifi9^^|9=hHfl_73T`W=Tb z{h0}R@^ge6-VMwlIwsorrq?!Jxit+eL?L9cAqqOq(L4}A2|`ctkb5{Hv?T};i6F>T z@(>#+??3LkCH$8ULF>cjq!wh#K19*= z0^1oxfJ>@!c>xQhShz(N>;q4Hrhv#gRItD=GR*@`h4jEy(FQ(IUuS6FtC5`=42+Ef z(Dw4)=%YoG>Jh_(-7^Immbe$BOTv;MDR`raWi4S-pj78Y`!qTs%6)HUCkhoR4UTXz&%%AhZK(QYIe;`Cb+lQthcC)-eDxH?UJRI=;lOGtJ;6 zs&k1}hpt+|xqYESzN0m}m5|{JZEAvRbijogLJKNZ2ZzY!`TOzm;GwJ8onBv7ZaY@5 z=M>!urtqDJR6t{+pV-Hc@VDj6L~q0G$ro-ld|#Ot9aXA1zD=hl5-NBgz~q0rDp^;oFfrEZ_W-JJt`-vU8cv(~>;UyC1w4I)=vzl(@eGaVm@W(yz2 znauOL-d)Q3(+Va0TAB|#$!}5Y>4_$E+?o+@NQd?^q4WEq$l$RzfK6BqpF2*`rM@55 zWB&c<()D3R|KB80S7AXj-f(44#nYwvQFJYzl|pT#zQyTJz8m$}bw%9OUgrcY8cVZ#K!HL}05haHyGnRS+=8eO4)W)-H`oE#A z`ADdkXwC2kmWbNZ3>OI;;3^5Js7<2pzz3G_b^4(C_+Z+#wEWo|Vxh`Yl8r%@W8C5E z(7~Lq23RK%b*fnj(342oA3=5Q5CQN zHQlQkf8#~yF)fNOgx|`3^Qx*)Rbe10@cHMEs!}coF|3#mmk|wGl-QX(sD}9`Z@47R zS(FYf4Les~-)pB<7Y9!7>z1s;(Sh8H89?%FTw=w+dWa=$WIJ(jW7OTA=sSA}{Y>Gu z&HHYXLnRbpD%&b(vOm7!b+l(=?qAW@L*ldhE13=J9%!TnMY~SxOp<)>r?opvOB)te(?KP zjTXkV0rD>_;g$OzE|2oxMt5s$e)@f}Q`~%onmA@tlybg*g*_%-)U2y&bJMVKyB@IL zx@c9qo?cI{7qkD}Wf{Mj{aL}k<<76wyJm@_?zs7P4_hqGyW8K;?yA8p^l4!mGweNb zSL7d?o7`TiOW&twtz*wQ_t7|@sM#Al;;_ejnH4>=&3AxXR(iL2G_se@s8C!c$x)LW zsjyovU5`+d@BuS4fCp^;wKU-b#qAoUwZ81)U-0U-E-cO&&w1F+%d>%hnY`N0o40}= zb%cGk>EQjGp*Y7CRjlNlt;o^;*dGIIhKfH+(e3|!%fBtJMUE=5Zucx(`hv0J%4yA9 zl)VW2!1YC72v!-!uLS+9cHLZpX=O3`iTW$z!uSyBkXc?c=B5b2=J4Ys4PIB|WtY&L ztO$E!X!bu_X}!H(GU$LE{tfv3?w}wP`<`pA*n+k=}2K3Z1|Hp+}P=3J^|< z5mq~`tE~x|T<=g`6HbKTSHn%lu7sVCixEzH5WaTa5ZQY9dmRW1Rb$&r4sOOGbYvde zIP2=#=go%?Tfsxrq}g)+oC_Bra0=i%X#IRu@jeEvL@E4xUj6sH6I2%&S+Dom|I#_% z-2X!!-25kb@CE9x&Y4!$(f8``4|&i4AP?lf67#HVYqvWLZEwU7vmV;?zMTDf?)`m) zr1s)_*WAq5=!})0MU`I?#Y*9RYlhpba?wKH#ihe^^sQxN(5g8RVEB;6=mj9bx@V6@Tb_Gk6}el2}Jau)a>>m-#tm6PWm`4?)7};yYDO^%<%zlk)I&{OV#_)xb}Zsb zbqTGAm5^bA5miB~LA?G=@}3$uo8<&`K+f;IO${vMW559i850R$tQpW#1Y5WQZ#YZ6 zGRahD8QBotunhUAhOvBnY52#p79TEjH5$@z%zI&pc7%EP0_IJ&pfv$9h(EAV2C}Fv z{GbQ;zN{)V=GjRPkK^h9vGON{5vr0Y!cXwPpG@^cJ_8&0ev;Yh^X2w@zq;6*R8Riq zUaW54DKgy7Aa7CmM1?3KvO#F{x&F)F06Cov^b$aT++_ge+}ig91tcA%p7{YlRJxD` z1#5Xk6uiQZgQsQk>+Or&z#*(p(G4Ur;yhfrb(ua;dh2*d(Joq)fL8{3PqP4 z>2-wxzJso?3tadWw%YF^>v0RUBI}cIYl|+U#C)um%-kQ$$BC5MkNhP3&et!Q>zhO* z{LHt^e+oY^Vd(>f=(cW$fw)BemfR0S&iK1~BJ2SluA(6tGcd>-*j__%d&+$zfM$DP&xFnxZv6_%O zG8>;@J2GkQH$D(vo9UgBD4MQ1U(+NP|m=6gjN>w5%BPx9d7q!1ylg|ORd;y4TN|^^_Q%HsoNMF>> zd~lJz+eb|+9cV$3!U_*I7#FPgh^dGSGK7a15*dn(jX0x(eR;IA)84)h8$o_%4XwP~ z{n&Luu-H0RY)}TaFMs+17$56<3XL&ZOn}+^=O*I6T>mm1xqUM!Hj>m@&HmS8tItbE zatDzR)$zGej^ytcSK4j{Pk*P%4}Yi1u}pxevPE-+><{NZQ)L^HK)_VlodY;DJdS=Q zU}9`Du6=u4!`$h=zRvmG7wTCn%m#(V++UPwP zcAewj1Og)CvwdDJncAl1)mnO#7Z=;BA%8){OcF<6LN92?IDbcU!`UUK@Vvy{wXvhX zCBdau(Se27r9ofeRZ|B<+gpuT+pd9t3RMT!jx&{M_!oTP1)>DD<~8VfpLX7@e&4o8 zMQ+EtNy~9S(5Nhoz}d@_SPuJbXJIB)7Q=wQFr{)=6IJw!hh$pjiG`Uh7rv(~vk@TE zV-99v9+%>EP_ycnSH$I|{?g20mQl0F0EWy&I*O5>aL0kpr-T47WRC$jwNsSV-u$yH zuQ{XiHh`Pl4k7JS=7`e{0ijL&?cl%hXr}Wrr^~@Xj;fHlRp`Hv6!%B+2$*rcitiqc z+VI$OWtMrf>VqHz65cQfcSP+Z(CyWgHJKMniiS`YG)66w69ov^>| zvU6!njX%ZtT-QBsRaY?YGv4+fWMB8_x`N;KkZf~*lsDr~O04dL+iwjoTb3HmiVBH% zN!PiRGtXQ8H^+(h@AT8oXSxi1>89w76ze9?OAeXalN|9SKZ0Iz$1@dYFqb+J?A; zUel0w9CY>y?=uf@&uM;Zn$!KZy{6;KQPv06no1)Qr`eU-G))4F?1?1muuReC_izOnWrG6Hl5#-IhqKrMppt-UHr(errR%n@i8ebuQ< z$mxFgs$mao`YHW0apPMcA?vrb%H&marRZ)73yo797Cu`$MEI)FsZ(!8@gx6xAfg!M88AkA3A zD#;b3dJ0tTz$i_)J;^l95v3a{aVj^JkR)^B_YqPPYod|<fToJ-MRel#_KQbh%G}9c@45{W(!W*Zl#N4b*%H2lfre%hsXhhu344akP zx*Yyo{Zsr%6~Er<5OF{BuU2N(G*dWHSdGVr=Dx;}#7`~yTaJu0`Xl2tD>-W&sAS4Y z$s(ksa*>9m%6JY)O~-zfXzdwY9+$f0yv8Ukj7ZEKrguZeJ}gxme+!)=AD6QAWc`@z zXB|s3tf__M2R0!WsGMA5kO8)9DJ0Jpo&gREJf4=53H$4;}kZ2 zhS3Dz&P(}Wvs~=GUOjfMll9cNTdg5$e%T`Uv8jcDdW&UBh#?!=BUWl=ihiEJWew;# zcwcV=M0m_>_4u%I`m%dHlu46W7Fa03W|kyMzG7ySyhTJMg;4>Y@rjHGf(C~MIFX5n zLi~>mntVi*pZJCxADH{wuX{MpVw~ZYwk7^ykxQ`fH5dgKqG$>4@*YIX-1Njs|F0K} z{H|X!P@Am%tg_F2%YQBseO1*FtLWb0lyw0pj~z@=6{ix(UNtO=3Y#yIXZmt-=`oho zXFQ9tHQj|#dni+nMnQ@!C{n^ydrM)yy&wAoUfq`u*7-U0_VZw*EWFYJkH0MN9!JZv z3)XY$1Nb?oUczG-WKo3dO|Ub6R`u7FRo$Esx*^i2xPab_(9cgp9{XA%wVr&u51az4vImjgQG>IKJqO|8QN)IVM+{cdSAc`p+0QS|?*X z^fU?vh0b4y7|h8KJ{zW4R}Qa(ArS`UqukA(1#S>x9QAiF2rEV#Y7085_(;&n3~=uc zc58PBn`BInGtipPGvbsb#Yh+588#a>4I=89=`|QqNlaPMayA*l7aejzr?RZ*9HD)K zBr2T|KDZgwV=)ID>S2l={76%q-Rqh?~$T#RfbTaad`-S8d{RHZ^aNA8XZAYL7&!n`-LVA(ZjKU(1F}W@^B0^*+1dH zAT1=^qZ{N0tK?58WX=G6FY26i1f3L2S1OtU-P=Hj&7KHRxraDjYmO$FSsLo-@|~YW zll}feZD&HBVORoN3DJZymuO>DSwfCFRAR7jfUg9rewQOnoG82`46mBq`mX0(0TAaL zD2T$VrsQI_UVv_VhBn(XE|+sfpM+I*6B6&B)C_(NiZdZ^B39y?kh3|;6#pZ^04%?j zzsytRMaWErk?8;cP6L=H{R4P^Z-em=BIRpSayu{AcpVqu?kOHMA~88X5jj^iKq{;P z+d~yEvNJfiDv~L_m_oLv8W{AG=P7Y3UD@@DsEvMV9363I1g*|+di}Sr{9I3n`4v0h zsK53-?k>a3N(JlZ5$YQ+rTpOK7m66V}0GHfmelWjKr0zVSQ zL7qrg9leuej*tZ9ogni_t@kC1VCg1yzL#(on$j?*4B)lG+I3;;rwoW<>3o!pa3Ih% zSJ_CWcH#7a)Gt~a1;oU#2$aD%qwfg=?^ol+_;nz>I?<;tG%?m35k(EQrj~3PhB_y; zVVxeAp$v9Q`r^g|)_q8*qnD*8h%BeXmd*ONkTIhh6e;2YzsylbzjU{Lyaj0e6{28` zScf`=lv4N|B1>dUGyxsc>+`lcrYiJ@Kp&u1?a??HjO1r?9%=0YuBE8MuPSojCcnI%cb_6Lb)H+L>*_bubr5;U7(a zIGMMr&Pq_;t$9YrWkEPcWI-cjLsWYnrF>nxi4%VG7NjgJL0Ufre;?EDm$6obYc8j4`Xr2>o|r5x%ORV-xsFWSEPk2oWIrj>G#%02qo& zfe59~(ZsRqLz9<=ipt&>>mb53u#H~yh)vcI9B#gdz*7RmV-XYa5mlo_qEvh(d(L7b z5GlAF6p2yxD=I!8bVC$E<@29{4}w@rq4WbTCn|n2E4rxQC_%+1$W3hIXE^xE z5z&M*IS%UCLd*c)^<9r;7V_DJlJp@cAYPF~I&-OSK^VA~ZvkA;O4q7{<0fh^z$^+4 zYXO|d77_VIb8FzkvPK3oQA9kUQVCcuq%cmAC8WXXN`y(Tp(SDzaUZLNn)JOU{b*>< z%QUCqW~q^l&;_ni#n28>H$1QojG8#~9kmL{5ytjpi!aQ)XhxRsOL`YL2V?V+3o3*Nv*zYJ}O2RO!c3 z>7I48C_-*lDSUJjzlx7SpMZ+mIC?pp(vM5az+ZV(?aTaG_5tfipY^-?_M)=rCoE9C z1*RdME)yv+@5(~iVx*4@VQ8nCgS?Q!c!TgCA=gk#?>ogmmP9<^BP22F_S}nF0fESk z@in{)pcN%&Atcd-8aQ5s%a2dcpkDc0g1m-!%Bi}B2l5q$^BKOu>iyYhU8ksho^=K{ z(jM12-G6MTjOTc~3?xDclj$i}?akNpM}EB(pLLNVn#58(Ch*jV(scJYi6!}#&@zi> zsgFBi7*^stM0RPdUL9ECE3p>-QJx?JQsxrkN_>UMFO^xPQ#HpCq}DLp#MYh~#N&s3 z{Vg*M?S;3VR^qRhUo3KyX`CFq-j}C*ex)fh#S^j7}j(KTWep+^uq*m4FaDcp5l-}IaWr?e`;4K_XB!}VgxpD31xYt>G zXPoD-DW_~?CHKyS(=@UY5`k0ye%Vpt6IM7!Dy1+VRI&q^73zHZB8#9^EAE;8%w^f#xHrb zq|PlX)2_c9PwhJNyBJ;b6h(#hCNN0D?zvz4_4B}2PgIBjYaG+KSZ!Hnlj>}`ro+g?- zI%#K&Ug~r>>KGw%1~>cd?AqbvzN2Hdk;zDvo9SiIdl5tfNoPfg-C3CDB*1AZS`PjY zk^WkDxH*eWj!2L*)U>(uV|~OukL>w2JYcHK$Jx5LYUL-_Q6gkVR8V46azH$qj$Hd}$Vki{X zL{eCt6{zS0Wa?$wl38{6{<{ACe)^k@B%sUK##`DW>*sIsdNI~I!72}?3*=b+aZ0E=9=&?V)y(Oq@;bQN-Buzlb6Wi;NAH`fcjkd1tz6PY< zLgk9>R!|*4fye<(?4w>`?D*h??`I6}o1A^R5!u4pi5$e}2Qf&FX>?2|G3Hn;@Zwic z#sd4+h`OIBLnILQ4&3ct{KGyu%Y*!-d4KctpiT02hG4vTtwcD4ClLYamW^GVe?SHm zrXhG`nf0;Jg$d0P6N0MFEQXv(Aw({ia!MCh)>tyfAb)D8u0j5&gM1}j%w-Ch4a#7q z94LMfwE@A1pGt)#7kLK~pL}SnmqI1ic$*~O`{mW;wsqimtH<}HtxtCA6{Jvl&N~q!z+v+7kN=h6m=a@M3tCS`~mdpa--l+*spa*$u1V}|}Q#*AD#fTIJZY+_m60f@L=(gexnwi2Lw)uzTKeAK-@DT5&x5?Do}Gi= z4hWJDdgOP^zsQF}`bmj{0QVj4VMjeo$sZvk>l-h}TK{amtS`JQ>fyCYW#_lq(!Q1b zhKxRuE?$z0qoJ*P77gQmWbk9Uj(&61*&NEtX#Mp93e-Ws~Q)JxmB+&7t4uN51H>#S3TMdPUah^=7;)RxU0R%j^zs*vYASdfgFLv&|MT3i6niD3I-;hx;Cio7eC0HX7&} zi(a5@zizGMXBUhkLw;9D9HVnD+|?_yVwV!#TUJoLk4FaJnlM#GQLK0{?IkmQjz0({ zsbzH;-H;hB&t2s`J-yCMy})+rtREn$M8*X2*5VbI2Zkv_D(z z)TqI4b}VO{$4Dz#J43(R-{{XALon)kT;S>O$uk;;z(C|Z11SG@czzw9kLGlM+FiLz z*=+jj?NOcK+vXA#i{<&DM#Ebdzyi|fqvGA3Fea|~pC732-x&s~@~jetDy3i_<`g_9f+7==8F84u zih0|e<9mipYASvbt>&!%F8ly%wrN7u|68MOedgGfQDqN$OsK_Ytx2Q1epFgIjeBSOD6_dsk z^4PP6ji2x4T=~fqn$jh(+pEM;iITt zO350a4$#0*!l0j%qm(NsvP5{Q&cw+8&j37Lp%hidh_Is&cC}+c3>3bgD3C#Hi7XDQ zaE9e50sIx%CA%zeCt0z7w;t#+NGgcM#8Rk3$thnrh~oe>d=b=$2)cQOje}*6D4|$} z$X4LRgej7YF}F#0cdoV`DHbsnK1i$*8mgtLK_HAo>BSIm9G3~M$XAhDRA^lC971e7 z;8?NZgmKhil(KIoI)(G3m?MaQQ-=10A{r&g7>ni`<{{fVBv{u4Nr8d`(xB|T%79NY zK;Na#zqu0fR)?09i5sBvv_X<^@xXR{)*n(_uX`u~uj47SeWeCaS#9%gX5&`ov0|U{Iv&4Qz3>$Vr4%i1; zu7IroG6wopfQfPgQ$8CnkdY`1%7qIocjIzhC)n$|0EG!f#!jmAO&^3dXQ}@a7G6bLW1ESQY1v7YO@o8hZ?75 z=1v=O${~^$OeFthOH^mv_Z%G!zDGn!L1P@&TIYj5HL^`Zq;8vi24%*(Q zagd+TV1w|3GeCyrS{EA!X4^*MD_A@i6*7>SW1hvP0S)`WZWUie1ox8aU z%`z^B%{ddERHApIXKuCaAbI5xcttUwD&n4*^SmK>yu$Jb35DzRdV*c__c!<43*HFc zaI!r27ae!6be$mifW!029I2!;S|0=wKDU1&C=l5}1G(HCI8J_Hn5@oXAI2Zf3pPTi zd0~hT6}sRwx=2*iL{)HGwm>3$Z12xQG$Wop8HIrD8o=*97u?{)yiz&WRTg}#bsx?h z*nS|qb&2C)7@;!BJVW$kOXrK=iQowr$g}D}K_a3F>jvHu zj2&o$Appe(%@h74|7C}>CNg_Pw60eF@u00P|y zof`0bz$@Sb%UNOuZO_Z9wD55~X4DAG)R*i=TyTPBcl#mGc_}9(uC(tV`9S2`G9eWN zFskN>1#TP{B(cXx$=9v(P6~GJ;M}LmqeRHrAq5}>ATFpvLkX0to@jkQ3j#qBh_Q&8 zQex48fD>RoMHP2LvTlp?RpET<)S|0Hr}hm*gNP7-5Gk-aOrASqm;PE_NyL zC>9NXJOB+eQf~72P0fJ`>`UG$hAD)}1qnMcngVTD@s@NB!XQI}_<$L~f)YTc^9USa zSJi+Nh8PA9B)qhTVM>V<))`s|k|IC?`H;Do6$%!6fAl`K88nC0O=;Y~22^;`&$CQ3 z1$SR~wGIp^3L-ysSQx3%+Cv~haRwe0LY9U2jh^C_QB6okNQVoOZon^qIg*6VHCh@X zLJ2YbHAb2$Zr>=I@fv|{cN%GLKJW+RW8f51kcZ16yLg1ergBP}m}%(->Fk3blI5h# zD;VnO?SoOIOev&LxEWPwDM7Tu^@2DeHixq1FjxXhx+mZlMm#7>73Og)V^ zU-FM(2w`wJaU<6FW!T!oCW^_Wgc$`hLottQSkbkCt6+)Bwcdhano9weJMi0l24gZ) zkcl&-P`LcS;N{#YJ8K3pEH3%m*p19#DI26PUK(ABR#+1`gA2W6xIu`4ONLjdQg{#} zXtCYE$){DoXTE4ipvImMrOu(?`MOAp^pv4A;^F+@D5!x>1Q<(1|G4(j2vpIMq6$rs znCE>^f2ZVApY`Rn&%bya6hjn36kHG~f@l#(kc1S+6kGyuutSRYFeVg}K$i3&6j~@} zf4LEaR8>XrLDVD$tJX)uqBx4zRb^3{3G9RaDChnO1*Wc9!97M$BO?IIMFT!CfiYn* zTtHGMBLI4a8)#yO8NDYCzoMu4+jE5O$aHy=Y;jR9$c%)l)mxPhy zs6+~85Gjm2#a>#C>y<$VF(Hvo3LrtL^>O4diRX~U1R?}BNfcx_;$apDK!v95MGArm z5o>&;I0Zq403T=YfzY~QM(cEXTMFiqQth08SkMx=9o<98@n>`)-RWtO*Z)fJ)a&-Zk8^Csj z*= z6H6IADdo=!oHZ1s2Z2WMyxKygZ>G{7%-NK{ACieu%n{(9BvluoiqEG(|A3MT7DVf>b-_R>`Ia$= z8n}Znd*nG=N-vsNu1QGf(+$r-3`GJ(fFDp1Oq5;$hC%Y%gXA|#0xFE~3rSdrELLWT zgJ?k@^w+d-QQ{Mfu!@6Pp4E<5)UXgFG1i>9D{fiHKB~eWqQB7xRg$5se$53r74Lr| zMiFpUP^9N6jUXTltz3dBs3d)0QhU)7t6(fcsa2JNqNDyOBicSF+i9?4OBh3~U zy8{nk#t|XsyrvgCIr-L;)Z{3oaI< z>Nfa9682eK8Yya-qsB%|vMRy|Whzd-%A^%y zC0~bj<+5Mh%;R_IZ3_*Ni}#X$+Xo$A9hf}bX!s8n-jKzO1;u%0xue135?1h+e1RH6 z@o)c{$4}pj9L4)JZ`#XBkUo$8ToBGE6oqsaJicrVJSYe*{&!gM7fXqKb@7%yQf?=5 zugB2XcmMvX>jRr@@P?PO)kQB)bz#JD)1rZd&Xx3zwCWwDn;`&V2VE=Q6_=3D$)D6r zdv&I)A18c>^FAisB5EBWfzXZ|P>4c_N2~Cs%h^nfHB3j9qeOAa^s+{8Ydt!TzW7@| zm0#l0CL^`%)}kOwc9fYcKcxS<;t`+7WC_<*OA%RRmaummF{{u|3d8szaG zuOx~RlH<^k?)W9L%Svq$K%c(6;-9=&Pj3la>>7hx^n;kxfmXZ~e4Zueo!k9k$d}JT zy}Rq}=tho=TTKdsQ@RHy|GXW8LA`bWTjVO)OwiHZt<%bG>Mv(Ss` zVm@fEus?F8g5#fvjmCN`&M`QRoL?2H)L1f1S&pRp_5`c-5}0c-^bGkrRL1e>^+_Z% zB^`25Oo(v%uTEQtGj)n%IZ?_Yizp6X&JyVd7;W8AtxL zwi7HBPvoak6|brhcO0qd7<(*lHvrr0<84gr>Fv_;DY8WaMAp?Ro?Sa1&qy^)-xdDF z9=?JnYxsW9XP^??5jR!gSGhfM;#rT0k$F>IvopVb$QMwaD{F>Vo`+E_e`?dkgGm+&5ee!8Y0aUHa@I z)!`G%hP|X`w*T+R<$=R_-;Wy}dxCF}em+OdN#O3`;qKs}!4z_;%ke!J z|9+Pt{POIwgj79;LdoOCrj@$}=slo1Gqh?ufFEq(4sGFnXB-rRld~yws6e`1p+wyx z0Oy@39F9k{sZ6jq`xgCF6$xA~8N!LZK#I9I85$%djrQsZ^#NQ6z`u9`*w%xb>{+Rb zuCA(o#d~h?xur11*ncF&0cQ|cr0KhSJfFVO>%t+PS$Q#zX{MO(nF#028RUxYC+p~a zWgh3F6=Xq`jbP*~4H^V?2#tKSMKkBvhw0EVQlayvnfw8yN-Rh6nI^i-2{7=#+IWvUb_R_gKhT54y&ELinE3MLwxe#UvkPjH&8P7 zq_!%(v@uL!0(;XoTtx1%wg^D4fS|U;PdN^=H(zA`zs@N{v^qtexv; zvzwHiIAO#8us3v@@)p7V0^7Y79v%PaANlJTJ;!t!b4#g9sEaS~SeqQ#wrW90rAKfIaC57 z%%wHmeyO_iZ*mP`X}>CT;Tm7hrr@MtKhUAlsy`BzX8VI%li|iYNJaYqr|q$@Cv~gY zyU!;l#!LBMrjp4~5zSl`#XJHY!XV)F5t!hbFNW|>VdZ_$=P>#k+`MNcrgMl4Xp2ux zI_Vq2B-iIfc3HN_B=PkTB3au$s{UbNyi~qPpLUeWOf9_xR|qt zdW1au!VJY0<*IIs?MW*X81SjY)L39Mn^a_H!aN$GsP=5i@|k-|ZMZqud#?Cm3p45= zOY4ioKk!nF2+kydmkq=f{1L>xaPfQ?(r^gt=-FxUs8wn_8WKtydwj?|eaU>GGOkd@ zzHZ*Z%0F?jfcs3fj3qwUu+NR0x%|O-bV^#;$M6kM<+(BfrxFAK0qnJk=FV|P9&ryx z#2>hYWA(Sce}t#H_R{|3( z(I>_q{;vc!gt-2Yz}i@So6C+jDw%o>URO6c!a~d%iSC6hKqY09nV}ZpfpVXlB`l51 z(|v4jma7*T!MD1{*Or5`S<$0iqBVv^jm4e^ELsPiwnF_tlgY{@J; z3Arp9mQbtW7o+F%YE?@+_Yi@wqsAW@-zFP23+b^V@0KpNczj`SZC;c4a_J^$4W>A2 zZ_5?7_3?QjaXVA!o`*5l+OhxY1ywQC20fID!Q^u;Xkx|?BeSYSeIBgFeU|+@?`{Qq zQeuQcF@!&H&?!9mBl^VnKS#3Qy9UJsij6sB1hGr+HRg!_u2yD`_5_2rfQU3EHHtc> zCYFt74=4Mqpg6q;vlJ%_i~QGV@{z8m5QoqQYFrkE1#6VN#zJXWg_khYiulnK!vRMb zML`X%h(rec*E}5$+8sURF12)N091Vf>5d8Jz`Kdn*Fr0PrO_})!3wkbq#fJz&XX+_ z)6*#bgNZ3z@7|ox*T64++kel0Fv<_q8_9{rvnKH7%=poCrbVr?=tYDjP2+mD z8h5{}J&lDh_pytTu~cs{P_1$5qsh$ww}Kd1(-dT6^Mm$Lt~j(g!)u-8=L%Os&7_iL zyj<~U)9Nd&h0_II1%~sO)9RzrTBehghS356o7$9)%JudRze>9px2^MLv>jitWyW&= zEwac7KVvB)aBjn=xiIbE#)EzDkV#yt6kX{LP=^hSeuy#1zwZx3W?CNNkJ{V1Lv~++PPHQVMNw;Pdd%b zI)ZqS9tb))Fb-cm#Y|DC$WV(MvZ;qv<)p?4x2`|M2aicT6>QPs8Ppn%)T&e2*D^(o zL>2^P$vI0xK`HHEJ-oiaSBFX>w*j8+oM8QaABH0O^gu8B5ehWE-<&RbIl@9G`hLI5 zEV$E~qw9KooaE`*05o_#PoH-oKCcc3dk$LIc1l?B24ghA1&&%yROox!R@{WA-c6nl5S~{um4cphGWx_ZZDtJQg{EpsKv!tzJD{?u zj29eB3zK?Xduc57!pKVGOZ}xq@r9vOs)1$y}f;|?di!LzSRJ~%k#-O{;jhuRp+fU0R3Fq z{(YdqtmGz_b4vG3QjqJiy^`cyg13^gZui!wL5-d$;$v}!w8?xL>&>Mxw~Q2c!4^1A(V%a4GM=hxJgI*4t#z}sv|ONGLhq}&*lN|*tB%!2UTlN(KgkF z57~dl(x!GEDmmRa|9Ctg^1I}m@hs)>y_9DDxpmTKbkiTiP)!1sLzP97BYIHpd`7i9 zgy5c}6q85e#Y+tB3ZoBiD z7X~e%GI8p+BJ4;f&Y+L^J>^S*VCga;^IH$bBhiO_cjLQ~1s=9z{opXzTSiC52!uYe zl%66Vnm&kHljRzIvVEt28-4%1ML51gW6(ExV*>uXo7dQNGS*}&f6*})$J?n%~SE5se$g2ujc{k4c+ziK&C z3=tGw-*tNaVI?+Wj=j-fGzs3jWe!!pwYg`SM^g#9aw!K{n)@cwv_qsCm0O&)TbsR1 z8RmBdf)3aDw*h{1S~ol|RyQ|eO9~m=H?4%8jhL+rhT;pl&jPxaFOpAx#{FJ!W9Z*b z4c>(mWgww2z#zb2z!Kg3bv3q6h;6XIz`*dq!QelNucpRKrbaGCjHbqa^kk|iMzjPU z2)!wDOwYKRE%vzO?a;hgmmSydeA6W76ary9xtqf&k{pF9!h=W9%_)(PCyn*fQBcLl zD8F#7#(hFF4vf?64MBvDLqRhd2toW}8ve<~uy1+OeZq5s=OLCo27mk6b>YFWyQjUf zqw?eh^n6-d3wXMz)kE@r3ywTG9rt!}o3^pAxNqy~TD3XKS+%);J+oci<({yB2c;3v zQUlX31OZIGd;*}Y%h>PlLN}ls(9x^VAxIDeeCnA5xxO>q_+@|wUM~*)_&}LY29qG; z_oEx3Y|!Ydz`x<-fcF5^s zi2Vi7_CPClyx7%Ho8#?zG5Ku#a`(J9uL$I9@}!kDZo&>nE0U`dc<=KyjGh>(4eWw6$)k;zw1Sy^Zmvl>UYS4&xu#pZNQ-s{v} z`X!?@s+=rUBa@Uxm)!buMryRUrN4w!F47E<2B78eLr&{!VIz_n&UrGUT=Ic#vC}U8 z%d)S@(c|$5;d-0r#X-BL0N_sMsQb1b`zDa6LniiOC)b-wfqZl;(!lS}+*aAoWqpLZ zgPA`ZJuMGIGP}{K1|2SK?_*q{*jmho5-z@A#|{9y*m8?j5A#Q-*vg|uznJwzs;M0Q zdakj|+F<)^??OSM5Fvf~o{vY?((@$YQ!nUu?wZu|JbB@JFrK^J!638kk}t${Qtjis z`z4hNFt5+;C)nx#IYA(Jz+!su65hh$aRwIu6`lLH!fx*@qs1tYoBs|KU+~QcKZiSb zpp>w07abXRSs&`)aVE+Qcnsv`cM?MCc?8ENY()-5?nDlKiP?1kSZ<9RQiZDXf{t(n zl?uc>6@IN|17oM0UY)wTU3hdmG4zrD9CVf5KSyFuUFbb$FVCvvWOnniG=o4HyXX|s zNrl8zhq33flYSOBAd81V9W;tDrKFYjLNT8HKYs5$4kwrmn=&^&Bgn19HK6y`$72os z)u(%GNdx#ke>dQ<6fmXeyO{l!_fRI6C3E3CeFJU$M;3EOl7vQPS{Bc#Pv>>@o`i3H zP@wGtzNGtNY~Q=(d2IdFm!|9Ft`;Vb-2{7(HE2Kl&GcdA__jWK)!N==*ByD{^*J+@ zDatRG@8k9F$3CV&CQ!~SsO4q{f#_lW_RF%uCSUVY=13{$1r&Djtl;QX1rQO-YAttpbI&M?|#CzIZY*X=xpBAX6zLz)lq^x~scKp20%b#VBpp>3DGMt-B(k&SlVJ zQMKZZ%-f*qY(&crUG04PnNme6gD+e4b2c)g=v9P4e*U>$IgXT7mvK5aT=u8u0+AK5 zrz{G6RbCpWloJulqjcRGoK$(ZCh=z>Uic9EhWt0`nf6>xo%Z;nfS1*-HL^obntWsou3n!m`qOH75+6<{X7ngss<_i zqskVEA{cEm6|A0ZbF+^>F@jlHS;k~Gm@OY8Xk3EY#){}GS#`=oCjsB#^U?HKT!2Ud z9_kLamL8A#mgb#z<9KSjkp;9K38`3{t@7dtX2D-UT3VH~`m94K>}#AjjGEbDQ_n#+ zIaE`>DR(ED9|P9AkFl=C!UexVKXzwcZaFlg*6N)CVtq3sYLl_#Wa#{au0hmFG0ks1 zk?F5`(E|;k{k6WkkKDZaZ%gdFSa6#~xZdXwKCQ+$nKHR1E5BHi)jZW;9fL!>Kx4nZ zDQgoEq?ZBw1%=ARV(R5hn4Pc+BPNtn@XEXPWlUA^ztFk7HK+u4YDi1fMF!mDzqHVU zqr1bR`N;u`h%t!^I~p(G>-yBrnh#m9rTxi^p^8AK)aD)3Jv42{zC*!%KMQ zvt{nHjwtH>V!guSOf<%Csh6%+p_>Rj9y=%>iqrc@a*E`%3rMEK39lR*CpBZ#YqeVT zJNWVXcJCea%A;wpW@-qBMNih`R)^!PhB=X{{o5>hg4-IdJX8aIy1{S71k0bh0_YRK`ilQrRc6bEkSRGP=0uQy$ z)0!fY&Dpn=5!dC_f0XU+@^zY}A3>guJE&{G^z;twJrYq!--0B=(GJS4LAU`>7u$CY ztI-YUT|IZ{51+e;I84tmJGTwv0__EWJ33LAu=70AY}}wqK=4X3Kk!nZZ&KCVaKqu5 z+-i7U3`_Z0b|>@uP;xQmqbUU(ih1jPa&lUH-7q;n`h>c)rYuhtZ%Gl?@y@6P0v=i? zXEO1QRWJ=4EVO}k6?e(!!wd`R1xrC@qwGEkjg;_jZIiqAfgN_9zWM5D{ffp8_=q(< zq68|oL^kV7z0l@JuK0RPTU@JPe{L&QI&aO)B8o22I#t@~rFNZV;nd7A!+4J_4`&sr zH1shO<_PpLWs?n`As$rsMt{H#I9&HrEt$5{k`HVeTqT+-@9?zaH;}=hvj%ePI9x-` zf5}L$pX@8;1I-}h~GFhn)Be0r*5fAvdU1M z`!V7yq+1kxv@sA(-xO5o7d+x^v@17dsF!B6)U%&gjD@Ym8w6yQg<@_x<7}1)E%6^n z6Z>sACD4Hrm7Fs7C^8U_n86=}Wprq0IPVD}sj@vd)Z#Hp**J{>eN0%G)d z?PVi+rgSO9wIBn1^jLZy^dTqO*g)G)vo=SP9iPSgL7mMTQ(Znz3woJL?VXa9+M)Q@P)rTE<`NWI9{W-`B|>d zF8FV!uAfL&f(ja^8dQSbenQ~m_}UDX)ghqM!&MSB;;6Iq`sbw5)pI6~p_q}OKm_LD zbKg2Yt|FR$WlzD_FnRsdaN7v%e7hwW)tIb z&%P>$GZBj zk%AO~hiOg--U)(zuZk&`8ziq~BFwD@-5PHwU|UTj&!9rFaI`1CBxxxT ze;c?Je*jMtzz8FmLwn=fR>uyKl6F}4Z2nz7swrUpTHnd*3EcWkRfe$#ST!46IqI?K zy5+`zyS*q^&3ApLvq3cV$3x(p`SrbtjcNoN_}l=DH1hbPy4_$)RcJ`4@5@3>Yt0mL zY)yh^{R?wsFmSPuL~5W#U@2K!qF?g;18@Fe3Z9>@plW|mPg5{RsPz}f+Mq=~y5_qD z=d2CHAsHQeX5P=?k`t`mOXCT*I`QK_d3W!DCgR-!v;8cfz(fAKJBJr**_w6ERg46e-U=h#kC9< z5&0d|OA7LP(5zBCx!Q2qwA0Y`n9=9VXNiikk5)??C*J*sga0*W%|M{omM4&c0Q(ha zbn+ap8ncxb=kwz}h7njn=O8n6+DPguhPYX}od2|+W&HHb78Kd*x8ya%h0uVf-`BxP zs!NtRs@axpZtKZdmrGx`XCN_aHRrYYJ`2oVCN#~Zr$jAd!9GKD0ZMJQ`Gki~^~ZLo zUWx^>rhE9c^0){epPIiy17;XLLcM!m)El-!QX(#lz;F&N5B}?UR$PH@h$aq&R(#$a zZlfVZcb2NZKOcBwZ|Pz6?X;SY;naMLbMG?2#<>YGBCNqp$f!h%Y3DK2>)`&i50%IG zrpH@^a(A3hwd4pl;`Yva>#UVre+$xa6hM@*$9CiQTIpV(b9W*~+bhbYM;BEp6aAb~ z=JC^a2>qW(;iCk&wVw0qG&!L`?h`nhur08lY&Mno=l6ySmwAyuLG+Oi>?8dP31don zpqErOz*HCH5D}lN&8z3>0$E}g^OJqBRok*jl+z>^3KpEXefol;>Jq`7E?em3#UJU& z7#~UjrjuSBE~SIy!&Pdj#WWUBVxZCECz8aEQh39~VUVnprlnjhaFJu1lgm zFBx&urSr;r)#|35wkPf846sCR9~g#zcjb4l)3AGkB#jTcIDhQfzgU<$4$kD?_grK4vFs_;NC$Bot z!X1ttn9C|@Sq}?jodMwHRtp**(-^W2ee(9wZSnq;m>bgASwt5PYkxxX1r2AG4u5&c zrcp|$_gQ8JHVcTt9VXJ9s=?BpUY+16y-l+F344O**ZitqQX(E8ckLi?KUOQw41|{K z=j!7ARwdRCU7~%~D%DL$f7~VFZ`nMjPHIRcq z(@eAdX|Avz%Mi%VHsmbVAhQdwyzw4O$oC8Mv^(^g8?(4#5)p2jl@`F$fj0hCQR{Rd z%Q_vQqWIcV;~~1Six}u_LmAAbcol87vd~RsfP8&Z$H;ws=OW>_ybxm^t9zlq#8?#; zvZcp*`ACE)_=rKMyTgPX>ZBVUtnmhk>$s=ja#6dhBzoyd2+L)F!*($ zyU!VLk#7pHg>hNCN06rP(tafcx#O#Ux!K1aZE_%#4KIR0=8gF)N&li}QsL_R5nt@Y z;fVXiNNg;lulwC(Y&7}h+ThkFQPzo!*ukG`1pQ5wM40i*UnoFr0L4GLKj`oo^u~^)cJtqd zTj5=-rFRW&V(>3nKZw{gtX9o|;< zwc8zcE!$E)19}1Z>3gWw%604;6irmAv32uU^QnVeod0>;f6dcyr-d_6W<$16=H?(_ zo`!D;mC*g5EvTOgd(wQ#bqT+!>^rBH7gUs1x;<4{l~$l8mCbA4tEXtX{l%AwlZK24 zY)y@@$nR1fkJy6s9)$tlb$#Nb%@fNd`^u7^JOjp_UjdU@%sDnoA)b zA^}UTcBfK_W5IFhr#PpM`0HjRIE zgjXTyB)Gfi+2tQ! z-dUn96{?Kub#&DwM7=)Q?ax2ouuj&z))NIFNFImT6Lba9@x7rHDsy$<^l>c$K9qvM zUT{GMQ_5YP%BG8Bj}78hS#8=Jcy7EZ5(A;y`a&kOy~Ha9_213@fH&rrc$P9u)y^Ba z^?Ts(2s_{?;3@&|_UmKqW*vsO%h~tXkER}hJgh@Dg|Ww9Q89@$K|*bV!WJ$0B(D zyXsQr77D~+TQXNr-p}_C_Fn+fXQfdT+9{D4#@mpHqYY1UJc(gC9)7OtyF8CU^@y*- z%T47kDeCX<>rZ|;BfB-@ckhsqR;FHotM$G`&F91lwQTKLz6>yFq3ZhZAERuYzlNtm z2WjgDD4g4~4vKm)o@kL8c+lG>9%sOuRzutpvI`U*=+ItJiP6C$>`>+S5VQ7yY>ZJ) z!CBl0vG<_&q5E3X>PZZA>r=!rjEO)x0y<%{E)#KcOZ$+zo-F;7trL}&>8g< zjG2glHcqA+PO;%!GW$DJ@*Vs8iU#=S*tMF*I!wrmxJ?QeG{W(PDMm(>0c}y6FKEp< zQ2|dIaMd4ketr!FZ>j8Sb?Y#tt5;EzSf@W<0HSvh%2nSd>#F=c#MG(g0Chopu3UYW zjn@sYyw9EJ4j={On4ns-z_`AYC}d?5FX0(}|~TcuQp1 zKrxC;M1;Tqnv_-S50k-%gsYv?x4;I`pMYbfXq9!k>`@(d*_A%-Qq%2vVK2JB*|mDs zxRUi#BGdLq4xaX|8HAVMy9jN^(ni*S7%f%6I#(Czo{{DsCOmb?;R5{2;p-`+C;l*x zGs;!%4@J1z`%FWMqv{`P`5)~y{LkN6CdmLAk!je>C5HSZ<6b^v%|sR1z|m>+nU5t3 zOSWScK@k7uwE`E=I_BjjNhoWd;ngt*vE?4Jm=Tq_QZ5`*DQWpQ?AGikfQSt0pC5k` ziYruc(Gj4;kZsEV0UeV0&Zd=?H>`j9 zQ_p^l8N=tIwsj1iIKASwqksJF%ShQy{1R-_-CIQ6c zq&w`3?hiXh4!0g`!FHi+lze4uvOf&t`_L?iacAPl6Q&j)(|_n2U$U1Yg~@(HbN5Qk zHAc|P+9SVNWhK#7GFau2o!CHSABOd<=#BXWAD$P+*AE|lbc6S(D!B_CK01+2x_?_t z;%|+)Rywe}?;ZO_58dpGe}iQqv~1BXws2hubOw}X#)#-vSIHuC zUC}iz+UG2oQL8*VFnlO6m|EIq2Jq$)0RAw$l1Pbp#>L#s=a$hg-$_%@x<`Gw+Uw+e zo9L?&w=1b-6R6i2+m5g0?9hW&T!vGA(@m8<5+!OkSvgOo9xI!|*A(caBzl*ku{Yw? zQNOxiJ4I}2h1cseK+-H#x)#rHt5Mc>2+-o|S>ev6`PLa`AgXbA$_6XeS5(&wxm(pt zvD&m;_)QtF8@scuHLG^owtzx=W*x^(7H!5!uisbf=iPPCn-06%Dcx&IH)tF9I@DEo z9ekZQ;{N=s0Rh&H-KW?)@+Fn?wK z5hB|1<%A?a)bert1!oL3fXqF~1Zw1*nhHjKLrESrtGzIbgxgt?N7CUu#>s!DpTNu^ zZ|o9`Q+hiKX97O<=OxFC{+kiEkaBu`3C)xGCj9AiZr}qEXLvCYBgRd&rw}PyuT&Yy zB!*-`1yp5mw@)&umAL%aYGiw_(p5=tM*XFVyvYO`o4Rj4Q;@xuJOy~{V4B3(cV9MP zV|Yfl9Z^>i zY==FPx{N%B_8vtUa0nqtjDKd<-{~{5?GOy}arE~K_0QRV{rvF%TiV#0SpS>iZ?tIb zBU*H@IzZr`1_m}+jtqwKUlc|Dv>!*N_9m{jW_B)&w(iD^9=10BP5uAHn*M!*BLCHo zd;VAC>EDEZEBt?W@E=0E+W(6V|LWl1=Kg>9@E^LA|E6PAl=<}e@3l`K8!k8)*!)j0 zuy0^;o+?VR#2WTa*2ZRbCYHo<_NHbw#70ggmR4?N#4L==aJGNXFgTl7n%NpT^AfxA auye6>VpRSB literal 38575 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%0Dr9v| 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 Mwu8eE9*}GQ0lTBBoB#j- diff --git a/db/Models/init/eta_rbac_init.sql b/db/Models/init/eta_rbac_init.sql index bb28869..516d9da 100644 --- a/db/Models/init/eta_rbac_init.sql +++ b/db/Models/init/eta_rbac_init.sql @@ -2,20 +2,46 @@ -- USE `u947463964_etaviaporte` ; -INSERT INTO `roles` (`name`, `description`) VALUES ('owner', 'Owner of the company'); -INSERT INTO `roles` (`name`, `description`) VALUES ('manager', 'Manager of the company'); -INSERT INTO `roles` (`name`, `description`) VALUES ('driver', 'Driver user type'); -INSERT INTO `roles` (`name`, `description`) VALUES ('staff', 'Member of the staff'); -INSERT INTO `roles` (`name`, `description`) VALUES ('warehouse', 'Observer type of member'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAConsole','console','ETA logistics console for Carriers and Shippers'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETADriver','driver','ETA driver application'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAObserverClient','client','ETA observer console for clients'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAObserverWarehouse','warehouse','ETA observer console for warehouse'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('owner', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('manager', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('driver', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('staff', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('warehouse', 'Compatibility with Legacy while refactor in progress'); +-- Roles for ETAConsole application (1) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'owner', '(ETAConsole): Owner of the company'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'manager', '(ETAConsole): Manager of the company'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'driver', '(ETAConsole): Driver user type'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'staff', '(ETAConsole): Member of the staff'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'warehouse', '(ETAConsole): Observer type of member'); +-- Roles for ETADriver application (2) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (2,'driver', '(ETADriver): Driver user type'); +-- Roles for ETAObserverClient application (3) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (3,'client', '(ETAObserverClient): Client user type'); +-- Roles for ETAObserverWarehouse application (4) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (4,'warehouse', '(ETAObserverWarehouse):Warehouse user type'); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (1,1); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (2,2); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (3,3); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (4,4); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (5,5); +-- Permissions for ETAConsole application (1) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'owner', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'manager', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'driver', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'staff', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'warehouse', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETADriver application (2) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (2,'driver', '(ETADriver): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETAObserverClient application (3) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (3,'client', '(ETAObserverClient): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETAObserverWarehouse application (4) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (4,'warehouse', '(ETAObserverWarehouse): Compatibility with Legacy while refactor in progress'); + +-- Role-Permissions link for ETAConsole application (1) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,1,1); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,2,2); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,3,3); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,4,4); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,5,5); +-- Role-Permissions link for ETADriver application (2) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (2,6,6); +-- Role-Permissions link for ETAObserverClient application (3) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (3,7,7); +-- Role-Permissions link for ETAObserverWarehouse application (4) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (4,8,8); diff --git a/db/Models/schemas/eta_rbac.sql b/db/Models/schemas/eta_rbac.sql index d99d05d..77b2b30 100644 --- a/db/Models/schemas/eta_rbac.sql +++ b/db/Models/schemas/eta_rbac.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Wed 01 Apr 2026 01:34:28 PM CST +-- Wed 01 Apr 2026 02:54:57 PM CST -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -54,17 +54,40 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`auth_identities` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`applications` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`applications` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(512) NOT NULL, + `slug` VARCHAR(512) NOT NULL, + `description` TEXT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `slug_UNIQUE` (`slug` ASC) VISIBLE, + UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) +ENGINE = InnoDB; + + -- ----------------------------------------------------- -- Table `u947463964_etaviaporte`.`roles` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) + UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, + INDEX `fk_roles_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_roles_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -73,10 +96,17 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`permissions` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`id`), - UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) + UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, + INDEX `fk_permissions_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -87,10 +117,12 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`role_permissions` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `role_id` INT UNSIGNED NOT NULL, `permission_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, PRIMARY KEY (`id`), INDEX `fk_role_permissions_roles1_idx` (`role_id` ASC) VISIBLE, INDEX `fk_role_permissions_permissions1_idx` (`permission_id` ASC) VISIBLE, UNIQUE INDEX `role_id_UNIQUE` (`role_id` ASC, `permission_id` ASC) VISIBLE, + INDEX `fk_role_permissions_applications1_idx` (`application_id` ASC) VISIBLE, CONSTRAINT `fk_role_permissions_roles1` FOREIGN KEY (`role_id`) REFERENCES `u947463964_etaviaporte`.`roles` (`id`) @@ -100,6 +132,11 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`role_permissions` ( FOREIGN KEY (`permission_id`) REFERENCES `u947463964_etaviaporte`.`permissions` (`id`) ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_role_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -111,12 +148,14 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` INT UNSIGNED NOT NULL, `role_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `expires_at` DATETIME NULL, PRIMARY KEY (`id`), INDEX `fk_user_roles_users1_idx` (`user_id` ASC) VISIBLE, INDEX `fk_user_roles_roles1_idx` (`role_id` ASC) VISIBLE, UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `role_id` ASC) VISIBLE, + INDEX `fk_user_roles_applications1_idx` (`application_id` ASC) VISIBLE, CONSTRAINT `fk_user_roles_users1` FOREIGN KEY (`user_id`) REFERENCES `u947463964_etaviaporte`.`users` (`id`) @@ -126,6 +165,11 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_roles` ( FOREIGN KEY (`role_id`) REFERENCES `u947463964_etaviaporte`.`roles` (`id`) ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_roles_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -179,7 +223,6 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `owner_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, `privacy_enabled` TINYINT NOT NULL DEFAULT 0, @@ -187,13 +230,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disabled` TINYINT NOT NULL DEFAULT 0 COMMENT 'This field allows blocking publications based on business rules', `disabled_at` VARCHAR(45) NULL, - PRIMARY KEY (`id`), - UNIQUE INDEX `owner_id_UNIQUE` (`owner_id` ASC) VISIBLE, - CONSTRAINT `fk_companies_users1` - FOREIGN KEY (`owner_id`) - REFERENCES `u947463964_etaviaporte`.`users` (`id`) - ON DELETE CASCADE - ON UPDATE NO ACTION) + PRIMARY KEY (`id`)) ENGINE = InnoDB; @@ -616,6 +653,140 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_templates` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`user_applications` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_applications` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `application_id` ASC) VISIBLE, + INDEX `fk_user_applications_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_user_applications_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_applications_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_users` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_users` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `company_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) VISIBLE, + INDEX `fk_company_users_companies1_idx` (`company_id` ASC) VISIBLE, + CONSTRAINT `fk_company_users_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_company_users_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`privacy_groups` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`privacy_groups` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `name` VARCHAR(128) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `company_id_UNIQUE` (`company_id` ASC, `name` ASC) VISIBLE, + CONSTRAINT `fk_privacy_groups_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`privacy_group_companies` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`privacy_group_companies` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `group_id` INT UNSIGNED NOT NULL, + `allowed_company_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `group_id_UNIQUE` (`group_id` ASC, `allowed_company_id` ASC) VISIBLE, + INDEX `fk_privacy_companies_companies1_idx` (`company_id` ASC) VISIBLE, + INDEX `fk_privacy_companies_companies2_idx` (`allowed_company_id` ASC) VISIBLE, + CONSTRAINT `fk_privacy_companies_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_privacy_companies_companies2` + FOREIGN KEY (`allowed_company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_privacy_companies_privacy_groups1` + FOREIGN KEY (`group_id`) + REFERENCES `u947463964_etaviaporte`.`privacy_groups` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`loads_alert_emails` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`loads_alert_emails` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `load_id` INT UNSIGNED NOT NULL, + `email` VARCHAR(512) NOT NULL, + PRIMARY KEY (`id`), + INDEX `fk_loads_alert_emails_loads1_idx` (`load_id` ASC) VISIBLE, + UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC, `email` ASC) VISIBLE, + CONSTRAINT `fk_loads_alert_emails_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`warehouse_alert_emails` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`warehouse_alert_emails` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `warehouse_id` INT UNSIGNED NOT NULL, + `email` VARCHAR(512) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `warehouse_id_UNIQUE` (`warehouse_id` ASC, `email` ASC) VISIBLE, + INDEX `fk_warehouse_alert_emails_locations1_idx` (`warehouse_id` ASC) VISIBLE, + CONSTRAINT `fk_warehouse_alert_emails_locations1` + FOREIGN KEY (`warehouse_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/db/service/initdb/00-schema.sql b/db/service/initdb/00-schema.sql index d99d05d..77b2b30 100644 --- a/db/service/initdb/00-schema.sql +++ b/db/service/initdb/00-schema.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Wed 01 Apr 2026 01:34:28 PM CST +-- Wed 01 Apr 2026 02:54:57 PM CST -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -54,17 +54,40 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`auth_identities` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`applications` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`applications` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(512) NOT NULL, + `slug` VARCHAR(512) NOT NULL, + `description` TEXT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `slug_UNIQUE` (`slug` ASC) VISIBLE, + UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) +ENGINE = InnoDB; + + -- ----------------------------------------------------- -- Table `u947463964_etaviaporte`.`roles` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) + UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, + INDEX `fk_roles_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_roles_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -73,10 +96,17 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`permissions` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`id`), - UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE) + UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, + INDEX `fk_permissions_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -87,10 +117,12 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`role_permissions` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `role_id` INT UNSIGNED NOT NULL, `permission_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, PRIMARY KEY (`id`), INDEX `fk_role_permissions_roles1_idx` (`role_id` ASC) VISIBLE, INDEX `fk_role_permissions_permissions1_idx` (`permission_id` ASC) VISIBLE, UNIQUE INDEX `role_id_UNIQUE` (`role_id` ASC, `permission_id` ASC) VISIBLE, + INDEX `fk_role_permissions_applications1_idx` (`application_id` ASC) VISIBLE, CONSTRAINT `fk_role_permissions_roles1` FOREIGN KEY (`role_id`) REFERENCES `u947463964_etaviaporte`.`roles` (`id`) @@ -100,6 +132,11 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`role_permissions` ( FOREIGN KEY (`permission_id`) REFERENCES `u947463964_etaviaporte`.`permissions` (`id`) ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_role_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -111,12 +148,14 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` INT UNSIGNED NOT NULL, `role_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `expires_at` DATETIME NULL, PRIMARY KEY (`id`), INDEX `fk_user_roles_users1_idx` (`user_id` ASC) VISIBLE, INDEX `fk_user_roles_roles1_idx` (`role_id` ASC) VISIBLE, UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `role_id` ASC) VISIBLE, + INDEX `fk_user_roles_applications1_idx` (`application_id` ASC) VISIBLE, CONSTRAINT `fk_user_roles_users1` FOREIGN KEY (`user_id`) REFERENCES `u947463964_etaviaporte`.`users` (`id`) @@ -126,6 +165,11 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_roles` ( FOREIGN KEY (`role_id`) REFERENCES `u947463964_etaviaporte`.`roles` (`id`) ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_roles_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -179,7 +223,6 @@ ENGINE = InnoDB; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `owner_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, `privacy_enabled` TINYINT NOT NULL DEFAULT 0, @@ -187,13 +230,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disabled` TINYINT NOT NULL DEFAULT 0 COMMENT 'This field allows blocking publications based on business rules', `disabled_at` VARCHAR(45) NULL, - PRIMARY KEY (`id`), - UNIQUE INDEX `owner_id_UNIQUE` (`owner_id` ASC) VISIBLE, - CONSTRAINT `fk_companies_users1` - FOREIGN KEY (`owner_id`) - REFERENCES `u947463964_etaviaporte`.`users` (`id`) - ON DELETE CASCADE - ON UPDATE NO ACTION) + PRIMARY KEY (`id`)) ENGINE = InnoDB; @@ -616,6 +653,140 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_templates` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`user_applications` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`user_applications` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `application_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC, `application_id` ASC) VISIBLE, + INDEX `fk_user_applications_applications1_idx` (`application_id` ASC) VISIBLE, + CONSTRAINT `fk_user_applications_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_applications_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_users` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_users` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT UNSIGNED NOT NULL, + `company_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) VISIBLE, + INDEX `fk_company_users_companies1_idx` (`company_id` ASC) VISIBLE, + CONSTRAINT `fk_company_users_users1` + FOREIGN KEY (`user_id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_company_users_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`privacy_groups` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`privacy_groups` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `name` VARCHAR(128) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `company_id_UNIQUE` (`company_id` ASC, `name` ASC) VISIBLE, + CONSTRAINT `fk_privacy_groups_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`privacy_group_companies` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`privacy_group_companies` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `group_id` INT UNSIGNED NOT NULL, + `allowed_company_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE INDEX `group_id_UNIQUE` (`group_id` ASC, `allowed_company_id` ASC) VISIBLE, + INDEX `fk_privacy_companies_companies1_idx` (`company_id` ASC) VISIBLE, + INDEX `fk_privacy_companies_companies2_idx` (`allowed_company_id` ASC) VISIBLE, + CONSTRAINT `fk_privacy_companies_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_privacy_companies_companies2` + FOREIGN KEY (`allowed_company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_privacy_companies_privacy_groups1` + FOREIGN KEY (`group_id`) + REFERENCES `u947463964_etaviaporte`.`privacy_groups` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`loads_alert_emails` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`loads_alert_emails` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `load_id` INT UNSIGNED NOT NULL, + `email` VARCHAR(512) NOT NULL, + PRIMARY KEY (`id`), + INDEX `fk_loads_alert_emails_loads1_idx` (`load_id` ASC) VISIBLE, + UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC, `email` ASC) VISIBLE, + CONSTRAINT `fk_loads_alert_emails_loads1` + FOREIGN KEY (`load_id`) + REFERENCES `u947463964_etaviaporte`.`loads` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`warehouse_alert_emails` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`warehouse_alert_emails` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `warehouse_id` INT UNSIGNED NOT NULL, + `email` VARCHAR(512) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `warehouse_id_UNIQUE` (`warehouse_id` ASC, `email` ASC) VISIBLE, + INDEX `fk_warehouse_alert_emails_locations1_idx` (`warehouse_id` ASC) VISIBLE, + CONSTRAINT `fk_warehouse_alert_emails_locations1` + FOREIGN KEY (`warehouse_id`) + REFERENCES `u947463964_etaviaporte`.`locations` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/db/service/initdb/01-initdb.sql b/db/service/initdb/01-initdb.sql index bb28869..516d9da 100644 --- a/db/service/initdb/01-initdb.sql +++ b/db/service/initdb/01-initdb.sql @@ -2,20 +2,46 @@ -- USE `u947463964_etaviaporte` ; -INSERT INTO `roles` (`name`, `description`) VALUES ('owner', 'Owner of the company'); -INSERT INTO `roles` (`name`, `description`) VALUES ('manager', 'Manager of the company'); -INSERT INTO `roles` (`name`, `description`) VALUES ('driver', 'Driver user type'); -INSERT INTO `roles` (`name`, `description`) VALUES ('staff', 'Member of the staff'); -INSERT INTO `roles` (`name`, `description`) VALUES ('warehouse', 'Observer type of member'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAConsole','console','ETA logistics console for Carriers and Shippers'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETADriver','driver','ETA driver application'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAObserverClient','client','ETA observer console for clients'); +INSERT INTO `applications` (`name`, `slug`, `description`) VALUES ('ETAObserverWarehouse','warehouse','ETA observer console for warehouse'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('owner', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('manager', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('driver', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('staff', 'Compatibility with Legacy while refactor in progress'); -INSERT INTO `permissions` (`name`, `description`) VALUES ('warehouse', 'Compatibility with Legacy while refactor in progress'); +-- Roles for ETAConsole application (1) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'owner', '(ETAConsole): Owner of the company'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'manager', '(ETAConsole): Manager of the company'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'driver', '(ETAConsole): Driver user type'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'staff', '(ETAConsole): Member of the staff'); +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (1,'warehouse', '(ETAConsole): Observer type of member'); +-- Roles for ETADriver application (2) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (2,'driver', '(ETADriver): Driver user type'); +-- Roles for ETAObserverClient application (3) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (3,'client', '(ETAObserverClient): Client user type'); +-- Roles for ETAObserverWarehouse application (4) +INSERT INTO `roles` (`application_id`,`name`, `description`) VALUES (4,'warehouse', '(ETAObserverWarehouse):Warehouse user type'); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (1,1); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (2,2); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (3,3); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (4,4); -INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES (5,5); +-- Permissions for ETAConsole application (1) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'owner', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'manager', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'driver', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'staff', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (1,'warehouse', '(ETAConsole): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETADriver application (2) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (2,'driver', '(ETADriver): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETAObserverClient application (3) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (3,'client', '(ETAObserverClient): Compatibility with Legacy while refactor in progress'); +-- Permissions for ETAObserverWarehouse application (4) +INSERT INTO `permissions` (`application_id`,`name`, `description`) VALUES (4,'warehouse', '(ETAObserverWarehouse): Compatibility with Legacy while refactor in progress'); + +-- Role-Permissions link for ETAConsole application (1) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,1,1); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,2,2); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,3,3); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,4,4); +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (1,5,5); +-- Role-Permissions link for ETADriver application (2) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (2,6,6); +-- Role-Permissions link for ETAObserverClient application (3) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (3,7,7); +-- Role-Permissions link for ETAObserverWarehouse application (4) +INSERT INTO `role_permissions` (`application_id`,`role_id`, `permission_id`) VALUES (4,8,8);