Merge pull request #1 from sentriz/features/transcoding_update

features/transcoding update
This commit is contained in:
Serge Tkatchouk
2020-03-12 20:51:07 +08:00
committed by GitHub
20 changed files with 929 additions and 610 deletions

View File

@@ -12,7 +12,7 @@
- multiple users
- a web interface for configuration (set up last.fm, manage users, start scans, etc.)
- newer salt and token auth
- tested on [dsub](https://f-droid.org/en/packages/github.daneren2005.dsub/), [jamstash](http://jamstash.com/), and [sublime music](https://gitlab.com/sumner/sublime-music/)
- tested on [dsub](https://f-droid.org/en/packages/github.daneren2005.dsub/), [jamstash](http://jamstash.com/), [sublime music](https://gitlab.com/sumner/sublime-music/), and [soundwaves](https://apps.apple.com/us/app/soundwaves/id736139596)
## installation
@@ -57,6 +57,7 @@ then start with `docker-compose up -d`
|env var|command line arg|description|
|---|---|---|
|`GONIC_MUSIC_PATH`|`-music-path`|path to your music collection|
|`GONIC_CACHE_PATH`|`-cache-path`|**optional** path to store audio transcodes (*default* `/tmp/gonic_cache`)|
|`GONIC_DB_PATH`|`-db-path`|**optional** path to database file|
|`GONIC_LISTEN_ADDR`|`-listen-addr`|**optional** host and port to listen on (eg. `0.0.0.0:4747`, `127.0.0.1:4747`) (*default* `0.0.0.0:4747`)|
|`GONIC_PROXY_PREFIX`|`-proxy-prefix`|**optional** url path prefix to use if behind reverse proxy. eg `/gonic` (see example configs below)|

View File

@@ -6,4 +6,4 @@ if ! command -v 'entr' > /dev/null; then
exit 1
fi
find assets/ | entr -r ./_do_run_server $@
find assets/ -not -name '*_gen.go' | entr -r ./_do_run_server $@

View File

@@ -62,7 +62,7 @@ var Bytes = map[string]*EmbeddedAsset{
0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}},
"pages/home.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582430789, 0),
ModTime: time.Unix(1584016057, 0),
Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x75,0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x64,0x69,0x76,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,
@@ -92,194 +92,277 @@ var Bytes = map[string]*EmbeddedAsset{
0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x6c,0x61,0x73,0x74,0x66,0x6d,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x6c,0x61,
0x73,0x74,0x2e,0x66,0x6d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,
0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69,
0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,
0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x79,0x6f,0x75,0x20,0x63,0x61,0x6e,0x20,0x67,0x65,0x74,0x20,0x61,0x6e,
0x20,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,
0x2f,0x2f,0x77,0x77,0x77,0x2e,0x6c,0x61,0x73,0x74,0x2e,0x66,0x6d,0x2f,0x61,0x70,0x69,0x2f,0x61,0x63,0x63,0x6f,0x75,0x6e,
0x74,0x2f,0x63,0x72,0x65,0x61,0x74,0x65,0x22,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x22,0x5f,0x62,0x6c,0x61,0x6e,0x6b,
0x22,0x3e,0x68,0x65,0x72,0x65,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,
0x6d,0x69,0x6e,0x2f,0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x61,0x70,0x69,0x5f,0x6b,0x65,
0x79,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x3c,0x2f,0x61,
0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,
0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,
0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x73,0x74,0x61,0x74,0x75,0x73,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x4c,0x61,0x73,
0x74,0x46,0x4d,0x53,0x65,0x73,0x73,0x69,0x6f,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x6e,0x6b,0x65,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,
0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,
0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x64,0x6f,
0x22,0x20,0x7d,0x7d,0x22,0x3e,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x3c,0x2f,0x61,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,
0x3d,0x22,0x61,0x6e,0x67,0x72,0x79,0x22,0x3e,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x65,0x64,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,
0x0a,0x09,0x09,0x7b,0x7b,0x20,0x24,0x63,0x62,0x50,0x61,0x74,0x68,0x20,0x3a,0x3d,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,
0x61,0x64,0x6d,0x69,0x6e,0x2f,0x6c,0x69,0x6e,0x6b,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,
0x0a,0x09,0x09,0x7b,0x7b,0x20,0x24,0x63,0x62,0x55,0x52,0x4c,0x20,0x3a,0x3d,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22,
0x25,0x73,0x25,0x73,0x22,0x20,0x2e,0x52,0x65,0x71,0x75,0x65,0x73,0x74,0x52,0x6f,0x6f,0x74,0x20,0x24,0x63,0x62,0x50,0x61,
0x74,0x68,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,
0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x6c,0x61,0x73,0x74,0x2e,
0x66,0x6d,0x2f,0x61,0x70,0x69,0x2f,0x61,0x75,0x74,0x68,0x2f,0x3f,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x3d,0x7b,0x7b,0x20,
0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x26,
0x63,0x62,0x3d,0x7b,0x7b,0x20,0x24,0x63,0x62,0x55,0x52,0x4c,0x20,0x7d,0x7d,0x22,0x3e,0x6c,0x69,0x6e,0x6b,0x3c,0x2f,0x61,
0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,
0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x20,
0x6e,0x6f,0x74,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,
0x67,0x68,0x74,0x22,0x3e,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x20,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x2e,0x20,0x70,0x6c,
0x65,0x61,0x73,0x65,0x20,0x61,0x73,0x6b,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x64,0x6d,0x69,0x6e,0x20,0x74,0x6f,0x20,0x73,
0x65,0x74,0x20,0x69,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,
0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,
0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69,
0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2f,0x2a,0x20,0x61,0x64,0x6d,0x69,0x6e,0x20,
0x70,0x61,0x6e,0x65,0x6c,0x20,0x74,0x6f,0x20,0x6d,0x61,0x6e,0x61,0x67,0x65,0x20,0x61,0x6c,0x6c,0x20,0x75,0x73,0x65,0x72,
0x73,0x20,0x2a,0x2f,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,
0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x63,0x63,
0x6f,0x75,0x6e,0x74,0x2d,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x75,0x73,0x65,0x72,
0x73,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x75,0x73,0x65,0x72,
0x20,0x3a,0x3d,0x20,0x2e,0x41,0x6c,0x6c,0x55,0x73,0x65,0x72,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x3e,0x7b,0x7b,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7d,0x7d,
0x3c,0x2f,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,
0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x20,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x22,0x3e,0x7b,0x7b,
0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,0x61,0x74,0x65,0x20,
0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,
0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,
0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,
0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,
0x68,0x61,0x6e,0x67,0x65,0x5f,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3f,0x75,0x73,0x65,0x72,0x3d,0x25,0x73,0x22,0x20,
0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,0x7d,0x22,0x3e,0x63,0x68,
0x61,0x6e,0x67,0x65,0x20,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,
0x22,0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22,
0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x64,0x65,0x6c,0x65,0x74,0x65,0x5f,0x75,0x73,0x65,0x72,0x3f,0x75,0x73,0x65,0x72,0x3d,
0x25,0x73,0x22,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,0x7d,
0x22,0x3e,0x64,0x65,0x6c,0x65,0x74,0x65,0x3c,0x2f,0x61,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,
0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x72,0x65,
0x61,0x74,0x65,0x5f,0x75,0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x22,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x22,0x3e,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x6e,0x65,0x77,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,
0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2f,0x2a,0x20,0x75,0x73,0x65,0x72,0x20,0x70,0x61,0x6e,0x65,
0x6c,0x20,0x74,0x6f,0x20,0x6d,0x61,0x6e,0x61,0x67,0x65,0x20,0x74,0x68,0x65,0x6d,0x73,0x65,0x6c,0x76,0x65,0x73,0x20,0x2a,
0x2f,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,
0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x63,0x63,0x6f,0x75,0x6e,
0x74,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x63,0x63,0x6f,0x75,0x6e,0x74,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,
0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x68,0x61,0x6e,0x67,0x65,0x5f,0x6f,0x77,0x6e,0x5f,0x70,0x61,0x73,
0x73,0x77,0x6f,0x72,0x64,0x22,0x20,0x7d,0x7d,0x22,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x22,0x3e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,
0x7d,0x7d,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,
0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,
0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2d,
0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x72,0x65,0x63,0x65,0x6e,0x74,0x20,0x66,0x6f,
0x6c,0x64,0x65,0x72,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,
0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,
0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,
0x65,0x71,0x20,0x28,0x6c,0x65,0x6e,0x20,0x2e,0x52,0x65,0x63,0x65,0x6e,0x74,0x46,0x6f,0x6c,0x64,0x65,0x72,0x73,0x29,0x20,
0x30,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,
0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x6e,0x6f,0x20,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x20,
0x79,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,
0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,
0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x20,0x3a,0x3d,0x20,0x2e,0x52,0x65,
0x63,0x65,0x6e,0x74,0x46,0x6f,0x6c,0x64,0x65,0x72,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,
0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x66,
0x6f,0x6c,0x64,0x65,0x72,0x2e,0x52,0x69,0x67,0x68,0x74,0x50,0x61,0x74,0x68,0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6e,
0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,
0x67,0x68,0x74,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2e,0x4d,
0x6f,0x64,0x69,0x66,0x69,0x65,0x64,0x41,0x74,0x20,0x7d,0x7d,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,
0x2e,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,
0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,
0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x7b,0x7b,0x2d,0x20,0x69,0x66,0x20,0x6e,0x6f,0x74,0x20,0x2e,0x49,0x73,0x53,0x63,0x61,0x6e,0x6e,0x69,
0x6e,0x67,0x20,0x2d,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,
0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x72,
0x74,0x5f,0x73,0x63,0x61,0x6e,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x73,0x74,0x61,0x72,0x74,0x20,0x73,0x63,0x61,
0x6e,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2d,0x20,0x69,0x66,
0x20,0x6e,0x6f,0x74,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x2e,0x49,0x73,0x5a,0x65,0x72,
0x6f,0x20,0x2d,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x62,
0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,
0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x20,0x7d,0x7d,0x22,0x3e,0x73,0x63,0x61,0x6e,0x6e,
0x65,0x64,0x20,0x7b,0x7b,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x20,0x7c,0x20,0x64,0x61,
0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,
0x46,0x4d,0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,0x75,0x72,0x72,
0x65,0x6e,0x74,0x20,0x73,0x74,0x61,0x74,0x75,0x73,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x4c,0x61,0x73,0x74,0x46,0x4d,
0x53,0x65,0x73,0x73,0x69,0x6f,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x6c,0x69,0x6e,0x6b,0x65,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,0x23,
0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,
0x64,0x6d,0x69,0x6e,0x2f,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x64,0x6f,0x22,0x20,0x7d,
0x7d,0x22,0x3e,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x3c,0x2f,0x61,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x61,
0x6e,0x67,0x72,0x79,0x22,0x3e,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x65,0x64,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x24,0x63,0x62,0x50,0x61,0x74,0x68,
0x20,0x3a,0x3d,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x6c,0x69,0x6e,0x6b,0x5f,0x6c,0x61,
0x73,0x74,0x66,0x6d,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x24,0x63,0x62,0x55,0x52,0x4c,0x20,0x3a,0x3d,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,
0x22,0x25,0x73,0x25,0x73,0x22,0x20,0x2e,0x52,0x65,0x71,0x75,0x65,0x73,0x74,0x52,0x6f,0x6f,0x74,0x20,0x24,0x63,0x62,0x50,
0x61,0x74,0x68,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x6c,0x61,0x73,0x74,
0x2e,0x66,0x6d,0x2f,0x61,0x70,0x69,0x2f,0x61,0x75,0x74,0x68,0x2f,0x3f,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x3d,0x7b,0x7b,
0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,
0x26,0x63,0x62,0x3d,0x7b,0x7b,0x20,0x24,0x63,0x62,0x55,0x52,0x4c,0x20,0x7d,0x7d,0x22,0x3e,0x6c,0x69,0x6e,0x6b,0x3c,0x2f,
0x61,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,
0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,0x7d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,
0x69,0x67,0x68,0x74,0x22,0x3e,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x20,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x3c,0x2f,0x70,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x6e,0x6f,0x74,0x20,
0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,
0x22,0x3e,0x70,0x6c,0x65,0x61,0x73,0x65,0x20,0x61,0x73,0x6b,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x64,0x6d,0x69,0x6e,0x20,
0x74,0x6f,0x20,0x73,0x65,0x74,0x20,0x69,0x74,0x3c,0x2f,0x70,0x3e,0x0a,0x09,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,
0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,
0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x09,0x20,0x20,0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,
0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x61,
0x70,0x69,0x5f,0x6b,0x65,0x79,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x61,0x70,0x69,0x20,0x6b,
0x65,0x79,0x26,0x23,0x38,0x32,0x33,0x30,0x3b,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,
0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,
0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,
0x73,0x41,0x64,0x6d,0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2f,0x2a,0x20,0x61,
0x64,0x6d,0x69,0x6e,0x20,0x70,0x61,0x6e,0x65,0x6c,0x20,0x74,0x6f,0x20,0x6d,0x61,0x6e,0x61,0x67,0x65,0x20,0x61,0x6c,0x6c,
0x20,0x75,0x73,0x65,0x72,0x73,0x20,0x2a,0x2f,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,
0x69,0x2d,0x61,0x63,0x63,0x6f,0x75,0x6e,0x74,0x2d,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,
0x20,0x75,0x73,0x65,0x72,0x73,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,
0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,
0x24,0x75,0x73,0x65,0x72,0x20,0x3a,0x3d,0x20,0x2e,0x41,0x6c,0x6c,0x55,0x73,0x65,0x72,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x3e,0x7b,0x7b,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,
0x6d,0x65,0x20,0x7d,0x7d,0x3c,0x2f,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,
0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x20,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,
0x6c,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,
0x64,0x61,0x74,0x65,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,
0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22,0x2f,0x61,0x64,
0x6d,0x69,0x6e,0x2f,0x63,0x68,0x61,0x6e,0x67,0x65,0x5f,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3f,0x75,0x73,0x65,0x72,
0x3d,0x25,0x73,0x22,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,
0x7d,0x22,0x3e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x26,0x23,0x38,0x32,0x33,0x30,
0x3b,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,
0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,
0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x24,0x75,
0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,
0x74,0x22,0x3e,0x64,0x65,0x6c,0x65,0x74,0x65,0x26,0x23,0x38,0x32,0x33,0x30,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,0x7d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,
0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x64,0x65,0x6c,0x65,0x74,0x65,
0x5f,0x75,0x73,0x65,0x72,0x3f,0x75,0x73,0x65,0x72,0x3d,0x25,0x73,0x22,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,
0x65,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,0x7d,0x22,0x3e,0x64,0x65,0x6c,0x65,0x74,0x65,0x26,0x23,0x38,0x32,0x33,
0x30,0x3b,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,
0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,
0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x72,0x65,0x61,0x74,0x65,0x5f,0x75,
0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x22,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x3e,
0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x6e,0x65,0x77,0x26,0x23,0x38,0x32,0x33,0x30,0x3b,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,
0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2f,0x2a,0x20,0x75,0x73,0x65,0x72,0x20,0x70,0x61,
0x6e,0x65,0x6c,0x20,0x74,0x6f,0x20,0x6d,0x61,0x6e,0x61,0x67,0x65,0x20,0x74,0x68,0x65,0x6d,0x73,0x65,0x6c,0x76,0x65,0x73,
0x20,0x2a,0x2f,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,
0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x63,0x63,0x6f,
0x75,0x6e,0x74,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x63,0x63,0x6f,0x75,0x6e,0x74,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,
0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,
0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x68,0x61,0x6e,0x67,0x65,0x5f,0x6f,0x77,0x6e,0x5f,0x70,
0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x22,0x20,0x7d,0x7d,0x22,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x22,0x3e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x26,0x23,0x38,0x32,0x33,
0x30,0x3b,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,
0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,
0x69,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2d,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,
0x72,0x65,0x63,0x65,0x6e,0x74,0x20,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6c,0x6f,0x63,0x6b,0x2d,
0x72,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x65,0x71,0x20,0x28,0x6c,0x65,0x6e,0x20,0x2e,0x52,0x65,0x63,0x65,0x6e,0x74,
0x46,0x6f,0x6c,0x64,0x65,0x72,0x73,0x29,0x20,0x30,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x6e,0x6f,
0x20,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x20,0x79,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,
0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x22,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x66,0x6f,0x6c,0x64,
0x65,0x72,0x20,0x3a,0x3d,0x20,0x2e,0x52,0x65,0x63,0x65,0x6e,0x74,0x46,0x6f,0x6c,0x64,0x65,0x72,0x73,0x20,0x7d,0x7d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,
0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2e,0x52,0x69,0x67,0x68,0x74,0x50,0x61,0x74,0x68,
0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,
0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,0x20,
0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2e,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x64,0x41,0x74,0x20,0x7d,0x7d,0x22,0x3e,0x7b,
0x7b,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2e,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,
0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,
0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2d,0x20,0x69,0x66,0x20,0x6e,0x6f,0x74,0x20,
0x2e,0x49,0x73,0x53,0x63,0x61,0x6e,0x6e,0x69,0x6e,0x67,0x20,0x2d,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,
0x2d,0x20,0x69,0x66,0x20,0x6e,0x6f,0x74,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x2e,0x49,
0x73,0x5a,0x65,0x72,0x6f,0x20,0x2d,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,
0x3d,0x22,0x7b,0x7b,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x20,0x7d,0x7d,0x22,0x3e,0x73,
0x63,0x61,0x6e,0x6e,0x65,0x64,0x20,0x7b,0x7b,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x20,
0x7c,0x20,0x64,0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,
0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x72,0x74,0x5f,0x73,0x63,0x61,0x6e,0x5f,0x64,0x6f,
0x22,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,
0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x73,0x74,0x61,
0x72,0x74,0x20,0x73,0x63,0x61,0x6e,0x22,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,
0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,
0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,
0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,
0x69,0x20,0x6d,0x64,0x69,0x2d,0x66,0x69,0x6c,0x65,0x2d,0x6d,0x75,0x73,0x69,0x63,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x74,
0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x69,0x6e,0x67,0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x20,0x70,0x72,0x6f,0x66,0x69,0x6c,
0x65,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,
0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,0x74,
0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x79,0x6f,0x75,0x20,0x63,0x61,0x6e,0x20,0x66,0x69,0x6e,0x64,0x20,0x79,0x6f,0x75,
0x72,0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x27,0x73,0x20,0x63,0x6c,0x69,0x65,0x6e,0x74,0x20,0x6e,0x61,0x6d,0x65,0x20,0x69,
0x6e,0x20,0x74,0x68,0x65,0x20,0x67,0x6f,0x6e,0x69,0x63,0x20,0x6c,0x6f,0x67,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,
0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x73,0x6f,0x6d,0x65,0x20,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x20,0x63,0x6c,0x69,
0x65,0x6e,0x74,0x20,0x6e,0x61,0x6d,0x65,0x73,0x3a,0x20,0x22,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,
0x22,0x65,0x6d,0x70,0x22,0x3e,0x44,0x53,0x75,0x62,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x22,0x2c,0x20,0x22,0x3c,0x73,0x70,
0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x65,0x6d,0x70,0x22,0x3e,0x4a,0x61,0x6d,0x73,0x74,0x61,0x73,0x68,0x3c,
0x2f,0x73,0x70,0x61,0x6e,0x3e,0x22,0x2c,0x20,0x22,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x65,
0x6d,0x70,0x22,0x3e,0x53,0x6f,0x75,0x6e,0x64,0x77,0x61,0x76,0x65,0x73,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x22,0x3c,0x2f,
0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,
0x68,0x74,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x6f,0x72,0x20,0x75,0x73,0x65,0x20,0x22,0x2a,
0x22,0x20,0x61,0x73,0x20,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x20,0x72,0x75,0x6c,0x65,0x20,0x66,0x6f,0x72,0x20,0x61,
0x6e,0x79,0x20,0x63,0x6c,0x69,0x65,0x6e,0x74,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x62,
0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,0x74,
0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x65,0x72,0x65,0x6e,0x63,0x65,0x73,0x22,0x3e,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x70,0x72,0x65,0x66,0x20,0x3a,0x3d,
0x20,0x2e,0x54,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x50,0x72,0x65,0x66,0x65,0x72,0x65,0x6e,0x63,0x65,0x73,0x20,0x7d,
0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,0x69,0x64,0x3d,0x22,0x74,0x72,0x61,
0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x7b,0x7b,0x20,0x24,0x70,0x72,0x65,0x66,0x2e,0x43,0x6c,0x69,
0x65,0x6e,0x74,0x20,0x7d,0x7d,0x22,0x20,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,
0x66,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x64,0x65,0x6c,0x65,0x74,0x65,0x5f,0x74,0x72,0x61,0x6e,0x73,0x63,0x6f,
0x64,0x65,0x5f,0x70,0x72,0x65,0x66,0x5f,0x64,0x6f,0x3f,0x63,0x6c,0x69,0x65,0x6e,0x74,0x3d,0x25,0x73,0x22,0x20,0x24,0x70,
0x72,0x65,0x66,0x2e,0x43,0x6c,0x69,0x65,0x6e,0x74,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,
0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x3e,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x72,0x65,0x66,
0x2e,0x43,0x6c,0x69,0x65,0x6e,0x74,0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x72,0x65,0x66,0x2e,0x50,0x72,0x6f,
0x66,0x69,0x6c,0x65,0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x74,0x72,
0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x7b,0x7b,0x20,0x24,0x70,0x72,0x65,0x66,0x2e,0x43,0x6c,
0x69,0x65,0x6e,0x74,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,
0x61,0x6c,0x75,0x65,0x3d,0x22,0x64,0x65,0x6c,0x65,0x74,0x65,0x22,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,
0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,0x69,0x64,0x3d,0x22,0x74,0x72,0x61,0x6e,0x73,
0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x61,0x64,0x64,0x22,0x20,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,
0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x72,0x65,0x61,0x74,0x65,0x5f,0x74,0x72,
0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x5f,0x70,0x72,0x65,0x66,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,0x74,
0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x3e,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x66,0x6f,0x72,0x6d,0x3d,0x22,
0x74,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x61,0x64,0x64,0x22,0x20,0x74,0x79,0x70,0x65,
0x3d,0x22,0x74,0x65,0x78,0x74,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x63,0x6c,0x69,0x65,0x6e,0x74,0x22,0x20,0x70,0x6c,
0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x3d,0x22,0x63,0x6c,0x69,0x65,0x6e,0x74,0x20,0x6e,0x61,0x6d,0x65,0x22,0x3e,
0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x73,
0x65,0x6c,0x65,0x63,0x74,0x20,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x74,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,
0x65,0x66,0x2d,0x61,0x64,0x64,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x22,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,
0x20,0x24,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x20,0x3a,0x3d,0x20,0x2e,0x54,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x50,
0x72,0x6f,0x66,0x69,0x6c,0x65,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x7b,0x7b,
0x20,0x24,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x20,0x7d,0x7d,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x72,0x6f,0x66,0x69,0x6c,
0x65,0x20,0x7d,0x7d,0x3c,0x2f,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,
0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,
0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6f,0x78,
0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,
0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x6d,0x75,0x73,0x69,
0x63,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,
0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6c,0x6f,
0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x65,0x71,0x20,0x28,0x6c,0x65,0x6e,0x20,0x2e,0x50,0x6c,0x61,
0x79,0x6c,0x69,0x73,0x74,0x73,0x29,0x20,0x30,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x6e,0x6f,0x20,
0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x20,0x79,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x74,0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,
0x74,0x73,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x70,
0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x20,0x3a,0x3d,0x20,0x2e,0x50,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x20,0x7d,0x7d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,
0x67,0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7d,
0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,
0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x28,0x7b,0x7b,0x20,0x24,
0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x54,0x72,0x61,0x63,0x6b,0x43,0x6f,0x75,0x6e,0x74,0x20,0x7d,0x7d,0x20,0x74,
0x72,0x61,0x63,0x6b,0x73,0x29,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6e,0x6f,0x2d,0x73,0x6d,0x61,
0x6c,0x6c,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x20,
0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x43,0x72,0x65,0x61,
0x74,0x65,0x64,0x41,0x74,0x20,0x7d,0x7d,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x43,
0x72,0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,0x7d,0x3c,
0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x66,0x6f,0x72,0x6d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x6c,0x61,
0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x66,0x6f,0x72,0x6d,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x65,0x6e,0x63,0x74,0x79,0x70,0x65,0x3d,0x22,0x6d,0x75,0x6c,0x74,0x69,0x70,0x61,0x72,0x74,0x2f,
0x66,0x6f,0x72,0x6d,0x2d,0x64,0x61,0x74,0x61,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x63,0x74,
0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x70,0x6c,
0x6f,0x61,0x64,0x5f,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x2f,0x73,0x65,0x6c,0x65,0x63,0x74,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x66,0x6f,0x72,0x6d,0x3d,0x22,
0x74,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x61,0x64,0x64,0x22,0x20,0x74,0x79,0x70,0x65,
0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x73,0x61,0x76,0x65,0x22,0x3e,0x3c,
0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,
0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,
0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,
0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,
0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x6d,0x75,
0x73,0x69,0x63,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x0a,0x20,0x20,0x20,0x20,
0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,
0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x65,0x71,0x20,0x28,0x6c,0x65,0x6e,0x20,0x2e,0x50,
0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x29,0x20,0x30,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x6e,
0x6f,0x20,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x20,0x79,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x70,0x6c,0x61,0x79,0x6c,
0x69,0x73,0x74,0x73,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,
0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x20,0x3a,0x3d,0x20,0x2e,0x50,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x20,
0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,
0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x4e,0x61,0x6d,0x65,
0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,
0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x28,0x7b,0x7b,
0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x54,0x72,0x61,0x63,0x6b,0x43,0x6f,0x75,0x6e,0x74,0x20,0x7d,0x7d,
0x20,0x74,0x72,0x61,0x63,0x6b,0x73,0x29,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6e,0x6f,0x2d,0x73,
0x6d,0x61,0x6c,0x6c,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,
0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x43,0x72,
0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7d,0x7d,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,
0x2e,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,
0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,
0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,
0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x66,0x6f,0x72,0x6d,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x65,0x6e,0x63,0x74,0x79,0x70,0x65,0x3d,0x22,0x6d,0x75,0x6c,0x74,0x69,0x70,0x61,0x72,0x74,0x2f,0x66,0x6f,0x72,0x6d,
0x2d,0x64,0x61,0x74,0x61,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x63,0x74,0x69,0x6f,
0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x70,0x6c,0x6f,0x61,
0x64,0x5f,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x6c,0x61,0x62,0x65,
0x6c,0x20,0x66,0x6f,0x72,0x3d,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x69,
0x6e,0x70,0x75,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x61,0x3e,0x75,0x70,0x6c,0x6f,0x61,0x64,0x20,0x6d,0x33,0x75,0x38,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x61,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x6c,0x61,0x62,0x65,0x6c,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x69,0x64,0x3d,0x22,0x70,0x6c,0x61,0x79,
0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,
0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x66,0x69,0x6c,0x65,0x73,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x66,
0x69,0x6c,0x65,0x22,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x20,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,
0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x28,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,
0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x29,0x2e,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,
0x3d,0x20,0x28,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,
0x49,0x64,0x28,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x66,0x6f,0x72,0x6d,
0x22,0x29,0x2e,0x73,0x75,0x62,0x6d,0x69,0x74,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,
0x0a,
0x20,0x20,0x20,0x20,0x20,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x72,0x65,0x6c,0x61,0x74,0x69,0x76,
0x65,0x3b,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,
0x70,0x75,0x74,0x20,0x69,0x64,0x3d,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,
0x69,0x6e,0x70,0x75,0x74,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x20,
0x61,0x62,0x73,0x6f,0x6c,0x75,0x74,0x65,0x3b,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x20,0x30,0x3b,0x22,0x20,0x6e,
0x61,0x6d,0x65,0x3d,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x66,0x69,0x6c,0x65,0x73,0x22,0x20,0x74,0x79,0x70,
0x65,0x3d,0x22,0x66,0x69,0x6c,0x65,0x22,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x20,0x2f,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,
0x3d,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x75,0x70,0x6c,0x6f,0x61,0x64,0x20,
0x6d,0x33,0x75,0x38,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,
0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x28,0x22,
0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x29,0x2e,
0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x3d,0x20,0x28,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,
0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x28,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,
0x6c,0x6f,0x61,0x64,0x2d,0x66,0x6f,0x72,0x6d,0x22,0x29,0x2e,0x73,0x75,0x62,0x6d,0x69,0x74,0x28,0x29,0x3b,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x73,0x63,
0x72,0x69,0x70,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,
0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}},
"pages/delete_user.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0),
@@ -307,7 +390,7 @@ var Bytes = map[string]*EmbeddedAsset{
0x2f,0x64,0x69,0x76,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}},
"pages/update_lastfm_api_key.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0),
ModTime: time.Unix(1583976323, 0),
Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x75,0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x64,0x69,0x76,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,
@@ -316,29 +399,35 @@ var Bytes = map[string]*EmbeddedAsset{
0x64,0x69,0x2d,0x6b,0x65,0x79,0x2d,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x75,0x70,0x64,0x61,
0x74,0x69,0x6e,0x67,0x20,0x6c,0x61,0x73,0x74,0x2e,0x66,0x6d,0x20,0x6b,0x65,0x79,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,
0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,
0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,
0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x6b,0x65,
0x79,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x20,0x3c,0x69,0x3e,0x7b,0x7b,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x22,
0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x22,0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,
0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x3c,0x2f,0x69,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,0x75,
0x72,0x72,0x65,0x6e,0x74,0x20,0x73,0x65,0x63,0x72,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x20,0x3c,0x69,0x3e,0x7b,
0x7b,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x22,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x22,0x20,0x2e,0x43,0x75,0x72,
0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x53,0x65,0x63,0x72,0x65,0x74,0x20,0x7d,0x7d,0x3c,0x2f,
0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,
0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,
0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x5f,0x64,0x6f,
0x22,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x74,0x65,0x78,0x74,0x22,0x20,
0x69,0x64,0x3d,0x22,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x61,0x70,0x69,0x5f,0x6b,
0x65,0x79,0x22,0x20,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x3d,0x22,0x6e,0x65,0x77,0x20,0x6b,0x65,0x79,
0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,
0x74,0x65,0x78,0x74,0x22,0x20,0x69,0x64,0x3d,0x22,0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,
0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x20,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x3d,0x22,0x6e,0x65,0x77,
0x20,0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,
0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x75,0x70,
0x64,0x61,0x74,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,
0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,
0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x28,0x79,0x6f,0x75,0x20,0x63,0x61,0x6e,0x20,0x67,0x65,0x74,0x20,
0x61,0x6e,0x20,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,
0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x6c,0x61,0x73,0x74,0x2e,0x66,0x6d,0x2f,0x61,0x70,0x69,0x2f,0x61,0x63,0x63,0x6f,
0x75,0x6e,0x74,0x2f,0x63,0x72,0x65,0x61,0x74,0x65,0x22,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x22,0x5f,0x62,0x6c,0x61,
0x6e,0x6b,0x22,0x3e,0x68,0x65,0x72,0x65,0x3c,0x2f,0x61,0x3e,0x29,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x3e,0x3c,0x73,0x70,0x61,0x6e,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x6b,
0x65,0x79,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x20,0x3c,0x69,0x3e,0x7b,0x7b,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,
0x22,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x22,0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,
0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x3c,0x2f,0x69,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x70,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,
0x3e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x73,0x65,0x63,0x72,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x20,0x3c,
0x69,0x3e,0x7b,0x7b,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x22,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x22,0x20,0x2e,
0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x53,0x65,0x63,0x72,0x65,0x74,0x20,0x7d,
0x7d,0x3c,0x2f,0x69,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,
0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x61,0x70,0x69,
0x5f,0x6b,0x65,0x79,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,
0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,0x3d,
0x22,0x74,0x65,0x78,0x74,0x22,0x20,0x69,0x64,0x3d,0x22,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x22,0x20,0x6e,0x61,0x6d,0x65,
0x3d,0x22,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x22,0x20,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x3d,0x22,
0x6e,0x65,0x77,0x20,0x6b,0x65,0x79,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,
0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x74,0x65,0x78,0x74,0x22,0x20,0x69,0x64,0x3d,0x22,0x73,0x65,0x63,0x72,0x65,0x74,0x22,
0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x20,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,
0x65,0x72,0x3d,0x22,0x6e,0x65,0x77,0x20,0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,0x61,
0x6c,0x75,0x65,0x3d,0x22,0x75,0x70,0x64,0x61,0x74,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,
0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}},
"pages/change_own_password.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0),
@@ -405,56 +494,55 @@ var Bytes = map[string]*EmbeddedAsset{
0x20,0x7d,0x7d,0x0a,
}},
"static/reset.css": &EmbeddedAsset{
ModTime: time.Unix(1565382588, 0),
ModTime: time.Unix(1583976323, 0),
Bytes: []byte{
0x2f,0x2a,0x20,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6d,0x65,0x79,0x65,0x72,0x77,0x65,0x62,0x2e,0x63,0x6f,0x6d,0x2f,0x65,
0x72,0x69,0x63,0x2f,0x74,0x6f,0x6f,0x6c,0x73,0x2f,0x63,0x73,0x73,0x2f,0x72,0x65,0x73,0x65,0x74,0x2f,0x0a,0x20,0x20,0x20,
0x76,0x32,0x2e,0x30,0x20,0x7c,0x20,0x32,0x30,0x31,0x31,0x30,0x31,0x32,0x36,0x0a,0x20,0x20,0x20,0x4c,0x69,0x63,0x65,0x6e,
0x73,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x20,0x28,0x70,0x75,0x62,0x6c,0x69,0x63,0x20,0x64,0x6f,0x6d,0x61,0x69,0x6e,0x29,
0x0a,0x2a,0x2f,0x0a,0x0a,0x68,0x74,0x6d,0x6c,0x2c,0x20,0x62,0x6f,0x64,0x79,0x2c,0x20,0x64,0x69,0x76,0x2c,0x20,0x73,0x70,
0x61,0x6e,0x2c,0x20,0x61,0x70,0x70,0x6c,0x65,0x74,0x2c,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x2c,0x20,0x69,0x66,0x72,0x61,
0x6d,0x65,0x2c,0x20,0x68,0x31,0x2c,0x20,0x68,0x32,0x2c,0x20,0x68,0x33,0x2c,0x20,0x68,0x34,0x2c,0x20,0x68,0x35,0x2c,0x20,
0x68,0x36,0x2c,0x20,0x70,0x2c,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x2c,0x20,0x70,0x72,0x65,0x2c,0x20,
0x61,0x2c,0x20,0x61,0x62,0x62,0x72,0x2c,0x20,0x61,0x63,0x72,0x6f,0x6e,0x79,0x6d,0x2c,0x20,0x61,0x64,0x64,0x72,0x65,0x73,
0x73,0x2c,0x20,0x62,0x69,0x67,0x2c,0x20,0x63,0x69,0x74,0x65,0x2c,0x20,0x63,0x6f,0x64,0x65,0x2c,0x20,0x64,0x65,0x6c,0x2c,
0x20,0x64,0x66,0x6e,0x2c,0x20,0x65,0x6d,0x2c,0x20,0x69,0x6d,0x67,0x2c,0x20,0x69,0x6e,0x73,0x2c,0x20,0x6b,0x62,0x64,0x2c,
0x20,0x71,0x2c,0x20,0x73,0x2c,0x20,0x73,0x61,0x6d,0x70,0x2c,0x20,0x73,0x6d,0x61,0x6c,0x6c,0x2c,0x20,0x73,0x74,0x72,0x69,
0x6b,0x65,0x2c,0x20,0x73,0x74,0x72,0x6f,0x6e,0x67,0x2c,0x20,0x73,0x75,0x62,0x2c,0x20,0x73,0x75,0x70,0x2c,0x20,0x74,0x74,
0x2c,0x20,0x76,0x61,0x72,0x2c,0x20,0x62,0x2c,0x20,0x75,0x2c,0x20,0x69,0x2c,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x20,
0x64,0x6c,0x2c,0x20,0x64,0x74,0x2c,0x20,0x64,0x64,0x2c,0x20,0x6f,0x6c,0x2c,0x20,0x75,0x6c,0x2c,0x20,0x6c,0x69,0x2c,0x20,
0x66,0x69,0x65,0x6c,0x64,0x73,0x65,0x74,0x2c,0x20,0x66,0x6f,0x72,0x6d,0x2c,0x20,0x6c,0x61,0x62,0x65,0x6c,0x2c,0x20,0x6c,
0x65,0x67,0x65,0x6e,0x64,0x2c,0x20,0x74,0x61,0x62,0x6c,0x65,0x2c,0x20,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x74,
0x62,0x6f,0x64,0x79,0x2c,0x20,0x74,0x66,0x6f,0x6f,0x74,0x2c,0x20,0x74,0x68,0x65,0x61,0x64,0x2c,0x20,0x74,0x72,0x2c,0x20,
0x74,0x68,0x2c,0x20,0x74,0x64,0x2c,0x20,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x2c,0x20,0x61,0x73,0x69,0x64,0x65,0x2c,0x20,
0x63,0x61,0x6e,0x76,0x61,0x73,0x2c,0x20,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x2c,0x20,0x65,0x6d,0x62,0x65,0x64,0x2c,0x20,
0x66,0x69,0x67,0x75,0x72,0x65,0x2c,0x20,0x66,0x69,0x67,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x66,0x6f,0x6f,0x74,
0x65,0x72,0x2c,0x20,0x68,0x65,0x61,0x64,0x65,0x72,0x2c,0x20,0x68,0x67,0x72,0x6f,0x75,0x70,0x2c,0x20,0x6d,0x65,0x6e,0x75,
0x2c,0x20,0x6e,0x61,0x76,0x2c,0x20,0x6f,0x75,0x74,0x70,0x75,0x74,0x2c,0x20,0x72,0x75,0x62,0x79,0x2c,0x20,0x73,0x65,0x63,
0x74,0x69,0x6f,0x6e,0x2c,0x20,0x73,0x75,0x6d,0x6d,0x61,0x72,0x79,0x2c,0x20,0x74,0x69,0x6d,0x65,0x2c,0x20,0x6d,0x61,0x72,
0x6b,0x2c,0x20,0x61,0x75,0x64,0x69,0x6f,0x2c,0x20,0x76,0x69,0x64,0x65,0x6f,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x6d,
0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,
0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x30,0x30,0x25,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,
0x6e,0x74,0x3a,0x20,0x69,0x6e,0x68,0x65,0x72,0x69,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x72,0x74,0x69,0x63,
0x61,0x6c,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x2f,
0x2a,0x20,0x68,0x74,0x6d,0x6c,0x35,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x2d,0x72,0x6f,0x6c,0x65,0x20,0x72,0x65,0x73,
0x65,0x74,0x20,0x66,0x6f,0x72,0x20,0x6f,0x6c,0x64,0x65,0x72,0x20,0x62,0x72,0x6f,0x77,0x73,0x65,0x72,0x73,0x20,0x2a,0x2f,
0x0a,0x20,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x2c,0x20,0x61,0x73,0x69,0x64,0x65,0x2c,0x20,0x64,0x65,0x74,0x61,0x69,0x6c,
0x73,0x2c,0x20,0x66,0x69,0x67,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x66,0x69,0x67,0x75,0x72,0x65,0x2c,0x20,0x66,
0x6f,0x6f,0x74,0x65,0x72,0x2c,0x20,0x68,0x65,0x61,0x64,0x65,0x72,0x2c,0x20,0x68,0x67,0x72,0x6f,0x75,0x70,0x2c,0x20,0x6d,
0x65,0x6e,0x75,0x2c,0x20,0x6e,0x61,0x76,0x2c,0x20,0x73,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,
0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6f,0x64,0x79,
0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x6e,0x65,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x31,0x3b,0x0a,
0x7d,0x0a,0x0a,0x6f,0x6c,0x2c,0x20,0x75,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x73,0x74,0x2d,0x73,0x74,
0x79,0x6c,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,
0x2c,0x20,0x71,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x71,0x75,0x6f,0x74,0x65,0x73,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,
0x0a,0x7d,0x0a,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x3a,0x62,0x65,0x66,0x6f,0x72,0x65,0x2c,0x20,0x62,
0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x3a,0x61,0x66,0x74,0x65,0x72,0x2c,0x20,0x71,0x3a,0x62,0x65,0x66,0x6f,0x72,
0x65,0x2c,0x20,0x71,0x3a,0x61,0x66,0x74,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,
0x74,0x3a,0x20,0x27,0x27,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x6e,0x6f,0x6e,
0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,
0x72,0x2d,0x63,0x6f,0x6c,0x6c,0x61,0x70,0x73,0x65,0x3a,0x20,0x63,0x6f,0x6c,0x6c,0x61,0x70,0x73,0x65,0x3b,0x0a,0x20,0x20,
0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x3a,0x20,0x30,0x3b,0x0a,0x7d,0x0a,
0x0a,0x2a,0x2f,0x0a,0x0a,0x68,0x74,0x6d,0x6c,0x2c,0x0a,0x62,0x6f,0x64,0x79,0x2c,0x0a,0x64,0x69,0x76,0x2c,0x0a,0x73,0x70,
0x61,0x6e,0x2c,0x0a,0x61,0x70,0x70,0x6c,0x65,0x74,0x2c,0x0a,0x6f,0x62,0x6a,0x65,0x63,0x74,0x2c,0x0a,0x69,0x66,0x72,0x61,
0x6d,0x65,0x2c,0x0a,0x68,0x31,0x2c,0x0a,0x68,0x32,0x2c,0x0a,0x68,0x33,0x2c,0x0a,0x68,0x34,0x2c,0x0a,0x68,0x35,0x2c,0x0a,
0x68,0x36,0x2c,0x0a,0x70,0x2c,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x2c,0x0a,0x70,0x72,0x65,0x2c,0x0a,
0x61,0x2c,0x0a,0x61,0x62,0x62,0x72,0x2c,0x0a,0x61,0x63,0x72,0x6f,0x6e,0x79,0x6d,0x2c,0x0a,0x61,0x64,0x64,0x72,0x65,0x73,
0x73,0x2c,0x0a,0x62,0x69,0x67,0x2c,0x0a,0x63,0x69,0x74,0x65,0x2c,0x0a,0x63,0x6f,0x64,0x65,0x2c,0x0a,0x64,0x65,0x6c,0x2c,
0x0a,0x64,0x66,0x6e,0x2c,0x0a,0x65,0x6d,0x2c,0x0a,0x69,0x6d,0x67,0x2c,0x0a,0x69,0x6e,0x73,0x2c,0x0a,0x6b,0x62,0x64,0x2c,
0x0a,0x71,0x2c,0x0a,0x73,0x2c,0x0a,0x73,0x61,0x6d,0x70,0x2c,0x0a,0x73,0x6d,0x61,0x6c,0x6c,0x2c,0x0a,0x73,0x74,0x72,0x69,
0x6b,0x65,0x2c,0x0a,0x73,0x74,0x72,0x6f,0x6e,0x67,0x2c,0x0a,0x73,0x75,0x62,0x2c,0x0a,0x73,0x75,0x70,0x2c,0x0a,0x74,0x74,
0x2c,0x0a,0x76,0x61,0x72,0x2c,0x0a,0x62,0x2c,0x0a,0x75,0x2c,0x0a,0x69,0x2c,0x0a,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x0a,
0x64,0x6c,0x2c,0x0a,0x64,0x74,0x2c,0x0a,0x64,0x64,0x2c,0x0a,0x6f,0x6c,0x2c,0x0a,0x75,0x6c,0x2c,0x0a,0x6c,0x69,0x2c,0x0a,
0x66,0x69,0x65,0x6c,0x64,0x73,0x65,0x74,0x2c,0x0a,0x66,0x6f,0x72,0x6d,0x2c,0x0a,0x6c,0x61,0x62,0x65,0x6c,0x2c,0x0a,0x6c,
0x65,0x67,0x65,0x6e,0x64,0x2c,0x0a,0x74,0x61,0x62,0x6c,0x65,0x2c,0x0a,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x0a,0x74,
0x62,0x6f,0x64,0x79,0x2c,0x0a,0x74,0x66,0x6f,0x6f,0x74,0x2c,0x0a,0x74,0x68,0x65,0x61,0x64,0x2c,0x0a,0x74,0x72,0x2c,0x0a,
0x74,0x68,0x2c,0x0a,0x74,0x64,0x2c,0x0a,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x2c,0x0a,0x61,0x73,0x69,0x64,0x65,0x2c,0x0a,
0x63,0x61,0x6e,0x76,0x61,0x73,0x2c,0x0a,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x2c,0x0a,0x65,0x6d,0x62,0x65,0x64,0x2c,0x0a,
0x66,0x69,0x67,0x75,0x72,0x65,0x2c,0x0a,0x66,0x69,0x67,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x0a,0x66,0x6f,0x6f,0x74,
0x65,0x72,0x2c,0x0a,0x68,0x65,0x61,0x64,0x65,0x72,0x2c,0x0a,0x68,0x67,0x72,0x6f,0x75,0x70,0x2c,0x0a,0x6d,0x65,0x6e,0x75,
0x2c,0x0a,0x6e,0x61,0x76,0x2c,0x0a,0x6f,0x75,0x74,0x70,0x75,0x74,0x2c,0x0a,0x72,0x75,0x62,0x79,0x2c,0x0a,0x73,0x65,0x63,
0x74,0x69,0x6f,0x6e,0x2c,0x0a,0x73,0x75,0x6d,0x6d,0x61,0x72,0x79,0x2c,0x0a,0x74,0x69,0x6d,0x65,0x2c,0x0a,0x6d,0x61,0x72,
0x6b,0x2c,0x0a,0x61,0x75,0x64,0x69,0x6f,0x2c,0x0a,0x76,0x69,0x64,0x65,0x6f,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,
0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x62,
0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,
0x30,0x30,0x25,0x3b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x3a,0x20,0x69,0x6e,0x68,0x65,0x72,0x69,0x74,0x3b,0x0a,0x20,0x20,
0x76,0x65,0x72,0x74,0x69,0x63,0x61,0x6c,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,
0x3b,0x0a,0x7d,0x0a,0x0a,0x2f,0x2a,0x20,0x68,0x74,0x6d,0x6c,0x35,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x2d,0x72,0x6f,
0x6c,0x65,0x20,0x72,0x65,0x73,0x65,0x74,0x20,0x66,0x6f,0x72,0x20,0x6f,0x6c,0x64,0x65,0x72,0x20,0x62,0x72,0x6f,0x77,0x73,
0x65,0x72,0x73,0x20,0x2a,0x2f,0x0a,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x2c,0x0a,0x61,0x73,0x69,0x64,0x65,0x2c,0x0a,0x64,
0x65,0x74,0x61,0x69,0x6c,0x73,0x2c,0x0a,0x66,0x69,0x67,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x0a,0x66,0x69,0x67,0x75,
0x72,0x65,0x2c,0x0a,0x66,0x6f,0x6f,0x74,0x65,0x72,0x2c,0x0a,0x68,0x65,0x61,0x64,0x65,0x72,0x2c,0x0a,0x68,0x67,0x72,0x6f,
0x75,0x70,0x2c,0x0a,0x6d,0x65,0x6e,0x75,0x2c,0x0a,0x6e,0x61,0x76,0x2c,0x0a,0x73,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7b,
0x0a,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6f,
0x64,0x79,0x20,0x7b,0x0a,0x20,0x20,0x6c,0x69,0x6e,0x65,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x31,0x3b,0x0a,0x7d,
0x0a,0x0a,0x6f,0x6c,0x2c,0x0a,0x75,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x6c,0x69,0x73,0x74,0x2d,0x73,0x74,0x79,0x6c,0x65,0x3a,
0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x2c,0x0a,0x71,0x20,
0x7b,0x0a,0x20,0x20,0x71,0x75,0x6f,0x74,0x65,0x73,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6c,0x6f,
0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x3a,0x62,0x65,0x66,0x6f,0x72,0x65,0x2c,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,
0x74,0x65,0x3a,0x61,0x66,0x74,0x65,0x72,0x2c,0x0a,0x71,0x3a,0x62,0x65,0x66,0x6f,0x72,0x65,0x2c,0x0a,0x71,0x3a,0x61,0x66,
0x74,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x22,0x3b,0x0a,0x20,0x20,0x63,
0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x7b,
0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x63,0x6f,0x6c,0x6c,0x61,0x70,0x73,0x65,0x3a,0x20,0x63,0x6f,0x6c,0x6c,
0x61,0x70,0x73,0x65,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x3a,0x20,
0x30,0x3b,0x0a,0x7d,0x0a,
}},
"static/favicon.ico": &EmbeddedAsset{
ModTime: time.Unix(1565382588, 0),
@@ -10715,105 +10803,94 @@ var Bytes = map[string]*EmbeddedAsset{
0x55,0x23,0xfe,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
}},
"static/main.css": &EmbeddedAsset{
ModTime: time.Unix(1582113240, 0),
ModTime: time.Unix(1583976324, 0),
Bytes: []byte{
0x3a,0x72,0x6f,0x6f,0x74,0x20,0x7b,0x0a,0x20,0x20,0x2d,0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x2e,
0x37,0x35,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2a,0x2c,0x20,0x73,0x70,0x61,0x6e,0x2c,0x20,0x64,0x69,0x76,0x2c,0x20,
0x2e,0x6d,0x64,0x69,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,
0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,
0x3a,0x20,0x30,0x2e,0x38,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,
0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x37,0x38,0x30,0x70,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,
0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,
0x67,0x3a,0x20,0x30,0x20,0x76,0x61,0x72,0x28,0x2d,0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x29,0x3b,0x0a,0x20,0x20,
0x20,0x20,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x2d,0x79,0x3a,0x20,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x3b,0x0a,0x20,0x20,
0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x34,0x70,0x78,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,
0x62,0x6c,0x65,0x20,0x74,0x64,0x3a,0x6e,0x6f,0x74,0x28,0x3a,0x6c,0x61,0x73,0x74,0x2d,0x63,0x68,0x69,0x6c,0x64,0x29,0x3a,
0x3a,0x61,0x66,0x74,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x20,
0x22,0x3b,0x0a,0x20,0x20,0x20,0x20,0x77,0x68,0x69,0x74,0x65,0x2d,0x73,0x70,0x61,0x63,0x65,0x3a,0x20,0x70,0x72,0x65,0x3b,
0x0a,0x7d,0x0a,0x0a,0x40,0x6d,0x65,0x64,0x69,0x61,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x73,0x63,0x72,0x65,0x65,0x6e,0x20,0x61,
0x6e,0x64,0x20,0x28,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x37,0x38,0x30,0x70,0x78,0x29,0x20,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x74,0x61,0x62,0x6c,0x65,0x23,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,
0x20,0x74,0x64,0x3a,0x66,0x69,0x72,0x73,0x74,0x2d,0x63,0x68,0x69,0x6c,0x64,0x3a,0x3a,0x61,0x66,0x74,0x65,0x72,0x20,0x7b,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x22,0x3b,0x0a,0x20,0x20,
0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x2e,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,
0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,
0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x32,0x70,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,
0x72,0x6d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x66,0x69,0x6c,0x65,0x5d,0x20,0x7b,0x0a,0x20,0x20,
0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d,
0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x5d,0x2c,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x73,0x65,0x6c,0x65,0x63,
0x74,0x2c,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,
0x61,0x72,0x67,0x69,0x6e,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d,
0x20,0x69,0x6e,0x70,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x33,0x70,
0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x31,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,
0x20,0x23,0x63,0x63,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x78,0x2d,0x73,0x69,0x7a,0x69,0x6e,0x67,0x3a,0x20,0x62,
0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x78,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x69,0x6e,0x70,0x75,0x74,
0x5b,0x74,0x79,0x70,0x65,0x3d,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x5d,0x2c,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x69,0x6e,
0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x74,0x65,0x78,0x74,0x5d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,
0x67,0x69,0x6e,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x30,0x2e,0x32,0x35,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,
0x66,0x6f,0x72,0x6d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x73,0x75,0x62,0x6d,0x69,0x74,0x5d,0x20,
0x7b,0x0a,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x38,0x72,0x65,0x6d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,
0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,
0x66,0x6f,0x72,0x6d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x34,0x30,
0x30,0x70,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,0x75,
0x74,0x6f,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x30,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x66,0x6c,0x65,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x66,0x6c,0x65,0x78,0x2d,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x61,0x6c,0x69,0x67,0x6e,0x2d,0x69,0x74,0x65,0x6d,0x73,0x3a,0x20,0x66,0x6c,0x65,0x78,0x2d,0x65,0x6e,
0x64,0x3b,0x0a,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x72,0x69,0x67,0x68,0x74,
0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x3e,0x20,0x2a,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,
0x68,0x3a,0x20,0x31,0x30,0x30,0x25,0x3b,0x0a,0x7d,0x0a,0x0a,0x64,0x69,0x76,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,
0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x3b,
0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x64,0x2c,0x20,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x68,0x20,
0x7b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x7b,0x0a,0x20,0x20,
0x20,0x20,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x3a,0x20,0x68,0x69,0x64,0x64,0x65,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x77,0x68,0x69,0x74,0x65,0x2d,0x73,0x70,0x61,0x63,0x65,0x3a,0x20,0x6e,0x6f,0x77,0x72,0x61,0x70,0x3b,0x0a,0x7d,0x0a,0x0a,
0x61,0x2c,0x0a,0x61,0x3a,0x76,0x69,0x73,0x69,0x74,0x65,0x64,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,
0x3a,0x20,0x23,0x30,0x30,0x36,0x34,0x63,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,0x63,0x6f,
0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x61,0x3a,0x68,0x6f,0x76,0x65,0x72,
0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,0x63,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x20,
0x75,0x6e,0x64,0x65,0x72,0x6c,0x69,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x23,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x20,0x3e,
0x20,0x2a,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x76,0x61,0x72,0x28,0x2d,0x2d,0x70,
0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x29,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x23,0x68,0x65,0x61,0x64,0x65,0x72,0x20,0x7b,
0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,
0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x61,0x3b,0x0a,0x7d,0x0a,0x0a,0x23,0x68,0x65,0x61,
0x64,0x65,0x72,0x20,0x69,0x6d,0x67,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x36,0x30,0x25,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x3b,0x0a,0x20,0x20,
0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x65,
0x69,0x67,0x68,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x66,0x6c,0x61,0x73,0x68,0x2d,0x77,0x61,
0x72,0x6e,0x69,0x6e,0x67,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,
0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,
0x64,0x65,0x72,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x66,0x64,
0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,
0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,
0x7d,0x0a,0x0a,0x2e,0x66,0x6c,0x61,0x73,0x68,0x2d,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x62,
0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x31,0x35,0x66,0x66,0x35,0x34,
0x32,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,0x70,
0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x31,0x35,0x66,0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,
0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,
0x23,0x31,0x35,0x66,0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x62,0x6f,0x78,0x20,0x7b,0x0a,0x20,0x20,0x20,
0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x30,0x30,0x30,0x30,
0x30,0x30,0x30,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,
0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x63,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,
0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x63,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,
0x67,0x68,0x74,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x72,0x69,
0x67,0x68,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x3e,0x20,0x2a,
0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,
0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,
0x72,0x67,0x69,0x6e,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x30,0x2e,0x35,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,
0x2e,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x31,
0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x7b,0x0a,0x20,
0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x20,0x31,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,
0x61,0x6e,0x67,0x72,0x79,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,
0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x34,0x34,0x33,0x33,0x36,0x36,0x39,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x6c,0x69,0x67,
0x68,0x74,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x38,
0x32,0x3b,0x0a,0x7d,0x0a,
0x37,0x35,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2a,0x2c,0x0a,0x73,0x70,0x61,0x6e,0x2c,0x0a,0x64,0x69,0x76,0x2c,0x0a,
0x2e,0x6d,0x64,0x69,0x20,0x7b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x6d,0x6f,
0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x30,0x2e,
0x38,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x78,0x2d,0x77,0x69,
0x64,0x74,0x68,0x3a,0x20,0x37,0x38,0x30,0x70,0x78,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x20,
0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x20,0x76,0x61,0x72,0x28,0x2d,
0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x29,0x3b,0x0a,0x20,0x20,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x2d,0x79,
0x3a,0x20,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x3b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,
0x34,0x70,0x78,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x64,0x3a,0x6e,0x6f,0x74,0x28,0x3a,0x6c,0x61,
0x73,0x74,0x2d,0x63,0x68,0x69,0x6c,0x64,0x29,0x3a,0x3a,0x61,0x66,0x74,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x63,0x6f,0x6e,
0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x20,0x22,0x3b,0x0a,0x20,0x20,0x77,0x68,0x69,0x74,0x65,0x2d,0x73,0x70,0x61,0x63,0x65,
0x3a,0x20,0x70,0x72,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x40,0x6d,0x65,0x64,0x69,0x61,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x73,0x63,
0x72,0x65,0x65,0x6e,0x20,0x61,0x6e,0x64,0x20,0x28,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x37,0x38,0x30,
0x70,0x78,0x29,0x20,0x7b,0x0a,0x20,0x20,0x74,0x61,0x62,0x6c,0x65,0x23,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x66,0x6f,0x6c,
0x64,0x65,0x72,0x73,0x20,0x74,0x64,0x3a,0x66,0x69,0x72,0x73,0x74,0x2d,0x63,0x68,0x69,0x6c,0x64,0x3a,0x3a,0x61,0x66,0x74,
0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x22,0x3b,0x0a,0x20,0x20,
0x7d,0x0a,0x20,0x20,0x2e,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x70,
0x6c,0x61,0x79,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x20,0x20,0x7d,0x0a,0x20,0x20,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x32,0x70,0x78,0x3b,0x0a,0x20,0x20,0x7d,
0x0a,0x7d,0x0a,0x0a,0x69,0x6e,0x70,0x75,0x74,0x2c,0x0a,0x73,0x65,0x6c,0x65,0x63,0x74,0x2c,0x0a,0x74,0x65,0x78,0x74,0x61,
0x72,0x65,0x61,0x20,0x7b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x61,0x64,0x69,0x75,0x73,0x3a,0x20,0x30,
0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x31,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x63,
0x63,0x63,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x78,0x2d,0x73,0x69,0x7a,0x69,0x6e,0x67,0x3a,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,
0x2d,0x62,0x6f,0x78,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x31,0x70,0x78,0x20,0x30,0x3b,0x0a,0x20,
0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,
0x30,0x70,0x78,0x3b,0x0a,0x7d,0x0a,0x0a,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,
0x69,0x74,0x22,0x5d,0x2c,0x0a,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x22,0x5d,0x20,0x7b,0x0a,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x38,0x72,0x65,0x6d,0x3b,0x0a,0x20,0x20,0x62,0x61,
0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x0a,0x20,
0x20,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,
0x6d,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x34,0x30,0x30,0x70,0x78,0x3b,0x0a,
0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x6d,
0x61,0x72,0x67,0x69,0x6e,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,
0x79,0x3a,0x20,0x66,0x6c,0x65,0x78,0x3b,0x0a,0x20,0x20,0x66,0x6c,0x65,0x78,0x2d,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,
0x6e,0x3a,0x20,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x3b,0x0a,0x20,0x20,0x61,0x6c,0x69,0x67,0x6e,0x2d,0x69,0x74,0x65,0x6d,0x73,
0x3a,0x20,0x66,0x6c,0x65,0x78,0x2d,0x65,0x6e,0x64,0x3b,0x0a,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,
0x3a,0x20,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x3e,0x20,0x2a,0x20,0x7b,0x0a,0x20,
0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x31,0x30,0x30,0x25,0x3b,0x0a,0x7d,0x0a,0x0a,0x64,0x69,0x76,0x20,0x7b,0x0a,0x20,
0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,
0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x64,0x2c,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x68,0x20,
0x7b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,
0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x7b,0x0a,0x20,0x20,0x6f,0x76,0x65,0x72,
0x66,0x6c,0x6f,0x77,0x3a,0x20,0x68,0x69,0x64,0x64,0x65,0x6e,0x3b,0x0a,0x20,0x20,0x77,0x68,0x69,0x74,0x65,0x2d,0x73,0x70,
0x61,0x63,0x65,0x3a,0x20,0x6e,0x6f,0x77,0x72,0x61,0x70,0x3b,0x0a,0x7d,0x0a,0x0a,0x61,0x2c,0x0a,0x61,0x3a,0x76,0x69,0x73,
0x69,0x74,0x65,0x64,0x20,0x7b,0x0a,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x30,0x30,0x36,0x34,0x63,0x31,0x3b,
0x0a,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,0x63,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x6e,0x6f,0x6e,0x65,
0x3b,0x0a,0x7d,0x0a,0x0a,0x61,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,
0x63,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x75,0x6e,0x64,0x65,0x72,0x6c,0x69,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,
0x23,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x20,0x3e,0x20,0x2a,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,
0x20,0x76,0x61,0x72,0x28,0x2d,0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x29,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x23,
0x68,0x65,0x61,0x64,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,
0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x61,0x3b,0x0a,0x7d,
0x0a,0x0a,0x23,0x68,0x65,0x61,0x64,0x65,0x72,0x20,0x69,0x6d,0x67,0x20,0x7b,0x0a,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,
0x20,0x36,0x30,0x25,0x3b,0x0a,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x3b,0x0a,
0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x68,0x65,0x69,0x67,
0x68,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x66,0x6c,0x61,0x73,0x68,0x2d,0x77,0x61,0x72,0x6e,
0x69,0x6e,0x67,0x20,0x7b,0x0a,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,
0x3a,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x69,
0x67,0x68,0x74,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,
0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,
0x6f,0x6c,0x69,0x64,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x66,0x6c,0x61,0x73,
0x68,0x2d,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,
0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x31,0x35,0x66,0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,
0x65,0x72,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x31,0x35,0x66,
0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,
0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x31,0x35,0x66,0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x7d,0x0a,0x0a,
0x2e,0x62,0x6f,0x78,0x20,0x7b,0x0a,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,
0x72,0x3a,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x35,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,
0x69,0x67,0x68,0x74,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x63,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,
0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x63,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x74,0x65,0x78,
0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x7b,0x0a,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,
0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x3e,
0x20,0x2a,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,
0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x7b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,
0x3a,0x20,0x31,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20,
0x7b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x20,0x31,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,
0x2e,0x61,0x6e,0x67,0x72,0x79,0x20,0x7b,0x0a,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,
0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x34,0x34,0x33,0x33,0x36,0x36,0x39,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x6c,0x69,0x67,0x68,
0x74,0x20,0x7b,0x0a,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x32,0x3b,0x0a,
0x7d,0x0a,0x0a,0x2e,0x65,0x6d,0x70,0x20,0x7b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x74,0x79,0x6c,0x65,0x3a,0x20,
0x69,0x74,0x61,0x6c,0x69,0x63,0x3b,0x0a,0x7d,0x0a,
}},
"partials/head.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0),
ModTime: time.Unix(1583976324, 0),
Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x68,0x65,0x61,0x64,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x6c,0x69,0x6e,
0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x74,0x79,0x6c,0x65,0x73,0x68,0x65,0x65,0x74,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,
@@ -10825,22 +10902,22 @@ var Bytes = map[string]*EmbeddedAsset{
0x72,0x69,0x61,0x6c,0x64,0x65,0x73,0x69,0x67,0x6e,0x69,0x63,0x6f,0x6e,0x73,0x2e,0x6d,0x69,0x6e,0x2e,0x63,0x73,0x73,0x22,
0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x74,0x79,0x6c,0x65,0x73,0x68,0x65,0x65,0x74,0x22,
0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,
0x74,0x61,0x74,0x69,0x63,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x73,0x73,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x3c,0x6c,0x69,
0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x68,0x6f,0x72,0x74,0x63,0x75,0x74,0x20,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,
0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,
0x74,0x69,0x63,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,
0x65,0x3d,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x22,0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,
0x72,0x65,0x6c,0x3d,0x22,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,
0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,
0x69,0x63,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,
0x63,0x6f,0x6e,0x22,0x3e,0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,
0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,
0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,
0x2c,0x20,0x75,0x73,0x65,0x72,0x2d,0x73,0x63,0x61,0x6c,0x61,0x62,0x6c,0x65,0x3d,0x6e,0x6f,0x22,0x3e,0x0a,0x7b,0x7b,0x20,
0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
0x74,0x61,0x74,0x69,0x63,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x73,0x73,0x22,0x20,0x7c,0x20,0x6e,0x6f,0x43,0x61,0x63,0x68,
0x65,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x68,0x6f,0x72,0x74,0x63,
0x75,0x74,0x20,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,
0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,
0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,
0x6e,0x22,0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,0x72,0x65,
0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,
0x63,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,
0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x22,0x3e,0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,
0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,
0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,
0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x2c,0x20,0x75,0x73,0x65,0x72,0x2d,0x73,0x63,0x61,0x6c,0x61,0x62,0x6c,
0x65,0x3d,0x6e,0x6f,0x22,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}},
"layouts/base.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582432328, 0),
ModTime: time.Unix(1583976323, 0),
Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x6c,0x61,0x79,0x6f,0x75,0x74,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x21,
0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x20,0x20,0x20,
@@ -10852,36 +10929,39 @@ var Bytes = map[string]*EmbeddedAsset{
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x69,0x64,0x3d,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,
0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x69,0x64,0x3d,
0x22,0x68,0x65,0x61,0x64,0x65,0x72,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,
0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x67,0x6f,0x6e,0x69,0x63,0x2e,0x70,0x6e,0x67,0x22,0x20,0x7d,0x7d,
0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x66,0x6c,0x61,0x73,
0x68,0x20,0x3a,0x3d,0x20,0x2e,0x46,0x6c,0x61,0x73,0x68,0x65,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,
0x66,0x6c,0x61,0x73,0x68,0x2d,0x7b,0x7b,0x20,0x24,0x66,0x6c,0x61,0x73,0x68,0x2e,0x54,0x79,0x70,0x65,0x20,0x7d,0x7d,0x22,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,
0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x6c,0x65,0x72,0x74,0x2d,0x63,0x69,0x72,0x63,0x6c,0x65,
0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x7b,0x7b,0x20,0x24,0x66,0x6c,0x61,0x73,0x68,0x2e,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,
0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,0x20,0x22,0x63,0x6f,
0x6e,0x74,0x65,0x6e,0x74,0x22,0x20,0x2e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20,
0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,
0x3e,0x7b,0x7b,0x20,0x2e,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x65,0x6e,0x61,0x6e,0x20,0x6b,0x65,0x6c,
0x6c,0x79,0x2c,0x20,0x32,0x30,0x32,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,0x23,0x31,
0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x73,0x65,0x6e,0x61,
0x6e,0x2e,0x78,0x79,0x7a,0x2f,0x67,0x2f,0x67,0x6f,0x6e,0x69,0x63,0x22,0x3e,0x67,0x69,0x74,0x68,0x75,0x62,0x3c,0x2f,0x61,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0a,
0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,
0x69,0x6e,0x2f,0x68,0x6f,0x6d,0x65,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x7b,0x7b,0x20,0x70,
0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x67,0x6f,0x6e,0x69,0x63,
0x2e,0x70,0x6e,0x67,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,
0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,
0x24,0x66,0x6c,0x61,0x73,0x68,0x20,0x3a,0x3d,0x20,0x2e,0x46,0x6c,0x61,0x73,0x68,0x65,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,
0x64,0x64,0x65,0x64,0x20,0x66,0x6c,0x61,0x73,0x68,0x2d,0x7b,0x7b,0x20,0x24,0x66,0x6c,0x61,0x73,0x68,0x2e,0x54,0x79,0x70,
0x65,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x6c,0x65,0x72,0x74,0x2d,0x63,
0x69,0x72,0x63,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x7b,0x7b,0x20,0x24,0x66,0x6c,0x61,0x73,0x68,0x2e,0x4d,0x65,
0x73,0x73,0x61,0x67,0x65,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,
0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,
0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,
0x65,0x20,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x20,0x2e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,
0x64,0x64,0x65,0x64,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,
0x69,0x67,0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x2e,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,
0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x65,0x6e,0x61,
0x6e,0x20,0x6b,0x65,0x6c,0x6c,0x79,0x2c,0x20,0x32,0x30,0x32,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,
0x22,0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,
0x2f,0x73,0x65,0x6e,0x61,0x6e,0x2e,0x78,0x79,0x7a,0x2f,0x67,0x2f,0x67,0x6f,0x6e,0x69,0x63,0x22,0x3e,0x67,0x69,0x74,0x68,
0x75,0x62,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x62,
0x6f,0x64,0x79,0x3e,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}},
"layouts/user.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0),
ModTime: time.Unix(1583945627, 0),
Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x20,0x7d,0x7d,0x0a,0x3c,
0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x6c,

