From 0f77b08319527184b4149d027356cef927af3399 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Thu, 14 Jul 2022 23:13:35 -0500 Subject: [PATCH 01/23] Add Salem Center contants --- common/envs/constants.ts | 2 ++ common/envs/salemcenter.ts | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 common/envs/salemcenter.ts diff --git a/common/envs/constants.ts b/common/envs/constants.ts index 7092d711..463f3293 100644 --- a/common/envs/constants.ts +++ b/common/envs/constants.ts @@ -2,6 +2,7 @@ import { escapeRegExp } from 'lodash' import { DEV_CONFIG } from './dev' import { EnvConfig, PROD_CONFIG } from './prod' import { THEOREMONE_CONFIG } from './theoremone' +import { SALEM_CENTER_CONFIG } from './salemcenter' export const ENV = process.env.NEXT_PUBLIC_FIREBASE_ENV ?? 'PROD' @@ -9,6 +10,7 @@ const CONFIGS: { [env: string]: EnvConfig } = { PROD: PROD_CONFIG, DEV: DEV_CONFIG, THEOREMONE: THEOREMONE_CONFIG, + SALEM_CENTER: SALEM_CENTER_CONFIG, } export const ENV_CONFIG = CONFIGS[ENV] diff --git a/common/envs/salemcenter.ts b/common/envs/salemcenter.ts new file mode 100644 index 00000000..fd24d98c --- /dev/null +++ b/common/envs/salemcenter.ts @@ -0,0 +1,23 @@ +import { EnvConfig, PROD_CONFIG } from './prod' + +export const SALEM_CENTER_CONFIG: EnvConfig = { + domain: 'salemcenter.manifold.markets', + firebaseConfig: { + apiKey: 'AIzaSyBxisXMHPJDtM7ZseaOOlLAM_T7QHP_QvA', + authDomain: 'salem-center-manifold.firebaseapp.com', + projectId: 'salem-center-manifold', + region: 'us-central1', + storageBucket: 'salem-center-manifold.appspot.com', + messagingSenderId: '522400938664', + appId: '1:522400938664:web:300eaedb8446818d61a09d', + measurementId: 'G-Y3EZ1WNT6E', + }, + cloudRunId: 'nggbo3neva', // TODO: fill in real ID for T1 + cloudRunRegion: 'uc', + adminEmails: [...PROD_CONFIG.adminEmails, 'richardh0828@gmail.com'], + moneyMoniker: 'S$', + visibility: 'PRIVATE', + faviconPath: '/theoremone/logo.ico', + navbarLogoPath: '/theoremone/TheoremOne-Logo.svg', + newQuestionPlaceholders: [], +} From 133ef04826dfaed4040abfa3c986650c4708b2b4 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Thu, 14 Jul 2022 23:14:41 -0500 Subject: [PATCH 02/23] Add .env config for functions --- functions/.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/.env b/functions/.env index 0c4303df..ef65897f 100644 --- a/functions/.env +++ b/functions/.env @@ -1,3 +1,3 @@ # This sets which EnvConfig is deployed to Firebase Cloud Functions -NEXT_PUBLIC_FIREBASE_ENV=PROD +NEXT_PUBLIC_FIREBASE_ENV=SALEM_CENTER From d9d2dee576f9c3efe7d29f57e13601885add90ad Mon Sep 17 00:00:00 2001 From: James Grugett Date: Thu, 14 Jul 2022 23:26:40 -0500 Subject: [PATCH 03/23] Update indices --- firestore.indexes.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/firestore.indexes.json b/firestore.indexes.json index 12e88033..1d09265c 100644 --- a/firestore.indexes.json +++ b/firestore.indexes.json @@ -22,6 +22,20 @@ } ] }, + { + "collectionGroup": "bets", + "queryScope": "COLLECTION_GROUP", + "fields": [ + { + "fieldPath": "isFilled", + "order": "ASCENDING" + }, + { + "fieldPath": "userId", + "order": "ASCENDING" + } + ] + }, { "collectionGroup": "bets", "queryScope": "COLLECTION_GROUP", From c63070744d7a248da64b892edda7b35769b9d4a1 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Thu, 14 Jul 2022 23:55:35 -0500 Subject: [PATCH 04/23] Add cloudRunId --- common/envs/salemcenter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/envs/salemcenter.ts b/common/envs/salemcenter.ts index fd24d98c..5a75e7d3 100644 --- a/common/envs/salemcenter.ts +++ b/common/envs/salemcenter.ts @@ -12,7 +12,7 @@ export const SALEM_CENTER_CONFIG: EnvConfig = { appId: '1:522400938664:web:300eaedb8446818d61a09d', measurementId: 'G-Y3EZ1WNT6E', }, - cloudRunId: 'nggbo3neva', // TODO: fill in real ID for T1 + cloudRunId: 'fm35sk365q', // TODO: fill in real ID for T1 cloudRunRegion: 'uc', adminEmails: [...PROD_CONFIG.adminEmails, 'richardh0828@gmail.com'], moneyMoniker: 'S$', From 471e55665de7c1f8ab23795085d2e93cf2161c53 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Thu, 14 Jul 2022 23:55:44 -0500 Subject: [PATCH 05/23] Add dev script --- web/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/web/package.json b/web/package.json index f8e1881b..7393d4b8 100644 --- a/web/package.json +++ b/web/package.json @@ -7,6 +7,7 @@ "devdev": "cross-env NEXT_PUBLIC_FIREBASE_ENV=DEV concurrently -n NEXT,TS -c magenta,cyan \"cross-env FIREBASE_ENV=DEV next dev -p 3000\" \"cross-env FIREBASE_ENV=DEV yarn ts --watch\"", "dev:dev": "yarn devdev", "dev:the": "cross-env NEXT_PUBLIC_FIREBASE_ENV=THEOREMONE concurrently -n NEXT,TS -c magenta,cyan \"cross-env FIREBASE_ENV=THEOREMONE next dev -p 3000\" \"cross-env FIREBASE_ENV=THEOREMONE yarn ts --watch\"", + "dev:salem": "cross-env NEXT_PUBLIC_FIREBASE_ENV=SALEM_CENTER concurrently -n NEXT,TS -c magenta,cyan \"cross-env FIREBASE_ENV=SALEM_CENTER next dev -p 3000\" \"cross-env FIREBASE_ENV=SALEM_CENTER yarn ts --watch\"", "dev:emulate": "cross-env NEXT_PUBLIC_FIREBASE_EMULATE=TRUE yarn devdev", "ts": "tsc --noEmit --incremental --preserveWatchOutput --pretty", "build": "next build", From b7b6e10968ebd8c36bc7d3808b35a6ff7a355ddf Mon Sep 17 00:00:00 2001 From: James Grugett Date: Thu, 14 Jul 2022 23:57:25 -0500 Subject: [PATCH 06/23] Don't show no portfolio history label --- web/components/portfolio/portfolio-value-section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/components/portfolio/portfolio-value-section.tsx b/web/components/portfolio/portfolio-value-section.tsx index 903b3f3d..22f1478f 100644 --- a/web/components/portfolio/portfolio-value-section.tsx +++ b/web/components/portfolio/portfolio-value-section.tsx @@ -16,7 +16,7 @@ export const PortfolioValueSection = memo( const [portfolioPeriod, setPortfolioPeriod] = useState('allTime') if (portfolioHistory.length === 0 || !lastPortfolioMetrics) { - return
No portfolio history data yet
+ return <> } return ( From d3b78eeb4260eef902e5a335a704cc4b549d6680 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Fri, 15 Jul 2022 00:10:43 -0500 Subject: [PATCH 07/23] Add me as admin in firestore.rules --- firestore.rules | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/firestore.rules b/firestore.rules index 918448d6..bd059f6a 100644 --- a/firestore.rules +++ b/firestore.rules @@ -6,10 +6,7 @@ service cloud.firestore { match /databases/{database}/documents { function isAdmin() { - return request.auth.uid == 'igi2zGXsfxYPgB0DJTXVJVmwCOr2' // Austin - || request.auth.uid == '5LZ4LgYuySdL1huCWe7bti02ghx2' // James - || request.auth.uid == 'tlmGNz9kjXc2EteizMORes4qvWl2' // Stephen - || request.auth.uid == 'IPTOzEqrpkWmEzh6hwvAyY9PqFb2' // Manifold + return request.auth.uid == 'tUosjZRN6GRv81uRksJ67EIF0853' // James } match /stats/stats { From a6f4a5fc2209bd16898892d3b2ab0bbb1b30d86c Mon Sep 17 00:00:00 2001 From: James Grugett Date: Fri, 15 Jul 2022 00:32:57 -0500 Subject: [PATCH 08/23] Add salem center logo & favicon --- common/envs/salemcenter.ts | 4 +- web/components/nav/manifold-logo.tsx | 14 +++---- web/public/salem-center/logo.ico | Bin 0 -> 270398 bytes web/public/salem-center/salem-center-logo.svg | 37 ++++++++++++++++++ 4 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 web/public/salem-center/logo.ico create mode 100644 web/public/salem-center/salem-center-logo.svg diff --git a/common/envs/salemcenter.ts b/common/envs/salemcenter.ts index 5a75e7d3..197aeb42 100644 --- a/common/envs/salemcenter.ts +++ b/common/envs/salemcenter.ts @@ -17,7 +17,7 @@ export const SALEM_CENTER_CONFIG: EnvConfig = { adminEmails: [...PROD_CONFIG.adminEmails, 'richardh0828@gmail.com'], moneyMoniker: 'S$', visibility: 'PRIVATE', - faviconPath: '/theoremone/logo.ico', - navbarLogoPath: '/theoremone/TheoremOne-Logo.svg', + faviconPath: '/salem-center/logo.ico', + navbarLogoPath: '/salem-center/salem-center-logo.svg', newQuestionPlaceholders: [], } diff --git a/web/components/nav/manifold-logo.tsx b/web/components/nav/manifold-logo.tsx index ec15d54b..a5a86167 100644 --- a/web/components/nav/manifold-logo.tsx +++ b/web/components/nav/manifold-logo.tsx @@ -17,16 +17,14 @@ export function ManifoldLogo(props: { return ( - - {!hideText && (ENV_CONFIG.navbarLogoPath ? ( - + ) : twoLine ? (
nM?@9-ICl3B^h$=oyklR0vOzTm78p^O;0Fk z({s**4u+gL<=*E$_ug}-<(#xbNJw%rjR0=4z3%V-ZGE<6j1iz_=@rl7`*!i(-+sUK zU;SMx5Xj*_{pAEI0u2?Rz$nfevQGp8x!LFSFc1g@>iNIO|BJ`t=E$vq;{nG5jt3kM zI3933;CR6Cfa3wj1C9qA4>%rhJm7f1@qpt2#{-TB91l1ia6I66!0~|N0mlQ52OJML z9&kM1c);<1;{nG5jt3kMI3933;CR6Cfa3wj1C9qA4>%rhJm7f1@qpt2#{-TB91l1i za6I66!0~|N0mlQ52OJML9&kM1c);<1;{nG5jt3kMI3933;CR6Cfa3wj1C9qA4>%rh zJkZlTkfi5fDjuWnVa%e5n1vH@k3#W;h2u$!#8MWIW+@pOOacx~F8MRn4 zVsR*u3`0SP$F7H?TLZ@f-R6N5Yn2B33GfwxLf}6Lj;#_My5%sX2Ool84B^~~|eczp&bhd=g1HzW4V>wF4$_~&`*i3=3 zG?aw&e2)@%jdp`lvAE?&l9q{z(w2#&EfvXFQq*Ca#Cbj*OFI7VxR?IDbw`Ku%ke-A zeu-e~$E4di&-w#d%%>A!u%9K#0qOpDj}cfEUO$k!+8la+44XuLNjR3aP&ChiP);=8 zLb6pH|GPDCJkV_(5dNbb>m}@G(6v6vFOZEb9UV>*8}MQRiVO4rf#Yy@h!{i|yCdvf zgRUcD5s#vrM=iv4dHzZ=8@CvU_)p+V4aDnm*W_#i`Oyj4_h3CO>|fF`U-IPxi0_Vo^BC__j4zc6Svr~PQC=#S#}M(qB(_R_@pLSv z7;2WEF2;K#LW~j_aPjm0``yvuu)laf*iU&je#FDSu%C=(@CAlpW9OrL3oH=NplcJB zmk3&Zk5Y)w3txt^ugm8Mb4^iQn`BfxYI(7+4I}0^JQcCLc*rsdWCFjXzt&OT>tj3` zMNWbDbUN)FlgT8p$t2gGeZD`h(S5g*HJy1NkpTA|{$&He!|40-`Mx-De{ulHL<;OD zZCEs6!?6$gl)UT7v)ot#{z4wU3O>Gcsjd~9Kb}gFr@%guFTr)npXvPj`s%#1ZWq?| zST=z$uWRsM_m6#bUG97Ohaaw#b@yWY=u_b-hF>3rl2BeeVx!Toh0%ajrUEu99I$j4 z9UCSd=pA+56Lh)H>v%1ai(eARQY>I8&XdU;;jVLV%MTCp=uYJT6xUM?Kqeiv;oxk>Rh4$vf=}Ao`O|E5 z%T;z)^CxM!2=INuwS-K<<1*!S}QnRLwZ(Dz?z zx!RuF{qO91YZur{n-|+Fn-WLp zZOyFlcJ0WJ6(IxiiC@N|*f7KggtLSfk5m2vnI`>9O_TroKF)ew?%xXc((%lbwmp0H z*q{ITpIaDvNw$EV_iY53F%%b+0+O(Q7;a{$&HGmNugt0JSwy;(amj|3|YY z*h?E1+Y9&3wii~VuURq^?o|CTLVOn;9(_Lzr#$pPO! z(05Bl`MCFwy>(6QbDjKnUmg(t!Gn+g3^jGae-!-x@tg^EZ1WO(>Au9~d-*|qC{1ak>S3DnmOu6ZP ze?Q5nZsNZ`_5aIjXW5JEX4-SYzhuFNx%T`$pS4F?itXr}LTj5n#tyX9*vi=rHok=Y zjL3lWuoyMLC>m}%$YNu4EWmDzGiuOd0tE) zKR@5)0($8lI9c)`WXTnP|5w1jNcR6TtDEeFbuIS2dv3BLEv0s3-e^1ATx18EimbJ% z*6yA$-mWf1w<;cxhu_cdOGNT4Kb&WI>>-lQRXm`t@Za9vZfDP)wNs}~c{1SZU;nzN z>tzSX?)Po~&M|<_u>r@+AA*;iJo)f;Ed%zh3Z!nhMeV*Z}j#U-^~p+aSVC5c)-FL_6I1wsX8X=gyM?16DRB~TwSdH zg?;^*Uq}wH*xKfm+n%N|wrk-i^nZ~Zo>giO%pGfMXHBrl z$bcyEfK-8E?d03Y19n-19@MMd!T;NDzkNO)AUi;q4+ev-KDY<(LvP*RLHD^=2>xG0 z26%P=HAw$){TzGl-s|nqf?}|b|Buc;1pZ|QY+5wh+7=YqBXdjaky#aXh}__vGaAVY z;P*#!(6{8=JK;Z}dO`S3@j%rF`p1uYpFaryvi}tmR9-;j+X4RG0R4M?cW0mAQjb6C z^|^oN^nVu~xB~Ehaoy3Y>*m=rD{sig|FHS@HgcA8N%OxhLy^l$H3FcEDG(4R0 z>I79QtX{|;Rt9_&{CBPokR9O10)>0=we-F|*N+c6UjK-^?&QgPZP`JC|5ETzE%5x& z9{zWMf60M1Y6FfmkG7-K2_2kMOuYcUz^r;3R}8Mam|)a$V$|QNPB@b9)d>!#R#-g{ z-D*p!&{ttlvHuU`->H&5&;{)Ia z>~ATt`+44z0my@c^Y8^)YVE5t#(8^&($oh;=y#wVLJ9Uh4GZU6f$&dUKy`wBfq%sT z~IJphtPZ>BphBo`VMeCB*y2*g>$qpE%&|d6ijeD#Q1u zHV|LnAhMy2e8K)Xyl>7}TQz;GO;k(}UqE$&ns*Y%4@k04C{B$)9Q)s+4}pu1V*h(e zzvF-M1^gNz?HBN|-#ISeV_yD2XL;a1?~cw!=r#`wCj1ivI7B|6Z7y}ebE>U%PEA$@ z5DVOm?pHiOw!uN(_we*mJ2bb!?xIF$e6jWes7^5J3uNmAB@0wP_~CkUd|dqdvcTUn z^wd*Nosa+dco*iS`{fttIcEnrymuS#7wfV?hW~@;{)6EE;G8OCK$W#p7qAN-U?=f_ z-C$pNfi~fvSiqr~!~3P)&`uPFzr_=oo z(;rJt3IFK1Z2zCAH(T#Q|DTEU|5?huJNDf7Xa5h?|8}BF<^NRwvyVDJuND~0%MLiC zy#T5YBqy*RQhe}!ucdKYskU=N2d);L8Bn0Xld7zr+8xy7v_R1$fB-{mBmS;{i`R@x*!k z@5cmvIpEg^IGe!9gl@|KAOFnM%Fy%wlK8(D{Imb2vkvah^GoUf&e;E;bIE}F6(gip z(909bFTg)Ih@3b;o#0Apgr>1)C_j?pVLCz&L9Z4^J~uiyp*;ki4dB-a_746%@OS*r zw+Hl4F+u5lzn7S|r;+QDJW$<$UUM?Q$$)OjfbQU5`hO7Nf4}D!jG;a_8xvG)-~hS7 z`{gT;8*FWEuzO~VwQ2MdOkxMb$qQ)jux1TuK2kcIv;t}c^T-owFQM00Sh>O;*8iRH z@1Ohe0QmyKy+}5PasfK;oFnMg{pXt9`-bou3_<+MCr~ZGUTOoC7Zm>Y^Y}1zf)5fS zID~)Dwm|g(H8!yno1eTuJdYkC*hgV{h!xOJO#KAaQ#397vtLL)f%Xyhr2X$>zVlHr z0l%lHd;#HII=^#FQ2O7+1%@!DKa5Ntg8299guwfLu&+JC-d-V&htU5=kqHm5Utm9b zhW5{|wl7m7G=;o?dWeMaku+m43I5enba*%e{|-`oA;jIqeye?Jqk(GCY5fj{n?%xIW_fjkP@SGAmGLzZ@%^9Lr zc!K&0hsg~VXvT zMDhQ9;9uBQuORIeP`$9urSH93LD>N02>0^bLF$I@M<%GJ=%JQzb}zlfuPG(h#(sfV zn%)8Q6^`QrC@-kB?Q8r?2KaSCI#*smxcB=B$_DUlf60RP+<#}g5A8MSz<>OF{y#ha z)0_V{oBBV${)ZmC{h9Okzx(3;KYOX&`JjCN#jgwdJLnhQs=WaC0Qd75+9T}k4r4-gyJL_g78)CxXGZ&B?TIy`qAxxsPXoFVlVkEvG}^#PhSn7|gefdB0LKVh@? z|IXRz_S5J04oe2e2k`m|=Vd&fKypAeiw^&84Lb9H>ep1ulBC`>t(sTlfqG))(I@Y# zGbh`zjVtVB>VICQ2mdS7;PxA72B>5Z*Kuqe{eM^9gg&mY{q*_F;u~KcpMF0&{DVk( z-kTY~u?>Y4bPgFH(%;t}XWw8tW1%3k#*hIi>XlQ>MU8N+>UpHONScwVUT10cIi|pU0$%vA zd!7d~J_h}7!+%Xd`Kob8_vcdY9!ke815bZ>))aew(+Ycb%?##mPWNW;`Lp=?^mtzG zNDj@mSJyKKkp7>RKkp|&M#1<3yd zdw+7!2f5g@N$~$ivnSazTb43&`zCvF!;SXp+L;4@rrY;7%(Un4{fs?8|Npio?c*J7 zhrp$0zas}E3wnaoOXz;~32Xo09;g*+n@=nNdIVqL;4En2SX(!v#y-iu!6Nnz7Um28 z0b8>%>;Iopz8>uB|B?d2eLG<7Ns>&tn2zHIyxk!K9((d>3lgJV^~?_YLt_n6U_UPz1pm?tY0HTdH=-AQ0{s6m`v1Aj%b2@+gFV0g zW_xaRbN|trX6%qAk6u{c;?4iuOJDz;*yp=c!_$4Uog9joWWT8@|0HZU&%mm!TR=Ph{uwkh`uKv=j}$m} zvS-Qoyo=}z-_hRwuAMn8uY=y=Uwe>i%eP1%Y6Y3$771%llk`4&KEb{0f9(SgV*iEZ z13KL}G}eH9zo{g9|AhY-`XBsi2fdWftfhjymrlQeB{zD+K>Lkp)}lR@*k@i)76{ z;sNS4u#Xw!yQv-A&|GJKFr&_nu{-vA{F#xb1A$O606!#VWzh)me{0|NNA0ZwT zO(6pm_r?DY(gRcSKR-9Xyo^uUv8{i=yxj%%@;c^kZfLe+{Xnnro!{TkWUoQTHZTix zQ3Kv77%w>NW5V&y@VHu6nm(`R+wn3XHT^WdAZiQaixdvA})|-H;y) z*zMO%v9EpU7CZWdx%TiM&ay|pINcuo!@j4-zj(8KtrLCykEYv$U-*oznO<%8-cat* zs+%iq)y?I0-_6AwOL~M>^EqqzymdE~+L{|HY}E}_w(`bGyZh!+a-(DH&Y6WAi|89v zY-?_+vU`4q*Rh$J#xaY0!&mIozx>4h?dN}M|MuqJ*}uH`5BBRfe_+4)#gBMS&-VR^JxE9Yyz^uKIsbM4ap(8==Q=*qEn04W zxqgNH*_MB2k8b`$YbY)7a+VR<{PaAJ;rn?qfLu^gHI2^y9};Vz8CSx*WWQnnvIleM zbrHoc$dDt>go4zNge=5)EZX-J=Q|S~QKzC>72?=QV%E_xb@+;DM~GWNQQ}$gF!Gvn zy(e-0sPm6P`Yd|vkShx-Uq;M4!{_Jmy=m4X8PA13g5GDRLgd%@KFQH^B4{J;h;Q*OH$I zc{!6ju#(Sn`JUgbIvVB&5sF_*^{@2c?hGMoozizI*uy&rk z*aM``d8r$u?|K<}ZRJe+&ug3Qn|ID5Uzu+i>Vh)r89?4Qh79oX{@mMy)Bi(C{(Vqg z`1|#`?N1%iA2q7_&iDOZ=9Zt(^n*XZPPe zidDz~W+#7>dhSVu`OHGc&qKE5(f3ue&$9J^`W-_<_w^_Ly6+xjJm%qFF%;oHrwjg{ z_3+;e{%7|q{$D}{3IE@?caDeuD0x61|LSRU0spf72HE{_zsKFv-sFKR0RJyvg#Vbs zzr#dtVqz$Lw!^=}(oo`e_glO2yTgCi^>F;*)?+B~fWyDz_o2k^?zeX3cZdJ3>*4sr zt;bN}0f&Fb??Z{--EZy6?+*W6*TeCLTaTf{0}lU=--i;vyWiTC-yQzDu7~3fw;n@@ z2ORz#zYisTcfYkOzdQVQT@S|}Zasz)4>v}l;aO*LYc);P`@%vEX zclTSn^1H)-*Y$Ax;nrg)@qoj>z|q;sJ+$$L~Xl-`#KR z%I^;UUDw0$hg*-K!~+ihj^Bq8zq{YsmERryyRL`h54Rpei3c419lsAHes{mME5Bbs z`2VJx|JC*0IbL?_@o{;e6aJ$Y&HuYF|C1TO17QBAKmX6o|8g@9uY@^|-uz+krFrDu z{9Wd4N13x3j-@TaG0x)@Gi*iu^?PDmpRO&*^$7pJulc_l7u(CLXEXn|iTS_G|6~^U zi|c0DE1C)3gY@#+SuH$NE4s-tUYKX@#uhQ)C7W?`=3v6OhzQw~K zOD33E%5|q>Nz*!CcE<6?m67h>_Zxrq7cP3@dxfp2X3{6Jv+1ME*$&4t7K-Lsh@*%9 zMA%Zi-V@*VQ9dK;$)}6)zXaTa|JBWQ?7kKcpBL~y8yWC%NpggF;_GI5r1`=xg7X)_ z{EK|2=p|vl1OLakmgm}8 zlU%#(fRtxrx%uDy#YgUY-|Le}_lLo@F9Twd0g?&Wu3^~%97Epud;e`;t>jqn=uU)S7Zf5ZEpy1T`umZUxWN06am zWTfk7uuxwU5D*QS5u+-m|m8eli)ebSh@4lyrX**^uFw;dyjf zA5)6&OK=^@WXdvJLp&D5|8Kvbq-R?tl40+7 zrSOKk&cQD~QXN>2Cla3BFJ6sCA{Gh+ET@A4fgB5PK2YfM*EiU!o0r(D>(I^Xo9wl< z!~ixBliP^Tz8<~YgY@EhKG*xaCVQ3RtLq?S!D~8V6THgndj3Cw{g=6(Cs!@8$)(6C z)-V{A4<-C3vc47gmz;ID8vMArQtok@xPHFudw4aR90|rFR#n|-8`iG3{kwPDo^9K0 z*S1#MwPTO%+_BSk?(BQov1_Mo-@e0ka}9fTZ?PjQSJ-2>PqS~`ag}}j4vwF{+Md2+ ziaqg#$@Ub_J$1*_9-}AtyeIj*r=f2^-~9cleD5^QdH(ZL_?~I@P;SkOR`52+ZjePYw0&KTkVIx{H>ih*>3HpPTSe`Gg&%&*3R|= zojH5P+S||C=@adUq;~uMQ#)a`A?B#oRH&@x#dDXV1d8~bL`gm&`9<%&Nj-`_LQp%gKuFCu6#fYVV|7=XP z|L(QJnOpmd^UsQ{1%lYBqZ)0>k~KDd(R#c2i@WXree-QQ0oqQspRzOU{c8)HwR0Z+ z&z?T#nItcNeVc8$aa0HXOV8tfZ%dKw2d6zp$P+Mspt%U_`^4jxGHY$Fur2c{ZTo@- zTX}PtO)DbDAIz~d*bkxOL*QO9|9t$bVX>&Cg@0^;uwsGE25@W8%RHdkJ>{OIchbc7 zlf<5)%H_eAUW`vViP&Fm2tFO%Xj2#8W0P;&VGT>S*bQH7wg2ar@7QtS{|q(&`d4~i zf9KAf>r(>yCj6h}d(WQMHJr0!PwueI;Q#)XQfo!uA4LBj@brIo@h?ngu`PT{Uif-` zU&r&=*YPP@3T=N2y1!`*GC+2KYz(NS(sndA*q3i^u*roH%cm|eFO{wHix5ikqHPW z!~Pfk4}$;Q!vDN7PfvULzgxDyYLx`R1$~ku2HE`2lSFgL=JXwC$K*WV^uq zKK%VdyncU63HJXO{EjO0euIr0!CHr?pHPh7;o7ai0O5fI`bPXH8&q|Dsyz`Y{v1x{ z5$hu+HLBXKU2vyebL$SPTfEIGmu$Bx?Ee{G+6DgK_Ar0;9M}_qyZ-unFaERo|4;}1 z+rYo{_8!^)-NHXHL*9RY_wEzsJJCL#^ZfkgLOTRWKJ08Nvb_t?|JVWt=Rhsk{4*Qz z_d`|?30Q$_sgCt_GGJ)y-hpuc<>RN5>_5TgmtOK~(9&Q(m5N(VI8Lmu)~;E;%07Af zHXFBSqtz_kVb!VT37Zy=<{fB;eS6mJ{v1kyf90W1(FHU{r7`? z(LrK;`xRGQG@AJ0NT|Z@n?BaYkBDMhDR&aKLTs#jXvP@u`BTTmuw!S4tX-52wjgnkiS1~r0t$xW?#Co#3mKSEECSfw@+F=dAr&bFL^OPZ2o|3{(74_|0_1})@@d{Y`0Y{-EK9@w^=dx zFS%upRV>|P(>w6*>wm@kblzWoyw_VFG_wdBEO%SNqhjOcLxst59NCyJrrc`X;6FiiT!7DeC$CX);D>oLe~Q5O-(PRwUp{|l>?>|? zkl0@vv=2FOfZ77lzIjE&7^`gcobkl@$)&^tmdFJ0t%B(Ms3nN$=ftSA0x2HU?5-Cv3CKW1sGjalA`{lC#> zf&U+XfBl_1H#qTsAx@|`fa-}QfW#8M;F^I`WZ){kG6gB-|7X7l<9o_81+SQr?}_ah(v z3ypuKHj2 z8|d*r>2THmD1UdswpV_?>tiqP=V4vg=l#U_B@6Z{$4@=M_PM3Dd0xGJb$YE`RmdKG z@Se`gBgY@MVR7y2iCKW!%3N&z7&#TKe=?QB^ZnN!$ziXLu-D)Iy|5q2C!bHe8Q(Jv z-{s+l#=(04T@)a{r+yikP>}roL>ot4-!!kbXN%P?-vPe2S;cbf0Al^+OOXXo1@=HW zvY=Gw!~kj+ZnU|7+-g5S|9hUl7yGB?w|`W>_pRO4|NE%dI|#PDT42@n;nS<8PshDH z)*c?^_NDK4fqCugX=5+n{nYaxqQ-YWvA+HDYi-rcaW;MweiPVNUj*SxJ-obHDvqA~ z?aT|<01ksg1cROLdq12F9^H);SyT`^Z z-a<|9R`9PlpRi7z-^0K3{chyJb}QpG5C6pfefYN%?^^%gIk%s!>GkURI%@h<+jkIq-~hEfds{}??nM>$)!8*R zp@{r`44*0wzn=cx!}0giuCCA7KLbSesE15`0)Jn5XYx+kOPXe%UrvCyKw&*~{9m#0 zpU18T*Hy&$>&Wj{q5msAQk)N20QP;Vl^hWMegFRow*RyECy(dZ`d#ratRK>zzK+`7 zgT(p{%HLPdpr%Uu(u@kL9iuuaYI@c8G>X4ZJzq?Frv}Kqch}*3kT`ySl6X{vymKfK zA~uB$kV6gX$VQt;-=4bLcT&f*4ZmJ7KJ0z`de!zx7G$wc%@6utRM$b(ygpd)-^xCn z_pR$w9)P+&)%Ud#3*1LdZ)*#+J<}Vk5r02Mem|Ti*-91Od_AI>5Cf&B*Di%}2Lq1Rbd^uExZm$6Q!oQDu|5ywDmH!)D z_$Q_>oOdGC^y#tJ$B&*}t>pK2Q`@(9ex2PlYpjhOO{%-%U;5c53?3`{etDf7SZ=`d>D`WPoe{J+Ih*#fq(iBL45;pZwneV)|ZPpKALQ z-zVp%9zomb)w_jWo!jTv+nv+vZ0v{xJ-c#kL_YFVvpR{Tcy)cu>`_g>`lO_ZxB5B% zq0W2m_xG+0^swC#Yf6ycQx6Y4m#y{7>Y$8jQG)C}E3CGu%U4?CZPe^6RE&=}K6<=z zIeC8K{*B;Um@j`H{7d)i{qhm64E&$z(*NsK`hRWe)c@;z|DXAzsoxPv4$!*?{O=*= z*GhfQwz>4_rf<*PH&@xzQPfP(2O*#M$tddjRNEI}tpm(E4a(+6?+g1GaxF<$*X!(` z4qWz@4AkDSu;%UJYsOL`FUOZpjxQ3W))ak|OI=@@y3-_m=E5T;5$juNQ*NVv7p!al zekC!y3i5pA()+^vk}Uou13Hs%-}!OX6{7#o89m6)ou&_QwhHOxr*_-An?~D#`Skx+ z4Ig`Ul;7VC=6BCmpUyHbzpp;sZS?PGWna(U`Sj|%ah%l;Cw{8^kYGQKy`SdZYBs0j ztmYkh@jh&R>3xU&-qm@%g{Ld+a~0RqoG9sg<@VLPD@L9#N=zyQFY2}2FnOub)i$o> zKCr*r#xB`R41bH)yTi-jgY|4(pK5z|UWD_Daev{l?0|tD|9=nupKP^tH-i5KU|u!7 z;J;1%yuiA8dG00Nrx?HTeg}~S!v38%6Dui7T3(pi31TRIA9StxmBugbdI#4%^X9@3 zcT(OdTh|Bf>C+cf{Ry=_!63dV`}nR}eveJNoqkmn06%ZH23uLS$w$N#yG`9H6M z|IIfE|HSve|NX*0q!_>h^yqA3M&G^#HTD&1dTWc2sR_mL@afqzA#!zn4*LU1UWhkS z?BfZOcg|(cNt}3JI2Rc(lGz-KsO$UO4tn$8-;>+d9^NYAe2U`<<254UdLrfa>Ud8r z^xjzC1)slj4DiapKN5iXLq7gr6aH@)X%BSh|ATYn|CdwyL*G7XdJhoi|LTpk^z0&D zO258Hn)yfMRMKES#Gd^eYN!w--~PFk zwujt)tLA{vr}ry2*4X4R%syilXPmrAj6KrYHz~{q$+P6rL&4Sc4PCqqG+C=YQtBy_ zN*7ozwLOWVI-9VBy1v`lpG&XKY7uxZUB1OiIr?=ym%_i~fS&KH<1cr9CFp-mA3J-l zo%vtc{GaCkZoX+GdY;-I=5g$uS8H2mRoV8Yv9@Xk^Z1y>8OaS;UK$&UT%Ts}saIz% zHkSH!#UdG}`y{Zg-$(gUnaw!`wxo~$WdwApU>Bj$hn`nMkD+ljlKW(Ig){atFlxSb*Y zcjmOcefAWWamN0J{Qr*Y3+*ue{rjK zXVg-q6k|ayIDI=b^=)6?cjfZ+eG&Rf#PC1k6Dll5@5jvWEJr(rz@Qyma)MK72?+)=f#Y;8wYlk)7 zves&D-E4)6w%BLC+{XNmw>-$7KHYBZ?ZRK*O#tsI1Go&nzn$;@b^8fq(rNpfC-&No z-z~ET=4uabt<@K^Z!ecUJoxr;YN-119=q>ya^(GZKs_YF_?+RiYI((?Fr*!=1R zJ`w!a-@3($7j3oc|7f56=zsmz!~dxhr|r~9(J5;1$isQMI4ckO;{2@S4!Zxusdw$4 zPM@F;=_z~Z(S5f5hH=d37;o1UvtNQ7-!S$?rXp?z&-?MBd%o}GR5q{Ifq(i+DDIRA zGe0IV%yL5c797@S*UaBylb2{F*A^?mzb|7ZUomo^5IGoA)rkN5>B! zy>|?xq|zQ&jlpm={&Q8RkWf znqcE@ZDj`E*R5#bBR2ZBLpJi(gB^6phTj6+ddNoI@_H|pcDOmQXjaYHSif=t&BX2uunZ-x!Q(t`8Ui`m)WN*CwGkg8VKe0D| z@hkh;>p!>GUw^&V>1RLtnRTW&-gv|Q=j%VVpZxqM_76Y(k^SaZzqZGB?Xm{)`bE@C z#+bz!%fqKW`~UvfBhe;|;w@wcqES&#jrO=O>J(_y(CwA4LpPG)-+J0)&4ql+E+x}g(#Qrnc52*&k)=%6yOwZ03 zaey?(Kp=KlqM~edw&!JkoBp51+9*sQw{{V*^Kzyz{fxpw}KfVRerk zhje^@s^zts52WK(^Ju%(KXTG0J^nV|dBU!K{EW?L`)?K;F^=mDSeSh?IZz-shkb~_ zKBrv1GZ5zc$?4~C9?rpz3bJn>yoXdbg?**mzScM&+sg5wTZ4ha12K;;^CBtF4+vue zq?y$b2xP4M_Py5d?YC^yk$0{9$XP2sa>`1NoVK#Vr>(q$DmaSD4xjR<)O(NK_x@DI zYbB6AuRAn~?=IxMPU4-vaMt@>GdW`MHa=qK3{QE^-Kw>Hwq*_E2W;OZcne1f7sgt1^=@9GweCZgsC~#%vi9W@9BT=f7=1@ z{|?wYZVg9IV+S0!TBr`HKdR@l$9nJicdh!Ncdbh2V6_H0QTqX;_f+e1FH6XZqi3z; z!BbZC&O;~W*!R8@J)aOs4j_l3A}}A*HIZXU za_l^xZ=l?NcO3%XYnx5{);m^x_#K-BrmK#g z0;{L2)}xbFck~43Cy@&$t@6PWRt7%Hp&HI>yFq$icSyLeefVt~`^ayxJ5JdI^#6@} z|JI_TCR>zVIcYE#VQ-T9VfV`#BF~lA7pYbl)qn z4sons!tPKHS@C6xJ*T(TmS zkN*g9f6YJ9x@N$A0Y1Nu!k>D0Ivlz+7$`j8#sA?`+0d#5QazyNb1VK|zha+#=Bblb zb@;faD+b`Co4SkHhHT#At8c*NgG*=KnYz>P>!gpFObnOZbm=%>UE;&r8k!sXY9y zRX@}}vp+R&RP#T}9(=dU{7-NG->9h;?a=>WZ~kZEJ+pOV{WNb^->X^R1Bu@goz|lB z`9QixcP)J@AHwmZ>|CCjN#fqaR zIG*s1I`2*Lzo+Wqx2@vQx2*Kxcdg>^DZA>C({|JTzq8oL>$uK*3q|voT|CSpkrZ=G zk!SptFceBfEf)%Qke-W)cuzPPw@?p}J~znh^bizFCM?7}@*L)<=0*!F8qKht3Cm+$ zHDfi3Oi1v!w<*bYB>Aq+G%OYNt|JjiT7Eoa!DNJM%~&#$K~AwQ$Op|SPrEs)14?f9 zrc9K*9|7+{cr%p@+DQ0fcsvhWjkK|M9I%<+_+K{p=-XC*__WnLc$zujeNR=7fcwXe zTggLb!9TOVA3b4B`~Gi>jrybo!^13{$XF_xv@}@D$cBj}xqk_8oWY}WJp)m3x z#WnOf@%xjBkj0bv7LSgy;i-rPxTX--mk#qBGt^}V=7IfuhyNji|2%M0fZj|a{|gdf z8yySVaPTC(I{tH8toiBxZr48eW1Dv5mp1u<-`JD~{>eM)y!R>lU6T&~+QuLLCu_X_ zEt}N#FE;Dwo3^y|m_Ju}qZ1Sh9X!3QIKjC^CHetGr z7(d-cj=$MPjl0=KkH5(ZITnt;k#lIm4K@lI3F*ABr)d0V`TU!$Xu^$FH1T(A_=MlH zF~57eRnJ~)wKLaS-R#v?J7=|3&Rz#?uP}R}wbaaAWwlKkt@@^~TD+j# z0@0`?u$hL1)0V+*iQ)f6@s0W`X40E>uKVmu#}&fZqPf_Hx!m^%_Fob^AdO8N3iCL> z*pB|iOZICs`{{ABU$&e5N_58T*N}JaKi6AFzUMc5_CG;yo;LgOyJl~2{I5U!wKe|k zJo}xcU$Wo(gWXoWe2>+9zRl`Czum@teuqtfCVy_bO%Z*5n@#-vtv3FSE!KF)W^4Sy zW*%>`$~ z6VUNqrJJ5SVHeY!r~k#~fBRo;#iKv4VWn4DAQ%S!DI13T7yc9I{}8c^Fnr+fa%sE_ zwspw?_W|NyqFgAIede^C<-c>iO6R=K zH#^Cnv#XY@wuWV`REbO`xnze` zFWqHTOSfD3vh7x~e47=m*kWU#vgKQ>ya%a7-?3!7)!nkg3g&OO(z{-;s~70eC~eFrRACM9)i3)Ah=hoEEtPgGDTbfJun=9U>I`Y+uwXrBEU|bJ`MKI zaBR0z?d>4adY#&h@3VI3teph^`g`-uH>|#4EPhJR@=7P$^~=}VwB?(vb`d&$*)D5X zvdhLU*<*E!TCHwztJN&tjXc%a68O#e?Kc9z5Rnbo7)}J$%-t9QcvN%Rfa-B226l+uy@~ z$THmP5ck~S|I%0)j50)izv8_kBMIz4;^dr%QpkXK1bskEFvD7;i3t>>?OWgZ6AydG zPo1(;$N-Vhh>6~7GC-d#eSZo%i8XKv8$^G<{Ke}wzM&RBC2BdrlnpPQU^lKLC#)ZMbd#)ALR9{!)T z$&Zt_eE7IklE0{a=pCy*dYXLcDXTyx^a~wnxAKS0CLR?2KWRC+VR9B}i$&Aq1|r=5 zY%Pdnz+mKc_nY1;*OVs~?u)_+8-Wav9S|Tc93oE@k3=jFdmx59$R#f@YQ%8+##324 z;Pff9@fn#IjRvpIoK>trZ^xrL6agF5$b1h8%KbN`%<^FX4RTt#^|M%i# zu*!}Q@jun16d(g+2Lu%l0Pi9E{{rm7LTUjr@JBqEwqPh|nRMD7|Jvgo22bM)^vT~@ zWK27BhIqi4to{GXH{Z0nx;hI-V-|sj!-;%k0ChmcpRj8due49xwuzX)CM#dM8Qc>S zz~--nYOvF5A^89zJ?Eca>T&1S-tSzWQI33(9WWNTQrOaJWp}=66CXZfB}dO%Dfq5I z?>9Vf*6N^Y^l;zPX=|j0W9-A!Pu>6bma4kSa+EVoq%A=0f_Pw5IE62e)d7Q*-`(%( zD%<4yD+iFR7t6-~6cY@i2ZmF_l8;@GhmDv}t&C!V;4Qy^nBbrPg$Moi4j-Ubt$@fa`8sW#d+?wQ6KQ_41uyUiSWW5BoJs zx8e8iuqxz&NU_0k^maM+f^36osFrx1s2Xfnb%*3jfc<(tqj)~H#a%Diq(`y!@%M%O zT52WhkDP*#1srQ39p8^W==JV=M(6j`at-ywAsZh#W!E112TNB?CH@~oZc;BH{ZH+Z z>_FB2x%^*Oj0{N z*lCqu)W^SYUj~(~*y@oUd$Bxhg!=Pxq8l;*{CoDpEnBU4A)k5A^EUpm6IKQO>pOh@ zO5%Ri)KF_rLw`^OG01vk(skJX>B=e8C`G|KHOpW>O3pV){!jT||DL;}lLI~vB!~m( zTrwbqz7^(%4I5_P_{KLplpjBS+&npe4Cu|ji}9b6lXD*b3CSno77^@~KmfiTGuf_Q zzRD)uw#_ORZ?gK^TCEbDUWpx0iN9WsUYB3s`3K;>0;&Y}!oPe3(TCCh!hh8jgMajY z2mV#J?BSpIzr(-7ypQ=VN9;l$|B?lg0TIOq^YZMw-~Fx!`I9G4dNx2`;{SsFPY?@; zScKR`RM$#fdjMY`O`Xe>Wh-qw^*?2cHh4Zj-O^U#fxD~}8Q{ePvD@Xt3+pwW&A$zs z-=}Wqe&N1D|2zCU{B*$$I&-i+mhKn!B?p4|kotX3KmD`^d)WZJ`FFAYKaYR;C)6zD zvZpN(LoP+Mmrb?zNsEwi`X480_1@F0{Q>4 z1w`HQ{T==X9ghz-%zoV8BfH=CvvsZ*KdZ{ZkM6ejGqp?df>H`{ExN6wx)Y z$1WBNSphX{=?L{L+RK!avgnuzb}jV*6K>h!;k%5OVC4$=1H|nXQzw8;P>&3#gA@}K z_REL~IQ$Pj{q=FN;Qsvuo{${K&(HU40mTFU;xDp!0r>*HKcGCJkK2!H8~C4dsra92 znNsp$Wdl&pnofp@XS1h`ctCD0dt6JV+LYzQ1V6XcYL<)8^^3P*6Og-G2==KFlno%v z3;&7*I{aU_*N*SqT3pNnvH|1=NdN0RlgXTq2@3bJ1w=jdcRBoP@2dJ&B&cPJum?Yu zLI$v>c{usaOsv3*2}X-2+2o~n*~Asp2Q6A}6ISd1_r&_B6RO3B&+Zq<<_Ibs{+(S9 zPhHIO?(u~+kxwApD;_8r;IGYJ{ncN2kXJmQo!nqg{e2MrmA_UEoA$CM=ywy3Ap^WU zjl=~Lk^yn{zD%@FEMINc+`7reAp`1{Z1L&?ycizwfJ$rtFBa&<0A2jgzo+haf$!Z~ zNY7F)3dskM9Pl42CMY|=j|a#P=&3lsoEsc%k)kPf&9ZxK!mS(e^S65S0F~?`u2HR!_VN-3P`$9~0sMSm1+_z7osVMv z9pvQ<9RAPqfX@r=I5gydf1ibY$pl|6$S#my;Ku|N5AgkgkGgl@a`^YJLr3`levjL1 zFWw9HB7=+=M&FA-03V@jl3jJ%Y8y{(uxiOx;{UrmQq6EBv4NUpTi8d$YfuIG0ObTq zSNOHU+DELM0r^Ar7`pnO3v1l@Ubyq2vo5|2@cjYF0_6q1)ln;~SfFeH9epf+nAm{- zZ!V?(yUS-@uQSOhug@X-8p^2=qE2w~=hzRlc(c{4Pz(S)k36VB-wXSd!oPBY9i+Vi z!h3cvG4TTS7d!k99X{_auMM^L3Ge#Nk^_pEh{r66&^SQ7t)o)_s@KJftdIF}&<*f*&9 zfI4jdD)#Y|um`9V8BpQX1u8B`o)Gfmg4#o%{ezVb|IYu1w=RW;q4bt{(%3Uk7NHUP8e35AhiMNd7M#=P%@AG@YFDrOtMK!?y>Rg zNFRcB8st*)-bwbJ)fd5i_0xxgCxvT$o7#K=;|DfM0?ECNW?E>u` z{?2#4>t3$j^Zy<8 z;j5vF@5}ve>3?Be@9}K`|FP->zy0lRdywxd{hz%K{1WPf6377U7f28bj6w(9DaL2hDqo9F+u76 zPzawJjEN)*L{fygs0H z^x*C{{6EATXJpcK2mgnqE3O9r`mNbLTl(D|{*eXh2d4FK|gnd6Z=%OkhsnQD7a)1y^%d@j2l#cuzE2=I&{z2P96{MF%otp-(@O7t$vpf2p_A62c|Yj?D)j-U|98LX|I6av*Z&Ux z{=Ij{-nW1JIG`UFlq`@v;O7M{jtTZ9{$&G%h*1Q!j|rWaq@Q4rI>E@8M*4@`ZDVi8 z_9yn&uyhZ-MVa|S&7g<>`Q!rcdf6u8YpeJFSo(gKga2}7099!YPk;IUm&L!+{|@iH zkN1n$xN}}mGQjr*Bp3eVPqOm{JIjDR$3HenEJ<$@Y~(!h1S$Fp2SW4`C>w8A-9j%h z_5)VVr~Yr*9vg%HFTX|eKZp^0^<|sPtc^PKeHQ=kGUtmKU=IJzw(cX_`eLjN)W@>> zg?<0}gnji7P+vh`2FM2x`89%?|D*XIo%{d$|Gr0$o-fSx#pxxOp++E?OJAWV^#ST5 zG}WdqUCW#y_6oBnpp1RNRkv=l!a4L9W&Yok4*WM9mHt2O@bCEkJdgJ%j}D@Bl|3N* zizFA+OT@1gRxD8U!mo}5Hk>y`2SJW38k4e1ZAidOfwrT5TLJc@id#fVx5h@ zmA%5t=qb2@y@T_K31I(EdPMerHvi}2-`W3tZ(};FU3qIR{L2>*Ne=k?1|JbvtH-g2M!{yd;upzyDwUoRv%;P((wUf}iD zU$=&ahF-V-B?IE*#$w)nA^9l8$><{%We#c>-yo8pmsl>(Yt|Tffondu-YT1zGj!j} z%>O>Y-0ya)1NRlg0BeW^^lSeAVL$)hk^fWv|9t+>#s3{9-yf5GwKmfA`Yy!-Bm?~K zRgI9&pLpU4uN>fKKl@p)>wm@n!{9zjEuhz1ocXxwEgFV`Tw549kmB_b$vAa_1r{PV z_=y$t6I34XEC0d9KJsqI?C+CSe)PE29wr{h4DPBU%mwWSs(9!v>i>@0b#2W5EWgIf z|Hr-hA3y)kzHP-jV)R6k+;imCpdWakvkVXq>ai~iWCuL^?6daPTW?uSO^v7j^}6B) zy}_^9dcbTgP>MK!=L>*;^$^j#AY|B6YxhPba8Hc-y8u{?9h=$PcJvxXwa>0_vaB$gu1ls1W{5ZpS?M z-dIcbnNFsD6dv$%1M&s*??;RnVf***w{hdfowxscQwCh}nmh6pF=T>X&u89P5?es? z26GCpvFpD4nBDUD4{gTLAKLW~{?vZ&p`Y0AJ^W+)>_b1cn~(g&Za&)g^y#BNvL>$S z_O|a^ruaGwQqPpq+;8HU+5;I>jDvjuQPlwVgWPxD>Ey%ZctH5~Wq|PR+XadfTO^&%Sm%R z?6+b+Q<}J+VwySV{y;jy++=F6@coPEfi@!S@c*&-!P!qeW<&bAUicUGeSg4@3FvkC z|Nis+a_`6oW)dlKgW6N9m;iXfmd@Z$i}Ju)9{cO_z*!zKgA6hv;~jP0+oZWi3FaV1 ztq6TT8XCs6#Nzn-X?zy0CCD14sdXp}rEEmxLfo}q*3x08$FMUP?w@e&>w4c7xcGPJ zJ@5D0#qaHn$B78F3gO|F3g@Fo^DP<4<_coSfDqWqWe;HvF+-gv6i4g_Dj?1`Jdtbp z)G}t+*BD1Gg^&w5TvL$ij6?azvAm9$MsKW>`%LEtd{iFjPkeviHAk_hkpYRQNcvMX z!}tLlbBM78;>;Vu=FZ`$8D;9X(U+v}jG*&X#~Af=KYWP2A7u_wgrlxAj6CpO!&dpg z-|KX=TO-E<=XpT;=hZhTrZ^gUHcR9r^&Gg8EbuVMQSX)S-Pfeto^1VG^nI8de+)_> zx01*J;a#;3xv9wcSfG;uPFFh~=pGMfmPm|PTC{^Se>{$!O+p#YwRcdxM0D=;8|?EV zx*z;Y$A>#)k$e+xRm(jfAJHV3mcCcbkY`VK*!Y?? zkY?6MUV{CDyvNh~ykC9B`igXod3;|!F~Af@U8hJre=;4U8b{eFBFEQm4IB@2p9i#0 zz}qX}VFzDZ{&oj>c)|{l-uL{04vhI&>#L)B82I?l&Oae$%5%cKWP*%rhJm7f1@qpt2#{-TB91l1ia6I66!0~|N0mlQ52OJML9&kM1c);<1 z;{nG5jt3kMI3933;CR6Cfa3wj1C9qA4>%rhJm7f1@qpt2#{-TB91l1ia6I66!0~|N z0mlQ52YQnS0`AYPfLj5#0&WG|3b++;E8teZt$6d_6>uxyR=}-*TLHHMZUx*5xD~kKSK$8#A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 6a5fe931dd55ad6a014f2eb022f24a26608b2b89 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Fri, 15 Jul 2022 00:42:34 -0500 Subject: [PATCH 09/23] Only RichardHanania can create questions --- web/components/nav/sidebar.tsx | 4 +++- web/pages/create.tsx | 1 + web/pages/home.tsx | 10 ---------- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/web/components/nav/sidebar.tsx b/web/components/nav/sidebar.tsx index f4abc6c7..dec91a32 100644 --- a/web/components/nav/sidebar.tsx +++ b/web/components/nav/sidebar.tsx @@ -204,7 +204,9 @@ export default function Sidebar(props: { className?: string }) { ) } - -function GroupsList(props: { - currentPage: string - memberItems: Item[] - privateUser: PrivateUser -}) { - const { currentPage, memberItems, privateUser } = props - const preferredNotifications = useUnseenPreferredNotifications( - privateUser, - { - customHref: '/group/', - }, - memberItems.length > 0 ? memberItems.length : undefined - ) - - // Set notification as seen if our current page is equal to the isSeenOnHref property - useEffect(() => { - const currentPageWithoutQuery = currentPage.split('?')[0] - const currentPageGroupSlug = currentPageWithoutQuery.split('/')[2] - preferredNotifications.forEach((notification) => { - if ( - notification.isSeenOnHref === currentPage || - // Old chat style group chat notif was just /group/slug - (notification.isSeenOnHref && - currentPageWithoutQuery.includes(notification.isSeenOnHref)) || - // They're on the home page, so if they've a chat notif, they're seeing the chat - (notification.isSeenOnHref?.endsWith(GROUP_CHAT_SLUG) && - currentPageWithoutQuery.endsWith(currentPageGroupSlug)) - ) { - setNotificationsAsSeen([notification]) - } - }) - }, [currentPage, preferredNotifications]) - - const { height } = useWindowSize() - const [containerRef, setContainerRef] = useState(null) - const remainingHeight = - (height ?? window.innerHeight) - (containerRef?.offsetTop ?? 0) - - return ( - <> - - - - - ) -} From 7673b32a0ce31c792d39a51fa053f7d4b0b7eca4 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 27 Jul 2022 09:40:48 -0700 Subject: [PATCH 15/23] Remove add funds buttons --- web/components/amount-input.tsx | 11 +---------- web/pages/create.tsx | 6 ------ web/pages/profile.tsx | 1 - 3 files changed, 1 insertion(+), 17 deletions(-) diff --git a/web/components/amount-input.tsx b/web/components/amount-input.tsx index 426a9371..367fffbb 100644 --- a/web/components/amount-input.tsx +++ b/web/components/amount-input.tsx @@ -61,16 +61,7 @@ export function AmountInput(props: { {error && (
- {error === 'Insufficient balance' ? ( - <> - Not enough funds. - - Buy more? - - - ) : ( - error - )} + {error === 'Insufficient balance' ? <>Not enough funds. : error}
)} diff --git a/web/pages/create.tsx b/web/pages/create.tsx index fb87ff4d..73d16536 100644 --- a/web/pages/create.tsx +++ b/web/pages/create.tsx @@ -441,12 +441,6 @@ export function NewContract(props: { {ante > balance && (
Insufficient balance -
)}
diff --git a/web/pages/profile.tsx b/web/pages/profile.tsx index 541f5de9..601d80c5 100644 --- a/web/pages/profile.tsx +++ b/web/pages/profile.tsx @@ -240,7 +240,6 @@ export default function ProfilePage() { {formatMoney(user?.balance || 0)} - From f62b1037ffbee694e2ada184ecda432852e0bffd Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 27 Jul 2022 09:51:28 -0700 Subject: [PATCH 16/23] Remove unused vars --- web/components/amount-input.tsx | 1 - web/pages/home.tsx | 4 ---- web/pages/profile.tsx | 1 - 3 files changed, 6 deletions(-) diff --git a/web/components/amount-input.tsx b/web/components/amount-input.tsx index 367fffbb..7a1b81d5 100644 --- a/web/components/amount-input.tsx +++ b/web/components/amount-input.tsx @@ -4,7 +4,6 @@ import { useUser } from 'web/hooks/use-user' import { formatMoney } from 'common/util/format' import { Col } from './layout/col' import { Spacer } from './layout/spacer' -import { SiteLink } from './site-link' import { ENV_CONFIG } from 'common/envs/constants' export function AmountInput(props: { diff --git a/web/pages/home.tsx b/web/pages/home.tsx index 30b93762..06f60d80 100644 --- a/web/pages/home.tsx +++ b/web/pages/home.tsx @@ -1,6 +1,4 @@ import React, { useEffect, useState } from 'react' -import { useRouter } from 'next/router' -import { PlusSmIcon } from '@heroicons/react/solid' import { Page } from 'web/components/page' import { Col } from 'web/components/layout/col' @@ -10,7 +8,6 @@ import { Contract } from 'common/contract' import { ContractPageContent } from './[username]/[contractSlug]' import { getContractFromSlug } from 'web/lib/firebase/contracts' import { useTracking } from 'web/hooks/use-tracking' -import { track } from 'web/lib/service/analytics' import { redirectIfLoggedOut } from 'web/lib/firebase/server-auth' import { useSaveReferral } from 'web/hooks/use-save-referral' @@ -19,7 +16,6 @@ export const getServerSideProps = redirectIfLoggedOut('/') const Home = () => { const [contract, setContract] = useContractPage() - const router = useRouter() useTracking('view home') useSaveReferral() diff --git a/web/pages/profile.tsx b/web/pages/profile.tsx index 601d80c5..a41fa40f 100644 --- a/web/pages/profile.tsx +++ b/web/pages/profile.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useState } from 'react' import { RefreshIcon } from '@heroicons/react/outline' -import { AddFundsButton } from 'web/components/add-funds-button' import { Page } from 'web/components/page' import { SEO } from 'web/components/SEO' import { Title } from 'web/components/title' From 09d95f2b2bc86267ba75586522612c243ab99d18 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 27 Jul 2022 09:54:37 -0700 Subject: [PATCH 17/23] Hide charity page to fix error --- web/pages/charity/[charitySlug].tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/pages/charity/[charitySlug].tsx b/web/pages/charity/[charitySlug].tsx index 89d2d3a3..7e063260 100644 --- a/web/pages/charity/[charitySlug].tsx +++ b/web/pages/charity/[charitySlug].tsx @@ -33,10 +33,10 @@ export default function CharityPageWrapper() { if (!charity) { return } - return + // return } -function CharityPage(props: { charity: Charity }) { +function _CharityPage(props: { charity: Charity }) { const { charity } = props const { name, photo, description } = charity From b24035f0a813380d82c69c8680322650083cc92f Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 27 Jul 2022 10:22:52 -0700 Subject: [PATCH 18/23] Try to fix charity error --- web/pages/charity/index.tsx | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/web/pages/charity/index.tsx b/web/pages/charity/index.tsx index 80003c81..e16c6047 100644 --- a/web/pages/charity/index.tsx +++ b/web/pages/charity/index.tsx @@ -1,23 +1,14 @@ -import { - mapValues, - groupBy, - sumBy, - sum, - sortBy, - debounce, - uniqBy, -} from 'lodash' +import { mapValues, groupBy, sumBy, sum, debounce, uniqBy } from 'lodash' import { useState, useMemo } from 'react' -import { charities, Charity as CharityType } from 'common/charity' +import { Charity as CharityType } from 'common/charity' import { CharityCard } from 'web/components/charity/charity-card' import { Col } from 'web/components/layout/col' import { Spacer } from 'web/components/layout/spacer' import { Page } from 'web/components/page' import { Title } from 'web/components/title' -import { getAllCharityTxns } from 'web/lib/firebase/txns' import { manaToUSD } from 'common/util/format' import { quadraticMatches } from 'common/quadratic-funding' -import { Txn } from 'common/txn' +import { DonationTxn, Txn } from 'common/txn' import { useTracking } from 'web/hooks/use-tracking' import { searchInAny } from 'common/util/parse' import { getUser } from 'web/lib/firebase/users' @@ -26,15 +17,11 @@ import { User } from 'common/user' import { SEO } from 'web/components/SEO' export async function getStaticProps() { - const txns = await getAllCharityTxns() + const txns: DonationTxn[] = [] const totals = mapValues(groupBy(txns, 'toId'), (txns) => sumBy(txns, (txn) => txn.amount) ) const totalRaised = sum(Object.values(totals)) - const sortedCharities = sortBy(charities, [ - (charity) => (charity.tags?.includes('Featured') ? 0 : 1), - (charity) => -totals[charity.id], - ]) const matches = quadraticMatches(txns, totalRaised) const numDonors = uniqBy(txns, (txn) => txn.fromId).length const mostRecentDonor = await getUser(txns[txns.length - 1].fromId) @@ -42,7 +29,7 @@ export async function getStaticProps() { return { props: { totalRaised, - charities: sortedCharities, + charities: [], matches, txns, numDonors, From bd5d3d2afc4b2c6ec89f203f27351bdd2567ad3b Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 27 Jul 2022 10:30:58 -0700 Subject: [PATCH 19/23] Try to fix charity error 2 --- web/pages/charity/index.tsx | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/web/pages/charity/index.tsx b/web/pages/charity/index.tsx index e16c6047..2a11b06d 100644 --- a/web/pages/charity/index.tsx +++ b/web/pages/charity/index.tsx @@ -1,39 +1,48 @@ -import { mapValues, groupBy, sumBy, sum, debounce, uniqBy } from 'lodash' +import { + mapValues, + groupBy, + sumBy, + sum, + sortBy, + debounce, + uniqBy, +} from 'lodash' import { useState, useMemo } from 'react' -import { Charity as CharityType } from 'common/charity' +import { charities, Charity as CharityType } from 'common/charity' import { CharityCard } from 'web/components/charity/charity-card' import { Col } from 'web/components/layout/col' import { Spacer } from 'web/components/layout/spacer' import { Page } from 'web/components/page' import { Title } from 'web/components/title' +import { getAllCharityTxns } from 'web/lib/firebase/txns' import { manaToUSD } from 'common/util/format' import { quadraticMatches } from 'common/quadratic-funding' -import { DonationTxn, Txn } from 'common/txn' +import { Txn } from 'common/txn' import { useTracking } from 'web/hooks/use-tracking' import { searchInAny } from 'common/util/parse' -import { getUser } from 'web/lib/firebase/users' import { SiteLink } from 'web/components/site-link' -import { User } from 'common/user' import { SEO } from 'web/components/SEO' export async function getStaticProps() { - const txns: DonationTxn[] = [] + const txns = await getAllCharityTxns() const totals = mapValues(groupBy(txns, 'toId'), (txns) => sumBy(txns, (txn) => txn.amount) ) const totalRaised = sum(Object.values(totals)) + const sortedCharities = sortBy(charities, [ + (charity) => (charity.tags?.includes('Featured') ? 0 : 1), + (charity) => -totals[charity.id], + ]) const matches = quadraticMatches(txns, totalRaised) const numDonors = uniqBy(txns, (txn) => txn.fromId).length - const mostRecentDonor = await getUser(txns[txns.length - 1].fromId) return { props: { totalRaised, - charities: [], + charities: sortedCharities, matches, txns, numDonors, - mostRecentDonor, }, revalidate: 60, } @@ -77,9 +86,8 @@ export default function Charity(props: { matches: { [charityId: string]: number } txns: Txn[] numDonors: number - mostRecentDonor: User }) { - const { totalRaised, charities, matches, numDonors, mostRecentDonor } = props + const { totalRaised, charities, matches, numDonors } = props const [query, setQuery] = useState('') const debouncedQuery = debounce(setQuery, 50) @@ -136,8 +144,8 @@ export default function Charity(props: { }, { name: 'Most recent donor', - stat: mostRecentDonor.name ?? 'Nobody', - url: `/${mostRecentDonor.username}`, + stat: 'Nobody', + url: `/`, }, ]} /> From 6be321fb887a7d697050599f67cc63d327a3403d Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 27 Jul 2022 10:36:32 -0700 Subject: [PATCH 20/23] Remove ability to tip comments --- web/components/feed/feed-comments.tsx | 3 --- web/components/groups/group-chat.tsx | 1 - 2 files changed, 4 deletions(-) diff --git a/web/components/feed/feed-comments.tsx b/web/components/feed/feed-comments.tsx index f4c6eb74..a0b5b9e4 100644 --- a/web/components/feed/feed-comments.tsx +++ b/web/components/feed/feed-comments.tsx @@ -29,7 +29,6 @@ import { LoadingIndicator } from 'web/components/loading-indicator' import { PaperAirplaneIcon } from '@heroicons/react/outline' import { track } from 'web/lib/service/analytics' import { useEvent } from 'web/hooks/use-event' -import { Tipper } from '../tipper' import { CommentTipMap, CommentTips } from 'web/hooks/use-tip-txns' import { useWindowSize } from 'web/hooks/use-window-size' @@ -189,7 +188,6 @@ export function FeedComment(props: { const { contract, comment, - tips, betsBySameUser, probAtCreatedTime, truncate, @@ -282,7 +280,6 @@ export function FeedComment(props: { shouldTruncate={truncate} /> - {onReplyClick && (