Compare commits
3 Commits
bb93a71464
...
8c676fd6e6
Author | SHA1 | Date |
---|---|---|
Fred Boniface | 8c676fd6e6 | |
Fred Boniface | 239ce81d4c | |
Fred Boniface | 7f915c26cc |
14
Dockerfile
14
Dockerfile
|
@ -1,4 +1,12 @@
|
||||||
FROM fedora:latest AS builder
|
FROM fedora:latest as compressor
|
||||||
|
RUN dnf install brotli nodejs npm jq -y
|
||||||
|
RUN npm i uglifyjs-folder uglifycss html-minifier-terser -g
|
||||||
|
COPY . /data/in
|
||||||
|
RUN bash /data/in/deploy/deploy.sh
|
||||||
|
|
||||||
FROM nginx:mainline-alpine-slim
|
FROM fholzer/nginx-brotli:latest
|
||||||
COPY . /usr/share/nginx/html
|
RUN rm /etc/nginx/nginx.conf
|
||||||
|
RUN apk update
|
||||||
|
RUN apk add --upgrade libxml2 libxslt
|
||||||
|
COPY ./deploy/nginx.conf /etc/nginx/nginx.conf
|
||||||
|
COPY --from=compressor /data/out/ /site-static/
|
34
all.html
34
all.html
|
@ -1,23 +1,17 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
<title>FJLA Gateway</title>
|
<title>FJLA Gateway</title>
|
||||||
|
|
||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8"/>
|
||||||
<meta name="description" content="FJLA Gateway"/>
|
<meta name="description" content="FJLA Gateway"/>
|
||||||
<meta name="viewport" content="width=device-width, initial=scale=1.0">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
|
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
|
||||||
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
|
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
|
||||||
<script src="./scripts/iconactions.js"></script>
|
<script src="./scripts/iconactions.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1 class="pagetitle">FJLA Gateway</h1>
|
<h1 class="pagetitle">FJLA Gateway</h1>
|
||||||
<h2 Class="pagesubtitle">All Services</h2>
|
<h2 Class="pagesubtitle">All Services</h2>
|
||||||
|
|
||||||
<div class="gatecontainer">
|
<div class="gatecontainer">
|
||||||
<div onclick="gotoNextcloud()" class="gateicon">
|
<div onclick="gotoNextcloud()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/nextcloud-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/nextcloud-normal.webp"/>
|
||||||
|
@ -26,7 +20,6 @@
|
||||||
<h2 class="gatesubtitle">Personal Cloud</h2>
|
<h2 class="gatesubtitle">Personal Cloud</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoHomeAssistant()" class="gateicon">
|
<div onclick="gotoHomeAssistant()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/home-assistant-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/home-assistant-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -34,7 +27,6 @@
|
||||||
<h2 class="gatesubtitle">Smart Home</h2>
|
<h2 class="gatesubtitle">Smart Home</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoJellyfin()" class="gateicon">
|
<div onclick="gotoJellyfin()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/jellyfin-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/jellyfin-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -42,7 +34,6 @@
|
||||||
<h2 class="gatesubtitle">Video Streaming</h2>
|
<h2 class="gatesubtitle">Video Streaming</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoGallery()" class="gateicon">
|
<div onclick="gotoGallery()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/gallery-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/gallery-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -50,9 +41,7 @@
|
||||||
<h2 class="gatesubtitle">Family Photos</h2>
|
<h2 class="gatesubtitle">Family Photos</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="gatecontainer">
|
<div class="gatecontainer">
|
||||||
<div onclick="gotoProxmox()" class="gateicon">
|
<div onclick="gotoProxmox()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/proxmox-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/proxmox-normal.webp"/>
|
||||||
|
@ -61,7 +50,6 @@
|
||||||
<h2 class="gatesubtitle">Virtualisation</h2>
|
<h2 class="gatesubtitle">Virtualisation</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoOmada()" class="gateicon">
|
<div onclick="gotoOmada()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/tplink-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/tplink-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -69,15 +57,6 @@
|
||||||
<h2 class="gatesubtitle">Wireless Network</h2>
|
<h2 class="gatesubtitle">Wireless Network</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoJellyfin()" class="gateicon hidden">
|
|
||||||
<img class="gateimage" src="./assets/gate-logos/"/>
|
|
||||||
<div class="icontext">
|
|
||||||
<h1 class="gatetitle">Blank</h1>
|
|
||||||
<h2 class="gatesubtitle">-</h2>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div onclick="gotoGateway()" class="gateicon">
|
<div onclick="gotoGateway()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/back-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/back-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -85,11 +64,8 @@
|
||||||
<h2 class="gatesubtitle">Go to Home</h2>
|
<h2 class="gatesubtitle">Go to Home</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="gatecontainer">
|
<div class="gatecontainer">
|
||||||
|
|
||||||
<div onclick="gotoMail()" class="gateicon">
|
<div onclick="gotoMail()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/mail-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/mail-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -97,7 +73,6 @@
|
||||||
<h2 class="gatesubtitle">Your email</h2>
|
<h2 class="gatesubtitle">Your email</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoVoicemail()" class="gateicon">
|
<div onclick="gotoVoicemail()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/voicemail-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/voicemail-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -105,8 +80,6 @@
|
||||||
<h2 class="gatesubtitle">FreePBX UCP</h2>
|
<h2 class="gatesubtitle">FreePBX UCP</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div onclick="gotoAccount()" class="gateicon">
|
<div onclick="gotoAccount()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/account-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/account-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -114,7 +87,6 @@
|
||||||
<h2 class="gatesubtitle">Your Settings</h2>
|
<h2 class="gatesubtitle">Your Settings</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoHelp()" class="gateicon">
|
<div onclick="gotoHelp()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/lifebuoy-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/lifebuoy-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -122,8 +94,6 @@
|
||||||
<h2 class="gatesubtitle">Tell me more</h2>
|
<h2 class="gatesubtitle">Tell me more</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
ROOTIN="/data/in"
|
||||||
|
ROOTOUT="/data/out"
|
||||||
|
|
||||||
|
echo "Running UglifyJS on /data/in folder"
|
||||||
|
uglifyjs-folder "$ROOTIN" -x ".js" -eo "$ROOTOUT"
|
||||||
|
|
||||||
|
echo "Running UglifyCSS"
|
||||||
|
CSSIN="/data/in/stylesheets/"
|
||||||
|
CSSOUT="/data/out/stylesheets"
|
||||||
|
|
||||||
|
cd $CSSIN
|
||||||
|
echo "Changed directory"
|
||||||
|
for f in *
|
||||||
|
do
|
||||||
|
if [ -f "$f" ]; then
|
||||||
|
uglifycss "$f" --output "$f";
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Moving 'styles' to 'out'"
|
||||||
|
cp -r $CSSIN $CSSOUT
|
||||||
|
|
||||||
|
echo "Running html-minifier-terser on /folder"
|
||||||
|
HTMLIN="/data/in/"
|
||||||
|
HTMLOUT="/data/out"
|
||||||
|
html-minifier-terser --collapse-whitespace --remove-comments --file-ext html --input-dir /data/in/ --output-dir /data/out/
|
||||||
|
|
||||||
|
#echo "Moving JSON Manifest file from root to output"
|
||||||
|
#cat /data/in/manifest.json | jq -c > /data/out/manifest.json
|
||||||
|
|
||||||
|
echo "Moving other files folder from in/ to out/"
|
||||||
|
cp -r /data/in/assets /data/out/assets
|
||||||
|
cp -r /data/in/fonts /data/out/fonts
|
||||||
|
|
||||||
|
echo "Running GZIP & Brotli on all HTML, JS, CSS, JSON, SVG & TTF files"
|
||||||
|
find /data/out -type f -name \*.html -or -name \*.js -or -name \*.css -or -name \*.json -or -name \*.svg -or -name \*.ttf | while read file; do gzip -k -9 $file; brotli -k -q 11 $file; done
|
|
@ -0,0 +1,38 @@
|
||||||
|
user nginx;
|
||||||
|
worker_processes 1;
|
||||||
|
|
||||||
|
error_log /var/log/nginx/error.log notice;
|
||||||
|
pid /var/run/nginx.pid;
|
||||||
|
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log main;
|
||||||
|
sendfile on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
add_header Content-Security-Policy "default-src 'self'";
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /site-static/;
|
||||||
|
index index.html;
|
||||||
|
gzip_static on;
|
||||||
|
brotli_static on;
|
||||||
|
expires 3d;
|
||||||
|
add_header Cache-Control "public, no-transform";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8"/>
|
||||||
<meta name="description" content="FJLA Gateway"/>
|
<meta name="description" content="FJLA Gateway"/>
|
||||||
<meta name="viewport" content="width=device-width, initial=scale=1.0">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
|
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
|
||||||
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
|
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8"/>
|
||||||
<meta name="description" content="FJLA Gateway"/>
|
<meta name="description" content="FJLA Gateway"/>
|
||||||
<meta name="viewport" content="width=device-width, initial=scale=1.0">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
|
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
|
||||||
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
|
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
|
||||||
|
|
25
index.html
25
index.html
|
@ -1,30 +1,22 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
<title>FJLA Gateway</title>
|
<title>FJLA Gateway</title>
|
||||||
|
|
||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8"/>
|
||||||
<meta name="description" content="FJLA Gateway"/>
|
<meta name="description" content="The gateway to FJLA services"/>
|
||||||
<meta name="viewport" content="width=device-width, initial=scale=1.0">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
|
<link rel="stylesheet" type="text/css" href="./stylesheets/fonts.css"/>
|
||||||
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
|
<link rel="stylesheet" type="text/css" href="./stylesheets/style.css"/>
|
||||||
<script src="./scripts/iconactions.js"></script>
|
<script src="./scripts/iconactions.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1 class="pagetitle">FJLA Gateway</h1>
|
<h1 class="pagetitle">FJLA Gateway</h1>
|
||||||
<a hidden href="./faults.html"><h2 class="pagesubtitle errornote">Active Fault</h2></a>
|
<a hidden href="./faults.html"><h2 class="pagesubtitle errornote">Active Fault</h2></a>
|
||||||
|
|
||||||
<form action="https://duckduckgo.com/">
|
<form action="https://duckduckgo.com/">
|
||||||
<input class="searchentry" type="text" id="search" name="q" autocomplete="on" placeholder="Search DuckDuckGo" autofocus>
|
<input class="searchentry" type="text" id="search" name="q" autocomplete="on" placeholder="Search DuckDuckGo" autofocus>
|
||||||
</form>
|
</form>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<div class="gatecontainer">
|
<div class="gatecontainer">
|
||||||
|
|
||||||
<div onclick="gotoNextcloud()" class="gateicon">
|
<div onclick="gotoNextcloud()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/nextcloud-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/nextcloud-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -32,7 +24,6 @@
|
||||||
<h2 class="gatesubtitle">Personal Cloud</h2>
|
<h2 class="gatesubtitle">Personal Cloud</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoHomeAssistant()" class="gateicon">
|
<div onclick="gotoHomeAssistant()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/home-assistant-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/home-assistant-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -40,7 +31,6 @@
|
||||||
<h2 class="gatesubtitle">Smart Home</h2>
|
<h2 class="gatesubtitle">Smart Home</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoJellyfin()" class="gateicon">
|
<div onclick="gotoJellyfin()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/jellyfin-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/jellyfin-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -48,7 +38,6 @@
|
||||||
<h2 class="gatesubtitle">Video Streaming</h2>
|
<h2 class="gatesubtitle">Video Streaming</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoGallery()" class="gateicon">
|
<div onclick="gotoGallery()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/gallery-normal.webp"/>
|
<img class="gateimage" src="./assets/gate-logos/gallery-normal.webp"/>
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -56,12 +45,8 @@
|
||||||
<h2 class="gatesubtitle">Family Photos</h2>
|
<h2 class="gatesubtitle">Family Photos</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="gatecontainer">
|
<div class="gatecontainer">
|
||||||
|
|
||||||
<div onclick="gotoMail()" class="gateicon">
|
<div onclick="gotoMail()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/mail-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/mail-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -69,7 +54,6 @@
|
||||||
<h2 class="gatesubtitle">Your email</h2>
|
<h2 class="gatesubtitle">Your email</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoVoicemail()" class="gateicon">
|
<div onclick="gotoVoicemail()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/voicemail-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/voicemail-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -77,7 +61,6 @@
|
||||||
<h2 class="gatesubtitle">FreePBX UCP</h2>
|
<h2 class="gatesubtitle">FreePBX UCP</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoAll()" class="gateicon">
|
<div onclick="gotoAll()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/question-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/question-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -85,7 +68,6 @@
|
||||||
<h2 class="gatesubtitle">Full list of services</h2>
|
<h2 class="gatesubtitle">Full list of services</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoAccount()" class="gateicon">
|
<div onclick="gotoAccount()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/account-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/account-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -93,7 +75,6 @@
|
||||||
<h2 class="gatesubtitle">Your Settings</h2>
|
<h2 class="gatesubtitle">Your Settings</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div onclick="gotoHelp()" class="gateicon">
|
<div onclick="gotoHelp()" class="gateicon">
|
||||||
<img class="gateimage" src="./assets/gate-logos/lifebuoy-normal.webp">
|
<img class="gateimage" src="./assets/gate-logos/lifebuoy-normal.webp">
|
||||||
<div class="icontext">
|
<div class="icontext">
|
||||||
|
@ -101,8 +82,6 @@
|
||||||
<h2 class="gatesubtitle">Tell me more</h2>
|
<h2 class="gatesubtitle">Tell me more</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
Reference in New Issue