View File

@@ -9,7 +9,9 @@
<body>
<div id="content">
<div id="header">
<img src="{{ path "/admin/static/gonic.png" }}">
<a href="{{ path "/admin/home" }}">
<img src="{{ path "/admin/static/gonic.png" }}">
</a>
</div>
{{ range $flash := .Flashes }}
<div class="padded flash-{{ $flash.Type }}">

View File

@@ -22,10 +22,6 @@
<i class="mdi mdi-lastfm"></i> last.fm
</div>
<div class="text-right">
{{ if .User.IsAdmin }}
<p class="light">you can get an api key <a href="https://www.last.fm/api/account/create" target="_blank">here</a></p>
<a href="{{ path "/admin/update_lastfm_api_key" }}">update api key</a><br/>
{{ end }}
{{ if .CurrentLastFMAPIKey }}
<span class="light">current status</span>
{{ if .User.LastFMSession }}
@@ -34,12 +30,19 @@
<a href="{{ path "/admin/unlink_lastfm_do" }}">unlink</a><br/>
{{ else }}
<span class="angry">unlinked</span>
{{ $cbPath := path "/admin/link_lastfm_do" }}
{{ $cbURL := printf "%s%s" .RequestRoot $cbPath }}
{{ $cbPath := path "/admin/link_lastfm_do" }}
{{ $cbURL := printf "%s%s" .RequestRoot $cbPath }}
<a href="https://www.last.fm/api/auth/?api_key={{ .CurrentLastFMAPIKey }}&cb={{ $cbURL }}">link</a><br/>
{{ end }}
{{ else if not .User.IsAdmin }}
<span class="light">api key not set. please ask your admin to set it</span>
{{ else }}
<p class="light">api key not set</p>
{{ if not .User.IsAdmin }}
<p class="light">please ask your admin to set it</p>
{{ end }}
{{ end }}
{{ if .User.IsAdmin }}
<br/>
<p><a href="{{ path "/admin/update_lastfm_api_key" }}">update api key&#8230;</a></p>
{{ end }}
</div>
</div>
@@ -54,11 +57,17 @@
<i>{{ $user.Name }}</i>
<span class="light no-small">{{ $user.CreatedAt | date }}</span>
<span class="light">&#124;</span>
<a href="{{ printf "/admin/change_password?user=%s" $user.Name | path }}">change password</a>
<a href="{{ printf "/admin/change_password?user=%s" $user.Name | path }}">change password&#8230;</a>
<span class="light">&#124;</span>
<a href="{{ printf "/admin/delete_user?user=%s" $user.Name | path }}">delete</a><br/>
{{ if $user.IsAdmin }}
<span class="light">delete&#8230;</span>
{{ else }}
<a href="{{ printf "/admin/delete_user?user=%s" $user.Name | path }}">delete&#8230;</a>
{{ end }}
<br/>
{{ end }}
<a href="{{ path "/admin/create_user" }}" class="button">create new</a>
<br/>
<a href="{{ path "/admin/create_user" }}" class="button">create new&#8230;</a>
</div>
{{ else }}
{{/* user panel to manage themselves */}}
@@ -66,7 +75,7 @@
<i class="mdi mdi-account"></i> your account
</div>
<div class="text-right">
<a href="{{ path "/admin/change_own_password" }}" class="button">change password</a>
<a href="{{ path "/admin/change_own_password" }}" class="button">change password&#8230;</a>
</div>
{{ end }}
</div>
@@ -87,14 +96,47 @@
{{ end }}
</table>
{{- if not .IsScanning -}}
<a href="{{ path "/admin/start_scan_do" }}">start scan</a>
<br/>
{{- if not .LastScanTime.IsZero -}}
<br>
<span class="light" title="{{ .LastScanTime }}">scanned {{ .LastScanTime | dateHuman }}</span>
<p class="light" title="{{ .LastScanTime }}">scanned {{ .LastScanTime | dateHuman }}</p>
{{ end }}
<form action="{{ path "/admin/start_scan_do" }}" method="post">
<td><input type="submit" value="start scan"></td>
</form>
{{ end }}
</div>
</div>
<div class="padded box">
<div class="box-title">
<i class="mdi mdi-file-music"></i> transcoding device profiles
</div>
<div class="block-right">
<p class="light text-right">you can find your device's client name in the gonic logs</p>
<p class="light text-right">some common client names: "<span class="emp">DSub</span>", "<span class="emp">Jamstash</span>", "<span class="emp">Soundwaves</span>"</p>
<p class="light text-right">or use "*" as fallback rule for any client</p>
<br/>
<table id="transcode-preferences">
{{ range $pref := .TranscodePreferences }}
<tr>
<form id="transcode-pref-{{ $pref.Client }}" action="{{ printf "/admin/delete_transcode_pref_do?client=%s" $pref.Client | path }}" method="post"></form>
<td>{{ $pref.Client }}</td>
<td>{{ $pref.Profile }}</td>
<td><input form="transcode-pref-{{ $pref.Client }}" type="submit" value="delete"></td>
</tr>
{{ end }}
<tr>
<form id="transcode-pref-add" action="{{ path "/admin/create_transcode_pref_do" }}" method="post"></form>
<td><input form="transcode-pref-add" type="text" name="client" placeholder="client name"></td>
<td><select form="transcode-pref-add" name="profile">
{{ range $profile := .TranscodeProfiles }}
<option value="{{ $profile }}">{{ $profile }}</option>
{{ end }}
</select></td>
<td><input form="transcode-pref-add" type="submit" value="save"></td>
</tr>
</table>
</div>
</div>
<div class="padded box">
<div class="box-title">
<i class="mdi mdi-playlist-music"></i> playlists
@@ -112,16 +154,17 @@
</tr>
{{ end }}
</table>
<br/>
<form
id="playlist-upload-form"
enctype="multipart/form-data"
action="{{ path "/admin/upload_playlist_do" }}"
method="post"
id="playlist-upload-form"
enctype="multipart/form-data"
action="{{ path "/admin/upload_playlist_do" }}"
method="post"
>
<label for="playlist-upload-input">
<a>upload m3u8 files</a>
</label>
<input id="playlist-upload-input" name="playlist-files" type="file" multiple />
<div style="position: relative;">
<input id="playlist-upload-input" style="position: absolute; opacity: 0;" name="playlist-files" type="file" multiple />
<input type="button" value="upload m3u8">
</div>
</form>
<script>
document.getElementById("playlist-upload-input").onchange = (e) => {

View File

@@ -4,8 +4,10 @@
<i class="mdi mdi-key-change"></i> updating last.fm keys
</div>
<div class="text-right">
<span class="light">current key</span> <i>{{ default "not set" .CurrentLastFMAPIKey }}</i><br/>
<span class="light">current secret</span> <i>{{ default "not set" .CurrentLastFMAPISecret }}</i>
<p class="light">(you can get an api key <a href="https://www.last.fm/api/account/create" target="_blank">here</a>)</p>
<br/>
<p><span class="light">current key</span> <i>{{ default "not set" .CurrentLastFMAPIKey }}</i></p>
<p><span class="light">current secret</span> <i>{{ default "not set" .CurrentLastFMAPISecret }}</i></p>
</div>
<form action="{{ path "/admin/update_lastfm_api_key_do" }}" method="post">
<input type="text" id="api_key" name="api_key" placeholder="new key">

View File

@@ -1,7 +1,7 @@
{{ define "head" }}
<link rel="stylesheet" href="{{ path "/admin/static/reset.css" }}">
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/3.6.95/css/materialdesignicons.min.css">
<link rel="stylesheet" href="{{ path "/admin/static/main.css" }}">
<link rel="stylesheet" href="{{ path "/admin/static/main.css" | noCache }}">
<link rel="shortcut icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon">
<link rel="icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">

View File

@@ -2,160 +2,154 @@
--pad-size: 1.75rem;
}
*, span, div, .mdi {
font-family: monospace;
font-size: 0.8rem;
*,
span,
div,
.mdi {
font-family: monospace;
font-size: 0.8rem;
}
body {
max-width: 780px;
margin: 0 auto;
padding: 0 var(--pad-size);
overflow-y: scroll;
font-size: 14px;
max-width: 780px;
margin: 0 auto;
padding: 0 var(--pad-size);
overflow-y: scroll;
font-size: 14px;
}
table td:not(:last-child)::after {
content: " ";
white-space: pre;
content: " ";
white-space: pre;
}
@media only screen and (max-width: 780px) {
table#recent-folders td:first-child::after {
content: "";
}
.no-small {
display: none;
}
body {
font-size: 12px;
}
}
form input[type=file] {
table#recent-folders td:first-child::after {
content: "";
}
.no-small {
display: none;
}
body {
font-size: 12px;
}
}
form input[type],
form select,
form textarea {
margin-bottom: 0;
input,
select,
textarea {
border-radius: 0;
border: 1px solid #ccc;
box-sizing: border-box;
margin: 1px 0;
padding: 0;
height: 20px;
}
form input {
padding: 3px;
border: 1px solid #ccc;
box-sizing: border-box;
}
form input[type=password],
form input[type=text] {
margin-bottom: 0.25rem;
}
form input[type=submit] {
width: 8rem;
background-color: white;
cursor: pointer;
input[type="submit"],
input[type="button"] {
width: 8rem;
background-color: white;
cursor: pointer;
}
form {
max-width: 400px;
margin-left: auto;
margin-right: 0;
display: flex;
flex-direction: column;
align-items: flex-end;
text-align: right;
max-width: 400px;
margin-left: auto;
margin-right: 0;
display: flex;
flex-direction: column;
align-items: flex-end;
text-align: right;
}
form > * {
width: 100%;
width: 100%;
}
div {
margin: 0;
padding: 0;
margin: 0;
padding: 0;
}
table td,
table td,
table th {
border: none;
margin: 0;
border: none;
margin: 0;
}
table {
overflow: hidden;
white-space: nowrap;
overflow: hidden;
white-space: nowrap;
}
a,
a:visited {
color: #0064c1;
text-decoration: none;
color: #0064c1;
text-decoration: none;
}
a:hover {
text-decoration: underline;
text-decoration: underline;
}
#content > * {
margin: var(--pad-size) 0;
margin: var(--pad-size) 0;
}
#header {
border-bottom: 2px solid #0000001a;
border-bottom: 2px solid #0000001a;
}
#header img {
width: 60%;
display: block;
margin: 0 auto;
height: auto;
width: 60%;
display: block;
margin: 0 auto;
height: auto;
}
.flash-warning {
background-color: #fd1b1b1c;
border-right: 2px solid #fd1b1b1c;
border-bottom: 2px solid #fd1b1b1c;
background-color: #fd1b1b1c;
border-right: 2px solid #fd1b1b1c;
border-bottom: 2px solid #fd1b1b1c;
}
.flash-normal {
background-color: #15ff5424;
border-right: 2px solid #15ff5424;
border-bottom: 2px solid #15ff5424;
background-color: #15ff5424;
border-right: 2px solid #15ff5424;
border-bottom: 2px solid #15ff5424;
}
.box {
background-color: #00000005;
border-right: 2px solid #0000000c;
border-bottom: 2px solid #0000000c;
background-color: #00000005;
border-right: 2px solid #0000000c;
border-bottom: 2px solid #0000000c;
}
.text-right {
text-align: right;
text-align: right;
}
.block-right > * {
margin-left: auto;
}
.box-title {
margin-bottom: 0.5rem;
margin-left: auto;
}
.padded {
padding: 1rem;
padding: 1rem;
}
.side-padded {
padding: 0 1rem;
padding: 0 1rem;
}
.angry {
background-color: #f4433669;
background-color: #f4433669;
}
.light {
color: #00000082;
color: #00000082;
}
.emp {
font-style: italic;
}

