aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2018-07-01 13:36:38 -0700
committerGitHub <noreply@github.com>2018-07-01 13:36:38 -0700
commitb0e0b108231f9b71eebe68d8e9b99ca2846b4534 (patch)
treeed26794d6eca41f004531e1a007d2a308635640e
parent7d8c210f1499bce3558f107402f2c7ccf8417e7d (diff)
parent920c0d303f9bce6207e221726bbacaa2022b540a (diff)
downloadxesite-b0e0b108231f9b71eebe68d8e9b99ca2846b4534.tar.xz
xesite-b0e0b108231f9b71eebe68d8e9b99ca2846b4534.zip
Merge pull request #7 from Xe/rip-out-mage
Rip out mage
-rw-r--r--Dockerfile14
-rw-r--r--box.rb36
-rw-r--r--cmd/site/gopreload.go (renamed from gopreload.go)0
-rw-r--r--cmd/site/gops.go (renamed from gops.go)0
-rw-r--r--cmd/site/hash.go (renamed from hash.go)0
-rw-r--r--cmd/site/html.go (renamed from html.go)0
-rw-r--r--cmd/site/main.go (renamed from main.go)14
-rw-r--r--cmd/site/rss.go (renamed from rss.go)0
-rw-r--r--mage.go80
-rw-r--r--mage_helpers.go75
-rw-r--r--rice-box.go365
-rwxr-xr-xscripts/deploy.sh7
-rwxr-xr-xscripts/setupremote.sh6
-rw-r--r--static2/favicon/android-icon-144x144.png (renamed from static/favicon/android-icon-144x144.png)bin13978 -> 13978 bytes
-rw-r--r--static2/favicon/android-icon-192x192.png (renamed from static/favicon/android-icon-192x192.png)bin17669 -> 17669 bytes
-rw-r--r--static2/favicon/android-icon-36x36.png (renamed from static/favicon/android-icon-36x36.png)bin3074 -> 3074 bytes
-rw-r--r--static2/favicon/android-icon-48x48.png (renamed from static/favicon/android-icon-48x48.png)bin4151 -> 4151 bytes
-rw-r--r--static2/favicon/android-icon-72x72.png (renamed from static/favicon/android-icon-72x72.png)bin6252 -> 6252 bytes
-rw-r--r--static2/favicon/android-icon-96x96.png (renamed from static/favicon/android-icon-96x96.png)bin8678 -> 8678 bytes
-rw-r--r--static2/favicon/apple-icon-114x114.png (renamed from static/favicon/apple-icon-114x114.png)bin10504 -> 10504 bytes
-rw-r--r--static2/favicon/apple-icon-120x120.png (renamed from static/favicon/apple-icon-120x120.png)bin11213 -> 11213 bytes
-rw-r--r--static2/favicon/apple-icon-144x144.png (renamed from static/favicon/apple-icon-144x144.png)bin13978 -> 13978 bytes
-rw-r--r--static2/favicon/apple-icon-152x152.png (renamed from static/favicon/apple-icon-152x152.png)bin14834 -> 14834 bytes
-rw-r--r--static2/favicon/apple-icon-180x180.png (renamed from static/favicon/apple-icon-180x180.png)bin18377 -> 18377 bytes
-rw-r--r--static2/favicon/apple-icon-57x57.png (renamed from static/favicon/apple-icon-57x57.png)bin4905 -> 4905 bytes
-rw-r--r--static2/favicon/apple-icon-60x60.png (renamed from static/favicon/apple-icon-60x60.png)bin5164 -> 5164 bytes
-rw-r--r--static2/favicon/apple-icon-72x72.png (renamed from static/favicon/apple-icon-72x72.png)bin6252 -> 6252 bytes
-rw-r--r--static2/favicon/apple-icon-76x76.png (renamed from static/favicon/apple-icon-76x76.png)bin6653 -> 6653 bytes
-rw-r--r--static2/favicon/apple-icon-precomposed.png (renamed from static/favicon/apple-icon-precomposed.png)bin18245 -> 18245 bytes
-rw-r--r--static2/favicon/apple-icon.png (renamed from static/favicon/apple-icon.png)bin18245 -> 18245 bytes
-rw-r--r--static2/favicon/browserconfig.xml (renamed from static/favicon/browserconfig.xml)0
-rw-r--r--static2/favicon/favicon-16x16.png (renamed from static/favicon/favicon-16x16.png)bin1729 -> 1729 bytes
-rw-r--r--static2/favicon/favicon-32x32.png (renamed from static/favicon/favicon-32x32.png)bin2768 -> 2768 bytes
-rw-r--r--static2/favicon/favicon-96x96.png (renamed from static/favicon/favicon-96x96.png)bin8678 -> 8678 bytes
-rw-r--r--static2/favicon/favicon.ico (renamed from static/favicon/favicon.ico)bin1150 -> 1150 bytes
-rw-r--r--static2/favicon/manifest.json (renamed from static/favicon/manifest.json)0
-rw-r--r--static2/favicon/ms-icon-144x144.png (renamed from static/favicon/ms-icon-144x144.png)bin13978 -> 13978 bytes
-rw-r--r--static2/favicon/ms-icon-150x150.png (renamed from static/favicon/ms-icon-150x150.png)bin14670 -> 14670 bytes
-rw-r--r--static2/favicon/ms-icon-310x310.png (renamed from static/favicon/ms-icon-310x310.png)bin40648 -> 40648 bytes
-rw-r--r--static2/favicon/ms-icon-70x70.png (renamed from static/favicon/ms-icon-70x70.png)bin6092 -> 6092 bytes
-rw-r--r--static2/geekcode.txt (renamed from static/geekcode.txt)0
-rw-r--r--static2/gpg.pub (renamed from static/gpg.pub)0
-rw-r--r--static2/img/about/tower.jpg (renamed from static/img/about/tower.jpg)bin147510 -> 147510 bytes
-rw-r--r--static2/img/avatar.png (renamed from static/img/avatar.png)bin91262 -> 91262 bytes
-rw-r--r--static2/img/lokahi.dot (renamed from static/img/lokahi.dot)0
-rw-r--r--static2/img/lokahi.png (renamed from static/img/lokahi.png)bin42338 -> 42338 bytes
-rw-r--r--static2/keybase.txt (renamed from static/keybase.txt)0
-rw-r--r--static2/resume/resume.md (renamed from static/resume/resume.md)0
48 files changed, 30 insertions, 567 deletions
diff --git a/Dockerfile b/Dockerfile
index 6380f81..93e7a6d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,16 @@
-FROM xena/christine.website:1.1-47-g3228e3b
+FROM xena/go:1.10 AS build
+COPY . /root/go/src/github.com/Xe/site
+RUN CGO_ENABLED=0 GOBIN=/root go install github.com/Xe/site/cmd/site
+
+FROM xena/alpine
EXPOSE 5000
RUN apk add --no-cache bash
+COPY --from=build /root/site /site/site
+COPY ./static2 /site/static
+COPY ./templates /site/templates
+COPY ./blog /site/blog
+COPY ./css /site/css
+COPY ./run.sh /site/run.sh
+
+HEALTHCHECK CMD curl --fail http://127.0.0.1:5000 || exit 1
CMD /site/run.sh
diff --git a/box.rb b/box.rb
deleted file mode 100644
index 625eed9..0000000
--- a/box.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-from "xena/go:1.10"
-
-### Copy files
-run "mkdir -p /site"
-
-def put(file)
- copy "./#{file}", "/site/#{file}"
-end
-
-files = [
- "gops.go",
- "hash.go",
- "html.go",
- "main.go",
- "rss.go",
- "run.sh",
- "templates",
- "blog",
- "rice-box.go"
-]
-
-files.each { |x| put x }
-
-copy "vendor/", "/root/go/src/"
-
-### Build
-run "cd /site && go build -v"
-
-### Cleanup
-run %q[ rm -rf /root/go /site/backend /root/sdk /site/*.go ]
-run %q[ rm -rf /usr/local/bin/go* ]
-
-cmd "/site/run.sh"
-
-flatten
-tag "xena/christine.website"
diff --git a/gopreload.go b/cmd/site/gopreload.go
index 6829ae5..6829ae5 100644
--- a/gopreload.go
+++ b/cmd/site/gopreload.go
diff --git a/gops.go b/cmd/site/gops.go
index 184b656..184b656 100644
--- a/gops.go
+++ b/cmd/site/gops.go
diff --git a/hash.go b/cmd/site/hash.go
index ed6112c..ed6112c 100644
--- a/hash.go
+++ b/cmd/site/hash.go
diff --git a/html.go b/cmd/site/html.go
index ba304c5..ba304c5 100644
--- a/html.go
+++ b/cmd/site/html.go
diff --git a/main.go b/cmd/site/main.go
index e0cc20d..bad297e 100644
--- a/main.go
+++ b/cmd/site/main.go
@@ -12,7 +12,6 @@ import (
"sync"
"time"
- "github.com/GeertJohan/go.rice"
"github.com/Xe/jsonfeed"
"github.com/Xe/ln"
"github.com/gorilla/feeds"
@@ -135,17 +134,12 @@ func Build() (*Site, error) {
sort.Sort(sort.Reverse(s.Posts))
- cb, err := rice.FindBox("css")
+ resumeData, err := ioutil.ReadFile("./static/resume/resume.md")
if err != nil {
return nil, err
}
- sb, err := rice.FindBox("static")
- if err != nil {
- return nil, err
- }
-
- s.Resume = template.HTML(blackfriday.Run(sb.MustBytes("resume/resume.md")))
+ s.Resume = template.HTML(blackfriday.Run(resumeData))
for _, item := range s.Posts {
itime, _ := time.Parse("2006-01-02", item.Date)
@@ -174,8 +168,8 @@ func Build() (*Site, error) {
s.mux.HandleFunc("/blog.atom", s.createAtom)
s.mux.HandleFunc("/blog.json", s.createJsonFeed)
s.mux.HandleFunc("/blog/", s.showPost)
- s.mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(sb.HTTPBox())))
- s.mux.Handle("/css/", http.StripPrefix("/css/", http.FileServer(cb.HTTPBox())))
+ s.mux.Handle("/css/", http.FileServer(http.Dir(".")))
+ s.mux.Handle("/static/", http.FileServer(http.Dir(".")))
return s, nil
}
diff --git a/rss.go b/cmd/site/rss.go
index 15e9163..15e9163 100644
--- a/rss.go
+++ b/cmd/site/rss.go
diff --git a/mage.go b/mage.go
deleted file mode 100644
index ee31edd..0000000
--- a/mage.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// +build mage
-
-package main
-
-import (
- "context"
- "fmt"
- "os"
-
- "github.com/magefile/mage/mg"
-)
-
-func do(cmd string, args ...string) {
- shouldWork(context.Background(), nil, wd, cmd, args...)
-}
-
-// Setup installs the tools that other parts of the build process depend on.
-func Setup(ctx context.Context) {
- // go tools
- do("go", "get", "-u", "-v", "github.com/GeertJohan/go.rice/rice")
-
- do("git", "remote", "add", "dokku", "dokku@minipaas.xeserv.us")
-}
-
-// Generate runs all of the code generation.
-func Generate(ctx context.Context) {
- shouldWork(ctx, nil, wd, "rice", "embed-go")
-}
-
-// Docker creates the docker image xena/christine.website using box(1).
-func Docker() {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
-
- mg.Deps(Generate)
-
- shouldWork(ctx, nil, wd, "box", "box.rb")
-}
-
-// Deploy does the work needed to deploy this image to the dokku server.
-func Deploy(ctx context.Context) error {
- mg.Deps(Docker)
-
- tag, err := gitTag()
- if err != nil {
- return err
- }
-
- do("docker", "tag", "xena/christine.website", "xena/christine.website:"+tag)
- do("docker", "push", "xena/christine.website:"+tag)
-
- const dockerfileTemplate = `FROM xena/christine.website:${VERSION}
-EXPOSE 5000
-RUN apk add --no-cache bash
-CMD /site/run.sh`
- data := os.Expand(dockerfileTemplate, func(inp string) string {
- switch inp {
- case "VERSION":
- return tag
- default:
- return "<unknown arg " + inp + ">"
- }
- })
-
- os.Remove("Dockerfile")
- fout, err := os.Create("Dockerfile")
- if err != nil {
- return err
- }
-
- fmt.Fprintln(fout, data)
- fout.Close()
-
- do("git", "add", "Dockerfile")
- do("git", "commit", "-m", "Dockerfile: update for deployment of version "+tag)
- do("git", "push", "dokku", "master")
- do("git", "push")
-
- return nil
-}
diff --git a/mage_helpers.go b/mage_helpers.go
deleted file mode 100644
index 08c4526..0000000
--- a/mage_helpers.go
+++ /dev/null
@@ -1,75 +0,0 @@
-// +build mage
-
-package main
-
-import (
- "context"
- "log"
- "os"
- "os/exec"
- "strings"
-
- "github.com/jtolds/qod"
- "github.com/pkg/errors"
-)
-
-var wd string
-
-func init() {
- lwd, err := os.Getwd()
- qod.ANE(err)
-
- wd = lwd
-}
-
-// must end in a slash
-const pkgBase = "github.com/Xe/site/"
-
-func output(cmd string, args ...string) (string, error) {
- c := exec.Command(cmd, args...)
- c.Env = os.Environ()
- c.Stderr = os.Stderr
- b, err := c.Output()
- if err != nil {
- return "", errors.Wrapf(err, `failed to run %v %q`, cmd, args)
- }
- return string(b), nil
-}
-
-func gitTag() (string, error) {
- s, err := output("git", "describe", "--tags")
- if err != nil {
- ee, ok := errors.Cause(err).(*exec.ExitError)
- if ok && ee.Exited() {
- // probably no git tag
- return "dev", nil
- }
- return "", err
- }
-
- return strings.TrimSuffix(s, "\n"), nil
-}
-
-func shouldWork(ctx context.Context, env []string, dir string, cmdName string, args ...string) {
- loc, err := exec.LookPath(cmdName)
- qod.ANE(err)
-
- cmd := exec.CommandContext(ctx, loc, args...)
- cmd.Dir = dir
- cmd.Env = append(env, os.Environ()...)
-
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
-
- log.Printf("starting process, env: %v, pwd: %s, cmd: %s, args: %v", env, dir, loc, args)
- err = cmd.Run()
- qod.ANE(err)
-}
-
-func goBuild(ctx context.Context, env []string, dir string, pkgname string) {
- shouldWork(ctx, env, dir, "go", "build", "-v", pkgBase+pkgname)
-}
-
-func goInstall(ctx context.Context, env []string, pkgname string) {
- shouldWork(ctx, nil, wd, "go", "install", pkgBase+pkgname)
-}
diff --git a/rice-box.go b/rice-box.go
deleted file mode 100644
index 3be82fc..0000000
--- a/rice-box.go
+++ /dev/null
@@ -1,365 +0,0 @@
-package main
-
-import (
- "github.com/GeertJohan/go.rice/embedded"
- "time"
-)
-
-func init() {
-
- // define files
- file2 := &embedded.EmbeddedFile{
- Filename: "hack.css",
- FileModTime: time.Unix(1517162200, 0),
- Content: string("html{font-size:12px}*{box-sizing:border-box;text-rendering:geometricPrecision}body{font-size:1rem;line-height:1.5rem;margin:0;font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;word-wrap:break-word}h1,h2,h3,h4,h5,h6{line-height:1.3em}fieldset{border:none;padding:0;margin:0}pre{padding:2rem;margin:1.75rem 0;background-color:#fff;border:1px solid #ccc;overflow:auto}code[class*=language-],pre[class*=language-],pre code{font-weight:100;text-shadow:none;margin:1.75rem 0}a{cursor:pointer;color:#ff2e88;text-decoration:none;border-bottom:1px solid #ff2e88}a:hover{background-color:#ff2e88;color:#fff}.grid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.grid.\\-top{-ms-flex-align:start;align-items:flex-start}.grid.\\-middle{-ms-flex-align:center;align-items:center}.grid.\\-bottom{-ms-flex-align:end;align-items:flex-end}.grid.\\-stretch{-ms-flex-align:stretch;align-items:stretch}.grid.\\-baseline{-ms-flex-align:baseline;align-items:baseline}.grid.\\-left{-ms-flex-pack:start;justify-content:flex-start}.grid.\\-center{-ms-flex-pack:center;justify-content:center}.grid.\\-right{-ms-flex-pack:end;justify-content:flex-end}.grid.\\-between{-ms-flex-pack:justify;justify-content:space-between}.grid.\\-around{-ms-flex-pack:distribute;justify-content:space-around}.cell{-ms-flex:1;flex:1;box-sizing:border-box}@media screen and (min-width:768px){.cell.\\-1of12{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.cell.\\-2of12{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%}.cell.\\-3of12{-ms-flex:0 0 25%;flex:0 0 25%}.cell.\\-4of12{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%}.cell.\\-5of12{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%}.cell.\\-6of12{-ms-flex:0 0 50%;flex:0 0 50%}.cell.\\-7of12{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%}.cell.\\-8of12{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%}.cell.\\-9of12{-ms-flex:0 0 75%;flex:0 0 75%}.cell.\\-10of12{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%}.cell.\\-11of12{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%}}@media screen and (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.cell{-ms-flex:0 0 auto;flex:0 0 auto}}.hack,.hack blockquote,.hack code,.hack em,.hack h1,.hack h2,.hack h3,.hack h4,.hack h5,.hack h6,.hack strong{font-size:1rem;font-style:normal;font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif}.hack blockquote,.hack code,.hack em,.hack strong{line-height:20px}.hack blockquote,.hack code,.hack footer,.hack h1,.hack h2,.hack h3,.hack h4,.hack h5,.hack h6,.hack header,.hack li,.hack ol,.hack p,.hack section,.hack ul{float:none;margin:0;padding:0}.hack blockquote,.hack h1,.hack ol,.hack p,.hack ul{margin-top:20px;margin-bottom:20px}.hack h1{position:relative;display:inline-block;display:table-cell;padding:20px 0 30px;margin:0;overflow:hidden}.hack h1:after{content:\"====================================================================================================\";position:absolute;bottom:10px;left:0}.hack h1+*{margin-top:0}.hack h2,.hack h3,.hack h4,.hack h5,.hack h6{position:relative;margin-bottom:1.75rem}.hack h2:before,.hack h3:before,.hack h4:before,.hack h5:before,.hack h6:before{display:inline}.hack h2:before{content:\"## \"}.hack h3:before{content:\"### \"}.hack h4:before{content:\"#### \"}.hack h5:before{content:\"##### \"}.hack h6:before{content:\"###### \"}.hack li{position:relative;display:block;padding-left:20px}.hack li:after{position:absolute;top:0;left:0}.hack ul>li:after{content:\"-\"}.hack ol{counter-reset:a}.hack ol>li:after{content:counter(a) \".\";counter-increment:a}.hack blockquote{position:relative;padding-left:17px;padding-left:2ch;overflow:hidden}.hack blockquote:after{content:\">\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\";white-space:pre;position:absolute;top:0;left:0;line-height:20px}.hack em:after,.hack em:before{content:\"*\";display:inline}.hack pre code:after,.hack pre code:before{content:\"\"}.hack code{font-weight:700}.hack code:after,.hack code:before{content:\"`\";display:inline}.hack hr{position:relative;height:20px;overflow:hidden;border:0;margin:20px 0}.hack hr:after{content:\"----------------------------------------------------------------------------------------------------\";position:absolute;top:0;left:0;line-height:20px;width:100%;word-wrap:break-word}@-moz-document url-prefix(){.hack h1{display:block}}.hack-ones ol>li:after{content:\"1.\"}p{margin:0 0 1.75rem}.container{max-width:70rem}.container,.container-fluid{margin:0 auto;padding:0 1rem}.inner{padding:1rem}.inner2x{padding:2rem}.pull-left{float:left}.pull-right{float:right}.progress-bar{height:8px;opacity:.8;background-color:#ccc;margin-top:12px}.progress-bar.progress-bar-show-percent{margin-top:38px}.progress-bar-filled{background-color:gray;height:100%;transition:width .3s ease;position:relative;width:0}.progress-bar-filled:before{content:\"\";border:6px solid transparent;border-top-color:gray;position:absolute;top:-12px;right:-6px}.progress-bar-filled:after{color:gray;content:attr(data-filled);display:block;font-size:12px;white-space:nowrap;position:absolute;border:6px solid transparent;top:-38px;right:0;-ms-transform:translateX(50%);transform:translateX(50%)}table{width:100%;border-collapse:collapse;margin:1.75rem 0;color:#778087}table td,table th{vertical-align:top;border:1px solid #ccc;line-height:15px;padding:10px}table thead th{font-size:10px}table tbody td:first-child{font-weight:700;color:#333}.form{width:30rem}.form-group{margin-bottom:1.75rem;overflow:auto}.form-group label{border-bottom:2px solid #ccc;color:#333;width:10rem;display:inline-block;height:38px;line-height:38px;padding:0;float:left;position:relative}.form-group.form-success label{color:#4caf50!important;border-color:#4caf50!important}.form-group.form-warning label{color:#ff9800!important;border-color:#ff9800!important}.form-group.form-error label{color:#f44336!important;border-color:#f44336!important}.form-control{outline:none;border:none;border-bottom:2px solid #ccc;padding:.5rem 0;width:20rem;height:38px;background-color:transparent}.form-control:focus{border-color:#555}.form-group.form-textarea label:after{position:absolute;content:\"\";width:2px;background-color:#fff;right:-2px;top:0;bottom:0}textarea.form-control{height:auto;resize:none;padding:1rem 0;border-bottom:2px solid #ccc;border-left:2px solid #ccc;padding:.5rem}select.form-control{border-radius:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none}.help-block{color:#999;margin-top:.5rem}.form-actions{margin-bottom:1.75rem}.btn{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;outline:none;padding:.65rem 2rem;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;z-index:1}.btn:active{box-shadow:inset 0 1px 3px rgba(0,0,0,.12)}.btn.btn-ghost{border-color:#757575;color:#757575;background-color:transparent}.btn.btn-ghost:focus,.btn.btn-ghost:hover{border-color:#424242;color:#424242;z-index:2}.btn.btn-ghost:hover{background-color:transparent}.btn-block{width:100%;display:-ms-flexbox;display:flex}.btn-default{color:#fff;background-color:#e0e0e0;border:1px solid #e0e0e0;color:#333}.btn-default:focus:not(.btn-ghost),.btn-default:hover{background-color:#dcdcdc;border-color:#dcdcdc}.btn-success{color:#fff;background-color:#4caf50;border:1px solid #4caf50}.btn-success:focus:not(.btn-ghost),.btn-success:hover{background-color:#43a047;border-color:#43a047}.btn-success.btn-ghost{border-color:#4caf50;color:#4caf50}.btn-success.btn-ghost:focus,.btn-success.btn-ghost:hover{border-color:#388e3c;color:#388e3c;z-index:2}.btn-error{color:#fff;background-color:#f44336;border:1px solid #f44336}.btn-error:focus:not(.btn-ghost),.btn-error:hover{background-color:#e53935;border-color:#e53935}.btn-error.btn-ghost{border-color:#f44336;color:#f44336}.btn-error.btn-ghost:focus,.btn-error.btn-ghost:hover{border-color:#d32f2f;color:#d32f2f;z-index:2}.btn-warning{color:#fff;background-color:#ff9800;border:1px solid #ff9800}.btn-warning:focus:not(.btn-ghost),.btn-warning:hover{background-color:#fb8c00;border-color:#fb8c00}.btn-warning.btn-ghost{border-color:#ff9800;color:#ff9800}.btn-warning.btn-ghost:focus,.btn-warning.btn-ghost:hover{border-color:#f57c00;color:#f57c00;z-index:2}.btn-info{color:#fff;background-color:#00bcd4;border:1px solid #00bcd4}.btn-info:focus:not(.btn-ghost),.btn-info:hover{background-color:#00acc1;border-color:#00acc1}.btn-info.btn-ghost{border-color:#00bcd4;color:#00bcd4}.btn-info.btn-ghost:focus,.btn-info.btn-ghost:hover{border-color:#0097a7;color:#0097a7;z-index:2}.btn-primary{color:#fff;background-color:#2196f3;border:1px solid #2196f3}.btn-primary:focus:not(.btn-ghost),.btn-primary:hover{background-color:#1e88e5;border-color:#1e88e5}.btn-primary.btn-ghost{border-color:#2196f3;color:#2196f3}.btn-primary.btn-ghost:focus,.btn-primary.btn-ghost:hover{border-color:#1976d2;color:#1976d2;z-index:2}.btn-group{overflow:auto}.btn-group .btn{float:left}.btn-group .btn-ghost:not(:first-child){margin-left:-1px}.card{border:1px solid #ccc}.card .card-header{color:#333;text-align:center;background-color:#ddd;padding:.5rem 0}.alert{color:#ccc;padding:1rem;border:1px solid #ccc;margin-bottom:1.75rem}.alert-success{color:#4caf50;border-color:#4caf50}.alert-error{color:#f44336;border-color:#f44336}.alert-info{color:#00bcd4;border-color:#00bcd4}.alert-warning{color:#ff9800;border-color:#ff9800}.media:not(:last-child){margin-bottom:1.25rem}.media-left{padding-right:1rem}.media-left,.media-right{display:table-cell;vertical-align:top}.media-right{padding-left:1rem}.media-body{display:table-cell;vertical-align:top}.media-heading{font-size:1.16667rem;font-weight:700}.media-content{margin-top:.3rem}.avatarholder,.placeholder{background-color:#f0f0f0;text-align:center;color:#b9b9b9;font-size:1rem;border:1px solid #f0f0f0}.avatarholder{width:48px;height:48px;line-height:46px;font-size:2rem;background-size:cover;background-position:50%;background-repeat:no-repeat}.avatarholder.rounded{border-radius:33px}.loading{display:inline-block;content:\"&nbsp;\";height:20px;width:20px;margin:0 .5rem;animation:a .6s infinite linear;border:2px solid #e91e63;border-right-color:transparent;border-radius:50%}.btn .loading{margin-bottom:0;width:14px;height:14px}.btn div.loading{float:left}.alert .loading{margin-bottom:-5px}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.menu{width:100%}.menu .menu-item{display:block;color:#616161;border-color:#616161}.menu .menu-item.active,.menu .menu-item:hover{color:#000;border-color:#000;background-color:transparent}@media screen and (max-width:768px){.form-group label{display:block;border-bottom:none;width:100%}.form-group.form-textarea label:after{display:none}.form-control{width:100%}textarea.form-control{border-left:none;padding:.5rem 0}pre::-webkit-scrollbar{height:3px}}@media screen and (max-width:480px){.form{width:100%}}"),
- }
- file3 := &embedded.EmbeddedFile{
- Filename: "solarized-dark.css",
- FileModTime: time.Unix(1517162200, 0),
- Content: string(".solarized-dark{background-color:#073642;color:#78909c}.solarized-dark h1,.solarized-dark h2,.solarized-dark h3,.solarized-dark h4,.solarized-dark h5,.solarized-dark h6{color:#1e88e5}.solarized-dark h1 a,.solarized-dark h2 a,.solarized-dark h3 a,.solarized-dark h4 a,.solarized-dark h5 a,.solarized-dark h6 a{color:#1e88e5;border-bottom-color:#1e88e5}.solarized-dark h1 a:hover,.solarized-dark h2 a:hover,.solarized-dark h3 a:hover,.solarized-dark h4 a:hover,.solarized-dark h5 a:hover,.solarized-dark h6 a:hover{background-color:#1e88e5;color:#fff}.solarized-dark pre{background-color:#073642;padding:0;border:none}.solarized-dark pre code{color:#009688}.solarized-dark h1 a,.solarized-dark h2 a,.solarized-dark h3 a,.solarized-dark h4 a,.solarized-dark h5 a{color:#78909c}.solarized-dark code,.solarized-dark strong{color:#90a4ae}.solarized-dark code{font-weight:100}.solarized-dark .progress-bar-filled{background-color:#558b2f}.solarized-dark .progress-bar-filled:after,.solarized-dark .progress-bar-filled:before{color:#90a4ae}.solarized-dark table{color:#78909c}.solarized-dark table td,.solarized-dark table th{border-color:#b0bec5}.solarized-dark table tbody td:first-child{color:#b0bec5}.solarized-dark .form-group label{color:#78909c;border-color:#90a4ae}.solarized-dark .form-group.form-textarea label:after{background-color:#073642}.solarized-dark .form-control{color:#78909c;border-color:#90a4ae}.solarized-dark .form-control:focus{border-color:#cfd8dc;color:#cfd8dc}.solarized-dark textarea.form-control{color:#78909c}.solarized-dark .card{border-color:#90a4ae}.solarized-dark .card .card-header{background-color:transparent;color:#78909c;border-bottom:1px solid #90a4ae}.solarized-dark .btn.btn-ghost.btn-default{border-color:#607d8b;color:#607d8b}.solarized-dark .btn.btn-ghost.btn-default:focus,.solarized-dark .btn.btn-ghost.btn-default:hover{border-color:#90a4ae;color:#90a4ae;z-index:1}.solarized-dark .btn.btn-ghost.btn-default:focus,.solarized-dark .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.solarized-dark .btn.btn-ghost.btn-primary:focus,.solarized-dark .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.solarized-dark .btn.btn-ghost.btn-success:focus,.solarized-dark .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.solarized-dark .btn.btn-ghost.btn-info:focus,.solarized-dark .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.solarized-dark .btn.btn-ghost.btn-error:focus,.solarized-dark .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.solarized-dark .btn.btn-ghost.btn-warning:focus,.solarized-dark .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.solarized-dark .avatarholder,.solarized-dark .placeholder{background-color:transparent;border-color:#90a4ae}.solarized-dark .menu .menu-item{color:#78909c;border-color:#90a4ae}.solarized-dark .menu .menu-item.active,.solarized-dark .menu .menu-item:hover{color:#fff;border-color:#78909c}"),
- }
-
- // define dirs
- dir1 := &embedded.EmbeddedDir{
- Filename: "",
- DirModTime: time.Unix(1517162200, 0),
- ChildFiles: []*embedded.EmbeddedFile{
- file2, // "hack.css"
- file3, // "solarized-dark.css"
-
- },
- }
-
- // link ChildDirs
- dir1.ChildDirs = []*embedded.EmbeddedDir{}
-
- // register embeddedBox
- embedded.RegisterEmbeddedBox(`css`, &embedded.EmbeddedBox{
- Name: `css`,
- Time: time.Unix(1517162200, 0),
- Dirs: map[string]*embedded.EmbeddedDir{
- "": dir1,
- },
- Files: map[string]*embedded.EmbeddedFile{
- "hack.css": file2,
- "solarized-dark.css": file3,
- },
- })
-}
-
-func init() {
-
- // define files
- file6 := &embedded.EmbeddedFile{
- Filename: "favicon/android-icon-144x144.png",
- FileModTime: time.Unix(1517162200, 0),
- Content: string("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x90\x00\x00\x00\x90\b\x06\x00\x00\x00\xe7F\xe2\xb8\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\v\xfca\x05\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\x00\x00\tpHYs\x00\x00n\xba\x00\x00n\xba\x01\xd6ޱ\x17\x00\x004\rIDATx\xda\xed\x9dy|\\G\x95\xef\xbfuoo\xdaWK\xb2-\xefv\xbc/\xb1\x1d'\x8e\xe3x\xc9\x06I\x9c\x05\xb2\x91\x84!\x84\xc7d\x1e\x03\f\f\xcc0\xf3f\x06\x06>\xccJ\x12\xde\xc0\xc0\x9b\x85\x00\x81\f!\v\xb1\x9d\xe0,\x10'!vb'\xde\xe4}\xdf$Y\xb6dYR\xab\xd5{ߪ\xf7G\xf5\x95Z\xb2\x96^%H\xfc\xfb|\xfac\xab\xfbֽu\xeb\xfe\xee9\xa7\xce9uJ0\xc2X8e\x01\xc0x\xe0G\xc0\r\xc01\xe0\xc1\x9d\xc7\xeb\xde\x1b\xe9\xbe}P\x11\x1f\xf3\xc9\xc0\xf7\x81\x9b\xed\xef\xa5%\x99s\xf9\\\xfe\xe9\xff\xfe3\xb5\xe3k\x01xꉟ\xf3\xef\x8f~\x9fH$\x82\x10b\x0f\xf0\xc0\xce\xe3u\xfb\xec6\xc6H\xdf\f \x80\xab\x80\xcb\xe3\u007f\xe7\x01%\U0005bf04,#>\xaee\xc0\xff\x06\x96\xf7\xfaQ\x80\xdfׅ\xd7\xeb\x05 \x1a\x89\xd0v\xa1\x8dX,f\x1fq\x008\x9b\xd8\xe4\xf7\x81@\xc5\xc0\x1d@e\xfc\xef\x02\xa0z\xa4;\xf5AD\x9c<y\xc0\xc3\xc0\xff\x02\x8a\x12\u007f\x17Bp\xeel3\xdb\xde}\x9f\x80?@c}#{v\xee&\x16\x8b!\x84\b\x01;\x80\xf6\xc46\x8e߃\x1bZ\x02\xacL\xf8:\x1f\x18\x83&\xb7\x1c\xc9\xfe}\x90\x10\x1fk\ap'\xf0%\xa0\xb4\xef1B\bB\xc1 \xcf=\xf5,\xc7\x0e\x1f\xa5\xedB\x1b\a\xf6\x1e\xc00\f\x80f4\x81z=\x93\x11%P\xfc\xfa+\x80Q\t\xdf9\x81\x1a\xc0\x05\x84F\xb8\u007f\x1f\b\xc4\xc9#\x80\xab\x81\xaf\x00\xb5\x03\x1d+\x84\xe0l\xd3Y\x9a\xd65\x01`\x18\x06B\b\x80\x13\xc0\x91\x9d\xc7\xebz\x1d?b*,~S\x93\xd0\x04J$\xb2@\xab\xb0\xfc\x91\xea\xdb\a\x14s\x80\xaf\x03\v\x94R\x18\x86\x81i\x9a(\xa5.:P\b\x81a\x18\xb6\xe4\x01\xb0\xd0ҧ\xa5\xef\xb1#)\x81\f\xb4ꚧ\x94¾\xa98\xaaжP\xdb\b\xf6\xef\x03\x81\xf8\x8bZ\t\xfc\x19\xb0B)e\x94\x94\x96p˝\xb7RRR\u0086u\x1b\xa8?uږ2\x03!\f\xec\x05\xa2}\u007f\x18\x11\x02\xc5oj\x14\xf0\x11\xa0\xb8\xa8\xb8\x88\x82\xc2B.\xb4\xb6\x12\x8b\xc6\x00ʁ\u0091\xe8\xdb\a\t\xf1q.\x06\x1e\x01>\x0e8\f\xc3`Ս\xaby\xe4\v\x8f\xe0\xc9ϣ\xa0\xb0\x80\x1f<\xf6\xef\x84B\x83Z\v\x1dh\x15v\x11Fr\x16\xb6H)uuYE9\xff\xfb˟\xe3ۏ\xfd\x03\xabnX\x8d0\x04h\x02\x95]\x9aʧ\x8f\xf8ؙ\xc0]\xc0\x17\x80R\xa5\x14\x9e<\x0fW.\xbb\x92\xa2\x92b\x9cN'W\\\xbd\x84\xf2Q\x15\xfd\xaa\xb2\x04\x1c\x01\x8e\xf6\xb5\u007f`\xe4T\x98\x1b\xb8\x01E\xf5\x95W_ɚ\x8f\xddFAa\x01\x86!سk7\xe7\x9a\xce\x15\v!*3\xbeʇ\x1b\x02X\x04|\x9e\x04\xb7\x88i\x9ax\xf2\xf2\xba\x0fr\xbb\xdd8\x9d\xce\xc1Σ\x80\xedh)t\x11\x86]\x02\xc5ߌj\xe0*a\b1z\xech\xdcn7\x00\xe3'M`\xcc\xd81(\xa5\xf2\xd131\x91\xf6\x85>\xa4X8e\x81=Ɨ\x01\u007f\v̳\u007f\xd3\xd3\xf4\x10'\x8e\x9e\xc0\xb2,\x00\xeaO\xd5\xd3\xd1\xde1\xd8);\x81m@\xa4\xbf\x1fGJ\x02]\t̴\x8d\xe7D\x9a\xc4E\xa9\vM \x13\x88\xa5s\x81\x0f9ʀ\xcf\x017\xa1ǰ\x1b\xd1h\x94\xd7_\xfe\rs\x17̥\xb4\xac\x94\x17\x9f_Og{\xc7`Ft\x03p\x10-\x89.\xc2H\x10\xa8\x18\xb8\x15(F\xc1铧\xf1w\xf9))-\xe1\xf0\x81\xc3464\"\xf4\u074c\x89\xf7\xef\x12\x81\x92\xc4\xc2)\x97\x03\xca\t\xdc\x03|\x02\xfd\"\xf6\x82\x10\x82\xc3\a\x0f\xf3Ϳ\xfa\x06.\xb7\x9b3\xf5\x8dH\xa5\x06#\xd0~\xa0\xa9?\xfb\a\x86\x99@q\xd1:\x13-\x81\x04\x02\xb6o\xdd\xc6\xff\xfc\xf8)\xa6N\x9f\xca\xfa\xe7\xd6s\xe1\xfc\x05\xfbfFsə\x984\xf4\xd8\n\x01\xeaZ\xe0\xcb\xf4v\xce\xf6\x82R\x8a3\rg\x00M\xa8A\xc8\x13\x06\xea\x18\xc0\xfe\x81\xe1\x97@N\xb4\xe3p\xbc\xdd\xf9No'O=\xf1s\xdc\x1e7]\xbe\xae\xc4\xd9@\r:V\xd39\xcc}\xfc\x03\x86\x9c\x0e\xfc%pY⬪?\x82\f\xe1\xf7\xb1ц\xf6\xffX\x03\x1d0\xdc\x04\xaa\x04\xaeE\a\xf4\xbao$\x14\n\x11\f\x06\x13\x1d\x89\xa0ߠ\n\xe0\xcc0\xf7\xb1\x1b\x91-\xa7\x11خ|\x85D\xe1\xbaj\xfcHug@\xc4%{\t\xf0Y\xf4\v*&N\x9eȂE\x97s\xec\xf0Q\x0e\xec;0\xd44} \xb4\x03\x8d\x03\xa9/\x18F\x02\xc5or\x1czv\xd0\v\x03\x88\xd1\x12r\x1c\x95\xb7\xb64\fyL<r(\x94\x10ʔ\x83\xb71\x97\x8e\xcbew\xfbE|\\]\xc0\xbd\xc0\x03RJwyE9\x0f\xfd\xc9\xc3\xdct\xcbM\xecٵ\x9b\u007f\xf9\xfb\u007f\xe6\xf8\xd1\xe3}_\xd0dp\x9a>\xe9\x1b}1\x9c\x12\xc8D\xdb>\xe3\xa0{\xb65\x98(u\xa3%PV1\x00\x01\x9c\xe8\xd8[)Zu\x8eFK\xc0R\x03\xf2P\xca\x14\n\t\x04\xd0\xf6@3Z2\x9e\x8b\xff\x1d\x04d\u2e47\x99L\xcb\xd0A\xd2j\xa5\x14\xa3kǰ`\xf1\x02\xdc\x1e7s\xe6\xcfe\xe1\x92E\x9c8v\"\xd5s\xc6\xd0\xf6υ\xc1\x0e\x1aN\x02\x15\x03\xab\x00\x0f\x02\xf2\xf2\xf2\x89\x84\xc3X\x965\x10\x89\f\xa0x\xe1\x94\x05\f&B\x93E\x1f\xe2x\xd0\x04\xa9DK\xc49\xc0ltp\xb7\n\x1dFq\xa2I/\xe2\x1f\x15\xffXh\x9fH'Є\x9e\xe2\xee\x00v\xd2C\xaa\xb0\xb5\xa5!\xe7$\x8aK\x9fZtr\xd84\xd03\x93\x82\x82\x02\xf2\xf3t,\xda\xe5rQZV\x8a0\f\x94\x94\xc9\xda>\xa0_\x96]\be\rvа\x10(~\xa33\x80ņap\xd5\U000a5b3eq5;\xde\xdb\xc1\xc6\xd7^'\x1c\n\xf7wcN`\x02i\xe6\x05\xf5#i\x1ch\xe9\xb7\x10\x9d\x01\xb9\x00\x18\x1b\xff\x14\x91\x9a\xd32\x0f\xadbǡ\xa5\xea'\xd0d:\x05l\x06~\v\xd4Y[\x1a|v\x83l\x93)!\xce\xf5\xa7\xe8\xb4T\x01\xa0Ptz;\xf1\xf9|TVU\x12\f\x06i9\u05cc\xb4\xacTUX\x13\xb0\x0f9x\x9b\xe1\x92@\x02\xb8ZJY5n\xc28\x1ez\xe4\xd3,Z\xb2\x88\x05\x8b\x16\xd0X\xdf\xc0\ue77b\xfb#\x90\x03-\x11\xf2\x81\xaed/ԇ8\x0e49\xe6\x03ס\r\xf8\x19hɓM/\xbc;\xde\xd7Ihu\xf2\t`#\xf0\v`\x17\xe0\xd3\xfd\x12\x98KkӾ\x88\x8dES\x16\xa0t\xff\xd7\x00\x0f\xa13\x17\x000\x84\xe0\\\xd3Y\xea\xb6\uf8aa\xa6\x8a=\xbbv\xb3k{]:\x979\x044\xed<\xb1kЃ\x86\x8b@\x15\xc0\xb5J)\xf7e3.cʴ)\x00\x8c\x9f8\x819\xf3簷n\xef@\xed\xc6\xc7\xdb\x0eI\xa0>\xc4)D\xfb\x9b\xae\a\x96\xa2\xa5N\x15Z\xaa\xe5\x1a.`*:i\xfd\xa3\xf4\x10i\v(\u007f6T\x9b\x04\x84V\xbb_@\xdbl\xdd\x10\x86A\xa7\xb7\x93'~\xf8#6\xbf\xb5\x99\x86S\xf54\xd67\xa4*}\xec\xfc\x1f\xffP\a\xe6\x9c@qQ;\x05\x98)\x10\xb8=nLS{\xd7\r\xc3\xc0\xe3\xf1 \x84\x18h\x9aY\x03\x8cY8e\xc1\xe9\xfe\xec\xa0~\xd4T):Ev\r\xb0\x1a\xfd ]\x8c\f\f\xf4\v\xf0\x10zj\xfdK\xe0'\xc01\xbb\xdf\xe9\x10)!\x15\xe6\v\xe8`i\xbfhjl\xe2LÙ\xa1\x1c\x85\x03\xc1\x8b\xf6\xff\f\x19\x05\x18.\t4\t\xa8P(\x1a\xeb\x1biok\xa7\xa8\xb8\b\xaf\xd7˩\x93\xa7\x91\x96\xb4\xd38\xfa\xa2\x1cM\xbe-\x89_\xf6\xa3\xa6j\xd1\x0f\xe9&\xb4\xc4\x19\xcf\xefǂ\x01\xd0\xea{2\xf0\xe7\xe8\a\xfe$\xb0\x01\xe8LU\x1a%$\xc5\u007f\x8ax~π\x17M\x8f86\xea\xd1˫\x86\xc4p\x10ȍ6XK\f\xc3\xe0\xf0\xc1#\xac{v-7\xdfq\v[7oa\u05f6\x9d\x83\x99\xaf\xc5\xc0,\xb4\x14\x89@/\xf28\xd1ļ5>\x98s\xe9\xb3\xca\xe0\xf7\f\x1e4\xc1\x17\xa1#\xe4\xff\x0f\xa8OC\xa5-A\xaf\xa8(\xcba_\xcf\x00\x17\x92\x99\xfd\xe6\x94@\t\xe9\x94\v\x00S\bA8\x14\u2e67\x9eeӛ\x9bh=\xdfJg\x87w\xb07\xc5\x04f+T\xb9\xf5ޙsH\tڨ\x9e\x8b6\x8aoF\xaf'\xfbCʟ\xae\x04\xbe\x88\x96\xac\xff\x06l\xb5\xb64X0\xb8J\x8b\x8f\xe5\x04\xb4Ꚗ\xc3\xfe)t\x04\xbe_\xbb\xf3\xf9\xb9\x8fa(\x15\u007f\xe7հH\xa0I\xe8\x99O7\xfc~?G\x0f\x1dI\xcc\xf8\x1f\x10Rʙ\xd1Xl<\x86ю\x94\v\x81\xfb\x80\x1b\x81\x89\xe8\xb7\xfa\x0f\x11\xf9h\xa99\x05\xf86Z\xa5E\x06:8N\x9eB\xe0O\xd0/M.\xd5s\x10\xd8G\x82\x01\xfd\x8b9\xdf\"ώ>)I\x88\x12<\xf8L\x04\xae\\\x13\xc8@\x8b\xeb\xde3\x05!\xba\r\xe9\x81`\x1b\xd5%Eŵ\x1f\xb9z\xc5\xfdX\xd6}h\xe3x\x12}r\\\xfe@a\xa0g\x87\x8f\xc5\xc7\xe7)kK\x83o\x00)d\xa0g\x94\x0f\x92\x10G\xcc\x11.\xa0\xa7\xf0j\xfd\xfcǑR\x02\n\xa9$\x06\x86\x13py\xf0\x16\x82(E\xa9\xe2\\\x13\xc8\x03,F\xdbAI\xc1&NqA!\x8bg\xcfg\xd5\xe2\xa5y\x8bg\xcd{\x04\xa5l\xcf\xf0\a\r\x93\xd0\xcbm*\x80\x1fZ[\x1aڠG\x9d%8a\xff\x14\xed\xf4\xcc5\x1a\x80\x13\u007f\x93w?\xae\xfc|B]]&\x90o`\x14\xa3\x9d\xa7\x05\x80\a\x94\t\xb97\xa2\xcb\xd1!\x02@\x93Þ\xb2'\xaa.\x05()1\f\x83\xe2\xc2\".\x9f>\x8b\x1b\xae\xba\x96+fϧ\xb2\xb4\f\x01\x1e\x99^4\xf9\x0f\x055\xc0W\xd1/\xdcw\x89ǟ\x16L\x9a\az\"\xf1'ģ\xec9\xee\x87\x02\x8e\x8e6\xca[]\u0091\x17\xf2\xf9J\xd0\xc6zQ\xbcof\xc2q@\xee\t4\x15m\xab\xe0p8X\xbc\xf4\njkDze\xf3\x16\x1a\xeb\x1b\x11B \xe3\xc4\x19S]Õs.\xe7\x9a˯`\xde\xd4\x19\x94\x97\x94\"\x00\xa9\x14\x1fh\xea\xf4\xa0\x04\x9d\x00\xef\x04\xbe\xab\xf6v\x9c[x\xfb\n\x03m+=\xc0\xf08A\xa3\x15F\xf1\x99Ϻo\xae\x8d)\xab\x10\xad.\rz\xc7\x02{!g\x04\x8a\x8b\xde\xe9@\xb1R\x8aYsg\xf3\x95\xbf\xf9*\xb5\xe3jY\xf7\xdcZ\xfe\xed_\xfe\x8dp0ȸ\x9a1,\x9b\xbf\x98\x15\x8b\xafb\xee\xd4\xe9:\b\x18ϕ\xfe\x90\x10'\x11%\xe8\xc0\xa8\x03!\xfeA*9\xd6\x14\xe6gВ<\xe700B\x13\x8d\xea6\aFU\x14+Q\xda\r\xf8(r'\x81\x94\x10\b5\x1a0M\xd3d\xe9\xf2\xa5L\x984\x01\xd34Y\xbe\xe2\x1a\x0e\xbd\xb7\x87\nW!W\xcd]ȌIS)\xc8\xcbӤ\x91\x1f\xfaz\nEB\x88\xcf47\x9c\xa2\xaa\xacbTkG\xfb\x92\f\x1c\x82)\xc1\x89y~\xac\xa8l\x92)\xbc\xba\xb9#\x90Py\xc0$\xa5\x94\x03\x01e\x95e\x18\x12\xe8\nQ\x15\xf1\xf0\xa5\xbb\x1f\"\xcft\xe1t8Q\xa8\xb8\xb5\u007f\t\x00B\x88\x92s\xad\xe7?\x9f\xe7\xc9\x13J\xb59\x87\x8b@n\xe1\xac\x1fkVtHT\xd2\x17̺?\xc1\xdaҀz\xef\fQ+V!\xa5\x9c\xe4t8Ą\x9aZʤ\auڋ<ގ8\x1f\xa4ȕ\x87i\x9aH%\xd3M\xb7\xfc@B\b\