Compare commits

..

No commits in common. "master" and "master" have entirely different histories.

137 changed files with 12130 additions and 11962 deletions

View File

@ -1,28 +0,0 @@
---
kind: pipeline
type: ssh
name: deploy
server:
host:
from_secret: host
user:
from_secret: username
ssh_key:
from_secret: ssh_key
clone:
disable: true
trigger:
branch:
- master
steps:
- name: deploy
commands:
- cd /var/www/tilde.team
- sudo -Hu www-data git fetch
- sudo -Hu www-data git reset --hard origin/master
- sudo -Hu www-data composer install
- sudo -Hu www-data make -C css

3
.gitignore vendored
View File

@ -5,5 +5,4 @@ mg.key
/vendor/
tilde.json
graffiti.txt
stats/
ttbp
.well-known/

8
.idea/.gitignore vendored
View File

@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JsonSchemaMappingsProjectConfiguration">
<state>
<map>
<entry key="composer.json">
<value>
<SchemaInfo>
<option name="name" value="composer.json" />
<option name="relativePathToSchema" value="https://raw.githubusercontent.com/composer/composer/main/res/composer-schema.json" />
<option name="applicationDefined" value="true" />
<option name="patterns">
<list>
<Item>
<option name="path" value="composer.json" />
</Item>
</list>
</option>
</SchemaInfo>
</value>
</entry>
</map>
</state>
</component>
</project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/tilde.team.iml" filepath="$PROJECT_DIR$/.idea/tilde.team.iml" />
</modules>
</component>
</project>

View File

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MessDetectorOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCSFixerOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCodeSnifferOptionsConfiguration">
<option name="highlightLevel" value="WARNING" />
<option name="transferred" value="true" />
</component>
<component name="PhpIncludePathManager">
<include_path>
<path value="$PROJECT_DIR$/vendor/tildeteam/wiki" />
<path value="$PROJECT_DIR$/vendor/composer" />
<path value="$PROJECT_DIR$/vendor/symfony/yaml" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
<path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
<path value="$PROJECT_DIR$/vendor/mnapoli/front-yaml" />
<path value="$PROJECT_DIR$/vendor/dflydev/dot-access-data" />
<path value="$PROJECT_DIR$/vendor/league/config" />
<path value="$PROJECT_DIR$/vendor/league/commonmark" />
<path value="$PROJECT_DIR$/vendor/nette/utils" />
<path value="$PROJECT_DIR$/vendor/nette/schema" />
<path value="$PROJECT_DIR$/vendor/psr/event-dispatcher" />
</include_path>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="8.1">
<option name="suggestChangeDefaultLanguageLevel" value="false" />
</component>
<component name="PhpStanOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PhpUnit">
<phpunit_settings>
<PhpUnitSettings custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" />
</phpunit_settings>
</component>
<component name="PsalmOptionsConfiguration">
<option name="transferred" value="true" />
</component>
</project>

View File

@ -1,5 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="builtin server" type="PhpBuiltInWebServerConfigurationType" factoryName="PHP Built-in Web Server" document_root="$PROJECT_DIR$" port="9000" router_script="$PROJECT_DIR$/localrouter.php" use_router_script="true">
<method v="2" />
</configuration>
</component>

View File

@ -1,8 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="watch css" type="MAKEFILE_TARGET_RUN_CONFIGURATION" factoryName="Makefile">
<makefile filename="$PROJECT_DIR$/css/Makefile" target="dev" workingDirectory="" arguments="">
<envs />
</makefile>
<method v="2" />
</configuration>
</component>

View File

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/vendor/tildeteam/wiki" />
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/yaml" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php80" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/deprecation-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/mnapoli/front-yaml" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dflydev/dot-access-data" />
<excludeFolder url="file://$MODULE_DIR$/vendor/league/config" />
<excludeFolder url="file://$MODULE_DIR$/vendor/league/commonmark" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nette/utils" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nette/schema" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/event-dispatcher" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@ -1,8 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>
<Link rel="urn:xmpp:alt-connections:xbosh"
href="https://tilde.team:5443/bosh" />
<Link rel="urn:xmpp:alt-connections:websocket"
href="wss://tilde.team:5443/ws" />
</XRD>

View File

@ -1,12 +0,0 @@
{
"links": [
{
"rel": "urn:xmpp:alt-connections:xbosh",
"href": "https://tilde.team:5443/bosh"
},
{
"rel": "urn:xmpp:alt-connections:websocket",
"href": "wss://tilde.team:5443/ws"
}
]
}

View File

@ -1,26 +0,0 @@
# tilde.team WKD
if you have a gpg key for your @tilde.team email, you can publish your pubkey here.
first, clone (and fork if needed) the site repo.
find the wkd hash of your email.
i'll show the example of my key:
$ gpg --list-keys --with-wkd ben@tilde.team
pub rsa4096 2018-06-28 [C] [expires: 2023-08-27]
FC2255B7BBC7EABD4EFAFA1068907D8BCCD85A5A
uid [ultimate] Ben Harris <ben@tilde.team>
qpui546ptjbsz3rqaetbdz8wj9op6nur@tilde.team
uid [ultimate] Ben Harris <benharri@hashbang.sh>
dk83ceeke8ohb85nrwo35ed66cgx6so6@hashbang.sh
uid [ unknown] Ben Harris <ben@libera.chat>
qpui546ptjbsz3rqaetbdz8wj9op6nur@libera.chat
sub rsa4096 2018-06-28 [S]
sub rsa4096 2018-06-28 [E]
sub rsa4096 2018-06-28 [A]
gpg --export ben@tilde.team > ~/.well-known/openpgpkey/hu/qpui546ptjbsz3rqaetbdz8wj9op6nur
commit and send a patch or pull request!

View File

@ -1,242 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBF/fxO4BEADHtMAWbbFE1Pi/M6yBEAwGZPjeRFAmmV0SyRXkuJFrrffv68Cl
GEtVbiyojuPG7Wa/CsHrjrFHLuOf/BypmfxLXydX/85iz+1xJx/kuzWVPQuJyVi7
2S+8BBeHQlY4wSKKPXGZNUdAUNbzQ0IxLdiFXUM8Yigu4vWMjhhE48jAiw9KQsSS
DDKY+Nz6nXEbuKRuBvkegoJwMXTfBbiSXeGY4nlv1FeMPHKMn9V4n+cfDoVfJDy1
XhQts9NUoe1mf926f0CgmZbLAjXtCQFwXaONcgVCalibyzr06H6nIsBoNVAzI/VD
p+A5IyJULOyEnTHmGne0l6kfDcxfTxCIPXBz0w0NX9trR0HPH1VIvKxWIby1CVM6
kSq+TaJUcbdhCvFA0EyrBTt9PXvLRR94UnqWPI+ZIJfpV+HoZXWkuR1d0YrYysS8
zwefnF3W8FsspnEh3wE+U4+e/uwe90hlEKYiCK8zKc62mbQfBFOQcbHU9XhQmbLq
cxfbMKX7IfvRd/EjGbaL5pdII7SUAEr24kj4/vf+QjrzcY6JRq7X+bIgHsLnB58S
oIASb0F6/8FlcGpYW6J4STz0h6C9ePA7yRVRWU9PWkVi1O5DHh+I04qv2lQu3hQh
JjS2ZrludGWLNWnEru2J5Gyhjbg7ErVMKTJeSM+POseLz0zhp87hfpvKdwARAQAB
tDlBb2kgS29penVtaSAoVW4tcHJvZmVzc2lvbmFsIGFkZHJlc3MpIDxub3ZhYnVy
c3RAY29jay5saT6JAlIEEwEIADwCGwMFCwkIBwIDIgIBBhUKCQgLAgQWAgMBAh4H
AheAFiEEf1Z+3Sby6VUyFiJrWZY4Axs0dwIFAmHrXF4ACgkQWZY4Axs0dwKe1A//
c48lTbEgjzN6d7+zbuY82EP42bHcT0vIBbB11a++OOB6zHQwnejaJe2Jw5wnFA66
cYAPb+t12pvYfapDf4Ua3YAHDSwrtDRSS2761C0XGk074VIrO6Q15vGpGMlEppi+
3i8JS4hpbSnINAYdh1cjMr5EcR04R9gG8cAd7qIDoO6DgRyWWdgSiKQx2SQa+u6O
u21E6lYl/Xs7A3P8PGfF0KEDr28pCGsTea21uLmKsrI28Iy3grcK9ec5XwI4qVLQ
jgtvUbr2i2JBwvl85bEsU38oDJDhOg0KcttRqXhAliNAReH9VD/EvH1etJl/UmJZ
HqVJS3+w8FiW2L5M3FdNGUJL5mCa9Wr/Gy+yggwgquXTy2JE+3q08xO+88B0yhDD
PS0tRyFnaRKqRAa5oj6oEyWmT8Vcs8NhpdSHsJSElU/8Y+Wz4uS9n+3TiOCokFMO
SpRwP8/cvcYml08qTjo24Ao9HVS8JblayvjthF+es1igQ5271z8UIHf5wTc1lvlE
7xZDh+DcHRzV1+GTeyLS05E0mPEyOqpnjCSFS9EisqP3vkHR9LyQsBomAm7upXrm
hhaU7dJu/pI5wBQO8cR0Ztze+kyEWo7HzqlQZrKCxs8wvp5PWpG1usY/OzbFsm0j
hz4C1IZR1lw0ehUPCtod9+PZtzc2wtuYpj9V9Q4Br++0L0FvaSBLb2l6dW1pIChN
YWluIGFkZHJlc3MpIDxub3ZhYnVyc3RAa2FsbGkuc3Q+iQJVBBMBCAA/AhsDBQsJ
CAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgBYhBH9Wft0m8ulVMhYia1mWOAMbNHcC
BQJh61xfAhkBAAoJEFmWOAMbNHcCO+oP/jhNigdiQI0fh2YuL3+k19Vr4vjeXYwz
uM/PnXoy5th2gXFw2+fLPE0f5gdaIDUXwNk2kyh+RHcBUef5Mic0Vc0KRx7+vxwp
+UX9N6npBz2vRVv54SVMEtL4DUEUnNKAxhTb6YDmH85LlkBx8AA7gKGhnXNFET1E
JoMJ+kh0vDh001AlmdTowDRxrH3APvEuDpv66YSzgy2M+lWH/P40OlgWK8Z6KDVH
/lsMNHeg47/ob+8UMl/TP1c1+pKXw5byg2K/+eWxMOcFgC+a6P9xPretzytRzXBH
Uyl2CwnrM+XdLFmn0QiIAHbOs3mwy1KK0J1B7FJrzPPNo90WIc/4LbnjAqwlRpZI
zVEzWP2dwq0spBifvxzOUf7rP4fs5B9cAN3DVYrNtGUpmtKDb0ihUkWW6tvLqFwC
/BfipTGhkFKTtnkviYM3M3D0TlyDw7wRQiv0slKqKxnh38hgkTOEOFTprAUyAtwr
OlrwykUN+xRPFimla2PZspRWJHkUU9cY4W/7J5pqo9RzntYJc4N/WD/Azp/Hk9/I
wyxOk99XBtrMWKuEDM/8/s3rNMmQCD+AUWnP3EJbPNRBwfyXeEbTWePNYMUZky4+
131p35vlycndM3ADLZoSHLALzdH3GekjP259G5rImjXt2xX/pFAesgVUMi5G8PrY
mYsJQy+ijwHAtDxBb2kgS29penVtaSAoQWRkcmVzcyBmb3IgYW55IHB1cnBvc2Up
IDxub3ZhYnVyc3RAZGlzbWFpbC5kZT6JAlIEEwEIADwWIQR/Vn7dJvLpVTIWImtZ
ljgDGzR3AgUCYetZ9QIbAwULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcCF4AACgkQ
WZY4Axs0dwJuSg//WVjksR5D+RindrvzoHrdMBLMFts2BpUjZeficnBB3eqkjhYT
aGGFy6d9j12ULNxzf+VNoYbm53ifnN8Tw36CcgkFxjWtdQMMayZmFe+0UGxCGkTf
jlB8TONSokpqkrozd8OYlU1eJbsd7+McrW//VkOuhrsMvbdiAFlgouoGbgl5NLbr
ADyrgnGqYncB1cpClQ2leHNoNPELzKvurwhj26bpH3ka4VL0NT1d9J+cmIGwfIDx
HyE1rBm++54mYuFD4ZjzbezaPFuwXn+BEGTvksNEEoLKS9A1UPFEvbMrFuf5nDUF
O+1fKtK0ZAHS7q/Gs0SU1s6PmJ4Z0+iY2AI9BgJDcJqPibk//dvcFCRtnbN6riGG
FySyi9T6ABtmkwjpx26aXFcRce2Xi5jEtUCieSUDt99wjc8v4FCyTjlEXnMFCTUl
lveCMh9JiLEnsYDwNcDOQTEtEoba/sh/9k9bp9SsXvvDygKRVNERVbmnC6E9y7w5
YmUzLRsB9BlMW4QxhVu7hstb4Sb5VWZNjO/ZazapFF0Nd1Nbvxy23OLvH5b41qqW
2SSyCZ4Wn2mhUCHT9W/zex4+lCiZzJeOMu46muQ8wYNeR+x4prjIDrvbeyaSHCoo
xXI6xrXlexvNllduC5w/M1S+Sh5O8pb8i8AAZFmEaRRBo7IxUhqVzzs8tC20NEFv
aSBLb2l6dW1pIChCYWNrdXAgYWRkcmVzcykgPG5vdmFidXJzdEBkaXNyb290Lm9y
Zz6JAlIEEwEIADwWIQR/Vn7dJvLpVTIWImtZljgDGzR3AgUCYetaFwIbAwULCQgH
AgMiAgEGFQoJCAsCBBYCAwECHgcCF4AACgkQWZY4Axs0dwK1vw/+KIhOyGanbBJu
percdkJ236KQzG0ZBnFZMGWmEX/1Qpv/SFkFYYHNxhW86aWifg1M66eGljCsy6w7
DobwZ3pHl/YA8BCHO3rFrmd2MvP4yd7nwFu/YHFPDlzdp27+EjogPwVjJRNBNf05
aZAJA0x5heAolCZd1FESYHlG2MZf8UHihnIj3NUZAE4BdQ9iFJmEtYTEpo1hHvwZ
e3aifm1Io+xjTJH3Mv3NPTwiwPeGtEO7IHgqPuIhopUPBBTAglpkCLQjvzD1HUTw
SiyZ6Fyy/bHy5vJA2Oau8prObFBtIK5Co9O51S7DFKilRAHfwrsk/RNh1AaPHAes
VGofHBqmUIulh3cnszwMOPtFDX00zG4Oy1UfcehTCe+oGcbk6KyxSvwd5mQj/tcX
7Xed5xlCE1uihdNJwHyb6IKsTw5P32kTxZuWHXwPWAFcT9iifxJU9k/V8td9wz2K
23PSQgRJGHCeq2nU42Pnz6xTxsn+FS7Tqcwwwa6nmP/Tc+1TYy4l/zaOcbwi6e6b
ex//6PtqZBZBDxtOyxNl6L67jPeiQJ8+EEhBhpx753cm7MuFnVRKpIKtdIiGXBt0
GFPrg5E9Dp7kKpmjhkqGmDQxAZ8YBqLxuJ2cQKzGSQ/QSV8QakfXYU9X8k6XBFmQ
hH6f8wDPeWzrvHAiGhLvhDKRCcFweeC0NEFvaSBLb2l6dW1pIChVbnNwZWNpZmlj
IGFkZHJlc3MpIDxub3ZhYnVyc3RAZS5lbWFpbD6JAlIEEwEIADwWIQR/Vn7dJvLp
VTIWImtZljgDGzR3AgUCYetaQAIbAwULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcC
F4AACgkQWZY4Axs0dwKEdg/9FF7C9ionf+RPkZFR/DWcIYXNSfeC+K43e1pG0nlf
rNRCmE4g0nn+7EnvBa6ZHPH6QdPwanyKj9TI/3eEYV2Kn8BlSFVg+FEDRhM2s8Vi
r7r9/LLb4fC4olUcUkU+uPKBi6is6/BgcsiZcrbk4Jt8HehRYUKWrJck0JBweoqo
0RE2mvBWG9Nx4wwwhxnksCIuYdhNyxE28kVcNhKdSEQrycfirQ3eDsazl0SboGNb
C16Zg3gyOIYYG1aKwdEU6P4kZbDAfay3BXUqGXGwM5JuIQ2hQxB4xlCB4JxBy8MW
Oh1hzZbRNaSJz8IZpcSxa885XzqHgh63/IB3gjHNY7UB12DMTSGvizpRYIxbfzEK
2/WkahqZ7wdXc9XVL2yBB48BnH85aRByeAo9+H+rlJ1klcudefX+W2uNQ0Jl4nx8
FsyfSn+ocDzMr+ANiLcJ+Sy2d7R29TZc2TO3ApHn8I1aYwnVIVh8IRxbAtwVSMiZ
u6/rgKBey/9ORFQZ7rfVxHvGJ3/F7nkiap6UB9o/TwPsYDEHxDRVYpPFvpfp0ly6
JF6Q3E5E7LpMdoA+yZ7nOKzoNNXd5w1IeCeQi3lXaKihdKcLPh0bfUlvNSZD8DFY
p2+WIao1GYGdKDNh8jfdWG3KsgHw8UzbUyVKSzyBPk+U2m76dpjZiYJY7NLJY8LA
JsK0LkFvaSBLb2l6dW1pICh0aWxkZTogZW52cykgPG5vdmFidXJzdEBlbnZzLm5l
dD6JAlIEEwEIADwWIQR/Vn7dJvLpVTIWImtZljgDGzR3AgUCYetaYwIbAwULCQgH
AgMiAgEGFQoJCAsCBBYCAwECHgcCF4AACgkQWZY4Axs0dwLubw/+K6Zct5aXhYqD
77okpP8D1PTxDSuogyb2IqXnuEHjC0MBiLGqPeN/CtD7gOzXXs7rITqb7FcM5E3G
Dk0q2wHIsP+xWIO4VbhVLDDquy1k5L+psV9uXXo+X8WcSh8r2wDrVgzd7U06o3zu
pfCp16xICKIu627rg/A0Cr8sBmuyakQAGmYhZ1wrMK81W4itbfiKy2hsF2M4ef10
LgRXKmI9kwZ3dIM2elke42SYC2qdf5RQB4Ptm1Tu1ZMn/4GE5lHjrsUTRo3DL/fa
/dMfrPelG8NxVfa50lMmETETcWwYyYR73QVQlAmYgzz7/CfmUhvIvCHBHc47IunM
t2DN1+RhLmG/ocp9BJWVp+GxHiEuH603lFVOVur2CUzeh6Ez3UJcKKm545yK/ba8
dXU3CLnSn2iPxpDj2WYyqQFqc+p7FMOQoS4h5tP4fK3XezQBq+U1UxuG4oVCPPlb
/7wH6v3NQKogI23ym85jopGbdtzaXiLpufQKPbHmP5MTFc247NTN5hrEroKnA2gY
jj/WBIHsO/omyOxvMfC2PwPcnh8M4wJEhbKtwZzyHN//4t6Q9Byfjb7oKGu+hMXP
BCO7P5+GdZTlnQJy82ZG8NQlkoORzne/ku7MQ7UtOemMMtxzB/9PlwOv62hMU/6l
8iXQESX2TM+cyDwQJXo8WX9DuxAJ3cO0QEFvaSBLb2l6dW1pIChBZGRyZXNzIHVz
ZWQgZm9yIGFsaWFzaW5nKSA8bm92YWJ1cnN0QGZlZG9yYS5lbWFpbD6JAlIEEwEI
ADwWIQR/Vn7dJvLpVTIWImtZljgDGzR3AgUCYetapQIbAwULCQgHAgMiAgEGFQoJ
CAsCBBYCAwECHgcCF4AACgkQWZY4Axs0dwLoChAAt6/tbkXbVpVVaEzJZRO7B5nB
ce1Tty0kIgSSMv3tM6To0gk5ecSx1kCbZqWEzpNqUgFBZkwgQ1hmbkg+bSO/zWJb
8PiWqWtkhS86TSxeO5J6ebw0fSEBqllByrfFn8HXh/3dG0o8T8ddiceFTf+yfg0o
EZSeViCFAVncDSlNjUW6KmcLTaz/gj7aJnJiMs1iXpqre8pEeriP96px+jdUpCwY
ErrcVe9Slnj00JBmR2SPM7yyy3mZLIU9kjeChL46krXy2QJSw1m2lKc0Zho8LMf7
WNeh8yy/lPZ2JF4ezCqelP2Qfzs3D8EXR8xuTsyWUGjDItIMWaW4XXekZ6gnj261
1bkWxGeV7j40QSTV/dnvNFjryFw6JD5kDR3FjWbDYYNBS5AzvpbQ5xTYf12jMdIv
y1Wu44ZiQsSoTjpzzO3Pd5XBw67YFFs8/V8qxPi9e18TifnMLiUJdXEUowJQXtBz
DVxTO685pXxXU1rwjtlTkt4yqCMa8sIBvqgq3UjHak4cUFQM5/r2XXSDptybIO09
Jk/YZISKg0slIOjuxhx8FefV4W2OCqQM/8pWdZsXenwODQKMIiFvIBVnJb1n3uiG
KiyL4lR1rwoTWVZx+4VgYEQzKo9xvCIcuqw8DCM3y/omc+Lmi2+4u239I1dZG8Ff
Xd+nJxbCcX88T3E22Ti0OEFvaSBLb2l6dW1pIChCYWNrdXAgYWRkcmVzcyAjMikg
PG5vdmFidXJzdEBpcy5ub3RhLmxpdmU+iQJSBBMBCAA8FiEEf1Z+3Sby6VUyFiJr
WZY4Axs0dwIFAmHrWswCGwMFCwkIBwIDIgIBBhUKCQgLAgQWAgMBAh4HAheAAAoJ
EFmWOAMbNHcCD5cQAIYJ3bPmWSH7fGTztrUP1QQqpXqjL1vctNLLKnISkJCdNgqy
entQ6N6rFjFPkC6i+Zy5+ZIqGHbAzXyZHFNOyvZeYFiQldjbqXDKbb1l+7ExEdHP
yPA90qZPB9/sgEUGvZb9CztxZFBXSTBUPxOjIBWTHWEnDs6AC3vkC3jexl6RO2SJ
16egiLRvGOl7j4ZLanwGi6jsziRvbP/efPwgyaftgaKpuSaseL2TH/2HtVPojcmp
vmx086rDwZxCdNgbvs1KvvUhXO/+iKnpBdqAZLwDF7Mtt897e6AaFUAAfwzdVWAb
oodJwMolI8Ld52rKH6ijmyV37gu2m4U4WN0WNgWeV9nWzPg+Mq+hnsgHVF56Nbw/
VRoVNYKOZGhFeJoXiYE5vReLojnKjfaWIiKrpZDzd7oAK+fi/FlLX7iJbXkc7PDB
XU9kt4TTXkRm9UXwTqP3qc5XdVZntis1IGgwhBLcHKWY+J0DF/2z1JnbCw9mETYl
gW7dS0eJmrTqzx7yNek4itILispFfNHm9/Fpo9DPdZ3LtrP//5x7DUJ8NbNK/Ucn
2Vr+ukCDg7mbV1Fbcl/rlCozffIcfqfXXBs7/pKsYPPto59oNS9Q1/Jj2E5Gy9bw
z396Vy8Us+di4UtTvxyPrsc8/GXJRymPHQ+qHqgih2Magj06jDpAIftZmw1xtDhB
b2kgS29penVtaSAoQmFja3VwIGFkZHJlc3MgIzMpIDxub3ZhYnVyc3RAbml4bmV0
LmVtYWlsPokCUgQTAQgAPBYhBH9Wft0m8ulVMhYia1mWOAMbNHcCBQJh61ryAhsD
BQsJCAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgAAKCRBZljgDGzR3An1JD/4miJpJ
rOhf6PkDrJLroM3PyA7pnK1hm6NTtPByKa0Dj1NPcaHh+yHLsyOD6AZ9Z6KOD7Aq
2XGJFlu+MOlZ6x3yHIGOkiopIMkNUm7Hvgyqxr9hld/tT2YlBw5hkFVbYQks6epE
swQaA3waU6d+MG0s+NMJT7cU7jU6X6mKlhH7zxBJ+OKMoVrY8kzv9jmFw6h3tS9a
6zprvHmJLNypVFXfRdY/zTdVjow1QZnajRXbehAph7nTnb7yTBWzRrAiPSTcibY6
7fbCJCe5FiETfcwhJu+xTAL2TNKwK2F4wm6VsUuz2eFt48qpf5XU7mrMcRtPFfMq
0jj3Efa9WVc4Ep11Quaxex+qDGIlRMqh6VJ4iNdx4OCkXPGbqT367E6Qe3MUjvbO
ymPBuaKBlSg612cPQurE/gyVK+x3ZJEqWB4KY+jHVjiawTgvzob1mGO8a1B3tnPh
goxI1NXgd/D5I9HdomwnznbzyHCO0Y7CA+4ZI4EDgxHd+orRs7MTUgE4efG2vEZG
CxWY/XlSOlyhyjbB9Occ2itqL9OAC7jbHXkXvjISjBqWUELWaF5eDmrk5XRtgswj
dZLZwu/HaQ825/+d/PQyyiovDb03IaT+w9iywbYBxaPGt2gnbnvSXgDfcqGCvKmt
SJPsZ2jsYD6hraR3WLcqpsP6i0M1rCAhqw7EpbQ2QW9pIEtvaXp1bWkgKEJhY2t1
cCBhZGRyZXNzICM0KSA8bm92YWJ1cnN0QHJpc2V1cC5uZXQ+iQJSBBMBCAA8FiEE
f1Z+3Sby6VUyFiJrWZY4Axs0dwIFAmHrWykCGwMFCwkIBwIDIgIBBhUKCQgLAgQW
AgMBAh4HAheAAAoJEFmWOAMbNHcCrOUP+wYBvcCeaDjBR22s1ogJFCWCqiN04fKP
A3feT83qMoJsSFHrOcUeE0h/eHgXRlGwQsxo4B3bFaBwj52MoidHLxy1ZEqZe4og
e3Nk8isqsO7FbwMReT6l2E1FFgmm86DC69k9Q3T3HCNdgI+XbZPfwiBE2qZPPioN
D4IUBv6QQSJ3kVumY7PRkfy43IwrciIgMOqCYyooVuEU5BTSRsd52Rf+mgTJKtql
swsDHxfaVORP3n9IHZJs4ErqBFD7Vjre2GGD2eKLeBg32xGshkOBfOYWxSbYRJCO
LGHT2a/i4kmqXpNp1SR3r+2PyvLvXvjk+hxrn2QucjFVL6IsWuFnwExdXXv6CtwT
02FHf0flbV8OSzBM4pvWGzPlzzGSF3XDsWWpKL1jiEPbJkMbly1oLCBgi4U7TpHY
zZa5r0mWQQw96jJ1jiQU7yIHMKDb6ME+PK5bvov3PE2JWqC37hd7ZZyytRO8mxqS
42sq+1TxjdtM5cOfp8n+6GATprC5f5UyZMHU3u6pCLpBPuc8ioMP/x48KUEXucMO
/AVEb0/K2KTHRrYE+xzPvshwloD8HUBkeqbe/JDt4NYop6jjSDJ/pjobUqn7LFpi
UNdYm6WyIYhjSub2+o8ppPQwLTAhN7UHSWUs+qJOvmvvcXBr7rbcNHlSw8nO0IPO
QkrxHr2Pp5whtDJBb2kgS29penVtaSAodGlsZGU6IHRodW5peCkgPG5vdmFidXJz
dEB0aHVuaXgubmV0PokCUgQTAQgAPBYhBH9Wft0m8ulVMhYia1mWOAMbNHcCBQJh
61s+AhsDBQsJCAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgAAKCRBZljgDGzR3AgeX
D/9s27fW0/0ymfwWXahK9uLZnI1T+/Io/yEocXf9h5cw0AHgremeEDNlFNh/t+Hl
cRea6rIaGyZw6JJvuG1anQprJgfnA9ZZes5T9qt/hPoi4WZ6rK2QsDwt2JjGzgxU
HFvWfsTrFkrE/3W79iWUnuiBxIu3HXl1+C4Hb3qaHZw/xfQ1RNQgtBLlMLFZtD4X
2S3VYLpjKbcBEC2CBZ8tXnE1BkR00wn11jIm0+DAR5u8XPkWd97UhEm2eJ/qRIOu
fuRwRcjMAyqnjO2jpKCjl22tcawwSKHs6Mz1JcdXgWcjBwUwjh37eYM/xrHzSHhd
jmP3E2T/5RlQoudwLgtfD3/5XvAC+D1PtK/pAj3aNgjNxyssFhOaR4gYwT+BZBwU
Zve8j3xy4epEL4kmQCYMFtKgEK3L2wspxYztXOTCrDa/NAeX2N2U+DSbvrSmS5RB
QCl49NbheuFdXPv4+KJbTusDy1mBEDiR6ZWSbvljBVmp0cUl70nH/bFXMUX+ApaV
IOr87PT0K5rCKUYp26boYLChsbJrdjq+8Ps+oMZufkrHxmN2etZlAs3YIJZBggZu
nRIjhzQCUUkDbiPYV7Nh8WqklKSor1mBs5uPqzXlyGJFHRxkRU2DAOABl6MhSTJD
PstukoRmQ/XxYSdm1KbI8BGFx8PIIBaRECneMS+EzDC5jrQwQW9pIEtvaXp1bWkg
KHRpbGRlOiBjYWZlKSA8bm92YWJ1cnN0QHRpbGRlLmNhZmU+iQJSBBMBCAA8FiEE
f1Z+3Sby6VUyFiJrWZY4Axs0dwIFAmHrW1wCGwMFCwkIBwIDIgIBBhUKCQgLAgQW
AgMBAh4HAheAAAoJEFmWOAMbNHcCgTUP/2R0h1N+Do+kqAezsJOa/Fk/fzmHVMAN
vQjqoaJEQQ8ErHat8zS0usohuSeISvkobScvpBi634wAQpB2NA5bWcdrh/7bjuIt
fBFZb4Vsgg+NOkaTGBFofRJ2J1yG54VH5DmsbEEU3rAp42wYrmXUjVbXbXBwm40i
AdWsQ+FoPt1CoRP6SLXF7DO6cRWG5q1R9q5BVg84BY+EdQ4ux/TNlp28tjltBNI6
vywx7E6T/C8l9bP/YyHiXI5xKijzdsc3vFJgyx6fOxePwMeRwPT+ADXAdROJQQOb
DKcnvH1eDFS5QiBHOPDPvPsyCOppDNLELGH9I68jcKj+o+sTjxywO7euSJefuLiC
tOeWK8cMl8njH/i/BKLe1IwwdbvGxD3x45x8S2/EZGx0sqUd658lJH+axVDxgeeX
PYz7b5tJ4Ka4AM0z7pXPSiikIb3xSAmD5FXC9elyNMvNEXaS663/37+7amUqwoz8
u/h747lfKOCCPSN000C8fr+EYNMl7hDrkDK5FFitTVKPujdb97e3mz7SbYuUHhSl
uklBUk9bkpjMy3Cbblzj7vfpCKuk9L1OpXeZ9UfndAvHJm39YS6Eh+ZglKmgpbvv
nQpJgQkulhyjQYzHQIEMAkVG3wpF670ImY2oOYvTIBaBMIkYrZm4T68+nQ/WpYAU
DdXbJr97GXc9tDBBb2kgS29penVtaSAodGlsZGU6IGNsdWIpIDxub3ZhYnVyc3RA
dGlsZGUuY2x1Yj6JAlIEEwEIADwWIQR/Vn7dJvLpVTIWImtZljgDGzR3AgUCYetb
cQIbAwULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcCF4AACgkQWZY4Axs0dwJLNg//
fY7I/kHhcS/UNbfMWSWQ+owrxjl0pnp+Uju5VwgZa6mBwVxGjStUs7EMEh/tx65c
wjRqHaxWUPXel9MiC7rnpr0ino5iRFc3ZgoySzUQFBh6+8r8Y+wRXDg+F4MvjVDn
CKriII6Po6DdhqsARxQYf7HgMfMuj4ex8iIfvGaCMl3pJFLh1NVtRB2Sx+GKmcSt
EWbDW6J3iPh0gaDGykgmzA9Fijn1jGdhk1DplkdEv15kcDWEsd2YV3V7K9dPwTBz
7bgU6qBXsw1CdQ6yoYXeRzLnC5ZfMuDFjBP6ltex4G/OEhcKK98OqUUYw3nn15ak
MHHWeAmtBjCLqbBBj+6f62RP6BkXPmh5EYDkvyE3sBbAbqLSWy0xc12qEmq49VIW
0zCV/noKvno8yQfL73hT0E4hAaq6YGD2UcIfeRcwaaG5ijo6yypVHIWTbaT0Jpmt
vtQPfN2oWUAKJrrUfmO/YCOQv5BGVA9KVmhD3Wk43gsEcprdDh+vSCI3S6VcU91H
NhVP8de5P5TBnohNxN/Fjmr5a/9yCh1pri4lvd+YVhnq+H4IoUAh4cdIy82qE3e9
o9uTS+L5oW+ZNnr4tkFk3B6wCJcRoPDGrWUF5c7Uvfqg1B2yjgGiu3GhlDuupIvW
fPGA45wDPKnlE59n+BQ4rX8W10FPAO70R1Mb3pFh3oW0MEFvaSBLb2l6dW1pICh0
aWxkZTogdGVhbSkgPG5vdmFidXJzdEB0aWxkZS50ZWFtPokCUgQTAQgAPBYhBH9W
ft0m8ulVMhYia1mWOAMbNHcCBQJh61uFAhsDBQsJCAcCAyICAQYVCgkICwIEFgID
AQIeBwIXgAAKCRBZljgDGzR3ArTJD/9mRsVOMd1my9UXu6x5WI/iE5XySfUKPzFX
v7vRADSUQ8FRDzZZ7wXOHMB7tK3HoE2FyqgO6N+DWLVK21JxTi+yAtGAMtYvHLCj
GpofnZnE2QZqsyIrgWLLJtHMLQRT2+00tiZBkoDBcP0AEsiVj4pelvnm8d9fg/X5
0fXWQDs9FT/DOKArunvgGP1lB6EHNBRRdtCPD8KnL91L6IGFggbjAOlRXIc0cOI1
rcBhcCY6mg3C4dIcUvW2DL0XovCR9lzWU7DK57uhWNU/aJ+s/sc7q/8vovQZ2j2d
YMEBRidIUaOqa/Lapu2iocXp53on3mVsPw9ipr5DXL/E5nd6xjYnck59BhKiuHDh
jlzXGuBRU9yYhMn10KpsEI/v0uvHrNgBIsIhjGjUCWbB+j7lN+uIiDQ0BddC1p3L
BmJbXLtZ9pvys2q9jzgCwHUg4PoEjFFTVobAsvKvEVPLO6NUQ90T/mt23sLMKCau
RmQs+6LLa9qfgLZYu/ZJ4n3B7CVoO0D+tbsdY6iFuWwsmKBjlwBbymHWlBh0NPPN
kyCfjA6oNZbDKLAj94Y1XfZsSTeBgyW3GdfUMAuayo8gLCWYJ4GWzXm9W2dzUktP
o+UrgOUqEI4v0SIp2F4mI3//REen4T5O47F7XwchAEpTqgNyGUcKgfn+MHUZp+An
859Uvz2nn7Q3QW9pIEtvaXp1bWkgKHRpbGRlOiBkaW1lbnNpb24pIDxub3ZhYnVy
c3RAZGltZW5zaW9uLnNoPokCUgQTAQgAPBYhBH9Wft0m8ulVMhYia1mWOAMbNHcC
BQJh61wAAhsDBQsJCAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgAAKCRBZljgDGzR3
AhAgD/40S+jQqTCaE2qU2DDNRpA/62SWvZOQGAZ2vG/ZtwwgZxbL0EZRGvtsBBF8
9tCR0JyLA8Ofd+POP5tb/KWTSuNUCM5CCTQBHXekDByUmj6GxSFb/xYiwDMtYBk7
EWSwyHxBatGNATYlchs3dUt51vHe3SnUieurMsyNNYUw2wf53EXQVPrXcbcJRxSM
U4cWLXZJxHULw5i6+ipAtpQ0tCHgyWptF1jWRlrLneEdYANViQhqSEZtZkc38Y3l
LY61GauofrFlytJTAMc+QL5SDVdBDSD9i0lAVPc53PKtABancUWcT4TGXNI+rYMD
X4pmUGuBp8iwHAImH3wptddQdf6icjqMnwnCQdS/UfC+lnMeojkuICoi/YbLHhYR
Y5d3eBUgOVkwuIjf0McEsNaKSzK7bDlIu9t+LBhmu4ZEa/ub/y1NmyPxA7ksw4bY
ao5D5DsL9LQl4904oc4+BabPrQX16yALvqcuKGBPmr55vLNNe0B1uFGW4F+tQ4Tx
3ZBq2I/pXjPRRLRhEMdPccpNJr1EO6adnNTY4nPdAN9ou+V8bCxcQT9TC6ttJgpa
t7hYUN6kAvJD4C4fNVTugdnwJ9+IcBKtt3KzC1+IRaG4gpkIYYK/juiJFMNNO9d5
O8pPG09O6lapd/heWniUDNdY/pDloDURQOKNJBtTfVFBVGMiXLkCDQRf38TuARAA
xeRIzxOmMJDH15UUafXym4pzWIOnoK4U7Kh3x5WGuuno9+he3j2eE1Ytlsk95xYB
cNx2aRlRJPzFnlP7lxtWKW8XPLGgs01I8rWl1bZbI4k+mMerXPQJXT2C/ubOuR69
66z/MKj98uP29p/5+80jcCJAtS2lDAxYJhWF5hmKdKkWI59HsDWfQP1gxXfHc9Ao
GAccqFOMRtFkJIkM2L3pqhYHP34TeIUfrdAZCJDbfHQhih9AzcTv4+GYohYEjj2q
/Ou8d3ciN9iZiTJl36vKlUP3+cCERIQOSBCocore7AwHmZqy0B2htNdjgJWYHJl3
rh1CtObxY3yggxCn5cFqcFfpUrADlLuy5zGz5N871wKrp2fDgBYQ51re3QP9C7OW
itz3o/Vac3IjI8I+XozmjeS8n9meWnsKDaCtQ4XYtDJILhuMAwwD095gEbAQzMZZ
NkJUlOE7cXu9/sEYOLVoQXTVWH+HL7b/OqVbRRYIHcmLOgwEG44R5eoyYYsV4ntW
Vh3501FYK7lERTyZsFiLhrpSoaQr5iawY0jTwxeMnAygSG0AAjETRm13RePsQNQ1
pHC2wG8RZsb1IaiKj8xkItcGEIhXRCyEIcXW9euabhpCzkST6eGyVwtktHD82mS+
kpxq/QSZYQCFBcDzpojWNedTBX4Kf7O9fB+x4+T7dusAEQEAAYkCNgQYAQoAIBYh
BH9Wft0m8ulVMhYia1mWOAMbNHcCBQJf38TuAhsMAAoJEFmWOAMbNHcCyKcP/jby
Byf0LvKXRN7QEhuTX9ajR/UasqnoP3sImTs10mWRuDN2UXn4LeNXSKyECUsz0tz2
QPchR5XuxQkXdChJyax0nHHxv7kRvdCmd42pFywakT7ktooZvtPyVtJkshREWzTj
5Q8bJkTzVzr6Y5xDNV1JzBQSwcl8yc3GJ9enortRA4nVqZhUT/g71iqqmD+/Uatw
xAkLuYv1SyLTaWolUzowkqXBjgiu30LHFtq4w2DLQk17GR6XEde7uC7/PI85WC+y
2JnqeOi0SAbSCQxL2bAascF6x/IueFJH6TUML5nwTUwYamT3Sg2kKqLBBUmzjwKx
bgzfpVumwADOOd/F7TV2hxHTSX9jvlsk5GeGqiMlIECDB37t6q8XBiHcCTnDoxkB
uGhGa22zxWLCL7+C2w/sPOO9ImZLf8bgB9wsNCp+FIho4a2nWgbPZ3dsl5n+2y3/
sNXjKYhWX4bcoLCl3B4bzOlumk7lJUixlAsJN5hZjHVas0cXEaPToyAtlb7j3oih
damS8tnkrSBrz+OePFuHjJOEXgSRFtpuPkNwu0DVKVw4gh+7BnOpDUero5NELndB
BeeocI9OMmuf9nuPjab0eMmLZRQ0msI85k4u8ij/vSF6apkcUUax9DnJnZQArFf0
RB4BhRl07aIo4xJDXHzRjJ1krSqgXQUDBfvScjOo
=ioIA
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,13 +0,0 @@
# webfinger
to add your own, run the `webfinger` tool at your shell.
it will prompt you for your fedi handle and save the correct json to `~/.webfinger.json`.
you can do this manually by grabbing the webfinger from your fedi host.
as an example, to get the webfinger response for `@ben@tilde.zone`
curl 'https://tilde.zone/.well-known/webfinger?resource=acct:ben@tilde.zone' > ~/.webfinger.json
see [webfinger.net](https://webfinger.net) for more info and a simple tester for your setup.

View File

@ -1,30 +0,0 @@
<?php
$trims = [
"acct:",
"@tilde.team",
"@fuckup.club",
"@nand.sh",
"@ttm.sh",
"@tild3.org",
"@tilde.chat",
"@tilde.news",
"@tilde.site",
"@tildeteam.net",
"@tildeteam.org",
"@tildeverse.net",
"@tildeverse.org",
];
$user = str_replace($trims, "", $_GET["resource"]);
$webfinger_file = "/home/$user/.webfinger.json";
if (file_exists($webfinger_file))
{
header("Content-type: application/jrd+json");
echo file_get_contents($webfinger_file);
}
else
header("Status: 404");
die();

View File

@ -1,675 +0,0 @@
### GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
### Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom
to share and change all versions of a program--to make sure it remains
free software for all its users. We, the Free Software Foundation, use
the GNU General Public License for most of our software; it applies
also to any other work released this way by its authors. You can apply
it to your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you
have certain responsibilities if you distribute copies of the
software, or if you modify it: responsibilities to respect the freedom
of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the
manufacturer can do so. This is fundamentally incompatible with the
aim of protecting users' freedom to change the software. The
systematic pattern of such abuse occurs in the area of products for
individuals to use, which is precisely where it is most unacceptable.
Therefore, we have designed this version of the GPL to prohibit the
practice for those products. If such problems arise substantially in
other domains, we stand ready to extend this provision to those
domains in future versions of the GPL, as needed to protect the
freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish
to avoid the special danger that patents applied to a free program
could make it effectively proprietary. To prevent this, the GPL
assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS
#### 0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy. The resulting work is called a "modified version" of
the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
#### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
#### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
#### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
#### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
- a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
- b) The work must carry prominent notices stating that it is
released under this License and any conditions added under
section 7. This requirement modifies the requirement in section 4
to "keep intact all notices".
- c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
- d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
#### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
- a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
- b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
- c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
- d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
- e) Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed. Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
#### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
- a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
- b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
- c) Prohibiting misrepresentation of the origin of that material,
or requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
- d) Limiting the use for publicity purposes of names of licensors
or authors of the material; or
- e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
- f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly
impose on those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
#### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
#### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
#### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
#### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
#### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
#### 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
#### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions
of the GNU General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in
detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU General Public
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that numbered version or
of any later version published by the Free Software Foundation. If the
Program does not specify a version number of the GNU General Public
License, you may choose any version ever published by the Free
Software Foundation.
If the Program specifies that a proxy can decide which future versions
of the GNU General Public License can be used, that proxy's public
statement of acceptance of a version permanently authorizes you to
choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
#### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
#### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper
mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands \`show w' and \`show c' should show the
appropriate parts of the General Public License. Of course, your
program's commands might be different; for a GUI interface, you would
use an "about box".
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
the GNU GPL, see <https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your
program into proprietary programs. If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library. If this is what you want to do, use the
GNU Lesser General Public License instead of this License. But first,
please read <https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@ -1,7 +1,5 @@
# [tilde.team](https://tilde.team/)
[![Build Status](https://drone.tildegit.org/api/badges/team/site/status.svg)](https://drone.tildegit.org/team/site)
tilde.team homepage
```
@ -25,22 +23,22 @@ see also [css/](css/) for info on the theme and working with that.
1. clone this repo
2. install deps (markdown parser)
1. install deps (markdown parser)
```bash
composer install
```
3. start a php development server
1. start a php development server
```bash
php -S localhost:9000 localrouter.php
php -S localhost:9000
```
4. create a feature branch
1. create a feature branch
```bash
git checkout -b my-cool-feature
```
5. [open a PR](https://tildegit.org/team/site/pulls)
1. [open a PR](https://tildegit.org/team/site/pulls)
thanks!

View File

@ -1,13 +1,11 @@
{
"require": {
"tildeteam/wiki": "^2.0",
"mibe/feedwriter": "^1.1",
"ext-openssl": "*",
"ext-json": "*",
"ext-shmop": "*",
"ext-sockets": "*",
"ext-posix": "*",
"ext-mbstring": "*",
"ext-ctype": "*"
}
"tildeverse/wiki": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "https://tildegit.org/ben/tildewiki"
}
]
}

