From ceede679a82c5e596ae7664afe4d10cbaf1e86c8 Mon Sep 17 00:00:00 2001 From: "Serge A. Zaitsev" Date: Sat, 18 Nov 2017 14:20:35 +0200 Subject: [PATCH 1/2] ui: asynchonously bind go app struct to js --- cmd/glitch/app.go | 36 +++++++++++++++++++++--------------- cmd/glitch/assets.go | 2 +- ui/app.js | 15 +++++++++------ 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/cmd/glitch/app.go b/cmd/glitch/app.go index 8e2080e..eeef7d3 100644 --- a/cmd/glitch/app.go +++ b/cmd/glitch/app.go @@ -2,6 +2,7 @@ package main import ( "io/ioutil" + "log" "os" "path/filepath" "time" @@ -67,13 +68,28 @@ func NewApp(config *Config) (app *App, err error) { Height: windowHeight, Resizable: true, URL: url, + ExternalInvokeCallback: func(w webview.WebView, data string) { + if data == "__app_js_loaded__" { + app.sync, err = app.webview.Bind("app", app) + if err != nil { + log.Println(err) + } else { + w.Eval(`init()`) + go func() { + for range app.notify { + app.webview.Dispatch(func() { + app.AudioDevice = app.audio.Current().ID + app.AudioDevices = app.audio.Devices() + app.MIDIDevices = app.midi.Devices() + app.sync() + }) + } + }() + } + } + }, }) - if app.sync, err = app.webview.Bind("app", app); err != nil { - app.Destroy() - return nil, err - } - for midi, connect := range config.MIDI { app.SelectMIDI(midi, connect) } @@ -83,16 +99,6 @@ func NewApp(config *Config) (app *App, err error) { } func (app *App) Run() { - go func() { - for range app.notify { - app.webview.Dispatch(func() { - app.AudioDevice = app.audio.Current().ID - app.AudioDevices = app.audio.Devices() - app.MIDIDevices = app.midi.Devices() - app.sync() - }) - } - }() app.webview.Run() } diff --git a/cmd/glitch/assets.go b/cmd/glitch/assets.go index ab31153..1f4636c 100644 --- a/cmd/glitch/assets.go +++ b/cmd/glitch/assets.go @@ -25,7 +25,7 @@ func bindata_read(data []byte, name string) ([]byte, error) { return buf.Bytes(), nil } -var _app_js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\x7d\x73\xdb\x36\x93\xff\xdf\x9f\x62\xe3\xde\x85\xd4\x13\x8a\xb2\x9d\xb4\x75\x95\xd3\x75\x1c\xc7\x69\x3d\xd7\xbc\x4c\xec\x3c\x69\xcf\xf1\x79\x20\x72\x25\xa1\x06\x01\x16\x00\x6d\x2b\x91\x3e\xc7\x7d\xa0\xfb\x62\x37\x00\xf8\x4e\xca\x76\xdb\x24\x77\x9c\x69\x43\x81\xfb\x06\xe0\xb7\x8b\x5d\x00\xf6\x32\x85\xa0\xb4\xa4\x91\xf6\x9e\x6e\x6d\x5d\x11\x09\x0b\x98\x40\x4a\x23\x11\x8b\x24\x5c\x3c\xdd\xda\x9a\x65\x3c\xd2\x54\x70\xa0\xea\x3d\x4e\xff\x49\xf1\xda\x1f\xc0\xa7\x2d\x00\x2d\x97\xf6\x5f\x80\x6b\xca\x63\x71\x1d\xe2\x8d\x46\xc9\x09\x0b\x29\xbf\x12\x97\x78\xe1\x7b\xde\xe0\xa9\x25\x90\xa8\x33\xc9\x41\xcb\x0c\x4d\xc3\x1a\x22\xa2\xa3\x05\xf8\x38\xc8\x25\xe4\x04\x33\xc2\x94\xa3\xd8\x5a\x6f\x6d\x8d\x46\x10\x31\xc2\xe7\xc3\x99\x90\x09\xd1\x20\x66\xb3\xca\x9a\x77\xc7\x3e\x49\x53\xc7\x9f\x73\x2f\x7c\x2f\xa6\x57\x5e\x00\x9f\x22\x46\x94\x1a\x83\x17\x09\xae\x09\xe5\x28\xbd\x75\x60\xf5\xe4\xcf\x35\x4e\x7f\x46\x12\xa3\xb4\x32\x1a\x9f\x48\x9a\xbe\xb7\xdd\xb1\x9f\x06\x4f\x8d\x21\xa5\xd2\x8a\xaf\xad\x78\x61\x9b\xeb\xba\xaf\x71\x4a\xd2\x74\xa8\x16\xe2\x9a\xb7\xd4\x2f\x7c\x2f\xf5\x02\xe0\x19\x63\x8d\x76\xfb\x65\xb1\x5b\x7c\x02\xef\x9b\x39\xa3\x3a\x5a\x78\x83\x16\x19\x80\x37\x5d\x02\x27\xf4\x0a\x95\xc8\x78\xdc\x22\x58\xf8\x5e\xc6\x36\x2a\x60\xb4\x54\xb0\xf0\x3d\x62\x6c\xd6\x44\xce\x51\x8f\xc1\xbb\x98\x32\xc2\x2f\xbd\x00\x16\x12\x67\x63\xf0\x16\x5a\xa7\xe3\xd1\xa8\xd2\x14\x46\x22\x19\xa5\x52\xc4\x59\xa4\xd5\x28\x37\x6f\x1d\x80\x47\xa6\x22\xd3\xde\xa0\x6d\xe9\x5f\xd0\xa7\xc6\xa3\x91\xd5\x15\x31\x91\x39\x85\xb5\x9e\x1a\x5d\x78\x43\x92\x94\xa1\xfa\x6c\xea\xe6\x54\x2f\xb2\x69\x4b\x55\xbd\x77\x8e\xe0\xab\xe8\x1b\x4d\x99\x98\x8e\x12\xa2\x34\xca\xd1\xc1\x9b\xe3\x30\x71\x9d\x5e\x20\x4b\xbd\xc1\xa0\x33\xd3\x2d\xc8\x3b\x5f\x1c\x6a\xaa\x19\x0e\xa7\xa4\x8d\xfc\xfb\xb0\x0c\xa7\x99\xd6\x82\x7b\xeb\x9e\xde\x7e\x0d\xd6\xb6\xd7\x35\x5d\xf2\x76\x8f\x37\x2e\xe7\x24\xb7\x3a\x8e\x31\xd5\xa2\xc7\xdf\x13\x11\x13\x66\x9a\x43\xfb\xf6\x8a\x24\x08\x93\x09\x78\x0a\xb5\xa6\x7c\xae\xbc\xc0\xe8\x0f\xa0\xf8\xed\xc2\x42\x53\xb4\x94\x42\x3e\x23\x3d\xc2\xb5\x10\x6c\x9a\x7f\x68\x75\xaa\x66\x8f\xed\x91\x09\xbd\x9a\xc6\x4f\xf3\x57\xc1\x23\x89\x44\x23\x4c\xa0\x60\xf1\x91\x15\xe1\xf2\x50\xc4\xf8\x92\x1a\xb5\x61\x8c\x33\xca\xf1\xa5\x88\xd1\xdf\x76\x00\xda\x0e\x2a\x96\x82\x01\xca\x26\xd0\xe2\x12\x39\xfd\x88\xbe\xd2\x12\x49\x12\x80\xd2\x44\x63\x45\xe8\xf4\x47\x30\x01\x47\x10\x72\xbc\xd1\x7e\x1e\xc8\xcd\x43\x67\xe0\x8f\x3e\xc4\xa3\x50\xa3\xd2\x7e\x34\xa8\xb3\x42\xc1\x84\x44\xbf\x5f\x50\x86\xfe\xe8\xec\x43\xfc\x21\x3c\x1f\xd5\x04\x94\xd3\xb7\xcd\xb3\x64\x8a\x72\xbb\xfa\xb4\x06\x64\x0a\xad\x8a\xc8\x4c\xc3\xf6\x37\xdb\xbd\xe2\xd5\x25\x4d\x4f\xc5\x11\x8f\xfd\x5e\xb9\x91\x48\x12\xe4\xba\x5f\xf0\xe8\x6c\xf8\xe8\x1f\x1f\x46\xff\xfa\x70\xf5\x5f\x0f\x26\xff\xf6\xef\xc1\xf9\x86\x9e\x14\xc2\x44\x8a\x92\x68\x71\x9b\x99\x9e\xef\xc1\x6a\x05\xee\x7d\xe0\xdd\x21\x67\xb3\x98\x7f\x69\xb1\x9a\x2f\xd5\x80\x9a\x51\x7f\x34\x6a\x59\x59\xc9\xbf\x22\x92\x92\x29\xc3\xe1\xe3\xed\xfa\x98\xac\x7b\x4c\x99\x66\x94\x69\xca\x3b\x96\xdc\x31\x91\xd7\x1f\xe2\x8b\x6f\xce\x1f\x8d\x06\xbd\x64\x27\x29\x89\xb0\x39\x1f\x35\xfb\x53\xc4\x4b\x7f\x90\x0f\x56\xbb\x0b\x06\x71\xaa\x42\x5c\x94\x49\x89\x5c\x37\x65\xe5\xc0\x5b\x7c\x5c\x29\xca\x57\x5a\xd2\x95\x22\xd7\x2b\xf5\x87\x5c\xb1\x74\xb6\x5a\xa4\xb3\xd5\xd4\xfc\xa7\x66\x2b\x2d\xf7\x77\xf6\x57\x29\xcb\xa2\xcb\xd5\x2c\x59\xc5\xc8\xc8\x72\x85\x3c\x5e\x25\xf4\x66\xa5\xf0\x8f\x15\x13\x22\x5d\x91\x95\x5a\xb1\x95\xcc\x27\x5f\x75\x86\xb5\x1a\xad\x4b\x5c\x5e\x0b\x19\x6f\x37\xad\x59\xdf\x3e\x09\x7b\x77\x4e\x42\x41\x5a\xc7\xd5\x56\xf3\xdf\x9c\xb4\x32\x4c\x69\x22\xf5\x89\x71\xd8\x71\x9f\x93\xf7\xf2\x80\x0d\x44\xce\xe9\xc7\xe5\x5b\x3d\x4e\xad\x6b\x16\x54\xed\x96\xb2\xa6\x66\x63\xbc\x68\xe3\x34\x07\xc2\xa0\x30\xc5\x2c\x8e\x3d\x5e\x6a\xe5\x84\x1b\xc2\x51\x8f\x45\xb9\x95\xeb\xfc\x9b\x09\xd9\x2e\x88\xc2\xa4\x1e\x10\x67\x52\x24\xa7\x78\xa3\x0f\x24\x12\x1f\x59\x50\x1a\xca\x28\xc7\x57\x36\xe0\x28\x18\xdb\x5c\xb4\x90\xac\x17\x98\x20\x8c\xc1\x4b\x88\x46\x49\x09\xf3\x8a\x2f\x24\xd3\x62\x26\xa2\xac\xcd\x91\x98\xfc\xf5\x99\x24\xd1\x25\x6a\xd5\xfc\x64\x58\x0e\x99\x50\xd8\xff\x59\x45\x52\x30\xb3\x28\x9c\xe8\x25\xb3\x4a\x15\x35\xc9\x4c\xae\xb2\xdb\xbb\x50\xa1\xfe\x27\x61\x19\xda\x45\x2a\x26\x9a\x84\x1a\x6f\x74\x97\x4e\x70\xdf\x8b\x16\x84\xcf\xd1\xab\xad\x00\x51\x12\x80\x6b\xad\xa6\x2c\x62\x48\xe4\x29\x4d\x50\x64\xda\xd7\x34\x2e\x47\x5b\xd3\xd8\x78\x21\xea\xe2\x63\x2f\xc6\x8c\x4e\x27\xd2\x8c\xb3\x1f\x25\xe1\xbc\x30\x71\x50\x8a\x5a\x07\xb0\xf7\xed\xce\xa0\x3e\x67\xeb\x62\x71\x43\x06\x93\x9e\xb5\xdb\xf5\xe3\xe2\xe2\x5a\x92\x34\x45\x39\x9c\xd1\x1b\x8c\xef\x91\xbf\xb4\xf9\x44\xa6\x3b\x19\xff\xfd\x38\x29\xef\xd6\x0a\x25\xaf\x19\x75\x22\x91\xf4\x09\xa8\x7d\x2b\x56\xee\x71\xf9\x66\x32\x1a\x3b\x00\xc6\x4d\x6a\xb0\x7d\xf8\x10\x1a\x53\x0a\x0f\x26\xf5\xf9\xac\x0d\x6a\x3e\xf8\xf7\x03\xc5\xba\xca\x8f\x90\xb5\x92\x8e\x7a\xa6\x72\x7b\x22\x65\x49\x87\x31\x25\x4c\xcc\x3d\xe3\x95\x4b\x86\x63\xf8\x14\x53\x95\x32\xb2\x1c\x43\xa5\xd8\x52\xc2\x8f\xe0\x4d\x99\x88\x2e\x3d\x03\x69\x2e\x38\x7a\x83\x75\x73\x20\x0b\xe7\x3a\x8e\x0c\x52\x3f\x64\x47\x3b\x3b\x3b\x5e\x3b\x2d\x72\xe9\xd8\x15\x55\x74\xca\x30\x4f\xbd\x4c\x15\x87\x5c\xab\x0d\x16\x37\x26\xab\x30\xdf\xca\x19\x4e\x49\x74\x39\x97\xb6\x6e\x68\xce\x69\xb7\x3b\xb9\xca\xde\x7e\x34\x79\x05\x8f\x18\x8d\x2e\x9b\x01\x18\xca\x0c\xd2\x1f\x3c\x85\x06\xc7\x3a\xb8\x97\xb1\xde\x5d\x5a\xb0\xbb\x42\x61\x98\x4a\xbc\x42\xae\x9f\xe3\x8c\x64\xac\xb3\x62\x1a\x0a\xa5\x45\xfa\x46\x8a\x94\xcc\x89\x33\x76\xf3\x32\xb6\xae\x8d\x75\x6b\x5e\x1a\xe9\x6f\x99\xb0\x2a\x5b\x87\xbd\x25\x1a\xcd\xea\x7d\x76\x5e\x07\xb9\xc5\x06\xc9\x62\x2a\x9e\xe3\x15\x8d\x50\x9d\xf5\xb5\x9e\x17\x9d\x6a\x8a\xfa\x13\x02\xc2\x1a\x67\x0b\xfe\xe5\xb0\x77\x0a\xe1\x2e\xde\x1d\x60\xf2\x32\xde\xd4\x5b\x27\x47\xa7\xa7\xc7\xaf\x7e\x3a\xf1\xee\x8c\x3f\x75\xd6\x61\x64\x42\xbf\x0b\x03\x77\xa2\xc4\xa8\xf9\x9f\xff\x6e\x57\x95\x9b\x14\xe4\x53\xd3\x17\x10\x67\x42\x26\xfd\xf5\xfe\x66\x71\x86\x67\x68\x9c\x23\xdd\x14\xf0\x18\x99\x22\xdb\xc0\x58\x7c\x9b\x09\x69\xaa\x2e\x33\x1f\xc3\xd8\x4e\xc8\x50\x21\xc3\x48\xdb\x31\x3c\x30\xed\xe0\xda\xc7\x3d\xbb\x18\x56\x4d\x4e\xdf\x76\x8e\xfc\xa1\xf1\x06\xf9\x3d\xc2\xda\xee\x6f\x2d\xbd\x32\x61\xb2\x9f\xda\x7e\x1a\x83\xe7\x3d\xea\x43\x56\x2f\x8b\xe0\x6e\xe5\xdb\x98\x7e\xd5\x1e\x23\xd4\x19\x6b\xc7\xc1\x7f\xa4\x17\x54\x85\x56\x69\x50\x21\xbc\x82\x6f\xad\x71\x9a\xcd\x66\x28\x4f\xe8\x47\xec\x78\xb4\x7d\xd6\xdd\xc6\x75\xd0\xef\x35\x61\x42\x52\xbf\xa7\x86\x6c\x3d\x95\xcb\x88\xd4\x50\x9a\xf9\xa8\xc6\x07\x59\x48\xe3\x75\x00\xc8\x42\x4e\x92\x5e\xa3\xd6\xed\xbd\x09\xf8\x4a\xe0\x73\x03\x38\x94\x44\x37\xb0\x77\x62\x9b\xc1\x34\xff\x1d\xe8\xf5\x48\xff\x7c\xc8\xeb\x03\xc1\xe7\x46\x5d\x2f\xb4\xa1\x1f\x8b\x7f\x0d\x76\xb5\x00\xfc\xf7\xc1\x86\xcc\xc2\xec\xff\x15\xc2\xdc\xb0\x0c\x15\xfd\xd8\x40\xd8\x33\xdb\x0c\xa6\xf9\xef\x20\xac\x47\xfa\x17\x40\x58\x35\xb5\x5f\x09\x61\xbd\x01\xae\x06\xbb\x3f\x83\xb0\xb3\xef\x9e\x04\xb0\xbb\xb7\x6f\x6a\x8a\xef\x02\xf8\x76\x77\x2f\x80\xdd\x9d\xbd\x27\x01\xec\xed\x3c\xd9\x0f\xe0\xc9\xce\x0f\xdf\x05\xb0\xbf\xfb\xc3\xde\xf9\x67\x43\x20\x3c\x82\xf2\xfc\xa2\x69\xcf\xa0\x8b\xc3\xcd\x99\x06\x7c\x61\x8c\x1a\x20\xbe\x3c\x7e\x7e\x9c\xaf\xb2\x6a\x23\x12\x37\x5b\xe0\x50\xd4\x67\x01\x54\xb3\x98\xd0\x98\x16\x2b\x0a\x43\x3e\xd7\x0b\x98\x4c\x60\x07\x7e\xec\xc7\x48\x73\x40\xc0\xf3\x4d\x2a\x3d\xf0\x06\x30\xde\x8c\xa9\x8e\x9e\xd6\x54\x06\x40\x37\x62\xd2\xe5\xa3\xb6\x7c\xf5\x8c\x88\xa1\xf7\x88\xf6\x02\x0c\xe0\x1e\xe9\xe1\xa6\x2e\x95\xd3\x61\x32\x2e\x6f\x0c\x66\x4d\xbc\x93\xcf\x72\x52\x9e\x66\x1b\xc3\x40\xe7\xd1\xcb\xd4\xac\xbb\xd1\x02\xa3\xcb\xa9\xb8\xe9\xf7\xf0\xce\x63\xc9\x31\x36\x08\x0e\x23\xc1\x39\x46\x1a\xe3\xfb\xb1\x9a\x45\xdd\x74\xe7\x7e\xd4\x26\x6c\xdd\x97\xf6\xcf\x04\x96\xce\x53\x45\x1a\x03\x71\x3f\xcf\x3e\x02\x78\x50\xef\x61\x7f\x20\xe9\x3c\xf7\x9a\xa9\xce\xb9\x45\xef\x53\x64\x41\x1b\x42\xd8\x60\x30\xe8\x9c\x61\xd4\x4f\x02\xca\xf2\x89\x46\x82\x9b\x6a\x27\xaf\xee\xe3\x78\xdc\x2d\x92\x77\x9f\x7c\x5b\x78\xf4\x4c\xb0\x18\xe5\xeb\x14\x79\x0f\xdd\xde\xe1\x7e\x41\x67\x2a\xda\x03\x29\xc5\x75\x0f\xd9\xce\xe3\xef\x4b\x32\x92\x29\xec\x25\x79\x52\x90\x98\xda\xb1\x8f\xe2\x49\x29\xa4\xa8\x0b\x7b\xa8\xf6\x9f\x95\x16\x2d\x90\xf5\xc9\xd9\x7f\xf1\xdc\x51\xd8\x9d\xa1\x8d\x5b\x11\xf9\xd8\x75\x0f\x51\xef\x7d\xc8\xd9\x57\x7c\xd7\x56\xd4\x5c\xc1\xc5\xc5\x54\x73\x88\x51\x5d\x6a\x91\x0e\x05\x67\xcb\xae\xe3\x95\x65\x9d\x81\x26\xc7\xeb\x17\x94\x61\x38\xa5\x3c\xee\x1e\xfe\xd8\x95\xcb\x4e\x71\x48\xe2\xf8\xee\xa3\xc3\x2f\x64\x24\x13\x24\xbe\x9f\x95\x15\xbe\x3e\xab\xb1\x9b\xed\x33\xe6\x69\x31\x9f\x33\x7c\xc3\xc8\x72\x4a\xa2\xcb\xdb\x8c\xac\xf2\x0c\xaa\x0c\x3d\xe5\x73\xf8\x31\x37\xdd\x62\x19\xc6\xc5\xaf\xc2\x01\x7a\x17\xea\x2f\xd0\x11\x17\xa8\xb4\x48\xef\x1e\x64\x43\xf5\x7f\x82\x85\x0d\xfb\x10\xd5\x41\x67\x7b\xdf\xaa\x61\x75\x4e\xf4\xb5\xc6\xb3\x61\x6c\x7e\xbd\x44\xa4\xc8\xfd\xbf\x7c\x84\x7e\x5b\xef\x4c\x78\xea\x86\xec\x46\xb8\x32\x84\xed\xfd\x47\xda\xc8\xa7\x72\xea\xa1\x15\x59\xee\x98\x56\x3b\x8c\x1e\xe5\x8c\x72\xbb\x37\x2f\xb8\x3e\xb1\x87\x31\xde\xe3\xbd\xf4\xc6\x0b\xec\xd1\xc4\xcf\x48\xe7\x0b\x3d\x06\xef\xbb\x27\xe9\x8d\xb7\xce\x8d\xb3\x36\x75\x2e\xc2\xf0\x9a\x99\xef\x71\xfa\xf6\xcd\xa1\x5f\xad\x2a\xcf\x8f\x5e\x1c\xbc\xfb\xe5\xf4\xe2\xe4\xf5\xab\x9f\x60\x02\xdb\xf6\x7c\x69\x34\x82\xe7\xe2\x9a\x9b\x60\x00\x44\x25\xe1\xef\x0a\x84\x84\xf0\x9a\xa8\x04\x22\x21\x71\xab\xbc\xc5\xf3\x52\xc4\x19\x43\x98\xb4\x7e\xaf\x56\xf0\xa9\xdc\xc0\x57\x91\xa4\xa9\x86\x09\xc4\x22\xca\x12\xe4\x3a\x74\x3b\xdd\x47\x0c\xcd\x2f\xdf\x73\x04\x2e\x7d\x76\xef\xa1\xc9\x69\x4c\x76\xa6\xf1\x46\x8f\x7e\x27\x57\x24\xa7\xa9\x91\x10\xb5\xe4\x11\x4c\xaa\x6b\x40\x74\x06\xbe\xf7\x1e\xa7\x07\x4a\x61\x32\x65\x4b\x0f\x28\xcf\xed\x2a\xf7\x0d\x1d\xab\x92\x86\xd1\x73\xf3\x3f\x34\xdd\x44\x19\xfe\xae\x3c\x77\xdd\xa8\x76\xb8\xd9\x4b\xef\x46\xc4\x2b\xb6\x0f\xcb\x5e\xcd\x51\xe7\x5d\x52\xcf\x96\xa7\x64\xfe\x8a\x24\xe8\xee\xfa\x78\x83\xb3\x9d\xf3\x90\xa4\x29\xf2\xf8\x70\x41\x59\xec\x3b\xc1\x83\xa7\x5b\xf9\x18\xd9\x62\xe8\x50\x70\xbb\xb3\x3f\x01\x8e\xd7\xc5\x88\x1e\xd4\xbe\xb8\xed\x58\x5b\x15\x99\xd0\x56\x26\x03\xe6\xdb\x18\xbc\xdc\x45\xca\x80\x37\x76\x63\xe3\x5a\xeb\xbb\x3c\x63\x38\x3b\x77\xad\xb5\x04\xba\x6a\xac\x6a\xb0\x71\xc3\xb0\xce\xc6\x43\x4d\x66\xa1\x7e\x6d\xbb\x64\x4d\xa4\x9c\xea\xfa\x8d\x84\x62\x12\x1c\x46\xc2\x28\x22\x8c\xf9\xa5\x93\xe5\xa3\x7b\x61\xb8\xca\x10\x71\xe6\xb9\x43\x7f\x2f\x80\xe2\xed\xbc\xf2\xcb\xb3\x4d\xc6\xc1\xce\x79\x9e\x6d\x99\xb1\x35\xb8\x6e\xe8\x2c\x54\x39\x18\x56\xca\xce\xcd\x7f\x39\xa3\xed\xc1\x1c\x26\xf0\x93\xfb\x6d\xc0\xc5\xc9\x15\x9d\x13\x2d\x64\x28\xf1\x8f\x0c\x95\xcd\x33\x0f\xa2\x08\x95\xaa\xb2\xd4\x5b\x88\xfc\x41\xa8\x17\xc8\xab\x2a\xc5\x8c\x7e\x3d\xbf\xad\x8e\x5e\x78\x96\xa0\x24\x1a\x5b\xe9\xaf\xcd\x03\x4d\x71\x60\x12\x41\xc3\x1d\xba\x5f\xae\x48\x56\xcd\xed\xfa\x99\x90\xe0\x97\x1c\x30\xc9\x39\x8b\x2b\x1a\x79\xf3\xc3\x87\xf0\xc0\xbe\x85\xb1\xe0\xd8\xc9\x51\x7b\x79\xdb\x39\xb9\xe3\xb7\x36\x84\x82\x1b\xbb\x12\x54\x8a\xcc\x1b\x17\x52\x92\x6e\x26\xdf\x8f\x84\xea\x29\x26\xca\x48\xbc\x0d\x13\x7d\x6f\xe7\x7d\xb9\xf9\xd9\x4f\x01\x24\xd6\x77\xce\x76\xce\xcb\xd7\xdd\xea\x75\xef\xfc\xbc\x7d\xe4\xd1\x7f\x32\x5f\x6b\xae\x4d\x56\xd5\x68\x27\x47\x70\x7b\x3e\xed\x6a\x1a\x98\x54\x94\xe5\xb9\x67\x71\xe4\xb9\x55\xa2\xf5\xe0\xdd\xf3\xe3\xd7\x17\xcf\xde\xbd\x78\x71\xf4\xf6\xe2\xe4\xf8\x3f\x8f\x60\x62\x77\x2f\x2a\x3c\xa7\x51\x02\x93\xa6\x63\x3a\x24\x9f\xd8\xa0\xf2\x46\x0a\x03\x36\x21\xfd\x8e\xa8\x00\x76\x02\xd8\xad\xb9\x06\xe1\x84\x2d\x15\xca\x7e\x79\x07\xf9\x57\xdf\xc5\x29\x28\xc9\xc3\xd9\xcc\xae\x49\x0d\xd3\xca\x8f\x2a\x11\x42\x2f\x28\x9f\x9f\xd2\x04\x0f\xed\x18\x70\x03\xa1\x9d\x16\x5d\x5e\x93\xf9\x0d\xcd\x31\x2a\x4d\xb9\x3d\x7c\xca\xed\x4c\xa3\x24\x14\xdc\x12\xa5\xae\x6b\x30\x81\x8c\xbb\xab\x4c\x71\x6e\x99\x75\xd7\x7a\x6f\xf2\xd7\x9a\x33\xbb\x61\x4b\xa3\x24\x67\x31\x1e\x9d\xc7\x58\x26\x22\xab\x31\x5c\x10\xb5\xa8\x60\x5a\x06\xda\x30\x0f\xcb\x31\x46\x22\xc6\x77\x6f\x8f\x0f\x45\x92\x0a\x6e\x16\xaf\x3e\x09\xa1\xca\xa6\x4a\x4b\xca\xe7\xfe\x6e\x51\xf6\xd5\x6e\xef\x18\x5a\x76\xa2\x85\x24\x73\x34\x8b\xc6\xb1\xc6\xc4\xf7\xf0\x26\x95\xde\xe0\x16\xe5\xb7\xb1\x35\x74\x6c\x94\x50\x5f\xeb\x0b\xdc\x6d\x1a\x09\x85\x44\x46\x0b\x98\x4c\x26\xe0\xfd\x68\x72\x12\xaf\x65\x5a\x33\x15\xf7\x07\x75\x81\x96\xa0\x76\xe8\xdf\xb4\xa4\x1e\x61\x25\xf2\xd8\x01\xac\xb1\x74\x48\x9c\x49\x54\x8b\xd6\xea\x51\x23\xb0\x27\xda\xb2\xfe\xdd\xd5\xfa\x6e\xb3\xb0\x67\xa1\x81\x87\x0f\xb7\xee\x0e\x3b\x45\xc0\x51\xd8\xbf\x06\xb9\x59\xdd\x1c\x65\xce\xdc\xb2\x11\x40\xcd\x9a\xf3\x76\xe7\xaa\x81\xa9\xdb\x6f\x47\x26\x37\xdc\xb8\xa6\x6c\xaf\x5a\x9d\x95\x32\x12\x49\x4a\x19\x36\xa2\xdf\x7d\x8d\x2d\x0d\x35\x6a\xdd\xff\xf3\x8d\xba\x22\xfe\x19\x50\x48\x78\x30\x81\x9d\x3e\x4c\xba\x63\xfc\x09\x78\x27\x4b\xae\xc9\x8d\xbb\x2b\xe0\xdd\x01\xc3\x82\xa9\x7e\xc5\xa7\xcf\x7f\x6c\xa4\xec\x78\x5a\x0d\x3a\xd0\x74\x06\xd5\x70\x06\xd7\x9b\x2e\x1e\xeb\x9e\x60\xfe\xb9\x1b\x85\x79\xc5\xde\x45\x61\xfe\xbd\x28\x96\x37\x12\x98\xf2\xed\xce\x0c\xa8\x98\x4e\x89\xbd\xa8\x33\x49\x89\x9b\xac\xfa\xcc\x54\x3d\x2a\xb3\xbd\xaf\xe9\x9f\x4d\xe1\x7d\x5d\xec\x31\x10\x26\xf0\xa0\xa7\xf9\xcf\x74\xca\xac\x05\xc5\xb2\xd1\x08\xf9\xd5\xa5\xa4\x82\xac\xb3\x64\x38\x7a\xbb\xd6\x10\xc6\xaa\xfd\x03\xd3\x7e\x4b\x00\x35\xb2\x62\xaa\x0a\xad\xf7\x50\x54\x5b\x9b\x5a\x43\xbe\x61\x34\x1b\x46\x35\xee\xf0\xd6\x03\x02\x43\x6e\x1c\x23\x14\x99\x4e\x33\xed\x8e\x93\x72\x9f\xad\x16\x74\x43\x62\x08\xff\x01\x2f\x98\x20\xfa\xf1\xde\x81\x94\x64\x19\x3e\xfb\xed\xf4\xe8\xe4\xe2\xcd\xd1\xdb\x8b\xa3\x5f\x8e\x5e\x1e\xbd\x3a\xad\x65\x13\x55\x9c\xb9\x48\x08\x63\x22\xf2\x79\x2d\x43\x58\x20\x49\xf3\x82\xe4\x1d\xe5\x7a\xdf\xca\xf3\x73\x86\x9f\x8f\x0e\xde\xbc\xdb\xcf\x4f\x8b\x02\x48\x03\x28\x58\x0d\x9b\xf1\x4b\xbf\xc5\xe8\x48\x73\x8e\x41\x91\x57\xdc\x1e\xe7\x66\x94\xb1\xbf\x91\xfd\x95\xa1\xce\xda\x34\x5d\x6a\x7c\x3d\x9b\x29\xd4\x81\x19\xa8\x00\x76\xeb\xa5\x82\x44\x95\xb1\xa2\x00\xab\x8f\xa0\xef\x98\xf3\x8e\xf6\x49\xca\xa5\xb4\xe6\x27\x12\xe9\xf2\x54\x1c\x2e\x08\xe7\xc8\x7c\x27\xde\x66\x61\xc5\x65\xb7\x62\xe8\x67\x12\xd1\x4f\x6b\xc8\x70\x1f\xce\x3c\xc1\xdf\x66\x5c\xd3\x04\x8f\x39\xd5\x94\x30\xfa\x11\x63\xef\xbc\xc0\xb3\xa9\x96\x5a\x30\x2e\xfe\x7c\x66\x41\x95\xdd\xa2\xb0\x79\x5e\x9a\x3e\xdd\x2a\x76\x46\x5c\x5d\xdf\xf1\x59\xe3\x81\xb5\xbf\xda\x29\xa0\x57\x96\xb7\x53\x11\x2f\x43\xbb\x81\xf1\x0b\x55\x3a\x24\x71\xec\x7b\xc5\x6e\x12\x49\x53\x97\x84\x34\x3c\x88\xa4\x05\x74\x8a\x6d\x07\x57\x33\x6f\xb9\xbd\x7a\xe7\x0d\x7d\xc1\x23\xef\x82\xbd\xc1\xe6\x2a\xea\xda\x9f\x19\xa5\x44\x47\x8b\x4e\xb5\x60\x68\x05\x8b\x5f\x89\x18\xf3\xcd\xbf\xfc\x17\x4c\xf2\xbf\xfe\xa9\x0e\x19\x07\x83\xa0\x2e\xbb\x36\xe8\xe5\x4e\x57\x3b\xb3\xa8\x5f\xaa\xab\x5d\xfd\xb7\xeb\x7c\x75\xb7\xb2\xeb\xdf\xa3\x11\x1c\x6a\xc9\x1e\x1d\x71\x8d\x12\xb4\x00\x17\x39\xed\xae\xbb\xf1\xf6\xfa\xfe\x81\xe0\x97\xb8\x8c\xc5\x35\xef\x0d\x01\x66\x7a\x30\xbc\xc4\xe5\xa1\xed\xd4\x64\x02\x7b\xdf\xd7\x93\x9a\x86\x65\x03\xf8\x64\x75\x1f\xa9\x08\x86\x60\x6f\x19\x41\x7e\x4f\xda\x5d\x9a\x0b\x8c\x3c\xc2\x97\x39\xfb\xe6\xab\x61\xf5\x3b\x48\xed\x44\xb6\x69\xce\xf7\xfb\xa6\x96\xc4\x30\xd2\x92\xfd\x07\x2e\x0b\x13\x6c\xf7\x5f\xdd\x4b\x4f\xbe\xde\xde\xad\xe9\x87\xcd\x9a\x5e\xdf\x4b\x53\xb1\x72\xdf\xa9\x6a\xf7\xf1\x66\x55\x76\x4e\xef\xa5\x6e\xf3\x5a\xdc\x44\x49\x22\x32\x85\x90\x88\x2b\x34\x50\xc9\xcb\xc6\x5f\x47\xbf\xb9\x44\x52\x35\xc1\x62\x89\x2d\xed\x66\xb8\x54\x66\xe7\xd6\x98\x60\x70\x63\x97\x91\x94\xcc\xf1\x57\x18\x15\x09\x98\xbd\xcc\xfa\x9e\xc6\xc5\x62\xe2\x48\x97\xa6\xc2\x83\xa1\x11\x65\xe8\x7f\x6b\xd1\xbb\x5d\xc8\x46\x57\x5d\x62\xee\x7b\x37\x5e\x00\x37\xbd\x5f\x96\x5e\x00\xcb\xce\x10\x34\xdd\x67\xbd\xf5\xbf\x01\x00\x00\xff\xff\x5f\x09\x3a\xf8\x6c\x38\x00\x00") +var _app_js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\xfd\x76\xdb\xb6\x92\xff\xdf\x4f\x31\xc9\xdd\x0d\xa9\x1b\x8a\xb2\x9d\xb4\x75\x95\xd5\xf6\x38\x8e\xd3\xfa\x6c\xf3\x71\x62\xe7\xe6\x76\x1d\xaf\x0e\x44\x8e\x24\xd4\x20\xc0\x02\xa0\x6d\x25\xd2\x73\xec\x03\xed\x8b\xed\x01\xc0\x6f\x52\xb6\xdb\xa6\xd9\xe5\x39\x6d\x28\x70\xbe\x00\xfc\x66\x30\x03\xc0\x5e\xa6\x10\x94\x96\x34\xd2\xde\xb3\x9d\x9d\x2b\x22\x61\x09\x13\x48\x69\x24\x62\x91\x84\xcb\x67\x3b\x3b\xf3\x8c\x47\x9a\x0a\x0e\x54\x7d\xc0\xd9\x3f\x28\x5e\xfb\x03\xf8\xbc\x03\xa0\xe5\xca\xfe\x0b\x70\x4d\x79\x2c\xae\x43\xbc\xd1\x28\x39\x61\x21\xe5\x57\xe2\x12\xa7\xbe\xe7\x0d\x9e\x59\x02\x89\x3a\x93\x1c\xb4\xcc\xd0\x34\x6c\x20\x22\x3a\x5a\x82\x8f\x83\x5c\x42\x4e\x30\x27\x4c\x39\x8a\x9d\xcd\xce\xce\x68\x04\x11\x23\x7c\x31\x9c\x0b\x99\x10\x0d\x62\x3e\xaf\xac\x79\x7f\xe2\x93\x34\x75\xfc\x39\xf7\xd2\xf7\x62\x7a\xe5\x05\xf0\x39\x62\x44\xa9\x31\x78\x91\xe0\x9a\x50\x8e\xd2\xdb\x04\x56\x4f\xfe\x5c\xe3\xec\x27\x24\x31\x4a\x2b\xa3\xf1\x89\xa4\xe9\x07\xdb\x1d\xfb\x69\xf0\xcc\x18\x52\x2a\xad\xf8\xda\x8a\x97\xb6\xb9\xae\xfb\x1a\x67\x24\x4d\x87\x6a\x29\xae\x79\x4b\xfd\xd2\xf7\x52\x2f\x00\x9e\x31\xd6\x68\xb7\x5f\x96\x7b\xc5\x27\xf0\xfe\xb6\x60\x54\x47\x4b\x6f\xd0\x22\x03\xf0\x66\x2b\xe0\x84\x5e\xa1\x12\x19\x8f\x5b\x04\x4b\xdf\xcb\xd8\x56\x05\x8c\x96\x0a\x96\xbe\x47\x8c\xcd\x9a\xc8\x05\xea\x31\x78\xd3\x19\x23\xfc\xd2\x0b\x60\x29\x71\x3e\x06\x6f\xa9\x75\x3a\x1e\x8d\x2a\x4d\x61\x24\x92\x51\x2a\x45\x9c\x45\x5a\x8d\x72\xf3\x36\x01\x78\x64\x26\x32\xed\x0d\xda\x96\xfe\x01\x7d\x6a\x3c\x1a\x59\x5d\x11\x13\x99\x53\x58\xeb\xa9\xd1\x85\x37\x24\x49\x19\xaa\x2f\xa6\x6e\x41\xf5\x32\x9b\xb5\x54\xd5\x7b\xe7\x08\xbe\x8a\xbe\xd1\x8c\x89\xd9\x28\x21\x4a\xa3\x1c\x1d\xbe\x3d\x09\x13\xd7\xe9\x25\xb2\xd4\x1b\x0c\x3a\x33\xdd\x82\xbc\xf3\xc5\xa1\xa6\x9a\xe1\x70\x46\xda\xc8\xbf\x0f\xcb\x70\x96\x69\x2d\xb8\xb7\xe9\xe9\xed\xd7\x60\x6d\x7b\x5d\xd3\x25\x6f\xf7\x78\xe3\x72\x4e\x72\xab\xe3\x18\x53\x2d\x7a\xfc\x3d\x11\x31\x61\xa6\x39\xb4\x6f\xaf\x49\x82\x30\x99\x80\xa7\x50\x6b\xca\x17\xca\x0b\x8c\xfe\x00\x8a\xdf\x2e\x2c\x34\x45\x4b\x29\xe4\x73\xd2\x23\x5c\x0b\xc1\x66\xf9\x87\x56\xa7\x6a\xf6\xd8\x1e\x99\xd0\xab\x69\xfc\x2c\x7f\x15\x3c\x92\x48\x34\xc2\x04\x0a\x16\x1f\x59\x11\x2e\x8f\x44\x8c\xaf\xa8\x51\x1b\xc6\x38\xa7\x1c\x5f\x89\x18\xfd\x87\x0e\x40\x0f\x83\x8a\xa5\x60\x80\xb2\x09\xb4\xb8\x44\x4e\x3f\xa1\xaf\xb4\x44\x92\x04\xa0\x34\xd1\x58\x11\x3a\xfd\x11\x4c\xc0\x11\x84\x1c\x6f\xb4\x9f\x07\x72\xf3\xd0\x39\xf8\xa3\x8f\xf1\x28\xd4\xa8\xb4\x1f\x0d\xea\xac\x50\x30\x21\xd1\x1f\x96\x94\xa1\x3f\x3a\xff\x18\x7f\x0c\x2f\x46\x35\x01\xe5\xf4\x3d\xe4\x59\x32\x43\xf9\xb0\xfa\xb4\x01\x64\x0a\xad\x8a\xc8\x4c\xc3\xc3\xbf\x3d\xec\x15\xaf\x2e\x69\x7a\x26\x8e\x79\xec\xf7\xca\x8d\x44\x92\x20\xd7\xfd\x82\x47\xe7\xc3\xc7\x7f\xff\x38\xfa\xd7\x47\xeb\xff\x7a\x30\xf9\xb7\x7f\x0f\x2e\xb6\xf4\xa4\x10\x26\x52\x94\x44\x8b\xdb\xcc\xf4\x7c\x0f\xd6\x6b\x70\xef\x03\xef\x0e\x39\xdb\xc5\xfc\x4b\x8b\xd5\x7c\xa9\x06\xd4\x8c\xfa\xe3\x51\xcb\xca\x4a\xfe\x15\x91\x94\xcc\x18\x0e\x9f\x3c\xac\x8f\xc9\xa6\xc7\x94\x59\x46\x99\xa6\xbc\x63\xc9\x1d\x13\x79\xfd\x31\x9e\xfe\xed\xe2\xf1\x68\xd0\x4b\x76\x9a\x92\x08\x9b\xf3\x51\xb3\x3f\x45\xbc\xf4\x07\xf9\x60\xb5\xbb\x60\x10\xa7\x2a\xc4\x45\x99\x94\xc8\x75\x53\x56\x0e\xbc\xe5\xa7\xb5\xa2\x7c\xad\x25\x5d\x2b\x72\xbd\x56\xbf\xc9\x35\x4b\xe7\xeb\x65\x3a\x5f\xcf\xcc\x7f\x6a\xbe\xd6\xf2\x60\xf7\x60\x9d\xb2\x2c\xba\x5c\xcf\x93\x75\x8c\x8c\xac\xd6\xc8\xe3\x75\x42\x6f\xd6\x0a\x7f\x5b\x33\x21\xd2\x35\x59\xab\x35\x5b\xcb\x7c\xf2\x55\x67\x58\xab\xd1\xba\xc4\xd5\xb5\x90\xf1\xc3\xa6\x35\x9b\xdb\x27\x61\xff\xce\x49\x28\x48\xeb\xb8\xda\x69\xfe\x9b\x93\x56\x86\x29\x4d\xa4\x3e\x35\x0e\x3b\xee\x73\xf2\x5e\x1e\xb0\x81\xc8\x39\xfd\xb8\x7c\xab\xc7\xa9\x4d\xcd\x82\xaa\xdd\x52\xd6\xd4\x6c\x8d\x17\x6d\x9c\xe6\x40\x18\x14\xa6\x98\xc5\xb1\xc7\x4b\xad\x9c\x70\x4b\x38\xea\xb1\x28\xb7\x72\x93\x7f\x33\x21\xdb\x05\x51\x98\xd4\x03\xe2\x5c\x8a\xe4\x0c\x6f\xf4\xa1\x44\xe2\x23\x0b\x4a\x43\x19\xe5\xf8\xda\x06\x1c\x05\x63\x9b\x8b\x16\x92\xf5\x12\x13\x84\x31\x78\x09\xd1\x28\x29\x61\x5e\xf1\x85\x64\x5a\xcc\x45\x94\xb5\x39\x12\x93\xbf\x3e\x97\x24\xba\x44\xad\x9a\x9f\x0c\xcb\x11\x13\x0a\xfb\x3f\xab\x48\x0a\x66\x16\x85\x53\xbd\x62\x56\xa9\xa2\x26\x99\xc9\x55\x76\x7b\x17\x2a\xd4\xff\x20\x2c\x43\xbb\x48\xc5\x44\x93\x50\xe3\x8d\xee\xd2\x09\xee\x7b\xd1\x92\xf0\x05\x7a\xb5\x15\x20\x4a\x02\x70\xad\xd5\x94\x45\x0c\x89\x3c\xa3\x09\x8a\x4c\xfb\x9a\xc6\xe5\x68\x6b\x1a\x1b\x2f\x44\x5d\x7c\xec\xc5\x98\xd1\xe9\x44\x9a\x71\xf6\xa3\x24\x5c\x14\x26\x0e\x4a\x51\x9b\x00\xf6\xbf\xd9\x1d\xd4\xe7\x6c\x53\x2c\x6e\xc8\x60\xd2\xb3\x76\xbb\x7e\x4c\xa7\xd7\x92\xa4\x29\xca\xe1\x9c\xde\x60\x7c\x8f\xfc\xa5\xcd\x27\x32\xdd\xc9\xf8\xef\xc7\x49\x79\xb7\x56\x28\x79\xcd\xa8\x13\x89\xa4\x4f\x40\xed\x5b\xb1\x72\x8f\xcb\x37\x93\xd1\xd8\x01\x30\x6e\x52\x83\xed\xa3\x47\xd0\x98\x52\x78\x30\xa9\xcf\x67\x6d\x50\xf3\xc1\xbf\x1f\x28\x36\x55\x7e\x84\xac\x95\x74\xd4\x33\x95\xdb\x13\x29\x4b\x3a\x8c\x29\x61\x62\xe1\x19\xaf\x5c\x31\x1c\xc3\xe7\x98\xaa\x94\x91\xd5\x18\x2a\xc5\x96\x12\x7e\x00\x6f\xc6\x44\x74\xe9\x19\x48\x73\xc1\xd1\x1b\x6c\x9a\x03\x59\x38\xd7\x49\x64\x90\xfa\x31\x3b\xde\xdd\xdd\xf5\xda\x69\x91\x4b\xc7\xae\xa8\xa2\x33\x86\x79\xea\x65\xaa\x38\xe4\x5a\x6d\xb1\xb8\x31\x59\x85\xf9\x56\xce\x70\x46\xa2\xcb\x85\xb4\x75\x43\x73\x4e\xbb\xdd\xc9\x55\xf6\xf6\xa3\xc9\x2b\x78\xc4\x68\x74\xd9\x0c\xc0\x50\x66\x90\xfe\xe0\x19\x34\x38\x36\xc1\xbd\x8c\xf5\xee\xd2\x82\xdd\x15\x0a\xc3\x54\xe2\x15\x72\xfd\x02\xe7\x24\x63\x9d\x15\xd3\x50\x28\x2d\xd2\xb7\x52\xa4\x64\x41\x9c\xb1\xdb\x97\xb1\x4d\x6d\xac\x5b\xf3\xd2\x48\x7f\xcb\x84\x55\xd9\x3a\xec\x1d\xd1\x68\x56\xef\xf3\x8b\x3a\xc8\x2d\x36\x48\x16\x53\xf1\x02\xaf\x68\x84\xea\xbc\xaf\xf5\xa2\xe8\x54\x53\xd4\xef\x10\x10\xd6\x38\x5b\xf0\x2f\x87\xbd\x53\x08\x77\xf1\xee\x00\x93\x97\xf1\xa6\xde\x3a\x3d\x3e\x3b\x3b\x79\xfd\xe3\xa9\x77\x67\xfc\xa9\xb3\x0e\x23\x13\xfa\x5d\x18\xb8\x13\x25\x46\xcd\xff\xfc\x77\xbb\xaa\xdc\xa6\x20\x9f\x9a\xbe\x80\x38\x17\x32\xe9\xaf\xf7\xb7\x8b\x33\x3c\x43\xe3\x1c\xe9\xb6\x80\xc7\xc8\x0c\xd9\x16\xc6\xe2\xdb\x5c\x48\x53\x75\x99\xf9\x18\xc6\x76\x42\x86\x0a\x19\x46\xda\x8e\xe1\xa1\x69\x07\xd7\x3e\xee\xd9\xc5\xb0\x6a\x72\xfa\xb6\x73\xe4\x0f\x8d\xb7\xc8\xef\x11\xd6\x76\x7f\x6b\xe9\x95\x09\x93\xfd\xd4\xf6\xd3\x18\x3c\xef\x71\x1f\xb2\x7a\x59\x04\x77\x2b\xdf\xd6\xf4\xab\xf6\x18\xa1\xce\x58\x3b\x0e\xfe\x63\xbd\xa4\x2a\xb4\x4a\x83\x0a\xe1\x15\x7c\x6b\x8d\xb3\x6c\x3e\x47\x79\x4a\x3f\x61\xc7\xa3\xed\xb3\xe9\x36\x6e\x82\x7e\xaf\x09\x13\x92\xfa\x3d\x35\x64\xeb\xa9\x5c\x46\xa4\x86\xd2\xcc\x47\x35\x3e\xc8\x42\x1a\x6f\x02\x40\x16\x72\x92\xf4\x1a\xb5\x69\xef\x4d\xc0\x57\x02\x9f\x1b\xc0\xa1\x24\xba\x81\xbd\x53\xdb\x0c\xa6\xf9\xcf\x40\xaf\x47\xfa\x97\x43\x5e\x1f\x08\xbe\x34\xea\x7a\xa1\x0d\xfd\x58\xfc\x63\xb0\xab\x05\xe0\x3f\x0f\x36\x64\x16\x66\xff\xaf\x10\xe6\x86\x65\xa8\xe8\xa7\x06\xc2\x9e\xdb\x66\x30\xcd\x7f\x06\x61\x3d\xd2\xff\x02\x84\x55\x53\xfb\x95\x10\xd6\x1b\xe0\x6a\xb0\xfb\x3d\x08\x3b\xff\xf6\x69\x00\x7b\xfb\x07\xa6\xa6\xf8\x36\x80\x6f\xf6\xf6\x03\xd8\xdb\xdd\x7f\x1a\xc0\xfe\xee\xd3\x83\x00\x9e\xee\x7e\xff\x6d\x00\x07\x7b\xdf\xef\x5f\x7c\x31\x04\xc2\x63\x28\xcf\x2f\x9a\xf6\x0c\xba\x38\xdc\x9e\x69\xc0\x5f\x8c\x51\x03\xc4\x57\x27\x2f\x4e\xf2\x55\x56\x6d\x45\xe2\x76\x0b\x1c\x8a\xfa\x2c\x80\x6a\x16\x13\x1a\xd3\x62\x45\x61\xc8\x17\x7a\x09\x93\x09\xec\xc2\x0f\xfd\x18\x69\x0e\x08\x78\xbe\x49\xa5\x07\xde\x00\xc6\xdb\x31\xd5\xd1\xd3\x9a\xca\x00\xe8\x56\x4c\xba\x7c\xd4\x96\xaf\x9e\x11\x31\xf4\x1e\xd3\x5e\x80\x01\xdc\x23\x3d\xdc\xd6\xa5\x72\x3a\x4c\xc6\xe5\x8d\xc1\xac\x89\x77\xf2\x59\x4e\xca\xd3\x6c\x6b\x18\xe8\x3c\x7a\x95\x9a\x75\x37\x5a\x62\x74\x39\x13\x37\xfd\x1e\xde\x79\x2c\x39\xc6\x06\xc1\x61\x24\x38\xc7\x48\x63\x7c\x3f\x56\xb3\xa8\x9b\xee\xdc\x8f\xda\x84\xad\xfb\xd2\xfe\x9e\xc0\xd2\x79\xaa\x48\x63\x20\xee\xe7\xd9\x47\x00\x0f\xea\x3d\xec\x0f\x24\x9d\xe7\x5e\x33\xd5\x39\xb7\xe8\x7d\x8a\x2c\x68\x4b\x08\x1b\x0c\x06\x9d\x33\x8c\xfa\x49\x40\x59\x3e\xd1\x48\x70\x53\xed\xe4\xd5\x7d\x1c\x8f\xbb\x45\xf2\xde\xd3\x6f\x0a\x8f\x9e\x0b\x16\xa3\x7c\x93\x22\xef\xa1\xdb\x3f\x3a\x28\xe8\x4c\x45\x7b\x28\xa5\xb8\xee\x21\xdb\x7d\xf2\x5d\x49\x46\x32\x85\xbd\x24\x4f\x0b\x12\x53\x3b\xf6\x51\x3c\x2d\x85\x14\x75\x61\x0f\xd5\xc1\xf3\xd2\xa2\x25\xb2\x3e\x39\x07\x2f\x5f\x38\x0a\xbb\x33\xb4\x75\x2b\x22\x1f\xbb\xee\x21\xea\xbd\x0f\x39\xfb\x8a\xef\xda\x8a\x9a\x2b\x98\x4e\x67\x9a\x43\x8c\xea\x52\x8b\x74\x28\x38\x5b\x75\x1d\xaf\x2c\xeb\x0c\x34\x39\x5e\xbf\xa4\x0c\xc3\x19\xe5\x71\xf7\xf0\xc7\xae\x5c\x76\x8a\x43\x12\xc7\x77\x1f\x1d\xfe\x45\x46\x32\x41\xe2\xfb\x59\x59\xe1\xeb\x8b\x1a\xbb\xdd\x3e\x63\x9e\x16\x8b\x05\xc3\xb7\x8c\xac\x66\x24\xba\xbc\xcd\xc8\x2a\xcf\xa0\xca\xd0\x53\xbe\x80\x1f\x72\xd3\x2d\x96\x61\x5c\xfc\x2a\x1c\xa0\x77\xa1\xfe\x0b\x3a\xe2\x02\x95\x16\xe9\xdd\x83\x6c\xa8\xfe\x4f\xb0\xb0\x65\x1f\xa2\x3a\xe8\x6c\xef\x5b\x35\xac\xce\x89\xbe\xd6\x78\x36\x8c\xcd\xaf\x97\x88\x14\xb9\xff\x87\x8f\xd0\x6f\xeb\x9d\x09\x4f\xdd\x90\xdd\x08\x57\x86\xb0\xbd\xff\x48\x1b\xf9\x54\x4e\x3d\xb4\x22\xcb\x1d\xd3\x6a\x87\xd1\xa3\x9c\x51\x6e\xf7\xe6\x05\xd7\xa7\xf6\x30\xc6\x7b\xb2\x9f\xde\x78\x81\x3d\x9a\xf8\x09\xe9\x62\xa9\xc7\xe0\x7d\xfb\x34\xbd\xf1\x36\xb9\x71\xd6\xa6\xce\x45\x18\x5e\x33\xf3\x03\xce\xde\xbd\x3d\xf2\xab\x55\xe5\xc5\xf1\xcb\xc3\xf7\x3f\x9f\x4d\x4f\xdf\xbc\xfe\x11\x26\xf0\xd0\x9e\x2f\x8d\x46\xf0\x42\x5c\x73\x13\x0c\x80\xa8\x24\xfc\x55\x81\x90\x10\x5e\x13\x95\x40\x24\x24\xee\x94\xb7\x78\x5e\x89\x38\x63\x08\x93\xd6\xef\xf5\x1a\x3e\x97\x1b\xf8\x2a\x92\x34\xd5\x30\x81\x58\x44\x59\x82\x5c\x87\x6e\xa7\xfb\x98\xa1\xf9\xe5\x7b\x8e\xc0\xa5\xcf\xee\x3d\x34\x39\x8d\xc9\xce\x34\xde\xe8\xd1\xaf\xe4\x8a\xe4\x34\x35\x12\xa2\x56\x3c\x82\x49\x75\x0d\x88\xce\xc1\xf7\x3e\xe0\xec\x50\x29\x4c\x66\x6c\xe5\x01\xe5\xb9\x5d\xe5\xbe\xa1\x63\x55\xd2\x30\x7a\x6e\xfe\x87\xa6\x9b\x28\xc3\x5f\x95\xe7\xae\x1b\xd5\x0e\x37\x7b\xe9\xdd\x88\x78\xc5\xf6\x61\xd9\xab\x05\xea\xbc\x4b\xea\xf9\xea\x8c\x2c\x5e\x93\x04\xdd\x5d\x1f\x6f\x70\xbe\x7b\x11\x92\x34\x45\x1e\x1f\x2d\x29\x8b\x7d\x27\x78\xf0\x6c\x27\x1f\x23\x5b\x0c\x1d\x09\x6e\x77\xf6\x27\xc0\xf1\xba\x18\xd1\xc3\xda\x17\xb7\x1d\x6b\xab\x22\x13\xda\xca\x64\xc0\x7c\x1b\x83\x97\xbb\x48\x19\xf0\xc6\x6e\x6c\x5c\x6b\x7d\x97\x67\x0c\xe7\x17\xae\xb5\x96\x40\x57\x8d\x55\x0d\x36\x6e\x18\xd6\xd9\x78\xa8\xc9\x2c\xd4\x6f\x6c\x97\xac\x89\x94\x53\x5d\xbf\x91\x50\x4c\x82\xc3\x48\x18\x45\x84\x31\xbf\x74\xb2\x7c\x74\xa7\x86\xab\x0c\x11\xe7\x9e\x3b\xf4\xf7\x02\x28\xde\x2e\x2a\xbf\x3c\xdf\x66\x1c\xec\x5e\xe4\xd9\x96\x19\x5b\x83\xeb\x86\xce\x42\x95\x83\x61\xa5\xec\xc2\xfc\x97\x33\xda\x1e\x2c\x60\x02\x3f\xba\xdf\x06\x5c\x9c\x5c\xd1\x05\xd1\x42\x86\x12\x7f\xcb\x50\xd9\x3c\xf3\x30\x8a\x50\xa9\x2a\x4b\xbd\x85\xc8\x1f\x84\x7a\x89\xbc\xaa\x52\xcc\xe8\xd7\xf3\xdb\xea\xe8\x85\x67\x09\x4a\xa2\xb1\x95\xfe\xda\x3c\xd0\x14\x07\x26\x11\x34\xdc\xa1\xfb\xe5\x8a\x64\xd5\xdc\xae\x9f\x0b\x09\x7e\xc9\x01\x93\x9c\xb3\xb8\xa2\x91\x37\x3f\x7a\x04\x0f\xec\x5b\x18\x0b\x8e\x9d\x1c\xb5\x97\xb7\x9d\x93\x3b\x7e\x6b\x43\x28\xb8\xb1\x2b\x41\xa5\xc8\xa2\x71\x21\x25\xe9\x66\xf2\xfd\x48\xa8\x9e\x62\xa2\x8c\xc4\xdb\x30\xd1\xf7\x76\xd1\x97\x9b\x9f\xff\x18\x40\x62\x7d\xe7\x7c\xf7\xa2\x7c\xdd\xab\x5e\xf7\x2f\x2e\xda\x47\x1e\xfd\x27\xf3\xb5\xe6\xda\x64\x55\x8d\x76\x72\x04\xb7\xe7\xd3\xae\xa6\x81\x49\x45\x59\x9e\x7b\x16\x47\x9e\x3b\x25\x5a\x0f\xdf\xbf\x38\x79\x33\x7d\xfe\xfe\xe5\xcb\xe3\x77\xd3\xd3\x93\xff\x3c\x86\x89\xdd\xbd\xa8\xf0\x9c\x46\x09\x4c\x9a\x8e\xe9\x90\x7c\x6a\x83\xca\x5b\x29\x0c\xd8\x84\xf4\x3b\xa2\x02\xd8\x0d\x60\xaf\xe6\x1a\x84\x13\xb6\x52\x28\xfb\xe5\x1d\xe6\x5f\x7d\x17\xa7\xa0\x24\x0f\xe7\x73\xbb\x26\x35\x4c\x2b\x3f\xaa\x44\x08\xbd\xa4\x7c\x71\x46\x13\x3c\xb2\x63\xc0\x0d\x84\x76\x5b\x74\x79\x4d\xe6\x37\x34\xc7\xa8\x34\xe5\xf6\xf0\x29\xb7\x33\x8d\x92\x50\x70\x4b\x94\xba\xae\xc1\x04\x32\xee\xae\x32\xc5\xb9\x65\xd6\x5d\xeb\xbd\xc9\x5f\x6b\xce\xec\x86\x2d\x8d\x92\x9c\xc5\x78\x74\x1e\x63\x99\x88\xac\xc6\x70\x49\xd4\xb2\x82\x69\x19\x68\xc3\x3c\x2c\xc7\x18\x89\x18\xdf\xbf\x3b\x39\x12\x49\x2a\xb8\x59\xbc\xfa\x24\x84\x2a\x9b\x29\x2d\x29\x5f\xf8\x7b\x45\xd9\x57\xbb\xbd\x63\x68\xd9\xa9\x16\x92\x2c\xd0\x2c\x1a\x27\x1a\x13\xdf\xc3\x9b\x54\x7a\x83\x5b\x94\xdf\xc6\xd6\xd0\xb1\x55\x42\x7d\xad\x2f\x70\xb7\x6d\x24\x14\x12\x19\x2d\x61\x32\x99\x80\xf7\x83\xc9\x49\xbc\x96\x69\xcd\x54\xdc\x1f\xd4\x05\x5a\x82\xda\xa1\x7f\xd3\x92\x7a\x84\x95\xc8\x63\x07\xb0\xc6\xd2\x21\x71\x2e\x51\x2d\x5b\xab\x47\x8d\xc0\x9e\x68\xcb\xfa\x77\x57\xeb\xbb\xcd\xc2\x9e\x85\x06\x1e\x3d\xda\xb9\x3b\xec\x14\x01\x47\x61\xff\x1a\xe4\x66\x75\x7b\x94\x39\x77\xcb\x46\x00\x35\x6b\x2e\xda\x9d\xab\x06\xa6\x6e\xbf\x1d\x99\xdc\x70\xe3\x9a\xb2\xbd\x6a\x75\x56\xca\x48\x24\x29\x65\xd8\x88\x7e\xf7\x35\xb6\x34\xd4\xa8\x75\xff\xcf\x37\xea\x8a\xf8\x67\x40\x21\xe1\xc1\x04\x76\xfb\x30\xe9\x8e\xf1\x27\xe0\x9d\xae\xb8\x26\x37\xee\xae\x80\x77\x07\x0c\x0b\xa6\xfa\x15\x9f\x3e\xff\xb1\x91\xb2\xe3\x69\x35\xe8\x40\xd3\x19\x54\xc3\x19\x5c\x6f\xba\x78\xac\x7b\x82\xf9\xe7\x6e\x14\xe6\x15\x7b\x17\x85\xf9\xf7\xa2\x58\xde\x4a\x60\xca\xb7\x3b\x33\xa0\x62\x3a\x25\xf6\xa2\xce\x24\x25\x6e\xb2\xea\x33\x53\xf5\xa8\xcc\xf6\xbe\xa6\x7f\x36\x85\xf7\x75\xb1\xc7\x40\x98\xc0\x83\x9e\xe6\xdf\xd3\x29\xb3\x16\x14\xcb\x46\x23\xe4\x57\x97\x92\x0a\xb2\xce\x92\xe1\xe8\xed\x5a\x43\x18\xab\xf6\x0f\x4c\xfb\x2d\x01\xd4\xc8\x8a\xa9\x2a\xb4\xde\x43\x51\x6d\x6d\x6a\x0d\xf9\x96\xd1\x6c\x18\xd5\xb8\xc3\x5b\x0f\x08\x0c\xb9\x71\x8c\x50\x64\x3a\xcd\xb4\x3b\x4e\xca\x7d\xb6\x5a\xd0\x0d\x89\x21\xfc\x3b\xbc\x64\x82\xe8\x27\xfb\x87\x52\x92\x55\xf8\xfc\x97\xb3\xe3\xd3\xe9\xdb\xe3\x77\xd3\xe3\x9f\x8f\x5f\x1d\xbf\x3e\xab\x65\x13\x55\x9c\x99\x26\x84\x31\x11\xf9\xbc\x96\x21\x2c\x91\xa4\x79\x41\xf2\x9e\x72\x7d\x60\xe5\xf9\x39\xc3\x4f\xc7\x87\x6f\xdf\x1f\xe4\xa7\x45\x01\xa4\x01\x14\xac\x86\xcd\xf8\xa5\xdf\x62\x74\xa4\x39\xc7\xa0\xc8\x2b\x6e\x8f\x73\x73\xca\xd8\x9f\xc8\xfe\xca\x50\x67\x6d\x9a\xad\x34\xbe\x99\xcf\x15\xea\xc0\x0c\x54\x00\x7b\xf5\x52\x41\xa2\xca\x58\x51\x80\xd5\x47\xd0\x77\xcc\x79\x47\xfb\x24\xe5\x52\x5a\xf3\x13\x89\x74\x75\x26\x8e\x96\x84\x73\x64\xbe\x13\x6f\xb3\xb0\xe2\xb2\x5b\x31\xf4\x73\x89\xe8\xa7\x35\x64\xb8\x0f\xe7\x9e\xe0\xef\x32\xae\x69\x82\x27\x9c\x6a\x4a\x18\xfd\x84\xb1\x77\x51\xe0\xd9\x54\x4b\x2d\x18\x17\x7f\x3e\xb3\xa4\xca\x6e\x51\xd8\x3c\x2f\x4d\x1b\x7f\x9c\xc3\xa9\xce\x3d\x95\xa4\x69\x0e\xcb\x3e\x2f\xce\x65\xd9\xab\x64\xae\xb4\xad\xfd\xbd\x4f\x4a\x74\xb4\xec\xa4\xed\x86\x56\xb0\xf8\xb5\x88\x31\xdf\x85\xcb\x7f\xc1\x24\xff\x33\x9c\xea\xb4\x6f\x30\x08\xea\xb2\x6b\xbd\x2f\xb7\x9c\xda\x4b\x7c\xfd\x76\x5b\xed\x0e\xbe\x5d\x70\xab\x4b\x8e\x5d\x47\x1b\x8d\xe0\x48\x4b\xf6\xf8\x98\x6b\x94\xa0\x05\xb8\x10\x66\xb7\xbf\x8d\xdb\xd5\x0b\x79\xc1\x2f\x71\x15\x8b\x6b\xde\xeb\x8b\x26\x52\x61\x78\x89\xab\x23\xdb\xa9\xc9\x04\xf6\xbf\xab\x67\x17\x0d\xcb\x06\xf0\xd9\xea\x3e\x56\x11\x0c\xc1\x5e\xf7\x81\xfc\xc2\xb2\xbb\xbd\x16\x18\x79\x84\xaf\x72\xf6\xed\x77\xb4\xea\x97\x81\xda\x19\x65\xd3\x9c\xef\x0e\x4c\x51\x87\x61\xa4\x25\xfb\x0f\x5c\x15\x26\xd8\xee\xbf\xbe\x97\x9e\x7c\xe1\xbb\x5b\xd3\xf7\xdb\x35\xbd\xb9\x97\xa6\x62\x09\xbd\x53\xd5\xde\x93\xed\xaa\xec\x9c\xde\x4b\xdd\xf6\x45\xb1\x89\x92\x44\x64\x0a\x21\x11\x57\x68\xa0\x92\xd7\x6f\xff\x1c\xfd\xe2\x32\x3a\xd5\x04\x8b\x25\xb6\xb4\xdb\xe1\x52\x99\x9d\x5b\x63\xbc\xf2\xc6\xc6\xf3\x94\x2c\xf0\x9f\x30\x2a\x32\x21\x7b\xab\xf4\x03\x8d\x8b\xa8\xee\x48\x57\xa6\xd4\x82\xa1\x11\x65\xe8\x7f\x69\xd1\xbb\xed\xc0\x46\x57\x5d\x86\xec\x7b\x37\x5e\x00\x37\xbd\x5f\x56\x5e\x00\xab\xce\x10\x34\xdd\x67\xb3\xb3\x63\x3a\x50\xfb\x6b\x3e\xd7\x85\xb2\xfb\x33\x11\xaf\x42\xbb\xad\xf9\x33\x55\x3a\x24\x71\xec\x7b\xc5\x1e\x33\x49\x53\x57\x9a\x6c\xfd\x93\xbf\xe9\x94\xa4\xe9\xf4\x57\x35\xb5\x7b\x70\xf1\x74\x6a\xe8\x6b\xab\x30\x49\x8b\xc5\xa7\xd8\xb8\xb4\x1b\x7d\x36\x7c\x19\xe3\xfe\x37\x00\x00\xff\xff\x1e\xd4\x08\x7c\x92\x38\x00\x00") func app_js() ([]byte, error) { return bindata_read( diff --git a/ui/app.js b/ui/app.js index d3f24de..d3a4b70 100644 --- a/ui/app.js +++ b/ui/app.js @@ -386,13 +386,8 @@ function WebRPC() { } var app; -window.onload = function() { - if (isWebView()) { - document.body.classList.add('desktop-app'); - } else { - app = new WebRPC(); - } +function init() { app.render = function() { return app.element = picodom.patch( app.oldNode, (app.oldNode = UI(app, app.data)), app.element); @@ -433,3 +428,11 @@ window.onload = function() { app.render(); } + +if (isWebView()) { + document.body.classList.add('desktop-app'); + window.external.invoke_('__app_js_loaded__'); +} else { + app = new WebRPC(); + init(); +} From bebb2e32dec0ee61c084f48b5b6960b07ccdea0e Mon Sep 17 00:00:00 2001 From: "Serge A. Zaitsev" Date: Sat, 18 Nov 2017 14:49:04 +0200 Subject: [PATCH 2/2] ui: make list of devices empty, but not null --- cmd/glitch/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/glitch/app.go b/cmd/glitch/app.go index eeef7d3..8bc8606 100644 --- a/cmd/glitch/app.go +++ b/cmd/glitch/app.go @@ -31,7 +31,7 @@ type App struct { } func NewApp(config *Config) (app *App, err error) { - app = &App{Config: config} + app = &App{Config: config, AudioDevices: []audio.Device{}, MIDIDevices: []audio.MIDIDevice{}} loader := &sampleLoader{} go loader.poll()