From 33b91af11202bc4bf731ed14c57dff4eec7dd694 Mon Sep 17 00:00:00 2001 From: Barry Low Date: Wed, 12 Sep 2018 08:56:51 -0700 Subject: [PATCH] Major refactor --- client/.babelrc | 3 +- client/package-lock.json | 23 ++ client/package.json | 2 + client/src/App.js | 63 +++-- client/src/assets/AlgonetWebPlatform.jpg | Bin 0 -> 79418 bytes .../logos/advanced-algos/aa-logo-vert.svg | 1 + .../assets/logos/advanced-algos/aa-logo.png | Bin 0 -> 4770 bytes .../favicon/android-chrome-192x192.png | Bin 0 -> 2515 bytes .../favicon/android-chrome-512x512.png | Bin 0 -> 6543 bytes .../favicon/apple-touch-icon.png | Bin 0 -> 3064 bytes .../advanced-algos/favicon/browserconfig.xml | 9 + .../advanced-algos/favicon/favicon-16x16.png | Bin 0 -> 502 bytes .../advanced-algos/favicon/favicon-32x32.png | Bin 0 -> 758 bytes .../logos/advanced-algos/favicon/favicon.ico | Bin 0 -> 15086 bytes .../advanced-algos/favicon/html_code.html | 9 + .../advanced-algos/favicon/mstile-150x150.png | Bin 0 -> 2535 bytes .../favicon/safari-pinned-tab.svg | 1 + .../advanced-algos/favicon/site.webmanifest | 19 ++ client/src/auth/index.js | 4 +- ...dTeamMutation.js => CreateTeamMutation.js} | 12 +- .../src/graphql/teams/UniqueTeamnameQuery.js | 2 +- client/src/views/callback/index.js | 2 +- .../views/dashboard/components/CreateTeam.js | 135 +++++++++++ .../views/dashboard/components/DrawerLinks.js | 72 ++++++ .../views/dashboard/components/TeamTable.js | 54 +++++ client/src/views/dashboard/index.js | 216 ++++++++++++++++++ client/src/views/dashboard/members.js | 111 +++++++++ client/src/views/dashboard/settings.js | 210 +++++++++++++++++ client/src/views/dashboard/teams.js | 111 +++++++++ client/src/views/footer/index.js | 190 ++++++++------- client/src/views/home/index.js | 79 +++++-- client/src/views/index.js | 5 +- client/src/views/navbar/LoggedIn.js | 64 +++--- client/src/views/navbar/LoggedInMenu.js | 45 ++-- client/src/views/navbar/index.js | 109 ++++----- client/src/views/theme.js | 72 ++++++ 36 files changed, 1370 insertions(+), 253 deletions(-) create mode 100644 client/src/assets/AlgonetWebPlatform.jpg create mode 100644 client/src/assets/logos/advanced-algos/aa-logo-vert.svg create mode 100644 client/src/assets/logos/advanced-algos/aa-logo.png create mode 100644 client/src/assets/logos/advanced-algos/favicon/android-chrome-192x192.png create mode 100644 client/src/assets/logos/advanced-algos/favicon/android-chrome-512x512.png create mode 100644 client/src/assets/logos/advanced-algos/favicon/apple-touch-icon.png create mode 100644 client/src/assets/logos/advanced-algos/favicon/browserconfig.xml create mode 100644 client/src/assets/logos/advanced-algos/favicon/favicon-16x16.png create mode 100644 client/src/assets/logos/advanced-algos/favicon/favicon-32x32.png create mode 100644 client/src/assets/logos/advanced-algos/favicon/favicon.ico create mode 100644 client/src/assets/logos/advanced-algos/favicon/html_code.html create mode 100644 client/src/assets/logos/advanced-algos/favicon/mstile-150x150.png create mode 100644 client/src/assets/logos/advanced-algos/favicon/safari-pinned-tab.svg create mode 100644 client/src/assets/logos/advanced-algos/favicon/site.webmanifest rename client/src/graphql/teams/{AddTeamMutation.js => CreateTeamMutation.js} (64%) create mode 100644 client/src/views/dashboard/components/CreateTeam.js create mode 100644 client/src/views/dashboard/components/DrawerLinks.js create mode 100644 client/src/views/dashboard/components/TeamTable.js create mode 100644 client/src/views/dashboard/index.js create mode 100644 client/src/views/dashboard/members.js create mode 100644 client/src/views/dashboard/settings.js create mode 100644 client/src/views/dashboard/teams.js create mode 100644 client/src/views/theme.js diff --git a/client/.babelrc b/client/.babelrc index 2b7bafa5f..e60d3036a 100644 --- a/client/.babelrc +++ b/client/.babelrc @@ -1,3 +1,4 @@ { - "presets": ["@babel/preset-env", "@babel/preset-react"] + "presets": ["@babel/preset-env", "@babel/preset-react"], + "plugins": ["@babel/plugin-proposal-class-properties"] } diff --git a/client/package-lock.json b/client/package-lock.json index 5b6deaa38..8f803109b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1330,6 +1330,20 @@ "@babel/plugin-syntax-async-generators": "^7.0.0" } }, + "@babel/plugin-proposal-class-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0.tgz", + "integrity": "sha512-mVgsbdySh6kuzv4omXvw0Kuh+3hrUrQ883qTCf75MqfC6zctx2LXrP3Wt+bbJmB5fE5nfhf/Et2pQyrRy4j0Pg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0" + } + }, "@babel/plugin-proposal-json-strings": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz", @@ -1380,6 +1394,15 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-syntax-class-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz", + "integrity": "sha512-cR12g0Qzn4sgkjrbrzWy2GE7m9vMl/sFkqZ3gIpAQdrvPDnLM8180i+ANDFIXfjHo9aqp0ccJlQ0QNZcFUbf9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz", diff --git a/client/package.json b/client/package.json index c5e9afa00..27b67cb88 100644 --- a/client/package.json +++ b/client/package.json @@ -19,6 +19,7 @@ "license": "AGPL-3.0", "devDependencies": { "@babel/core": "^7.0.1", + "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/preset-env": "^7.0.0", "@babel/preset-react": "^7.0.0", "autoprefixer": "^8.6.5", @@ -78,6 +79,7 @@ "apollo-utilities": "^1.0.20", "auth0-lock": "^11.9.0", "babel-polyfill": "^6.26.0", + "classnames": "^2.2.6", "cross-fetch": "^2.2.2", "dotenv-webpack": "^1.5.7", "graphql": "^0.13.2", diff --git a/client/src/App.js b/client/src/App.js index 016affd44..5dcdda261 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -12,7 +12,18 @@ import { getMainDefinition } from 'apollo-utilities' import React, { Component } from 'react' import { Route, BrowserRouter, Switch } from 'react-router-dom' -import { NavBar, Footer, Callback, Home } from './views' +import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider' +import CssBaseline from '@material-ui/core/CssBaseline' +import { withStyles } from '@material-ui/core/styles' +import { + NavBar, + Footer, + Callback, + Home, + Dashboard, + theme, + globalStyles +} from './views' import Auth from './auth' @@ -101,16 +112,16 @@ const authRetryLink = onError( } ) -const authLink = setContext((_, { headers }) => { +const authLink = setContext(async (_, { headers }) => { // get the authentication token from local storage if it exists - const token = window.localStorage.getItem('access_token') - // return the headers to the context so httpLink can read them - return { - headers: { - ...headers, - Authorization: token ? `Bearer ${token}` : `` + await getItem('access_token').then(token => { + return { + headers: { + ...headers, + Authorization: token ? `Bearer ${token}` : `` + } } - } + }) }) const cache = new InMemoryCache().restore(window.__APOLLO_STATE__) @@ -131,24 +142,28 @@ class App extends Component { return ( -
- - - - { - auth.handleAuthentication(props) - return - }} - /> - -
-
+ + +
+ + + + + { + auth.handleAuthentication(props) + return + }} + /> + +
+
+
) } } -export default App +export default withStyles(globalStyles)(App) diff --git a/client/src/assets/AlgonetWebPlatform.jpg b/client/src/assets/AlgonetWebPlatform.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f5176e33c4194326f0b00005a3c5f6989a393ac GIT binary patch literal 79418 zcmeFYbzD^2*DyZR(A_-(Qc5#)jkKho(kc!^cOxJ%NH<6~h#)21-6scYXYMKyPJ4XZr$}PkN=M&_G z2#a#_3GoU-`EEn_dHIBSc%eMJLR`FjV!R?^{Ctq#8xt^_qlu}QmYl-xa{=EZnSN)= z&CQM5O@Q0Z(Ts;rR8*9Qm!F59p9_HCa`LcsHg@N-bz=U7K@Q;rceJo~wy?8>Tw^qT zYUkoC$pldP8w)n}f1v$KS^Wu6P3@n9+SptR;3rxqXD!4(=>1E?PWL_R5jneLu&jsfj7u zIyoEL!V$`Hl1u;=ZVL+&F*$x=xjQgnQQ?>12fAZ94%ZCCJK&rHjtlei&^|VEy90`@At7Le@~0Z z-;U)0h~c?b?w^$Xs|&E8>)Ss}7x?mr@gr;ji+2P}`^P?r;HSZYOxge!LisTd3IKu8 z(a|x`!5A1|Y%uT-7Yhu=!o|bE!NtMBBf|UHi0}vqi3kbsNJ+`aNJ;5vX=&*g|7a+f zn3(u@_*6thR5awo8NBS z2G9UAU|^!70t8$Wgn~*;f_9G-{RST_M$0&ROq&dY+<}Szj$ir8Vf)cjM`i&E@Q*nV z-ZcTlXv83C&{x)HXW^HERKY($dJZ|Qm!$^sTzTot1AbL;c^;ZVvCdJP;Bobsb(uNk zaft$2WiiE)U$F;f`&EXaNsx9xgaza&3MDj%$I7#OW3O!*ygh5hZA2Qwoztp4b32{n3&)Mm z%x-QLSF(-nOywb8H}e}g5Tm7|&1W(dYR+9Z#tJ1A%a#~Q&h8AB;CBr^9sF>jU~DBJ zTFm95ceA_6r2ZXrbPviA)BUbi#ckK=c?DQ4Ue=RU1CH1U_E>g)YdDzqNmvMh@C{OMI#dqZ^4g9?o>+)uC}5D_wLDq;VlsI;EWX${5OIYh!# z&BUMyot#=-ij>#0e!4xu4~DfiB3*8Sv!i=cHbO0e4<$Tb2S^yb4-TaDqjh~zS&LwX zxxk(H@C|Xaodl>?4(xpL#|)kdg!QmW3Q*g4*9*0WhlB?k)acyRRd!R_gQCsog`J+h zvvv3Z(%iNwn+*;Q-3l|K|K{Ts@Y;bCtu&P@3(?%THY-}f<>V*GMQ~*eyE}CH)YFVR zwJJEZyD(JCDsssE%&eF5YnrSX-4IH-=sujfg11Q%Esq|qUOi#zY0B1mGWc#vyMl|c z#}t0Poq2Iu|EY2_80-IRyU92pTtj3tM0aLNsU8axj7(9KGTpZ7_qe&YE3OO6#<-+g z97Q9ayxm-FpPLr1qxl!i1 zV7SR3OsaKH&$^HqOLcSG{MqE+G8|=k2cy z{r}Y8cpvtq8JL~8l|hE7jXAz~V;xGa44UO0h=ns2;`@KG`QQ7N>uHSn$uP5kpy)U} ze^9u2FwbQJf$o;5j+k5tGzi3I&_}C&>X0+?z-hMZjYcEu<^AvaCXy)^d6yM-)f(&h zvVYwzuabH3b@HldH&iueH)sX?aKVsj&d{8X?wMe|Lh?n>&QrD)zL!P==Ys(yk)A;m zV69R&>4))soed#7k4cjm9=Hic#33q8&M-z?@n0F}gw_(`m>AXk0F`=c8qW7h=vi-w z>eG$emZD_uK2?oq8TQulo)w;Z{dwZX?(}=M#W?RbK3x0^|FWAYei7!vMK;ab%9AEF z#Z}e1W6Obj>oDFN(AV9n>3#QZFRAG%RVQBdbj7i&e+l|peth3D+m*-8BMAc)MFD)i zr_D)P4MjTn3L00gJLXDT5vg4fw!#7vrd_n-%nYRiCUQR0rLV%^_SFv7`7y+vTy!q? znyxrv;D0T*zY*tu)-5kCeQ`B;GA7~}RyTVQtKuL|bM>51T0O6Ce)njy+fb7DJ={U! zne`lvyN0xkYVf6`3smL@=+5)DTB_6uMEl)|M}mEsm95(13W{5Hb9ea^-l?UO+R-XV z-ryJZgq|p$nJimo4yp!KKE9vns&-oVt*Y-o>)u>+!JfRT`YiV?;mhufiL<}Qsk=U> z`fZCCQ^t#<$)PbJ-QA3>1zhBdk6oHplivx*`jmfwj4sk6UGIErFl|ss6ih8V9LvLZ z|7OyM`~mv3sU1=0#m1dc-ev0fV)7%{Utb~U(`Yhz>ZFdgZFrr@^!(jgJg}7?GxF1m z_PP^u)i6q*lY=+6boB&2TlH3Vl(svFhhf~(ar(llkmy1@S(iL^QMz0GYIrVW9~U=e zK|U*JTTnH)vY_QvW(C(k>5yaa$h4iqi&P^#LXj^d$@J2uErn9Mse9UAEuv4YcH;K? zTi#12BoqEe-Q$O@iJM{e2 zAr;k^fWD~8O|4Wuwp{vTSE3&v^+bXj?S{`Ln0o)$>ipNr4|QEWxh%X4G3;5Vw6;>V zGWG7-i|C>gwBVU|1=y7Mi9i%)b}IwPu2d@2KEgEVgjG)Q>e-HYU~`RzGmFUHi`_Z} z8Xa}10TZ*?%|b^wL-5XUKI2KH(+`kY=IaI3i0}W>)&Gsaz&Q-a@gh5PJ7KAy(K8Lj zY1Tm$jv`o;9(Bh=$!9w9wP8Pt?c-ak5p{#J9s+)-dE-&Lta2tlKxOG_75&rCOOtx0 z;9Qj2tNC>I^Cg`>s744I-8m7kxdo5oY=FW|JZBy3^?RCDFg6(?IAUt1zc-)2oCITf zqIQxM^z+Kc>l|g z{cpsWhp7O?!uTI4q6SORr%^_tuGHGeo)i{#!)8cIcV&g_XwI&Rj77v zE;0Ds@2lKBo~*Mnw4r~oMoO4JcxS9b^db%-{i#z;mQAZ!xtOyD!-9cwc+UWDz~L`#{O)UKIW z2zpwDTch8n#CsMznM}dm`soKq`*dD_`<`2696o}Q5~H|FhH6BT=B|lOT*1<-Tt z*JglXz z)p>&d+%-OI=KB;Ny3IHF9?Gu_MzzpgHQIK;2SwYw(^#~%G6y@lf^o*$t6wW*A4 zG_|~s8SD(+A2PMoZ~dAeu3=;`aJ=Q^Yo#9`HI6GBVDdcg%I7|1EmF)E?-pG_M%#B9 zS|?PNGzwmmNX@oNPcJi)83EV?Q8yPrE)TKA2fWopioMGUGCv(eg<+N$je{iE?QAzmwuify#^E<&E-C9oD{5ZUS=0+pd$T&T;&xW>7VGeOh2sE8?w)b1Oa6^36{Qu95rz z-957F`K0J$w{^xZHX9&irc5bT!crxyaHBK?umEMi0vIQ*#E~U7!`z+Q{5rusD+kxc z%eLn&=cA0N-I$D9F^V?Yh=7z*A(^nOq9Csbmc9_MqIga@WM700ZF=D88DC znbEa1^rZN#oeV=phQ@2~c!BtS+_OE|VZyT$#cZ8KmH+XYtsqyS~|e7l`umdSK`F$(5V_ww-W<^Vp+_13%`8^=s+T%&lnLHINiI~-k6HFoc= zwNW^~-e}4eQu;bYCy-b9CNgcb?-R^FzFWKGH&ow%Q0?WVUB4_j=Th>j%8k-&%s{5! z#w4a3X)i^vG2%=EawdsfPQT6CsSYOPPdTUPj4c{fm8VPV=rP z5QOo!f0u5ismqLtKC#e1J8n+|CG+Ig8 z|8V501-pa|73&qcTH^QR&@zfrLEcyx1Vw*!JoBFVt@DxGYu63qJ$SyMu;5;5$S1d{ zHTLD0DgG4!^8Q7rgEV#PPp>a&eBa;>&pUe_#Tc+G`<%&RGIv`O%%yzo{yab3Ka9`L zbUOi_Vo<1}e|ld}G$MD7N;J!gYzml%ZB6*Ms50h~*s%Me1iU>Q4o;-Cu*!0c1N8sx zHzT3wafxfRGxjua)`w;)#5JW|I4ED*ep43&)Yy{u(r~RcE5gb2e8Mu)8X^)E$8Re zjn8ViKDXkXaYY>M4&oQ>&<7DfR>eaA32Mv>uU#*8Ggn6oA>1hQ3qnymvlrq>=MM$I z>Q(~?@H!UtI0GPKLYMn>&EW)y)KmR#zw?@>E7oACD9L`sVOejqMsbe~X-M1ApjAgoA1U;Od(hL4BTYrE^n z{L`zY-*ZiL2hn%?H~?my4}@|6I@8NbPttt9^ft7{e%p- zc;J(e*aXna!D#){3k#iEJ#%k%evCKTd(1HWdhFE((ui3R@n?6|SGd?OX(EA?sEE4kNpA-A&uIf?;bpS%W#*V`N?rD_RsE@>X>YY1^eJATSybxHX@Fk|Iej@P@-Wx2V$(Lxu`(peOL$HtL5=!$O=J9uiLHH22WM|GHfX2Y=+-^aeTSBX zDF?2oNRsb1&1=RyJh9RW=-VFdcrKO$q-{lbopfAI^w8>sMt*zYG5xV1lqUpe9TI!y zVh?94A+?djh-WLbva;c<`6(i!)+e8y=X!i$Yw`Oub)|5;rQwY>U2+kzIht{SS!QrT z`z~AZ3*n>M9pTJ7o?8sfc9V8e0cWF<&z1|8ys;0mHYCSdHZ~LujCM<5gl0M6Poml7 zUY7cE3PQ#|d3xOwojNNc?hSl;`K*3_-1TKa?i)*gb^qaExO~a6eh*kv1|%3|7JRA% zd(CHEMnEAXEakmv$%tlOUW$*2C0*HuZ2Z&{_3d8~@$97aUeg8Xvdk}DkeSIN^P4>f z@(odD7fYe^tZzM{SW95}6mqk#V|95<=SB0L){s*@j#4ho;LKX|6lqAG*yYiK5bsJ) zO!D@8a~bz|&kmgrep-`4YUj17K?`?I1+nWJ?#iI`>?skwqaDg|FEe{N-g6ntb%=@8 z%l9H{XN6s8$w+MV^i~YU2WuJpu)Ugy0%#Yfv$%f&$9&7)L2~WG+K5^!meApnV9}L| zl==~SNx!>U%iw|AgA?-AE1RM#`7`jM`2gfitDv{Y!hfcY9*JAxHNqzuTfydZCexa* zu~6Ohh>ETc=Syfwrz!pfIan|j;0-)kg~q8B;d;)wANcIiY>m#H?KP6Br_PAIE)aPk z`5XN36b=r*Jr{)=ckuPyo$Vp9sD#k^!{9Qv@Ckwm!I-OtZmKKX$oCFHSC78eIz4c` zijO+uf!!=A&I;=4oi>uWRXoMO-qh<{pw_5IR>5~r6-A3Lk0F==4Vf)I7uP9T2<~~v z-2b^?J8+6m&2a4EK}5shQ?~=DTloHqDF(E(b0Ds#RH;MfHTOCD@AVMDM%xasBiJfX zv~l0KS4(pbF2TI3=RZ`gVg#z%k(vg; z22=(@e1}tX*t5x8k?Wi{*GqZmxl+)a+xb_2S&8y)0kX6ad%1ipjM;#BP)A?gOCN(Yagelah%ECo+5X#;&W z=L1itCM{nezcDwJCYc%4<=+Ufge#h(cUUHP_)f@3+|6abext@YpSNd1J?+y|*%Uw0t2mNbL=-=S1S>LX=fBq_0CzzN0lN;U6kmfHjHS8LAov z>K4JX2D)<<8yAO?ABL17Vk&%7gaTskmZNR9j2f(*;1Vc%y|QN*760uvuPsjO`?7Fz zv8mD1v!=ju-@D3A5g@vKk|cW7wUUeq#}HcjC4&ShE&CR63zqaT2_jxqsKRco?N+<8sJ!4>t3rv5>d+X83Uh6|0e*MLDS9?Rb)#;wop>Zt1 z75lNS2W_o(Q+9f?;!T4Dk6(6s;;A*%^ADWL)9KR4h9?ykw!@wt7q?Vdm)P3cIS##< z6E~B55j(We&pnVdgx9MF>Jkhfca*BV=p0!Tx3=cb4|8C6e@3E=3wt@k462_~NzdjL zd^atvC-k|2!;y++qwmSrTmEu96y1 zmvU3&ygyMYol1&e4dNPZVOS^(fv^=X*qt!^urzojgJpnhl99*^Dq$x@*95 z)!s*JuR<5!MaK!<(u`N1JsOp`59~(*gepX7=AM$TjD{vqi@{^i(M;yV)1UAH>V%-RABRw7-W&mZVZ{IVw+to7Z6! zcJCFtuMx!DmCHK-PwQTu$b-2TL?+1&fva>bIe3`LQP{4LVvv%Tdy+(WvYm0rUUn`& z)(rcx8JO=)>0*vKnd1ia8?YJq_Dw69l|FynYuaW1mg1kR5p}XocQ6oABG3>2U3TSH zH9H(4<&-VV<7rlD#IXjg@Jh=>a9oKC5|S5h<=7W|_^_LUU=OI<4z}36fj=^bV))>U zI6py5Q_V>Kl*rmC10U^;djS&VGwB_3cR@%XNBLBPm>?{14?V)c{*_3ylJZR%)|b1G z!G+VUZY_6q0P^6~Dz+bANc$Gl&E6*?aDB`f2v3;~(S zI@Yw(*>1ic*-;1f*BZl7>G_Q?Vba z;vE`Qf*hrAMjSOLMq#0fV=+xDZF4-_y0Wx@mCS2%+-Ms;a)2az$F4;G(3uA5}X=g@+r@F<2L=upbtzk)8 zQ;P0Vo+XAai1#$|JF&Hz3xvB753s_M?2mOBBp3#8bmCk>oTMJ#Sp0Op^0p!2cuc>) z#<9hs=A(r6iMp?*VSnZG@`|s=dijgHJ?pb+9h>F`?6Dj)hPqSr!`^VJlY5{|dXr>G z+~MM$&8x~3Rtj}pdXw=v@PxuNrC6}UzDuLQ`y^8Vqt3?UG`!@QQ^y*EAXIhcclO|y zVwk9ecNPY{nMXvy+vWF4tYib!P3cu9{c9YDH%4qe+I(MMlG=_+ zJ|*>&yzwOnvq^+_lebajR*@Et9>!~34?Jol|F_VSM9SSrX=R~(?l9AD?kUrPRdKVE z$k7=)3gBoW!ZpEWk+$Eg*2_`Fh1s+?R&G;5SyhZ-^;r9U8)CkHitE+u-2O(&&vgnt z6(5D}@p-{kNp8GMJb@y@20rwogcug-WWjFKSpbb^5*H>Is{L)*yW^pV=+C>9<& zh50s}+$tBHRR{OO*hWEkQ|Jx$bQ_phq@WJZO?yhwbT#Ss;;RAj+iAF|vih8{iQg6L za?Z03bq$v=EgxWhiz7-vOpT0_Bw)E;zM%@pbGPzj)4E+hPb7}YeXNj#MG z@hEa<3rphtyCZ?;Kn0U#i^#b``eov&Vhgeq$b$X3zbaf7u=x5SALhPtvJp@NSD{$M z8^WNt{FBUlxoGZRN;>)D*k`Ja?!Sq!-y(1$f+aa)iU&gsLhCa3UZL)OZE(fGkM?D< z5%I@&!%RcPkIH?@>>rN>ZP#xMyMy1Ug{BFPMgGhknK~S#-#R-28?5VwQ~Lwd_UQSJ zMzE&NV%hn3qi;<?SlV zR!q5RttJ|x4yhl`AA*rW}2U%0dS25p; zTPq~L&^rU$6Joak;l*n%sGMMXg?ukV6wwl#2i6lRQtp=DPgc-fSj7T@;W%?e^p?XY zk=oeTCj3#~zO9al&Ju7rp6`~_4z>!lGYjbmXd6b+EkuNp^_m7hRz4WV3JV%+B1Y%z zm^DL#RsaPN-A!RfLd;=9OStombZ-p89%8EE>f;9EKXLNqaS&r4wM3@dr5mCQ_)7>s8bYU#W zYV>G&9xR|E%WP*-MJy%mIzfsak4Y|l|6zd`HH9&&abnHBQkRxQ^ad&&=fquq>`{yR z4A0+r9CPrerq=Is=*jCp*^jrvlFi&KL(|3-nq{Eq1+Y`R{;yXGOgPO@#c&8^Zj z#2V<3MR1pGBFqMV84G3*GxoHaWB>(` zuLu2{JI@>9pRdC#iRTm)#0I3idw(YApN#uOv#bTfb&9(Ull;~5Zw$Hy!5X~nPACFN z_~#<|Yh<4*ZEaN|A)R{UgT>R}&W5>XVNTNn znOG~+emX6RwfOW@r73+*&tT{?@4%t{aPU(+7Gy~e68QqWK_OsKSYn&e27*lS+#Y0d zu*XlIVJbL`BEjZgojq<4im49Q+*+MN*@esoifQ==OvSIjus;B~cHq5GQGGoKx<71G zULFU};JS6&p`qP)kzFoe1R8}-W-Z?9@qcwWza{M7;HqW*1B3z_804|#sxS=aRe+=j zDGDs>*A7z(*2FUww{a~b!~8b0<>AQh2W zOk-VDSn+<;@tHQ@>Bjq<2220p1cWDah&v9kHO>04rw19)C>2wJZ_$M;M#eQHj0Cyx zds-k>R?BN5fz_mIMjv0~O8`BafkE@WXRcM+ks=8+lvs8EY1Co_w;m#r>6;Cs2VEH# zWX)nU@$yzsfCXb$X>*mQG_7Gn{Vk9Azh5tvV$N7(|KoyiRJ)l2?wKX?7Z;2gl(iS- zjb1>+{+HMNfx<2L>BsYRj0SX^zqo+IZo=QBU!iaPA;jOJe()CUO55HGJbz?`SYNmHOhna z!Nha06o6D>2I{@v(h>sq!J7ew4deIdDr5Cm=T^8~4AmRX3xw4YYgFpE10tZ{fi_7J0^KVu(vhY z_#K4Fw)uyy(Jm?}x3mPUb|IaJkT#0uJn?o2Qr`g*4GE37fr2T(`qgXj>uaxvS=+#` za(-{YUv*rA{;SyHG_Rd4`j-NLzxM}P1O8O5{#_0Kb(?X`CgLmqKk`r@86Pm}`6qS5 zg3bx{$iU~!RX{G!Bq1;dsF;SwwwYo|`H&j@X&x$VmK9412ooEoFz;SsYh-C0sVM8* zx5S#&u~@D8WV=ipd(wZ(IH}j9CyuO^M5+$rm;LTWPTpuj1br1vdL|+!XzwGhG95$Q zZ7sg`p>Sc+H|)+;Rw&@Gl283MpAR(n>km^_@Zm=(#QIgf2CA|hIk;M;Q==Dp^~J<< z#=XoxmR`hF!C&t}FSlASE7; zaKXSt&G!wSSUf6eh_OewY(tXlwN$~Fq=7FMKoM%}w>q0<1!ui<_L7Hdk`j6zlSMc{ z?jPeiXyTj3!#HZ=ZU$Pcc=yfezg4lP>1{;Ab-*Nt#ojSj@;!=?K%m-Iz!B|MGSECiXW%`Um9S z$r5%{vR}3uK9c8EaGs6Hra^VR%PU)T)r^Wx`~tZs`GYHo_kD5WrkjNL3-s|cTi>HU z!p8g2Q}yaQ+v(`z>7V^i0$`ZfLJ^w;4Cwz$)|!<47FLQv!1^p5qMbSPd!agG6|2P8*N1Emd7d~@JFT#ZO^DUakXcxSE$kEMAzKCFXIyO^duzDZK-}v_DVl0Y_lpL1y;m4vsx8~~ zX^vu(3a2V8aZ9Mc^Abe;T=maoJyZfx zVKb)Yy2kp3N|VYKH%z6S$#GvxcD8c?SE&Qw$EG^o7<6lFgZu^p-Y@5CrglY(N%^Zg z)<$ToN-!yp2wYBT9nq=8JJW#@evumlws*UDFTc{?0#1;iG zVb)jo*LQC9jkpifY){7Zki{LuD=E=e8N_giUU*!R`vT*`*TKg`5yNpN^x^I|Ci97` zN-#LGo1BTU(8~ptl;DBFD6q2hTs7ycMo`k@0sB_d6&=b@LE^hlB-pvHvx`41J99rk zQR~Zty+?Nlu4`~O9$emP#zxPhD7&zJf^L{B^CbHSUT^Dv%Y3fWA7Vz%{n0CSphWnq z`SV-SmmmBWRp2D+93oGbj|Onff0+QshS#~CEp$P$JacyH;Od6ypf;~@xS|`?rU6ZT zZlJ(Q)Of;bdAo6`RmQa7`%)X&8iqwe*Y%9Qwf~Vf78wJzuFJFU0Tj^=!kt&i%S~o2 z$S$B>NID1mQe1geGktdZJR2ka=kPyDUcb;$`S|XS$=LaeEAa#QZKq`3FUx{~-R<_G zJkWo$?+2~lQIF5Gyzcn7?D_P5K3HD^g79?>7xR{jM`}^rYLWfSybdWcIFD;;pJ5LD z>)sTo+b;2k~c8IxXGA2P)nPe+%>1XwXe!#R%-DfUN#65&!j|KjtRquc!XG z)JloM?EXy9KN**AVp9J)fLFg4_#vUjccRMG7Ti>&5&sV`eMLgnVLB(3rotl%MRV*x zE%l@YkF4psO1(qNvDJNmSB!kMe@`Air&rKp23BDh*MBhNmy}`aX3NE?w_2Ji>a6q4 zHyj+`Fgp=c!T0Dsh4am0nI8x)u+*AnU5|y|>pd4TY#a%?yKuXcAuf*usj)&gxM_SY z584kjfzj$ZpLb*C)C_akl&sc7$FbbDwqt&v&u)&iE3_fVgB5WKtvHFYT)ts$h z@c$t}`QK|V|EX5Nj4VHEFSIP~iXxV<^j{({F17H;F7@?y!6FBaZj?uGJ0bOgB!A^x0DdL`aXXjXj}G*?dy6;DWM!I0*|>VzW5 zO14YWI4I-$%vrR_AQgIIC_c-iIgIl<(%**^CW*HAxpUsCh*LbrA$X+i4Xsg&DKD=c zGnDK57&DTOR?)RcHlc3;6hjvW`7h@SbKoz^QAL@!XZ!Unxy{9}C*)Al9!m)cf!lAk z&53#QLraK#EffW%iOaBHx2$(IJeXd-eXFO;Y+UFthbfv=bl3Qm8Z_%uR(9i&JOwPF zlUDX=NLU6z1rKp!k`zEFpvx+=8x9F{Z2VsI;nLf`VUB_z2NPn%{G--odvY`Pj zbC&s`bF7jM+R){l1IC3@A7#!blG$!i`<~KyFL@b88+*?rGso{H5t zjLfV42W{_up(^y1KBaXBUPcvMV?(RI()xr_tK;fM&241mVP?sbZXl~_Ao3*v zu-~$0#iVccK5$yG9$Gx7$Bm$6pHCp|qQf9XU3<2<9G7Ug!5Fj`AQUIGw90QbSAJmO zely9E7FL`OF5+&iUAowro0@ie66@KiqA+C|!ckn^rG<>(g-Vx297Wkgxn-NzikPt& z-V4$ZSsB~U#|Ud_s9l;e(9P@Pdd&3^uc0=QZIC&g>}AJ}AOlNVna%XnsnH{OGqAGx zr^1ic_vB1o<~8^Dzzkh(`9qu51vokO?gdTF0uC|YnQj*9n zk`SZdBb;i`e^IHhl|FCLwLD%axu@uOf=M!Q^M4}wQxDc%Fj_YHmPj=FzxsGtdA6=o zCmtwvV~Ju(3hO-n?D~9F19%TPNvA|crv&U<7~+JYrrlbQMwlc(vIU+pVtfOF{F7X)D7@2XWfTm${r6{jM%_*J z{2R)&3i2Es9adR!ik8!b7##eUUj=A!6FQi@te@1U-PI683%yO{@t&;%2A6mnyBD1> zujomKm{$=^e-TAsb4!bkbEyy3Ti<^cHg1d2s7GI%5LFwfWI{_XNcynx#2?Ev zwK;V-z8`_7@DQ}oPP+fm2D?pm;TuasfOv|f|H_R*F-rnPndeBY=x9}}r@7b` zkZVedpR~W+Nc7ykosghI$ydWWEk%{dEc?cpWK{lPmU~&}eCL_k!R-2HO=&_q!bRa$ zv&4RxZ<0;Y&P!Jrk8h$Ko*rIJc%FKA#S{K7K@SKQb*{0(qB<`-ADV7??s_$M15wdiIyhHx!t@nAHs-qPuC=Q1|AgB_^s0=>ys(ua1^tgdRH( z>_4usG6*g;Gq&#G5uoTr*p9ZB!{=XhM%>GhxD*cK82a4aI9uIC*<;pa8(u-t@`N^I zpE!sPWKNz#V7v3^KwUZcnNg2+vQg#Oiwtl#v(k%Ff;K+Bg+;O)oTqeGjiUlnCY0e; zb{K2cT>?bxySjV{(~Gc)RQKBNcKW0V%knqB8Q_{3w6mbjNtV8E_X{WIo?I)=+Mcxw zJeoI{Q`nmuVu@vyC2!|SHKoO+Yrk2^>rrSFS?WgPd$l{9VYs>1jWo#tt$=E!U=U=O+QCGxwz{}uvO0Pf_en6X^^tIzCp)xOe1tmM zRFrq|+uSN`C5OLCNpU1R|J9>2thr6m?5b%w1_@ihDBk}x3hIB~RA9(xI}o|(gDu8E zzyN|5_dar$y(yDf{Q}q)rtRs`mQ+#mYr+fQ8|hynrLsLZz?YsYd;X3m7I`2kH@l>7 zYcgguKWM}AT6HgN$k{dkRptIOO?}2sOa(gSpYq1t!pTXn$l-c>n8g+EnzHZapyI}*14F-WfvHt+ zy;J+U-p}2VRnrGIWTm-Ph+R#MAgJ$bh&bR_l;KfT|(CmhbI0K6v_si?UM>OM79-w4<0*Q4xibzJROg*-@Mg=d`BF3(p0SZMAF9b5|l3FMCKN+%{ z4*0hEQ`n?Pwe>|C@Qa^z7^R7(`sP4NqCpXAo;JQsY8fJ3(>6>vG0PY{lIZvBzebPn z0Q(xuyw+ZqP-NifQDxphijPN9*z-!Si8p;qXRb$Vo9^OGT{R|`0wwlT(F}MPUimDy zT7`0E>Sx46mHP1q4zjLJOsL4Im2im*C%dDD3E#}=6#GnV+tLKJpsLeHjDQm+xxnD%6buEJXdi$TxD!I5Wzq{ zwY_&dnEZJ-np%na4gp^g0cbKfwEXe<4*k#I^iP)sT0VaDdkb|K#GU1?vzahkHzL<* zz}~*f8+u#-AXarP94s?iw`(5l&9P;CMADG;8y;rQFs_5zv z7(oDRTbAmY<1%|;(ayL;=^YMr?B{P+F#YCS8w}R(f?rg>ztbDgXH9?cCJBx-YsteL z=uz5Grt>;EVeHkc^F#xcs{CiE7sR<@-X3be7NH^P|CTOUEDuJ_gG<<#Ta ziV7d4@DL;{v+^K1hX7wU?G`~LxuvXo6r<3#qW7qC@7ttR(D6JscRSUKinj~G&*aHy z*Qc)cN}Gk%dr=$L&|7OI>eIi@?54&v;N@C~`V+;}tH}o-LELf7-%#&=Y=XaK=Nk@Z=_$k+tpRDSv{0F$C2VpNNl2bB+p?U!?`f zKCL&f@gq5Rw{Hn%G^Gp|t-=WjhN*sSIxg(1KbWv{J8_lgVqd3KVqoY!UT=i*T8)DF zO&k{VtOvH2o8?o>y)#3`xGak*XaGNM%_BhwkOl{qeKXcga+TQo*TJECm*6$v+NL*N;@=o{3zQRICEOh>zF82ksjcM6_*rB|F8cFH zKZAsAH{+&pGC*;%=h|*4FA7O8s-HE%?!^%`Tu*cSD-l_!JkANs1bYh5ax@HJvT(YZ z@hXDgOw`E$75umdg#^JzL={{(wRQFY zWW9H(A1}3b^;F}O4c@0wB$v-=k$>mY8DPn5yAWyd@Ed6%9)@yorxQYrSeaFkT??s` zqS|J;1C0u2#sI8{Zf2vfyq*mT z_9k(rVWde`-nlr#z#X}XJ7ez9Y-$+y1GBvjTwH9{^_uXk>=To$M1nzkN-gZrJ?B?; zxglr_=Vqw{Oq)mE*4J#}C4J-V$)liSy_u6LZ+=?k^9@msG zLAwr47$sb>PSzTSl3?sGmD)Su1D^{H4$;V|!(S(j6#lW-Kimwm*A{a*L=tR$L)M$% z*s~8vxvP1`JDWbL$qsQtI{ThDG2Ud|7_i%tIxtB3sC#~+DDN@N?I zF;A@CQD05^u#fgvX*Mlo9$+Q1I9uSPgA}aDv*jxI7g0F7M{Xnx_r9$cC ztb?b4U%b|{(DR^(bPRc^)oUxwwgUQfOas*_$0c77&0|m@2A${TYU2?-1D~q25#e|o18J*==ikT9H!Cw zVVhb&Q`FubDwMn)$4Z?CCUi}&$gqz%o%geea8z4=zkp*@?3GG7P(&H=6=Zgive;hF z#x{8K=OmIXe5Q}YQN7evucbF|2uwRwnr0GRu-Su$LkgNEQu34>@we`{#Jeo@X!h$h z!E^Ja@NAV-zc9|N+~am~bEnLcyEgiK2py}-<3%xl^vPJ=oSeuU_GI9Q26L)sDt`?FU>8G~N7oa}hGmt0EHDs>2I0v`4 zYH*beYc_RYc~CRo%dG3{fuNdtL{_lw&r1vBp2y4=g6?5m*GB>IpFZ+bmHL#$DqUzz zaZCjF^)K;>2`I_s4+Q3|N)JGWc@Cu*Jb=Do;D+=*H|xNBsK@fEMikDOaSG2WS8HVv zTi>ih;Ecx%AfPc&Vni!_Rk&$x!yW6Ox;(QafYxpx*)k}!lD9Cktcz! zXTuWAywVS0Ukh<7@emzFDq`Jwt@o|pcIFj$d-4rusnL;v?qSK?Y-XWTt!-z zi6PDASQR`Wg8qr}h_@>TTSv2hr2T6NlNZ=YI-a?bqFt?UCh2Canz7QGH*?OqCL3P0 zh_-i#kS!zFG2`k#@#%8oc7o3CoyzlzaAV2{(ek=%M&|rTQt^)9g%BOuW95q!V$mSM z?Wt=nxiG75Q$Z->(RKXNxuD>%O5!@DL8e`>+##Xy&A(#LzRq7f z{~#u`_LC+-@x-m>-R8kH{ACg0ToOe<HTbM zu~{=!>^AYK6upnJcqo-<`G3QT?YwUOuKNc;;O1rKmCpj&{%aY&<$npmk_lSMimpyK zKGmaUDGOr(_)JCcC^M-a-~o!d+Ey@HrOm<9Qf`hJEG1b(4$eT2g_z>tJnpX))96U0mw+gMXoSLxS8N>X;uFZdUkPx8%(L9B}(cFiU^gqDy}uR*a7 zwwY&NGWaz2Z}_E)$W7=ZrVKcDF&c(JmmOU*C5zTVsP7(D_K7qVHd2UqP?e*;K%xpR z(dV6rjym;Usgd{Fx#c z&>>s9ux|W9x3mYDU6!pBDLN!j&1q_bu}|2C@=;GjNR{;Q;XRNTICTLpkQmN)Epx|~ zx~T|djUqZQctr`>8q-`cu~9K@6!jCHrW{^|0r)9PEZ9W4@G3UnS0o4~CZ9DJxp%VQ zL_a4cwv=c$dC0y?%9L5OdUmg#(WgB-!e(ARysEW5;R8uq235=0*{kVORGwM>>j1xZ zj(!{ww_t}2Uqq}@R@3JsCK6AcjL!JGf6C;JSWUJY&E00zh9DW^dc& z$|q_H^p>37CwLnA(n#4LTjka3HJR@SfGKm&h5ENgE(>=6s#dCtkk&I zuazd-ByvKY)#UJ{_jxKV0k<55dadg&ceEpiK*#wdz)P8A!I%|#a)a4Dq$+EthMx6w zH_A!SDhTH1!cjLuv(%%&Xe!X6FAPMB|IH}$W0IqKIF2Rdzp zjxQYv;2A5{AuDEHJscf3%Z~HCm*2sdmq|xuD*b5;pF}DD&dZf5>5(aAF-rzPkN$6c z^^L=TxSn-Vr;niOh34cT)UX)SA>j=Vd_rRJ(HeI#BIxP<4zj_fFHkrTR8v2YFFsY1 zlff+}AFsmEwG?r7H-f95W=d3Ihm?%ilVr3Klx1T6QJuV0wZ65g4i*uaNcyhKQTER3 z!-%WSy>_(``a#bS08tiT7~(Ife0fO3sSMz(_k+^xM;s)kdDpfqRFzcBx%QLAaQ zrI4w^Z&)UY>-gn5f28op{~C7)UQJyE-HE<3$++DwW@0;wo4i~4O)SM+7bRTs+JO=d!zb*uQKC*C7u!!7c z#t6O)79G4f03jc+4D-{8-Q*q;1f%NWx4C8A+X-NzfJlCHAQ6~J+5FYR8_V05n{C>5-U1wLISBG1 zbzCk=ov51`O?}K^I>ZnwJld_bs=3MOQL{1mrp^W9ek6EVLa47E0>F#+kpU50v7koX zU<{s$#9oNpYytKn&phd5MiJRBJRZqPtl5NOelKZJ2V3>h=`pAegbb^%ayhl6bXs*E zj`(?*^Sq>Osx$>8*cD7$>}7qfZ;hT@!>(X!aLQa-I+SO+&ANnA=QS{9Wf2G2U=wn) zN6=ZI`jeYpTqM9o%m}z2yJZ@f9u)5Dda|8fU3VU?esAZsON0b?Y_L>$SM-;t1LVsF zy~KofTaahDU9GmK(lF?ud%3kmd|_i!9;HDZad4US5kKV9Jga5fyd{4MLRAcZk+U(= z8H;+%$G<80eR-T@rC?LUdH1xiJ9h#^1t?w^s#y9OupF#bo>X42)}M_$+>&idb;oaP zgEJhumBB3CWmzqjfiR6MZI-7@^BZAlBhM7OmeQDqR+qndsTNa4 z9V;?M`z%!>tCOCBRZ@P^j>k_><|DE@#f?e#Nju|24eRWd#oNsotfM;*WimvhpKy5P zuye@<20qOrj{mkM7wKCzCRxcQGT~0su=0&0?kNdrnkdhS{9;{Kd3!~jY^oV*@(c9y zqqWueuFB`UQSp{X4w;sNK{n7Q19YN$3@8Z8!w?R|VBld*opf9$bJ~n^?Tx+>_wH+J zx9<(+i(A^GHMx%a6~#7E1*msqBm$89O6?b0t9y-TFQk}^kJ$8>pUfLqGw=QqnaFBZt?v)}2QmCWF^<4i> zb%RVaw;uHk6o~Px;Vq1)StgyL9Bvk z=4E<(@y~%GmFREL#jFA(m215!i z7W8JS-2@0S)7AhRQjG=U7X1hO?UOub_wO<-gK2yK>b=<$Uc0^530H2T&GYpWS&Dcq z2?C+??Fq-RW<;Ondg~~8U7hOCExK)OBg_@jiDWEAhBn!Os#t@zuf*5r-Q%4z>~IN^ z#9syxvTuvoFHO8&kBffEI<4^rXTBlIe=x++sfAR@*FhvG1=J8h!2(bUwTqtsPeP1= zlnApZM~BH4pLF;G6A3RBAL+tdp7>9f8BFc3f(IfI0XyTA)t$GHOf>a#=3E6IC2&P4 zvXD@_mKTTEV+vKz%zDI3o)WxMp$l0*KIWefWNN%;*(vYp6tKGQ1)VA2f62pbhr0nrsEOmO0^YYQ zQDzqm60Zdoi+-uo@fJnM)$c7uPMI(Zj0H@~ISUEN9dg%q6B;gzZ`(hopIY24?rQj6 z0D009C|sap;r3;=O&dZXltJv5M>X>$7_jmT*~PsA9M8olDz7b$I(8j)qw6IFH_FlKmdt53iGmn`->}B#F#L)OisOPOXTO$bGs$S%Lqm?BL5MUx4@F$t&l@g>=L=5^?R( zEM^NtF|8l01J!1=DL(|ciZSOtol5#tE^EN73|O9=iBu)k=YlP3s>rg$|FUr7@IRXP z{-WX;bd!jg=oz##1oxN8*nYPdZ54a$wW`QF!5`R*AczA!s569+`YC(tYz<0si}AhG zq<>JFB>~2=-g-821A9oKd+8a9_-aLyYI?^bP*9KpTjryTbrC ztY5=|2rgBD<6E+SmFot*c!slM?&>I*bpJ!rK&lEbwQ9!Hl=;sLfR%BNHy5AE<9faa4nTK<0RgMq789-kI0QV#F`o5PrCm|Kc;AY>t{AJ=NGQ zU7W@{tyyy?FG;@dZ;;FOffE_>$6HGSYm*iah7N0QlTnxr(y^qu#WkjA-QDKzca$yb zIMTmvuwF$VSj7emK8TW>Z^$&Pk)Ta%x?3V3PD==!oe_&~bzfH?W)R{D?Sh#$=8PX0 ze^UNLx@C0!&`Qf`RMr9dN!h^@_@7{SoZ!$1&rCCvQT?K&YGWvxku8aokR%vav8PBw z#g6oF%^BS22j4mya(8R*nm7uw*%fi4tuBj?(410NEtQ`I;=Z&drsSKT9x3>^z7)Bb z-@3QU6!;`M*KCdDxw770ZfuX$US|N?Ok6wX6 zMv2@bS6Y1UrjOjLo8O2NjFFVp-FcZjK9=zr5m(z=A|C+_3gfl4f?m#r5^b6| zNVS6R3?wCF1gT?$#CMxoz%N$I%Gqz9ng)sVLF;EM?k7KNEARexBptwRT_@9+-d6Ua z2IHj?nXjAc)5(LWh@f?=6!k9zX`KPKG4)dr_lUdl{ol0sDtKRvq<8r}dyz3F#=a~i zf=-URo%qyK#a<*b-(**Ny5jqmU5=A=2QvW`_(z_-3wm0!G)7(IN+Y9mxSMp8^2SlmMKp--SQ5!a%cR3Na`xR_grbKsUC zOfdxV0yGJlQ`TcBilHM=dOtv_1upypGC}z}#hM`YrKBg`3SQRBW#5_|(}HuS?mG_7 zMfjR)hx6I4XAPRwPjQ++E;v#uIJZlft3NJ>4HG>98dK zdo}f;BWhQB{D$9gnOEF{f$CY9mwFV-I+H2JTQ_zwh)A+V>8_RLiYV^s|tLOC%&|J|| zHaz+b@PhDM>tMK<>fLX@VY#j58fae3ZG5cZma}%>L-@O$71SJxF=s2a6{zx(1-V=( zvqsuoS46WSFIpWwqom~HVct#eDVKSwG=7gD8IIZp#J5o19CP!0>zO$3-cINGwvMJM zgX>|RksKlL{O0r@l$Oxy$REFx%l{d-eBvBoz0!aTr~4H-`1h!$KVcy_H#461uRTLN zgla!3)36m3B|BAg-#e>o@sxL2hDnAOQdEv_Gpr1ICf!8V~Zo8yfu>? zcKUrrY_x3Ai~-u5#S-vPJUPS|$MV7Uf-+Bwd|Y>L@6h7Bm?8tNnJktr{~Hf=(?x~m zGG~RhTvfZmE^Qnf!oR*+5E~RJ1$=ZBLclPizwNKuDwXu~s5Tao8$TS9aXc(L;NXZH z%CXub%*g?=5Kqj)$DWVgTUhkt)4I&n=1_h&(=a!eepr@Zi|7atSh-rV=;8Co1WqTg zyx6|-oqKJrT*BB@cKIyKZMM2eMIoqc-*_@G2MtBGg&b?H=&2D~t@VJ;4iFseBiy&& zcQ3vamzvY&_N0xDKw8A+a(C6=TkWs)5PW*OCwcTc&^c|gzy-b_*x1e8bRu^lnnP4m z-@KY_+uA0k#l~Q^{Z*VJTq197#<4(1)wBb6o&3FA_8E!W+KxNfg=5voDZ~?~N?vL; zY#B$gD|Ipx?94YM7C9RAtafE}cBIAFuiDG}W;+kI=)Xv1vvga{dqKL*nqCqrg z7M<4S?ZQk}y?}vE!-PpQl$^K4GzfIOa`C$JaH%d;u$#j4%me|c*c6oz-a811l1^zP z$J;rm@>=EavesYG8fzKie;gsvsY<|2_yN};!+6I#0esBFJZ2|_GiOK9|4PW>%^!>` zjvww{pFbqBggZ1RhxL}3Un#1gUyCee#P#Yvyz?T3d>+h8rG%n3v>5wT)YJm$B(%JL zYk3(*wvg@n$wDA!+rGBB9~CM$&`}sdO6JU&800t)*BqwI?i)h2txU9paW|(rq?^kH zGs$sFot4Tt1T;4{$Q*tzTRw-|06@`` zYQ4pX0vJ`d6lBTb?Qd@syC5W|3PHE=XPw5fZyOE}oj9+*r*U?(PW?q*3ri$$f;i>o zGsH6J~7~?vKU88=r)4hP)qj5;OljOOuA~7<-)@&QuKaO=w zL;L*o()L{SZ&+V0CM}0sGA;s+1`L8|Jk8q@(z=-<=Vf$ZZ+OcH3%}E6d_U+c=?wPc z6JXCZ4NwgrK%orGv7yXnri8i9;;%_3?}puLZ{HDX4_&i-E-kljrKdf)1cs3w5Zcs<@oUW~{S{0y!*^p+J4jYpXV z-5GfwBds|=&pfSY(MSCzppjckiu@+&#EAQ5msr=qk_8F%+k`-NQlK4KEy--5!#w?Y zi_N%)w~q62>v~0*he#pzYeG{(A+Fj|)X#Zc6QRMwo6-e3?paarqd;Guz6RjJVBrbB zwVS}&sw7v}ILXpI^s?nQV5TGvvMzYk@O5^7Re6GN!*E2~yboK`2Z6=y=CfStxANo3 z?JQIBX`8d#8djDzsis#MmWOI}@UU?$L?^DN8qgKBGC zo26lv**LdQ_HgF1O#i8>YGj@K`n{fvQYFB$2##*@nJ5gK$vDy>rx)OWCTEf zW_AYNo#AlG4RI05`*Ac!R5X4Iyw1{bO<6RD(kl-w%{fj0X6Nx6y9j-}${nRUcJR8P z?wTS-0xE8jyAvQ`XNhuZXGOpAnvIGX#9&`vEw-1ewt2<(<$MG8iSb_}i61C)Qp&A^ zXL>YstT5h9SIT~Bb`${+WB!Mex@_>#-f1MNaR+M`_alf~RHa3;^}fu+MWL+QvN8G3P&76)Hsa*f;ri0RbRJ zVOQ*bwAX(r=rx%0bH^A*pF3d;h55hhxU^@K+?D7zszbvk56M(4ZLi`|ISRN$X3SLv zBNal**{2Czlft0o)L$X;a?fIW$B4$C%Cc zPHPIbb_{|jEHmXdEXqIOu1a_`Ze9?L*xH9F9gj^L{L4&(7jh9GgJXmQOniYX5G8O2 z4bc*&0=?46UuUcTo+mw4btEACMD9}rGP!Y5D|kL9pOB;p3t+q@Ju5dpn5hn#0447Z6EQh(W9IatB#KhnQNsh=yU}0!fRt=lAfKf} zq*Y=So?}oj?MbJg8Wt0|0;=EVckTVuY^-z@U%(B-)yh8Duf0jy=99|ry3u48o67>; zs8#32v`sHj|EIuLA3+&kwJ#_fejfhU=RdWB0F|U`&Gi}192q(?kZ`F+QqE)FdG=%y zl@&#az<2mfvn`|r#*F^NQDs`*1vD{~YLT}vY>sB0n)=bX@}RX*3k}6DAigmTD|A?X zSH9EW*dcSQ=cdeCn}a>jqiy=TpSw?GBYJj z$Mv^~1k0dBK(KR#GqR|fW^s>wDv@3uoscS1&b*!~IqK-WAW5zEo`5IEIgx0R$YoG( z)~=qrYsRjm%t)lL&hlCn-a`;@@5=336VoN=wx>@vuU z|K)-)-DO<4xdyXdq(Bp3+Pq}El|?`hCm!hzb#WQ1%+wHG{VHTh>3!PZ2q}WkcXg@O zm(K9Ydh(#!@aW$*)#Mntj)CCXU4Xk|qS`AD{Vqx9eGkIN_!NoQkb<+kr8GJAIZAZ_ zNg$Zxh@D(DN#Be9{x!0Awte+-^-@hSSW=ICa3kU&)8yo>sF#FsEY3i#WRXzK2*Rzk z7tLuvpd_oPcDzheV07UW!~2y8?93;0Yp!?7T2GR^cjqcsv6d zbii!_o-wICm1uOCsp9Xqm1UY*>~QLspPx@?Ssps@fqz$ir5#UW7GslDs+gOFz7t`S zGLkkC;0G{}ul0WW&^F12EtuHHWjfh{Qd6F#Qy_w9-C58TN`k+vPD(S~xC|!Zb)pwT zEH_P3v0gHKXevUN#FNosloKxrJe^;nq_4+Dg&9qO$q{w&w5b$D9y3-@;EeIjo0Il| zaA;ZXlqOPI(sj7Jfy#;u*kTH@{1Il?{u;@rXY3S!jH;agkCkgqAQP*wOvI^kjo z&Msonk1dsl8hKzDk>(cGXGO{*V0EOTk8swce;d6)3J0hPOT}|Cc{qc%S+X6)wA}e! z2T9PJ!{MYQnq~3+c=IpX1DZBLFd@dcg-oL(96cguyG3SgPZ{ab9h&v&(0OaW0OwqF zcMoQOD4i&~vUfgk>f1m!l3e@01tI=Elrg`L8h!|#og*+3{or3ySU!~X;evHrDl(1M z5As7H^SRKiej*t)%r;*8mk0B=M*2^1h$}FE|MCbql{}7Tuy)6BhJV?CwDjdtnbV_& zH(Eav;_CkoOAHEgo%fBFK9uvv*#FOENQP?4)F*PHb(z2$Z;T(6+b5C#pvuA2wK4Sy zSpNEdZTZk>Gb==9&!4xqg=*y?^f(`Vx2o``oATEu@$%jJ?@Ae=qN;#6Z!e&HB7P0V zUqfiZR=D}C=5)yQbZK$luF%BNa1=L2ayL-*@hlt4VzW)DR_NWTT50m~Dzi=6t>_~` zSc7^Vk|}nAZUj(1Klio18qv}KYdkDl8dN1!Y6?Mb8c9^L;;lLL&m?kZ1eo4~NS56b zi;?w>lQ@v`2X1f#w?Q-Y{vrh?eL0}&kgE*vyR%_`py};I9CE;N*Q}0@u2-`yXR?{^ z1H*71%jB^RMQU-NOxn2Y0wdbW%pL zh+-Z_L)rNiNDGUkzF(OLW<$EO9HMM8WcUE>NUK1=EjCvHHWoX^{uR*XR{hup*k{~; zi^7GNn2YUX<^d^5&U{b_7Qw@S#ex-~scFay-5^x%F%;fOm~HyQQEnQx7GV5FLvCg15Q5x1q}nUrak^n=#yAbB zXD?;I!p#wl6&Ml8vjx>>S2jc*c5e+>?s)bjR6FqMoUkD>o%lQb6N&70GzJ8;7s4Oi z+?fw64$DlX+?D>rVNtxE$J6b6W;MpEGg1_vr>4+Vun~=CAi8~r`|x`iF1;{Am%qi z?>!wvupkd(V$Nq?9#A?uk))_I1BWSbRE|TvUj+Q`}CKUH87mGgZaYYEk=-`z`T3}Fe9F5XQB9%OU%G|5wvU{_kKBt>1HIQ zwQrQz&+5k2i(zl$QT^BI{73y5V8t*E3&k8|A{h`7@8gUStvZBRyzg9P?p3|dkKqeC z&xnrsPaVw#@}>HOl6o72Q3*Iz+WI!!6T}SLUF%ig$~^60oQhA1o;i7!nO+|lQ^!{* z;Oc`>F~GL=V9(jQ?1{Qg75Q34Ol1V#ZYYSPP~WLeHJ7mQl*?sU38)5_^V*l^k)rdl z2}3@vHJ*}wNIyTH9d9YWuQV+cx=2pF`-zN8a#i2{X{zi#_w$QPt-0?RQ*gzNmbxkd zGLA2KGsc0H@iqHqnAZaMx9sz#Y0)`(s53Zxj?B(kH`^hvrfPBVeMRn^>{FTS)bQ=q z6Qo0e?Tp6LfxAs*@To?b#lR=@uC4dRlGj!quzxrj(L9Kfncr<^^rXPelPdU#aq9x_ z%F1Fo0Lec!Jo_%=F9q9-|F(Pltpf>PGGeGUuL;aKgfZx|f8VeEw&TyPcr(M@sca1v z8SxSGgz_&9OM6EDcI)C1$0i0AOen_Por2&R=AhVc7}bm$j>76|fG@{$&PNHDJAvje zU>0?C^|QhD@mDJMiW?zOZaF)Lg>l*a1LN{9I_xtYFP&_XuzDD=$0`VFUKisr&Zex? zRkxH?rDQSlK38CHRKUq;6))T?+(ehUyY1PZj83y6m>q`(b6P2hL1c2=@%Y(ZfxJ%C z(ls=FF%oTK@r%F~YV2O;_rWX0qZYBj_Hd#AN6E*q_l1GEX7s+gu8x*2OWAyib#Ge} zJc|V9Eu^&5=ydxk2kvNm($>+G`#Nh1jcKdc8bCyX@Wh6*5R$5b%zgeiAbK>@~ zWnoi1>Mdn?Lf^WtzOqJM!8gcNY{dA`k{AoK2a-&{1B=iDrY7^iUgd}_dA;tv-J=%cRb~%k;AZVMUb`9HK*xA3fAO zT~irMdL+&301(YTEfgm#8eb#!mXw=7!iSA7QM9gUpZwPk_w{XTEh)25=gB>PGjba@JAS1ahZfhi zMk?ts*wR??A;%4lFCj>dhsk`xmnzrptLS}u({ex8J!@2|YZY#or$|JxDE23CWun8K zTRD!SLT+gL0%uEs(Q#27vC9cqo{NQ!gMAROmpNX%y%+ZFG~*k<>ACezZEFK3h9}<_ z1mBW6l1TOAW=F9=Ob%T0&98|2z@N|pe5+E&Pb=Z@^X|bp ziLW1zB=&SNRz9%gZ{pXRXx@kKEb@Ff*+J3jeTKNA_mFFR5po0{CXa>VX_-`8z1eoQ z{0t^IL-hen*i2ZU>A$z-FHIBx5BGoC>famEYAR%zpg2qbmuOO)ZTue${m*x%Ie3rp zuiUD^T)Zs)e)vE72fizu+;|luh0UcCqpLe~D1i3!<8vK@Gvc|qrSSOr`^)0vcRVd$ zBOnSZO~Ed)fvu1 z69@u3w}tZOPqzFPX5-X3&y(v8?9@5bVY#IS`rD9=p1q~rrU4(Lca`G_t&-1H5sa?x zBYkgE>*J<7pI&QZ&dy79zj)T)C6bjB@EcYy|9*>)6)MExxpCX5d$waUhE^=1Q~9dt z-EUa(?*_V`ANR?iSB)Q+VV;N-C|DhGmTJGlzqJQqUIVZ2Yjf(8gH=BQO1mt*Lm}tI zhOn?L@mF)k%c%0mMs|i<_Jk(C+OVnGg{3Bx2d=(~RvDg9% z)#Y01m@J&vnSP9OItpK{!m1dy<5N_V90#P;U3EVD>dj7-j0+4L)msI6Gh|11iLrkC zYX0opQjEy=$kFFn5;H(>tF)bV;UJS|*Y@y|WE|mId6B>yoeS-yy2+-rtcFc?H>4JoRzKAqfCGm&! z>#?VHBz(=Z><+VbaL3f`k-J#{q~A0JRYO~*+~EIwpkX3`YF`1;`25LF3s8M&N>z-7 zrlCAtKfhz?Fb55m?dj-It_v6+(zp1$R@nYQC-7vXp(D`LIT_W^)%z9YaI;`;xs#w!R;G3B5VN!UWVc^T(98@pnT{l&*P;h(KNg?Pq=>2mT!oT*;xIF}jr)Z5 zX#n&5v!TbZoIBp*ZejJ#9v3$X4fNL;BoQ3xv#`>L^7P~!*>o+HOc&xPK@QCOm+a&A z0@XNL-$<~r{f%?>>!Ii8kLpil&9pz|5ASn@RsgB2j{G@T4h{-p!@1(e;!+ncCi}c~ zDvIVQZ4HzkV<@llIg<|91R|1jOuI->=r=iuoUa&>5WbPum0@^fPl$BBV~-DrrUwB*@knr zZ&Vc8ZMB3FT3VM(JsJ-wMS`bgW#+}?C$wz2sV?{vyc|QET1whNS3Qr^TEqott>_yYA(7?-)gy%xYcm0>}6mhU*6#GiaWyn~PjUNN>pr%ele%z>P@X0alZL^Eg3-K|=yr{ldMeo+c0PhT&u4+;+ zuI^;T<@|T_TznS-)e^2UI#yPn@%`*6lc!PTNSE5g-qlCwUbQ%U;`lc#9o#JR+<*c8 zWP9|~gd2)3(j(H}&HZsoXA5E`b7lA2&}vpz!JsPlO7xjVxhk$R^J8kY9|XfSFE`5Q zb{k%A?>*aK)Lh!!Ygw?O6WiZ)A+#h>b-qx~ z`Wx2qxG`;J$sm+EH(Ue_3pfJLjQh6N8b$SenlK1xt{OKwIJKym_p?AC>ZR==X2>bf zeJO&XB_lqHv5Q(Te8Qf`+Rahb=XRQ6UG~u+XY!7q`@Y!Q1&=95U!-O8x782lPCbYO z2~}ph_@b)Eq!1MhpPgPc!-O_}32(Ms3zN{7u(|)V`fRZ0GTO-Jg)i6DV zBJDdQ?Hq+kSqAQwGgX(%CfAQtxtg4tJy|Z{*~brFZ!1ZRlX03r zX-qY4HqFf`NI#nxu1xvW;4oD7T2Mgl3e~A8cm@R>c;nd-SEaet8pqrGkrHAX=l~mt z5G|WS7HipCBrLBHm(U`@BAA4QF^C1gd}9uIbRtd_56>#Y+9i zKP1%mdLSMj20PbcybqAO~{@SAM}VyQjYm z5!ClC%%?<4WaD*jAed{rwS!oTwct|F3x~Ye1c8f4-evFclX6Gi8kcrH>mSSDNLdgb~_QKas34B<5#Ukr2 zTJ*P4QZ9>x3C1rvOhj#$3uFSel-y+0lMGHNJ?xA+OUP7mF1RXS5v zc!XO~qsRC}wg~0t`=z%)MJdTYDASpL9bz0?9`DCj5ytd^aDlf6TNwt3;oE6g04y5u z*|5U@@O9r4nD;Y7%%!^<4(Ozgu#|PBn%v?jaZOA<0tXzw!J_?S#10u7 zf5(SU+GH*5qphtmYk&dCF);){lkUVBHik7f5LTDtK4?1cr9oT%9Fj8vVG9#>sBR!E z`LG?eJeV00OFd4Par`<;blPvbX23i)Qh`J;4N*59x{GFMO{u~{#}h;P5>f#(22m*ejy^rOD|yv9Eh?a=%-BRU>ZHgAgG zX{$yA4uD_cn(WyY70rjXeI)Bd(4=O(bD~}ayxjdHNNyKqfh)(MDusJLtYU0^Ur<6+ zZbSi^;UHc%wkcsd%}Ds|fv3o+a7JSig@@(*EsNyM(Q(eS2L9w~m|J|OltCO%8j7Z$U0{Cemt{oJnenh_Bh1;kKB@80Dmiz4 z(+$7hWFU56vXi`lX_E5ehs{glR;i8@rJm(=I@h_!)LCOyF?LnycA!w_7iNIKNc<5U zVNphLq&E>|NNCF_dT%}vpQE;|)PdsjbM>(irA*~?Llfg(ADZ~t*o_z+6F&6J>HKI+ znRiv+KD3UoX7FZ9aUJ4@2|>W0InTNI80AO&x%wkM4~mafF28RNf;Xe1Fi@D>BM-cv%w*kuYvLk{j`piJm}8Z#(kY$E z?Bv9dw{Dovb!20DIaNufuE!xS{4_&R)gRlynU=uV+1BhzEIZBV%^)O5g^lv^JumM7 zPHE|OdQNegN9Y{8K883=RA(e+cY%=HA}zW6A$wAfOZr64-qx1|M924&%x!}6dBV(T zu~|fP-?sef+@~dJf&I4hsVBO$#vRXKX+gJ&?RNXRsCoUmO#SE|_O98@RqEh0y{p1O z-dM4Rvc=rDCN(kpOwTW9@qC>0WlxbTy^5e0BKyncmvN6o8~r$&WbL5?!}i`={E&Y1 zMZ*F{*T>J=y!>nwQyN<)l2&noOS z#RZjqQtCCNJ3_LF$!k#fr^Ybo_z{X66xxNI3|I@^wWhY}!C$;)B>AtV>)aR~RHc$E zzHs_j37QdQ!<60;<2YhmecP)Bn7dJyt+J=qI#v&w)<1o>?er<~af2ouk7iUmZsfFQ z>NMxE$Doeq8=Kv)FRra<5vDY+#A&ie0bF91jPBgqA~_N|Sv0av(VGyPa^dR-G?e9g z=hazz5CyqUMM*p9=SJRE!Fd6J7*;}c;=&)8w<{_T}kh_ zvINP>B`sV;bKbfk&%2ur%f#XM8EuOY$Z*jQ?#tFC2jXvG5o+54A-D)R1q;zNNPOgK z_!)=QVC?C*OOH4hXi8iw7RuUXj}FBUt`4h7b0Hj^RN%`vl>v^{P#tt_so4sV57Uq8 zd4~_3)G;SU(UoTRdKQ@3lI&wWA>E~pVLlpLokPdR6-SE~vYE>C6H@J`SVh`?D#gUK zqxrH&2ph8D^Qf}E7KGSHSZnUMQ;MgO9&Q?paHQ3ZpAF8D#tm)o9{s*$p7!)JZKY7u z!|vl(&#*YZIxzusrc5Dd3?fm;JR!=nAvd=1L639^MM`wX49!Km<8hA9irAI5%n2Q= zgwYGgB$ggn*~iY>aQ48EIi552WgMr){q*mOppTt3wfgUPBbViWw$+=#Wq-rj1M}%U z3FBoj9rNPe)XF}Oh#I`hy{T;=Y?<7;>ULvbV(s3Um+T=o#v#)R$13W@>D)1F10zPa&mhE|WtP3Q^8{w?4;lz7VPzRfGu%8k ztLSy_Cvze*q+=WEFYhhAtZZCTlUR;wx-m#*8lf0szj(%C6YD6$-T_Ck({^*Z;;1}m zE2k^1D~VcgKQ~#NQjsT9<6G$OWsG~-95D8v^&52S<%lWP1M&fTu9g|PVkha}%$+hz>}rlorTkr}?5^B%b3IK1O-4B@uV zgP;$Vx)8ylRi{dh>sbzbQnIr?y7o?6S*Ce-Y~QV4w{zkG;?Q}}%FuEW4?R75ZnZQ% zTO)K9l@tXt#X(Wu?s!lAVKyL4RNAw3(bLk|TikO<%=iryr`|G;q$9;D?JT-b)rS>P zBKqjK*!Zf2PROv%+t`-Qn8G>%Jcna&s2;fm37mK3id}4DFvdDg*&GAtt*E^G$0H$krrQxf~W}NLSA#pyD*|w-wPxjY(02x z@U>OFjH=6$r0;HR?W6#hSwhWsj`B^-p(~Jh-CF+MSh?;l)>fZl+^sLQ!g;Cde-hQtvQd#up1QAFB6+lw z-IS4`lpa;auO2dEFyI-xMiMq+Msx=scW$7hHp!{l#L(>CQZ|w+Y_V@gZh1Ui26}|U zkJ1R9k$P1TpnW`UqO%NWj6!@A*;><1J5E<)SDFZpJZ_q>5>m|MthJRruao7Nx;1F% zpx76uOfiWC29+zK`iS6dJ{3&#Kztq8|GvS|*pj`jVhgc$mtf9bZZ=P64~>w_$?gg0 z2-*M8VoTWYJP+RdtbE7UZRBI-`Ecv!yPEl3Jn^mW4|Se3KJyV0q>z-&6ll7uQ*VKe zVrNHqk%^iYL1c4!{L=W-SAqUiYrv6wVCRj<i7u163=Y$r2jxO9Eyc7T^tVR6W5n-rZV#~|tT=j|s(A4T zeL6vNnvN;0V^_C>yT^!xg$x$I-ueQr3s9FZIu-~_$@=gDp=p~=zjDD6uyU_at*M(w zgP14Ry~;`4EsP%TC4A9HZi91>&-~?+FP@@{8d%tOLA37n6LlOZ$W%wCyN$%eEmL1? z-cW~`+fhKElwVm2F;(i?=JOk3jW(L2&mUXnhYbw0YM-j~Z;wjd071BhizB{^ch2;) z!d|GfvK6Q`JTp`v;;`Gmk)Brq=qsB)=_^YAOkbG+Z9IK5bP=^eM^Me5Voq=_u`*nM z)i)t>>G6>}63?#h$FKX{JV`UFE~Ar$pF%|7Rf-U)V{O@80W3(K(86Tj$& zIkbnNTf7JDllfl_H^Y+lF+_>xFEuwE|7AtOVlr(77>wU3o`7Z zd8P=p?D)Xa@t9lYC2zC2M7Ilti`3r2le>kv{V%BVC zL?dD(Vm3F{-c5dXOrm^Qk6DItE<@A0L+>t$6dS!J#gzhX4q){wiV{J%6MJCz<)DY7 zqM`sY&|&yT*j?NsVCmNS0i z*keukWn&dp2FOtSr3md)bw^@LkyD)`7`8>QhCoXSo?Jz1dBm!Q?6;N2XA1Ly(W>@_^bvS3(^&s+XQM_*#6^^5M+*b5rSgmYPj2$t|2zDFaxTV8o zdwSgNi+yF)ntLZ5J#$=~`Yu%Y*2F&LMRTl|OArl<5{V@aDE?<6LO~MdQxwyKJBfk^ z^z1^|Im1!dVTfQr;_y)D<5@T>Ea)5sbx}xYi8yMGSadV60)wpK9hME*mh0BpdR<3z z^3+y6wz7=S8@hrb2HtNPQr_C`uD-ws??AYzHAYNoU{&GGfGV+NzEv~_W&U_B=-wBf z{un5`F)QI>bJrIysmWMz zNK>P4Y{emAQeI!C6Ah3iOPW`QM^?TWkw$AS_ofrX%3W{L=bQ z%1DMBUqnOC&wSlk=}U4{k`<7Z1xELV2d^0HA0YL)1itVonlllQOOuN_Y zZBFk-a^NnV|BW8N`bmVa` zJ0;u2c9Y+iT=N2FzQffRh%vX0#i!+lC@_BG7-2=cOoL8(vmWpKiOS3;CupiumAQS! zHcdyqvlEVEvKd06cJ+?dj-#Q^BjqJM8>I~!s z*n2=I^52&~MaToFkv|s}{=q+R65x>pI@j14tyg=tF_IT>>22-+C$NfvD2tE-QP68n z^e&PIBR(I{Els1i$DpH+N)V$FE4E4^pwRZ{h7rE#tA*X)nvpF zpJyqNt`0|)#&j{HE|)qp={grNm-;1u7h@#+x5?s zaU9~>;|gojXy-^)m!lN@H_Wndq_Or7c3z!E5QS)oOsR6hmQGP}pw)OpdBDNpv~AHH z=L}20tg(LK1KOd?LyudjpvIz2Xoj|AX!}QeC=OL~nl5&r{xL7S#n0;l#?nn&E7g_@ zPRvfsqXp4%14MVP96yAVHEb}3YbGiwtj~brWe;yarHkOx)1x&3( zc>#jH88DS==gPpBZmp7-vzu35dIRgmA#&o4hO98!1r*|ifgMV)Dd_$L9zpcXAZ9Q; zEPNebQmMa|Y>3q=pnZ*<$Cs5sD%LoVv!-dJ%8lA!+tf_7vgOuE*H^S?&#`7f?FS?` zK)C0=bq7MB0xgYJP07*m-1eEbjRw2O#L~lD=s9mIwq&&22wo24Rc-7bbU1R4Z<#kN zjD{?&Z;QSvp_O+=BT#EGZW8T1=777`-Rq`L-Ad}7v9sY2X~Xrg%Y7!uD1v*%?P&u+ zuLx9kCKEh_&7az9;Z|XV20Z~G0UhY;kolDWrN43c`?gk?w%&5}$4k?%?Jp>p_O74u z+fLtl!N=D3$5}w}h?S~xJCj{xNkj79A=4~7j9cge%8DlWjdd|>I5M4{(Fm6pS5d3BM_ybVc!7F#yIEHf5CgsT{S^FxqVu~y!Mzv} zdfuIMgKzW$Z|?L~VWm9KC%f>tF~*pkZ6UPQo4P_}-<1BU&C3Tm$v17MCia&1DrAw} z1lO_Z7AtajU{Phnh<=$x&9sLyUvRa*X5C41z1vY{A$X%G+3vW2w9CMdE{n8lK}|!o zWJ+Yx$;P%j>aKUknR^!bTRoU&U**yd6cuYDds8b<%F-4X2XKs9pD|97v3Ix(za%!Ou ze8pX${Aq276)TpXNA7+Sgtz>B zmkRW)kH2WJI=n%5f1Z`;&WF2}!~ri1VRCJrz8r%GpGU{YH)}m!w?v)7lM%v5EfYSs zwYX8}TCupish8ZE!}Gxos9VmzCpbXoa--dVJY8%e&)A)sVdPcYePgUid7jcL)q47hnfGdNSparam1jQ* z_a&RtqEl2wc={*bJsPJa#X&=8&ANlkhVazG4|HNSLerWkSvw;ed@TW zWz3l2Bc_PJGLt7aToK%E=*D>I%trz@Ypj1q`SOfczoO!*?-TjSrI|%x2OP27oBqg| z(-OufauvVqXd%t)_F2`bN^pVv)no?m*IEx6A7?jwziG~Z2Xt-B(d-dNAL3-s1i!N) z_t#o zuwg-!{sA|`r0{pPv2P~I?&<(}V&h$V(%HJZm(FXwLBzBL$C5ohbau*8w)6gshv)#z zw{Uv!!n$-dmwX1jd-PBe^V{j=x#i@6EDwNbBeTh>~V z-MW&j7#T$ko9D&P-%h|GGPU|kwA6@@1}u19wA};>J*s)p6Nw20W&y~W+-DRR`m#Q1 zc`!y}-22em*Q$YA*Rp~1C4g?AV$!vEpKH#~NSlDV;H{x+tvpF>K>6;sq9DS2u}+dx z?=PGjf7|lEG=ghoGjb7n8~5lsqUXQd&;Pl#D4^<1+LaygGqCkEf|E;w#->2f+E>~@{ZDnV!Mh`M_vh?XE7 zGPbRgCAB*dSeh=Udc=xG6KIhrIw@LIFG4)q1vM|7n+J`D$Q(5_hJZWH>%`#4qTQ>_ z@n(cr>DXwC*%%Bw$vgv`$Hvd0DtnpRuPK=n(`88WqOs+1q#piGlNM0P1<+8^dZ%m* z@;?#GLBnG=C0d3@2(mufVwr}qWeDMTPHR~)^*J~uwgi7!yzCjcunvy6X1rDd&J8{R3xk5+Q*s(!cW}>9(3Y!W-d&>-J z5zwN;6g7rWHw(k=+KJ#E>P&8QRV9=NgZ>ufVWy&H}b$@k}+UDIo1 zf#ncJJK=DfmfS{PD=_VTZK6w$K&<2&jeA6e%Cwk2Uw8{?jFoNQMqZKRY*|xH8(S^V zJBG#dO-a)3q&~_6$f2eTe%cS5&P)ff5ZvBNEHSFK z5=*EK&fO#BkO$S7X!zPTb7ZCia|(#Xv8#Uk-tcDzOAp-u@;M^~!(9qjJ%P;@?;cLx zwVa%sd`wOfhXkHFUng^OLbs9jImrSQP3BWjiHElWy6Z4|&-`8Afl$;j51;KS(aI;@ zA9CIi2=WF+GGY!uiyx zgoGr<`i~acQ$!16SZM=`se4PYE;5$IKD=f>u;;yd+N+FP;DLJ!eiaKImmG1bTo>%6 zL>Q_&LZMwKHbNS=pNQ&UW;je43fos$LC_5r2MqPe@9C4yEI*BP2gYZAaRdAqx6cccdKX>!ya@Q) znL+Qo%+a5Cmp||XzhY?FePCI1)Y2ABe(JWoOC^cg%zfVtIXrwl8n;TbE6Gt$CM!jyhp?$485`Uu3zhL>xtFnTXj^e9#<5uU#C;~Y4n4usyAdYRiIml~ta z?uhIO*F1>I%Fr@(Aaxn6OCG)2EV1t5Q)z}fJqD`dDI4IS@>VM(VZUaD?OocEi7Ar)CV0v#V=t;3lxM zp9KvjT+1Q-YV>afg8>iv(*IMT)U@l?)c;*;QFkfr0O_Q%gx{nYels}*+}Zwt68iqn zV#xm_Vek-e1{wVJfG;mSvH0GTEYP41-0QuZ9Ia}+^j(zGZ>VZBKw zWw1QDq{r7&U1Q-ND2~6LyOnK^&JNo?d4J~wOQpC9Hj0pn!H5zVa>q4>*n-|dvSYhNgR!!Ug-tx9L!6Xvghn{)jpLQ5EG+e{An zufN#OE#c-&I7rKOr4wTH*8jhKK@I$WY~Ww@V6@HUjmA?g%it$0gm=xw04L`gdfL|) z@#pea9@6#c{JX3cn5+?SkqdP|0y|S<14jr)Dq8z`k3S=dU>WuzIRQbD-xrVT zDJp{!hQ%kbYpu**{?{~XuN!4I$$>uo_4=2$IYGQ$@RkB7-_+|G5_dWoBJ;R9k%47r zA`D^=ELr9iz#%E|c?i8iD10D5!65U38m5L^6Cl+=;;;t3N(_%tO*zb@^#sU(`Wb%u zK}_4ioUP4{y*mw*a~OeimJ2xHkZ4ieHd9rv=D^Y zAPn5>`^?{-A^#AH`W1hp)O`onoe`zIZCa8RdMD~UX;}A+K&z^L=)v{-hD@QT7U_NC z@@Ze*96>nXNHeylS_+Bg9AX@RyUBn6S?7EsK^{u@L^FmEH*KBSZQ9wAVvcE8q)wI2kTT*h6C?#g6_!zI zde`1}f#E6#VwC7zG@7H;B~Su#Roo(bc#Z4chug+YYSdrA#6@)Bqp>rR!ZP5=%y9PR zrV#N?Z-bq>7<*zu5mx(e4+he*nV~lKB@q*0?|AC(vcr&Icx4rthSp6q8}D!f8^`v= z5cruChq)Ugm~Vx&l-)LLn%&lOq%v4HjU+gg+wKWe z(OL36EKCw9WSEjmz_E)h+Bmjkd(+Mhd?dv2$#tm|#5%~c@s2cjHQ;kEy*LbRXJYUK zQux%C~S;gjMA1*;z-hekK2-c&zMo({vv## zsMEsKLq{ttn)-%cnf(1>a5=h=OX2*$9e8to{!rf^(KsQoGt$Q^w> z0?7W;6=<}5r1#5U1$F&GH6CyEpr7uMXoG_bpGdwbE(WY9Ow4F;x!cyA?y>Ccoy^BB zVIVy}PIN-9FGlwWorbE?2BH9rcVAWqk;ln^pAmjz$_!r@)ky4?-iWtbU|AOpAH%AY4cgQqrLKb*n3z)N z46H-RCW`=>DBCcC_{n-9&t8&rL6uFk;QZR5%(QiZ!W)axZ zQJ`jqP_tkN`Rx)RFukYaWE6OcaLhh2Thg#*({+hTJpoRN*k`)WAW8B*rvMf@6?VAj zMC;MC`eTP{?Gj-5o1oPHFlza?D$Z|lWM;?Dgr6fj-qTLF*WF1#pxUzirATHOx_c0qE>5Y{y1&C@~x__c&mWbCeL7W;4g{Cj?#jX+|U zLC;mXXkI}Qy9J9-f*@&{cJpZFu&@VaTd^gBs=*X`ukyiz(1zye=e(xc?^KJQLbL9a z&1SuAX^dGFJQD+j34wyUJQa=%N31JHJ1Bv$N2^OX%=s#}Tf#7ZUIkRF@Z$x_m$+XQ z-R2D6tX&39-WkrVJ?Cn<1aQex6Xlq6o-7@D=EKq2t{V}hHv!q@_;>)09m&>7_DpJ6c0azHWZxC!95Ot?UN5OAC zDj+Ox=cAWCzd4iYjr>4CI{iR#;{a6loaVm5{^YsucAl0O$vV8u5{Mc=8Q?vPiAG>( zBRnYEYfGBpoo>R%JYc}7VWbv}Tdaf$ZRd4I^Mp6kuI~But-sCYrjbw%It|RX^hB0; zrlb4c8o?@TXJQ;BF#rt@zWn_A1O_k>Rl6%09#_$=5Vbiyw@>R%F&Koh%r6MUIn#{_ z4t}mgH=Jr|IE~-&$v9FMUQ*?PoehoX=D);-)YPV>I10ca9v)7+PFPd4jF80*1(h{y z#l)yLP(gBrYSmWB!sYq4kYmU8sOOy7`)EcUev@5zCu-_f%}#nOExSfwrY44Cw&gj!-rvS!m{=-%L#G;Th&daT)xCRC6cf zX{6C4#j(e2iMdHwk~8m3*ULaYYH*4Ggrl+j3zEDgEbUtrU7N74=cQOT28lRQ%)r%jBT7LWX=y9bG%ab_XgN?6+-A!V^F_*Ipz5$$`c*nr-(jaMLxGWb ze??R9>ox9}(XThvj-SbKq%lmt`+;IM2UcHO>l0$)w1YD8O`X51PR+b~N8G8-0>}5W(7QOhNi$(hTD~vRO>i5VJIYPD+1B}KUm*STue>XT@$UXW5%v_3qH>9= z#{Gs57iWG~zC7!$w|I0?O=Xnp?i~>$g7@=9TgA38pyuAZYj;?VKJw0)(Gc>CAv{ql zRr7QJSrhQ&n2HgPk80nZa{5~qq}D##jHq3V@!$u&iV~;sM@Wc& zZSIsW`4wCPghl#u{FC*&E%BE{5lH`JRNUOsuSZ(7(9zJDQk)4%vbvS}9oC8~69*Pz zwy6)D8ylChkX^O&P$5*v+Cym``C^vjb%1B5^;xTc55c>y8NX>UM{xFhzNUq_d@|v(3aubPc zW21!Jf(Zzywvo~iwlZ%tch6`KhoaAL6_KgJ<_vLmniHdZOaygNG0OPTz)!X%RbraIfuq5Kde!>WB9%*yKBwF%Tk!A&2537F2O0=y1nqz_Qfa< zPa-Z)#TqpHh;V8yg%|@WYOAYk#Ydm;jG%dOP;gmX4V7s&iOKUdTu)?eTF*3+a95fX z%i`@afR#vuiUr(@3zBT*&edRdZ82|C6cyT`G5vaZ9@>BepNsJkQa5N@puP#>OA3`% zD{lL8)-(oI%uucwy?sWvC|SjGgU3s0)qb5t#kj(=mfu>wwPxM+QxU{cL=)b$XzZsx z&Rog5OE_8JImbJ^DE&$?fA6x1*+Y|e6`6FxXZj3G<-kY$NvkMfy-i0iqn5{m0c-o6 z^E2<(c5WZhaQQ&f>N=tOsHzZ-8H>AiJI2dO|aX#$?KX#mGT#)yd_Y3s*ioGX%06{9&N00SGH7J0x}JmiG@MS5Q6DvAV-wqrq>1v28)s{+hcJuL{IN%# zuC25qIg`hxhP0GJ>>jc8_bbX%2ik}2n-SF^(<0{jPj>g3!r@yTn|J8lx7KjW z!U&#PX{kyvU`ojIvp0L{ez{n2taTn*wX7j-BewBzc%M>wA$`liDk@4Ka{KPiz4cGd zOo{fX66x#q)A{lJt4f$#gjcLI4;{USH(GGCID7C{2({NPM8991UjQRIH_ZCrOQ&mH8v6B4llGCy z?(N8=Y1&8khmLQhO^%`?dC2SOT}5WA>~CP)I7msG$qOL;IW)2ovGnxs3Y7TQmSs$u zzZjeYD1I|E|IHfvA8f{eq1n?`9>nwSt=IpeGU#of#9*a$YsmUBb)mxvU-U6b#8f&S z;p?y_*umuw6v7h8mha{%fHWO^xG3g$v!jZnM==YW#U2=ro%un|{sY%@Gy?hzQ9$8b ziN6bUe8}DuGq55_kLZZ2t+Fo!5uyYHyeTyNx*@56tIXRT6t*-+T9wGj@i%ij^LCTn zGI}tU0ag}08%7BU=Rd7D6!JMgSE&e`{&UA8rX(~>G}JttJRBiBf(hoFU$*8fAQKY} zD~J$>0*Bk?#Zl7>APN};g)5yMpSTwfxqyrq&eDW8U~rDjsS{FfR(MR>_IOn>kKe~0 zE7NMfD1u2f-Z~!qb~C7@c8<{O+-~DOZvTC0Yz4xop+g!^CnOGeyyoq6-3T%|6Q=2q zFkYtrFtxqVkn6ZP@AQ8M?NZJt=6 zsF*}iir&vF`xnO#T)pxvKlZMhrDV;g9)~L88*xt1O8Dhn$tFmm<}p8<)TPG6LIvI4 zEhDf1rRNN=(o_Xem*iow(qNUyn7P?P6KtZ}>ZK)$SZku?58SPwF2S1}HVLWE0}Gd{ zb()I4)!+P(k~8SGE6h$wTG#rxe0?szV7jmE=ve6$fBEhaToM?Q>9~8pyY&O5mWIWt zF0)?H+a+WL$}kfB&0q<{0g%5KTAb<^LLa%*RW6P-J+;qo3`bO_O@asfrVxsw)@n}` zGoK_QBf)GI7ltDe$g{XDNs&fp$MSa+ME3nuLk=b?o(X++?Q|WK%aAab*wc(fTlkJJ zcWtVi*gL9W*Ey_i57diF%V4k^0h9Mb?rK2j&M{w*z;o_OzjphoObwFtE`e#-#Ja_5 zG<*C0>KtVw+`c$O711G5p(n^NM%6H~ZFcp&#inJXaUn#@b57MV1*>z>@rD5GNtR#s$aWsr_5HPO|h zn7M*Saf_2E5UKMxtq%nokIX-G3^E=1zU(n1JbXD?C93bUROkcvErPl6Nvi&^amjCa z;RJ%Yv!#V3Ap--L?uarz+TJMV+?g^~>Kzp|IN@!PMPLdp^fm1l4)ogu{3gxH=^Y9i ztFOBsbFo>#t#+Wj))o|JMb0~K6W%j@F3(2y+mPo+?QXb&*~u(V`?aM$(46?PD{4V~ zI;}-ZlzjKpHuZr9woA@ID55AG8xKp)<~HLLK`7c{j>V)dsZT-Fm9};IONX4KpVsDU zi}OFB72Sw1v_RIpJRLIHIHN_M6JRoj)unAohAKtEor^+?L4%2D0?g_@B3~~Jp5fsk z8`eI0@!bKUeo!#&9$}MRE4corA3C>8qTqz?RP$?v^AB>wT3QVIJnd1jx0@9kdUw8= zZ)!zKMta}s-+fST{mj3)W(bpd9V?TMUIqf^T?plhQj2Vjqx-sO4CA&iy9#l{=^H_@ zSd@veE55ySDfC5G!%Coz-J7&Qv?GVJHm(sH;YlQSK6@wLNSZ38unQDS@y((PkJF>f zf5yMdzsqk~g$NPIDOiysiL#F)aDs^iF2KsEPBTz?VawLgnt6N91>UP;2zR6QoL|Xm z>(A|4=ElwG>_9fggH*H}_EcmKRl%74}Z}gAM3b8(Wulo}jj~R>cume|Cm? zDIh)SI1j0hDn~*gFz7{sggr|?ZNM}+ze3pGLQy%k1JMWPzsfniZ5~>Wp^H$R z3Ly`RPMt1QpzW@xVtI&Hl8AxwB(InJ6{c=tWJU~pG8mk`aPE9{!-lNezzAFu8c5*D z1v7Kv$)eekR;GXty)9O3h`+>szXd>)${``(q&c3`Gy%{l9%sR2S z`}AI2TOb`^`3f|BNo5Pjo5u-6hG)$)ekN*$__?f#7PkhX#w@H&>XJcl?64cPZEN7xO~$dV0#}coympic^SF~ z6EvqXO@B7!`VTenhPcDc-ZZcCNubLmlcP8Qumiv>N8bRL#bte7F_OU^5L@Qz35YSI z$TKcgDrl^`H`R@A44!G8+*a5KyOgH@fycQz+%9UH@p;zgmGJ)+f&q<=33+WZ-`0G*us*Z&uwPS1B1LwzL$eK* zZlc)Mc&b&OAlA#tgBk2c`_^vkCgPT5+!5r}p(k&h8@`4U)IWFDuGor!>+NMi$D!U} z(^Djm6(Y_AKAvvR7ilz5>S=_7~m>3pL+0j51_fKGT#Cmcz34p`K63qOMQ z85a{u%vK>dfFSK7=5F`)x9vd@j6DQ8v#Z)R!8!p9W*B(V!B{F@m?WI`8aRT=IfF!p zOkKqCw`M2r0$Wf*JxS>4KY+_U(<*(d8ESYk0cF zuy5DPd+$9PIhq^h)XI)T4*|KDS*L-0E93g4{^U)>Xj5Z&16JXRy^@1H`KiBx zBcNB(>(>s8k$}%(C%*@V*&rjQ%5lzHGCyo_Wk-~7oZMbTB&d3FdEmy7IeXt_;63}b zsl2tD%3jp^Tp@S)dP6}ss_{Zd-g`NEyu^NAW?pag6*DhU>O)DhYGqty4;Kgt!s@wf zBVlO>4>2b1X3xLJNBZ6i8tj^CUDJ^>5iLa_Fw6quzNdRR=|Y`t8j-`;gZt?n72pTy z3rKfloxw_O@y*%zGVcE^m(i;q@V5L*!GD)^!N0VWBGlgA-WEQVt(r-%xHJj&!}1Hf zGu?sw6#9)NR=;EUu+7W-L$*HS*jWLX{)#FJ&`QI^J^Dn2C0lp~Q zy|w}3Jkv%bm4ak{N2~roQXV71Xn(rJQj6w-sLSh}?XS@oPyj9{LXw0v5d{y|UI~;m z@O}O&Rt3#JC`bE}gcFbe&<1|8fX^G9*OxT8TcG~hhIo^gx6(P6S#qL-M<9_P%Uq@z zy^x|X%0`Lvwu2YS$+&#;>%%T{U_?vQ1nr@wlxDq-E@}MO7iZV`%B4MyCf;OQk=jvd zu_&GdQle4@QY2{N?PGVRRyU?+@bab6C?Pv0c%o15gL{b#Rupwwmk{Eu^^gAl#K8a{ z7_&`*D->*h`gaVlc2`U=RVkfPXA#zYOqx0hOZ(MQs64c2s;ebM!}QTEih`-` zXZ^om8#kp!oV+52z4=cRor3$wv{(vUd}=>H9$(zb%i~amPlGQGjCOSuG}aIBCyodk z?yFIx5D~miA3c);>l8+(&tprmQ%UyTBq<}-NY?6*Yr}dUx;4j}9UJEIR5JL8G^*P?pECfOKW1Vn77b|`(+X6aJ$fnfzQ`^{~LXolPTmWE9|P^Yv4 zF|ahJy`^thnFUk=zW!gd@aHPVSZ;m5j()cGUw7fp4g8Bbb87s#i95y7bDfpIg@@X}XP{Vt=*61D#kTS3Vj#AMTMy2B(;6JR zqM@^~2_AxLs%l|r$W&;z9YI0Y0kNJwrl4~?;XTF=(kyjK$i>!mX-q_SNKHAkK{7+f_{REb!qA%JdfY->XigO`1*jbHSPh*4z0Ykz?6J`{ zb~71W&fbJ*G!93~wtBm;2zYnXzq?L!Mub(@-k!PL(jUV(L*9*8p=b4p!Gef(N9BO= zy}53w3E-vy;cmy^ux399kw`bY=%c-@Z9jZs40GUs2#93c_08EK2my4PXLNzJNvD^* z@L4S{FC-&;3o6>KS_3I zIKsUz9AIzRe?2i8ZNDRbJ^PJ4UvDgUou7Tx4lDq+1;l8v(8OH1A|V2Zmh(#5cwl?+=+m4@vs2T3DHW+(@s6r7%6S?;O@Mt8#95$_O8fO zI&OCh#Ntd$cQGE}+v{NNzlWEe@Xtk8xHiMkl87+bfyz`jENkM5&4R~}afW?ipG{1Z z<7~6E-#3?+6iemqL7|LycXVZih%}xiWa&`7GX@K)xQI2Bmtbl+O3sqKZ*G3c>{iB@ zL`Ax(>7h8aw$3$H((CNFG_g&uA(c6WBex4=47LT~#mdvFYI=a_e9!@(VK>cKC7fH5 zvoyce7u;+7SfguM=%Q;;%)qU?qieO?-vSq9i#>d@nNWoa2w)@bR&{&D@U$ zy!KF8v?mMQEAuAjIdbiQ!;$~(=m13J8uGM~%snop#}SUs0toH@OA@dz!XLa&G*__;s^W=3a2;($*r)R53o4U%cPjw# z*cr*2@8R|)Dw4CK`9!4kj+>z3Y08fFjX0&5bDpfW( zd1sh(fi>t%Nrpc}n}I%>2j<-yjE6@!L?9r<4GE|A97#4b0lB4*&rG1?qJ^=EX<$rg zaPOq50ug;p=0Z{z&+!|r@FJ!|O2m*`H44Kv*d6PLJmzzvS`87j2HIHT5_wkboS?f7 z00~wq2=7lTi8=KS0iyVLEJlE71&3wod>ldrnqe+YiHJ>Zjs?o*2{ape(1jo z|NXMb{v!ox9%oz!TK<7@PV3HhE3br>M7y Wwuj@uspjVSDMc%9zBigwNuQ@Ec0W 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 LKED9|I`RJi4iEx1 literal 0 HcmV?d00001 diff --git a/client/src/assets/logos/advanced-algos/aa-logo-vert.svg b/client/src/assets/logos/advanced-algos/aa-logo-vert.svg new file mode 100644 index 000000000..442e9a7fd --- /dev/null +++ b/client/src/assets/logos/advanced-algos/aa-logo-vert.svg @@ -0,0 +1 @@ +aa-logo-vert \ No newline at end of file diff --git a/client/src/assets/logos/advanced-algos/aa-logo.png b/client/src/assets/logos/advanced-algos/aa-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9701ee1c0e1858370837bc61930333be69bc4cd6 GIT binary patch literal 4770 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 CP}HCR literal 0 HcmV?d00001 diff --git a/client/src/assets/logos/advanced-algos/favicon/android-chrome-192x192.png b/client/src/assets/logos/advanced-algos/favicon/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..150043a067d25f23a50da98a6210b918f475fc2f GIT binary patch literal 2515 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 K(680Q#rzwV-;{R% literal 0 HcmV?d00001 diff --git a/client/src/assets/logos/advanced-algos/favicon/android-chrome-512x512.png b/client/src/assets/logos/advanced-algos/favicon/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..d98b9ce8dfd54d6032578443e2fbcd100ded89d3 GIT binary patch literal 6543 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/logos/advanced-algos/favicon/apple-touch-icon.png b/client/src/assets/logos/advanced-algos/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..95ec62746f406ac4380317ecac6e421082e89075 GIT binary patch literal 3064 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 + + + + + #da532c + + + diff --git a/client/src/assets/logos/advanced-algos/favicon/favicon-16x16.png b/client/src/assets/logos/advanced-algos/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..99bda00afe0b53c6844ec2924ab42b8084224fe3 GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM*td0G|-oC+?P*$S1Q9Q;z5jjV*#G}eH@M4% zFtxQ5G*3A7;>)7tYEs%i8|0gcj+?SRpWd`F!giHnjIP?6-Q0Y+&Og@|xz``q@?w{_ za)q+8n&F33wH*DlW04+@&l#sfR-UsOAu{|Cy&nOiTJ zTUc4xd$I_#u!2j2$>9`c<;@`qr*B+2apcSqnIr6{8$1?x=`p+#7cBYYWI7dS1%s!n KpUXO@geCw#&&NOj literal 0 HcmV?d00001 diff --git a/client/src/assets/logos/advanced-algos/favicon/favicon-32x32.png b/client/src/assets/logos/advanced-algos/favicon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..08c2369b05c014d615766ea699a4a355d454ed25 GIT binary patch literal 758 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaNh0(?STpSW9MBA?7cOhHmb9xo5e1==E8666=m`18dn79M*BrayZh-qaTI zmCkr?yu4|4beYn`w#~+>nYKWut@Cto46!(!8{D~VwE_=IWK-Af(%gUl&F{0ksr?$_ zr+wPT$%wP7&Q0OE$+VDrE7=c)Wysog^s~4=U$OJaqVqlR{CUgoZFtuEhS~9{f=x__ zzg$z!RIZd6$$i0hKboDLCid*mUjdy`^;UrmH|B9nTb6VvT+>^79Y;AZK-eEt`*#*_ z8%4Bi|HPQ_V54Hq&#(4p70!K|soiq_#Uyd3d2jyP9N1xb_Qb~4v)n?GD?$s31&_Rn z?b^m$AimK^^ZZLCmRk(dWhOSvNshGMx%hWXVZq8u8J)<2#QymSN7YX_=B$dll*51U zV?DFAedaZb8O<}^8$L9$Ni5g2G?Mn7lyP*|5do*W!e_IK7HT~U{WA5;CxJ^oSDtH3 zy&gHqVQy#IOvR2Tcb;AH7Mr^+=&5Lz%H-(RS9l)2I_dEC!Tu~Z=jYe|t)KL&Xz7Z2 z+2;Ji;jdSAPq7WYy|?GtquMe*ld0cw3)key-sW56Iz@Y_y%|?LOY5=&S45STif5)3 zE2{|A_$zCj`&tvSa%G)d-%_7mBs%pCTA7B)RSA|5B1SOU$6cpvBW#*(RlvEa^Dr6RvBr`Bn%z6BYhodk| zL*tbH=`)^BgBX~Vx%HB{g_VW9CyOu(E4Vb698O_Y-W;NE`o@(LN6s9PIl_Lr!DE4! a9>Xhf!IDo-rc;4dFnGH9xvX` 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/logos/advanced-algos/favicon/html_code.html b/client/src/assets/logos/advanced-algos/favicon/html_code.html new file mode 100644 index 000000000..a66b72bb6 --- /dev/null +++ b/client/src/assets/logos/advanced-algos/favicon/html_code.html @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/client/src/assets/logos/advanced-algos/favicon/mstile-150x150.png b/client/src/assets/logos/advanced-algos/favicon/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..78a06c05a5974bb75c8c71e99d32a960ed0d6497 GIT binary patch literal 2535 zcmbVO`8OMg8coN(jU}Z)6ji&#T7+UOwM&R-il%Msp_ZtN3?4JVW?uxqLio^f-zwl8q z#N}s*R16aC3DDTM#&<&I;Fsf>f%92Zl3Pq%MMXORAV_zzvqmLMt(UW2OlygzQ^ok# zcDYB29Hl6!znJjpQl5rL@+tFhE)kt}KP^r6pXUD#g1zPlTO9o)3Brp$Wrf1Y_9^Yh z`Yt6Fx7}?Q|B6u~##hdWf73hn&6`G6Zo^KrpC3Jd7LmN_1cHZOhSk5GK3_GHL55qH z`cAXPzDNWpCaHy@D#v^_)E6w#8W~ivz%MZ?Uk{lU)MHd`}eF4C_;ZV==bjlUP~6d^RNG~vN^bafSL>y zl1ZJs5id)T=?)#iFjq=5gr?=mp@sh07hTZPp_zh1l{U+gy-!OwEi~Mpw@L&U`?8BO zgj~IcI~iu4?6>bZUUW%H;Z%#v&f4>+dWa=d`m1G47|*gt8~977J@l7lWiIVHY-nPR zmFO^1ShDcxI%(6Uezd3%Dqyi5qucM31I}-pT~_`)j%)^_)W^9McAz4ejz-YA1y4Dt z^`@JxSWvL;UdVCER%GU=U3D+XP41je=?iU6I~byC6bxg46iEoZ&vbp6H4~!Tx_IX& z-xFH2S!GADXEZ$cJdp`3N2IDd*hmVmuwPd{Appeu9oK5r?7PEWDE6S`UlUEh;e5LteoLP zwrwr9_uw-17+4^);`EW)-ADMV4ttYeRL;=Wb=2K`m@d*hxpZ2V39#VQP%4hrC+OZ; z_4#sRE9GMDhl`1VJNdKt2F1E03ght6gYyEhcjG7`8w>WSc95vztlaY=icleZHN@D_lrM!2_0dsHTaZ&UVOsVzOUZ@4;3v{`Ax_MwZ?1;z;`yJE%3R z_#UmYl6lQRdb6tfwu-5F=;M;`h__hBqvT8Y0xqSVgzkLHXbyV zASR@LIj#>8_&3e)HAPTT zjjNR#Gx-8VZfTx!_A8qveWC0Gzz;?eo~3$C*5>-C8)oLZ&#&3%1$xLoT^)+^!B_NI zHfZXP0Oclf1!%vsUp31pqh3QwVhy$!#HPuV66FrmNVRTz-Ix8ZKay+9SZ9j+v|)M_ zM!DQpRS`tuZ5h15Yqa;fhyUkUK%OrD=2X}@sgZoGb(kuCIl&qEG}lP1dmM|n`CdM_ z#4C)6t95i<0+PGe_H49>;+dRW{d(YG9-bM-n_y6zNIR$m<<7?_J6ozlSWem0E_W4+ zz*}*Oor#x%OLBJ}+QJ&-w4U`f;=o` zGmVp>9e>(hHFi`Ju0(7wtcFZ9uR`m4<$v$|wP;uISphRyBh-F4fcC8`X7`8+uBa$> z?-&k@+-fU^8osl_=q$6U=M20d*@WmS4t~nYSiDQ3%1&*9p4>9p4g_drZEjH@kn%^DRp|L@t;SF4;|-#3RZB|~mb#~MBQmPPN+zbl z>84<^>ZXVyjI9r|*g$w{Lgt6*qu&Vpb6w5pM!9XGu(H$JTYZKUM5D*s6iXwB z!nS+xaF9t$E3l=;L1OUC>zoF)Gok4N36~h<=sXvr*1oIB)n}c$2HrgXK=L1V?sTvG z10vjVYr4)>^-++VW%i2y_)!XH;2PQN3Rk=+E6#5qx`>h5 zc(NCi6>QNoGrghaOLZu{Fe@1-T@i9t>rQcxLDIYD@+I<|$0`Gya4ybz zO)1G6xS|gHjA7{7TdaJ$d*=px_1?B~C-Wk+_DFpN;o2Q7`=}^Qj@MW%VL5U0!*8l+@*M5#LB{do6)Vsx_4tE?=kT=p zj6^=+y0DLSD`F0#sH(^SB|sv5AHNSsj8yXKFhp#W~nyE6w#@Xf`g~D?mYziJt=x|@U2QehPNPZ8LD3U87J+aFBsP#WO zF)E`5yWM;BOB1B&DW%9Z+-U)`MS|wVcwn0QBhTZOZq&VXqNEO`A zv!nQT?g|2H~y;D#av51uEg9V*CMsgtGZ \ No newline at end of file diff --git a/client/src/assets/logos/advanced-algos/favicon/site.webmanifest b/client/src/assets/logos/advanced-algos/favicon/site.webmanifest new file mode 100644 index 000000000..002445914 --- /dev/null +++ b/client/src/assets/logos/advanced-algos/favicon/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "Advanced Algos", + "short_name": "Advanced Algos", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/client/src/auth/index.js b/client/src/auth/index.js index cf8411ac3..0b01b3e47 100644 --- a/client/src/auth/index.js +++ b/client/src/auth/index.js @@ -104,7 +104,7 @@ class Auth { console.log(authResult.idTokenPayload) setItem('user', JSON.stringify(authResult.idTokenPayload)) if (window.location.href.includes(`callback`)) { - window.location.href = '/' + window.location.href = '/dashboard' } return true } @@ -128,7 +128,7 @@ class Auth { console.log('signinOrCreateAccount auth: ', await data) setItem('user', JSON.stringify(data.data.authenticate)) if (window.location.href.includes(`callback`)) { - window.location.href = '/' + window.location.href = '/dashboard' } else { window.location.reload() } diff --git a/client/src/graphql/teams/AddTeamMutation.js b/client/src/graphql/teams/CreateTeamMutation.js similarity index 64% rename from client/src/graphql/teams/AddTeamMutation.js rename to client/src/graphql/teams/CreateTeamMutation.js index 903ea5b59..752546daa 100644 --- a/client/src/graphql/teams/AddTeamMutation.js +++ b/client/src/graphql/teams/CreateTeamMutation.js @@ -1,15 +1,19 @@ /* eslint-disable no-unused-vars */ import gql from 'graphql-tag' -export const AddTeamMutation = gql` +export const CreateTeamMutation = gql` mutation CreateTeamMutation($name: String!, $slug: String!, $owner: String!) { createTeam(name: $name, slug: $slug, owner: $owner) { id name slug - owner { - auth0id - id + owner + members{ + role + member { + authId + alias + } } } } diff --git a/client/src/graphql/teams/UniqueTeamnameQuery.js b/client/src/graphql/teams/UniqueTeamnameQuery.js index e7366ef27..c3be3ec8e 100644 --- a/client/src/graphql/teams/UniqueTeamnameQuery.js +++ b/client/src/graphql/teams/UniqueTeamnameQuery.js @@ -3,7 +3,7 @@ import gql from 'graphql-tag' export const UniqueTeamnameQuery = gql` query uniqueTeamname($name: String!) { - teamByName(name: $name){ + teamByName(name: $name) { name } } diff --git a/client/src/views/callback/index.js b/client/src/views/callback/index.js index 2f94f8eb4..c4b615186 100644 --- a/client/src/views/callback/index.js +++ b/client/src/views/callback/index.js @@ -1,5 +1,5 @@ import React from 'react' -const Callback = () => (
Authenticating...
) +const Callback = () =>
Authenticating...
export default Callback diff --git a/client/src/views/dashboard/components/CreateTeam.js b/client/src/views/dashboard/components/CreateTeam.js new file mode 100644 index 000000000..2d0bda554 --- /dev/null +++ b/client/src/views/dashboard/components/CreateTeam.js @@ -0,0 +1,135 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { withRouter } from 'react-router-dom' +import Button from '@material-ui/core/Button' +import AddIcon from '@material-ui/icons/Add' +import TextField from '@material-ui/core/TextField' +import Dialog from '@material-ui/core/Dialog' +import DialogActions from '@material-ui/core/DialogActions' +import DialogContent from '@material-ui/core/DialogContent' +import DialogContentText from '@material-ui/core/DialogContentText' +import DialogTitle from '@material-ui/core/DialogTitle' +import Typography from '@material-ui/core/Typography' + +import { getItem } from '../../../utils/local-storage' + +export class CreateTeamDialog extends Component { + constructor (props) { + super(props) + + this.handleClickOpen = this.handleClickOpen.bind(this) + this.handleClose = this.handleClose.bind(this) + this.handlePost = this.handlePost.bind(this) + this.slugify = this.slugify.bind(this) + this.handleChange = this.handleChange.bind(this) + + this.state = { + open: false, + name: '' + } + } + + handleClickOpen () { + this.setState({ open: true }) + } + + handleClose () { + this.setState({ open: false }) + } + + handleChange (e) { + this.setState({ name: e.target.value }) + } + + render () { + console.log(this.props) + return ( +
+ + + Subscribe + + + Team Creation + + + Name your team! + + + + + + + + +
+ ) + } + + slugify (string) { + const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' + const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' + const p = new RegExp(a.split('').join('|'), 'g') + + return string.toString().toLowerCase() + .replace(/\s+/g, '-') // Replace spaces with - + .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters + .replace(/&/g, '-and-') // Replace & with 'and' + .replace(/[^\w-]+/g, '') // Remove all non-word characters + .replace(/--+/g, '-') // Replace multiple - with single - + .replace(/^-+/, '') // Trim - from start of text + .replace(/-+$/, '') // Trim - from end of text + } + + async handlePost (e) { + e.preventDefault() + const { name } = this.state + const slug = this.slugify(name) + const currentUser = await getItem('user') + let authId = JSON.parse(currentUser) + authId = authId.sub + console.log('createPage cu:', JSON.parse(currentUser)) + await this.props.createTeamMutation({ + variables: { + name, + slug, + owner: authId + } + }) + this.setState({ open: false }) + } +} + +CreateTeamDialog.propTypes = { + classes: PropTypes.object.isRequired, + createTeamMutation: PropTypes.function +} + +export default withRouter(CreateTeamDialog) diff --git a/client/src/views/dashboard/components/DrawerLinks.js b/client/src/views/dashboard/components/DrawerLinks.js new file mode 100644 index 000000000..b2a178697 --- /dev/null +++ b/client/src/views/dashboard/components/DrawerLinks.js @@ -0,0 +1,72 @@ +import React from 'react' +import { Link } from 'react-router-dom' + +import ListItem from '@material-ui/core/ListItem' +import ListItemIcon from '@material-ui/core/ListItemIcon' +import ListItemText from '@material-ui/core/ListItemText' +import GroupIcon from '@material-ui/icons/Group' +import DashboardIcon from '@material-ui/icons/Dashboard' +import SettingsIcon from '@material-ui/icons/Settings' +import SupervisedUserCircleIcon from '@material-ui/icons/SupervisedUserCircle' +import LibraryBooksIcon from '@material-ui/icons/LibraryBooks' +import SentimentSatisfiedAltIcon from '@material-ui/icons/SentimentSatisfiedAlt' +import AndroidIcon from '@material-ui/icons/Android' + +const DashboardLink = props => +const TeamsLink = props => +const MembersLink = props => +const SettingsLink = props => + +export const MainDrawerItems = ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+) + +export const SecondaryDrawerItems = ( +
+ + + + + + + + + + + + +
+) + +export default MainDrawerItems diff --git a/client/src/views/dashboard/components/TeamTable.js b/client/src/views/dashboard/components/TeamTable.js new file mode 100644 index 000000000..1dec0c165 --- /dev/null +++ b/client/src/views/dashboard/components/TeamTable.js @@ -0,0 +1,54 @@ +import React from 'react' +import Table from '@material-ui/core/Table' +import TableBody from '@material-ui/core/TableBody' +import TableCell from '@material-ui/core/TableCell' +import TableHead from '@material-ui/core/TableHead' +import TableRow from '@material-ui/core/TableRow' +import Paper from '@material-ui/core/Paper' + +let id = 0 +const createData = (name, calories, fat, carbs, protein) => { + id += 1 + return { id, name, calories, fat, carbs, protein } +} + +const data = [ + createData('Frozen yoghurt', 159, 6.0, 24, 4.0), + createData('Ice cream sandwich', 237, 9.0, 37, 4.3), + createData('Eclair', 262, 16.0, 24, 6.0), + createData('Cupcake', 305, 3.7, 67, 4.3), + createData('Gingerbread', 356, 16.0, 49, 3.9) +] + +export const TeamTable = () => ( + + + + + Dessert (100g serving) + Calories + Fat (g) + Carbs (g) + Protein (g) + + + + {data.map(n => { + return ( + + + {n.name} + + {n.calories} + {n.fat} + {n.carbs} + {n.protein} + + ) + })} + +
+
+) + +export default TeamTable diff --git a/client/src/views/dashboard/index.js b/client/src/views/dashboard/index.js new file mode 100644 index 000000000..6392347ed --- /dev/null +++ b/client/src/views/dashboard/index.js @@ -0,0 +1,216 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { graphql } from 'react-apollo' + +import Typography from '@material-ui/core/Typography' +import { withStyles } from '@material-ui/core/styles' +import Drawer from '@material-ui/core/Drawer' +import List from '@material-ui/core/List' +import Divider from '@material-ui/core/Divider' +import Grid from '@material-ui/core/Grid' +import Card from '@material-ui/core/Card' +import CardContent from '@material-ui/core/CardContent' +import CardMedia from '@material-ui/core/CardMedia' +import CardActions from '@material-ui/core/CardActions' +import Button from '@material-ui/core/Button' + +import { MainDrawerItems, SecondaryDrawerItems } from './components/DrawerLinks' +import { CreateTeamDialog } from './components/CreateTeam' + +import { CreateTeamMutation } from '../../graphql/teams/CreateTeamMutation' + +import aaweb from '../../assets/AlgonetWebPlatform.jpg' + +const drawerWidth = 240 + +const styles = theme => ({ + root: { + display: 'flex' + }, + '@global': { + body: { + backgroundColor: theme.palette.common.white + } + }, + appBar: { + zIndex: theme.zIndex.drawer + 1 + }, + drawerPaper: { + position: 'relative', + width: drawerWidth, + whiteSpace: 'nowrap', + zIndex: 1000 + }, + content: { + flexGrow: 1, + backgroundColor: theme.palette.background.default, + padding: theme.spacing.unit * 3, + height: '100vh', + overflow: 'auto', + width: `calc(90% - ${drawerWidth}px)` + }, + appBarSpacer: theme.mixins.toolbar, + tableContainer: { + height: 320 + }, + card: { + display: 'flex', + width: '100%' + }, + cardDetails: { + display: 'flex', + flex: 1 + }, + cardContent: { + flex: 1 + }, + cardMedia: { + flex: 1, + width: 160, + height: 160, + justifyContent: 'flex-start' + }, + aawebMedia: { + width: '100%', + height: 320 + }, + buttonRight: { + justifyContent: 'flex-end' + }, + extendedIcon: { + marginRight: theme.spacing.unit + } +}) + +const Dashboard = ({ classes, createTeamMutation, ...props }) => ( +
+ +
+ {MainDrawerItems} + + {SecondaryDrawerItems} + +
+
+ + + + Teams + + + + +
+ + + +
+
+
+ + +
+ + + Goodester + + 09.15.2018 + + + Members:6 + + + Now recruiting! + + + + + +
+
+
+ + +
+ + + Goodester + + 09.15.2018 + + + Members:6 + + + Now recruiting! + + + + + +
+
+
+
+
+ + + Develop + + + + + + + + + + + + + + +
+
+
+) + +Dashboard.propTypes = { + classes: PropTypes.object.isRequired, + createTeamMutation: PropTypes.function +} + +const CreateTeamDialogWithMutation = graphql(CreateTeamMutation, { + name: 'createTeamMutation' // name of the injected prop: this.props.createTeamMutation... +})(Dashboard) + +export default withStyles(styles)(CreateTeamDialogWithMutation) diff --git a/client/src/views/dashboard/members.js b/client/src/views/dashboard/members.js new file mode 100644 index 000000000..da5524ed0 --- /dev/null +++ b/client/src/views/dashboard/members.js @@ -0,0 +1,111 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { graphql } from 'react-apollo' + +import Typography from '@material-ui/core/Typography' +import { withStyles } from '@material-ui/core/styles' +import Drawer from '@material-ui/core/Drawer' +import List from '@material-ui/core/List' +import Divider from '@material-ui/core/Divider' + +import { MainDrawerItems, SecondaryDrawerItems } from './components/DrawerLinks' +import { TeamTable } from './components/TeamTable' + +import { CreateTeamMutation } from '../../graphql/teams/CreateTeamMutation' + +const drawerWidth = 240 + +const styles = theme => ({ + root: { + display: 'flex' + }, + '@global': { + body: { + backgroundColor: theme.palette.common.white + } + }, + appBar: { + zIndex: theme.zIndex.drawer + 1 + }, + drawerPaper: { + position: 'relative', + width: drawerWidth, + whiteSpace: 'nowrap', + zIndex: 1000 + }, + content: { + flexGrow: 1, + backgroundColor: theme.palette.background.default, + padding: theme.spacing.unit * 3, + height: '100vh', + overflow: 'auto', + width: `calc(90% - ${drawerWidth}px)` + }, + appBarSpacer: theme.mixins.toolbar, + tableContainer: { + height: 320 + }, + card: { + display: 'flex', + width: '100%' + }, + cardDetails: { + display: 'flex', + flex: 1 + }, + cardContent: { + flex: 1 + }, + cardMedia: { + flex: 1, + width: 160, + height: 160, + justifyContent: 'flex-start' + }, + aawebMedia: { + width: '100%', + height: 320 + }, + buttonRight: { + justifyContent: 'flex-end' + }, + extendedIcon: { + marginRight: theme.spacing.unit + } +}) + +const Dashboard = ({ classes, createTeamMutation, ...props }) => ( +
+ +
+ {MainDrawerItems} + + {SecondaryDrawerItems} + +
+
+ + Members + +
+ +
+
+
+) + +Dashboard.propTypes = { + classes: PropTypes.object.isRequired, + createTeamMutation: PropTypes.function +} + +const CreateTeamDialogWithMutation = graphql(CreateTeamMutation, { + name: 'createTeamMutation' // name of the injected prop: this.props.createTeamMutation... +})(Dashboard) + +export default withStyles(styles)(CreateTeamDialogWithMutation) diff --git a/client/src/views/dashboard/settings.js b/client/src/views/dashboard/settings.js new file mode 100644 index 000000000..0fac8c47e --- /dev/null +++ b/client/src/views/dashboard/settings.js @@ -0,0 +1,210 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { graphql } from 'react-apollo' + +import Typography from '@material-ui/core/Typography' +import { withStyles } from '@material-ui/core/styles' +import Drawer from '@material-ui/core/Drawer' +import List from '@material-ui/core/List' +import Divider from '@material-ui/core/Divider' +import Grid from '@material-ui/core/Grid' +import Card from '@material-ui/core/Card' +import CardContent from '@material-ui/core/CardContent' +import CardMedia from '@material-ui/core/CardMedia' +import CardActions from '@material-ui/core/CardActions' +import Button from '@material-ui/core/Button' + +import { MainDrawerItems, SecondaryDrawerItems } from './components/DrawerLinks' +import { TeamTable } from './components/TeamTable' +import { CreateTeamDialog } from './components/CreateTeam' + +import { CreateTeamMutation } from '../../graphql/teams/CreateTeamMutation' + +const drawerWidth = 240 + +const styles = theme => ({ + root: { + display: 'flex' + }, + '@global': { + body: { + backgroundColor: theme.palette.common.white + } + }, + appBar: { + zIndex: theme.zIndex.drawer + 1 + }, + drawerPaper: { + position: 'relative', + width: drawerWidth, + whiteSpace: 'nowrap', + zIndex: 1000 + }, + content: { + flexGrow: 1, + backgroundColor: theme.palette.background.default, + padding: theme.spacing.unit * 3, + height: '100vh', + overflow: 'auto', + width: `calc(90% - ${drawerWidth}px)` + }, + appBarSpacer: theme.mixins.toolbar, + tableContainer: { + height: 320 + }, + card: { + display: 'flex', + width: '100%' + }, + cardDetails: { + display: 'flex', + flex: 1 + }, + cardContent: { + flex: 1 + }, + cardMedia: { + flex: 1, + width: 160, + height: 160, + justifyContent: 'flex-start' + }, + aawebMedia: { + width: '100%', + height: 320 + }, + buttonRight: { + justifyContent: 'flex-end' + }, + extendedIcon: { + marginRight: theme.spacing.unit + } +}) + +const Dashboard = ({ classes, createTeamMutation, ...props }) => ( +
+ +
+ {MainDrawerItems} + + {SecondaryDrawerItems} + +
+
+ + + + Settings + + + + +
+ + + +
+
+
+ + +
+ + + Goodester + + 09.15.2018 + + + Members:6 + + + Now recruiting! + + + + + +
+
+
+ + +
+ + + Goodester + + 09.15.2018 + + + Members:6 + + + Now recruiting! + + + + + +
+
+
+
+
+ + + Notifications + + + + + + + + + + + + + +
+
+
+) + +Dashboard.propTypes = { + classes: PropTypes.object.isRequired, + createTeamMutation: PropTypes.function +} + +const CreateTeamDialogWithMutation = graphql(CreateTeamMutation, { + name: 'createTeamMutation' // name of the injected prop: this.props.createTeamMutation... +})(Dashboard) + +export default withStyles(styles)(CreateTeamDialogWithMutation) diff --git a/client/src/views/dashboard/teams.js b/client/src/views/dashboard/teams.js new file mode 100644 index 000000000..9d223e372 --- /dev/null +++ b/client/src/views/dashboard/teams.js @@ -0,0 +1,111 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { graphql } from 'react-apollo' + +import Typography from '@material-ui/core/Typography' +import { withStyles } from '@material-ui/core/styles' +import Drawer from '@material-ui/core/Drawer' +import List from '@material-ui/core/List' +import Divider from '@material-ui/core/Divider' + +import { MainDrawerItems, SecondaryDrawerItems } from './components/DrawerLinks' +import { TeamTable } from './components/TeamTable' + +import { CreateTeamMutation } from '../../graphql/teams/CreateTeamMutation' + +const drawerWidth = 240 + +const styles = theme => ({ + root: { + display: 'flex' + }, + '@global': { + body: { + backgroundColor: theme.palette.common.white + } + }, + appBar: { + zIndex: theme.zIndex.drawer + 1 + }, + drawerPaper: { + position: 'relative', + width: drawerWidth, + whiteSpace: 'nowrap', + zIndex: 1000 + }, + content: { + flexGrow: 1, + backgroundColor: theme.palette.background.default, + padding: theme.spacing.unit * 3, + height: '100vh', + overflow: 'auto', + width: `calc(90% - ${drawerWidth}px)` + }, + appBarSpacer: theme.mixins.toolbar, + tableContainer: { + height: 320 + }, + card: { + display: 'flex', + width: '100%' + }, + cardDetails: { + display: 'flex', + flex: 1 + }, + cardContent: { + flex: 1 + }, + cardMedia: { + flex: 1, + width: 160, + height: 160, + justifyContent: 'flex-start' + }, + aawebMedia: { + width: '100%', + height: 320 + }, + buttonRight: { + justifyContent: 'flex-end' + }, + extendedIcon: { + marginRight: theme.spacing.unit + } +}) + +const Dashboard = ({ classes, createTeamMutation, ...props }) => ( +
+ +
+ {MainDrawerItems} + + {SecondaryDrawerItems} + +
+
+ + Teams + +
+ +
+
+
+) + +Dashboard.propTypes = { + classes: PropTypes.object.isRequired, + createTeamMutation: PropTypes.function +} + +const CreateTeamDialogWithMutation = graphql(CreateTeamMutation, { + name: 'createTeamMutation' // name of the injected prop: this.props.createTeamMutation... +})(Dashboard) + +export default withStyles(styles)(CreateTeamDialogWithMutation) diff --git a/client/src/views/footer/index.js b/client/src/views/footer/index.js index 8d9a68502..a7abff6b7 100644 --- a/client/src/views/footer/index.js +++ b/client/src/views/footer/index.js @@ -1,88 +1,118 @@ import React from 'react' +import PropTypes from 'prop-types' import { NavLink } from 'react-router-dom' +import { withStyles } from '@material-ui/core/styles' +import classNames from 'classnames' +import Typography from '@material-ui/core/Typography' +import Grid from '@material-ui/core/Grid' -const Footer = () => { +import aalogo from '../../assets/logos/advanced-algos/aa-logo-vert.svg' + +const styles = theme => ({ + '@global': { + body: { + backgroundColor: theme.palette.common.white + } + }, + layout: { + width: 'auto', + marginLeft: theme.spacing.unit * 3, + marginRight: theme.spacing.unit * 3, + [theme.breakpoints.up(1200 + theme.spacing.unit * 3 * 2)]: { + width: 1200, + marginLeft: 'auto', + marginRight: 'auto' + } + }, + footer: { + borderTop: `1px solid ${theme.palette.divider}`, + padding: `${theme.spacing.unit * 6}px 0` + }, + footerContainer: { + marginRight: theme.spacing.unit * 8, + marginLeft: theme.spacing.unit * 8 + }, + footerLink: { + textDecoration: 'none' + } +}) + +const Footer = ({ classes }) => { return ( -