870
composer.lock generated

File diff suppressed because it is too large Load Diff

2
css/.gitignore vendored
View File

@ -1,2 +0,0 @@
hacker.css
dracula.css

View File

@ -2,26 +2,32 @@ lessc := node_modules/.bin/lessc
lightserver := node_modules/.bin/light-server
NPM != command -v npm 2> /dev/null
PLEX = less/plex.css
HACKER = less/hacker/*.less $(PLEX)
DRACULA = less/dracula/*.less $(PLEX)
.PHONY: dev clean
.PHONY: build dev clean
# First target is default
build: hacker.css dracula.css
dev: build
$(lightserver) -s . -p 9000 -w "index.html, **/*.less \# make" -o
%.css: node_modules less/*.less
$(info building $@:)
$(lessc) less/$*.less $*.css --clean-css="--s1 --advanced --compatibility=ie8"
hacker.css: node_modules $(HACKER)
$(lessc) less/hacker.less hacker.css --clean-css="--s1 --advanced --compatibility=ie8"
dracula.css: node_modules $(DRACULA)
$(lessc) less/dracula.less dracula.css --clean-css="--s1 --advanced --compatibility=ie8"
node_modules: package.json package-lock.json Makefile
ifndef NPM
$(error Missing dependency 'npm'. Please install and try again.)
endif
$(NPM) install
npm install
touch node_modules # fixes watch bug if you manually ran npm install
clean:
rm -rf node_modules
rm dracula.css
rm dracula.css
rm hacker.css

View File

@ -6,8 +6,6 @@ the latest compiled css will be available [here](https://tilde.team/css/hacker.c
if you want a quick start, feel free to use [skeleton.html](skeleton.html).
curl https://tilde.team/css/skeleton.html > mynewpage.html
the major changes from the original are a few tweaks to colors of code samples and font sizes.
feel free to use and modify as you like!
@ -26,7 +24,9 @@ check out the [example site](https://tilde.team/css/)!
you can pick up the latest [hacker.css](https://tilde.team/css/hacker.css) and reference the css in your page.
<link href="https://tilde.team/css/hacker.css" rel="stylesheet">
```html
<link href="https://tilde.team/css/hacker.css" rel="stylesheet">
```
**or** you could be a real h4x0r.
@ -34,17 +34,20 @@ you can pick up the latest [hacker.css](https://tilde.team/css/hacker.css) and r
open up your h4x0r terminal and type the following:
git clone https://tildegit.org/team/site
cd site/css
```bash
git clone https://tildegit.org/team/site
cd site/css
```
if you want to make adjustments with live-reloading, try this:
make dev
```bash
make dev
```
if you just want to compile, you can do this:
make
```bash
make
```
you'll find the compiled css in hacker.css to do with as you please

5
css/dracula.css Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>tilde dracula theme</title>
<title>tilde theme</title>
<link href="dracula.css" rel="stylesheet">
<style>
@ -27,6 +27,11 @@
</head>
<body>
<a href="https://tildegit.org/team/site/src/branch/master/css">
<img style="position: absolute; top: 0; left: 0; border: 0;z-index:1001;" src="img/fork.png" alt="Fork me on GitHub">
</a>
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
@ -69,7 +74,6 @@
<li>
<a href="//reddit.com/r/itsaunixsystem" target="_blank">H4x0rs Only</a>
</li>
<li><a href="/">&lt;- back</a></li>
</ul>
</div>
</div>
@ -88,6 +92,7 @@
<p>To hack around with the source or contribute, check out the project on tildegit</p>
<p>
<a class="btn btn-lg btn-primary" href="https://tildegit.org/team/site/src/branch/master/css" role="button">view on tildegit »</a>
<a class="btn btn-primary" href="https://tildegit.org/team/site/src/branch/master/css" id="stars"></a>
</p>
</div>
@ -353,16 +358,13 @@ end</pre>
<option>5</option>
</select>
<br>
<label>
Sample Dropdown
<select multiple="" class="form-control">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</label>
<select multiple="" class="form-control">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
</div>
<div class="form-group">
@ -413,10 +415,7 @@ end</pre>
<label class="control-label">Input addons</label>
<div class="input-group">
<span class="input-group-addon">$</span>
<label>
Text Input
<input class="form-control" type="text">
</label>
<input class="form-control" type="text">
<span class="input-group-btn">
<button class="btn btn-default" type="button">Button</button>
</span>
@ -801,7 +800,15 @@ end</pre>
</div>
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<!-- Github stars script -->
<script>jQuery(document).ready(function ($) {
$.getJSON("https://tildegit.org/api/v1/repos/team/site", function (data) {
$("#stars").text(data['stars_count'] + " stars");
});
});</script>
</body>
</html>

View File

@ -1,21 +1,13 @@
/*!
Fork Awesome 1.1.7
License - https://forkaweso.me/Fork-Awesome/license
Copyright 2018 Dave Gandy & Fork Awesome
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* Fork Awesome 1.1.0, originaly by Dave Gandy - http://forkawesome.github.io/Fork-Awesome/
* License - http://forkawesome.github.io/Fork-Awesome//license (Font: SIL OFL 1.1, CSS: MIT License)
*/
/* FONT PATH
* -------------------------- */
@font-face {
font-family: 'ForkAwesome';
src: url('../fonts/forkawesome-webfont.eot?v=1.1.7');
src: url('../fonts/forkawesome-webfont.eot?#iefix&v=1.1.7') format('embedded-opentype'), url('../fonts/forkawesome-webfont.woff2?v=1.1.7') format('woff2'), url('../fonts/forkawesome-webfont.woff?v=1.1.7') format('woff'), url('../fonts/forkawesome-webfont.ttf?v=1.1.7') format('truetype'), url('../fonts/forkawesome-webfont.svg?v=1.1.7#forkawesomeregular') format('svg');
src: url('../fonts/forkawesome-webfont.eot?v=1.1.0');
src: url('../fonts/forkawesome-webfont.eot?#iefix&v=1.1.0') format('embedded-opentype'), url('../fonts/forkawesome-webfont.woff2?v=1.1.0') format('woff2'), url('../fonts/forkawesome-webfont.woff?v=1.1.0') format('woff'), url('../fonts/forkawesome-webfont.ttf?v=1.1.0') format('truetype'), url('../fonts/forkawesome-webfont.svg?v=1.1.0#forkawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
@ -282,7 +274,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-repeat:before {
content: "\f01e";
}
.fa-sync:before,
.fa-refresh:before {
content: "\f021";
}
@ -368,7 +359,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-indent:before {
content: "\f03c";
}
.fa-video:before,
.fa-video-camera:before {
content: "\f03d";
}
@ -660,7 +650,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-bullhorn:before {
content: "\f0a1";
}
.fa-bell-o:before {
.fa-bell:before {
content: "\f0f3";
}
.fa-certificate:before {
@ -782,7 +772,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-google-plus-square:before {
content: "\f0d4";
}
.fa-google-plus-g:before,
.fa-google-plus:before {
content: "\f0d5";
}
@ -875,13 +864,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-suitcase:before {
content: "\f0f2";
}
.fa-bell:before {
.fa-bell-o:before {
content: "\f0a2";
}
.fa-coffee:before {
content: "\f0f4";
}
.fa-utensils:before,
.fa-cutlery:before {
content: "\f0f5";
}
@ -1153,7 +1141,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-eur:before {
content: "\f153";
}
.fa-pound:before,
.fa-gbp:before {
content: "\f154";
}
@ -1190,27 +1177,21 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-file-text:before {
content: "\f15c";
}
.fa-sort-alpha-down:before,
.fa-sort-alpha-asc:before {
content: "\f15d";
}
.fa-sort-alpha-up:before,
.fa-sort-alpha-desc:before {
content: "\f15e";
}
.fa-sort-amount-down:before,
.fa-sort-amount-asc:before {
content: "\f160";
}
.fa-sort-amount-up:before,
.fa-sort-amount-desc:before {
content: "\f161";
}
.fa-sort-numeric-down:before,
.fa-sort-numeric-asc:before {
content: "\f162";
}
.fa-sort-numeric-up:before,
.fa-sort-numeric-desc:before {
content: "\f163";
}
@ -1430,7 +1411,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-paw:before {
content: "\f1b0";
}
.fa-utensil-spoon:before,
.fa-spoon:before {
content: "\f1b1";
}
@ -1573,7 +1553,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-circle-thin:before {
content: "\f1db";
}
.fa-heading:before,
.fa-header:before {
content: "\f1dc";
}
@ -1704,7 +1683,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-angellist:before {
content: "\f209";
}
.fa-closed-captioning:before,
.fa-cc:before {
content: "\f20a";
}
@ -1749,7 +1727,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-cart-arrow-down:before {
content: "\f218";
}
.fa-gem:before,
.fa-diamond:before {
content: "\f219";
}
@ -2044,7 +2021,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-houzz:before {
content: "\f27c";
}
.fa-vimeo-v:before,
.fa-vimeo:before {
content: "\f27d";
}
@ -2141,7 +2117,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-audio-description:before {
content: "\f29e";
}
.fa-phone-volume:before,
.fa-volume-control-phone:before {
content: "\f2a0";
}
@ -2474,84 +2449,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.fa-joplin:before {
content: "\f310";
}
.fa-syncthing:before {
content: "\f311";
}
.fa-inkscape:before {
content: "\f312";
}
.fa-matrix-org:before {
content: "\f313";
}
.fa-pixelfed:before {
content: "\f314";
}
.fa-bootstrap:before {
content: "\f315";
}
.fa-dev-to:before {
content: "\f316";
}
.fa-hashnode:before {
content: "\f317";
}
.fa-jirafeau:before {
content: "\f318";
}
.fa-emby:before {
content: "\f319";
}
.fa-wikidata:before {
content: "\f31a";
}
.fa-gimp:before {
content: "\f31b";
}
.fa-c:before {
content: "\f31c";
}
.fa-digitalocean:before {
content: "\f31d";
}
.fa-att:before {
content: "\f31e";
}
.fa-gitea:before {
content: "\f31f";
}
.fa-file-epub:before {
content: "\f321";
}
.fa-python:before {
content: "\f322";
}
.fa-archlinux:before {
content: "\f323";
}
.fa-pleroma:before {
content: "\f324";
}
.fa-unsplash:before {
content: "\f325";
}
.fa-hackster:before {
content: "\f326";
}
.fa-spell-check:before {
content: "\f327";
}
.fa-moon:before {
content: "\f328";
}
.fa-sun:before {
content: "\f329";
}
.fa-f-droid:before {
content: "\f32a";
}
.fa-biometric:before {
content: "\f32b";
}
.sr-only {
position: absolute;
width: 1px;

File diff suppressed because one or more lines are too long

5
css/hacker.css Normal file

File diff suppressed because one or more lines are too long

BIN
css/img/fork.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="utf-8">
@ -27,6 +27,11 @@
</head>
<body>
<a href="https://tildegit.org/team/site/src/branch/master/css">
<img style="position: absolute; top: 0; left: 0; border: 0;z-index:1001;" src="img/fork.png" alt="Fork me on GitHub">
</a>
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
@ -69,7 +74,6 @@
<li>
<a href="//reddit.com/r/itsaunixsystem" target="_blank">H4x0rs Only</a>
</li>
<li><a href="/">&lt;- back</a></li>
</ul>
</div>
</div>
@ -88,6 +92,7 @@
<p>To hack around with the source or contribute, check out the project on tildegit</p>
<p>
<a class="btn btn-lg btn-primary" href="https://tildegit.org/team/site/src/branch/master/css" role="button">view on tildegit »</a>
<a class="btn btn-primary" href="https://tildegit.org/team/site/src/branch/master/css" id="stars"></a>
</p>
</div>
@ -353,16 +358,13 @@ end</pre>
<option>5</option>
</select>
<br>
<label>
Sample Dropdown
<select multiple="" class="form-control">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</label>
<select multiple="" class="form-control">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
</div>
<div class="form-group">
@ -413,10 +415,7 @@ end</pre>
<label class="control-label">Input addons</label>
<div class="input-group">
<span class="input-group-addon">$</span>
<label>
Text Input
<input class="form-control" type="text">
</label>
<input class="form-control" type="text">
<span class="input-group-btn">
<button class="btn btn-default" type="button">Button</button>
</span>
@ -801,7 +800,15 @@ end</pre>
</div>
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<!-- Github stars script -->
<script>jQuery(document).ready(function ($) {
$.getJSON("https://tildegit.org/api/v1/repos/team/site", function (data) {
$("#stars").text(data['stars_count'] + " stars");
});
});</script>
</body>
</html>

View File

@ -1,50 +1,9 @@
// import bootstrap base
@import "../node_modules/bootstrap/less/bootstrap.less";
@import (inline) "plex.css";
// import custom variables
@import "variables.less";
// dracula colors by SinaCutie
@hacker-primary-darker: darken(@hacker-primary, 20%); /* Primary 1 */
@hacker-primary-dark: darken(@hacker-primary, 10%); /* Primary 2 */
@hacker-primary: #F8F8F2; /* Main primary */
@hacker-primary-light: lighten(@hacker-primary, 10%); /* Primary 3 */
@hacker-primary-lighter: lighten(@hacker-primary, 20%); /* Primary 3 */
@hacker: @hacker-primary-lighter; /* Body text */
@hacker-bg: #282A36; /* Body bg */
@hacker-box-bg: lighten(@hacker-bg, 10%); /* Container elem bg */
@hacker-box-border: lighten(@hacker-bg, 20%); /* Container border */
@brand-primary: @hacker-primary;
@brand-success: #50FA7B;
@brand-warning: #F1FA8C;
@brand-danger: #FF5555;
@brand-info: #8BE9FD;
@comment: #6272A4;
@link-color: #BD93F9;
@pre-color: @hacker-primary;
@btn-default-color: @hacker-primary-lighter;
@btn-default-bg: @comment;
@btn-default-border: @hacker-box-border;
@btn-primary-bg: @hacker-primary-light;
@table-bg-active: @comment;
@panel-bg: @hacker-bg;
@panel-inner-border: @hacker-box-bg;
@panel-footer-bg: @hacker-box-bg;
@panel-default-heading-bg: lighten(@hacker-bg, 10%);
@panel-primary-text: @hacker-primary;
@panel-primary-border: @hacker-box-bg;
@panel-primary-heading-bg: @hacker-box-bg;
@list-group-active-bg: @comment;
@progress-bar-color: lighten(@hacker-primary-lighter, 10%);
@progress-bar-bg: #FFB86C;
@import "dracula/_variables.less";
// import custom theme changes
@import "_theme.less";
@import "hacker/_theme.less";

View File

@ -0,0 +1,366 @@
/*
A Bootstrap theme for 31337 H4X0RS
by Tobin Brown, 2015
forked by benharri for tilde.team
dracula colors for tilde.team by SinaCutie
Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
*/
// Hacker Colors
@hacker-primary-darker: darken(@hacker-primary, 20%); /* Primary 1 */
@hacker-primary-dark: darken(@hacker-primary, 10%); /* Primary 2 */
@hacker-primary: #F8F8F2; /* Main primary */
@hacker-primary-light: lighten(@hacker-primary, 10%); /* Primary 3 */
@hacker-primary-lighter: lighten(@hacker-primary, 20%); /* Primary 3 */
@hacker: @hacker-primary-lighter; /* Body text */
@hacker-bg: #282A36; /* Body bg */
@hacker-box-bg: lighten(@hacker-bg, 10%); /* Container elem bg */
@hacker-box-border: lighten(@hacker-bg, 20%); /* Container border */
// Bootstrap Colors
@gray-darker: #181417;
@gray-dark: #453c44;
@gray: #675b65;
@gray-light: #907f8d;
@gray-lighter: #b9adb6;
@brand-primary: @hacker-primary;
@brand-success: #50FA7B;
@brand-warning: #F1FA8C;
@brand-danger: #FF5555;
@brand-info: #8BE9FD;
@comment: #6272A4;
// Scaffolding
@body-bg: @hacker-bg;
@text-color: @hacker;
@link-color: #BD93F9;
@link-hover-color: lighten(@link-color, 10%);
@padding-base-vertical: 6px;
@padding-base-horizontal: 12px;
@padding-large-vertical: 10px;
@padding-large-horizontal: 16px;
@padding-small-vertical: 5px;
@padding-small-horizontal: 10px;
@border-radius-base: 2;
@border-radius-large: 4;
@border-radius-small: 1;
@line-height-large: 1.33;
@line-height-small: 1.5;
@component-active-color: @hacker-bg;
@component-active-bg: @hacker-primary-lighter;
// Typography
@font-family-sans-serif: "IBM Plex Mono", monospace;
@font-family-serif: "IBM Plex Mono", monospace;
@font-family-monospace: "IBM Plex Mono", monospace;
@font-family-base: @font-family-monospace;
@font-size-base: 16px;
@font-size-large: ceil(@font-size-base * 1.25);
@font-size-small: ceil(@font-size-base * 0.85);
@font-size-h1: floor((@font-size-base * 3));
@font-size-h2: floor((@font-size-base * 2.5));
@font-size-h3: floor((@font-size-base * 2));
@font-size-h4: floor((@font-size-base * 1.5));
@font-size-h5: floor((@font-size-base * 1.25));
@font-size-h6: @font-size-base;
@line-height-base: 1.428571429;
@line-height-computed: floor(@font-size-base * @line-height-base);
@headings-font-family: @font-family-base;
@headings-font-weight: 500;
@headings-line-height: 1.2;
@headings-color: @hacker-primary-lighter;
// Code
@code-color: @hacker-primary-lighter;
@code-bg: @hacker-box-bg;
@kbd-color: @hacker-primary-lighter;
@kbd-bg: @hacker-box-bg;
@pre-color: @hacker-primary;
@pre-bg: @hacker-box-bg;
@pre-border-color: @hacker-box-border;
// Buttons
@btn-font-weight: normal;
@btn-default-color: @hacker-primary-lighter;
@btn-default-bg: @comment;
@btn-default-border: @hacker-box-border;
@btn-primary-color: @hacker-bg;
@btn-primary-bg: @hacker-primary-light;
@btn-primary-border: darken(@btn-primary-bg, 10%);
@btn-success-color: @hacker-bg;
@btn-success-bg: @brand-success;
@btn-success-border: darken(@btn-success-bg, 10%);
@btn-warning-color: @hacker-bg;
@btn-warning-bg: @brand-warning;
@btn-warning-border: darken(@btn-warning-bg, 10%);
@btn-danger-color: @hacker-bg;
@btn-danger-bg: @brand-danger;
@btn-danger-border: darken(@btn-danger-bg, 10%);
@btn-info-color: @hacker-bg;
@btn-info-bg: @brand-info;
@btn-info-border: darken(@btn-info-bg, 10%);
@btn-link-disabled-color: @gray-light;
// Well
@well-bg: @hacker-box-bg;
@well-border: @hacker-box-border;
// Dropdowns
@dropdown-bg: @hacker-box-bg;
@dropdown-border: @hacker-box-border;
@dropdown-divider-bg: @hacker-box-border;
@dropdown-link-active-color: @component-active-color;
@dropdown-link-active-bg: @component-active-bg;
@dropdown-link-color: @hacker-primary-light;
@dropdown-link-hover-color: @link-hover-color;
@dropdown-link-hover-bg: @gray-darker;
@dropdown-link-disabled-color: @gray-light;
@dropdown-header-color: @headings-color;
@dropdown-caret-color: #000000;
// Custom colors
@dropdown-header-bg: lighten(@dropdown-bg, 10%);
// Forms
@input-bg: @hacker-bg;
@input-bg-disabled: lighten(@hacker-bg, 20%);
@input-color: @hacker;
@input-border: @hacker-box-border;
@input-border-focus: @component-active-bg;
@input-border-radius: @border-radius-base;
@input-color-placeholder: @hacker;
@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
@input-height-large: (floor(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
@legend-color: @headings-color;
@legend-border-color: @hacker-box-border;
@input-group-addon-bg: @hacker-bg;
@input-group-addon-border-color: @input-border;
// Table
@table-cell-padding: 8px;
@table-condensed-cell-padding: 5px;
@table-cell-padding: 8px;
@table-condensed-cell-padding: 5px;
@table-bg: @hacker-box-bg;
@table-bg-accent: lighten(@hacker-bg, 13%);
@table-bg-hover: darken(@gray-darker, 5%); /* Match active */
@table-bg-active: @comment;
@table-border-color: @hacker-box-border;
// Custom colors
@table-heading-color: @hacker-primary-lighter;
@table-heading-bg: darken(@hacker-box-bg, 5%);
@table-hover-color: @hacker-primary-lighter;
@table-active-color: @hacker-primary-lighter;
// Navbar
@navbar-height: 50px;
@navbar-margin-bottom: @line-height-computed;
@navbar-default-color: @hacker;
@navbar-default-bg: @hacker-bg;
@navbar-default-border: @hacker-bg;
@navbar-border-radius: @border-radius-base;
@navbar-padding-horizontal: floor(@grid-gutter-width / 2);
@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
@navbar-default-link-color: @link-color;
@navbar-default-link-hover-color: @link-hover-color;
@navbar-default-link-hover-bg: @hacker-bg;
@navbar-default-link-active-color: @hacker-bg;
@navbar-default-link-active-bg: @hacker-primary-lighter;
@navbar-default-link-disabled-color: #CCCCCC;
@navbar-default-link-disabled-bg: transparent;
@navbar-default-brand-color: @navbar-default-link-color;
@navbar-default-brand-hover-color: lighten(@navbar-default-link-color, 10%);
@navbar-default-brand-hover-bg: transparent;
@navbar-default-toggle-hover-bg: #DDDDDD;
@navbar-default-toggle-icon-bar-bg: #888888;
@navbar-default-toggle-border-color: #DDDDDD;
// Navs Tabs
@nav-link-padding: 10px 15px;
@nav-link-hover-bg: @gray-darker;
@nav-disabled-link-color: @hacker-primary-light;
@nav-disabled-link-hover-color: @gray-light;
@nav-tabs-border-color: #444444;
@nav-tabs-link-hover-border-color: #444444;
@nav-tabs-active-link-hover-bg: @hacker-primary-lighter;
@nav-tabs-active-link-hover-color: @hacker-bg;
@nav-tabs-active-link-hover-border-color: #444444;
@nav-tabs-justified-link-border-color: #DDDDDD;
@nav-tabs-justified-active-link-border-color: @body-bg;
@nav-pills-border-radius: @border-radius-base;
@nav-pills-active-link-hover-bg: @component-active-bg;
@nav-pills-active-link-hover-color: @component-active-color;
// Panel
@panel-bg: @hacker-bg;
@panel-body-padding: 15px;
@panel-heading-padding: 10px 15px;
@panel-footer-padding: @panel-heading-padding;
@panel-border-radius: @border-radius-base;
@panel-inner-border: @hacker-box-bg;
@panel-footer-bg: @hacker-box-bg;
@panel-default-text: @hacker-bg;
@panel-default-border: @hacker-box-bg;
@panel-default-heading-bg: lighten(@hacker-bg, 10%);
@panel-primary-text: @hacker-primary;
@panel-primary-border: @hacker-box-bg;
@panel-primary-heading-bg: @hacker-box-bg;
@panel-success-text: @state-success-text;
@panel-success-border: @state-success-border;
@panel-success-heading-bg: @state-success-bg;
@panel-info-text: @state-info-text;
@panel-info-border: @state-info-border;
@panel-info-heading-bg: @state-info-bg;
@panel-warning-text: @state-warning-text;
@panel-warning-border: @state-warning-border;
@panel-warning-heading-bg: @state-warning-bg;
@panel-danger-text: @state-danger-text;
@panel-danger-border: @state-danger-border;
@panel-danger-heading-bg: @state-danger-bg;
// Jumbotron
@jumbotron-padding: 30px;
@jumbotron-color: inherit;
@jumbotron-bg: lighten(@hacker-bg, 10%);
@jumbotron-heading-color: @headings-color;
@jumbotron-font-size: ceil((@font-size-base * 1.5));
// Pagination
@pagination-bg: @hacker-bg;
@pagination-border: #444444;
@pagination-hover-bg: @gray-darker;
@pagination-hover-color: @link-hover-color;
@pagination-hover-border: @pagination-border;
@pagination-active-bg: @component-active-bg;
@pagination-active-color: @component-active-color;
@pagination-active-border: @pagination-border;
@pagination-disabled-color: @hacker-primary;
@pagination-disabled-bg: @pagination-bg;
@pagination-disabled-border: @pagination-border;
@pager-bg: @pagination-bg;
@pager-border: @pagination-border;
@pager-border-radius: 0;
@pager-hover-bg: @pagination-hover-bg;
@pager-active-bg: @pagination-active-bg;
@pager-active-color: @pagination-active-color;
@pager-bg: @pagination-bg;
@pager-disabled-color: @gray-light;
// Form States
@state-warning-text: @brand-warning;
@state-warning-bg: lighten(@hacker-bg, 10%);
@state-warning-border: darken(spin(@state-warning-bg, -10), 3%);
@state-danger-text: @brand-danger;
@state-danger-bg: lighten(@hacker-bg, 10%);
@state-danger-border: darken(spin(@state-danger-bg, -10), 3%);
@state-success-text: @brand-success;
@state-success-bg: lighten(@hacker-bg, 10%);
@state-success-border: darken(spin(@state-success-bg, -10), 5%);
@state-info-text: @brand-info;
@state-info-bg: lighten(@hacker-bg, 10%);
@state-info-border: darken(spin(@state-info-bg, -10), 7%);
// ToolTip
@tooltip-max-width: 200px;
@tooltip-color: #FFFFFF;
@tooltip-bg: #000000;
@tooltip-arrow-width: 5px;
@tooltip-arrow-color: @tooltip-bg;
@tooltip-opacity: .9;
// Popover
@popover-bg: @hacker-box-bg;
@popover-max-width: 276px;
@popover-border-color: rgba(0,0,0,.2);
@popover-fallback-border-color: #333333;
@popover-title-bg: darken(@popover-bg, 3%);
@popover-arrow-width: 10px;
@popover-arrow-color: @popover-bg;
@popover-arrow-outer-width: (@popover-arrow-width + 1);
@popover-arrow-outer-color: rgba(0,0,0,.25);
@popover-arrow-outer-fallback-color: #999999;
// List Group
@list-group-bg: lighten(@hacker-bg, 5%);
@list-group-border: #222222;
@list-group-border-radius: @border-radius-base;
@list-group-hover-bg: lighten(@hacker-bg, 10%);
@list-group-active-color: @hacker-primary-lighter;
@list-group-active-bg: @comment;
@list-group-active-border: @list-group-active-bg;
@list-group-active-text-color: @hacker-bg;
@list-group-link-color: @hacker;
@list-group-link-heading-color: @hacker;
// Modal
@modal-content-bg: @hacker-box-bg;
@modal-content-border-color: transparent;
@modal-content-fallback-border-color: #999999;
@modal-backdrop-bg: @hacker-bg;
@modal-backdrop-opacity: .5;
@modal-header-border-color: lighten(@hacker-bg, 10%);
@modal-footer-border-color: @modal-header-border-color;
// Badge
@badge-color: @hacker;
@badge-bg: @hacker-bg;
// Progress bars
@progress-bg: @hacker-box-bg;
@progress-bar-color: lighten(@hacker-primary-lighter, 10%);
@progress-bar-bg: #FFB86C;
@progress-bar-success-bg: @brand-success;
@progress-bar-warning-bg: @brand-warning;
@progress-bar-danger-bg: @brand-danger;
@progress-bar-info-bg: @brand-info;
// Breadcrumb
@breadcrumb-bg: @hacker-box-bg;
@breadcrumb-color: @hacker-primary-light;
@breadcrumb-active-color: lighten(@hacker, 10%);
// Close
@close-color: @hacker-primary-light;
@close-text-shadow: none;
// Labels
@label-color: @hacker-bg;
// hr
@hr-border: lighten(@hacker-bg, 20%);

View File

@ -1,9 +1,9 @@
// import bootstrap base
@import "../node_modules/bootstrap/less/bootstrap.less";
// @import (inline) "plex.css";
@import (inline) "plex.css";
// import custom variables
@import "variables.less";
@import "hacker/_variables.less";
// import custom theme changes
@import "_theme.less";
@import "hacker/_theme.less";

View File

@ -1,13 +1,12 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Copyright 2022 DJ Chase
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked by mio for tilde.team
*/
select {
background-color: darken(@btn-default-bg, 5%);
background-color: darken(@btn-default-bg,5%);
border-color: @btn-default-border;
padding: 5px;
}
@ -31,29 +30,12 @@ a {
text-decoration: underline;
}
.btn-default {
.btn-styles(@btn-default-bg);
}
.btn-primary {
.btn-styles(@btn-primary-bg);
}
.btn-success {
.btn-styles(@btn-success-bg);
}
.btn-info {
.btn-styles(@btn-info-bg);
}
.btn-warning {
.btn-styles(@btn-warning-bg);
}
.btn-danger {
.btn-styles(@btn-danger-bg);
}
.btn-default { .btn-styles(@btn-default-bg); }
.btn-primary { .btn-styles(@btn-primary-bg); }
.btn-success { .btn-styles(@btn-success-bg); }
.btn-info { .btn-styles(@btn-info-bg); }
.btn-warning { .btn-styles(@btn-warning-bg); }
.btn-danger { .btn-styles(@btn-danger-bg); }
// Forms
@ -180,47 +162,27 @@ tr.active {
}
}
.alert-success .close {
.close-styles(@brand-success);
}
.alert-info .close {
.close-styles(@brand-info);
}
.alert-warning .close {
.close-styles(@brand-warning);
}
.alert-danger .close {
.close-styles(@brand-danger);
}
.alert-success .close { .close-styles(@brand-success); }
.alert-info .close { .close-styles(@brand-info); }
.alert-warning .close { .close-styles(@brand-warning); }
.alert-danger .close { .close-styles(@brand-danger); }
// Modals
// Apply close button mixin
.modal-header .close {
.close-styles(@close-color);
}
.modal-header .close { .close-styles(@close-color); }
// List groups
// Highlight active item
.list-group-item {
&.active {
font-weight: bold;
.list-group-item.active {
font-weight: bold;
border: 1px solid #222;
&:hover,
&:focus {
background: #1a1a1a;
border: 1px solid #222;
&:hover,
&:focus {
background: #1a1a1a;
border: 1px solid #222;
}
}
p {
word-wrap: break-word;
overflow-wrap: break-word;
}
}
@ -228,36 +190,15 @@ tr.active {
background: @hacker-primary-lighter;
color: @hacker-bg
}
*::selection {
background: @hacker-primary-lighter;
color: @hacker-bg
}
::-moz-selection {
background: @hacker-primary-lighter;
color: @hacker-bg
}
*::-moz-selection {
background: @hacker-primary-lighter;
color: @hacker-bg
}
ul.table-of-contents {
margin-bottom: 22px;
padding-bottom: 22px;
border-bottom: 1px solid @hacker-box-border;
}
// Headings
h1, h2 {
font-weight: bold;
}
// Space between paragraphs
p {
&:not(:last-child) {
margin-bottom: @line-height-with-unit;
}
}

View File

@ -7,16 +7,16 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Hacker Colors
@hacker-primary-darker: darken(@hacker-primary, 20%); /* Primary 1 */
@hacker-primary-dark: darken(@hacker-primary, 10%); /* Primary 2 */
@hacker-primary: #3EE77B; /* Main primary */
@hacker-primary-light: lighten(@hacker-primary, 10%); /* Primary 3 */
@hacker-primary-lighter: lighten(@hacker-primary, 20%); /* Primary 4 */
@hacker-primary-darker: darken(@hacker-primary-lighter, 40%); /* Primary 1 */
@hacker-primary-dark: darken(@hacker-primary-lighter, 30%); /* Primary 2 */
@hacker-primary: darken(@hacker-primary-lighter, 20%); /* Main primary */
@hacker-primary-light: darken(@hacker-primary-lighter, 10%); /* Primary 3 */
@hacker-primary-lighter: #3EE77B; /* Primary 3 */
@hacker: @hacker-primary; /* Body text */
@hacker-bg: #0e0e0e; /* Body bg */
@hacker-box-bg: lighten(@hacker-bg, 10%); /* Container elem bg */
@hacker-box-border: lighten(@hacker-bg, 20%); /* Container border */
@hacker: @hacker-primary-lighter; /* Body text */
@hacker-bg: #040304; /* Body bg */
@hacker-box-bg: lighten(@hacker-bg, 10%); /* Container elem bg */
@hacker-box-border: lighten(@hacker-bg, 20%); /* Container border */
// Bootstrap Colors
@ -26,7 +26,7 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
@gray-light: #907f8d;
@gray-lighter: #b9adb6;
@brand-primary: @hacker-primary-dark;
@brand-primary: @hacker-primary;
@brand-success: #00faa6;
@brand-warning: #ECD650;
@brand-danger: #FE6354;
@ -36,29 +36,27 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Scaffolding
@body-bg: @hacker-bg;
@text-color: @hacker;
@link-color: @hacker-primary-lighter;
@link-color: @hacker-primary-light;
@link-hover-color: lighten(@link-color, 10%);
@padding-base-vertical: 6px;
@padding-base-horizontal: 2ch;
@padding-base-horizontal: 12px;
@padding-large-vertical: 10px;
@padding-large-horizontal: 3ch;
@padding-large-horizontal: 16px;
@padding-small-vertical: 5px;
@padding-small-horizontal: 1ch;
@padding-small-horizontal: 10px;
@border-radius-base: 2;
@border-radius-large: 4;
@border-radius-small: 1;
@line-height-base: 1.428571429;
@line-height-with-unit: 1.428571429em;
@line-height-large: @line-height-base * 2;
@line-height-small: @line-height-base;
@line-height-large: 1.33;
@line-height-small: 1.5;
@component-active-color: @hacker-bg;
@component-active-bg: @hacker-primary-lighter;
// Typography
@font-family-monospace: "IBM Plex Mono", "JetBrains Mono", "Fira Mono", Consolas, Inconsolata, ui-monospace, monospace;
@font-family-sans-serif: @font-family-monospace;
@font-family-serif: @font-family-monospace;
@font-family-sans-serif: "IBM Plex Mono", monospace;
@font-family-serif: "IBM Plex Mono", monospace;
@font-family-monospace: "IBM Plex Mono", monospace;
@font-family-base: @font-family-monospace;
@font-size-base: 16px;
@font-size-large: ceil(@font-size-base * 1.25);
@ -69,10 +67,11 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
@font-size-h4: floor((@font-size-base * 1.5));
@font-size-h5: floor((@font-size-base * 1.25));
@font-size-h6: @font-size-base;
@line-height-base: 1.428571429;
@line-height-computed: floor(@font-size-base * @line-height-base);
@headings-font-family: @font-family-base;
@headings-font-weight: 500;
@headings-line-height: @line-height-base;
@headings-line-height: 1.2;
@headings-color: @hacker-primary-lighter;
@ -90,11 +89,11 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Buttons
@btn-font-weight: normal;
@btn-default-color: @hacker-bg;
@btn-default-color: @hacker-primary-lighter;
@btn-default-bg: darken(@hacker-primary-darker, 5%);
@btn-default-border: #444444;
@btn-primary-color: @hacker-bg;
@btn-primary-bg: @brand-primary;
@btn-primary-bg: @hacker-primary-light;
@btn-primary-border: darken(@btn-primary-bg, 10%);
@btn-success-color: @hacker-bg;
@btn-success-bg: @brand-success;
@ -170,7 +169,7 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
@navbar-height: 50px;
@navbar-margin-bottom: @line-height-computed;
@navbar-default-color: @hacker;
@navbar-default-bg: @hacker-box-bg;
@navbar-default-bg: @hacker-bg;
@navbar-default-border: @hacker-bg;
@navbar-border-radius: @border-radius-base;
@navbar-padding-horizontal: floor(@grid-gutter-width / 2);
@ -208,14 +207,14 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Panel
@panel-bg: @hacker-box-bg;
@panel-bg: @hacker-bg;
@panel-body-padding: 15px;
@panel-heading-padding: 10px 15px;
@panel-footer-padding: @panel-heading-padding;
@panel-border-radius: @border-radius-base;
@panel-inner-border: @hacker-bg;
@panel-footer-bg: @hacker-bg;
@panel-inner-border: @hacker-box-bg;
@panel-footer-bg: @hacker-box-bg;
@panel-default-text: @hacker-bg;
@panel-default-border: @hacker-box-bg;
@ -339,12 +338,12 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Progress bars
@progress-bg: @hacker-box-bg;
@progress-bar-color: @hacker-primary;
@progress-bar-bg: @hacker-primary-darker;
@progress-bar-success-bg: @brand-success;
@progress-bar-warning-bg: @brand-warning;
@progress-bar-danger-bg: @brand-danger;
@progress-bar-info-bg: @brand-info;
@progress-bar-color: lighten(@hacker-primary-lighter, 10%);
@progress-bar-bg: @hacker-primary-lighter;
@progress-bar-success-bg: @hacker-primary-darker;
@progress-bar-warning-bg: @hacker-primary-dark;
@progress-bar-danger-bg: @hacker-primary-light;
@progress-bar-info-bg: @hacker-primary-lighter;
// Breadcrumb

View File

@ -1,56 +1,49 @@
@font-face {
font-family: 'IBM Plex Mono';
font-style: italic;
font-weight: 300;
src: local('IBM Plex Mono Light Italic'), local('IBMPlexMono-LightItalic'), url(https://tilde.team/fonts/plex/IBMPlexMono-LightItalic.woff2) format('woff2');
font-family: 'IBM Plex Mono';
font-style: italic;
font-weight: 300;
src: local('IBM Plex Mono Light Italic'), local('IBMPlexMono-LightItalic'), url(https://tilde.team/fonts/plex/IBMPlexMono-LightItalic.woff2) format('woff2');
}
/* latin */
@font-face {
font-family: 'IBM Plex Mono';
font-style: italic;
font-weight: 400;
src: local('IBM Plex Mono Italic'), local('IBMPlexMono-Italic'), url(https://tilde.team/fonts/plex/IBMPlexMono-Italic.woff2) format('woff2');
font-family: 'IBM Plex Mono';
font-style: italic;
font-weight: 400;
src: local('IBM Plex Mono Italic'), local('IBMPlexMono-Italic'), url(https://tilde.team/fonts/plex/IBMPlexMono-Italic.woff2) format('woff2');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: italic;
font-weight: 500;
src: local('IBM Plex Mono Medium Italic'), local('IBMPlexMono-MediumItalic'), url(https://tilde.team/fonts/plex/IBMPlexMono-MediumItalic.woff2) format('woff2');
font-family: 'IBM Plex Mono';
font-style: italic;
font-weight: 500;
src: local('IBM Plex Mono Medium Italic'), local('IBMPlexMono-MediumItalic'), url(https://tilde.team/fonts/plex/IBMPlexMono-MediumItalic.woff2) format('woff2');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: italic;
font-weight: 700;
src: local('IBM Plex Mono Bold Italic'), local('IBMPlexMono-BoldItalic'), url(https://tilde.team/fonts/plex/IBMPlexMono-BoldItalic.woff2) format('woff2');
font-family: 'IBM Plex Mono';
font-style: italic;
font-weight: 700;
src: local('IBM Plex Mono Bold Italic'), local('IBMPlexMono-BoldItalic'), url(https://tilde.team/fonts/plex/IBMPlexMono-BoldItalic.woff2) format('woff2');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 300;
src: local('IBM Plex Mono Light'), local('IBMPlexMono-Light'), url(https://tilde.team/fonts/plex/IBMPlexMono-Light.woff2) format('woff2');
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 300;
src: local('IBM Plex Mono Light'), local('IBMPlexMono-Light'), url(https://tilde.team/fonts/plex/IBMPlexMono-Light.woff2) format('woff2');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 400;
src: local('IBM Plex Mono'), local('IBMPlexMono'), url(https://tilde.team/fonts/plex/IBMPlexMono-Regular.woff2) format('woff2');
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 400;
src: local('IBM Plex Mono'), local('IBMPlexMono'), url(https://tilde.team/fonts/plex/IBMPlexMono-Regular.woff2) format('woff2');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 500;
src: local('IBM Plex Mono Medium'), local('IBMPlexMono-Medium'), url(https://tilde.team/fonts/plex/IBMPlexMono-Medium.woff2) format('woff2');
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 500;
src: local('IBM Plex Mono Medium'), local('IBMPlexMono-Medium'), url(https://tilde.team/fonts/plex/IBMPlexMono-Medium.woff2) format('woff2');
}
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 700;
src: local('IBM Plex Mono Bold'), local('IBMPlexMono-Bold'), url(https://tilde.team/fonts/plex/IBMPlexMono-Bold.woff2) format('woff2');
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 700;
src: local('IBM Plex Mono Bold'), local('IBMPlexMono-Bold'), url(https://tilde.team/fonts/plex/IBMPlexMono-Bold.woff2) format('woff2');
}

1797
css/package-lock.json generated

File diff suppressed because it is too large Load Diff

6
css/package.json Normal file → Executable file
View File

@ -11,10 +11,10 @@
"url": "https://tildegit.org/team/site/issues"
},
"dependencies": {
"bootstrap": "3.4.1",
"less": "3.13.1",
"bootstrap": "3.3.7",
"less": "2.7.3",
"less-plugin-clean-css": "1.5.1",
"light-server": "^2.9.1"
"light-server": "^2.5.1"
},
"preferGlobal": true,
"license": "MIT"

1052
css/shrinkwrap.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,11 +2,11 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://tilde.team/css/hacker.css">
<title>my page</title>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://tilde.team/css/hacker.css">
<title>my page</title>
</head>
<body>

830
css/yarn.lock Normal file
View File

@ -0,0 +1,830 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
ajv@^4.9.1:
version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
dependencies:
co "^4.6.0"
json-stable-stringify "^1.0.1"
amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
asn1@~0.2.3:
version "0.2.4"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
dependencies:
safer-buffer "~2.1.0"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
assert-plus@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
aws-sign2@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
aws4@^1.2.1:
version "1.8.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
basic-auth@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba"
dependencies:
safe-buffer "5.1.1"
bcrypt-pbkdf@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
dependencies:
tweetnacl "^0.14.3"
boom@2.x.x:
version "2.10.1"
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
dependencies:
hoek "2.x.x"
bootstrap@3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71"
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
clean-css@^3.0.1:
version "3.4.28"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff"
dependencies:
commander "2.8.x"
source-map "0.4.x"
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
combined-stream@^1.0.5, combined-stream@~1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
dependencies:
delayed-stream "~1.0.0"
commander@2.8.x:
version "2.8.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
dependencies:
graceful-readlink ">= 1.0.0"
commander@^2.15.1:
version "2.17.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
connect-history-api-fallback@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
connect-injector@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/connect-injector/-/connect-injector-0.4.4.tgz#a81959c31ecf5caa0f3dcc325c28ed90b830aa90"
dependencies:
debug "^2.0.0"
q "^1.0.1"
stream-buffers "^0.2.3"
uberproto "^1.1.0"
connect@^3.6.6:
version "3.6.6"
resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524"
dependencies:
debug "2.6.9"
finalhandler "1.1.0"
parseurl "~1.3.2"
utils-merge "1.0.1"
core-util-is@1.0.2, 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"
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
dependencies:
boom "2.x.x"
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
dependencies:
assert-plus "^1.0.0"
debug@2.6.9, debug@^2.0.0, debug@^2.6.8:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
ms "2.0.0"
debug@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
ms "2.0.0"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
depd@~1.1.1, depd@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
detect-node@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
dependencies:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
encodeurl@~1.0.1, encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
errno@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
dependencies:
prr "~1.0.1"
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
etag@~1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
eventemitter3@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
extend@~3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
finalhandler@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
dependencies:
debug "2.6.9"
encodeurl "~1.0.1"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.2"
statuses "~1.3.1"
unpipe "~1.0.0"
follow-redirects@^1.0.0:
version "1.5.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.2.tgz#5a9d80e0165957e5ef0c1210678fc5c4acb9fb03"
dependencies:
debug "^3.1.0"
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
form-data@~2.1.1:
version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.5"
mime-types "^2.1.12"
fresh@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
gaze@^1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
dependencies:
globule "^1.0.0"
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
dependencies:
assert-plus "^1.0.0"
glob@~7.1.1:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
globule@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
dependencies:
glob "~7.1.1"
lodash "~4.17.10"
minimatch "~3.0.2"
graceful-fs@^4.1.2:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
"graceful-readlink@>= 1.0.0":
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
handle-thing@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
har-schema@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
har-validator@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
dependencies:
ajv "^4.9.1"
har-schema "^1.0.5"
hawk@~3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
dependencies:
boom "2.x.x"
cryptiles "2.x.x"
hoek "2.x.x"
sntp "1.x.x"
hoek@2.x.x:
version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
hpack.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
dependencies:
inherits "^2.0.1"
obuf "^1.0.0"
readable-stream "^2.0.1"
wbuf "^1.1.0"
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
dependencies:
depd "~1.1.2"
inherits "2.0.3"
setprototypeof "1.1.0"
statuses ">= 1.4.0 < 2"
http-proxy@^1.17.0:
version "1.17.0"
resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
dependencies:
eventemitter3 "^3.0.0"
follow-redirects "^1.0.0"
requires-port "^1.0.0"
http-signature@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
dependencies:
assert-plus "^0.2.0"
jsprim "^1.2.2"
sshpk "^1.7.0"
image-size@~0.5.0:
version "0.5.5"
resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
dependencies:
jsonify "~0.0.0"
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
dependencies:
assert-plus "1.0.0"
extsprintf "1.3.0"
json-schema "0.2.3"
verror "1.10.0"
less-plugin-clean-css@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/less-plugin-clean-css/-/less-plugin-clean-css-1.5.1.tgz#cc57af7aa3398957e56decebe63cb60c23429703"
dependencies:
clean-css "^3.0.1"
less@2.7.3:
version "2.7.3"
resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b"
optionalDependencies:
errno "^0.1.1"
graceful-fs "^4.1.2"
image-size "~0.5.0"
mime "^1.2.11"
mkdirp "^0.5.0"
promise "^7.1.1"
request "2.81.0"
source-map "^0.5.3"
light-server@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/light-server/-/light-server-2.5.1.tgz#1298718a56df9505ae31fcdf4ab0025c597de6c4"
dependencies:
commander "^2.15.1"
connect "^3.6.6"
connect-history-api-fallback "^1.5.0"
connect-injector "^0.4.4"
gaze "^1.1.2"
http-proxy "^1.17.0"
morgan "~1.9.0"
opener "^1.4.3"
parseurl "^1.3.2"
serve-static "~1.13.1"
spdy "^3.4.7"
strip-json-comments "^2.0.1"
ws "^1.0.1"
lodash@~4.17.10:
version "4.17.10"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
mime-db@~1.35.0:
version "1.35.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47"
mime-types@^2.1.12, mime-types@~2.1.7:
version "2.1.19"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0"
dependencies:
mime-db "~1.35.0"
mime@1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
mime@^1.2.11:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
minimalistic-assert@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
minimatch@^3.0.4, minimatch@~3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
brace-expansion "^1.1.7"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
mkdirp@^0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
morgan@~1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051"
dependencies:
basic-auth "~2.0.0"
debug "2.6.9"
depd "~1.1.1"
on-finished "~2.3.0"
on-headers "~1.0.1"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
obuf@^1.0.0, obuf@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
dependencies:
ee-first "1.1.1"
on-headers@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
opener@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
options@>=0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
parseurl@^1.3.2, parseurl@~1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
process-nextick-args@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
dependencies:
asap "~2.0.3"
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
q@^1.0.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
range-parser@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
readable-stream@^2.0.1, readable-stream@^2.2.9:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
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"
request@2.81.0:
version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
dependencies:
aws-sign2 "~0.6.0"
aws4 "^1.2.1"
caseless "~0.12.0"
combined-stream "~1.0.5"
extend "~3.0.0"
forever-agent "~0.6.1"
form-data "~2.1.1"
har-validator "~4.2.1"
hawk "~3.1.3"
http-signature "~1.1.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.7"
oauth-sign "~0.8.1"
performance-now "^0.2.0"
qs "~6.4.0"
safe-buffer "^5.0.1"
stringstream "~0.0.4"
tough-cookie "~2.3.0"
tunnel-agent "^0.6.0"
uuid "^3.0.0"
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
safe-buffer@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
safe-buffer@^5.0.1, 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"
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
select-hose@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
send@0.16.2:
version "0.16.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
dependencies:
debug "2.6.9"
depd "~1.1.2"
destroy "~1.0.4"
encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
http-errors "~1.6.2"
mime "1.4.1"
ms "2.0.0"
on-finished "~2.3.0"
range-parser "~1.2.0"
statuses "~1.4.0"
serve-static@~1.13.1:
version "1.13.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
dependencies:
encodeurl "~1.0.2"
escape-html "~1.0.3"
parseurl "~1.3.2"
send "0.16.2"
setprototypeof@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
dependencies:
hoek "2.x.x"
source-map@0.4.x:
version "0.4.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
dependencies:
amdefine ">=0.0.4"
source-map@^0.5.3:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
spdy-transport@^2.0.18:
version "2.1.0"
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1"
dependencies:
debug "^2.6.8"
detect-node "^2.0.3"
hpack.js "^2.1.6"
obuf "^1.1.1"
readable-stream "^2.2.9"
safe-buffer "^5.0.1"
wbuf "^1.7.2"
spdy@^3.4.7:
version "3.4.7"
resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"
dependencies:
debug "^2.6.8"
handle-thing "^1.2.5"
http-deceiver "^1.2.7"
safe-buffer "^5.0.1"
select-hose "^2.0.0"
spdy-transport "^2.0.18"
sshpk@^1.7.0:
version "1.14.2"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
dashdash "^1.12.0"
getpass "^0.1.1"
safer-buffer "^2.0.2"
optionalDependencies:
bcrypt-pbkdf "^1.0.0"
ecc-jsbn "~0.1.1"
jsbn "~0.1.0"
tweetnacl "~0.14.0"
"statuses@>= 1.4.0 < 2":
version "1.5.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
statuses@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
statuses@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
stream-buffers@^0.2.3:
version "0.2.6"
resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-0.2.6.tgz#181c08d5bb3690045f69401b9ae6a7a0cf3313fc"
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
dependencies:
safe-buffer "~5.1.0"
stringstream@~0.0.4:
version "0.0.6"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
strip-json-comments@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
tough-cookie@~2.3.0:
version "2.3.4"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
dependencies:
punycode "^1.4.1"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
dependencies:
safe-buffer "^5.0.1"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
uberproto@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/uberproto/-/uberproto-1.2.0.tgz#61d4eab024f909c4e6ea52be867c4894a4beeb76"
ultron@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
uuid@^3.0.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
verror@1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
dependencies:
assert-plus "^1.0.0"
core-util-is "1.0.2"
extsprintf "^1.2.0"
wbuf@^1.1.0, wbuf@^1.7.2:
version "1.7.3"
resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
dependencies:
minimalistic-assert "^1.0.0"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
ws@^1.0.1:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
dependencies:
options ">=0.0.5"
ultron "1.0.x"

4
discord/index.php Executable file
View File

@ -0,0 +1,4 @@
<?php
header("Location:https://discord.gg/BH4Bs5U");
die();

2
donate/index.php Normal file
View File

@ -0,0 +1,2 @@
<?php header("Location: https://bhh.bh/donate/"); die();

Binary file not shown.

View File

@ -1,11 +1,11 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2019-2-18: Created with FontForge (http://fontforge.org)
2018-5-12: Created with FontForge (http://fontforge.org)
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<metadata>
Created by FontForge 20180321 at Mon Feb 18 18:29:30 2019
Created by FontForge 20180321 at Sat May 12 14:32:04 2018
By Julien Deswaef
The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/OFL). Fork Awesome is a fork based of off Font Awesome 4.7.0 by Dave Gandy. More info on licenses at https://forkawesome.github.io
</metadata>
@ -19,10 +19,10 @@ The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/
panose-1="2 0 5 3 0 0 0 0 0 0"
ascent="1536"
descent="-256"
bbox="-0.653061 -264 2304.01 1538"
bbox="-0.653061 -264 2304.01 1536.25"
underline-thickness="89.6"
underline-position="-179.2"
unicode-range="U+0020-F32B"
unicode-range="U+0020-F310"
/>
<missing-glyph />
<glyph glyph-name="space" unicode=" " horiz-adv-x="200"
@ -50,9 +50,9 @@ d="M256 224v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192c0 17 15 32 3
c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 224v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM256 1376v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192
c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 608v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344
c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32z" />
<glyph glyph-name="archlinux" unicode="&#xf323;" horiz-adv-x="1794"
d="M897 1538c164 -386 203 -504 682 -1397c-61 36 -138 70 -247 98c158 -81 236 -156 310 -214c47 -87 97 -179 152 -281c-281 162 -499 263 -702 303c7 31 11 64 12 98c5 182 -83 337 -195 347s-207 -131 -212 -313v-9c0 -43 4 -84 13 -122c-205 -39 -426 -140 -710 -304
c362 650 540 989 654 1226c60 -50 139 -99 256 -147c-109 76 -175 143 -230 201c89 190 137 318 217 514z" />
<glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1192"
d="M956 1102l37 194c7 32 -17 57 -44 57h-712c-32 0 -54 -29 -54 -54v-1101c0 -3 3 -4 6 -1c262 315 291 352 291 352c30 35 42 41 86 41h239c33 0 52 28 55 44s31 162 37 191s-21 59 -48 59h-294c-39 0 -67 28 -67 67v42c0 39 28 66 67 66h346c24 0 51 22 55 43zM1183 1324
c-37 -180 -148 -749 -158 -790c-12 -47 -30 -129 -144 -129h-271c-11 0 -12 1 -22 -10c0 0 -7 -8 -426 -494c-33 -38 -87 -31 -107 -23s-55 32 -55 98v1410c0 58 36 150 158 150h888c130 0 165 -74 137 -212zM1183 1324l-158 -790c10 41 121 610 158 790z" />
<glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792"
d="M512 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 288v-192c0 -53 -43 -96 -96 -96h-320
c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96
@ -143,8 +143,6 @@ d="M768 96v1088c-300 0 -544 -244 -544 -544s244 -544 544 -544zM1536 640c0 -424 -3
<glyph glyph-name="subway" unicode="&#xf239;"
d="M1088 1536c247 0 448 -143 448 -320v-896c0 -173 -191 -313 -431 -319l213 -202c21 -20 7 -55 -22 -55h-1056c-29 0 -43 35 -22 55l213 202c-240 6 -431 146 -431 319v896c0 177 201 320 448 320h640zM288 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160
s72 -160 160 -160zM704 768v512h-544v-512h544zM1248 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM1408 768v512h-576v-512h576z" />
<glyph glyph-name="unslpash" unicode="&#xf325;"
d="M1052 728h484v-856h-1536v856h484v-428h568v428zM484 1408h568v-428h-568v428z" />
<glyph glyph-name="chevron-down" unicode="&#xf078;" horiz-adv-x="1612"
d="M1593 728l-742 -741c-25 -25 -65 -25 -90 0l-742 741c-25 25 -25 66 0 91l166 165c25 25 65 25 90 0l531 -531l531 531c25 25 65 25 90 0l166 -165c25 -25 25 -66 0 -91z" />
<glyph glyph-name="location-arrow" unicode="&#xf124;" horiz-adv-x="1408"
@ -213,9 +211,6 @@ c0 -9 -1 -18 -2 -27c-116 0 -233 20 -349 20c-14 0 -34 -6 -48 -8c-63 -11 -125 -14
d="M1536 640c0 -424 -344 -768 -768 -768c-76 0 -148 11 -218 32c29 46 62 105 78 164c0 0 9 34 54 211c26 -51 104 -96 187 -96c247 0 415 225 415 527c0 227 -193 440 -487 440c-364 0 -548 -262 -548 -480c0 -132 50 -250 157 -294c17 -7 33 0 38 20c4 13 12 47 16 61
c5 20 3 26 -11 43c-31 37 -51 84 -51 151c0 194 145 368 378 368c206 0 320 -126 320 -295c0 -221 -98 -408 -244 -408c-80 0 -140 66 -121 148c23 97 68 202 68 272c0 63 -34 116 -104 116c-82 0 -148 -85 -148 -199c0 0 0 -73 25 -122c-84 -356 -99 -418 -99 -418
c-14 -58 -15 -123 -13 -177c-271 119 -460 389 -460 704c0 424 344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="sun" unicode="&#xf329;" horiz-adv-x="1707"
d="M1706 363c-3 -10 -11 -17 -20 -20l-292 -96v-306c0 -10 -5 -20 -13 -26c-9 -6 -19 -8 -29 -4l-292 94l-180 -248c-6 -8 -16 -13 -26 -13s-20 5 -26 13l-180 248l-292 -94c-10 -4 -20 -2 -29 4c-8 6 -13 16 -13 26v306l-292 96c-9 3 -17 10 -20 20s-2 21 4 29l180 248
l-180 248c-6 9 -7 19 -4 29s11 17 20 20l292 96v306c0 10 5 20 13 26c9 6 19 8 29 4l292 -94l180 248c12 16 40 16 52 0l180 -248l292 94c10 4 20 2 29 -4c8 -6 13 -16 13 -26v-306l292 -96c9 -3 17 -10 20 -20s2 -20 -4 -29l-180 -248l180 -248c6 -8 7 -19 4 -29z" />
<glyph glyph-name="cart-plus" unicode="&#xf217;" horiz-adv-x="1664"
d="M1216 832c0 35 -29 64 -64 64h-128v128c0 35 -29 64 -64 64s-64 -29 -64 -64v-128h-128c-35 0 -64 -29 -64 -64s29 -64 64 -64h128v-128c0 -35 29 -64 64 -64s64 29 64 64v128h128c35 0 64 29 64 64zM640 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
s128 -57 128 -128zM1536 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1664 1088v-512c0 -32 -24 -60 -57 -64l-1044 -122c4 -22 13 -47 13 -70s-14 -44 -24 -64h920c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64
@ -308,8 +303,10 @@ c-6 -25 -8 -66 -27 -84c-13 -12 -34 -14 -51 -14c-47 0 -94 11 -141 11c-14 0 -35 -1
c11 -40 64 -210 64 -234zM776 760c-17 0 -33 7 -45 19c-25 25 -26 66 0 91c24 24 37 56 37 90s-13 66 -37 91c-26 25 -25 65 0 90s65 25 90 0c48 -48 75 -113 75 -181s-27 -133 -75 -181c-13 -12 -29 -19 -45 -19zM957 579c-17 0 -33 6 -45 19c-25 25 -25 65 0 90
c72 73 112 169 112 272s-40 199 -112 272c-25 25 -25 65 0 90s65 25 90 0c97 -97 150 -225 150 -362s-53 -265 -150 -362c-12 -13 -29 -19 -45 -19zM1138 398c-17 0 -33 6 -45 19c-25 25 -25 65 0 90c120 121 187 282 187 453s-67 332 -187 453c-25 25 -25 65 0 90
s65 25 90 0c145 -145 225 -338 225 -543s-80 -398 -225 -543c-12 -13 -29 -19 -45 -19z" />
<glyph glyph-name="biometric" unicode="&#xf32b;" horiz-adv-x="2304"
d="M1419 640c0 -147 -120 -267 -267 -267s-267 120 -267 267s120 267 267 267s267 -120 267 -267zM0 1222h2304v-521h-769c-29 185 -190 327 -383 327s-354 -142 -383 -327h-769v521zM0 579h769c29 -185 190 -327 383 -327s354 142 383 327h769v-521h-2304v521z" />
<glyph glyph-name="code-fork" unicode="&#xf126;" horiz-adv-x="1024"
d="M288 64c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM288 1216c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM928 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1024 1088c0 -71 -39 -133 -96 -166
c-3 -361 -259 -441 -429 -495c-159 -50 -211 -74 -211 -171v-26c57 -33 96 -95 96 -166c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 71 39 133 96 166v820c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192c0 -71 -39 -133 -96 -166v-497
c51 25 105 42 154 57c186 59 292 103 294 312c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192z" />
<glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792"
d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 832v-256c0 -35 -29 -64 -64 -64h-1664
c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 1344v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64z" />
@ -391,9 +388,9 @@ c92 -39 167 -87 235 -152z" />
d="M148 1404h1236c82 0 149 -66 149 -148v-1236c0 -82 -67 -148 -149 -148h-1236c-82 0 -148 66 -148 148v1236c0 82 66 148 148 148zM736 1150v0l-161 -25l-133 -553c-8 -33 -12 -64 -12 -93s6 -54 18 -76s32 -40 60 -53s68 -19 117 -19l31 128c-18 1 -32 4 -42 9
s-18 12 -22 20s-5 17 -5 27s1 23 4 35zM985 902v0c-42 0 -80 -3 -116 -10s-67 -14 -95 -22l-174 -722h155l47 189c24 -4 47 -6 71 -6c49 0 94 8 135 25s76 41 106 72s52 67 69 109s25 88 25 139c0 31 -4 61 -13 88s-22 51 -40 72c-18 20 -41 36 -69 48s-62 18 -101 18z
M965 772v0c33 0 56 -11 69 -32s20 -46 20 -76c0 -31 -4 -59 -13 -84s-21 -47 -37 -65s-34 -32 -56 -42s-47 -15 -74 -15c-17 0 -32 1 -44 4l73 303c19 4 40 7 62 7z" />
<glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1192"
d="M956 1102l37 194c7 32 -17 57 -44 57h-712c-32 0 -54 -29 -54 -54v-1101c0 -3 3 -4 6 -1c262 315 291 352 291 352c30 35 42 41 86 41h239c33 0 52 28 55 44s31 162 37 191s-21 59 -48 59h-294c-39 0 -67 28 -67 67v42c0 39 28 66 67 66h346c24 0 51 22 55 43zM1183 1324
c-37 -180 -148 -749 -158 -790c-12 -47 -30 -129 -144 -129h-271c-11 0 -12 1 -22 -10c0 0 -7 -8 -426 -494c-33 -38 -87 -31 -107 -23s-55 32 -55 98v1410c0 58 36 150 158 150h888c130 0 165 -74 137 -212zM1183 1324l-158 -790c10 41 121 610 158 790z" />
<glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
d="M960 864c159 0 288 -129 288 -288s-129 -288 -288 -288s-288 129 -288 288s129 288 288 288zM1664 1280c141 0 256 -115 256 -256v-896c0 -141 -115 -256 -256 -256h-1408c-141 0 -256 115 -256 256v896c0 141 115 256 256 256h224l51 136c25 66 103 120 173 120h512
c70 0 148 -54 173 -120l51 -136h224zM960 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
<glyph glyph-name="music" unicode="&#xf001;"
d="M1536 1312v-1120c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v537l-768 -237v-709c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v967c0 42 28 79 68 92l832 256c9 3 18 4 28 4
c53 0 96 -43 96 -96z" />
@ -545,10 +542,9 @@ h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
<glyph glyph-name="sticky-note-o" unicode="&#xf24a;"
d="M1400 256h-248v-248c17 6 34 15 41 22l185 185c7 7 16 24 22 41zM1120 384h288v896h-1280v-1280h896v288c0 53 43 96 96 96zM1536 1312v-1024c0 -53 -31 -127 -68 -164l-184 -184c-37 -37 -111 -68 -164 -68h-1024c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344
c53 0 96 -43 96 -96z" />
<glyph glyph-name="fonticons" unicode="&#xf280;"
d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925c41 0 57 -15 56 -79l174 21c0 153 -105 181 -222 181c-174 0 -265 -70 -265 -240v-72h-96v-128h76
c10 0 20 0 20 -8v-382c0 -19 -5 -25 -23 -27l-73 -7v-88h448v86l-149 14c-18 2 -11 5 -11 25v387h191l38 128h-231c-10 0 2 7 2 15v80c0 60 2 94 65 94zM1248 96v86l-54 9c-19 3 -10 5 -10 25v520h-275l-23 -101l83 -22c13 -4 23 -13 23 -27v-370c0 -19 -8 -23 -26 -25
l-70 -9v-86h352z" />
<glyph glyph-name="moon-o" unicode="&#xf186;" horiz-adv-x="1471"
d="M1262 233c-36 -6 -73 -9 -110 -9c-371 0 -672 301 -672 672c0 127 37 251 104 357c-266 -79 -456 -323 -456 -613c0 -353 287 -640 640 -640c193 0 374 88 494 233zM1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767
c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
<glyph glyph-name="comments-o" unicode="&#xf0e6;" horiz-adv-x="1792"
d="M704 1152c-312 0 -576 -176 -576 -384c0 -110 74 -216 202 -290l97 -56l-35 -84c21 12 42 25 62 39l44 31l53 -10c50 -9 101 -14 153 -14c312 0 576 176 576 384s-264 384 -576 384zM704 1280c389 0 704 -229 704 -512s-315 -512 -704 -512c-61 0 -120 6 -176 16
c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512zM1526 111c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29
@ -577,10 +573,6 @@ v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128
<glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792"
d="M640 1280h512v128h-512v-128zM1792 640v-480c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v480h672v-160c0 -35 29 -64 64 -64h320c35 0 64 29 64 64v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384c0 88 72 160 160 160h352v160
c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h352c88 0 160 -72 160 -160z" />
<glyph glyph-name="weixin" unicode="&#xf1d7;" horiz-adv-x="2048"
d="M580 1075c0 55 -36 91 -91 91c-54 0 -109 -36 -109 -91c0 -54 55 -90 109 -90c55 0 91 36 91 90zM1323 568c0 36 -36 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c55 0 91 36 91 73zM1087 1075c0 55 -36 91 -90 91c-55 0 -109 -36 -109 -91
c0 -54 54 -90 109 -90c54 0 90 36 90 90zM1722 568c0 36 -37 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c54 0 91 36 91 73zM1456 965c-23 3 -46 4 -70 4c-344 0 -616 -257 -616 -573c0 -53 8 -104 23 -152c-23 -2 -45 -3 -68 -3c-91 0 -163 18 -254 36
l-253 -127l72 218c-181 127 -290 291 -290 490c0 345 326 616 725 616c356 0 669 -217 731 -509zM2048 404c0 -163 -108 -308 -254 -417l55 -181l-199 109c-73 -18 -146 -37 -218 -37c-345 0 -616 236 -616 526s271 526 616 526c326 0 616 -236 616 -526z" />
<glyph glyph-name="stop" unicode="&#xf04d;"
d="M1536 1344v-1408c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" />
<glyph glyph-name="clone" unicode="&#xf24d;" horiz-adv-x="1792"
@ -616,9 +608,6 @@ d="M979 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12
<glyph glyph-name="wheelchair" unicode="&#xf193;" horiz-adv-x="1629"
d="M1023 349l102 -204c-77 -238 -299 -401 -549 -401c-317 0 -576 259 -576 576c0 242 152 458 379 541l17 -131c-163 -72 -268 -232 -268 -410c0 -247 201 -448 448 -448c257 0 465 220 447 477zM1571 249l58 -114l-256 -128c-9 -5 -19 -7 -29 -7c-24 0 -47 14 -57 35
l-239 477h-472c-32 0 -60 25 -64 57l-96 779c-1 10 3 32 6 42c19 69 83 114 154 114c88 0 160 -72 160 -160c0 -91 -80 -169 -172 -159l37 -289h423v-128h-407l16 -128h455c24 0 47 -14 57 -35l228 -455z" />
<glyph glyph-name="bootstrap" unicode="&#xf315;"
d="M256 1408h1024c141 0 256 -115 256 -256v-1024c0 -141 -115 -256 -256 -256h-1024c-141 0 -256 115 -256 256v1024c0 141 115 256 256 256zM494 1020v-795h310c169 0 270 83 270 223c0 106 -69 182 -177 196v4c77 14 137 91 137 174c0 119 -93 198 -229 198h-311z
M593 933h190c97 0 150 -44 150 -123c0 -86 -64 -133 -181 -133h-159v256zM593 592v0h187c127 0 192 -47 192 -139s-63 -141 -183 -141h-196v280z" />
<glyph glyph-name="cutlery" unicode="&#xf0f5;" horiz-adv-x="1408"
d="M640 1472v-640c0 -81 -52 -154 -128 -181v-779c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v779c-76 27 -128 100 -128 181v640c0 35 29 64 64 64s64 -29 64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64v-416
c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64zM1408 1472v-1600c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v512h-224c-17 0 -32 15 -32 32v800c0 176 144 320 320 320h256c35 0 64 -29 64 -64z" />
@ -650,8 +639,6 @@ h2048c70 0 128 -58 128 -128z" />
d="M892 167v-167h-248l-159 252l-24 42c-6 7 -9 14 -11 21h-3c-2 -7 -6 -14 -9 -21c-6 -12 -15 -28 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228c9 -14 16 -29 23 -42c6 -7 9 -14 11 -21h3c2 7 6 14 11 21l25 42l140 228h257v-168h-125
l-184 -267l204 -296h109zM1529 846v-206h-514l-3 27c-2 14 -4 33 -4 46c0 273 350 296 350 441c0 52 -47 87 -100 87c-38 0 -72 -18 -97 -39c-13 -11 -25 -25 -36 -38l-105 92c18 25 38 46 63 66c42 33 103 65 188 65c145 0 246 -85 246 -218c0 -240 -332 -260 -346 -403
h232v80h126z" />
<glyph glyph-name="pixelfed" unicode="&#xf314;"
d="M768 -128c-424 0 -768 344 -768 768s344 768 768 768s768 -344 768 -768s-344 -768 -768 -768zM707 472h141c133 0 240 105 240 234s-107 234 -240 234h-203c-77 0 -139 -60 -139 -135v-525z" />
<glyph glyph-name="tty" unicode="&#xf1e4;" horiz-adv-x="1792"
d="M448 224v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM256 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM832 224v-192c0 -18 -14 -32 -32 -32h-192
c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM640 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM66 768c-37 0 -66 29 -66 65v129h514v-129c0 -36 -29 -65 -65 -65h-383zM1216 224v-192
@ -673,9 +660,6 @@ s384 -172 384 -384z" />
<glyph glyph-name="xmpp" unicode="&#xf2f9;" horiz-adv-x="1542"
d="M1536 1314c47 -398 -206 -904 -657 -1199c122 -101 261 -177 414 -216v-27c-165 14 -320 59 -461 128l-30 15l-1 1l-6 3c-11 6 -30 16 -41 22c-94 -51 -193 -90 -297 -116c-68 -19 -139 -33 -211 -42v28c145 37 279 107 396 201c-426 296 -682 805 -637 1192l93 -33v0
l273 -81c-1 -16 -1 -32 -1 -49c0 -296 147 -656 394 -917c254 262 406 628 406 929c0 17 0 33 -1 49l274 81z" />
<glyph glyph-name="moon-o" unicode="&#xf186;" horiz-adv-x="1471"
d="M1262 233c-36 -6 -73 -9 -110 -9c-371 0 -672 301 -672 672c0 127 37 251 104 357c-266 -79 -456 -323 -456 -613c0 -353 287 -640 640 -640c193 0 374 88 494 233zM1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767
c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
<glyph glyph-name="pie-chart" unicode="&#xf200;" horiz-adv-x="1728"
d="M768 646l546 -546c-139 -141 -333 -228 -546 -228c-424 0 -768 344 -768 768s344 768 768 768v-762zM955 640h773c0 -213 -87 -407 -228 -546zM1664 768h-768v768c424 0 768 -344 768 -768z" />
<glyph glyph-name="align-left" unicode="&#xf036;" horiz-adv-x="1792"
@ -716,19 +700,6 @@ d="M866 1021c0 -32 -7 -63 -13 -94c-21 -100 -41 -200 -62 -300c-3 -14 -3 -14 -18 -
c-82 0 -156 -37 -226 -77l-2 2c16 107 52 202 52 313c0 159 -85 233 -242 233c-23 0 -46 -3 -68 -6c-197 -35 -317 -260 -317 -445c0 -196 113 -304 308 -304c4 0 25 2 25 -3c0 -2 0 -3 -1 -5c-4 -38 -16 -80 -26 -117c-15 -55 -67 -150 -134 -150c-29 0 -42 20 -42 47
c0 87 100 139 102 144c0 4 -5 8 -7 10c-31 28 -82 51 -124 51c-76 0 -117 -122 -117 -184c0 -116 73 -196 190 -196c173 0 299 182 338 332c11 44 19 89 30 133c2 9 5 13 14 18c71 36 146 60 227 60c44 0 83 -8 127 -18c1 -1 3 -1 4 -1c6 0 14 7 14 13zM1536 1120v-960
c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="gitea" unicode="&#xf31f;" horiz-adv-x="2066"
d="M366 1280v0c62 0 120 -8 160 -8v0v0c329 -18 502 -29 699 -29l1 -363l53 -27v390c171 2 371 11 709 29v0h1c15 0 28 -7 38 -17s18 -25 24 -43c12 -36 16 -85 15 -143c-3 -117 -30 -272 -75 -427s-107 -311 -182 -431s-163 -204 -259 -211h-615c-75 8 -156 85 -224 169
c-34 42 -64 87 -87 126c-21 36 -35 66 -41 88c-82 2 -219 15 -341 80c-125 67 -233 191 -242 414c-6 143 45 245 118 310s167 93 248 93zM388 1107v0c-90 -1 -147 -29 -180 -71c-36 -44 -46 -104 -38 -164c14 -113 61 -183 126 -229c62 -44 143 -65 231 -78
c-70 193 -106 325 -128 542h-11zM1118 893c-34 0 -66 -19 -82 -51l-172 -353c-22 -45 -3 -99 42 -121l354 -172c45 -22 99 -3 121 42l171 354c22 45 3 99 -42 121l-249 121l-45 -93c5 -5 10 -14 12 -20c2 -5 3 -13 3 -19v-4c30 -14 54 -25 74 -36c30 -17 52 -34 59 -62
s-1 -57 -17 -95c-12 -29 -29 -65 -51 -111c4 -5 9 -13 11 -19c2 -5 4 -13 4 -19c0 -22 -17 -46 -38 -54c-5 -2 -14 -4 -20 -4c-22 0 -46 17 -54 38c-2 5 -3 14 -3 20c0 22 17 46 38 54c5 2 14 3 19 3h2c22 46 41 82 52 109c15 36 18 55 15 66s-13 20 -39 35
c-18 10 -41 22 -71 36c-4 -4 -13 -9 -19 -11c-5 -2 -14 -3 -19 -3h-6l-77 -158c5 -5 12 -14 14 -21c2 -5 3 -13 3 -19c0 -22 -17 -46 -38 -54c-5 -2 -13 -4 -19 -4c-22 0 -46 17 -54 38c-2 5 -3 14 -3 20c0 22 16 46 37 54c5 2 15 3 20 3l79 162c-3 4 -8 11 -10 16
s-3 14 -3 20c0 22 17 46 38 54c5 2 14 3 19 3h1l46 94l-64 31c-13 6 -26 9 -39 9z" />
<glyph glyph-name="f-droid" unicode="&#xf32a;" horiz-adv-x="1676"
d="M47 1526v0c12 0 29 -8 36 -18l127 -164c10 3 27 6 37 6v0h1182v0c10 0 27 -3 37 -6l127 164c7 9 22 17 34 18h2h3c24 -1 44 -22 44 -46c0 -9 -4 -22 -10 -29l-133 -172c4 -11 7 -29 7 -40v0v-258c0 -61 -50 -111 -111 -111h-1182c-61 0 -111 50 -111 111v258v0
c0 11 3 29 7 40l-133 172c-6 7 -10 20 -10 29c0 26 20 46 46 46h1zM482 1212v0c-69 0 -125 -56 -125 -125v0c0 -69 56 -125 125 -125v0c69 0 125 56 125 125v0c0 69 -56 125 -125 125v0zM1203 1212c-69 0 -125 -56 -125 -125v0c0 -69 56 -125 125 -125s125 56 125 125v0
c0 69 -56 125 -125 125zM247 833h1182c61 0 111 -50 111 -111v-739c0 -61 -50 -111 -111 -111h-1182c-61 0 -111 50 -111 111v739c0 61 50 111 111 111zM838 740v0c-214 0 -388 -174 -388 -388s174 -388 388 -388s388 174 388 388s-174 388 -388 388zM838 670v0
c176 0 318 -142 318 -318s-142 -317 -318 -317s-318 141 -318 317s142 318 318 318zM838 583v0c-106 0 -197 -72 -223 -171h119c20 36 59 61 104 61c67 0 120 -54 120 -121s-53 -120 -120 -120c-48 0 -89 28 -108 69h-117c24 -102 116 -180 225 -180c127 0 231 104 231 231
s-104 231 -231 231z" />
<glyph glyph-name="shopping-basket" unicode="&#xf291;" horiz-adv-x="2048"
d="M1920 768c71 0 128 -57 128 -128s-57 -128 -128 -128h-15l-115 -662c-11 -61 -64 -106 -126 -106h-1280c-62 0 -115 45 -126 106l-115 662h-15c-71 0 -128 57 -128 128s57 128 128 128h1792zM485 -32c35 3 62 34 59 69l-32 416c-3 35 -34 62 -69 59s-62 -34 -59 -69
l32 -416c3 -33 31 -59 64 -59h5zM896 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1280 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1632 27l32 416c3 35 -24 66 -59 69s-66 -24 -69 -59
@ -761,10 +732,10 @@ h-1920v128c0 35 31 64 69 64h1782z" />
<glyph glyph-name="times-circle-o" unicode="&#xf05c;"
d="M1097 457l-146 -146c-13 -13 -33 -13 -46 0l-137 137l-137 -137c-13 -13 -33 -13 -46 0l-146 146c-13 13 -13 33 0 46l137 137l-137 137c-13 13 -13 33 0 46l146 146c13 13 33 13 46 0l137 -137l137 137c13 13 33 13 46 0l146 -146c13 -13 13 -33 0 -46l-137 -137
l137 -137c13 -13 13 -33 0 -46zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="python" unicode="&#xf322;"
d="M759 1416v0c63 0 129 -4 193 -15c101 -17 185 -92 185 -192v-353c0 -103 -82 -188 -185 -188h-370c-126 0 -232 -108 -232 -230v-170h-127c-108 0 -171 78 -197 188c-36 147 -34 236 0 377c29 123 124 188 232 188h509v47h-370v141c0 107 28 164 185 192
c53 9 114 15 177 15zM558 1303c-38 0 -69 -32 -69 -71s31 -70 69 -70s70 31 70 70s-32 71 -70 71zM1183 1021h139c108 0 159 -81 186 -188c37 -149 39 -261 0 -377c-37 -113 -78 -188 -186 -188h-555v-47h370v-141c0 -107 -92 -161 -185 -188c-140 -41 -253 -34 -370 0
c-98 29 -185 88 -185 188v353c0 102 84 188 185 188h370c123 0 231 107 231 235v165zM975 127v0c-38 0 -69 -31 -69 -70s31 -71 69 -71s70 32 70 71s-32 70 -70 70zM1389 366c0 -17 -70 -30 -156 -30s-156 13 -156 30s70 30 156 30s156 -13 156 -30z" />
<glyph glyph-name="weixin" unicode="&#xf1d7;" horiz-adv-x="2048"
d="M580 1075c0 55 -36 91 -91 91c-54 0 -109 -36 -109 -91c0 -54 55 -90 109 -90c55 0 91 36 91 90zM1323 568c0 36 -36 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c55 0 91 36 91 73zM1087 1075c0 55 -36 91 -90 91c-55 0 -109 -36 -109 -91
c0 -54 54 -90 109 -90c54 0 90 36 90 90zM1722 568c0 36 -37 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c54 0 91 36 91 73zM1456 965c-23 3 -46 4 -70 4c-344 0 -616 -257 -616 -573c0 -53 8 -104 23 -152c-23 -2 -45 -3 -68 -3c-91 0 -163 18 -254 36
l-253 -127l72 218c-181 127 -290 291 -290 490c0 345 326 616 725 616c356 0 669 -217 731 -509zM2048 404c0 -163 -108 -308 -254 -417l55 -181l-199 109c-73 -18 -146 -37 -218 -37c-345 0 -616 236 -616 526s271 526 616 526c326 0 616 -236 616 -526z" />
<glyph glyph-name="internet-explorer" unicode="&#xf26b;" horiz-adv-x="1792"
d="M1792 599c0 -35 -2 -70 -7 -104h-1151c0 -199 175 -343 367 -343c130 0 255 64 322 177h423c-114 -321 -419 -536 -759 -536c-123 0 -246 29 -356 83c-112 -57 -269 -116 -394 -116c-168 0 -237 103 -237 263c0 93 20 186 45 275c16 58 80 176 109 229
c123 223 285 437 475 606c-153 -66 -319 -232 -427 -354c84 366 410 625 785 625c15 0 30 0 45 -1c124 57 297 117 433 117c162 0 301 -62 301 -245c0 -96 -37 -200 -75 -286c66 -119 101 -254 101 -390zM1722 1239c0 112 -80 181 -190 181c-84 0 -179 -34 -254 -70
@ -836,9 +807,11 @@ c7 37 13 109 27 135s19 19 28 28s18 15 28 28s17 34 26 52s30 31 26 53s-36 37 -54 5
s-46 -30 -111 -30s76 103 85 112s23 17 27 27s0 18 0 27s12 22 8 25c-2 1 -4 1 -6 1zM1212 1096c-62 -8 -139 -10 -182 -26c-45 -17 -54 -36 -81 -54s-67 -28 -81 -54s0 -54 0 -81s-26 -68 0 -82s55 37 82 55s63 64 81 54s6 -7 0 -27s-51 -41 -52 -81s102 -73 68 -126
s-188 46 -232 17s-19 -54 -28 -81s-37 -52 -27 -81s52 -34 81 -54s81 -56 82 -58s20 -99 27 -135c14 -73 -27 -199 76 -231c31 14 78 41 106 60c13 34 24 72 35 94c22 44 71 123 80 161s0 37 0 55s7 30 0 54s-36 54 -54 81s-34 64 -54 81s-46 18 -54 27s-4 8 -4 13
s-4 7 5 14s34 8 54 0s36 -36 54 -54s25 -51 54 -54s54 36 81 54c25 17 52 56 76 55c-12 131 -98 312 -193 404z" />
<glyph glyph-name="hashnode" unicode="&#xf317;"
d="M246 1408h1044c136 0 246 -110 246 -246v-1044c0 -136 -110 -246 -246 -246h-1044c-136 0 -246 110 -246 246v1044c0 136 110 246 246 246zM1153 23v0c87 1 158 71 162 158s-62 162 -149 171l-315 556c-46 83 -135 78 -167 -39c-28 -111 -20 -216 -28 -342
c0 -1 -1 -2 -2 -2s-2 1 -2 1l-281 560c20 16 37 50 37 75c0 52 -41 93 -93 93s-94 -41 -94 -93s42 -93 94 -93c4 0 7 1 11 1c118 -304 250 -659 297 -741c32 -78 141 -53 144 31l12 444c0 3 3 3 4 1l226 -537c-11 -20 -21 -55 -21 -78v-1c0 -91 74 -165 165 -165z" />
<glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
d="M1760 640c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1728zM483 704c-19 24 -36 51 -51 80c-32 65 -48 128 -48 188c0 122 45 224 134 309s220 127 393 127c38 0 93 -7 167 -19c44 -8 103 -24 177 -48
c7 -26 14 -66 21 -118c9 -79 14 -140 14 -183c0 -14 -2 -29 -5 -45l-12 -3l-84 6l-14 2c-34 101 -69 169 -103 205c-59 61 -130 91 -210 91c-76 0 -137 -20 -182 -59s-67 -88 -67 -146c0 -49 22 -95 66 -140s137 -88 279 -129c48 -14 105 -36 173 -66c36 -17 68 -34 95 -52
h-743zM990 448h411c5 -28 7 -59 7 -92c0 -72 -13 -143 -41 -212c-15 -37 -38 -71 -71 -104c-24 -23 -60 -50 -109 -81c-50 -30 -100 -53 -153 -66c-53 -14 -120 -21 -203 -21c-55 0 -121 2 -195 23l-140 40c-39 11 -62 20 -72 28c-4 4 -8 11 -8 22v13c0 8 2 60 -2 156
c-2 50 2 85 2 105v44l102 2c37 -85 54 -136 65 -154c24 -39 51 -70 80 -94s64 -43 105 -57c40 -15 85 -22 132 -22c42 0 89 9 139 27c51 17 92 46 122 86c31 40 47 83 47 129c0 56 -27 108 -81 157c-22 19 -68 43 -137 71z" />
<glyph glyph-name="comment-o" unicode="&#xf0e5;" horiz-adv-x="1792"
d="M896 1152c-416 0 -768 -234 -768 -512c0 -149 100 -291 273 -389l87 -50l-27 -96c-19 -71 -44 -126 -70 -172c101 42 193 99 275 171l43 38l57 -6c43 -5 87 -8 130 -8c416 0 768 234 768 512s-352 512 -768 512zM1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8
c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22h-5c-20 0 -38 16 -43 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 354 401 640 896 640s896 -286 896 -640z" />
@ -1006,13 +979,10 @@ d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM15
d="M1005 -16c-42 59 -111 155 -153 214c-41 57 -75 102 -77 102s-66 -87 -152 -205c-82 -113 -150 -205 -151 -205c-2 0 -296 207 -297 209c0 1 65 99 147 217s149 217 149 219c0 4 -27 14 -234 83c-129 43 -235 78 -237 79s10 41 52 174c30 95 56 174 57 175
s112 -35 248 -80s249 -81 250 -81s2 2 3 5s2 118 3 257s2 254 3 255c1 2 40 2 180 2c98 0 179 0 180 -1c2 -1 4 -78 8 -249c7 -281 9 -285 13 -285c2 0 109 36 239 80s236 79 237 78c3 -3 109 -350 108 -351s-109 -37 -241 -82c-181 -61 -240 -82 -240 -85
c0 -2 62 -95 141 -211c78 -114 141 -208 141 -209c-1 -2 -293 -217 -295 -217c-1 0 -38 50 -82 112z" />
<glyph glyph-name="att" unicode="&#xf31e;"
d="M768 1407v0c144 0 278 -39 393 -108c31 -19 46 -30 46 -48c0 -73 -206 -150 -472 -150c-268 0 -419 70 -419 135c0 22 19 39 54 60c116 71 253 111 398 111zM273 1226v0c1 0 0 -1 -1 -2c-22 -27 -31 -53 -31 -79c0 -72 57 -185 362 -185c416 0 677 151 677 236
c0 7 -2 13 -5 18c-1 1 0 2 1 1c25 -23 48 -46 73 -74c38 -43 53 -66 53 -104c0 -107 -166 -228 -539 -228c-350 0 -725 108 -725 257c0 10 10 28 25 47c32 41 68 78 108 112c1 0 2 1 2 1zM1456 979v0s1 0 1 -1c18 -36 40 -89 51 -133c10 -40 10 -69 2 -97
c-43 -152 -307 -235 -646 -235c-556 0 -794 160 -841 260c-6 12 -7 20 -4 37c7 39 32 114 55 159c1 1 1 1 1 0c-4 -15 -6 -30 -6 -45c0 -153 253 -274 557 -274c281 0 837 129 830 328v1zM1534 683v0s1 -1 1 -2c1 -13 1 -25 1 -41c0 -67 -9 -146 -28 -190
c-26 -61 -154 -248 -714 -248c-411 0 -649 139 -744 238c-21 22 -36 49 -39 67c-7 36 -11 91 -11 133c0 2 2 2 2 0c34 -125 219 -308 612 -308c413 0 891 200 919 350c0 1 1 1 1 1zM1482 360v0c1 0 1 -1 1 -2c-13 -33 -30 -67 -47 -96c-29 -50 -61 -86 -95 -114
c-124 -102 -332 -154 -521 -154c-359 0 -649 111 -745 315c-1 2 0 2 1 1c103 -149 366 -227 610 -227c345 0 679 106 795 276c0 1 1 1 1 1zM1274 64v0c1 0 1 -1 0 -2c-135 -118 -312 -190 -506 -190c-177 0 -341 60 -471 161c-1 1 -1 3 1 2c84 -47 234 -100 470 -100
c272 0 444 89 505 129h1z" />
<glyph glyph-name="fonticons" unicode="&#xf280;"
d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925c41 0 57 -15 56 -79l174 21c0 153 -105 181 -222 181c-174 0 -265 -70 -265 -240v-72h-96v-128h76
c10 0 20 0 20 -8v-382c0 -19 -5 -25 -23 -27l-73 -7v-88h448v86l-149 14c-18 2 -11 5 -11 25v387h191l38 128h-231c-10 0 2 7 2 15v80c0 60 2 94 65 94zM1248 96v86l-54 9c-19 3 -10 5 -10 25v520h-275l-23 -101l83 -22c13 -4 23 -13 23 -27v-370c0 -19 -8 -23 -26 -25
l-70 -9v-86h352z" />
<glyph glyph-name="sort-asc" unicode="&#xf0de;" horiz-adv-x="1024"
d="M1024 832c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
<glyph glyph-name="folder-open" unicode="&#xf07c;" horiz-adv-x="1879"
@ -1192,13 +1162,6 @@ c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h
d="M1280 388c0 14 -8 24 -22 27c-91 19 -160 83 -198 167c-4 8 -7 16 -7 25c0 45 124 36 124 100c0 27 -33 44 -57 44c-22 0 -40 -16 -63 -16c-4 0 -8 1 -12 2c3 38 5 77 5 115c0 34 -2 82 -17 114c-48 104 -140 165 -255 165c-125 0 -220 -47 -275 -165
c-15 -32 -18 -80 -18 -115c0 -38 3 -76 6 -114c-5 -1 -10 -2 -15 -2c-22 0 -41 16 -62 16c-25 0 -55 -17 -55 -45c0 -62 124 -54 124 -99c0 -9 -3 -17 -7 -25c-39 -84 -106 -147 -198 -167c-14 -3 -22 -13 -22 -27c0 -47 106 -64 138 -69c9 -24 5 -66 40 -66
c26 0 51 10 77 10c106 0 134 -95 256 -95c127 0 151 95 258 95c26 0 52 -9 78 -9c34 0 31 42 39 65c32 5 138 22 138 69zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="spell-check" unicode="&#xf327;" horiz-adv-x="2049"
d="M2049 700c0 -25 -10 -50 -28 -68l-724 -724l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136l-362 362c-18 18 -28 43 -28 68s10 50 28 68l136 136c18 18 43 28 68 28s50 -10 68 -28l294 -295l656 657c18 18 43 28 68 28s50 -10 68 -28l136 -136
c18 -18 28 -43 28 -68zM0 880v73h48l158 454h111l158 -454h49v-73h-199v73h52l-32 98h-167l-32 -98h52v-73h-198zM200 1127h122l-49 149c-2 8 -5 16 -6 23c-1 8 -3 15 -3 18l-1 5h-2c-1 -13 -5 -29 -10 -46zM569 880v73h63v381h-63v73h242c40 0 72 -5 95 -14
c24 -9 44 -25 58 -47c15 -21 22 -46 22 -75c0 -25 -6 -47 -17 -67s-28 -35 -48 -46v-1c28 -8 50 -24 64 -47s22 -49 22 -78c0 -35 -10 -65 -30 -91s-45 -43 -75 -52c-21 -6 -47 -9 -79 -9h-254zM730 1192h92c20 0 37 6 48 18c11 13 17 30 17 51c0 29 -10 49 -30 60
c-11 5 -27 8 -46 8h-81v-137zM730 958h98c15 0 27 2 37 6c13 5 25 15 32 28c7 14 11 29 11 46c0 23 -7 41 -21 55c-13 14 -32 22 -56 22h-101v-157zM1131 950c-52 53 -78 118 -78 196s26 142 78 193s116 77 193 77c18 0 39 -2 60 -5c22 -3 44 -9 67 -16s41 -18 56 -33
s23 -32 23 -51v-72h-88v41c0 12 -7 23 -20 31s-29 14 -45 17s-32 5 -48 5c-51 0 -94 -17 -127 -51c-33 -33 -49 -77 -49 -132c0 -59 17 -106 51 -142s78 -54 130 -54c14 0 29 2 45 4s31 8 46 16s23 19 23 32v41h89v-72c0 -18 -7 -35 -22 -49c-14 -14 -33 -26 -56 -33
c-22 -7 -45 -13 -67 -16c-22 -4 -44 -6 -64 -6c-79 0 -145 27 -197 79v0z" />
<glyph glyph-name="building-o" unicode="&#xf0f7;" horiz-adv-x="1408"
d="M384 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 480v-64c0 -17 -15 -32 -32 -32h-64
c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64
@ -1367,8 +1330,6 @@ h-628l-376 -12v102l127 25c89 17 116 43 117 116c6 242 8 643 8 643s3 402 -8 645c-3
<glyph glyph-name="copyright" unicode="&#xf1f9;"
d="M1150 462v-109c0 -141 -225 -193 -366 -193c-274 0 -480 209 -480 485c0 271 204 475 475 475c99 0 358 -35 358 -194v-109c0 -9 -7 -16 -16 -16h-118c-9 0 -16 7 -16 16v70c0 63 -121 92 -203 92c-187 0 -317 -135 -317 -329c0 -201 136 -348 325 -348
c72 0 208 27 208 90v70c0 9 7 16 15 16h119c8 0 16 -7 16 -16zM768 1280c-353 0 -640 -287 -640 -640s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="pleroma" unicode="&#xf324;" horiz-adv-x="961"
d="M120 1408h262v-1536h-382v1416c0 66 54 120 120 120zM575 1408h386v-648c0 -66 -53 -120 -119 -120v0h-267v768zM575 254h386v-262c0 -66 -53 -120 -119 -120v0h-267v382z" />
<glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1651"
d="M572 553l-466 -466c-13 -13 -33 -13 -46 0l-50 50c-13 13 -13 33 0 46l393 393l-393 393c-13 13 -13 33 0 46l50 50c13 13 33 13 46 0l466 -466c13 -13 13 -33 0 -46zM1651 96v-64c0 -18 -14 -32 -32 -32h-960c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h960
c18 0 32 -14 32 -32z" />
@ -1469,10 +1430,6 @@ s-29 -16 -64 -16h-69l293 -352h64l224 -64l352 -32c288 -64 288 -96 288 -96z" />
d="M620 416c-69 -40 -163 -64 -268 -64h-128v64h-64c-18 0 -32 36 -32 80c0 18 3 35 7 49c-77 2 -135 15 -135 31s58 29 135 31c-4 14 -7 31 -7 49c0 44 14 80 32 80h64v64h128c105 0 199 -24 268 -64h1113c74 -13 141 -24 187 -32c192 -32 256 -96 256 -128
s-64 -96 -256 -128c-46 -8 -113 -19 -187 -32h-1113zM1739 668c32 -22 53 -55 53 -92s-21 -70 -53 -92l81 -30c41 29 68 73 68 122s-27 93 -68 122zM625 400h1015s-217 -38 -456 -80c-128 0 -224 -96 -224 -96l-288 -288s-97 -64 -160 -64h-96l-93 464h29
c102 0 199 23 273 64zM352 816h-29l93 464h96c65 0 128 -32 160 -64l288 -288s96 -96 224 -96c239 -42 456 -80 456 -80h-1015c-74 41 -171 64 -273 64z" />
<glyph glyph-name="matrix-org" unicode="&#xf313;"
d="M40 1373v-1466h106v-35h-146v1536h146v-35h-106zM491 908v-74h2c20 28 44 51 72 66c28 16 60 23 96 23c35 0 66 -7 95 -20s50 -37 65 -71c16 24 38 46 66 64s61 27 99 27c29 0 56 -4 81 -11s45 -18 63 -34s31 -35 41 -60s15 -56 15 -91v-367h-150v311c0 18 -1 36 -2 52
s-6 30 -12 42s-16 22 -28 29s-29 10 -50 10s-38 -4 -51 -12s-24 -19 -31 -32s-13 -27 -15 -44s-4 -34 -4 -51v-305h-150v307c0 16 0 33 -1 49s-4 30 -9 44c-5 13 -15 24 -27 32s-31 12 -55 12c-7 0 -16 -2 -28 -5s-23 -9 -34 -18s-20 -21 -28 -38s-11 -38 -11 -65v-318h-151
v548h142zM1496 -93v1466h-106v35h146v-1536h-146v35h106z" />
<glyph glyph-name="steam" unicode="&#xf1b6;" horiz-adv-x="1792"
d="M1582 954c0 -135 -110 -244 -244 -244c-135 0 -244 109 -244 244s109 244 244 244c134 0 244 -109 244 -244zM812 212c0 139 -111 250 -250 250c-18 0 -36 -2 -54 -6l104 -42c102 -41 152 -156 111 -258s-157 -152 -259 -110c-41 16 -82 33 -123 49
c42 -79 125 -133 221 -133c139 0 250 111 250 250zM1642 953c0 168 -137 305 -305 305c-169 0 -306 -137 -306 -305c0 -169 137 -305 306 -305c168 0 305 136 305 305zM1792 953c0 -252 -204 -455 -455 -455l-437 -319c-16 -172 -162 -307 -338 -307
@ -1587,12 +1544,6 @@ d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -
d="M832 1024c0 106 -86 192 -192 192s-192 -86 -192 -192c0 -29 7 -57 19 -83c-26 12 -54 19 -83 19c-106 0 -192 -86 -192 -192s86 -192 192 -192s192 86 192 192c0 29 -7 57 -19 83c26 -12 54 -19 83 -19c106 0 192 86 192 192zM1683 320c0 -23 -92 -115 -115 -115
c-26 0 -107 94 -128 115l-96 -96l220 -220c18 -18 28 -43 28 -68c0 -56 -64 -120 -120 -120c-25 0 -50 10 -68 28l-671 671c-105 -78 -233 -131 -365 -131c-218 0 -368 151 -368 368c0 328 328 656 656 656c217 0 368 -150 368 -368c0 -132 -53 -260 -131 -365l355 -355
l96 96c-21 21 -115 102 -115 128c0 23 92 115 115 115c8 0 17 -4 23 -10c37 -37 316 -300 316 -329z" />
<glyph glyph-name="syncthing" unicode="&#xf311;"
d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM774 1254c-337 0 -611 -274 -611 -611c0 -10 0 -28 1 -38c-17 -10 -32 -23 -42 -41c-33 -56 -14 -128 41 -161c18 -10 37 -15 56 -16c97 -210 309 -355 555 -355
c108 0 210 28 298 78c16 -11 35 -19 56 -21c65 -5 122 42 129 107v10c0 14 -5 36 -11 49c87 105 139 241 139 388c0 57 -8 112 -23 164c14 13 25 30 32 49c21 61 -12 128 -73 149c-12 4 -26 6 -38 6v0c-6 0 -15 0 -21 -1c-112 148 -289 244 -488 244zM774 1175v0
c171 0 323 -79 420 -204c-10 -11 -17 -24 -22 -39c-9 -27 -8 -55 1 -80l-224 -186c-18 11 -39 16 -60 16c-22 0 -44 -5 -63 -18c-26 -16 -43 -42 -50 -70l-447 -41c-10 21 -25 39 -46 52c-13 8 -27 12 -41 14c0 8 -1 16 -1 24c0 295 238 532 533 532zM1224 792
c6 -3 15 -7 21 -9c15 -5 29 -8 44 -7c11 -43 17 -87 17 -133c0 -125 -42 -240 -114 -331c-13 7 -28 11 -43 13c-15 1 -28 0 -42 -4l-122 175c23 32 29 73 15 110zM783 516c2 -4 5 -11 8 -15c29 -44 81 -63 129 -50l122 -175c-12 -16 -19 -37 -21 -59v-9c0 -10 2 -26 5 -35
c-75 -40 -161 -63 -252 -63c-211 0 -394 123 -480 301c10 8 24 22 30 33c5 8 11 22 13 31z" />
<glyph glyph-name="picture-o" unicode="&#xf03e;" horiz-adv-x="1920"
d="M640 960c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600c-17 0 -32 -15 -32 -32v-1216c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32v1216c0 17 -15 32 -32 32z
M1920 1248v-1216c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
@ -1606,8 +1557,6 @@ d="M640 528v224c0 9 -7 16 -16 16h-96c-9 0 -16 -7 -16 -16v-224c0 -9 7 -16 16 -16h
s-192 -86 -192 -192v-320h-640v752c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v624c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 21 28 16 41 16v391c-19 9 -32 29 -32 50c0 30 25 55 55 55s55 -25 55 -55
c0 -21 -13 -41 -32 -50v-17c27 6 55 10 83 10c41 0 80 -15 114 -15c31 0 66 15 84 15c9 0 16 -7 16 -16v-210c0 -24 -81 -28 -97 -28c-37 0 -72 15 -110 15c-30 0 -61 -5 -90 -12v-133c13 0 41 5 41 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112
c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-624h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16z" />
<glyph glyph-name="c" unicode="&#xf31c;" horiz-adv-x="1404"
d="M996 819c0 0 -23 211 -232 217s-317 -157 -317 -392s119 -423 323 -423s226 235 226 235l391 -24s22 -211 -141 -373s-364 -188 -504 -187s-334 -2 -522 190s-220 379 -220 563s36 427 259 611c152 125 306 172 460 172c643 0 685 -593 685 -593l-408 4v0z" />
<glyph glyph-name="commenting" unicode="&#xf27a;" horiz-adv-x="1792"
d="M640 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1024 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1408 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128z
M1792 640c0 -354 -401 -640 -896 -640c-73 0 -144 6 -211 18c-114 -114 -263 -192 -435 -229c-27 -5 -56 -10 -86 -13c-16 -2 -31 9 -35 24c-4 16 8 26 20 37c63 59 138 106 164 317c-191 117 -313 291 -313 486c0 354 401 640 896 640s896 -286 896 -640z" />
@ -1690,12 +1639,9 @@ c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM512 928v19
c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 160v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32z
M1536 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1664 1248v-1088c0 -88 -72 -160 -160 -160
h-1344c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1344c88 0 160 -72 160 -160z" />
<glyph glyph-name="handshake-o" unicode="&#xf2b5;" horiz-adv-x="2304"
d="M192 384c84 0 84 128 0 128s-84 -128 0 -128zM1665 442c-79 103 -156 208 -246 302l-125 -140c-110 -125 -307 -122 -414 6c-76 92 -76 224 2 315l177 206c-62 32 -137 21 -204 21c-59 0 -116 -24 -158 -66l-158 -158h-155v-544c44 0 84 6 119 -28l297 -292
c61 -59 140 -111 227 -111c45 0 93 15 125 47c75 -26 162 16 185 93c48 -4 92 11 127 44c23 21 53 63 50 96c9 -9 31 -10 43 -10c119 0 181 125 108 219zM1824 384h96v512h-93l-157 180c-42 48 -105 76 -169 76h-167c-56 0 -110 -25 -146 -67l-209 -243
c-37 -44 -37 -106 -1 -150c57 -68 162 -69 221 -3l193 218c46 51 130 3 109 -62c38 -44 79 -87 116 -131c50 -62 98 -127 147 -190c31 -40 54 -88 60 -140zM2112 384c84 0 84 128 0 128s-84 -128 0 -128zM2304 960v-640c0 -35 -29 -64 -64 -64h-434
c-36 -87 -115 -145 -207 -158c-43 -63 -109 -111 -183 -127c-55 -70 -144 -112 -233 -106c-165 -93 -351 -12 -474 109l-287 282h-358c-35 0 -64 29 -64 64v672c0 35 29 64 64 64h421c116 116 196 224 370 224h117c65 0 128 -20 181 -56c53 36 116 56 181 56h167
c190 0 269 -124 384 -256h355c35 0 64 -29 64 -64z" />
<glyph glyph-name="caret-square-o-left" unicode="&#xf191;"
d="M1024 960v-640c0 -35 -29 -64 -64 -64c-13 0 -26 4 -37 12l-448 320c-17 12 -27 31 -27 52c0 20 10 40 27 52l448 320c11 8 24 12 37 12c35 0 64 -29 64 -64zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960
c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1664"
d="M462 142c0 -70 -57 -128 -128 -128c-70 0 -128 58 -128 128c0 71 58 128 128 128c71 0 128 -57 128 -128zM960 -64c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM256 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
s128 -57 128 -128zM1458 142c0 -70 -58 -128 -128 -128c-71 0 -128 58 -128 128c0 71 57 128 128 128c70 0 128 -57 128 -128zM494 1138c0 -88 -72 -160 -160 -160s-160 72 -160 160s72 160 160 160s160 -72 160 -160zM1664 640c0 -71 -57 -128 -128 -128s-128 57 -128 128
@ -1797,21 +1743,12 @@ c31 -200 54 -325 66 -373c37 -166 76 -249 120 -249c34 0 85 53 154 161c68 108 104
d="M766 1408h5c211 -2 413 -25 531 -79c0 0 234 -105 234 -462c0 0 3 -263 -33 -446c-23 -116 -202 -243 -408 -268c-108 -13 -214 -25 -327 -20c-185 8 -330 45 -330 45c0 -18 1 -36 3 -52c24 -182 181 -193 329 -198c150 -5 284 37 284 37l6 -135s-105 -57 -292 -67
c-103 -6 -230 3 -379 42c-323 85 -380 430 -388 779c-3 104 -1 201 -1 283c0 357 235 462 235 462c118 54 320 77 531 79v0zM350 839c-64 0 -115 -52 -115 -116s51 -115 115 -115s116 51 116 115s-52 116 -116 116v0zM768 839c-64 0 -116 -52 -116 -116s52 -115 116 -115
s116 51 116 115s-52 116 -116 116v0zM1186 839c-64 0 -116 -52 -116 -116s52 -115 116 -115s115 51 115 115s-51 116 -115 116v0z" />
<glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
d="M1760 640c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1728zM483 704c-19 24 -36 51 -51 80c-32 65 -48 128 -48 188c0 122 45 224 134 309s220 127 393 127c38 0 93 -7 167 -19c44 -8 103 -24 177 -48
c7 -26 14 -66 21 -118c9 -79 14 -140 14 -183c0 -14 -2 -29 -5 -45l-12 -3l-84 6l-14 2c-34 101 -69 169 -103 205c-59 61 -130 91 -210 91c-76 0 -137 -20 -182 -59s-67 -88 -67 -146c0 -49 22 -95 66 -140s137 -88 279 -129c48 -14 105 -36 173 -66c36 -17 68 -34 95 -52
h-743zM990 448h411c5 -28 7 -59 7 -92c0 -72 -13 -143 -41 -212c-15 -37 -38 -71 -71 -104c-24 -23 -60 -50 -109 -81c-50 -30 -100 -53 -153 -66c-53 -14 -120 -21 -203 -21c-55 0 -121 2 -195 23l-140 40c-39 11 -62 20 -72 28c-4 4 -8 11 -8 22v13c0 8 2 60 -2 156
c-2 50 2 85 2 105v44l102 2c37 -85 54 -136 65 -154c24 -39 51 -70 80 -94s64 -43 105 -57c40 -15 85 -22 132 -22c42 0 89 9 139 27c51 17 92 46 122 86c31 40 47 83 47 129c0 56 -27 108 -81 157c-22 19 -68 43 -137 71z" />
<glyph glyph-name="ravelry" unicode="&#xf2d9;" horiz-adv-x="2080"
d="M1095 -197c-4 1 -7 2 -11 4c0 0 -329 193 -440 505c-37 6 -115 24 -175 37c87 -283 329 -499 626 -546zM454 409l168 -28c-57 171 -64 366 -64 366c-67 -65 -103 -154 -121 -224c3 -39 8 -77 17 -114zM564 1018c-31 -46 -56 -96 -77 -148c33 35 60 58 74 68
c-2 30 3 80 3 80zM2001 584c0 436 -352 790 -784 790c-200 0 -382 -76 -521 -201c-21 -41 -35 -93 -45 -160c213 181 593 136 593 136c95 -4 84 -88 83 -114c-346 29 -516 -70 -684 -213c0 0 33 -320 109 -450c438 -20 771 218 771 218c42 30 79 33 87 -19
c6 -42 9 -99 -39 -121c-146 -68 -307 -111 -467 -134c-104 -15 -162 -19 -317 -16c148 -344 518 -438 518 -438c116 -19 204 -4 263 15c256 130 433 398 433 707zM2075 621c-7 -68 -18 -147 -40 -212c-90 -267 -215 -441 -500 -600c-26 -18 -54 -35 -82 -44
c-51 -18 -106 -22 -163 -16c-24 -2 -48 -3 -73 -3c-381 0 -703 260 -800 615c-3 0 -6 1 -9 1c-23 -180 110 -423 110 -423s8 -12 54 -82c-255 135 -262 533 -262 533c-61 23 -273 95 -310 154c0 0 166 -91 309 -109c-1 1 2 32 2 32c9 122 51 217 94 290
c28 137 90 261 176 365c15 62 39 136 81 214c18 34 35 56 81 77c304 142 604 178 912 18c295 -154 455 -476 420 -810z" />
<glyph glyph-name="code-fork" unicode="&#xf126;" horiz-adv-x="1024"
d="M288 64c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM288 1216c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM928 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1024 1088c0 -71 -39 -133 -96 -166
c-3 -361 -259 -441 -429 -495c-159 -50 -211 -74 -211 -171v-26c57 -33 96 -95 96 -166c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 71 39 133 96 166v820c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192c0 -71 -39 -133 -96 -166v-497
c51 25 105 42 154 57c186 59 292 103 294 312c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192z" />
<glyph glyph-name="hand-o-right" unicode="&#xf0a4;" horiz-adv-x="1792"
d="M256 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 768c0 68 -61 128 -128 128h-576c0 63 96 128 96 256c0 96 -75 128 -160 128c-28 0 -79 -116 -90 -139c-12 -22 -24 -44 -37 -65c-33 -53 -71 -99 -112 -145c-64 -73 -135 -163 -241 -163
h-32v-640h32c175 0 346 -128 540 -128c112 0 189 47 189 167c0 19 -2 38 -5 56c42 23 65 80 65 126c0 24 -6 48 -18 69c34 32 53 72 53 119c0 32 -14 79 -35 103h331c69 0 128 59 128 128zM1792 769c0 -140 -116 -257 -256 -257h-169c-3 -42 -16 -82 -37 -119
@ -1820,9 +1757,6 @@ c159 0 288 -87 288 -256c0 -44 -7 -87 -22 -128h374c138 0 256 -117 256 -255z" />
<glyph glyph-name="object-group" unicode="&#xf247;" horiz-adv-x="2048"
d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
<glyph glyph-name="wikidata" unicode="&#xf31a;" horiz-adv-x="2048"
d="M0 1264h76v-1264h-76v1264zM152 1264h227v-1264h-227v1264zM455 1264h228v-1264h-228v1264zM759 1264h75v-1264h-75v1264zM910 1264h76v-1264h-76v1264zM1820 1264h76v-1264h-76v1264zM1972 1264h76v-1264h-76v1264zM1062 1264h227v-1264h-227v1264zM1365 1264h76v-1264
h-76v1264zM1517 1264h228v-1264h-228v1264z" />
<glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792"
d="M960 1280c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1792 352v-352c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -16 3 -23 9l-93 93c-157 -189 -439 -310 -748 -310s-591 121 -748 310l-93 -93c-6 -6 -15 -9 -23 -9c-4 0 -8 1 -12 2
c-12 5 -20 17 -20 30v352c0 18 14 32 32 32h352c13 0 25 -8 30 -20s2 -25 -7 -35l-100 -100c90 -121 263 -209 461 -236v647h-192c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h192v163c-76 44 -128 126 -128 221c0 141 115 256 256 256s256 -115 256 -256
@ -1880,12 +1814,6 @@ l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-128 128l90
c25 25 65 25 90 0l83 -83zM218 19c-25 -25 -65 -25 -90 0l-128 128l90 90l83 -82l83 82c25 25 65 25 90 0l83 -82l64 64v293l-210 314c-23 35 -7 83 33 97l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58c40 -14 56 -62 33 -97l-210 -314v-293l19 18
c25 25 65 25 90 0l83 -82l83 82c25 25 65 25 90 0l128 -128l-90 -90l-83 83l-83 -83c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83
c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83zM621 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
<glyph glyph-name="gimp" unicode="&#xf31b;" horiz-adv-x="1792"
d="M1760 1453c243 -1827 -975 -1550 -1432 -1186c28 4 55 13 78 30c50 38 74 102 73 173s-25 150 -73 220c-6 9 -13 17 -20 25l26 588s159 -366 481 -358c674 18 794 417 867 508zM612 937c-97 0 -177 -85 -177 -193s80 -194 177 -194c16 0 31 4 46 8
c-67 3 -122 62 -122 133v0c0 73 57 133 127 133v0c56 0 112 -47 124 -104c1 8 2 16 2 24c0 108 -80 193 -177 193zM1031 928v0c-119 0 -216 -102 -216 -228s97 -227 216 -227c45 0 87 14 122 39c-17 -8 -47 -15 -66 -15c-90 0 -162 77 -162 171v0c0 94 72 170 162 170
c75 0 147 -63 160 -141v3c0 126 -97 228 -216 228zM158 822v0c79 -2 166 -58 227 -146c46 -67 70 -141 70 -206s-21 -121 -64 -153s-100 -37 -158 -16s-118 67 -164 134s-69 141 -69 206s21 121 64 153c26 20 58 29 94 28zM1042 804c-42 0 -76 -36 -76 -80v0
c0 -44 34 -80 76 -80s76 36 76 80v0c0 44 -34 80 -76 80zM615 787c-28 0 -50 -23 -50 -52v0v0c0 -29 22 -53 50 -53s50 24 50 53v0v0c0 29 -22 52 -50 52zM130 770c-47 0 -85 -47 -85 -106v0c0 -59 38 -107 85 -107s84 48 84 107v0c0 59 -37 106 -84 106zM1202 468
c0 0 44 -38 69 -72c-96 -78 -261 -141 -583 -73c163 -60 300 -88 406 -81c-64 -22 -146 -39 -250 -44c233 -23 407 22 468 117c16 -18 32 -49 47 -89c10 69 36 101 -4 155s-153 87 -153 87z" />
<glyph glyph-name="dashcube" unicode="&#xf210;" horiz-adv-x="1408"
d="M0 856c0 173 138 322 314 322h742l352 358v-1470c0 -174 -138 -322 -314 -322h-780c-176 0 -314 148 -314 322v790zM1232 102l-176 180v425c0 61 -49 112 -110 112h-484c-61 0 -110 -51 -110 -112v-492c0 -61 49 -113 110 -113h770z" />
<glyph glyph-name="optin-monster" unicode="&#xf23c;" horiz-adv-x="2132"
@ -1990,11 +1918,10 @@ c14 0 27 -9 31 -23zM736 1504v-224h-352v224c0 18 14 32 32 32h288c18 0 32 -14 32 -
d="M1024 288v-416h-928c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344c53 0 96 -43 96 -96v-928h-416c-53 0 -96 -43 -96 -96zM1152 256h381c-9 -48 -35 -102 -65 -132l-184 -184c-30 -30 -84 -56 -132 -65v381z" />
<glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280"
d="M1280 137c0 -146 -96 -265 -213 -265h-854c-117 0 -213 119 -213 265c0 263 65 567 327 567c81 -79 191 -128 313 -128s232 49 313 128c262 0 327 -304 327 -567zM1024 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" />
<glyph glyph-name="php" unicode="&#xf30e;" horiz-adv-x="2299"
d="M1149 1245c635 0 1150 -271 1150 -605s-515 -605 -1150 -605s-1149 271 -1149 605s514 605 1149 605zM1049 1081l-130 -627h125l74 359l100 -1c32 0 52 -6 62 -18s12 -33 6 -62l-58 -278h126l61 291c13 65 4 109 -27 132c-30 23 -77 36 -138 37h-111l35 167h-125z
M478 914v0l-129 -625h126l34 165h108c37 0 73 5 107 13s66 27 96 57c25 24 44 50 58 80s24 60 28 91c11 67 1 121 -31 160s-84 58 -155 59h-242zM1549 914l-130 -625h126l34 165h109c37 0 72 5 106 13s67 27 97 57c25 24 43 50 57 80s24 60 28 91c11 67 1 121 -31 160
s-84 58 -155 59h-241zM623 815v0c48 1 88 -4 120 -13s43 -45 32 -106c-13 -73 -38 -115 -77 -127s-87 -18 -145 -17h-12c-3 0 -8 1 -11 1l54 261h18c7 0 14 0 21 1zM1693 815v0c48 1 88 -4 120 -13s44 -45 33 -106c-13 -73 -39 -115 -78 -127s-87 -18 -145 -17h-12
c-3 0 -8 1 -11 1l54 261h18c7 0 14 0 21 1z" />
<glyph glyph-name="php" unicode="&#xf30e;"
d="M768 1044c424 0 768 -181 768 -404s-344 -404 -768 -404s-768 181 -768 404s344 404 768 404zM701 934l-87 -418h83l50 239h67c21 0 35 -4 41 -12s8 -23 4 -42l-39 -185h85l40 194c8 44 3 73 -18 89c-20 16 -50 23 -91 24h-75l23 111h-83zM320 823v0l-87 -418h84l23 111
h72c25 0 49 3 72 8s44 19 64 39c16 16 30 33 39 53c10 20 16 40 19 61c7 45 -1 80 -22 106s-56 40 -103 40h-161zM1035 823l-87 -418h84l23 111h73c25 0 48 3 71 8s44 19 64 39c16 16 30 33 39 53c10 20 16 40 19 61c7 45 0 80 -21 106s-57 40 -104 40h-161zM416 757v0
c32 0 59 -3 80 -9c22 -6 29 -30 22 -71c-9 -49 -26 -77 -52 -85s-57 -11 -96 -11h-9c-2 0 -5 1 -7 1l36 174h12c4 0 9 1 14 1zM1131 757v0c32 0 59 -3 80 -9c22 -6 29 -30 22 -71c-9 -49 -26 -77 -52 -85s-57 -11 -96 -11h-9c-2 0 -5 1 -7 1l36 174h12c4 0 9 1 14 1z" />
<glyph glyph-name="ioxhost" unicode="&#xf208;" horiz-adv-x="2048"
d="M1463 704c0 -47 -38 -86 -86 -86h-702c-48 0 -86 39 -86 86s38 86 86 86h702c48 0 86 -39 86 -86zM1677 704c0 59 -8 115 -23 170h-982c-48 0 -86 38 -86 85c0 48 38 86 86 86h908c-115 187 -321 311 -555 311c-360 0 -653 -292 -653 -652c0 -59 8 -115 23 -170h982
c48 0 86 -38 86 -85c0 -48 -38 -86 -86 -86h-908c115 -187 321 -311 556 -311c359 0 652 292 652 652zM2048 959c0 -47 -38 -85 -86 -85h-131c11 -55 17 -112 17 -170c0 -454 -369 -824 -823 -824c-333 0 -620 198 -750 483h-189c-48 0 -86 38 -86 86c0 47 38 85 86 85h132
@ -2019,9 +1946,6 @@ l-76 -404c-19 -106 -112 -183 -220 -183h-688c-80 0 -157 39 -205 102l-384 512c-33
<glyph glyph-name="database" unicode="&#xf1c0;"
d="M768 768c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 0c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 384c301 0 603 54 768 170
v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 1536c424 0 768 -115 768 -256v-128c0 -141 -344 -256 -768 -256s-768 115 -768 256v128c0 141 344 256 768 256z" />
<glyph glyph-name="jirafeau" unicode="&#xf318;"
d="M1459 1408c43 0 77 -34 77 -77v-1382c0 -43 -34 -77 -77 -77h-923c18 109 27 134 50 210c31 103 92 108 92 108c49 11 74 31 224 -36s270 -72 270 -72v0c15 -19 71 -80 137 -85c90 -7 128 19 128 19s31 91 -38 176s-336 376 -343 403c0 0 -40 47 -69 58s-119 63 -135 130
s-42 168 -33 215s22 152 -32 130s-31 -74 -40 -137s-52 -190 -112 -190c0 0 -87 150 -145 132s-108 -181 -63 -275c0 0 -210 -295 -393 -772c-20 14 -34 37 -34 63v1382c0 43 34 77 77 77h1382z" />
<glyph glyph-name="user-circle-o" unicode="&#xf2be;" horiz-adv-x="1792"
d="M896 1536c495 0 896 -401 896 -896c0 -492 -399 -896 -896 -896c-496 0 -896 403 -896 896c0 495 401 896 896 896zM1515 185c93 128 149 285 149 455c0 423 -345 768 -768 768s-768 -345 -768 -768c0 -170 56 -327 149 -455c36 179 123 327 306 327
c81 -79 191 -128 313 -128s232 49 313 128c183 0 270 -148 306 -327zM1280 832c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" />
@ -2039,9 +1963,6 @@ d="M1151 1536c81 0 159 -39 207 -105l572 -781c77 -104 118 -229 118 -359v-355c0 -1
c-42 51 -65 116 -65 182v32c0 106 86 192 192 192h959zM1920 -64v355c0 101 -33 202 -93 284l-573 781c-24 32 -62 52 -103 52h-959c-35 0 -64 -29 -64 -64c0 -53 1 -90 36 -133c13 41 50 69 92 69h832v-32h-832c-35 0 -64 -29 -64 -64c0 -19 -1 -39 3 -58
c11 -59 65 -102 125 -102h731c53 0 96 -43 96 -96c0 -10 -2 -21 -5 -30l-64 -192c-13 -39 -50 -66 -91 -66h-443c-88 0 -160 -72 -160 -160v-32c0 -35 29 -64 64 -64h561c10 0 20 -2 29 -7l317 -158c32 -17 53 -50 53 -86v-197c0 -35 29 -64 64 -64h384c35 0 64 29 64 64z
" />
<glyph glyph-name="digitalocean" unicode="&#xf31d;" horiz-adv-x="1535"
d="M245 169h-191v190h191v-190zM473 -59h-228v228h228v-228zM769 465v-296h-296v296h296zM768 -128v298c315 0 559 312 438 644c-44 123 -142 221 -265 265c-332 120 -644 -123 -644 -438h-297c0 502 485 894 1012 729c230 -72 414 -255 485 -485
c165 -527 -226 -1013 -729 -1013z" />
<glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408"
d="M597 869c0 0 -10 -17 -257 -456c-13 -22 -30 -46 -65 -46h-239c-14 0 -25 7 -31 17s-7 23 0 36l253 448c1 0 1 0 0 1l-161 279c-7 13 -8 27 -1 37c6 10 18 15 32 15h239c36 0 54 -24 66 -45c163 -285 164 -286 164 -286zM1403 1511c7 -10 7 -24 0 -37l-528 -934
c-1 0 -1 -1 0 -1l336 -615c7 -13 7 -27 1 -37c-7 -10 -18 -15 -32 -15h-239c-36 0 -55 24 -66 45c-339 621 -339 622 -339 622s17 30 531 942c13 23 28 45 64 45h241c14 0 25 -5 31 -15z" />
@ -2111,11 +2032,6 @@ d="M994 344c0 -66 -7 -132 -17 -197c-15 -104 -30 -211 -55 -313c-18 -73 -86 -90 -1
c3 21 6 43 10 66c2 16 4 32 6 47c1 6 4 10 9 12c208 106 352 322 352 571c0 365 -306 659 -675 639c-338 -18 -607 -306 -605 -644c2 -249 147 -464 356 -568c5 -2 8 -7 9 -12c2 -14 4 -29 6 -45c4 -24 7 -46 11 -68c2 -12 -11 -22 -22 -17c-297 116 -504 412 -487 753
c19 387 331 704 718 728c446 28 817 -326 817 -766zM994 800c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224zM1282 768c0 -165 -79 -313 -200 -406c-10 -8 -24 -1 -26 12c-3 28 -11 61 -29 92c-4 6 -3 14 3 20c76 70 124 170 124 282
c0 226 -197 407 -428 382c-177 -20 -321 -166 -338 -344c-13 -126 37 -242 122 -320c6 -6 7 -14 3 -20c-18 -31 -26 -64 -29 -93c-2 -12 -16 -19 -26 -11c-124 96 -203 247 -200 417c6 266 222 488 487 500c294 14 537 -220 537 -511z" />
<glyph glyph-name="hackster" unicode="&#xf326;"
d="M768 -128c-424 0 -768 344 -768 768s344 768 768 768s768 -344 768 -768s-344 -768 -768 -768zM517 887c-10 -3 -17 -13 -17 -23s8 -18 18 -18h113c17 0 31 14 31 31v9c0 3 0 5 -1 8c-4 16 -22 26 -38 22zM661 739v59v5c-2 9 -12 13 -21 11l-325 -88c-5 -1 -9 -7 -9 -12
s4 -9 9 -9h151c17 0 31 -14 31 -31v-86c0 -9 8 -17 17 -17h324c17 0 31 -13 31 -30v-59v-5c2 -9 12 -13 21 -11l325 88c5 1 9 7 9 12s-4 9 -9 9h-152c-17 0 -30 14 -30 31v85c0 9 -8 17 -17 17h-324c-17 0 -31 14 -31 31v0zM891 989c-13 -4 -23 -16 -23 -30v-176
c0 -17 14 -31 31 -31h101c17 0 30 14 30 31v203v0c0 2 0 6 -1 8c-4 16 -21 26 -37 22zM1013 386c10 3 17 13 17 23s-8 19 -18 19h-113c-17 0 -31 -14 -31 -31v-9c0 -3 0 -5 1 -8c4 -16 22 -26 38 -22zM639 285c13 4 23 16 23 30v176c0 17 -14 30 -31 30h-101
c-17 0 -30 -13 -30 -30v-204c0 -3 0 -5 1 -8c4 -16 21 -25 37 -21z" />
<glyph glyph-name="plus-square" unicode="&#xf0fe;"
d="M1280 576v128c0 35 -29 64 -64 64h-320v320c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-320h-320c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h320v-320c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v320h320c35 0 64 29 64 64zM1536 1120v-960
c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
@ -2155,8 +2071,6 @@ d="M1278 -96v480h160v-640h-1438v640h160v-480h1118zM336 428l33 157l783 -165l-33 -
d="M1408 606v-318c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c40 0 80 -8 117 -25c9 -4 16 -13 18 -23c2 -11 -1 -21 -9 -29l-49 -49c-6 -6 -15 -10 -23 -10c-3 0 -6 1 -9 2c-15 4 -30 6 -45 6h-832
c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v254c0 8 3 16 9 22l64 64c7 7 15 10 23 10c4 0 8 -1 12 -3c12 -5 20 -16 20 -29zM1639 1095l-814 -814c-32 -32 -82 -32 -114 0l-430 430c-32 32 -32 82 0 114l110 110c32 32 82 32 114 0
l263 -263l647 647c32 32 82 32 114 0l110 -110c32 -32 32 -82 0 -114z" />
<glyph glyph-name="emby" unicode="&#xf319;" horiz-adv-x="1534"
d="M474 224l-62 -62l-412 415l356 356l-60 61l414 414l355 -355l58 57l411 -414l-352 -352l58 -58l-414 -414zM1091 633l-496 291v-578z" />
<glyph glyph-name="hand-spock-o" unicode="&#xf259;" horiz-adv-x="1920"
d="M459 -256c-103 0 -192 70 -217 170l-101 401c-8 35 -13 72 -13 108c0 23 0 45 -5 67l-116 477c-5 19 -7 38 -7 57c0 124 94 226 217 239c22 113 119 193 235 193c111 0 207 -76 233 -184l83 -348l103 428c26 108 122 184 233 184c119 0 217 -86 236 -202
c123 -14 212 -118 212 -241c0 -19 -3 -39 -7 -59l-123 -512c80 60 138 118 243 118c139 0 255 -113 255 -253c0 -84 -41 -162 -107 -212l-507 -380c-44 -33 -98 -51 -153 -51h-694zM1104 1408c-51 0 -96 -36 -108 -86l-164 -682h-127l-145 602c-12 50 -57 86 -108 86
@ -2242,9 +2156,6 @@ d="M152 1274v0h10c90 -2 180 -36 272 -79c4 -2 11 -5 15 -7c7 -3 13 -7 20 -10c116 -
c2 3 5 5 7 8s5 6 7 9c70 83 157 151 278 208c101 48 200 86 296 86h9c45 -1 84 -15 110 -44c80 -92 -8 -177 -39 -293c-41 -155 6 -321 -118 -429c-43 -37 -93 -47 -143 -52c65 -77 103 -183 82 -292c-4 -21 -10 -42 -18 -61c-6 -17 -13 -32 -22 -47l-9 -15
c-2 -2 -3 -5 -5 -7c-63 -94 -168 -154 -281 -161c-6 0 -11 -1 -17 -1h-9c-15 0 -39 3 -53 5c-19 3 -49 12 -67 19c-3 1 -7 2 -9 3c-69 29 -124 80 -159 143c-2 3 -4 5 -5 8c-2 3 -5 3 -7 0c-1 -3 -3 -5 -5 -8s-2 -5 -4 -8c-48 -81 -131 -140 -231 -157c-12 -2 -23 -3 -35 -4
c-6 0 -12 -1 -18 -1c-169 -3 -327 118 -361 292c-21 109 18 215 83 292c-50 5 -101 15 -144 52c-124 108 -78 274 -119 429c-31 116 -118 201 -38 293c26 29 65 43 110 44h9z" />
<glyph glyph-name="file-epub" unicode="&#xf321;"
d="M723 132l458 458l70 -71c24 -24 24 -64 0 -88l-483 -483c-24 -24 -65 -24 -89 0l-483 483c-24 24 -24 64 0 88l483 484c24 24 65 24 89 0l298 -299l-343 -343l-114 114l229 229l-115 114l-343 -343zM1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344
c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416h-768v-1536h1280z" />
<glyph glyph-name="chevron-circle-left" unicode="&#xf137;"
d="M909 141l102 102c25 25 25 65 0 90l-307 307l307 307c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-454 -454c-25 -25 -25 -65 0 -90l454 -454c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792"
@ -2316,11 +2227,6 @@ v66c282 -8 528 -159 667 -385zM1748 640c0 470 -382 852 -852 852s-852 -382 -852 -8
<glyph glyph-name="server" unicode="&#xf233;" horiz-adv-x="1792"
d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM128 1152h1024v128h-1024v-128zM1696 704c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1696 1216
c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
<glyph glyph-name="inkscape" unicode="&#xf312;"
d="M755 1398v0c47 0 95 -17 131 -52l588 -601c234 -234 -259 -288 -401 -371c-50 -51 153 -85 132 -147c-42 -126 -157 -45 -280 -171c-50 -51 95 -46 45 -97c-93 -68 -285 -115 -300 -32c-21 117 -135 68 -185 119s101 104 51 155s-299 97 -349 148s191 88 141 139
c-138 68 -461 41 -269 278l567 580c34 35 82 52 129 52zM760 1343v0c-34 0 -68 -13 -93 -38c-49 -50 -140 -138 -219 -223c-45 -45 -40 -109 10 -109h123l80 139l49 -199l149 95l93 -49l22 131l111 -89c12 12 12 54 -9 76l-224 228c-24 25 -58 38 -92 38zM491 456
c-74 0 219 -119 279 -103c27 14 40 34 21 38c-56 9 -285 56 -300 65zM1390 297c43 -1 86 -22 100 -63c0 -54 -212 -36 -212 -7c13 47 63 71 112 70zM409 172c26 0 50 -8 64 -26c-23 -61 -101 -115 -151 -72c-57 50 21 99 87 98zM1251 168c71 -14 85 -65 71 -79
c-64 -38 -136 21 -71 79z" />
<glyph glyph-name="search-minus" unicode="&#xf010;" horiz-adv-x="1664"
d="M1024 736v-64c0 -17 -15 -32 -32 -32h-576c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h576c17 0 32 -15 32 -32zM1152 704c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -71 -57 -128 -128 -128c-34 0 -67 14 -90 38
l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704c0 -142 -43 -282 -124 -399l343 -343c23 -23 37 -56 37 -90z" />
@ -2339,16 +2245,17 @@ c-9 0 -18 -3 -24 -8c-7 -4 -10 -11 -10 -18l17 -621c0 -14 15 -25 34 -25h185c18 0 3
d="M1408 768c0 -283 -315 -512 -704 -512c-61 0 -120 6 -176 16c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512s704 -229 704 -512zM1792 512
c0 -163 -104 -307 -266 -401c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29c-30 4 -59 9 -86 16c-101 26 -195 69 -278 128c-56 -10 -115 -16 -176 -16c-181 0 -347 50 -472 132c29 -2 59 -4 88 -4c215 0 418 62 573 174c167 122 259 287 259 466
c0 52 -8 103 -23 152c169 -93 279 -241 279 -408z" />
<glyph glyph-name="moon" unicode="&#xf328;" horiz-adv-x="1471"
d="M1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
<glyph glyph-name="facebook-official" unicode="&#xf230;"
d="M1451 1408c47 0 85 -38 85 -85v-1366c0 -47 -38 -85 -85 -85h-391v595h199l30 232h-229v148c0 67 18 112 115 112l122 1v207c-21 3 -94 9 -178 9c-177 0 -299 -108 -299 -306v-171h-200v-232h200v-595h-735c-47 0 -85 38 -85 85v1366c0 47 38 85 85 85h1366z" />
<glyph glyph-name="clock-o" unicode="&#xf017;"
d="M896 992v-448c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v352c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640
c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="caret-square-o-left" unicode="&#xf191;"
d="M1024 960v-640c0 -35 -29 -64 -64 -64c-13 0 -26 4 -37 12l-448 320c-17 12 -27 31 -27 52c0 20 10 40 27 52l448 320c11 8 24 12 37 12c35 0 64 -29 64 -64zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960
c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="handshake-o" unicode="&#xf2b5;" horiz-adv-x="2304"
d="M192 384c84 0 84 128 0 128s-84 -128 0 -128zM1665 442c-79 103 -156 208 -246 302l-125 -140c-110 -125 -307 -122 -414 6c-76 92 -76 224 2 315l177 206c-62 32 -137 21 -204 21c-59 0 -116 -24 -158 -66l-158 -158h-155v-544c44 0 84 6 119 -28l297 -292
c61 -59 140 -111 227 -111c45 0 93 15 125 47c75 -26 162 16 185 93c48 -4 92 11 127 44c23 21 53 63 50 96c9 -9 31 -10 43 -10c119 0 181 125 108 219zM1824 384h96v512h-93l-157 180c-42 48 -105 76 -169 76h-167c-56 0 -110 -25 -146 -67l-209 -243
c-37 -44 -37 -106 -1 -150c57 -68 162 -69 221 -3l193 218c46 51 130 3 109 -62c38 -44 79 -87 116 -131c50 -62 98 -127 147 -190c31 -40 54 -88 60 -140zM2112 384c84 0 84 128 0 128s-84 -128 0 -128zM2304 960v-640c0 -35 -29 -64 -64 -64h-434
c-36 -87 -115 -145 -207 -158c-43 -63 -109 -111 -183 -127c-55 -70 -144 -112 -233 -106c-165 -93 -351 -12 -474 109l-287 282h-358c-35 0 -64 29 -64 64v672c0 35 29 64 64 64h421c116 116 196 224 370 224h117c65 0 128 -20 181 -56c53 36 116 56 181 56h167
c190 0 269 -124 384 -256h355c35 0 64 -29 64 -64z" />
<glyph glyph-name="hand-scissors-o" unicode="&#xf257;" horiz-adv-x="1792"
d="M1073 -128h-177c-104 0 -183 45 -226 141c-15 32 -23 67 -23 102v5c-82 40 -135 124 -135 216c0 11 0 38 5 48h-261c-141 0 -256 115 -256 256s115 256 256 256h113l-44 17c-99 37 -165 133 -165 239c0 141 115 256 256 256c31 0 62 -6 91 -17l628 -239h401
c141 0 256 -115 256 -256v-668c0 -118 -80 -220 -194 -248l-339 -85c-60 -15 -123 -23 -186 -23zM1024 583l-155 -71l-163 -74c-40 -18 -66 -58 -66 -102c0 -62 50 -112 112 -112c16 0 32 3 46 10l338 154c-65 14 -112 73 -112 140v55zM1344 272c0 62 -50 112 -112 112
@ -2543,9 +2450,6 @@ c13 -20 20 -44 20 -69s-7 -49 -20 -69c-119 -187 -293 -342 -497 -429c15 -27 110 -1
c-22 -5 -50 -3 -72 -3c-11 0 -56 -2 -60 7l-456 841c-29 -21 -56 -44 -82 -68c22 -39 404 -742 404 -748c0 -8 -5 -10 -11 -10c-17 0 -150 41 -155 50l-106 197l-224 413c-28 -34 -54 -69 -78 -106c13 -19 30 -39 41 -59c14 -26 176 -321 176 -327c0 -5 -5 -10 -10 -10z
M1165 282l49 -91c187 76 341 216 450 385c-111 171 -269 313 -459 389c89 -85 139 -202 139 -325c0 -141 -66 -274 -179 -358zM848 896c0 -26 22 -48 48 -48c55 0 108 -22 147 -61s61 -92 61 -147c0 -26 22 -48 48 -48s48 22 48 48c0 168 -136 304 -304 304
c-26 0 -48 -22 -48 -48zM1214 961l-9 4l7 -7z" />
<glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
d="M960 864c159 0 288 -129 288 -288s-129 -288 -288 -288s-288 129 -288 288s129 288 288 288zM1664 1280c141 0 256 -115 256 -256v-896c0 -141 -115 -256 -256 -256h-1408c-141 0 -256 115 -256 256v896c0 141 115 256 256 256h224l51 136c25 66 103 120 173 120h512
c70 0 148 -54 173 -120l51 -136h224zM960 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
<glyph glyph-name="wordpress" unicode="&#xf19a;" horiz-adv-x="1792"
d="M127 640c0 111 24 217 67 313l367 -1005c-257 125 -434 388 -434 692zM1415 679c0 -66 -27 -142 -59 -249l-76 -256l-278 826s46 3 88 8c41 5 36 66 -5 63c-125 -9 -205 -10 -205 -10s-75 1 -202 10c-42 3 -47 -60 -5 -63c39 -4 80 -8 80 -8l120 -328l-168 -504l-280 832
s46 3 88 8c41 5 36 66 -5 63c-124 -9 -205 -10 -205 -10c-14 0 -31 1 -49 1c137 209 373 347 642 347c200 0 382 -77 519 -202h-10c-75 0 -129 -65 -129 -136c0 -63 37 -116 76 -180c30 -51 63 -117 63 -212zM909 573l237 -647c1 -4 3 -8 5 -11c-80 -28 -165 -44 -255 -44
@ -2757,8 +2661,6 @@ d="M1280 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32
h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-288 32 -512 276 -512 572c0 136 48 261 126 359l-52 53l-101 -111c-12 -13 -32 -14 -45 -3l-48 44c-13 11 -14 32 -2 45l105 115l-111 112v-134c0 -18 -14 -32 -32 -32h-64
c-18 0 -32 14 -32 32v288c0 35 29 64 64 64h288c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-133l106 -107l86 94c12 13 32 14 45 3l48 -44c13 -11 14 -32 2 -45l-90 -99l57 -56c98 78 223 126 359 126s261 -48 359 -126l255 254h-134c-18 0 -32 14 -32 32v64zM832 256
c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
<glyph glyph-name="chevron-up" unicode="&#xf077;" horiz-adv-x="1612"
d="M1593 205l-166 -165c-25 -25 -65 -25 -90 0l-531 531l-531 -531c-25 -25 -65 -25 -90 0l-166 165c-25 25 -25 66 0 91l742 741c25 25 65 25 90 0l742 -741c25 -25 25 -66 0 -91z" />
<glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1428"
d="M1364 486c61 -35 82 -114 47 -175l-64 -110c-35 -61 -114 -82 -175 -47l-266 153v-307c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v307l-266 -153c-61 -35 -140 -14 -175 47l-64 110c-35 61 -14 140 47 175l266 154l-266 154c-61 35 -82 114 -47 175l64 110
c35 61 114 82 175 47l266 -153v307c0 70 58 128 128 128h128c70 0 128 -58 128 -128v-307l266 153c61 35 140 14 175 -47l64 -110c35 -61 14 -140 -47 -175l-266 -154z" />
@ -2832,11 +2734,8 @@ c18 0 32 -14 32 -32zM1540 -23v-233h-584v90l369 529c8 12 16 22 21 27l11 9v3c-4 0
l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70z" />
<glyph glyph-name="area-chart" unicode="&#xf1fe;" horiz-adv-x="2048"
d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
<glyph glyph-name="dev-to" unicode="&#xf316;"
d="M39 1403v0c13 5 121 6 735 5c717 -1 721 -1 734 -9c7 -5 15 -14 20 -21c8 -13 8 -16 8 -739s0 -726 -8 -739c-5 -7 -13 -15 -20 -20c-13 -8 -16 -8 -739 -8s-726 0 -739 8c-7 5 -16 13 -21 20c-8 13 -8 16 -9 731c0 490 0 723 3 733c5 19 18 33 36 39zM404 935
c-18 4 -53 6 -119 6h-93v-603h84c46 0 96 1 111 3c72 9 131 63 144 132c5 26 5 306 0 332c-6 31 -20 59 -43 83c-25 26 -50 40 -84 47zM897 886v55h-118c-92 0 -121 -2 -133 -6c-20 -7 -42 -30 -47 -50c-3 -11 -4 -89 -3 -254c1 -265 -1 -250 27 -274c20 -17 39 -19 163 -19
h111v109l-95 1l-96 1l-1 69v69h116v109h-116v136h192v54zM1081 933c-3 8 -4 8 -62 8h-59l3 -10c26 -106 136 -514 143 -528c11 -23 33 -49 49 -57c18 -9 47 -7 67 4c16 9 45 45 50 62c8 25 138 522 138 525s-16 4 -60 3l-58 -1l-52 -198c-28 -109 -52 -199 -53 -202
s-24 83 -52 190s-52 199 -54 204zM301 639v193l41 -1c37 -2 42 -2 56 -11c28 -18 27 -18 27 -178c0 -164 0 -166 -29 -183c-15 -9 -22 -10 -56 -11l-39 -2v193z" />
<glyph glyph-name="chevron-up" unicode="&#xf077;" horiz-adv-x="1612"
d="M1593 205l-166 -165c-25 -25 -65 -25 -90 0l-531 531l-531 -531c-25 -25 -65 -25 -90 0l-166 165c-25 25 -25 66 0 91l742 741c25 25 65 25 90 0l742 -741c25 -25 25 -66 0 -91z" />
<glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408"
d="M1280 832c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 832c0 -84 -53 -154 -128 -181v-395c0 -212 -201 -384 -448 -384s-448 172 -448 384v132c-217 27 -384 187 -384 380v512c0 35 29 64 64 64c6 0 11 -1 16 -2c22 39 64 66 112 66
c71 0 128 -57 128 -128s-57 -128 -128 -128c-23 0 -45 7 -64 18v-402c0 -141 144 -256 320 -256s320 115 320 256v402c-19 -11 -41 -18 -64 -18c-71 0 -128 57 -128 128s57 128 128 128c48 0 90 -27 112 -66c5 1 10 2 16 2c35 0 64 -29 64 -64v-512

Before

Width:  |  Height:  |  Size: 470 KiB

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,22 +1,16 @@
<hr>
<footer class="text-center">
<div class="collapse" id="sshfp">
<pre>
ECDSA: SHA256:R3qNfKIF3IiXhKCbFX6rCKl73yzexi9Wodsow6XFres
ED25519: SHA256:FErDF9upMkSg/yzw0N7i2o971LT/Bocd1qrDDpE315I
RSA: SHA256:JR5oQPfC34ogd/SeIcMpaGR8BiBo4ciI5xWyBVCjj5o</pre>
</div>
<a href="https://tildegit.org/team/site">site source</a>
~
<a href="https://tildegit.org/team/site/src/branch/master/<?=str_ireplace("/var/www/tilde.team/", "", $filepath ?? "")?>">page source</a>
~
<a href="https://tildegit.org/team/site">page source</a>
&mdash;
<a href="https://bhh.sh/donate/">donate</a>
~
<a data-toggle="collapse" href="#sshfp" aria-expanded="false" aria-controls="sshfp">
ssh fingerprints
</a>
</footer>
</div>
<br>
<br>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
</body>
</html>

47
gen_tdp
View File

@ -1,39 +1,36 @@
#!/usr/bin/env python3
import subprocess, json, os.path, requests
import subprocess,json,os.path,requests
from bs4 import BeautifulSoup as bs
tdp = {}
tdp["name"] = "tilde.team"
tdp["url"] = "https://tilde.team"
tdp["signup_url"] = tdp["url"] + "/signup/"
users = subprocess.check_output(["/usr/bin/members", "team"]).decode("ascii").split()
tdp["signup_url"] = tdp["url"]+"/signup"
users = subprocess.check_output(["/usr/bin/members","team"]).decode('ascii').split()
users.sort()
tdp["user_count"] = len(users)
tdp["user_count"] = len(users)-1
tdp["want_users"] = True
tdp["admin_email"] = "sudoers@tilde.team"
tdp["description"] = "a digital community for socializing, learning, and making cool stuff, tilde.team is a shared system that provides a radically inclusive, non-commercial space for teaching, learning, practicing and enjoying the social medium of unix."
tdpusers = []
for user in users:
tdpuser = dict(username=user)
try:
title = bs(
requests.get(f"https://tilde.team/~{user}/", allow_redirects=False).text,
"lxml",
).title.text
except:
title = "No title"
tdpuser["title"] = title
if os.path.exists(f"/home/{user}/public_html/index.html"):
tdpuser["mtime"] = os.path.getmtime(f"/home/{user}/public_html/index.html")
elif os.path.exists(f"/home/{user}/public_html/index.cgi"):
tdpuser["mtime"] = os.path.getmtime(f"/home/{user}/public_html/index.cgi")
elif os.path.exists(f"/home/{user}/public_html/index.php"):
tdpuser["mtime"] = os.path.getmtime(f"/home/{user}/public_html/index.php")
tdpusers.append(tdpuser)
if user=="asm":
continue
tdpuser = dict(username=user)
title = bs(requests.get("https://tilde.team/~{}".format(user)).text,"lxml").title
if title is None:
title = "No title"
else:
title = title.text
tdpuser["title"] = title
if os.path.exists(os.path.expanduser("~{}/public_html/index.html".format(user))):
tdpuser["mtime"] = os.path.getmtime(os.path.expanduser("~{}/public_html/index.html".format(user)))
elif os.path.exists(os.path.expanduser("~{}/public_html/index.htm".format(user))):
tdpuser["mtime"] = os.path.getmtime(os.path.expanduser("~{}/public_html/index.htm".format(user)))
elif os.path.exists(os.path.expanduser("~{}/public_html/index.php".format(user))):
tdpuser["mtime"] = os.path.getmtime(os.path.expanduser("~{}/public_html/index.php".format(user)))
tdpusers.append(tdpuser)
tdp["users"] = tdpusers
with open("tilde.json", "w") as f:
json.dump(tdp, f)
with open("tilde.json","w") as f:
json.dump(tdp,f)

3
gettingstarted/index.php Normal file
View File

@ -0,0 +1,3 @@
<?php
header("Location: /wiki/view.php?page=getting-started");
die();

View File

@ -15,26 +15,14 @@
<link rel="icon" type="image/png" sizes="192x192" href="/apple-touch-icon-precomposed.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<script defer src="/js/jquery.min.js"></script>
<script defer src="/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="/css/hacker.css">
<style>
/* offset #fragments */
:target:before {
content: "";
display: block;
height: 70px;
margin: -70px 0 0;
}
</style>
<link rel="stylesheet" href="/css/fork-awesome.css">
<?=$additional_head ?? ""?>
<?php unset($title); unset($additional_head); ?>
</head>
<body style="padding-top: 70px; padding-bottom: 30px;">
<body style="padding-top: 70px;">
<div class="container">
<nav class="navbar navbar-default navbar-fixed-top">

View File

@ -16,7 +16,7 @@ Site: https://tilde.team/~virtual/ virtual@tilde.team
Location tildeverse, the internet
Users: tilde.team teammates
Sites: https://tilde.team/~<username>/ (see https://tilde.team/users/ for a list)
Sites: https://tilde.team/~<username>/ (see https://tilde.team for a list)
Location: tildeverse, the internet
@ -24,6 +24,7 @@ Location: tildeverse, the internet
Name: Paul Ford, for inspiring tilde.team through tilde.club
/* SITE */
Last update: 2022/02/17
Last update: 2018/08/13
Components: Bootstrap 3
Software: PHP

276
index.php Normal file → Executable file
View File

@ -1,15 +1,12 @@
<?php
$filepath = __FILE__;
include 'header.php';
require __DIR__.'/vendor/autoload.php';
use tildeteam\wiki;
$parser = wiki::factory(true);
$parser = Tildeverse\Wiki\Parser::factory();
?>
<div class="jumbotron">
<h1>~team</h1>
<pre>
<div class="jumbotron">
<h1>~team</h1>
<pre>
__ _ __ __ __
/ /_(_) /___/ /__ / /____ ____ _____ ___
/ __/ / / __ / _ \ / __/ _ \/ __ `/ __ `__ \
@ -17,169 +14,130 @@ $parser = wiki::factory(true);
\__/_/_/\__,_/\___(_)__/\___/\__,_/_/ /_/ /_/
</pre>
<br>
<br>
<p>a digital community for socializing, learning, and making cool stuff</p>
</div>
<p>
tilde.team is a shared system that provides an inclusive,
non-commercial space for teaching, learning, practicing and
enjoying the social medium of unix.
</p>
<p>
i created this tilde after hearing about paul ford's
<a href="https://tilde.club/">tilde.club</a>. when i was unable
to join due to the waitlist, i decided to create my own tilde.
</p>
<p>thanks for stopping by!</p>
<p>
tilde.team is a founding member of <a href="https://tildeverse.org">tildeverse.org</a>,
which is a collaborative effort among several <a href="https://tildeverse.org/members/">
other tilde servers</a>.
</p>
<p>
hosting and domains are paid out-of-pocket. tilde.team will always
be free to use. however, if you are able and willing to pitch in,
you can <a href="https://bhh.sh/donate/">donate here</a>.
</p>
<p><a href="/~ben/">~ben</a></p>
<br>
<a href="/signup/" class="btn btn-primary btn-lg">
<i class="fa fa-user-plus"></i> signup</a>
<br>
<br>
<hr>
<h2>tilde.team services</h2>
<?php include 'services.php'; ?>
<br>
<hr>
<div class="row">
<div class="col-md-6">
<h2 id="news">~news~</h2>
<?php foreach (array_slice(array_reverse(glob("news/pages/*.md")), 0, 4) as $page):
$parsed = $parser->parse(file_get_contents($page));
$yaml = $parsed->getYAML();
if (!$yaml["published"]) continue; ?>
<div class="list-group">
<div class="list-group-item">
<h3 class="list-group-item-heading"><?=$yaml["title"]?></h3>
<em><a href="/news/<?=basename($page, ".md")?>"><?=$yaml["date"]?></a></em>
&bull;
<em><a href="/~<?=$yaml["author"]?>/"><?=$yaml["author"]?></a></em>
<hr>
<div class="list-group-item-text"><?=$parsed->getContent()?></div>
</div>
</div>
<?php endforeach; ?>
<div class="list-group">
<div class="list-group-item">
<p class="list-group-item-text"><a href="/news/">news archive...</a></p>
</div>
<p>a digital community for socializing, learning, and making cool stuff</p>
</div>
</div>
<div class="col-md-6">
<h2 id="projects">~projects~</h2>
<?php // readonly token, gitea changed perms on this endpoint
$repo_url = "https://tildegit.org/api/v1/orgs/team/repos?limit=100&token=448c748ee0082f46ccf246daf759874ca5d067cb";
foreach (json_decode(file_get_contents($repo_url)) ?? [] as $repo):
if ($repo->archived) continue; ?>
<p>
tilde.team is a shared system that provides an inclusive,
non-commercial space for teaching, learning, practicing and
enjoying the social medium of unix.
</p>
<p>
i created this tilde after hearing about paul ford's
<a href="http://tilde.club/">tilde.club</a>. when i was unable
to join due to the waitlist, i decided to create my own tilde.
</p>
<div class="list-group">
<div class="list-group-item">
<h3 style="display:inline;" class="list-group-item-heading">
<a href="<?=$repo->html_url?>"><?=$repo->name?></a>
</h3>
<?php if ($repo->website != ""): ?>
&mdash;
<p style="display:inline;"><em><a href="<?=$repo->website?>"><?=$repo->website?></a></em></p>
<?php endif; ?>
<br>
<p class="list-group-item-text"><?=$repo->description?></p>
<p>thanks for stopping by!</p>
<p>
tilde.team is a founding member of <a href="https://tildeverse.org">tildeverse.org</a>,
which is a collaborative effort among several <a href="https://tildeverse.org/members/">
other tilde servers</a>.
</p>
<p>
hosting and domains are paid out-of-pocket. tilde.team will always
be free to use. however, if you are able and willing to pitch in,
you can <a href="https://bhh.sh/donate/">donate here</a>.
</p>
<p><a href="/~ben/">~ben</a></p>
<br>
<a href="/signup/" class="btn btn-primary btn-lg">
<i class="fa fa-user-plus"></i> signup</a>
<br>
<br>
<hr>
<h3>other tilde.team stuff</h3>
<?php include 'services.php'; ?>
<br>
<hr>
<div class="row">
<div class="col-md-7">
<h1>~news~</h1>
<?php foreach (array_slice(array_reverse(glob("news/pages/*.md")), 0, 4) as $page):
$parsed = $parser->parse(file_get_contents($page));
$yaml = $parsed->getYAML();
if (!$yaml["published"]) continue; ?>
<div class="list-group">
<div class="list-group-item">
<h3 class="list-group-item-heading"><?=$yaml["title"]?></h3>
<em>
<a href="/news/?page=<?=basename($page, ".md")?>">
<?=$yaml["date"]?></a> - <a href="/~<?=$yaml["author"]?>/"><?=$yaml["author"]?></a>
</em>
<hr>
<p class="list-group-item-text"><?=$parsed->getContent()?></p>
</div>
</div>
<?php endforeach; ?>
<div class="list-group">
<div class="list-group-item">
<p class="list-group-item-text"><a href="/news/">news archive here...</a></p>
</div>
</div>
</div>
<?php endforeach; ?>
<div class="list-group">
<div class="list-group-item">
<p class="list-group-item-text"><a href="https://tildegit.org/team">gitea repos...</a></p>
<h1>~current projects~</h1>
<h4>on our <a href="https://tildegit.org/team">gitea</a></h4>
<hr>
<div class="list-group">
<?php foreach (json_decode(file_get_contents("https://tildegit.org/api/v1/orgs/team/repos")) ?? [] as $repo): ?>
<div class="list-group-item">
<h3 style="display:inline;" class="list-group-item-heading">
<a href="<?=$repo->html_url?>"><?=$repo->name?></a>
</h3>
<?php if ($repo->website != ""): ?>
&mdash;
<p style="display:inline;"><em><a href="<?=$repo->website?>"><?=$repo->website?></a></em></p>
<?php endif; ?>
<br>
<p class="list-group-item-text"><?=$repo->description?></p>
</div>
<?php endforeach; ?>
</div>
<h1>our <a href="https://tilde.zone/@tildeteam">mastodon</a> feed</h1>
<iframe allowfullscreen sandbox="allow-top-navigation allow-scripts" width="100%" height="800" src="https://www.mastofeed.com/api/feed?url=https%3A%2F%2Ftilde.zone%2Fusers%2Ftildeteam.atom&theme=dark&size=100&header=true&replies=true&boosts=true"></iframe>
</div>
</div>
</div>
</div>
<hr>
<div class="row">
<div class="col-md-12">
<h2 id="newstuff">~user spotlight~</h2>
<div class="list-group">
<div class="list-group-item">
<div class="col-md-5">
<h1>~users~</h1>
<p><em><a href="/tilde.24h.html"><i class="fa fa-clock-o"></i> recent updates</a></em></p>
<p>if you're not listed here, make some changes to your page</p>
<p><a href="/users/">all users</a></p>
<br><br>
<div class="list-group">
<ul>
<li>
<a href="https://gtlsgamr.tilde.team">~gtlsgamr</a> has made a <a href="https://gtlsgamr.tilde.team/nethack_scores.php">page</a> to show tilde.team's top nethack scorers!
</li>
<li>
For the text-only enthusiasts, <a href="https://soxfox.tilde.team">~soxfox</a> has also made a <a href="gemini://tilde.team/~soxfox/nethack">gemini page</a> to show nethack scorers.
<?php
foreach (glob("/home/*") as $user):
if (!is_dir("$user/public_html")
|| (file_exists("$user/public_html/index.php")
&& in_array(sha1_file("$user/public_html/index.php"),
// these are the sha1s of two previous default pages
["ca32714c33abb57430583ad07efec6097ae1a044", "f190ba3a1ed796a20bea83304e45e799420c0716"])))
continue;
$user = basename($user); ?>
<li style="list-style: none; margin-left: -40px;">
<a href="/~<?=$user?>/" class="list-group-item">
<h6 class="list-group-item-heading">~<?=$user?></h5>
</a>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
</div>
</div>
</div>
<hr>
<div class="clearfix">
<h2 id="users">~users~</h2>
<p><em><a href="/tilde.24h.html"><i class="fa fa-clock-o"></i> recent updates</a></em> | <a href="/users/">all users</a></p>
<p>if you're not listed here, make some changes to your page</p>
<ul class="list-unstyled">
<?php
$usercount = 0;
foreach (glob("/home/*/public_html", GLOB_ONLYDIR) as $user):
if (
(
// make sure we have an index page
!is_file("$user/index.html")
&& !is_file("$user/index.htm")
&& !is_file("$user/index.cgi")
&& !is_file("$user/index.php")
)
|| (
// if it's php, compare the hash to the default page
is_file("$user/index.php")
&& in_array(
sha1_file("$user/index.php"),
[
// these are the sha1s of two previous pages
"ca32714c33abb57430583ad07efec6097ae1a044",
"f190ba3a1ed796a20bea83304e45e799420c0716"
]
)
)
) continue;
$user = basename(dirname($user));
$usercount++; ?>
<li><a href="/~<?=$user?>/" class="list-group-item col-xs-6 col-sm-4 col-md-2">~<?=$user?></a></li>
<?php endforeach; ?>
</ul>
</div>
<br>
<p>users who have updated their homepages: <?=$usercount?></p>
<?php include 'footer.php'; ?>

7
js/bootstrap.min.js vendored

File diff suppressed because one or more lines are too long

4
js/jquery.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,7 +0,0 @@
<?php
if (preg_match('/^.*\/(news|wiki)\/(.*)$/', $_SERVER["REQUEST_URI"], $matches))
{
$_GET["page"] = $matches[2];
}
return false;

View File

@ -1,16 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg"
width="240"
height="240">
<g fill="white" stroke="black">
<path d="M4 120L120 4l116 116"
stroke-width="8" stroke-linecap="round"/>
<path d="M210 200V40H30v160z"
stroke-width="3.5"/>
<path d="M236 120l-116 45L4 120v116h232z"
stroke-width="8" stroke-linejoin="round"/>
</g>
<path d="M70.33 110.55c1.05-2.68 2.55-4.86 4.27-7.21 8.94-12.2 19.62-11.8 32.66-6.53 15.52 6.28 30.61 17.28 48.22 12.37 7.41-2.07 13.19-7.01 17.78-13.05 1.57-2.07 5.1-5.34 4.62-8.24-.4-2.41-3.28-4.63-4.96-6.18-1.44-1.34-2.35-1.55-4.1-2.06-4.03 5.7-8.79 13.2-15.39 16.14-8.44 3.77-17.13-1.08-24.62-4.64-14.02-6.65-30.38-14.54-46.17-10.13-9.71 2.71-27.87 16.42-17.44 26.45 1.78 1.71 2.86 2.43 5.13 3.09"
fill="black"/>
<path d="M4 236l116-96 116 96z"
fill="white" stroke="black" stroke-width="8" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 886 B

View File

@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg"
width="240" height="240">
<path d="M34.05 232.58c1.75-20.09 9.89-38.03 23.92-52.71 6.68-7 16.25-14.23 23.85-18.04 2.25-1.13 4.25-2.19 4.44-2.36s-1.73-2.59-4.27-5.37c-10.61-11.61-14.96-28.28-11.56-44.32 2.16-10.19 6.24-17.53 14.04-25.25 7.97-7.89 13.49-11.12 23.35-13.64 8.91-2.28 16.39-2.28 25.3 0 9.85 2.52 15.38 5.75 23.35 13.64 7.79 7.72 11.88 15.06 14.04 25.25 3.38 15.94-1.01 32.78-11.54 44.3-2.55 2.79-4.49 5.22-4.29 5.39s2.19 1.23 4.44 2.36c7.6 3.81 17.17 11.04 23.85 18.04 14.02 14.68 22.16 32.62 23.92 52.71l.65 7.42H33.4zM0 42.94c2.94-1.13 14.48-1.06 21.29.68 9.85 2.52 15.38 5.75 23.35 13.64 7.79 7.72 11.88 15.06 14.04 25.25 3.38 15.94-1.01 32.78-11.54 44.3-2.55 2.79-4.49 5.22-4.29 5.39s2.19 1.23 4.44 2.36c7.14 3.58 16.61 10.62 23.13 17.2 3.47 3.51 6.13 6.52 5.91 6.69s-3.27 2.2-6.77 4.5c-8.18 5.37-20.74 18.26-26.68 27.37-2.56 3.92-5.95 10.57-7.55 14.77l-2.9 7.64H16.21 0zm205.54 162.02c-1.62-4.27-5.34-11.33-8.25-15.69-6.25-9.35-19.86-22.86-27.98-27.78-3.12-1.89-5.68-3.75-5.68-4.13s2.97-3.55 6.59-7.05c6.83-6.58 14.52-12.2 21.59-15.75 2.25-1.13 4.25-2.2 4.44-2.37s-1.73-2.59-4.27-5.37c-10.61-11.61-14.96-28.28-11.56-44.32 2.16-10.19 6.24-17.53 14.04-25.25 3.8-3.76 9.02-7.96 11.61-9.34 8.79-4.67 24.75-7.44 31.89-5.52l2.05.55v169.79h-15.75-15.75z"
fill="black" stroke="white" stroke-width="8" paint-order="stroke"/>
<path d="M84.48 217.12c.75-1.91 1.82-3.48 3.06-5.16 6.39-8.72 14.03-8.44 23.35-4.67 11.1 4.49 21.89 12.36 34.48 8.84 5.3-1.48 9.43-5.02 12.72-9.33 1.13-1.48 3.65-3.82 3.3-5.9-.29-1.72-2.35-3.31-3.55-4.42-1.03-.96-1.68-1.11-2.93-1.47-2.88 4.08-6.29 9.44-11 11.54-6.03 2.69-12.25-.77-17.61-3.32-10.03-4.76-21.72-10.4-33.01-7.25-6.95 1.94-19.93 11.74-12.47 18.91 1.27 1.22 2.05 1.74 3.67 2.21"
fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg"
width="240" height="240">
<path d="M127.26 10.25c1.89 8.99 4.12 15.75-.14 24.77-3.13 6.62-7.72 12.53-12.67 17.94-3.4 3.71-7.7 6.48-11.1 10.25-7.33 8.12-10.89 19.48-6.69 29.89 1.38 3.42 3.32 6.47 5.55 9.4 2.9 3.8 6.24 7.25 10.53 9.4-2.18-4.35-4.7-8.61-4.98-13.67-1.13-20.27 21.65-29.97 32.03-43.56 11.38-14.89 2.44-35.75-12.53-44.41m-17.08 1.71c.77 4.18 1.42 8.13-1.14 11.96-4.88 7.33-18.14 13.21-13.24 23.91a20 20 0 0 0 2.56 4.27c1.25 1.54 2.49 2.47 4.13 3.42-3.56-12.3 7.24-16.34 12.53-25.62 3.76-6.61 1.66-14.18-4.84-17.94M80.28 81.99c2.96-1.09 5.97-2.59 8.54-4.56a21.1 21.1 0 0 0 4.55-4.84c10.4-14.97-8.22-27.17-11.1-41-1.5-7.21 1.49-11.3 4.84-17.08-3.21.68-6 2.29-8.54 4.41-1.73 1.44-3.55 3.13-4.84 4.98-9.64 13.88 6.63 27.23 9.68 40.14 1.63 6.91-.86 11.78-3.13 17.94m52.95-15.37v.85c3.45 2.18 7.11 4.21 11.1 5.27 26.92 7.1 23.38-41.27 50.39-33.45-5.08-7.15-18.47-8.95-25.62-3.99-11.33 7.87-12.76 24.27-26.48 30.18-3.05 1.31-6.15 1.14-9.4 1.14m-104.2-8.54v.85c18.34 0 27.15 20.02 31.32 35.02 2.05 7.39 2.91 14.88 7.4 21.35 10.38 14.95 26.02 10.39 40.71 7.69-2.13-1.65-5.01-1.21-7.69-1.99-7.21-2.1-13.04-7.94-16.8-14.24C74.93 91.6 80.1 67.6 63.2 57.51c-3.01-1.8-6.01-2.43-9.4-3.13-3.29-.69-6.9-.94-10.25-.28a92.5 92.5 0 0 0-14.52 3.99m179.36-.85c-4.11 4-7.86 5.69-13.67 5.12-9.11-.89-20.69-8.97-26.19 3.42-.95 2.13-1.57 4.56-1.99 6.83 5.58-3.23 8.39-5.8 15.37-5.12 6.11.59 12.46 4.48 18.79 2.28 4.15-1.44 9.36-8.43 7.69-12.53m9.4 14.52c-6.74 8.26-15.64 12.81-26.48 12.81-19.42 0-41.05-17.03-58.08 0-2.44 2.44-4.38 5.45-5.84 8.54-2.39 5.05-3.41 10.79-4.41 16.23h.85c1.5-2.99 3.55-5.36 5.98-7.69 19.79-18.97 44.07 6.8 65.77 2.28 11.6-2.42 18.35-12.78 21.21-23.63.67-2.55 1.88-6.38 1-8.54M23.91 74.31v.85c4.15 2.08 7.86 4.16 10.11 8.54 3.82 7.42 1.36 19.12 12.1 21.21 1.62.32 3.5.25 5.12 0a19.6 19.6 0 0 0 5.12-1.57c-3.58-2.77-7.21-3.94-9.96-8.54-4.64-7.77-3-20.21-14.8-21.35-2.63-.26-5.11.65-7.69.85m-9.4 22.21c0 4.54-.26 9.28 1.14 13.67 2.93 9.19 11.44 12.18 20.21 12.67 2.82.16 5.6-1 8.54-.71 10.9 1.06 18.77 4.17 24.77 13.67h.85c0-3.81.01-7.37-.71-11.1-.46-2.35-.82-4.76-2.14-6.83-8.75-13.8-27.11-4.4-39.86-8.83-7.09-2.46-8.23-8.15-12.81-12.53m157.15 6.83c0 5.37-.24 11.19 1.99 16.23 3.88 8.72 11.89 9.4 20.21 9.4 12.73 0 27.66-1.51 32.46 13.67h.85c0-4.54.26-9.28-1.14-13.67-5.58-17.48-26.53-10.25-39.86-13.95-7.22-2.01-9.21-7.78-14.52-11.67m-40.14 12.81v.85a27.8 27.8 0 0 1 10.25 2.28c13.37 5.76 18.49 20.33 21.07 33.59 2.26 11.6 3.74 23.79 15.66 29.75 2.46 1.23 5.04 1.58 7.69 2.14 2.76.58 5.69.85 8.54.57 5.59-.54 11.05-2.36 16.23-4.27-1.89-1.37-5.21-1.13-7.69-1.99-5.22-1.81-10.08-6.5-13.38-10.82-13.45-17.61-8.56-52.75-37.01-55.52-7.46-.73-14.21 2.1-21.35 3.42m-4.27 11.1c2.18 4.35 4.7 8.61 4.98 13.67 1.13 20.27-21.65 29.97-32.03 43.56-11.38 14.89-2.44 35.75 12.53 44.41-1.89-8.99-4.12-15.75.14-24.77 3.13-6.62 7.72-12.53 12.67-17.94 3.4-3.71 7.7-6.48 11.1-10.25 7.33-8.12 10.89-19.48 6.69-29.89-1.38-3.42-3.32-6.47-5.55-9.4-2.9-3.8-6.24-7.25-10.53-9.4m-11.96 2.56c-1.5 2.99-3.55 5.36-5.98 7.69-20.75 19.89-46.5-9.3-69.18-1.42-13.98 4.86-16.13 19.17-19.64 31.32 3.4-2.14 5.82-5.92 9.4-8.26 4.51-2.94 12.57-4.85 17.94-4.55 16.3.91 33.35 12.21 49.54 5.69 9.44-3.8 14.44-12.46 16.94-21.92.68-2.56 2.17-6.55 1-8.54m70.04 5.98v.85c13.55 1.43 10.35 18.89 17.22 26.48 4.23 4.67 9.9 2.98 15.23 2.56-2.35-2.99-6.7-4.06-9.11-7.69-5.2-7.81-1.16-19.96-12.24-23.34a13.2 13.2 0 0 0-5.12-.57 19.4 19.4 0 0 0-5.98 1.71m-26.48 20.5c-4.43 2.8-9.36 4.84-12.53 9.4-8.59 12.38 3.77 22.91 8.97 33.31 2.63 5.26 4.04 12.36 1.57 17.94-.99 2.23-2.8 3.93-3.99 5.98 3.21-.68 5.99-2.29 8.54-4.41 1.73-1.44 3.55-3.13 4.84-4.98 9.52-13.71-6.66-26.5-9.68-39.29-.8-3.38-1.07-7.75 0-11.1.77-2.41 3.07-4.65 2.28-6.83M46.98 199v.85c2.74 1.88 5.39 3.46 8.54 4.55 8.21 2.85 16.49.85 21.92-6.26 3.01-3.94 4.66-8.69 7.4-12.81 5.62-8.42 12.64-13.67 22.78-13.67-5.58-7.86-20.33-9.06-27.33-2.56C69.79 178.84 67 204.8 46.98 199m27.33-32.46c-4.38 4.38-8.31 5.73-14.52 5.12-8.66-.84-18.09-6.64-24.48 2.56-1.58 2.28-2.09 5.08-2.85 7.69 5.17-2.99 8.06-5.75 14.52-5.12 6.58.64 12.7 5.44 19.64 3.13 4.21-1.4 9.98-9.51 7.69-13.38m64.06 17.08c3.58 12.37-7.28 16.4-12.53 25.62-3.71 6.52-1.61 14.2 4.84 17.94-.77-4.17-1.42-8.13 1.14-11.96 4.96-7.44 18.19-13.11 13.24-23.91a20 20 0 0 0-2.56-4.27c-1.25-1.54-2.49-2.47-4.13-3.42z"
fill="black"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -1,32 +0,0 @@
<?php
require_once __DIR__ .'/../vendor/autoload.php';
use FeedWriter\ATOM;
use tildeteam\wiki;
$feed = new ATOM();
$parser = wiki::factory();
$feed->setTitle("tilde.team news");
$feed->setLink("https://tilde.team/news/");
$feed->setDescription("updates and news for tilde.team");
foreach (glob("pages/*.md") as $page)
{
$file = $parser->parse(file_get_contents($page));
$yaml = $file->getYAML();
if (!$yaml["published"]) continue;
$item = $feed->createNewItem();
$item->setTitle($yaml["title"]);
$item->setLink("https://tilde.team/news/" . basename($page, ".md"));
$item->setDate($yaml["date"]);
$item->setContent($file->getContent());
$feed->addItem($item);
}
$feed->printFeed();

View File

@ -1,15 +1,22 @@
<?php
$filepath = __FILE__;
require __DIR__.'/../vendor/autoload.php';
use tildeteam\wiki;
$additional_head = "
<style>
:target:before {
content:\"\";
display:block;
height:90px; /* fixed header height*/
margin:-90px 0 0; /* negative fixed header height */
}
</style>
<meta property='og:type' content='website'>
<meta property='og:image' content='https://tilde.team/apple-icon.png'>
<meta property='og:site_name' content='tilde.team news'>
";
$parser = wiki::factory(true);
$parser = Tildeverse\Wiki\Parser::factory();
if (!isset($_GET["page"]) || !file_exists("pages/{$_GET['page']}.md")) {
@ -30,8 +37,6 @@ if (!isset($_GET["page"]) || !file_exists("pages/{$_GET['page']}.md")) {
<a href="https://tildegit.org/team/site/src/branch/master/news">source</a> and open a PR!
</p>
<p>also available as a <a href="feed.php">feed</a></p>
<hr>
<h3>updates:</h3>
@ -39,7 +44,7 @@ if (!isset($_GET["page"]) || !file_exists("pages/{$_GET['page']}.md")) {
foreach (array_reverse(glob("pages/*.md")) as $page) {
$yaml = $parser->parse(file_get_contents($page))->getYAML();
if (!$yaml["published"]) continue; ?>
<a href="<?=basename($page, ".md")?>"><?=$yaml["title"]?></a> - <?=$yaml["date"]?><br>
<a href="?page=<?=basename($page, ".md")?>"><?=$yaml["title"]?></a> - <?=$yaml["date"]?><br>
<?php }
} else {

View File

@ -14,4 +14,4 @@ there are no ssl certs for these subdomains, so you will have to request those w
edit: there is now a wildcard cert from letsencrypt for *.tilde.team, so you can use https with your username as a subdomain!! :)
edit2: there are now more than one domains that will server your user page. see [the wiki article about it](/wiki/tildepages)
edit2: there are now more than one domains that will server your user page. see [the wiki article about it](/wiki/?page=tildepages)

View File

@ -5,6 +5,6 @@ title: mastodon
author: ben
---
hey tilders, there's a mastodon instance out there at <a href="https://social.tilde.team/">social.tilde.team</a> for members of the tilde community (and any others who are interested in an actually <em>social</em> social network). see you on there!
hey tilders, there's a mastodon instance out there at <a href="https://social.tilde.team/">social.tilde.team</a> for members of the tilde community (and any others who are interested in an actually <em>social</em> social network. see you on there!
update: the mastodon instance is at [tilde.zone](https://tilde.zone)
edit: the mastodon instance is now at [tilde.zone](https://tilde.zone)

View File

@ -10,4 +10,4 @@ tilde.team is now on a beefy vps! 4cores, 6gb ram, and 100gb ssd space!
everything is where you left it, but you will get a scary notice about a man-in-the-middle attack when you connect over ssh. (this is just because the IP address changed). the new IP is 104.223.31.252 and the ECDSA fingerprint is: `SHA256:CoJQp1mGtYJOZscJul6Ba94o2NsuzZTUI/b76JLGy3A` for your verification purposes.
edit: it wasn't as stable as i thought... see [part 2](020_migration_again)
edit: it wasn't as stable as i thought... see [part 2](?page=020_migration_again)

View File

@ -5,4 +5,4 @@ title: tildemail
author: ben
---
what started as an initiative to get local mail working ended up with us just setting up a full mailserver with smtp and imap. see the [email wiki](/wiki/email) for more info and [webmail](https://mail.tilde.team) for easy access.
what started as an initiative to get local mail working ended up with us just setting up a full mailserver with smtp and imap. see the [email wiki](/wiki/?page=email) for more info and [webmail](https://mail.tilde.team) for easy access.

View File

@ -5,6 +5,6 @@ title: tilde.team gopher server and proxy
author: ben
---
we're now running a [gopher server](/wiki/gopher) and [http proxy](https://gopher.tilde.team)! connect to [gopher://tilde.team](gopher://tilde.team) or use [our http proxy](https://gopher.tilde.team) for when you don't have a gopher-capable browser handy
we're now running a [gopher server](/wiki/?page=gopher) and [http proxy](https://gopher.tilde.team)! connect to [gopher://tilde.team](gopher://tilde.team) or use [our http proxy](https://gopher.tilde.team) for when you don't have a gopher-capable browser handy
to get started in gopherspace, check out [gopher.zone](https://gopher.zone) or use [`bb`](https://tildegit.org/team/bashblog), [`feels`](https://github.com/modgethanc/ttbp), or [`burrow`](https://github.com/tilde-team/burrow) at the shell!

View File

@ -7,4 +7,4 @@ author: khuxkm
tilde.team is now on an even beeeeefier rig. bare metal this time! 4cores (8 threads), 64gb ram!
just like [last time](/news/015_migration), everything is where you left it, but you **will** get a scary notice about a man-in-the-middle attack when you connect over ssh. (this is just because the IP address changed). the new IP is 195.201.242.48 and the ECDSA fingerprint is: `SHA256:R3qNfKIF3IiXhKCbFX6rCKl73yzexi9Wodsow6XFres` for your verification purposes.
just like [last time](/news/?page=015_migration), everything is where you left it, but you **will** get a scary notice about a man-in-the-middle attack when you connect over ssh. (this is just because the IP address changed). the new IP is 195.201.242.48 and the ECDSA fingerprint is: `SHA256:R3qNfKIF3IiXhKCbFX6rCKl73yzexi9Wodsow6XFres` for your verification purposes.

View File

@ -13,6 +13,6 @@ How this affects you:
The behavior of some users in the tilde.chat Discord has been unacceptable and does not comply with our code of conduct. Upon further review, we have decided that managing the Discord server is a bit more than we can handle without discussing moderation in-depth. As such, ben and I (khuxkm) have decided to make it READ-ONLY until we have come to a more permanent decision (which may be to close it permanently).
If you have any thoughts/ideas for the future of the discord bridge, please drop a line to ben or myself on IRC or by email (@tilde.team [or any of the other domains](/wiki/email)). We can be found in the #sudoers channel.
If you have any thoughts/ideas for the future of the discord bridge, please drop a line to ben or myself on IRC or by email (@tilde.team [or any of the other domains](/wiki/?page=email)). We can be found in the #sudoers channel.
Thanks for <del>flying tildeverse</del> being a member of the tildeverse and working with us to figure out a chat solution that works for everyone!

View File

@ -13,4 +13,4 @@ later!
update: i've written up a [post mortem](/~ben/blog/november-13-post-mortem.html) ~ben
update 2: i've written an [article from my perspective](https://tilde.team/~fosslinux/blog/on-november-13th-i-made-a-bit-of-an-oops.html) ~fosslinux
update 2: i've written a [article from my perspective](https://tilde.team/~fosslinux/blog/on-november-13th-i-made-a-bit-of-an-oops.html) ~fosslinux

View File

@ -9,7 +9,7 @@ we now have new mailing lists for the tildeverse :D
~teamers, you are automatically signed up to the ~team mailing list.
see [the list archives](https://lists.tildeverse.org/hyperkitty/list/tildeteam@lists.tildeverse.org/) for topics that you've missed, or just email the list directly (tildeteam@lists.tildeverse.org) to start a new thread/topic.
see [the list archives](https://lists.tildeverse.org/hyperkitty/list/tildeteam@lists.tildeverse.org/) for topics that you've missed, or just send an email to the list directly (tildeteam@lists.tildeverse.org) to start a new thread/topic.
all lists and settings can be found at https://lists.tildeverse.org

View File

@ -1,17 +0,0 @@
---
published: true
date: jan 6 2020
title: back up after downtime
author: ben
---
we moved once more to a new physical host. the process was simple,
but the backup/archive took much longer than i expected.
everything should be back up and running, please feel free to ping
on irc if something is still amiss.
the new primary ip is now 167.114.7.65
happy new year 2020!

View File

@ -1,13 +0,0 @@
---
published: true
date: may 30 2020
title: "HAPPY BIRTHDAY TILDE TEAM!"
author: ben
---
tilde.team turns 3 today, may 30th! it's been an amazing time learning and growing
with this project.
thanks for being a part of it!
see ya around ~teammates :)

View File

@ -1,40 +0,0 @@
---
published: true
date: august 4 2020
title: "ubuntu 20.04 upgrades"
author: ben
---
i've been preparing a large upgrade for tilde.team to ubuntu 20.04 focal fossa.
the new vm has a fresh install and will help to address some long-standing
issues that i've been wanting to fix for quite some time now
---
- dedicated /home disk - we haven't had any actual issues here luckily
but it will prevent any issues where a user accidentally fills a disk
and chokes out the rest of the system
- fixing uids - at some point, the spamassassin package created a system
user account with a uid > 1000 which threw off the user numbering into
the 5000 range. i've renumbered user accounts on the new vm to remove
that large jump
- dedicated service accounts - each service now has its own account in `/srv`
which is importantly outside of `/home` and is not a single user running multiple
services as it was configured previously
the ip address is the same and everything should be as you left it. please let me
know on irc or shoot an email if something is amiss.
i have an [ongoing list](/~ben/todo.txt) that i will update as i get things
back up and running.
another important note: python is now 3.8 by default and you will need to
explicitly call python2. all local site- and dist-packages have been removed
since they were targeting 3.6. you will need to recreate any virtual envs
that you may have.
cheers,
~ben

View File

@ -1,18 +0,0 @@
---
published: true
date: august 24 2021
title: update adventures
author: ben
---
it appears that there hasn't been a news post here in over a year...
perfect time to have a major outage!
we ran into a nasty [breaking change](
https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0#Linux_Bridge_MAC-Address_Change)
in the systemd included in proxmox 7. we lost networking on the proxmox
host tilde.team lives on for a while while i scrambled to get stuff back up
and running.
see my [blog post](/~ben/blog/update-adventures.html) for the full story.

View File

@ -1,18 +0,0 @@
---
published: true
date: march 23 2022
title: disk quotas
author: ben
---
as of today, we will be enforcing per-user disk quotas here on tilde.team.
this was a manual chore that i have been meaning to set up for a while.
the limits will be 1gb as a soft limit then 3gb as the hard limit.
there's a 1-week grace period after reaching 1gb for you to find and remove files.
see the [disk usage wikipage](/wiki/disk-usage) for help on finding large files.
thanks for keeping this a usable system for everyone :)

View File

@ -1,24 +0,0 @@
---
published: true
date: may 31 2022
title: 5 years of tilde.team
author: ben
---
as of may 30 tilde.team is 5 years old!
the early days were hectic and the memories for me are a bit hazy so i'm going
off the date that the domain was registered.
according to WHOIS info:
Creation Date: 2017-05-30T20:25:48Z
at the time of writing (one day late) we have 1224 members. 219 people have logged
in since the last reboot.
i'm not particularly good at words but tilde.team has been a massive part of my
life over the last 5 years and i'm so grateful for all you folks who make it fun
and enjoyable to hang out here.
keep on making cool things and see ya 'round!

View File

@ -1,19 +0,0 @@
---
published: true
date: september 25 2022
title: "ubuntu 22.04 upgrades"
author: ben
---
i completed the upgrade to ubuntu 22.04 today!
this one was relatively easy, only a couple things to sort out.
got all kinds of new software with this one, including stuff
like ruby 3, php 8.1, and python 3.10.
it's likely that you will have to recreate any python virtualenvs
or any similar locally-downloaded deps.
holler if you notice anything amiss on irc or the mailing list!

View File

@ -1,97 +0,0 @@
<?php
$filepath = __FILE__;
$action = $_GET["action"] ?? "index";
$users = array_map(function ($f) { return basename(dirname($f)); }, glob("/home/*/.ring"));
if ($action !== "index") {
// handle webring redirects
$me = $_GET["me"] ?? "";
if (!in_array($me, $users) && $action != "random") {
header("Location: https://tilde.team/ring/?error");
die();
}
$i = array_search($me, $users);
switch ($action) {
case "random":
$notme = array_diff($users, [$me]);
$user = $notme[array_rand($notme)];
break;
case "next":
$user = $users[$i + 1] ?? reset($users);
break;
case "prev":
$user = $users[$i - 1] ?? end($users);
break;
default:
die("invalid action");
}
// use custom link from second line of ~/.ring
if (filesize("/home/$user/.ring") > 0) {
$ringfile = file("/home/$user/.ring", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (count($ringfile) > 1 && $ringfile[1] !== "")
$dest = trim($ringfile[1]);
}
$location = $dest ?? "/~$user/";
header("Location: $location");
die();
}
else {
// keep this as a string so we can escape it easily with htmlspecialchars()
$snippet = '<!-- tilde.team ring fragment-->
<div id="newring">
<div style="text-align: center;">
[<a href="https://tilde.team/ring/?action=prev&me=USERNAME">previous</a>]
[<a href="https://tilde.team/ring/?action=random&me=USERNAME">random</a>]
[<a href="https://tilde.team/ring/?action=next&me=USERNAME">next</a>]
<br>
<a href="https://tilde.team/ring/">how to join this webring</a>
</div>
</div>';
$title = "webring - how to join";
include __DIR__ . '/../header.php';
?>
<h1>how to join the webring</h1>
<?php if (isset($_GET["error"])): ?>
<div class="alert alert-danger" role="alert"><strong>ERROR</strong> please be sure that me=USERNAME is set to your user and have created a <code>~/.ring</code> file.</div>
<?php endif; ?>
<p>this webring can be joined by any user on tilde.team.</p>
<p>first, add the following links to your page, replacing USERNAME by your username (no ~):</p>
<pre><?=htmlspecialchars($snippet)?></pre>
<p>you may edit the code however you want. it should work as long as the URLs are kept in place and have your user in them.</p>
<p>then create a .ring file in your ~ to be added in the webring:</p>
<pre>$ touch ~/.ring</pre>
<p>the first line of ~/.ring will be displayed here as a tagline.</p>
<p>the second line of the file is used as a custom link if your webring tags are not on your homepage.</p>
<h3 id="explore">explore webring</h3>
<p><a href="?action=random">jump to random page</a></p>
<p><?=count($users)?> members in the webring:</p>
<ul>
<?php foreach ($users as $user):
if (filesize("/home/$user/.ring") > 0) {
$ringfile = file("/home/$user/.ring", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$tagline = htmlspecialchars($ringfile[0]);
if (count($ringfile) > 1 && $ringfile[1] !== "")
$link = htmlspecialchars($ringfile[1]);
}
else {
unset($tagline);
unset($link);
} ?>
<li><a href="<?=$link ?? "/~$user/"?>">~<?=$user?></a><?=(isset($tagline) ? " &mdash; $tagline" : "")?></li>
<?php endforeach; ?>
</ul>
<p>it will probably work if you copy it to your own <code>~/public_html</code> and adjust the links accordingly.</p>
<?php
include __DIR__ . '/../footer.php';
}

2
robots.txt Normal file
View File

@ -0,0 +1,2 @@
User-agent: *
Disallow: /

View File

@ -1,28 +1,23 @@
<?php
$services = [
'cryptpad' => ['fa' => 'sticky-note', 'url' => 'https://pad.tildeverse.org'],
'forum' => ['fa' => 'comment', 'url' => 'https://bbj.tildeverse.org'],
'gitea' => ['fa' => 'code-fork', 'url' => 'https://tildegit.org/team'],
'gemini' => ['fa' => 'gem', 'url' => 'gemini://tilde.team'],
'gopher' => ['fa' => 'floppy-o', 'url' => 'gopher://tilde.team'],
'irc' => ['fa' => 'comments-o', 'url' => '/wiki/irc'],
'gitea' => ['fa' => 'code-fork', 'url' => 'https://tildegit.org/team/'],
'forum' => ['fa' => 'comment', 'url' => 'https://bbj.tilde.team'],
'mastodon' => ['fa' => 'retweet', 'url' => 'https://tilde.zone'],
'chat' => ['fa' => 'comments-o', 'url' => '/wiki/?page=irc'],
'nextcloud' => ['fa' => 'cloud', 'url' => 'https://cloud.tilde.team/'],
'nullpointer' => ['fa' => 'file-code-o', 'url' => 'https://ttm.sh'],
'pastebin' => ['fa' => 'paste', 'url' => 'https://paste.tildeverse.org/'],
'webmail' => ['fa' => 'envelope', 'url' => 'https://mail.tilde.team/'],
'webring' => ['fa' => 'life-ring', 'url' => '/ring/'],
'xmpp' => ['fa' => 'xmpp', 'url' => '/wiki/xmpp'],
'cryptpad' => ['fa' => 'sticky-note', 'url' => 'https://pad.tildeverse.org'],
'pastebin' => ['fa' => 'paste', 'url' => 'https://paste.tildeverse.org/'],
'termbin' => ['fa' => 'terminal', 'url' => 'https://bin.tilde.team/'],
'nullpointer' => ['fa' => 'file-code-o', 'url' => 'https://ttm.sh'],
'gopher' => ['fa' => 'floppy-o', 'url' => 'https://gopher.tildeverse.org/tilde.team'],
];
$nav = isset($navbar) && $navbar;
$nav = isset($navbar);
unset($navbar);
foreach ($services as $name => $service) {
if ($nav) { ?>
<li><a href="<?=$service["url"]?>" role="menuitem"><?=$name?></a></li>
<?php } else { ?>
<a href="<?=$service["url"]?>" class="btn btn-default"><?=$name?></a>
<?php }
}
foreach ($services as $name => $service) { ?>
<?php if ($nav) echo '<li>'; ?>
<a href="<?=$service['url']?>" <?php if (!$nav) echo 'class="btn btn-default"'; ?>><i class="fa fa-<?=$service['fa']?>"></i> ~<?=$name?>~</a>
<?php if ($nav) echo '</li>'; ?>
<?php }

File diff suppressed because it is too large Load Diff

View File

@ -7,10 +7,11 @@
static function NormalizeIP($ipaddr)
{
$ipv4addr = "";
$ipv6addr = "";
// Generate IPv6 address.
$ipaddr = strtolower(trim($ipaddr));
if (!str_contains($ipaddr, ":")) $ipaddr = "::ffff:" . $ipaddr;
if (strpos($ipaddr, ":") === false) $ipaddr = "::ffff:" . $ipaddr;
$ipaddr = explode(":", $ipaddr);
if (count($ipaddr) < 3) $ipaddr = array("", "", "0");
$ipaddr2 = array();
@ -26,7 +27,7 @@
}
}
// Convert ::ffff:123.123.123.123 format.
if (str_contains($ipaddr2[count($ipaddr2) - 1], "."))
if (strpos($ipaddr2[count($ipaddr2) - 1], ".") !== false)
{
$x = count($ipaddr2) - 1;
if ($ipaddr2[count($ipaddr2) - 2] != "ffff") $ipaddr2[$x] = "0";
@ -50,7 +51,7 @@
$ipv6addr = implode(":", $ipaddr);
// Extract IPv4 address.
if (str_starts_with($ipv6addr, "0000:0000:0000:0000:0000:ffff:")) $ipv4addr = hexdec(substr($ipv6addr, 30, 2)) . "." . hexdec(substr($ipv6addr, 32, 2)) . "." . hexdec(substr($ipv6addr, 35, 2)) . "." . hexdec(substr($ipv6addr, 37, 2));
if (substr($ipv6addr, 0, 30) == "0000:0000:0000:0000:0000:ffff:") $ipv4addr = hexdec(substr($ipv6addr, 30, 2)) . "." . hexdec(substr($ipv6addr, 32, 2)) . "." . hexdec(substr($ipv6addr, 35, 2)) . "." . hexdec(substr($ipv6addr, 37, 2));
// Make a short IPv6 address.
$shortipv6 = $ipv6addr;
@ -72,7 +73,7 @@
static function GetRemoteIP($proxies = array())
{
$ipaddr = self::NormalizeIP($_SERVER["REMOTE_ADDR"] ?? "127.0.0.1");
$ipaddr = self::NormalizeIP(isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : "127.0.0.1");
// Check for trusted proxies. Stop at first untrusted IP in the chain.
if (isset($proxies[$ipaddr["ipv6"]]) || ($ipaddr["ipv4"] != "" && isset($proxies[$ipaddr["ipv4"]])))
@ -84,9 +85,10 @@
{
$found = false;
$header = $proxies[$ipaddr["ipv6"]] ?? $proxies[$ipaddr["ipv4"]];
if (isset($proxies[$ipaddr["ipv6"]])) $header = $proxies[$ipaddr["ipv6"]];
else $header = $proxies[$ipaddr["ipv4"]];
$header = strtolower($header);
$header = strtolower($header);
if ($header == "xforward" && count($xforward) > 0)
{
$ipaddr = self::NormalizeIP(array_pop($xforward));
@ -107,7 +109,7 @@
{
if (is_string($ipaddr)) $ipaddr = self::NormalizeIP($ipaddr);
if (str_contains($pattern, ":"))
if (strpos($pattern, ":") !== false)
{
// Pattern is IPv6.
$pattern = explode(":", strtolower($pattern));
@ -126,7 +128,7 @@
$piece = $piece[0];
if ($piece == "*") $found = true;
else if (str_contains($piece, "-"))
else if (strpos($piece, "-") !== false)
{
$range = explode("-", $piece);
$range[0] = hexdec($range[0]);
@ -146,7 +148,7 @@
$val2 = hexdec(substr($ipaddr[$num], 2, 2));
if ($piece[0] == "*") $found2 = true;
else if (str_contains($piece[0], "-"))
else if (strpos($piece[0], "-") !== false)
{
$range = explode("-", $piece[0]);
if ($range[0] > $range[1]) $range[0] = $range[1];
@ -155,7 +157,7 @@
else if ($piece[0] == $val) $found2 = true;
if ($piece[1] == "*") $found3 = true;
else if (str_contains($piece[1], "-"))
else if (strpos($piece[1], "-") !== false)
{
$range = explode("-", $piece[1]);
if ($range[0] > $range[1]) $range[0] = $range[1];
@ -187,7 +189,7 @@
$piece = trim($piece);
if ($piece == "*") $found = true;
else if (str_contains($piece, "-"))
else if (strpos($piece, "-") !== false)
{
$range = explode("-", $piece);
if ($range[0] > $range[1]) $range[0] = $range[1];
@ -205,3 +207,4 @@
return true;
}
}
?>

View File

@ -14,14 +14,16 @@
// Reduce dependencies. Duplicates code though.
private static function FilenameSafe($filename)
{
return preg_replace('/_+/', "_", preg_replace('/[^A-Za-z0-9_.\-]/', "_", $filename));
return preg_replace('/[_]+/', "_", preg_replace('/[^A-Za-z0-9_.\-]/', "_", $filename));
}
private static function ReplaceNewlines($replacewith, $data)
{
$data = str_replace("\r\n", "\n", $data);
$data = str_replace("\r", "\n", $data);
return str_replace("\n", $replacewith, $data);
$data = str_replace("\n", $replacewith, $data);
return $data;
}
// RFC1341 is a hacky workaround to allow 8-bit over 7-bit transport.
@ -182,7 +184,7 @@
// Reverse parse out the initial domain/IP address part of the e-mail address.
$domain = "";
$state = "domend";
$cfwsdepth = 0;
while ($email != "" && $state != "")
{
$prevchr = substr($email, -2, 1);
@ -222,7 +224,7 @@
{
$email = trim(substr($email, 0, -1));
$depth--;
if (!$depth && !str_ends_with($email, ")")) $state = $laststate;
if (!$depth && substr($email, -1) != ")") $state = $laststate;
}
else $email = trim(substr($email, 0, -1));
@ -284,7 +286,7 @@
// Forward parse out the local part of the e-mail address.
// Remove CFWS (comments, folding whitespace).
while (str_starts_with($email, "("))
while (substr($email, 0, 1) == "(")
{
while ($email != "")
{
@ -299,14 +301,14 @@
{
$email = trim(substr($email, 1));
$depth--;
if (!$depth && !str_starts_with($email, "(")) break;
if (!$depth && substr($email, 0, 1) != "(") break;
}
}
}
// Process quoted/unquoted string.
$local = "";
if (str_starts_with($email, "\""))
if (substr($email, 0, 1) == "\"")
{
$email = substr($email, 1);
while ($email != "")
@ -336,7 +338,7 @@
else $email = substr($email, 1);
}
if (!str_ends_with($local, "\"")) $local .= "\"";
if (substr($local, -1) != "\"") $local .= "\"";
}
else
{
@ -353,17 +355,17 @@
}
$local = preg_replace('/[.]+/', ".", $local);
if (str_starts_with($local, ".")) $local = substr($local, 1);
if (str_ends_with($local, ".")) $local = substr($local, 0, -1);
if (substr($local, 0, 1) == ".") $local = substr($local, 1);
if (substr($local, -1) == ".") $local = substr($local, 0, -1);
}
while (str_ends_with($local, "\\\"")) $local = substr($local, 0, -2) . "\"";
while (substr($local, -2) == "\\\"") $local = substr($local, 0, -2) . "\"";
if ($local == "\"" || $local == "\"\"") $local = "";
// Analyze the domain/IP part and fix any issues.
$domain = preg_replace('/[.]+/', ".", $domain);
if (str_ends_with($domain, "]"))
if (substr($domain, -1) == "]")
{
if (!str_starts_with($domain, "[")) $domain = "[" . $domain;
if (substr($domain, 0, 1) != "[") $domain = "[" . $domain;
// Process the IP address.
if (strtolower(substr($domain, 0, 6)) == "[ipv6:") $ipaddr = IPAddr::NormalizeIP(substr($domain, 6, -1));
@ -375,13 +377,13 @@
else
{
// Process the domain.
if (str_starts_with($domain, ".")) $domain = substr($domain, 1);
if (str_ends_with($domain, ".")) $domain = substr($domain, 0, -1);
if (substr($domain, 0, 1) == ".") $domain = substr($domain, 1);
if (substr($domain, -1) == ".") $domain = substr($domain, 0, -1);
$domain = explode(".", $domain);
foreach ($domain as $num => $part)
{
if (str_starts_with($part, "-")) $part = substr($part, 1);
if (str_ends_with($part, "-")) $part = substr($part, 0, -1);
if (substr($part, 0, 1) == "-") $part = substr($part, 1);
if (substr($part, -1) == "-") $part = substr($part, 0, -1);
if (strlen($part) > 63) $part = substr($part, 0, 63);
$domain[$num] = $part;
@ -399,13 +401,13 @@
if ($y > 64 || $y2 > 253 || $y + $y2 + 1 > 253) return array("success" => false, "error" => self::SMTP_Translate("E-mail address is too long."), "errorcode" => "email_too_long", "info" => $email);
// Process results.
if (str_starts_with($domain, "[") && str_ends_with($domain, "]")) $result = array("success" => true, "email" => $email, "lookup" => false, "type" => "IP");
if (substr($domain, 0, 1) == "[" && substr($domain, -1) == "]") $result = array("success" => true, "email" => $email, "lookup" => false, "type" => "IP");
else if (isset($options["usedns"]) && $options["usedns"] === false) $result = array("success" => true, "email" => $email, "lookup" => false, "type" => "Domain");
else if ((!isset($options["usednsttlcache"]) || $options["usednsttlcache"] === true) && isset(self::$dnsttlcache[$domain]) && self::$dnsttlcache[$domain] >= time()) $result = array("success" => true, "email" => $email, "lookup" => false, "type" => "CachedDNS");
else
{
// Check for a mail server based on a DNS lookup.
$result = self::GetDNSRecord($domain, array("MX", "A"), ($options["nameservers"] ?? array("8.8.8.8", "8.8.4.4")), (!isset($options["usednsttlcache"]) || $options["usednsttlcache"] === true));
$result = self::GetDNSRecord($domain, array("MX", "A"), (isset($options["nameservers"]) ? $options["nameservers"] : array("8.8.8.8", "8.8.4.4")), (!isset($options["usednsttlcache"]) || $options["usednsttlcache"] === true));
if ($result["success"]) $result = array("success" => true, "email" => $email, "lookup" => true, "type" => $result["type"], "records" => $result["records"]);
}
@ -478,6 +480,7 @@
$name = "";
$email = "";
$state = "addrend";
$cfwsdepth = 0;
$inbracket = false;
while ($data != "" && $state != "")
@ -535,7 +538,7 @@
{
$data = trim(substr($data, 0, -1));
$depth--;
if (!$depth && !str_ends_with($data, ")")) $state = $laststate;
if (!$depth && substr($data, -1) != ")") $state = $laststate;
}
else $data = trim(substr($data, 0, -1));
@ -613,18 +616,18 @@
{
if ($prevchr == "\\")
{
$email .= $lastchr . $prevchr;
$email .= $lastchar . $prevchr;
$data = substr($data, 0, -2);
}
else if ($lastchr == "\"")
{
$email .= $lastchr;
$email .= $lastchar;
$data = trim(substr($data, 0, -1));
$state = "localstart";
}
else
{
$email .= $lastchr;
$email .= $lastchar;
$data = substr($data, 0, -1);
}
@ -680,7 +683,7 @@
{
if ($prevchr == "\\")
{
$name .= $lastchr . $prevchr;
$name .= $lastchar . $prevchr;
$data = substr($data, 0, -2);
}
else if ($lastchr == "\"")
@ -715,7 +718,7 @@
{
if ($removenames) $name = "";
$name = trim(strrev($name));
if (str_starts_with($name, "\"")) $name = trim(substr($name, 1));
if (substr($name, 0, 1) == "\"") $name = trim(substr($name, 1));
$name = str_replace("\\\\", "\\", $name);
$name = str_replace("\\\"", "\"", $name);
@ -813,11 +816,11 @@
// Reads one or more lines in.
private static function ProcessState__ReadLine(&$state)
{
while (!str_contains($state["data"], "\n"))
while (strpos($state["data"], "\n") === false)
{
$data2 = @fgets($state["fp"], 116000);
if ($data2 === false) return array("success" => false, "error" => self::SMTP_Translate("Underlying stream encountered a read error."), "errorcode" => "stream_read_error");
if (!str_contains($data2, "\n"))
if (strpos($data2, "\n") === false)
{
if (feof($state["fp"])) return array("success" => false, "error" => self::SMTP_Translate("Remote peer disconnected."), "errorcode" => "peer_disconnected");
if (self::StreamTimedOut($state["fp"])) return array("success" => false, "error" => self::SMTP_Translate("Underlying stream timed out."), "errorcode" => "stream_timeout_exceeded");
@ -848,7 +851,7 @@
if ($state["timeout"] !== false && self::GetTimeLeft($state["startts"], $state["timeout"]) == 0) return array("success" => false, "error" => self::SMTP_Translate("HTTP timeout exceeded."), "errorcode" => "timeout_exceeded");
$data2 = substr($state["data"], 0, $result);
$state["data"] = substr($state["data"], $result);
$state["data"] = (string)substr($state["data"], $result);
$state["result"]["rawsendsize"] += $result;
@ -990,9 +993,9 @@
case "helo_ehlo":
{
// Send EHLO or HELO depending on server support.
$hostname = ($state["options"]["hostname"] ?? "[" . trim(isset($_SERVER["SERVER_ADDR"]) && $_SERVER["SERVER_ADDR"] != "127.0.0.1" ? $_SERVER["SERVER_ADDR"] : "192.168.0.101") . "]");
$hostname = (isset($state["options"]["hostname"]) ? $state["options"]["hostname"] : "[" . trim(isset($_SERVER["SERVER_ADDR"]) && $_SERVER["SERVER_ADDR"] != "127.0.0.1" ? $_SERVER["SERVER_ADDR"] : "192.168.0.101") . "]");
$state["size_supported"] = 0;
if (str_contains($state["response"], " ESMTP"))
if (strpos($state["response"], " ESMTP") !== false)
{
self::InitSMTPRequest($state, "EHLO " . $hostname, 250, "esmtp_extensions", self::SMTP_Translate("Expected a 250 response from the SMTP server upon EHLO."));
}
@ -1018,7 +1021,7 @@
$state["state"] = "mail_from";
// Process login (if any and supported).
if (str_contains($auth, "LOGIN"))
if (strpos($auth, "LOGIN") !== false)
{
$state["username"] = (isset($state["options"]["username"]) ? (string)$state["options"]["username"] : "");
$state["password"] = (isset($state["options"]["password"]) ? (string)$state["options"]["password"] : "");
@ -1129,7 +1132,7 @@
public static function SendSMTPEmail($toaddr, $fromaddr, $message, $options = array())
{
$startts = microtime(true);
$timeout = ($options["timeout"] ?? false);
$timeout = (isset($options["timeout"]) ? $options["timeout"] : false);
if (!function_exists("stream_socket_client") && !function_exists("fsockopen")) return array("success" => false, "error" => self::SMTP_Translate("The functions 'stream_socket_client' and 'fsockopen' do not exist."), "errorcode" => "function_check");
@ -1140,11 +1143,11 @@
if (!self::EmailAddressesToNamesAndEmail($temptonames, $temptoaddrs, $toaddr, true, $options)) return array("success" => false, "error" => self::SMTP_Translate("Invalid 'To' e-mail address(es)."), "errorcode" => "invalid_to_address", "info" => $toaddr);
if (!self::EmailAddressesToNamesAndEmail($tempfromnames, $tempfromaddrs, $fromaddr, true, $options)) return array("success" => false, "error" => self::SMTP_Translate("Invalid 'From' e-mail address."), "errorcode" => "invalid_from_address", "info" => $fromaddr);
$server = ($options["server"] ?? "localhost");
$secure = ($options["secure"] ?? false);
$server = (isset($options["server"]) ? $options["server"] : "localhost");
$secure = (isset($options["secure"]) ? $options["secure"] : false);
$port = (isset($options["port"]) ? (int)$options["port"] : -1);
if ($port < 0 || $port > 65535) $port = ($secure ? 465 : 25);
$debug = ($options["debug"] ?? false);
$debug = (isset($options["debug"]) ? $options["debug"] : false);
$headers = "Message-ID: <" . self::SMTP_RandomHexString(8) . "." . self::SMTP_RandomHexString(7) . "@" . substr($tempfromaddrs[0], strrpos($tempfromaddrs[0], "@") + 1) . ">\r\n";
$headers .= "Date: " . date("D, d M Y H:i:s O") . "\r\n";
@ -1165,7 +1168,7 @@
if ($timeout !== false && self::GetTimeLeft($startts, $timeout) == 0) return array("success" => false, "error" => self::SMTP_Translate("HTTP timeout exceeded."), "errorcode" => "timeout_exceeded");
// Connect to the target server.
$hostname = ($options["hostname"] ?? "[" . trim(isset($_SERVER["SERVER_ADDR"]) && $_SERVER["SERVER_ADDR"] != "127.0.0.1" ? $_SERVER["SERVER_ADDR"] : "192.168.0.101") . "]");
$hostname = (isset($options["hostname"]) ? $options["hostname"] : "[" . trim(isset($_SERVER["SERVER_ADDR"]) && $_SERVER["SERVER_ADDR"] != "127.0.0.1" ? $_SERVER["SERVER_ADDR"] : "192.168.0.101") . "]");
$errornum = 0;
$errorstr = "";
if (isset($options["fp"]) && is_resource($options["fp"]))
@ -1199,7 +1202,7 @@
// Initialize the connection request state array.
$state = array(
"fp" => $fp,
"async" => ($options["async"] ?? false),
"async" => (isset($options["async"]) ? $options["async"] : false),
"debug" => $debug,
"startts" => $startts,
"timeout" => $timeout,
@ -1280,7 +1283,7 @@
{
if (trim($line) !== "")
{
if ($line[0] !== "\xFF" && (($tagname === "/ul" && $line[0] !== "-") || ($tagname === "/ol" && !(int)$line[0]))) $prefix2 = "\xFF\xFF";
if ($line{0} !== "\xFF" && (($tagname === "/ul" && $line{0} !== "-") || ($tagname === "/ol" && !(int)$line{0}))) $prefix2 = "\xFF\xFF";
else $prefix2 = "";
$lines[$num] = $prefix . $prefix2 . trim($line);
@ -1302,7 +1305,7 @@
if (TagFilter::GetParentPos($stack, "pre") === false)
{
$content = preg_replace('/\s{2,}/', " ", str_replace(array("\r\n", "\n", "\r", "\t"), " ", $content));
if ($result !== "" && str_ends_with($result, "\n")) $content = trim($content);
if ($result !== "" && substr($result, -1) === "\n") $content = trim($content);
}
}
@ -1349,13 +1352,13 @@
$subject = str_replace("\n", " ", $subject);
if (!UTF8::IsASCII($subject)) $subject = self::ConvertToRFC1342($subject);
$replytoaddr = ($options["replytoaddr"] ?? "");
$ccaddr = ($options["ccaddr"] ?? "");
$bccaddr = ($options["bccaddr"] ?? "");
$headers = ($options["headers"] ?? "");
$textmessage = ($options["textmessage"] ?? "");
$htmlmessage = ($options["htmlmessage"] ?? "");
$attachments = ($options["attachments"] ?? array());
$replytoaddr = (isset($options["replytoaddr"]) ? $options["replytoaddr"] : "");
$ccaddr = (isset($options["ccaddr"]) ? $options["ccaddr"] : "");
$bccaddr = (isset($options["bccaddr"]) ? $options["bccaddr"] : "");
$headers = (isset($options["headers"]) ? $options["headers"] : "");
$textmessage = (isset($options["textmessage"]) ? $options["textmessage"] : "");
$htmlmessage = (isset($options["htmlmessage"]) ? $options["htmlmessage"] : "");
$attachments = (isset($options["attachments"]) ? $options["attachments"] : array());
$messagetoaddr = self::EmailAddressesToEmailHeaders($toaddr, "To", true, false, $options);
$replytoaddr = self::EmailAddressesToEmailHeaders($replytoaddr, "Reply-To", false, false, $options);
@ -1370,7 +1373,8 @@
if ($htmlmessage == "" && !count($attachments))
{
// Plain-text e-mail.
$destheaders = $messagefromaddr;
$destheaders = "";
$destheaders .= $messagefromaddr;
if ($headers != "") $destheaders .= $headers;
$destheaders .= "MIME-Version: 1.0\r\n";
if (!isset($options["usemail"]) || !$options["usemail"]) $destheaders .= $messagetoaddr;
@ -1387,7 +1391,8 @@
{
// MIME e-mail (HTML, text, attachments).
$mimeboundary = "--------" . self::MIME_RandomString(25);
$destheaders = $messagefromaddr;
$destheaders = "";
$destheaders .= $messagefromaddr;
if ($headers != "") $destheaders .= $headers;
$destheaders .= "MIME-Version: 1.0\r\n";
if (!isset($options["usemail"]) || !$options["usemail"]) $destheaders .= $messagetoaddr;
@ -1511,3 +1516,4 @@
}
}
}
?>

View File

@ -192,7 +192,7 @@
// Converts UTF8 characters in a string to HTML entities.
public static function ConvertToHTML($data)
{
return preg_replace_callback('/([\xC0-\xF7][\x80-\xBF]+)/', 'UTF8::ConvertToHTML__Callback', $data);
return preg_replace_callback('/([\xC0-\xF7]{1,1}[\x80-\xBF]+)/', 'UTF8::ConvertToHTML__Callback', $data);
}
private static function ConvertToHTML__Callback($data)
@ -205,3 +205,4 @@
return "&#" . $num . ";";
}
}
?>

View File

@ -1,68 +1,53 @@
<?php
$filepath = __FILE__;
include __DIR__.'/../header.php';
function esc($v): string
{
return isset($_REQUEST[$v]) ? htmlspecialchars($_REQUEST[$v]) : "";
}
?>
<div class="container" id="app">
<h1>
tilde.team signup
<div class="pull-right">
<small><a href="/">&lt; back</a></small>
</div>
</h1>
<h3>so you wanna join the tilde.team?</h3>
<p>hi there. fill out this form and we'll get back to you with your account info.</p>
<hr>
<form method="post">
<?php include 'signup-handler.php'; ?>
<div>
<label>
your desired username (numbers and lowercase letters only, no spaces)
<input class="form-control" name="username" value="<?=esc("username")?>" type="text" required>
</label>
</div>
<div>
<label>
email to contact you with account info
<input class="form-control" name="email" value="<?=esc("email")?>" type="text" required>
</label>
</div>
<div>
<label>
what interests you about tilde.team? we want to make sure you're a real human being :)
<textarea required class="form-control" name="interest" id="" cols="40" rows="7"><?=esc("interest")?></textarea>
</label>
</div>
<div>
<label>
SSH public key
<textarea required class="form-control" name="sshkey" id="" cols="30" rows="10"><?=esc("sshkey")?></textarea>
</label>
<p>if you don't have a key, don't worry! <a href="/wiki/ssh">check out our guide to ssh keys</a> and make sure that you only put your pubkey here</p>
</div>
<p>
<em>signing up implies agreement with our <a href="/wiki/code-of-conduct">code of conduct</a> and <a href="/wiki/tos">terms of service</a>. please give them a read.</em>
</p>
<p>you must be at least 13 years or older to sign up and use tilde.team.</p>
<button class="btn btn-primary" type="submit">submit</button>
</form>
<br>
</div>
<?php include __DIR__.'/../footer.php';
<?php
include __DIR__.'/../header.php';
?>
<div class="container" id="app">
<h1>
tilde.team signup
<div class="pull-right">
<small><a href="/">&lt; back</a></small>
</div>
</h1>
<h3>so you wanna join the tilde.team?</h3>
<p>hi there. fill out this form and i'll get back to you with your account info.</p>
<hr>
<form method="post">
<?php include 'signup-handler.php'; ?>
<div class="form-group">
<label>your desired username (numbers and lowercase letters only, no spaces)</label>
<input class="form-control" name="username" value="<?=$_REQUEST["username"] ?? ""?>" type="text" required>
</div>
<div class="form-group">
<label>email to contact you with account info</label>
<input class="form-control" name="email" value="<?=$_REQUEST["email"] ?? ""?>" type="text" required>
</div>
<div class="form-group">
<label>what interests you about tilde.team?</label>
<textarea class="form-control" name="interest" id="" cols="30" rows="10"><?=$_REQUEST["interest"] ?? ""?></textarea>
</div>
<div class="form-group">
<label>SSH public key</label>
<textarea required class="form-control" name="sshkey" id="" cols="30" rows="10"><?=$_REQUEST["sshkey"] ?? ""?></textarea>
<p>if you don't have a key, don't worry! <a href="/wiki/?page=ssh">check out our guide to ssh keys</a> and make sure that you only put your pubkey here</p>
</div>
<p>
<em>signing up implies agreement with our <a href="/wiki/?page=code-of-conduct">code of conduct</a>. please give it a read.</em>
</p>
<button class="btn btn-primary" type="submit">submit</button>
</form>
<br>
</div>
<?php include __DIR__.'/../footer.php';

View File

@ -1,51 +1,9 @@
<?php
$filepath = __FILE__;
require __DIR__.'/../vendor/autoload.php';
require_once "email/smtp.php";
function getUserIpAddr() {
if(!empty($_SERVER['HTTP_CLIENT_IP'])) {
//ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
//ip pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
function add_ban_info($name, $email): void
{
$user_ip = getUserIpAddr();
$user_info = "$name - $email - $user_ip";
file_put_contents("/var/signups_banned", $user_info.PHP_EOL, FILE_APPEND);
}
function is_ssh_pubkey($string): bool
{
// list from sshd(8)
$valid_pubkeys = [
'sk-ecdsa-sha2-nistp256@openssh.com',
'ecdsa-sha2-nistp256',
'ecdsa-sha2-nistp384',
'ecdsa-sha2-nistp521',
'sk-ssh-ed25519@openssh.com',
'ssh-ed25519',
'ssh-dss',
'ssh-rsa',
];
foreach ($valid_pubkeys as $pub)
if (str_starts_with($string, $pub)) return true;
return false;
}
function forbidden_name($name): bool
{
$badnames = [
function forbidden_name($name) {
return in_array($name, [
'0x0',
'abuse',
'admin',
@ -98,58 +56,32 @@ function forbidden_name($name): bool
'wpad',
'www',
'znc',
];
return in_array(
$name,
array_merge(
$badnames,
file("/var/signups_current", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES),
file("/var/banned_names.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
)
);
]);
}
function forbidden_email($email): bool
{
$femail = file("/var/banned_emails.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
return in_array($email, $femail);
}
function forbidden_sshkey($sshkey): bool
{
$fsshkey = file("/var/banned_sshkeys.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$fsk = [];
foreach ($fsshkey as $line) {
$fsk_line = explode(' ',trim($line));
$fsk[] = $fsk_line[1];
}
$sk = explode(' ',trim($sshkey));
return in_array($sk[1], $fsk);
}
$message = "";
if (isset($_REQUEST["username"]) && isset($_REQUEST["email"])) {
// Check the name.
$name = trim($_REQUEST["username"]);
if ($name == "")
$message .= "<li>fill in your desired username</li>\n";
else {
if (strlen($name) < 2)
$message .= "<li>username is too short (2 character min)</li>\n";
$message .= "<li>please fill in your desired username</li>";
if (strlen($name) > 32)
$message .= "<li>username too long (32 character max)</li>\n";
if (strlen($name) > 32)
$message .= "<li>username too long (32 character max)</li>";
if (strlen($name) > 1 && !preg_match('/^[a-z][a-z0-9]{1,31}$/', $name))
$message .= "<li>username contains invalid characters (lowercase only, must start with a letter).</li>\n";
if (!preg_match('/^[a-z][a-z0-9]{2,31}$/', $name))
$message .= "<li>username contains invalid characters (lowercase only, must start with a letter)</li>";
if (posix_getpwnam($name) || forbidden_name($name))
$message .= "<li>sorry, the username $name is unavailable</li>\n";
}
if ($_REQUEST["sshkey"] == "" || mb_substr($_REQUEST["sshkey"], 0, 4) !== "ssh-")
$message .= '<li>ssh key required: please create one and submit the public key. '
. 'see our <a href="https://tilde.team/wiki/?page=ssh">ssh wiki</a> or '
. 'hop on <a href="https://web.tilde.chat/?join=team">irc</a> and ask for help</li>';
if ($_REQUEST["interest"] == "")
$message .= "<li>please explain why you're interested so we can make sure you're a real human being</li>";
if (posix_getpwnam($name) || forbidden_name($name))
$message .= "<li>sorry, the username $name is unavailable</li>";
// Check the e-mail address.
$email = trim($_REQUEST["email"]);
@ -161,65 +93,36 @@ if (isset($_REQUEST["username"]) && isset($_REQUEST["email"])) {
$message .= "<li>invalid email address: " . htmlspecialchars($result["error"]) . "</li>";
elseif ($result["email"] != $email)
$message .= "<li>invalid email address. did you mean: " . htmlspecialchars($result["email"]) . "</li>";
elseif ($name != "" && forbidden_email($email)) {
$message .= "<li>your email is banned!</li><br />";
add_ban_info($name, $email);
}
}
if ($_REQUEST["interest"] == "")
$message .= "<li>please explain why you're interested so we can make sure you're a real human being</li>";
$sshkey = trim($_REQUEST["sshkey"]);
if ($sshkey == "" || !is_ssh_pubkey($sshkey))
$message .= '<li>ssh key required: please create one and submit the public key. '
. 'see our <a href="https://tilde.team/wiki/ssh">ssh wiki</a> or '
. 'hop on <a href="https://tilde.chat/kiwi/#team">irc</a> and ask for help</li>';
else {
if ($name != "" && $email != "") {
if (forbidden_sshkey($sshkey)) {
$message .= "<li>your sshkey is banned!</li>\n";
add_ban_info($name, $email);
}
}
}
// no validation errors
if ($message == "") {
$makeuser = "makeuser {$_REQUEST["username"]} {$_REQUEST["email"]} \"$sshkey\"";
if ($message == "") {
$msgbody = "
username: {$_REQUEST["username"]}
email: {$_REQUEST["email"]}
reason: {$_REQUEST["interest"]}
$makeuser
makeuser {$_REQUEST["username"]} {$_REQUEST["email"]} \"{$_REQUEST["sshkey"]}\"
";
if (mail('sudoers', 'new tilde.team signup', $msgbody)) {
echo '<div class="alert alert-success" role="alert">
email sent! we\'ll get back to you soon (usually within a day) with login instructions! <a href="/">back to tilde.team home</a>
</div>';
// temp. add to forbidden to prevent double signups (cleanup after user creation)
file_put_contents("/var/signups_current", $name.PHP_EOL, FILE_APPEND);
file_put_contents("/var/signups", $makeuser.PHP_EOL, FILE_APPEND);
// clear form fields
$_REQUEST["email"] = $_REQUEST["username"] = $_REQUEST["sshkey"] = $_REQUEST["interest"] = "";
email sent! we\'ll get back to you soon (usually within a day) with login instructions! <a href="/">back to tilde.team home</a>
</div>';
} else {
echo '<div class="alert alert-danger" role="alert">
something went wrong... please send an email to <a href="mailto:sudoers@tilde.team">sudoers@tilde.team</a> with details of what happened
</div>';
something went wrong... please send an email to <a href="mailto:sudoers@tilde.team">sudoers@tilde.team</a> with details of what happened
</div>';
}
} else {
?>
?>
<div class="alert alert-warning" role="alert">
<strong>notice: </strong>
<strong>please correct the following errors: </strong>
<?=$message?>
</div>
<?php
<?php
}
}
?>

View File

@ -1,31 +1,30 @@
<?php
$filepath = __FILE__;
include __DIR__.'/../header.php';
$online_users = shell_exec("online-users | head -n1 | awk '{print $3}'");
$online_users = shell_exec("online-users");
$total_users = shell_exec("members team | wc -w");
?>
<div class="row">
<h1>users</h1>
<p><a href="https://tilde.chat/kiwi/#team">
<img src="https://tilde.chat/badges/badge.php?channel=%23team" alt="users online in #team">
</a></p>
<p><?=$online_users?> of <?=$total_users?> total users logged in</p>
<p><em><a href="/tilde.24h.html"><i class="fa fa-clock-o"></i> recent updates</a></em></p>
<?=$online_users?> users online of <?=$total_users?> total users
<img src="https://tilde.chat/badges/badge.php?channel=%23team" alt="users online in #team">
</div>
<div class="row">
<div class="col-md-5">
<h1>~all users~</h1>
<p><em><a href="/tilde.24h.html"><i class="fa fa-clock-o"></i> recent updates</a></em></p>
<br><br>
<div class="list-group">
<ul>
<?php
foreach (glob("/home/*") as $user):
if (!is_dir("$user/public_html")) continue;
$user = basename($user); ?>
<li style="list-style: none; margin-left: -40px;">
<a href="/~<?=$user?>/" class="list-group-item">
<h6 class="list-group-item-heading">~<?=$user?></h6>
<h6 class="list-group-item-heading">~<?=$user?></h5>
</a>
</li>
<?php endforeach; ?>

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