View File

@@ -3,38 +3,133 @@
License: none (public domain)
*/
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* html5 display-role reset for older browsers */
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block;
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
body {
line-height: 1;
line-height: 1;
}
ol, ul {
list-style: none;
ol,
ul {
list-style: none;
}
blockquote, q {
quotes: none;
blockquote,
q {
quotes: none;
}
blockquote:before, blockquote:after, q:before, q:after {
content: '';
content: none;
blockquote:before,
blockquote:after,
q:before,
q:after {
content: "";
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
border-collapse: collapse;
border-spacing: 0;
}

View File

@@ -20,7 +20,7 @@ func main() {
set := flag.NewFlagSet(version.NAME, flag.ExitOnError)
listenAddr := set.String("listen-addr", "0.0.0.0:4747", "listen address (optional)")
musicPath := set.String("music-path", "", "path to music")
cachePath := set.String("cache-path", "", "path to cache")
cachePath := set.String("cache-path", "/tmp/gonic_cache", "path to cache")
dbPath := set.String("db-path", "gonic.db", "path to database (optional)")
scanInterval := set.Int("scan-interval", 0, "interval (in minutes) to automatically scan music (optional)")
proxyPrefix := set.String("proxy-prefix", "", "url path prefix to use if behind proxy. eg '/gonic' (optional)")
@@ -41,7 +41,9 @@ func main() {
log.Fatal("please provide a valid music directory")
}
if _, err := os.Stat(*cachePath); os.IsNotExist(err) {
log.Fatal("please provide a valid cache directory")
if err := os.MkdirAll(*cachePath, os.ModePerm); err != nil {
log.Fatalf("couldn't create cache path: %v\n", err)
}
}
db, err := db.New(*dbPath)
if err != nil {

View File

@@ -40,6 +40,7 @@ func New(path string) (*DB, error) {
&migrationInitSchema,
&migrationCreateInitUser,
&migrationMergePlaylist,
&migrationCreateTranscode,
})
if err = migr.Migrate(); err != nil {
return nil, errors.Wrap(err, "migrating to latest version")

View File

@@ -6,6 +6,8 @@ import (
"gopkg.in/gormigrate.v1"
)
// $ date '+%Y%m%d%H%M'
// not really a migration
var migrationInitSchema = gormigrate.Migration{
ID: "202002192100",
@@ -67,3 +69,13 @@ var migrationMergePlaylist = gormigrate.Migration{
Error
},
}
var migrationCreateTranscode = gormigrate.Migration{
ID: "202003111222",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
TranscodePreference{},
).
Error
},
}

View File

@@ -83,6 +83,17 @@ func (t *Track) MIME() string {
return mime.Types[ext]
}
func (t *Track) RelPath() string {
if t.Album == nil {
return ""
}
return path.Join(
t.Album.LeftPath,
t.Album.RightPath,
t.Filename,
)
}
type User struct {
ID int `gorm:"primary_key"`
CreatedAt time.Time
@@ -176,3 +187,10 @@ func (p *PlayQueue) GetItems() []int {
func (p *PlayQueue) SetItems(items []int) {
p.Items = joinInt(items, ",")
}
type TranscodePreference struct {
User *User
UserID int `sql:"default: null; type:int REFERENCES users(id) ON DELETE CASCADE"`
Client string `gorm:"not null; unique_index:idx_client_profile" sql:"default: null"`
Profile string `gorm:"not null; unique_index:idx_client_profile" sql:"default: null"`
}

View File

@@ -6,6 +6,7 @@ import (
"html/template"
"log"
"net/http"
"net/url"
"path/filepath"
"strings"
"time"
@@ -83,6 +84,13 @@ func New(base *ctrlbase.Controller) *Controller {
"date": func(in time.Time) string {
return strings.ToLower(in.Format("Jan 02, 2006"))
},
"noCache": func(in string) string {
parsed, _ := url.Parse(in)
params := parsed.Query()
params.Set("v", version.VERSION)
parsed.RawQuery = params.Encode()
return parsed.String()
},
"dateHuman": humanize.Time,
"path": base.Path,
})
@@ -102,15 +110,17 @@ type templateData struct {
User *db.User
Version string
// home
AlbumCount int
ArtistCount int
TrackCount int
RequestRoot string
RecentFolders []*db.Album
AllUsers []*db.User
LastScanTime time.Time
IsScanning bool
Playlists []*db.Playlist
AlbumCount int
ArtistCount int
TrackCount int
RequestRoot string
RecentFolders []*db.Album
AllUsers []*db.User
LastScanTime time.Time
IsScanning bool
Playlists []*db.Playlist
TranscodePreferences []*db.TranscodePreference
TranscodeProfiles []string
//
CurrentLastFMAPIKey string
CurrentLastFMAPISecret string
@@ -132,6 +142,7 @@ type Response struct {
err string
}
//nolint:gocognit
func (c *Controller) H(h adminHandler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
resp := h(r)

View File

@@ -28,6 +28,7 @@ func TestFirstExisting(t *testing.T) {
},
}
for _, tc := range cases {
tc := tc // pin
t.Run(tc.name, func(t *testing.T) {
actu := firstExisting(tc.or, tc.values...)
if actu != tc.exp {

View File

@@ -9,6 +9,7 @@ import (
"senan.xyz/g/gonic/db"
"senan.xyz/g/gonic/scanner"
"senan.xyz/g/gonic/server/encode"
"senan.xyz/g/gonic/server/lastfm"
)
@@ -53,12 +54,20 @@ func (c *Controller) ServeHome(r *http.Request) *Response {
i, _ := strconv.ParseInt(tStr, 10, 64)
data.LastScanTime = time.Unix(i, 0)
}
// ** begin playlists box
//
user := r.Context().Value(CtxUser).(*db.User)
// ** begin playlists box
c.DB.
Where("user_id=?", user.ID).
Limit(20).
Find(&data.Playlists)
// ** begin transcoding box
c.DB.
Where("user_id=?", user.ID).
Find(&data.TranscodePreferences)
for profile := range encode.Profiles {
data.TranscodeProfiles = append(data.TranscodeProfiles, profile)
}
//
return &Response{
template: "home.tmpl",
@@ -73,8 +82,7 @@ func (c *Controller) ServeChangeOwnPassword(r *http.Request) *Response {
func (c *Controller) ServeChangeOwnPasswordDo(r *http.Request) *Response {
passwordOne := r.FormValue("password_one")
passwordTwo := r.FormValue("password_two")
err := validatePasswords(passwordOne, passwordTwo)
if err != nil {
if err := validatePasswords(passwordOne, passwordTwo); err != nil {
return &Response{
redirect: r.Referer(),
flashW: []string{err.Error()},
@@ -145,8 +153,7 @@ func (c *Controller) ServeChangePasswordDo(r *http.Request) *Response {
username := r.URL.Query().Get("user")
passwordOne := r.FormValue("password_one")
passwordTwo := r.FormValue("password_two")
err := validatePasswords(passwordOne, passwordTwo)
if err != nil {
if err := validatePasswords(passwordOne, passwordTwo); err != nil {
return &Response{
redirect: r.Referer(),
flashW: []string{err.Error()},
@@ -184,6 +191,12 @@ func (c *Controller) ServeDeleteUser(r *http.Request) *Response {
func (c *Controller) ServeDeleteUserDo(r *http.Request) *Response {
username := r.URL.Query().Get("user")
user := c.DB.GetUserFromName(username)
if user.IsAdmin {
return &Response{
redirect: "/admin/home",
flashW: []string{"can't delete the admin user"},
}
}
c.DB.Delete(user)
return &Response{redirect: "/admin/home"}
}
@@ -214,8 +227,7 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response {
Name: username,
Password: passwordOne,
}
err = c.DB.Create(&user).Error
if err != nil {
if err := c.DB.Create(&user).Error; err != nil {
return &Response{
redirect: r.Referer(),
flashW: []string{fmt.Sprintf("could not create user `%s`: %v", username, err)},
@@ -291,3 +303,44 @@ func (c *Controller) ServeUploadPlaylistDo(r *http.Request) *Response {
flashW: errors,
}
}
func (c *Controller) ServeCreateTranscodePrefDo(r *http.Request) *Response {
client := r.FormValue("client")
profile := r.FormValue("profile")
if client == "" {
return &Response{
redirect: "/admin/home",
flashW: []string{"please provide a client name"},
}
}
user := r.Context().Value(CtxUser).(*db.User)
pref := db.TranscodePreference{
UserID: user.ID,
Client: client,
Profile: profile,
}
if err := c.DB.Create(&pref).Error; err != nil {
return &Response{
redirect: "/admin/home",
flashW: []string{fmt.Sprintf("could not create preference: %v", err)},
}
}
return &Response{redirect: "/admin/home"}
}
func (c *Controller) ServeDeleteTranscodePrefDo(r *http.Request) *Response {
user := r.Context().Value(CtxUser).(*db.User)
client := r.URL.Query().Get("client")
if client == "" {
return &Response{
err: "please provide a client",
code: 400,
}
}
c.DB.
Where("user_id=? AND client=?", user.ID, client).
Delete(db.TranscodePreference{})
return &Response{
redirect: "/admin/home",
}
}

View File

@@ -1,7 +1,6 @@
package ctrlsubsonic
import (
"fmt"
"log"
"net/http"
"sort"
@@ -131,7 +130,6 @@ func (c *Controller) ServeGetPlaylists(r *http.Request) *spec.Response {
sub.Playlists = &spec.Playlists{
List: make([]*spec.Playlist, len(playlists)),
}
fmt.Println("aaaa")
for i, playlist := range playlists {
sub.Playlists.List[i] = spec.NewPlaylist(playlist)
sub.Playlists.List[i].Owner = user.Name

View File

@@ -10,32 +10,11 @@ import (
"github.com/jinzhu/gorm"
"senan.xyz/g/gonic/db"
"senan.xyz/g/gonic/mime"
"senan.xyz/g/gonic/server/ctrlsubsonic/encode"
"senan.xyz/g/gonic/server/ctrlsubsonic/params"
"senan.xyz/g/gonic/server/ctrlsubsonic/spec"
"senan.xyz/g/gonic/server/encode"
)
// Put special clients that can't handle Opus here:
func encodeProfileFor(client string) string {
switch client {
case "Soundwaves":
return "mp3_rg"
case "Jamstash":
return "opus_rg"
default:
return "opus"
}
}
func fileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}
// "raw" handlers are ones that don't always return a spec response.
// it could be a file, stream, etc. so you must either
// a) write to response writer
@@ -69,6 +48,49 @@ func (c *Controller) ServeGetCoverArt(w http.ResponseWriter, r *http.Request) *s
return nil
}
func fileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}
type serveTrackOptions struct {
track *db.Track
pref *db.TranscodePreference
maxBitrate int
cachePath string
musicPath string
}
func serveTrackRaw(w http.ResponseWriter, r *http.Request, opts serveTrackOptions) {
log.Printf("serving raw %q\n", opts.track.Filename)
w.Header().Set("Content-Type", opts.track.MIME())
trackPath := path.Join(opts.musicPath, opts.track.RelPath())
http.ServeFile(w, r, trackPath)
}
func serveTrackEncode(w http.ResponseWriter, r *http.Request, opts serveTrackOptions) {
profile := encode.Profiles[opts.pref.Profile]
bitrate := encode.GetBitrate(opts.maxBitrate, profile)
trackPath := path.Join(opts.musicPath, opts.track.RelPath())
cacheKey := encode.CacheKey(trackPath, opts.pref.Profile, bitrate)
cacheFile := path.Join(opts.cachePath, cacheKey)
if fileExists(cacheFile) {
log.Printf("serving transcode `%s`: cache [%s/%s] hit!\n", opts.track.Filename, profile.Format, bitrate)
http.ServeFile(w, r, cacheFile)
return
}
log.Printf("serving transcode `%s`: cache [%s/%s] miss!\n", opts.track.Filename, profile.Format, bitrate)
if err := encode.Encode(w, trackPath, cacheFile, profile, bitrate); err != nil {
log.Printf("error encoding %q: %v\n", trackPath, err)
return
}
log.Printf("serving transcode `%s`: encoded to [%s/%s] successfully\n",
opts.track.Filename, profile.Format, bitrate)
}
func (c *Controller) ServeStream(w http.ResponseWriter, r *http.Request) *spec.Response {
params := r.Context().Value(CtxParams).(params.Params)
id, err := params.GetInt("id")
@@ -83,8 +105,8 @@ func (c *Controller) ServeStream(w http.ResponseWriter, r *http.Request) *spec.R
if gorm.IsRecordNotFoundError(err) {
return spec.NewError(70, "media with id `%d` was not found", id)
}
user := r.Context().Value(CtxUser).(*db.User)
defer func() {
user := r.Context().Value(CtxUser).(*db.User)
play := db.Play{
AlbumID: track.Album.ID,
UserID: user.ID,
@@ -96,34 +118,26 @@ func (c *Controller) ServeStream(w http.ResponseWriter, r *http.Request) *spec.R
play.Count++ // for getAlbumList?type=frequent
c.DB.Save(&play)
}()
client := params.GetOr("c", "generic")
maxBitrate, err := params.GetInt("maxBitRate")
if err != nil {
maxBitrate = 0
client := params.Get("c")
servOpts := serveTrackOptions{
track: track,
musicPath: c.MusicPath,
}
absPath := path.Join(
c.MusicPath,
track.Album.LeftPath,
track.Album.RightPath,
track.Filename,
)
profileName := encodeProfileFor(client)
profile := encode.Profiles[profileName]
bitrate := encode.GetBitrate(maxBitrate, profile)
cacheKey := encode.CacheKey(absPath, profileName, bitrate)
cacheFile := path.Join(c.CachePath, cacheKey)
if fileExists(cacheFile) {
log.Printf("track `%s`: cache [%s/%s] hit!\n", track.Filename, profile.Format, bitrate)
http.ServeFile(w, r, cacheFile)
pref := &db.TranscodePreference{}
err = c.DB.
Where("user_id=?", user.ID).
Where("client COLLATE NOCASE IN (?)", []string{"*", client}).
Order("client DESC"). // ensure "*" is last if it's there
First(pref).
Error
if gorm.IsRecordNotFoundError(err) {
serveTrackRaw(w, r, servOpts)
return nil
}
log.Printf("track `%s`: cache [%s/%s] miss!\n", track.Filename, profile.Format, bitrate)
if err := encode.Encode(w, absPath, cacheFile, profile, bitrate); err != nil {
log.Printf("error encoding %q: %v\n", absPath, err)
}
log.Printf("track `%s`: encoded to [%s/%s] successfully\n",
track.Filename, profile.Format, bitrate)
servOpts.pref = pref
servOpts.maxBitrate = params.GetIntOr("maxBitRate", 0)
servOpts.cachePath = c.CachePath
serveTrackEncode(w, r, servOpts)
return nil
}
@@ -141,20 +155,9 @@ func (c *Controller) ServeDownload(w http.ResponseWriter, r *http.Request) *spec
if gorm.IsRecordNotFoundError(err) {
return spec.NewError(70, "media with id `%d` was not found", id)
}
absPath := path.Join(
c.MusicPath,
track.Album.LeftPath,
track.Album.RightPath,
track.Filename,
)
if mime, ok := mime.Types[track.Ext()]; ok {
w.Header().Set("Content-Type", mime)
}
http.ServeFile(w, r, absPath)
//
// We don't need to mark album/track as played
// if user just downloads a track, so bail out here:
serveTrackRaw(w, r, serveTrackOptions{
track: track,
musicPath: c.MusicPath,
})
return nil
}

View File

@@ -132,9 +132,10 @@ func Encode(out io.Writer, trackPath, cachePath string, profile *Profile, bitrat
}
// Generate cache key (file name). For, you know, encoded tracks cache.
func CacheKey(sourcePath string, profile string, bitrate string) string {
func CacheKey(sourcePath string, profile, bitrate string) string {
format := Profiles[profile].Format
return fmt.Sprintf("%x-%s-%s.%s", xxhash.Sum64String(sourcePath), profile, bitrate, format)
hash := xxhash.Sum64String(sourcePath)
return fmt.Sprintf("%x-%s-%s.%s", hash, profile, bitrate, format)
}
// Check if client forces bitrate lower than set in profile:

View File

@@ -108,6 +108,8 @@ func setupAdmin(r *mux.Router, ctrl *ctrladmin.Controller) {
routUser.Handle("/link_lastfm_do", ctrl.H(ctrl.ServeLinkLastFMDo))
routUser.Handle("/unlink_lastfm_do", ctrl.H(ctrl.ServeUnlinkLastFMDo))
routUser.Handle("/upload_playlist_do", ctrl.H(ctrl.ServeUploadPlaylistDo))
routUser.Handle("/create_transcode_pref_do", ctrl.H(ctrl.ServeCreateTranscodePrefDo))
routUser.Handle("/delete_transcode_pref_do", ctrl.H(ctrl.ServeDeleteTranscodePrefDo))
// ** begin admin routes (if session is valid, and is admin)
routAdmin := routUser.NewRoute().Subrouter()
routAdmin.Use(ctrl.WithAdminSession)