485 lines
23 KiB
HTML
485 lines
23 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>LND - Archipelago</title>
|
||
<script src="https://cdn.tailwindcss.com"></script>
|
||
<style>
|
||
* {
|
||
margin: 0;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
body {
|
||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', sans-serif;
|
||
min-height: 100vh;
|
||
color: white;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
.bg-perspective-container {
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: -10;
|
||
perspective: 1000px;
|
||
perspective-origin: 50% 50%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.bg-layer {
|
||
position: absolute;
|
||
inset: 0;
|
||
background-image: url('/assets/img/bg-web5.jpg');
|
||
background-size: cover;
|
||
background-position: center;
|
||
background-repeat: no-repeat;
|
||
transition: all 0.45s cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
||
transform-style: preserve-3d;
|
||
opacity: 1;
|
||
transform: translateZ(0) scale(1);
|
||
}
|
||
|
||
.overlay {
|
||
position: fixed;
|
||
inset: 0;
|
||
background: rgba(0, 0, 0, 0.8);
|
||
z-index: -5;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.glass-card {
|
||
background-color: rgba(0, 0, 0, 0.65);
|
||
backdrop-filter: blur(18px);
|
||
-webkit-backdrop-filter: blur(18px);
|
||
border: 1px solid rgba(255, 255, 255, 0.18);
|
||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
|
||
border-radius: 1rem;
|
||
overflow-x: hidden;
|
||
overflow-y: visible;
|
||
}
|
||
|
||
.glass-button {
|
||
background-color: rgba(0, 0, 0, 0.6);
|
||
backdrop-filter: blur(18px);
|
||
-webkit-backdrop-filter: blur(18px);
|
||
border: 1px solid rgba(255, 255, 255, 0.18);
|
||
color: rgba(255, 255, 255, 0.9);
|
||
transition: all 0.3s ease;
|
||
}
|
||
|
||
.glass-button:hover {
|
||
color: white;
|
||
}
|
||
|
||
.container {
|
||
max-width: 1400px;
|
||
margin: 0 auto;
|
||
padding: 2rem;
|
||
padding-bottom: 4rem;
|
||
}
|
||
|
||
/* Logo gradient border */
|
||
.logo-gradient-border {
|
||
position: relative;
|
||
border-radius: 16px;
|
||
padding: 3px;
|
||
background: linear-gradient(135deg, rgba(139, 92, 246, 0.8) 0%, rgba(0, 0, 0, 0.8) 100%);
|
||
box-shadow: 0 8px 24px rgba(139, 92, 246, 0.5);
|
||
display: inline-block;
|
||
}
|
||
|
||
.logo-gradient-border::after {
|
||
content: '';
|
||
position: absolute;
|
||
inset: 3px;
|
||
border-radius: 13px;
|
||
background: rgba(0, 0, 0, 0.4);
|
||
z-index: 0;
|
||
}
|
||
|
||
.logo-gradient-border img,
|
||
.logo-gradient-border svg {
|
||
border-radius: 13px;
|
||
display: block;
|
||
position: relative;
|
||
z-index: 1;
|
||
width: 64px;
|
||
height: 64px;
|
||
}
|
||
|
||
@keyframes ping {
|
||
75%, 100% {
|
||
transform: scale(2);
|
||
opacity: 0;
|
||
}
|
||
}
|
||
|
||
.animate-ping {
|
||
animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="bg-perspective-container">
|
||
<div class="bg-layer"></div>
|
||
</div>
|
||
<div class="overlay"></div>
|
||
|
||
<div class="container">
|
||
<!-- Header - Glass card with logo top left -->
|
||
<div class="glass-card p-6 mb-6">
|
||
<div class="flex items-start gap-4">
|
||
<!-- Logo - Top Left -->
|
||
<div class="flex-shrink-0">
|
||
<div class="logo-gradient-border">
|
||
<img
|
||
src="/assets/img/app-icons/lnd.svg"
|
||
alt="LND"
|
||
class="w-16 h-16"
|
||
style="object-fit: contain; padding: 8px;"
|
||
/>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Title and Description -->
|
||
<div class="flex-1 min-w-0">
|
||
<h1 class="text-3xl font-bold text-white mb-2">LND</h1>
|
||
<p class="text-white/70">Lightning Network Daemon for instant Bitcoin payments</p>
|
||
<p class="text-sm text-white/60 mt-2">Regtest mode - Development environment</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="glass-card p-6 mb-6">
|
||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
|
||
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<div class="relative">
|
||
<div class="w-3 h-3 rounded-full bg-green-400"></div>
|
||
<div class="absolute inset-0 w-3 h-3 rounded-full bg-green-400 animate-ping opacity-75"></div>
|
||
</div>
|
||
<div>
|
||
<p class="text-sm font-medium text-white">Node Status</p>
|
||
<p class="text-xs text-white/60">Running</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<div class="relative">
|
||
<span class="text-2xl text-orange-500 font-bold">⚡</span>
|
||
</div>
|
||
<div>
|
||
<p class="text-sm font-medium text-white">Channels</p>
|
||
<p class="text-xs text-orange-500 font-medium" id="channelCount">0</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<div class="relative">
|
||
<div class="w-3 h-3 rounded-full bg-green-400"></div>
|
||
<div class="absolute inset-0 w-3 h-3 rounded-full bg-green-400 animate-ping opacity-75"></div>
|
||
</div>
|
||
<div>
|
||
<p class="text-sm font-medium text-white">REST API</p>
|
||
<p class="text-xs text-white/60">Active</p>
|
||
</div>
|
||
</div>
|
||
<button
|
||
onclick="openSettings()"
|
||
class="px-3 py-1.5 glass-button rounded text-xs font-medium text-white/90 hover:text-white transition-colors"
|
||
>
|
||
Settings
|
||
</button>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<div class="relative">
|
||
<div class="w-3 h-3 rounded-full bg-green-400"></div>
|
||
<div class="absolute inset-0 w-3 h-3 rounded-full bg-green-400 animate-ping opacity-75"></div>
|
||
</div>
|
||
<div>
|
||
<p class="text-sm font-medium text-white">gRPC</p>
|
||
<p class="text-xs text-white/60">Connected</p>
|
||
</div>
|
||
</div>
|
||
<button
|
||
onclick="openLogs()"
|
||
class="px-3 py-1.5 glass-button rounded text-xs font-medium text-white/90 hover:text-white transition-colors"
|
||
>
|
||
Logs
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8">
|
||
<div class="glass-card p-6">
|
||
<div class="flex items-start gap-4 mb-4">
|
||
<div class="flex-shrink-0 w-12 h-12 rounded-lg bg-white/10 flex items-center justify-center">
|
||
<svg class="w-6 h-6 text-white/80" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" />
|
||
</svg>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h2 class="text-xl font-semibold text-white mb-2">Node Status</h2>
|
||
<p class="text-white/70 text-sm mb-4">Lightning node information</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="space-y-3">
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">Node Status</span>
|
||
</div>
|
||
<span class="text-green-400 text-sm font-medium">Running</span>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">Network</span>
|
||
</div>
|
||
<span class="text-white/60 text-sm">Regtest</span>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">Version</span>
|
||
</div>
|
||
<span class="text-white/60 text-sm">0.17.4-beta</span>
|
||
</div>
|
||
</div>
|
||
|
||
<button class="mt-4 w-full px-4 py-2 glass-button rounded-lg text-sm font-medium text-white/90 hover:text-white transition-colors" onclick="openSettings()">
|
||
Node Settings
|
||
</button>
|
||
</div>
|
||
|
||
<div class="glass-card p-6">
|
||
<div class="flex items-start gap-4 mb-4">
|
||
<div class="flex-shrink-0 w-12 h-12 rounded-lg bg-white/10 flex items-center justify-center">
|
||
<svg class="w-6 h-6 text-white/80" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.111 16.404a5.5 5.5 0 017.778 0M12 20h.01m-7.08-7.071c3.904-3.905 10.236-3.905 14.141 0M1.394 9.393c5.857-5.857 15.355-5.857 21.213 0" />
|
||
</svg>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h2 class="text-xl font-semibold text-white mb-2">REST API</h2>
|
||
<p class="text-white/70 text-sm mb-4">HTTP REST API access</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="space-y-3">
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">REST Endpoint</span>
|
||
</div>
|
||
<span class="text-white/60 text-sm font-mono">localhost:8080</span>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">API Status</span>
|
||
</div>
|
||
<span class="text-green-400 text-sm font-medium">Active</span>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">API Version</span>
|
||
</div>
|
||
<span class="text-white/60 text-sm">v1</span>
|
||
</div>
|
||
</div>
|
||
|
||
<button class="mt-4 w-full px-4 py-2 glass-button rounded-lg text-sm font-medium text-white/90 hover:text-white transition-colors" onclick="copyRESTInfo()">
|
||
Copy REST Info
|
||
</button>
|
||
</div>
|
||
|
||
<div class="glass-card p-6">
|
||
<div class="flex items-start gap-4 mb-4">
|
||
<div class="flex-shrink-0 w-12 h-12 rounded-lg bg-white/10 flex items-center justify-center">
|
||
<svg class="w-6 h-6 text-white/80" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.111 16.404a5.5 5.5 0 017.778 0M12 20h.01m-7.08-7.071c3.904-3.905 10.236-3.905 14.141 0M1.394 9.393c5.857-5.857 15.355-5.857 21.213 0" />
|
||
</svg>
|
||
</div>
|
||
<div class="flex-1">
|
||
<h2 class="text-xl font-semibold text-white mb-2">gRPC Connection</h2>
|
||
<p class="text-white/70 text-sm mb-4">High-performance gRPC API</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="space-y-3">
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">gRPC Host</span>
|
||
</div>
|
||
<span class="text-white/60 text-sm font-mono">localhost:10009</span>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">gRPC Status</span>
|
||
</div>
|
||
<span class="text-green-400 text-sm font-medium">Connected</span>
|
||
</div>
|
||
|
||
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
||
<div class="flex items-center gap-3">
|
||
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01" />
|
||
</svg>
|
||
<span class="text-white/80 text-sm">P2P Port</span>
|
||
</div>
|
||
<span class="text-white/60 text-sm font-mono">9735</span>
|
||
</div>
|
||
</div>
|
||
|
||
<button class="mt-4 w-full px-4 py-2 glass-button rounded-lg text-sm font-medium text-white/90 hover:text-white transition-colors" onclick="openLogs()">
|
||
View Logs
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="modal hidden fixed inset-0 bg-black/80 backdrop-blur-sm z-50 items-center justify-center p-4" id="settingsModal">
|
||
<div class="glass-card p-6 max-w-2xl w-full max-h-[80vh] overflow-y-auto">
|
||
<div class="flex justify-between items-center mb-4">
|
||
<h2 class="text-2xl font-bold text-white">Node Settings</h2>
|
||
<button onclick="closeSettings()" class="w-10 h-10 rounded-lg bg-white/10 border border-white/18 text-white text-xl flex items-center justify-center hover:bg-white/20 transition-colors">×</button>
|
||
</div>
|
||
<div class="space-y-3">
|
||
<div class="p-3 bg-white/5 rounded-lg">
|
||
<div class="font-semibold text-white mb-1">Network Mode</div>
|
||
<div class="text-white/70 text-sm">Regtest (Development)</div>
|
||
</div>
|
||
<div class="p-3 bg-white/5 rounded-lg">
|
||
<div class="font-semibold text-white mb-1">Bitcoin Backend</div>
|
||
<div class="text-white/70 text-sm">Connected to bitcoin:18443</div>
|
||
</div>
|
||
<div class="p-3 bg-white/5 rounded-lg">
|
||
<div class="font-semibold text-white mb-1">ZMQ Subscriptions</div>
|
||
<div class="text-white/70 text-sm">Blocks & Transactions monitored</div>
|
||
</div>
|
||
<div class="p-3 bg-white/5 rounded-lg">
|
||
<div class="font-semibold text-white mb-1">Seed Backup</div>
|
||
<div class="text-white/70 text-sm">Disabled (Development mode)</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="modal hidden fixed inset-0 bg-black/80 backdrop-blur-sm z-50 items-center justify-center p-4" id="logsModal">
|
||
<div class="glass-card p-6 max-w-4xl w-full max-h-[80vh] overflow-y-auto">
|
||
<div class="flex justify-between items-center mb-4">
|
||
<h2 class="text-2xl font-bold text-white">Node Logs</h2>
|
||
<button onclick="closeLogs()" class="w-10 h-10 rounded-lg bg-white/10 border border-white/18 text-white text-xl flex items-center justify-center hover:bg-white/20 transition-colors">×</button>
|
||
</div>
|
||
<div class="bg-black/40 rounded-lg p-4 font-mono text-xs text-white/80 whitespace-pre-wrap break-all" id="logsContent">
|
||
Loading logs...
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
function copyRESTInfo() {
|
||
const info = `REST API: http://localhost:8080\nAPI Version: v1`;
|
||
navigator.clipboard.writeText(info).then(() => {
|
||
alert('REST info copied to clipboard!');
|
||
});
|
||
}
|
||
|
||
function openSettings() {
|
||
document.getElementById('settingsModal').classList.remove('hidden');
|
||
document.getElementById('settingsModal').classList.add('flex');
|
||
}
|
||
|
||
function closeSettings() {
|
||
document.getElementById('settingsModal').classList.add('hidden');
|
||
document.getElementById('settingsModal').classList.remove('flex');
|
||
}
|
||
|
||
function openLogs() {
|
||
document.getElementById('logsModal').classList.remove('hidden');
|
||
document.getElementById('logsModal').classList.add('flex');
|
||
loadLogs();
|
||
}
|
||
|
||
function closeLogs() {
|
||
document.getElementById('logsModal').classList.add('hidden');
|
||
document.getElementById('logsModal').classList.remove('flex');
|
||
}
|
||
|
||
function loadLogs() {
|
||
const logsContent = document.getElementById('logsContent');
|
||
logsContent.textContent = `LND version 0.17.4-beta commit=v0.17.4-beta
|
||
|
||
Attempting automatic RPC configuration to bitcoind
|
||
Automatically obtained bitcoind's RPC credentials
|
||
2024-01-15 12:00:00.000 [INF] LTND: Version: 0.17.4-beta commit=v0.17.4-beta
|
||
2024-01-15 12:00:00.100 [INF] LTND: Active chain: Bitcoin (network=regtest)
|
||
2024-01-15 12:00:00.200 [INF] CHDB: Checking for schema update
|
||
2024-01-15 12:00:00.300 [INF] LTND: Primary chain is set to: bitcoin
|
||
2024-01-15 12:00:01.000 [INF] RPCS: RPC server listening on 0.0.0.0:10009
|
||
2024-01-15 12:00:01.100 [INF] RPCS: REST proxy started at 0.0.0.0:8080
|
||
2024-01-15 12:00:01.200 [INF] LNWL: Opened wallet
|
||
2024-01-15 12:00:02.000 [INF] LTND: Waiting for chain backend to finish sync`;
|
||
}
|
||
|
||
let channelCount = 0;
|
||
setInterval(() => {
|
||
if (Math.random() > 0.9) {
|
||
channelCount = Math.floor(Math.random() * 5);
|
||
document.getElementById('channelCount').textContent = channelCount;
|
||
}
|
||
}, 10000);
|
||
|
||
document.addEventListener('keydown', (e) => {
|
||
if (e.key === 'Escape') {
|
||
closeSettings();
|
||
closeLogs();
|
||
}
|
||
});
|
||
|
||
document.querySelectorAll('.modal').forEach(modal => {
|
||
modal.addEventListener('click', (e) => {
|
||
if (e.target === modal) {
|
||
closeSettings();
|
||
closeLogs();
|
||
}
|
||
});
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|