From 91e6eb6f6d832894fde518b341271c6e16969642 Mon Sep 17 00:00:00 2001 From: Ivan Izaguirre Date: Mon, 12 Oct 2020 19:29:30 +0200 Subject: [PATCH] Sidebar --- go.mod | 3 +- izapple2fyne/fyneJoysticks.go | 7 +- izapple2fyne/fyneKeyboard.go | 9 +- izapple2fyne/main.go | 119 ++++++++++-------- izapple2fyne/panelDevices.go | 23 ++++ izapple2fyne/panelJoystick.go | 51 ++++++++ izapple2fyne/resources.go | 12 +- izapple2fyne/resources/apple2.png | Bin 0 -> 5723 bytes .../resources/page-layout-sidebar-right.svg | 1 + izapple2fyne/resources/resources.md | 3 + 10 files changed, 168 insertions(+), 60 deletions(-) create mode 100644 izapple2fyne/panelDevices.go create mode 100644 izapple2fyne/panelJoystick.go create mode 100644 izapple2fyne/resources/apple2.png create mode 100644 izapple2fyne/resources/page-layout-sidebar-right.svg diff --git a/go.mod b/go.mod index 10bd7a5..dd844e2 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,5 @@ require ( github.com/veandco/go-sdl2 v0.4.0 ) -replace fyne.io/fyne => github.com/ivanizag/fyne v1.3.4-0.20201010160818-ed5402384cff - +//replace fyne.io/fyne => github.com/ivanizag/fyne v1.3.4-0.20201010160818-ed5402384cff // replace fyne.io/fyne => ../../fyne/fyne diff --git a/izapple2fyne/fyneJoysticks.go b/izapple2fyne/fyneJoysticks.go index c89210f..fe525b4 100644 --- a/izapple2fyne/fyneJoysticks.go +++ b/izapple2fyne/fyneJoysticks.go @@ -28,13 +28,15 @@ type joystickInfo struct { } type joysticks struct { + s *state info [2]*joystickInfo } const unplugged = uint8(255) // Max resistance when unplugged -func newJoysticks() *joysticks { +func newJoysticks(s *state) *joysticks { var j joysticks + j.s = s return &j } @@ -48,6 +50,9 @@ func (j *joysticks) start() { case <-pool.C: j.info[0] = j.queryJoystick(glfw.Joystick1) j.info[1] = j.queryJoystick(glfw.Joystick2) + + j.s.devices.joystick.updateJoy1(j.info[0]) + j.s.devices.joystick.updateJoy2(j.info[1]) } } }() diff --git a/izapple2fyne/fyneKeyboard.go b/izapple2fyne/fyneKeyboard.go index 893c508..b7b7969 100644 --- a/izapple2fyne/fyneKeyboard.go +++ b/izapple2fyne/fyneKeyboard.go @@ -113,20 +113,17 @@ func (k *keyboard) putKey(keyEvent *fyne.KeyEvent) { case fyne.KeyF11: k.s.a.SendCommand(izapple2.CommandToggleCPUTrace) case fyne.KeyF12: - case fyne.KeyPrintScreen: + //case fyne.KeyPrintScreen: err := izapple2.SaveSnapshot(k.s.a, "snapshot.png") if err != nil { fmt.Printf("Error saving snapshoot: %v.\n.", err) } else { fmt.Println("Saving snapshot") } - case fyne.KeyPause: - k.s.a.SendCommand(izapple2.CommandPauseUnpauseEmulator) + //case fyne.KeyPause: + // k.s.a.SendCommand(izapple2.CommandPauseUnpauseEmulator) } - // Missing values 91 to 95. Usually control for [\]^_ - // On the Base64A it's control for \]./ - if result != 0 { k.keyChannel.PutChar(result) } diff --git a/izapple2fyne/main.go b/izapple2fyne/main.go index ad9db59..f7bad90 100644 --- a/izapple2fyne/main.go +++ b/izapple2fyne/main.go @@ -23,6 +23,8 @@ type state struct { app fyne.App win fyne.Window + devices *panelDevices + showPages bool } @@ -42,11 +44,66 @@ func main() { func fyneRun(s *state) { s.app = app.New() - // app.SetIcon(xxx) + s.app.SetIcon(resourceApple2Png) s.win = s.app.NewWindow("iz-" + s.a.Name) - // window.SetIcon(xxx) + s.win.SetIcon(resourceApple2Png) - bottom := widget.NewToolbar( + s.devices = newPanelDevices(s) + toolbar := buildToolbar(s) + screen := canvas.NewImageFromImage(nil) + //screen.SetMinSize(fyne.NewSize(380, 192)) + screen.SetMinSize(fyne.NewSize(280*2, 192*2)) + + container := fyne.NewContainerWithLayout( + layout.NewBorderLayout(nil, toolbar, nil, s.devices.w), + screen, toolbar, s.devices.w, + ) + s.win.SetContent(container) + s.win.SetPadded(false) + + registerKeyboardEvents(s) + j := newJoysticks(s) + j.start() + s.a.SetJoysticksProvider(j) + + go s.a.Run() + + ticker := time.NewTicker(60 * time.Millisecond) + done := make(chan bool) + go func() { + for { + select { + case <-done: + return + case <-ticker.C: + if !s.a.IsPaused() { + var img *image.RGBA + if s.showPages { + img = s.a.SnapshotParts() + s.win.SetTitle(fmt.Sprintf("%v %v %vx%v", s.a.Name, s.a.VideoModeName(), img.Rect.Dx()/2, img.Rect.Dy()/2)) + } else { + img = s.a.Snapshot() + } + screen.Image = img + canvas.Refresh(screen) + } + } + } + }() + + s.win.SetOnClosed(func() { + done <- true + }) + + s.win.Show() + + fmt.Printf("%v\n", s.win.Canvas().Scale()) + + s.app.Run() +} + +func buildToolbar(s *state) *widget.Toolbar { + return widget.NewToolbar( widget.NewToolbarAction( theme.NewThemedResource(resourceRestartSvg, nil), func() { s.a.SendCommand(izapple2.CommandReset) @@ -88,54 +145,16 @@ func fyneRun(s *state) { widget.NewToolbarAction(theme.ViewFullScreenIcon(), func() { s.win.SetFullScreen(!s.win.FullScreen()) }), - ) - - screen := canvas.NewImageFromImage(nil) - screen.SetMinSize(fyne.NewSize(380, 192)) - container := fyne.NewContainerWithLayout( - layout.NewBorderLayout(nil, bottom, nil, nil), - screen, bottom, - ) - s.win.SetContent(container) - s.win.SetPadded(false) - - registerKeyboardEvents(s) - j := newJoysticks() - j.start() - s.a.SetJoysticksProvider(j) - - go s.a.Run() - - ticker := time.NewTicker(60 * time.Millisecond) - done := make(chan bool) - go func() { - for { - select { - case <-done: - return - case <-ticker.C: - if !s.a.IsPaused() { - var img *image.RGBA - if s.showPages { - img = s.a.SnapshotParts() - s.win.SetTitle(fmt.Sprintf("%v %v %vx%v", s.a.Name, s.a.VideoModeName(), img.Rect.Dx()/2, img.Rect.Dy()/2)) - } else { - img = s.a.Snapshot() - } - screen.Image = img - canvas.Refresh(screen) + widget.NewToolbarAction( + theme.NewThemedResource(resourcePageLayoutSidebarRightSvg, nil), func() { + w := s.devices.w + if w.Visible() { + w.Hide() + } else { + w.Show() } - } - } - }() - - s.win.SetOnClosed(func() { - done <- true - }) - - s.win.Show() - s.app.Run() - + }), + ) } func registerKeyboardEvents(s *state) { diff --git a/izapple2fyne/panelDevices.go b/izapple2fyne/panelDevices.go new file mode 100644 index 0000000..c1c60c9 --- /dev/null +++ b/izapple2fyne/panelDevices.go @@ -0,0 +1,23 @@ +package main + +import ( + "fyne.io/fyne" + "fyne.io/fyne/widget" +) + +type panelDevices struct { + s *state + w fyne.Widget + joystick *panelJoystick +} + +func newPanelDevices(s *state) *panelDevices { + var pd panelDevices + pd.s = s + + pd.joystick = newPanelJoystick() + + pd.w = widget.NewVBox(pd.joystick.w) + + return &pd +} diff --git a/izapple2fyne/panelJoystick.go b/izapple2fyne/panelJoystick.go new file mode 100644 index 0000000..1020266 --- /dev/null +++ b/izapple2fyne/panelJoystick.go @@ -0,0 +1,51 @@ +package main + +import ( + "fyne.io/fyne" + "fyne.io/fyne/widget" +) + +type panelJoystick struct { + w fyne.Widget + labelJoy1 *widget.Label + labelJoy2 *widget.Label +} + +const textJoystickNotAvailable = "unplugged" + +func newPanelJoystick() *panelJoystick { + var pj panelJoystick + + pj.labelJoy1 = widget.NewLabel("") + pj.labelJoy2 = widget.NewLabel("") + widget.NewForm() + pj.w = widget.NewGroup( + "Joysticks", + widget.NewForm( + widget.NewFormItem("Joystick 1", pj.labelJoy1), + widget.NewFormItem("Joystick 2", pj.labelJoy2), + ), + ) + + return &pj +} + +func (pj *panelJoystick) updateJoy1(info *joystickInfo) { + newName := textJoystickNotAvailable + if info != nil { + newName = info.name + } + if newName != pj.labelJoy1.Text { + pj.labelJoy1.SetText(newName) + } +} + +func (pj *panelJoystick) updateJoy2(info *joystickInfo) { + newName := textJoystickNotAvailable + if info != nil { + newName = info.name + } + if newName != pj.labelJoy2.Text { + pj.labelJoy2.SetText(newName) + } +} diff --git a/izapple2fyne/resources.go b/izapple2fyne/resources.go index dd98c4d..e533faf 100644 --- a/izapple2fyne/resources.go +++ b/izapple2fyne/resources.go @@ -2,6 +2,11 @@ package main import "fyne.io/fyne" +var resourceApple2Png = &fyne.StaticResource{ + StaticName: "apple2.png", + StaticContent: []byte{ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 116, 0, 0, 0, 127, 8, 6, 0, 0, 0, 62, 93, 230, 228, 0, 0, 22, 34, 73, 68, 65, 84, 120, 156, 237, 157, 121, 116, 29, 87, 125, 199, 63, 247, 206, 188, 85, 79, 122, 90, 109, 121, 95, 228, 45, 142, 109, 197, 91, 236, 196, 113, 22, 66, 73, 66, 10, 33, 236, 201, 129, 172, 135, 181, 164, 112, 160, 180, 80, 122, 78, 79, 41, 39, 44, 61, 37, 5, 78, 40, 73, 41, 9, 109, 218, 80, 104, 8, 61, 148, 172, 164, 13, 33, 123, 74, 22, 59, 193, 118, 176, 157, 216, 142, 45, 203, 178, 173, 229, 237, 111, 102, 238, 237, 31, 51, 243, 180, 88, 150, 159, 164, 247, 36, 89, 158, 207, 145, 151, 119, 245, 102, 230, 206, 253, 206, 239, 119, 127, 247, 119, 239, 204, 8, 173, 181, 38, 96, 16, 26, 141, 210, 10, 67, 24, 165, 178, 188, 157, 101, 95, 106, 55, 123, 250, 118, 114, 40, 189, 143, 3, 233, 189, 92, 189, 248, 122, 206, 105, 217, 140, 210, 10, 41, 228, 36, 214, 184, 31, 115, 178, 43, 48, 149, 208, 104, 180, 214, 72, 33, 48, 132, 65, 209, 41, 240, 218, 241, 23, 121, 161, 243, 9, 94, 239, 217, 206, 209, 92, 39, 69, 85, 64, 10, 131, 140, 213, 199, 134, 25, 91, 57, 167, 101, 51, 154, 169, 99, 19, 129, 160, 30, 74, 43, 132, 16, 72, 33, 233, 43, 118, 243, 248, 91, 15, 240, 196, 161, 7, 57, 152, 126, 19, 165, 53, 17, 35, 130, 41, 67, 196, 205, 26, 164, 48, 176, 85, 145, 140, 149, 154, 236, 106, 159, 192, 25, 47, 104, 191, 85, 74, 114, 118, 150, 135, 247, 223, 199, 35, 251, 126, 206, 177, 124, 39, 17, 35, 74, 77, 168, 22, 16, 104, 173, 74, 174, 88, 32, 208, 90, 99, 169, 34, 0, 98, 114, 79, 97, 16, 103, 180, 160, 190, 56, 82, 72, 94, 232, 252, 13, 247, 190, 126, 7, 7, 211, 111, 16, 51, 107, 168, 11, 215, 163, 180, 66, 105, 117, 210, 237, 133, 112, 165, 156, 58, 14, 247, 12, 22, 84, 105, 7, 41, 12, 82, 197, 30, 254, 101, 231, 247, 248, 237, 161, 135, 8, 203, 8, 117, 225, 70, 148, 118, 112, 180, 115, 202, 125, 68, 141, 248, 4, 212, 116, 116, 156, 145, 130, 250, 98, 190, 222, 243, 42, 223, 223, 246, 53, 58, 50, 251, 169, 13, 215, 163, 81, 56, 218, 62, 229, 246, 190, 69, 38, 195, 141, 64, 224, 114, 39, 21, 95, 204, 167, 14, 61, 202, 157, 175, 125, 19, 165, 29, 234, 194, 245, 101, 89, 100, 63, 26, 67, 154, 180, 196, 90, 189, 207, 83, 71, 210, 51, 74, 80, 95, 204, 135, 247, 223, 199, 221, 191, 191, 141, 168, 25, 39, 36, 67, 163, 20, 19, 28, 237, 16, 51, 107, 104, 173, 153, 11, 128, 152, 66, 130, 78, 141, 209, 240, 4, 224, 139, 249, 200, 254, 251, 249, 209, 107, 127, 79, 220, 76, 32, 145, 35, 6, 61, 195, 33, 16, 216, 202, 162, 37, 58, 179, 100, 161, 98, 234, 232, 121, 102, 8, 234, 139, 249, 124, 231, 227, 252, 120, 199, 109, 36, 66, 117, 0, 99, 74, 8, 8, 33, 177, 84, 145, 197, 201, 179, 48, 132, 233, 93, 16, 83, 71, 209, 105, 47, 168, 214, 10, 41, 12, 246, 167, 247, 112, 231, 171, 223, 34, 36, 35, 32, 196, 56, 178, 59, 26, 129, 160, 189, 249, 220, 210, 231, 169, 196, 52, 23, 84, 151, 44, 234, 159, 182, 127, 147, 156, 157, 193, 148, 33, 244, 40, 221, 172, 143, 64, 96, 41, 139, 230, 88, 43, 103, 55, 173, 115, 203, 166, 72, 14, 215, 103, 106, 213, 166, 194, 40, 111, 222, 225, 190, 221, 119, 177, 171, 103, 59, 113, 51, 129, 26, 101, 0, 52, 16, 33, 36, 5, 39, 199, 218, 150, 243, 72, 132, 146, 165, 196, 196, 84, 98, 218, 10, 170, 189, 25, 144, 61, 189, 59, 121, 104, 223, 207, 72, 132, 234, 202, 26, 99, 158, 106, 159, 17, 35, 202, 133, 115, 174, 168, 80, 45, 43, 207, 180, 21, 212, 15, 61, 255, 115, 247, 63, 83, 116, 10, 227, 158, 222, 146, 66, 146, 181, 51, 180, 55, 111, 98, 73, 114, 37, 26, 61, 101, 166, 204, 6, 50, 245, 106, 84, 1, 124, 87, 248, 98, 215, 211, 188, 114, 244, 57, 226, 161, 196, 168, 135, 39, 67, 209, 90, 19, 146, 33, 174, 92, 120, 77, 233, 243, 84, 100, 90, 10, 234, 39, 205, 31, 122, 243, 103, 21, 217, 159, 33, 12, 50, 118, 138, 243, 103, 255, 17, 203, 27, 86, 79, 169, 9, 237, 161, 76, 205, 90, 141, 3, 223, 58, 119, 117, 111, 99, 71, 247, 203, 196, 140, 248, 184, 172, 211, 143, 108, 27, 34, 205, 188, 191, 237, 38, 183, 108, 42, 101, 18, 134, 48, 237, 4, 245, 121, 170, 227, 81, 44, 167, 56, 238, 97, 133, 59, 79, 154, 225, 67, 75, 63, 70, 115, 108, 38, 74, 59, 83, 46, 178, 29, 200, 180, 18, 212, 15, 84, 178, 118, 134, 109, 71, 159, 39, 98, 70, 199, 60, 230, 4, 48, 132, 73, 95, 177, 135, 173, 115, 46, 231, 226, 185, 127, 92, 74, 82, 76, 101, 166, 151, 160, 94, 160, 178, 187, 231, 53, 186, 114, 135, 9, 201, 240, 152, 51, 66, 134, 48, 200, 218, 41, 22, 37, 151, 115, 211, 202, 207, 187, 133, 83, 216, 213, 250, 76, 43, 65, 253, 52, 220, 206, 238, 87, 176, 149, 197, 88, 115, 172, 134, 48, 200, 59, 57, 234, 35, 77, 124, 182, 253, 111, 136, 155, 9, 244, 20, 76, 34, 12, 199, 180, 18, 212, 239, 47, 223, 236, 251, 3, 134, 52, 25, 75, 158, 213, 16, 38, 57, 59, 75, 34, 84, 199, 23, 215, 125, 139, 89, 53, 243, 189, 5, 100, 167, 71, 83, 157, 30, 181, 44, 11, 93, 138, 72, 187, 114, 29, 152, 194, 28, 245, 88, 209, 16, 38, 105, 171, 151, 230, 88, 43, 95, 222, 112, 27, 11, 235, 150, 122, 51, 53, 167, 79, 51, 77, 155, 9, 110, 141, 235, 96, 211, 86, 47, 41, 171, 111, 84, 193, 139, 20, 18, 141, 166, 183, 120, 156, 246, 230, 77, 124, 122, 245, 87, 104, 136, 182, 120, 227, 205, 169, 29, 4, 13, 101, 218, 8, 234, 43, 154, 183, 115, 20, 157, 124, 73, 164, 145, 240, 87, 252, 101, 237, 12, 2, 193, 251, 150, 220, 196, 251, 218, 110, 196, 148, 230, 148, 78, 30, 140, 196, 164, 8, 170, 209, 184, 63, 39, 54, 184, 64, 224, 254, 140, 54, 0, 113, 21, 181, 181, 133, 214, 122, 196, 193, 191, 43, 148, 160, 224, 228, 40, 58, 5, 86, 52, 182, 115, 237, 178, 79, 151, 178, 64, 35, 231, 105, 189, 90, 235, 225, 47, 151, 177, 215, 191, 50, 76, 136, 160, 238, 98, 102, 119, 60, 40, 132, 44, 235, 164, 7, 109, 131, 44, 59, 59, 99, 8, 115, 208, 119, 251, 143, 37, 17, 128, 163, 109, 178, 118, 6, 165, 21, 243, 19, 139, 185, 114, 209, 135, 185, 96, 246, 101, 24, 194, 112, 147, 6, 126, 253, 134, 212, 67, 227, 94, 8, 194, 255, 173, 24, 89, 178, 97, 207, 121, 2, 168, 154, 160, 254, 9, 249, 98, 136, 1, 125, 81, 198, 74, 211, 103, 117, 147, 46, 246, 146, 119, 242, 40, 173, 8, 73, 147, 168, 17, 39, 17, 170, 35, 25, 105, 32, 98, 196, 6, 109, 211, 191, 63, 49, 124, 196, 233, 137, 24, 53, 98, 132, 101, 132, 162, 147, 7, 33, 112, 180, 141, 163, 108, 44, 101, 161, 53, 212, 134, 235, 104, 111, 222, 196, 69, 115, 174, 96, 93, 203, 22, 194, 70, 4, 173, 245, 160, 254, 82, 107, 141, 70, 149, 132, 24, 88, 15, 91, 89, 244, 89, 61, 164, 139, 125, 100, 237, 20, 150, 178, 74, 55, 54, 69, 141, 24, 137, 112, 146, 250, 72, 35, 81, 35, 62, 104, 59, 63, 253, 88, 109, 55, 94, 113, 65, 253, 134, 151, 194, 40, 157, 208, 177, 252, 17, 118, 118, 191, 194, 235, 221, 219, 217, 159, 222, 203, 209, 220, 97, 114, 118, 134, 130, 39, 166, 239, 46, 13, 97, 16, 49, 162, 36, 66, 117, 180, 196, 90, 153, 87, 219, 70, 91, 114, 37, 203, 234, 87, 209, 28, 155, 89, 218, 223, 208, 139, 5, 250, 71, 156, 117, 225, 122, 106, 66, 181, 244, 22, 187, 137, 135, 106, 168, 49, 107, 169, 143, 52, 49, 39, 177, 144, 21, 13, 237, 172, 106, 92, 207, 140, 248, 236, 210, 126, 252, 245, 70, 64, 191, 133, 10, 129, 192, 45, 59, 158, 239, 98, 79, 239, 14, 246, 244, 238, 96, 127, 106, 55, 93, 185, 195, 164, 138, 189, 228, 157, 28, 182, 42, 122, 110, 215, 173, 191, 20, 178, 84, 255, 230, 88, 43, 139, 234, 150, 177, 162, 161, 157, 101, 245, 171, 169, 13, 39, 75, 45, 228, 15, 131, 170, 97, 181, 162, 82, 183, 19, 14, 188, 115, 11, 4, 89, 43, 205, 239, 186, 158, 226, 153, 142, 199, 216, 221, 251, 123, 250, 138, 221, 128, 235, 18, 77, 25, 66, 10, 137, 68, 150, 92, 151, 223, 47, 41, 20, 74, 59, 216, 202, 198, 86, 22, 66, 72, 106, 195, 73, 22, 214, 46, 165, 189, 121, 19, 235, 102, 108, 97, 118, 205, 252, 1, 199, 85, 94, 159, 217, 223, 64, 135, 50, 251, 40, 56, 121, 34, 70, 140, 68, 168, 150, 218, 80, 114, 144, 85, 15, 180, 64, 237, 45, 242, 26, 104, 57, 157, 217, 67, 188, 220, 245, 52, 47, 117, 61, 203, 27, 125, 187, 232, 43, 246, 160, 180, 131, 33, 77, 76, 97, 34, 133, 225, 186, 95, 111, 155, 145, 234, 47, 133, 65, 99, 180, 153, 179, 26, 215, 114, 254, 172, 183, 179, 166, 105, 163, 187, 12, 102, 192, 133, 95, 73, 42, 34, 168, 127, 231, 150, 64, 208, 83, 56, 206, 99, 7, 254, 139, 223, 28, 124, 144, 35, 217, 131, 222, 85, 27, 243, 6, 250, 126, 64, 164, 71, 136, 64, 93, 89, 132, 119, 97, 128, 198, 209, 14, 69, 39, 143, 173, 108, 106, 66, 181, 44, 78, 174, 96, 195, 140, 173, 172, 159, 177, 133, 150, 216, 172, 210, 150, 253, 141, 36, 25, 154, 37, 114, 215, 222, 234, 82, 185, 24, 34, 98, 198, 74, 241, 82, 215, 51, 60, 115, 248, 49, 118, 117, 111, 35, 85, 236, 197, 144, 38, 17, 25, 45, 213, 29, 239, 162, 45, 157, 199, 41, 234, 47, 112, 23, 163, 217, 202, 34, 239, 228, 17, 8, 22, 212, 181, 241, 182, 185, 239, 230, 194, 217, 151, 19, 53, 227, 131, 250, 217, 74, 48, 46, 65, 7, 222, 185, 149, 183, 115, 60, 188, 255, 62, 30, 218, 247, 51, 142, 231, 187, 136, 154, 49, 119, 133, 157, 231, 98, 198, 139, 47, 146, 210, 14, 5, 39, 143, 173, 44, 234, 194, 245, 44, 111, 88, 195, 250, 25, 23, 176, 186, 105, 3, 205, 165, 149, 236, 229, 81, 112, 242, 188, 222, 243, 42, 207, 31, 126, 156, 151, 143, 62, 75, 87, 182, 195, 189, 0, 205, 24, 134, 48, 189, 186, 107, 198, 187, 178, 175, 191, 223, 215, 20, 156, 60, 69, 167, 192, 220, 196, 66, 174, 90, 124, 29, 23, 204, 126, 7, 82, 72, 175, 15, 247, 47, 226, 113, 28, 107, 172, 130, 186, 243, 142, 238, 149, 245, 114, 215, 179, 220, 179, 235, 118, 14, 164, 118, 19, 51, 19, 132, 100, 168, 20, 254, 87, 3, 33, 36, 18, 129, 173, 109, 242, 78, 14, 173, 20, 181, 225, 122, 22, 212, 45, 97, 89, 253, 42, 22, 215, 45, 167, 181, 102, 30, 117, 225, 6, 162, 70, 20, 41, 76, 247, 187, 118, 134, 158, 194, 49, 246, 165, 246, 176, 171, 251, 21, 118, 117, 111, 231, 112, 246, 45, 28, 101, 19, 49, 99, 132, 100, 152, 74, 93, 128, 39, 173, 187, 231, 25, 10, 78, 158, 130, 147, 103, 117, 243, 70, 62, 186, 252, 51, 44, 168, 91, 58, 200, 211, 141, 121, 255, 99, 17, 212, 15, 36, 10, 78, 158, 127, 223, 245, 143, 60, 178, 255, 62, 76, 25, 34, 106, 196, 170, 42, 228, 112, 248, 150, 235, 104, 187, 228, 150, 165, 144, 68, 141, 56, 241, 80, 130, 168, 17, 67, 10, 137, 163, 29, 114, 118, 134, 172, 157, 166, 96, 231, 65, 64, 88, 70, 8, 27, 17, 4, 98, 194, 235, 237, 11, 155, 177, 211, 132, 100, 152, 15, 44, 185, 153, 43, 23, 125, 216, 253, 165, 23, 19, 140, 105, 191, 163, 21, 212, 23, 243, 96, 250, 77, 110, 223, 246, 183, 236, 238, 221, 65, 93, 56, 137, 134, 113, 205, 61, 86, 130, 254, 190, 211, 181, 50, 71, 59, 165, 49, 164, 0, 47, 152, 49, 74, 125, 167, 158, 96, 17, 135, 67, 122, 227, 223, 180, 213, 203, 185, 51, 47, 225, 19, 171, 190, 68, 109, 56, 57, 230, 76, 213, 168, 4, 245, 197, 124, 229, 232, 115, 220, 190, 237, 171, 100, 172, 52, 113, 51, 49, 238, 229, 145, 213, 98, 56, 215, 53, 217, 2, 14, 143, 59, 100, 75, 89, 61, 204, 173, 89, 196, 231, 214, 126, 141, 185, 137, 133, 131, 134, 84, 101, 239, 169, 92, 65, 251, 111, 195, 123, 132, 31, 108, 255, 58, 82, 26, 132, 100, 120, 92, 11, 151, 3, 6, 99, 8, 147, 156, 147, 33, 110, 214, 242, 133, 181, 183, 122, 169, 200, 209, 137, 90, 150, 160, 254, 78, 127, 115, 240, 1, 238, 216, 254, 117, 162, 166, 155, 197, 153, 108, 23, 59, 29, 145, 194, 160, 232, 228, 9, 201, 48, 95, 88, 247, 117, 86, 54, 174, 29, 149, 168, 167, 116, 210, 142, 111, 153, 29, 143, 114, 199, 171, 223, 32, 106, 198, 17, 200, 64, 204, 42, 161, 180, 67, 216, 136, 96, 105, 139, 111, 191, 244, 151, 236, 238, 221, 225, 245, 179, 229, 181, 247, 136, 130, 250, 57, 202, 237, 199, 254, 143, 59, 94, 253, 6, 17, 35, 234, 102, 87, 166, 100, 63, 52, 125, 80, 90, 17, 150, 17, 10, 78, 158, 127, 120, 233, 175, 56, 146, 61, 84, 214, 116, 32, 140, 32, 168, 159, 113, 233, 200, 28, 224, 246, 109, 95, 69, 224, 174, 181, 9, 44, 115, 98, 80, 218, 33, 110, 38, 56, 156, 125, 139, 191, 123, 241, 75, 110, 26, 148, 83, 223, 6, 57, 108, 114, 94, 15, 184, 13, 239, 142, 237, 183, 146, 42, 246, 148, 238, 220, 154, 250, 203, 164, 78, 127, 124, 47, 216, 83, 56, 70, 91, 242, 44, 222, 187, 228, 134, 82, 31, 122, 170, 164, 195, 240, 179, 45, 90, 129, 48, 248, 183, 63, 220, 201, 246, 238, 87, 72, 134, 27, 41, 106, 155, 169, 116, 167, 242, 116, 69, 8, 3, 91, 21, 64, 217, 188, 167, 237, 122, 222, 219, 118, 61, 17, 35, 74, 185, 233, 199, 19, 4, 245, 231, 5, 119, 117, 61, 205, 243, 111, 254, 7, 243, 67, 9, 180, 206, 87, 186, 222, 1, 195, 32, 132, 137, 178, 123, 8, 133, 155, 184, 110, 205, 95, 179, 166, 105, 125, 233, 225, 87, 229, 38, 25, 134, 12, 91, 188, 156, 138, 157, 34, 253, 212, 187, 144, 217, 3, 8, 99, 124, 171, 207, 3, 202, 68, 152, 8, 171, 23, 85, 183, 18, 99, 253, 29, 68, 227, 11, 80, 218, 70, 8, 99, 84, 185, 221, 193, 22, 234, 185, 90, 253, 198, 15, 169, 73, 237, 68, 132, 155, 97, 138, 102, 129, 166, 21, 194, 0, 171, 27, 26, 214, 193, 134, 31, 163, 195, 13, 222, 216, 115, 244, 235, 15, 6, 108, 161, 221, 29, 231, 15, 163, 247, 221, 131, 54, 107, 33, 200, 2, 85, 31, 97, 128, 157, 70, 212, 157, 141, 216, 112, 55, 132, 27, 96, 12, 41, 63, 159, 126, 65, 125, 235, 60, 240, 19, 200, 31, 66, 132, 155, 2, 235, 172, 54, 66, 130, 147, 135, 200, 12, 228, 186, 59, 33, 220, 232, 26, 209, 56, 86, 49, 120, 61, 173, 103, 157, 78, 14, 125, 232, 23, 96, 196, 2, 235, 156, 8, 188, 201, 115, 217, 254, 109, 168, 89, 48, 110, 49, 193, 23, 212, 11, 122, 244, 145, 95, 67, 122, 183, 43, 104, 144, 13, 170, 46, 194, 4, 171, 7, 209, 246, 25, 104, 222, 234, 122, 195, 10, 172, 47, 242, 44, 212, 139, 162, 58, 126, 53, 238, 29, 6, 148, 129, 144, 96, 167, 160, 97, 35, 98, 201, 45, 94, 89, 101, 22, 139, 73, 215, 221, 74, 55, 24, 58, 254, 28, 24, 241, 146, 197, 6, 84, 11, 183, 205, 197, 242, 63, 7, 25, 242, 186, 183, 202, 36, 109, 100, 201, 221, 118, 191, 0, 133, 35, 238, 1, 2, 119, 91, 61, 132, 1, 86, 10, 102, 94, 134, 104, 190, 160, 20, 140, 86, 138, 254, 244, 67, 215, 19, 94, 39, 29, 80, 85, 180, 2, 25, 65, 44, 250, 88, 85, 118, 47, 17, 6, 104, 27, 221, 251, 50, 24, 238, 178, 203, 128, 42, 33, 164, 59, 230, 108, 58, 31, 209, 176, 158, 82, 119, 87, 65, 220, 189, 101, 247, 67, 246, 0, 200, 112, 208, 127, 86, 21, 1, 40, 152, 243, 30, 247, 99, 21, 218, 90, 2, 232, 244, 31, 220, 168, 107, 12, 169, 166, 128, 114, 17, 160, 138, 16, 157, 133, 104, 190, 208, 43, 170, 252, 141, 75, 238, 30, 83, 187, 130, 68, 66, 181, 17, 18, 156, 28, 162, 126, 45, 68, 90, 60, 235, 172, 252, 116, 164, 107, 146, 249, 125, 32, 133, 43, 111, 208, 133, 86, 7, 1, 8, 7, 26, 171, 251, 224, 100, 19, 64, 29, 239, 64, 103, 36, 20, 157, 160, 15, 173, 22, 2, 176, 77, 140, 196, 89, 85, 61, 140, 137, 114, 176, 94, 237, 68, 117, 56, 16, 46, 6, 130, 86, 5, 225, 118, 105, 161, 24, 177, 183, 47, 236, 47, 171, 2, 166, 46, 164, 208, 133, 20, 24, 18, 68, 224, 111, 171, 130, 0, 108, 27, 81, 211, 132, 72, 52, 123, 101, 213, 17, 84, 98, 101, 209, 197, 140, 155, 173, 8, 244, 172, 18, 2, 148, 131, 136, 213, 131, 25, 237, 47, 171, 2, 82, 23, 179, 224, 88, 167, 197, 115, 236, 78, 107, 180, 130, 72, 194, 251, 127, 245, 44, 71, 98, 229, 65, 249, 201, 225, 192, 68, 171, 131, 187, 158, 86, 200, 144, 247, 185, 154, 130, 42, 203, 75, 16, 87, 237, 24, 1, 128, 27, 24, 169, 254, 255, 87, 9, 25, 24, 229, 68, 224, 62, 8, 75, 23, 51, 238, 199, 42, 26, 143, 68, 202, 160, 255, 156, 8, 132, 129, 46, 244, 85, 189, 123, 147, 24, 97, 55, 45, 21, 88, 106, 21, 209, 32, 77, 200, 30, 71, 231, 186, 75, 69, 213, 64, 138, 80, 12, 164, 193, 192, 71, 190, 4, 84, 24, 173, 65, 26, 232, 108, 15, 186, 175, 195, 47, 172, 202, 161, 36, 225, 56, 194, 140, 4, 25, 162, 106, 35, 13, 116, 49, 131, 58, 178, 203, 253, 92, 165, 161, 139, 36, 20, 119, 199, 71, 42, 136, 116, 171, 143, 70, 189, 245, 187, 170, 30, 65, 138, 72, 2, 17, 241, 87, 201, 7, 138, 86, 13, 173, 17, 70, 4, 181, 255, 5, 183, 173, 75, 221, 92, 101, 49, 1, 68, 77, 51, 218, 113, 16, 90, 4, 193, 81, 181, 208, 10, 204, 40, 234, 200, 46, 84, 199, 107, 200, 217, 107, 92, 183, 91, 225, 17, 134, 43, 104, 114, 22, 66, 88, 8, 83, 131, 10, 20, 173, 26, 210, 68, 103, 187, 113, 118, 254, 106, 128, 160, 149, 61, 132, 59, 193, 29, 159, 143, 157, 10, 33, 116, 8, 212, 233, 247, 88, 238, 211, 6, 33, 192, 78, 162, 158, 123, 8, 243, 252, 207, 34, 162, 113, 42, 61, 186, 48, 1, 44, 231, 44, 142, 61, 62, 15, 89, 95, 15, 78, 176, 20, 165, 170, 24, 6, 170, 183, 7, 86, 253, 154, 196, 187, 222, 13, 142, 2, 163, 114, 235, 114, 77, 128, 208, 130, 5, 238, 213, 98, 79, 173, 23, 132, 79, 75, 20, 8, 35, 66, 223, 79, 239, 39, 241, 206, 43, 43, 42, 38, 120, 139, 196, 204, 214, 153, 24, 13, 13, 104, 219, 9, 210, 128, 213, 70, 41, 68, 77, 156, 194, 182, 109, 164, 126, 249, 223, 110, 89, 5, 189, 162, 68, 107, 100, 50, 137, 57, 119, 14, 88, 197, 64, 208, 137, 64, 41, 68, 52, 74, 207, 15, 239, 194, 233, 233, 113, 173, 180, 66, 137, 6, 137, 114, 51, 68, 225, 101, 75, 209, 182, 29, 8, 58, 17, 104, 141, 136, 68, 176, 247, 239, 167, 231, 123, 223, 119, 203, 84, 101, 50, 117, 165, 144, 54, 178, 106, 85, 32, 230, 68, 226, 56, 200, 100, 146, 190, 159, 223, 79, 250, 129, 135, 92, 43, 173, 128, 235, 149, 190, 136, 145, 149, 43, 144, 181, 137, 32, 202, 157, 72, 180, 70, 70, 163, 28, 255, 198, 183, 40, 238, 220, 85, 17, 81, 221, 249, 80, 32, 52, 127, 1, 161, 249, 243, 209, 133, 2, 126, 89, 64, 149, 209, 26, 76, 19, 149, 203, 113, 228, 139, 127, 129, 221, 209, 49, 110, 81, 93, 229, 28, 7, 164, 32, 178, 122, 53, 186, 24, 4, 70, 19, 138, 82, 136, 88, 12, 251, 208, 33, 58, 111, 249, 28, 246, 225, 206, 113, 137, 58, 200, 20, 99, 155, 54, 186, 214, 25, 220, 39, 58, 177, 56, 14, 162, 38, 129, 181, 247, 13, 14, 127, 226, 83, 88, 123, 246, 246, 139, 58, 74, 45, 92, 65, 61, 23, 27, 105, 95, 131, 57, 99, 6, 88, 193, 178, 206, 9, 199, 113, 16, 137, 4, 246, 193, 67, 116, 220, 252, 113, 114, 79, 60, 217, 63, 156, 25, 133, 181, 122, 175, 6, 18, 160, 20, 70, 83, 19, 145, 246, 53, 168, 124, 62, 232, 71, 39, 3, 199, 65, 196, 98, 168, 124, 158, 206, 207, 125, 158, 227, 183, 125, 215, 141, 105, 12, 195, 29, 214, 148, 33, 236, 192, 247, 71, 1, 16, 223, 186, 37, 112, 185, 147, 137, 82, 8, 211, 68, 212, 212, 208, 251, 163, 187, 56, 116, 221, 77, 100, 127, 251, 164, 107, 96, 190, 197, 142, 48, 102, 237, 127, 120, 163, 55, 55, 231, 116, 29, 229, 224, 53, 31, 65, 103, 50, 21, 205, 96, 4, 140, 22, 1, 166, 129, 206, 102, 209, 182, 77, 236, 188, 243, 72, 222, 112, 29, 177, 141, 235, 71, 236, 14, 7, 63, 141, 83, 41, 144, 146, 174, 47, 127, 133, 236, 3, 15, 34, 147, 117, 193, 184, 116, 178, 145, 238, 235, 179, 84, 58, 13, 210, 32, 186, 106, 37, 137, 107, 174, 161, 230, 242, 203, 134, 157, 32, 31, 242, 52, 78, 247, 159, 216, 101, 151, 115, 236, 193, 39, 48, 116, 12, 77, 176, 120, 108, 82, 241, 154, 95, 36, 226, 8, 195, 32, 243, 212, 43, 24, 107, 207, 165, 230, 114, 208, 74, 33, 134, 204, 214, 12, 22, 212, 11, 132, 162, 27, 55, 242, 210, 226, 27, 232, 233, 200, 96, 134, 141, 81, 191, 109, 62, 160, 10, 8, 208, 182, 38, 178, 56, 196, 7, 62, 124, 141, 91, 54, 76, 224, 106, 14, 221, 72, 57, 26, 179, 38, 202, 226, 43, 214, 240, 244, 237, 207, 16, 139, 134, 81, 78, 96, 165, 147, 141, 148, 146, 92, 95, 142, 179, 222, 183, 138, 154, 214, 36, 218, 209, 8, 227, 196, 190, 244, 132, 199, 158, 248, 15, 230, 88, 113, 249, 82, 94, 190, 247, 37, 28, 203, 70, 200, 96, 241, 216, 100, 163, 109, 135, 120, 50, 194, 234, 171, 207, 118, 11, 78, 50, 170, 60, 161, 88, 8, 129, 86, 154, 228, 188, 122, 22, 93, 184, 136, 98, 166, 136, 12, 198, 164, 147, 138, 52, 36, 133, 76, 129, 182, 75, 150, 208, 176, 176, 1, 173, 244, 73, 95, 50, 63, 162, 82, 171, 175, 94, 133, 25, 49, 209, 193, 74, 192, 73, 69, 57, 138, 112, 60, 204, 154, 15, 173, 62, 229, 119, 135, 21, 84, 72, 129, 214, 154, 89, 237, 179, 88, 176, 121, 62, 133, 76, 193, 117, 187, 1, 19, 142, 52, 36, 133, 116, 145, 182, 139, 23, 51, 99, 197, 12, 215, 58, 71, 208, 226, 228, 22, 234, 25, 229, 57, 215, 156, 131, 52, 2, 151, 59, 89, 184, 214, 25, 98, 237, 71, 214, 149, 245, 253, 147, 42, 229, 91, 233, 188, 115, 231, 177, 96, 243, 124, 138, 233, 192, 74, 39, 26, 105, 72, 10, 169, 2, 203, 46, 91, 198, 140, 21, 45, 167, 180, 78, 56, 213, 219, 9, 61, 43, 93, 119, 221, 122, 132, 25, 220, 67, 58, 161, 8, 112, 108, 135, 88, 99, 140, 141, 55, 110, 40, 149, 157, 138, 17, 5, 21, 210, 141, 120, 231, 174, 159, 67, 219, 197, 109, 20, 82, 133, 192, 253, 78, 16, 82, 74, 138, 169, 34, 231, 124, 176, 157, 228, 220, 36, 202, 81, 39, 141, 108, 7, 109, 87, 238, 1, 206, 189, 121, 35, 225, 68, 144, 100, 152, 8, 132, 20, 88, 57, 139, 166, 165, 77, 172, 251, 168, 219, 119, 150, 59, 116, 60, 229, 183, 132, 20, 104, 71, 211, 188, 180, 153, 85, 87, 175, 162, 208, 23, 88, 233, 68, 160, 108, 197, 249, 159, 62, 143, 80, 60, 228, 14, 27, 203, 12, 95, 70, 37, 251, 134, 27, 215, 83, 191, 160, 30, 187, 96, 151, 101, 254, 1, 163, 71, 26, 146, 124, 95, 158, 101, 151, 45, 163, 237, 146, 182, 178, 2, 161, 65, 219, 151, 243, 37, 33, 92, 43, 141, 213, 199, 216, 244, 241, 77, 88, 121, 203, 127, 159, 68, 240, 167, 130, 127, 16, 2, 187, 104, 147, 152, 145, 96, 203, 45, 231, 123, 141, 95, 142, 66, 253, 148, 253, 8, 107, 97, 184, 195, 152, 179, 174, 92, 193, 238, 199, 118, 179, 239, 127, 247, 16, 73, 70, 80, 78, 16, 250, 86, 10, 67, 64, 54, 107, 177, 249, 139, 23, 81, 219, 90, 123, 210, 4, 252, 72, 140, 233, 153, 228, 91, 63, 187, 133, 61, 59, 186, 40, 230, 109, 100, 68, 4, 139, 26, 42, 128, 33, 5, 233, 116, 129, 21, 239, 88, 198, 170, 247, 156, 141, 214, 163, 23, 19, 78, 120, 127, 232, 169, 113, 148, 198, 144, 130, 31, 60, 215, 201, 167, 158, 236, 162, 41, 110, 96, 7, 185, 222, 113, 33, 5, 20, 21, 36, 13, 120, 234, 253, 11, 89, 216, 18, 71, 105, 111, 177, 194, 40, 25, 181, 160, 128, 123, 245, 8, 193, 149, 191, 238, 228, 129, 189, 41, 140, 168, 137, 19, 136, 58, 102, 164, 0, 85, 84, 220, 125, 233, 76, 174, 95, 156, 40, 25, 205, 88, 24, 147, 160, 254, 213, 179, 47, 109, 115, 238, 253, 7, 56, 82, 112, 144, 50, 112, 189, 99, 193, 148, 2, 43, 111, 115, 227, 202, 36, 63, 186, 104, 38, 142, 214, 24, 227, 24, 65, 140, 73, 80, 0, 91, 131, 41, 224, 222, 189, 105, 174, 125, 180, 3, 35, 44, 9, 226, 163, 209, 33, 5, 40, 75, 179, 188, 33, 196, 211, 87, 205, 163, 49, 44, 199, 253, 196, 133, 49, 103, 8, 76, 1, 142, 134, 107, 22, 39, 248, 147, 213, 245, 56, 121, 7, 51, 200, 55, 148, 141, 240, 158, 182, 26, 54, 4, 119, 93, 52, 147, 70, 207, 32, 198, 59, 186, 31, 151, 4, 190, 155, 255, 246, 230, 102, 182, 204, 173, 193, 46, 40, 204, 96, 70, 166, 44, 12, 64, 91, 138, 239, 108, 105, 225, 188, 25, 81, 108, 173, 25, 67, 80, 123, 2, 227, 18, 84, 224, 246, 167, 97, 41, 184, 231, 146, 153, 204, 169, 13, 97, 91, 106, 76, 209, 217, 153, 68, 72, 10, 236, 188, 195, 103, 218, 235, 249, 228, 138, 58, 28, 13, 102, 133, 50, 111, 227, 118, 146, 210, 115, 189, 11, 19, 38, 247, 94, 218, 74, 212, 16, 238, 122, 237, 64, 212, 97, 49, 165, 192, 202, 57, 92, 217, 86, 203, 119, 206, 107, 113, 31, 212, 89, 193, 182, 170, 72, 175, 103, 8, 176, 181, 102, 235, 204, 40, 247, 92, 218, 234, 42, 124, 226, 162, 238, 51, 30, 211, 179, 204, 205, 115, 98, 252, 228, 109, 51, 75, 141, 95, 201, 102, 26, 115, 148, 59, 28, 182, 214, 152, 66, 112, 247, 238, 20, 55, 62, 214, 137, 12, 9, 119, 173, 239, 4, 70, 191, 82, 120, 111, 165, 66, 12, 223, 82, 218, 253, 75, 225, 222, 73, 48, 81, 85, 243, 197, 108, 159, 17, 229, 209, 119, 206, 166, 37, 106, 140, 57, 121, 48, 226, 113, 42, 186, 51, 33, 176, 53, 220, 176, 164, 22, 173, 225, 230, 199, 59, 65, 130, 148, 162, 106, 162, 10, 192, 16, 2, 13, 56, 90, 163, 108, 237, 94, 65, 165, 140, 247, 208, 3, 123, 66, 75, 1, 134, 64, 74, 144, 66, 160, 180, 174, 90, 29, 67, 158, 155, 93, 219, 26, 229, 129, 203, 171, 39, 38, 84, 216, 66, 125, 252, 49, 234, 47, 246, 103, 184, 246, 177, 195, 228, 44, 141, 25, 150, 21, 77, 17, 186, 17, 161, 192, 113, 148, 123, 64, 32, 20, 145, 204, 75, 132, 88, 92, 107, 50, 175, 198, 164, 53, 110, 80, 99, 74, 194, 82, 224, 104, 200, 59, 154, 174, 188, 67, 71, 214, 230, 141, 148, 197, 238, 148, 77, 58, 107, 187, 247, 143, 152, 2, 105, 138, 82, 160, 87, 137, 154, 250, 239, 7, 180, 115, 14, 151, 44, 74, 240, 243, 75, 91, 169, 15, 203, 170, 137, 9, 85, 18, 20, 220, 167, 204, 153, 18, 94, 60, 86, 224, 131, 143, 29, 102, 207, 177, 34, 102, 84, 122, 150, 52, 182, 125, 186, 214, 232, 182, 191, 42, 42, 208, 208, 84, 27, 226, 29, 115, 98, 92, 49, 55, 206, 166, 150, 40, 139, 106, 77, 66, 101, 182, 214, 225, 156, 195, 139, 199, 10, 60, 252, 86, 150, 95, 30, 200, 242, 198, 241, 130, 219, 247, 135, 37, 134, 116, 31, 195, 55, 150, 170, 10, 220, 100, 187, 178, 21, 202, 214, 124, 114, 77, 61, 223, 219, 220, 140, 225, 101, 211, 170, 25, 48, 86, 77, 80, 232, 183, 212, 222, 162, 226, 150, 103, 143, 242, 175, 59, 250, 64, 128, 17, 118, 159, 227, 80, 174, 37, 72, 225, 186, 69, 199, 209, 104, 75, 129, 33, 216, 60, 43, 198, 39, 150, 215, 113, 213, 130, 26, 26, 134, 100, 88, 148, 246, 110, 218, 26, 238, 212, 132, 219, 191, 202, 33, 93, 108, 193, 209, 60, 122, 48, 203, 247, 119, 246, 241, 232, 129, 44, 118, 81, 185, 194, 26, 229, 187, 227, 146, 144, 74, 163, 10, 138, 166, 90, 147, 239, 158, 223, 194, 181, 139, 19, 165, 164, 65, 181, 163, 255, 170, 10, 10, 253, 1, 145, 20, 240, 200, 193, 44, 127, 246, 194, 113, 182, 31, 206, 185, 47, 186, 8, 121, 111, 25, 97, 216, 158, 14, 237, 111, 111, 107, 112, 20, 209, 168, 201, 85, 11, 107, 248, 211, 149, 73, 206, 155, 25, 45, 9, 226, 6, 213, 26, 137, 64, 156, 36, 22, 26, 14, 237, 9, 175, 117, 127, 50, 92, 0, 219, 187, 139, 124, 231, 181, 94, 126, 178, 39, 69, 38, 235, 222, 219, 163, 67, 178, 116, 17, 12, 87, 87, 5, 104, 71, 131, 165, 48, 195, 6, 31, 89, 94, 203, 173, 235, 154, 152, 21, 55, 112, 52, 39, 92, 64, 213, 162, 234, 130, 66, 127, 159, 100, 8, 176, 148, 230, 151, 251, 179, 220, 177, 171, 143, 39, 59, 243, 100, 243, 182, 251, 75, 49, 164, 181, 188, 106, 153, 97, 201, 217, 13, 97, 222, 187, 48, 193, 71, 219, 106, 89, 84, 107, 150, 246, 169, 112, 19, 217, 149, 104, 40, 191, 43, 144, 3, 170, 114, 48, 107, 115, 207, 238, 52, 63, 125, 35, 205, 246, 227, 5, 44, 75, 245, 215, 117, 224, 150, 26, 144, 130, 214, 218, 16, 239, 158, 23, 231, 150, 149, 73, 86, 53, 132, 7, 157, 247, 68, 49, 33, 130, 250, 12, 117, 59, 123, 83, 22, 255, 211, 145, 227, 133, 174, 2, 123, 83, 22, 61, 69, 133, 33, 160, 54, 36, 153, 87, 99, 114, 78, 83, 132, 173, 51, 163, 172, 110, 140, 96, 138, 254, 125, 64, 117, 27, 201, 209, 192, 0, 171, 117, 180, 230, 181, 110, 139, 39, 59, 115, 188, 120, 172, 200, 129, 140, 77, 218, 82, 104, 160, 49, 34, 89, 158, 12, 179, 117, 102, 148, 139, 103, 197, 168, 15, 203, 97, 207, 117, 162, 248, 127, 200, 187, 45, 151, 66, 53, 73, 191, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130}} + var resourceCameraSvg = &fyne.StaticResource{ StaticName: "camera.svg", StaticContent: []byte{ @@ -22,6 +27,11 @@ var resourceLayersTripleSvg = &fyne.StaticResource{ StaticContent: []byte{ 60, 63, 120, 109, 108, 32, 118, 101, 114, 115, 105, 111, 110, 61, 34, 49, 46, 48, 34, 32, 101, 110, 99, 111, 100, 105, 110, 103, 61, 34, 85, 84, 70, 45, 56, 34, 63, 62, 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 115, 118, 103, 32, 80, 85, 66, 76, 73, 67, 32, 34, 45, 47, 47, 87, 51, 67, 47, 47, 68, 84, 68, 32, 83, 86, 71, 32, 49, 46, 49, 47, 47, 69, 78, 34, 32, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 71, 114, 97, 112, 104, 105, 99, 115, 47, 83, 86, 71, 47, 49, 46, 49, 47, 68, 84, 68, 47, 115, 118, 103, 49, 49, 46, 100, 116, 100, 34, 62, 60, 115, 118, 103, 32, 120, 109, 108, 110, 115, 61, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 50, 48, 48, 48, 47, 115, 118, 103, 34, 32, 120, 109, 108, 110, 115, 58, 120, 108, 105, 110, 107, 61, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 49, 57, 57, 57, 47, 120, 108, 105, 110, 107, 34, 32, 118, 101, 114, 115, 105, 111, 110, 61, 34, 49, 46, 49, 34, 32, 119, 105, 100, 116, 104, 61, 34, 50, 52, 34, 32, 104, 101, 105, 103, 104, 116, 61, 34, 50, 52, 34, 32, 118, 105, 101, 119, 66, 111, 120, 61, 34, 48, 32, 48, 32, 50, 52, 32, 50, 52, 34, 62, 60, 112, 97, 116, 104, 32, 100, 61, 34, 77, 49, 50, 32, 48, 76, 51, 32, 55, 76, 52, 46, 54, 51, 32, 56, 46, 50, 55, 76, 49, 50, 32, 49, 52, 76, 49, 57, 46, 51, 54, 32, 56, 46, 50, 55, 76, 50, 49, 32, 55, 76, 49, 50, 32, 48, 77, 49, 57, 46, 51, 55, 32, 49, 48, 46, 55, 51, 76, 49, 50, 32, 49, 54, 46, 52, 55, 76, 52, 46, 54, 50, 32, 49, 48, 46, 55, 52, 76, 51, 32, 49, 50, 76, 49, 50, 32, 49, 57, 76, 50, 49, 32, 49, 50, 76, 49, 57, 46, 51, 55, 32, 49, 48, 46, 55, 51, 77, 49, 57, 46, 51, 55, 32, 49, 53, 46, 55, 51, 76, 49, 50, 32, 50, 49, 46, 52, 55, 76, 52, 46, 54, 50, 32, 49, 53, 46, 55, 52, 76, 51, 32, 49, 55, 76, 49, 50, 32, 50, 52, 76, 50, 49, 32, 49, 55, 76, 49, 57, 46, 51, 55, 32, 49, 53, 46, 55, 51, 90, 34, 32, 47, 62, 60, 47, 115, 118, 103, 62}} +var resourcePageLayoutSidebarRightSvg = &fyne.StaticResource{ + StaticName: "page-layout-sidebar-right.svg", + StaticContent: []byte{ + 60, 63, 120, 109, 108, 32, 118, 101, 114, 115, 105, 111, 110, 61, 34, 49, 46, 48, 34, 32, 101, 110, 99, 111, 100, 105, 110, 103, 61, 34, 85, 84, 70, 45, 56, 34, 63, 62, 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 115, 118, 103, 32, 80, 85, 66, 76, 73, 67, 32, 34, 45, 47, 47, 87, 51, 67, 47, 47, 68, 84, 68, 32, 83, 86, 71, 32, 49, 46, 49, 47, 47, 69, 78, 34, 32, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 71, 114, 97, 112, 104, 105, 99, 115, 47, 83, 86, 71, 47, 49, 46, 49, 47, 68, 84, 68, 47, 115, 118, 103, 49, 49, 46, 100, 116, 100, 34, 62, 60, 115, 118, 103, 32, 120, 109, 108, 110, 115, 61, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 50, 48, 48, 48, 47, 115, 118, 103, 34, 32, 120, 109, 108, 110, 115, 58, 120, 108, 105, 110, 107, 61, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 49, 57, 57, 57, 47, 120, 108, 105, 110, 107, 34, 32, 118, 101, 114, 115, 105, 111, 110, 61, 34, 49, 46, 49, 34, 32, 119, 105, 100, 116, 104, 61, 34, 50, 52, 34, 32, 104, 101, 105, 103, 104, 116, 61, 34, 50, 52, 34, 32, 118, 105, 101, 119, 66, 111, 120, 61, 34, 48, 32, 48, 32, 50, 52, 32, 50, 52, 34, 62, 60, 112, 97, 116, 104, 32, 100, 61, 34, 77, 54, 44, 50, 72, 49, 56, 65, 50, 44, 50, 32, 48, 32, 48, 44, 49, 32, 50, 48, 44, 52, 86, 50, 48, 65, 50, 44, 50, 32, 48, 32, 48, 44, 49, 32, 49, 56, 44, 50, 50, 72, 54, 65, 50, 44, 50, 32, 48, 32, 48, 44, 49, 32, 52, 44, 50, 48, 86, 52, 65, 50, 44, 50, 32, 48, 32, 48, 44, 49, 32, 54, 44, 50, 77, 49, 52, 44, 56, 86, 49, 54, 72, 49, 56, 86, 56, 72, 49, 52, 90, 34, 32, 47, 62, 60, 47, 115, 118, 103, 62}} + var resourcePaletteSvg = &fyne.StaticResource{ StaticName: "palette.svg", StaticContent: []byte{ @@ -35,7 +45,7 @@ var resourcePauseSvg = &fyne.StaticResource{ var resourceResourcesMd = &fyne.StaticResource{ StaticName: "resources.md", StaticContent: []byte{ - 35, 32, 82, 101, 115, 111, 117, 114, 99, 101, 115, 10, 10, 35, 35, 32, 83, 111, 117, 114, 99, 101, 115, 10, 10, 45, 32, 70, 114, 111, 109, 32, 104, 116, 116, 112, 115, 58, 47, 47, 109, 97, 116, 101, 114, 105, 97, 108, 100, 101, 115, 105, 103, 110, 105, 99, 111, 110, 115, 46, 99, 111, 109, 47, 105, 99, 111, 110, 123, 105, 99, 111, 110, 45, 110, 97, 109, 101, 125, 58, 10, 32, 32, 32, 32, 45, 32, 114, 101, 115, 116, 97, 114, 116, 10, 32, 32, 32, 32, 45, 32, 102, 97, 115, 116, 45, 102, 111, 114, 119, 97, 114, 100, 10, 32, 32, 32, 32, 45, 32, 112, 97, 117, 115, 101, 10, 32, 32, 32, 32, 45, 32, 112, 97, 108, 101, 116, 116, 101, 10, 32, 32, 32, 32, 45, 32, 108, 97, 121, 101, 114, 115, 45, 116, 114, 105, 112, 108, 101, 10, 32, 32, 32, 32, 45, 32, 102, 111, 114, 109, 97, 116, 45, 102, 111, 110, 116, 10, 10, 35, 35, 32, 66, 117, 105, 108, 100, 105, 110, 103, 32, 114, 101, 115, 111, 117, 114, 99, 101, 115, 46, 103, 111, 10, 10, 96, 96, 96, 10, 126, 47, 103, 111, 47, 98, 105, 110, 47, 102, 121, 110, 101, 32, 98, 117, 110, 100, 108, 101, 32, 114, 101, 115, 111, 117, 114, 99, 101, 115, 32, 62, 32, 114, 101, 115, 111, 117, 114, 99, 101, 115, 46, 103, 111, 10, 96, 96, 96, 10}} + 35, 32, 82, 101, 115, 111, 117, 114, 99, 101, 115, 10, 10, 35, 35, 32, 83, 111, 117, 114, 99, 101, 115, 10, 10, 45, 32, 70, 114, 111, 109, 32, 104, 116, 116, 112, 115, 58, 47, 47, 109, 97, 116, 101, 114, 105, 97, 108, 100, 101, 115, 105, 103, 110, 105, 99, 111, 110, 115, 46, 99, 111, 109, 47, 105, 99, 111, 110, 123, 105, 99, 111, 110, 45, 110, 97, 109, 101, 125, 58, 10, 32, 32, 32, 32, 45, 32, 114, 101, 115, 116, 97, 114, 116, 10, 32, 32, 32, 32, 45, 32, 102, 97, 115, 116, 45, 102, 111, 114, 119, 97, 114, 100, 10, 32, 32, 32, 32, 45, 32, 112, 97, 117, 115, 101, 10, 32, 32, 32, 32, 45, 32, 112, 97, 108, 101, 116, 116, 101, 10, 32, 32, 32, 32, 45, 32, 108, 97, 121, 101, 114, 115, 45, 116, 114, 105, 112, 108, 101, 10, 32, 32, 32, 32, 45, 32, 102, 111, 114, 109, 97, 116, 45, 102, 111, 110, 116, 10, 32, 32, 32, 32, 45, 32, 99, 97, 109, 101, 114, 97, 10, 32, 32, 32, 32, 45, 32, 112, 97, 103, 101, 45, 108, 97, 121, 111, 117, 116, 45, 115, 105, 100, 101, 98, 97, 114, 45, 114, 105, 103, 104, 116, 10, 10, 45, 32, 104, 116, 116, 112, 115, 58, 47, 47, 119, 119, 119, 46, 105, 99, 111, 110, 102, 105, 110, 100, 101, 114, 46, 99, 111, 109, 47, 105, 99, 111, 110, 115, 47, 50, 56, 49, 55, 49, 48, 47, 114, 97, 105, 110, 98, 111, 119, 95, 97, 112, 112, 108, 101, 95, 105, 99, 111, 110, 10, 10, 35, 35, 32, 66, 117, 105, 108, 100, 105, 110, 103, 32, 114, 101, 115, 111, 117, 114, 99, 101, 115, 46, 103, 111, 10, 10, 96, 96, 96, 10, 126, 47, 103, 111, 47, 98, 105, 110, 47, 102, 121, 110, 101, 32, 98, 117, 110, 100, 108, 101, 32, 114, 101, 115, 111, 117, 114, 99, 101, 115, 32, 62, 32, 114, 101, 115, 111, 117, 114, 99, 101, 115, 46, 103, 111, 10, 96, 96, 96, 10}} var resourceRestartSvg = &fyne.StaticResource{ StaticName: "restart.svg", diff --git a/izapple2fyne/resources/apple2.png b/izapple2fyne/resources/apple2.png new file mode 100644 index 0000000000000000000000000000000000000000..4508c85555cc72f4fc9de9725d158378076dde4b GIT binary patch literal 5723 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 \ No newline at end of file diff --git a/izapple2fyne/resources/resources.md b/izapple2fyne/resources/resources.md index 8cd76c2..a2c09ae 100644 --- a/izapple2fyne/resources/resources.md +++ b/izapple2fyne/resources/resources.md @@ -10,6 +10,9 @@ - layers-triple - format-font - camera + - page-layout-sidebar-right + +- https://www.iconfinder.com/icons/281710/rainbow_apple_icon ## Building resources.go