26 Commits

Author SHA1 Message Date
65dc5991c0 feat: Reorganise assets
All checks were successful
Build Docker / BuildImage (push) Successful in 32s
2024-06-17 21:29:57 +10:00
05be03225d feat: Add now page for 17_06
All checks were successful
Build Docker / BuildImage (push) Successful in 53s
2024-06-17 16:59:12 +10:00
52dd703fa6 feat: Add new now page
All checks were successful
Build Docker / BuildImage (push) Successful in 40s
2024-06-06 21:00:15 +10:00
e40ec28509 fix: Set background to black on now pages
All checks were successful
Build Docker / BuildImage (push) Successful in 36s
2024-05-28 14:49:21 +10:00
1cb8f3ea65 fix: Remove old TOR hidden service header
All checks were successful
Build Docker / BuildImage (push) Successful in 59s
2024-05-28 14:40:21 +10:00
922a0f5d47 feat: Add now page for 28th May
Some checks failed
Build Docker / BuildImage (push) Has been cancelled
2024-05-28 14:39:42 +10:00
94c32a3b30 feat: Add new now page
All checks were successful
Build Docker / Build Image (push) Successful in 37s
2024-05-20 14:31:57 +10:00
3024c3de32 fix: Podcast urls being misread
All checks were successful
Build Docker / Build Image (push) Successful in 43s
2024-05-19 22:46:32 +10:00
d936a8f96b fix: Remove old podcast viewer
All checks were successful
Build Docker / Build Image (push) Successful in 31s
2024-05-19 22:37:13 +10:00
1eb32828ec feat: Add podcast xml
All checks were successful
Build Docker / Build Image (push) Successful in 50s
2024-05-19 22:05:03 +10:00
bf6236e60b feat: Add podcast home page
All checks were successful
Build Docker / Build Image (push) Successful in 50s
2024-05-19 21:53:10 +10:00
3bf9e043fe feat: Add sui
All checks were successful
Build Docker / Build Image (push) Successful in 1m19s
2024-04-25 10:51:38 +10:00
efc359459c feat: Add nostr.json route 2024-04-21 12:34:47 +10:00
095f74773c fix: Cleanup the ui for invalid cryptos 2024-04-19 20:23:22 +10:00
d58a6196eb feat: Add btc lightning to crypto options 2024-04-19 20:15:10 +10:00
a24a6b599e feat: Add near domain 2024-04-19 19:35:05 +10:00
f4409415d9 fix: Update now 2024-04-19 11:41:21 +10:00
d17b528baf feat: Add more coins 2024-04-19 11:28:11 +10:00
7f4f589d5b featL Add more coins and tokens and catch error with token 2024-04-16 12:56:16 +10:00
61d33381e8 feat: Add signal to socials list 2024-04-16 12:24:15 +10:00
3f1225a03a feat: Add more donation options 2024-04-15 21:01:43 +10:00
ad95fe796b feat: Add CORS
All checks were successful
Build Docker / Build Image (push) Successful in 42s
2024-02-28 17:36:18 +11:00
9e078387d8 feat: Add wvac logos
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2024-02-28 12:59:31 +11:00
fb81b24839 feat: Added now page for 25 Feb 24
All checks were successful
Build Docker / Build Image (push) Successful in 24s
2024-02-25 15:06:12 +11:00
f4295107a4 feat: Add now old page for previous now pages
All checks were successful
Build Docker / Build Image (push) Successful in 27s
2024-02-23 21:19:00 +11:00
35e4ae222c feat: Add date to now page 2024-02-23 17:27:43 +11:00
137 changed files with 2003 additions and 3348 deletions

1
.gitignore vendored
View File

@@ -2,3 +2,4 @@
__pycache__/
.env
.vs/

View File

@@ -1,6 +0,0 @@
{
"ExpandedNodes": [
""
],
"PreviewInSolutionExplorer": false
}

Binary file not shown.

View File

@@ -0,0 +1,27 @@
{
"ADA": "Cardano (ADA)",
"ATOM": "Cosmos (ATOM)",
"AVAX": "Avalanche (AVAX)",
"BNB": "Binance (BNB)",
"BTC": "Bitcoin (BTC)",
"CRO": "Crypto.com (CRO)",
"DOT": "Polkadot (DOT)",
"ETH": "Ethereum (ETH)",
"HNS": "Handshake (HNS)",
"MATIC": "Polygon (MATIC)",
"SOL": "Solana (SOL)",
"XMR": "Monero (XMR)",
"XRP": "Ripple (XRP)",
"OSMO": "Osmosis (OSMO)",
"STARS": "Stargaze (STARS)",
"INJ": "Injective (INJ)",
"LIKE": "LikeCoin (LIKE)",
"SCRT": "Secret Network (SCRT)",
"LTC": "Litecoin (LTC)",
"DOGE": "Dogecoin (DOGE)",
"ALGO": "Algorand (ALGO)",
"TON": "Toncoin (TON)",
"OP": "Optimism (OP)",
"IAA": "IRIS (IAA)",
"NEAR": "NEAR Protocol (NEAR)"
}

View File

@@ -0,0 +1,32 @@
{
"ETH":"woodburn.au",
"HNS":"woodburn",
"SOL":"woodburn.sol",
"ADA": "$nathanwoodburn",
"MATIC": "woodburn.au",
"BNB": "woodburn.au",
"INJ": "woodburn.sol",
"ATOM": "woodburn_nathan.cosmos",
"OSMO": "woodburn_nathan.osmo",
"SCRT": "woodburn_nathan.secret",
"AKASH": "woodburn_nathan.akash",
"SIF": "woodburn_nathan.sif",
"SHENTU": "woodburn_nathan.shentu",
"IAA": "woodburn_nathan.iaa",
"REGEN": "woodburn_nathan.regen",
"PERSISTENCE": "woodburn_nathan.persistence",
"BOSTROM": "woodburn_nathan.bostrom",
"JUNO": "woodburn_nathan.juno",
"AXELAR": "woodburn_nathan.axelar",
"SOMM": "woodburn_nathan.somm",
"UMEE": "woodburn_nathan.umee",
"GRAVITY": "woodburn_nathan.gravity",
"STRIDE": "woodburn_nathan.stride",
"KAVA": "woodburn_nathan.kava",
"QUICK": "woodburn_nathan.quick",
"TERRA": "woodburn_nathan.terra",
"OMNIFLIX": "woodburn_nathan.omniflix",
"LIKE": "woodburn_nathan.like",
"CHIHUAHUA": "woodburn_nathan.chihuahua",
"NEAR": "woodburn.near"
}

View File

@@ -0,0 +1,68 @@
[
{
"symbol": "USDT",
"name": "Tether",
"chain": "ETH"
},
{
"symbol": "USDT",
"name": "Tether",
"chain": "SOL"
},
{
"symbol": "USDC",
"name": "USDC",
"chain": "ETH"
},
{
"symbol": "USDC",
"name": "USDC",
"chain": "SOL"
},
{
"symbol": "WDBRN",
"name": "Woodburn",
"chain": "SOL"
},
{
"symbol": "DAI",
"name": "DAI Stablecoin",
"chain": "ETH"
},
{
"symbol": "RAY",
"name": "Raydium",
"chain": "SOL"
},
{
"symbol": "UNI",
"name": "Uniswap",
"chain": "ETH"
},
{
"symbol": "AAVE",
"name": "AAVE",
"chain": "ETH"
},
{
"symbol": "1INCH",
"name": "1INCH",
"chain": "ETH"
},
{
"symbol": "PSP",
"name": "ParaSwap",
"chain": "ETH"
},
{
"symbol": "CAKE",
"name": "PancakeSwap",
"chain": "BNB"
},
{
"symbol": "BTC",
"name": "Bitcoin Lightning",
"chain": "null",
"address": "hushedmercury55@walletofsatoshi.com"
}
]

