From f40b256c1b2785705555c401ddd900eb1d88402a Mon Sep 17 00:00:00 2001 From: Kristof Vandam Date: Thu, 20 Jan 2022 13:55:50 +0100 Subject: [PATCH] init --- archetypes/default.md | 12 + config.toml | 30 + content/administration/autofs.md | 82 +++ content/administration/bash.md | 76 ++ content/administration/boot-targets.md | 49 ++ content/administration/letsencrypt.md | 125 ++++ content/administration/luks-encryption.md | 126 ++++ content/administration/mysql_tuner.md | 90 +++ content/administration/selinux-101.md | 50 ++ content/administration/selinux.md | 32 + .../toubles-with-interfaces-after-clone.md | 26 + .../administration/windows_troubleshooting.md | 96 +++ .../administration/yet-another-arch-guide.md | 201 ++++++ content/development/live-search-with-hugo.md | 254 +++++++ content/search.md | 6 + content/tools/fatrace.md | 70 ++ content/tools/ncdu.md | 82 +++ layouts/json/single.html | 5 + .../index.html | 181 +++++ public/administration/index.html | 267 +++++++ public/administration/index.xml | 483 +++++++++++++ public/administration/letsencrypt/index.html | 304 ++++++++ .../administration/luks-encryption/index.html | 250 +++++++ public/administration/mysql_tuner/index.html | 307 ++++++++ .../windows_troubleshooting/index.html | 297 ++++++++ public/css/lightbox.css | 210 ++++++ public/css/redlounge.css | 499 +++++++++++++ public/css/rrssb.css | 1 + public/css/screen.css | 1 + public/development/index.html | 136 ++++ public/development/index.xml | 25 + public/development/vue-js/index.html | 181 +++++ public/img/close.png | Bin 0 -> 280 bytes public/img/favicon.png | Bin 0 -> 183 bytes public/img/loading.gif | Bin 0 -> 8476 bytes public/img/next.png | Bin 0 -> 1350 bytes public/img/prev.png | Bin 0 -> 1360 bytes public/index.html | 297 ++++++++ public/index.xml | 495 +++++++++++++ public/js/lightbox.min.js | 10 + public/js/rrssb.min.js | 18 + public/js/search.js | 108 +++ public/sitemap.xml | 53 ++ public/touch-icon-144-precomposed.png | Bin 0 -> 570 bytes themes/redlounge/LICENSE.md | 13 + themes/redlounge/README.md | 157 ++++ themes/redlounge/archetypes/default.md | 6 + themes/redlounge/images/screenshot.png | Bin 0 -> 120744 bytes themes/redlounge/images/tn.png | Bin 0 -> 61514 bytes themes/redlounge/layouts/_default/list.html | 63 ++ themes/redlounge/layouts/_default/single.html | 138 ++++ .../redlounge/layouts/_default/terms.html.bak | 41 ++ themes/redlounge/layouts/index.html | 63 ++ .../layouts/partials/authorsocial.html | 12 + .../redlounge/layouts/partials/bodyend.html | 77 ++ .../redlounge/layouts/partials/doctype.html | 2 + themes/redlounge/layouts/partials/footer.html | 12 + .../redlounge/layouts/partials/headend.html | 11 + themes/redlounge/layouts/partials/header.html | 58 ++ .../redlounge/layouts/partials/listtop.html | 0 themes/redlounge/layouts/partials/meta.html | 10 + themes/redlounge/layouts/partials/og.html | 8 + .../redlounge/layouts/partials/sidebar.html | 80 +++ .../layouts/partials/sidebarheader.html | 0 .../redlounge/layouts/partials/singletop.html | 0 .../layouts/partials/socialsharing.html | 6 + .../layouts/partials/syntaxhighlight.html | 8 + themes/redlounge/static/css/lightbox.css | 210 ++++++ themes/redlounge/static/css/prism.css | 259 +++++++ themes/redlounge/static/css/redlounge.css | 678 ++++++++++++++++++ themes/redlounge/static/css/rrssb.css | 1 + themes/redlounge/static/css/screen.css | 1 + themes/redlounge/static/img/close.png | Bin 0 -> 280 bytes themes/redlounge/static/img/favicon.png | Bin 0 -> 183 bytes themes/redlounge/static/img/loading.gif | Bin 0 -> 8476 bytes themes/redlounge/static/img/next.png | Bin 0 -> 1350 bytes themes/redlounge/static/img/prev.png | Bin 0 -> 1360 bytes themes/redlounge/static/js/lightbox.min.js | 10 + themes/redlounge/static/js/prism.js | 46 ++ themes/redlounge/static/js/rrssb.min.js | 18 + .../static/touch-icon-144-precomposed.png | Bin 0 -> 570 bytes themes/redlounge/theme.toml | 13 + 82 files changed, 7536 insertions(+) create mode 100644 archetypes/default.md create mode 100644 config.toml create mode 100644 content/administration/autofs.md create mode 100644 content/administration/bash.md create mode 100644 content/administration/boot-targets.md create mode 100644 content/administration/letsencrypt.md create mode 100644 content/administration/luks-encryption.md create mode 100644 content/administration/mysql_tuner.md create mode 100644 content/administration/selinux-101.md create mode 100644 content/administration/selinux.md create mode 100644 content/administration/toubles-with-interfaces-after-clone.md create mode 100644 content/administration/windows_troubleshooting.md create mode 100644 content/administration/yet-another-arch-guide.md create mode 100644 content/development/live-search-with-hugo.md create mode 100644 content/search.md create mode 100644 content/tools/fatrace.md create mode 100644 content/tools/ncdu.md create mode 100644 layouts/json/single.html create mode 100644 public/administration/dont-let-your-application-interfere-with-letsencrypt/index.html create mode 100644 public/administration/index.html create mode 100644 public/administration/index.xml create mode 100644 public/administration/letsencrypt/index.html create mode 100644 public/administration/luks-encryption/index.html create mode 100644 public/administration/mysql_tuner/index.html create mode 100644 public/administration/windows_troubleshooting/index.html create mode 100644 public/css/lightbox.css create mode 100644 public/css/redlounge.css create mode 100644 public/css/rrssb.css create mode 100644 public/css/screen.css create mode 100644 public/development/index.html create mode 100644 public/development/index.xml create mode 100644 public/development/vue-js/index.html create mode 100644 public/img/close.png create mode 100644 public/img/favicon.png create mode 100644 public/img/loading.gif create mode 100644 public/img/next.png create mode 100644 public/img/prev.png create mode 100644 public/index.html create mode 100644 public/index.xml create mode 100644 public/js/lightbox.min.js create mode 100644 public/js/rrssb.min.js create mode 100644 public/js/search.js create mode 100644 public/sitemap.xml create mode 100644 public/touch-icon-144-precomposed.png create mode 100644 themes/redlounge/LICENSE.md create mode 100644 themes/redlounge/README.md create mode 100644 themes/redlounge/archetypes/default.md create mode 100644 themes/redlounge/images/screenshot.png create mode 100644 themes/redlounge/images/tn.png create mode 100644 themes/redlounge/layouts/_default/list.html create mode 100644 themes/redlounge/layouts/_default/single.html create mode 100644 themes/redlounge/layouts/_default/terms.html.bak create mode 100644 themes/redlounge/layouts/index.html create mode 100644 themes/redlounge/layouts/partials/authorsocial.html create mode 100644 themes/redlounge/layouts/partials/bodyend.html create mode 100644 themes/redlounge/layouts/partials/doctype.html create mode 100644 themes/redlounge/layouts/partials/footer.html create mode 100644 themes/redlounge/layouts/partials/headend.html create mode 100644 themes/redlounge/layouts/partials/header.html create mode 100644 themes/redlounge/layouts/partials/listtop.html create mode 100644 themes/redlounge/layouts/partials/meta.html create mode 100644 themes/redlounge/layouts/partials/og.html create mode 100644 themes/redlounge/layouts/partials/sidebar.html create mode 100644 themes/redlounge/layouts/partials/sidebarheader.html create mode 100644 themes/redlounge/layouts/partials/singletop.html create mode 100644 themes/redlounge/layouts/partials/socialsharing.html create mode 100644 themes/redlounge/layouts/partials/syntaxhighlight.html create mode 100644 themes/redlounge/static/css/lightbox.css create mode 100644 themes/redlounge/static/css/prism.css create mode 100644 themes/redlounge/static/css/redlounge.css create mode 100644 themes/redlounge/static/css/rrssb.css create mode 100644 themes/redlounge/static/css/screen.css create mode 100644 themes/redlounge/static/img/close.png create mode 100644 themes/redlounge/static/img/favicon.png create mode 100644 themes/redlounge/static/img/loading.gif create mode 100644 themes/redlounge/static/img/next.png create mode 100644 themes/redlounge/static/img/prev.png create mode 100644 themes/redlounge/static/js/lightbox.min.js create mode 100644 themes/redlounge/static/js/prism.js create mode 100644 themes/redlounge/static/js/rrssb.min.js create mode 100644 themes/redlounge/static/touch-icon-144-precomposed.png create mode 100644 themes/redlounge/theme.toml diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..b34c52b --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,12 @@ ++++ +Title = +Author = "Unknown" +Categories = [] +Tags = [] +Date = +Truncated = true +Draft = false ++++ +tl;dr + +content \ No newline at end of file diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..2d4f164 --- /dev/null +++ b/config.toml @@ -0,0 +1,30 @@ +title = "Hagfi.sh" +baseURL = "https://hagfi.sh/" +languageCode = "en-us" +theme = "redlounge" +metaDataFormat = "yaml" +googleAnalytics = "UA-124890410-1" +disqusShortname = "hagfish" + +[params] + sidebartitle = "Hagfi.sh" + sidebartagline = "A devops guide to the galaxy" + +[mediaTypes] + [mediaTypes."application/json"] + suffixes = ["json"] + +#[outputs] +# home = ["HTML", "JSON"] + +#[[menu.main]] +# name = "Administration" +# url = "/categories/administration" + +#[[menu.main]] +# name = "Development" +# url = "/categories/development" + +#[[menu.main]] +# name = "Tools" +# url = "/categories/tools" \ No newline at end of file diff --git a/content/administration/autofs.md b/content/administration/autofs.md new file mode 100644 index 0000000..5092bdd --- /dev/null +++ b/content/administration/autofs.md @@ -0,0 +1,82 @@ +--- +Title: "Mount with automount (autofs)" +Author: "Kristof Vandam" +Categories: [ "administration" ] +Tags: [ "linux", "data", "mount", "shares" ] +Date: 2018-11-09T10:08:15+02:00 +Truncated: true +Draft: false +--- +Automagically mount remote directories on login. + +## Install the required pakages + +```.language-command +sudo yum -y install autofs +``` + +## Create the entry file + +the mapper file is a file where we specify the directory where all our mounts should be placed. + +This file should be stored in */etc/auto.master.d*, note that the extension is required to be *.autofs* + +for example: */etc/auto.master.d/home.autofs* + +```.language-command +/home/guests /etc/auto.home + +``` + +The value for */home/guests* is the file where we specify our mount options. + +**Note**: Make sure the */home/guests* directory exists, if not create it with: + +```.language-command +mkdir /home/guests +``` + +## Create the mapper file + +We earlier specified where our map file should be stored (*/etc/auto.home*), create this file. + +Say we want to auto mount the home directories stored on **serverA** on /home/guests/[*USER*] when [*USER*] logs in. + +```.language-command +* -rw,sync serverA:/home/guests/& +``` + +* The wildcards task is to create the directory based on the users homedirectory on serverA (specified with **&**) +* We give option like: read/write and sync +* As last param we have to say where we want to mount to, again, the **&** is dynamic and maps to the logged in user. + +## Enable and start the service + +```.language-command +sudo systemctl enable autofs +sudo systemctl start autofs +``` + +## Wrapping up + +Log in as a user, and check if the mount is present as expected. + +```.language-command +df -h +``` + +Should output something like: + +```.language-command +Filesystem Size Used Avail Use% Mounted on +/dev/xvda1 8.0G 5.6G 2.5G 70% / +devtmpfs 224M 0 224M 0% /dev +tmpfs 244M 0 244M 0% /dev/shm +tmpfs 244M 41M 204M 17% /run +tmpfs 244M 0 244M 0% /sys/fs/cgroup +tmpfs 49M 0 49M 0% /run/user/1000 +tmpfs 49M 0 49M 0% /run/user/0 +/serverA:/home/guests/user1 200M 0 200M 0% /home/guests/user1 +``` + +Note the last line where we see that the mount is present \ No newline at end of file diff --git a/content/administration/bash.md b/content/administration/bash.md new file mode 100644 index 0000000..7f730c5 --- /dev/null +++ b/content/administration/bash.md @@ -0,0 +1,76 @@ +--- +Title: Bash Tips & Tricks +date: 2018-11-11T16:01:15+01:00 +Author: Olivier De Ram +Draft: false +Categories: +- administration +- development +Tags: +- bash +- script +Truncated: true +--- +Usefull bash tips & tricks + + +### Usefull CLI shortcuts: +Shortcut | Description +------------- | ------------- +Ctrl+a | Jump to the beginning of the command line. +Ctrl+e | Jump to the end of the command line. +Ctrl+u | Clear from the cursor to the beginning of the command line. +Ctrl+k | Clear from the cursor to the end of the command line. +Ctrl+Left Arrow | Jump to the beginning of the previous word on the command line. +Ctrl+Right Arrow | Jump to the end of the next word on the command line. +Ctrl+r | Search the history list of commands for a pattern. +Esc + . | Copy the last word of the previous command on the current command line where the cursor is + +### Redirect output: + +Command | result +--- | --- +`> file` | redirect stdout to overwrite a file +`>> file` | redirect stdout to append to a file +`2> file` | redirect stderr to overwrite a file +`2> /dev/null` | discard stderr error messages by redirecting to /dev/null +`&> file` _(OR `> file 2>&1`)_ | redirect stdout and stderr to overwrite the same file +`&>>` _(OR `>> file 2>&1`)_ | redirect stdout and stderr to append to the same file + +### Create a function: +It's straightforward, use function to create a function, give it a usefull short name and put the statemants between curly brackets. +Use $1 for the first argument, $2 for the second argument and so on... + +``` bash +function { + +} +``` + +For example the function logsearch which searches for the given string whitin all logfiles in the current directory: + +``` bash +function logsearch { + zgrep $1 ./*log +} +``` + +### Short scripts: + +* Loop every file in path: + +``` bash +for F in /path/to/files/*; +do + echo "Files $F"; +done +``` + +* Loop file line per line: + +``` bash +while read LINE; +do + echo $LINE; +done < file.txt +``` \ No newline at end of file diff --git a/content/administration/boot-targets.md b/content/administration/boot-targets.md new file mode 100644 index 0000000..9f58e9f --- /dev/null +++ b/content/administration/boot-targets.md @@ -0,0 +1,49 @@ +--- +Title: "Changing boot targets" +Author: "Kristof Vandam" +Categories: [ "administration" ] +Tags: [ "linux", "security", "boot" ] +Date: 2018-11-09T10:08:15+02:00 +Truncated: true +Draft: false +--- +Switch between run levels / environments. + +# Changing boot targets + +## On the fly + +Goto a graphical environment + +```.language-command +systemctl isolate graphical.target +``` + +Goto a text based environment + +```.language-command +systemctl isolate multi-user.target +``` + +## Permanently change environments + +Graphical environment + +```.language-command +systemctl set-default graphical.target +``` + +Text based environment + +```.language-command +systemctl set-default multi-user.target +``` + +## Set target on boot + +1. Interrupt the bootloader (GRUB) and edit the kernel entry before booting. Press *e* to edit the entry +2. Goto the line that starts with *linux16* suffix the line with your desired target as followed: + +```.language-command +systemd.unit=rescue.target +``` \ No newline at end of file diff --git a/content/administration/letsencrypt.md b/content/administration/letsencrypt.md new file mode 100644 index 0000000..5d65ecf --- /dev/null +++ b/content/administration/letsencrypt.md @@ -0,0 +1,125 @@ +--- +author: Olivier De Ram +date: 2018-08-25T22:08:15+02:00 +draft: false +title: Let's Encrypt +--- + +## Let's Encrypt: + +* Aanmaken / vernieuwen certificaat: + +``` +/opt/letsencrypt/letsencrypt-auto certonly + --expand + ---email support@domain.tld + --agree-tos + --webroot + -w /var/www/vhosts/WEB/ROOT + -d domain.tld + -d domainalias.tld + --dry-run +``` + +``` +/bin/certbot + --text + --agree-tos + --non-interactive + certonly + -a webroot + --webroot-path /var/www/vhosts/WEB/ROOT + -d domain.tld + -d domainalias.tld + --dry-run +``` + +`--dry-run` om het aanmaken te testen. + +### Apache / httpd +* (1) Voeg volgende regels toe aan de apache config: + +``` +Alias /.well-known /var/www/vhosts/letsencrypt/.well-known + + order allow,deny + allow from all + satisfy any + +``` + +* Of (2) voeg volgende regels toe aan .htaccess: + + +``` + + RewriteEngine on + #Allow Let's Encrypt SSL renewal + RewriteRule ^.well-known/ - [L,NC] + RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/ + RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L] +``` + +* Combineer Basic Auth met Let's Encrypt: +_Dit moet je bekijken ale een if/else. (Ofwel valid-user ofwel REQUEST\_URI)_ + +``` + + AuthType Basic + AuthName protected + AuthUserFile /etc/httpd/passwd/phpmyadmin.htpasswd + require valid-user + Require expr %{REQUEST_URI} =~ m#^/.well-known/acme-challenge/.*# + +``` + +### Nginx +* Voeg volgende regels toe aan Nginx + +``` + location /.well-known { + root /var/www/vhosts/WEB/ROOT; + index index.html index.htm index.php; + } +``` + +- + + +* Controleer DNS lijst domeinen: + +``` +while read LINE; +do + echo $LINE >> list_processed.txt && dig +short @9.9.9.9 $LINE >> list_processed.txt; +done < list.txt +``` + +* (WIP) + +``` +#!/bin/bash + +#IP=<%= @default_ipadress %> +IP=$(dig +short @9.9.9.9 $(hostname)) +FILE=$1 + +while read LINE +do + CHK=$(dig +short @9.9.9.9 $LINE) + if $IP -eq $CHK + echo "$LINE|$CHK" >> /tmp/le-ok + elif + echo "$LINE|$CHK" >> /tmp/le-nok + fi +done < $FILE + +echo "Domains OK:" +echo /tmp/le-ok | column +echo "-------------------------------" +echo "Domains NOT OK:" +echo /tmp/le-nok | column + +rm -rf /tmp/le-ok +rm -rf /tmp/le-nok +``` diff --git a/content/administration/luks-encryption.md b/content/administration/luks-encryption.md new file mode 100644 index 0000000..b02bac1 --- /dev/null +++ b/content/administration/luks-encryption.md @@ -0,0 +1,126 @@ +--- +Author: Kristof Vandam +Categories: +- administration +Date: 2018-08-23T22:08:15+02:00 +Draft: false +Tags: +- encryption +- security +- disk +- partition +Title: Luks Encryption +Truncated: true +--- + +Create an encrypted partition that will automatically mount at boot. + + +Sometimes it's nice to have encryption, sometimes it's mandatory, either way, there are a couple of thing you should take +in mind. Most solutions you find are at disk level but these have some pro's and con's. + + PRO's | CON's +-------------------------------------|--------------------------------------------------------------------------------------- + Every application can work with it | Data is only secured from physical theft + No extra development required | Can cause some overhead, as everything goes through encryption/decryption, everything + +There are also a couple of choisen you can make implementing LUKS, you could create a LVM layer on top of a LUKS partition or, what +we are doing in this guide, add a LUKS encrypted mount on top of a LVM stack. The latter allows you to automatically mount +the encrypted disk after or at boot time. + +## Add a new disk (LVM) + +This is unrelated to encrypting the disk, but in our setup we started by adding a new disk to the server. + +The commands below are just some I often use as a group. From lines 1 to 3 you can just copy/paste. Line 1 makes sure a rescan +is triggered to detect the newly added disk. 2 & 3 create some variables, which can be checked and used later. Make sure the output +of these are what you expected. You can echo them as shown on 4 & 5. + +Create a Physical Volume and extend the Volume Group 'centos' +```.language-command.line-numbers +root@server:/dev/centos # for i in /sys/class/scsi_host/host*; do echo "- - -" > $i/scan; done +root@server:/dev/centos # NEWDISK=$(dmesg|tail|grep 'Attached'|awk '{print $4}'|tail -n1|cut -d "[" -f2|cut -d "]" -f1) +root@server:/dev/centos # VGROUP=$(vgdisplay|grep Name|head -n1|awk '{print $3}') +root@server:/dev/centos # echo ${NEWDISK} +sdd +root@server:/dev/centos # echo ${VGROUP} +centos +root@server:/dev/centos # pvcreate /dev/${NEWDISK} +Physical volume "/dev/sdd" successfully created. +root@server:/dev/centos # vgextend ${VGROUP} /dev/${NEWDISK} +Volume group "centos" successfully extended +``` + +## Create a logical volume (LVM) + +Add a Logical Volume named 'encrypted' to the Volume Group 'centos'. +```.language-command +root@server:/dev/centos # lvcreate -L 15G -n encrypted centos +Logical volume "encrypted" created. +``` + +## Encrypt the partition + +Ok, the fun parts starts here (**CAUTION** before continueing make sure there is no important data on */dev/centos/encrypted*, this will be wiped). We encrypt the Logical Volume with the first command. A passphrase is required (see it as a backup) +LUKS can contain up to 5 different passwords. In a future section we add a second, more complex, password to use as key on boot. +Hold tight. + +After the first command (the actual formatting of the partition) we need to 'open' the partition. By opening we mean creating a new disk, but you +should notice there is a password required to do so. Use the password you just created. +```.language-command +root@server:/dev/centos # cryptsetup -v --verify-passphrase luksFormat /dev/centos/encrypted +root@server:/dev/mapper # cryptsetup luksOpen /dev/centos/encrypted luks-encrypted +``` + +## Create a mountpoint + +Before you can use the encrypted partition you should mount it. Do it like you always do it. Create a directory to mount to and mount */dev/mapper/luks-encrypted* with *mount*. +```.language-command +root@server:/dev/mapper # mkdir /encrypted +root@server:/dev/mapper # mount /dev/mapper/luks-encrypted /encrypted +``` +From here on you are actually done, if you want to type password manually on every boot. I highly doubt you want that so lets go on. +(It is ofourse more safe to do so). + +## Create a key (to auto-mount the encrypted disk) + +Create a key-file we can add to */etc/crypttab*, any random string will do, but we create it with */dev/urandom*. Make sure to set some strict permissions. +```.language-command +root@server:/dev/mapper # dd if=/dev/urandom of=/root/lukskey bs=1024 count=4 +root@server:/dev/mapper # chmod 0400 /root/lukskey +``` + +## Unmount and add the key + +Add the key you just created to make it valid for LUKS, but first unmount the mount and close the vault. +```.language-command +root@server:/ # umount /encrypted +root@server:/ # cryptsetup luksClose luks-encrypted +root@server:/ # cryptsetup luksAddKey /dev/mapper/centos-encrypted /root/lukskey +``` + +## Get UUID + +Get the UUID of the disk, using the UUID to mount disk is a more solid solution than using the disknames (/dev/sd*). These disknames **CAN** change, the UUID cannot. +```.lang-command +root@server:/ # blkid /dev/mapper/centos-encrypted +/dev/mapper/centos-encrypted: UUID="0dab9a5c-1870-478d-8d74-226eeb512f78" TYPE="crypto_LUKS" +``` + +## Auto-mount LUKS (edit /etc/crypttab) + +Add a entry to the */etc/crypttab*, see it as the */etc/fstab* file. Just as fstab crypttab will automount the defined entries. +```.language-command +root@server:/ # blkid /dev/mapper/centos-encrypted +/dev/mapper/centos-encrypted: UUID="0dab9a5c-1870-478d-8d74-226eeb512f78" TYPE="crypto_LUKS" +``` + +## Auto-mount LUKS (edit /etc/cypttab) + +```.language-bash +luks-encrypted /dev/disk/by-uuid/0dab9a5c-1870-478d-8d74-226eeb512f78 /root/lukskey luks +``` + +## Check your work + +Congrats, this should be it, reboot and make sure the disk is mounted automatically. \ No newline at end of file diff --git a/content/administration/mysql_tuner.md b/content/administration/mysql_tuner.md new file mode 100644 index 0000000..a6b8a58 --- /dev/null +++ b/content/administration/mysql_tuner.md @@ -0,0 +1,90 @@ +--- +author: Olivier De Ram +date: 2018-08-25T22:08:15+02:00 +draft: false +title: MySQL Tuner +--- + +## MySQL Tuner ## + +| WAARDE | ACTIE +------------- | ------------- +`query_cache_size` | AFBLIJVEN +`table_cache ` | AFBLIJVEN _(maximumwaarde = 64)_ +`table_open_cache` | AFBLIJVEN +`join_buffer_size` | Verhogen indien `Joins performed without indexes++` +`tmp_table_size` | Verhogen = `max_heap_table_size` +`max_heap_table_size` | Verhogen `= tmp_table_size` +`query_cache_type` | `=1` indien `=0` + + +mysql tuning improvements +`table_cache` NOOIT hoger dan 64 +Sudo vim /etc/my.cnf +query_cache_size' => '256M’, +It caches the select query along with the result set, which enables the identical selects to execute faster as the data fetches from the in memory. +Caching voor select queries en bijhorende result sets, wat het mogelijk maakt om identieke selects sneller op te vragen uit memory. +'open_files_limit' => '4096', +Changes the number of file descriptors available to mysqld. You should try increasing the value of this option if mysqld gives you the error Too many open files. +'join_buffer_size' => '256K’, +The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use indexes and thus perform full table scans. Normally, the best way to get fast joins is to add indexes. Increase the value of join_buffer_size to get a faster full join when adding indexes is not possible. +Minimumgrootte van buffer voor index en table scans. + +------ + +'max_heap_table_size' => '32M’, +This variable sets the maximum size to which user-created MEMORY tables are permitted to grow. +Max grootte van user-created memory tables +These 2 need to be the same size!!! +'tmp_table_size' => '32M’, +The maximum size of internal in-memory temporary tables. +Max grootte van interne in-memory tijdelijke tabellen + +-------- + +table_cache=64 (maximumwaarde!!) +Table_Cache should always - well mostly anyway - be significantly bigger than the total number of tables in the server. Otherwise it'll keep opening and closing tables. +Maximumwaarde voor caching van geopende tabellen. +thread_cache_size=4 +How many threads the server should cache for reuse. +Aantal threads dat de server kan cachen voor hergebruik. +'innodb_buffer_pool_size' => '1G', +The size in bytes of the buffer pool, the memory area where InnoDB caches table and index data. The default value is 128MB. + +Sudo service mysql/mariadb reload (restart enkel onder toezicht) + + +* `query_cache_*`: + + +`query_cache_type` +Needs to be set to 1 to enable caching. +`query_cache_size` +Is the size of the cache. This can be in bytes, or you can use a M suffix to specify the amount of megabytes. +`query_cache_limit` +Is the maximum size of an individually cached query. Queries over this size won’t go into the cache. This is also in bytes, or megabytes with the M suffix. 1MB is a safe bet. +Maximumgrootte voor elke individuele gecachte query. Queries groter dan dit zullen niet gecacht worden. +`table_open_cache` +Indicates the maximum number of tables the server keeps open + +________ +`innodb_buffer_pool_instances=2` +_Enables the use of multiple threads for innodb._ + +`query_cache_type=1` +_Enables query caching._ + +`join_buffer_size=1024K` +_Increased the buffer size for non-indexed joins._ + +`tmp_table_size=64M && max_heap_table_size=64M` +_Increased the size for temporary tables._ + +`join_buffer_size` +_Omwille van het aantal JOIN queries uitgevoerd zonder indexes, werd de minimumgrootte van de buffer voor index en table scans verhoogd._ + +`max_heap_table_size & tmp_table_size` +_De maximale grootte van user-created memory tables en van interne in-memory tijdelijke tabellen werd verhoogd._ + +`thread_cache_size` +_Het maximale aantal threads dat de server kan cachen voor hergebruik werd verhoogd._ diff --git a/content/administration/selinux-101.md b/content/administration/selinux-101.md new file mode 100644 index 0000000..7442cea --- /dev/null +++ b/content/administration/selinux-101.md @@ -0,0 +1,50 @@ +--- +Author: Kristof Vandam +Categories: +- administration +Date: 2018-10-03T10:08:15+02:00 +Draft: true +Tags: +- linux +- security +- selinux +Title: Selinux 101 +Truncated: true +--- + +A brief overview about selinux, what can it do and how to manage. + +## Context Types + +source context (scontext), for example processes +destination context (tcontenxt), for example, files, directories, ports + +semanage + +-a add +-d delete +-l list + +-t context type + +### Examples +#### Add a default context to a directory + +## Booleans +setsebool +getsebool + +## Debugging + +### /var/log/audit/audit.log +avc: denied +access vector control + +### /var/log/messages +setroubleshoot +more human readable errors +-> only available when setroubleshoot-server package is installed + +### sealert +/var/log/messages suggest running a sealert command for more information +suggests fixes! :) \ No newline at end of file diff --git a/content/administration/selinux.md b/content/administration/selinux.md new file mode 100644 index 0000000..bf26dbb --- /dev/null +++ b/content/administration/selinux.md @@ -0,0 +1,32 @@ +--- +title: "SELinux" +date: 2018-011-11T16:01:15+01:00 +draft: true +--- + +# SELinux + +Security Enhanced Linux is a build in security feature that mostly known to block what you as a sysadmin are trying to do. +Therefore, most online how-to's include a line saying something like: +_"Perform `sed -i s/enforcing/permisive/ /etc/selinux/config` to set the correct SELinux permissions"_ +It doesn't, let us introduce how it should be done. + +### SELinux states +SELinux knows 3 states: + +State | Explanation + --- | --- +Enforcing (default) | Logs and block all actions not allowed by current contexts +Permissive | Only logs all actions not allowed by current contexts +Disabled | Does nothing (disabled), requires a reboot to (un)set + + +### SELinux commands +Command | Explanation + --- | --- +`getenforce` | Get current SELinux mode +`setenforce` | Set new SELinux mode (0 for off, 1 for on). _(Will be overwritten by reboot)_ +`sestatus` | Get current status, default config and more basic info +`chcon` | Change the SELinux context for a file +`restorecon` | Reset the SELinux context for a file to match context database +`semanage` | Extansion in Python to manage the SELinux contexts \ No newline at end of file diff --git a/content/administration/toubles-with-interfaces-after-clone.md b/content/administration/toubles-with-interfaces-after-clone.md new file mode 100644 index 0000000..d0e950f --- /dev/null +++ b/content/administration/toubles-with-interfaces-after-clone.md @@ -0,0 +1,26 @@ +--- +Author: Kristof Vandam +Categories: +- administration +Date: 2018-11-05T22:13:49+02:00 +Draft: false +Tags: +- network +- networking +- interfaces +- ifconfig +Title: Troubles with interfaces after a VM clone +Truncated: true +--- + +Remapping interfaces and their MAC address. + +Often, when you clone a VM you could stumble against errors like: + +```.language-command.line-numbers +[FAILED] Device eth0 does not seem to be present, delaying initialization +``` + +You could change your network configuration to match the correct interface or let Linux reread the available interfaces + +*/etc/udev/rules.d/70-persistent-net.rules* holds the configuration of available devices. Make sure that the MAC address is correct and that the name maches your configuration \ No newline at end of file diff --git a/content/administration/windows_troubleshooting.md b/content/administration/windows_troubleshooting.md new file mode 100644 index 0000000..887b6e4 --- /dev/null +++ b/content/administration/windows_troubleshooting.md @@ -0,0 +1,96 @@ +--- +author: Olivier De Ram +date: 2018-08-25T22:08:15+02:00 +draft: false +title: Windows troubleshooting +--- + +## Windows troubleshooting +VRAGEN: ++ openen vanuit ticketing, wachtwoord en gebruiker ++ custom even viewer view? ++ test server? + + +### *EventViewer* +run: eventvwr + +- custom views +- windows + - application (non windows standard, puppet, vmware, mssql, ...) + - security, aan en afmelden + - set-up: updates en installatie verwijderen programma's + - system: OS meldingen +- application and services: diep graven + + +--> Filter Log: + + - logged (date range) + - event level + - event source + - event ID: 99,-1024,-4634 + + rechtsonderaan > event copy > copy as text + + +### *PowerShell* +``` PowerShell +$first = +$last = +get-eventlog -Logname system - +``` + +``` PowerShell + `get-winevent -LogName 'Microsoft-Windows-TaskScheduler/Operational' | Where-Object { $_.Message -like ‘*insta* }` +``` + + + +### *Task Viewer* + - tasks + - users + - performance (indien gecrasht, bevestigen anders is het netwerk) + +### *Resource monitor* + (task manager > performance > open resouce monitor) + + Overview > CPU (ovenste tab) app aanvinken --> filtert alles + +### *Netstat* + `netstat -abo > C:\temp\log.txt` + +### *Chocolate* + C:\ProgramData\chocolatey\bin\Procmon.exe +--> selecteer lijn+kolom > exclude 'name' (=grep -v) / include 'name' (=grep) + +### *Usefull programs* + - TreeView + - VBluescreenviewer + - Sysinternals + - Zabbix + - VMware events + - BareTail + - choco install + - choco list -lo (view choco installed programs) + - telnet 12.34.56.78 900 + - powershell: `stop service 'name'` + +### *EventID's* + - Event ID 6005: “The event log service was started.” This is synonymous to system startup. + - Event ID 6006: “The event log service was stopped.” This is synonymous to system shutdown. + - Event ID 6008: "The previous system shutdown was unexpected." Records that the system started after it was not shut down properly. + - Event ID 6009: Indicates the Windows product name, version, build number, service pack number, and operating system type detected at boot time. + - Event ID 6013: Displays the uptime of the computer. There is no TechNet page for this id. +Add to that a couple more from the Server Fault answers listed in my OP: + + - Event ID 1074: "The process X has initiated the restart / shutdown of computer on behalf of user Y for the following reason: Z." Indicates that an application or a user initiated a restart or shutdown. + - Event ID 1076: "The reason supplied by user X for the last unexpected shutdown of this computer is: Y." Records when the first user with shutdown privileges logs on to the computer after an unexpected restart or shutdown and supplies a reason for the occurrence. + + +### *PowerShell* +``` PowerShell +$filter = "*abbix*" +get-winevent -logname 'Application' | Where-Object { $_.Message -like $filter } +``` + diff --git a/content/administration/yet-another-arch-guide.md b/content/administration/yet-another-arch-guide.md new file mode 100644 index 0000000..d50b6ae --- /dev/null +++ b/content/administration/yet-another-arch-guide.md @@ -0,0 +1,201 @@ ++++ +Title = "Yet Another Arch Guide" +Author = "Kristof Vandam - Adam Verbeeck" +Categories = [ "administration" ] +Tags = [ "arch" ] +Date = 2018-11-30T10:08:22+02:00 +Truncated = true +Draft = false ++++ +Setting up Arch with other bells and whistles. + +## Target +Lenovo X240 +i5-4300U +8GB DDR3 RAM +500GB SSD + +## Pre-requirements +* Bootable USB with Arch installer installed +* Cabled connection +* Device connected to a power supply + +## First things first +### Keyboard layout + +```.language-command +loadkeys [keyboard-identifier] +``` + +### Check your internet connection + +```.language-command +ping archlinux.org +``` + +### Set timezone + +```.language-command +timedatectl set-timezone Europe/Brussels +``` + +## Prepairing your disks +### Check which disks you have available +```.language-command +fdisk -l +``` + +### Partitioning + +Device your disk into individual partitions: + +1. boot +2. arch +3. windows + +#### Some letters we gonna use + +* **p** show your partition +* **n** new partition +* **a** set the bootflag +* **t** set the type +* **L** show available types +* **w** write the changes + +#### The actual work + +```.language-command +fdisk [your-disk] +``` + +press **n** to create a new partition, the first prompt asks the type of partition, use **p** for Primary +Partition number, enter. +first sector, enter. +goto 'Specify your sizes'. + +#### Specify your sizes ++[SIZE][TGMK] + +#### Set the bootflag +A partition needs a bootflag for the MBR know which partition use at startup + +#### Set the types +Use **t** to set the type: + +**83** for boot *(linux)* +**8e** for arch *(lvm)* +**7** for windows *(HPFS/NTFS/exFAT)* + +### LVM + +```.language-command +pvcreate /dev/sda2 +vgcreate vg0 /dev/sda2 +lvcreate -L +2G -n swap vg0 +lvcreate -l 100%FREE -n swap vg0 +``` + +### Filesystems + +```.language-command +mkswap /dev/mapper/vg0-swap +mkfs.ext4 /dev/sda1 +mkfs.xfs /dev/mapper/vg0-root +``` + +### Mount your disks and strap your seatbelt, we gonna pacstrap + +```.language-command +mount /dev/mapper/vg0-root /mnt +mkdir /mnt/boot +mount /dev/sda1 /mnt/boot +``` + +```.language-command +pacstrap /mnt base base-devel vim bash-completion networkmanager +``` + +### Make sure it boots! +genfstab -U /mnt >> /mnt/etc/fstab + +### making it yours +arch-chroot /mnt + +#### Time, Date, Region +```.language-command +ln -sf /usr/share/zoneinfo/Europe/Brussels /etc/localtime +hwclock --systohc +locale-gen +``` + +/etc/locale.conf +```.language-command +LANG=en_US.UTF-8 UTF-8 +``` + +/etc/vconsole.conf +```.language-command +KEYMAP=be-latin1 +``` + +/etc/hostname +```.language-command +myhostname +``` + +/etc/hosts +```.language-command +127.0.0.1 localhost +::1 localhost +127.0.0.1 myhostname.localdomain myhostname +``` + +```.language-command +passwd +``` + +### Grub + +```.language-command +pacman -S grub +grub-install /dev/sda +grub-mkconfig > /boot/grub/grub.cfg +``` +*Ignore warnings* + +### fstab +Add swap to fstab +```.language-command +/dev/mapper/vg0-swap swap swap default 0 0 +``` + +Check your work by swapping the swap +```.language-command +swapoff -a +mount -a +swapon -a +free +``` +does your swap have bytes? + +### LVM can't bot +Add the LVM module to the mkinitcpio config file at /etc/mkinitcpio.conf + +add *lvm2* to the HOOKS Array before filestystems +```.language-command +... +HOOKS=(base udev autodetect modconf block lvm2 filestystems keyboard fsck) +... +``` + +```.language-command +mkinitcpio -p linux +``` + +### Cross fingers - reboot + +### Enable services +```.language-command +systemctl enable NetworkManager +systemctl start NetworkManager +``` \ No newline at end of file diff --git a/content/development/live-search-with-hugo.md b/content/development/live-search-with-hugo.md new file mode 100644 index 0000000..65a1d0f --- /dev/null +++ b/content/development/live-search-with-hugo.md @@ -0,0 +1,254 @@ +--- +Author: Kristof Vandam +Categories: +- development +Date: 2018-08-29T22:44:46+02:00 +Draft: false +Tags: +- vue +- vuejs +- prism +- prismjs +- hugo +- javascript +- js +- json +Title: Live Search With HUGO +Truncated: true +--- + +HUGO is static, that's a fact. How can I implement a live search? Searching the internet provided me only solutions +that require a page refresh, this time of age performance is key, so that's why I wanted a fast and fuzzy search implementation. + +## Research +Some this I found which helped to get there are: + +* [here](https://gohugo.io/tools/search/) *more specific* [here](https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae) +* https://vuejs.org/ +* http://fusejs.io/ +* https://momentjs.com/ +* https://github.com/axios/axios + +## Create a JSON object containing all articles +Actually every data you want to search, in this guide (and on this website) I use the following data: + +1. Title +2. Date +3. Author +4. Tags +5. Content + +This is specified in a custom *layout*. Note the ```(dict "title" ...)``` line. You can add any data that HUGO processes (for each article). Its a list of key/values, the keys are presented between the quotes, the value as first value. + +**layouts/json/single.html** +```.language-none.line-numbers +{{- $.Scratch.Add "index" slice -}} +{{- range where .Site.Pages "Type" "not in" (slice "page" "json") -}} +{{- $.Scratch.Add "index" (dict "title" .Title "date" .Date "author" .Params.author "href" .Permalink "tags" .Params.tags "content" .Plain) -}} +{{- end -}} +{{- $.Scratch.Get "index" | jsonify -}} +``` + +Now, with this file in place the next thing to do is to create a content page, where this layout is used. This file triggers the creation of "index.json". + +**content/search.md** +```.language-yaml.line-numbers +--- +date: "2017-03-05T21:10:52+01:00" +type: "json" +url: "index.json" +--- +``` + +**Example of the data returned** +*You can checkout the json object for this website, just go to* https://hagfi.sh/index.json +```.language-json.line-numbers +[ + { + "author": "Kristof Vandam", + "content": "HUGO is static, that\u0026rsquo;s a fact. How can I implement a live search? Searching the internet provided me only solutions that require a page refresh, this time of age performance is key, so that\u0026rsquo;s why I wanted a fast and fuzzy search implementation. Research Some this I found which helped to get there are:\n https://gohugo.io/tools/search/ ", + "date": "2018-08-29T22:44:46+02:00", + "href": "http://localhost:1313/development/live-search-with-hugo/", + "tags": null, + "title": "Live Search With HUGO" + } +] +``` + +## Add the required dependencies (we use CDN's) + +Make sure the following dependencies are loaded between the head tags. We use a little trick to let the browser decide if http or https is used. These are called *Protocol-Relative URL's*. + +```.language-markup.line-numbers + + + + +``` + +## Add the actual search logic + +It's a best practice to add the JavaScript right before the closing body tags. I highly suggest checking out VueJS with Webpack, but in this case a some simple JS inside script tags will do just fine. + +I will go over each section to clarify. + +```.language-javascript.line-numbers +var app = new Vue({ + el: '#app', + data: { + fuse: null, + search: "", + result: [], + index: [] + }, + mounted() { + + let self = this + + let options = { + shouldSort: true, + threshold: 0.6, + location: 0, + distance: 100, + maxPatternLength: 32, + minMatchCharLength: 1, + keys: [ + "title", + "author", + "date", + "content" + ] + } + axios.get('/index.json') + .then(function (response) { + self.index = response.data + self.fuse = new Fuse(response.data, options); + self.result = fuse.search(""); + }) + .catch(function (error) { + console.log(error) + }) + }, + watch: { + search(nval, oval) { + if (nval.length > 0) { + this.result = this.fuse.search(nval) + } else { + this.result = [] + } + } + } +}) +``` + +### Create the Vue instance + +When creating a new Vue instance we assign Vue to a DOM element, most of the time an ID on your body tag is used. +```.language-javascript.line-numbers +var app = new Vue({ + el: '#app', + ... +}) +``` + +### Create a data object + +This object is accesible across your DOM and Vue instance. Inside functions you can reffer to these with ```this.*```.language- +I initiated some variables like 'fuse' so it can be used inside *watch* and *methods*. +```.language-javascript.line-numbers +data: { + fuse: null, + search: "", + result: [], + index: [] +}, +``` + +### What todo when everything is ready + +The ```mounted()``` function is triggered when everything ready to start processing your custom code. *(This function used to name 'ready()')*. +We assign ```this``` to ```self``` to handle some scope issues in the axios promise. +We polulate some options for FuseJS, note that the keys array is important here. Here we specify which keys of our index.json we want to search. +The index.json file is loaded with AJAX, this way the page should not wait for content that is not required immediately. +When axios retrieves the date we create a Fuse instance (assigned to ```self.fuse``` (or ```this.fuse```)). +```.language-javascript.line-numbers +mounted() { + + let self = this + + let options = { + shouldSort: true, + threshold: 0.6, + location: 0, + distance: 100, + maxPatternLength: 32, + minMatchCharLength: 1, + keys: [ + "title", + "author", + "date", + "content" + ] + } + axios.get('/index.json') + .then(function (response) { + self.index = response.data + self.fuse = new Fuse(response.data, options); + self.result = fuse.search(""); + }) + .catch(function (error) { + console.log(error) + }) +}, +``` + +### When something is entered inside the search field + +We watch for ```this.search``` to change, if it changes this function is called. Remember we set ```search: ""``` inside our data object? +If the 'nval' (New VALue) is larger than 0 characters we trigger the search function of fuse, which will return a new data set, but filtered. +This dataset is stored inside ```this.result```.language- + +If the length of 'nval' changes to 0 characters we hardcode the result to be an empty array (to prevent possible edgecases). +```.language-javascript.line-numbers +watch: { + search(nval, oval) { + if (nval.length > 0) { + this.result = this.fuse.search(nval) + } else { + this.result = [] + } + } +} +``` + +### Ok, cool, now how do I showcase the results? + +Well, it's up to you. The most important parts in this example are: + +1. Bind ```this.search``` to the input field (with ```v-model```) +2. Loop through ```this.result``` with ```v-for```, it will recreate the li tag 'for each' result item. +3. Use the result item, reffered as ```r```. +4. Links are extracted from the result item by the 'href' key and bound to the href attribute. ```:href="r.href"``` + +We use Moment.js to format the default (can be changed) HUGO date format to 'D' (Day), 'MMM' (Month, max 3 characters), 'YYYY' (Full Year). + +```.language-markup.line-numbers +
+ +
    +
  • +
    +
    + + +
    +
    + // +
    +
    +
  • +
+
+``` \ No newline at end of file diff --git a/content/search.md b/content/search.md new file mode 100644 index 0000000..f61db39 --- /dev/null +++ b/content/search.md @@ -0,0 +1,6 @@ +--- +date: 2017-03-05T21:10:52+01:00 +type: json +url: index.json +--- + diff --git a/content/tools/fatrace.md b/content/tools/fatrace.md new file mode 100644 index 0000000..de4166f --- /dev/null +++ b/content/tools/fatrace.md @@ -0,0 +1,70 @@ +--- +Author: Kristof Vandam +Categories: +- tools +- administration +Date: 2018-11-05T22:13:49+02:00 +Draft: false +Tags: +- directory +- size +- inventory +Title: 'Fatrace: Report system wide file access events' +Truncated: true +--- + +fatrace watches every file on server (except from itself and other kernel file systems). + +*fatrace* watches every file on server (except from itself and other kernel file systems). + + +## Install on Centos7 +Download the repo file from *fedorainfracloud.org* + +```.language-command +sudo curl https://copr.fedorainfracloud.org/coprs/ifas/fatrace/repo/epel-7/ifas-fatrace-epel-7.repo > /etc/yum.repos.d/ifas.repo +sudo yum install fatrace -y +``` + +## Usage + +Option | Description +------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------- +-c, --current-mount | Only record events on partition/mount of current directory. Without this option, all (real) partitions/mount points are being watched. +-o FILE, --output=FILE | Write events to given file instead of standard output. +-s SECONDS, --seconds=SECONDS | Stop after the given number of seconds. +-t, --timestamp | Add timestamp to events. When this option is given once, the format will be a humanreadable|hour:minute:second.microsecond +-p PID, --ignore-pid=PID | Ignore events for this process ID. Can be specified multiple times. + +### Output + +The output should look something like the following. My action was reloading this page while watching with fatrace. + +```.language-command +$ fatrace -t +12:58:20.859174 pickup(7666): CO /var/spool/postfix/maildrop +12:58:21.017572 caddy(7472): CO /var/www/vhosts/blog/tools/fatrace +12:58:21.017572 caddy(7472): CO /var/www/vhosts/blog/tools/fatrace/index.html +12:58:21.017572 caddy(7472): W /var/log/caddy/blog.log +12:58:21.213908 caddy(7472): CO /var/www/vhosts/blog/index.json +12:58:21.213908 caddy(7472): W /var/log/caddy/blog.log +12:58:21.305848 caddy(7472): RCO /var/www/vhosts/blog/img/favicon.png +12:58:21.305848 caddy(7472): W /var/log/caddy/blog.log +``` + +Letter | Description +---------|------------ +R | Read +W | Write +O | Open +C | Close + +Action identifiers can be combined + +## Usecases + +identifying which files are accessed by a process. + +## References + +[Manpage fatrace](http://manpages.ubuntu.com/manpages/trusty/man1/fatrace.1.html) \ No newline at end of file diff --git a/content/tools/ncdu.md b/content/tools/ncdu.md new file mode 100644 index 0000000..de45746 --- /dev/null +++ b/content/tools/ncdu.md @@ -0,0 +1,82 @@ +--- +Author: Kristof Vandam +Categories: +- tools +- administration +Date: 2018-09-17T22:18:38+02:00 +Draft: false +Tags: +- du +- ncdu +- directory +- size +- inventory +Title: 'NCDU: NCurses Disk Usage' +Truncated: true +--- + +ncdu is a command line tool to scan and calculate directory and file sizes. + +## Comparison with 'du' +While the initial scan is about the same as du, ncdu keeps the results in memory. This +can become handy when investigating the storage hog. You can compare the already cached +results immediately with a *\(r\)* escan. + +Also navigation is a breese. *ncdu* creates a interactive session where the arrow keys are +used to open and close directories. + +## Options +ncdu is not bloated with options, but each of these are useful and easy to remember. All these are +used inside the interactive session. + +Key | Description +----------------|--------------- +up, k | Move cursor up +down, j | Move cursor down +right/enter | Open selected directory +left, <, h | Open parent directory +n | Sort by name +s | Sort by size +C | Sort by items +d | Delete selected file or directory +t | Toggle dirs before files when sorting +g | Show percentage and/or graph +a | Toggle between apparent size and disk usage +c | Toggle display of child item counts +e | Show/hide hidden or excluded files +i | Show information about selected item +r | Recalculate the current directory +b | Spawn shell in current directory +q | Quit ncdu + +## Advanced ncdu + +### JSON for development +```.language-command +ncdu -x / -o- | jq +``` +> +* **-x** chose directory '/' +* **-o-** output to stdout + +Will create a JSON object of the current directory and all his subdirectories. This can come +handy for developing or generating reports. + +### Store result +```.language-command +ncdu -0xo- / | gzip > scan.gz +``` +> +* **-0** surpress unwanted output +* **-x** chose directory '/' +* **-o-** output to stdout + +### Use stored result +```.language-command +zcat scan.gz | ncdu -f- +``` +> +* **-f** read from stdin + +## Author +[Official Website](https://dev.yorhel.nl/ncdu/man) \ No newline at end of file diff --git a/layouts/json/single.html b/layouts/json/single.html new file mode 100644 index 0000000..f6e8c6b --- /dev/null +++ b/layouts/json/single.html @@ -0,0 +1,5 @@ +{{- $.Scratch.Add "index" slice -}} +{{- range where .Site.RegularPages "Type" "not in" (slice "page" "json") -}} +{{- $.Scratch.Add "index" (dict "title" .Title "date" .Date "author" .Params.author "href" .Permalink "tags" .Params.tags "content" .Plain) -}} +{{- end -}} +{{- $.Scratch.Get "index" | jsonify -}} \ No newline at end of file diff --git a/public/administration/dont-let-your-application-interfere-with-letsencrypt/index.html b/public/administration/dont-let-your-application-interfere-with-letsencrypt/index.html new file mode 100644 index 0000000..2d3c830 --- /dev/null +++ b/public/administration/dont-let-your-application-interfere-with-letsencrypt/index.html @@ -0,0 +1,181 @@ + + + + + Dont Let Your Application Interfere With Letsencrypt // Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Contents + +
+ + +
+

+ Dont Let Your Application Interfere With Letsencrypt +

+

+ +

+ + + + + + + + + + + + + + + + +

Tips and tricks to keep letsencrypt working

+ + + + + + + +
+ More Reading + +
+ Newer// + Windows troubleshooting +
+ + + +
+ Older// + Vue Js +
+ +
+ +
+ + + + + +
+
+ + + + + + + diff --git a/public/administration/index.html b/public/administration/index.html new file mode 100644 index 0000000..344e51c --- /dev/null +++ b/public/administration/index.html @@ -0,0 +1,267 @@ + + + + + Administrations // Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ +
+
+ +

+ Let's Encrypt +

+
+ + +
+ Let’s Encrypt: Aanmaken / vernieuwen certificaat: /opt/letsencrypt/letsencrypt-auto certonly --expand ---email support@nucleus.be --agree-tos --webroot -w /var/www/vhosts/WEB/ROOT -d domain.tld -d domainalias.tld --dry-run /bin/certbot --text --agree-tos --non-interactive certonly -a webroot --webroot-path /var/www/vhosts/WEB/ROOT -d domain.tld -d domainalias.tld --dry-run --dry-run om het aanmaken te testen. +Apache / httpd (1) Voeg volgende regels toe aan de apache config: Alias /.well-known /var/www/vhosts/letsencrypt/.well-known <Directory /var/www/vhosts/letsencrypt/.well-known> order allow,deny allow from all satisfy any </Directory> Of (2) voeg volgende regels toe aan . +
+ + +
+ +
+
+ +

+ MySQL Tuner +

+
+ + +
+ MySQL Tuner WAARDE ACTIE query_cache_size AFBLIJVEN table_cache AFBLIJVEN (maximumwaarde = 64) table_open_cache AFBLIJVEN join_buffer_size Verhogen indien Joins performed without indexes++ tmp_table_size Verhogen = max_heap_table_size max_heap_table_size Verhogen = tmp_table_size query_cache_type =1 indien =0 mysql tuning improvements table_cache NOOIT hoger dan 64 Sudo vim /etc/my.cnf query_cache_size’ => ‘256M’, It caches the select query along with the result set, which enables the identical selects to execute faster as the data fetches from the in memory. +
+ + +
+ +
+
+ +

+ Windows troubleshooting +

+
+ + +
+ Windows troubleshooting VRAGEN: + openen vanuit ticketing, wachtwoord en gebruiker + custom even viewer view? + test server? +EventViewer run: eventvwr + custom views windows application (non windows standard, puppet, vmware, mssql, …) security, aan en afmelden set-up: updates en installatie verwijderen programma’s system: OS meldingen application and services: diep graven –> Filter Log: + logged (date range) + event level + event source + event ID: 99,-1024,-4634 +
+ + +
+ +
+
+ +

+ Dont Let Your Application Interfere With Letsencrypt +

+
+ + + + +

Tips and tricks to keep letsencrypt working

+ + +
+ +
+
+ +

+ Luks Encryption +

+
+ + +
+ Add a new disk (LVM) root@server:/dev/centos # for i in /sys/class/scsi_host/host*; do echo "- - -" > $i/scan; done root@server:/dev/centos # NEWDISK=$(dmesg|tail|grep 'Attached'|awk '{print $4}'|tail -n1|cut -d "[" -f2|cut -d "]" -f1) root@server:/dev/centos # VGROUP=$(vgdisplay|grep Name|head -n1|awk '{print $3}') root@server:/dev/centos # echo ${NEWDISK} sdd root@server:/dev/centos # echo ${VGROUP} centos root@server:/dev/centos # pvcreate /dev/${NEWDISK} Physical volume "/dev/sdd" successfully created. root@server:/dev/centos # vgextend ${VGROUP} /dev/${NEWDISK} Volume group "centos" successfully extended Create a logical volume (LVM) root@server:/dev/centos # lvcreate -L 15G -n encrypted centos Logical volume "encrypted" created. +
+ + +
+ +
+ + +
+
+ + + diff --git a/public/administration/index.xml b/public/administration/index.xml new file mode 100644 index 0000000..2c5ba5c --- /dev/null +++ b/public/administration/index.xml @@ -0,0 +1,483 @@ + + + + Administrations on Hagfi.sh + https://hagfi.sh/administration/index.xml + Recent content in Administrations on Hagfi.sh + Hugo -- gohugo.io + en-us + Sat, 25 Aug 2018 22:08:15 +0200 + + + + Let's Encrypt + https://hagfi.sh/administration/letsencrypt/ + Sat, 25 Aug 2018 22:08:15 +0200 + + https://hagfi.sh/administration/letsencrypt/ + + +<h2 id="let-s-encrypt">Let&rsquo;s Encrypt:</h2> + +<ul> +<li>Aanmaken / vernieuwen certificaat:</li> +</ul> + +<pre><code>/opt/letsencrypt/letsencrypt-auto certonly + --expand + ---email support@nucleus.be + --agree-tos + --webroot + -w /var/www/vhosts/WEB/ROOT + -d domain.tld + -d domainalias.tld + --dry-run +</code></pre> + +<pre><code>/bin/certbot + --text + --agree-tos + --non-interactive + certonly + -a webroot + --webroot-path /var/www/vhosts/WEB/ROOT + -d domain.tld + -d domainalias.tld + --dry-run +</code></pre> + +<p><code>--dry-run</code> om het aanmaken te testen.</p> + +<h3 id="apache-httpd">Apache / httpd</h3> + +<ul> +<li>(1) Voeg volgende regels toe aan de apache config:</li> +</ul> + +<pre><code>Alias /.well-known /var/www/vhosts/letsencrypt/.well-known +&lt;Directory /var/www/vhosts/letsencrypt/.well-known&gt; + order allow,deny + allow from all + satisfy any +&lt;/Directory&gt; +</code></pre> + +<ul> +<li>Of (2) voeg volgende regels toe aan .htaccess:</li> +</ul> + +<pre><code>&lt;IfModule mod_rewrite.c&gt; + RewriteEngine on + #Allow Let's Encrypt SSL renewal + RewriteRule ^.well-known/ - [L,NC] + RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/ + RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L] +</code></pre> + +<ul> +<li>Combineer Basic Auth met Let&rsquo;s Encrypt:<br /> +<em>Dit moet je bekijken ale een if/else. (Ofwel valid-user ofwel REQUEST_URI)</em></li> +</ul> + +<pre><code> &lt;Directory /var/www/vhosts/WEB/ROOT&gt; + AuthType Basic + AuthName protected + AuthUserFile /etc/httpd/passwd/phpmyadmin.htpasswd + require valid-user + Require expr %{REQUEST_URI} =~ m#^/.well-known/acme-challenge/.*# + &lt;/Directory&gt; +</code></pre> + +<h3 id="nginx">Nginx</h3> + +<ul> +<li>Voeg volgende regels toe aan Nginx</li> +</ul> + +<pre><code> location /.well-known { + root /var/www/vhosts/WEB/ROOT; + index index.html index.htm index.php; + } +</code></pre> + +<p>-</p> + +<ul> +<li>Controleer DNS lijst domeinen:</li> +</ul> + +<pre><code>while read LINE; +do + echo $LINE &gt;&gt; list_processed.txt &amp;&amp; dig +short @9.9.9.9 $LINE &gt;&gt; list_processed.txt; +done &lt; list.txt +</code></pre> + +<ul> +<li>(WIP) +<br /></li> +</ul> + +<pre><code>#!/bin/bash + +#IP=&lt;%= @default_ipadress %&gt; +IP=$(dig +short @9.9.9.9 $(hostname)) +FILE=$1 + +while read LINE +do + CHK=$(dig +short @9.9.9.9 $LINE) + if $IP -eq $CHK + echo &quot;$LINE|$CHK&quot; &gt;&gt; /tmp/le-ok + elif + echo &quot;$LINE|$CHK&quot; &gt;&gt; /tmp/le-nok + fi +done &lt; $FILE + +echo &quot;Domains OK:&quot; +echo /tmp/le-ok | column +echo &quot;-------------------------------&quot; +echo &quot;Domains NOT OK:&quot; +echo /tmp/le-nok | column + +rm -rf /tmp/le-ok +rm -rf /tmp/le-nok +</code></pre> + + + + + MySQL Tuner + https://hagfi.sh/administration/mysql_tuner/ + Sat, 25 Aug 2018 22:08:15 +0200 + + https://hagfi.sh/administration/mysql_tuner/ + + +<h2 id="mysql-tuner">MySQL Tuner</h2> + +<table> +<thead> +<tr> +<th>WAARDE</th> +<th>ACTIE</th> +</tr> +</thead> + +<tbody> +<tr> +<td><code>query_cache_size</code></td> +<td>AFBLIJVEN</td> +</tr> + +<tr> +<td><code>table_cache</code></td> +<td>AFBLIJVEN <em>(maximumwaarde = 64)</em></td> +</tr> + +<tr> +<td><code>table_open_cache</code></td> +<td>AFBLIJVEN</td> +</tr> + +<tr> +<td><code>join_buffer_size</code></td> +<td>Verhogen indien <code>Joins performed without indexes++</code></td> +</tr> + +<tr> +<td><code>tmp_table_size</code></td> +<td>Verhogen = <code>max_heap_table_size</code></td> +</tr> + +<tr> +<td><code>max_heap_table_size</code></td> +<td>Verhogen <code>= tmp_table_size</code></td> +</tr> + +<tr> +<td><code>query_cache_type</code></td> +<td><code>=1</code> indien <code>=0</code></td> +</tr> +</tbody> +</table> + +<blockquote> +<p>mysql tuning improvements +<code>table_cache</code> NOOIT hoger dan 64 +Sudo vim /etc/my.cnf +query_cache_size&rsquo; =&gt; &lsquo;256M’, +It caches the select query along with the result set, which enables the identical selects to execute faster as the data fetches from the in memory. +Caching voor select queries en bijhorende result sets, wat het mogelijk maakt om identieke selects sneller op te vragen uit memory. +&lsquo;open_files_limit&rsquo; =&gt; &lsquo;4096&rsquo;, +Changes the number of file descriptors available to mysqld. You should try increasing the value of this option if mysqld gives you the error Too many open files. +&lsquo;join_buffer_size&rsquo; =&gt; &lsquo;256K’, +The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use indexes and thus perform full table scans. Normally, the best way to get fast joins is to add indexes. Increase the value of join_buffer_size to get a faster full join when adding indexes is not possible. +Minimumgrootte van buffer voor index en table scans.</p> +</blockquote> + +<hr /> + +<blockquote> +<p>&lsquo;max_heap_table_size&rsquo; =&gt; &lsquo;32M’, +This variable sets the maximum size to which user-created MEMORY tables are permitted to grow. +Max grootte van user-created memory tables +These 2 need to be the same size!!! +&lsquo;tmp_table_size&rsquo; =&gt; &lsquo;32M’, +The maximum size of internal in-memory temporary tables. +Max grootte van interne in-memory tijdelijke tabellen</p> +</blockquote> + +<hr /> + +<blockquote> +<p>table_cache=64 (maximumwaarde!!) +Table_Cache should always - well mostly anyway - be significantly bigger than the total number of tables in the server. Otherwise it&rsquo;ll keep opening and closing tables. +Maximumwaarde voor caching van geopende tabellen. +thread_cache_size=4 +How many threads the server should cache for reuse. +Aantal threads dat de server kan cachen voor hergebruik. +&lsquo;innodb_buffer_pool_size&rsquo; =&gt; &lsquo;1G&rsquo;, +The size in bytes of the buffer pool, the memory area where InnoDB caches table and index data. The default value is 128MB.</p> +</blockquote> + +<p>Sudo service mysql/mariadb reload (restart enkel onder toezicht)</p> + +<ul> +<li><code>query_cache_*</code>:</li> +</ul> + +<blockquote> +<p><code>query_cache_type</code><br /> +Needs to be set to 1 to enable caching.<br /> +<code>query_cache_size</code><br /> +Is the size of the cache. This can be in bytes, or you can use a M suffix to specify the amount of megabytes.<br /> +<code>query_cache_limit</code><br /> +Is the maximum size of an individually cached query. Queries over this size won’t go into the cache. This is also in bytes, or megabytes with the M suffix. 1MB is a safe bet.<br /> +Maximumgrootte voor elke individuele gecachte query. Queries groter dan dit zullen niet gecacht worden.<br /> +<code>table_open_cache</code><br /> +Indicates the maximum number of tables the server keeps open</p> +</blockquote> + +<hr /> + +<p><code>innodb_buffer_pool_instances=2</code><br /> +<em>Enables the use of multiple threads for innodb.</em></p> + +<p><code>query_cache_type=1</code><br /> +<em>Enables query caching.</em></p> + +<p><code>join_buffer_size=1024K</code><br /> +<em>Increased the buffer size for non-indexed joins.</em></p> + +<p><code>tmp_table_size=64M &amp;&amp; max_heap_table_size=64M</code><br /> +<em>Increased the size for temporary tables.</em></p> + +<p><code>join_buffer_size</code><br /> +<em>Omwille van het aantal JOIN queries uitgevoerd zonder indexes, werd de minimumgrootte van de buffer voor index en table scans verhoogd.</em></p> + +<p><code>max_heap_table_size &amp; tmp_table_size</code><br /> +<em>De maximale grootte van user-created memory tables en van interne in-memory tijdelijke tabellen werd verhoogd.</em></p> + +<p><code>thread_cache_size</code><br /> +<em>Het maximale aantal threads dat de server kan cachen voor hergebruik werd verhoogd.</em></p> + + + + + Windows troubleshooting + https://hagfi.sh/administration/windows_troubleshooting/ + Sat, 25 Aug 2018 22:08:15 +0200 + + https://hagfi.sh/administration/windows_troubleshooting/ + + +<h2 id="windows-troubleshooting">Windows troubleshooting</h2> + +<p>VRAGEN: ++ openen vanuit ticketing, wachtwoord en gebruiker ++ custom even viewer view? ++ test server?</p> + +<h3 id="eventviewer"><em>EventViewer</em></h3> + +<p>run: eventvwr</p> + +<ul> +<li>custom views</li> +<li>windows + +<ul> +<li>application (non windows standard, puppet, vmware, mssql, &hellip;)</li> +<li>security, aan en afmelden</li> +<li>set-up: updates en installatie verwijderen programma&rsquo;s</li> +<li>system: OS meldingen</li> +</ul></li> +<li>application and services: diep graven +<br /> +<br /></li> +</ul> + +<p>&ndash;&gt; Filter Log:</p> + +<ul> +<li>logged (date range)<br /></li> +<li>event level<br /></li> +<li>event source<br /></li> +<li>event ID: 99,-1024,-4634<br /></li> +</ul> + +<p>rechtsonderaan &gt; event copy &gt; copy as text</p> + +<h3 id="powershell"><em>PowerShell</em></h3> + +<pre><code class="language-PowerShell">$first = +$last = +get-eventlog -Logname system - +</code></pre> + +<pre><code class="language-PowerShell"> `get-winevent -LogName 'Microsoft-Windows-TaskScheduler/Operational' | Where-Object { $_.Message -like ‘*insta* }` +</code></pre> + +<h3 id="task-viewer"><em>Task Viewer</em></h3> + +<ul> +<li>tasks</li> +<li>users</li> +<li>performance (indien gecrasht, bevestigen anders is het netwerk)</li> +</ul> + +<h3 id="resource-monitor"><em>Resource monitor</em></h3> + +<p>(task manager &gt; performance &gt; open resouce monitor)</p> + +<p>Overview &gt; CPU (ovenste tab) app aanvinken &ndash;&gt; filtert alles</p> + +<h3 id="netstat"><em>Netstat</em></h3> + +<p><code>netstat -abo &gt; C:\temp\log.txt</code></p> + +<h3 id="chocolate"><em>Chocolate</em></h3> + +<p>C:\ProgramData\chocolatey\bin\Procmon.exe +&ndash;&gt; selecteer lijn+kolom &gt; exclude &lsquo;name&rsquo; (=grep -v) / include &lsquo;name&rsquo; (=grep)</p> + +<h3 id="usefull-programs"><em>Usefull programs</em></h3> + +<ul> +<li>TreeView</li> +<li>VBluescreenviewer</li> +<li>Sysinternals</li> +<li>Zabbix</li> +<li>VMware events</li> +<li>BareTail</li> +<li>choco install</li> +<li>choco list -lo (view choco installed programs)</li> +<li>telnet 12.34.56.78 900</li> +<li>powershell: <code>stop service 'name'</code></li> +</ul> + +<h3 id="eventid-s"><em>EventID&rsquo;s</em></h3> + +<ul> +<li>Event ID 6005: “The event log service was started.” This is synonymous to system startup.</li> +<li>Event ID 6006: “The event log service was stopped.” This is synonymous to system shutdown.</li> +<li>Event ID 6008: &ldquo;The previous system shutdown was unexpected.&rdquo; Records that the system started after it was not shut down properly.</li> +<li>Event ID 6009: Indicates the Windows product name, version, build number, service pack number, and operating system type detected at boot time.</li> + +<li><p>Event ID 6013: Displays the uptime of the computer. There is no TechNet page for this id. +Add to that a couple more from the Server Fault answers listed in my OP:</p></li> + +<li><p>Event ID 1074: &ldquo;The process X has initiated the restart / shutdown of computer on behalf of user Y for the following reason: Z.&rdquo; Indicates that an application or a user initiated a restart or shutdown.</p></li> + +<li><p>Event ID 1076: &ldquo;The reason supplied by user X for the last unexpected shutdown of this computer is: Y.&rdquo; Records when the first user with shutdown privileges logs on to the computer after an unexpected restart or shutdown and supplies a reason for the occurrence.</p></li> +</ul> + +<h3 id="powershell-1"><em>PowerShell</em></h3> + +<pre><code class="language-PowerShell">$filter = &quot;*abbix*&quot; +get-winevent -logname 'Application' | Where-Object { $_.Message -like $filter } +</code></pre> + + + + + Dont Let Your Application Interfere With Letsencrypt + https://hagfi.sh/administration/dont-let-your-application-interfere-with-letsencrypt/ + Thu, 23 Aug 2018 22:46:41 +0200 + + https://hagfi.sh/administration/dont-let-your-application-interfere-with-letsencrypt/ + + +<h2 id="tips-and-tricks-to-keep-letsencrypt-working">Tips and tricks to keep letsencrypt working</h2> + + + + + Luks Encryption + https://hagfi.sh/administration/luks-encryption/ + Thu, 23 Aug 2018 22:08:15 +0200 + + https://hagfi.sh/administration/luks-encryption/ + + +<h2 id="add-a-new-disk-lvm">Add a new disk (LVM)</h2> + +<pre><code>root@server:/dev/centos # for i in /sys/class/scsi_host/host*; do echo &quot;- - -&quot; &gt; $i/scan; done +root@server:/dev/centos # NEWDISK=$(dmesg|tail|grep 'Attached'|awk '{print $4}'|tail -n1|cut -d &quot;[&quot; -f2|cut -d &quot;]&quot; -f1) +root@server:/dev/centos # VGROUP=$(vgdisplay|grep Name|head -n1|awk '{print $3}') +root@server:/dev/centos # echo ${NEWDISK} +sdd +root@server:/dev/centos # echo ${VGROUP} +centos +root@server:/dev/centos # pvcreate /dev/${NEWDISK} +Physical volume &quot;/dev/sdd&quot; successfully created. +root@server:/dev/centos # vgextend ${VGROUP} /dev/${NEWDISK} +Volume group &quot;centos&quot; successfully extended +</code></pre> + +<h2 id="create-a-logical-volume-lvm">Create a logical volume (LVM)</h2> + +<pre><code>root@server:/dev/centos # lvcreate -L 15G -n encrypted centos +Logical volume &quot;encrypted&quot; created. +</code></pre> + +<h2 id="encrypt-the-partition">Encrypt the partition</h2> + +<pre><code>root@server:/dev/centos # cryptsetup -v --verify-passphrase luksFormat /dev/centos/encrypted +root@server:/dev/mapper # cryptsetup luksOpen /dev/centos/encrypted luks-encrypted +</code></pre> + +<h2 id="create-a-mountpoint">Create a mountpoint</h2> + +<pre><code>root@server:/dev/mapper # mkdir /encrypted +root@server:/dev/mapper # mount /dev/mapper/luks-encrypted /encrypted +</code></pre> + +<h2 id="create-a-key-to-auto-mount-the-encrypted-disk">Create a key (to auto-mount the encrypted disk)</h2> + +<pre><code>root@server:/dev/mapper # dd if=/dev/urandom of=/root/lukskey bs=1024 count=4 +root@server:/dev/mapper # chmod 0400 /root/lukskey +</code></pre> + +<h2 id="unmount-and-add-the-key">Unmount and add the key</h2> + +<pre><code>root@server:/ # umount /encrypted +root@server:/ # cryptsetup luksClose luks-encrypted +root@server:/ # cryptsetup luksAddKey /dev/mapper/centos-encrypted /root/lukskey +</code></pre> + +<h2 id="get-uuid">Get UUID</h2> + +<pre><code>root@server:/ # blkid /dev/mapper/centos-encrypted +/dev/mapper/centos-encrypted: UUID=&quot;0dab9a5c-1870-478d-8d74-226eeb512f78&quot; TYPE=&quot;crypto_LUKS&quot; +</code></pre> + +<h2 id="auto-mount-luks-edit-etc-cypttab">Auto-mount LUKS (edit /etc/cypttab)</h2> + +<pre><code>luks-encrypted /dev/disk/by-uuid/0dab9a5c-1870-478d-8d74-226eeb512f78 /root/lukskey luks +</code></pre> + + + + + \ No newline at end of file diff --git a/public/administration/letsencrypt/index.html b/public/administration/letsencrypt/index.html new file mode 100644 index 0000000..709edef --- /dev/null +++ b/public/administration/letsencrypt/index.html @@ -0,0 +1,304 @@ + + + + + Let's Encrypt // Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Contents + +
+ + +
+

+ Let's Encrypt +

+

+ +

+ + + + + + + + + + + + + + + + +

Let’s Encrypt:

+ +
    +
  • Aanmaken / vernieuwen certificaat:
  • +
+ +
/opt/letsencrypt/letsencrypt-auto certonly
+	--expand
+	---email support@nucleus.be
+	--agree-tos
+	--webroot
+	-w /var/www/vhosts/WEB/ROOT
+	-d domain.tld
+	-d domainalias.tld
+	--dry-run
+
+ +
/bin/certbot
+	--text
+	--agree-tos
+	--non-interactive
+	certonly
+	-a 	webroot
+	--webroot-path 	/var/www/vhosts/WEB/ROOT
+	-d 	domain.tld
+	-d 	domainalias.tld
+	--dry-run
+
+ +

--dry-run om het aanmaken te testen.

+ +

Apache / httpd

+ +
    +
  • (1) Voeg volgende regels toe aan de apache config:
  • +
+ +
Alias /.well-known /var/www/vhosts/letsencrypt/.well-known
+<Directory /var/www/vhosts/letsencrypt/.well-known>
+  order allow,deny
+  allow from all
+  satisfy any
+</Directory>
+
+ +
    +
  • Of (2) voeg volgende regels toe aan .htaccess:
  • +
+ +
<IfModule mod_rewrite.c>    
+  RewriteEngine on
+  #Allow Let's Encrypt SSL renewal
+  RewriteRule ^.well-known/ - [L,NC]
+  RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/
+  RewriteRule ^/?(.*)        https://%{SERVER_NAME}/$1 [R=301,L]
+
+ +
    +
  • Combineer Basic Auth met Let’s Encrypt:
    +Dit moet je bekijken ale een if/else. (Ofwel valid-user ofwel REQUEST_URI)
  • +
+ +
      <Directory /var/www/vhosts/WEB/ROOT>
+        AuthType Basic
+        AuthName protected
+        AuthUserFile /etc/httpd/passwd/phpmyadmin.htpasswd
+        require valid-user
+        Require expr %{REQUEST_URI} =~ m#^/.well-known/acme-challenge/.*#
+      </Directory>
+
+ +

Nginx

+ +
    +
  • Voeg volgende regels toe aan Nginx
  • +
+ +
  location /.well-known {
+    root      /var/www/vhosts/WEB/ROOT;
+    index     index.html index.htm index.php;
+  }
+
+ +

-

+ +
    +
  • Controleer DNS lijst domeinen:
  • +
+ +
while read LINE;
+do
+	echo $LINE >> list_processed.txt && dig +short @9.9.9.9 $LINE >> list_processed.txt;
+done < list.txt
+
+ +
    +
  • (WIP) +
  • +
+ +
#!/bin/bash
+
+#IP=<%= @default_ipadress %>
+IP=$(dig +short @9.9.9.9 $(hostname))
+FILE=$1
+
+while read LINE
+do
+	CHK=$(dig +short @9.9.9.9 $LINE)
+	if $IP -eq $CHK
+		echo "$LINE|$CHK" >> /tmp/le-ok
+	elif
+		echo "$LINE|$CHK" >> /tmp/le-nok
+	fi
+done < $FILE
+
+echo "Domains OK:"
+echo /tmp/le-ok | column
+echo "-------------------------------"
+echo "Domains NOT OK:"
+echo /tmp/le-nok | column
+
+rm -rf /tmp/le-ok
+rm -rf /tmp/le-nok
+
+ + + + + + + +
+ More Reading + + + +
+ Older// + MySQL Tuner +
+ +
+ +
+ + + + + +
+
+ + + + + + + diff --git a/public/administration/luks-encryption/index.html b/public/administration/luks-encryption/index.html new file mode 100644 index 0000000..4e355ff --- /dev/null +++ b/public/administration/luks-encryption/index.html @@ -0,0 +1,250 @@ + + + + + Luks Encryption // Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + +
+

+ Luks Encryption +

+

+ +

+ + + + + + + + + + + + + + + + + + + + + + + +

Add a new disk (LVM)

+ +
root@server:/dev/centos # for i in /sys/class/scsi_host/host*; do echo "- - -" > $i/scan; done
+root@server:/dev/centos # NEWDISK=$(dmesg|tail|grep 'Attached'|awk '{print $4}'|tail -n1|cut -d "[" -f2|cut -d "]" -f1)
+root@server:/dev/centos # VGROUP=$(vgdisplay|grep Name|head -n1|awk '{print $3}')
+root@server:/dev/centos # echo ${NEWDISK}
+sdd
+root@server:/dev/centos # echo ${VGROUP}
+centos
+root@server:/dev/centos # pvcreate /dev/${NEWDISK}
+Physical volume "/dev/sdd" successfully created.
+root@server:/dev/centos # vgextend ${VGROUP} /dev/${NEWDISK}
+Volume group "centos" successfully extended
+
+ +

Create a logical volume (LVM)

+ +
root@server:/dev/centos # lvcreate -L 15G -n encrypted centos
+Logical volume "encrypted" created. 
+
+ +

Encrypt the partition

+ +
root@server:/dev/centos # cryptsetup -v --verify-passphrase luksFormat /dev/centos/encrypted
+root@server:/dev/mapper # cryptsetup luksOpen /dev/centos/encrypted luks-encrypted
+
+ +

Create a mountpoint

+ +
root@server:/dev/mapper # mkdir /encrypted
+root@server:/dev/mapper # mount /dev/mapper/luks-encrypted /encrypted
+
+ +

Create a key (to auto-mount the encrypted disk)

+ +
root@server:/dev/mapper # dd if=/dev/urandom of=/root/lukskey bs=1024 count=4
+root@server:/dev/mapper # chmod 0400 /root/lukskey
+
+ +

Unmount and add the key

+ +
root@server:/ # umount /encrypted
+root@server:/ # cryptsetup luksClose luks-encrypted
+root@server:/ # cryptsetup luksAddKey /dev/mapper/centos-encrypted /root/lukskey
+
+ +

Get UUID

+ +
root@server:/ # blkid /dev/mapper/centos-encrypted
+/dev/mapper/centos-encrypted: UUID="0dab9a5c-1870-478d-8d74-226eeb512f78" TYPE="crypto_LUKS"
+
+ +

Auto-mount LUKS (edit /etc/cypttab)

+ +
luks-encrypted /dev/disk/by-uuid/0dab9a5c-1870-478d-8d74-226eeb512f78 /root/lukskey luks
+
+ + + + + + + +
+ More Reading + +
+ Newer// + Vue Js +
+ + + +
+ Older// + Administrations +
+ +
+ +
+ + + + + +
+
+ + + + + + + diff --git a/public/administration/mysql_tuner/index.html b/public/administration/mysql_tuner/index.html new file mode 100644 index 0000000..2c8345e --- /dev/null +++ b/public/administration/mysql_tuner/index.html @@ -0,0 +1,307 @@ + + + + + MySQL Tuner // Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Contents + +
+ + +
+

+ MySQL Tuner +

+

+ +

+ + + + + + + + + + + + + + + + +

MySQL Tuner

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
WAARDEACTIE
query_cache_sizeAFBLIJVEN
table_cacheAFBLIJVEN (maximumwaarde = 64)
table_open_cacheAFBLIJVEN
join_buffer_sizeVerhogen indien Joins performed without indexes++
tmp_table_sizeVerhogen = max_heap_table_size
max_heap_table_sizeVerhogen = tmp_table_size
query_cache_type=1 indien =0
+ +
+

mysql tuning improvements +table_cache NOOIT hoger dan 64 +Sudo vim /etc/my.cnf +query_cache_size’ => ‘256M’, +It caches the select query along with the result set, which enables the identical selects to execute faster as the data fetches from the in memory. +Caching voor select queries en bijhorende result sets, wat het mogelijk maakt om identieke selects sneller op te vragen uit memory. +‘open_files_limit’ => ‘4096’, +Changes the number of file descriptors available to mysqld. You should try increasing the value of this option if mysqld gives you the error Too many open files. +‘join_buffer_size’ => ‘256K’, +The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use indexes and thus perform full table scans. Normally, the best way to get fast joins is to add indexes. Increase the value of join_buffer_size to get a faster full join when adding indexes is not possible. +Minimumgrootte van buffer voor index en table scans.

+
+ +
+ +
+

‘max_heap_table_size’ => ‘32M’, +This variable sets the maximum size to which user-created MEMORY tables are permitted to grow. +Max grootte van user-created memory tables +These 2 need to be the same size!!! +‘tmp_table_size’ => ‘32M’, +The maximum size of internal in-memory temporary tables. +Max grootte van interne in-memory tijdelijke tabellen

+
+ +
+ +
+

table_cache=64 (maximumwaarde!!) +Table_Cache should always - well mostly anyway - be significantly bigger than the total number of tables in the server. Otherwise it’ll keep opening and closing tables. +Maximumwaarde voor caching van geopende tabellen. +thread_cache_size=4 +How many threads the server should cache for reuse. +Aantal threads dat de server kan cachen voor hergebruik. +‘innodb_buffer_pool_size’ => ‘1G’, +The size in bytes of the buffer pool, the memory area where InnoDB caches table and index data. The default value is 128MB.

+
+ +

Sudo service mysql/mariadb reload (restart enkel onder toezicht)

+ +
    +
  • query_cache_*:
  • +
+ +
+

query_cache_type
+Needs to be set to 1 to enable caching.
+query_cache_size
+Is the size of the cache. This can be in bytes, or you can use a M suffix to specify the amount of megabytes.
+query_cache_limit
+Is the maximum size of an individually cached query. Queries over this size won’t go into the cache. This is also in bytes, or megabytes with the M suffix. 1MB is a safe bet.
+Maximumgrootte voor elke individuele gecachte query. Queries groter dan dit zullen niet gecacht worden.
+table_open_cache
+Indicates the maximum number of tables the server keeps open

+
+ +
+ +

innodb_buffer_pool_instances=2
+Enables the use of multiple threads for innodb.

+ +

query_cache_type=1
+Enables query caching.

+ +

join_buffer_size=1024K
+Increased the buffer size for non-indexed joins.

+ +

tmp_table_size=64M && max_heap_table_size=64M
+Increased the size for temporary tables.

+ +

join_buffer_size
+Omwille van het aantal JOIN queries uitgevoerd zonder indexes, werd de minimumgrootte van de buffer voor index en table scans verhoogd.

+ +

max_heap_table_size & tmp_table_size
+De maximale grootte van user-created memory tables en van interne in-memory tijdelijke tabellen werd verhoogd.

+ +

thread_cache_size
+Het maximale aantal threads dat de server kan cachen voor hergebruik werd verhoogd.

+ + + + + + + +
+ More Reading + +
+ Newer// + Let's Encrypt +
+ + + +
+ Older// + Windows troubleshooting +
+ +
+ +
+ + + + + +
+
+ + + + + + + diff --git a/public/administration/windows_troubleshooting/index.html b/public/administration/windows_troubleshooting/index.html new file mode 100644 index 0000000..209e3db --- /dev/null +++ b/public/administration/windows_troubleshooting/index.html @@ -0,0 +1,297 @@ + + + + + Windows troubleshooting // Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + +
+

+ Windows troubleshooting +

+

+ +

+ + + + + + + + + + + + + + + + +

Windows troubleshooting

+ +

VRAGEN: ++ openen vanuit ticketing, wachtwoord en gebruiker ++ custom even viewer view? ++ test server?

+ +

EventViewer

+ +

run: eventvwr

+ +
    +
  • custom views
  • +
  • windows + +
      +
    • application (non windows standard, puppet, vmware, mssql, …)
    • +
    • security, aan en afmelden
    • +
    • set-up: updates en installatie verwijderen programma’s
    • +
    • system: OS meldingen
    • +
  • +
  • application and services: diep graven +
    +
  • +
+ +

–> Filter Log:

+ +
    +
  • logged (date range)
  • +
  • event level
  • +
  • event source
  • +
  • event ID: 99,-1024,-4634
  • +
+ +

rechtsonderaan > event copy > copy as text

+ +

PowerShell

+ +
$first = 
+$last = 
+get-eventlog -Logname system -
+
+ +
 `get-winevent -LogName 'Microsoft-Windows-TaskScheduler/Operational' | Where-Object { $_.Message -like ‘*insta* }`
+
+ +

Task Viewer

+ +
    +
  • tasks
  • +
  • users
  • +
  • performance (indien gecrasht, bevestigen anders is het netwerk)
  • +
+ +

Resource monitor

+ +

(task manager > performance > open resouce monitor)

+ +

Overview > CPU (ovenste tab) app aanvinken –> filtert alles

+ +

Netstat

+ +

netstat -abo > C:\temp\log.txt

+ +

Chocolate

+ +

C:\ProgramData\chocolatey\bin\Procmon.exe +–> selecteer lijn+kolom > exclude ‘name’ (=grep -v) / include ‘name’ (=grep)

+ +

Usefull programs

+ +
    +
  • TreeView
  • +
  • VBluescreenviewer
  • +
  • Sysinternals
  • +
  • Zabbix
  • +
  • VMware events
  • +
  • BareTail
  • +
  • choco install
  • +
  • choco list -lo (view choco installed programs)
  • +
  • telnet 12.34.56.78 900
  • +
  • powershell: stop service 'name'
  • +
+ +

EventID’s

+ +
    +
  • Event ID 6005: “The event log service was started.” This is synonymous to system startup.
  • +
  • Event ID 6006: “The event log service was stopped.” This is synonymous to system shutdown.
  • +
  • Event ID 6008: “The previous system shutdown was unexpected.” Records that the system started after it was not shut down properly.
  • +
  • Event ID 6009: Indicates the Windows product name, version, build number, service pack number, and operating system type detected at boot time.
  • + +
  • Event ID 6013: Displays the uptime of the computer. There is no TechNet page for this id. +Add to that a couple more from the Server Fault answers listed in my OP:

  • + +
  • Event ID 1074: “The process X has initiated the restart / shutdown of computer on behalf of user Y for the following reason: Z.” Indicates that an application or a user initiated a restart or shutdown.

  • + +
  • Event ID 1076: “The reason supplied by user X for the last unexpected shutdown of this computer is: Y.” Records when the first user with shutdown privileges logs on to the computer after an unexpected restart or shutdown and supplies a reason for the occurrence.

  • +
+ +

PowerShell

+ +
$filter = "*abbix*"
+get-winevent -logname 'Application'  | Where-Object { $_.Message -like $filter }
+
+ + + + + + + +
+ More Reading + +
+ Newer// + MySQL Tuner +
+ + + + + +
+ +
+ + + + + +
+
+ + + + + + + diff --git a/public/css/lightbox.css b/public/css/lightbox.css new file mode 100644 index 0000000..60cf695 --- /dev/null +++ b/public/css/lightbox.css @@ -0,0 +1,210 @@ +/* Preload images */ +body:after { + content: url(../img/close.png) url(../img/loading.gif) url(../img/prev.png) url(../img/next.png); + display: none; +} + +.lightboxOverlay { + position: absolute; + top: 0; + left: 0; + z-index: 9999; + background-color: black; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + opacity: 0.8; + display: none; +} + +.lightbox { + position: absolute; + left: 0; + width: 100%; + z-index: 10000; + text-align: center; + line-height: 0; + font-weight: normal; +} + +.lightbox .lb-image { + display: block; + height: auto; + max-width: inherit; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.lightbox a img { + border: none; +} + +.lb-outerContainer { + position: relative; + background-color: white; + *zoom: 1; + width: 250px; + height: 250px; + margin: 0 auto; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} + +.lb-outerContainer:after { + content: ""; + display: table; + clear: both; +} + +.lb-container { + padding: 4px; +} + +.lb-loader { + position: absolute; + top: 43%; + left: 0; + height: 25%; + width: 100%; + text-align: center; + line-height: 0; +} + +.lb-cancel { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + background: url(../img/loading.gif) no-repeat; +} + +.lb-nav { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 10; +} + +.lb-container > .nav { + left: 0; +} + +.lb-nav a { + outline: none; + background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='); +} + +.lb-prev, .lb-next { + height: 100%; + cursor: pointer; + display: block; +} + +.lb-nav a.lb-prev { + width: 34%; + left: 0; + float: left; + background: url(../img/prev.png) left 48% no-repeat; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transition: opacity 0.6s; + -moz-transition: opacity 0.6s; + -o-transition: opacity 0.6s; + transition: opacity 0.6s; +} + +.lb-nav a.lb-prev:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +.lb-nav a.lb-next { + width: 64%; + right: 0; + float: right; + background: url(../img/next.png) right 48% no-repeat; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transition: opacity 0.6s; + -moz-transition: opacity 0.6s; + -o-transition: opacity 0.6s; + transition: opacity 0.6s; +} + +.lb-nav a.lb-next:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +.lb-dataContainer { + margin: 0 auto; + padding-top: 5px; + *zoom: 1; + width: 100%; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.lb-dataContainer:after { + content: ""; + display: table; + clear: both; +} + +.lb-data { + padding: 0 4px; + color: #ccc; +} + +.lb-data .lb-details { + width: 85%; + float: left; + text-align: left; + line-height: 1.1em; +} + +.lb-data .lb-caption { + font-size: 13px; + font-weight: bold; + line-height: 1em; +} + +.lb-data .lb-number { + display: block; + clear: left; + padding-bottom: 1em; + font-size: 12px; + color: #999999; +} + +.lb-data .lb-close { + display: block; + float: right; + width: 30px; + height: 30px; + background: url(../img/close.png) top right no-repeat; + text-align: right; + outline: none; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); + opacity: 0.7; + -webkit-transition: opacity 0.2s; + -moz-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + transition: opacity 0.2s; +} + +.lb-data .lb-close:hover { + cursor: pointer; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} diff --git a/public/css/redlounge.css b/public/css/redlounge.css new file mode 100644 index 0000000..266b7c6 --- /dev/null +++ b/public/css/redlounge.css @@ -0,0 +1,499 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + color: #2d303b; +} +html, p, nav, section, article { + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; +} +pre { + padding: 0; +} +p { + color: #2d303b; +} +a { + -o-transition:.5s; + -ms-transition:.5s; + -moz-transition:.5s; + -webkit-transition:.5s; + transition:.5s; + color: #616161; +} +a:hover { + color:#E54028; +} +a:hover, +a:focus { + text-decoration: underline; +} +a.pure-button:hover, a.pure-button:focus { + color: inherit; + text-decoration: none; +} +a.pure-button-primary:hover, a.pure-button-primary:focus { + color: #fff; +} +p a { + color:#7F1000; +} +h1 { + font-family: 'Libre Baskerville', serif; + font-weight: 700; +} +.center { + text-align: center; +} +.red { + color: #E54028; +} +.dark-red { + color: #7F1000; +} +.thin-line { + height: 1px; + border: 0px; + background: #eee; +} + +/* Layout */ +.pure-img-responsive { + max-width: 100%; + height: auto; +} +#layout { + padding: 0; +} +.header { + text-align: center; + top: auto; + margin: 3em auto; +} +.content { + padding: 2em 1em 0; +} + +/* Sidebar */ +h1.brand-title { + font-family: 'Libre Baskerville', serif; + font-weight: 400; + padding-top: 1rem; + font-size: 3rem; + margin-bottom: 0.25rem; +} +h2.brand-tagline { + font-size: 1.4rem; + margin-top: 0.25rem; +} +.sidebar h1.brand-title { + color: #fff; +} +.brand-tagline { + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + font-weight: 200; +} +.sidebar { + background: #2d303b; +} +.sidebar, .sidebar p { + color: #8b8b8b; +} +.sidebar a { + color: #fff; +} +.sidebar a:hover { + color:#E54028; +} + +/* Nav */ +.nav-list { + margin: 0; + padding: 0; + list-style: none; + padding-bottom: 1rem; +} +.nav-item { + display: inline-block; + *display: inline; + zoom: 1; +} +.nav-item a { + background: transparent; + color: #fff; + margin-top: 1rem; + letter-spacing: 0.05rem; + text-transform: uppercase; + font-size: 0.85rem; + text-decoration: none; + margin-right: 0.1rem; + line-height: 1.5rem; +} +.nav-item a:hover, +.nav-item a:focus { + text-decoration: none; +} +.nav-item-separator { + font-weight: 100; + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + color: #E54028; + letter-spacing: -0.35rem; + margin-right: 0.4rem; +} + +/* Nav To Top */ +#nav-to-top { + display: none; + position: fixed; + right: 0; + top: 10px; + padding: 0.5rem 1.5rem 0.5rem 0.5rem; + font-size: 0.85rem; + background: #fff; +} + +/* Posts */ +h1.post-title a { + text-decoration: none; + color: #111111; +} +.post-date { + color: #E54028; + font-family: 'Libre Baskerville', serif; + font-weight: 400; + font-size: 1.0rem; +} +.post-date-day { + font-size: 1.5rem; + margin-right: -0.2rem; +} +.post-date-separator { + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + font-weight: 100; + letter-spacing: -0.35rem; + font-size: 1.9rem; + color: #7F1000; +} +.post-date-month { + font-size: 0.8rem; + color: #7F1000; +} +.post-date-year { + font-size: 0.8rem; + color: #7F1000; +} +a.post-author { + font-size: 0.9rem; + text-decoration: underline; +} +.post-author-single { + font-size: 0.9rem; +} +.post-author-social a { + color: #bbb; +} +.post-author-social a:hover, .post-author-social a:focus { + color: #E54028; +} +.post-author-social i { + font-size: 0.9rem; +} +.post { + padding-bottom: 1.8rem; + line-height: 1.75rem; +} +.post p { + margin-bottom: 1.75rem; + margin-top: 0; +} +.post h3 { + margin-bottom: .25rem; + font-size: 1.4rem; + color: #7F1000; + font-weight: 500; +} +.post h3.post-subtitle { + font-weight: 200; + color: #999; +} +.post table { + margin-bottom: 1.75rem; + margin-top: 0; +} +.post-title { + font-size: 2rem; + color: #222; + margin-bottom: 0.25rem; +} +.post-subtitle { + font-size: 1.5rem; + margin: 0; + font-weight: 200; + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + color: #999; +} +.post-reading-time { + display: inline; + font-size: 0.65rem; + color: #aeaeae; +} +.post-avatar-wrapper { + width: 50px; + height: 50px; + border-radius: 50px; + overflow: hidden; + margin-left: 1rem; + float: right; +} +.post-avatar { + height: 50px; +} +.post-summary { + margin-top: 0.5rem; +} +.read-more-link { + float: right; + clear: left; + margin-top: 0.25rem; +} +.read-more-link a { + text-decoration: none; + /*text-transform: uppercase;*/ + font-weight: 400; + font-size: 0.9rem; + color: #7F1000; +} +.read-more-link a:hover, .read-more-link a:focus { + color: #E54028; +} +.read-more-slashes { + font-weight: 100; + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + color: #E54028; + letter-spacing: -0.26rem; + margin-right: 0.3rem; +} + +.post-description { + color: #444; + line-height: 1.8rem; +} +.post-meta { + color: #2d303b; + font-size: 90%; + margin: 0; +} +p.post-meta { + margin-bottom: 0; +} +.post-meta a { + color: #616161; +} +.post-meta a:hover { + color: #E54028; +} +.post-categories { + clear: left; +} +.post-category { + margin: 0 0.1rem; + padding: 0.2rem 0.5rem; + color: #fff; + background: #999; + font-size: 0.75rem; +} +a.post-category { + text-decoration: none; +} +a.post-category:hover { + color: #fff; + text-decoration: underline; +} + +/* Banner Image */ +.content-banner-image { + overflow: hidden; +} +.content-banner-image-inline { + float: right; + margin: 0.5rem 0 1.5rem 2rem; +} + +/* Social Sharing */ +.social-sharing { + clear: left; + padding-left: 2px; + margin-top: 0.75rem; + margin-bottom: 0.75rem; +} +.social-sharing a { + padding: 0.4rem; + background: #ccc; + color: #fff; + text-align: center; +} +.social-sharing a i { + width: 16px; +} +.social-sharing a i span { + display: none; +} +.social-sharing a.share-button-twitter:hover { + background: #00aced; +} +.social-sharing a.share-button-facebook:hover { + background: #3b5998; +} +.social-sharing a.share-button-linkedin:hover { + background: #007bb6; +} +.social-sharing a.share-button-google-plus:hover { + background: #dd4b39; +} +.social-sharing a.share-button-pinterest:hover { + background: #cb2027; +} +.social-sharing a.share-button-vk:hover { + background: #45668e; +} + +/* Tags */ +.tags-list { + clear: left; + margin-bottom: 0.75rem; + font-size: 0.85rem; + color: #999; +} + +/* Decorative Marker */ +.decorative-marker { + color: #E54028; + letter-spacing: -0.25rem; + margin-right: 0.4rem; + margin-lefT: 0.1rem; +} + +/* Paging */ +.paging { + margin-bottom: 0.75rem; +} +.paging, .paging-older, .paging-newer { + clear: left; + font-size: 0.85rem; +} +.paging-older, .paging-newer { + margin-bottom: 0.25rem; +} +.paging-label { + color: #999; + font-style: italic; +} + +/* ToC */ +#toc { + float: right; + padding: 0 1rem 1rem 1rem; + border-left: 1px solid #eee; + font-size: 0.9rem; +} +nav#TableOfContents li { + padding-bottom: 0.25rem; +} +nav#TableOfContents ul:first-child { + padding-left: 0px; +} +.toc-label { + font-size: 0.8rem; + color: #aeaeae; +} + +/* Footer */ +.footer { + text-align: center; + padding: 1rem 0; + font-weight: 100; + color: #aeaeae; + font-size: 0.7rem; +} +.footer a, .footer p { + color: #aeaeae; +} +.footer a { + text-decoration: none; +} +.footer a:hover { + color:#E54028; + text-decoration: underline; +} +.footer .pure-menu a:hover, +.footer .pure-menu a:focus { + background: none; +} +ul.footer-menu { + list-style: none; + display: block; + text-align:center; + margin: 0; + padding: 0; +} +.footer-menu li { + display: inline-block; + margin-right: 0.5rem; + font-size: 0.8rem; +} +hr.thin { + height: 1px; + border: 0; + color: #eee; + background-color: #eee; + width: 90%; +} + +@media (max-width: 1024px) { + h1.brand-title { + font-size: 2.5rem; + } + h2.brand-tagline { + font-size: 1.2rem; + } + + .header>.sidebarphoto{ + width:160px; + height:160px; + border-radius: 50%; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + } +} + +@media (min-width: 48rem) { + .content { + padding: 2rem 3rem 0; + margin-left: 25%; + } + + .content-banner-image { + margin-left: 25%; + } + + .header { + margin: 30% 2rem 0; + text-align: right; + } + + .header>.sidebarphoto{ + width:160px; + height:160px; + border-radius: 50%; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + } + + .sidebar { + position: fixed; + top: 0; + bottom: 0; + } +} diff --git a/public/css/rrssb.css b/public/css/rrssb.css new file mode 100644 index 0000000..8611534 --- /dev/null +++ b/public/css/rrssb.css @@ -0,0 +1 @@ +.rrssb-buttons.large-format li a,.rrssb-buttons.large-format li a .text{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden}.rrssb-buttons,.rrssb-buttons li,.rrssb-buttons li a{-moz-box-sizing:border-box;box-sizing:border-box}.clearfix{*zoom:1}.clearfix:after{clear:both}.clearfix:before,.clearfix:after{content:" ";display:table}.rrssb-buttons{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;height:36px;margin:0;padding:0;width:100%}.rrssb-buttons li{float:left;height:100%;list-style:none;margin:0;padding:0 2.5px;line-height:13px}.rrssb-buttons li.email a{background-color:#0a88ff}.rrssb-buttons li.email a:hover{background-color:#006ed6}.rrssb-buttons li.facebook a{background-color:#306199}.rrssb-buttons li.facebook a:hover{background-color:#244872}.rrssb-buttons li.tumblr a{background-color:#32506d}.rrssb-buttons li.tumblr a:hover{background-color:#22364a}.rrssb-buttons li.linkedin a{background-color:#007bb6}.rrssb-buttons li.linkedin a:hover{background-color:#005983}.rrssb-buttons li.twitter a{background-color:#26c4f1}.rrssb-buttons li.twitter a:hover{background-color:#0eaad6}.rrssb-buttons li.googleplus a{background-color:#e93f2e}.rrssb-buttons li.googleplus a:hover{background-color:#ce2616}.rrssb-buttons li.youtube a{background-color:#df1c31}.rrssb-buttons li.youtube a:hover{background-color:#b21627}.rrssb-buttons li.reddit a{background-color:#8bbbe3}.rrssb-buttons li.reddit a:hover{background-color:#62a3d9}.rrssb-buttons li.pinterest a{background-color:#b81621}.rrssb-buttons li.pinterest a:hover{background-color:#8a1119}.rrssb-buttons li.pocket a{background-color:#ed4054}.rrssb-buttons li.pocket a:hover{background-color:#e4162d}.rrssb-buttons li.github a{background-color:#444}.rrssb-buttons li.github a:hover{background-color:#2b2b2b}.rrssb-buttons li a{background-color:#ccc;border-radius:2px;display:block;font-size:11px;font-weight:bold;height:100%;padding:11px 7px 12px 27px;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:100%;-webkit-transition:background-color 0.2s ease-in-out;-moz-transition:background-color 0.2s ease-in-out;-o-transition:background-color 0.2s ease-in-out;transition:background-color 0.2s ease-in-out}.rrssb-buttons li a .icon{display:block;height:100%;left:10px;padding-top:9px;position:absolute;top:0;width:10%}.rrssb-buttons li a .icon svg{height:17px;width:17px}.rrssb-buttons li a .icon svg path,.rrssb-buttons li a .icon svg polygon{fill:#fff}.rrssb-buttons li a .text{color:#fff}.rrssb-buttons li a:active{box-shadow:inset 1px 3px 15px 0 rgba(22,0,0,0.25)}.rrssb-buttons li.small a{padding:0}.rrssb-buttons li.small a .icon{height:100%;left:auto;margin:0 auto;overflow:hidden;position:relative;top:auto;width:100%}.rrssb-buttons li.small a .text{visibility:hidden}.rrssb-buttons.large-format{height:auto}.rrssb-buttons.large-format li{height:auto}.rrssb-buttons.large-format li a{font-size:15px;font-size:1vw;padding:7% 0% 7% 12%;border-radius:0.2em;line-height:1vw}.rrssb-buttons.large-format li a .icon{left:7%;padding-top:0;width:12%}.rrssb-buttons.large-format li a .icon svg{height:100%;width:100%}.rrssb-buttons.large-format li a .text{font-size:15px;font-size:1vw}.rrssb-buttons.large-format li a:hover{font-size:15px;font-size:1vw;padding:7% 0% 7% 12%;border-radius:0.2em}.rrssb-buttons.small-format{padding-top:5px}.rrssb-buttons.small-format li{height:80%;padding:0 1.5px}.rrssb-buttons.small-format li a .icon{height:100%;padding-top:0}.rrssb-buttons.small-format li a .icon svg{height:48%;position:relative;top:6px;width:80%}.rrssb-buttons.tiny-format{height:22px;position:relative}.rrssb-buttons.tiny-format li{padding-right:7px}.rrssb-buttons.tiny-format li a{background-color:transparent;padding:0}.rrssb-buttons.tiny-format li a .icon svg{height:70%;width:100%}.rrssb-buttons.tiny-format li a:hover,.rrssb-buttons.tiny-format li a:active{background-color:transparent}.rrssb-buttons.tiny-format li.email a .icon svg path,.rrssb-buttons.tiny-format li.email a .icon svg polygon{fill:#0a88ff}.rrssb-buttons.tiny-format li.email a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.email a .icon:hover .icon svg polygon{fill:#0054a3}.rrssb-buttons.tiny-format li.facebook a .icon svg path,.rrssb-buttons.tiny-format li.facebook a .icon svg polygon{fill:#306199}.rrssb-buttons.tiny-format li.facebook a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.facebook a .icon:hover .icon svg polygon{fill:#18304b}.rrssb-buttons.tiny-format li.tumblr a .icon svg path,.rrssb-buttons.tiny-format li.tumblr a .icon svg polygon{fill:#32506d}.rrssb-buttons.tiny-format li.tumblr a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.tumblr a .icon:hover .icon svg polygon{fill:#121d27}.rrssb-buttons.tiny-format li.linkedin a .icon svg path,.rrssb-buttons.tiny-format li.linkedin a .icon svg polygon{fill:#007bb6}.rrssb-buttons.tiny-format li.linkedin a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.linkedin a .icon:hover .icon svg polygon{fill:#003650}.rrssb-buttons.tiny-format li.twitter a .icon svg path,.rrssb-buttons.tiny-format li.twitter a .icon svg polygon{fill:#26c4f1}.rrssb-buttons.tiny-format li.twitter a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.twitter a .icon:hover .icon svg polygon{fill:#0b84a6}.rrssb-buttons.tiny-format li.googleplus a .icon svg path,.rrssb-buttons.tiny-format li.googleplus a .icon svg polygon{fill:#e93f2e}.rrssb-buttons.tiny-format li.googleplus a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.googleplus a .icon:hover .icon svg polygon{fill:#a01e11}.rrssb-buttons.tiny-format li.youtube a .icon svg path,.rrssb-buttons.tiny-format li.youtube a .icon svg polygon{fill:#df1c31}.rrssb-buttons.tiny-format li.youtube a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.youtube a .icon:hover .icon svg polygon{fill:#84111d}.rrssb-buttons.tiny-format li.reddit a .icon svg path,.rrssb-buttons.tiny-format li.reddit a .icon svg polygon{fill:#8bbbe3}.rrssb-buttons.tiny-format li.reddit a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.reddit a .icon:hover .icon svg polygon{fill:#398bcf}.rrssb-buttons.tiny-format li.pinterest a .icon svg path,.rrssb-buttons.tiny-format li.pinterest a .icon svg polygon{fill:#b81621}.rrssb-buttons.tiny-format li.pinterest a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.pinterest a .icon:hover .icon svg polygon{fill:#5d0b11}.rrssb-buttons.tiny-format li.pocket a .icon svg path,.rrssb-buttons.tiny-format li.pocket a .icon svg polygon{fill:#ed4054}.rrssb-buttons.tiny-format li.pocket a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.pocket a .icon:hover .icon svg polygon{fill:#b61124}.rrssb-buttons.tiny-format li.github a .icon svg path,.rrssb-buttons.tiny-format li.github a .icon svg polygon{fill:#444}.rrssb-buttons.tiny-format li.github a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.github a .icon:hover .icon svg polygon{fill:#111} diff --git a/public/css/screen.css b/public/css/screen.css new file mode 100644 index 0000000..4af5642 --- /dev/null +++ b/public/css/screen.css @@ -0,0 +1 @@ +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{background:#fff;color:#000;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:0.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type='button'],input[type='reset'],input[type='submit']{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type='checkbox'],input[type='radio']{box-sizing:border-box;padding:0}input[type='search']{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type='search']::-webkit-search-cancel-button,input[type='search']::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}html{font:100%/1.5 "Karla","lucida grande",sans-serif,sans-serif;font-weight:400}@media (min-width: 40rem){html{font-size:106%}}@media (min-width: 64rem){html{font-size:112%}}body{color:#777;background-color:#fff}h1,h2,h3,h4,h5{color:#222;line-height:1.2em;font-family:"Montserrat","Helvetica",sans-serif;font-weight:600}h1{font-size:3.5rem;margin:0 0 0.2em 0}@media (min-width: 40rem){h1{font-size:4.5rem}}@media (min-width: 64rem){h1{font-size:5rem}}h2{color:#e67e39;margin-bottom:1.5rem;font-size:1.5rem;text-transform:uppercase}@media (min-width: 40rem){h2{font-size:2rem}}h3{font-size:1.2rem;margin-bottom:0.5rem}blockquote{margin:0}blockquote p{color:#bbb;font-style:italic;margin-bottom:1.5rem}cite{color:#bbb}p{margin:0 auto 2em auto;text-align:left}.lead{max-width:45rem;font-size:1.25rem}ol{list-style-type:decimal}ul,ol{margin:0 0 1.25em 0}li{margin-bottom:2em}li.last-list-item{border-bottom:none}dt{font-weight:bold}dd{margin-bottom:1.625em}strong{font-weight:bold}i{font-style:italic}em{font-style:normal}a{color:#4ae;text-decoration:none}a:hover{text-decoration:underline}::-moz-selection,::selection{background:#e67e39;color:#fff}.sub-point{display:block;font-size:0.75rem}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;padding:0;background:#fff}section{border-top:2px solid #f2f2f2;text-align:center;padding:2rem 0}section:first-of-type{border-top:none}@media (min-width: 40rem){section{padding:4rem 0}}.container{margin:0 auto;max-width:40rem;width:90%}.row{*zoom:1}.row:after{content:"";display:table;clear:both}header{padding:2rem 0;background-color:#f7f7f7;text-align:center}header p{text-align:center}.example-image-link{display:inline-block;padding:4px;margin:0 0.5rem 1rem 0.5rem;background-color:#fff;line-height:0;-webkit-transition:background-color 0.1s ease-out;-moz-transition:background-color 0.1s ease-out;-o-transition:background-color 0.1s ease-out;transition:background-color 0.1s ease-out;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px}.example-image-link:hover{background-color:#4ae}.example-image{width:7rem;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.how-to-use-section p,.how-to-use-section ol,.how-to-use-section ul,.how-to-use-section pre{text-align:left}fieldset{border:none}.donate-button{width:100%}@media (min-width: 40rem){.donate-button{width:auto}}footer{padding:2rem 0;background-color:#f7f7f7;text-align:center}footer p{text-align:center}footer .button{margin-top:0.5rem}.sharing-section{position:fixed;z-index:10;top:20px;right:0}code{color:#777;background-color:#f2f2f2;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;font-family:Consolas,Courier,monospace;font-size:0.9rem;padding:0.1rem 0.3rem;position:relative;top:-1px}pre{background-color:#f2f2f2;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;padding:0 0.5rem 0.1rem 0.5rem}pre code{padding:0;font-size:0.7rem;border:none}.column{margin-bottom:1.5rem}@media (min-width: 40rem){.column{float:left;margin:0;padding-left:1rem;padding-right:1rem}.column.full{width:100%}.column.two-thirds{width:66.7%}.column.half{width:50%}.column.third{width:33.3%}.column.fourth{width:24.95%}.column.flow-opposite{float:right}}ul{margin:0;text-align:left}@media (min-width: 40rem){ul{display:inline-block}}.button{display:block;padding:0.7rem 2rem;margin-bottom:0.5rem;border:none;color:#fff;background-color:#4ae;font-size:1.2rem;font-weight:bold;text-transform:uppercase;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;vertical-align:middle;white-space:nowrap}.button:hover{background:#1595ea;text-decoration:none}@media (min-width: 40rem){.button{display:inline-block;margin:0 0.25rem}}.button-minor{padding:0.35rem 1rem;border:2px solid #4ae;color:#4ae;background-color:transparent;font-size:0.8rem}.button-minor:hover{color:#fff}hr{border:0;border-top:2px solid #f2f2f2;margin:2rem auto;width:3rem}@media (min-width: 40rem){hr{margin:2.5rem auto}} diff --git a/public/development/index.html b/public/development/index.html new file mode 100644 index 0000000..f2da85f --- /dev/null +++ b/public/development/index.html @@ -0,0 +1,136 @@ + + + + + Developments // Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ +
+
+ +

+ Vue Js +

+
+ + + + +

Awesomeness about VueJS

+ + +
+ +
+ + +
+
+ + + diff --git a/public/development/index.xml b/public/development/index.xml new file mode 100644 index 0000000..e0dca8f --- /dev/null +++ b/public/development/index.xml @@ -0,0 +1,25 @@ + + + + Developments on Hagfi.sh + https://hagfi.sh/development/index.xml + Recent content in Developments on Hagfi.sh + Hugo -- gohugo.io + en-us + Thu, 23 Aug 2018 22:44:46 +0200 + + + + Vue Js + https://hagfi.sh/development/vue-js/ + Thu, 23 Aug 2018 22:44:46 +0200 + + https://hagfi.sh/development/vue-js/ + + +<h2 id="awesomeness-about-vuejs">Awesomeness about VueJS</h2> + + + + + \ No newline at end of file diff --git a/public/development/vue-js/index.html b/public/development/vue-js/index.html new file mode 100644 index 0000000..ea920b6 --- /dev/null +++ b/public/development/vue-js/index.html @@ -0,0 +1,181 @@ + + + + + Vue Js // Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Contents + +
+ + +
+

+ Vue Js +

+

+ +

+ + + + + + + + + + + + + + + + +

Awesomeness about VueJS

+ + + + + + + +
+ More Reading + + + + + +
+ Older// + Luks Encryption +
+ +
+ +
+ + + + + +
+
+ + + + + + + diff --git a/public/img/close.png b/public/img/close.png new file mode 100644 index 0000000000000000000000000000000000000000..20baa1db5fdf9e22655a0f851c4401d36b9e7ef9 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i3?z4Pv7`ejn*g5>*Z=?j1DSvS{%vY%YG`Nx zvLV3R+Z)1I1qQoz?eg;S^6>Bg3hv&$d*{xbK#iaC4$A=f!X-g|!3vbDHnnh5Xg#OL;K8su!;fw4MC7hH<+BPou~5EnOggc)I$z JtaD0e0ssdsYEA$E literal 0 HcmV?d00001 diff --git a/public/img/favicon.png b/public/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..84cce4dd307a78a3a9455c4fed62b49b9c7e61ad GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%MS8k8hE&{2x^n4K(gM|lqy>f&TN57WCL9#mRrOU%@9M2v zw~lByu=VViq&Z7-h83rlMDLS8?zSQ~WwmG?M|puWCl{~GxYDGU!#GW<*Dv&0hD=YC eg9!tN0mC+9$z85`0v~~vFnGH9xvX%Dcb>C}3 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 S-YhKu0000 + + + + Hagfi.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + +
+
+ +

+ Let's Encrypt +

+
+ + +
+ Let’s Encrypt: Aanmaken / vernieuwen certificaat: /opt/letsencrypt/letsencrypt-auto certonly --expand ---email support@nucleus.be --agree-tos --webroot -w /var/www/vhosts/WEB/ROOT -d domain.tld -d domainalias.tld --dry-run /bin/certbot --text --agree-tos --non-interactive certonly -a webroot --webroot-path /var/www/vhosts/WEB/ROOT -d domain.tld -d domainalias.tld --dry-run --dry-run om het aanmaken te testen. +Apache / httpd (1) Voeg volgende regels toe aan de apache config: Alias /.well-known /var/www/vhosts/letsencrypt/.well-known <Directory /var/www/vhosts/letsencrypt/.well-known> order allow,deny allow from all satisfy any </Directory> Of (2) voeg volgende regels toe aan . +
+ + +
+ +
+
+ +

+ MySQL Tuner +

+
+ + +
+ MySQL Tuner WAARDE ACTIE query_cache_size AFBLIJVEN table_cache AFBLIJVEN (maximumwaarde = 64) table_open_cache AFBLIJVEN join_buffer_size Verhogen indien Joins performed without indexes++ tmp_table_size Verhogen = max_heap_table_size max_heap_table_size Verhogen = tmp_table_size query_cache_type =1 indien =0 mysql tuning improvements table_cache NOOIT hoger dan 64 Sudo vim /etc/my.cnf query_cache_size’ => ‘256M’, It caches the select query along with the result set, which enables the identical selects to execute faster as the data fetches from the in memory. +
+ + +
+ +
+
+ +

+ Windows troubleshooting +

+
+ + +
+ Windows troubleshooting VRAGEN: + openen vanuit ticketing, wachtwoord en gebruiker + custom even viewer view? + test server? +EventViewer run: eventvwr + custom views windows application (non windows standard, puppet, vmware, mssql, …) security, aan en afmelden set-up: updates en installatie verwijderen programma’s system: OS meldingen application and services: diep graven –> Filter Log: + logged (date range) + event level + event source + event ID: 99,-1024,-4634 +
+ + +
+ +
+
+ +

+ Dont Let Your Application Interfere With Letsencrypt +

+
+ + + + +

Tips and tricks to keep letsencrypt working

+ + +
+ +
+
+ +

+ Vue Js +

+
+ + + + +

Awesomeness about VueJS

+ + +
+ +
+
+ +

+ Luks Encryption +

+
+ + +
+ Add a new disk (LVM) root@server:/dev/centos # for i in /sys/class/scsi_host/host*; do echo "- - -" > $i/scan; done root@server:/dev/centos # NEWDISK=$(dmesg|tail|grep 'Attached'|awk '{print $4}'|tail -n1|cut -d "[" -f2|cut -d "]" -f1) root@server:/dev/centos # VGROUP=$(vgdisplay|grep Name|head -n1|awk '{print $3}') root@server:/dev/centos # echo ${NEWDISK} sdd root@server:/dev/centos # echo ${VGROUP} centos root@server:/dev/centos # pvcreate /dev/${NEWDISK} Physical volume "/dev/sdd" successfully created. root@server:/dev/centos # vgextend ${VGROUP} /dev/${NEWDISK} Volume group "centos" successfully extended Create a logical volume (LVM) root@server:/dev/centos # lvcreate -L 15G -n encrypted centos Logical volume "encrypted" created. +
+ + +
+ +
+ + +
+
+ + + diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 0000000..83e17f0 --- /dev/null +++ b/public/index.xml @@ -0,0 +1,495 @@ + + + + Hagfi.sh + https://hagfi.sh/index.xml + Recent content on Hagfi.sh + Hugo -- gohugo.io + en-us + Sat, 25 Aug 2018 22:08:15 +0200 + + + + Let's Encrypt + https://hagfi.sh/administration/letsencrypt/ + Sat, 25 Aug 2018 22:08:15 +0200 + + https://hagfi.sh/administration/letsencrypt/ + + +<h2 id="let-s-encrypt">Let&rsquo;s Encrypt:</h2> + +<ul> +<li>Aanmaken / vernieuwen certificaat:</li> +</ul> + +<pre><code>/opt/letsencrypt/letsencrypt-auto certonly + --expand + ---email support@nucleus.be + --agree-tos + --webroot + -w /var/www/vhosts/WEB/ROOT + -d domain.tld + -d domainalias.tld + --dry-run +</code></pre> + +<pre><code>/bin/certbot + --text + --agree-tos + --non-interactive + certonly + -a webroot + --webroot-path /var/www/vhosts/WEB/ROOT + -d domain.tld + -d domainalias.tld + --dry-run +</code></pre> + +<p><code>--dry-run</code> om het aanmaken te testen.</p> + +<h3 id="apache-httpd">Apache / httpd</h3> + +<ul> +<li>(1) Voeg volgende regels toe aan de apache config:</li> +</ul> + +<pre><code>Alias /.well-known /var/www/vhosts/letsencrypt/.well-known +&lt;Directory /var/www/vhosts/letsencrypt/.well-known&gt; + order allow,deny + allow from all + satisfy any +&lt;/Directory&gt; +</code></pre> + +<ul> +<li>Of (2) voeg volgende regels toe aan .htaccess:</li> +</ul> + +<pre><code>&lt;IfModule mod_rewrite.c&gt; + RewriteEngine on + #Allow Let's Encrypt SSL renewal + RewriteRule ^.well-known/ - [L,NC] + RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/ + RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L] +</code></pre> + +<ul> +<li>Combineer Basic Auth met Let&rsquo;s Encrypt:<br /> +<em>Dit moet je bekijken ale een if/else. (Ofwel valid-user ofwel REQUEST_URI)</em></li> +</ul> + +<pre><code> &lt;Directory /var/www/vhosts/WEB/ROOT&gt; + AuthType Basic + AuthName protected + AuthUserFile /etc/httpd/passwd/phpmyadmin.htpasswd + require valid-user + Require expr %{REQUEST_URI} =~ m#^/.well-known/acme-challenge/.*# + &lt;/Directory&gt; +</code></pre> + +<h3 id="nginx">Nginx</h3> + +<ul> +<li>Voeg volgende regels toe aan Nginx</li> +</ul> + +<pre><code> location /.well-known { + root /var/www/vhosts/WEB/ROOT; + index index.html index.htm index.php; + } +</code></pre> + +<p>-</p> + +<ul> +<li>Controleer DNS lijst domeinen:</li> +</ul> + +<pre><code>while read LINE; +do + echo $LINE &gt;&gt; list_processed.txt &amp;&amp; dig +short @9.9.9.9 $LINE &gt;&gt; list_processed.txt; +done &lt; list.txt +</code></pre> + +<ul> +<li>(WIP) +<br /></li> +</ul> + +<pre><code>#!/bin/bash + +#IP=&lt;%= @default_ipadress %&gt; +IP=$(dig +short @9.9.9.9 $(hostname)) +FILE=$1 + +while read LINE +do + CHK=$(dig +short @9.9.9.9 $LINE) + if $IP -eq $CHK + echo &quot;$LINE|$CHK&quot; &gt;&gt; /tmp/le-ok + elif + echo &quot;$LINE|$CHK&quot; &gt;&gt; /tmp/le-nok + fi +done &lt; $FILE + +echo &quot;Domains OK:&quot; +echo /tmp/le-ok | column +echo &quot;-------------------------------&quot; +echo &quot;Domains NOT OK:&quot; +echo /tmp/le-nok | column + +rm -rf /tmp/le-ok +rm -rf /tmp/le-nok +</code></pre> + + + + + MySQL Tuner + https://hagfi.sh/administration/mysql_tuner/ + Sat, 25 Aug 2018 22:08:15 +0200 + + https://hagfi.sh/administration/mysql_tuner/ + + +<h2 id="mysql-tuner">MySQL Tuner</h2> + +<table> +<thead> +<tr> +<th>WAARDE</th> +<th>ACTIE</th> +</tr> +</thead> + +<tbody> +<tr> +<td><code>query_cache_size</code></td> +<td>AFBLIJVEN</td> +</tr> + +<tr> +<td><code>table_cache</code></td> +<td>AFBLIJVEN <em>(maximumwaarde = 64)</em></td> +</tr> + +<tr> +<td><code>table_open_cache</code></td> +<td>AFBLIJVEN</td> +</tr> + +<tr> +<td><code>join_buffer_size</code></td> +<td>Verhogen indien <code>Joins performed without indexes++</code></td> +</tr> + +<tr> +<td><code>tmp_table_size</code></td> +<td>Verhogen = <code>max_heap_table_size</code></td> +</tr> + +<tr> +<td><code>max_heap_table_size</code></td> +<td>Verhogen <code>= tmp_table_size</code></td> +</tr> + +<tr> +<td><code>query_cache_type</code></td> +<td><code>=1</code> indien <code>=0</code></td> +</tr> +</tbody> +</table> + +<blockquote> +<p>mysql tuning improvements +<code>table_cache</code> NOOIT hoger dan 64 +Sudo vim /etc/my.cnf +query_cache_size&rsquo; =&gt; &lsquo;256M’, +It caches the select query along with the result set, which enables the identical selects to execute faster as the data fetches from the in memory. +Caching voor select queries en bijhorende result sets, wat het mogelijk maakt om identieke selects sneller op te vragen uit memory. +&lsquo;open_files_limit&rsquo; =&gt; &lsquo;4096&rsquo;, +Changes the number of file descriptors available to mysqld. You should try increasing the value of this option if mysqld gives you the error Too many open files. +&lsquo;join_buffer_size&rsquo; =&gt; &lsquo;256K’, +The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use indexes and thus perform full table scans. Normally, the best way to get fast joins is to add indexes. Increase the value of join_buffer_size to get a faster full join when adding indexes is not possible. +Minimumgrootte van buffer voor index en table scans.</p> +</blockquote> + +<hr /> + +<blockquote> +<p>&lsquo;max_heap_table_size&rsquo; =&gt; &lsquo;32M’, +This variable sets the maximum size to which user-created MEMORY tables are permitted to grow. +Max grootte van user-created memory tables +These 2 need to be the same size!!! +&lsquo;tmp_table_size&rsquo; =&gt; &lsquo;32M’, +The maximum size of internal in-memory temporary tables. +Max grootte van interne in-memory tijdelijke tabellen</p> +</blockquote> + +<hr /> + +<blockquote> +<p>table_cache=64 (maximumwaarde!!) +Table_Cache should always - well mostly anyway - be significantly bigger than the total number of tables in the server. Otherwise it&rsquo;ll keep opening and closing tables. +Maximumwaarde voor caching van geopende tabellen. +thread_cache_size=4 +How many threads the server should cache for reuse. +Aantal threads dat de server kan cachen voor hergebruik. +&lsquo;innodb_buffer_pool_size&rsquo; =&gt; &lsquo;1G&rsquo;, +The size in bytes of the buffer pool, the memory area where InnoDB caches table and index data. The default value is 128MB.</p> +</blockquote> + +<p>Sudo service mysql/mariadb reload (restart enkel onder toezicht)</p> + +<ul> +<li><code>query_cache_*</code>:</li> +</ul> + +<blockquote> +<p><code>query_cache_type</code><br /> +Needs to be set to 1 to enable caching.<br /> +<code>query_cache_size</code><br /> +Is the size of the cache. This can be in bytes, or you can use a M suffix to specify the amount of megabytes.<br /> +<code>query_cache_limit</code><br /> +Is the maximum size of an individually cached query. Queries over this size won’t go into the cache. This is also in bytes, or megabytes with the M suffix. 1MB is a safe bet.<br /> +Maximumgrootte voor elke individuele gecachte query. Queries groter dan dit zullen niet gecacht worden.<br /> +<code>table_open_cache</code><br /> +Indicates the maximum number of tables the server keeps open</p> +</blockquote> + +<hr /> + +<p><code>innodb_buffer_pool_instances=2</code><br /> +<em>Enables the use of multiple threads for innodb.</em></p> + +<p><code>query_cache_type=1</code><br /> +<em>Enables query caching.</em></p> + +<p><code>join_buffer_size=1024K</code><br /> +<em>Increased the buffer size for non-indexed joins.</em></p> + +<p><code>tmp_table_size=64M &amp;&amp; max_heap_table_size=64M</code><br /> +<em>Increased the size for temporary tables.</em></p> + +<p><code>join_buffer_size</code><br /> +<em>Omwille van het aantal JOIN queries uitgevoerd zonder indexes, werd de minimumgrootte van de buffer voor index en table scans verhoogd.</em></p> + +<p><code>max_heap_table_size &amp; tmp_table_size</code><br /> +<em>De maximale grootte van user-created memory tables en van interne in-memory tijdelijke tabellen werd verhoogd.</em></p> + +<p><code>thread_cache_size</code><br /> +<em>Het maximale aantal threads dat de server kan cachen voor hergebruik werd verhoogd.</em></p> + + + + + Windows troubleshooting + https://hagfi.sh/administration/windows_troubleshooting/ + Sat, 25 Aug 2018 22:08:15 +0200 + + https://hagfi.sh/administration/windows_troubleshooting/ + + +<h2 id="windows-troubleshooting">Windows troubleshooting</h2> + +<p>VRAGEN: ++ openen vanuit ticketing, wachtwoord en gebruiker ++ custom even viewer view? ++ test server?</p> + +<h3 id="eventviewer"><em>EventViewer</em></h3> + +<p>run: eventvwr</p> + +<ul> +<li>custom views</li> +<li>windows + +<ul> +<li>application (non windows standard, puppet, vmware, mssql, &hellip;)</li> +<li>security, aan en afmelden</li> +<li>set-up: updates en installatie verwijderen programma&rsquo;s</li> +<li>system: OS meldingen</li> +</ul></li> +<li>application and services: diep graven +<br /> +<br /></li> +</ul> + +<p>&ndash;&gt; Filter Log:</p> + +<ul> +<li>logged (date range)<br /></li> +<li>event level<br /></li> +<li>event source<br /></li> +<li>event ID: 99,-1024,-4634<br /></li> +</ul> + +<p>rechtsonderaan &gt; event copy &gt; copy as text</p> + +<h3 id="powershell"><em>PowerShell</em></h3> + +<pre><code class="language-PowerShell">$first = +$last = +get-eventlog -Logname system - +</code></pre> + +<pre><code class="language-PowerShell"> `get-winevent -LogName 'Microsoft-Windows-TaskScheduler/Operational' | Where-Object { $_.Message -like ‘*insta* }` +</code></pre> + +<h3 id="task-viewer"><em>Task Viewer</em></h3> + +<ul> +<li>tasks</li> +<li>users</li> +<li>performance (indien gecrasht, bevestigen anders is het netwerk)</li> +</ul> + +<h3 id="resource-monitor"><em>Resource monitor</em></h3> + +<p>(task manager &gt; performance &gt; open resouce monitor)</p> + +<p>Overview &gt; CPU (ovenste tab) app aanvinken &ndash;&gt; filtert alles</p> + +<h3 id="netstat"><em>Netstat</em></h3> + +<p><code>netstat -abo &gt; C:\temp\log.txt</code></p> + +<h3 id="chocolate"><em>Chocolate</em></h3> + +<p>C:\ProgramData\chocolatey\bin\Procmon.exe +&ndash;&gt; selecteer lijn+kolom &gt; exclude &lsquo;name&rsquo; (=grep -v) / include &lsquo;name&rsquo; (=grep)</p> + +<h3 id="usefull-programs"><em>Usefull programs</em></h3> + +<ul> +<li>TreeView</li> +<li>VBluescreenviewer</li> +<li>Sysinternals</li> +<li>Zabbix</li> +<li>VMware events</li> +<li>BareTail</li> +<li>choco install</li> +<li>choco list -lo (view choco installed programs)</li> +<li>telnet 12.34.56.78 900</li> +<li>powershell: <code>stop service 'name'</code></li> +</ul> + +<h3 id="eventid-s"><em>EventID&rsquo;s</em></h3> + +<ul> +<li>Event ID 6005: “The event log service was started.” This is synonymous to system startup.</li> +<li>Event ID 6006: “The event log service was stopped.” This is synonymous to system shutdown.</li> +<li>Event ID 6008: &ldquo;The previous system shutdown was unexpected.&rdquo; Records that the system started after it was not shut down properly.</li> +<li>Event ID 6009: Indicates the Windows product name, version, build number, service pack number, and operating system type detected at boot time.</li> + +<li><p>Event ID 6013: Displays the uptime of the computer. There is no TechNet page for this id. +Add to that a couple more from the Server Fault answers listed in my OP:</p></li> + +<li><p>Event ID 1074: &ldquo;The process X has initiated the restart / shutdown of computer on behalf of user Y for the following reason: Z.&rdquo; Indicates that an application or a user initiated a restart or shutdown.</p></li> + +<li><p>Event ID 1076: &ldquo;The reason supplied by user X for the last unexpected shutdown of this computer is: Y.&rdquo; Records when the first user with shutdown privileges logs on to the computer after an unexpected restart or shutdown and supplies a reason for the occurrence.</p></li> +</ul> + +<h3 id="powershell-1"><em>PowerShell</em></h3> + +<pre><code class="language-PowerShell">$filter = &quot;*abbix*&quot; +get-winevent -logname 'Application' | Where-Object { $_.Message -like $filter } +</code></pre> + + + + + Dont Let Your Application Interfere With Letsencrypt + https://hagfi.sh/administration/dont-let-your-application-interfere-with-letsencrypt/ + Thu, 23 Aug 2018 22:46:41 +0200 + + https://hagfi.sh/administration/dont-let-your-application-interfere-with-letsencrypt/ + + +<h2 id="tips-and-tricks-to-keep-letsencrypt-working">Tips and tricks to keep letsencrypt working</h2> + + + + + Vue Js + https://hagfi.sh/development/vue-js/ + Thu, 23 Aug 2018 22:44:46 +0200 + + https://hagfi.sh/development/vue-js/ + + +<h2 id="awesomeness-about-vuejs">Awesomeness about VueJS</h2> + + + + + Luks Encryption + https://hagfi.sh/administration/luks-encryption/ + Thu, 23 Aug 2018 22:08:15 +0200 + + https://hagfi.sh/administration/luks-encryption/ + + +<h2 id="add-a-new-disk-lvm">Add a new disk (LVM)</h2> + +<pre><code>root@server:/dev/centos # for i in /sys/class/scsi_host/host*; do echo &quot;- - -&quot; &gt; $i/scan; done +root@server:/dev/centos # NEWDISK=$(dmesg|tail|grep 'Attached'|awk '{print $4}'|tail -n1|cut -d &quot;[&quot; -f2|cut -d &quot;]&quot; -f1) +root@server:/dev/centos # VGROUP=$(vgdisplay|grep Name|head -n1|awk '{print $3}') +root@server:/dev/centos # echo ${NEWDISK} +sdd +root@server:/dev/centos # echo ${VGROUP} +centos +root@server:/dev/centos # pvcreate /dev/${NEWDISK} +Physical volume &quot;/dev/sdd&quot; successfully created. +root@server:/dev/centos # vgextend ${VGROUP} /dev/${NEWDISK} +Volume group &quot;centos&quot; successfully extended +</code></pre> + +<h2 id="create-a-logical-volume-lvm">Create a logical volume (LVM)</h2> + +<pre><code>root@server:/dev/centos # lvcreate -L 15G -n encrypted centos +Logical volume &quot;encrypted&quot; created. +</code></pre> + +<h2 id="encrypt-the-partition">Encrypt the partition</h2> + +<pre><code>root@server:/dev/centos # cryptsetup -v --verify-passphrase luksFormat /dev/centos/encrypted +root@server:/dev/mapper # cryptsetup luksOpen /dev/centos/encrypted luks-encrypted +</code></pre> + +<h2 id="create-a-mountpoint">Create a mountpoint</h2> + +<pre><code>root@server:/dev/mapper # mkdir /encrypted +root@server:/dev/mapper # mount /dev/mapper/luks-encrypted /encrypted +</code></pre> + +<h2 id="create-a-key-to-auto-mount-the-encrypted-disk">Create a key (to auto-mount the encrypted disk)</h2> + +<pre><code>root@server:/dev/mapper # dd if=/dev/urandom of=/root/lukskey bs=1024 count=4 +root@server:/dev/mapper # chmod 0400 /root/lukskey +</code></pre> + +<h2 id="unmount-and-add-the-key">Unmount and add the key</h2> + +<pre><code>root@server:/ # umount /encrypted +root@server:/ # cryptsetup luksClose luks-encrypted +root@server:/ # cryptsetup luksAddKey /dev/mapper/centos-encrypted /root/lukskey +</code></pre> + +<h2 id="get-uuid">Get UUID</h2> + +<pre><code>root@server:/ # blkid /dev/mapper/centos-encrypted +/dev/mapper/centos-encrypted: UUID=&quot;0dab9a5c-1870-478d-8d74-226eeb512f78&quot; TYPE=&quot;crypto_LUKS&quot; +</code></pre> + +<h2 id="auto-mount-luks-edit-etc-cypttab">Auto-mount LUKS (edit /etc/cypttab)</h2> + +<pre><code>luks-encrypted /dev/disk/by-uuid/0dab9a5c-1870-478d-8d74-226eeb512f78 /root/lukskey luks +</code></pre> + + + + + \ No newline at end of file diff --git a/public/js/lightbox.min.js b/public/js/lightbox.min.js new file mode 100644 index 0000000..25cf95e --- /dev/null +++ b/public/js/lightbox.min.js @@ -0,0 +1,10 @@ +/** + * Lightbox v2.7.1 + * by Lokesh Dhakar - http://lokeshdhakar.com/projects/lightbox2/ + * + * @license http://creativecommons.org/licenses/by/2.5/ + * - Free for use in both personal and commercial projects + * - Attribution requires leaving author name, author link, and the license info intact + */ +(function(){var a=jQuery,b=function(){function a(){this.fadeDuration=500,this.fitImagesInViewport=!0,this.resizeDuration=700,this.positionFromTop=50,this.showImageNumberLabel=!0,this.alwaysShowNavOnTouchDevices=!1,this.wrapAround=!1}return a.prototype.albumLabel=function(a,b){return"Image "+a+" of "+b},a}(),c=function(){function b(a){this.options=a,this.album=[],this.currentImageIndex=void 0,this.init()}return b.prototype.init=function(){this.enable(),this.build()},b.prototype.enable=function(){var b=this;a("body").on("click","a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",function(c){return b.start(a(c.currentTarget)),!1})},b.prototype.build=function(){var b=this;a("
").appendTo(a("body")),this.$lightbox=a("#lightbox"),this.$overlay=a("#lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".lb-outerContainer"),this.$container=this.$lightbox.find(".lb-container"),this.containerTopPadding=parseInt(this.$container.css("padding-top"),10),this.containerRightPadding=parseInt(this.$container.css("padding-right"),10),this.containerBottomPadding=parseInt(this.$container.css("padding-bottom"),10),this.containerLeftPadding=parseInt(this.$container.css("padding-left"),10),this.$overlay.hide().on("click",function(){return b.end(),!1}),this.$lightbox.hide().on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$outerContainer.on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$lightbox.find(".lb-prev").on("click",function(){return b.changeImage(0===b.currentImageIndex?b.album.length-1:b.currentImageIndex-1),!1}),this.$lightbox.find(".lb-next").on("click",function(){return b.changeImage(b.currentImageIndex===b.album.length-1?0:b.currentImageIndex+1),!1}),this.$lightbox.find(".lb-loader, .lb-close").on("click",function(){return b.end(),!1})},b.prototype.start=function(b){function c(a){d.album.push({link:a.attr("href"),title:a.attr("data-title")||a.attr("title")})}var d=this,e=a(window);e.on("resize",a.proxy(this.sizeOverlay,this)),a("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var f,g=0,h=b.attr("data-lightbox");if(h){f=a(b.prop("tagName")+'[data-lightbox="'+h+'"]');for(var i=0;ij||e.height>i)&&(e.width/j>e.height/i?(h=j,g=parseInt(e.height/(e.width/h),10),d.width(h),d.height(g)):(g=i,h=parseInt(e.width/(e.height/g),10),d.width(h),d.height(g)))),c.sizeContainer(d.width(),d.height())},e.src=this.album[b].link,this.currentImageIndex=b},b.prototype.sizeOverlay=function(){this.$overlay.width(a(window).width()).height(a(document).height())},b.prototype.sizeContainer=function(a,b){function c(){d.$lightbox.find(".lb-dataContainer").width(g),d.$lightbox.find(".lb-prevLink").height(h),d.$lightbox.find(".lb-nextLink").height(h),d.showImage()}var d=this,e=this.$outerContainer.outerWidth(),f=this.$outerContainer.outerHeight(),g=a+this.containerLeftPadding+this.containerRightPadding,h=b+this.containerTopPadding+this.containerBottomPadding;e!==g||f!==h?this.$outerContainer.animate({width:g,height:h},this.options.resizeDuration,"swing",function(){c()}):c()},b.prototype.showImage=function(){this.$lightbox.find(".lb-loader").hide(),this.$lightbox.find(".lb-image").fadeIn("slow"),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},b.prototype.updateNav=function(){var a=!1;try{document.createEvent("TouchEvent"),a=this.options.alwaysShowNavOnTouchDevices?!0:!1}catch(b){}this.$lightbox.find(".lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(a&&this.$lightbox.find(".lb-prev, .lb-next").css("opacity","1"),this.$lightbox.find(".lb-prev, .lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".lb-prev").show(),a&&this.$lightbox.find(".lb-prev").css("opacity","1")),this.currentImageIndex1&&this.options.showImageNumberLabel?this.$lightbox.find(".lb-number").text(this.options.albumLabel(this.currentImageIndex+1,this.album.length)).fadeIn("fast"):this.$lightbox.find(".lb-number").hide(),this.$outerContainer.removeClass("animating"),this.$lightbox.find(".lb-dataContainer").fadeIn(this.options.resizeDuration,function(){return b.sizeOverlay()})},b.prototype.preloadNeighboringImages=function(){if(this.album.length>this.currentImageIndex+1){var a=new Image;a.src=this.album[this.currentImageIndex+1].link}if(this.currentImageIndex>0){var b=new Image;b.src=this.album[this.currentImageIndex-1].link}},b.prototype.enableKeyboardNav=function(){a(document).on("keyup.keyboard",a.proxy(this.keyboardAction,this))},b.prototype.disableKeyboardNav=function(){a(document).off(".keyboard")},b.prototype.keyboardAction=function(a){var b=27,c=37,d=39,e=a.keyCode,f=String.fromCharCode(e).toLowerCase();e===b||f.match(/x|o|c/)?this.end():"p"===f||e===c?0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1):("n"===f||e===d)&&(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0))},b.prototype.end=function(){this.disableKeyboardNav(),a(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),a("select, object, embed").css({visibility:"visible"})},b}();a(function(){{var a=new b;new c(a)}})}).call(this); +//# sourceMappingURL=lightbox.min.map \ No newline at end of file diff --git a/public/js/rrssb.min.js b/public/js/rrssb.min.js new file mode 100644 index 0000000..bce6368 --- /dev/null +++ b/public/js/rrssb.min.js @@ -0,0 +1,18 @@ +/* + Ridiculously Responsive Social Sharing Buttons + Team: @dbox, @joshuatuscan + Site: http://www.kurtnoble.com/labs/rrssb + Twitter: @therealkni + + ___ ___ + /__/| /__/\ ___ + | |:| \ \:\ / /\ + | |:| \ \:\ / /:/ + __| |:| _____\__\:\ /__/::\ + /__/\_|:|____ /__/::::::::\ \__\/\:\__ + \ \:\/:::::/ \ \:\~~\~~\/ \ \:\/\ + \ \::/~~~~ \ \:\ ~~~ \__\::/ + \ \:\ \ \:\ /__/:/ + \ \:\ \ \:\ \__\/ + \__\/ \__\/ +*/(function(e,t,n){"use strict";var r=function(){t(".rrssb-buttons").each(function(e){var n=t(this),r=t("li",n).length,i=100/r;t("li",n).css("width",i+"%").attr("data-initwidth",i)})},i=function(){t(".rrssb-buttons").each(function(e){var n=t(this),r=parseFloat(t(n).width()),i=t("li",n).not(".small").first().width(),s=t("li.small",n).length;i>170&&s<1?t(n).addClass("large-format"):t(n).removeClass("large-format");r<200?t(n).removeClass("small-format").addClass("tiny-format"):t(n).removeClass("tiny-format")})},s=function(){t(".rrssb-buttons").each(function(e){var n=t(this),r=0,i=0,s,o,a=t("li.small",n).length;if(a===t("li",n).length){var f=a*42,l=parseFloat(t(n).width());s=t("li.small",n).first();o=parseFloat(t(s).attr("data-size"))+55;if(f+oo){var a=t("li",n).not(".small").last();t(a).addClass("small");u()}}--r||s()})});e===!0&&f(u)},u=function(){t(".rrssb-buttons").each(function(e){var n=t(this),i,s,o,u,a,f=t("li.small",n).length;if(f>0&&f!==t("li",n).length){t(n).removeClass("small-format");t("li.small",n).css("width","42px");o=f*42;i=t("li",n).not(".small").length;s=100/i;a=o/i;navigator.userAgent.indexOf("Chrome")>=0||navigator.userAgent.indexOf("Safari")>=0?u="-webkit-calc("+s+"% - "+a+"px)":navigator.userAgent.indexOf("Firefox")>=0?u="-moz-calc("+s+"% - "+a+"px)":u="calc("+s+"% - "+a+"px)";t("li",n).not(".small").css("width",u)}else if(f===t("li",n).length){t(n).addClass("small-format");r()}else{t(n).removeClass("small-format");r()}});i()},a=function(){t(".rrssb-buttons").each(function(e){t(this).addClass("rrssb-"+(e+1))});r();t(".rrssb-buttons li .text").each(function(e){var n=parseFloat(t(this).width());t(this).closest("li").attr("data-size",n)});o(!0)},f=function(e){t(".rrssb-buttons li.small").removeClass("small");o();e()},l=function(t,r,i,s){var o=e.screenLeft!==n?e.screenLeft:screen.left,u=e.screenTop!==n?e.screenTop:screen.top,a=e.innerWidth?e.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,f=e.innerHeight?e.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,l=a/2-i/2+o,c=f/3-s/3+u,h=e.open(t,r,"scrollbars=yes, width="+i+", height="+s+", top="+c+", left="+l);e.focus&&h.focus()},c=function(){var e={};return function(t,n,r){r||(r="Don't call this twice without a uniqueId");e[r]&&clearTimeout(e[r]);e[r]=setTimeout(t,n)}}();t(".rrssb-buttons a.popup").on("click",function(e){var n=t(this);l(n.attr("href"),n.find(".text").html(),580,470);e.preventDefault()});t(e).resize(function(){f(u);c(function(){f(u)},200,"finished resizing")});t(document).ready(function(){a()})})(window,jQuery); \ No newline at end of file diff --git a/public/js/search.js b/public/js/search.js new file mode 100644 index 0000000..add8549 --- /dev/null +++ b/public/js/search.js @@ -0,0 +1,108 @@ +summaryInclude=60; +var fuseOptions = { + shouldSort: true, + includeMatches: true, + threshold: 0.0, + tokenize:true, + location: 0, + distance: 100, + maxPatternLength: 32, + minMatchCharLength: 1, + keys: [ + {name:"title",weight:0.8}, + {name:"contents",weight:0.5}, + {name:"tags",weight:0.3}, + {name:"categories",weight:0.3} + ] +}; + + +var searchQuery = param("s"); +if(searchQuery){ + $("#search-query").val(searchQuery); + executeSearch(searchQuery); +}else { + $('#search-results').append("

Please enter a word or phrase above

"); +} + + + +function executeSearch(searchQuery){ + $.getJSON( "/index.json", function( data ) { + var pages = data; + var fuse = new Fuse(pages, fuseOptions); + var result = fuse.search(searchQuery); + console.log({"matches":result}); + if(result.length > 0){ + populateResults(result); + }else{ + $('#search-results').append("

No matches found

"); + } + }); +} + +function populateResults(result){ + $.each(result,function(key,value){ + var contents= value.item.contents; + var snippet = ""; + var snippetHighlights=[]; + var tags =[]; + if( fuseOptions.tokenize ){ + snippetHighlights.push(searchQuery); + }else{ + $.each(value.matches,function(matchKey,mvalue){ + if(mvalue.key == "tags" || mvalue.key == "categories" ){ + snippetHighlights.push(mvalue.value); + }else if(mvalue.key == "contents"){ + start = mvalue.indices[0][0]-summaryInclude>0?mvalue.indices[0][0]-summaryInclude:0; + end = mvalue.indices[0][1]+summaryInclude + + + + https://hagfi.sh/administration/letsencrypt/ + 2018-08-25T22:08:15+02:00 + + + + https://hagfi.sh/administration/mysql_tuner/ + 2018-08-25T22:08:15+02:00 + + + + https://hagfi.sh/administration/windows_troubleshooting/ + 2018-08-25T22:08:15+02:00 + + + + https://hagfi.sh/administration/dont-let-your-application-interfere-with-letsencrypt/ + 2018-08-23T22:46:41+02:00 + + + + https://hagfi.sh/development/vue-js/ + 2018-08-23T22:44:46+02:00 + + + + https://hagfi.sh/administration/luks-encryption/ + 2018-08-23T22:08:15+02:00 + 0.1 + + + + https://hagfi.sh/administration/ + 2018-08-25T22:08:15+02:00 + 0 + + + + https://hagfi.sh/development/ + 2018-08-23T22:44:46+02:00 + 0 + + + + https://hagfi.sh/ + 2018-08-25T22:08:15+02:00 + 0 + + + \ No newline at end of file diff --git a/public/touch-icon-144-precomposed.png b/public/touch-icon-144-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..19323de1ee3aa16ca05e222a3aecdb5d6251b578 GIT binary patch literal 570 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q2}owBl)eX2k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+81HzxIEGZ*dUMAxuPH$0z{6W5pO}33{8R+o-182kbX-^L zyVq(_$?dkxymG3UulmYkZQng|_TB%H6+f@$X}ox(sO!gN*I(XMWl&3CV)Hq`!ZV|R zQ^J5z*dT#PE#Ux*&w&Qc84W-#BQsdR`YZ0c*7hGyzP-(R-^@)q@BgmIoOSu-mM4k7 z_PyVAPWBm}_ca5a%STtO`ef7p>HF{H*W=e;f4M#-GVJ=-KZjccjuqBCdwV{A>j&{) zNoP;8Uw;1+NV!}-@9{-55RcuMuKC?xyXVEu^Upv3@xAuibVF;`Ck-a$z;_$0TLl*N z966iDoYVR3_uoIh)9U9{yL+!sPp!0&$rIbGv-)+_zeFdF#}@Z=_zoBBj9C>W*49B zfA@zWXZPJ@);|C4me{h+n3$n*s-2HGCoG$9$11@vE!bP|@u3yZfQf;@)78&qol`;+ E0G>zh-v9sr literal 0 HcmV?d00001 diff --git a/themes/redlounge/LICENSE.md b/themes/redlounge/LICENSE.md new file mode 100644 index 0000000..e1fa364 --- /dev/null +++ b/themes/redlounge/LICENSE.md @@ -0,0 +1,13 @@ +Copyright 2014 Tom Maiaroto + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/themes/redlounge/README.md b/themes/redlounge/README.md new file mode 100644 index 0000000..20c47a1 --- /dev/null +++ b/themes/redlounge/README.md @@ -0,0 +1,157 @@ +Red Lounge +=========== + +NOTICE: This theme is no longer maintained (or very slowly maintanied). Unless a pull request comes in that makes sense to merge, don't expect updates. Hugo has since updated a bit since this theme was created. So there may be some incompatibilities or missing features (certainly missing features). Please feel free to submit pull requests. Also if anyone is interested in maintaning the theme, please let me know. Thanks! + +This is an open-source Hugo theme designed by [@shift8creative](http://www.twitter.com/shift8creative) to be responsive and clean. It uses Pure.css and contains a few web fonts from Google as well as Font Awesome icons. +So despite it being simple, it has a lot of flexibility in terms of typography and design elements. It's also quite configurable as it has a few variables to change the +appearance and features of the pages. By default, excess features (and JavaScript) is not included. + +## Configuration and Options + +### Sidebar Title & Tagline Params + +The sidebar can be configured with your main site config using params. For example, in ```config.toml``` + +``` +[params] + sidebartitle = "My Site" + sidebartagline = "Is super awesome" + sidebarphoto = "/img/photo.png" +``` + +This three properites will not be shown if not set. You will want to keep these lines short since there's limited space. +Alternatively you could add custom HTML using the ```sidebarheader.html``` partial and keep those values empty strings. + +### Google Analytics + +Google Analytics can be configured with your main site config by entering the Google Analytics tracking id under params. For example, in ```config.toml``` + +``` +[params] + gaid = "UA-XXXXXXXX-X" +``` + +### Menus + +There are a few menus this theme allows you to define (all optional) in your main config. + +Main - This menu is pretty basic and goes on the left panel under the site title and description. It contains red markers to separate items and call attention to the +fact that it is more important than the other lists/menus that you may have on your site. It is optional, but always shows a link to the home page. +This would be a good place to link to your various sections. + +``` +[[menu.main]] + name = "Blog" + url = "/posts" +``` + + +Social - This menu goes underneath the main menu and was originally designed to contain links out to social media accounts, RSS, etc. making use of Font Awesome. +However, you can use it for whatever you want. Just keep in mind space is limited here on the left panel. + +``` +[[menu.social]] + pre = "" + url = "http://www.twitter.com/shift8creative" + identifier = "twitter" +``` + +Footer - The footer menu might also contain links to social media accounts...It's up to you. It appears right above the copyright notice at the bottom of each page. +This menu is simply plain text links centered and they are gray to match the footer. So there's less attention being drawn here. Perhaps good for notices, terms of service, etc. + +``` +[[menu.footer]] + name = "Blog" + url = "/posts" +``` + +### Categories + +Some assembly required here. + +```.Params.categories``` coming from front-matter are displayed as tags on list pages with boxes. By default they are all going to be gray with white text. The coloring is up to you. + +Each label will have the following class: ```class="post-category post-category-{{ . | urlize }}"``` + +Note the name is going to be urlized. So for example: ```post-category-technology``` or ```post-category-golang``` and so on. This allows you to create your own CSS around the +categories you end up defining. You can then set the background color to be something specific and then all instances of that category label will match. + +You can easily include a categories CSS file, without modifying template partials, by using the site config params. Something like the following: + +``` +[params] + categoriescss = "/css/my-categories.css" +``` + +This will be included in the header.html file before headend.html partial, so you can still include additional code in that partial afterward. + +### Comments + +Comments use Disqus, so the main config needs to define ```disqusShortname``` like normal. However, each page can disable comments from appearing with front matter. Simply set +```nocomment = true``` and they will be hidden. + +### Lightbox + +Lightbox is included with the theme but won't be available for use (not even linked in the HTML) unless you enable it. This way it stays out of the way and saves on bandwidth. +Should you decide you want to use it, simply add to your front-matter: ```lightbox = true``` and then in your markdown you'll need add links with a ```data-lightbox``` attribute. +Markdown wants to add titles when you add quotes so the syntax is a little weird. Alternatively, you can use HTML (which is likely easier in this case). So the following should +use images in your ```static``` directory: + +``` + +``` + +Also note that Lightbox requires jQuery, so turning this on for a page or archetype will also link jQuery in the head section of your pages from Google's CDN. + +### Hiding & Showing Things + +Comments can be hidden on a per page basis with ```nocomment = true``` but there's also some other things that can be hidden. Sometimes simply by not defining them, other times +by explicitly setting variables. They are as follows: + + - ```nodate = true``` Hides the date on a page + - ```noauthor = true``` Hides the author (which may simply be defined per page, but also could be set higher up in the config, so this overrides) + - ```noread = true``` Hides the read time displayed on list pages + - ```nopaging = true``` Hides the next/prev links that navigate through pages + - ```notoc = true``` Hides the table of contents from a page + - ```totop = true``` Shows a "To Top" link, fixed in the top right of the page after scrolling beyond 1000px, that takes the user back to the top of the page (not shown by default) + - ```socialsharing = true``` Shows social media sharing buttons from a partial template (which can be overwritten) + +### Other Params + + Aside from the above variables that hide/show things, there are a few other variables that this theme will look for and use. These can be placed in any front matter. In some cases + you'll want to define these in the archetypes so you don't need to keep defining the values. These are all optional of course. + + - ```ogimage``` OpenGraph image tag + - ```ogtitle``` OpenGraph title tag (if not set, will use ```.Title```) + - ```ogdescription``` OpenGraph description tag (if not set, will use ```.Description``` - also used the same way for meta description) + - ```banner``` A banner image for a page that sits above the title and stretches across the width of the page + - ```bannerheight``` An optional height for the banner image wrapper to help cut off larger images (specified as just a number, none by default) + - ```bannerfill``` If set true, this will attempt to fill the available width of the content area with the banner image by applying a 100% width to the image style + - ```bannerinline``` Use this instead to place a banner image after the title, author, tags, etc. which floats to the right of the content (does not use the fill/height params) + - ```thumbnail``` Set this to an image path if you want to show a thumbnail with pages in the list view; originally intended for author avatars, any small image could work (50x50 pixels) + - ```author``` The author name + - ```authorlink``` A link for the author + - ```authorlinktarget``` The link target, ie. "_blank" (useful if the link goes to an external site or something) + - ```authortwitter``` The full URL to the author's Twitter profile (opens in a new window) + - ```authorlinkedin``` The full URL to the author's LinkedIn profile (opens in a new window) + - ```authorfacebook``` The full URL to the author's Facebook page/profile (opens in a new window) + - ```authorgoogleplus``` The full URL to the author's Google+ page/profile (opens in a new window) + +### Template Partials + +There are a few partials being used so that key areas can be easily overwritten. + + - ```doctype.html``` This contains the HTML document declaration and you may wish to change it from the default value of english for language, add namespaces, etc. + - ```header.html``` This contains the `````` portion of the page + - ```meta.html``` This contains some basic meta tags, feel free to modify as needed (within header.html) + - ```og.html``` OpenGraph only meta tags (within header.html) + - ```headend.html``` This easily provides the ability to add custom style sheets and JavaScript right before `````` to override styles, etc. (within header.html) + - ```authorsocial.html``` If an author is set this template partial will be used to optionally show links to their social media profiles if also set (within single.html) + - ```socialsharing.html``` Allows you to change what's displayed when ```socialsharing = true``` + - ```sidebar.html``` The sidebar which is already pretty customizable with site params and menus, but can also easily be changed if need be + - ```sidebarheader.html``` Placed above the h1 and h2 elements in the sidebar (which will appear if your site config was set), allowing for further sidebar header adjustments + - ```singletop.html``` Placed at the top of the page for single.html (but under the banner) + - ```listtop.html``` Placed at the top of the page for list.html + - ```footer.html``` The footer + - ```bodyend.html``` Right before `````` (within list.html, single.html, and index.html - be sure to include it when/if overwriting with your own index.html) diff --git a/themes/redlounge/archetypes/default.md b/themes/redlounge/archetypes/default.md new file mode 100644 index 0000000..74583a2 --- /dev/null +++ b/themes/redlounge/archetypes/default.md @@ -0,0 +1,6 @@ ++++ +Description = "" +Tags = ["Development", "golang"] +Categories = ["Development", "GoLang"] +menu = "main" ++++ diff --git a/themes/redlounge/images/screenshot.png b/themes/redlounge/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..337bfbd38ca17dbed77a501d0f88b152f7bbcf5d GIT binary patch literal 120744 zcmaI71yo#3^CuiauwX%g1b270-~@MfcO7I1nxG-LLxA7}cN^S-dvFGK8=S%UAkX`} zyXV{e?>%!4cP>@c)!o%4zq%8qtoRA_?T5FoUcEw^$HIB>J{uRBJA^%^YP)? z=Rf#vlG<)+PL^&!6M)4lQFA9#3sM;e6Dtc<3lsCtE&~>V&m5FC>e_DF3iAABP7cf_ zFEq@a4$jZquU-iXdpet#*;%-enp#-dI0}&;H@B0M+L#NGYjG*CDmaTbKuy=Ij_Y@-kE0_QI{^c#H#;Hnf0WWz zP$m_30$7l8F>^4Pv9hs|a&t4YadL5UvoVsgv$Ct$gSPnocUQ;fIuKKkb~I?V8z15$H(^~gPon}nS#mnv!k1dCzGQq z#lI3HEL_b1HqLG~PL8B65=~5<+}(u8pEdnw3J%Wy73=8wpJjSpFcwb}XBIYQ)|V;$ zOQ@jm|0Z>C_%F4qo2teC()a%=*j4?rvjvN)g{zZ0!0dVBEGb@wa^@EYSeUpu0o0wG z?EhUwWosulCs%7HXHs!BZc zjKRVAd1MI-fQ^TRxfH<3f%NaB`ECAZU3mUSdH>-x|DSc?{U3Q*o|R#F+1meYtN(rU zY(Foz|25p_FaI@t3&&@B2Rs{g#E_Wd^LcrtEUzwUF2x>QIeB>h^mMad9RXneWc!r+ zdMMf1A-aC7scd0kA=XwYUW3{#b+Ej7^!{+ZGUc0`ecW7MEiH#!Z*QLrCrcBkxuI`{ znufzkRWclCKY#R4R8$lk6ao_jgMvZp@cFyEmTi4Of+z4ZhkCGPndbM@@*j2yL;Ls2 zZiPv|8ew3b5<)zHA@PehPZ%_ER#w)B3xoGNLzU;pXVE13SJyG78CckeI`tn}uW_O}QT z$;qhphCw$=1GfuJxWvr+&B@@Mt2wKSiYyt-oUS; zoyGowU|sHydcl>lw7A2g6LdHm>Dc%{Wd-1w!RFn&vY3kG@DNX1^ZFpYj;dq%2*1XGfCfN`LH)^f?R_^K(#?&Rv)4NIfj(UN6rc z%@!36y4@b#hAFx^W77>^KZ5rbA-lstJo1vN20pIl?_pu*hUfZ5c5g;XhISz}sRPs7 zRbKg>N5a%~xxRI~f38Owvhp+E!{dO8+cjm?PD8#Nr&k15OFrEUBEG|W+KyDL2}lV| zJ%(O|Mn8?zM|j!*r$-?wsH9gztAY$qY5w}OB2VFo;X1xQ-ebU*_&+UO?>{y3xYoO^ zvGaAbJuLS;9YUA+3cW76M+WD5bz2IFKZw$?QGZgE#l!!Qo}K}HdcH28(5r-m^qrlZ zgoK3S1ZTv!k2tb#)>laF zT#uH{ma$Uw5^oBU029$9s}Q1#geY7XcUS!hEdeKNbv0%NzI#g4>GZJql6|#Z3?HQ> z`^imT_2>B|=uNMIRi@0(9fjpW-)eM3V&_a9hveJ+;^JoX^d9^rms&sKtmfnLW<_X) zpZm0i)^7zDL4yde2;uYfWZUC%<=doed*71m;_U1U@PF*jU;v__p(#Sfh^}0=Mmsw@ z2Ojv;A(rJ}K3-m4kZ|Z=M!Wz50s;+m2UUs+nzXjMy1F@PK=$%qUXZI3{xkD4H+U=~ zFfj0$(nxvhFGc4+Bp}zc7w%_vk}91L@1f^GodG+8FT~H(|A>2**J|;PIOo6e6d{D* z?Z2vI{KN5ouxyTY{{LCPjNJqO=4+W60s?s2`z;m{acU)G$cmtdW|XUllE+x&!UvZ_2741 zm>1$z=U;;!C#}?%E zUqgG|JFJVOiPr*t(RG4LKAYvvhE|6VE@J??kP86X+0&hO*XizUt;>v^va~}3tm2ae zm5Ay8v&7Yd26sXut>>}c9o9e2BxCR5wIFSFW3NCAhz$g01?c6UQY~mf3^{)f(Tl46 zderie!Czt!!;As*mP;08$O1`iC_;pJl{Q!F;XhKZzqVNXWCjhfW`>TeDanEK~35bunKA*zptw1PK<>j1EauQB4Zf%d=m_bu!$S ztnkExGsxok<0ONPX5sZrWdM)x^ks{?CA(?2kdg|5NM0K83AtWF{FV~ePH2yAV3qPU zYnHN6sLx6!$PJl_rUR&Cr?+hd=nJ z+!ezWIhP!pG|l=l?rXS$9k2*AKu6ci*=@)rft%E?dGkr6h+PeVdB1ErxXXQNO&p?_ z`a$oEqm?S!u3qPNwU*TivQ#M+*sBIIZMG51YZT12l}GB9xkC(drD5m-ek+qAf~W&O z6@Qlw8jP@eF1^|-jGZGrqz=d)pgN33#W#a#N>KSv-eJ^# zhj&Yk5b+v4;D>dlpJ>EJGkMB%l=sCM0y3k)OGK!)nCv2?KrZL}BxVxR?{B|XsA#?cAXIC8c|{X~ z=aModHd={}L3VuU5$Qcy#! zPvfL*NAU|T#8g=Wf#q+hsc1GxiG5F`r>4WOYRuV+bg2cp`%*)qM_T6okhzAck>zMAguO^G&%j^>(pQ?2kUGRRf6Qj)ww-bJk^k^ClP@S2U}4aGpgIP5W4?7 zI18+0V~u4P2jo~BOQgG*PTxee?aDx+n@q0`gZ9I;@4c zprCC!^Cl8YA2JmJ`A>68CYfaebbgG0PsYT!y&=*nJF1Ycb}C%sI0EJ4RPQo1f1w5) z$g-ZVvQ2itcD)3aWp-p0$UZGVE7Ya{Cf=J?%(-dz;i>Z1#}Q5t}24|&uEH1xzZzXO&k+K`(QNHE005mQDe7c#%G7y zR`ajy!#g>(tSeIog|NATVpWb{7C@yi& z#?&F%)_~a`k?>bE*sj8huM-4hMoTH7H67$d1DM7hReNfsyDk$u=}V5kU-Aj>q2Wi2 z8W5J0^} z1X2j|+b&%c@-b0`^`3Nl3ZHFgj+`Q$kFY4Ck)Vm#B&jMDZniIm15gHiq-rV;sOu)gV&a8a)-)T9Fi`MtPTmv z>UInZp4fzNh2#tvWOtuk{|LZ-dgVLRfrGM;<7?`c{Yhfv0t*1-?rD*+qF!^!&wdw8 zp*TC9n<&84?sXNX*r4eCZX@YO!W}|XXU9v}Oua~YnH9dpjG{m!bjf&i6m;1|T&6aI64qHq36C?WF+I{Q0ou7a+AlscE!>r2Wp zsZNu)`-dZVlVPl=$8+1xQZ?;B^XPieP`b+1qjk(ygw37tQr=l)UeYyE>5B_(7-qCg zJxzhONQEcULX~S_q#R5OR#TX+t2RGYj0g=fQh0>WhN>t@Z~8O=}IB z8AlgO3?IDWW}6Ln)!07<*`sO|n3_@+nlr*~$aL)(lpfMG*R4q+2eLEUDkm8^Njk-H zO0DeDN|opD7PJHwgX^M;zyodSwz*N75cUkL!}Zzn5`vsEX0rM;cjiXRs-Z?y*4=kz zap({^D(LHbaBD9gn$oF3S}=IP`1_DL@6yfBe=>P8?j!B+sz_Cv+8tsEcn(~8a}M53 zl|iBX$|%|pYC^}5vRsEMKgg`fka9{9Hd#DOn0QTy0ZP0#=V=M9xof-Q+v8u~n|PwU2NWF-Ozr(<_GC{1NqL1Q>EF>t$^bvf=4e>U#&4{{q&Ci4PpUdRa_Ox z;?NWu2XxByO$VjX}1-b32jMDxGVyNg*fc z8w(L5Vt#{=eQQzFUT;+lcuWjW#LtV26Md%xq`ZM5GmnKXl~nuzug~yPWDpbltU~}+ zhFAKH|9JgBB4EugBo_9~g7b6Y{ascl%_@K1MO)Uh^#RIQTRNU&rxE}AWhRWk5G<4r z%(>AwQEBp&Klv){%o|!5C?$d~Vr@F=LRc%^%0_+t9#7nu1()Yt*ho%G8WT<~(>pfRScgXk&xp6Qr+*F-__YV}Ll>q0qH zl%2#n{DCyG46%sU?8$MrOvUd%(szs2ekc!|ctt*mBbIkzx4>P-F_WRXmUlXdY@-hp z3o{Ky71Tv}`weu!{-;#?9(AIJUej8<3*kCyIRwk?xNTs3=F543DO@93#RqK}g_u8N z@s+6R2$Qq;)n68%YJG&7V)5*PU*o@^KpH`iS@OcS0%pp-;LUWy9FHa(Tk93jYP#L>_J8pYLhGPCPf zlvWo$udD4)iW=2(HxlCai<_N(NlM`9x!Zkh5LwRm3Vml}HH9jV31>~H3J3=);gAW2-i|guLE)($^sHp6wk|`_!pD%E&D%bL61^5o~Ap`yv z?I=yZEL1Ex2~3t(-}5NnO>#aFHURBmerH@XS$X>de!fkGjYn>&j6r^>f}it5fxrc} zH^I9+!NX&EK{~c<7@m_>-#k|Qlh!zxol~Asm(549&qItTPg$W+A$579oLZGtBuxED zC3Yt9ANid2`&Nw$xkj2`zC8QuyYNG%8e`5c$ENC>EOi6-Ex{=oeQ&sPy+i!ooa)|Z zf726w-kaxo&0qctkN3qbIW2T&7%wXd$v&hf3%vN#A#nHs3k!Zfyyu^=P<`|8d(%0yln%1KlxO)Cn1w{yb_umxDhs5L8o#!ylhaizX^p8LxjU)4k_tNhI zV%G3iCM)urE3R$npH+o0owu%PSVyMJpOS>>u{GfV+8Yq;lM~j*d#X26yWHSso`V$A4hkoMv)doq8$27ykla{~N^hQoX;N ztZO!}zcAJ_dPe*Y2*nF}(r&Sk5cXz7Y&&|ou|`~T@fGHMeUHESvMD+9VE@}mGtsWL zt6nAIFr!L24cjMl1UlfKv^~ zPx~4K*m)7v^?69J0Knqwv(+X7c$#^t?O*DB0lnhykaw8QOMW@I9=qM_Je@o27#Wl+ zF6J`l`cp^E-TTdM+^;o77`;kvkuf`Vf*IP z=K%XM6F5ys#p7Cj^5e;foPSpPL+wDU7PUa(t(doz~G?2fl|;)K7hBkk0quN|$am z2t3}+v{ovRx+nN+F9848Rtvum_uKid?MCN!$!#|yB!*sC4~JUPLH-%o55?FICLgyR zKV2AARJbeoT_#ug-)$&dG=N$y_|Y}UT=?R^bsA)xhEbzsx<8|BeF}FK1m0x1vs1AHhqoNjd0d&~nrQ(?+84$Sz z08d7H@D#n|*P%emEG+K7!01aI)53XElH8UmQPFmR@3p7#2Dzxy$QO(8cY8XPFGmC5 zN$%c%?Wx-Td^*JcZl6Z@^AV5Hh@&fl9q8bZ$U%-^d*`ySQ0)P<3o%S6?WO$b7%p7# z+pX1mdcW?euYK7S+O@Yqs}nN11fz%i*rMhO_BIvEpRpYh0w$HS2vuLG)gA_TbQ#3% ze=O1bmD99wn)s>qGelNHP@<1t6V9SO$x4aw}I1JlU^!Kr`RpKVC>y!n=P)6mpbPIJoCWnay#8*%mg zjI3h>P7%7rfq+B3Qme!Kt$C_Ex5vlsX8Fh>{C58yc)79+`qSf&_?OEn6;MLH1g5T8 z+8M8!Do^1YL;n(RAWQE?kbSLq*=Vy?avdT%KJ$9MYv>D9{v6U4^tK5~7XsDmGS8(0 zL}NG6EB28<-jA#efM1)By>ly%sLQuQn=6(zpumkm)TbT?b&4yKt;ZXt_LZ3|;h+AR zN6?a?%g?7f0uBvMH%@N#2vL0qpO$Eyd~2%y{9Xj{_e6|q7P%>Z95UBszV4u%=d4*igY}9Kmd1wR~VFx8&gJUJnwO!Es-{PAcC3{Nv_K??C>6<0U8P zes}Xc#sxRj-~7Jk-yiRsC*4qaZIlQ%JsaY|ZnRPB+T+vqi7T|Z?MPmd=&^-f9-?vU z^ib~+eZX5xV5=8?wcB`njw4+412q8<3}cymUO~ z>|F_f(n5YUg+mB!KP?R{RlM^Cr5n!>=r>UyQqlGBO7(aT(*eLei~ zJI@}{=R;y1@!iM0;~EMngii7-w$d*WorEd1h8kra>9^sKjg1)d_{jKg^6J;#mGe7c zXSY8Y_*0_i^v${{HUb0By$Se%JxZw=X)k>fQ2TQ~qhs%oWX{|$pQY{d<@9G@q2Fb% z(&HI?T}%6EFM)9C(pbh3SsjrR?;5a3znp9q^?J-nZNOZ-p5PJbH`4uw@=hm@?E!P< zv=uIiWRvJQYIF9)5hZ_-tN`xd@2%BE>W>?DPWH5|B|nw>uNLi3d}o7hd5H-fPflR} zMvR7GVAR{2`utqTz?Nv}*%9m8KCE z35K*)0reMDuzhZseTD1i9fAM-K1P)V`6&rfc%MX2-m#>?E0*?1zX9g&k0}p|r~<`` zvX3ioDZYxWLF4T@D!U(E(gBd`)+6US=s43uJJf%B$i`_Y<*K*gkKw1*v!`jxy93m- z<;W9h;~IsNZvKDTW2wKqG5?_ZiPV<`{wLhaJEb}WwY&a)eE%rL0Ik@5Vu-mzS{zps zB6r_aaXRJrM@`RV_D)p{DI2;whO^--o-@!%U0QqN=X2b4ZGn{)Hjg5nlfb97G19;8 zX5??P?4@yc@wY$s93lVH`ht=KHlX~|f7=6Zf9~k<+$Xiu(!=U)wly-x`=}+`XY;FrutC zovZ3=nmt+mR> zm2d?7_>N~~g?(0+ZF~{36A(@>GHy!_i0`%u5aNH*x=4HEfhL-N%w}SqLX5r-dC?q) z6@ctN59jJMZLD1|1Z21_otApR-8uYvpUjsJJe-|o5$?1eM{I1it)%+QP z?=)lQ2db1%`>{Up?6CQxk1CC zmX)w0|9FE?9UR+=Hb_(GSRlRxB8jT!sR`J`RHI2%jq z-gn;$-M1nzo|D8V0p>r58+10`wJ?`5QH4|AqV}59_keG)Z2?2ms5Kt6pCOE!khzvh ziEP|*8^asCdD^AvIw15E^aEhFF+@2{BLRUV#O6vC*Ijge)n{hY)2nS-3yA2W0)iWa z=+I63h4M-Dvr}7d5Hob7pH{5zUxl%A;S)LJrh_x>obZ(_NsdljK+)p*0u_$%TOX-g zyq*vmY^1+{hsquObT^rQkD-;6&;&1hqNZ8k#W z!1cM(SQ7y45sJvn4`osZ33qHV`x9G?l<-koCR z_zGN+`Q}4$V{N~M+Trk0;tI`J_YXYu?J;c(44c?)lkxLxz9v}qge9H`SLX@&XrZcD zX*v6)QwjWWeu6p1yXAz`@#L_bEQRero#%{vyX6$CoS=uDcbPTBoJait?(3X0mU}|( z2VC$U3aqx)#jP>3y{SUSyr{4bGm{NY5_=KGp$Ag1akb5zUv`^Z1VxC+!3Hb&37d=l z-P4MW_$+Z2Q>+JN#tAb#JqSvOKnyzlNA+6}!pf%F5Bip)LA-D(ph`8_spp)nVB5-= zEFD49ga^S>`eC8ihB%gr5y1*cITAh{O-Lgl+|`P7Yh=xzA1R^n$m^K3qLN-8JEtcg zSF~MRMJrD#5SPLWJ(@>?wsNgX*}+|9hU6MtfwiyYHlH#veuwd6=NhZE#p1HjuPpeR z<-knbA`X(uk>d}|K$LRNWE~k)Me0vtPUV6)0P(4XPKB$;yg)BFjr2~XV&~jS_Uxz> zO#xyO`^FL7$XbOIa9Z`{wVCwPqO#|RlmOQy3@Ez9vC{j^`=_Jt z^?^V{$v1$CyiMk~2dIRA&47n?P?1Z~!f7IiDDR*wiQsFP0cDMD)appOMv=%%ckCar{q{($P4+DR|M8BU;M( z%y@4n1)GUk0ZP~j&73T*5;pXtM3&KN9OI=r%yXVzoUrg}A0Xpax6y{gRUu7Lljv=!rp*EE=qo48!K53O`AVYEB2;v!053mQ-I63K*P zX=Oz&5?;j@6l7unGR-&rdW)(Uh)Swr*!y;43lX816DEu*sMVjgtU7Nfv*(Napb zJ1i^c@sX|z%KH)Xji$|N3$1x#0w@pyUb*k*e=lo(%v9n*JMuwaPcoHaQf)f`D)Plq zSS2!E8hNoH$Zi}o95cN~8po8cR4;DEwbiS2r40?nJZI2byHjP{xbTFyRN6RgfBQWp z7uxYOA9$RC6;1CYK<(8Uxadqc3*q&`OF9glbEYmE|Y0NLRVJ_!F|3?-O~pW_&Ge?)4@|>Pl6VyDFz4 zL7QmQvEKcbjvwh*KJ# zg2PcpigGtW^2g4+lvT0a~jaF4WqL&=Y}@P$4}2ECI@&Q zB_UMvhGGE=R{m%%@?UyU`}Invj;~pUP9JKcg_|41NC3Zad%$VJ+$G}ruCqM{mWBrT z6tJ39ljh3d+}2$9K2iI7j+KPAR>K72E~T>>%Sg`4h}oUQw=`ysx9% zTnw%VkwBBC$cmDEJJljiSMA<_n|{mQQHBVSxW%fL}P9-$2 z+3z*()CtXo6~~+gqDF&dlPzgKdBwth8VpD1)>0(YK(FRCvHad(Vsc1L6o|4)Oofyu z++Fd6Iu|F7z~O(@TQZ`NqDKCdcOy-hyvXcPL&I^Zw&Ix1;@0~py1G1XX&kQ`Y3Z(^ z07fKe<4(mS@L8AtGbCL*6sr!=W1kB@chSkEV}|Chrp=mD*N0CC9~CLTPUq29UfMgX zwtACE!@wS!d*osuglGA1fVo3vdF z(hStKo5@RD;a6F@{7`I9Nt9Rk0U8nI06O|ePtWmZuunpdv?2>kMZ%@=xi@)!Mat>Q z`pkz*huQ=wXMOT4O`7r8OF$Mhd*r-%<3st$!pQ#>pV_X&g zL+lstx(3MW(a}+2yY?sgkFZodG7bY<&*(?p4Q?@I1B`pPDXuaR#x zX(seKWo)Z$dS}z^h-A*mwSn)C1~V*Og*i|r2{qJrOoLZ&Yo^32XgjC0Cs59?4Vbg) zdwIOSfY*?O1?S+z5_w<83^5Gjy6{Wr?E~NYMBtlYxN~O>y|z&Qs;+Lf$IdM!#4w|h zcGsM;D+?T7qv$+c_+h!Ope*&hUZdMGC-LI-1hZhs_-krwzom%UyK^Y)B3 zV3Tn;X++HmeOQpE{t_SWY5R%xGAppoBxZ@7P8MWTFiY8im>9-a%c%xiQ@KD5w75KT zUPoNg&G!L`Zd)Fyy|wUj{nTkEMt!gubBsO774AHbwL5uvW2;*-@SqN2SP^eO&Tcu7 zLZUEVs17kWr@^YiOho-Cv25|6W&T}-TfmTRAr{9aYCjDu)`WqhcvHA*cPk^S^*GZB zR>>(^?e#7#%?<-7?Gcrs$Bw#D2U&d!UlSJG>SmHkz_BB}KY8}vCsGi!=0Mx>JB7qbsL!dR}35{77VAX zlD0bltdSDKD3ayDZ3f5mw8b4SRx+omg~Xzs{Jqwb0D4*|0%YuikrEG#C}l(*y#EdZ z$zo6OyU0vsBHZNFUjB`|i_kqr(LgS5{F=j6^j%iXkO9|foF801HXf~9T*}Wlcl^d> z!-rW({Q>|5abezD4Nt}UutGSwIp&5b6d?<-J?72AIqn`euuBM?y^qJ+^gVAP1VOSnEP$IoyL{2$Txx8 zp3f~sZ&C_s@kB_+>uc#(5KXyw)XhvEG1F*6oeYwslb;@ca6^eyq?V&U`0drgb z>q^w;?L*WK=A-e@^!tEC4J1KS)>o``XLd6W^_b18^!c4l%!5jii(n%Zr&K~I5p+1q zh51W4N;`MmqanBk2C;U!EIbj_B*WZ35cd(G^T!pzcz$_f^Ks2Ts@< zRszaR=KR^V`G|oB7Lk4f=pL8` z^E9n%so2`AL*w#{ouvf76#~XA-nuIFB$_D{6lj;#XsZRgsFMGZsH(9un9DvTQ$T>P z(UML@%1jgiNV;g=KS*uy3pV(F!%@3koV*~B2bt}c?j{>{%~u)CVs{71Tft-znkC$| zvTVWPV6i#`z|(j5Ep?PaE+Z%Nb;S#L4V}Nj09ams&LqFSL#k`V;HllgE)?D_4H)o6 zFH*Xr>h5m>A}?nuLOi)Qa1zHg^@9FnUjn3V_1!d5 z0R!s?$1iT_ntPMQl`BZQhrbQfOJS@0@$2?=rj!x{s={_pJ=2P6#g7isRpV~Vw*=O1 zE1Hd~WR?8CThVLkY9ix=7Kju}z0TDF8qxP(kaa~Cgbj1iKex$!drbV3`TM0@Qpe?s;fDR{k2 z%p-n5(fIuVPXG6@!U)5h2vvxJ-2m)pzYqb|>q-}PO~~bNw0Hd3hVl0FM)lp>-!3}c zv~|js93Mtm5^-1g#809UQ!NHL(R(!AYX;cHfADa@+1qFn_0aslyYmYW-q*aW&2Mq-L($MMae;BTGjtp{mmnOew zFeLH$T{+wq^8y@0RE~f=h^2rFM8zfxaa(a`bc2VHi*TnA1%2u#LO!sUiDq3!s(YZi9>m%rCPt{n6-eH=74#F<;MVnb zhX;8p7Gz_OcQ~dvA?anZ!Ya<_MvE)G(~XQ1I8ycu=^JL>xupZucs<11P_snyKa$Q8d@wd)PS z|FJsj&zuCF53sG~CiXKMB=V!I)Kuea1XgF`j0trH;Rt=3<^DZet%wMCNL;Q2R0O*O zd=6i`fsCz~8q}VxWbe~|e9NL0(^bI02WppIX7AyYO=zy9vYG!j4vVG-H5`>Zo5eEz zZtwwNkjN;WTw4vO%foRlexKI$QDz~L8CaGzbxne?_2?o2!U717_4^vN^~lUg0gfzc zV{cp-tNbF+*bT4VF6yNah?@HFKX5%PsHD4ECKb66V+}VPCSB7pG$!J6KWMU(th^cN zTe^Tb)@+N!2~``x{mteb?;VmU;B7@wCyrpZKC6t-bKbk5oEWcSnL22@&#hL2qlPiD zvC~=jE+1@n2g!chgjspIz`q{ZbiHq<4&nf;)J;ZSbg2^y@_0}#S19HN{xnWfiF28G zu;gL}em8TSTka@6c$KkhPPLr7@rnZaeNECScxlvs3aRMSc*eJ#o${o#%kPD?WRlGMUEmN4EY0^pCh?OfR4 z>Y|DafuY+xeK+9pd5BPDdieX#RJ|rM@42y77mhRI$V?F?pch{fyxy)lqHYBJvmZcW zh`K))QxkEDxuE=sC%-ZHAX)eP_WZKAJ!GKdQyACT<%!1NPxNsds??h}I1QTl?7^mo z)J|&fv{0q3k_9173PbKUUZRs!GAeuG>}=b6OJC z(4(ySDc4kjA3+ z3u?wb8jiFxA(hQ2b{Y4lrc>=&F4+Xr*E`4qpMIb&6Ll~&UgC+`} zyH;xgFgPBwN!pvNO2`fU>Z_JOGj+*IO3)+UH2O&Vqm}h@Pyc9QkSPD1+;8@n+UL6& zPgp}y&@Yn*dFsOC=4H#tS5l7@*#Yjmr8vuzMsnS-a5{d5`FRurH`@W1tIBUs-4%ag zlR-I8tZa3az-1yoodWi|9)x&E^t-s@5q9t#Rk%Zv6!!8=(s17Kq)<{#v&QYp$$NsW z))2k{j(?Zc*Zmk)WEKz2RuI)U6H5It>&)Vn$^gY3)}t;DW8V&yD3<=9Wr}+DNbQ>A zAZC}1Bg${o`@?pFbZ^yp&uSWu58r$E%Jhu%sA?|pmjeLddf2!?NGQ8rf5g}<#BwhZ z79N&5tD*2%<~7AP9)w`N9jW4bX1nT%pUUe&x0Cr&U>!-9D8fa$Jt{h4hf6(pt%f_I$LMIHUPnSD?ZC)Jzk)wnH!=rKIyZ&0bbBtDa3lNz{s6Tj78MMH&x zOQK4E()eceEhy!d`fa?+eGe`H^ZJ^t@#kMK=f<*#)oS4gVcpZMzu>?Wfc7~xjE3Yn!5Z1uR0it`v!r9-vEUwqiti3QvYao;j z+55fKLik)Z6Lj0=eoXM}_m~_bCjCB2pG=H=RCh2au3xK=Q&rNSzNwp$&H^ zqt@;ow+aE+BZwITTjWEkbam~kMWL1F+>BZSc_JMR9SdX!-H)f9BXN^EtpbzCFPvs2Gv;KZ z;#k+X4k@BV=JY^Syd1QCO_pPxv7{U!sjPrh^9LdvS>we#6w|GWy#z9+%tu*In~$eX zW^`YXBZZC|y_1Nwp8pa%Ey2$$!X{%oR;8l4bRCt*3xbXl1$I7m;ysqr9$2Vr%ID1q zCs&))6~1ZP=5s;v_Z5mWpA<;v-K!NLB~pWnUqH-hO8mP(3BG;Z_<7-^18u`metWvm#?t!-Hv-V zs0&5EBBTe!H>uN+SD_xA>Hy{HPb|@0qtszZA9r0uj-F0$TOEPB_OEzNfsuL$_Id9Z-XNr- z1uiVdqS2GTn#o}5d9GJY7eS;g3HLYFLC8oNna5M}u4l^CL_0av@1QZ)T>QK2w~Ang zwNwFpMs?Q!3VNfV!>g&=#M8W{6YPQ)&Sh6*-rZqcZJ`mB_T8@OjA0UlA~j zSVx-_km#_O4=vR%cHIBABT}v2FDvc#S4*5PUqtuL8+I-f+{4iT`RI$oR+%`2H0l*E z^T?%y;N(9J^w5X2D`_jLfCF{(9GLXz!nUJiyCr*IuKM~=cGpwOII1DScC~f>T+hG$ z{IkqHb{IG=tv;GI9mdhbqvu6#IE>r_+U~zd(!R6GNz3PNe1OaTu~7bgB^1nIwSgnU zp#vzlkD{XDS--Y&S?2CD8{A?)XWVcK;7ZgD#d$aheum!Uy@v#AuE{Cuh?ZWqne#>9LDr2iBT+d za&y;YEgN{et~S&W&J5orf(GKQTBB?cJ(x3Fr_n@8EGVM(5T^t!gAZ6_tWZ}EK&}JE zV|i1T5@2FUSXse`bbn){sZ}6N*71cxi zL7JcTdB(GPmM)!lDr}N;s^o2bZQVdM z^2etgFH7KIf?#iIuA9*oVWXg_1;KnS`Q795TMxf1<@*>6gg@Pxge&PBUfr>n9Egj} z+D%X~Ts!{EA*!F#BWbzSm50YsmW%tDGJ~`%H2U(ECCMHBt`|v8j8ZQAS8!m^6)wv~ z);i)A8cV;1KDiO-6<~$q9_`K{soS5dLw2(#OlQzaw%B##iBmG;Co79doad`W%$=cA zi#19llT0Y|i!_>xE!zJ_*;|Fhxinp%Awd#?OK^7&4#C~s-Q9J7K@udmySuwHxVyUy zZUMsJZil`9{XOU6T%Gr}-jS~AURB*yt9o#H!hfWLQy3CikL+zjXu^Zo&zk<#EVnbA z_D6yPjYrb(%kh+jL*54B^>TjQ@?3vcAU0IEiS)T1TsdDFz_=cbRnS3eIL3+b_S*U- zO84Ia+}cDQ(W9%4@WS74+h1%b&o{ElqszflH}tkA`Acm-!zTkp*78!-Q~OYGo$TLZ zd*Jz>Z8CcyGE_bms(ObFsqU(ey=4}%QkzeuU+i_HxQ^RUWEb-jpVFubz$&B&9#c;U zvGV@cSKMv7-(=;+9!*9FJ_dW5{8$DMRFF!T)_URi{N-2pm?0kf)Rg!SU(e6`*A+i& z9niFFw|S(R1{u78Zii!Eklc7s#F6t@UhRoN>+Ve1I^bJrB2jm?!4trL^Yk=_JE}C{ z#a2}!Y;1jHF7RVjHI{5g0Q3b8RIa+Maj!5oV{2Ch&`UaE;NsHS`;U=do!hZcL&Mb>0dndu#k(Uh(H>~b)iFk0z13EicdG! z68&IYaHVmPb%$}tdr5U|o7#{T`bMwcc8Ky9csOgbW_Q6q8qv^R-2_(NZUsM&Lp^jrXHjQ?M6#7p%;$1u=d+qM&}}M{!;*5 z@3;^7rGjOxJ)v&VbD_dJ!K`jnlF0UB#1&*#OI!$`BXfbyG47Luue09Vhf>DvN{M^&yg~%&6;es zhDDI~prDzNL`?f-s}N?My&x5df5u^tG)Qp@sZAqT)2i{9;4i##Qvl!Y5k`7K7ijJ` zp_V%Bv7yVbUnbrS4k-%nJj!wrH-1j;EB)1?cb@1=hv8g4SB6hh#M@@`L=ZjzZq!H! z9W#jd!tzqE;5(bq@==O~{b@Y3E-0LbR1!5Il(k)EB(%>Q`7nMxLaZmzag-H%0{9hSDzMZPN42D>tPEPr%xCY zyHJL7gIIonTXNiOTMKG2Su(2dqZHz#Dde!1uW~HZd6Qx2PEys@WRG#APSPzB#vf!k z(NxgZGQd7GNX+u!5V|oWaP73l!|y*BJbaOgRF26)Gpd^!b+UvSgE40Obj@u9%7fK=$3baB*SY zs9Mx^j@ycP&{x&8Gy0=il^+Dm+J#4@c=>H>nbCAF2`;M4%Cp(fM`d76&thG4jN_s~ zAi4)3sz?m})3o)2c~aV>dZ^49OO$y`RlZ2U?G=2>!1~43Df)@minkjEGWB2-s!JIz z*1avYj0>^#ZyCp8Txcl5g%;f3a_J*q;#6qqC+4^GO$mMtilo!GkPgFHM4T|%R2=xb zWhKPYgdb2#E7H1nNtV0@maio8h2Pez8XRdW(fC<};&k~V$2&Q(`HXDG-~Z4iXjynQ zh&fJ=ScH1`T-9H>lrW9O(WG6NEDT!tmpj+{Hy{NpmWoV#ZxvU4@Y4laKrfjgZO7RO z-@GJh5$w*)JIamIiN1hx+PpEJur0F*_4kGxH}R<`L1Jby%V&0f zALZ2zq>uqa0}Mq`%Pl!Z8m>Ur`_ z{sT#)o?5)&Xe6@vd&bVY(Xf2eiYBJ$mF!oL2j)oAO=EICA75HOf&qMrr{ns1dm|p{ zibJjCdtRFj%-4{6eJ^*$GK)e})akyt{<_`it-7*1eC3v5JzvvvSHU~NsZD}aK^?~> z2ldK}?tfOK$ojp4cB`zRY1%7xm|(2jnz*%tdSJD&!5UEi8?h%H7U)D3vn!jN)c|4D zP71c0?@G4uy0RyjL9oTM#1bJ++)C2dv#V2B zwa*b-giZ2^q`R-9sa(+RG$ovsXI zTy@Nud0>H0+VjT6p6cBh39xWF@oCA7hHbxzy-N6pNRld%X2#p-^XIEqxA8}Oy;=(B z^%Q(|QCrB(!rsrZupa(rlvoi~^1YBJ=sD5`5zSUS4SWsiKyH>s5K&+s^p+OIC_x;p z3#C#xDFG^Zo4VJLHRT$%wzPpK)eIKf?9t$0q7uhlU3r&i5P9qtPNjSG$6H7yNrRbU3;K(2LAF9^*x-RMa89ne=`B^z@$w7zH^mpi>)M!PInru+&MHm{RHZYS)gui)KW;!D z)<#!R_)fRnu<8akQXbe+57BB0f}Zq&I6 zbl2PqzD%cZr#1S7w`dYn9R% z)_Cv|8rQ)7&G`=3t4Mht3CvFGj#5k?!sm5xJk+~T_~IC2GY9_?Ope5dzxpCA)U?;f zi1HLJvEecl+oPUMQ_)k$*b3uCWu@V4nC*+ji&epDz45-au!DS6gJg{dw|rF^%YBCT z7>hC7{LSWGhOeXOR_tolWoB-%CPLId6)6wWILAo9`}hv%W7Q!E3ef-3x=oC5 zFrl>9PQB^`vt1o2?LM8OE@YjsEHybB|2N0BMf?>7W`sF6g|_*tyQe5pioe5YLwCR* z?k~KM^-9GCo!7<-6G(shqUZo#b-{Qf>HF~5p7~X5m;BD~;qvLT(gS?jUTEJMWZ%*bh&Gr_?*dbYWy;!-vb<;(leXKjjL( zZF`L)u7R6%^+;k3awq)+1@oe-PVn9u&&&>5>C&6?ow6M&3oQ2E`duQa zqk&v}xN|r9Avn*3lcw6_Cy0Y|j$vxNl?#*r8lG_!9-YopQRA&Y$(j&DVn}ReJj^vxH48;rs|Z@eB2u zCo>#ODga@+JAM^6z@{gT@d$Ym$o##Kz zVCZf!6mN453&QqtYwT|}+C#rM$ewovh(sR||5Ku&pa`K+=OWpts*f>QtAX|oxuzh) zJ(|7w_|{#%upisEmkFb^r@t67@XcRn@S^P*bz^j#mF8whNKVp;eL2_5;+dB?~_a&?aF)?cP{Ei446ypj_LO})RsZGZE6thAT%?8h{ zTN!3}lxJrmKXZ`XL4#{rUt<>vIIuHC%BrvJHOZ)o>iQyy{01|Cb1O<+iNfVV$TT*p zO&GWY0~hD?twymz@pH!5NmWC9IEzvG|C~!aK7nhCDpmw4WD2jH#7%&@q)#?<2OWv`AaA zaNg2#a{|8E5F8p26^8WVCT-s=nrW@YW-SW}9RAa8?LZ9z(@!6uJe-^M2j6utp?@aC znaVtMBHe@?EN8`1;IKvgX^z! z>Ugh$WCYRS4o(4UU1MK}CTPi~SDw3??ZrQahk&j%_zN@nuIwVR3Y6w-!dYm(sKI>8 zd-Iqf0qHOgTBWZn2YABDLR`VD72xPx?bdPJb2+NJO4}H4Ue8A!m$Y|U9%B%~aiqp{ z7GrOw0md_2t8B4No*n3Jt72Kx!839TH)}f407$O~A}z$aOJnC525p)0U}b)87hZs= z&7hYawcG+DQgwKvy!1$77)@(slmU&^Q#p`T$WLS}p+z?8?Ly{N>esP7=6 z{>o?vHcD3{>w%$22~9OW^u*fu3guQ`nwTfFBOA@gEq*DVeiYd^M>|Q<(oW?XV?@5s ze{08=uH4NvjnVw>4sZRAJk6{b1*e>W~9bXgzhNe zPztHa4TFM5bvj6m-x9EoLe!W)H?0^_{#E1qJgD^|H76||ctlcSCyQmngsy)I8($*` znY9&%_)ufZ5|{hN_lL+ISB*bHg{eV~0*xn!Fe`@o;7F#SRqXk-#lf`XPPUlyWWhRK zb;4LdFlxPSM+UpPiz4uOU$@Mti~|VOV}j)r#U5Myz0JR(Hx+qGqVFFGJP>r(Ilv-^G^6Zd5srJ z_Ffeix8WWA^t~~kUWsKNsm`p{H7E;70aN{Z&elaP!krFoc3z;pqDgcZbv@^rNQRN4 z-0n94`Up%-kj^Hm=41FYrgf6h6_g?b#@|`M))TIh6jNyiJV2OlKWqKSH8f_4sYNXv z958%c^D~YYK~0%z$@~4}6*xu@efB#|e$4v9+ik?KCs#gyzJ;LuSEzF^!&GC`x4r>6 zKJk5Jjq)$;`n3B|b5&?6=+hsjlPs5P!|xsm(&o5P6l;mlmg3axwKB#k$H7JMZHj$&=7pz^(zwYmMdL$ zmGPrKIXLIlQhfoQ6le%6w1~&q3?Pe6dQjUel`bKU}-rGaR0n%Gu{Elv~fqc{$_hyBbPk)N$4$5sIRbWBzGtu_cMg^lLziapO947yTeoFn8)Ae1(t7CYU<<4oV>^g$+;v^{@m9%JHw?B-k0@z*hkEHrsHI^-DwE#}GjW+mU} z+ppZw#w9N7jpbuBY&LBackUUOx*R|lVZLp)vauyP{tqd zEUQrL?>b|Nz)6=ib=4P12l;Z%?Ef$;8FWcw5Epr~?gBSl62_UXKAobkTC=oCf2TM= zH2aYhl^Zz`HHZG=q%igzc7D`ammp71byh_77eg-o`mL+iyz$3$){2!}8ebo$C0HqT ztC_w4EUo)rV^QsB6GtRqtRTH1V2+W1f8_@;9{l29`BcKKlMUP=i1}i)R4_y5CRwIq zBKFh8^`YSsta?meANc~i>#+;0MR~(w0&A`sZc)_l@XhdS5fK-Mc2kKZk_DIm)G;i2 zRQZ!614sG+HLK4QPX9D82_kM8rJj)d*_l+qiW`kO=J63VrRP%%I%ejo#aoN5n|E)5 zk~Fd^(*%ojq2rHP@lQ?;Rm_u%OGtRPn49u{@~3>7jj~-EpK1sKC6z)kiu=JP(lT+1 z>$JNG%t|4w>hWf5xNt0g7V%4&QMpta`nlX9zRxaZ+^y5>fnqX@KhD<=S%Q7(!g-4i z8Gn7#F<)+W5R_E#`)OLo6AUjh^}1MEn$aBkx5#3RsQXAYBLkP1EP*QMZ>01TN$enF z#cw&Gr-)f(QANzS3YuNGKe{9QPfE*a^$OMsL1*ziSbAa5(oX`#f$&mGr>v_-_!I;N zU2L7gg!P5Hz;tRPx_=Y2@v)O%()h zg7H>iPwi}Wc8Zsu4OnQ&f>2X1$DPN{6%l%hc?r_zBSpHw-`D1 zpPIFG#Wo+cBkui@PA-Eu9C`L!CLQN6RnvjOJ7U{RqtVU>Tfb%2Ts*%sY445>_~tO> zA2rRFvnK^i2<@k!@9bvx-7bdg|8^1Kx(EJzP}fa;aRI1`B0QFJQn!0w7r~$5(rMV|CN%ZKt3a&Sbavb_P3f@}=-ysqe?&{qaVKm>(6oz#UzLey(5GgU3Y@8WH z3sd}Y5O3EorZxP_>@{u1i=0dN#8$PR0&K$PTOsC*(f-cytgIR}MA&@T|MMZa)(t%j z81F*Kd^=76H8S$Dq6RT?65)*x%4EXFSHL&WrNHIsx%Sb$S0*jG9{QsFTp`>Lxt#x} zsGEr5J!9Lp!Sa!|`}Xu5`v#>#c8|8aPljiC7fR2XefamSQ(%_bIGL?D(hp69(3D%#?uLBg44x;8g41)PXq9Iz!vUIXFhxIuGhUX z8MyBK&K4v2B@0%I+mHVrTD3s%1`DvDTIjqOyL@whIO_7HMlD~zwMHb3qN(ZahM-v- zU>U?@{{y3|`|PiQFXv4xR;;7}>lUb@_S$@lh-}fn;~DDT4mi)AW8|(qQnIx(P0GDc z<$UDrY~kaVlD6$>CeKl-D|W`a;l)jczxE(BQegM}nLWZ}9vQEjB0Baeg>8u;zv@F| z>VGKJhf_Mg`_C)e2xK70y~P$W@hQtj1ks{;V{eaFfP&F=dGxEAE-+hb_Zhy{i$D^S zAZSV$k|m2<%~Eg3;P>O-F(q>Vgu!gLKQ&44#5!q-0nLEsy!A+b_DV;06TZ$Ok(ut0 z>9rio53h-Air>C92cHuDO~wuSONq+_=-BgECTXKDwU`ZH5D<&bFoa%IjBZel>uvEj!`0q_XZL8Q+dq@ z+!ddYU@OO5X&GkcF+vVEn%fqvXDY<;1nT6u;dTJhtkN0MkqIffali`cVprA-d?`zp zc#~E8OT#2Bt42m`aB?)#LDP^BeMg>b`D|X`mdarS+w?clJsy)OuEHKGA>LZE(cAG@ zgkRt`oy1SDRL~cXZ!18&WsWLVy_86^mfVI5WIyKuN5K(vHap@4*};wRk}>O87@NV= zg7|*@X7`=Jh{`lJkgn$uSh`oPplC^)vyDR|3C8YY@0zg*TT|R z^_H=K_j0(TNN5rDnsX-Gi5h6%`;gDVoU6c>UZ;+p?$C)e_6le&%72)8*na4<8S>^< zh=oW06K#RkeY97%>nw&tH&)5&P=KrInsPpAK~=E6Tc7a!GFd>@{)PRtFb#k%Qx6E9r9y z;$QcRA+vzZrpPse2Oc?|D({CGfMk-!_vbbB&Ezq4Ve^g3%+c2;_j@>?UgR1isDFL6 zvpXQTsol2zpxYCI*VTB4^fw5)vMm;^%P&~q9LG-0?e0;8>8`5)m)#c$_I9)DQ}(IN z>KdtZNYI%+CT4H~mpGqa+Kso(Iguo+o;Q@|9}L^Q9m;X*JR7}xMuKj@k(ea>S3vK= z#B%1ZSe`zXh$IqrRRF=lZ1$bWF7s?S&mzt+G^QLQSnWDnbtNgu`>>%DF z2__+$;+s`@XH*ZO4#B}Ww(19!wYTp-+%>(%)bbH z_L-^5FC5il@??HdB&oEjsph z_4=oNoZuRqH=laP2wZHS%@jBJ7k1^374s+3kF|gFKHYHFI2JF6X0N@%oGK|BN&v|( zsTA3w%g*4>Hm$mpUvV#CI!l0%RKWTq(L4`iMrJ$K&(slOl@(RDGn5KM zQ0E->Nz^CYl|B};J8`#`=;$fn`9uczZHCLhs@~x{E;jT{YI|}N&PY(XI`!0H z0_1pEF5!B>FD-0!ci>bNO&NwPCp8)r!PUG7QF+p@F4_7kr&Z6yaTa7v^qab;`AsEE-kG8H{{A>y@AS7ZP zeo^Xx{7G^UbW+sDK0P|kHrsT3w+_PCoXh6Trq_+4oqr6l_IFtom-8a>klf(QXr?QS!qHwQ4Bh=1D8%`Vkos=P&Djq#o<|9?y32T0 zfBJOxU~PKyvQmLQ+9`0gZSfftPiPYGPQtN3WWZwPh3w4FhCw!0U2Y@$vI`sWb5Ktr zYo|#;C+o9#0#7a?pp%h?n*i!J6HL(?hm~>}pOOzcMc^g(DkAm~J%<+!9MHee5jDe- zZutAy&!$bEWMMGpd!0O_)tQRm1B1@ngxno(wTc!G28AA;mJcGWT9vZ`Xq~~UY3ml! zMP`jF={6BOpG4VMRcr36H1`$8f#4a-;|;kr_KN-VI|<-4cG&mrcqU9kazM4ltjS%; z*}#q(fU;qR?K0CXUJ5m4CkzqXNH@rheEmJS(8V%!Yw>MgA0NT@u~5JhK8nwLBXl7j zw=sZF?g)OfMDERfDSY*+0f`c#rRj9LR(gG^|6Rv%Xn9L{CHUndq zlX-edeEBcoq1ig&2VzT|ml`q!PWXRl3%#p<;UT9KO!q~EsC(2W@f347=)9>AeyYr& zf{=p#iMwK|)VZ3!jL!{9U;gi;-!HVQ-71Y77TQwPF6&l?0IkhfaudXJ z_Al#!%pLdtgTQ*t%Rrf`#Lvbpp!w;K+{g^M0zANvJ ze@dbiPx~2)*m2#fr;FYwW6EvTQ4)-0_n0w+`BQjiO3!0|+bwfbiq>G36BnL~A0Q`; zQvY_n0l67^x=Mc~1W1`~rTqE_$1g*ZwA6@JTn%7`w=~28JI_Dde{T!bsV#&Hzb}pp z+m+F=nOYjQM4$N6*n~)Otur2@016SgVxhguKqg1^IuCDq>MS|clA{}|*47X#iL$(^ zRmb7xFIM~e*4}i}_twZBlpvn73ncK`@UI;m1U7KSOB=uWM7Qwg^KHVB^K*!j-;V77 zB4P1;7QF`DQtYGc*RcHr%ekaK&aDYrZ-z6KoYB2$exF_ET`wY^-kkNn6}@w~=(1FT zpf3>lik)ShM?LNpXi(r(c3A{istc`A=k;&uM+qsX57{`1EcSgr?dXkOY0mg(uytWc zGYw$RlKrd^%hklI)m;?$(qhzEt++}K0v1&AAQL1Zt4!X#Z$$tM!b(N15Q(ud7i8?JdOm0dy!sZH3n0A@=uBf?}X z2bAcpPxSLiQy83WX$wp{CSG>vNp7pF9VZh@8g)2V!_$KK%Y2|rqPu(8 zM@wQXMPFLfit9kiz1qN%Z>X^fvTCAYcUJMbgLwM7k7425cwOM$~>58Er8w4cC=qdnxKyyA3Um(*CE@FXKcLrrs!vksY6 zjqH0)xu;hvl+*llg~`J8HAH8Dh39V*=S#kq2xNe741L|*HDK9Ps#mSG%YLTwazE0& zs+Y5(U~zUk{WYKCe6>@H>)zgCdCoUzeebRZHj+Cmq@B~B z_XaN3aDERdP1Y9sr3U)udz1g_0}?`W)o+t_`-mP`L<5Ru?+_^Kn09S-2FxAVt-jyi zfmxi^V_-1n-CB1fyP%^AsxEunFLe+mcqn6i^Eg;ayH!69VzO zhT!f=$N>N9l%8*J1E`Q+6d?t9TYb)6)m(6BvRciTvmji1lo&rbO)1EB@I7g7vUaKG z&uJ|?&h@iqOEww4WS&`4(Np zfiKt1jqFsLL4~IiU5gx?ep-EcJyWFvR}A9s*Au)?26~VqoW9>dD8t@_MtT~ve3qx+ z91=(NYDb&%-NC_I#B zm}_p7NS`uH+gyEqrI3cSM1Mekolo5qxU6bA-WY1&+$1pDo8$$+!v3aUHp{{;yi%cY zZR|MPV-hOQ26wcTKJcH;kEpawv9aGp2vhGtismfjH>>IHnj>Bo+5GT$GdDBJtRdXh zM@SQ^MF*p|MVk$lYJB&xTW>GRpL0$B)24mBqu;@1jpAESX$eu~J-e1Jl+vlrVg`3T zFuh1_YZEiM=@m`oN~L%*!^?flzAl!-{rqsyck}JrxSAL6E|qoD|JuZ1`a`N3+y&I% z`%{Gmi6y;7_gC`1;Y^x;{=5Rz|BDz1^#1})EYGKZSFqv#jqe`_`ai)t>i-J`5nvq6 z|3S;Y3%L6~Ex+TCMHbIH=DdT>{{%Bk|Gz);QWe;r@Xy!u)sX_EXo;Ndt^7A3 z?i1p8C`}6xkZ7+~l+(;WI|QnjVoGowW8s_shiSzL;8=exoExz@BiBAVv+A<({xf~C zh)crewe?kquf5r=q5{IUD31|6=xU zOc_WD(s2R$v(fz% z#+x#u#Fs(q!GCWRzb+Mz+f9*$9$JgZ#A94&a$u;XI9nLLJ12RNPt8;&vx4VC-u$VX zO$L@MGB@EUPPuR>_XxoVgDX$5TC2&reQ?ka`B~1+*enC@B|R9jkCb{k%;giX!M&{4 zQ;`u#_l;)=5%`dhPW~Tmla8#D&|$GsP))!q$+bx$Mg?L=1IA_E?-&^1BG+ocLqr<| zAiHCcgLIrH3&C(V3*X)bd7hRlLx5pY;a~FwOg-$Q{&Pg5$ z_(^eH2qF#62EXHYdgYW3@Ek|}^#baYAhJY9;2^rhXpVosV^r3IfSik%a_?2GS&eHE z@`nz6x?P2yJR02B&%1>e-!&A?ks3(?3B?2S7s^Sa@NLuC#%juRyZMC1h-U*_@vT3i zItZYvk;6O$g26-rDS=BtL|C_2s3VJ9Eh zoE5+!j1(()^qIM31tTs(-akOeL^33Uol`cckD`)4*mnC1di0l5`gM_%=cv&UsY%)^ zbcjeiuqNXFXGbzXpd^Y{xSF_3fD-Xt?*!eQ)ri^k=QLSvkc>1*LYrmdz&`)kn?^Gd6RQ5}X!0Y=*S%TsqQQXJ;{XA)7 zeFoDRmiI7*E(WYd3)GQDw00al6%$rJv>B7tSkCi--DkvvC0R5RWW*yLI9_9+Db498 zF{C8(un1}G_s&X;;fMQr<0Y)sZZ}zF)}!>O_lJ}yo2Z#}D)ZMbBe6K1ebouZa*#w_T@(i;>#!oVdzXIQKMLkx?z&OLv{^X9tN83elJ7C+WOLw%fP6-LbE#v~DDc z%49TainB?V$YQn<9FUgXy{hQMoyp*7WIWaG3k$QNfGD}4vy2=9@Y zX%;Ck$S1T))~BzmrxCz9vV!b}?meSk>;8$If9w3_0b!}|sQ)e9M)iA}j$zPR@LM#n z15&w>1A|BOk{I!dtx-GbO--2-+Q1A=nnaxZNI|9`*=z$(+;t-ai%D`WzwS-$q zbBd0ayQ`PrU#GkM&FIcM^hD2O21*tTPFezbC&VkD#8JU|!`| zMh7@FOyFo*HZ{R5(MX|g!Wq_ML7PY*)xpLXd#WGn=S^uJ2;Vld=S0${q-PGsGS%t4p)nDHDe;>`sdlJ{lblRAW4G8qg)OCUO)ZI@iPGw;e z@|IK@U0$hlH>u1HEnD~cplGCD+Lz?k5TS6mkkN8-`3 zZ}eRiq|hB5qi}&#wqf5VI#c{3SJ)uo?vLywT&O40{js+X|1n77$(!GUX^R2IAVc42 z3?!aC{ij?6)+#vc^qxSIAr;B(_e!ZLLJAR^x+JaBNizvk=n693Bj)-mm?ibw)P>1V zG=aN<90;yxc)*WE>|1P5R#3U9!iTw;Oq6uppTd(H9R?kx?Y^ku<3F*7;XWxx#iI4? zQ0JKPiy3|*-!>Q(*gGRCs~CJ-{}v#$s97KYI2`WC$zi#5ye&0r*KE+tDAA#$fo+v~ z#R;j4wffU`Oz;;;CxJ(OM_=tU$*Lh@zEb!D#g}Z=cBt0v0f0U>*}PNVnZMr|)Uyl|>mC=4bVpMLQ|na5OBkRW{;B&DgJj*jN} zIpFd~ep$$fBn7z)zz(wD+f^pUMu6qgYu*A_3r?`88*3&E9WUP|j8PQXmZ~l=3Vb^* zoj;#GS$MJGSW^}e!L*=T4Sp8E6j=a5h(RU;e;N4>MP)}GVDur-bNjZ zn#2Q)Cxs!4_@}8JQuE{!lYEYeM6Ph$&Yk{Aqq5!-{Jv%e}3)@LPC&%tp$rtkXLexWe+gcx0_U1Mc4V zRG(>GSs%P_kf9TT$Kd&^a0xakj)$naM+pmz~+5&wSHSGUF{?Ji+a3;2`p~(cG%`-acuzZ^P zfK~3COu)LIG?NHy)dk6fdIM+{e3d!5<~}$+WbJLS6!z43xtJim|H)7^Nhb^PIHBU9zGsqLa@jAR_i(*1Ro?a9D>VG@6PJY{I#YEeA6p2 z7^s@&I}@j+k*#b^ahK{chCSMmkvC&VP?~U8TZq#sWTo9fIR;&1brf{EBlm4s|9yv| zFdmNP!vhn?S;GY%i@e7t^N@Nod>|6SgRSYF)rKAk#%~K(-=FNR(X>?4E5&#&e&iJY zxc1V7o~ZV7LT!O&Ez8G-!=Xyk#eFI(lLufAZmBi?6U!qBNx^B`-(b0!EHxYD(}>#_ z>(s0Q%Q+)cjt=|09|D_?QR~<7>QHHF$MI;?mBXjPX`6G*Ck77jW8O*2l!Cv2kl(5T ze_aw|VNvZN3Bb_rdz9%Rg@`#DxR3HtZP*5gV}n@1u=w%=#-+oz+nV&V2C=Q@^0a8B zvqtrZl~xAz<}Sd2o&bxxzu*>^!&Wy;OdSY0NCsww?kfcCY@Ob*nC@;CLm&QSQuFdd zerm!~lP4V@2&tIRKUH-m@5Z;J0Gsv*D^M!~OH7J*-yGN&wEwwqw*FclK8XJ{{2dJssS# zpPuLE?QE@N@=Os{l$3bf$iD|g++vosjw4b2^5v|w06z5RCjV4jjUu-T^BS{*TrdS6 z`5dDs$vLdtw`^kA%7<;HczD@*L_)APcWl2g^_|roVTw2;b)4Shz>JQC;_NiffiO6w zGrQAv@}-EuUAkqv*L6QD^$d#MBBMU{N>8_SJj(1Iv2T8C^@kqF;=m0jH9fkNX8lk- zs@t(ShadBOsZ=G%H55KqYh;zkpDwsPnTNR(-`%T`aO*cO;TLrZAoNwGqQy|b>L0Ey$&^?DZjGvoi2>W*cf zkXi$RW1)@B&Dq!_G4c}p^y{u`b z5mYt4r(e!}cl;L+cZyI_=4B`u^M+oN#^OYD26~X|u=6voZup)%u*kXS@bwb|&(CyM zMtoYb@(Kw7L8ZIkj9oJMjzVvmFBX604?VcTbaThP2|0&%vo6Q2CrpPKk22Qd(}h60uwLG~2YfDG9&Jf3m-mf_+T=cErh?UyXy3$5Q(jZ&z~^h& zY!iWICL*=GUNlsHRK$a?ROTW)U77{6sQhSn6b{zmG6&r1ZbIDkDRlZ$uWPbU^z&c? zXj2!DI1<_tY?zTy7)bQ9tux}>dr5?13_oh5rBFHQjvZJjkuQ~djxPo>?44mmfC@av zEW^=f%;MmiIq9_0IMZXzmmIEZYzySRCju!W@KQL7%3EQauqodNSB;*nE@vtRqVuRI zcaiybnS>84PRcF)P%mRec3e`IU=*^svz@qwvPSL_L&#_}=rKbJlr_5nkk`41lvPd* zNLd-QxPt+!Y9mNGI%7q)|EV=BH!L@oKt=%)rmf$K>xLy<1SeDY6p_`I3;r6u4VsgU zZsCdD-^u^w%Oyh!6~_{xBfH&6J;T!HLIaR?XPH9$l!|5_OI<&j#zQm=w?IrV;2Jkz z%;g1TE|jRm<=FO}J&J~1lQ5W7UNdd1mE!(1U!9LzXnJD%GzfKeP4hNCkinVvL5|0z z?fYyZGVB#?()3Q-??e7){>3wY><{@PXds0V+0W?eNxvlL5=far(OZ!L)>17of;@3X z-eyp-hmrzn<3vL}LjLa^g0vq{W{>wg0c;AzPW#?uXjWMvjSuv(lG9Lo`S$b|R_PU^ z>x?IeP$4>)a6iGzs+U-58A{o3Z}B@D>;6f1x4MACTXHolv(M50}U*3~_mNe#HH_p!WE z6dTZ@-=d>qk&%T+!Wa9@q4#OXj$85y4w(nICB8IRFy zA@c8!3#S2NQE5|hwjIi|ru755sbvLWtisPyRk~T&1bD^%a7jkmH^aMr0E=5TvY92r zIZ*F?mPkBI%SCtdkT$d?M#fL94<1&f<;KRYwZY**t%2PZazGi6|7{B6Ax5Uif?LcP zq%D*KzIgh{RBq6!UbB zA7+>uYr*f<=RUUQ=`44>>P#_gJ-x7j) zo}{zHrsU+LcO2ynE_GQYE?7drSJFPUl;3BZAUNa~*pIsQ6;dqPzYR(adi0b!_|*V# zdTI`m7~4~0PMgw60Aiq}DU#Ngr+5bo%!pB%!#wlzAtCIN#4EW)!QM{5g{w+8 zR!e^|3#)5ZtNvIx2hFyzDcxE;SL<$k>eB{U>=;v;S$C@@j-E>1yLkzCmKcx|Z*(2N-3Kn>v8Zplq&KQpmVD+ErC_ zm9f8rgMicfrEYoyd%m8(aSL08(*GZt-ZCtXrt8{HLU0R^;2PZB-QC^YeQ*yF+}%C6 z1s~j9g4+PWgALB$d~@B;`~B~uySk2D)m>|^eeNqC=K(ikndVqA{$OP}z#kc-r!yya z;r)lKb~?tY|7zju4q+$};9~aCzGiU~VocfkY#JZYu9+sgJSW@A0jwBg&>q(9_6u-e zM7txtlq)7+P7Os6^MudH6rhN=nL8+W=Md)sa!sRB?vHPwbz3sfB{j@|^al}_=o6V8 z`CbSXN4?P`rOZFfg^O=aL)OfY`0Mn1^3S0yKGX+p$a~?YQ>o2a0&j`Ko}qsPxk(`z z2S2t_YjT+(plQ#W^rPzHfpTt21smdC-14n-9S6T85G*|qOKA2eFZ&?DPJj$?f#d{N z>w{-xod(@uvU=SZEN9~(bN=>Kkg;QZ6+kk?kG0^Ur3K4tgwS-;KoegCNC-b zUC@S}+=T2FR2g%PnKA(y=ME z$jI$4dx+FPME^3+O`;u{A)-!+2@uvU22G#)OKM)A{peo&l#%+;cqDVwj)V%tbrYHx zv2T${2P761cG}9VkZfVTw2AaycE4@1ES3TPq;JwMvan_YpXRdajaXAcRAiM{?dpSp z7i6d*V6KJTd|6!oU78`$ihJX8jo_=OB-tI7HXI=VQV6=4w z@Dv|Dtir17HW@`}(bjUTqreux(^_)Op1@kt&RBQbmO@%iv)u_36Yk28T#^Id+=HAY zf!256!F9A2kq)>3F}magj6Eqm3w z7}2x+03+=2a60e#kCTaZ;T`zbi=en2h90DGV=K%!Lr!8+8s2Y2uPn!TBi35r;m6# zR7e0bk~{GmsG>-Fu-e6)+)731x4t6-m1DmuGAcd?8zg7N3c%rUJ%4T1w%kdiN9AO~ zRrzU>6^XAJ@pkOTOyb#dCZwse_s+1(rZ}IEeqX?@r zimV7W%2#fNX{7~B(%cl1EI~Zc5%NREWq4dv$vGqnIijL77FT2;R$c+;d$xsC{zKu; zUpGZV$|E@PIaS~W0s1LWN3e)28_Yko!lt4GcrnBTHS}%iSEjVt^yFu1H;AM6MOQtp z2Ui=QE!Oz2F#cWMnC9QSMYFO+-c70HwNzlpjLpku@rmU`3YT-=F~`5YNl@)MOjW%f=aw%2%?h zoh=3_@)2{7=f%RpBdI&>MVAS1xC&BwZFh|Y`cq+IsoXI^^Xg@{&d4~#+3lC2{&(?pM|JscT>QdSmD z?q`^nWS`J`Id+BL%MTIrv-BIz*PcZSp6jWOp0ek24S5j?{%yZ9@(bGGw^rYGirg~^Gg$_$&38PSVOH6D)jaAK^R zXE-wXc?|li5xdVcJFt@lRAWI)wThsIz|upo*=q0@3A`vj6XJ8#W#$wxiiarP8OGvi zQ%>aNNP&ZoC-R0$564xnZIOWqQx%}u4ELf9xv}n_NzZZ;%im-@Jf+lVajZO-zQqvE z)j6$>1-O&CckMbn_aAwR8BoYTuqb%0Ka)LlQ&&}aHW(1x!AW7%9gH#3ExJho|ga#K%kVr<`Oj%&=5`#C1b`hHZw zPe+Eg5g8lV`d0p}x4jZToI7^P5nkzSQmf<#vIRTD1MdcDf8BNS)WpssE*dY5lTw{= zLq^QaxKzJ<8pxpKL>?T?^^=I}4;t6dJZA;49+lnMF7#ZIkvU*7R$wcoz zeK*YhRG1~gE}?2yy?e0<$gZ%NSc1?^U{tQ zpd2Fs8f9h6RQrKS!l``bpP2RV%>Cb5QMAA_x`JNwpH;a_KsVQ*@oADdaaBR?N)Y3I zouvR~uFeuk?fi1DW+h-YHSrle6JY#^Ao)E>iD5&X^+n86vh?fQeGOl}`x0T$N>8Zz zueYM2qG`=e1<&n+`ujae@y_t{)pS+Y7;qDIqT}^ zHsyC;KMmMaZlmw`prIW}Bnk{B?CrxYZ{vmBmELKmE`=SobxVw<=R(#32{ntZP6k5( zWkF(ja8^ucMFWZ;WC!{N)-1wJ5j#xeUQAyY@JtvN4hePlBq(gkQgysUzMxrto#lWk zDT=^_zf)%1V$x*r3fEXprJ&=FAv3xTS-`PwZ!M#Q^hcs7s${uh%THe#@pi{s_ezCJ zVim;6thK?O@%JC?3VCi>$^mVwS`?p>r6yfOMvoppJcgFW5d97`<0BPhhk{+-j!7XJ z<+$>a`{#6256FYG4?MBmdXD^nKA$e?#Cl;h;b!Dm&z$MQ`kFJ6>kS9-yF2lvv@FV2 zOB3w4{C;K}0Et^C`Z1%-WNJ*(7bYrp6vO?!Fr(ARKgl-KB+&!v@@wjCy7EaL@ua zx=#yn6c+Urpdxsc$z2fHW6AGMo`@qR zT;>?8Y^QKg41-Rr+fi-G5BFJ{unJ3GW>BM#q6RRhjV&YVo`pgWO>Def0(i6B{|WyH zOn+YLb{VqZ(dJ_uHERWOZ?oKDA~IwmgRG_cg)3U=k-0dLC?%Q5Xln8s+EEmjY0U9n zJ%m4<6vYK<(;e6IvPrmi_WEkSs{{oF-5F`WcX)_X(@AG|i+l@`d+zvY%QgijC@sm8 zD~ioz+C8Y~dU9*`Tjw~%)}$4-V@*|K#QWyHu%9x<&q%)58PK7j{KeX4qVvJaM0FR` zv>*Yz>YK%wXNqSF&(%7}r#F|1A@t!|h{ZDIctXV~-C=3**GHXWZ$V95!!Cv6nUp5B803_(eW|}oC zw1$CXb328s^3%fu9QYQZe+2MInpvu4E?Z7rCi$1+M)B5ny;i@;1$h9pTY5?8Ay|IO z8c(lpZ%qXBj;%5l+OKOxC%;-P6aVgDsHIgbh^^>yCv^EfpwJP{1E|=t6m;MK+v(%F z8Gub_!&@tF46VJ1R1b`Fru0W8Bla1E$vAqrBYLBPPMzOOSi4D8+~Q1O4G$Qp8=_$3 z==7-csfOlM+4>`;Zp9$^J<#2pLVWJ%zZrI+yc57sLuL#}5u2JE zWgraPSS=L@$G_uW5Xe6;qN>?}klJ8b7DTGz$<*fKEwjv`)+MmTSEnilKDm`gCotb> zhhYOJtDN0|L;+VLWL}B!Go)T@nhefi?1LyF{+E{P;;=g5V`*aGN)2lYP7q$wmGFz6 zrsdR~>`^!usaFnT)ccLL836KZAO3W@z4b3zf@w8;S#vc#8$@aOM?M7YTN0!_p}+T| zu_&H|~jUPxxeU0j!KNu96=V}PxHH$}|od1=O zXHWbrEdpheF+g)|{y_N%p1ZZukyQ80k+9wyiXb3+Hu|5wpa~pG-oA$qcokuC5!(7g zBIB&TP0CS_xPDLq5&`r>p74^03lTDAZB0sw^aNFtk>dM5 z+8>iuKb$P`qmD*2@OMp?QHEL^i~nGO2bxERK1K2J347$s8Je~z#h+2UVw`iJ!QT@9 zhIKmBP_^G%f-&P_cbHzZf#TM``Xeo3)ZdwC9UEY0Y! zeM{oX9gYsHpFEUXQ{z$rk6SeM8r21L0+_KMU+?Z(pD3vyAsEXcU7<#rKi^qYWM%ET zto{&C2w%Q8SL6f3-bCV=E=-QUuYDwn@K`e$KT{8zm3~hPTTSsyv_jF#A^W!2FM8qV z;|aX8!Rzdl{C-8RC;2+w)wHKB)!0EO+3 zu}6*MN&$P!cGdv44h3~Xy**?+|$~5LE6%zpBx=+`A@QbvDgM0MR9eF}cjqrw%=;WfX zUzcFO>iJ%L><`)F0mB!Uh>c(tq6yUSE5jKvJs+L&0e&-tN`74Sx)1wdGpX4F$%b0| z>NplFE<>8<*X7saM=wd|7&*e6giS!w#?6A}$5|?76aj1b^Wpgbo60?qJP$EhsYstf zk^djHMze59%(cCdm@-OUk%!)6)S^iYy3KypK@4!i(F}aeF==^)y!kYm?D2PdY<#3K zTSGV;)2#OW^eF*Y%e2h1N7Jp$OXl=Z`S_zdIw{W*wLil(dIG^8#+?*mPsQm*=B@{i z&0unUMakA?bn6Bj9hndIqdr=ckrY0X&%N*ME=v2gDKsdy^ z#m2Wx=`#wkNoNBTOvDH^6{qA0bY@;EMyBiMFO3Vb5bnnPB=;<--icET9WF|C-P1|- z;od(>JxKQPCT8o0o~-!bOx(Hp8sF=_G&_zqc4K`fGfYCxW35>&qF=f#-o!Zs+oz%KC9^6eo&apW`HN|JY9pjt?fPwrx z&cP!M!yzpDd2Jq6AxG7$xy1J@eks^$vDx;L0feo@0y!%}cLNUp@Y-Su8OWF23aCVJk_BI5zH@IKrC7n?2U5VOi z1~1gl)fr<7#VLFHU;}Vk6!47;O~950Z7I~;V}MO1e?4@KxNrW$KY=VgT^J-Sq24VF ze@Tj|H+yi;#K1rAsJuCpdf~fYKRMHQMOtQEr{x2G&RUEVeXs4)Cy2Vh$@TqkF(Df= zdxX`lFm|+%a6CxuqW4xYI&M9vgA*baiaEP$sRakeB*Di|ZYL3Lr!Yvn;=;z2i>aQp zr=J4d1CmS{*Td8N95TlqG+x8s?DQ#i>w|V?lAp`JAVYyLYX1H>LF8i}09LLExO#oy zRFLxlLYpT>N$fXm1f#9Gj&SnEb-b7gy9V_w;?TaaQoVQgIOH)w57D#wH!2#h_qC?G zJAzm7cb((5^UbY#R)8@8Kw@36(wPWa2wt0C1vvq%A5wF`b;uG;UYM(u@02x#I( zXBrdluTK`AlQAVq-wZ3esgunB6>n#W##1Y2{bxPh;YrWQ8*E-lfZmO9LjwW8(Wl3J z*r=U9w_+_QC^w=HLVvO$t=-g0500`yaD7SD&6D=L;cE>3vikNr*U6Pq{)4}rafHAU;g#`WGMT(VEtc1Kvyc_g8w2&SIZ4^U zGfGBdgZ-FRm5VGj2F{oVT^3wASbk5k3O95XjJb*Zy$k8BMKyv9h2Z=E!IJqfNs%s* zv`;|&o{(>m3Z4Qob`<0J4xYRcehGnWl<5!sj5|UxnU+%2n|DNVs99rQw)j>)ecw)|1{fea0P|IGrEIW?qThD{2_Rzg+nne+eo zUw52D#+G;q$$uxNu3iPn()PX*`k?1`o)caQ{Chg@fx6kt{4xbPSj&Oq?|0E*3~yljGIU=l;(d>ypt|DfRMcXrkRpmXThsv?d<7 zV&Bx&%Cpe}#T9;)rmo_lz?ln-wp_nl@rL|{W|jZvR^#0jfG8PhwjD7WB=X&;@XvEH zQ2DKYuGm=Gvpw+Vbh9cm|Np(*)B-9OI?*VjeB?x%HEvQE% zL7Ofo^u+^~@N7Q|X=Fk~Z9VcYWDBKwPScmT0gL(Klo1K?ZH8?n>-hwN%!^N{yc@yz zytYXlML#7bU;d3#Z~L7`Q5U>O>XLNtDc%QLn>=ukS$lPq3&0!?I(gaj=$4kJ@Jpp0 zjRddzY$d2TE3VXD=Pn-DRJ4L?IEY<0ozCMiQ60JYq-%q~j4I}*#YxY#^bqL+|Lg6` zdPu&1qeiE(E#H{X8Pu1^Z9PfxH7v1a@hAVc&+pJyHL{>aXnO~P`Hm)o6*@{Me&BXw z2QmUZ1lXPW037(<;s*VCT?jsIQC?aFKJ8;=)J!UK8k&(9K>ceu5SFERqTBCs%Z;#5EEU(N(#3DzT+PZt6^wa|KRSXdQ=VfZRxr`w3Uo!p64|Hgg1<8Mb^!E3*rY1k99d4ePPxke>RPQ^{oP9p2 zO-kcKBbTj3DZO3V^?JqZlJpP?X#aNiNHMkI%}8?C&NaSqL{HH{=*=vhx;NnX;7t>6 zd`TFqN%x&F^d@c01g~|!VL8Hy3?q&d`VWY1ahQKZ_J!QDlNPRL(h#Dv*uk)eyH% zcYMP};_W{*m^jCYg5#tqR9fR;azEG`dJtZLh94}dm2GYpy~y@2ms+3vGr3j$ld+z{ zY^1AoN@Xd9d?@G^uV6ScuYVubd%7FgW1UUV@B=eKcgme%w-DYfw{7*GL?`l&Uas>&N4s{ojskb5 zMsrMNOuPC!{(*Mu!IfxV(*&c0ptq7Q&;zH>Zh0^6&yP!9F_T92R!K?F5RNGV5p3Y= zNlI#|z!-)5Jhl;}Aa&Jl($IXNv0WvPyCa<;5ENvqIq#ln`-U`#_Vzj+sH?iT1k*Ph z>S0hGBH2_@A~mc}yO_K(3-m3t!j13pE$pEWChUH(P|W!5hn2z^u9E(Boyni+uHvog zTgt87D(1!Uzdj-qxmy6yD+1c~KU;N7Y$s#tulpFU6d8j;hyh*kFJ`Eq`M6Rp9K?=gpE&7voz}%EEKoFo8Nh zy1Hu%M{S!?0$F5Cqen+S!*BfEiucXR+$tsSd)f%~gMBfo>~u;36DoLxyJY)I^8#;L3gkYF2$XjNJM?zPfO8CJs3s6Ug{txF%n6j#m^Z zlI?w9vn6HmA52o(Mc5fM!up1|q!_q=9fElA?_W{|UE9fDf34I8uwCLS>A zP&b-jKI0K)Z$Y6N(FL<$x=88;o628RD{aAOH3e6PJl37Bx&@t;|d`37V= zniOd8>CJEu_Lf%q?^PJ~lEYf#8orI*?aRl*3AbqMFOg6%ZlRXxdPf%?^4t9zmFsRb z{+Z~HN1__seXE0usr?=-Z*2;62IUI>v{7B~ab(@f=N%Sm{4e@TKz`32X-H(@%OV~%nUs`z6kZB< zR}Ey1l)xnFIW~^h4~A)pcVFZ|(gu6QArv|3Jj)M)RHl6R4P$jn+vZj+r7R+-oZcip zE#=1H#>co+5ICa>ESeKOyVP9@DhA+SF^1W;j&W?yQ2@g5pioB)>8&JuvRsi@V;W>Q zNsO4$PAz8&c@#BdQY7y6$-vM;*TavVRZ!ghnO*r`76lqtZ{Pn0icID;=%!qF$7%R9 zX;cGZl-2%XrQ{rSR9C|!)k_n{>6_ch1mrCSogTx{U?c$c_Ht=*_KBI|Yj>R_JUKL| z71kWcAbbcDqTM@Ms>f=5KSbl#UE}u#Owrz4h4A>unxYkdovGsT@pSJD1FMwHqKjw6+n!bGg+paf=d zeBkBjO}1f4-;LpVq28I+D3{&zZ;b~vP}!Pi$FNLK;fJHlncQdXqlhDW6Xxx#D3$Cn;#oazMbQdAW;8h8GJofp!!H(oP;8^$R}r3C5c<2)^4^heB*BcL}i zBftzIX@NPh5AyrmYv9vp0*)#2&c%zrXe*m-Y2gbOlQAcERl;~78UC6e+BHFd=JlE{ zNlh+Uga|jkIewbp7WC?}ZnU7AFLhLpD5T=6;`T^PQqLTd*flBr99AZM@wa`Tzkgz-B z(K7A7UQ~p88A*G08HdP>YZVuN`{ns#1eihN1xyNcNQoMu2>WG{^|FCqnOTLg`-hCu za_<9}lOf*^5jY4VP9$N-1&~4y^Ic#C2-FY4m|k?lII`JF6b~i?afa`PtH}KoRep4d zUWMv7cTv%~7D&VwfqRwG_!UfQ?=cNY3c_^dE0RcCLn=Ee4_HbbN!q&9cI6N?J)x>S*ZDj;j3ilB~L6H{)OEXMt{#m2w(677s z&{EtXo9$HS`2owm*r~8AAr!GDemsHn2j!M3$*=s*%3iWWxI06v#6jvir(03AI*CQ| zD1bYMfqe3nYJzc@>K(hpw-B^+n?n-P6Lh}CQ1R4;0tmX<7bpG0diP#|haK4RSbLLw z|5+1ku1TGv0JtFAuhZD|^5{1H99u;zNsX=L-2=~P!~!Sg_~%&K ztUdm^w(;lDYFpwlcY2bZ8LzvmWf`1esFiEW{d8C>V?HurXODj*1u&2uDM)k(98YMd zX$zAwV^dD23Wq|a+0bu|*ack|BbC<)!kbw{z=A*F<|UNqvSg}mJ^aHqd}|fMOJRS8 zeR52=#?eoqFjXA9(-N9c9AHP5nEcB{p&|V%l69fy&stAjUWA!Ko{h_UUG2|66F!r<9e)_rEt5UhTi2h=94KBd@pOa``aI^ zH2g`^N|5Nfu$kGTPw3mi6Fu=LC~a9FEW`+#o^%QFFcs#ca*EH!i`3uA?d!hW-9=_5 z>{*cD4F?DrE8Hg+Er;o9CG?0@%u>rBmh$|?6;zX*MkyV-5({Qf&^gIX*Ay6zJN;hD zjBQSk*8U|9=?~JXdg_&JaXW@(9gmRx*ER!H316Q-TK)qe#l4lG>4R?3fv+-2m)}98 z@Z*f+S=_K%CF|LbUvEWXN7}qT3mU3T(GLW)re!4Fa2w3D5-={14+YP$SBY zZ_VvJ zH}*L{K)X>pPib&+?dmN452a%Smev7Ud+;Om8CYB!U3ju54my#BKz;Uf9Je}s%mVUK zo#avi+6^p`dqlwxztY7iTUcVLKk^}JpsUjgSF0J=tg);1=zdq#a^N==BxYM@QPde^ z!^`y`f7o0{vRI3vDwlp@%bJN{?8b`f@v%hLw{gNFBFHu_VXn$fIF8A;4Ya>q9A~y) zucBXvhzt|xq|L1>o6QAAJMej)?7wyZNUD8hs`*}{ejDl+1s}P#-Qi6gY_Qf}JYLQ= zv*{l?yae^tYwsD)qb&zu^y1qM36I**06PWo826^^?m4bD+Z28>39^a6nHnpRxGA-? z=SAp)vv^((h*six(Mc8zGyE19Aqm7byzYHXjBYQ1&pXd8QGS9-ZAYs<_l_1O?XUZR zgN@Scz2b3>&8w1Pt_B62tA@MS%M4wIn>CCDAJJwkEgCNJDog1)rsvqSUYe3n03j2u zRiN#aY$bKkm+r&1nw$%mHX>&v@jB=Zi*h{C{W@i?w~%!vh5z}6wZ*a-s!iIKblz{5 zXbM+AT?Z%?t=yOs0qpm9j)q^2(1MeVCC3HX4;I<(D{InkR%JKXbTa%RKlHBLWO|YY z$TazZ*LHn8VT>NG2UEMWiGtuNQ!W*M(piV78g3rDh|Gb+7yWjw}0W4J+sHX z-1Zf2fjW|%^LtjjAH5gGd!dwxTR|+%Y2nh(j+Bs<%N)&e;sN9$k_QY#A7|lLd&k{4 zk8kifN(J-dn=0V?SCo|J%yXOJ6Tj$D@A!2#Nc8)M-tZ?O<+SI2UlKd(K%C`5$@utx z2FcJ3?8%;9&eKPmr>>Y``V*YmgU%Pt*N05=y3qeB?ZM8Hbp}Y^Th10uGJCh4_pupu z?wY3aLx&H|Z(&}bCPWO@3LQHgd18hQ#_h%Im`&8CJQqt$>fE3SY`SBXF`wIqlX}+d zku2ojoRsosrTm z@j(ZQ5Xz~eStBxZyuv>#zAP6c-uEAzb|)DV3}u7xnqSP%Cdc|3a>u(1Nh4^YlVg#* zgcFm0*oz_`mtzmQy_+w5o9t|Xk}}Ti>;em1Ed6e>3>DGilydEaN|3LQva_MshY=K^ zxvdxMtg+jN%EQA2Vi2W3v~e!$t`=Q43;OA=SBmz4DXrL0hUCuHsz8bpet261G_~38 zwtrACnX;dlXB+Xqz;BZenj#zPG%OFn<|4-lj#+%@7sR%_7jUD8u571wKSl#yRxf&1 zc0EZ7d_^`Ag%0lt%~hdDk;xp;U0>S3MBhNYC2O(e7D)B!Eh#SuWNQKEeUlK>9284= zLlCqWaKQ+1dPqR6cl6FkJ@h;IOG3tDwY0plEn@ z)eTfdy?-aLIM)S{b(zfO&+b6@&obEGhsW}u>ShZ6pktI<@20oMA3~+PXn+7W@!^%S z_f`J``~wb2nebo(!&H`(0u{IEm)9%o+1J=&sIu9;AD?cLaNtH1lc9guYPR?D)hZX5 zLr~sc_wGF4jfK`Lupp}Aiwi|Ca02BgCp>}Y7-?QV0o!J7FNpzA9T|#%2~#4VOkGl_)PMemS>a-;sg%OVxi9`07BB@0O9uX-fI4ZNx&MpjsR z4KJ|&(|e)Zn1R&iw+3Ad+n#-+pw6*84gHQ5cX%7lwp8H%m@(PBw6QtvjG+uIkY+cH!arP&bIJNYO2Tr;&ttqm}(tDR9zSm{#pVZsU zHWleaz_NTtiyJsfKIN!Y$@{4zXpM8%W>PX)6!iv%%+m>=(Y5kesGxF?%rEBAEpU-y z0j~;H6N{4e5u!`nmGUS#0W474@Xl5Er$}cXPVSk#O{P||ichO5 z=M{>3)AO||S83=GtXCO{?!_uNP6q*VmpqF>Vpk25bHV6+=!^gIh>c4WtKBy zK~W!2et_9H5ibkTfWq6z6@-;m&PM&5Q|(^EL5G^I0^DK5sthKGP+NSGgRfak6_cod%L%CU{vCp(s!TxT_bcIO6qbT~)B+VuN>yY$wq*w*&P>T!$E?~lugSEu%^Z~Wx0 zA&{9+36XVmhsu`zKkzA1$hmyY{=m2!#E5n~`~ru%5R^U*ydo~&#>eBA%49C3@mN`> zRuEOt_E{OJeIh&!SZOxFtB8sVaae zvTd=KHH@=0vgL>-CxgXu`Y3ujoygC@nK~g6 z<~Acdkk3T2X_tHoH`V+nmOMX77fso;PwJv5;<1dSFEIX>_z^na-_qZ<|KRl7 zOj44pS3Wtfm5w%t+A6shn^K;IT#o5owST0sd4mDQ9X$Wm|7`!_xTbyW?s}3zDQYJ+ zmF<9g`uaydR7E_eibQUNC_>HVa)C)KKIlUovKDw@4}?+K7=26vp><_%EoWkwsA%n_ zFH$zs6Wmsj`9GAB*f^1?nuY>|Xo1phUxJn?IS4kfFLR0Y+1%`&oFPG9k`?WAs6FhU zRV>x7WKGZn)u=!uj?-|M{GPNcNuC-4*DL0iI^yf2E}ru>;nW)G*;3junOHI^BIQRaxg${fRHQgltVIxsX8yy`y&N9Ne@CQZ#MxfN*-b8Ig%Qtx2}c2-a=ZO-r5WV zNiHeU<8~uNl|2DwuyV*P1}a%-B%^Z5^eMV}6;&F}0YsdoG2 z1Ule!@PG|bPwg4cY-2`+YXfl`-GZ*{+6E)Bl@9&x0Oc(qm45hv8_h>>=IU z6c{ZkthEqMSoOjr_U|?#W{R4K&N5cWPgga{BI(J}6rE=h3=cGIJN;i_l^`tWor*2% z2+s2Qj_|nBI=iy@xl@kfNv{p(*9alB&{kRn2l$&pbH6zL4|Sl-52W5-xBp)17Tk`D zd1Q1XOD9F+hx56HCeDCxKo_C5%mLa zcfS%#aNbMa+sVWJBajQU(^G1zJUWG6(MjT8(+;SydVSIPEAp>3V2t=edg5u+%8Acl zjSijU-1`TUPt#pu4|w{r$cO0l@nL(@Bqn-PN(G*nS0gbLz_#?^Y3Axyx&Pr zaomo&Q(Tba$en(baJ6E4+`vEk>UWENYeL`4;A3R&+$PWrDx(xehTyYsZsgKy7nOJH_KiNgEQ-^^T)2%s%vESfXoX{@G2d^&y%G4NNd)) z8v@CHUf&J+w!9?B(uU^h)VVR1_j$^|KJI$wG!Wj^f`ztRzXZA*motSVDsPoE>7`Ca zMoypPB*JBccX?DtIA*R?osuogHSnK1eW`(vN0$!NF2cuta;62hl|9gk_y~R%gmWvx z>y)`Kr(s(KOjNkzTK#aDl&Q9npz^z@AwXJR;7t2V*dSEyWtbm<3g-T!cctc_Am~hc z!o8*Uc-uXPx&`Xd3%x**boCp;_Fda|(P<#Z=Oc(}o1piG`-zIzV9WX>d*E`nacI4h zSHZqz-CZjC?j33`iqpNlds8E!2A~c(biwbJIN{dtqZ0Z zL%a9Oiz~_ZkH)hr)&{+v7eV&+{Kkvhg7}XYKl5E2Rumw+sHb;dFSPt1+Qi%Z^44vS zX|wj7J#MoG(s|VRK1a$7sNS0olS259AzD`x+x7`TH|WsWhIqeI2V9NayY

)p>`8cV`BUEo|{0ik#Lo!?I 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 literal 0 HcmV?d00001 diff --git a/themes/redlounge/images/tn.png b/themes/redlounge/images/tn.png new file mode 100644 index 0000000000000000000000000000000000000000..670a64c2a9db23885bd991abfa151e8838393263 GIT binary patch literal 61514 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%0D;Y?}KtK@<)(h`HigB%GEv1(!A`ZKGxgb_Y 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 literal 0 HcmV?d00001 diff --git a/themes/redlounge/layouts/_default/list.html b/themes/redlounge/layouts/_default/list.html new file mode 100644 index 0000000..8df398b --- /dev/null +++ b/themes/redlounge/layouts/_default/list.html @@ -0,0 +1,63 @@ +{{ partial "header.html" . }} + +

+ {{ partial "sidebar.html" . }} + +
+ + {{ partial "listtop.html" . }} + +
+ {{ range .Data.Pages }} +
+
+ {{ if .Params.thumbnail }} +
+ +
+ {{ end }} +

+ {{ .Title }} +

+
+
+ {{ $Site := .Site }} + {{ range .Params.categories }} + + {{ end }} +
+ {{ end }} +

+ {{ if .Truncated }} +
+ {{ .Summary }} +
+ + {{ else }} + {{ .Content }} + {{ end }} +
+ {{ end }} +
+ + {{ partial "footer.html" . }} +
+
+ {{ partial "bodyend.html" . }} + + diff --git a/themes/redlounge/layouts/_default/single.html b/themes/redlounge/layouts/_default/single.html new file mode 100644 index 0000000..0b721a7 --- /dev/null +++ b/themes/redlounge/layouts/_default/single.html @@ -0,0 +1,138 @@ +{{ partial "header.html" . }} + + {{ if .Params.totop }} + + {{ end }} + +
+ {{ partial "sidebar.html" . }} + + {{ if .Params.banner }} +
+ +
+ {{ end }} + +
+ + {{ partial "singletop.html" . }} + + {{ if not .Params.notoc }} + {{ if .TableOfContents }} +
+ Contents + {{ .TableOfContents }} +
+ {{ end }} + {{ end }} +
+

+ {{ .Title }} +

+

+ {{ .Params.subtitle }} +

+ {{ if not .Params.nodate }} + + {{ end }} + {{ if not .Params.noauthor }} + {{ if .Params.author }} + + {{ partial "authorsocial.html" . }} + {{ end }} + {{ end }} + + {{ $Site := .Site }} + {{ if .Params.categories }} +
+ {{ range .Params.categories }} + + {{ end }} +
+ {{ end }} + + {{ if .Params.socialsharing }} + {{ partial "socialsharing.html" . }} + {{ end }} + + {{ if .Params.bannerinline }} + + {{ end }} + + {{ .Content }} + + {{ if .Params.socialsharing }} + {{ partial "socialsharing.html" . }} + {{ end }} + + {{ if .Params.tags }} +
+ Tags// + {{ range .Params.tags }} + , + {{ end }} +
+ {{ end }} + + {{ if not .Params.nopaging }} +
+ More Reading + {{ if .Prev }} +
+ Newer// + {{ .Prev.Title }} +
+ {{ end }} + + {{ if .Next }} +
+ Older// + {{ .Next.Title }} +
+ {{ end }} +
+ {{ end }} +
+ {{ if not .Params.nocomment }} + {{ template "_internal/disqus.html" . }} + {{ end }} + + {{ partial "footer.html" . }} +
+
+ {{ if .Params.totop }} + + {{ end }} + + {{ if .Params.socialsharing }} + + {{ end }} + + {{ partial "bodyend.html" . }} + + diff --git a/themes/redlounge/layouts/_default/terms.html.bak b/themes/redlounge/layouts/_default/terms.html.bak new file mode 100644 index 0000000..c8ef14b --- /dev/null +++ b/themes/redlounge/layouts/_default/terms.html.bak @@ -0,0 +1,41 @@ +{{ partial "header.html" . }} + +
+ {{ partial "sidebar.html" . }} + +
+ + {{ partial "listtop.html" . }} +
+ +
+ + {{ partial "footer.html" . }} +
+
+ {{ partial "bodyend.html" . }} + + + + + diff --git a/themes/redlounge/layouts/index.html b/themes/redlounge/layouts/index.html new file mode 100644 index 0000000..01144a4 --- /dev/null +++ b/themes/redlounge/layouts/index.html @@ -0,0 +1,63 @@ +{{ partial "header.html" . }} + +
+ {{ partial "sidebar.html" . }} + +
+ + {{ partial "listtop.html" . }} + +
+ {{ $Site := .Site }} + {{ range .Data.Pages }} +
+
+ {{ if .Params.thumbnail }} +
+ +
+ {{ end }} +

+ {{ .Title }} +

+
+
+ {{ range .Params.categories }} + + {{ end }} +
+ {{ end }} +

+ {{ if .Truncated }} +
+ {{ .Summary }} +
+ + {{ else }} + {{ .Content }} + {{ end }} +
+ {{ end }} +
+ + {{ partial "footer.html" . }} +
+
+ {{ partial "bodyend.html" . }} + + diff --git a/themes/redlounge/layouts/partials/authorsocial.html b/themes/redlounge/layouts/partials/authorsocial.html new file mode 100644 index 0000000..20d881c --- /dev/null +++ b/themes/redlounge/layouts/partials/authorsocial.html @@ -0,0 +1,12 @@ +{{ if .Params.authorfacebook }} + +{{ end }} +{{ if .Params.authorgoogleplus }} + +{{ end }} +{{ if .Params.authorlinkedin }} + +{{ end }} +{{ if .Params.authortwitter }} + +{{ end }} diff --git a/themes/redlounge/layouts/partials/bodyend.html b/themes/redlounge/layouts/partials/bodyend.html new file mode 100644 index 0000000..ea5af21 --- /dev/null +++ b/themes/redlounge/layouts/partials/bodyend.html @@ -0,0 +1,77 @@ + \ No newline at end of file diff --git a/themes/redlounge/layouts/partials/doctype.html b/themes/redlounge/layouts/partials/doctype.html new file mode 100644 index 0000000..9654a26 --- /dev/null +++ b/themes/redlounge/layouts/partials/doctype.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/themes/redlounge/layouts/partials/footer.html b/themes/redlounge/layouts/partials/footer.html new file mode 100644 index 0000000..c79defe --- /dev/null +++ b/themes/redlounge/layouts/partials/footer.html @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/themes/redlounge/layouts/partials/headend.html b/themes/redlounge/layouts/partials/headend.html new file mode 100644 index 0000000..0a15c00 --- /dev/null +++ b/themes/redlounge/layouts/partials/headend.html @@ -0,0 +1,11 @@ +{{ if .Site.Params.gaid }} + +{{ end }} \ No newline at end of file diff --git a/themes/redlounge/layouts/partials/header.html b/themes/redlounge/layouts/partials/header.html new file mode 100644 index 0000000..4a17ea8 --- /dev/null +++ b/themes/redlounge/layouts/partials/header.html @@ -0,0 +1,58 @@ +{{ partial "doctype.html" . }} + + + {{ .Title }}{{ if ne .Title .Site.Title }} // {{ .Site.Title }}{{ end }} + + + {{ partial "meta.html" . }} + + {{ partial "og.html" . }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ if .Params.lightbox }} + + + + {{ end }} + + {{ if .Site.Params.categoriescss }} + + {{ end }} + + {{ template "_internal/google_analytics.html" . }} + + {{ partial "headend.html" . }} + diff --git a/themes/redlounge/layouts/partials/listtop.html b/themes/redlounge/layouts/partials/listtop.html new file mode 100644 index 0000000..e69de29 diff --git a/themes/redlounge/layouts/partials/meta.html b/themes/redlounge/layouts/partials/meta.html new file mode 100644 index 0000000..5231734 --- /dev/null +++ b/themes/redlounge/layouts/partials/meta.html @@ -0,0 +1,10 @@ + + + + + + + + + +{{ .Hugo.Generator }} \ No newline at end of file diff --git a/themes/redlounge/layouts/partials/og.html b/themes/redlounge/layouts/partials/og.html new file mode 100644 index 0000000..47ac989 --- /dev/null +++ b/themes/redlounge/layouts/partials/og.html @@ -0,0 +1,8 @@ + + + + + +{{ if .Params.ogimage }} + +{{ end }} \ No newline at end of file diff --git a/themes/redlounge/layouts/partials/sidebar.html b/themes/redlounge/layouts/partials/sidebar.html new file mode 100644 index 0000000..0f96201 --- /dev/null +++ b/themes/redlounge/layouts/partials/sidebar.html @@ -0,0 +1,80 @@ + diff --git a/themes/redlounge/layouts/partials/sidebarheader.html b/themes/redlounge/layouts/partials/sidebarheader.html new file mode 100644 index 0000000..e69de29 diff --git a/themes/redlounge/layouts/partials/singletop.html b/themes/redlounge/layouts/partials/singletop.html new file mode 100644 index 0000000..e69de29 diff --git a/themes/redlounge/layouts/partials/socialsharing.html b/themes/redlounge/layouts/partials/socialsharing.html new file mode 100644 index 0000000..8741463 --- /dev/null +++ b/themes/redlounge/layouts/partials/socialsharing.html @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/themes/redlounge/layouts/partials/syntaxhighlight.html b/themes/redlounge/layouts/partials/syntaxhighlight.html new file mode 100644 index 0000000..230cc50 --- /dev/null +++ b/themes/redlounge/layouts/partials/syntaxhighlight.html @@ -0,0 +1,8 @@ + + {{ if isset .Site.Params "highlightStyle" }} + + {{ else }} + + {{ end }} + + diff --git a/themes/redlounge/static/css/lightbox.css b/themes/redlounge/static/css/lightbox.css new file mode 100644 index 0000000..60cf695 --- /dev/null +++ b/themes/redlounge/static/css/lightbox.css @@ -0,0 +1,210 @@ +/* Preload images */ +body:after { + content: url(../img/close.png) url(../img/loading.gif) url(../img/prev.png) url(../img/next.png); + display: none; +} + +.lightboxOverlay { + position: absolute; + top: 0; + left: 0; + z-index: 9999; + background-color: black; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + opacity: 0.8; + display: none; +} + +.lightbox { + position: absolute; + left: 0; + width: 100%; + z-index: 10000; + text-align: center; + line-height: 0; + font-weight: normal; +} + +.lightbox .lb-image { + display: block; + height: auto; + max-width: inherit; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.lightbox a img { + border: none; +} + +.lb-outerContainer { + position: relative; + background-color: white; + *zoom: 1; + width: 250px; + height: 250px; + margin: 0 auto; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} + +.lb-outerContainer:after { + content: ""; + display: table; + clear: both; +} + +.lb-container { + padding: 4px; +} + +.lb-loader { + position: absolute; + top: 43%; + left: 0; + height: 25%; + width: 100%; + text-align: center; + line-height: 0; +} + +.lb-cancel { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + background: url(../img/loading.gif) no-repeat; +} + +.lb-nav { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 10; +} + +.lb-container > .nav { + left: 0; +} + +.lb-nav a { + outline: none; + background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='); +} + +.lb-prev, .lb-next { + height: 100%; + cursor: pointer; + display: block; +} + +.lb-nav a.lb-prev { + width: 34%; + left: 0; + float: left; + background: url(../img/prev.png) left 48% no-repeat; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transition: opacity 0.6s; + -moz-transition: opacity 0.6s; + -o-transition: opacity 0.6s; + transition: opacity 0.6s; +} + +.lb-nav a.lb-prev:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +.lb-nav a.lb-next { + width: 64%; + right: 0; + float: right; + background: url(../img/next.png) right 48% no-repeat; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transition: opacity 0.6s; + -moz-transition: opacity 0.6s; + -o-transition: opacity 0.6s; + transition: opacity 0.6s; +} + +.lb-nav a.lb-next:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +.lb-dataContainer { + margin: 0 auto; + padding-top: 5px; + *zoom: 1; + width: 100%; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.lb-dataContainer:after { + content: ""; + display: table; + clear: both; +} + +.lb-data { + padding: 0 4px; + color: #ccc; +} + +.lb-data .lb-details { + width: 85%; + float: left; + text-align: left; + line-height: 1.1em; +} + +.lb-data .lb-caption { + font-size: 13px; + font-weight: bold; + line-height: 1em; +} + +.lb-data .lb-number { + display: block; + clear: left; + padding-bottom: 1em; + font-size: 12px; + color: #999999; +} + +.lb-data .lb-close { + display: block; + float: right; + width: 30px; + height: 30px; + background: url(../img/close.png) top right no-repeat; + text-align: right; + outline: none; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); + opacity: 0.7; + -webkit-transition: opacity 0.2s; + -moz-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + transition: opacity 0.2s; +} + +.lb-data .lb-close:hover { + cursor: pointer; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} diff --git a/themes/redlounge/static/css/prism.css b/themes/redlounge/static/css/prism.css new file mode 100644 index 0000000..f5e62c1 --- /dev/null +++ b/themes/redlounge/static/css/prism.css @@ -0,0 +1,259 @@ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+markup-templating+php+puppet+pug+yaml&plugins=line-numbers+toolbar+show-language */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0; + overflow: auto; + border-radius: 0.3em; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #2E303A; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #f8f8f2; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #f92672; +} + +.token.boolean, +.token.number { + color: #ae81ff; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #a6e22e; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #f8f8f2; +} + +.token.atrule, +.token.attr-value, +.token.function, +.token.class-name { + color: #e6db74; +} + +.token.keyword { + color: #66d9ef; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; +} + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; +} + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + +} + + .line-numbers-rows > span { + pointer-events: none; + display: block; + counter-increment: linenumber; + } + + .line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; + } + +div.code-toolbar { + border-radius: 0.3em; + overflow: hidden; + position: relative; +} + +div.code-toolbar > .toolbar { + position: absolute; + top: 5px; + right: -2px; + transition: opacity 0.1s ease-in-out; + opacity: 0; +} + +div.code-toolbar:hover > .toolbar { + opacity: 1; +} + +div.code-toolbar > .toolbar .toolbar-item { + display: inline-block; +} + +div.code-toolbar > .toolbar a { + cursor: pointer; +} + +div.code-toolbar > .toolbar button { + background: none; + border: 0; + color: inherit; + font: inherit; + line-height: normal; + overflow: visible; + padding: 0; + -webkit-user-select: none; /* for button */ + -moz-user-select: none; + -ms-user-select: none; +} + +div.code-toolbar > .toolbar a, +div.code-toolbar > .toolbar button, +div.code-toolbar > .toolbar span { + color: #FFF; + font-size: .8em; + padding: 0 .5em; + background: #64C2A0; + padding: 1em; + border-top-right-radius: 0.4em; + border-bottom-left-radius: 0.5em; +} + +div.code-toolbar > .toolbar a:hover, +div.code-toolbar > .toolbar a:focus, +div.code-toolbar > .toolbar button:hover, +div.code-toolbar > .toolbar button:focus, +div.code-toolbar > .toolbar span:hover, +div.code-toolbar > .toolbar span:focus { + text-decoration: none; +} + +.command-line-prompt { + border-right: 1px solid #999; + display: block; + float: left; + font-size: 100%; + letter-spacing: -1px; + margin-right: 1em; + pointer-events: none; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.command-line-prompt > span:before { + color: #999; + content: ' '; + display: block; + padding-right: 0.8em; +} + +.command-line-prompt > span[data-user]:before { + content: "[" attr(data-user) "@" attr(data-host) "] $"; +} + +.command-line-prompt > span[data-user="root"]:before { + content: "[" attr(data-user) "@" attr(data-host) "] #"; +} + +.command-line-prompt > span[data-prompt]:before { + content: attr(data-prompt); +} \ No newline at end of file diff --git a/themes/redlounge/static/css/redlounge.css b/themes/redlounge/static/css/redlounge.css new file mode 100644 index 0000000..27ad51d --- /dev/null +++ b/themes/redlounge/static/css/redlounge.css @@ -0,0 +1,678 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + color: #2d303b; +} +html, p, nav, section, article, div { + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; +} +*:focus { + outline: 0; +} +pre { + padding: 0; +} +p { + color: #2d303b; +} +a { + -o-transition:.5s; + -ms-transition:.5s; + -moz-transition:.5s; + -webkit-transition:.5s; + transition:.5s; + color: #616161; +} +a:hover { + color:#35c49e; +} +a:hover, +a:focus { + text-decoration: underline; +} +a.pure-button:hover, a.pure-button:focus { + color: inherit; + text-decoration: none; +} +a.pure-button-primary:hover, a.pure-button-primary:focus { + color: #fff; +} +p a { + color:#35c49e; +} +h1 { + font-family: 'Libre Baskerville', serif; + font-weight: 700; +} +.center { + text-align: center; +} +.red { + color: #35c49e; +} +.dark-red { + color: #35c49e; +} +.thin-line { + height: 1px; + border: 0px; + background: #eee; +} + +/* Layout */ +.pure-img-responsive { + max-width: 100%; + height: auto; +} +#layout { + padding: 0; +} +.header { + text-align: center; + top: auto; + margin: 3em auto; +} +.content { + padding: 2em 1em 0; +} + +/* Sidebar */ +h1.brand-title { + font-family: 'Libre Baskerville', serif; + font-weight: 400; + padding-top: 1rem; + font-size: 3rem; + margin-bottom: 0.25rem; +} +h2.brand-tagline { + font-size: 1.4rem; + margin-top: 0.25rem; +} +.sidebar h1.brand-title { + color: #fff; +} +.brand-tagline { + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + font-weight: 200; +} +.sidebar { + background: #2d303b; +} +.sidebar, .sidebar p { + color: #8b8b8b; +} +.sidebar a { + color: #fff; +} +.sidebar a:hover { + color:#35c49e; +} + +/* Nav */ +.nav-list { + margin: 0; + padding: 0; + list-style: none; + padding-bottom: 1rem; +} +.nav-item { + display: inline-block; + *display: inline; + zoom: 1; +} +.nav-item a { + background: transparent; + color: #fff; + margin-top: 1rem; + letter-spacing: 0.05rem; + text-transform: uppercase; + font-size: 0.85rem; + text-decoration: none; + margin-right: 0.1rem; + line-height: 1.5rem; +} +.nav-item a:hover, +.nav-item a:focus { + text-decoration: none; +} +.nav-item-separator { + font-weight: 300; + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + color: #35c49e; + letter-spacing: -0.35rem; + margin-right: 0.4rem; +} + +/* Nav To Top */ +#nav-to-top { + display: none; + position: fixed; + right: 0; + top: 10px; + padding: 0.5rem 1.5rem 0.5rem 0.5rem; + font-size: 0.85rem; + background: #fff; +} + +/* Posts */ +h1.post-title a { + text-decoration: none; + color: #111111; +} +.post-date { + color: #35c49e; + font-family: 'Libre Baskerville', serif; + font-weight: 400; + font-size: 1.0rem; +} +.post-date-day { + font-size: 1.5rem; + margin-right: -0.2rem; +} +.post-date-separator { + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + font-weight: 300; + letter-spacing: -0.35rem; + font-size: 1.9rem; + color: #35c49e; +} +.post-date-month { + font-size: 0.8rem; + color: #35c49e; +} +.post-date-year { + font-size: 0.8rem; + color: #35c49e; +} +a.post-author { + font-size: 0.9rem; + text-decoration: underline; +} +.post-author-single { + font-size: 0.9rem; +} +.post-author-social a { + color: #bbb; +} +.post-author-social a:hover, .post-author-social a:focus { + color: #35c49e; +} +.post-author-social i { + font-size: 0.9rem; +} +.post { + padding-bottom: 1.8rem; + line-height: 1.75rem; +} +.post p { + margin-bottom: 1.75rem; + margin-top: 0; +} +.post h3 { + margin-bottom: .25rem; + font-size: 1.4rem; + color: #35c49e; + font-weight: 500; +} +.post h3.post-subtitle { + font-weight: 200; + color: #999; +} +.post table { + margin-bottom: 1.75rem; + margin-top: 0; +} +.post-title { + font-size: 2rem; + color: #222; + margin-bottom: 0.25rem; +} +.post-subtitle { + font-size: 1.5rem; + margin: 0; + font-weight: 200; + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + color: #999; +} +.post-reading-time { + display: inline; + font-size: 0.65rem; + color: #aeaeae; +} +.post-avatar-wrapper { + width: 50px; + height: 50px; + border-radius: 50px; + overflow: hidden; + margin-left: 1rem; + float: right; +} +.post-avatar { + height: 50px; +} +.post-summary { + margin-top: 0.5rem; +} +.read-more-link { + float: right; + clear: left; + margin-top: 0.25rem; +} +.read-more-link a { + text-decoration: none; + /*text-transform: uppercase;*/ + font-weight: 400; + font-size: 0.9rem; + color: #35c49e; +} +.read-more-link a:hover, .read-more-link a:focus { + color: #35c49e; +} +.read-more-slashes { + font-weight: 100; + font-family: 'Raleway', 'Helvetica', 'Arial', sans-serif; + color: #35c49e; + letter-spacing: -0.26rem; + margin-right: 0.3rem; +} + +.post-description { + color: #444; + line-height: 1.8rem; +} +.post-meta { + color: #2d303b; + font-size: 90%; + margin: 0; +} +p.post-meta { + margin-bottom: 0; +} +.post-meta a { + color: #616161; +} +.post-meta a:hover { + color: #35c49e; +} +.post-categories { + clear: left; +} +.post-category { + margin: 0 0.1rem; + padding: 0.2rem 0.5rem; + color: #fff; + background: #999; + font-size: 0.75rem; +} +a.post-category { + text-decoration: none; +} +a.post-category:hover { + color: #fff; + text-decoration: underline; +} + +/* Banner Image */ +.content-banner-image { + overflow: hidden; +} +.content-banner-image-inline { + float: right; + margin: 0.5rem 0 1.5rem 2rem; +} + +/* Social Sharing */ +.social-sharing { + clear: left; + padding-left: 2px; + margin-top: 0.75rem; + margin-bottom: 0.75rem; +} +.social-sharing a { + padding: 0.4rem; + background: #ccc; + color: #fff; + text-align: center; +} +.social-sharing a i { + width: 16px; +} +.social-sharing a i span { + display: none; +} +.social-sharing a.share-button-twitter:hover { + background: #00aced; +} +.social-sharing a.share-button-facebook:hover { + background: #3b5998; +} +.social-sharing a.share-button-linkedin:hover { + background: #007bb6; +} +.social-sharing a.share-button-google-plus:hover { + background: #dd4b39; +} +.social-sharing a.share-button-pinterest:hover { + background: #cb2027; +} +.social-sharing a.share-button-vk:hover { + background: #45668e; +} + +/* Tags */ +.tags-list { + clear: left; + margin-bottom: 0.75rem; + font-size: 0.85rem; + color: #999; +} + +/* Decorative Marker */ +.decorative-marker { + color: #35c49e; + letter-spacing: -0.25rem; + margin-right: 0.4rem; + margin-lefT: 0.1rem; +} + +/* Paging */ +.paging { + margin-bottom: 0.75rem; +} +.paging, .paging-older, .paging-newer { + clear: left; + font-size: 0.85rem; +} +.paging-older, .paging-newer { + margin-bottom: 0.25rem; +} +.paging-label { + color: #999; + font-style: italic; +} + +/* ToC */ +#toc { + float: right; + padding: 0 1rem 1rem 1rem; + border-left: 1px solid #eee; + font-size: 0.9rem; +} +nav#TableOfContents li { + padding-bottom: 0.25rem; +} +nav#TableOfContents ul:first-child { + padding-left: 0px; +} +.toc-label { + font-size: 0.8rem; + color: #aeaeae; +} + +/* Footer */ +.footer { + text-align: center; + padding: 1rem 0; + font-weight: 100; + color: #aeaeae; + font-size: 0.7rem; +} +.footer a, .footer p { + color: #aeaeae; +} +.footer a { + text-decoration: none; +} +.footer a:hover { + color:#35c49e; + text-decoration: underline; +} +.footer .pure-menu a:hover, +.footer .pure-menu a:focus { + background: none; +} +ul.footer-menu { + list-style: none; + display: block; + text-align:center; + margin: 0; + padding: 0; +} +.footer-menu li { + display: inline-block; + margin-right: 0.5rem; + font-size: 0.8rem; +} +hr.thin { + height: 1px; + border: 0; + color: #eee; + background-color: #eee; + width: 90%; +} + +.search { + padding: 0.5em; + border: 0; + border-radius: 0.2em; + width: 100%; +} + +.result-items { + padding: 0; +} + +.result-items .post-date-day, +.result-items .post-date-separator, +.result-items .post-date-month, +.result-items .post-date-year { + color: white; +} +.result-item-left { + text-align: left; +} +.result-item-right { + text-align: right; +} + +.result-item { + list-style-type: none; + text-align: right; + padding: 0.6em 0; + /*border-bottom: 1px solid #8B8B8B;*/ +} + +.result-item a { + text-decoration: none; +} + +.result-item:last-child { + border-bottom: none; +} + +.menu-item-depth-3 ul li.last a { + border-bottom: none; +} + + +.result-item > a { + text-decoration: none; +} + +.result-item-separator, +.result-item-link { + transition: all .1s ease-out; +} + +.result-point { + position: absolute; + left: -50px; + transition: all .2s ease-out; +} + +.result-item-selected .result-item-link { + color: #35c49e; +} + +hr { + color: #35c49e; + background-color: #35c49e; + height: 1px; +} + +table { + border-collapse: collapse; + width: 100%; +} +table td, table th { + border: 0.1em solid #35c49e; + padding: 0.5em; +} +table tr:first-child th { + border-top: 0; +} +table tr:last-child td { + border-bottom: 0; +} +table tr td:first-child, +table tr th:first-child { + border-left: 0; +} +table tr td:last-child, +table tr th:last-child { + border-right: 0; +} + +.counters { + display: flex; + flex-wrap: wrap; + margin-bottom: 2em; +} + +.counters .counter { + text-decoration: none; + display: flex; + flex-direction: column; + flex: 33%; + text-align: center; + font-size: 4vw; + color: #FFF; +} + +.counters .counter .counter-sub { + text-align: center; + font-size: 1.2vw; +} + +h1 > a { + text-decoration: none; + +} + +h1 > a:hover { + text-decoration: none; +} + +@media (max-width: 1024px) { + .search-wrapper { + margin: 0 0em; + } + +/* .counters { + display: flex; + flex-direction: row; + margin-bottom: 2em; + } + + .counters .counter { + text-align: center; + text-decoration: none; + display: flex; + flex-direction: row; + flex: 33%; + font-size: 3vw; + color: #FFF; + } + + .counters .counter .counter-sub { + text-align: center; + display: flex; + justify-content: left; + font-size: 3vw; + }*/ + + .result-item { + list-style-type: none; + text-align: right; + padding: 0.2em 0; + } + h1.brand-title { + font-size: 2.5rem; + } + h2.brand-tagline { + font-size: 1.2rem; + } + + .header>.sidebarphoto{ + width:160px; + height:160px; + border-radius: 50%; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + } +} + +@media (max-width: 764px) { + .search-wrapper { + margin: 0 2em; + } + + .counters .counter { + text-decoration: none; + display: flex; + flex-direction: column; + flex: 33%; + text-align: center; + font-size: 8vw; + color: #FFF; + } + + .counters .counter .counter-sub { + text-align: center; + font-size: 4vw; + } +} + +@media (min-width: 48rem) { + + .content { + padding: 2rem 3rem 0; + margin-left: 25%; + } + + .content-banner-image { + margin-left: 25%; + } + + .header { + margin: 30% 2rem 0; + text-align: right; + } + + .header>.sidebarphoto{ + width:160px; + height:160px; + border-radius: 50%; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + } + + .sidebar { + position: fixed; + top: 0; + bottom: 0; + } +} diff --git a/themes/redlounge/static/css/rrssb.css b/themes/redlounge/static/css/rrssb.css new file mode 100644 index 0000000..8611534 --- /dev/null +++ b/themes/redlounge/static/css/rrssb.css @@ -0,0 +1 @@ +.rrssb-buttons.large-format li a,.rrssb-buttons.large-format li a .text{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden}.rrssb-buttons,.rrssb-buttons li,.rrssb-buttons li a{-moz-box-sizing:border-box;box-sizing:border-box}.clearfix{*zoom:1}.clearfix:after{clear:both}.clearfix:before,.clearfix:after{content:" ";display:table}.rrssb-buttons{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;height:36px;margin:0;padding:0;width:100%}.rrssb-buttons li{float:left;height:100%;list-style:none;margin:0;padding:0 2.5px;line-height:13px}.rrssb-buttons li.email a{background-color:#0a88ff}.rrssb-buttons li.email a:hover{background-color:#006ed6}.rrssb-buttons li.facebook a{background-color:#306199}.rrssb-buttons li.facebook a:hover{background-color:#244872}.rrssb-buttons li.tumblr a{background-color:#32506d}.rrssb-buttons li.tumblr a:hover{background-color:#22364a}.rrssb-buttons li.linkedin a{background-color:#007bb6}.rrssb-buttons li.linkedin a:hover{background-color:#005983}.rrssb-buttons li.twitter a{background-color:#26c4f1}.rrssb-buttons li.twitter a:hover{background-color:#0eaad6}.rrssb-buttons li.googleplus a{background-color:#e93f2e}.rrssb-buttons li.googleplus a:hover{background-color:#ce2616}.rrssb-buttons li.youtube a{background-color:#df1c31}.rrssb-buttons li.youtube a:hover{background-color:#b21627}.rrssb-buttons li.reddit a{background-color:#8bbbe3}.rrssb-buttons li.reddit a:hover{background-color:#62a3d9}.rrssb-buttons li.pinterest a{background-color:#b81621}.rrssb-buttons li.pinterest a:hover{background-color:#8a1119}.rrssb-buttons li.pocket a{background-color:#ed4054}.rrssb-buttons li.pocket a:hover{background-color:#e4162d}.rrssb-buttons li.github a{background-color:#444}.rrssb-buttons li.github a:hover{background-color:#2b2b2b}.rrssb-buttons li a{background-color:#ccc;border-radius:2px;display:block;font-size:11px;font-weight:bold;height:100%;padding:11px 7px 12px 27px;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:100%;-webkit-transition:background-color 0.2s ease-in-out;-moz-transition:background-color 0.2s ease-in-out;-o-transition:background-color 0.2s ease-in-out;transition:background-color 0.2s ease-in-out}.rrssb-buttons li a .icon{display:block;height:100%;left:10px;padding-top:9px;position:absolute;top:0;width:10%}.rrssb-buttons li a .icon svg{height:17px;width:17px}.rrssb-buttons li a .icon svg path,.rrssb-buttons li a .icon svg polygon{fill:#fff}.rrssb-buttons li a .text{color:#fff}.rrssb-buttons li a:active{box-shadow:inset 1px 3px 15px 0 rgba(22,0,0,0.25)}.rrssb-buttons li.small a{padding:0}.rrssb-buttons li.small a .icon{height:100%;left:auto;margin:0 auto;overflow:hidden;position:relative;top:auto;width:100%}.rrssb-buttons li.small a .text{visibility:hidden}.rrssb-buttons.large-format{height:auto}.rrssb-buttons.large-format li{height:auto}.rrssb-buttons.large-format li a{font-size:15px;font-size:1vw;padding:7% 0% 7% 12%;border-radius:0.2em;line-height:1vw}.rrssb-buttons.large-format li a .icon{left:7%;padding-top:0;width:12%}.rrssb-buttons.large-format li a .icon svg{height:100%;width:100%}.rrssb-buttons.large-format li a .text{font-size:15px;font-size:1vw}.rrssb-buttons.large-format li a:hover{font-size:15px;font-size:1vw;padding:7% 0% 7% 12%;border-radius:0.2em}.rrssb-buttons.small-format{padding-top:5px}.rrssb-buttons.small-format li{height:80%;padding:0 1.5px}.rrssb-buttons.small-format li a .icon{height:100%;padding-top:0}.rrssb-buttons.small-format li a .icon svg{height:48%;position:relative;top:6px;width:80%}.rrssb-buttons.tiny-format{height:22px;position:relative}.rrssb-buttons.tiny-format li{padding-right:7px}.rrssb-buttons.tiny-format li a{background-color:transparent;padding:0}.rrssb-buttons.tiny-format li a .icon svg{height:70%;width:100%}.rrssb-buttons.tiny-format li a:hover,.rrssb-buttons.tiny-format li a:active{background-color:transparent}.rrssb-buttons.tiny-format li.email a .icon svg path,.rrssb-buttons.tiny-format li.email a .icon svg polygon{fill:#0a88ff}.rrssb-buttons.tiny-format li.email a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.email a .icon:hover .icon svg polygon{fill:#0054a3}.rrssb-buttons.tiny-format li.facebook a .icon svg path,.rrssb-buttons.tiny-format li.facebook a .icon svg polygon{fill:#306199}.rrssb-buttons.tiny-format li.facebook a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.facebook a .icon:hover .icon svg polygon{fill:#18304b}.rrssb-buttons.tiny-format li.tumblr a .icon svg path,.rrssb-buttons.tiny-format li.tumblr a .icon svg polygon{fill:#32506d}.rrssb-buttons.tiny-format li.tumblr a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.tumblr a .icon:hover .icon svg polygon{fill:#121d27}.rrssb-buttons.tiny-format li.linkedin a .icon svg path,.rrssb-buttons.tiny-format li.linkedin a .icon svg polygon{fill:#007bb6}.rrssb-buttons.tiny-format li.linkedin a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.linkedin a .icon:hover .icon svg polygon{fill:#003650}.rrssb-buttons.tiny-format li.twitter a .icon svg path,.rrssb-buttons.tiny-format li.twitter a .icon svg polygon{fill:#26c4f1}.rrssb-buttons.tiny-format li.twitter a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.twitter a .icon:hover .icon svg polygon{fill:#0b84a6}.rrssb-buttons.tiny-format li.googleplus a .icon svg path,.rrssb-buttons.tiny-format li.googleplus a .icon svg polygon{fill:#e93f2e}.rrssb-buttons.tiny-format li.googleplus a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.googleplus a .icon:hover .icon svg polygon{fill:#a01e11}.rrssb-buttons.tiny-format li.youtube a .icon svg path,.rrssb-buttons.tiny-format li.youtube a .icon svg polygon{fill:#df1c31}.rrssb-buttons.tiny-format li.youtube a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.youtube a .icon:hover .icon svg polygon{fill:#84111d}.rrssb-buttons.tiny-format li.reddit a .icon svg path,.rrssb-buttons.tiny-format li.reddit a .icon svg polygon{fill:#8bbbe3}.rrssb-buttons.tiny-format li.reddit a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.reddit a .icon:hover .icon svg polygon{fill:#398bcf}.rrssb-buttons.tiny-format li.pinterest a .icon svg path,.rrssb-buttons.tiny-format li.pinterest a .icon svg polygon{fill:#b81621}.rrssb-buttons.tiny-format li.pinterest a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.pinterest a .icon:hover .icon svg polygon{fill:#5d0b11}.rrssb-buttons.tiny-format li.pocket a .icon svg path,.rrssb-buttons.tiny-format li.pocket a .icon svg polygon{fill:#ed4054}.rrssb-buttons.tiny-format li.pocket a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.pocket a .icon:hover .icon svg polygon{fill:#b61124}.rrssb-buttons.tiny-format li.github a .icon svg path,.rrssb-buttons.tiny-format li.github a .icon svg polygon{fill:#444}.rrssb-buttons.tiny-format li.github a .icon:hover .icon svg path,.rrssb-buttons.tiny-format li.github a .icon:hover .icon svg polygon{fill:#111} diff --git a/themes/redlounge/static/css/screen.css b/themes/redlounge/static/css/screen.css new file mode 100644 index 0000000..4af5642 --- /dev/null +++ b/themes/redlounge/static/css/screen.css @@ -0,0 +1 @@ +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{background:#fff;color:#000;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:0.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type='button'],input[type='reset'],input[type='submit']{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type='checkbox'],input[type='radio']{box-sizing:border-box;padding:0}input[type='search']{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type='search']::-webkit-search-cancel-button,input[type='search']::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}html{font:100%/1.5 "Karla","lucida grande",sans-serif,sans-serif;font-weight:400}@media (min-width: 40rem){html{font-size:106%}}@media (min-width: 64rem){html{font-size:112%}}body{color:#777;background-color:#fff}h1,h2,h3,h4,h5{color:#222;line-height:1.2em;font-family:"Montserrat","Helvetica",sans-serif;font-weight:600}h1{font-size:3.5rem;margin:0 0 0.2em 0}@media (min-width: 40rem){h1{font-size:4.5rem}}@media (min-width: 64rem){h1{font-size:5rem}}h2{color:#e67e39;margin-bottom:1.5rem;font-size:1.5rem;text-transform:uppercase}@media (min-width: 40rem){h2{font-size:2rem}}h3{font-size:1.2rem;margin-bottom:0.5rem}blockquote{margin:0}blockquote p{color:#bbb;font-style:italic;margin-bottom:1.5rem}cite{color:#bbb}p{margin:0 auto 2em auto;text-align:left}.lead{max-width:45rem;font-size:1.25rem}ol{list-style-type:decimal}ul,ol{margin:0 0 1.25em 0}li{margin-bottom:2em}li.last-list-item{border-bottom:none}dt{font-weight:bold}dd{margin-bottom:1.625em}strong{font-weight:bold}i{font-style:italic}em{font-style:normal}a{color:#4ae;text-decoration:none}a:hover{text-decoration:underline}::-moz-selection,::selection{background:#e67e39;color:#fff}.sub-point{display:block;font-size:0.75rem}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;padding:0;background:#fff}section{border-top:2px solid #f2f2f2;text-align:center;padding:2rem 0}section:first-of-type{border-top:none}@media (min-width: 40rem){section{padding:4rem 0}}.container{margin:0 auto;max-width:40rem;width:90%}.row{*zoom:1}.row:after{content:"";display:table;clear:both}header{padding:2rem 0;background-color:#f7f7f7;text-align:center}header p{text-align:center}.example-image-link{display:inline-block;padding:4px;margin:0 0.5rem 1rem 0.5rem;background-color:#fff;line-height:0;-webkit-transition:background-color 0.1s ease-out;-moz-transition:background-color 0.1s ease-out;-o-transition:background-color 0.1s ease-out;transition:background-color 0.1s ease-out;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px}.example-image-link:hover{background-color:#4ae}.example-image{width:7rem;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.how-to-use-section p,.how-to-use-section ol,.how-to-use-section ul,.how-to-use-section pre{text-align:left}fieldset{border:none}.donate-button{width:100%}@media (min-width: 40rem){.donate-button{width:auto}}footer{padding:2rem 0;background-color:#f7f7f7;text-align:center}footer p{text-align:center}footer .button{margin-top:0.5rem}.sharing-section{position:fixed;z-index:10;top:20px;right:0}code{color:#777;background-color:#f2f2f2;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;font-family:Consolas,Courier,monospace;font-size:0.9rem;padding:0.1rem 0.3rem;position:relative;top:-1px}pre{background-color:#f2f2f2;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;padding:0 0.5rem 0.1rem 0.5rem}pre code{padding:0;font-size:0.7rem;border:none}.column{margin-bottom:1.5rem}@media (min-width: 40rem){.column{float:left;margin:0;padding-left:1rem;padding-right:1rem}.column.full{width:100%}.column.two-thirds{width:66.7%}.column.half{width:50%}.column.third{width:33.3%}.column.fourth{width:24.95%}.column.flow-opposite{float:right}}ul{margin:0;text-align:left}@media (min-width: 40rem){ul{display:inline-block}}.button{display:block;padding:0.7rem 2rem;margin-bottom:0.5rem;border:none;color:#fff;background-color:#4ae;font-size:1.2rem;font-weight:bold;text-transform:uppercase;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;vertical-align:middle;white-space:nowrap}.button:hover{background:#1595ea;text-decoration:none}@media (min-width: 40rem){.button{display:inline-block;margin:0 0.25rem}}.button-minor{padding:0.35rem 1rem;border:2px solid #4ae;color:#4ae;background-color:transparent;font-size:0.8rem}.button-minor:hover{color:#fff}hr{border:0;border-top:2px solid #f2f2f2;margin:2rem auto;width:3rem}@media (min-width: 40rem){hr{margin:2.5rem auto}} diff --git a/themes/redlounge/static/img/close.png b/themes/redlounge/static/img/close.png new file mode 100644 index 0000000000000000000000000000000000000000..20baa1db5fdf9e22655a0f851c4401d36b9e7ef9 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i3?z4Pv7`ejn*g5>*Z=?j1DSvS{%vY%YG`Nx zvLV3R+Z)1I1qQoz?eg;S^6>Bg3hv&$d*{xbK#iaC4$A=f!X-g|!3vbDHnnh5Xg#OL;K8su!;fw4MC7hH<+BPou~5EnOggc)I$z JtaD0e0ssdsYEA$E literal 0 HcmV?d00001 diff --git a/themes/redlounge/static/img/favicon.png b/themes/redlounge/static/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..84cce4dd307a78a3a9455c4fed62b49b9c7e61ad GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%MS8k8hE&{2x^n4K(gM|lqy>f&TN57WCL9#mRrOU%@9M2v zw~lByu=VViq&Z7-h83rlMDLS8?zSQ~WwmG?M|puWCl{~GxYDGU!#GW<*Dv&0hD=YC eg9!tN0mC+9$z85`0v~~vFnGH9xvX%Dcb>C}3 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 S-YhKu0000").appendTo(a("body")),this.$lightbox=a("#lightbox"),this.$overlay=a("#lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".lb-outerContainer"),this.$container=this.$lightbox.find(".lb-container"),this.containerTopPadding=parseInt(this.$container.css("padding-top"),10),this.containerRightPadding=parseInt(this.$container.css("padding-right"),10),this.containerBottomPadding=parseInt(this.$container.css("padding-bottom"),10),this.containerLeftPadding=parseInt(this.$container.css("padding-left"),10),this.$overlay.hide().on("click",function(){return b.end(),!1}),this.$lightbox.hide().on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$outerContainer.on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$lightbox.find(".lb-prev").on("click",function(){return b.changeImage(0===b.currentImageIndex?b.album.length-1:b.currentImageIndex-1),!1}),this.$lightbox.find(".lb-next").on("click",function(){return b.changeImage(b.currentImageIndex===b.album.length-1?0:b.currentImageIndex+1),!1}),this.$lightbox.find(".lb-loader, .lb-close").on("click",function(){return b.end(),!1})},b.prototype.start=function(b){function c(a){d.album.push({link:a.attr("href"),title:a.attr("data-title")||a.attr("title")})}var d=this,e=a(window);e.on("resize",a.proxy(this.sizeOverlay,this)),a("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var f,g=0,h=b.attr("data-lightbox");if(h){f=a(b.prop("tagName")+'[data-lightbox="'+h+'"]');for(var i=0;ij||e.height>i)&&(e.width/j>e.height/i?(h=j,g=parseInt(e.height/(e.width/h),10),d.width(h),d.height(g)):(g=i,h=parseInt(e.width/(e.height/g),10),d.width(h),d.height(g)))),c.sizeContainer(d.width(),d.height())},e.src=this.album[b].link,this.currentImageIndex=b},b.prototype.sizeOverlay=function(){this.$overlay.width(a(window).width()).height(a(document).height())},b.prototype.sizeContainer=function(a,b){function c(){d.$lightbox.find(".lb-dataContainer").width(g),d.$lightbox.find(".lb-prevLink").height(h),d.$lightbox.find(".lb-nextLink").height(h),d.showImage()}var d=this,e=this.$outerContainer.outerWidth(),f=this.$outerContainer.outerHeight(),g=a+this.containerLeftPadding+this.containerRightPadding,h=b+this.containerTopPadding+this.containerBottomPadding;e!==g||f!==h?this.$outerContainer.animate({width:g,height:h},this.options.resizeDuration,"swing",function(){c()}):c()},b.prototype.showImage=function(){this.$lightbox.find(".lb-loader").hide(),this.$lightbox.find(".lb-image").fadeIn("slow"),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},b.prototype.updateNav=function(){var a=!1;try{document.createEvent("TouchEvent"),a=this.options.alwaysShowNavOnTouchDevices?!0:!1}catch(b){}this.$lightbox.find(".lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(a&&this.$lightbox.find(".lb-prev, .lb-next").css("opacity","1"),this.$lightbox.find(".lb-prev, .lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".lb-prev").show(),a&&this.$lightbox.find(".lb-prev").css("opacity","1")),this.currentImageIndex1&&this.options.showImageNumberLabel?this.$lightbox.find(".lb-number").text(this.options.albumLabel(this.currentImageIndex+1,this.album.length)).fadeIn("fast"):this.$lightbox.find(".lb-number").hide(),this.$outerContainer.removeClass("animating"),this.$lightbox.find(".lb-dataContainer").fadeIn(this.options.resizeDuration,function(){return b.sizeOverlay()})},b.prototype.preloadNeighboringImages=function(){if(this.album.length>this.currentImageIndex+1){var a=new Image;a.src=this.album[this.currentImageIndex+1].link}if(this.currentImageIndex>0){var b=new Image;b.src=this.album[this.currentImageIndex-1].link}},b.prototype.enableKeyboardNav=function(){a(document).on("keyup.keyboard",a.proxy(this.keyboardAction,this))},b.prototype.disableKeyboardNav=function(){a(document).off(".keyboard")},b.prototype.keyboardAction=function(a){var b=27,c=37,d=39,e=a.keyCode,f=String.fromCharCode(e).toLowerCase();e===b||f.match(/x|o|c/)?this.end():"p"===f||e===c?0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1):("n"===f||e===d)&&(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0))},b.prototype.end=function(){this.disableKeyboardNav(),a(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),a("select, object, embed").css({visibility:"visible"})},b}();a(function(){{var a=new b;new c(a)}})}).call(this); +//# sourceMappingURL=lightbox.min.map \ No newline at end of file diff --git a/themes/redlounge/static/js/prism.js b/themes/redlounge/static/js/prism.js new file mode 100644 index 0000000..70ef88b --- /dev/null +++ b/themes/redlounge/static/js/prism.js @@ -0,0 +1,46 @@ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+apacheconf+bash+ruby+docker+markup-templating+go+less+json+erb+nginx+php+sql+powershell+puppet+python+stylus+pug+yaml&plugins=line-numbers+toolbar+command-line+show-language */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-([\w-]+)\b/i,t=0,n=_self.Prism={manual:_self.Prism&&_self.Prism.manual,disableWorkerMessageHandler:_self.Prism&&_self.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof r?new r(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(!(w instanceof s)){if(m&&b!=t.length-1){h.lastIndex=k;var _=h.exec(e);if(!_)break;for(var j=_.index+(d?_[1].length:0),P=_.index+_[0].length,A=b,x=k,O=t.length;O>A&&(P>x||!t[A].type&&!t[A-1].greedy);++A)x+=t[A].length,j>=x&&(++b,k=x);if(t[b]instanceof s)continue;I=A-b,w=e.slice(k,x),_.index-=k}else{h.lastIndex=0;var _=h.exec(w),I=1}if(_){d&&(p=_[1]?_[1].length:0);var j=_.index+p,_=_[0].slice(p),P=j+_.length,N=w.slice(0,j),S=w.slice(P),C=[b,I];N&&(++b,k+=N.length,C.push(N));var E=new s(u,f?n.tokenize(_,f):_,y,_,m);if(C.push(E),S&&C.push(S),Array.prototype.splice.apply(t,C),1!=I&&n.matchGrammar(e,t,r,b,k,!0,u),i)break}else if(i)break}}}}},tokenize:function(e,t){var r=[e],a=t.rest;if(a){for(var l in a)t[l]=a[l];delete t.rest}return n.matchGrammar(e,r,t,0,0,!1),r},hooks:{all:{},add:function(e,t){var r=n.hooks.all;r[e]=r[e]||[],r[e].push(t)},run:function(e,t){var r=n.hooks.all[e];if(r&&r.length)for(var a,l=0;a=r[l++];)a(t)}}},r=n.Token=function(e,t,n,r,a){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length,this.greedy=!!a};if(r.stringify=function(e,t,a){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return r.stringify(n,t,e)}).join("");var l={type:e.type,content:r.stringify(e.content,t,a),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:a};if(e.alias){var i="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}n.hooks.run("wrap",l);var o=Object.keys(l.attributes).map(function(e){return e+'="'+(l.attributes[e]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+l.tag+' class="'+l.classes.join(" ")+'"'+(o?" "+o:"")+">"+l.content+""},!_self.document)return _self.addEventListener?(n.disableWorkerMessageHandler||_self.addEventListener("message",function(e){var t=JSON.parse(e.data),r=t.language,a=t.code,l=t.immediateClose;_self.postMessage(n.highlight(a,n.languages[r],r)),l&&_self.close()},!1),_self.Prism):_self.Prism;var a=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return a&&(n.filename=a.src,n.manual||a.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/(^|[^\\])["']/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; +Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^{}\s][^{};]*?(?=\s*\{)/,string:{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css,Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\s\S]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css",greedy:!0}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(?:true|false)\b/,"function":/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},/\b(?:as|async|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/],number:/\b(?:(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+)n?|\d+n|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,"function":/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\(|\.(?:apply|bind|call)\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^\/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,alias:"function"},constant:/\b[A-Z][A-Z\d_]*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${[^}]+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript",greedy:!0}}),Prism.languages.js=Prism.languages.javascript; +Prism.languages.apacheconf={comment:/#.*/,"directive-inline":{pattern:/^(\s*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|AddAlt|AddAltByEncoding|AddAltByType|AddCharset|AddDefaultCharset|AddDescription|AddEncoding|AddHandler|AddIcon|AddIconByEncoding|AddIconByType|AddInputFilter|AddLanguage|AddModuleInfo|AddOutputFilter|AddOutputFilterByType|AddType|Alias|AliasMatch|Allow|AllowCONNECT|AllowEncodedSlashes|AllowMethods|AllowOverride|AllowOverrideList|Anonymous|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail|AsyncRequestWorkerFactor|AuthBasicAuthoritative|AuthBasicFake|AuthBasicProvider|AuthBasicUseDigestAlgorithm|AuthDBDUserPWQuery|AuthDBDUserRealmQuery|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile|AuthDigestAlgorithm|AuthDigestDomain|AuthDigestNonceLifetime|AuthDigestProvider|AuthDigestQop|AuthDigestShmemSize|AuthFormAuthoritative|AuthFormBody|AuthFormDisableNoStore|AuthFormFakeBasicAuth|AuthFormLocation|AuthFormLoginRequiredLocation|AuthFormLoginSuccessLocation|AuthFormLogoutLocation|AuthFormMethod|AuthFormMimetype|AuthFormPassword|AuthFormProvider|AuthFormSitePassphrase|AuthFormSize|AuthFormUsername|AuthGroupFile|AuthLDAPAuthorizePrefix|AuthLDAPBindAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareAsUser|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPInitialBindAsUser|AuthLDAPInitialBindPattern|AuthLDAPMaxSubGroupDepth|AuthLDAPRemoteUserAttribute|AuthLDAPRemoteUserIsDN|AuthLDAPSearchAsUser|AuthLDAPSubGroupAttribute|AuthLDAPSubGroupClass|AuthLDAPUrl|AuthMerging|AuthName|AuthnCacheContext|AuthnCacheEnable|AuthnCacheProvideFor|AuthnCacheSOCache|AuthnCacheTimeout|AuthnzFcgiCheckAuthnProvider|AuthnzFcgiDefineProvider|AuthType|AuthUserFile|AuthzDBDLoginToReferer|AuthzDBDQuery|AuthzDBDRedirectQuery|AuthzDBMType|AuthzSendForbiddenOnFailure|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|CacheDefaultExpire|CacheDetailHeader|CacheDirLength|CacheDirLevels|CacheDisable|CacheEnable|CacheFile|CacheHeader|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheIgnoreQueryString|CacheIgnoreURLSessionIdentifiers|CacheKeyBaseURL|CacheLastModifiedFactor|CacheLock|CacheLockMaxAge|CacheLockPath|CacheMaxExpire|CacheMaxFileSize|CacheMinExpire|CacheMinFileSize|CacheNegotiatedDocs|CacheQuickHandler|CacheReadSize|CacheReadTime|CacheRoot|CacheSocache|CacheSocacheMaxSize|CacheSocacheMaxTime|CacheSocacheMinTime|CacheSocacheReadSize|CacheSocacheReadTime|CacheStaleOnError|CacheStoreExpired|CacheStoreNoStore|CacheStorePrivate|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateInflateLimitRequestBody|DeflateInflateRatioBurst|DeflateInflateRatioLimit|DeflateMemLevel|DeflateWindowSize|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|HeartbeatAddress|HeartbeatListen|HeartbeatMaxServers|HeartbeatStorage|HeartbeatStorage|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|IndexHeadInsert|IndexIgnore|IndexIgnoreReset|IndexOptions|IndexOrderDefault|IndexStyleSheet|InputSed|ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionPoolTTL|LDAPConnectionTimeout|LDAPLibraryDebug|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPReferralHopLimit|LDAPReferrals|LDAPRetries|LDAPRetryDelay|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTimeout|LDAPTrustedClientCert|LDAPTrustedGlobalCert|LDAPTrustedMode|LDAPVerifyServerCert|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|LuaHookAccessChecker|LuaHookAuthChecker|LuaHookCheckUserID|LuaHookFixups|LuaHookInsertFilter|LuaHookLog|LuaHookMapToStorage|LuaHookTranslateName|LuaHookTypeChecker|LuaInherit|LuaInputFilter|LuaMapHandler|LuaOutputFilter|LuaPackageCPath|LuaPackagePath|LuaQuickHandler|LuaRoot|LuaScope|MaxConnectionsPerChild|MaxKeepAliveRequests|MaxMemFree|MaxRangeOverlaps|MaxRangeReversals|MaxRanges|MaxRequestWorkers|MaxSpareServers|MaxSpareThreads|MaxThreads|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|ProxyAddHeaders|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyExpressDBMFile|ProxyExpressDBMType|ProxyExpressEnable|ProxyFtpDirCharset|ProxyFtpEscapeWildcards|ProxyFtpListOnWildcard|ProxyHTMLBufSize|ProxyHTMLCharsetOut|ProxyHTMLDocType|ProxyHTMLEnable|ProxyHTMLEvents|ProxyHTMLExtended|ProxyHTMLFixups|ProxyHTMLInterp|ProxyHTMLLinks|ProxyHTMLMeta|ProxyHTMLStripComments|ProxyHTMLURLMap|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassInherit|ProxyPassInterpolateEnv|ProxyPassMatch|ProxyPassReverse|ProxyPassReverseCookieDomain|ProxyPassReverseCookiePath|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxySCGIInternalRedirect|ProxySCGISendfile|ProxySet|ProxySourceAddress|ProxyStatus|ProxyTimeout|ProxyVia|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIPHeader|RemoteIPInternalProxy|RemoteIPInternalProxyList|RemoteIPProxiesHeader|RemoteIPTrustedProxy|RemoteIPTrustedProxyList|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|RewriteBase|RewriteCond|RewriteEngine|RewriteMap|RewriteOptions|RewriteRule|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script|ScriptAlias|ScriptAliasMatch|ScriptInterpreterSource|ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock|SecureListen|SeeRequestTail|SendBufferSize|ServerAdmin|ServerAlias|ServerLimit|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|Session|SessionCookieName|SessionCookieName2|SessionCookieRemove|SessionCryptoCipher|SessionCryptoDriver|SessionCryptoPassphrase|SessionCryptoPassphraseFile|SessionDBDCookieName|SessionDBDCookieName2|SessionDBDCookieRemove|SessionDBDDeleteLabel|SessionDBDInsertLabel|SessionDBDPerUser|SessionDBDSelectLabel|SessionDBDUpdateLabel|SessionEnv|SessionExclude|SessionHeader|SessionInclude|SessionMaxAge|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSLCACertificateFile|SSLCACertificatePath|SSLCADNRequestFile|SSLCADNRequestPath|SSLCARevocationCheck|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLCompression|SSLCryptoDevice|SSLEngine|SSLFIPS|SSLHonorCipherOrder|SSLInsecureRenegotiation|SSLOCSPDefaultResponder|SSLOCSPEnable|SSLOCSPOverrideResponder|SSLOCSPResponderTimeout|SSLOCSPResponseMaxAge|SSLOCSPResponseTimeSkew|SSLOCSPUseRequestNonce|SSLOpenSSLConfCmd|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationCheck|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCheckPeerCN|SSLProxyCheckPeerExpire|SSLProxyCheckPeerName|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateChainFile|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRenegBufferSize|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLSessionTicketKeyFile|SSLSRPUnknownUserSeed|SSLSRPVerifierFile|SSLStaplingCache|SSLStaplingErrorCacheTimeout|SSLStaplingFakeTryLater|SSLStaplingForceURL|SSLStaplingResponderTimeout|SSLStaplingResponseMaxAge|SSLStaplingResponseTimeSkew|SSLStaplingReturnResponderErrors|SSLStaplingStandardCacheTimeout|SSLStrictSNIVHostCheck|SSLUserName|SSLUseStapling|SSLVerifyClient|SSLVerifyDepth|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,lookbehind:!0,alias:"property"},"directive-block":{pattern:/<\/?\b(?:AuthnProviderAlias|AuthzProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|RequireAll|RequireAny|RequireNone|VirtualHost)\b *.*>/i,inside:{"directive-block":{pattern:/^<\/?\w+/,inside:{punctuation:/^<\/?/},alias:"tag"},"directive-block-parameter":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}}},alias:"attr-value"},punctuation:/>/},alias:"tag"},"directive-flags":{pattern:/\[(?:\w,?)+\]/,alias:"keyword"},string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}},variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/,regex:/\^?.*\$|\^.*\$?/}; +!function(e){var t={variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[\w#?*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/,lookbehind:!0,greedy:!0,inside:t},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:!0,inside:t}],variable:t.variable,"function":{pattern:/(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/,lookbehind:!0},"boolean":{pattern:/(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var a=t.variable[1].inside;a.string=e.languages.bash.string,a["function"]=e.languages.bash["function"],a.keyword=e.languages.bash.keyword,a["boolean"]=e.languages.bash["boolean"],a.operator=e.languages.bash.operator,a.punctuation=e.languages.bash.punctuation,e.languages.shell=e.languages.bash}(Prism); +!function(e){e.languages.ruby=e.languages.extend("clike",{comment:[/#.*/,{pattern:/^=begin(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?=end/m,greedy:!0}],keyword:/\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var n={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.languages.ruby}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:{pattern:/(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,lookbehind:!0}}),e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z]\w*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,greedy:!0,inside:{interpolation:n}},{pattern:/("|')(?:#\{[^}]+\}|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:n}}]}(Prism); +Prism.languages.docker={keyword:{pattern:/(^\s*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)/im,lookbehind:!0},string:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,comment:/#.*/,punctuation:/---|\.\.\.|[:[\]{}\-,|>?]/},Prism.languages.dockerfile=Prism.languages.docker; +Prism.languages["markup-templating"]={},Object.defineProperties(Prism.languages["markup-templating"],{buildPlaceholders:{value:function(e,t,n,a){e.language===t&&(e.tokenStack=[],e.code=e.code.replace(n,function(n){if("function"==typeof a&&!a(n))return n;for(var r=e.tokenStack.length;-1!==e.code.indexOf("___"+t.toUpperCase()+r+"___");)++r;return e.tokenStack[r]=n,"___"+t.toUpperCase()+r+"___"}),e.grammar=Prism.languages.markup)}},tokenizePlaceholders:{value:function(e,t){if(e.language===t&&e.tokenStack){e.grammar=Prism.languages[t];var n=0,a=Object.keys(e.tokenStack),r=function(o){if(!(n>=a.length))for(var i=0;i-1){++n;var f,u=l.substring(0,p),_=new Prism.Token(t,Prism.tokenize(s,e.grammar,t),"language-"+t,s),k=l.substring(p+("___"+t.toUpperCase()+c+"___").length);if(u||k?(f=[u,_,k].filter(function(e){return!!e}),r(f)):f=_,"string"==typeof g?Array.prototype.splice.apply(o,[i,1].concat(f)):g.content=f,n>=a.length)break}}else g.content&&"string"!=typeof g.content&&r(g.content)}};r(e.tokens)}}}}); +Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,"boolean":/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete Prism.languages.go["class-name"]; +Prism.languages.less=Prism.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-]+?(?:\([^{}]+\)|[^(){};])*?(?=\s*\{)/i,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\([^{}]*\)|[^{};@])*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,punctuation:/[{}();:,]/,operator:/[+\-*\/]/}),Prism.languages.insertBefore("less","punctuation",{"function":Prism.languages.less.function}),Prism.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/,lookbehind:!0,alias:"function"}}); +Prism.languages.json={property:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/i,string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},number:/-?\d+\.?\d*([Ee][+-]?\d+)?/,punctuation:/[{}[\],]/,operator:/:/g,"boolean":/\b(?:true|false)\b/i,"null":/\bnull\b/i},Prism.languages.jsonp=Prism.languages.json; +!function(e){e.languages.erb=e.languages.extend("ruby",{}),e.languages.insertBefore("erb","comment",{delimiter:{pattern:/^<%=?|%>$/,alias:"punctuation"}}),e.hooks.add("before-tokenize",function(a){var n=/<%=?[\s\S]+?%>/g;e.languages["markup-templating"].buildPlaceholders(a,"erb",n)}),e.hooks.add("after-tokenize",function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"erb")})}(Prism); +Prism.languages.nginx=Prism.languages.extend("clike",{comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},keyword:/\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i}),Prism.languages.insertBefore("nginx","keyword",{variable:/\$[a-z_]+/i}); +!function(e){e.languages.php=e.languages.extend("clike",{keyword:/\b(?:and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0}}),e.languages.insertBefore("php","string",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),e.languages.insertBefore("php","keyword",{delimiter:{pattern:/\?>|<\?(?:php|=)?/i,alias:"important"},variable:/\$+(?:\w+\b|(?={))/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),e.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}});var n={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,lookbehind:!0,inside:{rest:e.languages.php}};e.languages.insertBefore("php","string",{"nowdoc-string":{pattern:/<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},"heredoc-string":{pattern:/<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:n}},"single-quoted-string":{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,alias:"string",inside:{interpolation:n}}}),delete e.languages.php.string,e.hooks.add("before-tokenize",function(n){if(/(?:<\?php|<\?)/gi.test(n.code)){var t=/(?:<\?php|<\?)[\s\S]*?(?:\?>|$)/gi;e.languages["markup-templating"].buildPlaceholders(n,"php",t)}}),e.hooks.add("after-tokenize",function(n){e.languages["markup-templating"].tokenizePlaceholders(n,"php")})}(Prism); +Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},"function":/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,"boolean":/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}; +Prism.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:{"function":{pattern:/(^|[^`])\$\((?:\$\(.*?\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:{}}}},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*]|[^\[\]])*]|[^\[\]])*]/i,"boolean":/\$(?:true|false)\b/i,variable:/\$\w+\b/i,"function":[/\b(?:Add-(?:Computer|Content|History|Member|PSSnapin|Type)|Checkpoint-Computer|Clear-(?:Content|EventLog|History|Item|ItemProperty|Variable)|Compare-Object|Complete-Transaction|Connect-PSSession|ConvertFrom-(?:Csv|Json|StringData)|Convert-Path|ConvertTo-(?:Csv|Html|Json|Xml)|Copy-(?:Item|ItemProperty)|Debug-Process|Disable-(?:ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Disconnect-PSSession|Enable-(?:ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Enter-PSSession|Exit-PSSession|Export-(?:Alias|Clixml|Console|Csv|FormatData|ModuleMember|PSSession)|ForEach-Object|Format-(?:Custom|List|Table|Wide)|Get-(?:Alias|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Culture|Date|Event|EventLog|EventSubscriber|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|WmiObject)|Group-Object|Import-(?:Alias|Clixml|Csv|LocalizedData|Module|PSSession)|Invoke-(?:Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)|Join-Path|Limit-EventLog|Measure-(?:Command|Object)|Move-(?:Item|ItemProperty)|New-(?:Alias|Event|EventLog|Item|ItemProperty|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy)|Out-(?:Default|File|GridView|Host|Null|Printer|String)|Pop-Location|Push-Location|Read-Host|Receive-(?:Job|PSSession)|Register-(?:EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)|Remove-(?:Computer|Event|EventLog|Item|ItemProperty|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)|Rename-(?:Computer|Item|ItemProperty)|Reset-ComputerMachinePassword|Resolve-Path|Restart-(?:Computer|Service)|Restore-Computer|Resume-(?:Job|Service)|Save-Help|Select-(?:Object|String|Xml)|Send-MailMessage|Set-(?:Alias|Content|Date|Item|ItemProperty|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)|Show-(?:Command|ControlPanelItem|EventLog)|Sort-Object|Split-Path|Start-(?:Job|Process|Service|Sleep|Transaction)|Stop-(?:Computer|Job|Process|Service)|Suspend-(?:Job|Service)|Tee-Object|Test-(?:ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)|Trace-Command|Unblock-File|Undo-Transaction|Unregister-(?:Event|PSSessionConfiguration)|Update-(?:FormatData|Help|List|TypeData)|Use-Transaction|Wait-(?:Event|Job|Process)|Where-Object|Write-(?:Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning))\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(\W?)(?:!|-(eq|ne|gt|ge|lt|le|sh[lr]|not|b?(?:and|x?or)|(?:Not)?(?:Like|Match|Contains|In)|Replace|Join|is(?:Not)?|as)\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/},Prism.languages.powershell.string[0].inside.boolean=Prism.languages.powershell.boolean,Prism.languages.powershell.string[0].inside.variable=Prism.languages.powershell.variable,Prism.languages.powershell.string[0].inside.function.inside=Prism.languages.powershell; +!function(e){e.languages.puppet={heredoc:[{pattern:/(@\("([^"\r\n\/):]+)"(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/(@\(([^"\r\n\/):]+)(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,greedy:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/@\("?(?:[^"\r\n\/):]+)"?(?:\/[nrts$uL]*)?\)/,alias:"string",inside:{punctuation:{pattern:/(\().+?(?=\))/,lookbehind:!0}}}],"multiline-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,greedy:!0,alias:"comment"},regex:{pattern:/((?:\bnode\s+|[~=\(\[\{,]\s*|[=+]>\s*|^\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/,lookbehind:!0,greedy:!0,inside:{"extended-regex":{pattern:/^\/(?:[^\/\\]|\\[\s\S])+\/[im]*x[im]*$/,inside:{comment:/#.*/}}}},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},string:{pattern:/(["'])(?:\$\{(?:[^'"}]|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}|(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0,inside:{"double-quoted":{pattern:/^"[\s\S]*"$/,inside:{}}}},variable:{pattern:/\$(?:::)?\w+(?:::\w+)*/,inside:{punctuation:/::/}},"attr-name":/(?:\w+|\*)(?=\s*=>)/,"function":[{pattern:/(\.)(?!\d)\w+/,lookbehind:!0},/\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\b|\b(?!\d)\w+(?=\()/],number:/\b(?:0x[a-f\d]+|\d+(?:\.\d+)?(?:e-?\d+)?)\b/i,"boolean":/\b(?:true|false)\b/,keyword:/\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\b/,datatype:{pattern:/\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\b/,alias:"symbol"},operator:/=[=~>]?|![=~]?|<(?:<\|?|[=~|-])?|>[>=]?|->?|~>|\|>?>?|[*\/%+?]|\b(?:and|in|or)\b/,punctuation:/[\[\]{}().,;]|:+/};var n=[{pattern:/(^|[^\\])\$\{(?:[^'"{}]|\{[^}]*\}|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}/,lookbehind:!0,inside:{"short-variable":{pattern:/(^\$\{)(?!\w+\()(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}},delimiter:{pattern:/^\$/,alias:"variable"},rest:e.languages.puppet}},{pattern:/(^|[^\\])\$(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}}];e.languages.puppet.heredoc[0].inside.interpolation=n,e.languages.puppet.string.inside["double-quoted"].inside.interpolation=n}(Prism); +Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"triple-quoted-string":{pattern:/("""|''')[\s\S]+?\1/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,"boolean":/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/}; +!function(n){var t={url:/url\((["']?).*?\1\)/i,string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:if|else|for|return|unless)(?=\s+|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,number:/\b\d+(?:\.\d+)?%?/,"boolean":/\b(?:true|false)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.+|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],punctuation:/[{}()\[\];:,]/};t.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^{|}$/,alias:"punctuation"},rest:t}},t.func={pattern:/[\w-]+\([^)]*\).*/,inside:{"function":/^[^(]+/,rest:t}},n.languages.stylus={comment:{pattern:/(^|[^\\])(\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},"atrule-declaration":{pattern:/(^\s*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:t}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:(?:\{[^}]*\}|.+)|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:t}},statement:{pattern:/(^[ \t]*)(?:if|else|for|return|unless)[ \t]+.+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:t}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)[^{\r\n]*(?:;|[^{\r\n,](?=$)(?!(\r?\n|\r)(?:\{|\2[ \t]+)))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:t.interpolation}},rest:t}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t]+)))/m,lookbehind:!0,inside:{interpolation:t.interpolation,punctuation:/[{},]/}},func:t.func,string:t.string,interpolation:t.interpolation,punctuation:/[{}()\[\];:.]/}}(Prism); +!function(e){e.languages.pug={comment:{pattern:/(^([\t ]*))\/\/.*(?:(?:\r?\n|\r)\2[\t ]+.+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{rest:e.languages.javascript}},filter:{pattern:/(^([\t ]*)):.+(?:(?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"}}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:{rest:e.languages.markup}},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:if|unless|else|case|when|default|each|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:if|unless|else|case|when|default|while)\b/,alias:"keyword"},rest:e.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:block|extends|include|append|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,"function":/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:e.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]+).+/m,lookbehind:!0,inside:{rest:e.languages.javascript}},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]+).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:{rest:e.languages.javascript}},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:{rest:e.languages.javascript}},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:{rest:e.languages.javascript}}],punctuation:/[.\-!=|]+/};for(var t="(^([\\t ]*)):{{filter_name}}(?:(?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+",n=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","hogan","less","livescript","markdown","mustache","plates",{filter:"sass",language:"scss"},"stylus","swig"],a={},i=0,r=n.length;r>i;i++){var s=n[i];s="string"==typeof s?{filter:s,language:s}:s,e.languages[s.language]&&(a["filter-"+s.filter]={pattern:RegExp(t.replace("{{filter_name}}",s.filter),"m"),lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},rest:e.languages[s.language]}})}e.languages.insertBefore("pug","filter",a)}(Prism); +Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,alias:"number"},"boolean":{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},"null":{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./}; +!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e="line-numbers",t=/\n(?!$)/g,n=function(e){var n=r(e),s=n["white-space"];if("pre-wrap"===s||"pre-line"===s){var l=e.querySelector("code"),i=e.querySelector(".line-numbers-rows"),a=e.querySelector(".line-numbers-sizer"),o=l.textContent.split(t);a||(a=document.createElement("span"),a.className="line-numbers-sizer",l.appendChild(a)),a.style.display="block",o.forEach(function(e,t){a.textContent=e||"\n";var n=a.getBoundingClientRect().height;i.children[t].style.height=n+"px"}),a.textContent="",a.style.display="none"}},r=function(e){return e?window.getComputedStyle?getComputedStyle(e):e.currentStyle||null:null};window.addEventListener("resize",function(){Array.prototype.forEach.call(document.querySelectorAll("pre."+e),n)}),Prism.hooks.add("complete",function(e){if(e.code){var r=e.element.parentNode,s=/\s*\bline-numbers\b\s*/;if(r&&/pre/i.test(r.nodeName)&&(s.test(r.className)||s.test(e.element.className))&&!e.element.querySelector(".line-numbers-rows")){s.test(e.element.className)&&(e.element.className=e.element.className.replace(s," ")),s.test(r.className)||(r.className+=" line-numbers");var l,i=e.code.match(t),a=i?i.length+1:1,o=new Array(a+1);o=o.join(""),l=document.createElement("span"),l.setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=o,r.hasAttribute("data-start")&&(r.style.counterReset="linenumber "+(parseInt(r.getAttribute("data-start"),10)-1)),e.element.appendChild(l),n(r),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}),Prism.plugins.lineNumbers={getLine:function(t,n){if("PRE"===t.tagName&&t.classList.contains(e)){var r=t.querySelector(".line-numbers-rows"),s=parseInt(t.getAttribute("data-start"),10)||1,l=s+(r.children.length-1);s>n&&(n=s),n>l&&(n=l);var i=n-s;return r.children[i]}}}}}(); +!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var t=[],e={},n=function(){};Prism.plugins.toolbar={};var a=Prism.plugins.toolbar.registerButton=function(n,a){var o;o="function"==typeof a?a:function(t){var e;return"function"==typeof a.onClick?(e=document.createElement("button"),e.type="button",e.addEventListener("click",function(){a.onClick.call(this,t)})):"string"==typeof a.url?(e=document.createElement("a"),e.href=a.url):e=document.createElement("span"),e.textContent=a.text,e},t.push(e[n]=o)},o=Prism.plugins.toolbar.hook=function(a){var o=a.element.parentNode;if(o&&/pre/i.test(o.nodeName)&&!o.parentNode.classList.contains("code-toolbar")){var r=document.createElement("div");r.classList.add("code-toolbar"),o.parentNode.insertBefore(r,o),r.appendChild(o);var i=document.createElement("div");i.classList.add("toolbar"),document.body.hasAttribute("data-toolbar-order")&&(t=document.body.getAttribute("data-toolbar-order").split(",").map(function(t){return e[t]||n})),t.forEach(function(t){var e=t(a);if(e){var n=document.createElement("div");n.classList.add("toolbar-item"),n.appendChild(e),i.appendChild(n)}}),r.appendChild(i)}};a("label",function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute("data-label")){var n,a,o=e.getAttribute("data-label");try{a=document.querySelector("template#"+o)}catch(r){}return a?n=a.content:(e.hasAttribute("data-url")?(n=document.createElement("a"),n.href=e.getAttribute("data-url")):n=document.createElement("span"),n.textContent=o),n}}),Prism.hooks.add("complete",o)}}(); +//!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e=/\s*\bcommand-line\b\s*/;Prism.hooks.add("before-highlight",function(a){if(a.vars=a.vars||{},a.vars["command-line"]=a.vars["command-line"]||{},a.vars["command-line"].complete||!a.code)return a.vars["command-line"].complete=!0,void 0;var n=a.element.parentNode;if(!n||!/pre/i.test(n.nodeName)||!e.test(n.className)&&!e.test(a.element.className))return a.vars["command-line"].complete=!0,void 0;if(a.element.querySelector(".command-line-prompt"))return a.vars["command-line"].complete=!0,void 0;var t=a.code.split("\n");a.vars["command-line"].numberOfLines=t.length,a.vars["command-line"].outputLines=[];var r=n.getAttribute("data-output"),s=n.getAttribute("data-filter-output");if(r||""===r){r=r.split(",");for(var o=0;oi&&(i=1),l>t.length&&(l=t.length),i--,l--;for(var d=i;l>=d;d++)a.vars["command-line"].outputLines[d]=t[d],t[d]=""}}}else if(s)for(var o=0;o');else{var o=t("data-user","user"),m=t("data-host","localhost");r=r.join('')}var i=document.createElement("span");i.className="command-line-prompt",i.innerHTML=r;for(var l=0;l170&&s<1?t(n).addClass("large-format"):t(n).removeClass("large-format");r<200?t(n).removeClass("small-format").addClass("tiny-format"):t(n).removeClass("tiny-format")})},s=function(){t(".rrssb-buttons").each(function(e){var n=t(this),r=0,i=0,s,o,a=t("li.small",n).length;if(a===t("li",n).length){var f=a*42,l=parseFloat(t(n).width());s=t("li.small",n).first();o=parseFloat(t(s).attr("data-size"))+55;if(f+oo){var a=t("li",n).not(".small").last();t(a).addClass("small");u()}}--r||s()})});e===!0&&f(u)},u=function(){t(".rrssb-buttons").each(function(e){var n=t(this),i,s,o,u,a,f=t("li.small",n).length;if(f>0&&f!==t("li",n).length){t(n).removeClass("small-format");t("li.small",n).css("width","42px");o=f*42;i=t("li",n).not(".small").length;s=100/i;a=o/i;navigator.userAgent.indexOf("Chrome")>=0||navigator.userAgent.indexOf("Safari")>=0?u="-webkit-calc("+s+"% - "+a+"px)":navigator.userAgent.indexOf("Firefox")>=0?u="-moz-calc("+s+"% - "+a+"px)":u="calc("+s+"% - "+a+"px)";t("li",n).not(".small").css("width",u)}else if(f===t("li",n).length){t(n).addClass("small-format");r()}else{t(n).removeClass("small-format");r()}});i()},a=function(){t(".rrssb-buttons").each(function(e){t(this).addClass("rrssb-"+(e+1))});r();t(".rrssb-buttons li .text").each(function(e){var n=parseFloat(t(this).width());t(this).closest("li").attr("data-size",n)});o(!0)},f=function(e){t(".rrssb-buttons li.small").removeClass("small");o();e()},l=function(t,r,i,s){var o=e.screenLeft!==n?e.screenLeft:screen.left,u=e.screenTop!==n?e.screenTop:screen.top,a=e.innerWidth?e.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,f=e.innerHeight?e.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,l=a/2-i/2+o,c=f/3-s/3+u,h=e.open(t,r,"scrollbars=yes, width="+i+", height="+s+", top="+c+", left="+l);e.focus&&h.focus()},c=function(){var e={};return function(t,n,r){r||(r="Don't call this twice without a uniqueId");e[r]&&clearTimeout(e[r]);e[r]=setTimeout(t,n)}}();t(".rrssb-buttons a.popup").on("click",function(e){var n=t(this);l(n.attr("href"),n.find(".text").html(),580,470);e.preventDefault()});t(e).resize(function(){f(u);c(function(){f(u)},200,"finished resizing")});t(document).ready(function(){a()})})(window,jQuery); \ No newline at end of file diff --git a/themes/redlounge/static/touch-icon-144-precomposed.png b/themes/redlounge/static/touch-icon-144-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..19323de1ee3aa16ca05e222a3aecdb5d6251b578 GIT binary patch literal 570 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q2}owBl)eX2k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+81HzxIEGZ*dUMAxuPH$0z{6W5pO}33{8R+o-182kbX-^L zyVq(_$?dkxymG3UulmYkZQng|_TB%H6+f@$X}ox(sO!gN*I(XMWl&3CV)Hq`!ZV|R zQ^J5z*dT#PE#Ux*&w&Qc84W-#BQsdR`YZ0c*7hGyzP-(R-^@)q@BgmIoOSu-mM4k7 z_PyVAPWBm}_ca5a%STtO`ef7p>HF{H*W=e;f4M#-GVJ=-KZjccjuqBCdwV{A>j&{) zNoP;8Uw;1+NV!}-@9{-55RcuMuKC?xyXVEu^Upv3@xAuibVF;`Ck-a$z;_$0TLl*N z966iDoYVR3_uoIh)9U9{yL+!sPp!0&$rIbGv-)+_zeFdF#}@Z=_zoBBj9C>W*49B zfA@zWXZPJ@);|C4me{h+n3$n*s-2HGCoG$9$11@vE!bP|@u3yZfQf;@)78&qol`;+ E0G>zh-v9sr literal 0 HcmV?d00001 diff --git a/themes/redlounge/theme.toml b/themes/redlounge/theme.toml new file mode 100644 index 0000000..03021c8 --- /dev/null +++ b/themes/redlounge/theme.toml @@ -0,0 +1,13 @@ +name = "Red Lounge" +description = "A clean, responsive, template with red accents." +license = "Apache 2.0" +licenselink = "https://github.com/tmaiaroto/hugo-redlounge/blob/master/LICENSE.md" +source_repo = "https://github.com/tmaiaroto/hugo-redlounge" +homepage = "https://github.com/tmaiaroto/hugo-redlounge" +tags = ["redlounge", "red", "raleway", "libre baskerville", "blog", "gallery"] +features = ["blog", "gallery"] +min_version = 0.14 + +[author] + name = "Tom Maiaroto" + homepage = "http://www.shift8creative.com" \ No newline at end of file