Commit Graph

236 Commits

Author SHA1 Message Date
Amy Wang 72723df9eb Add Fall 2022 hiring news (#482)
continuous-integration/drone/push Build is passing Details
Co-authored-by: Amy <a258wang@csclub.uwaterloo.ca>
Co-committed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-07-26 02:52:15 -04:00
Jared He f4fbfa254a Add events (#481)
continuous-integration/drone/push Build is passing Details
Co-authored-by: Jared He <66887902+jaredjhe@users.noreply.github.com>
Reviewed-on: #481
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
Co-authored-by: j285he <j285he@localhost>
Co-committed-by: j285he <j285he@localhost>
2022-07-24 22:27:28 -04:00
Amy Wang 0a30564750 Update team name to Community Representatives (#478)
continuous-integration/drone/push Build is passing Details
The "Community Coordinators", formerly the "Class Representatives", have requested to change their team name on the website to "Community Representatives".

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #478
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-07-20 20:09:10 -04:00
Raymond Li 7f9706a1b5 Update the MUA (#473)
continuous-integration/drone/push Build is passing Details
The CSC's Executive updated the Machine Usage Agreement on 10 July 2022.

The updates are as follows:
- A note was added that CSC Cloud resources fall under the same policies as the rest of CSC's machines and network.
- A note was added that the Systems Committee may delete CSC Cloud resources when their CSC account expires.
- A directive was added that all club reps read the Wiki page on Club Hosting when they become a club rep and then at least once a term for notices on that page.
- MFCF was replaced with CSCF (when the previous 2007 version was published, CSC had relations with MFCF instead of CSCF, which may not even have existed at the time. CSC now has relations with CSCF more than MFCF.)
- Various grammatical errors were corrected.

Note: Please do not merge this PR until 18 July 2022, to allow members time to receive the new version.

---

Update (@a3thakra) Adding the WIP label till to indicate that this shouldn't be merged. Feel free to remove it when you're ready.

Co-authored-by: Raymond Li <hi@raymond.li>
Reviewed-on: #473
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
Reviewed-by: Max Erenberg <merenber@csclub.uwaterloo.ca>
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-07-18 21:28:20 -04:00
Shahan Nedadahandeh 13c6a0fb91 Added afterhours event (#477)
continuous-integration/drone/push Build is passing Details
2022-07-13 03:44:02 -04:00
Amy Wang 0a3222a9ce Update Anton Mosunov Prof Talk room (#476)
continuous-integration/drone/push Build is passing Details
Update the room number and graphic

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #476
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-07-13 02:26:48 -04:00
Shahan Nedadahandeh e88283bc64 Added CTF and Code party events (#475)
continuous-integration/drone/push Build is passing Details
2022-07-11 03:36:26 -04:00
Amy Wang e7ca161e76 Fix Andrew Wang Photos (#471)
continuous-integration/drone/push Build is passing Details
We have an Andrew Wang on the Discord team, and a different Andrew Wang on Syscom. Previously, the Syscom Andrew Wang's photo was being used for both Andrews on the Meet the Team page. This PR fixes things to use the correct image for each Andrew.

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #471
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-06-29 00:42:46 -04:00
Amy Wang 14ef810ad9 Image Optimization - Create new ImagePool for each batch (#470)
continuous-integration/drone/push Build is passing Details
We have been having issues with the image optimization script consuming egregious amounts of memory and failing CI as a result.

This PR changes the script so that we use a new `ImagePool` to process each batch of images.

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #470
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-06-28 22:54:20 -04:00
Aditya Thakral 767e32511d Add some docs about architecture (#459)
continuous-integration/drone/push Build is passing Details
#128

Reviewed-on: #459
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-06-19 01:45:41 -04:00
Aditya Thakral 44af493832 Do not use index: as metadata for OrganizedContent (#468)
continuous-integration/drone/push Build is passing Details
@merenber recently merged this #462

It is a little annoying that we have to manually change the index in literally all the other unrelated files.

This PR introduces an ORDER.json file that orders the sections as an array.

Reviewed-on: #468
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-06-18 23:07:04 -04:00
Amy Wang 0f0a25596d Add temporary Eden blurb (#467)
continuous-integration/drone/push Build is passing Details
I asked Eden to write a blurb... he got this far.

Since this is still an improvement over "Coming Soon!", let's just update the site with this short blurb for now, and we can change it later.

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #467
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
Reviewed-by: j285he <j285he@localhost>
2022-06-17 21:26:18 -04:00
Jared He e1af564621 Redesign and update 'Meet the Team' data (#452)
continuous-integration/drone/push Build is passing Details
Closes #450. Closes #436.

Co-authored-by: Jared He <66887902+jaredjhe@users.noreply.github.com>
Reviewed-on: #452
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-06-17 19:53:13 -04:00
Max Erenberg d0cc21f406 Add section for cloud accounts (#462)
continuous-integration/drone/push Build is passing Details
We should let new and prospective members know that the CSC Cloud exists.

Reviewed-on: #462
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-06-15 00:19:25 -04:00
Shahan Nedadahandeh ad6e02685d Added code party scream event and csc update warning (#463)
continuous-integration/drone/push Build is passing Details
Co-authored-by: shahanneda <shahan.neda@gmail.com>
Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #463
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
Co-authored-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
Co-committed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-06-14 23:47:27 -04:00
Mark Chiu 07b4b77e0c Add Movie Night Event Spring 2022 (#460)
continuous-integration/drone/push Build is passing Details
Add CSC Soiree: Movie Night Event Spring 2022

Co-authored-by: Miniapple8888 <miniapple8888@gmail.com>
Reviewed-on: #460
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
2022-06-09 10:06:20 -04:00
Mark Chiu f631f4013f Implement dark theme (Closes #287) (#407)
continuous-integration/drone/push Build is passing Details
* The website will have a dark theme or a light theme depending on your OS preferences. You can still customize in the `themer` page to override some properties.
* A toggle button in the footer to toggle between light mode and dark mode.
* Added a "Reset to dark mode" button in the `themer` page.

Staging link: https://csclub.uwaterloo.ca/~a3thakra/csc/dark-theme/

Co-authored-by: Miniapple8888 <miniapple8888@gmail.com>
Reviewed-on: #407
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-06-08 08:45:28 -04:00
Amy Wang 443925190e Improve image optimization run-time and memory usage (#457)
continuous-integration/drone/push Build is passing Details
This PR aims to resolve the issues surrounding the optimize-images script, at least in the short term, in order to unblock other work.

**Problems:** Our optimize-images script was taking a very long time to run (~7 minutes in CI, when successful). This led to two problems:
1. It was near impossible to run the script locally.
2. CI jobs would often get killed on the optimize-images step.

**Solutions:**
1. Resize the images in `images/events` prior to optimizing them, similar to what is done for the images in `images/team`. This solution on its own reduced the run-time of the script to ~30 seconds locally on Amy's laptop, which is comparable to the run-time of the script back when it was originally written.
2. EDIT: Copy/resize/optimize the images in batches of 32 at a time. The reason why the CI job was being killed is because the script would run out of memory, however this change should resolve that while also keeping build times reasonable (~30 sec locally/when deploying on caffeine, ~3 min in CI). ~~As a temporary fix, this PR also replaces the images in `images/events` with their resized + optimized versions. (For some unknown reason, Solution 1 is not sufficient to solve Problem 2.)~~

This PR also adds some logging to the script so we can get a (slightly) better sense of where the script is getting stuck.

Related issue: #456

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #457
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-06-04 19:31:00 -04:00
Amy Wang e336bed2aa Add Haley's Blurb (#455)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #455
Reviewed-by: Shahan Neda <snedadah@csclub.uwaterloo.ca>
2022-06-01 21:17:49 -04:00
Raymond Li a2f0a20929 Update my blurb (#454)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #454
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-05-31 00:29:59 -04:00
Neil Parikh 49925d4cfa Bondfire date change (#453)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #453
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-05-26 22:08:39 -04:00
Shahan Nedadahandeh f12ffbb925 Add endDate to events (#446)
continuous-integration/drone/push Build is passing Details
Added endDate to events.
2022-05-25 20:58:12 -04:00
b38peng c665be281a Add Bondfire event (#447)
continuous-integration/drone/push Build was killed Details
Co-authored-by: Bonnie Peng <bonniepeng2002@gmail.com>
Co-authored-by: Aditya Thakral <a3thakra@csclub.uwaterloo.ca>
Reviewed-on: #447
Reviewed-by: Emily Chiu <e26chiu@csclub.uwaterloo.ca>
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
Co-authored-by: b38peng <b38peng@uwaterloo.ca>
Co-committed-by: b38peng <b38peng@uwaterloo.ca>
2022-05-23 02:47:00 -04:00
Amy Wang fac62e8772 Add Sat's blurb (#440)
continuous-integration/drone/push Build is passing Details
Staging: https://csclub.uwaterloo.ca/~a3thakra/csc/amy-add-sat-blurb/about/team
Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #440
Reviewed-by: Shahan Nedadahandeh <snedadah@csclub.uwaterloo.ca>
2022-05-18 22:48:40 -04:00
Amy Wang 0c94c4b3fb Add CxC Summit and Bonnie's exec blurb (#439)
continuous-integration/drone/push Build is passing Details
Also changed the spelling of a few things.

Staging: https://csclub.uwaterloo.ca/~a3thakra/csc/amy-events-cxc

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #439
Reviewed-by: Shahan Nedadahandeh <snedadah@csclub.uwaterloo.ca>
2022-05-13 23:07:14 -04:00
Aditya Thakral c395dcbcd6 Add myself as an alumni (#438)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #438
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-05-06 00:58:36 -04:00
Amy Wang a1f418e608 Fix Meet the Team page blurbs and exec images (#435)
continuous-integration/drone/push Build is passing Details
Removed old exec blurbs so Eden's role would be displayed correctly. Also updated Codey's blurb slightly, and fixed a bug where exec images would be squished instead of cropped.

Staging: https://csclub.uwaterloo.ca/~a3thakra/csc/amy-s22-delete-old-blurbs

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #435
Reviewed-by: Shahan Nedadahandeh <snedadah@csclub.uwaterloo.ca>
2022-05-05 22:47:44 -04:00
Amy Wang aece9ce761 Add S22 elections results (#433)
continuous-integration/drone/push Build is passing Details
Also added the BOT/Speed-friending/CSC Circles Intro event, and the Bootcamp event.

Staging: https://csclub.uwaterloo.ca/~a3thakra/csc/amy-news-2022-05-05
Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #433
Reviewed-by: Shahan Nedadahandeh <snedadah@csclub.uwaterloo.ca>
Reviewed-by: Emily Chiu <e26chiu@csclub.uwaterloo.ca>
2022-05-05 21:17:02 -04:00
Amy Wang 180622a71b Add Spring 2022 Elections (#432)
continuous-integration/drone/push Build is passing Details
I also added an announcement about the release of CSC cloud, and moved the Spring 2022 Bootcamp mentor application news to the appropriate folder.

Staging: https://csclub.uwaterloo.ca/~a3thakra/csc/amy-news-2022-05-02/

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #432
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
Co-authored-by: Amy <a258wang@csclub.uwaterloo.ca>
Co-committed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-05-03 20:44:58 -04:00
Amy Wang 7be1adb860 Add Spring 2022 Bootcamp mentor application news (#431)
continuous-integration/drone/push Build is passing Details
Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #431
Reviewed-by: Shahan Nedadahandeh <snedadah@csclub.uwaterloo.ca>
2022-05-02 02:18:53 -04:00
Amy Wang af69b0ab98 Update Get Involved page membership instructions (#429)
continuous-integration/drone/push Build is passing Details
Previously, the instructions for "Online Term" on the Get Involved page would be open by default. This PR changes the instructions for "In Person" to be open by default.

There are also some other small wording changes on the Get Involved page.

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #429
Reviewed-by: b38peng <b38peng@uwaterloo.ca>
2022-04-28 13:22:50 -04:00
Neil Parikh 419a3dd3c6 regen website
continuous-integration/drone/push Build is passing Details
2022-04-03 17:55:58 -04:00
Beihao Zhou 08405cabee Add EOT event (#421)
continuous-integration/drone/push Build is passing Details
Co-authored-by: Rebecca-Chou <beihaozhou@gmail.com>
Reviewed-on: #421
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-03-30 11:56:17 -04:00
Beihao Zhou 672a4ce013 s22-hiring-news (#420)
continuous-integration/drone/push Build is passing Details
Add spring 2022 hiring news

Co-authored-by: Rebecca-Chou <beihaozhou@gmail.com>
Reviewed-on: #420
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-03-29 12:53:03 -04:00
Shahan Nedadahandeh c13b6a98f9 Added custom 404 page (#410)
continuous-integration/drone/push Build is passing Details
Closes #282

demo: https://csclub.uwaterloo.ca/~a3thakra/csc/404page/404/
Co-authored-by: shahanneda <shahan.neda@gmail.com>
Reviewed-on: #410
Reviewed-by: j285he <j285he@localhost>
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-03-28 14:53:41 -04:00
Shahan Nedadahandeh 174ddff299 Addec unix101-1 recording to tech talks (#415)
continuous-integration/drone/push Build is passing Details
Added unix 101 event recording

Co-authored-by: shahanneda <shahan.neda@gmail.com>
Reviewed-on: #415
Reviewed-by: j285he <j285he@localhost>
2022-03-26 14:46:35 -04:00
Amy Wang e74e2279b4 Add Code Party Event (#419)
continuous-integration/drone/push Build is passing Details
Staging: https://csclub.uwaterloo.ca/~a3thakra/csc/amy-events-code-party-w22
Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #419
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
Co-authored-by: Amy <a258wang@csclub.uwaterloo.ca>
Co-committed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-03-25 02:07:13 -04:00
Jared He 0f1e8b7e81 Link from [term] to [term]/[event] (#412)
continuous-integration/drone/push Build is passing Details
Closes #189

https://csclub.uwaterloo.ca/~a3thakra/csc/j285he-term-to-term-event/events/

Co-authored-by: Jared He <66887902+jaredjhe@users.noreply.github.com>
Reviewed-on: #412
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
2022-03-23 20:23:21 -04:00
Jared He b0ca27416c Add Unix 101 FS/Perms & vim event (#416)
continuous-integration/drone/push Build is passing Details
Please confirm the time -- should it be 2-3pm EST or EDT?

Co-authored-by: Jared He <66887902+jaredjhe@users.noreply.github.com>
Reviewed-on: #416
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-03-23 13:25:25 -04:00
Beihao Zhou bb073136b0 Use LDAP API to fetch executive members' name (Closes #376) (#396)
continuous-integration/drone/push Build is passing Details
Co-authored-by: Rebecca-Chou <beihaozhou@gmail.com>
Reviewed-on: #396
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
2022-03-16 02:17:32 -04:00
Shahan Nedadahandeh dd911c12ea added Unix-101-1 event (#411)
continuous-integration/drone/push Build is passing Details
Co-authored-by: shahanneda <shahan.neda@gmail.com>
Reviewed-on: #411
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
2022-03-16 00:06:41 -04:00
Neil Parikh d85016e2cc Empty commit to regen website
continuous-integration/drone/push Build is passing Details
This will clear the old events from homepage and show the newer events.
2022-03-14 19:16:55 -04:00
Aditya Thakral 4982b86de9 Docs for how pages work (#391)
continuous-integration/drone/push Build was killed Details
#128

CI doesn't need to run/pass for this to be merged. No code changes.

Reviewed-on: #391
Reviewed-by: a258wang <a258wang@csclub.uwaterloo.ca>
Reviewed-by: j285he <j285he@localhost>
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
2022-03-10 02:47:15 -05:00
Beihao Zhou d04115fb12 Separate Teams on Meet the Team page (Close #346) (#404)
continuous-integration/drone/push Build is passing Details
Co-authored-by: Rebecca-Chou <beihaozhou@gmail.com>
Reviewed-on: #404
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
2022-03-09 10:03:26 -05:00
Amy Wang 328a2041fa Add Project Program Kick-off, Valentine's Day Speed-Friending, and Tesla Coffee Chat events (#408)
continuous-integration/drone/push Build is passing Details
Updated the website with some past and upcoming events.

All three Tesla coffee chat events are currently using the Autopilot Coffee Chat graphic, since different graphics do not exist for the Vehicle Software Systems and Vehicle Software Development coffee chats yet.

Co-authored-by: Amy <a258wang@uwaterloo.ca>
Reviewed-on: #408
Reviewed-by: n3parikh <n3parikh@csclub.uwaterloo.ca>
2022-03-08 17:15:50 -05:00
Mark Chiu 31c81f8620 Add Multiple News Items on Homepage and Single News Item Page (Closes #281) (#390)
continuous-integration/drone/push Build is passing Details
* 3 News items are displayed on the homepage (`MiniNewsCard` component)
* Single News item path: `/news/20xx/term/20xx-xx-xx` (`NewsCard` component)
	* Purple header for the date
    * News items of the same date are displayed on the same page

Co-authored-by: Miniapple8888 <miniapple8888@gmail.com>
Reviewed-on: #390
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-02-23 00:15:37 -05:00
Shahan Nedadahandeh bb78a3d53d Warning Header (Closes #205) (#394)
continuous-integration/drone/push Build is passing Details
Update:
In order to solve the issues discussed below, we decided to put the warnings in a json file, since they can be easily imported into a javascript file and webpack automatically bundles them with the client side app, so no static props is needed.

__________

To get the warning data, since it is something that needs to be on all pages, it makes sense for the component to go in the app.js file (similar to the nav bar). However, next.js has a cumbersome issue that it does not support getStaticProps in the app.ts file (and getStaticProps only works in page files), thus we have no way of requesting the warning data easily in the \<WarningHeader\> Component. (https://github.com/vercel/next.js/discussions/10949)

Here is my solution:
- Request the warning data on the client side through the use of an api.
    - I made a warning api (/api/currentWarning) which sends a json of the current warning
    - Advantage: warnings will always be up to date since it is recalculated on every request
    - Advantage: It can potentially incorporate with other CSC services who might need to know about the warning (eg linktree?)
    - Disadvantage: can get expensive if we have a lot of warnings, to fix this I can cache the current warning and only re-read the files every 24h if this is a problem, but if we don’t have that many warnings I think it should be fine
    - Disadvantage: listed below:

The current problem with what I implemented is that it doesn’t build in the production environment:
- The way we build the website, when we call “next export” that disables any api endpoints.
- According to this https://github.com/vercel/vercel/discussions/6551, if we want to allow api endpoints, we have to just do “next build”. This has implications that the site won’t be completely static anymore, but the other solutions also have similar problems  ( though the GitHub post says that next will still optimize for static with only next build).

Another advantage of allowing api’s is that maybe in the future we will implement other features where an api might be useful.

If you want to try it out, my branch works fine locally (when just running npm run dev or npm run build”)

Other possible solutions:
- Use getInitialProps inside _app.js, but this has the downside that it will “disable Automatic Static Optimization in pages without Static Generation.” (https://nextjs.org/docs/advanced-features/custom-app), which I believe will slow the whole site down, but, we will be able to still use the old build command I think, I am not sure of the full effect of this.
	- However, implementing this would also be relatively simple.

- Add the warning request to the getStaticProps of every single page, possibly through some wrapper component around every single page, this has the disadvantage that we need to do a lot of refactoring of all the pages of the site and cant use the intended “_app.ts” wrapper.

- Add warning header only to the homepage (or maybe one or two other important pages).

Co-authored-by: shahanneda <shahan.neda@gmail.com>
Reviewed-on: #394
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
2022-02-22 23:29:53 -05:00
Raymond Li 4aaa112822
Merge branch 'main' of csclub.uwaterloo.ca:www/www-new
continuous-integration/drone/push Build is passing Details
2022-02-14 22:11:06 -05:00
Raymond Li 17ff0e9b7a
Create SeshanRavikumar.jpg
continuous-integration/drone/push Build is passing Details
2022-02-14 17:44:22 -05:00
Raymond Li 73d88f5a46 Remove Paypal (#399)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #399
Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
Co-authored-by: Raymond Li <raymo@csclub.uwaterloo.ca>
Co-committed-by: Raymond Li <raymo@csclub.uwaterloo.ca>
2022-02-09 21:12:34 -05:00