1
.well-known/wallets/ADA Normal file
View File

@@ -0,0 +1 @@
addr1qyudjff2lfuxjjjfz0y542drw4srxq2xxtgrq22vm8ymvwwagq028esaz4rsexct8zzsuds29e03eaykahlvhdx0k9es4gnk27

View File

@@ -0,0 +1 @@
akash1ugraczuyfmxy8k38nps4fu7e5derryzxpk2n77

1
.well-known/wallets/ALGO Normal file
View File

@@ -0,0 +1 @@
OUWNGLRLAN56VTNI3F4EKISPDIFIF2HMCV3OYS3DER7WXF2LCFMEV2TWPI

1
.well-known/wallets/ATOM Normal file
View File

@@ -0,0 +1 @@
cosmos1ugraczuyfmxy8k38nps4fu7e5derryzxvd858y

1
.well-known/wallets/AVAX Normal file
View File

@@ -0,0 +1 @@
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e

View File

@@ -0,0 +1 @@
axelar1ugraczuyfmxy8k38nps4fu7e5derryzxgr3uv9

1
.well-known/wallets/BNB Normal file
View File

@@ -0,0 +1 @@
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e

View File

@@ -0,0 +1 @@
bostrom1ugraczuyfmxy8k38nps4fu7e5derryzx07n8er

View File

@@ -0,0 +1 @@
chihuahua1ugraczuyfmxy8k38nps4fu7e5derryzx0c26xx

1
.well-known/wallets/DOGE Normal file
View File

@@ -0,0 +1 @@
DCrBQ3zoy3jBWwwT95tyjBVjYFXLgKS4MC

1
.well-known/wallets/DOT Normal file
View File

@@ -0,0 +1 @@
13KSjM7rxFu7SxAuqcNZ76wyjhfuV4Kx8pWfqpFAykSQeEn3

1
.well-known/wallets/EOS Normal file
View File

@@ -0,0 +1 @@
nwoodburn111

View File

@@ -0,0 +1 @@
gravity1ugraczuyfmxy8k38nps4fu7e5derryzxga4vzv

1
.well-known/wallets/IAA Normal file
View File

@@ -0,0 +1 @@
iaa1ugraczuyfmxy8k38nps4fu7e5derryzxe08994

1
.well-known/wallets/INJ Normal file
View File

@@ -0,0 +1 @@
inj1dj6t8xlvyw5jrjdzp5rphutageqtp5u7wflgv9

1
.well-known/wallets/JUNO Normal file
View File

@@ -0,0 +1 @@
juno1ugraczuyfmxy8k38nps4fu7e5derryzx6ly0qc

1
.well-known/wallets/KAVA Normal file
View File

@@ -0,0 +1 @@
kava1ugraczuyfmxy8k38nps4fu7e5derryzxscnf3r

1
.well-known/wallets/LIKE Normal file
View File

@@ -0,0 +1 @@
like1ugraczuyfmxy8k38nps4fu7e5derryzxl3mkyl

1
.well-known/wallets/LTC Normal file
View File

@@ -0,0 +1 @@
ltc1qx79yxm2gwnsrch925343hg3zt3r085x725a0tw

1
.well-known/wallets/NEAR Normal file
View File

@@ -0,0 +1 @@
3b06b5e91361739aed92707e888fbbd33f97b24a8a3f8fdd54a2c7e7fd7082a3

View File

@@ -0,0 +1 @@
omniflix1ugraczuyfmxy8k38nps4fu7e5derryzx3nkds6

1
.well-known/wallets/OP Normal file
View File

@@ -0,0 +1 @@
0x6cB4B39bEc23a921C9a20D061Bf17d4640B0d39e

1
.well-known/wallets/OSMO Normal file
View File

@@ -0,0 +1 @@
osmo1ugraczuyfmxy8k38nps4fu7e5derryzxyk5y3k

View File

@@ -0,0 +1 @@
persistence1ugraczuyfmxy8k38nps4fu7e5derryzxzpp8fq

View File

@@ -0,0 +1 @@
quick1ugraczuyfmxy8k38nps4fu7e5derryzx8fhx7k

View File

@@ -0,0 +1 @@
regen1ugraczuyfmxy8k38nps4fu7e5derryzxn0vg3q

1
.well-known/wallets/SCRT Normal file
View File

@@ -0,0 +1 @@
secret1ugraczuyfmxy8k38nps4fu7e5derryzxwgna6c

1
.well-known/wallets/SENT Normal file
View File

@@ -0,0 +1 @@
sent1ugraczuyfmxy8k38nps4fu7e5derryzxhk3drt

View File

@@ -0,0 +1 @@
shentu1ugraczuyfmxy8k38nps4fu7e5derryzxyerd4e

1
.well-known/wallets/SIF Normal file
View File

@@ -0,0 +1 @@
sif1ugraczuyfmxy8k38nps4fu7e5derryzxfsgzg0

1
.well-known/wallets/SOMM Normal file
View File

@@ -0,0 +1 @@
somm1ugraczuyfmxy8k38nps4fu7e5derryzxq3gckw

View File

@@ -0,0 +1 @@
stars1ugraczuyfmxy8k38nps4fu7e5derryzxc3sfv4

View File

@@ -0,0 +1 @@
stride1ugraczuyfmxy8k38nps4fu7e5derryzx0x8gng

1
.well-known/wallets/SUI Normal file
View File

@@ -0,0 +1 @@
0x9e14ca8b9bf9661fd8a67c2c147bb1f7ea81eb38eb10938b6a9cecb54419e3b2

View File

@@ -0,0 +1 @@
terra1ugraczuyfmxy8k38nps4fu7e5derryzx2fa59y

1
.well-known/wallets/TON Normal file
View File

@@ -0,0 +1 @@
UQAtpYb-yOaTSA40mJRvUxKv1WVeIPi-g_4Jqn0oWYypsQIf

1
.well-known/wallets/UMEE Normal file
View File

@@ -0,0 +1 @@
umee1ugraczuyfmxy8k38nps4fu7e5derryzx7m6trk

1
.well-known/wallets/XRP Normal file
View File

@@ -0,0 +1 @@
rKzdnYvwDyeki5VCgMwjuofjBjAbg3DJnB

View File

@@ -1 +0,0 @@
include: [".well-known"]

50
data/ascii.txt Normal file
View File

