From 68ba070dfcef413cf9389b1cde30ed7a2c4e2d2c Mon Sep 17 00:00:00 2001 From: BenTalagan Date: Sat, 22 Nov 2025 19:07:49 +0100 Subject: [PATCH] Update OneSmallStep v0.9.21 > v0.9.22 --- MIDI Editor/talagan_OneSmallStep.lua | 53 +++++++++++- ... Change note len param source - (MIDI).lua | 5 +- .../classes/modules/defines.lua | 10 ++- .../classes/modules/settings.lua | 2 + .../classes/modules/time.lua | 15 +++- .../images/note_len_mode_auto.lua | 80 +++++++++++++++++++ 6 files changed, 157 insertions(+), 8 deletions(-) create mode 100644 MIDI Editor/talagan_OneSmallStep/images/note_len_mode_auto.lua diff --git a/MIDI Editor/talagan_OneSmallStep.lua b/MIDI Editor/talagan_OneSmallStep.lua index 292faad9e..3dbc45de1 100644 --- a/MIDI Editor/talagan_OneSmallStep.lua +++ b/MIDI Editor/talagan_OneSmallStep.lua @@ -1,11 +1,11 @@ --[[ @description One Small Step : Alternative Step Input -@version 0.9.21 +@version 0.9.22 @author Ben 'Talagan' Babut @license MIT @metapackage @changelog - - [Cosmetics] Adapted to ImGui 0.10 + - [Feature] Note length "auto" mode (thanks, smandrap !) @provides [main=main,midi_editor] . [main=main,midi_editor] talagan_OneSmallStep/actions/talagan_OneSmallStep Change input mode - (MIDI).lua @@ -22,6 +22,7 @@ [main=main,midi_editor] talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source.lua > talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source - OSS.lua [main=main,midi_editor] talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source.lua > talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source - ItemConf.lua [main=main,midi_editor] talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source.lua > talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source - ProjectGrid.lua + [main=main,midi_editor] talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source.lua > talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source - Auto.lua [main=main,midi_editor] talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len modifier - (MIDI).lua [main=main,midi_editor] talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len modifier.lua > talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len modifier - Straight.lua [main=main,midi_editor] talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len modifier.lua > talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len modifier - Triplet.lua @@ -92,7 +93,7 @@ @stevie, @hipox, @MartinTL, @henu, @Thonex, @smandrap, @SoaSchas, @daodan, @inthevoid, @dahya, @User41, @Spookye, @R.Cato, @samlletas --]] -VERSION = "0.9.21" +VERSION = "0.9.22" DOC_URL = "https://bentalagan.github.io/onesmallstep-doc/index.html?ver=" .. VERSION PATH = debug.getinfo(1,"S").source:match[[^@?(.*[\/])[^\/]-$]] @@ -577,16 +578,48 @@ function ConfSourceMiniBar() TT('Note Length conf : One Small Step\n\nUse the params aside.') SL() + local is_midi_editor_focused = false + if nlm == D.NoteLenParamSource.Auto then + local behaviour = S.getSetting("AutoNoteLengthModeTargetsMidiEditorWhen") + if behaviour == D.AutoNoteLengthModeTargetsMidiEditorWhen.Focused then + is_midi_editor_focused = F.IsActiveMidiEditorFocused() + else + is_midi_editor_focused = (reaper.MIDIEditor_GetActive() ~= nil) + end + end + if ButtonGroupImageButton('note_len_mode_pgrid', nlm == D.NoteLenParamSource.ProjectGrid) then S.setNoteLenParamSource(D.NoteLenParamSource.ProjectGrid) end + + if nlm == D.NoteLenParamSource.Auto and not is_midi_editor_focused then + local draw_list = ImGui.GetWindowDrawList(ctx) + local px, py = ImGui.GetItemRectMin(ctx) + local px2, py2 = ImGui.GetItemRectMax(ctx) + ImGui.DrawList_AddRect(draw_list, px-1,py-1,px2+1,py2+1, ColorSets.Blue.on) + end + TT( "Note Length conf : Project\n\nUse the project's grid conf.") SL() if ButtonGroupImageButton('note_len_mode_inote', nlm == D.NoteLenParamSource.ItemConf) then S.setNoteLenParamSource(D.NoteLenParamSource.ItemConf) end + + if nlm == D.NoteLenParamSource.Auto and is_midi_editor_focused then + local draw_list = ImGui.GetWindowDrawList(ctx) + local px, py = ImGui.GetItemRectMin(ctx) + local px2, py2 = ImGui.GetItemRectMax(ctx) + ImGui.DrawList_AddRect(draw_list, px-1,py-1,px2+1,py2+1, ColorSets.Blue.on) + end + TT( "Note Length conf : MIDI Item\n\nUse the MIDI item's own conf.\n\n('Notes' at the bottom of the MIDI editor)") + SL() + + if ButtonGroupImageButton('note_len_mode_auto', nlm == D.NoteLenParamSource.Auto) then + S.setNoteLenParamSource(D.NoteLenParamSource.Auto) + end + TT( "Note Length conf : Auto\n\nUse the project's grid or the current item's conf, depending on what's focused.") end -- MINIBAR : Note length @@ -1381,6 +1414,16 @@ function SettingsPanel() S.setSetting("SelectInputNotes", not curval) end + ImGui.AlignTextToFramePadding(ctx) + ImGui.TextColored(ctx, 0xFFA0F0FF, "Auto") + SL() + ImGui.Text(ctx, "note length mode uses the Item's configuration when the ME is") + SL() + SettingComboBox("AutoNoteLengthModeTargetsMidiEditorWhen", "", "", 100) + SL() + ImGui.Text(ctx, "else it uses the Project's grid") + + curval = S.getSetting("AlwaysFocusMEOnLaunch") ---@diagnostic disable-next-line: param-type-mismatch if ImGui.Checkbox(ctx, "Always focus the MIDI Editor on launch", curval) then @@ -1737,6 +1780,10 @@ local function UiLoop() ItemGridLabel(ctx,take); SL() XSeparator(); SL() NoteLenOptions(true) + elseif nlm == D.NoteLenParamSource.Auto then + ItemGridLabel(ctx,take); SL() + XSeparator(); SL() + NoteLenOptions(true) end ImGui.PopStyleVar(ctx,3) diff --git a/MIDI Editor/talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source - (MIDI).lua b/MIDI Editor/talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source - (MIDI).lua index 46699876a..dc1b3b7a5 100644 --- a/MIDI Editor/talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source - (MIDI).lua +++ b/MIDI Editor/talagan_OneSmallStep/actions/talagan_OneSmallStep Change note len param source - (MIDI).lua @@ -12,12 +12,13 @@ local _,fname,_,_,_,_,v,ctxs = reaper.get_action_context() local param = fname:match("%- %(([^%s]*)%)%.lua$"); if (param == "MIDI") and (ctxs:match("^midi:")) then - local vcount = 3 + local vcount = 4 local mn = math.floor(0.5 + (v / 127.0) * (vcount-1)) + 1 if(mn == 1) then param = "OSS" elseif(mn == 2) then param = "ProjectGrid" - else param = "ItemConf" + elseif(mn == 3) then param = "ItemConf" + else param = "Auto" end S.setNoteLenParamSource(D.NoteLenParamSource[param]) diff --git a/MIDI Editor/talagan_OneSmallStep/classes/modules/defines.lua b/MIDI Editor/talagan_OneSmallStep/classes/modules/defines.lua index 5788efb13..192ab581d 100644 --- a/MIDI Editor/talagan_OneSmallStep/classes/modules/defines.lua +++ b/MIDI Editor/talagan_OneSmallStep/classes/modules/defines.lua @@ -23,7 +23,8 @@ local NoteLenDefs = { local NoteLenParamSource = { OSS = 0, ProjectGrid = 1, - ItemConf = 2 + ItemConf = 2, + Auto = 3 } local InputMode = { @@ -52,6 +53,11 @@ local EditMode = { Stuff = "Stuff" } +local AutoNoteLengthModeTargetsMidiEditorWhen = { + Focused = "Focused", + Open = "Open" +} + local ActionTriggers = { Commit = { action = "Commit", back = false }, CommitBack = { action = "Commit", back = true }, @@ -170,6 +176,8 @@ return { ModifierKeyCombinations = ModifierKeyCombinations, ModifierKeyCombinationLookup = ModifierKeyCombinationLookup, + AutoNoteLengthModeTargetsMidiEditorWhen = AutoNoteLengthModeTargetsMidiEditorWhen, + ModifierPedals = ModifierPedals, ModifierPedalLookup = ModifierPedalLookup } diff --git a/MIDI Editor/talagan_OneSmallStep/classes/modules/settings.lua b/MIDI Editor/talagan_OneSmallStep/classes/modules/settings.lua index 91b9bfc4a..49e985a90 100644 --- a/MIDI Editor/talagan_OneSmallStep/classes/modules/settings.lua +++ b/MIDI Editor/talagan_OneSmallStep/classes/modules/settings.lua @@ -65,6 +65,8 @@ local SettingDefs = { AutoScrollArrangeView = { type = "bool", default = true }, AlwaysFocusMEOnLaunch = { type = "bool", default = false}, + AutoNoteLengthModeTargetsMidiEditorWhen = { type = "string", default = D.AutoNoteLengthModeTargetsMidiEditorWhen.Focused, inclusion = { D.AutoNoteLengthModeTargetsMidiEditorWhen.Focused, D.AutoNoteLengthModeTargetsMidiEditorWhen.Open } }, + AllowKeyEventNavigation = { type = "bool", default = false }, Disarmed = { type = "bool", default = false }, diff --git a/MIDI Editor/talagan_OneSmallStep/classes/modules/time.lua b/MIDI Editor/talagan_OneSmallStep/classes/modules/time.lua index 7baa433d0..52de76ace 100644 --- a/MIDI Editor/talagan_OneSmallStep/classes/modules/time.lua +++ b/MIDI Editor/talagan_OneSmallStep/classes/modules/time.lua @@ -5,6 +5,7 @@ local D = require "modules/defines" local S = require "modules/settings" +local F = require "modules/focus" local function bool2sign(b) return ((b == true) and (1) or (-1)) @@ -127,9 +128,19 @@ local function ResolveNoteLenQN(take) _, measureStartQN, measureEndQN = reaper.TimeMap_GetMeasureInfo(0, cursorMes - 1) end + local is_midi_editor_focused = false + if nlm == D.NoteLenParamSource.Auto then + local behaviour = S.getSetting("AutoNoteLengthModeTargetsMidiEditorWhen") + if behaviour == D.AutoNoteLengthModeTargetsMidiEditorWhen.Focused then + is_midi_editor_focused = F.IsActiveMidiEditorFocused() + else + is_midi_editor_focused = (reaper.MIDIEditor_GetActive() ~= nil) + end + end + if nlm == D.NoteLenParamSource.OSS then return S.getNoteLenQN() * S.getNoteLenModifierFactor() - elseif nlm == D.NoteLenParamSource.ProjectGrid then + elseif nlm == D.NoteLenParamSource.ProjectGrid or (nlm == D.NoteLenParamSource.Auto and not is_midi_editor_focused) then local _, division, swingmode, swing = reaper.GetSetProjectGrid(0, false) local noteLenQN = division * 4 @@ -153,7 +164,7 @@ local function ResolveNoteLenQN(take) return baselen * S.getNoteLenQN() * S.getNoteLenModifierFactor() - else + elseif nlm == D.NoteLenParamSource.ItemConf or (nlm == D.NoteLenParamSource.Auto and is_midi_editor_focused) then local gridLenQN, swing, noteLenQN = reaper.MIDI_GetGrid(take); local multFactor = S.getNoteLenQN() diff --git a/MIDI Editor/talagan_OneSmallStep/images/note_len_mode_auto.lua b/MIDI Editor/talagan_OneSmallStep/images/note_len_mode_auto.lua new file mode 100644 index 000000000..b821f100c --- /dev/null +++ b/MIDI Editor/talagan_OneSmallStep/images/note_len_mode_auto.lua @@ -0,0 +1,80 @@ +-- @noindex +-- @author Ben 'Talagan' Babut +-- @license MIT +-- @description This is part of One Small Step + +return "\z +\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x14\x00\x00\x00\x14\x08\x06\x00\x00\x00\x8D\x89\x1D\x0D\x00\x00\x00\x04\x67\x41\x4D\z +\x41\x00\x00\xB1\x8F\x0B\xFC\x61\x05\x00\x00\x0A\x49\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\x36\x2D\x32\x2E\x31\x00\x00\x48\x89\x9D\x53\z +\x77\x58\x93\xF7\x16\x3E\xDF\xF7\x65\x0F\x56\x42\xD8\xF0\xB1\x97\x6C\x81\x00\x22\x23\xAC\x08\xC8\x10\x59\xA2\x10\x92\x00\x61\x84\x10\x12\x40\xC5\x85\x88\x0A\x56\z +\x14\x15\x11\x9C\x48\x55\xC4\x82\xD5\x0A\x48\x9D\x88\xE2\xA0\x28\xB8\x67\x41\x8A\x88\x5A\x8B\x55\x5C\x38\xEE\x1F\xDC\xA7\xB5\x7D\x7A\xEF\xED\xED\xFB\xD7\xFB\xBC\z +\xE7\x9C\xE7\xFC\xCE\x79\xCF\x0F\x80\x11\x12\x26\x91\xE6\xA2\x6A\x00\x39\x52\x85\x3C\x3A\xD8\x1F\x8F\x4F\x48\xC4\xC9\xBD\x80\x02\x15\x48\xE0\x04\x20\x10\xE6\xCB\z +\xC2\x67\x05\xC5\x00\x00\xF0\x03\x79\x78\x7E\x74\xB0\x3F\xFC\x01\xAF\x6F\x00\x02\x00\x70\xD5\x2E\x24\x12\xC7\xE1\xFF\x83\xBA\x50\x26\x57\x00\x20\x91\x00\xE0\x22\z +\x12\xE7\x0B\x01\x90\x52\x00\xC8\x2E\x54\xC8\x14\x00\xC8\x18\x00\xB0\x53\xB3\x64\x0A\x00\x94\x00\x00\x6C\x79\x7C\x42\x22\x00\xAA\x0D\x00\xEC\xF4\x49\x3E\x05\x00\z +\xD8\xA9\x93\xDC\x17\x00\xD8\xA2\x1C\xA9\x08\x00\x8D\x01\x00\x99\x28\x47\x24\x02\x40\xBB\x00\x60\x55\x81\x52\x2C\x02\xC0\xC2\x00\xA0\xAC\x40\x22\x2E\x04\xC0\xAE\z +\x01\x80\x59\xB6\x32\x47\x02\x80\xBD\x05\x00\x76\x8E\x58\x90\x0F\x40\x60\x00\x80\x99\x42\x2C\xCC\x00\x20\x38\x02\x00\x43\x1E\x13\xCD\x03\x20\x4C\x03\xA0\x30\xD2\z +\xBF\xE0\xA9\x5F\x70\x85\xB8\x48\x01\x00\xC0\xCB\x95\xCD\x97\x4B\xD2\x33\x14\xB8\x95\xD0\x1A\x77\xF2\xF0\xE0\xE2\x21\xE2\xC2\x6C\xB1\x42\x61\x17\x29\x10\x66\x09\z +\xE4\x22\x9C\x97\x9B\x23\x13\x48\xE7\x03\x4C\xCE\x0C\x00\x00\x1A\xF9\xD1\xC1\xFE\x38\x3F\x90\xE7\xE6\xE4\xE1\xE6\x66\xE7\x6C\xEF\xF4\xC5\xA2\xFE\x6B\xF0\x6F\x22\z +\x3E\x21\xF1\xDF\xFE\xBC\x8C\x02\x04\x00\x10\x4E\xCF\xEF\xDA\x5F\xE5\xE5\xD6\x03\x70\xC7\x01\xB0\x75\xBF\x6B\xA9\x5B\x00\xDA\x56\x00\x68\xDF\xF9\x5D\x33\xDB\x09\z +\xA0\x5A\x0A\xD0\x7A\xF9\x8B\x79\x38\xFC\x40\x1E\x9E\xA1\x50\xC8\x3C\x1D\x1C\x0A\x0B\x0B\xED\x25\x62\xA1\xBD\x30\xE3\x8B\x3E\xFF\x33\xE1\x6F\xE0\x8B\x7E\xF6\xFC\z +\x40\x1E\xFE\xDB\x7A\xF0\x00\x71\x9A\x40\x99\xAD\xC0\xA3\x83\xFD\x71\x61\x6E\x76\xAE\x52\x8E\xE7\xCB\x04\x42\x31\x6E\xF7\xE7\x23\xFE\xC7\x85\x7F\xFD\x8E\x29\xD1\z +\xE2\x34\xB1\x5C\x2C\x15\x8A\xF1\x58\x89\xB8\x50\x22\x4D\xC7\x79\xB9\x52\x91\x44\x21\xC9\x95\xE2\x12\xE9\x7F\x32\xF1\x1F\x96\xFD\x09\x93\x77\x0D\x00\xAC\x86\x4F\z +\xC0\x4E\xB6\x07\xB5\xCB\x6C\xC0\x7E\xEE\x01\x02\x8B\x0E\x58\xD2\x76\x00\x40\x7E\xF3\x2D\x8C\x1A\x0B\x91\x00\x10\x67\x34\x32\x79\xF7\x00\x00\x93\xBF\xF9\x8F\x40\z +\x2B\x01\x00\xCD\x97\xA4\xE3\x00\x00\xBC\xE8\x18\x5C\xA8\x94\x17\x4C\xC6\x08\x00\x00\x44\xA0\x81\x2A\xB0\x41\x07\x0C\xC1\x14\xAC\xC0\x0E\x9C\xC1\x1D\xBC\xC0\x17\z +\x02\x61\x06\x44\x40\x0C\x24\xC0\x3C\x10\x42\x06\xE4\x80\x1C\x0A\xA1\x18\x96\x41\x19\x54\xC0\x3A\xD8\x04\xB5\xB0\x03\x1A\xA0\x11\x9A\xE1\x10\xB4\xC1\x31\x38\x0D\z +\xE7\xE0\x12\x5C\x81\xEB\x70\x17\x06\x60\x18\x9E\xC2\x18\xBC\x86\x09\x04\x41\xC8\x08\x13\x61\x21\x3A\x88\x11\x62\x8E\xD8\x22\xCE\x08\x17\x99\x8E\x04\x22\x61\x48\z +\x34\x92\x80\xA4\x20\xE9\x88\x14\x51\x22\xC5\xC8\x72\xA4\x02\xA9\x42\x6A\x91\x5D\x48\x23\xF2\x2D\x72\x14\x39\x8D\x5C\x40\xFA\x90\xDB\xC8\x20\x32\x8A\xFC\x8A\xBC\z +\x47\x31\x94\x81\xB2\x51\x03\xD4\x02\x75\x40\xB9\xA8\x1F\x1A\x8A\xC6\xA0\x73\xD1\x74\x34\x0F\x5D\x80\x96\xA2\x6B\xD1\x1A\xB4\x1E\x3D\x80\xB6\xA2\xA7\xD1\x4B\xE8\z +\x75\x74\x00\x7D\x8A\x8E\x63\x80\xD1\x31\x0E\x66\x8C\xD9\x61\x5C\x8C\x87\x45\x60\x89\x58\x1A\x26\xC7\x16\x63\xE5\x58\x35\x56\x8F\x35\x63\x1D\x58\x37\x76\x15\x1B\z +\xC0\x9E\x61\xEF\x08\x24\x02\x8B\x80\x13\xEC\x08\x5E\x84\x10\xC2\x6C\x82\x90\x90\x47\x58\x4C\x58\x43\xA8\x25\xEC\x23\xB4\x12\xBA\x08\x57\x09\x83\x84\x31\xC2\x27\z +\x22\x93\xA8\x4F\xB4\x25\x7A\x12\xF9\xC4\x78\x62\x3A\xB1\x90\x58\x46\xAC\x26\xEE\x21\x1E\x21\x9E\x25\x5E\x27\x0E\x13\x5F\x93\x48\x24\x0E\xC9\x92\xE4\x4E\x0A\x21\z +\x25\x90\x32\x49\x0B\x49\x6B\x48\xDB\x48\x2D\xA4\x53\xA4\x3E\xD2\x10\x69\x9C\x4C\x26\xEB\x90\x6D\xC9\xDE\xE4\x08\xB2\x80\xAC\x20\x97\x91\xB7\x90\x0F\x90\x4F\x92\z +\xFB\xC9\xC3\xE4\xB7\x14\x3A\xC5\x88\xE2\x4C\x09\xA2\x24\x52\xA4\x94\x12\x4A\x35\x65\x3F\xE5\x04\xA5\x9F\x32\x42\x99\xA0\xAA\x51\xCD\xA9\x9E\xD4\x08\xAA\x88\x3A\z +\x9F\x5A\x49\x6D\xA0\x76\x50\x2F\x53\x87\xA9\x13\x34\x75\x9A\x25\xCD\x9B\x16\x43\xCB\xA4\x2D\xA3\xD5\xD0\x9A\x69\x67\x69\xF7\x68\x2F\xE9\x74\xBA\x09\xDD\x83\x1E\z +\x45\x97\xD0\x97\xD2\x6B\xE8\x07\xE9\xE7\xE9\x83\xF4\x77\x0C\x0D\x86\x0D\x83\xC7\x48\x62\x28\x19\x6B\x19\x7B\x19\xA7\x18\xB7\x19\x2F\x99\x4C\xA6\x05\xD3\x97\x99\z +\xC8\x54\x30\xD7\x32\x1B\x99\x67\x98\x0F\x98\x6F\x55\x58\x2A\xF6\x2A\x7C\x15\x91\xCA\x12\x95\x3A\x95\x56\x95\x7E\x95\xE7\xAA\x54\x55\x73\x55\x3F\xD5\x79\xAA\x0B\z +\x54\xAB\x55\x0F\xAB\x5E\x56\x7D\xA6\x46\x55\xB3\x50\xE3\xA9\x09\xD4\x16\xAB\xD5\xA9\x1D\x55\xBB\xA9\x36\xAE\xCE\x52\x77\x52\x8F\x50\xCF\x51\x5F\xA3\xBE\x5F\xFD\z +\x82\xFA\x63\x0D\xB2\x86\x85\x46\xA0\x86\x48\xA3\x54\x63\xB7\xC6\x19\x8D\x21\x16\xC6\x32\x65\xF1\x58\x42\xD6\x72\x56\x03\xEB\x2C\x6B\x98\x4D\x62\x5B\xB2\xF9\xEC\z +\x4C\x76\x05\xFB\x1B\x76\x2F\x7B\x4C\x53\x43\x73\xAA\x66\xAC\x66\x91\x66\x9D\xE6\x71\xCD\x01\x0E\xC6\xB1\xE0\xF0\x39\xD9\x9C\x4A\xCE\x21\xCE\x0D\xCE\x7B\x2D\x03\z +\x2D\x3F\x2D\xB1\xD6\x6A\xAD\x66\xAD\x7E\xAD\x37\xDA\x7A\xDA\xBE\xDA\x62\xED\x72\xED\x16\xED\xEB\xDA\xEF\x75\x70\x9D\x40\x9D\x2C\x9D\xF5\x3A\x6D\x3A\xF7\x75\x09\z +\xBA\x36\xBA\x51\xBA\x85\xBA\xDB\x75\xCF\xEA\x3E\xD3\x63\xEB\x79\xE9\x09\xF5\xCA\xF5\x0E\xE9\xDD\xD1\x47\xF5\x6D\xF4\xA3\xF5\x17\xEA\xEF\xD6\xEF\xD1\x1F\x37\x30\z +\x34\x08\x36\x90\x19\x6C\x31\x38\x63\xF0\xCC\x90\x63\xE8\x6B\x98\x69\xB8\xD1\xF0\x84\xE1\xA8\x11\xCB\x68\xBA\x91\xC4\x68\xA3\xD1\x49\xA3\x27\xB8\x26\xEE\x87\x67\z +\xE3\x35\x78\x17\x3E\x66\xAC\x6F\x1C\x62\xAC\x34\xDE\x65\xDC\x6B\x3C\x61\x62\x69\x32\xDB\xA4\xC4\xA4\xC5\xE4\xBE\x29\xCD\x94\x6B\x9A\x66\xBA\xD1\xB4\xD3\x74\xCC\z +\xCC\xC8\x2C\xDC\xAC\xD8\xAC\xC9\xEC\x8E\x39\xD5\x9C\x6B\x9E\x61\xBE\xD9\xBC\xDB\xFC\x8D\x85\xA5\x45\x9C\xC5\x4A\x8B\x36\x8B\xC7\x96\xDA\x96\x7C\xCB\x05\x96\x4D\z +\x96\xF7\xAC\x98\x56\x3E\x56\x79\x56\xF5\x56\xD7\xAC\x49\xD6\x5C\xEB\x2C\xEB\x6D\xD6\x57\x6C\x50\x1B\x57\x9B\x0C\x9B\x3A\x9B\xCB\xB6\xA8\xAD\x9B\xAD\xC4\x76\x9B\z +\x6D\xDF\x14\xE2\x14\x8F\x29\xD2\x29\xF5\x53\x6E\xDA\x31\xEC\xFC\xEC\x0A\xEC\x9A\xEC\x06\xED\x39\xF6\x61\xF6\x25\xF6\x6D\xF6\xCF\x1D\xCC\x1C\x12\x1D\xD6\x3B\x74\z +\x3B\x7C\x72\x74\x75\xCC\x76\x6C\x70\xBC\xEB\xA4\xE1\x34\xC3\xA9\xC4\xA9\xC3\xE9\x57\x67\x1B\x67\xA1\x73\x9D\xF3\x35\x17\xA6\x4B\x90\xCB\x12\x97\x76\x97\x17\x53\z +\x6D\xA7\x8A\xA7\x6E\x9F\x7A\xCB\x95\xE5\x1A\xEE\xBA\xD2\xB5\xD3\xF5\xA3\x9B\xBB\x9B\xDC\xAD\xD9\x6D\xD4\xDD\xCC\x3D\xC5\x7D\xAB\xFB\x4D\x2E\x9B\x1B\xC9\x5D\xC3\z +\x3D\xEF\x41\xF4\xF0\xF7\x58\xE2\x71\xCC\xE3\x9D\xA7\x9B\xA7\xC2\xF3\x90\xE7\x2F\x5E\x76\x5E\x59\x5E\xFB\xBD\x1E\x4F\xB3\x9C\x26\x9E\xD6\x30\x6D\xC8\xDB\xC4\x5B\z +\xE0\xBD\xCB\x7B\x60\x3A\x3E\x3D\x65\xFA\xCE\xE9\x03\x3E\xC6\x3E\x02\x9F\x7A\x9F\x87\xBE\xA6\xBE\x22\xDF\x3D\xBE\x23\x7E\xD6\x7E\x99\x7E\x07\xFC\x9E\xFB\x3B\xFA\z +\xCB\xFD\x8F\xF8\xBF\xE1\x79\xF2\x16\xF1\x4E\x05\x60\x01\xC1\x01\xE5\x01\xBD\x81\x1A\x81\xB3\x03\x6B\x03\x1F\x04\x99\x04\xA5\x07\x35\x05\x8D\x05\xBB\x06\x2F\x0C\z +\x3E\x15\x42\x0C\x09\x0D\x59\x1F\x72\x93\x6F\xC0\x17\xF2\x1B\xF9\x63\x33\xDC\x67\x2C\x9A\xD1\x15\xCA\x08\x9D\x15\x5A\x1B\xFA\x30\xCC\x26\x4C\x1E\xD6\x11\x8E\x86\z +\xCF\x08\xDF\x10\x7E\x6F\xA6\xF9\x4C\xE9\xCC\xB6\x08\x88\xE0\x47\x6C\x88\xB8\x1F\x69\x19\x99\x17\xF9\x7D\x14\x29\x2A\x32\xAA\x2E\xEA\x51\xB4\x53\x74\x71\x74\xF7\z +\x2C\xD6\xAC\xE4\x59\xFB\x67\xBD\x8E\xF1\x8F\xA9\x8C\xB9\x3B\xDB\x6A\xB6\x72\x76\x67\xAC\x6A\x6C\x52\x6C\x63\xEC\x9B\xB8\x80\xB8\xAA\xB8\x81\x78\x87\xF8\x45\xF1\z +\x97\x12\x74\x13\x24\x09\xED\x89\xE4\xC4\xD8\xC4\x3D\x89\xE3\x73\x02\xE7\x6C\x9A\x33\x9C\xE4\x9A\x54\x96\x74\x63\xAE\xE5\xDC\xA2\xB9\x17\xE6\xE9\xCE\xCB\x9E\x77\z +\x3C\x59\x35\x59\x90\x7C\x38\x85\x98\x12\x97\xB2\x3F\xE5\x83\x20\x42\x50\x2F\x18\x4F\xE5\xA7\x6E\x4D\x1D\x13\xF2\x84\x9B\x85\x4F\x45\xBE\xA2\x8D\xA2\x51\xB1\xB7\z +\xB8\x4A\x3C\x92\xE6\x9D\x56\x95\xF6\x38\xDD\x3B\x7D\x43\xFA\x68\x86\x4F\x46\x75\xC6\x33\x09\x4F\x52\x2B\x79\x91\x19\x92\xB9\x23\xF3\x4D\x56\x44\xD6\xDE\xAC\xCF\z +\xD9\x71\xD9\x2D\x39\x94\x9C\x94\x9C\xA3\x52\x0D\x69\x96\xB4\x2B\xD7\x30\xB7\x28\xB7\x4F\x66\x2B\x2B\x93\x0D\xE4\x79\xE6\x6D\xCA\x1B\x93\x87\xCA\xF7\xE4\x23\xF9\z +\x73\xF3\xDB\x15\x6C\x85\x4C\xD1\xA3\xB4\x52\xAE\x50\x0E\x16\x4C\x2F\xA8\x2B\x78\x5B\x18\x5B\x78\xB8\x48\xBD\x48\x5A\xD4\x33\xDF\x66\xFE\xEA\xF9\x23\x0B\x82\x16\z +\x7C\xBD\x90\xB0\x50\xB8\xB0\xB3\xD8\xB8\x78\x59\xF1\xE0\x22\xBF\x45\xBB\x16\x23\x8B\x53\x17\x77\x2E\x31\x5D\x52\xBA\x64\x78\x69\xF0\xD2\x7D\xCB\x68\xCB\xB2\x96\z +\xFD\x50\xE2\x58\x52\x55\xF2\x6A\x79\xDC\xF2\x8E\x52\x83\xD2\xA5\xA5\x43\x2B\x82\x57\x34\x95\xA9\x94\xC9\xCB\x6E\xAE\xF4\x5A\xB9\x63\x15\x61\x95\x64\x55\xEF\x6A\z +\x97\xD5\x5B\x56\x7F\x2A\x17\x95\x5F\xAC\x70\xAC\xA8\xAE\xF8\xB0\x46\xB8\xE6\xE2\x57\x4E\x5F\xD5\x7C\xF5\x79\x6D\xDA\xDA\xDE\x4A\xB7\xCA\xED\xEB\x48\xEB\xA4\xEB\z +\x6E\xAC\xF7\x59\xBF\xAF\x4A\xBD\x6A\x41\xD5\xD0\x86\xF0\x0D\xAD\x1B\xF1\x8D\xE5\x1B\x5F\x6D\x4A\xDE\x74\xA1\x7A\x6A\xF5\x8E\xCD\xB4\xCD\xCA\xCD\x03\x35\x61\x35\z +\xED\x5B\xCC\xB6\xAC\xDB\xF2\xA1\x36\xA3\xF6\x7A\x9D\x7F\x5D\xCB\x56\xFD\xAD\xAB\xB7\xBE\xD9\x26\xDA\xD6\xBF\xDD\x77\x7B\xF3\x0E\x83\x1D\x15\x3B\xDE\xEF\x94\xEC\z +\xBC\xB5\x2B\x78\x57\x6B\xBD\x45\x7D\xF5\x6E\xD2\xEE\x82\xDD\x8F\x1A\x62\x1B\xBA\xBF\xE6\x7E\xDD\xB8\x47\x77\x4F\xC5\x9E\x8F\x7B\xA5\x7B\x07\xF6\x45\xEF\xEB\x6A\z +\x74\x6F\x6C\xDC\xAF\xBF\xBF\xB2\x09\x6D\x52\x36\x8D\x1E\x48\x3A\x70\xE5\x9B\x80\x6F\xDA\x9B\xED\x9A\x77\xB5\x70\x5A\x2A\x0E\xC2\x41\xE5\xC1\x27\xDF\xA6\x7C\x7B\z +\xE3\x50\xE8\xA1\xCE\xC3\xDC\xC3\xCD\xDF\x99\x7F\xB7\xF5\x08\xEB\x48\x79\x2B\xD2\x3A\xBF\x75\xAC\x2D\xA3\x6D\xA0\x3D\xA1\xBD\xEF\xE8\x8C\xA3\x9D\x1D\x5E\x1D\x47\z +\xBE\xB7\xFF\x7E\xEF\x31\xE3\x63\x75\xC7\x35\x8F\x57\x9E\xA0\x9D\x28\x3D\xF1\xF9\xE4\x82\x93\xE3\xA7\x64\xA7\x9E\x9D\x4E\x3F\x3D\xD4\x99\xDC\x79\xF7\x4C\xFC\x99\z +\x6B\x5D\x51\x5D\xBD\x67\x43\xCF\x9E\x3F\x17\x74\xEE\x4C\xB7\x5F\xF7\xC9\xF3\xDE\xE7\x8F\x5D\xF0\xBC\x70\xF4\x22\xF7\x62\xDB\x25\xB7\x4B\xAD\x3D\xAE\x3D\x47\x7E\z +\x70\xFD\xE1\x48\xAF\x5B\x6F\xEB\x65\xF7\xCB\xED\x57\x3C\xAE\x74\xF4\x4D\xEB\x3B\xD1\xEF\xD3\x7F\xFA\x6A\xC0\xD5\x73\xD7\xF8\xD7\x2E\x5D\x9F\x79\xBD\xEF\xC6\xEC\z +\x1B\xB7\x6E\x26\xDD\x1C\xB8\x25\xBA\xF5\xF8\x76\xF6\xED\x17\x77\x0A\xEE\x4C\xDC\x5D\x7A\x8F\x78\xAF\xFC\xBE\xDA\xFD\xEA\x07\xFA\x0F\xEA\x7F\xB4\xFE\xB1\x65\xC0\z +\x6D\xE0\xF8\x60\xC0\x60\xCF\xC3\x59\x0F\xEF\x0E\x09\x87\x9E\xFE\x94\xFF\xD3\x87\xE1\xD2\x47\xCC\x47\xD5\x23\x46\x23\x8D\x8F\x9D\x1F\x1F\x1B\x0D\x1A\xBD\xF2\x64\z +\xCE\x93\xE1\xA7\xB2\xA7\x13\xCF\xCA\x7E\x56\xFF\x79\xEB\x73\xAB\xE7\xDF\xFD\xE2\xFB\x4B\xCF\x58\xFC\xD8\xF0\x0B\xF9\x8B\xCF\xBF\xAE\x79\xA9\xF3\x72\xEF\xAB\xA9\z +\xAF\x3A\xC7\x23\xC7\x1F\xBC\xCE\x79\x3D\xF1\xA6\xFC\xAD\xCE\xDB\x7D\xEF\xB8\xEF\xBA\xDF\xC7\xBD\x1F\x99\x28\xFC\x40\xFE\x50\xF3\xD1\xFA\x63\xC7\xA7\xD0\x4F\xF7\z +\x3E\xE7\x7C\xFE\xFC\x2F\xF7\x84\xF3\xFB\x2D\x47\x38\xCF\x00\x00\x00\x20\x63\x48\x52\x4D\x00\x00\x7A\x26\x00\x00\x80\x84\x00\x00\xFA\x00\x00\x00\x80\xE8\x00\x00\z +\x75\x30\x00\x00\xEA\x60\x00\x00\x3A\x98\x00\x00\x17\x70\x9C\xBA\x51\x3C\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\x9A\x9C\x18\x00\z +\x00\x00\x75\x49\x44\x41\x54\x38\x8D\xE5\x53\x41\x0A\xC0\x30\x08\xAB\x63\x5F\xF0\xFF\x0F\xCC\x23\xDC\xA5\x0C\x15\xDB\x61\xE7\x76\xA9\x97\x22\x91\x10\x4D\x4A\x22\z +\xD2\x2A\xEB\x28\x65\xFB\x82\xF0\x74\xBD\xDE\x9F\x7A\xEF\x5F\x8F\xEB\x3E\x54\x48\x13\x01\x14\xCC\x98\xF9\x88\xF0\x95\x4B\x59\x85\x4B\x84\xBE\x9E\x14\x1B\x9C\xF6\z +\xCB\xE1\x7F\x84\x00\x04\x40\x1A\x33\xA6\x00\x58\x72\x88\x99\xEF\xA8\xF9\xAF\xA7\x33\x28\x6D\x9C\xC9\x21\x56\x7E\xC3\x61\x0E\xFB\xFA\xC4\xCC\x29\x6C\xC3\x60\x5F\z +\x49\x49\x32\x1E\x60\x14\x3E\x55\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82" +;