@@ -0,0 +1,50 @@
KK00000OOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOOOOOOO00000KXKKK000K0K000KKK0000OkkxxxxdddddddxxxxkOOOO
KKKKK00OkkkkkkkkkkkkkkkkkkkkkOOOOkkkkkkkkkkOOkkkkkOOO0000OOO0OOOOOkkkkOOkkkkxddddddooooooooddddddxxk
XKKKK0OOkkkxxxxxxxxxxkkkkkkkkO0OOkkkxxxxxxxxxxxxxxxxxkkkxxxxxxxxxxxxddddddoooooolllllllloooooooooooo
KK00OOOkkkkkkkkkkkkkkkkkkkxxxxxxxxxxddddddookxooooooodddddddoooooodooooollllllllllllllllllllllllllll
KK000OOOOkkkkkkkkkkkkxkxxxxxxxxxxddddooooooooooooooooooooooooolloooollllllllllllllllllllllllllllllll
XKKKKK000OOOOOOOOkkkkkkkxxxxddddddddoooooooooooooooooooooooooolloollllllllllllllllllllllllllllllllll
NXXXKKKK00000KKKKK00KKK0Okkkkxxxxxdddddddddddddddoooooooooooooooooooooooooooollllllloooooooooooooooo
XXXXXXXXXXXXXXXXXKK00OOddkOK000OOOkkxxxxxxxxxxxxxxxxxxdddddddddddxxxxxxxxxxxxdxxxxxxxkkkkkkkkkOOOkkk
XXXXXXXXXXXXK0kxdlcll::codxk00kOOOOOkkkkkkkkkkkkxxkkkkkkkkkOOOO00KKKKKXXXXXXXKXXKKKKKXKKK0000OOkkkkk
NNNNNNNNXK0Oxdo:;::;,''';oO:;dOx0KKKKKKKK000NK0000000KKKKKKKKXXXXXXXXXXXXXXXXXXNXKKKKK00OOOOOOOOOO00
d0XXNNNKOkoc,,;::;'..';:,l;.',::d0KKKKKKKKKKXKKXXXXXXKKKKKK0000000OOOO000O0000K0000KKKK000000000KKKX
;lk0k0XKdc:,,,..........,.....'::o0O0KKKKKKKXXXXXXKKXXKKKK000OOOOOOOOOOOOOOOOOO000000000OOOOOOOOOOOO
',;;;ckx;'.,,..'.....  ........'cldOOKXXXXXXXXXKKKKKKKKKKXK0000000000000000KKKKKKKKKK00000000OOOOOOO
.''',cx:','........   .....,'...,:coox0000000000000000000KK0OOOOOOOOOOOOOOO000000000OOOO0OOOOOOOOOOO
....';,.......... .   ..'.'cll....':odO00000KKKKKKKKKKKKKKKKKKKKKKK000K0000000000000000000000000X0Ok
',,;,'.........' .:. ':';.llodd....''lkKKKKKKKKKKKKKKKKKKKKKKKKKKXXXKKKKKKKKKKKKKKXXXXXXXXK0Okxddood
'';cc:'...x;c;;:,::'.::;;':cldxl....;x0000000000KKKKKKKKKKKKKKXXXKKKKKKKKKKK0Okkxxxxxxxxxdoooooooooo
.'';,,;..,0o;;,'..,:;:,''.',;:od,..,o00000000KKKKKKKKKKKKK0OOkkxdddxxxkkOkxdddddddddoooooooooooooooo
....''':';Kd:;'',;;;::::,;'..;od:.ldOKKKKK000OOkkkkkkkkxxddddddddddddddddddddddooooooooooooooooollll
.......lx:X0kxxddool:cccccccllooc;lkOkxxxxddddddxdddddddddddddddddddddddddoooooooooooooooooooollllll
......'lxoK0kkkkxxOoccccclllllool;lxxddddccloodkO0000OOkdoodddxddodooodddooooooooooddddooooollllllll
....';:::okKOkkkkxocc:llllllllolodddddc,,cl,ccc:;,;:cllclooolc;:ccodxxdoooooooooddddooolllllllllllll
...'''',,';O0OOOkkxoccccllllool'l,oddc.;,'  ';:cloooddooooddddxxxdlc:::cooloddddddoolllllllllllllllc
.....''....,00Oklcoddol:,coool;lOcoo: .     ....',::'......'',;:loooooo,'c.looooooloolllllllclllcccc
.........''',x0OOkxolclllool:,ckOoc,           ......:dxo;,,'....';;;,,;....oolllllllllllllccccccccc
.',.. .,;:ll:;coOkkxdooolc;',;lkOxc..            ...c0xo'.......',,,,,'''....kollllllllllllccccccccc
.. .  ..,,,,::lc:cloolc;'.,::;okkkcc'.         ...'oKx;..''.'... ...........':kolllllllccccccocccc::
...',,,,,c;.',,:ko:.....,:ccc:odkOkxl,.         .'xOc'........'..  .        ..;xllllccccccccccccc:::
:;c;;,,,',:cccccoxdl,.';:cccccolokOk0XXxOlc''. ..co:.         ....;.          ..ccccccccccc:ccc:::::
,,,,,,';,;;;;;;::dxdo;,:cccccllccdkkOOdlx:c:oddlcll..          ...:...  ........:llllllcccccc::::::c
','''''',..'..,oxlodolc:::cccllllloxdl::;...;;:cc::,            ..;..'...... ..'clllccccccccc:c:::::
..'........,lddckx;llcc::::clcooolcccllc;....',,,'cOOxl;.        .,.',',,'.. ..cllllcccc::cc:o::::::
..'.....'okxl:;dNoolcc::::cllllllc::c::;,......'..lkKNNNNkc.      ....,,;:;;,':clccccccc::c:::::::::
'''...'ldl:,..cNOxkxoll::coloxkOOd:::cc,'....'''..:clokO0OK0l         ..'.';;c:ccccccc:::l::::::::::
.''.:kx:;'.. .Xk;:xKKkddoddkOOOxl:::cll,'.. ......,:cccloxxkKk          ....''::ccc:::::::::::::::::
..,k0l'..... 'xo;,;okkxxxkOOkdlccc:::cl,'.   ..   .::::cclooxNd    . ..........,:ccccclccclllloooodd
.;0kl......  'dl;;;::ldkkxdl::cccc:::cl;,.   .... .,;,:::ccloONl   '......,;,,..lloodddddodooooooddx
.kxo, .....  'oc;;;:::::,,,,;ccccc::::cc,.   ...   '',;;;::cld0N.  ,.......,,c:,ddddddoooooooooooddd
'kl:' .....  ,l:;;;:::c:,,,;cccccc::::;:;.    ..   ..,;,;;::clx0x .''.......,;:ddddooodddddooooooodd
,o:;'    .  .;c::;;;c:::;,,;cccc:c:clc:l;'   .....  .,,,,;;::cxx0  ';'.......,;coooddxxxdddodddddxxx
l::;' ...   .;::::;;::::;,,:ccc::c:colol:;          .',',,;;;:oxd; .;''.......;..;oxxxxxxxdxxxdooool
l:;,, ..    .,;;:::;::;:,,;:ccc;:::;;:;;lc.          .''',,;;:lxod  ,.''......,o;..coddddddddollcccc
;c','.      .',;;:::::;;,,,:cc;;:::;:c,;:c'.         ...',,;,;:ooo; '..''......ddo:.ddolllcccccccccc
:l,.'.      '',;;;::::;,,,,;::,;;,,':;',;l,          ....,,,,,;:dld '..''....'.:xdd.dxdddddooollllcl
cc:...      .'',;;;:::;,,,,;:;,,,:;;;,;;;:'..         ...,,,,,,;olo,'....'....''xc.:dddolooodoooodoo
l:l,......  .''';;,;;:;,''',;''';;;,;',','.      ..   ..,,,',,,;lolc. ........''..;llcllcllodddddood
;co:'.       ...',,,,;;;''',,'....,,,,'.,;... ..       .,,''',,;:dld.    ...  ..'occcllclllooddddddd
..:;;....     ...'''',;;,''''....',...''.,.....        .,'''',;;;olx      ..   . :c,';::clooooooddoo
,;;c,,...      '..'''',cl'.''....;..',..';.. ...       .''''',;;;olo,. ..'......'':,;,',,;:::ccllloo
.',o,;....      ..'''.',''..'....';,'. . ..  ...       .'''',;;;;llcl......''.....,.,,,;;,,',;clllod

50
data/sites.json Normal file
View File

@@ -0,0 +1,50 @@
[
{
"url": "https://nathan3dprinting.au",
"img": "/assets/img/external/nathan3dprinting.webp",
"name": "Nathan 3D Printing",
"description": "Offering 3D Printing and CAD modelling services to the Canberra region"
},
{
"url": "https://domains.hns.au",
"img": "/assets/img/external/HNSAU.webp",
"name": "HNSAU Registry",
"description": "An easy to use DNS provider and domain reselling platform"
},
{
"url": "https://hns.au",
"img": "/assets/img/external/HNSAU.webp",
"name": "HNSAU",
"description": "The group for Handshake enthusiasts in Australia"
},
{
"url": "https://hnshosting.au",
"img": "/favicon.png",
"name": "HNS Hosting",
"description": "Simple Wordpress hosting for Handshake domains with builtin SSL using DANE"
},
{
"url": "https://firewallet.au",
"img": "/assets/img/external/firewallet.png",
"name": "FireWallet",
"description": "An opensource Handshake wallet that is Fire!"
},
{
"url": "https://shakecities.com",
"img": "/assets/img/external/HNSW.png",
"name": "ShakeCities",
"description": "A single page website creator where each user's page on their free HNS domain"
},
{
"url": "https://git.woodburn.au",
"img": "/favicon.png",
"name": "Git Server",
"description": "Selfhosted Git server to host my repos with custom hosted CI/CD"
},
{
"url": "https://linkr",
"img": "/favicon.png",
"name": "LINKR/",
"description": "A free link shortener with a Handshake TLD and using DNS for authentication"
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,8 @@
flask
Flask-Cors
python-dotenv
gunicorn
requests
cloudflare
qrcode
ansi2html

308
server.py
View File

@@ -1,20 +1,29 @@
from flask import Flask, make_response, redirect, request, jsonify, render_template, send_from_directory
import json
from flask import Flask, make_response, redirect, request, jsonify, render_template, send_from_directory, send_file
from flask_cors import CORS
import os
import dotenv
import requests
import CloudFlare
import datetime
import qrcode
import re
from ansi2html import Ansi2HTMLConverter
app = Flask(__name__)
CORS(app)
dotenv.load_dotenv()
address = ''
handshake_scripts = '<script src="https://nathan.woodburn/handshake.js" domain="nathan.woodburn" async></script><script src="https://nathan.woodburn/https.js" async></script>'
# Custom header
def add_custom_header(response):
response.headers['Onion-Location'] = 'http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion/'
return response
app.after_request(add_custom_header)
restricted = ['ascii']
sites = []
if os.path.isfile('data/sites.json'):
with open('data/sites.json') as file:
sites = json.load(file)
#Assets routes
@@ -43,15 +52,11 @@ def sitemap():
@app.route('/favicon.png')
def faviconPNG():
return send_from_directory('templates/assets/img', 'android-chrome-512x512.png')
@app.route('/favicon.ico')
def favicon():
return send_from_directory('templates/assets/img', 'favicon.ico')
return send_from_directory('templates/assets/img/favicon', 'favicon.png')
@app.route('/favicon.svg')
def faviconSVG():
return send_from_directory('templates/assets/img', 'favicon.svg')
return send_from_directory('templates/assets/img/favicon', 'favicon.svg')
@app.route('/https.js')
@app.route('/handshake.js')
@@ -80,21 +85,62 @@ def wallet(path):
resp.set_cookie('HNS', address, max_age=604800)
return resp
return send_from_directory('.well-known/wallets', path, mimetype='text/plain')
if path[0] == ".":
return send_from_directory('.well-known/wallets', path, mimetype='application/json')
elif os.path.isfile('.well-known/wallets/' + path):
address = ''
with open('.well-known/wallets/' + path) as file:
address = file.read()
address = address.strip()
return make_response(address, 200, {'Content-Type': 'text/plain'})
if os.path.isfile('.well-known/wallets/' + path.upper()):
return redirect('/.well-known/wallets/' + path.upper(), code=302)
return render_template('404.html'), 404
@app.route('/.well-known/nostr.json')
def nostr():
# Get name parameter
name = request.args.get('name')
if not name:
return jsonify({'error': 'No name provided'})
return jsonify({
'names': {
name: 'b57b6a06fdf0a4095eba69eee26e2bf6fa72bd1ce6cbe9a6f72a7021c7acaa82'
}
})
# Main routes
@app.route('/')
def index():
# Check if host if podcast.woodburn.au
if "podcast.woodburn.au" in request.host:
return render_template('podcast.html')
# Check if cookie is set
if not request.cookies.get('loaded'):
# Set cookie
resp = make_response(render_template('loading.html'), 200, {'Content-Type': 'text/html'})
resp.set_cookie('loaded', 'true', max_age=604800)
return resp
global address
global handshake_scripts
try:
git=requests.get('https://git.woodburn.au/api/v1/users/nathanwoodburn/activities/feeds?only-performed-by=true&limit=1&token=' + os.getenv('git_token'))
git = git.json()
git = git[0]
repo_name=git['repo']['name']
repo_name=repo_name.lower()
repo_description=git['repo']['description']
except:
repo_name = "nathanwoodburn.github.io"
repo_description = "Personal website"
git = {'repo': {'html_url': 'https://nathan.woodburn.au', 'name': 'nathanwoodburn.github.io', 'description': 'Personal website'}}
custom = ""
# Check for downtime
@@ -115,20 +161,19 @@ def index():
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
if request.cookies.get('HNS'):
return render_template('index.html', handshake_scripts=handshake_scripts, HNS=request.cookies.get('HNS'), repo=repo, repo_description=repo_description, custom=custom)
return render_template('index.html', handshake_scripts=handshake_scripts, HNS=request.cookies.get('HNS'), repo=repo, repo_description=repo_description, custom=custom,sites=sites)
if address == '':
address = getAddress()
# Set cookie
resp = make_response(render_template('index.html', handshake_scripts=handshake_scripts, HNS=address, repo=repo, repo_description=repo_description, custom=custom), 200, {'Content-Type': 'text/html'})
resp = make_response(render_template('index.html', handshake_scripts=handshake_scripts, HNS=address, repo=repo, repo_description=repo_description, custom=custom,sites=sites), 200, {'Content-Type': 'text/html'})
# Cookie should last 1 week
resp.set_cookie('HNS', address, max_age=604800)
return resp
@app.route('/now')
@app.route('/now/')
def now():
global handshake_scripts
@@ -139,10 +184,198 @@ def now():
# Get latest now page
files = os.listdir('templates/now')
# Remove template
files = [file for file in files if file != 'template.html']
files = [file for file in files if file != 'template.html' and file != 'old.html']
files.sort(reverse=True)
return render_template('now/' + files[0], handshake_scripts=handshake_scripts)
date = files[0].strip('.html')
# Convert to date
date = datetime.datetime.strptime(date, '%y_%m_%d')
date = date.strftime('%A, %B %d, %Y')
return render_template('now/' + files[0], handshake_scripts=handshake_scripts, DATE=date)
@app.route('/now/<path:path>')
def now_path(path):
global handshake_scripts
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
date = path
date = date.strip('.html')
try:
# Convert to date
date = datetime.datetime.strptime(date, '%y_%m_%d')
date = date.strftime('%A, %B %d, %Y')
except:
date = ""
if path.lower().replace('.html','') == 'template':
return render_template('404.html'), 404
# If file exists, load it
if os.path.isfile('templates/now/' + path):
return render_template('now/' + path, handshake_scripts=handshake_scripts, DATE=date)
if os.path.isfile('templates/now/' + path + '.html'):
return render_template('now/' + path + '.html', handshake_scripts=handshake_scripts, DATE=date)
return render_template('404.html'), 404
@app.route('/old')
@app.route('/old/')
@app.route('/now/old')
@app.route('/now/old/')
def now_old():
global handshake_scripts
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
now_pages = os.listdir('templates/now')
now_pages = [page for page in now_pages if page != 'template.html' and page != 'old.html']
now_pages.sort(reverse=True)
html = '<ul class="list-group">'
latest = " (Latest)"
for page in now_pages:
link = page.strip('.html')
date = datetime.datetime.strptime(link, '%y_%m_%d')
date = date.strftime('%A, %B %d, %Y')
html += f'<a style="text-decoration:none;" href="/now/{link}"><li class="list-group-item" style="background-color:#000000;color:#ffffff;">{date}{latest}</li></a>'
latest = ""
html += '</ul>'
return render_template('now/old.html', handshake_scripts=handshake_scripts,now_pages=html)
@app.route('/donate')
def donate():
global handshake_scripts
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
coinList = os.listdir('.well-known/wallets')
coinList = [file for file in coinList if file[0] != '.']
coinList.sort()
tokenList = []
with open('.well-known/wallets/.tokens') as file:
tokenList = file.read()
tokenList = json.loads(tokenList)
coinNames = {}
with open('.well-known/wallets/.coins') as file:
coinNames = file.read()
coinNames = json.loads(coinNames)
coins = ''
default_coins = ['btc', 'eth', 'hns','sol','bnb','xrp','ada']
for file in coinList:
if file in coinNames:
coins += f'<a class="dropdown-item" style="{"display:none;" if file.lower() not in default_coins else ""}" href="?c={file.lower()}">{coinNames[file]}</a>'
else:
coins += f'<a class="dropdown-item" style="{"display:none;" if file.lower() not in default_coins else ""}" href="?c={file.lower()}">{file}</a>'
for token in tokenList:
if token["chain"] != 'null':
coins += f'<a class="dropdown-item" style="display:none;" href="?t={token["symbol"].lower()}&c={token["chain"].lower()}">{token["name"]} ({token["symbol"] + " on " if token["symbol"] != token["name"] else ""}{token["chain"]})</a>'
else:
coins += f'<a class="dropdown-item" style="display:none;" href="?t={token["symbol"].lower()}&c={token["chain"].lower()}">{token["name"]} ({token["symbol"] if token["symbol"] != token["name"] else ""})</a>'
crypto = request.args.get('c')
if not crypto:
instructions = '<br>Donate with cryptocurrency:<br>Select a coin from the dropdown above.'
return render_template('donate.html', handshake_scripts=handshake_scripts, coins=coins,default_coins=default_coins, crypto=instructions)
crypto = crypto.upper()
token = request.args.get('t')
if token:
token = token.upper()
for t in tokenList:
if t['symbol'].upper() == token and t['chain'].upper() == crypto:
token = t
break
if not isinstance(token, dict):
token = {
"name": "Unknown token",
"symbol": token,
"chain": crypto
}
address = ''
domain = ''
cryptoHTML = ''
if os.path.isfile(f'.well-known/wallets/{crypto}'):
with open(f'.well-known/wallets/{crypto}') as file:
address = file.read()
if not token:
cryptoHTML += f'<br>Donate with {coinNames[crypto] if crypto in coinNames else crypto}:'
else:
cryptoHTML += f'<br>Donate with {token["name"]} {"("+token["symbol"]+") " if token["symbol"] != token["name"] else ""}on {crypto}:'
cryptoHTML += f'<code data-bs-toggle="tooltip" data-bss-tooltip="" id="crypto-address" class="address" style="color: rgb(242,90,5);display: block;" data-bs-original-title="Click to copy">{address}</code>'
elif token:
if 'address' in token:
address = token['address']
cryptoHTML += f'<br>Donate with {token["name"]} {"("+token["symbol"]+")" if token["symbol"] != token["name"] else ""}{" on "+crypto if crypto != "NULL" else ""}:'
cryptoHTML += f'<code data-bs-toggle="tooltip" data-bss-tooltip="" id="crypto-address" class="address" style="color: rgb(242,90,5);display: block;" data-bs-original-title="Click to copy">{address}</code>'
else:
cryptoHTML += f'<br>Invalid coin: {crypto}<br>'
else:
cryptoHTML += f'<br>Invalid coin: {crypto}<br>'
if os.path.isfile(f'.well-known/wallets/.domains'):
# Get json of all domains
with open(f'.well-known/wallets/.domains') as file:
domains = file.read()
domains = json.loads(domains)
if crypto in domains:
domain = domains[crypto]
cryptoHTML += '<br>Or send to this domain on compatible wallets:<br>'
cryptoHTML += f'<code data-bs-toggle="tooltip" data-bss-tooltip="" id="crypto-domain" class="address" style="color: rgb(242,90,5);display: block;" data-bs-original-title="Click to copy">{domain}</code>'
if address:
cryptoHTML += '<img src="/qrcode/' + address + '" alt="QR Code" style="width: 100%; max-width: 200px; margin: 20px auto;">'
copyScript = '<script>document.getElementById("crypto-address").addEventListener("click", function() {navigator.clipboard.writeText(this.innerText);this.setAttribute("data-bs-original-title", "Copied!");});document.getElementById("crypto-domain").addEventListener("click", function() {navigator.clipboard.writeText(this.innerText);this.setAttribute("data-bs-original-title", "Copied!");});</script>'
cryptoHTML += copyScript
return render_template('donate.html', handshake_scripts=handshake_scripts, crypto=cryptoHTML, coins=coins,default_coins=default_coins)
@app.route('/qrcode/<path:data>')
def addressQR(data):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
qr_image = qr.make_image(fill_color="#110033", back_color="white")
# Save the QR code image to a temporary file
qr_image_path = "/tmp/qr_code.png"
qr_image.save(qr_image_path)
# Return the QR code image as a response
return send_file(qr_image_path, mimetype="image/png")
@app.route('/supersecretpath')
def supersecretpath():
ascii_art = ''
if os.path.isfile('data/ascii.txt'):
with open('data/ascii.txt') as file:
ascii_art = file.read()
converter = Ansi2HTMLConverter()
ascii_art_html = converter.convert(ascii_art)
return render_template('ascii.html', ascii_art=ascii_art_html)
@app.route('/<path:path>')
def catch_all(path):
@@ -150,6 +383,9 @@ def catch_all(path):
# If localhost, don't load handshake
if request.host == "localhost:5000" or request.host == "127.0.0.1:5000" or os.getenv('dev') == "true" or request.host == "test.nathan.woodburn.au":
handshake_scripts = ""
if path.lower().replace('.html','') in restricted:
return render_template('404.html'), 404
# If file exists, load it
if os.path.isfile('templates/' + path):
return render_template(path, handshake_scripts=handshake_scripts)
@@ -158,13 +394,15 @@ def catch_all(path):
if os.path.isfile('templates/' + path + '.html'):
return render_template(path + '.html', handshake_scripts=handshake_scripts)
if os.path.isfile('templates/' + path.strip('/') + '.html'):
return render_template(path.strip('/') + '.html', handshake_scripts=handshake_scripts)
return render_template('404.html'), 404
def getAddress():
global address
if address == '':
address = 'hs1qv3uu4amv87g7p7h49xez2pmzwjf92am0wzpnh4'
# address = requests.get('http://hip02-server:3000').text?
return address
@@ -199,6 +437,36 @@ def hnsdoh_acme():
print(record)
return jsonify({'status': 'success'})
@app.route('/ID1')
def ID1():
# Proxy to ID1 url
req = requests.get('https://id1.woodburn.au/ID1')
return make_response(req.content, 200, {'Content-Type': req.headers['Content-Type']})
@app.route('/ID1/')
def ID1_slash():
# Proxy to ID1 url
req = requests.get('https://id1.woodburn.au/ID1/')
return make_response(req.content, 200, {'Content-Type': req.headers['Content-Type']})
@app.route('/ID1/<path:path>')
def ID1_path(path):
# Proxy to ID1 url
print('https://id1.woodburn.au/ID1/' + path)
req = requests.get('https://id1.woodburn.au/ID1/' + path)
return make_response(req.content, 200, {'Content-Type': req.headers['Content-Type']})
@app.route('/ID1.xml')
def ID1_xml():
# Proxy to ID1 url
req = requests.get('https://id1.woodburn.au/ID1.xml')
return make_response(req.content, 200, {'Content-Type': req.headers['Content-Type']})
@app.route('/podsync.opml')
def podsync():
req = requests.get('https://id1.woodburn.au/podsync.opml')
return make_response(req.content, 200, {'Content-Type': req.headers['Content-Type']})
# 404 catch all

View File

@@ -1,25 +1,50 @@
<!DOCTYPE html>
<html lang="en">
<html data-bs-theme="light" lang="en">
<head>
<meta charset="UTF-8">
<title>Nathan Woodburn</title>
<link rel="icon" type="image/png" href="/favicon.png" />
<link rel="stylesheet" href="/assets/css/404.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Nathan.Woodburn/</title>
<meta name="theme-color" content="#97009a">
<link rel="canonical" href="https://nathan.woodburn.au/404">
<meta property="og:url" content="https://nathan.woodburn.au/404">
<meta http-equiv="onion-location" content="http://wdbrncwefot4hd7bdrz5rzb74mefay7zvrjn2vmkpdm44l7fwnih5ryd.onion">
<meta name="twitter:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta name="description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<meta property="og:title" content="Nathan.Woodburn/">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:image" content="https://nathan.woodburn.au/assets/img/profile.jpg">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Nathan.Woodburn/">
<meta property="og:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/assets/img/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/img/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="180x180" href="/assets/img/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="/assets/img/favicon/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="/assets/img/favicon/android-chrome-512x512.png">
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cabin:700&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Anonymous+Pro&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="stylesheet" href="/assets/css/styles.min.css">
<link rel="stylesheet" href="/assets/css/404.min.css">
<link rel="stylesheet" href="/assets/css/profile.min.css">
<link rel="me" href="https://mastodon.woodburn.au/@nathanwoodburn" />
<script async src="https://umami.woodburn.au/script.js" data-website-id="6a55028e-aad3-481c-9a37-3e096ff75589"></script>
</head>
<body style="background-color:white;">
<p><br><br><br></p>
<h1 style="text-align:center">Space Invaders destroyed this page!</h1>
<t2 style="text-align:center">Take revenge on them!</t2>
<p class="mobile"><br><br><br><br><br><br></p>
<p class="center"><br><br><br>Use <span class="label label-danger">Space</span> to shoot and <span
class="label label-danger"></span>&#160;<span class="label label-danger"></span> to
move!&#160;&#160;&#160;<button class="btn btn-default btn-xs" id="restart">Restart</button> or <button
class="btn btn-default btn-xs" onclick="location.href='javascript:history.back()'" type="button">
Retreat</button></p>
<canvas id="space-invaders">
<script src="/assets/js/404.js"></script>
<body>
<p>HTTP:&nbsp;<span>404</span></p>
<div class="text-center">
<div class="text-start" style="display: inline-block;"><code><em>this_page</em>.<em>found</em>&nbsp;= false;</code><code><span>if</span>&nbsp;(<b>you_spelt_it_wrong</b>(<em>this_page</em>)) {<br><span class="tab-space"></span><b>try_again</b>();<br>}&nbsp;<span>else if</span> (!<em>this_page</em>.<b>content</b>) {<br><span class="tab-space"></span><b>alert</b>('<i>You're lost! I'll send you back home</i>');<br><span class="tab-space"></span><span>window</span>.<b>location</b>&nbsp;= <em>home</em>;<br>}</code></div>
</div>
<script src="/assets/bootstrap/js/bootstrap.min.js"></script>
<script src="/assets/js/script.min.js"></script>
<script src="/assets/js/404.min.js"></script>
</body>
</html>

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html data-bs-theme="light" lang="en-au" style="background: url(&quot;/assets/img/intro-bg.webp&quot;) bottom / cover no-repeat, black;">
<html data-bs-theme="light" lang="en-au" style="background: url(&quot;/assets/img/bg/projects.webp&quot;) bottom / cover no-repeat, black;">
<head>
<meta charset="utf-8">
@@ -18,12 +18,12 @@
<meta property="og:type" content="website">
<meta name="twitter:title" content="Nathan.Woodburn/">
<meta property="og:description" content="G'day, this is my personal website. You can find out about me or check out some of my projects.">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="180x180" href="/assets/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="/assets/img/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="/assets/img/android-chrome-512x512.png">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/assets/img/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/img/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="180x180" href="/assets/img/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="/assets/img/favicon/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="/assets/img/favicon/android-chrome-512x512.png">
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&amp;display=swap">
@@ -36,23 +36,6 @@
<link rel="stylesheet" href="/assets/css/fixes.min.css">
<link rel="stylesheet" href="/assets/css/profile.min.css">
<link rel="me" href="https://mastodon.woodburn.au/@nathanwoodburn" />
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.woodburn.au/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script async src="https://umami.woodburn.au/script.js" data-website-id="6a55028e-aad3-481c-9a37-3e096ff75589"></script>
</head>
@@ -71,21 +54,28 @@
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li>
<li class="social-link"><a href="mailto:about@nathan.woodburn.au" target="_blank"><i class="icon ion-email icon"></i></a></li>
<li class="social-link"><a href="https://l.woodburn.au/discord" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-discord icon">
<li class="social-link discord"><a href="https://l.woodburn.au/discord" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-discord icon">
<path d="M13.545 2.907a13.227 13.227 0 0 0-3.257-1.011.05.05 0 0 0-.052.025c-.141.25-.297.577-.406.833a12.19 12.19 0 0 0-3.658 0 8.258 8.258 0 0 0-.412-.833.051.051 0 0 0-.052-.025c-1.125.194-2.22.534-3.257 1.011a.041.041 0 0 0-.021.018C.356 6.024-.213 9.047.066 12.032c.001.014.01.028.021.037a13.276 13.276 0 0 0 3.995 2.02.05.05 0 0 0 .056-.019c.308-.42.582-.863.818-1.329a.05.05 0 0 0-.01-.059.051.051 0 0 0-.018-.011 8.875 8.875 0 0 1-1.248-.595.05.05 0 0 1-.02-.066.051.051 0 0 1 .015-.019c.084-.063.168-.129.248-.195a.05.05 0 0 1 .051-.007c2.619 1.196 5.454 1.196 8.041 0a.052.052 0 0 1 .053.007c.08.066.164.132.248.195a.051.051 0 0 1-.004.085 8.254 8.254 0 0 1-1.249.594.05.05 0 0 0-.03.03.052.052 0 0 0 .003.041c.24.465.515.909.817 1.329a.05.05 0 0 0 .056.019 13.235 13.235 0 0 0 4.001-2.02.049.049 0 0 0 .021-.037c.334-3.451-.559-6.449-2.366-9.106a.034.034 0 0 0-.02-.019Zm-8.198 7.307c-.789 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.45.73 1.438 1.613 0 .888-.637 1.612-1.438 1.612m5.316 0c-.788 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.451.73 1.438 1.613 0 .888-.631 1.612-1.438 1.612"></path>
</svg></a></li>
<li class="social-link"><a href="https://mastodon.woodburn.au/@nathanwoodburn" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-mastodon icon">
</ul>
</div>
<div class="social-div">
<ul class="list-unstyled social-list">
<li class="social-link mastodon"><a href="https://mastodon.woodburn.au/@nathanwoodburn" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-mastodon icon">
<path d="M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z"></path>
</svg></a></li>
<li class="social-link"><a href="https://www.youtube.com/@nathanjwoodburn" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube icon">
<li class="social-link youtube"><a href="https://www.youtube.com/@nathanjwoodburn" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube icon">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li>
<li class="social-link signal"><a href="/signalQR" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-signal icon">
<path d="m6.08.234.179.727a7.264 7.264 0 0 0-2.01.832l-.383-.643A7.9 7.9 0 0 1 6.079.234zm3.84 0L9.742.96a7.265 7.265 0 0 1 2.01.832l.388-.643A7.957 7.957 0 0 0 9.92.234zm-8.77 3.63a7.944 7.944 0 0 0-.916 2.215l.727.18a7.264 7.264 0 0 1 .832-2.01l-.643-.386zM.75 8a7.3 7.3 0 0 1 .081-1.086L.091 6.8a8 8 0 0 0 0 2.398l.74-.112A7.262 7.262 0 0 1 .75 8m11.384 6.848-.384-.64a7.23 7.23 0 0 1-2.007.831l.18.728a7.965 7.965 0 0 0 2.211-.919zM15.251 8c0 .364-.028.727-.082 1.086l.74.112a7.966 7.966 0 0 0 0-2.398l-.74.114c.054.36.082.722.082 1.086m.516 1.918-.728-.18a7.252 7.252 0 0 1-.832 2.012l.643.387a7.933 7.933 0 0 0 .917-2.219zm-6.68 5.25c-.72.11-1.453.11-2.173 0l-.112.742a7.99 7.99 0 0 0 2.396 0l-.112-.741zm4.75-2.868a7.229 7.229 0 0 1-1.537 1.534l.446.605a8.07 8.07 0 0 0 1.695-1.689l-.604-.45zM12.3 2.163c.587.432 1.105.95 1.537 1.537l.604-.45a8.06 8.06 0 0 0-1.69-1.691l-.45.604zM2.163 3.7A7.242 7.242 0 0 1 3.7 2.163l-.45-.604a8.06 8.06 0 0 0-1.691 1.69l.604.45zm12.688.163-.644.387c.377.623.658 1.3.832 2.007l.728-.18a7.931 7.931 0 0 0-.916-2.214M6.913.831a7.254 7.254 0 0 1 2.172 0l.112-.74a7.985 7.985 0 0 0-2.396 0l.112.74zM2.547 14.64 1 15l.36-1.549-.729-.17-.361 1.548a.75.75 0 0 0 .9.902l1.548-.357-.17-.734zM.786 12.612l.732.168.25-1.073A7.187 7.187 0 0 1 .96 9.74l-.727.18a8 8 0 0 0 .736 1.902l-.184.79zm3.5 1.623-1.073.25.17.731.79-.184c.6.327 1.239.574 1.902.737l.18-.728a7.197 7.197 0 0 1-1.962-.811l-.007.005zM8 1.5a6.502 6.502 0 0 0-6.498 6.502 6.516 6.516 0 0 0 .998 3.455l-.625 2.668L4.54 13.5a6.502 6.502 0 0 0 6.93-11A6.516 6.516 0 0 0 8 1.5"></path>
</svg></a></li>
</ul>
</div>
</div>
</div>
</div>
<p style="margin-top: 1em;">Hi, I am Nathan Woodburn and I live in Canberra<br>I am currently studying at the Australian National University<br>I enjoy 3D printing and CAD<br>I code stuff with C#, Linux Bash<br>I can code in a ton of other languages with Google's help<br>I'm a co-founder of <a href="https://hns.au" target="_blank">Handshake Australia</a><br>I currently work for <a href="https://learn.namebase.io" target="_blank">Namebase</a><br><br></p><i class="fas fa-arrow-down" style="font-size: 50px;" onclick="slideout()"></i>
<p style="margin-top: 1em;">Hi, I am Nathan Woodburn and I live in Canberra<br>I am currently studying at the Australian National University<br>I enjoy 3D printing and CAD<br>I code stuff with C#, Linux Bash and tons of other languages<br>I'm a co-founder of <a href="https://hns.au" target="_blank">Handshake Australia</a><br>I currently work for <a href="https://learn.namebase.io" target="_blank">Namebase</a><br><br></p><i class="fas fa-arrow-down" style="font-size: 50px;" onclick="slideout()"></i>
<script src="/assets/bootstrap/js/bootstrap.min.js"></script>
<script src="/assets/js/script.min.js"></script>
<script src="/assets/js/about.min.js"></script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
templates/assets/css/404.min.css vendored Normal file
View File

@@ -0,0 +1 @@
*{padding:0;margin:0;box-sizing:border-box}body{background:#282828;overflow-y:auto}p{font-family:Bevan,cursive;font-size:130px;margin:10vh 0 0;text-align:center;overflow-y:auto;letter-spacing:5px;color:#000;text-shadow:2px 2px 3px rgba(255,255,255,.1);-webkit-background-clip:text;-moz-background-clip:text;background-clip:text}p span{font-size:1.2em}code{color:#bdbdbd;text-align:left;display:block;overflow-y:auto;font-size:16px;margin:0 30px 25px}code span{color:#f0c674}code i{color:#b5bd68}code em{color:#b294bb;font-style:unset}code b{color:#81a2be;font-weight:500;overflow-y:auto}a{color:#8abeb7;font-family:monospace;font-size:20px;text-decoration:underline;overflow-y:auto;margin-top:10px;display:inline-block}@media screen and (max-width:880px){p{font-size:14vw;overflow-y:auto}}.tab-space{margin-left:2em}.message{text-align:center;margin:auto}.message span{border-radius:5px;padding:10px;background:#000}

View File

@@ -1 +1 @@
#sites{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;padding:60px;font-family:Quicksand,sans-serif}.site-container{background:rgba(133,133,133,.2);box-shadow:0 4px 30px rgba(0,0,0,.1);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);border-radius:25px;padding:30px 0;width:min(1200px,100%)}.site-container>h1{font-size:2rem;font-weight:600;text-align:center;color:#dda3b6;margin:20px 0 40px}.swiper{width:80%;height:100%;margin-bottom:30px}.swiper-scrollbar{--swiper-scrollbar-bottom:0px;--swiper-scrollbar-drag-bg-color:#dda3b6;--swiper-scrollbar-size:5px}.site{position:relative;max-width:400px;padding:1rem;font-family:inherit;font-size:1rem;font-weight:500;color:var(--clr-text);background-color:transparent;border-radius:10px;isolation:isolate;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.site::before{content:"";position:absolute;top:0;left:0;right:0;bottom:15px;background:rgba(236,149,200,.2);box-shadow:0 4px 30px rgba(0,0,0,.1);border-radius:10px;z-index:-1}.site-img{width:100%;max-width:400px;object-fit:cover;overflow:hidden;aspect-ratio:1;border-radius:6px}.site-body{align-items:center;gap:8px;padding:15px 0;cursor:default}.site-name{font-size:.9rem;font-weight:600;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-author{width:fit-content;font-size:.8rem;font-weight:600;opacity:.6;color:var(--clr-text)}.site-avatar{width:40px;aspect-ratio:1/1;object-fit:cover;border-radius:5px;cursor:pointer}.site-actions{position:relative}.site-actions-content{position:absolute;bottom:130%;right:0;padding:8px;border-radius:8px;background:rgba(172,172,172,.2);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:2px 2px 10px 2px hsl(0,0%,0%,.25);transition:opacity .25s,scale .25s;transform-origin:bottom right}.site-actions-content[data-visible=false]{pointer-events:none;opacity:0;scale:0}.site-actions-content[data-visible=true]{pointer-events:unset;scale:1;opacity:1}.site-actions-content li{padding:.5rem .65rem;border-radius:.25rem;list-style:none}.site-actions-content li:is(:hover,:focus-within){background-color:rgba(248,132,169,.7)}.site-actions-link{width:max-content;display:grid;grid-template-columns:1rem 1fr;align-items:center;gap:.6rem;color:inherit;text-decoration:none;cursor:pointer}.site-like{text-decoration:none;color:var(--clr-text);margin-right:5px;font-size:1.1rem;opacity:.65;border-radius:50%;overflow:hidden;transition:.35s}.site-actions-controller{border:0;background:0 0;color:var(--clr-text);cursor:pointer;opacity:.65}.site-actions-controller:hover,.site-like:hover{opacity:1}.site-like:focus{outline:0}.site-like.active{color:red;opacity:1;transform:scale(1.2)}@media (max-width:1200px){.swiper{width:80%}}@media (max-width:900px){#sites{padding:60px 80px}.swiper{width:50%}}@media (max-width:765px){.swiper{width:70%}}@media (max-width:550px){#sites{padding:40px}.swiper{width:80%}}img.no-drag{pointer-events:none}img.fog{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%}#downtime{z-index:2;position:fixed;right:0;bottom:0;width:20%;transition:opacity .5s;opacity:0;cursor:pointer}blockquote.speech{position:absolute;display:inline-block;right:14vw;bottom:23vh;width:17vw;background:url(/assets/img/speech-bubble.svg) center;color:#fff;padding-top:3%;padding-bottom:20%;background-repeat:no-repeat!important;margin:0 auto;text-align:center;box-sizing:content-box;line-height:1;font-family:SequentialistBB,cursive;font-size:1.2vw}
#sites{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;padding:60px;font-family:Quicksand,sans-serif}.site-container{background:rgba(133,133,133,.2);box-shadow:0 4px 30px rgba(0,0,0,.1);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);border-radius:25px;padding:30px 0;width:min(1200px,100%)}.site-container>h1{font-size:2rem;font-weight:600;text-align:center;color:#dda3b6;margin:20px 0 40px}.swiper{width:80%;height:100%;margin-bottom:30px}.swiper-scrollbar{--swiper-scrollbar-bottom:0px;--swiper-scrollbar-drag-bg-color:#dda3b6;--swiper-scrollbar-size:5px}.site{position:relative;max-width:400px;padding:1rem;font-family:inherit;font-size:1rem;font-weight:500;color:var(--clr-text);background-color:transparent;border-radius:10px;isolation:isolate;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.site::before{content:"";position:absolute;top:0;left:0;right:0;bottom:15px;background:rgba(236,149,200,.2);box-shadow:0 4px 30px rgba(0,0,0,.1);border-radius:10px;z-index:-1}.site-img{width:100%;max-width:400px;object-fit:cover;overflow:hidden;aspect-ratio:1;border-radius:6px}.site-body{align-items:center;gap:8px;padding:15px 0;cursor:default}.site-name{font-size:.9rem;font-weight:600;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-author{width:fit-content;font-size:.8rem;font-weight:600;opacity:.6;color:var(--clr-text)}.site-avatar{width:40px;aspect-ratio:1/1;object-fit:cover;border-radius:5px;cursor:pointer}.site-actions{position:relative}.site-actions-content{position:absolute;bottom:130%;right:0;padding:8px;border-radius:8px;background:rgba(172,172,172,.2);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:2px 2px 10px 2px hsl(0,0%,0%,.25);transition:opacity .25s,scale .25s;transform-origin:bottom right}.site-actions-content[data-visible=false]{pointer-events:none;opacity:0;scale:0}.site-actions-content[data-visible=true]{pointer-events:unset;scale:1;opacity:1}.site-actions-content li{padding:.5rem .65rem;border-radius:.25rem;list-style:none}.site-actions-content li:is(:hover,:focus-within){background-color:rgba(248,132,169,.7)}.site-actions-link{width:max-content;display:grid;grid-template-columns:1rem 1fr;align-items:center;gap:.6rem;color:inherit;text-decoration:none;cursor:pointer}.site-like{text-decoration:none;color:var(--clr-text);margin-right:5px;font-size:1.1rem;opacity:.65;border-radius:50%;overflow:hidden;transition:.35s}.site-actions-controller{border:0;background:0 0;color:var(--clr-text);cursor:pointer;opacity:.65}.site-actions-controller:hover,.site-like:hover{opacity:1}.site-like:focus{outline:0}.site-like.active{color:red;opacity:1;transform:scale(1.2)}@media (max-width:1200px){.swiper{width:80%}}@media (max-width:900px){#sites{padding:60px 80px}.swiper{width:50%}}@media (max-width:765px){.swiper{width:70%}}@media (max-width:550px){#sites{padding:40px}.swiper{width:80%}}img.no-drag{pointer-events:none}img.fog{pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%}#downtime{z-index:2;position:fixed;right:0;bottom:0;width:20%;transition:opacity .5s;opacity:0;cursor:pointer}blockquote.speech{position:absolute;display:inline-block;right:14vw;bottom:23vh;width:17vw;background:url(/assets/img/speech-bubble.svg) center;color:#000;padding-top:3%;padding-bottom:20%;background-repeat:no-repeat!important;margin:0 auto;text-align:center;box-sizing:content-box;line-height:1;font-family:SequentialistBB,cursive;font-size:1.2vw}

1
templates/assets/css/loading.min.css vendored Normal file
View File

@@ -0,0 +1 @@
#loading-screen{display:flex;flex-direction:column;align-items:flex-start;padding:20px;color:#0f0;font-family:Monospace,'Courier New',Courier,monospace}.loading-line{white-space:nowrap;overflow:hidden;display:inline}.cursor{display:inline-block;width:10px;height:1em;background-color:#0f0}.loading-pre{display:inline;line-height:.9}.blue{color:#00f}.white{color:#fff}

1
templates/assets/css/now.min.css vendored Normal file
View File

@@ -0,0 +1 @@
body{background-color:#000!important}

View File

@@ -1 +1 @@
.social-icons{color:#313437;background-color:#fff;padding:70px 0}@media (max-width:767px){.social-icons{padding:50px 0}}@media (max-width:500px){img.profile{width:200px;margin-left:-100px}.profile-container{height:200px;margin-top:2em!important}}.social-div{display:flex;justify-content:center;align-items:center}.social-list{display:flex;list-style:none;gap:2.5rem}.social-icons i{color:#757980;margin:0 10px;width:60px;height:60px;border:1px solid #c8ced7;text-align:center;border-radius:50%;line-height:60px;display:inline-block}.social-link a{text-decoration:none;width:4.8rem;height:4.8rem;background-color:#f0f9fe;border-radius:50%;display:flex;justify-content:center;align-items:center;position:relative;z-index:1;border:3px solid #f0f9fe;overflow:hidden}.social-link a::before{content:"";position:absolute;width:100%;height:100%;background:var(--bg-color);z-index:0;scale:1 0;transform-origin:bottom;transition:scale .5s}.social-link:hover a::before{scale:1 1}.icon{font-size:2rem;color:#011827;transition:.5s;z-index:2}.social-link a:hover .icon{color:#fff;transform:rotateY(360deg)}.social-link:first-child,.social-link:nth-child(2),.social-link:nth-child(3){--bg-color:#000}.social-link:nth-child(4){--bg-color:#5865f2}.social-link:nth-child(5){--bg-color:#6364ff}.social-link:nth-child(6){--bg-color:#ff0000}
.social-icons{color:#313437;background-color:#fff;padding:70px 0}@media (max-width:767px){.social-icons{padding:50px 0}}@media (max-width:500px){img.profile{width:200px;margin-left:-100px}.profile-container{height:200px;margin-top:2em!important}}.social-div{display:flex;justify-content:center;align-items:center}.social-list{display:flex;list-style:none;gap:2.5rem}.social-icons i{color:#757980;margin:0 10px;width:60px;height:60px;border:1px solid #c8ced7;text-align:center;border-radius:50%;line-height:60px;display:inline-block}.social-link a{text-decoration:none;width:4.8rem;height:4.8rem;background-color:#f0f9fe;border-radius:50%;display:flex;justify-content:center;align-items:center;position:relative;z-index:1;border:3px solid #f0f9fe;overflow:hidden}.social-link a::before{content:"";position:absolute;width:100%;height:100%;background:var(--bg-color);z-index:0;scale:1 0;transform-origin:bottom;transition:scale .5s}.social-link:hover a::before{scale:1 1}.icon{font-size:2rem;color:#011827;transition:.5s;z-index:2}.social-link a:hover .icon{color:#fff;transform:rotateY(360deg)}.social-link{--bg-color:#000}.social-link.discord{--bg-color:#5865f2}.social-link.mastodon{--bg-color:#6364ff}.social-link.youtube{--bg-color:#ff0000}.social-link.signal{--bg-color:#365eb6}

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 323 B

After

Width:  |  Height:  |  Size: 323 B

View File

Before

Width:  |  Height:  |  Size: 918 B

After

Width:  |  Height:  |  Size: 918 B

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 371 B

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 89 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 856 B

After

Width:  |  Height:  |  Size: 856 B

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Some files were not shown because too many files have changed in this diff Show More